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

📄 elan_module_send.c

📁 fortran并行计算包
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* *  (C) 2006 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include "elan_module_impl.h"#include <elan/elan.h>#include "elan_module.h"#include "my_papi_defs.h"#undef FUNCNAME#define FUNCNAME MPID_nem_elan_module_send#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPID_nem_elan_module_send (MPIDI_VC_t *vc, MPID_nem_cell_ptr_t cell, int datalen){      MPID_nem_elan_cell_ptr_t elan_event_cell;   int                      mpi_errno  = MPI_SUCCESS;      MPIU_Assert (datalen <= MPID_NEM_MPICH2_DATA_LEN);   if ( MPID_nem_elan_event_queue_empty(MPID_nem_module_elan_pending_event_queue))     {	ELAN_EVENT     *elan_event_ptr = NULL; 	MPID_nem_pkt_t *pkt            = (MPID_nem_pkt_t *)MPID_NEM_CELL_TO_PACKET (cell); /* cast away volatile */	int             dest           = vc->lpid;			elan_event_ptr =	  elan_queueTx(rxq_ptr_array[dest],MPID_nem_elan_vpids[dest],(char *)pkt,(size_t)(MPID_NEM_PACKET_LEN(pkt)),MPID_NEM_ELAN_RAIL_NUM);	//elan_queueTx(VC_FIELD(vc, rxq_ptr_array)[dest],MPID_nem_elan_vpids[dest],(char *)pkt,(size_t)(MPID_NEM_PACKET_LEN(pkt)),MPID_NEM_ELAN_RAIL_NUM);	if (elan_poll(elan_event_ptr,MPID_NEM_ELAN_LOOPS_SEND) == TRUE)	  {	     MPID_nem_queue_enqueue (MPID_nem_process_free_queue,cell);	     	  }	else	  {		  	     MPID_nem_elan_event_queue_dequeue(MPID_nem_module_elan_free_event_queue,&elan_event_cell);	     MPID_NEM_ELAN_SET_CELL( elan_event_cell , elan_event_ptr , cell, 0);	     MPID_nem_elan_event_queue_enqueue(MPID_nem_module_elan_pending_event_queue,elan_event_cell);	  }     }   else      {	if (!MPID_nem_elan_event_queue_empty(MPID_nem_module_elan_free_event_queue))	  {	     MPID_nem_elan_event_queue_dequeue(MPID_nem_module_elan_free_event_queue,&elan_event_cell);	  }		else	  {	     MPID_nem_elan_event_queue_dequeue(MPID_nem_module_elan_pending_event_queue,&elan_event_cell);	     if (elan_event_cell->to_proceed)	       {		  MPID_nem_pkt_t *pkt  = (MPID_nem_pkt_t *)MPID_NEM_CELL_TO_PACKET (elan_event_cell->cell_ptr); /* cast away volatile */		  int             dest = vc->lpid;		  elan_event_cell->elan_event = 		    elan_queueTx(rxq_ptr_array[dest],MPID_nem_elan_vpids[dest],(char *)pkt,(size_t)(MPID_NEM_PACKET_LEN(pkt)),MPID_NEM_ELAN_RAIL_NUM);		  //elan_queueTx(VC_FIELD(vc, rxq_ptr_array)[dest],MPID_nem_elan_vpids[dest],(char *)pkt,(size_t)(MPID_NEM_PACKET_LEN(pkt)),MPID_NEM_ELAN_RAIL_NUM);	       }	     elan_wait(elan_event_cell->elan_event,elan_base->waitType);	     MPID_nem_queue_enqueue (MPID_nem_process_free_queue,elan_event_cell->cell_ptr);	     	     	  }			MPID_NEM_ELAN_SET_CELL( elan_event_cell , NULL , cell, 1);	MPID_nem_elan_event_queue_enqueue(MPID_nem_module_elan_pending_event_queue,elan_event_cell);	     }         fn_exit:      return mpi_errno;   fn_fail:      goto fn_exit;   }

⌨️ 快捷键说明

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