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

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

2.4.2. Kernel Memory Viewer的功能

数据移动是许多算法中的瓶颈。High Level Design Report (report.html)中的Kernel Memory Viewer向您展示了 Intel® FPGA SDK for OpenCL™ Offline Compiler如何解释数据连接并综合您内核的存储器。使用Kernel Memory Viewer有助于识别您内核设计中的数据移动瓶颈。

存储器接入中的某些模式可能会导致load-store units (LSUs)中出现不希望出现的仲裁,这就可能会影响您内核的吞吐量性能。使用Kernel Memory Viewer来识别LSU中不需要的仲裁。

点击System Viewers > Kernel Memory Viewer,访问Kernel Memory Viewer。

下图说明Kernel Memory Viewer的布局:

图 19. Kernel Memory Viewer的布局

Kernel Memory Viewer有如下窗格:

Kernel Memory List(内核存储器清单)
罗列出您设计中的所有存储器。选择存储器名称后,您可以在Kernel Memory Viewer窗格中查看其图形表示。
Kernel Memory Viewer(内核存储器查看器)
显示在Kernel Memory List窗格中选择的存储器系统或者存储器bank的图形表示。
Code View(代码视图)
显示所生成报告的源代码文件。
Details(详细信息)
显示在Kernel Memory List窗格中选择的存储器系统或存储器bank的详细信息。

Kernel Memory List(内核存储器清单)

Kernel Memory List窗格显示内核的层次结构,以及包含在该内核中已综合和优化的存储器(RAM,ROM和寄存器)。

图 20. Kernel Memory List窗格的功能特点和详细信息

下表描述上图中以编号突出显示的每个功能:

表 1.  Kernel Memory List窗口图标和标签
  图标或标签 名称 说明
1 Kernel name 您内核中存储器的列表可以展开或收起。不属于任何内核的存储器显示在(Other)下。
2 RAM

RAM是至少有一次写入的存储器。RAM存储器的名称与您设计中的名称相同。

当您选择存储器名称时,可以在Kernel Memory Viewer窗格中查看RAM的逻辑表示。默认情况下,仅显示存储器系统中的第一个bank。

要选择您希望在Kernel Memory Viewer窗格中显示的bank:

  1. 请展开存储器名称。
  2. 取消选择存储器名称复选框,以收起视图中的所有存储器bank。
  3. 选择存储器名称复选框,以在视图中显示所有存储器bank。
3 ROM

ROM是一个只读存储器。The name of the ROM存储器名称与其在您设计中的名称相同。

当您选择存储器名称时,可以在Kernel Memory Viewer窗格中查看ROM的逻辑表示。默认情况下,仅显示存储器系统中的第一个bank。

要选择您希望在Kernel Memory Viewer窗格中显示的bank:

  1. 请展开存储器名称。
  2. 取消选择存储器名称复选框,以收起视图中的所有存储器bank。
  3. 选择存储器名称复选框,以在视图中显示所有存储器bank。
4 Bank #num Bank

始终与RAM或者ROM相关联的存储器bank。每个bank被命名为Bank #num,其中#num是存储器bank的ID,并从0开始。

  • 在Kernel Memory Viewer窗格中,点击需要在bank视图中显示的bank名称,该窗格中显示bank和其所有复制(replicates)和专用副本(private copies) 的图形表示。该视图有助于您专注于复杂存储器设计的特定存储器bank。
  • 取消选择存储器bank名称的复选框,可收起存储器逻辑表示中的bank。
  • 勾选存储器bank名称复选框,以在存储器逻辑表示中显示需要的bank。
5 Register

寄存器是内核变量,该内核变量通过寄存器中的流水线携带(而非存储在RAM或ROM中)。该寄存器的名称与其在您设计中的名称相同。

您可以专门在FF或者FF组合,以及基于RAM的FIFO中实现寄存器变量。

6 text label Optimized Away

内核变量可以被优化掉(optimized away),因为您的设计中并未使用该变量,或者编译器优化已经改变了变量的所有用途,因而就不必要了。被优化掉的变量的名称与其在您的设计中的名称相同。

7 Filter

使用Kernel Memory List过滤器选择性查看设计中RAM,ROM,寄存器和被优化掉的变量的列表。

当您取消选择过滤器中某个项相关的复选框时,会将该项从整个Kernel Memory List中隐藏。过滤您的Kernel Memory List有助于您关注于设计中特定类型的存储器。

Kernel Memory Viewer(内核存储器查看器)

在Kernel Memory Viewer窗格中,您可以查看加载与储存到存储器系统中Bank上特定逻辑端口的连接。您还可以查看针对您的存储器系统中每个bank创建的复制(replicates)和专用副本(private copies)的数量。您可在Kernel Memory Viewer窗格中查看的节点类型如下,(取决于内核存储器系统和您在Kernel Memory List窗格中的选择):

表 2.  Kernel Memory Viewer窗格中观察到的节点类型
节点类型 说明
Memory node(存储器节点) 您的设计中给定变量的存储器系统。
Bank node(Bank节点) 存储器系统中的bank。存储器系统至少包含一个bank。存储器bank能够连接到一个或者多个端口节点。仅显示在Kernel Memory List窗格中选择的bank。
Replication node(复制节点) 复制节点显示的存储器bank复制是为了有效支持多次访问局部存储器而创建的。该bank包含至少一个复制。您只有在Kernel Memory List窗格中单击该存储器bank名称进行查看时才能看到其复制节点。
Private-copy node(专用副本节点) 专用副本节点显示的是复制内的专用副本,而该复制是为了允许同时执行多次循环迭代而创建的。一个复制至少包含一个专用副本。您只有在Kernel Memory List窗格中单击该存储器bank名称进行查看时才能看到其专用副本节点
Port node(端口节点)

对局部存储器的每次读取或者写入都被映射到一个端口。bank的逻辑端口。有三种类型的端口:

  • R:只读端口
  • W:只写端口
  • RW:读写端口
LSU node 通过端口节点连接到存储器的存储(ST)或者加载(LD)节点。
Arbitration node(仲裁节点) 仲裁(ARB)节点显示LSU竞争访问共享端口节点,从而可能导致停顿。
Port-sharing node(共享端口的节点) 共享端口的节点(SHARE)表明LSU对共享节点的互斥访问权限,因此加载-储存单元就不会停顿。

您可以在Kernel Memory View窗格的存储器图形表示中执行如下操作:

  • 将鼠标光标悬停在任意节点上就能查看该节点的属性。
  • 将鼠标光标悬停在LSU节点上来突出显示从LSU节点到LSU连接的所有端口的路径。
  • 鼠标光标悬停在端口节点上来突出显示从端口节点到读/写端口节点的所有LSU的路径。
  • 单击选择一个节点,在Details窗格中显示节点属性。

下图以实例说明您将在Kernel Memory Viewer中看到的内容:

图 21. Kernel Memory Viewer窗格中的存储器逻辑表示
图 22. Kernel Memory Viewer窗格中存储器Bank的Bank视图

Code View(代码视图)

Code View窗格显示您的源代码。当您在Kernel Memory Viewer窗格中选择存储器或者bank时,Code View窗格突出显示您声明的存储器的代码行。

Details(详细信息)

Details窗格显示您在Kernel Memory Viewer窗格中选择的节点的属性。例如,您选择一个内核中的存储器后,Details窗格显示如下信息:
  • 存储器bank的宽度和深度
  • 存储器布局
  • 地址位映射
  • 您的源代码中指定的存储器属性

您在Kernel Memory Viewer窗格中重新选择不同节点之前,Details窗格中一直保持内容不变。