Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d3c78df
First draft and TODOs for notified comm
devreal Oct 24, 2025
152c28c
osc/sm: Add notification support for put/get operations
joe-explr Nov 4, 2025
f1e07c8
osc/sm: Nit picking edits
joe-explr Nov 4, 2025
06d61ed
Public APIs for:
Nov 19, 2025
9078470
Edits for Public APIs:
Dec 22, 2025
26f568e
Notified RMA counters memory allocation in the shared memory segment …
Feb 3, 2026
650ff8d
Editing Notified RMA implementation
Feb 4, 2026
cf07e67
Editing Notified RMA implementation with new design
Feb 19, 2026
cd5f1b9
Implementing Notify Query
Mar 4, 2026
0c661b2
Changes to Notify Query
Mar 4, 2026
45c2eda
Implemented Set Notify Query
Mar 4, 2026
193c10b
Changes to Notify Query
Mar 4, 2026
e47983f
Configuring memory barries to propagate the update
Mar 11, 2026
095c99d
Reset notify value Implementation Signed-off-by: Joseph Antony <jajo…
Mar 11, 2026
9d4d06c
Addressing review comments and bug fixes Signed-off-by: Joseph Anton…
Mar 13, 2026
6719fbd
Removing Duplicate changes Signed-off-by: Joseph Antony <jajoseph.an…
Mar 13, 2026
1ff322d
ompi: rename MPI_ERR_NOTIFY_IDX to MPI_ERR_RMA_NOTIFICATION
joe-explr Aug 2, 2026
d909605
osc: add MPI_WIN_SET_NUM_NOTIFY and MPI_WIN_GET_NUM_NOTIFY
joe-explr Aug 2, 2026
773703c
osc/sm: fix notification counter ordering and index validation
joe-explr Aug 2, 2026
e69cacc
osc/sm: complete the notified RMA operation set and grow counters
joe-explr Aug 11, 2026
655f1ff
ompi: add the MPI-5.1 notification window attributes
joe-explr Aug 11, 2026
7623174
ompi/test: add notified RMA tests
joe-explr Aug 11, 2026
a809de8
osc/sm: trim the notified RMA comments to the essentials
joe-explr Aug 12, 2026
414b9f1
osc: validate target_rank in MPI_Win_get_num_notify
joe-explr Aug 12, 2026
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,8 @@ ompi/test/general/proc
ompi/test/general/request
ompi/test/general/seq_tracker
ompi/test/general/win
ompi/test/general/win_notify
ompi/test/general/win_notify_unsupported

ompi/test/monitoring/monitoring_test
ompi/test/monitoring/check_monitoring
Expand Down
8 changes: 7 additions & 1 deletion ompi/attribute/attribute_predefined.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ int ompi_attr_create_predefined_keyvals(void)
OMPI_SUCCESS != (rc = create_win(MPI_WIN_CREATE_FLAVOR)) ||
OMPI_SUCCESS != (rc = create_win(MPI_WIN_MODEL)) ||
OMPI_SUCCESS != (rc = create_comm(MPI_FT, false)) || /* not #if conditional on OPAL_ENABLE_FT_MPI for ABI */
OMPI_SUCCESS != (rc = create_win(MPI_WIN_NOTIFICATION_NUM_SB)) ||
OMPI_SUCCESS != (rc = create_win(MPI_WIN_NOTIFICATION_NUM_UB)) ||
OMPI_SUCCESS != (rc = create_win(MPI_WIN_NOTIFICATION_VALUE_UB)) ||
0) {
ret = rc;
}
Expand Down Expand Up @@ -227,7 +230,10 @@ int ompi_attr_free_predefined(void)
OMPI_SUCCESS != (rc = free_win(MPI_WIN_SIZE)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_DISP_UNIT)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_CREATE_FLAVOR)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_MODEL))) {
OMPI_SUCCESS != (rc = free_win(MPI_WIN_MODEL)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_NOTIFICATION_NUM_SB)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_NOTIFICATION_NUM_UB)) ||
OMPI_SUCCESS != (rc = free_win(MPI_WIN_NOTIFICATION_VALUE_UB))) {
ret = rc;
}

Expand Down
3 changes: 3 additions & 0 deletions ompi/errhandler/errcode.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ static ompi_mpi_errcode_t ompi_err_value_too_large;
static ompi_mpi_errcode_t ompi_err_errhandler;
static ompi_mpi_errcode_t ompi_t_err_not_accessible;
static ompi_mpi_errcode_t ompi_t_err_not_supported;
static ompi_mpi_errcode_t ompi_err_rma_notification;

