diff --git a/.gitmodules b/.gitmodules index f4477aa4..7a168ce2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "modules/tests-sos"] path = modules/tests-sos - url = ../../ronawho/tests-sos.git - branch = fix_team_get_config_test + url = ../../openshmem-org/tests-sos.git + branch = main diff --git a/modules/tests-sos b/modules/tests-sos index 26de6baf..2d4a704c 160000 --- a/modules/tests-sos +++ b/modules/tests-sos @@ -1 +1 @@ -Subproject commit 26de6baf701ee66c04db4d63d58206ea67436c3b +Subproject commit 2d4a704cda2f3fa042c634ff91f12ab2639f770c diff --git a/mpp/shmemx.h4 b/mpp/shmemx.h4 index 04bcfb91..debb5f43 100644 --- a/mpp/shmemx.h4 +++ b/mpp/shmemx.h4 @@ -93,6 +93,18 @@ SHMEM_BIND_C11_RMA(`SHMEM_CTX_C11_GEN_IBGET', `, \') \ SHMEM_BIND_C11_RMA(`SHMEM_C11_GEN_IBGET', `, \') \ )(__VA_ARGS__) +#define shmemx_signal_set(...) \ + _Generic(SHMEM_C11_TYPE_EVAL_PTR_OR_SCALAR(SHMEM_C11_ARG0(__VA_ARGS__)), \ + shmem_ctx_t: shmemx_ctx_signal_set, \ + uint64_t*: shmemx_signal_set \ + )(__VA_ARGS__) + +#define shmemx_signal_add(...) \ + _Generic(SHMEM_C11_TYPE_EVAL_PTR_OR_SCALAR(SHMEM_C11_ARG0(__VA_ARGS__)), \ + shmem_ctx_t: shmemx_ctx_signal_add, \ + uint64_t*: shmemx_signal_add \ + )(__VA_ARGS__) + #endif /* C11 */ #endif /* SHMEMX_H */ diff --git a/mpp/shmemx_c_func.h4 b/mpp/shmemx_c_func.h4 index 16ebb602..70876b67 100644 --- a/mpp/shmemx_c_func.h4 +++ b/mpp/shmemx_c_func.h4 @@ -84,6 +84,12 @@ SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_pcntr_get_completed_read(shmem_ctx_ SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_pcntr_get_completed_target(uint64_t *cntr_value); SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_pcntr_get_all(shmem_ctx_t ctx, shmemx_pcntr_t *pcntr); +/* Signal extensions */ +SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_signal_add(uint64_t *sig_addr, uint64_t signal, int pe); +SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_ctx_signal_add(shmem_ctx_t ctx, uint64_t *sig_addr, uint64_t signal, int pe); +SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_signal_set(uint64_t *sig_addr, uint64_t signal, int pe); +SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_ctx_signal_set(shmem_ctx_t ctx, uint64_t *sig_addr, uint64_t signal, int pe); + /* Separate initializers */ SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_heap_create(void *base, size_t size, int device_type, int device_index); SHMEM_FUNCTION_ATTRIBUTES void SHPRE()shmemx_heap_preinit(); diff --git a/src/data_c.c4 b/src/data_c.c4 index 85bb6006..31233b99 100644 --- a/src/data_c.c4 +++ b/src/data_c.c4 @@ -285,6 +285,14 @@ SHMEM_PROF_DEF_CTX_PUT_N_SIGNAL_NBI(`mem') #define shmemx_ct_wait pshmemx_ct_wait #pragma weak shmem_signal_fetch = pshmem_signal_fetch #define shmem_signal_fetch pshmem_signal_fetch +#pragma weak shmemx_signal_add = pshmemx_signal_add +#define shmemx_signal_add pshmemx_signal_add +#pragma weak shmemx_signal_set = pshmemx_signal_set +#define shmemx_signal_set pshmemx_signal_set +#pragma weak shmemx_ctx_signal_add = pshmemx_ctx_signal_add +#define shmemx_ctx_signal_add pshmemx_ctx_signal_add +#pragma weak shmemx_ctx_signal_set = pshmemx_ctx_signal_set +#define shmemx_ctx_signal_set pshmemx_ctx_signal_set #endif /* ENABLE_PROFILING */ @@ -870,6 +878,52 @@ shmem_signal_fetch(const uint64_t* sig_addr) return val; } +void SHMEM_FUNCTION_ATTRIBUTES +shmemx_signal_add(uint64_t *sig_addr, uint64_t signal, int pe) +{ + SHMEM_ERR_CHECK_INITIALIZED(); + SHMEM_ERR_CHECK_PE(pe); + SHMEM_ERR_CHECK_SYMMETRIC(sig_addr, sizeof(uint64_t)); + + shmem_internal_atomic(SHMEM_CTX_DEFAULT, sig_addr, &signal, sizeof(uint64_t), + pe, SHM_INTERNAL_SUM, SHM_INTERNAL_UINT64); +} + +void SHMEM_FUNCTION_ATTRIBUTES +shmemx_ctx_signal_add(shmem_ctx_t ctx, uint64_t *sig_addr, uint64_t signal, int pe) +{ + SHMEM_ERR_CHECK_INITIALIZED(); + SHMEM_ERR_CHECK_PE(pe); + SHMEM_ERR_CHECK_CTX(ctx); + SHMEM_ERR_CHECK_SYMMETRIC(sig_addr, sizeof(uint64_t)); + + shmem_internal_atomic(ctx, sig_addr, &signal, sizeof(uint64_t), + pe, SHM_INTERNAL_SUM, SHM_INTERNAL_UINT64); +} + +void SHMEM_FUNCTION_ATTRIBUTES +shmemx_signal_set(uint64_t *sig_addr, uint64_t signal, int pe) +{ + SHMEM_ERR_CHECK_INITIALIZED(); + SHMEM_ERR_CHECK_PE(pe); + SHMEM_ERR_CHECK_SYMMETRIC(sig_addr, sizeof(uint64_t)); + + shmem_internal_atomic_set(SHMEM_CTX_DEFAULT, (void *) sig_addr, &signal, + sizeof(uint64_t), pe, SHM_INTERNAL_UINT64); +} + +void SHMEM_FUNCTION_ATTRIBUTES +shmemx_ctx_signal_set(shmem_ctx_t ctx, uint64_t *sig_addr, uint64_t signal, int pe) +{ + SHMEM_ERR_CHECK_INITIALIZED(); + SHMEM_ERR_CHECK_PE(pe); + SHMEM_ERR_CHECK_CTX(ctx); + SHMEM_ERR_CHECK_SYMMETRIC(sig_addr, sizeof(uint64_t)); + + shmem_internal_atomic_set(ctx, (void *) sig_addr, &signal, + sizeof(uint64_t), pe, SHM_INTERNAL_UINT64); +} + void SHMEM_FUNCTION_ATTRIBUTES shmemx_getmem_ct(shmemx_ct_t ct, void *target, const void *source, size_t nelems, int pe) {