需要一个算法来与c中的pthreads并行计算pi

在任何快速回答之前,我想解释我的需求。 我正在研究一个专注于与Pthreads并行计算的C-Posix项目。 我做了我的研究,并且发现了数十种计算Pi的算法:Bailey-Borwein-Plouffe公式,Machin-like公式,π的Leibniz公式,Chudnovsky算法,monte-carlo,Ramanujan等。问题是我不' t在速度收敛或每次迭代数字方面需要“最佳”算法,因为获得pi不是项目本身的目标。 该项目的真正目标是比较解决串行和并行pthread的相同编程问题的性能。 例如,在项目结束时,我期望得到一个像这样的比较表:

在这里输入图像描述

在说完所有这些之后,我需要一个简单的算法,但是在pthreads(不是MPI,OpenMP或者类似器)中编写代码很简单(被尴尬地并行将是一个完美的结果),最后但并非最不重要的一点是算法必须是适合对并行化表现出很大的影响

PD:对于任何能够适应这个项目的任何其他并行计算,我都会很感兴趣。

谢谢!


用于逼近pi(到任意精度)的Monte Carlo方法很容易并行化。 在伪代码中:

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对于每个线程都是独立的,否则运行多个线程将得不到改善。

链接地址: http://www.djcxy.com/p/70981.html

上一篇: Need an algorithm to calculate pi in parallel with pthreads in c

下一篇: What is the fastest way to get the value of π?