如果我以这种方式使用 gcc 编译代码,则在 linux x64 上
gcc -m32 -march=native -mfpmath=sse -c -ftree-vectorize myfile.c
如果我看一下程序集,我看不到使用任何 SSE 指令或寄存器,并且代码结果与生成的代码完全相同,没有任何标志 gcc myfile.c
在我的代码中,对浮点数组和矩阵进行了许多操作,因此与基本编译相比,gcc 不使用 SSE 并且不执行任何优化,这很奇怪。
为什么?这是编译器的错误吗?
编辑
如果我添加标志-msse2
,编译器也使用 SSE 指令,但march=native
应该包括当前 CPU 支持的所有指令,因此也包括 SSE2。为什么会这样?