仅对英特尔可见 — GUID: mwh1391807506201
Ixiasoft
产品终止通知
1. Intel® FPGA SDK for OpenCL™ Pro Edition最佳实践指南介绍
2. 查看您Kernel的report.html文件
3. OpenCL内核设计概念
4. OpenCL内核设计最佳实践
5. 分析(Profiling)您的内核来识别性能瓶颈
6. 提高单个Work-Item内核性能的策略
7. 提高NDRange内核数据处理效率的策略
8. 提高存储器访问效率的策略
9. 优化FPGA面积使用的策略
10. 优化英特尔 Stratix 10 OpenCL设计的策略
11. 提高主机应用程序性能的策略
12. Intel® FPGA SDK for OpenCL™ Pro版最佳实践指南存档
A. Intel® FPGA SDK for OpenCL™ Pro版最佳实践指南修订历史
仅对英特尔可见 — GUID: mwh1391807506201
Ixiasoft
7.4. 计算单元复制与内核SIMD矢量化合并
如果您的复制或矢量化OpenCL内核不适用于FPGA,则您可以通过复制计算单元或者矢量化内核来修改内核。 包含num_compute_units属性来修改内核的计算单元数量,并包含num_simd_work_items属性以利用内核矢量化。
考虑这样一种情况,其中内核的num_simd_work_items属性设置为16,不适用于FPGA。如果您复制一个较窄的SIMD内核计算单元来修改该内核,可能会使其适合FPGA。确定计算单元和SIMD宽度之间的最佳平衡可能需要进行一些实验。例如,复制四lane宽的SIMD内核计算单元三次,可能可以实现比复制1个八lane宽的SIMD内核计算单元两次获得更好的吞吐量。
以下实例代码显示如何合并OpenCL™代码中的num_compute_units和num_simd_work_items属性:
__attribute__((num_simd_work_items(4))) __attribute__((num_compute_units(3))) __attribute__((reqd_work_group_size(8,8,1))) __kernel void matrixMult(__global float * restrict C, __global float * restrict A, . . .
下图说明如上所述的内核数据流。num_compute_units 实现3个复制的计算单元。num_simd_work_items实现四个SIMD矢量lane。
图 78. 通过合并计算单元复制和内核SIMD矢量化来优化吞吐量
注意: 您还可以使能资源驱动的优化器来自动确定num_compute_units和num_simd_work_items的最佳组合。
重要: 对填充整个FPGA的硬件设计进行编译比较小的设计更耗时。调整您的内核优化时,请删除重新编译内核之前,先删除增加的SIMD矢量lane数量和计算单元数量。