运行时比率 - 2022.1 简体中文

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

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

运行时比率是用户指定的约束,允许 AI 引擎工具将多个 AI 引擎内核灵活放置到单个 AI 引擎内,前提是这些内核的汇总运行时比率小于 1。内核的运行时比率可使用如下公式来计算。

运行时比率 = (内核运行一轮的周期数)/(周期预算)

周期预算是允许用于运行一次内核调用的周期数,取决于系统吞吐量要求。

内核运行一轮的周期数可在初始设计阶段内估算。例如,如果内核包含精心流水打拍的循环,且每个循环都能处理相应的数据量,那么内核运行一轮的周期数即可按如下方式来估算。

同步缓冲器的同步 + 函数初始化 + 循环计数 * 循环每次迭代的周期数 + 循环的前导码和后导码
注释: 如需了解有关循环流水打拍的更多信息,请参阅 AI 引擎内核编码最佳实践指南 (UG1079)

矢量化代码可用时,内核运行一轮的周期数也可在 AI 引擎仿真器中剖析。

如果将多个 AI 引擎内核置入单个 AI 引擎,那么这些内核会按顺序逐一运行,并且每次迭代 graph::run 时这些内核都会运行一次。这表示:

  • 如果在每次迭代 graph::run 时为内核分配 AI 引擎运行时百分比(由运行时约束指定),或者根据系统要求平均分配,即可满足内核性能要求。
  • 对于 graph::run 的单次迭代,内核占用的百分比都不高于运行时约束所指定的值。否则可能影响位于相同 AI 引擎内的其它内核的性能。
  • 即使多个内核的汇总运行时比率小于 1,也并不一定能置入单个 AI 引擎AI 引擎内核映射到 AI 引擎内的操作也受到硬件资源的影响。例如,必须有足够的程序存储器以允许将这些内核置入同一个 AI 引擎内,并且串流接口必须可用于允许将所有内核置入同一个 AI 引擎内。
  • 将多个内核置入同一 AI 引擎时,可能可以节省资源。例如,同一个 AI 引擎内的内核间的缓冲器均为单缓冲器,而不是乒乓缓冲器。
  • 增加内核的运行时比率并不一定意味着能够提升内核或 graph 的性能,因为性能也受到内核的数据可用性以及进出 graph 的数据吞吐量的影响。如果运行时比率设置不合理地过高,则可能导致资源使用效率低下。
  • 运行时比率过低并不一定会将内核性能限制为指定的 AI 引擎百分比。例如,如果 AI 引擎内仅有一个内核,那么当所有数据可用后内核可能立即运行,而与运行时比率设置无关。
  • 位于不同顶层 graph 内的内核无法置入同一个 AI 引擎,因为 graph API 需独立控制不同 graph。
  • 请尽可能准确设置运行时比率,因为它不仅影响要使用的 AI 引擎,也会影响内核之间的数据通信布线。它还可能影响其它设计流程,例如,功耗估算。