Какое различие между cflgs sse параметрами -msse, -msse2, -mssse3, -msse4 rtc..? и как определить? - программирование
Подтвердить что ты не робот

Какое различие между cflgs sse параметрами -msse, -msse2, -mssse3, -msse4 rtc..? и как определить?

Для параметров GCC CFLAGS: -msse, -msse2, -mssse3, -msse4, -msse4.1, -msse4.2. Являются ли они исключительными в их использовании или могут использоваться вместе?

Мое понимание заключается в том, что выбор, который нужно установить, зависит от того, поддерживает ли его арка цели, которую программа запускает, или нет, верно ли это?

Если да, то как я могу узнать, что поддерживает моя целевая арка? В Linux я cat/proc/cpuinfo, но что, если Mac или Windows?

Спасибо!

4b9b3361

Ответ 1

Коммутатор -m может использоваться параллельно, кроме того, некоторые из них подразумеваются архитектурой или другими коммутаторами. Например, если вы создаете код для x86_64, -msse -msse2 всегда включен.

Для кода, предназначенного для запуска в вашей системе, вы должны выбрать -march=native, который будет выбирать то, что доступно на вашем процессоре. Например, если у вас есть Sandy Bridge, это позволит -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx.

Если вы хотите подробно указать, какая инструкция должна использоваться, вы должны использовать только то, что доступно, а не всегда "последнее". "Последний" в настоящее время -mavx2, который я не рекомендую: первый процессор, который будет его поддерживать, будет доступен в 2013 году.