⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpidimpl.h

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 H
📖 第 1 页 / 共 2 页
字号:
    MPIU_Object_add_ref(pg_);			\}#define MPIDI_PG_Release_ref(pg_, inuse_)	\{						\    MPIU_Object_release_ref(pg_, inuse_);	\}#define MPIDI_PG_Get_vc(pg_, rank_, vcp_)		\{							\    *(vcp_) = &(pg_)->vct[rank_];			\    if ((*(vcp_))->state == MPIDI_VC_STATE_INACTIVE)	\    {							\	MPIU_DBG_PrintVCState2(*(vcp_), MPIDI_VC_STATE_ACTIVE);  \	(*(vcp_))->state = MPIDI_VC_STATE_ACTIVE;	\    }							\}#define MPIDI_PG_Get_vcr(pg_, rank_, vcp_)		\{							\    *(vcp_) = &(pg_)->vct[rank_];			\}#define MPIDI_PG_Get_size(pg_) ((pg_)->size)#ifdef MPIDI_DEV_IMPLEMENTS_KVSint MPIDI_PG_To_string(MPIDI_PG_t *pg_ptr, char **str_ptr);int MPIDI_PG_Create_from_string(char * str, MPIDI_PG_t ** pg_pptr, int *flag);#endif/*-------------------------  END PROCESS GROUP SECTION  -------------------------*//*--------------------------------  BEGIN VIRTUAL CONNECTION SECTION  --------------------------------*/#if (USE_THREAD_IMPL != MPICH_THREAD_IMPL_NOT_IMPLEMENTED)#   define MPIDI_VC_Get_next_lpid(lpid_ptr_)		\    {							\    	*(lpid_ptr_) = MPIDI_Process.lpid_counter++;	\    }#else#   error thread safe MPIDI_CH3U_Get_next_lpid() not implemented#endif#if defined(MPID_USE_SEQUENCE_NUMBERS)#   define MPIDI_VC_Init_seqnum_send(vc_)	\    {						\    	(vc_)->seqnum_send = 0;			\    }#else#   define MPIDI_VC_Init_seqnum_send(vc_)#endif#if defined(MPIDI_CH3_MSGS_UNORDERED)#   define MPIDI_VC_Init_seqnum_recv(vc_);	\    {						\    	(vc_)->seqnum_recv = 0;			\    	(vc_)->msg_reorder_queue = NULL;	\    }#else#   define MPIDI_VC_Init_seqnum_recv(vc_);#endif/* FIXME: Should this fully initialize the vc_ entry? *//* FIXME: Make this into a routine (initializing/creating    connections are rare and expensive; no need to use a macro.   In addition, the lpid_counter can then be a static int in the   file that implements this routine */#define MPIDI_VC_Init(vc_, pg_, rank_)		\{						\    (vc_)->state = MPIDI_VC_STATE_INACTIVE;	\    MPIU_Object_set_ref((vc_), 0);		\    (vc_)->pg = (pg_);				\    (vc_)->pg_rank = (rank_);			\    MPIDI_VC_Get_next_lpid(&(vc_)->lpid);	\    MPIDI_VC_Init_seqnum_send(vc_);		\    MPIDI_VC_Init_seqnum_recv(vc_);		\    MPIU_DBG_PrintVCState(vc_);                 \}#if defined(MPID_USE_SEQUENCE_NUMBERS)#   if (USE_THREAD_IMPL != MPICH_THREAD_IMPL_NOT_IMPLEMENTED)#       define MPIDI_VC_FAI_send_seqnum(vc_, seqnum_out_)	\        {							\	    (seqnum_out_) = (vc_)->seqnum_send++;		\	}#   elif defined(USE_ATOMIC_UPDATES)#       define MPIDI_VC_FAI_send_seqnum(vc_, seqnum_out_)			\	{									\	    MPID_Atomic_fetch_and_incr(&(vc_)->seqnum_send, (seqnum_out_));	\	}#   else        /* FIXME: a VC specific mutex could be used if contention is a problem. */#	define MPIDI_VC_FAI_send_seqnum(vc_, seqnum_out_)	\	{							\	    MPID_Common_thread_lock();				\	    {							\		(seqnum_out_) = (vc_)->seqnum_send++;		\	    }							\	    MPID_Common_thread_unlock();			\	}#    endif#else#    define MPIDI_VC_FAI_send_seqnum(vc_, seqnum_out_)#endif/*------------------------------  END VIRTUAL CONNECTION SECTION  ------------------------------*//*---------------------------------  BEGIN SEND/RECEIVE BUFFER SECTION  ---------------------------------*/#if !defined(MPIDI_CH3U_SRBuf_size)#    define MPIDI_CH3U_SRBuf_size (256 * 1024)#endif#if !defined(MPIDI_CH3U_SRBuf_alloc)#   define MPIDI_CH3U_SRBuf_alloc(req_, size_)				\    {									\ 	(req_)->dev.tmpbuf = MPIU_Malloc(MPIDI_CH3U_SRBuf_size);	\ 	if ((req_)->dev.tmpbuf != NULL)					\ 	{								\ 	    (req_)->dev.tmpbuf_sz = MPIDI_CH3U_SRBuf_size;		\ 	    MPIDI_Request_set_srbuf_flag((req_), TRUE);			\ 	}								\ 	else								\ 	{								\ 	    (req_)->dev.tmpbuf_sz = 0;					\ 	}								\    }#endif#if !defined(MPIDI_CH3U_SRBuf_free)#   define MPIDI_CH3U_SRBuf_free(req_)				\    {								\    	MPIU_Assert(MPIDI_Request_get_srbuf_flag(req_));	\    	MPIDI_Request_set_srbuf_flag((req_), FALSE);		\    	MPIU_Free((req_)->dev.tmpbuf);				\    }#endif/*-------------------------------  END SEND/RECEIVE BUFFER SECTION  -------------------------------*//*----------------------------  BEGIN DEBUGGING TOOL SECTION  ----------------------------*//* FIXME: Switch this to use the common debug code */void MPIDI_dbg_printf(int, char *, char *, ...);void MPIDI_err_printf(char *, char *, ...);/* FIXME: This does not belong here */#ifdef USE_MPIU_DBG_PRINT_VCextern char *MPIU_DBG_parent_str;#endif#if defined(MPICH_DBG_OUTPUT)#define MPIDI_DBG_PRINTF(e_)				\{                                               	\    if (MPIUI_dbg_state != MPIU_DBG_STATE_NONE)		\    {							\	MPIDI_dbg_printf e_;				\    }							\}#else#   define MPIDI_DBG_PRINTF(e)#endif#define MPIDI_ERR_PRINTF(e) MPIDI_err_printf e#if defined(HAVE_CPP_VARARGS)#   define MPIDI_dbg_printf(level, func, fmt, args...)							\    {													\    	MPIU_dbglog_printf("[%d] %s(): " fmt "\n", MPIR_Process.comm_world->rank, func, ## args);	\    }#   define MPIDI_err_printf(func, fmt, args...)									\    {														\    	MPIU_Error_printf("[%d] ERROR - %s(): " fmt "\n", MPIR_Process.comm_world->rank, func, ## args);	\    	fflush(stdout);												\    }#endif/* FIXME: What are these for?  Why not just use #A? */#define MPIDI_QUOTE(A) MPIDI_QUOTE2(A)#define MPIDI_QUOTE2(A) #A#ifdef MPICH_DBG_OUTPUT    void MPIDI_DBG_Print_packet(MPIDI_CH3_Pkt_t *pkt);#else#   define MPIDI_DBG_Print_packet(a)#endifconst char * MPIDI_VC_Get_state_description(int state);/*--------------------------  END DEBUGGING TOOL SECTION  --------------------------*//* Prototypes for internal device routines */int MPIDI_Isend_self(const void *, int, MPI_Datatype, int, int, MPID_Comm *, int, int, MPID_Request **);/*--------------------------  BEGIN MPI PORT SECTION   --------------------------*//* These are the default functions */int MPIDI_Comm_connect(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);int MPIDI_Comm_accept(const char *, MPID_Info *, int, MPID_Comm *, MPID_Comm **);int MPIDI_Comm_spawn_multiple(int, char **, char ***, int *, MPID_Info **, 			      int, MPID_Comm *, MPID_Comm **, int *);/* This structure defines a module that handles the routines that    work with MPI port names */typedef struct MPIDI_Port_Ops {    int (*OpenPort)( MPID_Info *, char * );    int (*ClosePort)( const char * );    int (*CommAccept)( const char *, MPID_Info *, int, MPID_Comm *, 		       MPID_Comm ** );    int (*CommConnect)( const char *, MPID_Info *, int, MPID_Comm *, 			MPID_Comm ** );} MPIDI_PortFns;#define MPIDI_PORTFNS_VERSION 1int MPIDI_CH3_PortFnsInit( MPIDI_PortFns * );/* Utility routines provided in src/ch3u_port.c for working with connection   queues */int MPIDI_CH3I_Acceptq_enqueue(MPIDI_VC_t * vc);int MPIDI_CH3I_Acceptq_dequeue(MPIDI_VC_t ** vc, int port_name_tag);int MPIDI_CH3I_Acceptq_init(void);/*--------------------------  END MPI PORT SECTION   --------------------------*/#ifdef MPIDI_DEV_IMPLEMENTS_KVS#ifdef HAVE_TIME_H#include <time.h>#endif#ifdef HAVE_UUID_UUID_H#include <uuid/uuid.h>#endif#define MPIDI_MAX_KVS_NAME_LEN     256#define MPIDI_MAX_KVS_KEY_LEN      256#define MPIDI_MAX_KVS_VALUE_LEN    4096int MPIDI_KVS_Init(void);int MPIDI_KVS_Finalize(void);int MPIDI_KVS_Create(char *name);int MPIDI_KVS_Create_name_in(char *name);int MPIDI_KVS_Destroy(const char *name);int MPIDI_KVS_Get(const char *name, const char *key, char *value);int MPIDI_KVS_Put(const char *name, const char *key, const char *value);int MPIDI_KVS_Delete(const char *name, const char *key);int MPIDI_KVS_First(const char *name, char *key, char *value);int MPIDI_KVS_Next(const char *name, char *key, char *value);int MPIDI_KVS_Firstkvs(char *name);int MPIDI_KVS_Nextkvs(char *name);#endif /* MPIDI_DEV_IMPLEMENTS_KVS *//* ------------------------------------------------------------------------- *//* mpirma.h (in src/mpi/rma?) *//* ------------------------------------------------------------------------- *//* This structure defines a module that handles the routines that    work with MPI-2 RMA ops */typedef struct MPIDI_RMA_Ops {    int (*Win_create)(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *,		      MPID_Win **, struct MPIDI_RMA_Ops *);    int (*Win_free)(MPID_Win **);    int (*Put)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, 		MPID_Win *);    int (*Get)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, 		MPID_Win *);    int (*Accumulate)(void *, int, MPI_Datatype, int, MPI_Aint, int, 		       MPI_Datatype, MPI_Op, MPID_Win *);    int (*Win_fence)(int, MPID_Win *);    int (*Win_post)(MPID_Group *, int, MPID_Win *);    int (*Win_start)(MPID_Group *, int, MPID_Win *);    int (*Win_complete)(MPID_Win *);    int (*Win_wait)(MPID_Win *);    int (*Win_lock)(int, int, int, MPID_Win *);    int (*Win_unlock)(int, MPID_Win *);    void * (*Alloc_mem)(size_t, MPID_Info *);    int (*Free_mem)(void *);} MPIDI_RMAFns;#define MPIDI_RMAFNS_VERSION 1int MPIDI_CH3_RMAFnsInit( MPIDI_RMAFns * );#define MPIDI_RMA_PUT 23#define MPIDI_RMA_GET 24#define MPIDI_RMA_ACCUMULATE 25#define MPIDI_RMA_LOCK 26#define MPIDI_RMA_DATATYPE_BASIC 50#define MPIDI_RMA_DATATYPE_DERIVED 51#define MPID_LOCK_NONE 0int MPIDI_Win_create(void *, MPI_Aint, int, MPID_Info *, MPID_Comm *,                    MPID_Win **, MPIDI_RMAFns *);int MPIDI_Win_fence(int, MPID_Win *);int MPIDI_Put(void *, int, MPI_Datatype, int, MPI_Aint, int,            MPI_Datatype, MPID_Win *); int MPIDI_Get(void *, int, MPI_Datatype, int, MPI_Aint, int,            MPI_Datatype, MPID_Win *);int MPIDI_Accumulate(void *, int, MPI_Datatype, int, MPI_Aint, int, 		   MPI_Datatype,  MPI_Op, MPID_Win *);int MPIDI_Win_free(MPID_Win **); int MPIDI_Win_wait(MPID_Win *win_ptr);int MPIDI_Win_complete(MPID_Win *win_ptr);int MPIDI_Win_post(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);int MPIDI_Win_start(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);int MPIDI_Win_lock(int lock_type, int dest, int assert, MPID_Win *win_ptr);int MPIDI_Win_unlock(int dest, MPID_Win *win_ptr);void *MPIDI_Alloc_mem(size_t size, MPID_Info *info_ptr);int MPIDI_Free_mem(void *ptr);/* optional channel-specific */void *MPIDI_CH3_Alloc_mem(size_t size, MPID_Info *info_ptr);int MPIDI_CH3_Win_create(void *base, MPI_Aint size, int disp_unit, MPID_Info *info,                     MPID_Comm *comm_ptr, MPID_Win **win_ptr, MPIDI_RMAFns *RMAFns);int MPIDI_CH3_Free_mem(void *ptr);void MPIDI_CH3_Cleanup_mem(void);int MPIDI_CH3_Win_free(MPID_Win **win_ptr);int MPIDI_CH3_Put(void *origin_addr, int origin_count, MPI_Datatype            origin_datatype, int target_rank, MPI_Aint target_disp,            int target_count, MPI_Datatype target_datatype, MPID_Win *win_ptr);int MPIDI_CH3_Get(void *origin_addr, int origin_count, MPI_Datatype            origin_datatype, int target_rank, MPI_Aint target_disp,            int target_count, MPI_Datatype target_datatype, MPID_Win *win_ptr);int MPIDI_CH3_Accumulate(void *origin_addr, int origin_count, MPI_Datatype                    origin_datatype, int target_rank, MPI_Aint target_disp,                    int target_count, MPI_Datatype target_datatype, MPI_Op op,                    MPID_Win *win_ptr);int MPIDI_CH3_Win_fence(int assert, MPID_Win *win_ptr);int MPIDI_CH3_Win_lock(int lock_type, int dest, int assert, MPID_Win *win_ptr);int MPIDI_CH3_Win_unlock(int dest, MPID_Win *win_ptr);int MPIDI_CH3_Win_wait(MPID_Win *win_ptr);int MPIDI_CH3_Win_complete(MPID_Win *win_ptr);int MPIDI_CH3_Win_post(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);int MPIDI_CH3_Win_start(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr);/* internal */int MPIDI_CH3I_Release_lock(MPID_Win * win_ptr);int MPIDI_CH3I_Try_acquire_win_lock(MPID_Win * win_ptr, int requested_lock);int MPIDI_CH3I_Send_lock_granted_pkt(MPIDI_VC_t * vc, int source_win_ptr);int MPIDI_CH3I_Send_pt_rma_done_pkt(MPIDI_VC_t * vc, int source_win_ptr);int MPIDI_CH3I_Progress_finalize(void);/* Function that may be used to provide buisness card info */int MPIDI_CH3I_BCInit( int pg_rank, 		       char **publish_bc_p, char **bc_key_p, 		       char **bc_val_p, int *val_max_sz_p);/* NOTE: Channel function prototypes are in mpidi_ch3_post.h since some of the macros require their declarations. *//* Access the business card (used in mpid_port) */int MPIDI_CH3I_Get_business_card(char *value, int length);/* Perform channel-specific initialization of a virtural connection */int MPIDI_CH3_VC_Init( MPIDI_VC_t *);/* FIXME: These should be defined only when these particular utility   packages are used.  Best would be to keep these prototypes in the   related util/xxx directories, and either copy them into an include   directory used only for builds or add (yet another) include path *//* from util/sock */int MPIDI_VC_InitSock( MPIDI_VC_t *);int MPIDI_CH3I_Connect_to_root_sock(const char *, MPIDI_VC_t **);int MPIDI_CH3U_Get_business_card_sock(char **, int *);/* FIXME: Where should this go? *//*int MPIDI_CH3I_Connection_alloc(MPIDI_CH3I_Connection_t **); *//* Used internally to broadcast process groups belonging to peercomm to all processes in comm*/int MPID_PG_BCast( MPID_Comm *peercomm_p, MPID_Comm *comm_p, int root );/* from util/shm */int MPIDI_CH3I_Connect_to_root_sshm(const char *, MPIDI_VC_t **);int MPIDI_VC_InitShm( MPIDI_VC_t *vc );int MPIDU_Sock_get_conninfo_from_bc( const char *bc, 				     char *host_description, int maxlen,				     int *port, void *ifaddr, int *hasIfaddr );#endif /* !defined(MPICH_MPIDIMPL_H_INCLUDED) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -