📄 mpi.h
字号:
#define MPI_MAX_INFO_VAL 1024
/* for subarray and darray constructors */
#define MPI_ORDER_C 56
#define MPI_ORDER_FORTRAN 57
#define MPI_DISTRIBUTE_BLOCK 121
#define MPI_DISTRIBUTE_CYCLIC 122
#define MPI_DISTRIBUTE_NONE 123
#define MPI_DISTRIBUTE_DFLT_DARG -49767
#define MPI_IN_PLACE (void *) -1 /* temporary, don't know the right value */
/* asserts for one-sided communication */
#define MPI_MODE_NOCHECK 1024
#define MPI_MODE_NOSTORE 2048
#define MPI_MODE_NOPUT 4096
#define MPI_MODE_NOPRECEDE 8192
#define MPI_MODE_NOSUCCEED 16384
/* Definitions that are determined by configure. */
typedef int MPI_Aint;
typedef int MPI_Fint;
/* Let ROMIO know that MPI_Offset is already defined */
#define HAVE_MPI_OFFSET
/* MPI_OFFSET_TYPEDEF is set in configure and is
typedef $MPI_OFFSET MPI_Offset;
where $MPI_OFFSET is the correct C type */
#if defined(USE_GCC) || defined(__GNUC__)
typedef long long MPI_Offset;
#else
typedef __int64 MPI_Offset;
#endif
/* The order of these elements must match that in mpif.h */
typedef struct MPI_Status {
int count;
int cancelled;
int MPI_SOURCE;
int MPI_TAG;
int MPI_ERROR;
} MPI_Status;
/* Handle conversion types/functions */
/* Programs that need to convert types used in MPICH should use these */
#define MPI_Comm_c2f(comm) (MPI_Fint)(comm)
#define MPI_Comm_f2c(comm) (MPI_Comm)(comm)
#define MPI_Type_c2f(datatype) (MPI_Fint)(datatype)
#define MPI_Type_f2c(datatype) (MPI_Datatype)(datatype)
#define MPI_Group_c2f(group) (MPI_Fint)(group)
#define MPI_Group_f2c(group) (MPI_Group)(group)
#define MPI_Info_c2f(info) (MPI_Fint)(info)
#define MPI_Info_f2c(info) (MPI_Info)(info)
#define MPI_Request_f2c(request) (MPI_Request)(request)
#define MPI_Request_c2f(request) (MPI_Fint)(request)
#define MPI_Op_c2f(op) (MPI_Fint)(op)
#define MPI_Op_f2c(op) (MPI_Op)(op)
#define MPI_Errhandler_c2f(errhandler) (MPI_Fint)(errhandler)
#define MPI_Errhandler_f2c(errhandler) (MPI_Errhandler)(errhandler)
#define MPI_Win_c2f(win) (MPI_Fint)(win)
#define MPI_Win_f2c(win) (MPI_Win)(win)
/* PMPI versions of the handle transfer functions. See section 4.17 */
#define PMPI_Comm_c2f(comm) (MPI_Fint)(comm)
#define PMPI_Comm_f2c(comm) (MPI_Comm)(comm)
#define PMPI_Type_c2f(datatype) (MPI_Fint)(datatype)
#define PMPI_Type_f2c(datatype) (MPI_Datatype)(datatype)
#define PMPI_Group_c2f(group) (MPI_Fint)(group)
#define PMPI_Group_f2c(group) (MPI_Group)(group)
#define PMPI_Info_c2f(info) (MPI_Fint)(info)
#define PMPI_Info_f2c(info) (MPI_Info)(info)
#define PMPI_Request_f2c(request) (MPI_Request)(request)
#define PMPI_Request_c2f(request) (MPI_Fint)(request)
#define PMPI_Op_c2f(op) (MPI_Fint)(op)
#define PMPI_Op_f2c(op) (MPI_Op)(op)
#define PMPI_Errhandler_c2f(errhandler) (MPI_Fint)(errhandler)
#define PMPI_Errhandler_f2c(errhandler) (MPI_Errhandler)(errhandler)
#define PMPI_Win_c2f(win) (MPI_Fint)(win)
#define PMPI_Win_f2c(win) (MPI_Win)(win)
#define MPI_STATUS_IGNORE (MPI_Status *)1
#define MPI_STATUSES_IGNORE (MPI_Status *)1
#define MPI_ERRCODES_IGNORE (int *)0
/* The MPI standard requires that the ARGV_NULL values be the same as
NULL (see 5.3.2) */
#define MPI_ARGV_NULL (char **)0
#define MPI_ARGVS_NULL (char ***)0
/* For supported thread levels */
#define MPI_THREAD_SINGLE 0
#define MPI_THREAD_FUNNELED 1
#define MPI_THREAD_SERIALIZED 2
#define MPI_THREAD_MULTIPLE 3
/* Typedefs for generalized requests */
typedef int (MPI_Grequest_cancel_function)(void *, int);
typedef int (MPI_Grequest_free_function)(void *);
typedef int (MPI_Grequest_query_function)(void *, MPI_Status *);
#ifdef HAVE_MPICH2G2
/*************** Experimental MPICH FEATURES BEGIN HERE *******************/
/* Attribute keys. These are set to MPI_KEYVAL_INVALID by default */
extern int MPICHX_QOS_BANDWIDTH;
extern int MPICHX_QOS_PARAMETERS;
/**************** Experimental MPICH FEATURES END HERE ********************/
/******** Globus-2 device gives access to the underlying processor ********/
/******** topology at the user level using attribute caching **************/
extern int MPICHX_TOPOLOGY_DEPTHS;
extern int MPICHX_TOPOLOGY_COLORS;
/******** End of Globus-2 device keys *************************************/
#endif
/* MPI's error classes */
#define MPI_SUCCESS 0 /* Successful return code */
/* Communication argument parameters */
#define MPI_ERR_BUFFER 1 /* Invalid buffer pointer */
#define MPI_ERR_COUNT 2 /* Invalid count argument */
#define MPI_ERR_TYPE 3 /* Invalid datatype argument */
#define MPI_ERR_TAG 4 /* Invalid tag argument */
#define MPI_ERR_COMM 5 /* Invalid communicator */
#define MPI_ERR_RANK 6 /* Invalid rank */
#define MPI_ERR_ROOT 7 /* Invalid root */
#define MPI_ERR_TRUNCATE 14 /* Message truncated on receive */
/* MPI Objects (other than COMM) */
#define MPI_ERR_GROUP 8 /* Invalid group */
#define MPI_ERR_OP 9 /* Invalid operation */
#define MPI_ERR_REQUEST 19 /* Invalid mpi_request handle */
/* Special topology argument parameters */
#define MPI_ERR_TOPOLOGY 10 /* Invalid topology */
#define MPI_ERR_DIMS 11 /* Invalid dimension argument */
/* All other arguments. This is a class with many kinds */
#define MPI_ERR_ARG 12 /* Invalid argument */
/* Other errors that are not simply an invalid argument */
#define MPI_ERR_OTHER 15 /* Other error; use Error_string */
#define MPI_ERR_UNKNOWN 13 /* Unknown error */
#define MPI_ERR_INTERN 16 /* Internal error code */
/* Multiple completion has two special error classes */
#define MPI_ERR_IN_STATUS 17 /* Look in status for error value */
#define MPI_ERR_PENDING 18 /* Pending request */
/* New MPI-2 Error classes */
#define MPI_ERR_FILE 27 /* */
#define MPI_ERR_ACCESS 20 /* */
#define MPI_ERR_AMODE 21 /* */
#define MPI_ERR_BAD_FILE 22 /* */
#define MPI_ERR_FILE_EXISTS 25 /* */
#define MPI_ERR_FILE_IN_USE 26 /* */
#define MPI_ERR_NO_SPACE 36 /* */
#define MPI_ERR_NO_SUCH_FILE 37 /* */
#define MPI_ERR_IO 32 /* */
#define MPI_ERR_READ_ONLY 40 /* */
#define MPI_ERR_CONVERSION 23 /* */
#define MPI_ERR_DUP_DATAREP 24 /* */
#define MPI_ERR_UNSUPPORTED_DATAREP 43 /* */
/* MPI_ERR_INFO is NOT defined in the MPI-2 standard. I believe that
this is an oversight */
#define MPI_ERR_INFO 28 /* */
#define MPI_ERR_INFO_KEY 29 /* */
#define MPI_ERR_INFO_VALUE 30 /* */
#define MPI_ERR_INFO_NOKEY 31 /* */
#define MPI_ERR_NAME 33 /* */
#define MPI_ERR_NO_MEM 34 /* Alloc_mem could not allocate memory */
#define MPI_ERR_NOT_SAME 35 /* */
#define MPI_ERR_PORT 38 /* */
#define MPI_ERR_QUOTA 39 /* */
#define MPI_ERR_SERVICE 41 /* */
#define MPI_ERR_SPAWN 42 /* */
#define MPI_ERR_UNSUPPORTED_OPERATION 44 /* */
#define MPI_ERR_WIN 45 /* */
#define MPI_ERR_BASE 46 /* */
#define MPI_ERR_LOCKTYPE 47 /* */
#define MPI_ERR_KEYVAL 48 /* Erroneous attribute key */
#define MPI_ERR_RMA_CONFLICT 49 /* */
#define MPI_ERR_RMA_SYNC 50 /* */
#define MPI_ERR_SIZE 51 /* */
#define MPI_ERR_DISP 52 /* */
#define MPI_ERR_ASSERT 53 /* */
#define MPI_ERR_LASTCODE 53 /* Last error class */
#define MPICH_ERR_LAST_CLASS MPI_ERR_LASTCODE
/* End of MPI's error classes */
/* Function type defs */
typedef int (MPI_Datarep_conversion_function)(void *, MPI_Datatype, int,
void *, MPI_Offset, void *);
typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
void *);
/*
For systems that may need to add additional definitions to support
different declaration styles and options (e.g., different calling
conventions or DLL import/export controls).
*/
/* --Insert Additional Definitions Here-- */
/*
* Normally, we provide prototypes for all MPI routines. In a few wierd
* cases, we need to suppress the prototypes.
*/
#ifndef MPICH_SUPPRESS_PROTOTYPES
/* We require that the C compiler support prototypes */
/* Begin Prototypes */
int MPI_Send(void*, int, MPI_Datatype, int, int, MPI_Comm);
int MPI_Recv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
int MPI_Get_count(MPI_Status *, MPI_Datatype, int *);
int MPI_Bsend(void*, int, MPI_Datatype, int, int, MPI_Comm);
int MPI_Ssend(void*, int, MPI_Datatype, int, int, MPI_Comm);
int MPI_Rsend(void*, int, MPI_Datatype, int, int, MPI_Comm);
int MPI_Buffer_attach( void*, int);
int MPI_Buffer_detach( void*, int *);
int MPI_Isend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Ibsend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Issend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Irsend(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Irecv(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Wait(MPI_Request *, MPI_Status *);
int MPI_Test(MPI_Request *, int *, MPI_Status *);
int MPI_Request_free(MPI_Request *);
int MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
int MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
int MPI_Waitall(int, MPI_Request *, MPI_Status *);
int MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
int MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
int MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
int MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
int MPI_Probe(int, int, MPI_Comm, MPI_Status *);
int MPI_Cancel(MPI_Request *);
int MPI_Test_cancelled(MPI_Status *, int *);
int MPI_Send_init(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
int MPI_Bsend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
int MPI_Ssend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
int MPI_Rsend_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
int MPI_Recv_init(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
int MPI_Start(MPI_Request *);
int MPI_Startall(int, MPI_Request *);
int MPI_Sendrecv(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
int MPI_Sendrecv_replace(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
int MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
int MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
int MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
int MPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
int MPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
int MPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
int MPI_Address(void*, MPI_Aint *);
/* We could add __attribute__((deprecated)) to routines like MPI_Type_extent */
int MPI_Type_extent(MPI_Datatype, MPI_Aint *);
/* See the 1.1 version of the Standard. The standard made an
unfortunate choice here, however, it is the standard. The size returned
by MPI_Type_size is specified as an int, not an MPI_Aint */
int MPI_Type_size(MPI_Datatype, int *);
/* MPI_Type_count was withdrawn in MPI 1.1 */
int MPI_Type_lb(MPI_Datatype, MPI_Aint *);
int MPI_Type_ub(MPI_Datatype, MPI_Aint *);
int MPI_Type_commit(MPI_Datatype *);
int MPI_Type_free(MPI_Datatype *);
int MPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
int MPI_Pack(void*, int, MPI_Datatype, void *, int, int *, MPI_Comm);
int MPI_Unpack(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm);
int MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
int MPI_Barrier(MPI_Comm );
int MPI_Bcast(void*, int, MPI_Datatype, int, MPI_Comm );
int MPI_Gather(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
int MPI_Gatherv(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm);
int MPI_Scatter(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
int MPI_Scatterv(void* , int *, int *, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
int MPI_Allgather(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
int MPI_Allgatherv(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
int MPI_Alltoall(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
int MPI_Alltoallv(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -