Skip to content

Commit 7d5cc8e

Browse files
authored
Merge pull request #3572 from ggouaillardet/topic/ompi_osc_rdma_rget_accumulate_internal
osc/rdma: fix datatype extent usage in ompi_osc_rdma_rget_accumulate_…
2 parents 2f721a3 + 0f79259 commit 7d5cc8e

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

ompi/mca/osc/rdma/osc_rdma_accumulate.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10151015
ompi_osc_rdma_module_t *module = sync->module;
10161016
mca_btl_base_registration_handle_t *target_handle;
10171017
uint64_t target_address;
1018-
ptrdiff_t lb, extent;
1018+
ptrdiff_t lb, origin_extent, target_extent;
10191019
int ret;
10201020

10211021
/* short-circuit case. note that origin_count may be 0 if op is MPI_NO_OP */
@@ -1027,20 +1027,22 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10271027
return OMPI_SUCCESS;
10281028
}
10291029

1030-
(void) ompi_datatype_get_extent (origin_datatype, &lb, &extent);
1030+
(void) ompi_datatype_get_extent (target_datatype, &lb, &target_extent);
10311031

1032-
ret = osc_rdma_get_remote_segment (module, peer, target_disp, extent * target_count, &target_address, &target_handle);
1032+
ret = osc_rdma_get_remote_segment (module, peer, target_disp, target_extent * target_count, &target_address, &target_handle);
10331033
if (OPAL_UNLIKELY(OMPI_SUCCESS != ret)) {
10341034
return ret;
10351035
}
10361036

1037-
if (module->acc_single_intrinsic && extent <= 8) {
1037+
(void) ompi_datatype_get_extent (origin_datatype, &lb, &origin_extent);
1038+
1039+
if (module->acc_single_intrinsic && origin_extent <= 8) {
10381040
if (module->acc_use_amo && ompi_datatype_is_predefined (origin_datatype)) {
10391041
if (NULL == result_addr) {
1040-
ret = ompi_osc_rdma_acc_single_atomic (sync, origin_addr, origin_datatype, extent, peer, target_address,
1042+
ret = ompi_osc_rdma_acc_single_atomic (sync, origin_addr, origin_datatype, origin_extent, peer, target_address,
10411043
target_handle, op, request);
10421044
} else {
1043-
ret = ompi_osc_rdma_fetch_and_op_atomic (sync, origin_addr, result_addr, origin_datatype, extent, peer, target_address,
1045+
ret = ompi_osc_rdma_fetch_and_op_atomic (sync, origin_addr, result_addr, origin_datatype, origin_extent, peer, target_address,
10441046
target_handle, op, request);
10451047
}
10461048

@@ -1049,7 +1051,7 @@ int ompi_osc_rdma_rget_accumulate_internal (ompi_osc_rdma_sync_t *sync, const vo
10491051
}
10501052
}
10511053

1052-
ret = ompi_osc_rdma_fetch_and_op_cas (sync, origin_addr, result_addr, origin_datatype, extent, peer, target_address,
1054+
ret = ompi_osc_rdma_fetch_and_op_cas (sync, origin_addr, result_addr, origin_datatype, origin_extent, peer, target_address,
10531055
target_handle, op, request);
10541056
if (OMPI_SUCCESS == ret) {
10551057
return OMPI_SUCCESS;

0 commit comments

Comments
 (0)