x86 CPU调度C ++中的SSE / AVX

时间:2011-01-24 23:56:43

标签: x86 sse simd avx

我有一个算法,它可以通过SSE(2)内在函数进行手动优化。此外,该算法将来也能从256位AVX寄存器中受益。

我的问题是什么是

的最佳方法
  • 在编译时注册我的类的可用性变体;所以,如果我的课程是:FooFooSSE2FooAVX我需要一种在运行时确定编译的类的方法。
  • 确定当前CPU的功能。在最低级别,这将导致cpuid电话。
  • 根据编译的内容和支持的内容,在运行时确定要使用的内容。

虽然我可以破解上面的大部分内容,但似乎是一个普遍的问题,必须出现一些最佳实践。理想情况下,我试图避免#ifdef混乱

#ifdef COMPILE_SSE2
    if (sse2_supported)
        // Use the SSE2 class
#endif

1 个答案:

答案 0 :(得分:1)

只需创建一个“工厂”类或函数来创建类的适当实例,并隐藏实现工厂的文件中的所有逻辑。

有一些类或文件本地布尔值,如“isSSE2Supported”或“isAVXSupported”。在启动时,调用一些函数来初始化这些值。然后,您的工厂逻辑可以检查值以确定要使用的类。

由于SSE2总是在x64芯片上可用,所以你真的不想避免所有的ifdef。您可以避免在某些类中编译x64版本。