事件驱动的MPI

Vic*_*Liu 6 mpi

我有兴趣使用MPI(消息传递接口)实现一种事件驱动的调度队列.我想解决的基本问题是:我有一个主进程将作业插入全局队列,每个可用的从进程检索队列中的下一个作业(如果有).

从我读到的关于MPI的内容来看,发送和接收进程似乎必须就发送和接收的时间达成一致.如同,假设一个进程发送消息但另一个进程不知道它需要接收,反之亦然,那么一切都会死锁.有没有办法让每个过程更加独立?

sta*_*sta 1

您可以按如下方式执行此操作:

声明一个主节点(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)
Run Code Online (Sandbox Code Playgroud)

在从节点中,代码为:

while (true)
  MPI_Send(myNodenum to 0, MPI_INT)
  MPI_Recv(job from 0)
  if (job == job_null)
    break
  else
    execute job
Run Code Online (Sandbox Code Playgroud)

我认为这应该有效。