Your code looks correct, and based on your output I would actually suspect that the I/O part finished correctly, the error message that you see is not an IO error, but from the btl (which is communication related). What version of Open MPI are using, and on what file system? Thanks Edgar
-----Original Message----- From: users <users-boun...@lists.open-mpi.org> On Behalf Of Stephen Siegel via users Sent: Friday, June 5, 2020 5:35 PM To: users@lists.open-mpi.org Cc: Stephen Siegel <sie...@udel.edu> Subject: [OMPI users] MPI I/O question using MPI_File_write_shared I posted this question on StackOverflow and someone suggested I write to the OpenMPI community. https://stackoverflow.com/questions/62223698/mpi-i-o-why-does-my-program-hang-or-misbehave-when-one-process-writes-using-mpi Below is a little MPI program. It is a simple use of MPI I/O. Process 0 writes an int to the file using MPI_File_write_shared; no other process writes anything. It works correctly using an MPICH installation, but on two different machines using OpenMPI, it either hangs in the middle of the call to MPI_File_write_shared, or it reports an error at the end. Not sure if it is my misunderstanding of the MPI Standard or a bug or configuration problem with my OpenMPI. Thanks in advance if anyone can look at it, Steve #include <stdio.h> #include <mpi.h> #include <assert.h> int nprocs, rank; int main() { MPI_File fh; int err, count; MPI_Status status; MPI_Init(NULL, NULL); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); err = MPI_File_open(MPI_COMM_WORLD, "io_byte_shared.tmp", MPI_MODE_CREATE | MPI_MODE_WRONLY, MPI_INFO_NULL, &fh); assert(err==0); err = MPI_File_set_view(fh, 0, MPI_INT, MPI_INT, "native", MPI_INFO_NULL); assert(err==0); printf("Proc %d: file has been opened.\n", rank); fflush(stdout); // Proc 0 only writes header using shared file pointer... MPI_Barrier(MPI_COMM_WORLD); if (rank == 0) { int x = 9999; printf("Proc 0: About to write to file.\n"); fflush(stdout); err = MPI_File_write_shared(fh, &x, 1, MPI_INT, &status); printf("Proc 0: Finished writing.\n"); fflush(stdout); assert(err == 0); } MPI_Barrier(MPI_COMM_WORLD); printf("Proc %d: about to close file.\n", rank); fflush(stdout); err = MPI_File_close(&fh); assert(err==0); MPI_Finalize(); } Example run: $ mpicc io_byte_shared.c $ mpiexec -n 4 ./a.out Proc 0: file has been opened. Proc 0: About to write to file. Proc 0: Finished writing. Proc 1: file has been opened. Proc 2: file has been opened. Proc 3: file has been opened. Proc 0: about to close file. Proc 1: about to close file. Proc 2: about to close file. Proc 3: about to close file. [ilyich:12946] 3 more processes have sent help message help-mpi-btl-base.txt / btl:no-nics [ilyich:12946] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help / error messages