NewMadeleine

Documentation

« back to PM2 home.
nm_onesided_interface.h
Go to the documentation of this file.
1/*
2 * NewMadeleine
3 * Copyright (C) 2006-2022 (see AUTHORS file)
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or (at
8 * your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 */
15
16#ifndef NM_ONESIDED_INTERFACE_H
17#define NM_ONESIDED_INTERFACE_H
18
19#include <nm_public.h>
21#include <nm_onesided_private.h>
22
23#include <stdint.h>
24
34/* ********************************************************* */
35
43
51
53
57/* ** basic ops ******************************************** */
58
67
72 const void*p_ptr, nm_len_t len, uintptr_t dest_addr, nm_onesided_request_t*p_req);
73
79 struct nm_data_s*p_data, uintptr_t dest_addr, nm_onesided_request_t*p_req);
80
83 void*p_ptr, nm_len_t len, uintptr_t dest_addr, nm_onesided_request_t*p_req);
84
87 struct nm_data_s*p_data, uintptr_t dest_addr, nm_onesided_request_t*p_req);
88
91
94
97
100
103/* ** remote queues **************************************** */
104
118
121
124 const void*p_ptr, nm_len_t len, nm_onesided_request_t*p_req);
125
128 const void*p_ptr, nm_len_t len);
129
134
137/* ** target-side completions ****************************** */
138
148
156 void*p_ptr, nm_len_t len, uintptr_t dest_addr,
157 void*p_target_ptr, nm_len_t target_len,
159
162 void*p_ptr, nm_len_t len, uintptr_t dest_addr,
163 void*p_target_ptr, nm_len_t target_len,
165
169
172
175
178
181
185/* ** blocking versions ************************************ */
186
195 void*p_ptr, nm_len_t len, uintptr_t dest_addr);
196
199 void*p_ptr, nm_len_t len, uintptr_t dest_addr);
200
203
207#endif /* NM_ONESIDED_INTERFACE_H */
void nm_onesided_get(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, void *p_ptr, nm_len_t len, uintptr_t dest_addr)
blocking version of iget
void nm_onesided_put(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, void *p_ptr, nm_len_t len, uintptr_t dest_addr)
blocking version of iput
void nm_onesided_fence(nm_onesided_t p_onesided, struct nm_gate_s *p_gate)
blocking version of ifence
void nm_onesided_finalize(nm_onesided_t p_onesided)
void nm_onesided_init(nm_session_t p_session, nm_onesided_t *pp_onesided)
initialize the interface, using the given session.
struct nm_onesided_s * nm_onesided_t
an instance of the 'onesided' interface
void nm_onesided_ifence(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, nm_onesided_request_t *p_req)
ensures all put operations to the remote node are completed
void nm_onesided_iput(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, const void *p_ptr, nm_len_t len, uintptr_t dest_addr, nm_onesided_request_t *p_req)
remotely write to destination memory; local data is p_ptr with length len; dest_addr is the address i...
void nm_onesided_iput_data(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, struct nm_data_s *p_data, uintptr_t dest_addr, nm_onesided_request_t *p_req)
remotely write to destination memory; local data described by p_data; dest_addr is the address in the...
void nm_onesided_req_wait(nm_onesided_request_t *p_req)
wait for this request completion
void nm_onesided_iget(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, void *p_ptr, nm_len_t len, uintptr_t dest_addr, nm_onesided_request_t *p_req)
remotely read data from target memory.
void nm_onesided_iget_data(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, struct nm_data_s *p_data, uintptr_t dest_addr, nm_onesided_request_t *p_req)
remotely read data from target memory (nm_data flavor).
int nm_onesided_req_test(nm_onesided_request_t *p_req)
test for completion of a request
void nm_onesided_req_wait_all(nm_onesided_request_t **p_reqs, int n)
wait for completion of a vector of requests
int nm_onesided_queue_id_t
local id for a queue
void nm_onesided_queue_enqueue(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, nm_onesided_queue_id_t queue, const void *p_ptr, nm_len_t len)
enqueue a message in the given remote queue, blocking version
nm_onesided_queue_id_t nm_onesided_queue_create(nm_onesided_t p_onesided)
create a local queue, accessible remotely
void nm_onesided_queue_ienqueue(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, nm_onesided_queue_id_t queue, const void *p_ptr, nm_len_t len, nm_onesided_request_t *p_req)
enqueue a message in the given remote queue, non-blocking version
void * nm_onesided_queue_dequeue(nm_onesided_t p_onesided, nm_onesided_queue_id_t queue)
try to dequeue an entry from local queue; return NULL if queue is empty.
uintptr_t nm_onesided_target_get_addr(nm_onesided_target_request_t *p_req)
get the address of a request
void nm_onesided_iput_with_target(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, void *p_ptr, nm_len_t len, uintptr_t dest_addr, void *p_target_ptr, nm_len_t target_len, nm_onesided_request_t *p_req)
send a put request with target-side completion.
void nm_onesided_target_irecv(nm_onesided_t p_onesided, nm_gate_t p_gate, void *p_ptr, nm_len_t len, nm_onesided_target_request_t *p_req)
posts a recv request for target-side completion
void nm_onesided_iget_with_target(nm_onesided_t p_onesided, struct nm_gate_s *p_gate, void *p_ptr, nm_len_t len, uintptr_t dest_addr, void *p_target_ptr, nm_len_t target_len, nm_onesided_request_t *p_req)
send a get request with target-side completion
nm_len_t nm_onesided_target_get_size(nm_onesided_target_request_t *p_req)
get the size of a request (size of the onesided operation, not the target-side completion data)
nm_gate_t nm_onesided_target_get_source(nm_onesided_target_request_t *p_req)
get the source of a request
void nm_onesided_target_wait(nm_onesided_target_request_t *p_req)
wait completion of a request on target side
static nm_session_t p_session
static nm_gate_t p_gate
uint16_t len
chunk len
Definition nm_headers.h:0
internal definitions for interface 'onesided'.
This is the common public header for NewMad.
uint64_t nm_len_t
data length used by nmad
Definition nm_types.h:68
a data descriptor, used to pack/unpack data from app layout to/from contiguous buffers
Definition nm_data.h:196
Connection to another process.
Definition nm_gate.h:104
a send request for onesided
an instance of interface 'onesided'
a request used for target-side completions