首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MPI生成和cray的aprun

MPI生成和cray的aprun
EN

Stack Overflow用户
提问于 2018-08-15 09:57:53
回答 1查看 347关注 0票数 2

假设我有一个主程序,它基本上是一个1级的mpi,它使用MPI生成5个worker程序。

现在,如果我使用以下命令执行我的master

代码语言:javascript
复制
aprun -n 1 -N 1 master

产卵后的总等级数为6,但这6个等级是否都在同一个节点上运行?有没有什么办法可以将6分配给3个节点?

我可以精确地复制一个主进程和5个工作进程。

EN

回答 1

Stack Overflow用户

发布于 2018-08-16 08:00:36

Cray MPI直到最近才支持MPI_Comm_spawn,它为衍生的MPI作业管理资源的解决方案是独一无二的。使用aprun启动占位符作业,以管理用于托管生成的作业的资源,即,将托管生成的MPI队列的核心/节点。占位作业管理的一组资源称为“排名池”,类似于内存池。下面是如何设置和使用等级池:

rankpool.c

代码语言:javascript
复制
int main(int argc, char **argv) {
    MPI_Init(&argc, &argv);
    /* Name this rank pool "all_nodes", which will be
     * used by MPI_Comm_spawn to identify it. */
    MPIX_Comm_rankpool(MPI_COMM_WORLD, "all_nodes", /* 60 seconds timeout */ 60);
    MPI_Finalize();
}

spawning_app.c

代码语言:javascript
复制
[ ... code goes here ... ]

MPI_Info_create(&info);
/* key = "rankpool", value = "all_nodes" */
MPI_Info_set(info, "rankpool", "all_nodes");
MPI_Comm_spawn("master", argv, num_ranks,
               info, 0, comm, &child_comm,
               MPI_ERRCODES_IGNORE);

[ ... more code ... ]

如果你想在三个节点上分配6个等级,你可以使用aprun -n 6 -N 2启动你的等级池,这样你就有了6个总等级,每个节点有2个等级。

如果您希望为生成的等级提供更具体的布局,则可以在传递给MPIX_Comm_rankpool的通信器中对等级进行重新排序,以获得此效果。例如,如果您的主作业派生了不同的子作业,每个子作业具有4个等级,并且您希望每个子作业的等级均匀分布在节点上,则可以从以下位置对MPI_COMM_WORLD中的等级进行重新排序:

代码语言:javascript
复制
            MPI_COMM_WOLRD
            --------------
        node 1        node 2        node 3          node 4
ranks   0  1  2  3    4  5  6  7    8  9  10  11    12  13  14  15

要这样做:

代码语言:javascript
复制
            reordered_comm
            --------------
        node 1         node 2         node 3          node 4
ranks   0  4  8  12    1  5  9  13    2  6  10  14    3  7  11  15

MPIX_Comm_rankpool将尝试为每个子作业分配一组连续的等级,因此子作业通常在每个节点上都有一个等级。

有关这一切如何工作的更多详细信息,请参阅Cray的动态流程管理whitepaper

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51851939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档