1
1
openmpi/ompi/mca/pml/v/pml_v_protocol.h
Aurelien Bouteiller 70bb44d7a9 Moving the Message Log framework to the trunk. Protocol example (simple
showcase) and sender based are provided for now.

Ignored by default except for utk folks. 

This commit was SVN r15539.
2007-07-20 21:36:11 +00:00

97 строки
3.4 KiB
C

#ifndef __INCLUDE_V_PROTOCOL_H_
#define __INCLUDE_V_PROTOCOL_H_
#include "ompi_config.h"
#include "opal/mca/mca.h"
#include "ompi/request/request.h"
#include "ompi/mca/pml/pml.h"
#include "ompi/mca/btl/btl.h"
#include "ompi/mca/pml/base/pml_base_recvreq.h"
#include "ompi/mca/pml/base/pml_base_sendreq.h"
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
/**
* PML_V->PROTOCOL Called by MCA_PML_V framework to initialize the component.
*
* @param priority (OUT) Relative priority or ranking used by MCA to
* select a component.
*
* @param enable_progress_threads (IN) Whether this component is
* allowed to run a hidden/progress thread or not.
*
* @param enable_mpi_threads (IN) Whether support for multiple MPI
* threads is enabled or not (i.e., MPI_THREAD_MULTIPLE), which
* indicates whether multiple threads may invoke this component
* simultaneously or not.
*/
typedef struct mca_pml_v_protocol_base_module_1_0_0_t * (*mca_pml_v_protocol_base_component_init_fn_t)(
int *priority,
bool enable_progress_threads,
bool enable_mpi_threads);
typedef int (*mca_pml_v_protocol_base_component_finalize_fn_t)(void);
/**
* PML_V->PROTOCOL Called by VPROTOCOL to get the actual address of the
* protocol specific part of the request
*
* @param request (IN) the address of an ompi_request
* @return address of the mca_vprotocol_base_request_t associated with the request
*/
#define VPROTOCOL_REQ(req) \
((((mca_pml_base_request_t *) req)->req_type == MCA_PML_REQUEST_SEND) \
? VPROTOCOL_SEND_REQ(req) \
: VPROTOCOL_RECV_REQ(req))
#define VPROTOCOL_RECV_REQ(req) \
(((char *) req) + mca_pml_v.host_pml_req_recv_size)
#define VPROTOCOL_SEND_REQ(req) \
(((char *) req) + mca_pml_v.host_pml_req_send_size)
/**
* PML_V_PROTOCOL component version and interface functions.
*/
typedef struct mca_pml_v_protocol_base_1_0_0_t
{
mca_base_component_t pmlm_version;
mca_base_component_data_1_0_0_t pmlm_data;
mca_pml_v_protocol_base_component_init_fn_t pmlm_init;
mca_pml_v_protocol_base_component_finalize_fn_t pmlm_finalize;
} mca_pml_v_protocol_base_component_1_0_0_t;
typedef mca_pml_v_protocol_base_component_1_0_0_t mca_pml_v_protocol_base_component_t;
typedef struct mca_pml_v_protocol_base_module_1_0_0_t
{
/* PML module stuff */
mca_pml_base_module_add_procs_fn_t add_procs;
mca_pml_base_module_del_procs_fn_t del_procs;
mca_pml_base_module_enable_fn_t enable;
mca_pml_base_module_progress_fn_t progress;
mca_pml_base_module_add_comm_fn_t add_comm;
mca_pml_base_module_del_comm_fn_t del_comm;
mca_pml_base_module_irecv_init_fn_t irecv_init;
mca_pml_base_module_irecv_fn_t irecv;
mca_pml_base_module_recv_fn_t recv;
mca_pml_base_module_isend_init_fn_t isend_init;
mca_pml_base_module_isend_fn_t isend;
mca_pml_base_module_send_fn_t send;
mca_pml_base_module_iprobe_fn_t iprobe;
mca_pml_base_module_probe_fn_t probe;
mca_pml_base_module_start_fn_t start;
mca_pml_base_module_dump_fn_t dump;
/* Request extra data */
opal_class_t * req_recv_class;
opal_class_t * req_send_class;
} mca_pml_v_protocol_base_module_1_0_0_t;
typedef mca_pml_v_protocol_base_module_1_0_0_t mca_pml_v_protocol_base_module_t;
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
#endif /* __INCLUDE_V_PROTOCOL_H_ */