首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用MPI_Comm_Split函数

调用MPI_Comm_Split函数
EN

Stack Overflow用户
提问于 2020-02-18 16:22:43
回答 1查看 272关注 0票数 2

我的问题可能很愚蠢,但我还是要问清楚!

问题:,您是否希望下面的两个代码使用MPI_Comm_Split来构建一个子通信程序?(例如,假设我运行的代码的级别在0到5之间,其中有6个procs )。

NB :,代码在fortran 90中,带有英特尔编译器2019年,我使用Mpich作为Mpi。

代码1

代码语言:javascript
复制
call Mpi_Init(ierror)
call Mpi_Comm_Rank(mpi_comm_world,rank,ierror)

if (rank > 2) then
    call Mpi_Comm_Split(mpi_comm_world,0,rank,new_comm,ierror)
else
    call Mpi_Comm_Split(mpi_comm_world,mpi_undefined,rank,new_comm,ierror)
endif

代码2

代码语言:javascript
复制
call Mpi_Init(ierror)
call Mpi_Comm_Rank(mpi_comm_world,rank,ierror)

if (rank > 2) then
    color = 0
else
    color = mpi_undefined
endif

call Mpi_Comm_Split(mpi_comm_world,color,rank,new_comm,ierror)

在两个代码中,Mpi_Comm_Split的名称不是相同的,但对我来说,它的行为应该是相同的,但我不确定.我读到必须在同一行调用Mpi_Comm_Split,但是procs如何知道Mpi_Comm_Split调用是在一行或另一行进行的(对我来说没有任何意义) ?!

NB :与Mpich和英特尔fortran,我测试了它和两个实现的通信程序分裂工作,但我害怕不同的Mpi编译器的行为.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 00:03:02

假设您正确声明了color,两种代码都是等效的。

MPI_Comm_split()是一个集体操作,因此必须由父通信器的所有级别调用。这不符合,而不是的要求,调用必须由同一行代码执行。

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

https://stackoverflow.com/questions/60285317

复制
相关文章

相似问题

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