gpt4 book ai didi

使用 SSE SIMD 转换函数

转载 作者:行者123 更新时间:2023-11-30 15:52:32 26 4
gpt4 key购买 nike

我尝试在函数中使用 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]);

我想做的是将名为 counter 的数组中的数字(保存从 0 到 999 的数字)每次传递到步骤 vector 2 个数字(例如 r0:0 r1:1,r0:2,r1:3)并评估其他的东西。我做错了什么?

最佳答案

更改:

step = _mm_loadu_pd(&counter[i]);

至:

step = _mm_set1_pd(counter[i]);

关于使用 SSE SIMD 转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com