【发布时间】:2020-08-28 12:03:18
【问题描述】:
我有一个抽取随机样本的函数:
Sample sample();
我有一个检查天气样本是否有效的功能:
bool is_valid(Sample s);
这模拟了条件分布。现在我想要很多有效的样本(大多数样本都无效)。
所以我想用 openMP 并行化这段代码
vector<Sample> valid_samples;
while(valid_samples.size() < n) {
Sample s = sample();
if(is_valid(s)) {
valid_samples.push_back(s);
}
}
我该怎么做?我发现的大部分 OpenMP 代码都是简单的 for 循环,其中迭代次数在一开始就确定了。
sample() 函数有一个
thread_local std::mt19937_64 gen([](){
std::random_device d;
std::uniform_int_distribution<int> dist(0,10000);
return dist(d);
}());
作为随机数生成器。如果我假设我的设备有随机源,是否有效并且线程保存?有没有更好的解决方案?
【问题讨论】: