関数内で 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 つのパラメーターが必要です。そのうちの 2 つは double で、そのうちの 1 つは関数に配列を渡すための 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)に渡し、他のものを評価することです.私が間違っていることは何ですか?