2004-01-09 06:26:12 +03:00
|
|
|
/*
|
2004-11-22 04:38:40 +03:00
|
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University.
|
|
|
|
* All rights reserved.
|
|
|
|
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
|
|
|
|
* All rights reserved.
|
2004-11-28 23:09:25 +03:00
|
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
|
|
* University of Stuttgart. All rights reserved.
|
2005-03-24 15:43:37 +03:00
|
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
2004-11-22 04:38:40 +03:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
2004-01-09 06:26:12 +03:00
|
|
|
* $HEADER$
|
|
|
|
*/
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
*
|
|
|
|
* P2P Management Layer (PML)
|
|
|
|
*
|
2004-08-02 04:24:22 +04:00
|
|
|
* An MCA component type that provides the P2P interface functionality
|
|
|
|
* required by the MPI layer. The PML is a relatively thin layer that
|
|
|
|
* primarily provides for the fragmentation and scheduling of messages
|
|
|
|
* over multiple transports (instances of the P2P Transport Layer
|
|
|
|
* (PTL) MCA component type) as depicted below:
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* ------------------------------------
|
|
|
|
* | MPI |
|
|
|
|
* ------------------------------------
|
|
|
|
* | PML |
|
|
|
|
* ------------------------------------
|
|
|
|
* | PTL (TCP) | PTL (SM) | PTL (...) |
|
|
|
|
* ------------------------------------
|
|
|
|
*
|
2004-08-02 04:24:22 +04:00
|
|
|
* A single PML component is selected by the MCA framework during
|
|
|
|
* library initialization. Initially, all available PMLs are loaded
|
|
|
|
* (potentially as shared libraries) and their component open and init
|
|
|
|
* functions called. The MCA framework selects the component
|
|
|
|
* returning the highest priority and closes/unloads any other PML
|
|
|
|
* components that may have been opened.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
2004-08-02 04:24:22 +04:00
|
|
|
* After all of the MCA components are initialized, the MPI/RTE will
|
|
|
|
* make downcalls into the PML to provide the initial list of
|
|
|
|
* processes (ompi_proc_t instances), and notification of changes
|
|
|
|
* (add/delete).
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
2004-08-02 04:24:22 +04:00
|
|
|
* The PML module must select the set of PTL components that are to be
|
|
|
|
* used to reach a given destination. These should be cached on a PML
|
|
|
|
* specific data structure that is hung off the ompi_proc_t.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* The PML should then apply a scheduling algorithm (round-robin,
|
|
|
|
* weighted distribution, etc), to schedule the delivery of messages
|
|
|
|
* over the available PTLs.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2004-01-12 00:31:52 +03:00
|
|
|
#ifndef MCA_PML_H
|
|
|
|
#define MCA_PML_H
|
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#include "ompi_config.h"
|
|
|
|
#include "class/ompi_list.h"
|
2004-03-17 21:45:16 +03:00
|
|
|
#include "communicator/communicator.h"
|
|
|
|
#include "request/request.h"
|
2004-01-09 22:20:50 +03:00
|
|
|
#include "mca/mca.h"
|
2004-01-14 02:26:14 +03:00
|
|
|
#include "mpi.h" /* needed for MPI_ANY_TAG */
|
2004-01-09 06:26:12 +03:00
|
|
|
|
2004-10-21 02:31:03 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
2004-01-12 00:31:52 +03:00
|
|
|
|
2004-01-09 06:26:12 +03:00
|
|
|
/*
|
2004-08-02 04:24:22 +04:00
|
|
|
* PML component types
|
2004-01-09 06:26:12 +03:00
|
|
|
*/
|
|
|
|
|
2004-08-02 04:24:22 +04:00
|
|
|
struct mca_ptl_base_modulet;
|
2004-01-15 20:43:54 +03:00
|
|
|
struct mca_ptl_addr_t;
|
|
|
|
|
2004-01-13 03:36:37 +03:00
|
|
|
|
2004-01-09 08:11:33 +03:00
|
|
|
typedef enum {
|
2004-01-12 22:17:09 +03:00
|
|
|
MCA_PML_BASE_SEND_STANDARD,
|
|
|
|
MCA_PML_BASE_SEND_BUFFERED,
|
|
|
|
MCA_PML_BASE_SEND_SYNCHRONOUS,
|
|
|
|
MCA_PML_BASE_SEND_READY
|
2004-01-13 03:36:37 +03:00
|
|
|
} mca_pml_base_send_mode_t;
|
|
|
|
|
2004-10-12 19:50:01 +04:00
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#define OMPI_ANY_TAG MPI_ANY_TAG
|
|
|
|
#define OMPI_ANY_SOURCE MPI_ANY_SOURCE
|
|
|
|
#define OMPI_PROC_NULL MPI_PROC_NULL
|
2004-01-14 02:26:14 +03:00
|
|
|
|
2004-10-12 19:50:01 +04:00
|
|
|
|
2004-01-14 18:18:14 +03:00
|
|
|
/**
|
2004-08-02 04:24:22 +04:00
|
|
|
* MCA->PML Called by MCA framework to initialize the component.
|
2004-01-14 18:18:14 +03:00
|
|
|
*
|
2004-01-31 02:00:48 +03:00
|
|
|
* @param priority (OUT) Relative priority or ranking used by MCA to
|
2004-08-02 04:24:22 +04:00
|
|
|
* selected a component.
|
2004-01-31 02:00:48 +03:00
|
|
|
*
|
2005-03-27 17:05:23 +04:00
|
|
|
* @param enable_progress_threads (IN) Whether this component is
|
|
|
|
* allowed to run a hidden/progress thread or not.
|
2004-01-31 02:00:48 +03:00
|
|
|
*
|
2005-03-27 17:05:23 +04:00
|
|
|
* @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.
|
2004-01-14 18:18:14 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef struct mca_pml_base_module_1_0_0_t * (*mca_pml_base_component_init_fn_t)(
|
2004-01-31 02:00:48 +03:00
|
|
|
int *priority,
|
2005-03-27 17:05:23 +04:00
|
|
|
bool enable_progress_threads,
|
|
|
|
bool enable_mpi_threads);
|
2004-01-14 18:18:14 +03:00
|
|
|
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_component_finalize_fn_t)(void);
|
2004-02-01 00:45:32 +03:00
|
|
|
|
2004-01-14 18:18:14 +03:00
|
|
|
/**
|
2004-08-02 04:24:22 +04:00
|
|
|
* PML component version and interface functions.
|
2004-01-14 18:18:14 +03:00
|
|
|
*/
|
|
|
|
|
2004-08-02 04:24:22 +04:00
|
|
|
struct mca_pml_base_component_1_0_0_t {
|
|
|
|
mca_base_component_t pmlm_version;
|
|
|
|
mca_base_component_data_1_0_0_t pmlm_data;
|
|
|
|
mca_pml_base_component_init_fn_t pmlm_init;
|
|
|
|
mca_pml_base_component_finalize_fn_t pmlm_finalize;
|
2004-01-14 18:18:14 +03:00
|
|
|
};
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef struct mca_pml_base_component_1_0_0_t mca_pml_base_component_1_0_0_t;
|
|
|
|
typedef mca_pml_base_component_1_0_0_t mca_pml_base_component_t;
|
2004-01-14 18:18:14 +03:00
|
|
|
|
2004-01-09 08:11:33 +03:00
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* MCA management functions.
|
2004-01-09 22:20:50 +03:00
|
|
|
*/
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Downcall from MPI/RTE layer when new processes are created.
|
|
|
|
*
|
|
|
|
* @param procs Array of new processes
|
|
|
|
* @param nprocs Size of process array
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* Provides a notification to the PML that new processes have been
|
|
|
|
* created, and provides the PML the opportunity to cache data
|
2004-06-07 19:33:53 +04:00
|
|
|
* (e.g. list of PTLs to use) on the ompi_proc_t data structure.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_add_procs_fn_t)(struct ompi_proc_t **procs, size_t nprocs);
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Downcall from MPI/RTE layer when processes are terminated.
|
|
|
|
*
|
|
|
|
* @param procs Array of processes
|
|
|
|
* @param nprocs Size of process array
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* Provides a notification to the PML that processes have
|
|
|
|
* gone away, and provides the PML the opportunity to cleanup
|
2004-06-07 19:33:53 +04:00
|
|
|
* any data cached on the ompi_proc_t data structure.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_del_procs_fn_t)(struct ompi_proc_t **procs, size_t nprocs);
|
2004-03-26 17:15:20 +03:00
|
|
|
|
2004-04-12 19:39:15 +04:00
|
|
|
/**
|
|
|
|
* Downcall from MCA layer to enable the PML/PTLs.
|
|
|
|
*
|
2005-05-24 02:06:50 +04:00
|
|
|
* @param enable Enable/Disable PML forwarding
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-04-12 19:39:15 +04:00
|
|
|
*/
|
2005-05-24 02:06:50 +04:00
|
|
|
typedef int (*mca_pml_base_module_enable_fn_t)(
|
|
|
|
bool enable
|
2004-04-12 19:39:15 +04:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* For non-threaded case, provides MCA the opportunity to
|
|
|
|
* progress outstanding requests on all ptls.
|
|
|
|
*
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-04-12 19:39:15 +04:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_progress_fn_t)(void);
|
2004-04-12 19:39:15 +04:00
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* MPI Interface Functions
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Downcall from MPI layer when a new communicator is created.
|
|
|
|
*
|
|
|
|
* @param comm Communicator
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* Provides the PML the opportunity to initialize/cache a data structure
|
|
|
|
* on the communicator.
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_add_comm_fn_t)(struct ompi_communicator_t* comm);
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Downcall from MPI layer when a communicator is destroyed.
|
|
|
|
*
|
|
|
|
* @param comm Communicator
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
* Provides the PML the opportunity to cleanup any datastructures
|
|
|
|
* associated with the communicator.
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_del_comm_fn_t)(struct ompi_communicator_t* comm);
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialize a persistent receive request.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer.
|
|
|
|
* @param count (IN) Number of elements of the specified datatype.
|
|
|
|
* @param datatype (IN) User defined datatype.
|
|
|
|
* @param src (IN) Source rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param request (OUT) Request handle.
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_irecv_init_fn_t)(
|
2004-03-26 17:15:20 +03:00
|
|
|
void *buf,
|
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-01-13 03:36:37 +03:00
|
|
|
int src,
|
2004-03-26 17:15:20 +03:00
|
|
|
int tag,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm,
|
|
|
|
struct ompi_request_t **request
|
2004-01-13 03:36:37 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* Post a receive request.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer.
|
|
|
|
* @param count (IN) Number of elements of the specified datatype.
|
|
|
|
* @param datatype (IN) User defined datatype.
|
|
|
|
* @param src (IN) Source rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param request (OUT) Request handle.
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_irecv_fn_t)(
|
2004-01-13 03:36:37 +03:00
|
|
|
void *buf,
|
2004-03-18 19:03:03 +03:00
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-01-13 03:36:37 +03:00
|
|
|
int src,
|
|
|
|
int tag,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm,
|
|
|
|
struct ompi_request_t **request
|
2004-01-13 03:36:37 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* Post a receive and wait for completion.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer
|
|
|
|
* @param count (IN) Number of elements of the specified datatype
|
|
|
|
* @param datatype (IN) User defined datatype
|
|
|
|
* @param src (IN) Source rank w/in communicator
|
|
|
|
* @param tag (IN) User defined tag
|
|
|
|
* @param comm (IN) Communicator
|
|
|
|
* @param status (OUT) Completion status
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_recv_fn_t)(
|
2004-03-03 19:44:41 +03:00
|
|
|
void *buf,
|
2004-03-18 19:03:03 +03:00
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-03-03 19:44:41 +03:00
|
|
|
int src,
|
|
|
|
int tag,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm,
|
|
|
|
ompi_status_public_t* status
|
2004-03-03 19:44:41 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* Initialize a persistent send request.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer.
|
|
|
|
* @param count (IN) Number of elements of the specified datatype.
|
|
|
|
* @param datatype (IN) User defined datatype.
|
|
|
|
* @param dst (IN) Peer rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param mode (IN) Send mode (STANDARD,BUFFERED,SYNCHRONOUS,READY)
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param request (OUT) Request handle.
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_isend_init_fn_t)(
|
2004-01-13 03:36:37 +03:00
|
|
|
void *buf,
|
2004-03-18 19:03:03 +03:00
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-01-13 03:36:37 +03:00
|
|
|
int dst,
|
|
|
|
int tag,
|
|
|
|
mca_pml_base_send_mode_t mode,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm,
|
|
|
|
struct ompi_request_t **request
|
2004-01-13 03:36:37 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Post a send request.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer.
|
|
|
|
* @param count (IN) Number of elements of the specified datatype.
|
|
|
|
* @param datatype (IN) User defined datatype.
|
|
|
|
* @param dst (IN) Peer rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param mode (IN) Send mode (STANDARD,BUFFERED,SYNCHRONOUS,READY)
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param request (OUT) Request handle.
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_isend_fn_t)(
|
2004-01-09 08:11:33 +03:00
|
|
|
void *buf,
|
2004-03-18 19:03:03 +03:00
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-01-13 03:36:37 +03:00
|
|
|
int dst,
|
2004-01-09 08:11:33 +03:00
|
|
|
int tag,
|
2004-01-13 03:36:37 +03:00
|
|
|
mca_pml_base_send_mode_t mode,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm,
|
|
|
|
struct ompi_request_t **request
|
2004-01-09 08:11:33 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Post a send request and wait for completion.
|
|
|
|
*
|
|
|
|
* @param buf (IN) User buffer.
|
|
|
|
* @param count (IN) Number of elements of the specified datatype.
|
|
|
|
* @param datatype (IN) User defined datatype.
|
|
|
|
* @param dst (IN) Peer rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param mode (IN) Send mode (STANDARD,BUFFERED,SYNCHRONOUS,READY)
|
|
|
|
* @param comm (IN) Communicator.
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_send_fn_t)(
|
2004-03-03 19:44:41 +03:00
|
|
|
void *buf,
|
2004-03-18 19:03:03 +03:00
|
|
|
size_t count,
|
2005-05-20 02:39:04 +04:00
|
|
|
struct ompi_datatype_t *datatype,
|
2004-03-03 19:44:41 +03:00
|
|
|
int dst,
|
|
|
|
int tag,
|
|
|
|
mca_pml_base_send_mode_t mode,
|
2004-06-07 19:33:53 +04:00
|
|
|
struct ompi_communicator_t* comm
|
2004-03-03 19:44:41 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* Initiate one or more persistent requests.
|
|
|
|
*
|
|
|
|
* @param count Number of requests
|
|
|
|
* @param request Array of persistent requests
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_start_fn_t)(
|
2004-03-26 17:15:20 +03:00
|
|
|
size_t count,
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_request_t** requests
|
2004-01-13 03:36:37 +03:00
|
|
|
);
|
2004-01-09 06:26:12 +03:00
|
|
|
|
2004-06-09 23:45:08 +04:00
|
|
|
/**
|
|
|
|
* Probe to poll for pending recv.
|
|
|
|
*
|
|
|
|
* @param src (IN) Source rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param matched (OUT) Flag indicating if matching recv exists.
|
|
|
|
* @param status (OUT) Completion statuses.
|
|
|
|
* @return OMPI_SUCCESS or failure status.
|
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_iprobe_fn_t)(
|
2004-06-09 23:45:08 +04:00
|
|
|
int src,
|
|
|
|
int tag,
|
|
|
|
ompi_communicator_t* comm,
|
|
|
|
int *matched,
|
|
|
|
ompi_status_public_t *status
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Blocking probe to wait for pending recv.
|
|
|
|
*
|
|
|
|
* @param src (IN) Source rank w/in communicator.
|
|
|
|
* @param tag (IN) User defined tag.
|
|
|
|
* @param comm (IN) Communicator.
|
|
|
|
* @param status (OUT) Completion statuses.
|
|
|
|
* @return OMPI_SUCCESS or failure status.
|
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_probe_fn_t)(
|
2004-06-09 23:45:08 +04:00
|
|
|
int src,
|
|
|
|
int tag,
|
|
|
|
ompi_communicator_t* comm,
|
|
|
|
ompi_status_public_t *status
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cancel pending operation.
|
|
|
|
*
|
|
|
|
* @param request (IN) Request
|
|
|
|
* @return OMPI_SUCCESS or failure status.
|
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_cancel_fn_t)(
|
2004-06-09 23:45:08 +04:00
|
|
|
ompi_request_t* request
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Has a request been cancelled?
|
|
|
|
*
|
|
|
|
* @param request (IN) Request
|
|
|
|
* @return OMPI_SUCCESS or failure status.
|
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_cancelled_fn_t)(
|
2004-06-09 23:45:08 +04:00
|
|
|
ompi_request_t* request,
|
|
|
|
int *flag
|
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
/**
|
|
|
|
* Release resources held by a persistent mode request.
|
|
|
|
*
|
|
|
|
* @param request (IN) Request
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_free_fn_t)(
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_request_t** request
|
2004-03-18 01:00:19 +03:00
|
|
|
);
|
|
|
|
|
2004-03-26 17:15:20 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* A special NULL request handle.
|
|
|
|
*
|
|
|
|
* @param request (OUT) Request
|
2004-06-07 19:33:53 +04:00
|
|
|
* @return OMPI_SUCCESS or failure status.
|
2004-03-26 17:15:20 +03:00
|
|
|
*
|
|
|
|
*/
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef int (*mca_pml_base_module_null_fn_t)(
|
2004-06-07 19:33:53 +04:00
|
|
|
ompi_request_t** request
|
2004-03-17 00:56:19 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
|
2004-01-14 18:18:14 +03:00
|
|
|
/**
|
2004-03-26 17:15:20 +03:00
|
|
|
* PML instance.
|
2004-01-09 08:11:33 +03:00
|
|
|
*/
|
2004-01-09 06:26:12 +03:00
|
|
|
|
2004-08-02 04:24:22 +04:00
|
|
|
struct mca_pml_base_module_1_0_0_t {
|
2004-01-13 03:36:37 +03:00
|
|
|
|
2004-01-15 20:43:54 +03:00
|
|
|
/* downcalls from MCA to PML */
|
2004-08-02 04:24:22 +04:00
|
|
|
mca_pml_base_module_add_procs_fn_t pml_add_procs;
|
|
|
|
mca_pml_base_module_del_procs_fn_t pml_del_procs;
|
2005-05-24 02:06:50 +04:00
|
|
|
mca_pml_base_module_enable_fn_t pml_enable;
|
2004-08-02 04:24:22 +04:00
|
|
|
mca_pml_base_module_progress_fn_t pml_progress;
|
2004-01-13 03:36:37 +03:00
|
|
|
|
2004-01-15 20:43:54 +03:00
|
|
|
/* downcalls from MPI to PML */
|
2004-08-02 04:24:22 +04:00
|
|
|
mca_pml_base_module_add_comm_fn_t pml_add_comm;
|
|
|
|
mca_pml_base_module_del_comm_fn_t pml_del_comm;
|
|
|
|
mca_pml_base_module_irecv_init_fn_t pml_irecv_init;
|
|
|
|
mca_pml_base_module_irecv_fn_t pml_irecv;
|
|
|
|
mca_pml_base_module_recv_fn_t pml_recv;
|
|
|
|
mca_pml_base_module_isend_init_fn_t pml_isend_init;
|
|
|
|
mca_pml_base_module_isend_fn_t pml_isend;
|
|
|
|
mca_pml_base_module_send_fn_t pml_send;
|
|
|
|
mca_pml_base_module_iprobe_fn_t pml_iprobe;
|
|
|
|
mca_pml_base_module_probe_fn_t pml_probe;
|
2004-10-12 19:50:01 +04:00
|
|
|
mca_pml_base_module_start_fn_t pml_start;
|
2004-01-09 22:20:50 +03:00
|
|
|
};
|
2004-08-02 04:24:22 +04:00
|
|
|
typedef struct mca_pml_base_module_1_0_0_t mca_pml_base_module_1_0_0_t;
|
|
|
|
typedef mca_pml_base_module_1_0_0_t mca_pml_base_module_t;
|
2004-01-09 06:26:12 +03:00
|
|
|
|
|
|
|
/*
|
2004-08-02 04:24:22 +04:00
|
|
|
* Macro for use in components that are of type pml v1.0.0
|
2004-01-09 06:26:12 +03:00
|
|
|
*/
|
2004-01-12 00:31:52 +03:00
|
|
|
#define MCA_PML_BASE_VERSION_1_0_0 \
|
|
|
|
/* pml v1.0 is chained to MCA v1.0 */ \
|
|
|
|
MCA_BASE_VERSION_1_0_0, \
|
|
|
|
/* pml v1.0 */ \
|
|
|
|
"pml", 1, 0, 0
|
2004-01-09 06:26:12 +03:00
|
|
|
|
2005-04-13 07:19:48 +04:00
|
|
|
/*
|
|
|
|
* macro for doing direct call / call through struct
|
|
|
|
*/
|
|
|
|
#if MCA_pml_DIRECT_CALL
|
|
|
|
|
|
|
|
#include "mca/pml/pml_direct_call.h"
|
|
|
|
|
|
|
|
#define MCA_PML_CALL_STAMP(a, b) mca_pml_ ## a ## _ ## b
|
|
|
|
#define MCA_PML_CALL_EXPANDER(a, b) MCA_PML_CALL_STAMP(a,b)
|
|
|
|
#define MCA_PML_CALL(a) MCA_PML_CALL_EXPANDER(MCA_pml_DIRECT_CALL_COMPONENT, a)
|
|
|
|
|
|
|
|
#else
|
|
|
|
#define MCA_PML_CALL(a) mca_pml.pml_ ## a
|
|
|
|
OMPI_DECLSPEC extern mca_pml_base_module_t mca_pml;
|
|
|
|
#endif
|
|
|
|
|
2004-10-21 02:31:03 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|
2004-01-12 00:31:52 +03:00
|
|
|
#endif /* MCA_PML_H */
|