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