仅对英特尔可见 — GUID: ewa1458581983424
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: ewa1458581983424
Ixiasoft
8.4. 通过Banking(储存)局部存储器来提高内核性能
指定numbanks(N)和bankwidth(M)高级内核属性使您能够配置局部存储器bank以进行并行存储访问。 这些高级内核属性所描述的存储几何决定了您的内核可以并行访问局部存储器系统的哪些单元。
以下代码实例描述了在单个bank中实现的8 x 4局部存储器系统。因此,系统中没有两个单元可以并行访问。
local int lmem[8][4]; #pragma unroll for(int i = 0; i<4; i+=2) { lmem[i][x] = …; }
图 82. 串行访问8 x 4局部存储器系统
为了提高性能,您可以在代码中添加numbanks(N) 和bankwidth(M)来定义存储器bank的数量并且以字节定义bank宽度。以下代码实现8个存储器bank,每个16字节宽。该存储器bank配置实现对8 x 4阵列的并行存储器访问。
local int __attribute__((numbanks(8), bankwidth(16))) lmem[8][4]; #pragma unroll for (int i = 0; i < 4; i+=2) { lmem[i][x & 0x3] = …; }
注意:
为了使能并行访问,您必须屏蔽对较低阵列索引的动态访问。屏蔽较低阵列索引上的动态访问会通知 Intel® FPGA SDK for OpenCL™ Offline Compiler,x不超出较低索引绑定。
图 83. 并行访问具有8个16-Byte-Wide Memory Bank的8 x 4局部存储器Bank
通过对numbanks(N)和bankwidth(M)内核属性指定不同的值,您可以更改并行访问模式。如下代码实现四个存储器bank,每个4-bytes宽。该存储器bank配置实现对8 x 4阵列的并行存储器访问。
local int __attribute__((numbanks(4), bankwidth(4))) lmem[8][4]; #pragma unroll for (int i = 0; i < 4; i+=2) { lmem[x][i] = …; }
图 84. 并行访问带有4个4-字节-宽存储器Banks的8 x 4局部存储器系统