06 · Profiling、单变量优化与性能验收
在功能通过的同一个工程中区分软件、通信与硬件成本,用可复核数据评估优化收益。
先修知识能读 Verilog 与基本 shell 命令;按本系列前序章节完成对应验收。
适用环境统一工程 course_fifo / tb_top;SA Run 基线;命令依据 WXE 24.05,工具配对及资源配置以站点验证为准。
验证状态原创 RTL 与脚本已软件测试;Cadence 编译、硬件执行与 trace 待目标设备验证。
本文目录
本章输入:只接受正确且可比的运行三种测量不要混成一个指标配置示例:先做一次带 profiling 的诊断可执行优化实验:只取消逐笔终端打印预期输出:报告结构,不虚构平台性能根据瓶颈选择下一步,避免盲调模式统计拒绝条件与常见误判典型故障:把不同口径写成加速比本章输入:只接受正确且可比的运行
性能实验使用前几章已经正确运行的工程,将事务数统一提高到 10000,降低短用例启动成本占比。不能拿 64 笔黄金运行与 10000 笔优化运行直接比较秒数。先用 profiling 判断时间花在哪里,再改变一个变量;候选方案仍必须完成同样的逐笔检查。小 FIFO 的硬件逻辑很少,结果可能被软件和启动开销主导,不应期待必然加速。
三种测量不要混成一个指标
xrun -profile 对软件模拟器做 profiling,详细分析需要当前 Xcelium 文档;+xcprof 生成硬件运行时的详细 xcprof.out;xc profon/profoff 则用于较粗的交互窗口统计。本站 run_wall_s 由 Python 计时,覆盖进程启动、加载、运行与退出,不含编译和离线导出。工具内部的 emu 百分比也包含部分硬件通信与轮询,不能直接解释成纯逻辑计算时间。
| 测量 | 启用与输出 | 用途 |
|---|---|---|
| 软件 profiling | xrun -profile → ncprof.out | 定位 Testbench 软件热点 |
| 详细 SA runtime profiling | xrun -R +xcprof → xcprof.out | 分析软硬件执行与通信成本 |
| 交互窗口 profiling | xc profon / profflush / profoff | 选定阶段的粗粒度统计 |
| 本站墙钟计时 | run.json 的 run_wall_s | 比较同口径的端到端一次运行 |
配置示例:先做一次带 profiling 的诊断
profile 模式给 xrun -R 增加 +xcprof,仍使用先运行 40 ns、再切换 SA Run 的初始化顺序。profile01 的结果会执行完整检查,存在时将 xcprof.out 复制到该次运行目录。不要把 profiling 的样本与未启用 profiling 的样本直接混合比较;本站统计器会拒绝 profile 与 wave 模式。详细 profile 未生成时,应先核对版本支持和完整日志。
在解压后的 palladium-course 工程根目录执行。标为硬件步骤的命令需在已配置的授权 Linux 环境验证。
python3 flow.py run sa --id profile01 --mode profile --transactions 10000
# 查看 runs/profile01/xcprof.out 与 run.log
# 若另开交互会话做粗粒度窗口统计,可使用以下 Tcl:
# xc profon (在 xc on -run 之前)
# xc profflush -reset(按需要输出并清零窗口统计)
# xc profoff (结束统计)
# 不把该流程与 +xcprof 的完整运行报告混为一谈。可执行优化实验:只取消逐笔终端打印
本课程提供一个容易审计的候选优化:--quiet 只关闭 COURSE_TX 的逐笔终端打印,CSV 写入、期望值比较、错误报告和最终检查全部保留。它可能减少主机日志开销,也可能因为本例较小而没有稳定收益。将 verbose 与 quiet 交错运行,可以降低某一时段机器负载变化造成的偏差;仍需记录站点资源、文件系统位置和冷启动情况。
- 使用 profile 找到候选瓶颈
预期与判定:若日志开销不是主要部分,不预设 quiet 会显著提速。
- 同一 build 交错运行两种配置
预期与判定:每种至少三次,统一为 10000 笔;普通模式不包含 wave/profile。
- 检查所有结果正确
预期与判定:run.json validated=true,CSV 每一笔符合期望;失败样本不能偷偷删除后统计。
- 比较中位数与范围
预期与判定:同时报告 min、median、max、样本数和计时口径;若分布重叠明显,记录未发现可靠收益。
在解压后的 palladium-course 工程根目录执行。标为硬件步骤的命令需在已配置的授权 Linux 环境验证。
for i in 1 2 3; do
python3 flow.py run sa --id verbose-$i --transactions 10000
python3 flow.py run sa --id quiet-$i --transactions 10000 --quiet
done
python3 flow.py summarize runs/verbose-*/run.json runs/quiet-*/run.json预期输出:报告结构,不虚构平台性能
统计器要求每组至少三个有效样本,核对源码、事务数、目标、工具路径与站点记录一致,并重新读取事务 CSV 验证结果。它报告 transactions_per_s,即相同事务数除以墙钟中位数。这不是硬件 MHz,也不是实际芯片频率。下面的尖括号代表需要在目标站点测出的数值;本站未提供任何虚构的 Palladium 吞吐或加速比。
仅展示输出结构与计算公式;实际值由站点运行产生。
verbose: n=3 min_s=<实测> median_s=<实测> max_s=<实测> transactions_per_s=<实测>
quiet: n=3 min_s=<实测> median_s=<实测> max_s=<实测> transactions_per_s=<实测>
Scope: process launch + load + run + exit; compilation and offline export excluded. No hardware MHz claim.
# 若希望报告收益:
# speedup = verbose_median_s / quiet_median_s
# saved_percent = (verbose_median_s - quiet_median_s) / verbose_median_s * 100根据瓶颈选择下一步,避免盲调模式
若 profile 显示主机模型或检查器占主导,应优化相应软件工作;若高频信号交互主导,可评估事务批量化,但这意味着重新设计接口和验证缓冲、顺序、背压,并非替换一个开关。TBrun/NBrun 需要相应时钟及行为模型,本课程的时钟位于软件 Testbench,不能直接切换。若 trace 导出耗时主导,则拆开运行与离线导出计时,先优化探针与窗口。
| 观察到的瓶颈 | 候选改动 | 必须重新验证 |
|---|---|---|
| Testbench / 终端日志 | 减少不必要打印,优化热点算法 | 保持独立检查与同一事务内容 |
| 高频软硬件同步 | 评估事务接口、批量传输与 GFIFO | 顺序、背压、错误传播与最大缓冲量 |
| trace / upload | 缩小必要信号与时间范围 | 首个失败点仍可解释 |
| 编译 / 加载占主导 | 增加每次有意义的测试工作量,批量调度 | 不要混淆总时长与纯运行时间 |
| DUT 硬件执行占主导 | 分析映射与时钟配置 | 先确认正确性和支持条件,禁止盲调 oversampling |
统计拒绝条件与常见误判
性能数据必须能被复核。不同事务数、重复 run_id、少于三个样本、非正或非有限耗时,以及故障、波形或 profile 模式均会被拒绝。除了工具路径,仍需人工保存硬件型号、资源分配和系统负载,因为路径相同不保证安装内容从未升级。性能实验应在一个稳定的验证窗口内完成。
| 现象 / 本包标识 | 原因 | 处理 |
|---|---|---|
| COURSE_PERF: workload identity differs | 源码、N、工具或站点不同 | 重新采集同一身份的样本 |
| COURSE_PERF: duplicate run id | 重复传入同一运行 | 去重输入清单,不能重复计样本 |
| COURSE_PERF: need at least 3 samples | 样本数不足 | 按原条件补采,不用复制 JSON 凑数 |
| quiet 更快但事务减少 | 工作量或完成条件改变 | 先修复正确性;此样本不能算优化收益 |
| 结果波动大 | 启动、共享资源、文件系统影响 | 延长负载或增加样本,保留原始分布 |
典型故障:把不同口径写成加速比
一次没有波形的短运行和一次带完整 trace 导出的长运行,即使来自相同 RTL,也不能直接比较并宣称优化成功。先确定每个时间数值的开始与结束位置,将正确性、工作量和观测配置放在同一张记录表里,才能解释差异。本系列的最终交付应包含所有原始样本,而不是只有一个最好看的倍数。
完成检查
- profiling 与普通性能样本分开,未混用口径
- 至少两组各三次同工作量通过样本且原始证据完整
- 优化保持检查能力,结论有范围与设备条件
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Design Profiling for SA Designs · WXE 24.05
第 11、21–23 页:软件 profile、+xcprof 与 xc profon 的差别。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
- XE Command Reference Manual · WXE 24.05
第 1454–1456 页:窗口统计与各类时间含义。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
- Getting Started with TBA on Palladium · WXE 24.05
第 12–14、22 页:通信成本与信号级同步限制。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
继续阅读
硬件仿真首次使用前的工程检查清单
准备版本、输入和模型,减少第一次编译的无效往返。
如何选择 SA/ICE 及交互方式
根据测试环境所在位置与目标接口要求选择运行流程。
完成最小设计的编译运行
把第一次平台运行拆为有检查点的五个阶段。
黄河电子