我如何监视SIMD指令的使用量

问题描述 投票:1回答:1

如何监视进程的SIMD(SSE,AVX,AVX2,AVX-512)指令使用量?例如,htop可用于监视常规CPU使用情况,但不能专门用于监视SIMD指令使用情况。

linux intel cpu-usage
1个回答
0
投票

我认为对all SIMD指令(不仅仅是FP数学)进行计数的唯一可靠方法是动态检测(例如,通过诸如Intel PIN / SDE之类的东西)。

请参见How to characterize a workload by obtaining the instruction type breakdown?How do I determine the number of x86 machine instructions executed in a C program?,特别是[sde64 -mix -- ./my_program以打印程序的指令组合]对于该运行,示例输出为libsvm compiled with AVX vs no AVX

[使用上次分支记录的东西来记录/重构执行路径并计算所有内容,但也可能不知道使用什么工具。


特别是对于SIMD 浮点数学(不是FP随机播放,只是像vaddps这样的真实FP数学),有性能计数器事件。

例如从perf list输出:

fp_arith_inst_retired.128b_packed_single[SSE / AVX计算的128位压缩单精度数浮点指令已退休。 每个数字代表4计算。适用于SSE *和AVX *打包的单精度浮点指令:ADD SUB MUL DIV MIN MAX RCP RSQRT SQRTDPP FM(N)ADD / SUB。 DPP和FM(N)ADD / SUB指令的计数是他们对每个元素执行多次计算]

因此,它甚至没有计算uops,而是计算FLOPS。 ...pd压缩双精度型还有其他事件,每个事件都有256位版本。 (我假设在具有AVX512的CPU上,这些事件也有512位向量版本。)

您可以使用perf来统计它们在进程之间以及在所有内核上的执行情况。或对于单个过程

## count math instructions only, not SIMD integer, load/store, or anything else
perf stat -e cycles:u,instructions:u,fp_arith_inst_retired.{128,256}b_packed_{double,single}:u  ./my_program

(有意省略fp_arith_inst_retired.scalar_{double,single},因为您只询问过XMM寄存器上的SIMD和标量指令,IMO不计。]

© www.soinside.com 2019 - 2024. All rights reserved.