Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何监控SIMD指令的使用量_Linux_Intel_Cpu Usage - Fatal编程技术网

Linux 如何监控SIMD指令的使用量

Linux 如何监控SIMD指令的使用量,linux,intel,cpu-usage,Linux,Intel,Cpu Usage,如何监视进程的SIMD SSE、AVX、AVX2、AVX-512指令使用量?例如,htop可用于监视一般CPU使用情况,但不是专门监视SIMD指令的使用情况。我认为统计所有SIMD指令(不仅仅是FP math)的唯一可靠方法是动态插装,例如通过Intel PIN/SDE之类的工具 请参阅sde64-mix-./my_程序,以打印该运行程序的指令组合,例如中的输出 如果可以安全地连接到已经运行的进程,特别是多线程进程,我认为没有一个好方法可以像top/htop那样实现这一点 也可以使用最后一个分支

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

我认为统计所有SIMD指令(不仅仅是FP math)的唯一可靠方法是动态插装,例如通过Intel PIN/SDE之类的工具

请参阅sde64-mix-./my_程序,以打印该运行程序的指令组合,例如中的输出

如果可以安全地连接到已经运行的进程,特别是多线程进程,我认为没有一个好方法可以像top/htop那样实现这一点

也可以使用最后一个分支记录来记录/重建执行路径并对所有内容进行计数,以获得动态指令计数,但我不知道用于此的工具。从理论上讲,它可以附加到已经运行的程序而不会有太大的危险,但要对所有正在运行的进程执行此操作,需要大量的计算、反汇编和计数指令。不像只是询问内核在上下文开关上跟踪的CPU使用情况统计

您需要硬件指令计数支持,才能像top那样真正高效

对于SIMD浮点数学,特别是不是FP Shuffle,只是真正的FP数学(如vaddps),存在性能计数器事件

e、 g.从性能列表输出:

fp_arith_inst_退休。128b_打包单 [SSE/AVX计算128位压缩单精度数 失效的浮点指令。每个计数代表4 计算。适用于SSE*和AVX*压缩单精度 浮点指令:添加SUB MUL DIV MIN MAX RCP RSQRT SQRT DPP FMNADD/SUB。DPP和FMNADD/SUB指令计数为 它们对每个元素执行多个计算]

所以它甚至不计算UOP,而是计算失败。还有其他事件用于…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
# fixme: that brace-expansion doesn't expand properly; it separates with spaces not commas.
故意省略fp_arith_inst_retired.scalar_{double,single},因为您只询问SIMD,XMM寄存器上的标量指令不计数,IMO

您可以使用-p PID而不是命令将perf附加到正在运行的进程。或者按照中的建议使用perf top 看

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


尽管如此,它还是受硬件支持的,因此对于htop这样的东西来说,如果让它长期运行的话,它可能足够便宜,而不会浪费大量的CPU时间。

我认为计算所有SIMD指令(不仅仅是FP math)的唯一可靠方法是动态插装,例如通过Intel PIN/SDE之类的工具

请参阅sde64-mix-./my_程序,以打印该运行程序的指令组合,例如中的输出

如果可以安全地连接到已经运行的进程,特别是多线程进程,我认为没有一个好方法可以像top/htop那样实现这一点

也可以使用最后一个分支记录来记录/重建执行路径并对所有内容进行计数,以获得动态指令计数,但我不知道用于此的工具。从理论上讲,它可以附加到已经运行的程序而不会有太大的危险,但要对所有正在运行的进程执行此操作,需要大量的计算、反汇编和计数指令。不像只是询问内核在上下文开关上跟踪的CPU使用情况统计

您需要硬件指令计数支持,才能像top那样真正高效

对于SIMD浮点数学,特别是不是FP Shuffle,只是真正的FP数学(如vaddps),存在性能计数器事件

e、 g.从性能列表输出:

fp_arith_inst_退休。128b_打包单 [SSE/AVX计算128位压缩单精度数 失效的浮点指令。每个计数代表4 计算。适用于SSE*和AVX*压缩单精度 浮点指令:添加SUB MUL DIV MIN MAX RCP RSQRT SQRT DPP FMNADD/SUB。DPP和FMNADD/SUB指令计数为 它们对每个元素执行多个计算]

所以它甚至不计算UOP,而是计算失败。还有其他事件用于…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
# fixme: that brace-expansion doesn't expand properly; it separates with spaces not commas.
Int 通常省略fp_arith_inst_retired.scalar_{double,single},因为您只询问了SIMD,XMM寄存器上的标量指令不计数,IMO

您可以使用-p PID而不是命令将perf附加到正在运行的进程。或者按照中的建议使用perf top 看

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


尽管如此,它还是受硬件支持的,因此如果长期运行,它的价格可能足够便宜,可以让htop这样的东西使用,而不会浪费大量CPU时间。

vtune通常是您的最佳选择。vtune通常是您的最佳选择。