仅对英特尔可见 — GUID: ewa1416320296962
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: ewa1416320296962
Ixiasoft
6.1.3. 将循环携带的依赖项转移到局部存储器
对于您无法删除的循环携带依赖项,可通过将具有循环携带依赖项的数组从全局存储器转移到局部存储器来改善II(启动间隔)。
请参考如下内核实例:
1 #define N 128 2 3 __kernel void unoptimized( __global int* restrict A ) 4 { 5 for (unsigned i = 0; i < N; i++) 6 A[N-i] = A[i]; 7 }

全局存储器访问的延迟很长。本实例中,数组A[i]上循环携带的依赖项导致长延迟。该延迟在优化报告中的反映是II为227。要通过将循环携带的依赖项从全局存储器转移到局部存储器来减少该II值, 请执行以下任务:
- 将具有循环携带依赖项的数组复制到局部存储器。本实例中,数组A[i]成为局部存储器中的数组B[i]。
- 执行数组B[i]上带有循环携带依赖项的循环。
- 将该数组复制回全局存储器。
当您将数组A[i]传输到局部存储器,并且成为数组B[i]后,循环携带的依赖项现在位于B[i]上。因为局部存储器上的延迟比全局存储器低得多,所以II值改善了。
以下是优化后的重构内核:
1 #define N 128 2 3 __kernel void optimized( __global int* restrict A ) 4 { 5 int B[N]; 6 7 for (unsigned i = 0; i < N; i++) 8 B[i] = A[i]; 9 10 for (unsigned i = 0; i < N; i++) 11 B[N-i] = B[i]; 12 13 for (unsigned i = 0; i < N; i++) 14 A[i] = B[i]; 15 }
类似于以下类容的优化报告表明II成功从227减少到2: