Skip to content

Commit cc5747f

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 8038522 commit cc5747f

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
@@ -4,6 +4,7 @@
44
* reserved.
55
* Copyright (c) 2016 Research Organization for Information Science
66
* and Technology (RIST). All rights reserved.
7+
* Copyright (c) 2017 IBM Corporation. All rights reserved.
78
* $COPYRIGHT$
89
*
910
* Additional copyrights may follow
@@ -14,6 +15,7 @@
1415
#include "osc_rdma_accumulate.h"
1516
#include "osc_rdma_request.h"
1617
#include "osc_rdma_comm.h"
18+
#include "opal/util/show_help.h"
1719

1820
#include "ompi/mca/osc/base/osc_base_obj_convert.h"
1921

@@ -1026,6 +1028,46 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10261028
return OMPI_SUCCESS;
10271029
}
10281030

1031+
/* TODO: Remove the following check when support is added.
1032+
* See the following issue for the current state:
1033+
* https://github.com/open-mpi/ompi/issues/1666
1034+
*/
1035+
if(MPI_MINLOC == op || MPI_MAXLOC == op) {
1036+
if(MPI_SHORT_INT == origin_datatype ||
1037+
MPI_DOUBLE_INT == origin_datatype ||
1038+
MPI_LONG_INT == origin_datatype ||
1039+
MPI_LONG_DOUBLE_INT == origin_datatype) {
1040+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
1041+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
1042+
origin_datatype->name,
1043+
op->o_name,
1044+
comm->c_my_rank);
1045+
ompi_mpi_abort(comm, -1);
1046+
}
1047+
if(MPI_SHORT_INT == result_datatype ||
1048+
MPI_DOUBLE_INT == result_datatype ||
1049+
MPI_LONG_INT == result_datatype ||
1050+
MPI_LONG_DOUBLE_INT == result_datatype) {
1051+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
1052+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
1053+
result_datatype->name,
1054+
op->o_name,
1055+
comm->c_my_rank);
1056+
ompi_mpi_abort(comm, -1);
1057+
}
1058+
if(MPI_SHORT_INT == target_datatype ||
1059+
MPI_DOUBLE_INT == target_datatype ||
1060+
MPI_LONG_INT == target_datatype ||
1061+
MPI_LONG_DOUBLE_INT == target_datatype) {
1062+
ompi_communicator_t *comm = &ompi_mpi_comm_world.comm;
1063+
opal_show_help("help-mca-osc-base.txt", "unsupported-dt", true,
1064+
target_datatype->name,
1065+
op->o_name,
1066+
comm->c_my_rank);
1067+
ompi_mpi_abort(comm, -1);
1068+
}
1069+
}
1070+
10291071
(void) ompi_datatype_get_extent (origin_datatype, &lb, &extent);
10301072

10311073
ret = osc_rdma_get_remote_segment (module, peer, target_disp, extent * target_count, &target_address, &target_handle);

0 commit comments

Comments
 (0)