由于CPU的摩尔定律已经不再适用,目前加速程序的最佳选择就是通过GPU并行。经过几天的摸索后,完成了这个利用GPU加速积分算法的小实验。
数值积分中最常用的方法之一就是辛普森积分法,首先我们写出一段三阶辛普森积分的小程序:
double Simpson_integ (int n_steps, double a, double b, double (*func)( double t))
{
int n;
double sum=0;
double tk=0., dt;
double f1, f2, f3;
dt=(b-a)/n_steps;
for(n=0;n<n_steps;n++)
{
tk=a+n*dt;
f1=(*func)(tk );
f2=(*func)(tk+dt/2);
f3=(*func)(tk+dt);
sum+=dt*(f1+4*f2+f3)/6;
}
return sum;
}
改写成CUDA程序:
__device__
double integrant_func(double t)
{
return 1.0/(exp(30.1*t*t/(1.23*1.23*300.0))-1);
}
__global__
void integrant(int n, double a, double dt, double *sum)
{
double tk;
double f1, f2, f3;
int index = threadIdx.x + blockIdx.x * blockDim.x