我正在写一个并行程序使用开放熔点,其中我生成随机浮点数的矩阵,然后做了一些计算。我当前想要让生成矩阵并行运行的步骤,但我有问题,rand()函数并不是要同时运行。我不想在rand上使用锁来提供互斥锁,因为这是循环中唯一要做的事情,它可能会更有效地按顺序运行它。有没有办法有效地并行执行这一步骤?并发随机数的生成
这里如果当前代码为这部分(带兰特上无互斥锁);
#pragma omp parallel default(private)
{
int i= omp_get_thread_num();
for(int j=0; j<cols; j++)
matrix[i][j]= rand()%1000 + (float)(rand()%100)/(float)(rand()%1000);
}
PRNG从固定的种子生成一致的数字序列。这个顺序(可重复性)对你来说很重要,还是你真的想要“随机”? – 2010-11-20 19:20:30
无论他们是否按照任何特定的顺序都没关系,我遇到的问题是当我顺序运行它时,我在整个范围内获得了很好的分布,但是当我将其更改为平行时,总体上这些数字小于10,当我总结行几乎所有他们加起来0(我从来没有负面的顺序)。这使我认为函数调用存在某种并发问题。 – user381261 2010-11-20 19:28:22
坚持一秒 - 平均每1000次迭代一次,rand()%1000将为零,那么如何分配呢? – TonyK 2010-11-20 19:47:22