У меня есть алгоритм, который использует ручную оптимизацию с помощью встроенных функций SSE (2). Более того, алгоритм также сможет извлечь выгоду из 256-битных регистров AVX в будущем.x86 CPU Dispatching for SSE/AVX в C++
Мой вопрос: что это лучший способ
- Регистрация варианты доступности моего класса во время компиляции; поэтому, если мои классы, скажем:
Foo
,FooSSE2
иFooAVX
Мне требуется средство определения во время выполнения, в котором скомпилированы классы. - Определите возможности текущего процессора. На самом низком уровне это приведет к вызову
cpuid
. - Решите во время выполнения, что использовать на основе того, что скомпилировано и что поддерживается.
Хотя я могу взломать большую часть вышеуказанного, кажется, достаточно распространенной проблемой, что, должно быть, возникли некоторые лучшие практики. В идеале я пытаясь избежать #ifdef
шути
#ifdef COMPILE_SSE2
if (sse2_supported)
// Use the SSE2 class
#endif