Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
英特尔SSE Intrinsics_mm_load_si128分段故障,_C_Sse_Simd_Memory Alignment_Intrinsics - Fatal编程技术网

英特尔SSE Intrinsics_mm_load_si128分段故障,

英特尔SSE Intrinsics_mm_load_si128分段故障,,c,sse,simd,memory-alignment,intrinsics,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)

我目前正在使用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
#包括
#包括
//=======================================================初始化矩阵
int*对齐的_矩阵;
posix_memalign((void**)和aligned_矩阵,16,sizeof(int)*25);
对于(ssize_t i=0;i<25;i++)
对齐的_矩阵[i]=2;//赋值为2的统一值
}
返回矩阵;
}
//=====================================================================然后,
__m128i xmm8,xmm9;
xmm8=_mm_load_si128((_m128i*)(对齐矩阵));//从第一行开始读4
//下面这行是分段错误发生的地方。。。
xmm9=_mm_load_si128((_m128i*)(对齐矩阵+5));//4从下一排开始
我有一种感觉,这可能与记忆对齐或其他什么有关,但…我无法指出我在这方面出了什么问题

我用的是

叮当声-msse-msse2-msse4.1


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

对于第二次加载,您需要使用
\u mm\u loadu\u si128
,因为源数据未对齐。说明:从16字节对齐的基址开始+5个整数的偏移量将不再是16字节对齐的。

这有什么关系?这里我要做的就是读取第一行的前4个元素,然后移到下一行并读取下4个元素。为了到达下一行,我必须“对齐矩阵+5”,因为它是5 x 5矩阵..哇,它工作了!非常感谢。顺便说一句,如果我使用未对齐的负载,与对齐的负载相比,会对性能产生负面影响吗?在较旧的CPU上,是的,但在较新的CPU上,惩罚要小得多,但仍应尽可能避免。