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

ID 683152
日期 6/22/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

3.1.2. Avalon® 存储器映射主接口

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

可配置ihc::mm_master类向量加法组件实现的 Avalon® MM主接口,如下:

component void vector_add(
  ihc::mm_master<int, ihc::aspace<1>, ihc::dwidth<8*8*sizeof(int)>, 
                 ihc::align<8*sizeof(int)> >& a,
  ihc::mm_master<int, ihc::aspace<2>, ihc::dwidth<8*8*sizeof(int)>, 
                 ihc::align<8*sizeof(int)> >& b,
  ihc::mm_master<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属性进行调整。
下图显示配置该设计时Graph Viewer中生成的Function View。
图 2. 使用 Avalon® MM主接口的vector_add组件的Graph Viewer Function View


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

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

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

通过 Intel® Quartus® Prime编译流程编译 Intel® Arria® 10器件组件得到如下QoR指标:
表 3.  Avalon MM主接口的QoR指标比较1
QoR指标 指针 Avalon MM Master
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指标的编译流程采用 Intel® Quartus® Prime Pro Edition 17.1。
2 fMAX的大小由计算单个seed得出。
将组件接口从指针接口改为指定的 Avalon® MM Master接口提高了QoR指标。从而延迟接近于理想延迟值128,并且循环启动间隔(II)为1。
重要: 从指针接口改为指定 Avalon® MM Master接口需要系统具有预期宽度的三个独立存储器。初始指针实现仅需要一个64-bit宽数据总线的系统存储器。如果系统无法提供所需的存储器,则不能使用此优化。