Hi, Running the following test code on two processes: #include <mpi.h>#include <stdio.h>#include <unistd.h> #define N 2 int main(int argc, char **argv){int i, rank, num_procs, len, received[N], buf[N];MPI_Aint addrbuf[1], recvaddr[1]; MPI_Win win, awin; MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &num_procs); MPI_Win_create_dynamic(MPI_INFO_NULL, MPI_COMM_WORLD, &win);MPI_Win_attach(win, buf, sizeof(int)*N);MPI_Win_create(addrbuf, sizeof(MPI_Aint), sizeof(MPI_Aint), MPI_INFO_NULL, MPI_COMM_WORLD, &awin); MPI_Win_lock(MPI_LOCK_EXCLUSIVE, rank, 0, awin);MPI_Get_address(buf, &addrbuf[0]);MPI_Win_unlock(rank,awin); if(rank == 0){printf("Process %d is waiting for debugger attach\n", getpid());sleep(15);} MPI_Barrier(MPI_COMM_WORLD); if(rank == 0){for(int r = 0; r != N; ++r){MPI_Win_lock(MPI_LOCK_EXCLUSIVE, r, 0, awin);MPI_Get(recvaddr, 1, MPI_AINT, r, 0, 1, MPI_AINT, awin);MPI_Win_unlock(r, awin);MPI_Win_lock(MPI_LOCK_EXCLUSIVE, r, 0, win);MPI_Get(received, N, MPI_INT, r, recvaddr[0], N, MPI_INT, win);printf("First value from %d is %d\n", r, received[0]);MPI_Win_unlock(r, win);}} MPI_Barrier(MPI_COMM_WORLD); MPI_Win_free(&win);MPI_Finalize();return 0;}
results in a crash with this backtrace (starting at the second MPI_Get line in my code above): #0 mca_btl_vader_get_cma (btl=0x7f44888d0220 <mca_btl_vader>, endpoint=0x0, local_address=0x7ffff4a13c18, remote_address=<optimized out>, local_handle=0x0, remote_handle=<optimized out>, size=8, flags=0, order=255, cbfunc=0x7f4488231250 <ompi_osc_rdma_get_complete>, cbcontext=0x555d01e1c060, cbdata=0x0) at btl_vader_get.c:95 #1 0x00007f44882308c1 in ompi_osc_rdma_get_contig (sync=sync@entry=0x555d01e1be90, peer=peer@entry=0x555d01e16f10, source_address=<optimized out>, source_address@entry=140737297595424, source_handle=source_handle@entry=0x7f448a747180, target_buffer=<optimized out>, target_buffer@entry=0x7ffff4a13c18, size=size@entry=8, request=<optimized out>) at osc_rdma_comm.c:698 #2 0x00007f44882354b6 in ompi_osc_rdma_master (alloc_reqs=true, rdma_fn=0x7f4488230610 <ompi_osc_rdma_get_contig>, max_rdma_len=<optimized out>, request=0x555d01e1c060, remote_datatype=0x555d0004a2c0 <ompi_mpi_int>, remote_count=<optimized out>, remote_handle=0x7f448a747180, remote_address=<optimized out>, peer=<optimized out>, local_datatype=0x555d0004a2c0 <ompi_mpi_int>, local_count=<optimized out>, local_address=0x7ffff4a13c18, sync=0x555d01e1be90) at osc_rdma_comm.c:349 #3 ompi_osc_rdma_get_w_req (request=0x0, source_datatype=0x555d0004a2c0 <ompi_mpi_int>, source_count=<optimized out>, source_disp=<optimized out>, peer=<optimized out>, origin_datatype=0x555d0004a2c0 <ompi_mpi_int>, origin_count=<optimized out>, origin_addr=0x7ffff4a13c18, sync=0x555d01e1be90) at osc_rdma_comm.c:803 #4 ompi_osc_rdma_get (origin_addr=0x7ffff4a13c18, origin_count=<optimized out>, origin_datatype=0x555d0004a2c0 <ompi_mpi_int>, source_rank=<optimized out>, source_disp=<optimized out>, source_count=<optimized out>, source_datatype=0x555d0004a2c0 <ompi_mpi_int>, win=0x555d01e0aae0) at osc_rdma_comm.c:880 #5 0x00007f448b404b6b in PMPI_Get (origin_addr=0x7ffff4a13c18, origin_count=2, origin_datatype=0x555d0004a2c0 <ompi_mpi_int>, target_rank=<optimized out>, target_disp=<optimized out>, target_count=<optimized out>, target_datatype=0x555d0004a2c0 <ompi_mpi_int>, win=0x555d01e0aae0) at pget.c:81 #6 0x0000555d00047430 in main (argc=1, argv=0x7ffff4a13d18) at onesided_crash_report.c:41 On OpenMPI 3.1.3 the code works fine. Am I doing something wrong, or is this a bug? Kind regards, Bart
_______________________________________________ users mailing list users@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/users