AI 引擎编译器选项 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文
表 1. AI 引擎选项
选项名称 描述
--constraints=<string> 约束(位置、边界框等)可使用 JSON 文件指定。该选项支持您指定一个或多个约束文件。
--heapsize=<int> 每个 AI 引擎使用的堆大小(以字节为单位)

对于栈、堆和同步缓冲器(32 字节,包括计算图运行迭代数信息),可分配最多 32768 字节的数据存储器。默认堆大小设置为 1024 字节。将堆大小更改为其他值之前,请确保栈、堆和同步缓冲器大小总和不超过 32768 字节。

该选项用于分配文件作用域内的任意剩余数据,这些数据在用户计算图中均未显式连接。

--stacksize=<int> 每个 AI 引擎使用的栈大小(以字节为单位)

对于栈、堆和同步缓冲器(32 字节),可分配最多 32768 字节的数据存储器。默认栈大小设置为 1024 字节。将栈大小更改为其他值之前,请确保栈、堆和同步缓冲器大小总和不超过 32768 字节。

该选项用作为标准编译器调用约定,包括栈分配的局部变量和寄存器溢出。

--pl-freq=<value> 为所有 PLIO 指定接口频率(以 MHz 为单位)。默认频率为 AI 引擎频率的四分之一,支持的最大频率为 AI 引擎频率的一半。在计算图中可提供每个接口特定的 PL 频率。
--pl-register-threshold=<value> 为寄存的 AI 引擎到 PL 交汇(边界逻辑接口寄存器 (BLI))指定频率(以 MHz 为单位)阈值。BLI 触发器存在于硬件中的 AI 引擎可编程逻辑 (PL) 接口中,可供您用于改进时序。对于时序关键设计,启用 BLI 寄存器有助于实现最高时钟频率。该选项可用于控制跨 AI 引擎到 PL 通道的 BLI 寄存器接口。BLI 寄存器是在 AI 引擎到 PL 接口中插入的,前提是 PL 频率大于 PL 寄存器阈值。

默认阈值频率为 AI 引擎频率的八分之一,视特定器件速度等级而定。

注释: 如果 PL 寄存器阈值高于 AI 引擎阵列频率的四分之一,就会被忽略,改用 AI 引擎阵列频率的四分之一值。
表 2. CDO 选项
选项名称 描述
--broadcast-enable-core 使用广播启用与计算图关联的所有 AI 引擎。该选项会在阵列中保留一条广播通道,用于核的使能。默认值为 true。
表 3. 编译器调试选项
选项名称 描述
--adf-api-log-level=<value> ADF API log 日志级别。可用的值如下:
  • 0:错误
  • 1:级别 0 + 警告
  • 2:级别 1 + 参考消息
  • 3:级别 2 + 调试消息

默认值为 2。

--kernel-linting 执行计算图与内核之间的一致性检查。默认为 false。
--quiet 禁止 AI 引擎编译器输出。
--verbose AI 引擎编译器详细输出,在编译各阶段发射编译器消息。这些调试和追踪 log 日志可提供有关编译进程的实用消息。
表 4. 设计规则检查选项
选项名称 描述
--drc.disable=<string> 禁用对指定 ID 执行设计规则检查。不执行已禁用的检查。
--drc.enable=<string> 启用对指定 ID 执行设计规则检查。
--drc.severity=<string> 更改设计规则检查的严重性:format <ID>:<severity>[:context]
--drc.waive=<string> 豁免对指定 ID 执行设计规则检查。豁免检查仍需执行,但会将其标记为豁免。
表 5. 执行目标选项
选项名称 描述
--target=<hw|x86sim> AI 引擎编译器支持多种构建目标。默认值为 hw
  • hw 目标会生成 libadf.a 以供在目标平台上的硬件器件中和在硬件仿真中使用。
  • x86sim 目标会编译代码以供在x86 simulator(x86 仿真器)中使用,如 x86 功能仿真器 中所述。
表 6. 文件选项
选项名称 描述
--include=<string> 该选项可用于在 include 路径内包含额外目录,以供编译器前端处理。

指定一个或多个 include 目录。

--output=<string> 为输入数据流计算图文件指定由前端生成的 output.json 文件。此输出文件会传递至后端,用于 AI 引擎器件的映射和代码生成。对于其他类型的输入,忽略此选项。
--output-archive=<string> 指定输出存档名称,其中将包含已编译的 AI 引擎工件。默认值为 libadf.a
--platform=<string>

