运行时比率 - 2023.2 简体中文

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

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

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

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

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

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

同步缓冲器的同步 + 函数初始化 + 循环计数 * 循环每次迭代的周期数 + 循环的前导码和后导码
注释: 根据接口数量,同步缓冲器的同步 + 函数初始化耗时数十个周期。目标是提升性能时,请务必将此一并纳入考量。

矢量化代码可用时,内核运行一轮的周期数也可在 aiesimulator 中进行剖析。

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

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