关于在thrust :: device_vector上生成随机数的问题

时间:2014-10-23 01:05:23

标签: cuda thrust

目前我正在使用以下代码生成随机正常数字:

#include <thrust/random/normal_distribution.h>
#include <thrust/device_vector.h>
#include <random>

using namespace std;

template <typename T>
class genNormal
{
private:
    thrust::minstd_rand rng;
    thrust::random::normal_distribution<T> dist;

public:
    genNormal()               :dist(0.0, 1.0){} // default  mean=0, st.dev.=1.0
    genNormal(T mean, T stdev):dist(mean,stdev){} // specific mean and standard deviation

    __host__ __device__
        T operator()(uint64_t index)
    {
        rng.discard(index);
        return dist(rng);
    }
};

void main() {
    thrust::device_vector<double> r1(10);
    for (int i=1; i<=5; i++) {
       thrust::transform(thrust::make_counting_iterator<int>(0), thrust::make_counting_iterator<int>(10),r1.begin(),genNormal<double>(5.074469, 0.04385328));
       cout<<r1[1]<<", ";   
    }
}

我得到的输出是:

5.0143, 5.0143, 5.0143, 5.0143, 5.0143, 

这里的问题是,对于每个循环,我得到完全相同的结果。如果我需要不同的数字怎么办?在C ++ 11中,我可以使用随机设备作为传递给随机引擎的种子。但是,我没有在推力库中找到任何替代品。

任何人都可以帮忙吗?提前谢谢。

0 个答案:

没有答案