我正在摆弄矢量化(第一次学习者)。它的重点是看看我是否可以展开一个循环。我喜欢像这样加载四个连续的浮点数,请参阅 Seg 错误。
el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]); // Seg fault
我明白为什么会出现段错误。我的问题是,是否有一种巧妙的 _mm_loading 偏移方式?
我正在摆弄矢量化(第一次学习者)。它的重点是看看我是否可以展开一个循环。我喜欢像这样加载四个连续的浮点数,请参阅 Seg 错误。
el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]); // Seg fault
我明白为什么会出现段错误。我的问题是,是否有一种巧妙的 _mm_loading 偏移方式?
评论者已经解决了它,但是当问题出现在未回答的问题列表中时,这很烦人。
_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 代码时,您不必更改索引。)