2013-01-16 36 views
0

我試圖在函數內使用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個參數它們中的兩個雙,它們中的一個是用於將數組傳遞到funtion.The代碼我嘗試轉換雙指針此;

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 R 1:1時,r0:2,R1: 3)並評估其他東西。我做錯了什麼事情?

+0

我可以問你爲什麼地球上,你正在嘗試做這個因爲編譯器生成一個不錯的SSE代碼? – 2013-01-16 21:45:11

+0

因爲這是一項任務 –

回答

1

變化:

step = _mm_loadu_pd(&counter[i]); 

到:

step = _mm_set1_pd(counter[i]); 
相關問題