数据通信中的窗口与串流对比 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

数据流 graph 中的 AI 引擎内核会对数据串流执行操作,这些串流属于特定类型的值序列(无限长度)。这些数据流可以拆分为单独的块,称为窗口,并由内核进行处理。内核耗用输入数据块并生成输出数据块。在内核开始处理输入数据之前,可先运行指定的初始化函数。内核可从存储器中读取标量或矢量,但每次读取和写入操作的有效矢量长度必须为 128 位或 256 位。输入数据窗口和输出缓冲器均锁定后才可供内核执行。由于输入数据窗口需要在内核开始前填充输入数据,因此相比于串流接口,它会增大时延。内核可以在数据窗口内执行随机访问,并且能够指定窗口裕度,以供算法使用,这类算法要求上一个样本为其提供若干字节。

内核还可按逐个样本方式来访问数据串流。串流用于连续数据,使用阻塞调用或非阻塞调用进行读写。级联串流仅支持阻塞访问。AI 引擎支持 2 个 32 位串流输入端口和 2 个 32 位串流输出端口。用于读取或写入数据串流的有效矢量长度必须为 32 或 128 位。如果程序中的独立数据串流数量超过可用的硬件串流通道或端口数量,包串流在此情况下很有用。

PLIO 端口属性用于建立跨 AI 引擎到 PL 边界的外部串流连接。PLIO 端口可通过 DMA S2MM 或 MM2S 通道连接到 AI 引擎窗口缓冲器,或者直接连接到 AI 引擎串流接口。这两种连接方式(往来 PL 与窗口或串流之间的连接)都受到 AI Engine 拼块的串流接口的限制,即每个周期限制 32 位。但对于窗口接口,窗口的乒缓冲器或乓缓冲器都需填满后,内核才能开始操作。因此,如果往来 PL 的窗口接口与串流接口都适用于设计架构,那么窗口接口的时延比串流接口更大。

下表汇总了内核之间的窗口连接和串流连接的差异。

表 1. 窗口连接对比串流连接
连接 裕度 包切换 反压 锁定 按 VLIW 排列的最大吞吐量(每个周期) 以多播作为源
窗口 支持 支持 支持 1 支持 2*256 位负载 + 1*256 位存储 支持
串流 不支持 支持 支持 不支持

2*32 位读取 + 1*32 位写入,或者

1*32 位读取 + 2*32 位写入

支持
  1. 窗口反压(无论获取与否)发生在整个数据窗口上。

Graph 代码为 C++ 代码,并且能以单独文件(来自内核源文件)的形式来使用。编译器会将 AI 引擎内核布局在 AI 引擎阵列中,满足存储器要求并为数据流建立所有必要的连接。如果多个内核的核使用率较低,则可布局在单个拼块内。

要获取使用 AI 引擎工具进行 graph 编程的完整概述,请参阅 Versal ACAP AI 引擎编程环境用户指南 (UG1076)