Intel® FPGA SDK for OpenCL™ Pro Edition: 最佳实践实践指南

ID 683521
日期 9/26/2022
Public
文档目录

7.3. 多个计算单元

要达到更高的吞吐量, Intel® FPGA SDK for OpenCL™ Offline Compiler可以为每个内核生成多个计算单元。 离线编译器将每个计算单元实现为唯一流水线。通常,每个内核计算单元可以同时执行多个工作组。

要提高整体内核吞吐量,FPGA中的硬件调度程序将工作组分派到其他可用计算单元。一个计算单元可用于工作组分配,但前天是尚未到达其全部容量。

假设每个工作组花费相同的时间来完成其执行。如果离线编译器实现两个计算单元,则每个计算单元执行一半的工作组。因为由硬件调度程序分派工作组,您无需以自己的代码管理这个过程。

离线编译程序不会自动确定内核的最佳计算单元数。要增加内核的计算单元实现,您必须使用num_compute_units属性指定离线编译器应该创建的计算单元的数量,如以下代码范例所示。

__attribute__((num_compute_units(2)))
__kernel void sum (__global const float * restrict a,
                   __global const float * restrict b,
                   __global float * restrict answer)
{
    size_t gid = get_global_id(0);

    answer[gid] = a[gid] + b[gid];
}

增加计算单元的数量可以达到更高的吞吐量。但是,如下图所示,这样做的代价是增加了计算单元之间的全局存储器带宽。也增加了硬件资源的利用率。

图 76. 使用多计算单元的数据流