Я задам свой вопрос, представив пример. Теперь у меня есть функция с именем do_something()
.
Он имеет три версии: do_something()
, do_something_sse3()
и do_something_sse4()
. Когда моя программа запустится, она обнаружит функцию ЦП (см., Поддерживает ли она SSE3 или SSE4) и соответствующим образом вызовет одну из трех версий.
Проблема заключается в следующем:. Когда я создаю свою программу с помощью GCC, мне нужно установить -msse4
для do_something_sse4()
для компиляции (например, для заголовочного файла <smmintrin.h>
для включения).
Однако, если я устанавливаю -msse4
, то gcc разрешено использовать инструкции SSE4, а некоторые встроенные в do_something_sse3()
также переводятся в некоторые инструкции SSE4. Поэтому, если моя программа работает на процессоре, который поддерживает только SSE3 (но не SSE4), он вызывает "незаконную инструкцию" при вызовах do_something_sse3()
.
Может быть, у меня плохая практика. Не могли бы вы дать некоторые предложения? Спасибо.