static void ompi_mpi_errcode_construct(ompi_mpi_errcode_t* errcode);
static void ompi_mpi_errcode_destruct(ompi_mpi_errcode_t* errcode);
Expand Down Expand Up @@ -252,6 +253,7 @@ int ompi_mpi_errcode_init (void)
CONSTRUCT_ERRCODE( ompi_err_errhandler, MPI_ERR_ERRHANDLER, "MPI_ERR_ERRHANDLER: Invalid error handler handle" );
CONSTRUCT_ERRCODE( ompi_t_err_not_accessible, MPI_T_ERR_NOT_ACCESSIBLE, "MPI_T_ERR_NOT_ACCESSIBLE: Requested functionality is not accessible" );
CONSTRUCT_ERRCODE( ompi_t_err_not_supported, MPI_T_ERR_NOT_SUPPORTED, "MPI_T_ERR_NOT_SUPPORTED: Requested functionality not supported" );
CONSTRUCT_ERRCODE( ompi_err_rma_notification, MPI_ERR_RMA_NOTIFICATION, "MPI_ERR_RMA_NOTIFICATION: Invalid notification index passed to MPI call" );

/* Per MPI-3 p353:27-32, MPI_LASTUSEDCODE must be >=
MPI_ERR_LASTCODE. So just start it as == MPI_ERR_LASTCODE. */
Expand Down Expand Up @@ -373,6 +375,7 @@ int ompi_mpi_errcode_finalize (void)
OBJ_DESTRUCT(&ompi_err_errhandler);
OBJ_DESTRUCT(&ompi_t_err_not_accessible);
OBJ_DESTRUCT(&ompi_t_err_not_supported);
OBJ_DESTRUCT(&ompi_err_rma_notification);
OBJ_DESTRUCT(&ompi_mpi_errcodes);
ompi_mpi_errcode_lastpredefined = 0;
opal_mutex_unlock(&errcode_lock);
Expand Down
147 changes: 147 additions & 0 deletions ompi/include/mpi.h.in

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions ompi/include/mpif-values.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,9 @@
'MPI_WIN_CREATE_FLAVOR': 10,
'MPI_WIN_MODEL': 11,
'MPI_FT': 12,
'MPI_WIN_NOTIFICATION_NUM_SB': 13,
'MPI_WIN_NOTIFICATION_NUM_UB': 14,
'MPI_WIN_NOTIFICATION_VALUE_UB': 15,
'MPI_WIN_FLAVOR_CREATE': 1,
'MPI_WIN_FLAVOR_ALLOCATE': 2,
'MPI_WIN_FLAVOR_DYNAMIC': 3,
Expand Down Expand Up @@ -304,6 +307,7 @@
'MPI_ERR_ERRHANDLER': 80,
'MPI_T_ERR_NOT_ACCESSIBLE': 81,
'MPI_T_ERR_NOT_SUPPORTED': 82,
'MPI_ERR_RMA_NOTIFICATION': 83,
'MPI_ERR_LASTCODE': 92,
'MPI_IDENT': 0,
'MPI_CONGRUENT': 1,
Expand Down
125 changes: 125 additions & 0 deletions ompi/mca/osc/osc.h
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,15 @@ typedef int (*ompi_osc_base_module_put_fn_t)(const void *origin_addr,
struct ompi_datatype_t *target_dt,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_put_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
int notify,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_get_fn_t)(void *origin_addr,
size_t origin_count,
Expand All @@ -226,6 +235,36 @@ typedef int (*ompi_osc_base_module_get_fn_t)(void *origin_addr,
struct ompi_datatype_t *target_dt,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_get_notify_fn_t)(void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
int notify,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_win_get_notify_value_fn_t)(struct ompi_win_t *win,
int notify,
OMPI_MPI_COUNT_TYPE *value);

typedef int (*ompi_osc_base_module_win_reset_notify_value_fn_t)(struct ompi_win_t *win,
int notify,
OMPI_MPI_COUNT_TYPE *value);

typedef int (*ompi_osc_base_module_win_set_num_notify_fn_t)(struct ompi_win_t *win,
struct opal_info_t *info,
int num_notifications);

typedef int (*ompi_osc_base_module_win_get_num_notify_fn_t)(struct ompi_win_t *win,
int target_rank,
int *num_notifications);

typedef int (*ompi_osc_base_module_win_get_notify_bounds_fn_t)(struct ompi_win_t *win,
int *num_sb,
int *num_ub,
OMPI_MPI_COUNT_TYPE *value_ub);

typedef int (*ompi_osc_base_module_accumulate_fn_t)(const void *origin_addr,
size_t origin_count,
Expand All @@ -237,6 +276,17 @@ typedef int (*ompi_osc_base_module_accumulate_fn_t)(const void *origin_addr,
struct ompi_op_t *op,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_accumulate_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
struct ompi_op_t *op,
int notify,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_compare_and_swap_fn_t)(const void *origin_addr,
const void *compare_addr,
void *result_addr,
Expand Down Expand Up @@ -266,6 +316,20 @@ typedef int (*ompi_osc_base_module_get_accumulate_fn_t)(const void *origin_addr,
struct ompi_op_t *op,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_get_accumulate_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_datatype,
void *result_addr,
size_t result_count,
struct ompi_datatype_t *result_datatype,
int target_rank,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_datatype,
struct ompi_op_t *op,
int notify,
struct ompi_win_t *win);

typedef int (*ompi_osc_base_module_rput_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
Expand All @@ -276,6 +340,17 @@ typedef int (*ompi_osc_base_module_rput_fn_t)(const void *origin_addr,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_rput_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
int notify,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_rget_fn_t)(void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
Expand All @@ -286,6 +361,16 @@ typedef int (*ompi_osc_base_module_rget_fn_t)(void *origin_addr,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_rget_notify_fn_t)(void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
int notify,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_raccumulate_fn_t)(const void *origin_addr,
size_t origin_count,
Expand All @@ -298,6 +383,18 @@ typedef int (*ompi_osc_base_module_raccumulate_fn_t)(const void *origin_addr,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_raccumulate_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_dt,
int target,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_dt,
struct ompi_op_t *op,
int notify,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_rget_accumulate_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_datatype,
Expand All @@ -312,6 +409,21 @@ typedef int (*ompi_osc_base_module_rget_accumulate_fn_t)(const void *origin_addr
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_rget_accumulate_notify_fn_t)(const void *origin_addr,
size_t origin_count,
struct ompi_datatype_t *origin_datatype,
void *result_addr,
size_t result_count,
struct ompi_datatype_t *result_datatype,
int target_rank,
ptrdiff_t target_disp,
size_t target_count,
struct ompi_datatype_t *target_datatype,
struct ompi_op_t *op,
int notify,
struct ompi_win_t *win,
struct ompi_request_t **request);

typedef int (*ompi_osc_base_module_fence_fn_t)(int mpi_assert, struct ompi_win_t *win);


Expand Down Expand Up @@ -407,6 +519,19 @@ struct ompi_osc_base_module_4_0_0_t {
ompi_osc_base_module_flush_all_fn_t osc_flush_all;
ompi_osc_base_module_flush_local_fn_t osc_flush_local;
ompi_osc_base_module_flush_local_all_fn_t osc_flush_local_all;
ompi_osc_base_module_put_notify_fn_t osc_put_notify;
ompi_osc_base_module_get_notify_fn_t osc_get_notify;
ompi_osc_base_module_win_get_notify_value_fn_t osc_win_get_notify_value;
ompi_osc_base_module_win_reset_notify_value_fn_t osc_win_reset_notify_value;
ompi_osc_base_module_win_set_num_notify_fn_t osc_win_set_num_notify;
ompi_osc_base_module_win_get_num_notify_fn_t osc_win_get_num_notify;
ompi_osc_base_module_win_get_notify_bounds_fn_t osc_win_get_notify_bounds;
ompi_osc_base_module_rput_notify_fn_t osc_rput_notify;
ompi_osc_base_module_rget_notify_fn_t osc_rget_notify;
ompi_osc_base_module_accumulate_notify_fn_t osc_accumulate_notify;
ompi_osc_base_module_get_accumulate_notify_fn_t osc_get_accumulate_notify;
ompi_osc_base_module_raccumulate_notify_fn_t osc_raccumulate_notify;
ompi_osc_base_module_rget_accumulate_notify_fn_t osc_rget_accumulate_notify;
};
typedef struct ompi_osc_base_module_4_0_0_t ompi_osc_base_module_4_0_0_t;
typedef ompi_osc_base_module_4_0_0_t ompi_osc_base_module_t;
Expand Down
Loading
Loading