运行时比率是用户指定的约束,允许 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 引擎,也会影响内核之间的数据通信布线。它还可能影响其它设计流程,例如,功耗估算。