【发布时间】:2023-03-07 00:29:02
【问题描述】:
我有一个算法,它受益于 SSE(2) 内在函数的手动优化。此外,该算法未来还将能够受益于 256 位 AVX 寄存器。
我的问题是最好的方法是什么
- 在编译时注册我的类的可用性变体;因此,如果我的类是:
Foo、FooSSE2和FooAVX,我需要一种方法来确定在运行时编译了哪些类。 - 确定当前 CPU 的能力。在最低级别,这将导致
cpuid调用。 - 在运行时根据编译的内容和支持的内容决定要使用的内容。
虽然我可以破解上述大部分内容,但它似乎是一个足够常见的问题,必须出现一些最佳实践。理想情况下,我试图避免 #ifdef 混乱
#ifdef COMPILE_SSE2
if (sse2_supported)
// Use the SSE2 class
#endif
【问题讨论】: