1
1

Merge pull request #7113 from devreal/osc_rdma_cas

RDMA osc: perform CAS in shared memory if possible
Этот коммит содержится в:
Austen Lauria 2020-01-28 10:59:17 -05:00 коммит произвёл GitHub
родитель d768d82231 02dd877d8a
Коммит 3c0fa537c2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23

Просмотреть файл

@ -812,14 +812,24 @@ int ompi_osc_rdma_compare_and_swap (const void *origin_addr, const void *compare
lock_acquired = true; lock_acquired = true;
} }
/* either we have and exclusive lock (via MPI_Win_lock() or the accumulate lock) or the /* operate in (shared) memory if there is only a single node
* user has indicated that they will only use the same op (or same op and no op) for * OR if we have an exclusive lock
* operations on overlapping memory ranges. that indicates it is safe to go ahead and * OR if other processes won't try to use the network either */
* use network atomic operations. */ bool use_shared_mem = module->single_node ||
ret = ompi_osc_rdma_cas_atomic (sync, origin_addr, compare_addr, result_addr, dt, (ompi_osc_rdma_peer_local_base (peer) &&
peer, target_address, target_handle, lock_acquired); (ompi_osc_rdma_peer_is_exclusive (peer) ||
if (OMPI_SUCCESS == ret) { !module->acc_single_intrinsic));
return OMPI_SUCCESS;
if (!use_shared_mem) {
/* either we have an exclusive lock (via MPI_Win_lock() or the accumulate lock) or the
* user has indicated that they will only use the same op (or same op and no op) for
* operations on overlapping memory ranges. that indicates it is safe to go ahead and
* use network atomic operations. */
ret = ompi_osc_rdma_cas_atomic (sync, origin_addr, compare_addr, result_addr, dt,
peer, target_address, target_handle, lock_acquired);
if (OMPI_SUCCESS == ret) {
return OMPI_SUCCESS;
}
} }
if (!(lock_acquired || ompi_osc_rdma_peer_is_exclusive (peer))) { if (!(lock_acquired || ompi_osc_rdma_peer_is_exclusive (peer))) {