В linux x64, если я компилирую код с помощью gcc таким образом
gcc -m32 -march=native -mfpmath=sse -c -ftree-vectorize myfile.c
если я взгляну на сборку, я не увижу какой-либо инструкции SSE или используемого регистра, и результат кода точно такой же, как код, сгенерированный без какого-либо флага gcc myfile.c
В моем коде много операций с массивами и матрицами с плавающей запятой, поэтому довольно странно, что gcc не использует SSE и не выполняет никакой оптимизации по сравнению с базовой компиляцией.
Почему? Это ошибка компилятора?
РЕДАКТИРОВАТЬ
если я добавлю флаг -msse2
, компилятор также будет использовать инструкции SSE, но march=native
должен включать все инструкции, поддерживаемые текущим ЦП, следовательно, также SSE2. Почему это происходит?
-msse2
. - person Paul R   schedule 24.06.2014-O3
? - person Z boson   schedule 24.06.2014-m32
в моей системе он показывает, что SSE2 включен. Какой конкретно у вас процессор? - person Z boson   schedule 27.06.2014-msse2
. Может ли это зависеть от того, что я на виртуальной машине? - person AndreaF   schedule 28.06.2014-march=native
ведет себя плохо на некоторых виртуальных машинах, потому что они могут рекламировать себя как невозможные машины (например, 64-битный Pentium 2). Однако, если он говорит, что sse2 включен, я действительно не понимаю, как -msse2 может иметь значение. - person Marc Glisse   schedule 02.08.2014