【问题标题】:MPI Bcast and the number of processesMPI Bcast 和进程数
【发布时间】:2011-06-13 02:47:44
【问题描述】:

当此调用期间的进程数与计算开始时产生的进程数不同时,Bcast 的语义是什么?

我需要处理用户指定执行计算所需的过多进程的情况。例如,用户可能决定使用mpirun 生成 16 个进程,而我只需要 12 个进程就可以在进程之间拆分问题。当 PID 太高时,我通过将 PID 与 12 进行比较并使用 MPI_Finalize 结束进程来处理这种情况。我认为这会导致我的应用程序出现死锁,因为 Bcast 想要发送到所有进程?

如何处理?我应该只在所有进程中调用 Bcast,而忽略某些进程的输出吗?

【问题讨论】:

    标签: concurrency parallel-processing mpi


    【解决方案1】:

    鉴于我们收到了,可以认为是来自用户的无效输入,我们是否真的必须在意识到这一点后继续执行程序?最好向用户显示一条错误消息,说请求的进程数无效,并通知用户允许的间隔(例如“请求了 16 个进程,但是,最大进程数是 12 ,因此程序现在将退出”)。

    否则,如果在您的情况下这不是一个可能的解决方案,MPI 2.2 documentation 中的第 6 章“组、上下文、通信器和缓存”和/或第 10 章“流程创建和管理”可能会有所帮助。其他地方可能还有其他更易于阅读的文档,但至少这是一个开始。

    【讨论】:

    • 这是一个家庭作业问题,规范并不清楚这个特殊情况:)
    • “这个特殊情况”是什么意思?你的意思是第一个问题“当进程数......时Bcast的语义是什么”?
    【解决方案2】:

    在程序启动时,每个进程都应该查看自己的排名(来自MPI_Comm_rank)、进程总数(来自MPI_Comm_size(MPI_COMM_WORLD))以及计算实际需要的数量。让低于您需要的数字的队伍创建一个您将实际用于工作的新沟通器,并让所有剩余队伍只需致电MPI_Finalize

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 2013-05-20
      • 2014-01-13
      • 2014-03-11
      • 2016-10-02
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      相关资源
      最近更新 更多