Skip to content

Commit 2ab65cb

Browse files
committed
osc/rdma: Detect unsupported data types and abort
Using MPI_MINLOC or MPI_MAXLOC with the following data types leads to data corruption: * MPI_DOUBLE_INT * MPI_LONG_INT * MPI_SHORT_INT * MPI_LONG_DOUBLE_INT Detect this print a error message and abort. This workaround should be removed once the following issue is resolved: * #1666 Signed-off-by: Joshua Hursey <[email protected]>
1 parent 5626022 commit 2ab65cb

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

ompi/mca/osc/rdma/osc_rdma_accumulate.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/*
33
* Copyright (c) 2014-2015 Los Alamos National Security, LLC. All rights
44
* reserved.
5+
* Copyright (c) 2017 IBM Corporation. All rights reserved.
56
* $COPYRIGHT$
67
*
78
* Additional copyrights may follow
@@ -12,6 +13,7 @@
1213
#include "osc_rdma_accumulate.h"
1314
#include "osc_rdma_request.h"
1415
#include "osc_rdma_comm.h"
16+
#include "opal/util/show_help.h"
1517

1618
#include "ompi/mca/osc/base/osc_base_obj_convert.h"
1719

@@ -753,6 +755,46 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
753755
return OMPI_SUCCESS;
754756
}
755757

758+
/* TODO: Remove the following check when support is added.
759+
* See the following issue for the current state:
760+
* https://github.com/open-mpi/ompi/issues/1666
761+
*/
762+
if(MPI_MINLOC == op || MPI_MAXLOC == op) {
763+
if(MPI_SHORT_INT == origin_datatype ||
764+
MPI_DOUBLE_INT == origin_datatype ||
765+
MPI_LONG_INT == origin_datatype ||
766+
MPI_LONG_DOUBLE_INT == origin_datatype) {
767+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
768+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
769+
origin_datatype->name,
770+
op->o_name,
771+
comm->c_my_rank);
772+
ompi_mpi_abort(comm, -1);
773+
}
774+
if(MPI_SHORT_INT == result_datatype ||
775+
MPI_DOUBLE_INT == result_datatype ||
776+
MPI_LONG_INT == result_datatype ||
777+
MPI_LONG_DOUBLE_INT == result_datatype) {
778+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
779+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
780+
result_datatype->name,
781+
op->o_name,
782+
comm->c_my_rank);
783+
ompi_mpi_abort(comm, -1);
784+
}
785+
if(MPI_SHORT_INT == target_datatype ||
786+
MPI_DOUBLE_INT == target_datatype ||
787+
MPI_LONG_INT == target_datatype ||
788+
MPI_LONG_DOUBLE_INT == target_datatype) {
789+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
790+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
791+
target_datatype->name,
792+
op->o_name,
793+
comm->c_my_rank);
794+
ompi_mpi_abort(comm, -1);
795+
}
796+
}
797+
756798
ret = osc_rdma_get_remote_segment (module, peer, target_disp, target_datatype->super.size * target_count,
757799
&target_address, &target_handle);
758800
if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) {

0 commit comments

Comments
 (0)