例を挙げて質問します。これで、という関数ができました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()
。
多分私はいくつかの悪い習慣があります。いくつか提案をいただけますか?ありがとう。