首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CUDA中的各种分布生成随机数

从CUDA中的各种分布生成随机数
EN

Stack Overflow用户
提问于 2013-05-21 14:12:17
回答 1查看 1.1K关注 0票数 1

我正在玩在GPU上做MCMC,需要各种采样器的实现,为CUDA编写。

我在StackOverflow上看到的大多数帖子都与均匀抽样、二项式抽样和正态抽样有关。有没有什么库可以让我在R中使用d-p-q-r函数的简单性和多样性(参见this页面)?

我希望能够从Gamma、正态、二项式和贝叶斯问题(逆卡方、逆伽马)中使用的逆分布中进行采样,并且不希望使用逆概率变换和接受-拒绝采样来编写自己的样本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-19 13:23:25

对于Gamma发行版,这是我目前使用的。它是修改后的GSL函数,可以与CuRAND一起使用。

代码语言:javascript
复制
__device__ double ran_gamma (curandState localState, const double a, const double b){
/* assume a > 0 */

if (a < 1){
    double u = curand_uniform_double(&localState);
    return ran_gamma (localState, 1.0 + a, b) * pow (u, 1.0 / a);
}

{
    double x, v, u;
    double d = a - 1.0 / 3.0;
    double c = (1.0 / 3.0) / sqrt (d);

    while (1){
        do{
            x = curand_normal_double(&localState);
            v = 1.0 + c * x;
        } while (v <= 0);

        v = v * v * v;
        u = curand_uniform_double(&localState);

        if (u < 1 - 0.0331 * x * x * x * x) 
            break;

        if (log (u) < 0.5 * x * x + d * (1 - v + log (v)))
            break;
    }
    return b * d * v;
}
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16663281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档