为了好玩,我试图在python中实现一些算法来计算pi。我设法用Gauss-Legendre算法做到了这一点,我非常满意。尽管如此,Python进程只使用一个核心(一个进程)。
以下是我实施的主要部分:
from decimal import *
import math
import time
digit = 10000
getcontext().prec = digit+1
am, a, b, t, p = 0, 1, 1/Decimal(2).sqrt(), Decimal(1/4), 1
while am != a:
am, bm, tm, pm = a, b, t, p
a = Decimal((am+bm)/2)
b = Decimal(am*bm).sqrt()
t = Decimal(tm-pm*(am-a)**2)
p = 2*pm
pi = Decimal((a+b)**2/(4*t))
print(pi)
我想知道是否可以为每个流程分配a,b,t,p的计算。
我查看了多进程文档,但看起来它只适用于sums等迭代任务(例如Ramanujan算法)。
由于
答案 0 :(得分:2)
您可以轻松地将其并行化为可以彼此独立运行的较小问题,这似乎不是一个问题。您可以创建一个线程来单独执行每个线程,但是您无法并行计算它们,因为它们彼此依赖(您必须等待在b之前计算a等等) 。
因此,如果你按照线程必须等待的原始顺序运行它们,那么它与按照上面的顺序顺序运行它们并没有什么不同。