2013-01-16 3 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; 
} 

그것은 그들 중 두 사람, 그들 중 하나는 내가 변환하려고 funtion.The 코드에 배열을 전달하는 이중 포인터 두 배되는 3 개 개의 매개 변수를이되고 소요;

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]); 

내가 뭘 배열라는 카운터 숫자를 단계 벡터 2 개 번호를 매번로 (예 : R0 (0 ~ 999의 숫자 보유) 통과 할 노력하고 있어요 : 0 R1 : 1, R0 : 2, R1을 : 3) 다른 것들을 평가하는 것. 내가 뭘 잘못하고 있는거야?

+0

나는 당신이 그위한 좋은 SSE 코드가 컴파일러 생성에 대해,이 일을하려고하는 이유 지구에 요청할 수 있습니까? –

+0

과제이기 때문에 –

답변

1

변경 :

step = _mm_loadu_pd(&counter[i]); 

에 :

step = _mm_set1_pd(counter[i]);