Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions oshmem/mca/atomic/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,11 @@ struct mca_atomic_base_module_1_0_0_t {
uint64_t value,
size_t size,
int pe);
int (*atomic_set)(shmem_ctx_t ctx,
void *target,
uint64_t value,
size_t size,
int pe);
};
typedef struct mca_atomic_base_module_1_0_0_t mca_atomic_base_module_1_0_0_t;

Expand Down
19 changes: 14 additions & 5 deletions oshmem/mca/atomic/ucx/atomic_ucx_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ int mca_atomic_ucx_op(shmem_ctx_t ctx,
status_ptr = ucp_atomic_op_nbx(ucx_ctx->ucp_peers[pe].ucp_conn,
op, &value, 1, rva, ucx_mkey->rkey,
&mca_spml_ucp_request_params[size >> 3]);
res = opal_common_ucx_wait_request(status_ptr, ucx_ctx->ucp_worker[0],
"ucp_atomic_op_nbx post");
res = UCS_PTR_IS_ERR(status_ptr) ? OSHMEM_ERROR : OSHMEM_SUCCESS;
#else
status = ucp_atomic_post(ucx_ctx->ucp_peers[pe].ucp_conn,
op, value, size, rva,
Expand Down Expand Up @@ -336,9 +335,18 @@ static int mca_atomic_ucx_cswap_nb(shmem_ctx_t ctx,
return OSHMEM_ERR_NOT_IMPLEMENTED;
}




static int mca_atomic_ucx_set(shmem_ctx_t ctx,
void *target,
uint64_t value,
size_t size,
int pe)
{
#if HAVE_DECL_UCP_ATOMIC_OP_NBX
return mca_atomic_ucx_op(ctx, target, value, size, pe, UCP_ATOMIC_OP_SWAP);
#else
return OSHMEM_ERR_NOT_IMPLEMENTED;
#endif
}

mca_atomic_base_module_t *
mca_atomic_ucx_query(int *priority)
Expand All @@ -365,6 +373,7 @@ mca_atomic_ucx_query(int *priority)
module->super.atomic_fxor_nb = mca_atomic_ucx_fxor_nb;
module->super.atomic_swap_nb = mca_atomic_ucx_swap_nb;
module->super.atomic_cswap_nb = mca_atomic_ucx_cswap_nb;
module->super.atomic_set = mca_atomic_ucx_set;
return &(module->super);
}

Expand Down
49 changes: 45 additions & 4 deletions oshmem/mca/spml/ucx/spml_ucx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1644,19 +1644,60 @@ int mca_spml_ucx_put_all_nb(void *dest, const void *source, size_t size, long *c
return OSHMEM_SUCCESS;
}

/* This routine is not implemented */

static inline int mca_spml_ucx_signal(shmem_ctx_t ctx,
uint64_t *sig_addr,
uint64_t signal,
int sig_op,
int dst)
{
if (sig_op == SHMEM_SIGNAL_SET) {
return MCA_ATOMIC_CALL(set(ctx, (void*)sig_addr, signal,
sizeof(uint64_t), dst));
} else if (sig_op == SHMEM_SIGNAL_ADD) {
return MCA_ATOMIC_CALL(add(ctx, (void*)sig_addr, signal,
sizeof(uint64_t), dst));
}

SPML_UCX_ERROR("Invalid signal operation: %d", sig_op);
return OSHMEM_ERR_NOT_IMPLEMENTED;
}

int mca_spml_ucx_put_signal(shmem_ctx_t ctx, void* dst_addr, size_t size, void*
src_addr, uint64_t *sig_addr, uint64_t signal, int sig_op, int dst)
{
return OSHMEM_ERR_NOT_IMPLEMENTED;
int res;

res = mca_spml_ucx_put(ctx, dst_addr, size, src_addr, dst);
if (OPAL_UNLIKELY(OSHMEM_SUCCESS != res)) {
return res;
}

res = mca_spml_ucx_fence(ctx);
if (OPAL_UNLIKELY(OSHMEM_SUCCESS != res)) {
return res;
}

return mca_spml_ucx_signal(ctx, sig_addr, signal, sig_op, dst);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we need fence also here in the blocking version because it controls the remote ordering

}

/* This routine is not implemented */
int mca_spml_ucx_put_signal_nb(shmem_ctx_t ctx, void* dst_addr, size_t size,
void* src_addr, uint64_t *sig_addr, uint64_t signal, int sig_op, int
dst)
{
return OSHMEM_ERR_NOT_IMPLEMENTED;
int res;

res = mca_spml_ucx_put_nb(ctx, dst_addr, size, src_addr, dst, NULL);
if (OPAL_UNLIKELY(OSHMEM_SUCCESS != res)) {
return res;
}

res = mca_spml_ucx_fence(ctx);
if (OPAL_UNLIKELY(OSHMEM_SUCCESS != res)) {
return res;
}

return mca_spml_ucx_signal(ctx, sig_addr, signal, sig_op, dst);
}

/* This routine is not implemented */
Expand Down
7 changes: 2 additions & 5 deletions oshmem/shmem/c/shmem_set.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,16 @@
*/
#define DO_SHMEM_TYPE_ATOMIC_SET(ctx, type, target, value, pe) do { \
int rc = OSHMEM_SUCCESS; \
size_t size = 0; \
type out_value; \
size_t size = sizeof(type); \
uint64_t value_tmp; \
RUNTIME_CHECK_INIT(); \
RUNTIME_CHECK_PE(pe); \
RUNTIME_CHECK_ADDR(target); \
\
size = sizeof(out_value); \
memcpy(&value_tmp, &value, size); \
rc = MCA_ATOMIC_CALL(swap( \
rc = MCA_ATOMIC_CALL(set( \
ctx, \
(void*)target, \
(void*)&out_value, \
value_tmp, \
size, \
pe)); \
Expand Down