2011-04-07 47 views
1

嗨這是一個非常具體的問題,所以我希望StackOverflow的是爲所有的編程語言,而不是僅僅的JavaScript/HTMLmpi4py進程和線程

我寫在MPICH2多程序(流行的消息傳遞接口) 。我的程序是用Python編寫的,因此我使用MPI4Py Python綁定。 MPI最適合無共享內存的情況,因此它不適合多核編程。要使用我的5節點集羣的完整4個內核,我進一步使用線程。但是,我注意到使用線程實際上減慢了我的模擬。我的計劃是行的代碼幾萬,所以我不能把它所有,但這裏是這是造成問題

from threading import Thread 
... 
threadIndeces=[[0,10],[11,20],[21,30],[31,40]] #subset for each thread 
for indeces in treadIndeces: 
    t=Thread(target=foo,args=(indeces,)) 
    t.start() 

同樣的片段,我保證以後加入線程。如果我運行它沒有線程,只需撥打foo所有的參數,它大約快10-15倍。當我記錄多線程版本的時間時,呼叫t=Thread(target=foo,args=(indeces,))中線程的創建需要大約0.05秒,加入同樣需要0.05秒,但t.start()調用需要高達0.2秒。

start()昂貴的電話?我應該改變我的方法嗎?我想保持一堆線程,而不是每次迭代都創建新線程,但似乎並不是造成速度減慢的原因。

此外,櫃面有人想知道的foo的複雜性,這裏是它被調用i時間爲indeces每次迭代的功能(非離散時間)之一:

def HD_training_firing_rate(HD_cell): 
    """During training, the firing rate is governed by the difference between the 
     current heading direction and the preferred heading direction. This is made 
     to resemble a Gaussian distribution 
    """ 
    global fabs 
    global exp 
    global direction 

    #loop over twice due to concurrent CW and CCW HD training 
    for c in [0,1]: 
     d=direction[c] 
     dp=HD_cell.dp #directional preferance 
     s_d=20.0 #standard deviation 
     s_i=min(fabs(dp-d),360-fabs(dp-d)) #circular deviation from preferred dir. 

     HD_cell.r[c]=exp(-s_i*s_i/(2*s_d*s_d)) #normal distribution 

回答

4

如果需要線程,由於Global Interpreter Lock阻止真正的併發,python可能不是您的最佳選擇。另見Dave Beazly's disturbing talk

爲了保持4個核心和5個節點的繁忙,只需運行20個進程就可以了,並且只需使用MPI進行所有通信即可。

如果你真的致力於聯合線程/消息傳遞的方法,Python會在大鐵桿上產生很多開銷 - 你可能想要考慮C或C++(或者我敢說Fortran?)。

+1

+1 - 我不確定這裏的線程優點是什麼。看起來每個線程都在做一些完全獨立的事情?如果是這樣,使用線程優於MPI有什麼優勢?在查找性能問題方面,您最好將大規模分解排除在等式之外,並且只需儘可能快地在一個共享內存盒上運行,然後再重新引入跨節點MPI東東。如果你被困在python的整個事情中,你最終可能會發現基於過程的方法,如多處理性能優於線程。 – 2011-04-07 23:01:45

+0

@Drew Hall:我最初使用C語言,但是這種語言非常繁瑣,Python更易於使用。 – puk 2011-04-07 23:53:31

+0

@Drew Hall,Jonathan Dursi:人們似乎忘記了MPI假定沒有共享內存,而線程則允許共享內存。這裏的問題是全局變量。我做了很多縮放,需要計算全局最大值。使用線程可以很容易地實現,事實上它是微不足道的。如果我使用MPI並在單個節點上運行多個進程,那麼他們將必須傳達這些全局最大值。溝通是,原諒我的語言,屁股疼痛。 – puk 2011-04-07 23:57:57