Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SSE4.1与gcc,如何有旧的兼容代码?_C++_Linux_Unix_Gcc_Sse - Fatal编程技术网

C++ SSE4.1与gcc,如何有旧的兼容代码?

C++ SSE4.1与gcc,如何有旧的兼容代码?,c++,linux,unix,gcc,sse,C++,Linux,Unix,Gcc,Sse,我的应用程序中有一些SSE4.1点,我在其中使用SSE4.1 有没有办法让我的应用程序在较新的系统上运行SSE4.1,并在较旧的系统上自动执行类似“回退”的操作?我阅读了-mtune选项,但我无法理解它是否满足我的需要。不存在自动回退。 您应该使用uu cpuid内在函数来查询SSE4.1 ISA: 以下是如何做到这一点: bool IsSSE41Enabled() { int CPUInfo[4]; __cpuid(CPUInfo, 1); return 0 != (C

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


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

不存在自动回退。 您应该使用uu 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
}
bool IsSSE41Enabled()
{
int-CPUInfo[4];
__cpuid(CPUInfo,1);

返回0!=(CPUInfo[2]&(1你想做的是所谓的“cpu调度”思想是,你有一个函数的多个版本,比如一个支持SSE的和一个通用的,然后你在初始化过程中查询cpu并选择你应该使用的版本(通过设置函数指针或类似的东西).我不是这方面的专家,但这里有一篇关于这方面的好帖子:


您是否手动编写了SSE4.1代码,还是依赖于编译器自动矢量化?手动编写。不幸的是,我没有回退代码:(如果GCC模拟较旧体系结构的内联汇编或内部函数,我会感到惊讶。假设您使用的是内部函数,则可以手动实现此类替换。编译器可能足够智能,可以使用多个指令集自动向量化同一代码。我不知道有任何向后的情况,虽然。嗯,因此没有办法:(我想我需要考虑写回退代码或放弃支持: