我写了一些代码来做一堆数学运算,它需要快速运行,所以我需要它来使用 SSE 和 AVX 指令。我正在使用带有标志的 g++ 编译它 -O3
和 -march=native
,所以我认为它使用的是 SSE 和 AVX 指令,但我不确定。我的大部分代码如下所示:
for(int i = 0;i<size;i++){
a[i] = b[i] * c[i];
}
有什么方法可以判断我的代码(编译后)是否使用 SSE 和 AVX 指令?我想我可以看一下程序集,但我不知道程序集,也不知道如何查看编译器输出的程序集。
原文由 BadProgrammer99 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Linux 下,你也可以反编译你的二进制文件:
然后找到 所有 SSE 指令:
仅查找 打包 的 SSE 指令(@Peter Cordes 在评论中建议):
查找所有 SSE2 指令(除了 MOVSD 和 CMPSD,它们在 80386 中首次引入):
仅查找打包的 SSE2 指令:
查找所有 SSE3 指令:
查找所有 SSSE3 指令:
查找所有 SSE4 指令:
查找最常见的 AVX 指令(包括标量,包括 AVX2、AVX-512 系列和一些 FMA,如
vfmadd132pd
):注意:使用
gawk
和nawk
进行测试。