在库达实施随机发电机

时间:2015-07-03 20:54:44

标签: cuda parallel-processing nvidia

我想在cuda中实现这个函数作为设备/全局函数,以获得高斯分布的随机数。

double gasdev2() {
double ran3n(long *seed);
//  double genrand64_real3();
static int iset=0;
static double gcos;
double tmp1,tmp2;

if (iset==0) { 
 tmp1=sqrt(-2*log(ran3n(&seed)));
 tmp2=pi2*ran3n(&seed);
//    tmp1=sqrt(-2*log(genrand64_real3()));
//    tmp2=pi2*genrand64_real3();
  gcos=tmp1*cos(tmp2);
 iset=1;
 return tmp1*sin(tmp2);
//return 1;
}else{
  iset=0;
  return gcos;
 //return 1;
}
}

这个函数基本上会在这些函数调用和串行代码中使用,这些就像这样

  for(int i=0;i<NTO;i++){
  Frdx[j]=gasdev2()*ranm[j]*tconst;
  Frdy[j]=gasdev2()*ranm[j]*tconst;
  Frdz[j]=gasdev2()*ranm[j]*tconst;
  }

1 个答案:

答案 0 :(得分:2)

我建议不要自己实现它,而是使用Thrust提供的随机算法:

int[] ints = new int[] { 1, 2, 3 };
char[] chars = new char[] { '1', '2', '3' }

您可以在主机和设备代码中使用它。 看看Thrust examples