我有一个数组,由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
不是已经对齐了吗?那么为什么会导致访问冲突错误?还有什么我可能缺少的吗?
谢谢。
malloc
通常只保证 8 字节对齐(double
的对齐
如果你想要 16 字节对齐,你可以自己填充分配并适当调整指针,或者根据您的平台使用 posix_memalign
/_aligned_malloc
来获得必要的对齐。