Intel® High Level Synthesis Compiler Pro Edition: 用户指南

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

A.2.1.2.2. 查看组件或任务中的循环和模块

High Level Design Report (report.html)中的System Viewer的Function Views显示了组件设计的抽象网表。在Function Views中,您可以可视化组件中的循环以及组件与其内部RAM模块和外部接口的交互。

下面是transpose_and_fold组件的代码节选( <quartus_installdir>/hls/examples/tutorials/best_practices/loop_memory_dependency中提供的教程文件的一部分):
#include "HLS/hls.h"
#include <stdio.h>
#include <stdlib.h>

#define SIZE 4

typedef ihc::stream_in<int> my_operand;
typedef ihc::stream_out<int> my_result;

component void transpose_and_fold(my_operand &data_in, my_result &res)
{
  int i;
  int j;
  int in_buf[SIZE][SIZE] hls_memory;
  int tmp_buf[SIZE][SIZE] hls_memory;
  for (i = 0; i < SIZE * SIZE; i++) {
    in_buf[i / SIZE][i % SIZE] = data_in.read();
    tmp_buf[i / SIZE][i % SIZE] = 0;
  }

  #ifdef USE_IVDEP
  #pragma ivdep safelen(SIZE)
  #endif
  for (j = 0; j < SIZE * SIZE * SIZE; j++) {
  #pragma unroll
    for (i = 0; i < SIZE; i++) {
      tmp_buf[j % SIZE][i] += in_buf[i][j % SIZE];
    }
  }
  for (i = 0; i < SIZE * SIZE; i++) {
    res.write(tmp_buf[i / SIZE][i % SIZE]);
  }
}

报告中的Details窗格显示 transpose_and_fold.B4 是一个II值为6的流水线循环。具有此II值的循环流水线可能会影响设计的吞吐量。

图 4. transpose_and_fold组件的函数视图

通过检查Loop Analysis报告,您可以进一步进行调查。

Loop Analysis Report中的Bottlenecks窗格显示此II值是由加载tmp_buf变量的存储器依赖关系导致的:
图 5.  transpose_and_fold.B4 的Loop Analysis Report Bottleneck和Details窗格


若要在System Viewer报告中查看关于LSU的更多信息, 请点击一个节点以在Details窗格中显示关于LSU的信息。在下图中,Details窗格显示诸如延迟和LSU是无停顿的信息。

对于可停顿的节点,多提供的延迟值是估值。

图 6. Details窗格中关于LSU的信息
查看一个函数时,Function View窗格会显示节点之间的连接:
  • Control

    控制连接是模块与循环之间的连接。

  • Memory

    存储器连接是局部存储器、代理存储器或者 Avalon® MM Host接口之间的连接。

  • Streams

    数据流连接是读取或写入数据流之间的连接。