J'essaye de compiler ce projet à partir de github qui est implémenté en C++ avec SIMD intrinsèque (SSE4.1). Le projet dans github est donné en tant que solution Visual Studio, mais j'essaie de le porter dans Qtcreator avec cmake. Pendant que j'essaye de le compiler, j'obtiens l'erreur suivante:
/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)
ce qui, j'en suis sûr, a à voir avec la partie d'optimisation SSE, mais comme je ne connais pas bien ce sujet, je ne sais pas vraiment ce que cela signifie et comment je peux le résoudre. ne pouvait pas vraiment avoir quelque chose d'utile. Le code qui pose le problème suivant est le suivant:
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++;
}
}
quelqu'un peut-il m'expliquer quel est le problème et ce qui me manque. Merci d'avance.
add in file.pro:QMAKE_CXXFLAGS + = - msse3