我正在摆弄矢量化(第一次学习)。关键是看我是否可以展开循环。我喜欢像这样加载四个连续的浮点数,参见Seg fault。
el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]); // Seg fault
我理解为什么我会遇到seg错误。我的问题是,是否有一种带有偏移的_mm_loading的简洁方法?
答案 0 :(得分:0)
_mm_load_ps(&array[0]) // load a vector of array[0..3]
_mm_load_ps(&array[1]) // load a vector of array[1..4]. different alignment than array[0]
// what you probably want is:
_mm_load_ps(&array[4]) // load a vector of array[4..7], aligned if array is aligned
索引步幅应为sizeof(vector_type)/sizeof(array[0])
。 (然后当您扩展AVX的代码时,您不必更改索引。)