gpt4 book ai didi

c++ - 在循环中生成随机数_C++ 和循环中的数组 (openmp)

转载 作者:行者123 更新时间:2023-11-30 05:07:29 25 4
gpt4 key购买 nike

最近学习oenmp,主要有两个问题。考虑一个简单的例子:

 using namespace std;
std::minstd_rand gen(std::random_device{}());
std::uniform_real_distribution<double> unirnd(0, 1);
int main(){
double eta=something;
double x[N],y[N];
//initializing x[] and y[]...
for (i=0;i<N;i++)
{
double z= unirnd(gen) * eta;
x[i] = some function of x[i] and y[i] and z
}
}

我做了如下:

using namespace std;
std::minstd_rand gen(std::random_device{}());
std::uniform_real_distribution<double> unirnd(0, 1);
int main(){
double eta=something;
double x[N],y[N];
//initializing x[] and y[]...
#pragma omp parallel for
for (i=0;i<N;i++)
{
double z = unirnd(gen) * eta;
x[i] = some function of x[i] and y[i] and z
}
}
  1. 由于 x 和 y 是共享变量,上述代码是否会导致数据竞争或其他问题?
  2. 在 foor 循环中创建的随机数会导致任何问题吗?如果是,我怎样才能避免这个问题?

最佳答案

代码片段存在数据竞争,但不是因为 xy。比赛在随机数生成器上进行。

当且仅当存在对同一对象(内存位置)的并发访问时,才会发生数据竞争并且其中一个访问是写入(修改)。

由于对xy 的数组子对象的访问是互斥的,因此这里不会发生数据竞争。随机数生成器总是会在生成时改变其状态,因此是一种数据竞争。

关于c++ - 在循环中生成随机数_C++ 和循环中的数组 (openmp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411006/

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