首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何监控SIMD指令的使用量?

如何监控SIMD指令的使用量?
EN

Stack Overflow用户
提问于 2020-02-06 22:48:22
回答 1查看 1.6K关注 0票数 1

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 04:19:14

我认为计算所有SIMD指令(不仅仅是FP数学)的唯一可靠方法是动态测试(例如,通过像Intel PIN /SDE这样的工具)。

请参见sde64 -mix -- ./my_program (特别是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? )以打印该运行的程序的指令组合,例如libsvm compiled with AVX vs no AVX中的输出。

如果能够安全地连接到已经运行的进程,特别是多线程一次,我不认为有一种好的方法可以像top / htop这样。

可能还可以使用最后一个分支记录来获取动态指令计数,以记录/重构执行路径并对所有内容进行计数,但我不知道有哪些工具可用于此。理论上,这可以附加到已经运行的程序中,而不会有太大的危险,但是需要大量的计算(分解和计数指令)才能对所有正在运行的进程()进行实时计算。不只是向内核询问它在上下文开关上跟踪的CPU使用情况统计数据。

你需要硬件指令计数的支持,这样才能像top那样有效。

对于SIMD浮点数学(不是FP洗牌,而是像vaddps这样的实际FP数学),会有一些特殊的计数器事件。

例如,从perf list输出:

fp_arith_inst_retired.128b_packed_single

SSE/AVX计算128位单精度浮点指令退役数。每个计数表示4个计算。适用于SSE*和AVX*打包的单精度浮点指令:添加子MUL、DIV、最小、最大RCP、RSQRT、SQRT、DPP、FM(N)、ADD / SUB。DPP和FM(N)添加/子指令在每个元素执行多个计算时计算两次

所以这根本不是在计算,而是在计算失败。对于每个版本的...pd打包双版本和256位版本,还有其他事件.(我假设在带有AVX512的CPU上,也有这些事件的512位矢量版本。)

您可以使用perf在跨进程和在所有核上全局计算它们的执行情况。或者一个单一的过程

代码语言:javascript
运行
复制
## 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
# fixme: that brace-expansion doesn't expand properly; it separates with spaces not commas.

(海事组织,故意省略fp_arith_inst_retired.scalar_{double,single},因为您只询问了关于SIMD和XMM寄存器上的标量指令不算在内。)

(您可以通过使用perf -p PID 而不是命令将附加到正在运行的进程。

您可以运行perf stat -a来对所有内核进行全局监视,而不管正在执行的是什么进程。但同样,这只是计算FP的数学,而不是一般的SIMD。

尽管如此,它仍然是硬件支持的,因此,如果你让它长期运行,它就足够便宜,可以在不浪费大量CPU时间的情况下使用htop

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60104698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档