Я задам свой вопрос, представив пример. Теперь у меня есть функция, называемая do_something()
.Каким образом можно использовать разные версии SSE-встроенных функций в GCC?
Имеет три версии: 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()
.
Возможно, у меня есть плохая практика. Не могли бы вы дать некоторые предложения? Благодарю.
Я думаю, что стандартный подход заключается в компиляции различных версий в отдельных единицах компиляции. – Mysticial
@Mysticial, сначала спасибо за редактирование моего вопроса. Насколько я понимаю, «скомпилировать разные версии в отдельных единицах компиляции» означает: поместить все 'do_things_sse4' в файл' functios_sse4.c' и скомпилировать его с помощью опции '-msse4'; и скомпилируйте 'functions_sse3.c' с' -msse3'. Я попробую это. (Возможно, мне придется восстановить мои коды, которые были первоначально написаны для MSVC) – shengbinmeng
Да, это именно то, что я имел в виду. :) – Mysticial