- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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 documentation包括关于设备 API 的部分 examples .第二个示例使用 MTGP 在设备代码中生成随机数,然后在同一个内核中对生成的随机数进行基本计算(计算设置了最低位的数字。)这似乎就是您要问的for(如何在设备上生成随机数并在设备代码中使用它们)。是不是有什么东西不见了?
另外,in the documentation ,表示curand使用的默认生成器是XORWOW:
The default pseudorandom generator, XORWOW,...
关于random - cuRand Mersenne twiner __device__ 端内核代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779066/
Boost 提供 mt19937 和 mt19937_64 http://www.boost.org/doc/libs/1_55_0/doc/html/boost_random/reference.h
我有一小段代码可以运行 Mersenne Twister PRNG,效果很好: std::random_device randDev; std::mt19937 twister(randDev());
所以我有一个使用 Mersenne Twister 的自定义随机发生器类(我使用的代码改编自 this site)。一切似乎都运行良好,直到我开始测试不同的种子(我通常使用 42 作为种子,以确保每次
我正在将一个大型科学模拟软件迁移到 C++。在 Java 中我使用了 Cern Colt library它包括一个完整的随机分布列表。 当需要不同的发行版(例如提供的链接中列出的发行版)时,通常使用什
我读到“梅森扭曲器的计算复杂度为 O(p2),其中 p 是多项式的次数”。 这是什么意思? 这是指哪个多项式? 此外,计算复杂度是时间复杂度的另一种表述方式,还是与算法运行所需的空间量有关? 最佳答案
我有点不确定这个问题的正确论坛。它介于理论比较之间。科学/数学和编程。 我使用 Mersenne-Twister 生成伪随机数。现在,从给定的种子开始,我想跳到序列中的第 n 个数字。 我看过这个:h
这个问题在这里已经有了答案: stl random distributions and portability (1 个回答) 关闭 8 年前。 我正在使用 std::mt19937_64 生成随机
我的构造函数有什么问题?每次我调用一个应该生成随机数的函数(大约每五秒一次)时,它都会生成相同的数字。每个调用实例化下面这些对象之一。我以为我是用 m_rd 的 operator() 调用的输出随机播
我想知道如何将梅森随机数生成器保留为成员变量并在同一个类中使用它。 我编写了如下类,它运行良好,但我不喜欢 std::mt19937 被初始化。我想知道有没有办法在Test的构造函数中初始化它? #i
我有一个很简单的问题:当我们使用 Mersenne Twister -19937 生成器并修复种子时,每次调用生成器时,它都会生成具有某些特征(独立性、均匀分布)的数字序列。这里重要的是独立性(或 2
众所周知,可以反转 MT 回火功能。可在线获取源代码来执行此操作 here .我试图弄清楚这是如何工作的,以及我将如何以编程方式解决这个问题和类似的问题。 我正在努力解决的是,对有限大小的变量进行移位
我读到 Mersenne Twister 生成器的周期为 2¹⁹⁹³⁷ - 1,但我很困惑为什么会这样。我看到 this implementation Mersenne Twister 算法,在第一条
我尝试使用 32 位种子实现跨平台一致的随机数生成。大多数帖子都指向我Mersenne Twister或者编写我自己的实现。 在 source code有一个名为 void init_by_array
我想生成 1000 个不同的 k 值并计算 k 的均值和方差,但是当我使用 MT 时,它在电子表格中始终是相同的数字。以下是我的代码,希望有人能帮助我。非常感谢! int main(int argc,
我最近在使用 Mersenne-Twister 算法在 C++ 中生成随机数时遇到了一个问题。当遍历for循环并使用cout输出生成的数字时,它会重复输出相同的数字。例如,它输出类似 11 11 11
我想找出我可以用 C++ 为随机数生成器播种的最大值。我的代码如下: mt19937 myRandomGenerator(seed); 变量 seed 可以有多大?我注意到,如果该值变得太大,随机数生
我正在使用 Mersenne Twister 生成具有 1D 柏林噪声的 2D 地形以获取随机数。我的第一个想法是使用 Mersenne Twister 在任何给定的硬件上使用相同的种子总是给我相同的
我编写了一个包含不同算法的 RNG 类,但它没有按预期工作。除了我想使用正常(而不是均匀)分布这一事实之外,我的代码总是返回相同的数字(最大值)或仅返回区间 [min,max] 中的 2 个数字: s
我想使用 mt19937 遍历一个数组并从中获取每个值一次,但顺序是随机的。本质上,有没有一种方法可以使用 mt19937 仅生成一次特定范围内的所有数字(不只是忽略重复项,而是确保它不会完全产生重复
我正在我的应用程序中调整 Mersenne Twister,特别是来自 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937a
我是一名优秀的程序员,十分优秀!