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

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

2.6.5. Area Report Message中的Private Variable Storage

Area Report提供基于您的OpenCL™设计实现的private memory(专用存储器)的信息。 对于单个work-item内核, Intel® FPGA SDK for OpenCL™ Offline Compiler 根据变量类型,以不同方式实现private memory。离线编译器在各种配置的寄存器中实现标量和小数组(array)(例如,plain寄存器,移位寄存器和桶型移位器(barrel shifter))。offline编译器实现块RAM中的较大数组。
表 6.  Area Report Messages的其它信息
消息 注释
Implementation of Private Memory Using On-Chip Block RAM(使用片上块RAM的Private Memory实现)
Private memory implemented in on-chip block RAM(在片上块RAM中实现的Private memory) 块RAM实现会创建一个类似于NDRange内核局部存储器的系统。
Implementation of Private Memory Using On-Chip Block ROM(使用片上块ROM的Private Memory实现)
每次使用片上块ROM,offline编译器都会对同一ROM创建另外一个实现。offline编译器在片上块ROM中实现的private变量没有显式注释(annotation)。
Implementation of Private Memory Using Registers(使用寄存器的Private Memory实现)
使用如下大小的寄存器的实现:

- <X>寄存器的宽度<Y>个位和深度<Z>

  • 由于循环启动间隔<M>,深度随着因子<N>而增加。
  • 每个寄存器都以基于RAM的FIFO实现,并消耗<U> RAM。

- ...

报告offline编译器实现寄存器中的private变量。Offline编译器可能会在多个寄存器中实现private变量。该消息提供一个关于寄存器及其特定宽度和深度的列表。
Implementation of Private Memory Using Shift Registers(使用移位寄存器的Private Memory实现)
由于具有<N>个或更少tap(抽取)点的移位寄存器而实现。这是一种非常高效的存储类型。

使用以下大小的寄存器的实现:

- <X>寄存器的宽度<Y>位和深度<Z>

  • 由于循环启动间隔<M>,深度随着因子<N>而增加。
  • 每个寄存器都基于RAM的FIFO而实现,并消耗<U>个RAM。

- ...

报告offline编译器在移位寄存器中实现一个private变量。该消息提供一个关于移位寄存器及其特定宽度和深度的列表。
Offline编译器可能基于其抽取点(tap point)将单个数组拆分成多个更小的移位寄存器。
注: Offline编译器可能会高估抽取点的数量。
Implementation of Private Memory Using Barrel Shifters with Registers(通过寄存器实现的Private Memory使用桶型移位器)
由于动态索引,通过寄存器实现为桶型移位器。这是一种高开销存储类型。如果可能,更改为compile-time known indexing(编译时已知索引)。访问该变量的面积成本显示在访问发生的行上。

使用以下大小的寄存器的实现:

- <X>寄存器的宽度<Y>个位和深度<Z>

  • 深度随着因子<N>增加,因为循环迭代间隔<M>
  • 每个寄存器都以基于RAM的FIFO实现,并消耗<U>个 RAM。

- ...

报告由于动态索引,offline编译器通过寄存器将private变量实现为桶型移位器。

报告中的该行不会指定使用private变量的全部区域。该报告显示变量访问的行上其他区域使用情况的信息。

注:
  • 该区域报告对声明或使用private存储器的代码行上的存储器信息进行注释(annotate),具体取决于其实现。
  • 当offline编译器实现片上块RAM中的private存储器时,区域报告显示对private存储器系统的相关local-memory-specific(特定局部存储器)消息。