我有一个算法,它可以通过SSE(2)内在函数进行手动优化。此外,该算法将来也能从256位AVX寄存器中受益。
我的问题是什么是
的最佳方法Foo
,FooSSE2
和FooAVX
我需要一种在运行时确定编译的类的方法。cpuid
电话。虽然我可以破解上面的大部分内容,但似乎是一个普遍的问题,必须出现一些最佳实践。理想情况下,我试图避免#ifdef
混乱
#ifdef COMPILE_SSE2
if (sse2_supported)
// Use the SSE2 class
#endif
答案 0 :(得分:1)
只需创建一个“工厂”类或函数来创建类的适当实例,并隐藏实现工厂的文件中的所有逻辑。
有一些类或文件本地布尔值,如“isSSE2Supported”或“isAVXSupported”。在启动时,调用一些函数来初始化这些值。然后,您的工厂逻辑可以检查值以确定要使用的类。
由于SSE2总是在x64芯片上可用,所以你真的不想避免所有的ifdef。您可以避免在某些类中编译x64版本。