例を挙げて質問します。これで、という関数ができましたdo_something()。
do_something()、、、の3つのバージョンがdo_something_sse3()ありdo_something_sse4()ます。プログラムを実行すると、CPU機能が検出され(SSE3またはSSE4をサポートしているかどうかを確認)、それに応じて3つのバージョンのいずれかが呼び出されます。
問題は次のとおりです。GCCを使用してプログラムをビルドする場合、コンパイルするように設定-msse4するdo_something_sse4()必要があります(たとえば、ヘッダーファイル<smmintrin.h>をインクルードするため)。
ただし、を設定する-msse4と、gccはSSE4命令の使用を許可され、の一部の組み込み関数do_something_sse3()も一部のSSE4命令に変換されます。したがって、私のプログラムがSSE3のみ(SSE4はサポートされていない)のCPUで実行されている場合、を呼び出すと「不正な命令」が発生しますdo_something_sse3()。
多分私はいくつかの悪い習慣があります。いくつか提案をいただけますか?ありがとう。