从周期计算算法的 MIPS?

信息处理 声音的
2022-02-15 04:10:21

我的音频 DSP 算法处理输入声音文件(45 秒,16 kHz,单声道)。模拟完成后,gprof分析器告诉我:

Cycles: total = 6846310893.

我的目标 DSP 处理器是 600 MHz,每个周期执行 1 条指令,这意味着它是 600“MIPS”(每秒数百万条指令)。

这个算法(实时运行)将从这 600 MIPS 中取出多少?这完全可以使用上述数据计算吗?

2个回答

天真的方法是做6 846 310 893 / 45 = 152 140 242 ~ 152 MIPS. 这假设每条指令在您的处理器上恰好占用一个周期。

另一种方法是使用诸如massif之类的工具,并使用已知长度的文件(在您的情况下为 45 秒)估计 MIPS。

valgrind --tool=massif --stacks=yes --detailed-freq=100 --massif-out-file=out.msf your_binary
ms_print --threshold=100 out.msf

然后在底部你会得到类似的东西:

--------------------------------------------------------------------------------
  n        time(i)         total(B)   useful-heap(B) extra-heap(B)    stacks(B)
--------------------------------------------------------------------------------
 81        721,831              600                0             0          600
 82        728,199              448                0             0          448

取 的最终值time(i),除以秒数再除以1e6. 结果应该是您的近似 MIPS。

CPU 的数据表将提供有关每个命令需要多少个周期的信息(例如,在这里查找“周期”,并且通过类似的内容,您还可以计算出命令还需要什么来确定是否需要额外的周期)。有时它们可​​能不同(对于相同的命令),具体取决于操作数。

您可以做的是拆卸处理部分,查看所使用的命令(即唯一),查看它们平均需要多少个周期,并从中得出最佳/最坏情况您的算法(还考虑到每个命令在循环中使用了多少次,甚至可能是)。

如果您已经处于足够低的级别,以便您确定使用了哪些命令,那么您的估计将更接近实际值。

希望这可以帮助。