在可用的CPU支持上使用不同的类

时间:2014-12-01 21:28:03

标签: c++

如何根据可用的CPU功能更改已使用的类?

例如,在客户端支持的SIMD更改已使用的Vector4 - 类:

bool has_sse = get_cpuid_info( "sse" );

if( has_sse ) {
    // use Vector4SIMD only in the entire app
} else {
    // fallback to a plain Vector4-class
}

我可以想到一些方法(编辑:添加建议):

  • 使用动态库
  • 动态演员
  • 虚拟派遣
  • 编译器特定属性

现在的软件是如何完成这种或类似行为的?

1 个答案:

答案 0 :(得分:0)

它可能是特定于编译器的。最近的GCC提供了__builtin_cpu_supports等特定x86 builtins等。另请参阅ifunc function attribute

当然,正如Mark Ransom所述,您可以使用虚拟方法。但是,对于非常简短的快速小函数来说,这可能是不值得的(你希望它们被内联)。