Intel SSE Intrinsics _mm_load_si128分段错误,

时间:2015-05-17 08:58:27

标签: c sse simd memory-alignment intrinsics

我目前使用SSE功能处理5 x 5矩阵。

我试图将x4 128位整数值加载到xmm寄存器,如下所示,

#include <emmintrin.h>
#include <smmintrin.h>
//===================================== Initialising matrix

int* aligned_matrix;
posix_memalign((void **)&aligned_matrix, 16, sizeof(int) * 25);

for (ssize_t i = 0; i < 25; i++) 
    aligned_matrix[i] = 2; // uniform value of 2 assigned
}
return aligned_matrix;
}

//===================================== then, 

__m128i xmm8, xmm9; 

xmm8 = _mm_load_si128((__m128i *)(aligned_matrix)); // read 4 from first row

// this line below is where the segmentation fault occurs...
xmm9 = _mm_load_si128((__m128i *)(aligned_matrix + 5)); // 4 from next row

我有一种感觉,这可能与记忆对齐有关,但是......我无法确定我在哪里出错...

我使用以下内容,

clang -msse -msse2 -msse4.1

*注意 - 我添加aligned_matrix + 5的原因是从5x5矩阵的第二行读取接下来的4个元素。

1 个答案:

答案 0 :(得分:3)

对于第二次加载,您需要使用data.frame,因为源数据未对齐。说明:与16字节对齐的基址的+5整数偏移量将不再是16字节对齐。