我有malloc
按以下方式分配的数组:
double * a = ( double * ) malloc( lda * (k+1) * sizeof( double ) );
其中lda=1000
和k
是40的倍数。
然后我尝试在下面列出的代码
中的寄存器中加载a
的值
reg = _mm_load_pd( (double *) & a[ (p*lda)+0 ]);
其中p
是循环中受控制的索引。
此代码产生访问冲突错误。
我知道要使用_mm_load_pd
,数组必须是16字节对齐的。 malloc
是否已经进行了对齐?为什么然后它会导致访问冲突错误?还有什么我可能会遗失的吗?
感谢。
答案 0 :(得分:1)
malloc
通常只保证8字节对齐(double
的对齐)。
如果你想要16字节对齐,你可以自己填充分配并适当调整指针,或者根据你的平台使用posix_memalign
/ _aligned_malloc
来获得必要的对齐。