无法将float数组读入__m128

时间:2013-05-22 14:43:40

标签: c load offset sse vectorization

我正在摆弄矢量化(第一次学习)。关键是看我是否可以展开循环。我喜欢像这样加载四个连续的浮点数,参见Seg fault。

el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]);   // Seg fault

我理解为什么我会遇到seg错误。我的问题是,是否有一种带有偏移的_mm_loading的简洁方法?

1 个答案:

答案 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的代码时,您不必更改索引。)