check_openmpi_rma Subroutine

private subroutine check_openmpi_rma()

Arguments

None

Source Code

   SUBROUTINE check_openmpi_rma()
      ! Check if RMA is used with OpenMPI, if so disabled it
      ! (OpenMPI has several bugs with RMA and it does not
      ! give any performance benefit)
      CHARACTER(LEN=mp_max_library_version_string)       :: mpi_library_version
      INTEGER                                            :: ipos, resultlen

      IF (.NOT. dbcsr_cfg%use_mpi_rma%val) &
         RETURN

#if defined(__DBCSR_OPENMPI_RMA)
      RETURN
#endif

      CALL mp_get_library_version(mpi_library_version, resultlen)
      ! ignore failure to obtain the library version string
      IF (resultlen .EQ. 0) &
         RETURN

      ! check if Open MPI
      ipos = INDEX(mpi_library_version(1:resultlen), "Open MPI v")
      IF (ipos .EQ. 0) &
         RETURN

      CALL dbcsr_warn(__LOCATION__, "You are using OpenMPI: --- "// &
                      mpi_library_version(1:resultlen)// &
                      " --- We disable RMA to prevent errors. "// &
                      "Please install MPICH version or use __DBCSR_OPENMPI_RMA to force the "// &
                      "execution. ")
      CALL dbcsr_set_config(use_mpi_rma=.FALSE.)

   END SUBROUTINE check_openmpi_rma