C 使用SSE SIMD转换函数

C 使用SSE SIMD转换函数,c,function,sse,simd,C,Function,Sse,Simd,我尝试在函数中使用sse simd指令计算值 double integrate (double from, double to,double* counter) { __m128d sum=_mm_setzero_pd(); __m128d val=_mm_setzero_pd(); __m128d width; __m128d fr=_mm_set1_pd(from); __m128d t=_mm_set1_pd(to); __m128

我尝试在函数中使用sse simd指令计算值

    double integrate (double from, double to,double* counter)
{

    __m128d sum=_mm_setzero_pd();
    __m128d val=_mm_setzero_pd();
    __m128d width;
    __m128d fr=_mm_set1_pd(from);
    __m128d t=_mm_set1_pd(to);
    __m128d one=_mm_set1_pd(1.0);
    __m128d a,b,c,step;
    double result=0,i=0;

    width=_mm_set1_pd((to-from)/1000);

    while(i<1000){
    step = _mm_loadu_pd(&counter[i]);
    a    = _mm_mul_pd(step,width);
    b    = _mm_add_pd(fr,a);
        val  = _mm_div_pd(one,b);   
    c    = _mm_mul_pd(val,width);
    sum  = _mm_mul_pd(sum,c);
    i=i+2;
    }

    for(int i=0; i<1000; i++) {
        result += sum[i];
    }

    return result;
}
我试图做的是每次(例如r0:0 r1:1、r0:2、r1:3)将数组中名为counter(保存0到999的数字)的数字传递到步进向量2中,并计算其他值。我做错了什么?

更改:

step = _mm_loadu_pd(&counter[i]);
致:


我可以问一下,既然编译器会为此生成一个很好的SSE代码,你们到底为什么要这么做?因为这是一个赋值
step = _mm_loadu_pd(&counter[i]);
step = _mm_loadu_pd(&counter[i]);
step = _mm_set1_pd(counter[i]);