gpt4 book ai didi

c++ - 使用 Thrust 生成均匀分布的随机数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:03 24 4
gpt4 key购买 nike

我需要使用 Thrust 生成一个包含 0.01.0 之间随机数的 vector 。我能找到的唯一记录示例会生成非常大的随机数 (thrust::generate(myvector.begin(), myvector.end(), rand)。我确信答案很简单,但我将不胜感激任何建议。

最佳答案

Thrust 具有随机生成器,您可以使用它来生成随机数序列。要将它们与设备 vector 一起使用,您需要创建一个仿函数,它返回随机生成器序列的不同元素。最直接的方法是使用计数迭代器的转换。一个非常简单的完整示例(在本例中生成介于 1.0 和 2.0 之间的随机单精度数字)可能如下所示:

#include <thrust/random.h>
#include <thrust/device_vector.h>
#include <thrust/transform.h>
#include <thrust/iterator/counting_iterator.h>
#include <iostream>

struct prg
{
float a, b;

__host__ __device__
prg(float _a=0.f, float _b=1.f) : a(_a), b(_b) {};

__host__ __device__
float operator()(const unsigned int n) const
{
thrust::default_random_engine rng;
thrust::uniform_real_distribution<float> dist(a, b);
rng.discard(n);

return dist(rng);
}
};


int main(void)
{
const int N = 20;

thrust::device_vector<float> numbers(N);
thrust::counting_iterator<unsigned int> index_sequence_begin(0);

thrust::transform(index_sequence_begin,
index_sequence_begin + N,
numbers.begin(),
prg(1.f,2.f));

for(int i = 0; i < N; i++)
{
std::cout << numbers[i] << std::endl;
}

return 0;
}

在这个例子中,仿函数prg以随机数的下界和上界作为参数,以(0.f,1.f)作为参数默认。请注意,为了在每次调用转换操作时都有不同的 vector ,您应该使用初始化为不同起始值的计数迭代器。

关于c++ - 使用 Thrust 生成均匀分布的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614164/

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