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

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

8.2. 优化全局存储器访问

Intel® FPGA SDK for OpenCL™ Offline Compiler使用SDRAM作为全局存储器。默认情况下,离线编译器以突发-交叉存取配置(burst-interleaved configuration)方式配置全局存储器。 离线编译器在每个外部存储器bank之间交叉存取全局存储器。

大多数情况下,默认的突发交叉存取配置会带来存储器bank之间的最佳负载平衡。但是,某些情况下,您可能需要手动将Bank分区成两个非交叉存取(但是连续)的存储器区域,以实现更好的负载平衡。

下图说明突发交叉存取(burst-interleaved)和非交叉存取(non-interleaved)存储器分区之间存储器映射模式的差异。

图 79. 全局存储器分区


全局存储器带宽使用

为确保板级规范文件中列出的全局存储器带宽被完全利用,计算内核带宽使用情况就大有益处。report.html文件还在global memory view of the System Viewer中显示内核带宽值。以下方程式说明了如何基于每个LSU计算此值:

图 80. 计算内核带宽使用的方程式

LSU带宽方程是您需要计算的全局存储器带宽使用情况中三个瓶颈的最小值。其余的方程代表会限制LSU带宽的三个瓶颈。这些方程表示忽略其他LSU的情况下,理论上LSU可能消耗的最大带宽。而实际消耗的带宽取决于LSU的访问模式以及所有LSU之间的互连属性。为了估算出总带宽,可在global memory view of the System Viewer的controller中查看LSU带宽总和。

如下表格描述了上述公式中使用的变量:

变量 描述
KWIDTH 内核上LSU的字节宽度。在report.html文件中,称为WIDTH
MWIDTH 面向外部存储器的LSU字节宽度。report.html文件中,称为<Memory Name>_Width
FMAX 内核中的时钟速度,以MHz为单位。report.html文件中,您可以按设计的时钟速度确定该时钟速度。
MaxBandwidth 全局存储器可以达到的最大带宽(以MB/s为测量单位)。您可以在board_spec.xml文件中找到特定全局存储器的此最大带宽。
NUM_CHANNELS 外部存储器具有的接口数量。您可以通过计数该存储器下的board_spec.xml文件中列出的接口数量来获得该值。
NUM_INTERLEAVING_CHANNELS 使能交叉存取时的通道数量。否则,该值为1。
BW1 内核边界处的瓶颈。因此,BW1 仅使用内核值,这意味着,您可以通过优化设计来更改该值。如果该值没有按照其显示的情况,并且限制了总体带宽的使用,那么更改您的设计可以改善内核边界处的瓶颈。
BW2 存储器接口到内核的瓶颈。因此,BW2 使用存储器接口以及FMAX的大小,意味着无论是提高您设计的FMAX,或者切换到具有更宽存储器接口的电路板就可以提高带宽使用率。
BW3 外部存储器中的瓶颈。因此,BW3 专门使用外部存储器属性,并且如果该值限制着您的设计,说明您已经完全利用了电路带宽。