用gcc SSE4.1,如何拥有旧的兼容代码?

时间:2013-11-25 19:48:56

标签: c++ linux unix gcc sse

我的应用程序中有一些SSE4.1点,我使用的是SSE4.1。

有没有办法让我的应用程序在较新的系统上运行SSE4.1并在旧系统上自动执行类似“后备”的操作?我读了-mtune选项,但我无法理解它是否符合我的要求。

2 个答案:

答案 0 :(得分:1)

不存在自动回退。 您应该使用__cpuid内在函数来查询SSE4.1 ISA: 在这里如何做到:

bool IsSSE41Enabled()
{
   int CPUInfo[4];
    __cpuid(CPUInfo, 1);

    return 0 != (CPUInfo[2] & (1<<19)); // 19th bit of 2nd reg means sse4.1 is enabled
}

答案 1 :(得分:1)

你想要做什么被称为“cpu dispatching”的想法是,你有一个函数的多个版本,比如一个SSE和一个泛型,然后你在初始化期间查询cpu并选择你应该使用哪个版本(通过设置函数指针或类似的东西)。我不是这方面的专家,但这里有一篇关于这个主题的好文章:

What's the proper way to use different versions of SSE intrinsics in GCC?