20 #ifndef OMPI_OSC_RDMA_H
21 #define OMPI_OSC_RDMA_H
23 #include "ompi_config.h"
25 #include "opal/class/opal_free_list.h"
27 #include "opal/threads/threads.h"
29 #include "ompi/win/win.h"
30 #include "ompi/communicator/communicator.h"
70 bool c_btl_registered;
72 uint32_t c_sequence_number;
78 uint64_t peer_seg_key;
91 volatile int peer_index_btls;
103 volatile int32_t num_btls_callin;
104 int32_t num_btls_expected;
105 volatile int32_t num_btls_outgoing;
115 uint32_t m_sequence_number;
170 unsigned int *m_copy_num_pending_sendreqs;
176 bool m_eager_send_ok;
180 bool m_rdma_wait_completion;
183 int32_t m_rdma_num_pending;
192 int *m_fence_coll_counts;
197 bool *m_sc_remote_active_ranks;
198 int *m_sc_remote_ranks;
201 int32_t m_lock_status;
202 int32_t m_shared_count;
205 int32_t m_lock_received_ack;
211 #define GET_MODULE(win) ((ompi_osc_rdma_module_t*) win->w_osc_module)
217 int ompi_osc_rdma_component_init(
bool enable_progress_threads,
218 bool enable_mpi_threads);
220 int ompi_osc_rdma_component_finalize(
void);
222 int ompi_osc_rdma_component_query(
struct ompi_win_t *win,
226 int ompi_osc_rdma_component_select(
struct ompi_win_t *win,
231 int ompi_osc_rdma_component_irecv(
void *buf,
238 ompi_request_complete_fn_t callback,
241 int ompi_osc_rdma_component_isend(
void *buf,
248 ompi_request_complete_fn_t callback,
256 int ompi_osc_rdma_module_free(
struct ompi_win_t *win);
258 int ompi_osc_rdma_module_put(
void *origin_addr,
262 OPAL_PTRDIFF_TYPE target_disp,
267 int ompi_osc_rdma_module_accumulate(
void *origin_addr,
271 OPAL_PTRDIFF_TYPE target_disp,
277 int ompi_osc_rdma_module_get(
void *origin_addr,
281 OPAL_PTRDIFF_TYPE target_disp,
286 int ompi_osc_rdma_module_fence(
int assert,
struct ompi_win_t *win);
288 int ompi_osc_rdma_module_start(
struct ompi_group_t *group,
291 int ompi_osc_rdma_module_complete(
struct ompi_win_t *win);
293 int ompi_osc_rdma_module_post(
struct ompi_group_t *group,
297 int ompi_osc_rdma_module_wait(
struct ompi_win_t *win);
299 int ompi_osc_rdma_module_test(
struct ompi_win_t *win,
302 int ompi_osc_rdma_module_lock(
int lock_type,
307 int ompi_osc_rdma_module_unlock(
int target,
OSC module instance.
Definition: osc.h:269
opal_free_list_t c_sendreqs
free list of ompi_osc_rdma_sendreq_t structures
Definition: osc_rdma.h:64
Definition: opal_hash_table.h:42
A descriptor that holds the parameters to a send/put/get operation along w/ a callback routine that i...
Definition: btl.h:275
Definition: osc_rdma.h:111
opal_mutex_t c_request_lock
Lock for request management.
Definition: osc_rdma.h:58
Definition: condition.h:49
opal_condition_t c_request_cond
Condition variable for request management.
Definition: osc_rdma.h:61
Definition: ompi_datatype.h:68
unsigned int * m_num_pending_sendreqs
list of unsigned int counters for the number of requests to a particular rank in m_comm for this acce...
Definition: osc_rdma.h:140
Definition: mutex_unix.h:53
int32_t m_num_post_msgs
Number of "ping" messages from the remote post group we've received.
Definition: osc_rdma.h:158
opal_free_list_t c_longreqs
free list of ompi_osc_rdma_longreq_t structures
Definition: osc_rdma.h:68
Definition: osc_rdma.h:102
The opal_list_t interface is used to provide a generic doubly-linked list container for Open MPI...
ompi_osc_base_component_t super
Extend the basic osc component interface.
Definition: osc_rdma.h:47
opal_list_t m_pending_sendreqs
list of ompi_osc_rdma_sendreq_t structures, and includes all requests for this access epoch that have...
Definition: osc_rdma.h:135
opal_mutex_t m_lock
lock access to data structures in the current module
Definition: osc_rdma.h:118
BML Management Layer (BML)
opal_free_list_t c_replyreqs
free list of ompi_osc_rdma_replyreq_t structures
Definition: osc_rdma.h:66
opal_condition_t m_cond
condition variable for access to current module
Definition: osc_rdma.h:121
Top-level description of requests.
Definition: osc_rdma.h:45
One-sided Communication interface.
Definition: opal_free_list.h:31
OSC component interface.
Definition: osc.h:154
int32_t m_num_complete_msgs
Number of "count" messages from the remote complete group we've received.
Definition: osc_rdma.h:162
Byte Transfer Layer (BTL)
int32_t m_num_pending_out
For MPI_Fence synchronization, the number of messages to send in epoch.
Definition: osc_rdma.h:147
Definition: osc_rdma.h:86
A hash table that may be indexed with either fixed length (e.g.
Group structure Currently we have four formats for storing the process pointers that are members of t...
Definition: group.h:79
opal_hash_table_t c_modules
List of ompi_osc_rdma_module_ts currently in existance.
Definition: osc_rdma.h:55
opal_mutex_t c_lock
lock access to datastructures in the component structure
Definition: osc_rdma.h:50
Definition: opal_list.h:147
ompi_osc_base_module_t super
Extend the basic osc module interface.
Definition: osc_rdma.h:113
volatile int32_t m_tag_counter
cyclic counter for a unique tage for long messages.
Definition: osc_rdma.h:167
int32_t m_num_pending_in
For MPI_Fence synchronization, the number of expected incoming messages.
Definition: osc_rdma.h:154
Definition: osc_rdma.h:38
opal_mutex_t m_acc_lock
lock for "atomic" window updates from reductions
Definition: osc_rdma.h:124
bool m_eager_send_active
start sending data eagerly
Definition: osc_rdma.h:175
Definition: osc_rdma.h:77
Definition: communicator.h:118
Main top-level request struct definition.
Definition: request.h:100
ompi_communicator_t * m_comm
communicator created with this window
Definition: osc_rdma.h:130
Back-end type of MPI_Op.
Definition: op.h:100
ompi_win_t * m_win
pointer back to window
Definition: osc_rdma.h:127