仅对英特尔可见 — GUID: yeo1585167950989
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: yeo1585167950989
Ixiasoft
3.4.1. 启动间隔与最大频率之间的权衡
离线编译器会尽可能实现给定循环的启动间隔(II)为1。在某些情况下,离线编译器可能会以减低fMAX为代价而争取使启动间隔(II)为1。
请参考如下实例:
kernel void lowered_fmax (global int *dst, int N) { int res = N; #pragma unroll 9 for (int i = 0; i < N; i++) { res += 1; res ^= i; } dst[0] = res; }
下图显示内核lowered_fmax中循环的数据路径。以9为因子部分展开该循环,因而该数据路径中包含原始循环主体的9个副本。为节省篇幅,下图中仅描述其中的三个副本:
图 53. 内核lowered_fmax中部分展开的循环的数据路径
内核lowered_fmax中的循环具有一个涉及res变量的循环携带依赖。这个循环携带的依赖在循环的数据路径中形成可一个循环,如图内核lowered_fmax中部分展开的循环的数据路径所示。
注: 启动下一次迭代时,从一次迭代来的res值必须可用。因此,如果循环要实现II=1,该周期必须最多只能包含一个寄存器。该周期包含一个具有9个加法和XOR的链,因此必须降低fMAX才能使该操作链在一个时钟周期内完成。离线编译器可能会降低内核的fMAX来实现II=1,因为启动间隔(II )是实现良好性能的重要因素。查阅HTML报告以找出是哪些循环其携带的依赖项限制了fMAX。