基于串流的访问 - 2023.2 简体中文

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

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

通过基于串流的访问模型,内核会接收到类型为数据(作为实参)的输入串流或输出串流。对这些串流进行的每次访问都将同步,即,如果数据在串流中不可用,则读取停滞,如果串流无法接受新数据,则写入停滞。

AI 引擎支持两个 id=01 的 32 位输入串流端口和两个 id=01 的 32 位输出串流端口。此 ID 是作为实参提供给串流对象构造函数的。AI 引擎编译器会在内核实参列表中从左到右自动分配输入和输出串流端口 ID。除非串流端口采用包切换(请参阅 显式包切换),否则不允许通过将多个内核映射到同一个 AI 引擎来共享串流端口。
public:
  input_plio din;
  output_plio dout;
  adf::kernel k0,k1;
...
connect <stream> (din.out[0], k1.in[0]);
connect <stream> (k1.out[0], k2.in[0]);
connect <stream> (k2.out[0], dout.in[0]);
在一个 AI 引擎的累加器寄存器与另一个物理相邻的核之间还有直接串流通信通道,称为级联。在 AI 引擎阵列中,级联串流采用蛇形线性方式在各 AI 引擎处理器之间相连。
connect <cascade> (k1.out[1], k2.in[1]);

AI 引擎编译器会根据数据流 graph 连接自动推断串流数据结构,并在用于实现 graph 控制的封装文件代码中自动声明此结构。内核函数仅对指针执行运算,这些指针指向作为实参传递给内核函数的串流数据结构。在数据流 graph 或内核程序中无需声明这些串流数据结构。

适用于多重速率处理的串流连接

涉及串流和包串流连接时,如无任何用户指定信息,那么多重速率分析任务并不简单。请使用约束来指定内核将从输入串流或包串流输入读取的样本数量,以及内核将写入串流或包串流输出的样本数量,如下所示:
// constraint to specify samples per iteration for stream/pktstream ports to support multirate connections
constraint<uint32_t> samples_per_iteration(adf::port<adf::input>& p);
constraint<uint32_t> samples_per_iteration(adf::port<adf::output>& p);
constraint 关键字需要采用样本数据类型作为模板值,并将 samples_per_iteration 函数应用于内核的输入或输出。相关的串流可连接至缓冲器的另一个串流。
注释: 多重速率分析仅计算已指定 adf::samples_per_iteration (>0) 的串流/包串流端口的速率。