首页 文章

需要一个算法来计算pi与pthreads并行c [关闭]

提问于
浏览
-1

在任何快速回答之前,我想解释一下我的需求 . 在速度收敛或每次迭代的数字方面,我需要"Best"算法,因为获得pi本身并不是项目的目标 . 该项目的真正目标是比较串行和并行与pthreads相同的编程问题的性能 . 例如,在项目结束时,我希望得到一个这样的比较表:

enter image description here

在说完所有这些之后我需要一个简单的算法,在pthreads中编码很简单(不是MPI,OpenMP或类似的)(令人尴尬的是并行将是一个完美的拟合),最后但并非最不重要的算法必须是适合对并行化产生很大影响

PD:我也很高兴任何可以适应这个项目的任何其他并行计算的人 .

谢谢!

1 回答

  • 3

    用于近似pi(以任意精度)的蒙特卡罗方法易于并行化 . 在伪代码中:

    total=0;
    inside=0;
    while(total<whatever) {
        double1=random(0,1); //Random number from zero to 1
        double2=random(0,1);
        total++;
        if(double1**2 + double2**2 < 1) {inside++;}
    }
    pi=4*inside/total;
    

    循环中的所有内容都可以在任意数量的线程上并行化,您只需在最后添加结果即可 .

    编辑:正如caf在评论中提到的那样,重要的是RNG对于每个线程都是独立的,否则你将无法通过运行多个线程获得改进 .

相关问题