指定到 Vitis 平台文件的路径。该文件是您开发 Vitis 应用程序的起点。这些应用可以有效利用平台提供的资源和功能。此平台定义了可在应用中使用的硬件和软件组件。此平台可指定为赛灵思平台文件 (XPFM) 或赛灵思 Shell 存档 (XSA)。

--part=<string> 指定器件系列或器件的值。


例如,aiecompiler --include ./aie --part xcvc1902-vsvd1760-2MP-e-S graph.cpp

要执行 AI 引擎编译,aiecompiler 要求您指定 --platform 选项或 --part 选项。不能同时指定 --platform 选项与 --part 选项。

--workdir=<string>

默认编译器将所有输出都写入当前目录中名为 Work 的子目录。该选项可用于指定其他输出目录。

表 7. 常规选项
选项名称 描述
--help 列出可用的 AI 引擎编译器选项,按此处所列出的分组进行排序。
--help-list 显示 AI 引擎编译器选项的字母列表。
--version 显示 AI 引擎编译器的版本。
表 8. 其他选项
选项名称 描述
--disable-multirate 该选项会禁用 ADF 计算图中的多重速率。默认为 false。
--evaluate-fifo-depth 该选项仅可供 AI 引擎用于分析再收敛数据路径。数据可能通过多条路径发送,有时数据可能再收敛,导致死锁。此类死锁可通过向相应的数据路径添加 FIFO 来解决。

通过再收敛数据路径来评估并解决死锁的步骤如下:

  1. 使用该选项编译设计。
  2. 在设计上运行 aiesimulator
  3. 打开 Vitis Unified IDE 并运行 run_summary 仿真。注意“Estimated FIFO”(估算的 FIFO)列,并在特定信号线上使用 fifo_depth 约束来应用建议的 FIFO 数量。
注释: 此功能对于 AI 引擎机器学习设计不可用。

如需了解更多信息,请参阅 评估 FIFO 深度以打破死锁

--no-init 该选项用于禁用 AI 引擎数据存储器中的窗口缓冲器的初始化。该选项能够加速将二进制镜像加载到 SystemC-RTL 协同仿真框架中。默认为 false。
提示: 这不影响静态初始化的查找表。
--nodot-graph 默认情况下,AI 引擎编译器会生成 .dot.png 文件,以在 AI 引擎上直观显示用户指定的计算图及其分区。该选项可用于消除 DOT 计算图输出。默认为 false。
--lock-fence-mode=<int> 用于控制围绕获取和释放 AIE-ML 设计的 I/O 缓冲器所执行的调度,如下所示:
  • 0:围绕获取和释放 I/O 缓冲器使用保守调度。
  • 1(默认值):围绕获取和释放 I/O 缓冲器使用积极调度,这可能减少周期计数。
表 9. 模块专用选项
选项名称 描述
--Xchess=<string> 该选项可用于将内核专用选项传递给 CHESS 编译器,此编译器用于为每个 AI 引擎编译代码。

选项字符串指定为 <kernel-function>:<optionid>=<value>。在映射指定内核函数的 AI 引擎上编译生成的源文件期间包含该选项字符串。

--Xelfgen=<string> 该选项可用于将附加命令行选项传递给编译器的 ELF 生成阶段,此阶段当前作为 make 命令来运行,用于构建所有 AI 引擎 ELF 文件。

例如,为了将并行编译数量限制为 4,请写入 -Xelfgen="-j4"

注释: 如果编译期间,log 日志中出现 bad_alloc 错误,或者如果 Vitis IDE 崩溃,可能是由于工作站上内存不足而导致的。除了增大机器上可用内存外,还有一种可行的变通方法是在代码生成阶段限制编译器使用的并行度。具体方法是在 GUI 中指定编译器 CodeGen 选项 -j1-j2,或者在命令行上指定 -Xelfgen=-j1-Xelfgen=-j2
--Xmapper=<string> 该选项可用于将其他命令行选项传递到编译器的映射器阶段。例如:
--Xmapper=DisableFloorplanning

如果设计在映射或布线阶段无法收敛,或者如果您要尝试通过减少存储体冲突来提升性能,则可尝试这些选项。

请参阅 映射器和布线器选项 以获取选项列表及其描述。

--Xpreproc=<string> 该选项可用于将常规选项传递到PREPROCESSOR阶段,用于执行所有源码编译 (AIE/PS/PL/x86sim)。例如:
--Xpreproc=-D<var>=<value>
--Xpslinker=<string> 该选项用于将常规选项传递到PS LINKER阶段。例如:
--Xpslinker=-L<libpath> -l<libname>
--Xrouter=<string> 该选项用于将常规选项传递到ROUTER阶段。例如:
-Xrouter=dmaFIFOsInFreeBankOnly
--Xx86sim=<string> 将 x86sim 专用的选项传递给编译器。例如:
-Xx86sim=clangStaticAnalyzer

