c++ - 内联调用 always_inline 失败 '__m128i _mm_cvtepu8_epi32(__m128i)' : target specific option mismatch _mm_cvtepu8_epi32 (__m128i __X)

标签 c++ compilation sse

我正在编译 this project来自 github,它是用 C++ 实现的,带有 SIMD 内在函数(SSE4.1)。 github 中的项目是作为 Visual Studio 解决方案提供的,但我正在尝试使用 cmake 将其移植到 Qtcreator 中。当我尝试编译它时,我收到以下错误:

/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include/smmintrin.h:520:1: error: inlining failed in call to always_inline '__m128i _mm_cvtepu8_epi32(__m128i)': target specific option mismatch
 _mm_cvtepu8_epi32 (__m128i __X)

我确信它与 SSE 优化部分有关,但由于我对这个主题不太熟悉,我真的不知道它的含义以及如何解决它,在我搜索的网络中我不能并没有真正得到有用的东西。给出以下问题的代码如下:

static void cvt8u32f(const Mat& src, Mat& dest, const float amp)
{
    const int imsize = src.size().area()/8;
    const int nn = src.size().area()- imsize*8 ;
    uchar* s = (uchar*)src.ptr(0);
    float* d = dest.ptr<float>(0);
    const __m128 mamp = _mm_set_ps1(amp);
    const __m128i zero = _mm_setzero_si128();
    for(int i=imsize;i--;)
    {
        __m128i s1 = _mm_loadl_epi64((__m128i*)s);

        _mm_store_ps(d,_mm_mul_ps(mamp,_mm_cvtepi32_ps(_mm_cvtepu8_epi32(s1))));
        _mm_store_ps(d+4,_mm_mul_ps(mamp,_mm_cvtepi32_ps(_mm_cvtepu8_epi32(_mm_srli_si128(s1,4)))));
        s+=8;
        d+=8;
    }
    for(int i=0;i<nn;i++)
    {
        *d = (float)*s * amp;
        s++,d++;
    }

}

有人可以解释一下问题是什么以及我缺少什么。提前致谢。

最佳答案

在 file.pro 中添加: QMAKE_CXXFLAGS +=-msse3

关于c++ - 内联调用 always_inline 失败 '__m128i _mm_cvtepu8_epi32(__m128i)' : target specific option mismatch _mm_cvtepu8_epi32 (__m128i __X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35772562/

相关文章:

c++ - 将 C++ 连接到 Matlab 进行绘图

c++ - 使用 minizip 解压 char 数组

c - 从 Notepad++ 执行gcc?

c - 等同于 AVX 中的 SSE unpacklo_ps/unpackhi_ps(对于 double )

c++ - 无法在嵌套模板类型之间转换

c++ - OpenCV - 仅适用于 g++。不是 gcc 或 nvcc

compiler-construction - 编译器: How to define this grammar?

python - 是否可以在运行脚本之前使用 numba 编译代码?

sse - 将分散索引转换为聚集索引的有效方法?

c++ - Constexpr 和 SSE 内在函数