Jaki jest właściwy sposób używania różnych wersji intrinsics SSE w GCC?

Zadam pytanie, podając przykład. Teraz mam funkcję o nazwiedo_something().

Ma trzy wersje:do_something(), do_something_sse3(), ido_something_sse4(). Po uruchomieniu mojego programu wykryje on funkcję procesora (sprawdź, czy obsługuje SSE3 lub SSE4) i odpowiednio wywołaj jedną z trzech wersji.

Problemem jest: Kiedy buduję swój program za pomocą GCC, muszę go ustawić-msse4 dlado_something_sse4() skompilować (np. dla pliku nagłówkowego<smmintrin.h> do włączenia).

Jeśli jednak ustawię-msse4, następnie gcc może używać instrukcji SSE4, a niektóre wewnętrznedo_something_sse3() jest także tłumaczony na niektóre instrukcje SSE4. Jeśli więc mój program działa na procesorze, który ma tylko obsługę SSE3 (ale nie obsługuje SSE4), powoduje „nielegalne instrukcje”, gdy połączeniado_something_sse3().

Może mam złą praktykę. Czy możesz podać jakieś sugestie? Dzięki.

questionAnswers(4)

yourAnswerToTheQuestion