エリア ロケーション制約 - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

エリア ロケーション制約は、配列内のカスタム位置にノードが含まれるように指定します。次の表に、エリア グループに指定するプロパティを示します。

表 1. エリア グループ プロパティ
プロパティ 説明
group グループのコレクションを指定します。各グループは次のいずれかです。
  • tile-type: グループのタイル タイプを指定します。サポートされるタイル タイプは、aie_tile、shim_tile、または memory_tile です。現在のところ、各タイプで 1 つの矩形のみがサポートされます。
  • column_min: グループの左下の列インデックス。
  • row_min: グループの左下の行インデックス。
  • column_max: グループの右上の列インデックス。
  • row_min: グループの右上の行インデックス。
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);
        }

};

次の表に、フラグのさまざまな組み合わせに応じて、ノードとネットがエリア グループのリソースにアクセスできるかどうかを示します。その下の図に、ユース ケースを示します。次の表の規則を適用する際、重要な考慮事項が 2 つあります。

  • 1 つのノードから複数のデスティネーション ノードに駆動されるブロードキャスト ネットは、個々のポイントツーポイント ネットと見なされます。
  • ネット上の 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. ユース ケース