如 在应用中启用剖析 中所述,有多个 --profile
选项支持您在运行时执行期间启用应用与内核事件剖析。该选项支持捕获内核与主机之间、内核停滞时、内核与计算单元 (CU) 执行时间以及 Versal
AI 引擎中的监控活动的数据流量的传输事务详细信息。
[profile]
节头下可使用如下格式来指定 --profile
命令:[profile]
data=all:all:all # Monitor data on all kernels and CUs
data=k1:all:all # Monitor data on all instances of kernel k1
data=k1:cu2:port3 # Specific CU master
data=k1:cu2:port3:counters # Specific CU master (counters only, no trace)
memory=all # Monitor transfers for all memories
memory=<sptag> # Monitor transfers for the specified memory
stall=all:all # Monitor stalls for all CUs of all kernels
stall=k1:cu2 # Stalls only for cu2
exec=all:all # Monitor execution times for all CUs
exec=k1:cu2 # Execution tims only for cu2
aie=all # Monitor all AIE streams
aie=DataIn1 # Monitor the specific input stream in the SDF graph
aie=M02_AXIS # Monitor specific stream interface
此命令的各选项如下所述:
--profile.aie:<arg>
支持在自适应数据流 (ADF) 应用中对 AI 引擎串流进行剖析,其中 <arg>
为:
<ADF_graph_argument|pin name|all>
-
<ADF_graph_argument>
:指定来自 ADF 计算图应用的实参名称。 -
<pin_name>
:表示 AI 引擎内核上的端口。 -
<all>
:指示监控 ADF 应用中的所有串流连接。
DataIn1
输入串流,请使用以下命令:v++ --link --profile.aie:DataIn1
--profile.aie_trace_offload:<arg>
支持在自适应数据流 (ADF) 应用中对 AI 引擎串流进行剖析,其中 <arg>
为 HSDP 或高速调试端口。
v++ --link --profile.aie_trace_offload:HSDP
如需了解 HSDP 使用方法描述,请参阅 AI 引擎工具和流程用户指南(UG1076) 中的使用高速调试端口进行事件追踪卸载。
--profile.data:<arg>
通过监控器 IP 对设计中添加的数据端口启用监控。此选项只需在链接期间指定即可。
其中 <arg>
为:
[<kernel_name>|all]:[<cu_name>|all]:[<interface_name>|all](:[counters|all])
-
[<kernel_name>|all]
用于定义此命令要应用到的特定内核。但是,您也可以通过单一选项,指定关键字all
来将该监控应用于所有现存内核、计算单元和接口。 -
[<cu_name>|all]
:已指定<kernel_name>
的情况下,您还可指定将此命令应用于特定 CU 或者指明应将此命令应用于内核的所有 CU。 -
[<interface_name>|all]
用于定义内核或 CU 上的特定接口以监控其中的数据活动,或者监控所有接口。 -
[<counters|all]
为可选实参,如不指定,则默认为all
。它允许将较大型设计的信息收集操作范围局限于counters
,如设为all
则将包含收集实际追踪信息。
例如,要将数据剖析分配到内核 k1
的所有 CU 和接口,请使用以下命令:
v++ --link --profile.data k1:all:all
--profile.exec:<arg>
该选项会记录内核的执行时间,并在系统运行期间提供最小范围的端口数据收集。此选项只需在链接期间指定即可。
--profile.data
或 --profile.stall
时,会收集内核的执行时间。您可为 data
或 stall
未涵盖的任意 CU 定 --profile.exec
。
exec
剖析的语法是:
[<kernel_name>|all]:[<cu_name>|all](:[counters|all])
例如,要对内核 k1
的 cu2
的执行进行剖析,请使用以下语法:
v++ --link --profile.exec:k1:cu2
--profile.stall:<arg>
v++
编译和链接期间,都必须指定该选项。它会将停滞监控逻辑添加到器件二进制文件 (.xclbin) 中,这需要在内核接口上添加停滞端口。为便于执行此操作,必须在编译和链接期间指定 stall
选项。
stall
剖析的语法是:
[<kernel_name>|all]:[<cu_name>|all](:[counters|all])
例如,要监控内核 k1
的 cu2
的停滞,请使用以下命令:
v++ --compile -k k1 --profile.stall ...
v++ --link --profile.stall:k1:cu2 ...
--profile.trace_memory:<arg>
-t=hw
),并且不能用于软件或硬件仿真流程。构建硬件目标 (-t=hw
) 时,请使用该选项来指定用于捕获追踪数据的存储器类型和量。您可按如下方式来指定实参:
<FIFO>:<size>|<MEMORY>[<n>][:<SLR>]
此实参用于指定要用于捕获追踪数据的存储器类型。使用 --profile.trace_memory
命令定义要使用的类型或存储器,搭配 xrt.ini 文件中的 trace_buffer_size
开关来定义要使用的存储空间,如 xrt.ini 文件 中所述。默认使用的存储器类型是平台中定义的第一个存储器;默认缓冲器大小为 1 MB。
如不指定 trace_memory
,但在 xrt.ini 文件 中启用 device_trace
,则将捕获剖析数据并存入为追踪缓冲器分配的 1 MB 的默认平台存储器。
- FIFO:<size>
- 以 KB 为单位来指定。最大值为 128K,但建议采用 64K 作为最大值。
- 存储器
- 指定平台上的存储器资源类型和数量。可通过
platforminfo
命令来识别目标平台的存储器资源。受支持的存储器类型包括 HBM、DDR、PLRAM、HP、ACP、MIG 和 MC_NOC。例如,DDR[1]
。 - [:<SLR>]
- (可选)指示分配给指定
<SLR>
的 CU 应使用<MEMORY>
字段中指定的 DDR 或 HBM 资源。请注意,该语法仅限搭配 DDR 或 HBM 存储体一起使用。
您可指定含存储器大小和单位(如 FIFO:8k
)的 --profile.trace_memory
命令,或者也可指定 DDR[0]
或 HBM[3]
等存储体。在此情况下,在指定存储器中会捕获所有 CU 的剖析数据。
或者您可以指定要用于捕获剖析数据的存储器,以及该存储器的 SLR 分配。在此情况下,SLR 分配用于指示分配给指定 SLR 的任意 CU 都应在指定存储器内捕获剖析数据。如下配置文件示例所示:
[profile]
trace_memory=DDR[1]:SLR0
trace_memory=DDR[2]:SLR1
在以上示例中,分配给 SLR0 的 CU 的剖析数据在 DDR 存储体 1 内捕获,分配给 SLR1 的 CU 的剖析数据则在 DDR 存储体 2 内捕获。CU 是使用 --connectivity.slr
命令分配给 SLR 的,如 在 Alveo 加速器卡上将计算单元分配给 SLR 中所述。
<SLR>
语法时,必须将该语法用于该设计内的所有 trace_memory
命令。