我对使用MPI (消息传递接口)实现一种事件驱动的调度队列很感兴趣。我想要解决的基本问题是:我有一个主进程,它将作业插入到全局队列中,并且每个可用的从进程都会检索队列中的下一个作业。
根据我所读到的关于MPI的内容,似乎发送和接收过程必须在发送和接收时达成一致。就像在中一样,假设一个进程发送了一条消息,但另一个进程不知道它需要接收,反之亦然,那么一切都会死锁。有没有办法让每个进程都更独立一些?
发布于 2011-10-07 23:46:25
您可以按如下方式执行此操作:
声明一个主节点(0),它将分发任务。在此节点中,伪代码为:
int sendTo
for task in tasks:
MPI_Recv(...sendTo, MPI_INT, MPI_ANY_SOURCE,...)
MPI_Send(job,... receiver: sendTo)
for node in nodes:
MPI_Recv(...sendTo, MPI_INT, MPI_ANY_SOURCE,...)
MPI_SEND(job_null,...,receiver: sendTo)在从节点中,代码为:
while (true)
MPI_Send(myNodenum to 0, MPI_INT)
MPI_Recv(job from 0)
if (job == job_null)
break
else
execute job我想这应该行得通。
发布于 2013-09-20 21:39:50
您可能希望使用charm++;它不是一个显式的事件驱动框架,但确实提供了一种用于执行任务和动态分发这些任务的抽象机制。
https://stackoverflow.com/questions/7655710
复制相似问题