2011-04-07 50 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