我正在尝试使用 SSE 加速我的代码,以下代码运行良好。基本上,一个__m128
变量应该连续指向 4 个浮点数,以便一次执行 4 个操作。
此代码等效于c[i]=a[i]+b[i]
使用i
from 0
to进行计算3
。
float *data1,*data2,*data3
// ... code ... allocating data1-2-3 which are very long.
__m128* a = (__m128*) (data1);
__m128* b = (__m128*) (data2);
__m128* c = (__m128*) (data3);
*c = _mm_add_ps(*a, *b);
但是,当我想稍微移动我使用的数据(见下文)以c[i]=a[i+1]+b[i]
使用i
from 0
to进行计算时3
,它会在执行时崩溃。
__m128* a = (__m128*) (data1+1); // <-- +1
__m128* b = (__m128*) (data2);
__m128* c = (__m128*) (data3);
*c = _mm_add_ps(*a, *b);
我的猜测是它与__m128
128 位和float
数据是 32 位的事实有关。因此,一个 128 位指针可能不可能指向一个不能被 128 整除的地址。
无论如何,您知道问题出在哪里以及我该如何解决吗?