包拆分与合并连接 - 2023.2 简体中文

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

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文
通过将 pktmerge 连接到 pktsplit,多个串流即可共享布线。通过连接到 pktsplitpktmerge 来传输缓冲器时,每个 pktmerge.in[i] 都会布线到对应的 pktsplit.out[i]pktmerge 输入程度必须与 pktsplit 输出程度相等。graph 代码示例如下所示:
for (int i=0; i<WAYS; i++) {
  connect<>(plioIn[i].out[0], kOut[i].in[0]);
  connect<>(kOut[i].out[0], merge.in[i]);
  connect<>(split.out[i], kIn[i].in[0]);
  connect<>(kIn[i].out[0], plioOut[i].in[0]);
}
connect<> (merge.out[0], split.in[0]);
graph 视图如下图所示。
图 1. Pktmerge 到 Pktsplit 的 graph 视图

包拆分与合并大小

当前支持最高 32 条串流的包切换。支持最大 32 到 1 pktmerge 和 1 到 32 pktsplit。如果使用的包切换的 fanout/fanin(16/32 条串流)较大,则可能耗用大量资源,在设计中使用这些操作时应谨慎处理。

包拆分与合并广播

当串流经过 pktmerge 到达 pktsplit 时,支持从 pktsplit 进行广播。在此情况下,pktmerge.in[i] 会广播至对应的多个目标,这些目标连接到 pktsplit.out[i]。代码示例如下所示,其中 merge.in[WAYS-1] 广播至 split.out[WAYS-1]split.out[WAYS]
for (int i=0; i<WAYS; i++) {
  connect<>(plioIn[i].out[0], kOut[i].in[0]);
  connect<>(kOut[i].out[0], merge.in[i]);
  connect<>(split.out[i], kIn[i].in[0]);
  connect<>(kIn[i].out[0], plioOut[i].in[0]);
}
connect<>(split.out[WAYS-1], kIn[WAYS].in[0]);
connect<>(kIn[WAYS].out[0],plioOut[WAYS].in[0]);
connect<> (merge.out[0], split.in[0]);

graph 视图如下图所示。

图 2. Pktmerge 到 Pktsplit 的 graph 视图(含广播)