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

📄 mpidi_isend_self.c

📁 刚才是说明 现在是安装程序在 LINUX环境下进行编程的MPICH安装文件
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include "mpidimpl.h"#undef FUNCNAME#define FUNCNAME MPIDI_Isend_self#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_Isend_self(const void * buf, int count, MPI_Datatype datatype, int rank, int tag, MPID_Comm * comm, int context_offset,		     int type, MPID_Request ** request){    MPIDI_Message_match match;    MPID_Request * sreq;    MPID_Request * rreq;    MPIDI_VC * vc;#if defined(MPID_USE_SEQUENCE_NUMBERS)    MPID_Seqnum_t seqnum;#endif        int found;    int mpi_errno = MPI_SUCCESS;	    MPIDI_DBG_PRINTF((15, FCNAME, "sending message to self"));	    MPIDI_CH3M_create_sreq(sreq, mpi_errno, goto fn_exit);    MPIDI_Request_set_type(sreq, type);    MPIDI_Request_set_msg_type(sreq, MPIDI_REQUEST_SELF_MSG);        match.rank = rank;    match.tag = tag;    match.context_id = comm->context_id + context_offset;    rreq = MPIDI_CH3U_Request_FDP_or_AEU(&match, &found);    if (rreq == NULL)    {	MPIU_Object_set_ref(sreq, 0);	MPIDI_CH3_Request_destroy(sreq);	sreq = NULL;	mpi_errno = MPIR_ERR_MEMALLOCFAILED;	goto fn_exit;    }    vc = comm->vcr[rank];    MPIDI_CH3U_VC_FAI_send_seqnum(vc, seqnum);    MPIDI_CH3U_Request_set_seqnum(sreq, seqnum);    MPIDI_CH3U_Request_set_seqnum(rreq, seqnum);        rreq->status.MPI_SOURCE = rank;    rreq->status.MPI_TAG = tag;        if (found)    {	int data_sz;		MPIDI_DBG_PRINTF((15, FCNAME, "found posted receive request; copying data"));	    	MPIDI_CH3U_Buffer_copy(buf, count, datatype, &sreq->status.MPI_ERROR,			       rreq->ch3.user_buf, rreq->ch3.user_count, rreq->ch3.datatype, &data_sz, &rreq->status.MPI_ERROR);	rreq->status.count = data_sz;	MPID_Request_set_complete(rreq);	MPID_Request_release(rreq);	/* sreq has never been seen by the user or outside this thread, so it is safe to reset ref_count and cc */	MPIU_Object_set_ref(sreq, 1);	sreq->cc = 0;    }    else    {	if (type != MPIDI_REQUEST_TYPE_RSEND)	{	    MPIDI_DBG_PRINTF((15, FCNAME, "added receive request to unexpected queue; attaching send request"));	    rreq->partner_request = sreq;	    rreq->ch3.sender_req_id = sreq->handle;	}	else	{	    MPIDI_DBG_PRINTF((15, FCNAME, "ready send unable to find matching recv req"));	    sreq->status.MPI_ERROR = MPI_ERR_UNKNOWN; /* FIXME */	    rreq->status.MPI_ERROR = MPI_ERR_UNKNOWN; /* FIXME */	    	    rreq->partner_request = NULL;	    rreq->ch3.sender_req_id = MPI_REQUEST_NULL;	    rreq->status.count = 0;	    	    /* sreq has never been seen by the user or outside this thread, so it is safe to reset ref_count and cc */	    MPIU_Object_set_ref(sreq, 1);	    sreq->cc = 0;	}	    	MPIDI_Request_set_msg_type(rreq, MPIDI_REQUEST_SELF_MSG);    }  fn_exit:    *request = sreq;    return mpi_errno;}

⌨️ 快捷键说明

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