0
只是爲了好玩,我試圖在python中實現一些算法來計算pi。我設法用Gauss-Legendre算法來做到這一點,並且我非常滿意。儘管如此,Python進程只使用一個核心(一個進程)。使用多個進程計算pi中的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的計算。
我已經看過了多進程文檔,但看起來像它只適合像總和這樣的迭代任務(例如Ramanujan算法)。
感謝
這裏的一般問題是如何平行這個算法。您可以輕鬆地讓每個CPU並行運行並執行相同的操作,但這顯然沒有用處。您希望每個CPU同時解決問題的*不同部分;那麼如何將這個算法細分爲單獨的任務,這些任務可以並行解決,並且可以加速計算最終結果?這個問題可能有點過於寬泛,無法在這裏回答。 – deceze
其實我認爲它可以通過爲每個過程分配每個變量的計算來並行化。 – Matteo
*如果*實際上會加快整體結果......與協調多個線程相關的一定開銷,並且該操作非常小以至於可能會超出該開銷。你當然可以試試看看... – deceze