DSP/CPU 性能/算力评估指标介绍

DSP/CPU 性能/算力评估指标介绍

Qidi 2025.06.10


0. 为何评估

一般在两种场合需要对 DSP 性能/算力进行评估:

  • 立项时做芯片选型,需要评估某款 DSP 性能/算力是否满足算法需求;
  • 开发中后期,由于需求变更,可能出现 DSP 性能/算力无法满足需求的问题。要通过抓取实时 Profile 的方式检视 DSP 性能。

1. 关键评估指标

以下以 Qualcomm Hexagon DSP 为例进行说明。这些概念也可套用到其它 DSP 或 CPU 上。

指标 含义 说明
Cycle 一个时钟周期 DSP 主频 1.5GHZ,就是每秒 1.5 * 10^9 个时钟周期。
Instruction 一条指令 代码编译后生成的机器指令。
Packet 一个数据包 一个数据包可以包含 1~4条 指令。
CPP (Cycles Per Packet) DSP 处理一个数据包平均需要的时钟周期数 如果从 DSP 角度进行统计,有时被称作 pCPP (processor CPP);有的 DSP 支持多个硬件线程,从硬件线程角度进行统计,有时被称作 tCPP (thread CPP)。
CPP 值通常在 1~5,不会低于 1(因为时钟周期最小为 1)。
CPP 值与你部署在 DSP 的代码质量有关。代码质量越高,CPP 值越小。通过 减少多线程竞争、合理管理内存生命周期、合理安排内存地址对齐 等方式,可以提高代码质量。
CPP 值也与 AXI/AHB 总线频率有关。 AXI/AHB 总线频率越高,内存数据读写越快,CPP 值越小。

根据高通文档(DCN: KBA-230115225802, DCN: 80-27686-1),我们期望 CPP值 不超过 3.5。如果超过,表明要么是算法代码需要优化,要么是数据吞吐达到瓶颈需要提高总线频率
MPPS (Million Packets Per Second) DSP 每秒处理的数据包数(单位:百万个) MPPS 参数有两种用法:
一是用作评估 DSP 最大处理能力。 比如,DSP 主频 1.5GHz,运行其上的代码的平均 CPP 为 3,那么在此种情形下 DSP 能承载的最大 MPPS 就是 500。
二是用作评估算法代码给 DSP 带来的负载。 因为代码在编译后生成的指令数是固定的,相应地,其 Packet数量 和 CPP 也能预估出来,因而也能估算出代码所需的 MPPS 值。
根据 Qualcomm 建议,车机设备上所有用户场景带来的负载总和不应超过最大 MPPS 的 70%,以避免音频播放时出现噪声。
MIPS (Million Instructions Per Second) DSP 每秒处理的指令数(单位:百万条) 类似 MPPS,MIPS 参数也常被用来评估 DSP 能力、代码所需负载。
MCPS (Mega Cycles Per Second) DSP 当前实际每秒的时钟周期数(单位:兆个) 对应 DSP 的主频实际运行频率,其实就是 MHz。通常用来评估 DSP 使用率,公式为 DSP usage = MCPS / NPA core clock,实际上就是 使用率 = 当前时钟频率 / 最大时钟频率
某些 Qualcomm 文档中有时也将 MCPS 称作 Effective Q6 Frequency。
IU Stall Frequency L1缓存 的 IU (Instruction Unit) 未命中频率 L1缓存分为 指令(Instruction) 和 数据(Data) 两大类。可简单理解为 L1缓存 中未找到所需指令,需继续向 L2缓存 查询,从而造成 DSP操作 短暂停顿(Stall),需要更多的时钟周期来完成操作。IU Stall 越多,CPP 越大。
DU Stall Frequency L1缓存 的 DU (Data Unit) 未命中频率 L1缓存分为 指令(Instruction) 和 数据(Data) 两大类。可简单理解为 L1缓存 中未找到所需数据,需继续向 L2缓存 查询,从而造成 DSP操作 短暂停顿(Stall),需要更多的时钟周期来完成操作。DU Stall 越多,CPP 越大。
AXI cached read/write bandwidth DSP 对挂载在 AXI总线 上的设备的读写带宽/速率 AXI (Advanced eXtensible Interface) 可以用作 DSP 与 DDR内存 的高速通信。
L2缓存未命中 会造成 DSP 访问 DDR设备。
AHB cached read/write bandwidth DSP 对挂载在 AHB总线 上的设备的读写带宽/速率 AHB (Advanced High-performance Bus) 可以用作 DSP 与 DDR内存 的高速通信。
L2缓存未命中 会造成 DSP 访问 DDR设备。
Clock votes 请求/投票 DSP 以何频率运行 部署在 DSP 的代码可随自己的算法所需资源情况,向系统申请提高/降低时钟频率。
DSP 实际的运行频率取决于所有子系统上(application processor, modem 等)的代码的综合请求/投票结果。

2. 评估算法模块的算力需求

DSP/CPU 能提供的最大算力,一般会在其产品文档中直接以 TOPS、MOPS、MPPS、MIPS 等参数直接标明。运行某个算法模块所需的算力是多少,就没办法这么直观获取了。如何评估呢?很简单,运行起来看看。

可以在真实设备上运行算法,也可以在模拟器内(比如 hexagon-sim)运行算法。具体操作思路是:

  • 不启用算法模块运行,通过 profiler 工具(比如 sysMonApp)测量 MPPS 数据;
  • 再在相同条件下启用算法模块并运行,测量 MPPS 数据;
  • 两次测量数据之差就是该算法模块所需的理论算力;
  • 当 DSP/CPU 的空闲算力不小于所需理论算力的 1.3 倍时,我们才认为 DSP/CPU 能够满足算法模块的算力需求,这是因为需要给算法模块加载/销毁、I/O延迟等非理想情况留出余量。

新增一个算法模块,除了会增加系统的算力需求,由于算法需要大量访问内存、磁盘,所以还会增加系统的数据总线带宽需求。对 Hexagon DSP 而言,总线带宽计算公式为
Bandwidth = AXI_RD_BW_64B + AXI_WR_BW_64B + AHB_RD_BW。同样的,将两次测量数据相减,就得到了算法模块所需的理论带宽值。当 DSP/CPU 的空闲带宽不小于该理论带宽值的 1.3 倍时,我们才认为 DSP/CPU 能够满足算法模块的带宽需求。


3. 参考资料

[1] Hexagon_SDK/6.2.0.1/docs/tools/sysmon_parser.html
[2] 高通文档《80-27686-1_REV_AA_Hexagon_Audio_DSP_Load_Metrics》
[3] AMBA (Advanced Microcontroller Bus Architecture)
[4] 高通文档《KBA-230115225802_REV_3_CAPI_Module_profiling_with_Sysmon_TLP》
[5] 高通文档《80-39284-2_REV_AA_Calculate_Mpps_and_System_Bus_Bandwidth_for_Audio_Voice_CAPI_Modules》

posted @ 2025-06-10 18:11  Qidi_Huang  阅读(780)  评论(0)    收藏  举报