相关疑难解决方法(0)

从多个线程使用stdlib的rand()

我有几个线程都运行相同的功能.在每个中,它们会多次生成不同的随机数.我们尝试通过放置srand(time(0))函数的开头来做到这一点,但似乎它们都得到了相同的数字.

我们是否需要srand(time(0))每个程序只调用一次,即在main(例如)开始时,在每个被调用多次的函数的开头,或者其他什么?

c c++ random multithreading

41
推荐指数
4
解决办法
3万
查看次数

使用 OpenMP 计算 PI 的值

我正在尝试通过并行化蒙特卡罗代码来学习如何使用 OpenMP,该代码使用给定的迭代次数计算 PI 的值。代码的内容是这样的:

  int chunk = CHUNKSIZE;                                                                                      

    count=0;                                                                                                  
#pragma omp parallel shared(chunk,count) private(i)                                                           
  {                                                                                                           


#pragma omp for schedule(dynamic,chunk)                                                                       
      for ( i=0; i<niter; i++) {                                                                              
        x = (double)rand()/RAND_MAX;                                                                          
        y = (double)rand()/RAND_MAX;                                                                          
        z = x*x+y*y;                                                                                          
        if (z<=1) count++;                                                                                    
      }                                                                                                       
  }                                                                                                           

  pi=(double)count/niter*4;                                                                                   
  printf("# of trials= %d , estimate of pi is %g \n",niter,pi);  
Run Code Online (Sandbox Code Playgroud)

尽管在给定 10,000 次迭代的情况下,这不会为 pi 产生正确的值。如果取出所有 OpenMP 内容,它就可以正常工作。我应该提到我使用了这里的蒙特卡罗代码:http : //www.dartmouth.edu/~rc/classes/soft_dev/C_simple_ex.html

我只是用它来尝试学习 OpenMP。任何想法为什么它会收敛于 1.4ish?我可以不增加多线程的变量吗?我猜问题出在变量上count。

谢谢!

c openmp montecarlo

5
推荐指数
1
解决办法
6078
查看次数

标签 统计

c ×2

c++ ×1

montecarlo ×1

multithreading ×1

openmp ×1

random ×1