Hi, It appears that MPI_Comm_get_attr fails to get MPI_TAG_UB for sub-communicators created by MPI_Comm_split. I have tested the following programs with openmpi 3.1.1 and openmpi 1.10.2. MPI_Comm_get_attr works on MPI_COMM_WORLD, but not on sub-communicators. Is this expected?
#include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { MPI_Init(&argc, &argv); int rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); void* p; int flag; MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &p, &flag); if (!flag) { printf("MPI_COMM_WORLD: rank %d failed to get MPI_TAG_UB\n", rank); } else { printf("MPI_COMM_WORLD: rank %d succeeded to get MPI_TAG_UB\n", rank); } int color = rank%2; MPI_Comm comm; MPI_Comm_split(MPI_COMM_WORLD, color, rank, &comm); int rank2; MPI_Comm_rank(comm, &rank2); MPI_Comm_get_attr(comm, MPI_TAG_UB, &p, &flag); if (!flag) { printf("Subcommunicator %d rank %d failed to get MPI_TAG_UB\n", color, rank2); } else { printf("Subcommunicator %d rank %d succeeded to get MPI_TAG_UB\n", color, rank2); } MPI_Finalize(); } program main use mpi implicit none integer :: ierr, rank, color, comm, rank2 integer(kind=MPI_ADDRESS_KIND) :: attrval logical :: flag call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr) call MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, attrval, flag, ierr) if (.not.flag) then print *, "MPI_COMM_WORLD: rank ", rank, " failed to get MPI_TAG_UB." else print *, "MPI_COMM_WORLD: rank ", rank, " succeeded to get MPI_TAG_UB." end if color = modulo(rank,2) call MPI_Comm_split(MPI_COMM_WORLD, color, rank, comm, ierr) call MPI_Comm_rank(comm, rank2, ierr) call MPI_Comm_get_attr(comm, MPI_TAG_UB, attrval, flag, ierr) if (.not.flag) then print *, "Subcommunicator ", color, " rank ", rank2, " failed to get MPI_TAG_UB." else print *, "Subcommunicator ", color, " rank ", rank2, " succeeded to get MPI_TAG_UB." end if call MPI_Finalize(ierr) end program main Thanks, Weiqun
_______________________________________________ users mailing list users@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/users