OpenMPI
0.1.1
|
#include "pml_ob1.h"
#include "pml_ob1_rdma.h"
#include "pml_ob1_rdmafrag.h"
#include "ompi/proc/proc.h"
#include "ompi/mca/pml/ob1/pml_ob1_comm.h"
#include "ompi/mca/mpool/base/base.h"
#include "ompi/mca/pml/base/pml_base_recvreq.h"
Go to the source code of this file.
Data Structures | |
struct | mca_pml_ob1_recv_request_t |
Macros | |
#define | MCA_PML_OB1_RECV_REQUEST_ALLOC(recvreq, rc) |
Allocate a recv request from the modules free list. More... | |
#define | MCA_PML_OB1_RECV_REQUEST_INIT(request,addr,count,datatype,src,tag,comm,persistent) |
Initialize a receive request with call parameters. More... | |
#define | MCA_PML_OB1_RECV_REQUEST_MPI_COMPLETE(recvreq) |
Mark the request as completed at MPI level for internal purposes. More... | |
#define | MCA_PML_OB1_RECV_REQUEST_RETURN(recvreq) |
#define | MCA_PML_OB1_RECV_REQUEST_START(r) mca_pml_ob1_recv_req_start(r) |
#define | MCA_PML_OB1_RECV_REQUEST_MATCHED(request, hdr) recv_req_matched(request, hdr) |
#define | MCA_PML_OB1_RECV_REQUEST_UNPACK(request,segments,num_segments,seg_offset,data_offset,bytes_received,bytes_delivered) |
#define | MCA_PML_OB1_ADD_ACK_TO_PENDING(P, S, D, O) |
Typedefs | |
typedef struct mca_pml_ob1_recv_request_t | mca_pml_ob1_recv_request_t |
Functions | |
OBJ_CLASS_DECLARATION (mca_pml_ob1_recv_request_t) | |
static bool | lock_recv_request (mca_pml_ob1_recv_request_t *recvreq) |
static bool | unlock_recv_request (mca_pml_ob1_recv_request_t *recvreq) |
static void | recv_request_pml_complete (mca_pml_ob1_recv_request_t *recvreq) |
Complete receive request. More... | |
static bool | recv_request_pml_complete_check (mca_pml_ob1_recv_request_t *recvreq) |
void | mca_pml_ob1_recv_req_start (mca_pml_ob1_recv_request_t *req) |
static void | prepare_recv_req_converter (mca_pml_ob1_recv_request_t *req) |
static void | recv_req_matched (mca_pml_ob1_recv_request_t *req, mca_pml_ob1_match_hdr_t *hdr) |
void | mca_pml_ob1_recv_request_progress_match (mca_pml_ob1_recv_request_t *req, struct mca_btl_base_module_t *btl, mca_btl_base_segment_t *segments, size_t num_segments) |
void | mca_pml_ob1_recv_request_progress_frag (mca_pml_ob1_recv_request_t *req, struct mca_btl_base_module_t *btl, mca_btl_base_segment_t *segments, size_t num_segments) |
void | mca_pml_ob1_recv_request_progress_rndv (mca_pml_ob1_recv_request_t *req, struct mca_btl_base_module_t *btl, mca_btl_base_segment_t *segments, size_t num_segments) |
void | mca_pml_ob1_recv_request_progress_rget (mca_pml_ob1_recv_request_t *req, struct mca_btl_base_module_t *btl, mca_btl_base_segment_t *segments, size_t num_segments) |
void | mca_pml_ob1_recv_request_matched_probe (mca_pml_ob1_recv_request_t *req, struct mca_btl_base_module_t *btl, mca_btl_base_segment_t *segments, size_t num_segments) |
Handle completion of a probe request. | |
int | mca_pml_ob1_recv_request_schedule_once (mca_pml_ob1_recv_request_t *req, mca_bml_base_btl_t *start_bml_btl) |
static int | mca_pml_ob1_recv_request_schedule_exclusive (mca_pml_ob1_recv_request_t *req, mca_bml_base_btl_t *start_bml_btl) |
static void | mca_pml_ob1_recv_request_schedule (mca_pml_ob1_recv_request_t *req, mca_bml_base_btl_t *start_bml_btl) |
int | mca_pml_ob1_recv_request_ack_send_btl (ompi_proc_t *proc, mca_bml_base_btl_t *bml_btl, uint64_t hdr_src_req, void *hdr_dst_req, uint64_t hdr_rdma_offset, bool nordma) |
static int | mca_pml_ob1_recv_request_ack_send (ompi_proc_t *proc, uint64_t hdr_src_req, void *hdr_dst_req, uint64_t hdr_send_offset, bool nordma) |
int | mca_pml_ob1_recv_request_get_frag (mca_pml_ob1_rdma_frag_t *frag) |
void | mca_pml_ob1_recv_request_process_pending (void) |
#define MCA_PML_OB1_ADD_ACK_TO_PENDING | ( | P, | |
S, | |||
D, | |||
O | |||
) |
#define MCA_PML_OB1_RECV_REQUEST_ALLOC | ( | recvreq, | |
rc | |||
) |
Allocate a recv request from the modules free list.
rc | (OUT) OMPI_SUCCESS or error status on failure. |
#define MCA_PML_OB1_RECV_REQUEST_INIT | ( | request, | |
addr, | |||
count, | |||
datatype, | |||
src, | |||
tag, | |||
comm, | |||
persistent | |||
) |
Initialize a receive request with call parameters.
request | (IN) Receive request. |
addr | (IN) User buffer. |
count | (IN) Number of elements of indicated datatype. |
datatype | (IN) User defined datatype. |
src | (IN) Source rank w/in the communicator. |
tag | (IN) User defined tag. |
comm | (IN) Communicator. |
persistent | (IN) Is this a ersistent request. |
#define MCA_PML_OB1_RECV_REQUEST_MPI_COMPLETE | ( | recvreq | ) |
Mark the request as completed at MPI level for internal purposes.
recvreq | (IN) Receive request. |
Referenced by recv_request_pml_complete().
#define MCA_PML_OB1_RECV_REQUEST_RETURN | ( | recvreq | ) |
void mca_pml_ob1_recv_req_start | ( | mca_pml_ob1_recv_request_t * | req | ) |
The laps of time between the ACTIVATE event and the SEARCH_UNEX one include the cost of the request lock.
References mca_pml_ob1_match_hdr_t::hdr_src, mca_pml_ob1_match_hdr_t::hdr_tag, mca_pml_ob1_common_hdr_t::hdr_type, mca_pml_comm_t::matching_lock, mca_pml_ob1_recv_request_matched_probe(), mca_pml_ob1_recv_request_progress_rndv(), ompi_proc_local_proc, opal_list_remove_item(), OPAL_THREAD_LOCK, OPAL_THREAD_UNLOCK, mca_pml_comm_t::recv_sequence, mca_pml_ob1_recv_request_t::req_ack_sent, mca_pml_base_request_t::req_addr, mca_pml_base_recv_request_t::req_base, mca_pml_ob1_recv_request_t::req_bytes_expected, mca_pml_ob1_recv_request_t::req_bytes_received, mca_pml_base_request_t::req_comm, mca_pml_ob1_recv_request_t::req_match_received, mca_pml_base_request_t::req_peer, mca_pml_base_request_t::req_proc, mca_pml_base_request_t::req_sequence, mca_btl_base_segment_t::seg_addr, mca_pml_ob1_comm_proc_t::specific_receives, mca_pml_ob1_comm_proc_t::unexpected_frags, and mca_pml_comm_t::wild_receives.
void mca_pml_ob1_recv_request_progress_rndv | ( | mca_pml_ob1_recv_request_t * | req, |
struct mca_btl_base_module_t * | btl, | ||
mca_btl_base_segment_t * | segments, | ||
size_t | num_segments | ||
) |
The PUT protocol do not attach any data to the original request. Therefore, we might want to avoid unpacking if there is nothing to unpack.
References mca_pml_ob1_rendezvous_hdr_t::hdr_msg_length, mca_pml_ob1_rendezvous_hdr_t::hdr_src_req, mca_pml_base_request_t::req_addr, mca_pml_base_recv_request_t::req_base, mca_pml_base_recv_request_t::req_bytes_packed, mca_pml_ob1_recv_request_t::req_bytes_received, mca_pml_base_request_t::req_count, mca_pml_base_request_t::req_datatype, and mca_btl_base_segment_t::seg_addr.
Referenced by mca_pml_ob1_recv_frag_match(), and mca_pml_ob1_recv_req_start().
|
inlinestatic |
Complete receive request.
Request structure cannot be accessed after calling this function any more.
recvreq | (IN) Receive request. |
References MCA_PML_OB1_RECV_REQUEST_MPI_COMPLETE, mca_mpool_base_module_t::mpool_deregister, OPAL_THREAD_LOCK, OPAL_THREAD_UNLOCK, mca_pml_base_recv_request_t::req_base, mca_pml_ob1_recv_request_t::req_bytes_expected, mca_pml_base_recv_request_t::req_bytes_packed, mca_pml_ob1_recv_request_t::req_bytes_received, mca_pml_base_request_t::req_free_called, mca_pml_base_request_t::req_ompi, mca_pml_base_request_t::req_pml_complete, and ompi_request_t::req_status.