为内核源代码启用 clang 静态分析器。

--fast-floats 该选项支持快速实现线性浮点标量运算,例如,add、sub、mul 和 compare。
--fast-nonlinearfloats 该选项支持快速实现非线性浮点标量运算,例如,sine/cosine、sqrt 和 inv。
--fastmath 该选项支持快速实现 float2fix、fplt 和 fpge。
--float-accuracy arg 在 AI 引擎 ML 中选择浮点运算精度:
  • safe:精度略好于 FP32。
  • fast:提升性能,精度与 FP32 相似。
  • low:最佳性能,精度好于 FP16 和 bfloat16
注释:AI 引擎计算图的后续编译中,仅对已修改的 AI 引擎内核进行重新编译。任何未修改的内核都不会进行重新编译。
表 10. 事件追踪选项
选项名称 描述
--event-trace=<value>

其中,<value> 为以下值之一:

  • functions
  • functions_partial_stalls
  • functions_all_stalls
  • runtime
事件追踪配置值。其中指定的 <value> 表示:
  • 不含停滞的函数转换视图。
  • 含串流/锁定/级联停滞的函数转换视图。
  • 含所有停滞(串流/锁定/级联/存储器)的函数转换视图。
  • AI 引擎存储器和接口拼块的运行时事件追踪配置。
--event-trace-port=<value>
  • plio
  • gmio
设置 AI 引擎事件追踪端口。默认值为 gmioAMD 建议使用 gmio 作为 event-trace-port(事件追踪端口)配置。如需了解更多信息,请参阅 事件追踪构建流程
  • AI 引擎事件追踪端口设置为 plio
  • AI 引擎事件追踪端口设置为 gmio
--num-trace-streams=<int> 表示追踪串流的数量。默认值为 16。
--trace-plio-width=<int> 表示追踪串流的 PLIO 宽度。默认值为 64。允许的值为 32 和 64。
--graph-iterator-event 只要计算图迭代器递增,就生成 event0() 用户。这样即可提供基于计算图迭代延迟启动硬件事件追踪的功能。
表 11. 最优化选项
选项名称 描述
--xlopt=<int> 基于 opt 级别启用内核最优化组合。允许的值为 0 到 2;默认值为 1。
  • xlopt=1
    • 自动编译堆大小:使用内核分析来自动计算每个 AI 引擎的堆要求,由此保证易用性。因此,您无需指定堆大小。
    • 指导信息:通过提供指导信息来高亮未对齐的变量、可能由映射器分配的全局阵列、restrict 的不当使用以及可能出现的先读取后写入冲突。
    • 编译指示插入:在内核代码中自动推断和插入编译指示。
  • xlopt=2
    • 自动内联:如果可自动内联函数,则执行此操作,即使这些函数未声明为 __inlineinline 也是如此。
    • 对展开的循环进行循环剥离:通过剥离,使循环迭代次数成为展开因子的倍数。基于循环的迭代次数和利益启发,将循环拆分为多个循环,并在拆分的循环上添加平铺编译指示。
注释: 编译器最优化 (xlopt > 0) 可能降低调试可视性。
--Xxloptstr=<string> 用于在 xlopt 级别 1 和 2 中启用/禁用最优化的选项字符串。
  • -annotate-pragma=false:关闭循环编译指示的自动插入
  • -xlinline-threshold=T:将自动内联阈值设置为 T(默认 T = 5000)
  • -annotate-pragma:自动插入循环展开、流水打拍和平铺编译指示(默认值 = true)
--lock-fence-mode
注释: 该选项仅适用于 AIE-ML 器件。

启用围绕 I/O 缓冲器的获取和释放开展更积极的调度的功能(默认值:0)。

  • --lock-fence-mode=0:禁用积极调度
  • --lock-fence-mode=1:使用积极调度,但多层设计除外
--runtime-opt 启用该选项可识别功能相同的核,并只对这些核进行一次编译,从而缩短整体编译时间。
  • --runtime-opt=false:无最优化。这是默认方式。
  • --runtime-opt=true:启用最优化。
注释: 两个保留码字:aieadf 在计算图编程中均为无效的名称空间标识符。
注释: AI 引擎计算图与内核代码中定义的函数名称不应与来自 C++ 标准库的函数名称相同。使用此类函数时,aiecompiler 将发出错误消息,因为此类函数与预定义的函数名称冲突。