2013-05-25 50 views
0

我用下面的代碼段來測試IPython.parallel模塊的性能:IPython.parallel和CPU上的解釋器分配

dview = c[:] #use all engines 

counter = time.time() 
result = dview.map_sync(fib, range(4000)) #fib return the nth Fibonacci number 
counter = time.time() - counter 

我用於高達30'發動機用該試驗中,我開始通過IPython筆記本。令人驚訝的是,即使移動超過我的CPU內核(我有4個內核)的限制,性能也隨着引擎數量(實際上是完整的IPython解釋器)而增加(非線性)。我一直認爲一個引擎會關聯到一個內核,並且使用更多引擎作爲內核只會導致開銷。這裏真的發生了什麼?引擎分佈在覈心上的方式是什麼?

編輯:解決的辦法是從馬特加上該方式在發動機上的核心分佈在評論http://nbviewer.ipython.org/5500077

回答

0

沒有什麼具體的我們在做的IPython有關。這完全由OS及其調度程序處理。

如果您使用的是直接視圖而不是負載平衡視圖,我仍然很驚訝時間使得計算量隨着引擎數量的減少而減少。

+0

性能使用負載平衡的觀點得到絕對可怕。也許你有一個線索爲什麼。爲了做到這一點:負載均衡視圖將工作負載分配給引擎(希望平等),同時操作系統將引擎分配給內核? – SpaceMonkey

+0

有點不記得如何與地圖的負載平衡的觀點分裂的事情,我不使用它了。我的猜測是在4個塊(0-1000,1001-2000 ...)中直接分割範圍,讓他們進行計算,然後返回,一旦一個引擎空閒,loadbalanced實際上會發送下一個計算。因此4000發送,所以你會有更多的開銷。確切的細節還取決於fib的實現。其實謊是不是一個很好的候選人這裏所有的引擎將不得不至少計算所有回謊(1)所以很多重疊的。 – Matt

+0

是的,但我並沒有關於功能瞄準效率)。只是爲了完成這個線程:我是混合了以上的方式,每一個終端將得到相同的工作量清單。我還將每個終端固定到一個核心。而當我只用一個核心時,我用四核處理器得到的結果幾乎是1/4的時間。所以它的工作正常。你對這個塊的猜測也是正確的。我可以通過查看cpus來看到這一點:第一個核心獲得簡單部分,並且正在快速進行,而第四個核心獲得難度並且需要一些時間。再次感謝你的幫助! – SpaceMonkey