事件驱动MPI

事件驱动MPI,mpi,Mpi,我感兴趣的是使用MPI(消息传递接口)实现一种事件驱动的调度队列。我想解决的基本问题是:我有一个主进程,它将作业插入全局队列,每个可用的从属进程检索队列中的下一个作业(如果有) 从我读到的关于MPI的内容来看,似乎发送和接收进程必须在发送和接收的时间上保持一致。如中所示,假设一个进程发送一条消息,但另一个进程不知道它需要接收,反之亦然,则所有进程都会死锁。有没有办法让每个流程都更加独立?您可以按如下方式进行: 声明一个将分发任务的主节点(0)。在此节点中,伪代码为: int sendTo for

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


从我读到的关于MPI的内容来看,似乎发送和接收进程必须在发送和接收的时间上保持一致。如中所示,假设一个进程发送一条消息,但另一个进程不知道它需要接收,反之亦然,则所有进程都会死锁。有没有办法让每个流程都更加独立?

您可以按如下方式进行:

声明一个将分发任务的主节点(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

我认为这应该行得通。

您可能想使用;它不是一个明确的事件驱动框架,但提供了一个抽象机制来执行任务并动态地分发这些任务

您是想要异步通信,还是想要其他方法来避免分布式系统中的死锁?我希望能够有效地执行异步通信。MPI内置了异步发送/接收功能,但如何使用这些原语构建通用异步通信平台并不明显,因为它们仍然需要协作(每个异步发送必须有相应的预期接收)。通信总是需要协作,所以我不是100%确定你需要什么。如果我的理解是正确的,您希望有一个进程充当调度队列,该队列由主进程和从进程使用。这将分离主设备和从设备之间的通信,并解决它们之间直接通信的需要。你能详细说明一下你的想法吗?