【发布时间】:2017-10-26 03:18:01
【问题描述】:
我刚开始使用 SSE 指令: 程序将两个矩阵读入一个连续的缓冲区,然后尝试从那里对它们进行操作,代码如下:
void multMatrix(void * buffer,int n){
int i,j;
float *p = (float*) buffer;
float *q = (float*) buffer + (n*n);
float mr[n][n];
__m128 va = _mm_load_ps(&p[0]);
__m128 vb = _mm_load_ps(&q[0]);
__m128 mm_r = _mm_add_ps( va, vb );
_mm_store_ps (mr[0],mm_r);
return;
}
缓冲区定义为:
void * buffer = malloc(sizeof(float)*n*n*2 + sizeof(float));
我得到段。这条线的故障:__m128 mm_r = _mm_add_ps( va, vb );
但是如果我评论_mm_store_ps (mr[0],mm_r);它会正常退出。
我只是在测试和学习 SSE 指令,但我对这个程序的目标是:
A[n][n] * B[n][n] = C[n][n]
【问题讨论】:
-
SSE 数组需要在特定边界上对齐。
malloc可能没有使用正确的对齐方式。也没有定义数组。您需要使用特定于平台或编译器的函数以适当的对齐方式进行分配。
标签: c segmentation-fault sse intrinsics