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

📄 mpid_request.c

📁 fortran并行计算包
💻 C
字号:
/*  (C)Copyright IBM Corp.  2007, 2008  *//** * \file src/impl/mpid_request.c * \brief Accessors and actors for MPID Requests */#include "mpidimpl.h"#ifndef MPID_REQUEST_PREALLOC#define MPID_REQUEST_PREALLOC 8#endif/** * \defgroup MPID_REQUEST MPID Request object management * * Accessors and actors for MPID Requests *//* these are referenced by src/mpi/pt2pt/wait.c in PMPI_Wait! */MPID_Request MPID_Request_direct[MPID_REQUEST_PREALLOC];MPIU_Object_alloc_t MPID_Request_mem =  {    0, 0, 0, 0, MPID_REQUEST, sizeof(MPID_Request),    MPID_Request_direct,    MPID_REQUEST_PREALLOC  };/** * \brief Create and initialize a new request */MPID_Request * MPID_Request_create(){  MPID_Request * req;  req = MPIU_Handle_obj_alloc(&MPID_Request_mem);  if (req == NULL)    MPID_Abort(NULL, MPI_ERR_NO_SPACE, -1, "Cannot allocate Request");  MPID_assert (HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);  MPIU_Object_set_ref(req, 1);  req->cc                = 1;  req->cc_ptr            = & req->cc;  req->status.MPI_SOURCE = MPI_UNDEFINED;  req->status.MPI_TAG    = MPI_UNDEFINED;  req->status.MPI_ERROR  = MPI_SUCCESS;  req->status.count      = 0;  req->status.cancelled  = FALSE;  req->comm              = NULL;  memset(&(req->dcmf),0x00,sizeof(struct MPIDI_DCMF_Request));  /* The above memset takes care of clearing the following fields,  */  /* and more:                                                      */  /*   req->dcmf.userbuf       = NULL;                              */  /*   req->dcmf.uebuf         = NULL;                              */  /*   req->dcmf.datatype_ptr  = NULL;                              */  /*   req->dcmf.cancel_pending= FALSE;                             */  /*   MPID_Request_setSelf   (req,0);   /\* not a self request *\/ */  /*   MPID_Request_setSync   (req,0);   /\* not a sync request *\/ */  req->dcmf.state         = MPIDI_DCMF_INITIALIZED;  MPID_Request_setCA     (req, MPIDI_DCMF_CA_COMPLETE);  MPID_Request_setType   (req, MPIDI_DCMF_REQUEST_TYPE_RECV);  return req;}MPID_Request * MPID_SendRequest_create(){  MPID_Request *sreq = MPID_Request_create();  MPID_Request_setType(sreq, MPIDI_DCMF_REQUEST_TYPE_SEND);  MPID_Request_setPeerRequest(sreq, sreq);  MPIU_Object_set_ref(sreq, 2);  return sreq;}/* *********************************************************************** *//*           destroy a request                                             *//* *********************************************************************** */void MPID_Request_destroy(MPID_Request * req){  MPID_assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);  MPID_assert(req->ref_count == 0);  if (req->comm)              MPIR_Comm_release(req->comm, 0);  if (req->dcmf.datatype_ptr) MPID_Datatype_release(req->dcmf.datatype_ptr);/*   MPID_assert(req->dcmf.uebuf == NULL); */  MPIU_Handle_obj_free(&MPID_Request_mem, req);}void MPID_Request_release_ref(MPID_Request * req, int * ref_count){  MPID_assert(HANDLE_GET_MPI_KIND(req->handle) == MPID_REQUEST);  MPIU_Object_release_ref(req, ref_count);  MPID_assert(req->ref_count >= 0);}void MPID_Request_release (MPID_Request *req){  int ref_count;  MPID_Request_release_ref(req, &ref_count);  if (ref_count == 0) MPID_Request_destroy(req);}/* *********************************************************************** *//*            Dealing with completion counts                               *//* *********************************************************************** */void MPID_Request_complete (MPID_Request *req){  int cc;  MPID_Request_decrement_cc(req, &cc);  MPID_assert(cc >= 0);  if (cc == 0) /* decrement completion count; if 0, release request */    {      MPID_Request_release(req);      MPID_Progress_signal();    }}void MPID_Request_set_completed (MPID_Request *req){  *(req)->cc_ptr = 0; /* force completion count to 0 */  MPID_Progress_signal();}

⌨️ 快捷键说明

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