FIFO 位置约束 - 2023.2 简体中文

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

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

aiecompiler 会尝试以尽可能最有效的方式来自动分配 FIFO。但您可能想要在存储器中显式控制这些 FIFO 的布局,如以下示例所示。此约束可用于在 aiecompiler 的多轮运行之间使 FIFO 资源的布局保留不变。

请注意下列 FIFO 约束注意事项。

  • 如果使用 FIFO 约束,则 FIFO 的整个深度都必须加以约束。无法仅对 FIFO 的一部分进行约束而将其余部分交由编译器来添加约束。
  • 如果将 FIFO 约束添加到分支信号线中,那么 FIFO 约束应添加到每个点对点信号线。如果在分支前要共享串流开关 FIFO 或 DMA FIFO,可在每个点对点信号线上复制 FIFO 类型和位置。
  • 此约束(无需位置)可用于指定所期望的 FIFO 类型,无需指定位置或深度。

以下示例演示了如何在计算图文件中使用 FIFO 约束。

two_node_graph() {
  loop0 = kernel::create(loopback_stream);
  loop1 = kernel::create(loopback_stream);
  loop2 = kernel::create(loopback_stream);

  source(loop0) = "loopback_stream.cc";
  source(loop1) = "loopback_stream.cc";
  source(loop2) = "loopback_stream.cc";

  connect net0 (in0, loop0.in[0]);
  connect net1 (loop0.out[0], loop1.in[0]);
  connect net2 (loop1.out[0], loop2.in[0]);
  connect net3 (loop2.out[0], out0);

  runtime(loop0) = 0.9;
  runtime(loop1) = 0.9;
  runtime(loop2) = 0.9;

  fifo_depth(net1) = 32;
  fifo_depth(net2) = 48;

  location< fifo >(net1) = {ss_fifo(shim_tile, 16 , 0, 1), ss_fifo(shim_tile,17,0,0)};
  location< fifo >(net2) = dma_fifo(aie_tile, 8, 0, 0x0000, 48);
};

第二个示例演示了如何对约束文件添加 FIFO 约束。

{
  "PortConstraints": {
    "fifo_locations_records": {
      "dma_fifos": {
        "r1": {
          "tile_type": "core",
          "row": 0,
          "column": 0,
          "size": 16,
          "offset": 8,
          "bankId": 2
        },
        "r2": {
          "tile_type": "core",
          "row": 0,
          "column": 1,
          "size": 16,
          "offset": 9
        },
        "r4": {
          "tile_type": "mem",
          "row": 2,
          "column": 4,
          "size": 16,
          "offset": 6,
          "bankId": 2
        }
      },
      "stream_fifos": {
        "r3": {
          "tile_type": "shim",
          "row": 1,
          "column": 3,
          "channel": 1
        }
      }
    },
    "mygraph.k2.in[0]": {
      "fifo_locations": ["r1", "r2", "r3"]
    },
    "mygraph.k4.in[0]": {
      "fifo_locations": ["r1", "r2", "r4"]
    }
  }
}