Intel® FPGA SDK for OpenCL™ Pro Edition: 最佳实践实践指南

ID 683521
日期 9/26/2022
Public
文档目录

8.6. 最小化循环流水线的存储器依赖

Intel® FPGA SDK for OpenCL™ Offline Compiler 确保来自同一线程的存储器访问遵循程序顺序。当您编译NDRange内核时,请使用barrier来同步同一工作组中线程之间的存储器访问。

由于与存储器访问相关的延迟,循环依赖可能会将瓶颈引入单个work-item内核。离线编译器延迟存储器操作,直到依赖项存储器操作完成。这样会影响循环启动间隔(II)。离线编译器指示优化报告中的存储器依赖性。

要最小化存储器依赖对循环流水线的影响:
  • 请确保离线编译器不会假设错误的依赖。
    静态存储器依赖分析无法证明不存在依赖性时,离线编译器会假设依赖性的存在并修改内核执行来强制执行该依赖。如果存储器系统无停顿,则该强制依赖的影响较小。
    • load-store单元上具有数据依赖性的先读后写仅需要两个时钟周期(II=2)。其它无停顿场景最多可能需要七个时钟周期。
    • 先写后读(控制依赖)操作可以由离线编译器完全解决。
  • 如果您确定该循环不包含任何依赖项,则在内核代码的循环之前,先通过添加行#pragma ivdep来覆盖静态存储器依赖性分析。