内核位置约束 - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文

构建含多个子计算图的大型计算图时,有时对内核到 AI 引擎的精确映射(相对于其他内核或者以绝对方式)加以控制是很有用的。aiecompiler 提供了相应的机制来为内核指定位置约束,这些位置约束搭配 C++ 模板使用时即可提供强大的机制,以创建从您的计算图到 AI 引擎阵列的稳健、可扩展且可预测的映射。它还可减少映射器尝试的选项数量,从而使映射器显著提速。以如下计算图规范为例:

#include <adf.h>
#include "kernels.h
#define NUMCORES (COLS*ROWS)
using namespace adf;

template <int COLS, int ROWS, int STARTCOL, int STARTROW>
class indep_nodes_graph1 : public graph {
 public:
   kernel kr[NUMCORES];
   port<input> datain[NUMCORES] ;
   port<output> dataout[NUMCORES] ;
  
 indep_nodes_graph1() {
  for (int i = 0; i < COLS; i++) {
    for (int j = 0; j < ROWS; j++) {
      int k = i*ROWS + j;
      kr[k] = kernel::create(mykernel);
      source(kr[k])  = "kernels/kernel.cc";
      runtime<ratio>(kr[k]) = 0.9;
      location<kernel>(kr[k]) = tile(STARTCOL+i, STARTROW+j);
    }
  }
  for (int i = 0; i < NUMCORES; i++) {
    connect(datain[i], kr[i].in[0]);
    connect(kr[i].out[0], dataout[i]);
  }
 };
};

模板参数识别出内核的 COLS x ROWS 逻辑阵列 (COLS x ROWS = NUMCORES),该阵列布局在更大的逻辑器件内,此器件维度从原始位置的 (STARTCOL, STARTROW) 处开始。此计算图中的每个内核都被约束为布局在特定 AI 引擎上。达成方式是对每个内核使用绝对位置约束来将其布局在特定处理器拼块上。例如,以下声明将创建从偏移 (3,2) 开始的 1 x 2 内核阵列。将此内核阵列嵌入 4 x 4 逻辑器件拓扑结构时,它会被约束到右上角。

indep_nodes_graph1<1,2,3,2> mygraph;
重要: 先前版本中使用 location<absolute>(k) 函数来指定内核约束,使用 proc(x,y) 函数来指定处理器拼块位置。这些函数现已被弃用。改用 location<kernel>(k) 来指定内核约束,使用 tile(x,y) 来识别特定拼块位置。