ThT*_*ThT 12 c++ sse compilation
我试图从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)
Run Code Online (Sandbox Code Playgroud)
我确信它与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++;
}
}
Run Code Online (Sandbox Code Playgroud)
谁能解释我是什么问题,我错过了什么.提前致谢.
| 归档时间: |
|
| 查看次数: |
27336 次 |
| 最近记录: |