Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

4.1.2. Avalon® 存储器映射主接口(Host Interface)

默认情况下,组件中的指针通过默认设置实现为 Avalon® Memory Mapped ( Avalon® MM) 主接口。可配置 Avalon® MM主接口缓解默认设置下的低性能。

可使用ihc::mm_host类配置向量加法组件实例的 Avalon® MM主接口,如下:

component void vector_add(
  ihc::mm_host<int, ihc::aspace<1>, ihc::dwidth<8*8*sizeof(int)>, 
                 ihc::align<8*sizeof(int)> >& a,
  ihc::mm_host<int, ihc::aspace<2>, ihc::dwidth<8*8*sizeof(int)>, 
                 ihc::align<8*sizeof(int)> >& b,
  ihc::mm_host<int, ihc::aspace<3>, ihc::dwidth<8*8*sizeof(int)>, 
                 ihc::align<8*sizeof(int)> >& c,
  int N) {
  #pragma unroll 8
  for (int i = 0; i < N; ++i) {
      c[i] = a[i] + b[i];
  }
}
用于向量a,向量b和向量c的存储器接口的特定属性如下:
  • 每个向量按照ihc::aspace属性被分配到各个地址空间,且每个向量接收到一个单独的 Avalon® MM主接口。

    随着向量被分配到不同物理接口,可并行访问各个向量,且不会相互干扰,从而不需要存储器仲裁。

  • 向量的接口宽度可通过ihc::dwidth属性进行调整。
  • 向量的接口对齐方式可通过ihc::align属性进行调整。
下图显示配置该设计时System Viewer中生成的Function View。
图 25. 使用 Avalon® MM MM主接口的vector_add组件的System Viewer Function View


该图显示vector_add.B2有两个负载和一个存储。指针接口中代码实例默认 Avalon® MM Host设置使用的是16个负载和8个存储。

扩展向量接口的宽度和对齐方式后,原始指针接口加载和存储合并为用于每个向量a和向量b,以及向量c的宽存储。

而且,存储器无停顿,因为本实例中的加载和存储访问单独的存储器。

通过英特尔 Quartus Prime编译流程编译 Intel® Arria® 10器件组件得到如下QoR指标:
表 3.  Avalon MM Host接口1的QoR指标比较
QoR指标 指针 Avalon MM Host
ALMs 15593.5 643
DSPs 0 0
RAMs 30 0
fMAX (MHz)2 298.6 472.37
Latency (周期) 24071 142
Initiation Interval (II) (周期) ~508 1
1用于计算QoR指标的编译流程采用英特尔 Quartus Prime Pro Edition 17.1。
2 fMAX的大小由计算单个seed得出。
将组件接口从指针接口改为指定的 Avalon® MM Host接口提高了QoR指标。从而延迟接近于理想延迟值128,并且循环启动间隔(II)为1。
重要: 从指针接口改为指定 Avalon® MM Host接口需要系统具有预期宽度的三个独立存储器。初始指针实现仅需要一个64-bit宽数据总线的系统存储器。如果系统无法提供所需的存储器,则不能使用此优化。