SSE(2) 組み込み関数を使用した手動最適化の恩恵を受けるアルゴリズムがあります。さらに、このアルゴリズムは、将来的に 256 ビット AVX レジスターの恩恵を受けることもできます。
私の質問は、最善の方法は何ですか
- コンパイル時にクラスの可用性バリアントを登録します。したがって、私のクラスがたとえば:で
Foo
ある場合、どのクラスがコンパイルされているかを実行時に決定する手段が必要です。FooSSE2
FooAVX
- 現在の CPU の機能を確認します。最低レベルでは、これは
cpuid
呼び出しになります。 - 何がコンパイルされ、何がサポートされているかに基づいて、実行時に何を使用するかを決定します。
上記のほとんどをハッキングできますが、いくつかのベストプラクティスが出現したに違いないほど一般的な問題のようです. #ifdef
理想的には、私は混乱を避けようとしています
#ifdef COMPILE_SSE2
if (sse2_supported)
// Use the SSE2 class
#endif