@@ -1016,7 +1016,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
1016
1016
ompi_osc_rdma_module_t * module = sync -> module ;
1017
1017
mca_btl_base_registration_handle_t * target_handle ;
1018
1018
uint64_t target_address ;
1019
- ptrdiff_t lb , extent ;
1019
+ ptrdiff_t lb , origin_extent , target_extent ;
1020
1020
int ret ;
1021
1021
1022
1022
/* short-circuit case. note that origin_count may be 0 if op is MPI_NO_OP */
@@ -1068,20 +1068,22 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
1068
1068
}
1069
1069
}
1070
1070
1071
- (void ) ompi_datatype_get_extent (origin_datatype , & lb , & extent );
1071
+ (void ) ompi_datatype_get_extent (target_datatype , & lb , & target_extent );
1072
1072
1073
- ret = osc_rdma_get_remote_segment (module , peer , target_disp , extent * target_count , & target_address , & target_handle );
1073
+ ret = osc_rdma_get_remote_segment (module , peer , target_disp , target_extent * target_count , & target_address , & target_handle );
1074
1074
if (OPAL_UNLIKELY (OMPI_SUCCESS != ret )) {
1075
1075
return ret ;
1076
1076
}
1077
1077
1078
- if (module -> acc_single_intrinsic && extent <= 8 ) {
1078
+ (void ) ompi_datatype_get_extent (origin_datatype , & lb , & origin_extent );
1079
+
1080
+ if (module -> acc_single_intrinsic && origin_extent <= 8 ) {
1079
1081
if (module -> acc_use_amo && ompi_datatype_is_predefined (origin_datatype )) {
1080
1082
if (NULL == result_addr ) {
1081
- ret = ompi_osc_rdma_acc_single_atomic (sync , origin_addr , origin_datatype , extent , peer , target_address ,
1083
+ ret = ompi_osc_rdma_acc_single_atomic (sync , origin_addr , origin_datatype , origin_extent , peer , target_address ,
1082
1084
target_handle , op , request );
1083
1085
} else {
1084
- ret = ompi_osc_rdma_fetch_and_op_atomic (sync , origin_addr , result_addr , origin_datatype , extent , peer , target_address ,
1086
+ ret = ompi_osc_rdma_fetch_and_op_atomic (sync , origin_addr , result_addr , origin_datatype , origin_extent , peer , target_address ,
1085
1087
target_handle , op , request );
1086
1088
}
1087
1089
@@ -1090,7 +1092,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
1090
1092
}
1091
1093
}
1092
1094
1093
- ret = ompi_osc_rdma_fetch_and_op_cas (sync , origin_addr , result_addr , origin_datatype , extent , peer , target_address ,
1095
+ ret = ompi_osc_rdma_fetch_and_op_cas (sync , origin_addr , result_addr , origin_datatype , origin_extent , peer , target_address ,
1094
1096
target_handle , op , request );
1095
1097
if (OMPI_SUCCESS == ret ) {
1096
1098
return OMPI_SUCCESS ;
0 commit comments