仅对英特尔可见 — GUID: mwh1391807508964
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: mwh1391807508964
Ixiasoft
8. 提高存储器访问效率的策略
存储器访问效率通常指示为OpenCL™内核的整体性能。 在开发您的OpenCL代码时,尽量减少全局存储器的访问次数大有益处。OpenCL Specification version 1.0描述了四种存储类型:global、constant、local和private存储器。
互连拓扑将共享的全局、常量和局部存储器系统连接到它们的底层存储器。互连包括对存储器端口的访问仲裁。
存储器访问争用共享存储器资源(即,全局、局部和常量存储器)。如果您的OpenCL内核执行大量存储器访问, Intel® FPGA SDK for OpenCL™ Offline Compiler就必须生成复杂的仲裁逻辑来处理存储器访问请求。复杂的仲裁逻辑可能导致最大操作频率(fMAX)的下降,从而降低内核性能。
以下小节将详细讨论存储器访问优化。总而言之,因为以下原因而最小化全局存储器访问是有益的:
- 通常,OpenCL内核性能的提高会导致全局存储器带宽需求的增加。
- 最大全局存储器带宽远小于最大局部存储器带宽。
- FPGA的最大计算带宽远大于全局存储器带宽。
注意: 尽可能使用局部、专用(private)或者常量存储器来增加内核带宽。
- 优化存储器访问的常规指导
优化OpenCL™内核中的存储器访问可提高整体内核性能。 - 优化全局存储器访问
离线编译器在每个外部存储器bank之间交叉存取全局存储器。 - 使用常量、局部或专用存储器执行内核计算
要优化存储器访问效率,请通过在常量、局部或专用存储器中执行OpenCL™内核计算来最大程度减少全局存储器的访问次数。 - 通过Banking(储存)局部存储器来提高内核性能
指定numbanks(N)和bankwidth(M)高级内核属性使您能够配置局部存储器bank以进行并行存储访问。 - 通过控制存储器赋值因子来优化对局部存储器的访问
要控制存储器复制因子,请使用OpenCL™内核中的max_replicates内核属性。 - 最小化循环流水线的存储器依赖
Intel® FPGA SDK for OpenCL™ Offline Compiler 确保来自同一线程的存储器访问遵循程序顺序。当您编译NDRange内核时,请使用barrier来同步同一工作组中线程之间的存储器访问。 - 静态存储器合并
静态存储器合并是一种 Intel® FPGA SDK for OpenCL™ Offline Compiler优化步骤,它尝试减少内核访问非专用(non-private)存储器的次数。