簡體   English   中英

使用SSE SIMD轉換功能

[英]Converting a function using 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);
    __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;
}

它需要3個參數,其中兩個是double,其中一個是將數組傳遞給函數的double指針。我嘗試轉換的代碼是這個;

double integrate (double from, double to)
{
    double sum=0,val=0,width;
    int i;
    width=(to-from)/1000;

    for(i=1;i<1000;i++){    
    val=1/(from+(i*width));
    sum=sum+(val*width);
    }

    return sum;
}

代碼評估的是一個值,但沒有達到我的預期。據我所了解,我的真正問題與這部分有關;

step = _mm_loadu_pd(&counter[i]);

我想做的是每次將稱為計數器的數組中的數字(保持數字從0到999)傳遞到步驟向量2中的數字(例如r0:0 r1:1,r0:2,r1:3)並評估其他內容我做錯了什么?

更改:

step = _mm_loadu_pd(&counter[i]);

至:

step = _mm_set1_pd(counter[i]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM