gpt4 book ai didi

random - cuRand Mersenne twiner __device__ 端内核代码示例

转载 作者:行者123 更新时间:2023-12-04 04:55:38 34 4
gpt4 key购买 nike

我正在 NVIDIA CUDA GPU 上研究马尔可夫链蒙特卡罗 (MCMC) 算法实现。
CPU MCMC 算法使用高质量的 Mersenne twiner 随机数生成器,我想在我编写的 GPU 内核中使用相同的。
我一直在寻找 cuRand MT 代码示例。不幸的是,我从未见过任何使用梅森扭曲器的内核代码示例。标准的cuRand库文档为MTGP(MT for Graphic Processor)提供了一组函数,但不清楚如何使用它们。

The CUDA Samples为 MersenneTwisterGP11213.tar.gz 提供一个示例,但它似乎专门用于请求在 GPU 上快速生成随机数数组、将它们下载到 CPU 内存并在 CPU 上进行的主机代码。
还有一篇论文"Massively Parallel RNG using CUDA C, Thrust and C#" .同样,作者在最后一节“使用 CUDA C 的 Mersenne Twister 实现”中仅提供了来自“CUDA 示例”的上述主机代码的简化部分。

所以,我的第一个问题是:谁能给我一个 的例子?全局设备 使用 cuRand Mersenne 扭曲器的函数?

我还有一个问题。目前我使用 cuRand 库随机数生成器,我不知道使用的是什么生成器!让我提供几段代码。这是生成器初始化:

 __global__ void init_rng(Cmcmcfit *mc) {

int ist = threadIdx.x*gridDim.x + blockIdx.x;

if (ist >= mc->nrndst) return; // The last block can have extra threads

unsigned long long offset = 0;

curand_init(mc->seed, ist, offset, &mc->rndst[ist]);
}

在其他内核中,我从均匀分布和正态分布中采样数字。所有 blockDim.x*gridDim.x 的状态数组generators 保存在全局内存中,数组 mc->rndst[] .例如, curand_uniform()用于:
  .   .   .   .   .   .
do { /* Randomly select parameter number k to make step */
r = curand_uniform(&mc->rndst[ist]);
k = (int) (mc->nprm*r); /* Random parameter index 0..nprm-1 into ivar[] */
} while (k >= mc->nprm);
. . . . . . . . .

或者,从高斯分布中采样, curand_normal()用于:
  std = mc->pstp[(Nbeta*k + Ibeta)*Nseq + Iseq]; /* pstp[k,ibeta,iseq] */
randn = curand_normal(&mc->rndst[ist]);
p = p + std*randn;

谁能告诉我这里使用了哪个 cuRand 生成器(xorwow、lcs、mtgp ...)(实际上,默认情况下)?

最佳答案

curand documentation包括关于设备 API 的部分 examples .第二个示例使用 MTGP 在设备代码中生成随机数,然后在同一个内核中对生成的随机数进行基本计算(计算设置了最低位的数字。)这似乎就是您要问的for(如何在设备上生成随机数并在设备代码中使用它们)。是不是有什么东西不见了?

另外,in the documentation ,表示curand使用的默认生成器是XORWOW:

The default pseudorandom generator, XORWOW,...



here还有。

关于random - cuRand Mersenne twiner __device__ 端内核代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779066/

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