我正在研究人脸检测,其中我将输入作为.bmp文件,并检测人脸并在人脸上绘制一个矩形。
但是当我添加一个名为"cvDetect“的函数来检测人脸时,我得到了一些分割错误,在下面的代码行中-
_mm_store_ps(&c(y, 4.0*x), _mm_sub_ps(_mm_load_ps(a.data(y, 4.0*x)), _mm_load_ps(b.data(y, 4.0*x))));
在调试时,我发现由于这些函数存在一些内存对齐问题。有没有人能帮我解决这个问题,代码是用C++写的,我用的是Linux。
发布于 2010-12-17 07:20:41
我真的对这些SSE扩展一无所知,但听起来您在调整变量方面遇到了问题。要使用变量声明声明特定的对齐,需要不可移植的扩展,根据编译器的不同而不同。
对于GCC,你应该像这样声明你的变量:
// Declare a variable called 'a' of type __m128, aligned at 16 bytes.
__m128 a __attribute__((aligned (16)));
对于Microsoft Visual C++,您可以这样做:
__declspec(align(16)) __m128 a;
发布于 2010-12-17 14:49:32
现在的一个快速解决方案是使用未对齐的加载和存储,即
_mm_storeu_ps(&c(y, 4.0*x), _mm_sub_ps(_mm_loadu_ps(a.data(y, 4.0*x)), _mm_loadu_ps(b.data(y, 4.0*x))));
除非你使用的是Corei5/i7,否则性能会受到影响,但至少它会正常工作。
不过,最终您需要确保数据始终是16字节对齐的。
发布于 2010-12-17 07:05:42
_ps
函数需要16字节对齐的内存操作数
https://stackoverflow.com/questions/4468420
复制相似问题