面积位置约束 - 2023.2 简体中文

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

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

面积位置约束向编译器发出指令,将节点约束于阵列中的定制位置。下表中描述了用于指定面积分组的属性。

表 1. 面积分组属性
属性 描述
group 指定分组的集合。每个分组均可包含:
  • tile-type:指定分组的 tile-type(拼块类型)。受支持的 tile-type 有:aie_tile、shim_tile 或 memory_tile。当前仅支持每个类型对应一个矩形。
  • column_min:分组左下角的列索引。
  • row_min:分组左下角的行索引。
  • column_max:分组右上角的列索引。
  • row_max:分组右上角的行索引。
contain_routing 此布尔值如果指定为 true,则可确保所有布线(包括 nodeGroup 中包含的节点之间的信号线)均约束在面积分组内。默认:false。
exclusive_routing 此布尔值如果指定为 true,则可确保所有布线(不包括 nodeGroup 的节点之间的信号线)均排除在面积分组外。默认:false。
exclusive_placement 此布尔值如果指定为 true,则可防止将 nodeGroup 内不包含的所有节点都布局到面积分组边界框范围内。默认:false。

以下示例演示了如何在计算图文件中应用面积位置约束。

using namespace adf;

class testGraph1: public adf::graph {

    private:
        kernel first;
        kernel second;
    public:
        testGraph1()  {
            first = kernel::create(simple1);
            second = kernel::create(simple2);
            connect(first.out[0], second.in[0]);
            source(first) = "src/kernels/kernels.cc";
            source(second) = "src/kernels/kernels.cc";
            runtime<ratio>(first) = 0.1;
            runtime<ratio>(second) = 0.1;

            // Create area group with some valid ranges.
            location<graph>(*this) = area_group({{aie_tile, 0, 0, 1, 7}, {shim_tile, 0, 0, 1, 0}});
        }

};
using namespace adf;

class testGraph2: public adf::graph {

    private:
        kernel first;
        kernel second;
    public:
        testGraph2()  {
            first = kernel::create(simple1);
            second = kernel::create(simple2);
            connect(first.out[0], second.in[0]);
            source(first) = "src/kernels/kernels.cc";
            source(second) = "src/kernels/kernels.cc";
            runtime<ratio>(first) = 0.1;
            runtime<ratio>(second) = 0.1;

            // Explicitly specify contain_routing, exclusive_routing, exclusive_placement.
            location<graph>(*this) = area_group({{aie_tile, 0, 0, 1, 7}, {shim_tile, 0, 0, 1, 0}}, true, false, true);
        }

};

下表根据各种标志组合澄清了节点和信号线能否访问面积分组中的资源。表中所示的用例在紧随其后的图中以列方式呈现。根据下表应用规则时,有两个要点需要注意。

  • 从单一节点驱动到多个目标节点的广播信号线被视为点对点信号线
  • 任一信号线上的任意 FIFO 都遵循与信号线相同的条件。例如,如果某一条信号线完全包含在某个面积分组内(驱动程序和接收器都包含在该面积分组内)并且使用 contain_routing 标志,那么下表表明该信号线布线必须完全包含在该面积分组中。同样,该信号线上的任意 FIFO 都必须布局在该面积分组的边界范围内。
表 2. 面积分组资源的使用权限以及声明的条件
contain_routing exclusive_routing exclusive_placement 包含在面积分组内的节点的布局 (1) 位于面积分组外部的节点的布局 (2) 完全包含在面积分组内的节点间的布线 (3) 遍布整个面积分组的节点间的布线 (4) 完全位于面积分组外部的节点间的布线 (5)
False False False 必须 允许 允许 允许 允许
False False True 必须 禁止 允许 允许 允许
False True False 必须 允许 允许 允许 禁止
False True True 必须 禁止 允许 允许 禁止
True False False 必须 允许 必须 允许 允许
True False True 必须 禁止 必须 允许 允许
True True False 必须 允许 必须 允许 禁止
True True True 必须 禁止 必须 允许 禁止

用例图示如下图所示。

图 1. 用例