11 #ifndef __VPROTOCOL_PESSIMIST_SENDERBASED_H__
12 #define __VPROTOCOL_PESSIMIST_SENDERBASED_H__
14 #include "ompi_config.h"
16 #include "ompi/mca/pml/v/pml_v_output.h"
17 #include "vprotocol_pessimist_sender_based_types.h"
18 #include "vprotocol_pessimist_request.h"
19 #include "vprotocol_pessimist.h"
25 int vprotocol_pessimist_sender_based_init(
const char *mmapfile,
size_t size);
29 void vprotocol_pessimist_sender_based_finalize(
void);
34 void vprotocol_pessimist_sender_based_alloc(
size_t len);
40 #if defined(SB_USE_PACK_METHOD)
48 unsigned int iov_count = 1;
52 iov.iov_base = (IOVBASE_TYPE *) VPESSIMIST_SEND_FTREQ(pmlreq)->sb.cursor;
55 opal_convertor_pack(&conv, &iov, &iov_count, &max_data);
59 #define __SENDER_BASED_METHOD_FLUSH(REQ)
65 #elif defined(SB_USE_CONVERTOR_METHOD)
66 int32_t vprotocol_pessimist_sender_based_convertor_advance(
opal_convertor_t*,
71 #define __SENDER_BASED_METHOD_COPY(REQ) do { \
72 opal_convertor_t *pConv; \
73 mca_vprotocol_pessimist_send_request_t *ftreq; \
75 pConv = & (REQ)->req_base.req_convertor; \
76 ftreq = VPESSIMIST_SEND_FTREQ(REQ); \
77 ftreq->sb.conv_flags = pConv->flags; \
78 ftreq->sb.conv_advance = pConv->fAdvance; \
80 pConv->flags &= ~CONVERTOR_NO_OP; \
81 pConv->fAdvance = vprotocol_pessimist_sender_based_convertor_advance; \
84 #define __SENDER_BASED_METHOD_FLUSH(REQ)
86 #define VPESSIMIST_CONV_REQ(CONV) ((mca_vprotocol_pessimist_send_request_t *) \
87 (mca_vprotocol_pessimist.sender_based.sb_conv_to_pessimist_offset + \
88 (uintptr_t) ((CONV)->clone_of)))
94 #elif defined(SB_USE_PROGRESS_METHOD)
100 ftreq->sb.bytes_progressed = 0;
114 unsigned int iov_count = 1;
116 uintptr_t position = ftreq->sb.bytes_progressed;
118 iov.iov_len = max_data;
119 iov.iov_base = (IOVBASE_TYPE *) (ftreq->sb.cursor + position);
121 V_OUTPUT_VERBOSE(80,
"pessimist:\tsb\tprgress\t%"PRIpclock
"\tsize %lu from position %lu", ftreq->reqid, max_data, position);
123 &conv, 0, &position );
124 opal_convertor_pack(&conv, &iov, &iov_count, &max_data);
125 ftreq->sb.bytes_progressed += max_data;
130 static inline int vprotocol_pessimist_sb_progress_all_reqs(
void)
139 if(vprotocol_pessimist_sb_progress_req(VPROTOCOL_SEND_REQ(ftreq)))
147 static inline void __SENDER_BASED_METHOD_FLUSH(
ompi_request_t *req)
158 vprotocol_pessimist_sb_progress_req(pmlreq);
169 static inline void vprotocol_pessimist_sender_based_copy_start(
ompi_request_t *req)
176 if(mca_vprotocol_pessimist.sender_based.sb_available <
185 ftreq->sb.cursor = mca_vprotocol_pessimist.sender_based.sb_cursor;
187 mca_vprotocol_pessimist.sender_based.sb_cursor +=
190 mca_vprotocol_pessimist.sender_based.sb_available -=
204 __SENDER_BASED_METHOD_COPY(pmlreq);
209 #define vprotocol_pessimist_sender_based_flush(REQ) __SENDER_BASED_METHOD_FLUSH(REQ)
static opal_list_item_t * opal_list_remove_item(opal_list_t *list, opal_list_item_t *item)
Remove an item from a list.
Definition: opal_list.h:348
static bool opal_list_is_empty(opal_list_t *list)
Check for empty list.
Definition: opal_list.h:174
struct ompi_communicator_t * req_comm
communicator pointer
Definition: pml_base_request.h:63
int32_t req_peer
peer process - rank w/in this communicator
Definition: pml_base_request.h:71
Definition: opal_list.h:98
opal_convertor_t req_convertor
always need the convertor
Definition: pml_base_request.h:66
mca_pml_base_request_t req_base
base request type - common data structure for use by wait/test
Definition: pml_base_sendreq.h:38
#define opal_list_append(l, i)
Append an item to the end of the list.
Definition: opal_list.h:410
int32_t req_tag
user defined tag
Definition: pml_base_request.h:72
Base type for send requests.
Definition: pml_base_sendreq.h:37
Definition: ompi_uio.h:29
Definition: opal_convertor.h:90
mca_pml_base_request_type_t req_type
MPI request type - used for test.
Definition: pml_base_request.h:62
static opal_list_item_t * opal_list_remove_first(opal_list_t *list)
Remove the first item from the list and return it.
Definition: opal_list.h:522
Definition: vprotocol_pessimist_request.h:22
size_t req_bytes_packed
packed size of a message given the datatype and count
Definition: pml_base_sendreq.h:40
Main top-level request struct definition.
Definition: request.h:100
uint64_t req_sequence
sequence number for MPI pt-2-pt ordering
Definition: pml_base_request.h:74