私はSSE(2)組み込み関数で手の最適化を行うアルゴリズムを利用しています。さらに、このアルゴリズムは将来、256ビットAVXレジスタの恩恵を受けることもできます。x86 CPU C++でのSSE/AVXのディスパッチ
私の質問は、コンパイル時に私のクラスの可用性のバリアントを登録し
- するための最良の方法は何かということです。だから私のクラスは:
Foo
、FooSSE2
とFooAVX
私は実行時にコンパイルするクラスを決定する手段が必要です。 - 現在のCPUの能力を決定します。最低レベルでは、
cpuid
コールになります。 - コンパイルされたものとサポートされているものに基づいて、実行時に何を使用するかを決定します。
私は上記のほとんどをハックすることができますが、いくつかのベストプラクティスが浮かび上がっているに違いない共通の問題であるようです。理想的には私はちょうどあなたのクラスの適切なインスタンスを作成し、工場を実装して、ファイル内のすべてのロジックを非表示にするには、「工場」クラスや関数を作成#ifdef
混乱
#ifdef COMPILE_SSE2
if (sse2_supported)
// Use the SSE2 class
#endif