Мне не нужно указывать архитектуру с MSV C. Это правильно?
Да, это действительно правильно. С MSV C, по умолчанию, Auto-Vectorizer включен и подбирает соответствующий набор инструктурион для быстрой векторизации. Более того, даже если вы укажете arch
, Auto-Vectorizer может генерировать команды, отличные от заданных переключателем /arch
, как указано в документации . Например, когда вы компилируете /arch:SSE2
, могут выдаваться SSE4.2
инструкции.
С другой стороны, векторизатору VS не хватает некоторых функций по сравнению с g cc или clang.
С G CC и clang мой код будет автоматически векторизован, если я скомпилирую с -O2 -ftree-vectorize -march=XYZ
? -O3 -march=XYZ ?
Не обязательно, чтобы включить векторизацию сокращений с плавающей запятой, вам также необходимо использовать -ffast-math
или -fassociative-math
. Однако, в общем, да, это будет включено. Вы можете найти то же, что написано в документации , Векторизация включена с помощью флага -ftree-vectorize и по умолчанию в -O3
PS: вы можете использовать https://godbolt.org чтобы увидеть все это в действии!