arch/elan/machine.c File Reference

Elan machine layer. More...

Go to the source code of this file.

Data Structures

struct  GetHeader
struct  msg_list
struct  __elanChunkHeader
struct  __chunkHeader
struct  CmiIdleState

Typedefs

typedef msg_list SMSG_LIST
typedef __elanChunkHeader ElanChunkHeader
typedef __chunkHeader ChunkHeader
typedef void(*) ELAN_REDUCER (void *in, void *inout, int *count, void *handle)

Functions

 CpvDeclare (void *, CmiLocalQueue)
static void ConverseRunPE (int everReturn)
void ElanSendQueuedMessages ()
static int CmiReleaseSentMessages ()
void ElanGetBasedSend (SMSG_LIST *ptr)
void handleGetHeader (char *msg, int src)
void processGetEnv (SMSG_LIST *ptr)
void CmiAbort (const char *message)
 Serial version of common Charm++ routines:.
static void PerrorExit (const char *msg)
void SendSpanningChildren (int size, char *msg)
void CmiTimerInit (void)
double CmiTimer (void)
double CmiWallTimer (void)
double CmiCpuTimer (void)
 CsvDeclare (CmiNodeState, NodeState)
void CmiMemLock (void)
void CmiMemUnlock (void)
static void CmiStartThreads (char **argv)
static void CmiPushPE (int pe, void *msg)
int CmiMyPe (void)
int CmiMyRank (void)
int CmiNodeFirst (int node)
int CmiNodeSize (int node)
int CmiNodeOf (int pe)
int CmiRankOf (int pe)
int CmiAllAsyncMsgsSent (void)
int CmiAsyncMsgSent (CmiCommHandle c)
void CmiReleaseCommHandle (CmiCommHandle c)
void release_pmsg_list ()
int PumpMsgs (int retflag)
void * remote_get (void *srcptr, void *destptr, int size, int srcPE)
int remote_get_done (void *e)
void * CmiGetNonLocal (void)
void CmiPing ()
void enableBlockingReceives ()
void disableBlockingReceives ()
void CmiNotifyIdle (void)
void CmiNotifyStillIdle (void)
void CmiProbeImmediateMsg ()
static void CmiSendSelf (char *msg)
void CmiSyncSendFn (int destPE, int size, char *msg)
void ElanBasicSendFn (SMSG_LIST *ptr)
CmiCommHandle ElanSendFn (int destPE, int size, char *msg, int flag)
CmiCommHandle CmiAsyncSendFn (int destPE, int size, char *msg)
void CmiFreeSendFn (int destPE, int size, char *msg)
static void registerElanEvents ()
void CmiSyncSendFn1 (int destPE, int size, char *msg)
void CmiSyncBroadcastFn (int size, char *msg)
CmiCommHandle CmiAsyncBroadcastFn (int size, char *msg)
void CmiFreeBroadcastFn (int size, char *msg)
void CmiSyncBroadcastAllFn (int size, char *msg)
CmiCommHandle CmiAsyncBroadcastAllFn (int size, char *msg)
void CmiFreeBroadcastAllFn (int size, char *msg)
void ConverseExit (void)
static CmiIdleStateCmiNotifyGetState (void)
void elan_barrier ()
void elan_machine_broadcast (int size, void *buffer, int root)
void elan_machine_allreduce (int nelem, int size, void *data, void *dest, ELAN_REDUCER fn)
void elan_machine_reduce (int nelem, int size, void *data, void *dest, ELAN_REDUCER fn, int root)
void * elan_CmiAlloc (int size)
void elan_CmiFree (void *res)
void * elan_CmiStaticAlloc (int size)
void elan_CmiStaticFree (void *res)
void ConverseInit (int argc, char **argv, CmiStartFn fn, int usched, int initret)
void CmiSyncListSendFn (int npes, int *pes, int len, char *msg)
CmiCommHandle CmiAsyncListSendFn (int npes, int *pes, int len, char *msg)
void CmiReference (void *blk)
 Increment the reference count for this block's owner.
void CmiFreeListSendFn (int npes, int *pes, int len, char *msg)
void CmiBarrier ()
void CmiBarrierZero ()

Variables

ELAN_BASE * elan_base
ELAN_TPORT * elan_port
ELAN_QUEUE * elan_q
int enableGetBasedSend = 1
int enableBufferPooling = 0
int SMALL_MESSAGE_SIZE = 4080
int MID_MESSAGE_SIZE = 65536
int smallQSize = RECV_MSG_Q_SIZE
int midQSize = MID_MSG_Q_SIZE
ELAN_EVENT * esmall [RECV_MSG_Q_SIZE]
ELAN_EVENT * emid [MID_MSG_Q_SIZE]
ELAN_EVENT * elarge
int _Cmi_mynode
int _Cmi_mynodesize
int _Cmi_numnodes
int _Cmi_numpes
static int Cmi_nodestart
static int MsgQueueLen = 0
static int MsgQueueBytes = 0
static int request_max
static int request_bytes
PCQueue localSmallBufferQueue
PCQueue localMidBufferQueue
int outstandingMsgs [3000]
int stretchFlag = 0
int blockingReceiveFlag = 0
static int Cmi_dim
static SMSG_LISTsent_msgs = 0
static SMSG_LISTend_sent = 0
static SMSG_LISTcur_unsent = 0
int inside_comm = 0
double starttimer
static PCQueue msgBuf
static struct CmiStateStruct Cmi_state
int _Cmi_mype
int _Cmi_myrank
static int toggle = 0
long trueFlag = 1
static char ** Cmi_argv
static CmiStartFn Cmi_startfn
static int Cmi_usrsched


Detailed Description

Elan machine layer.

Definition in file machine.c.


Typedef Documentation

typedef struct msg_list SMSG_LIST

typedef struct __elanChunkHeader ElanChunkHeader

typedef struct __chunkHeader ChunkHeader

typedef void(* ) ELAN_REDUCER(void *in, void *inout, int *count, void *handle)

Definition at line 1366 of file machine.c.


Function Documentation

CpvDeclare ( void *  ,
CmiLocalQueue   
)

static void ConverseRunPE ( int  everReturn  )  [static]

Definition at line 1299 of file machine.c.

References _immediateReady, CcdCallOnConditionKeep(), Cmi_argv, Cmi_startfn, Cmi_usrsched, CmiGetArgc(), CmiGetState(), CmiMyPe(), CmiNodeBarrier(), CmiNotifyGetState(), CmiNotifyIdle(), CmiNotifyStillIdle(), ConverseCommonInit(), ConverseExit(), CsdScheduler(), CthInit(), debugLog, elan_base, CmiStateStruct::localqueue, PumpMsgs(), and s.

Referenced by call_startfn(), CommunicationServer(), ConverseInit(), and KillOnAllSigs().

void ElanSendQueuedMessages (  ) 

Definition at line 974 of file machine.c.

References cur_unsent, ElanBasicSendFn(), MsgQueueBytes, MsgQueueLen, outstandingMsgs, ptr, request_bytes, and request_max.

Referenced by CmiGetNonLocal(), CmiNotifyIdle(), CmiNotifyStillIdle(), CmiPing(), ConverseExit(), elan_barrier(), elan_machine_allreduce(), elan_machine_broadcast(), elan_machine_reduce(), and ElanSendFn().

static int CmiReleaseSentMessages (  )  [static]

Definition at line 379 of file machine.c.

References CmiAbort(), CmiFree(), CmiMyPe(), CmiWallTimer(), cur_unsent, msg_list::destpe, msg_list::done, msg_list::e, elan_base, end_sent, MPI_SUCCESS, MPI_Test(), MPID_Progress_test(), msg_list::msg, MsgQueueBytes, MsgQueueLen, msg_list::next, outstandingMsgs, processGetEnv(), release_pmsg_list(), msg_list::req, msg_list::sent, sent_msgs, msg_list::size, msg_list::status, and traceUserBracketEvent().

Referenced by CmiAllAsyncMsgsSent(), CmiGetNonLocal(), CmiNotifyIdle(), CmiNotifyStillIdle(), CmiPing(), CommunicationServer(), ConverseExit(), elan_barrier(), elan_machine_allreduce(), elan_machine_broadcast(), elan_machine_reduce(), and ElanSendFn().

void ElanGetBasedSend ( SMSG_LIST ptr  ) 

Definition at line 993 of file machine.c.

References CmiAlloc(), CmiMyPe(), msg_list::destpe, msg_list::done, msg_list::e, elan_port, GetHeader::flag_addr, msg_list::gmsg, msg_list::msg, MsgQueueBytes, MsgQueueLen, outstandingMsgs, msg_list::sent, msg_list::size, GetHeader::size, GetHeader::src_addr, and msg_list::status.

Referenced by ElanBasicSendFn().

void handleGetHeader ( char *  msg,
int  src 
)

Definition at line 1018 of file machine.c.

References CmiAlloc(), msg_list::destpe, msg_list::done, msg_list::e, elan_base, end_sent, GetHeader::flag_addr, msg_list::flag_addr, msg_list::msg, msg_list::newmsg, msg_list::next, msg_list::sent, sent_msgs, msg_list::size, GetHeader::size, GetHeader::src_addr, and msg_list::status.

Referenced by PumpMsgs().

void processGetEnv ( SMSG_LIST ptr  ) 

Definition at line 1047 of file machine.c.

References CmiFree(), CmiPushPE(), elan_base, ptr, and trueFlag.

Referenced by CmiReleaseSentMessages().

void CmiAbort ( const char *  message  ) 

Serial version of common Charm++ routines:.

Currently only used for FEM_ALONE mode.

Orion Sky Lawlor, olawlor@acm.org, 2003/8/15

Definition at line 8 of file charm_standalone.C.

static void PerrorExit ( const char *  msg  )  [static]

Definition at line 204 of file machine.c.

Referenced by call_startfn(), CmiStartThreads(), and KillOnAllSigs().

void SendSpanningChildren ( int  size,
char *  msg 
)

Definition at line 1162 of file machine.c.

References _Cmi_numpes, CmiGetState(), CmiSyncSendFn1(), p, CmiStateStruct::pe, and size.

Referenced by AssembleDatagram(), CmiFreeBroadcastAllFn(), CmiSyncBroadcastAllFn(), CmiSyncBroadcastFn(), CommunicationServer(), handoverMessage(), handoverSysvshmMessage(), IntegrateMessageDatagram(), KillOnAllSigs(), processBufferedBcast(), processMessage(), PumpMsgs(), PumpMsgsBlocking(), and PumpPersistent().

CsvDeclare ( CmiNodeState  ,
NodeState   
)

void CmiMemLock ( void   ) 

Definition at line 259 of file machine.c.

void CmiMemUnlock ( void   ) 

Definition at line 260 of file machine.c.

static void CmiStartThreads ( char **  argv  )  [static]

Definition at line 265 of file machine.c.

References _Cmi_mype, _Cmi_myrank, Cmi_nodestart, Cmi_state, and CmiStateInit().

Referenced by CommunicationServer(), ConverseInit(), and KillOnAllSigs().

static void CmiPushPE ( int  pe,
void *  msg 
) [static]

Definition at line 273 of file machine.c.

References CmiIdleLock_addMessage(), CmiPushImmediateMsg(), CmiStateStruct::idle, CmiStateStruct::pe, and CmiStateStruct::recv.

Referenced by AssembleDatagram(), CommunicationServer(), handoverMessage(), handoverSysvshmMessage(), IntegrateMessageDatagram(), KillOnAllSigs(), processGetEnv(), processMessage(), PumpMsgs(), PumpMsgsBlocking(), and PumpPersistent().

int CmiMyPe ( void   ) 

Definition at line 291 of file machine.c.

References CmiGetState(), and CmiStateStruct::pe.

int CmiMyRank ( void   ) 

Definition at line 298 of file machine.c.

References CmiGetState(), and CmiStateStruct::rank.

int CmiNodeFirst ( int  node  ) 

Definition at line 305 of file machine.c.

References _Cmi_mynodesize.

int CmiNodeSize ( int  node  ) 

Definition at line 306 of file machine.c.

References _Cmi_mynodesize.

int CmiNodeOf ( int  pe  ) 

Definition at line 310 of file machine.c.

References _Cmi_mynodesize, and CmiStateStruct::pe.

int CmiRankOf ( int  pe  ) 

Definition at line 311 of file machine.c.

References _Cmi_mynodesize, and CmiStateStruct::pe.

int CmiAllAsyncMsgsSent ( void   ) 

Definition at line 314 of file machine.c.

Referenced by CmiAsyncBroadcastAllFn(), CmiAsyncBroadcastFn(), CommunicationServer(), and ConverseExit().

int CmiAsyncMsgSent ( CmiCommHandle  c  ) 

Definition at line 343 of file machine.c.

void CmiReleaseCommHandle ( CmiCommHandle  c  ) 

Definition at line 370 of file machine.c.

void release_pmsg_list (  ) 

Definition at line 175 of file persistent.c.

References end_pending_persistent_msgs, free_list_head, pmsg_list::next, pending_persistent_msgs, remote_put_done(), and status().

Referenced by CmiReleaseSentMessages().

void* remote_get ( void *  srcptr,
void *  destptr,
int  size,
int  srcPE 
)

Definition at line 735 of file machine.c.

References elan_base, and size.

int remote_get_done ( void *  e  ) 

Definition at line 739 of file machine.c.

void* CmiGetNonLocal ( void   ) 

Definition at line 757 of file machine.c.

void CmiPing (  ) 

Definition at line 779 of file machine.c.

References CmiReleaseSentMessages(), ElanSendQueuedMessages(), and PumpMsgs().

void enableBlockingReceives (  ) 

Definition at line 786 of file machine.c.

References blockingReceiveFlag.

void disableBlockingReceives (  ) 

Definition at line 790 of file machine.c.

References blockingReceiveFlag.

void CmiNotifyIdle ( void   ) 

Definition at line 797 of file machine.c.

void CmiNotifyStillIdle ( void   ) 

Definition at line 807 of file machine.c.

References blockingReceiveFlag, CdsFifo_Empty(), CmiGetState(), CmiReleaseSentMessages(), CqsEmpty(), cur_unsent, ElanSendQueuedMessages(), PCQueueEmpty(), PumpMsgs(), CmiStateStruct::recv, sent_msgs, and toggle.

Referenced by CmiNotifyBeginIdleSysvshm(), CmiNotifyIdle(), CmiSendMessagePxshm(), CommunicationServer(), ConverseRunPE(), and KillOnAllSigs().

void CmiProbeImmediateMsg (  ) 

Definition at line 827 of file machine.c.

References PumpMsgs().

static void CmiSendSelf ( char *  msg  )  [static]

Definition at line 834 of file machine.c.

References CdsFifo_Enqueue(), CmiHandleImmediateMessage(), and CQdCreate().

Referenced by CmiFreeSendFn(), CmiSyncSendFn(), CmiSyncSendFn1(), CommunicationServer(), and ElanSendFn().

void CmiSyncSendFn ( int  destPE,
int  size,
char *  msg 
)

Definition at line 847 of file machine.c.

void ElanBasicSendFn ( SMSG_LIST ptr  ) 

Definition at line 864 of file machine.c.

References blockingReceiveFlag, CmiMyPe(), elan_port, ElanGetBasedSend(), enableGetBasedSend, MID_MESSAGE_SIZE, MsgQueueBytes, MsgQueueLen, outstandingMsgs, ptr, SMALL_MESSAGE_SIZE, and tag.

Referenced by ElanSendFn(), and ElanSendQueuedMessages().

CmiCommHandle ElanSendFn ( int  destPE,
int  size,
char *  msg,
int  flag 
)

Definition at line 908 of file machine.c.

References CmiAlloc(), CmiGetState(), CmiReleaseSentMessages(), CmiSendPersistentMsg(), CmiSendSelf(), CQdCreate(), cur_unsent, msg_list::destpe, msg_list::e, ElanBasicSendFn(), ElanSendQueuedMessages(), end_sent, msg_list::is_broadcast, msg_list::msg, MsgQueueBytes, MsgQueueLen, msg_list::next, outstandingMsgs, CmiStateStruct::pe, phs, phsSize, PumpMsgs(), CmiStateStruct::rank, request_bytes, request_max, msg_list::sent, sent_msgs, msg_list::size, and size.

Referenced by CmiAsyncSendFn(), and CmiSyncSendFn1().

CmiCommHandle CmiAsyncSendFn ( int  destPE,
int  size,
char *  msg 
)

Definition at line 1097 of file machine.c.

void CmiFreeSendFn ( int  destPE,
int  size,
char *  msg 
)

Definition at line 1101 of file machine.c.

static void registerElanEvents (  )  [static]

Definition at line 1136 of file machine.c.

References traceRegisterUserEvent().

Referenced by ConverseExit().

void CmiSyncSendFn1 ( int  destPE,
int  size,
char *  msg 
)

Definition at line 1149 of file machine.c.

References CmiAlloc(), CmiGetState(), CmiSendSelf(), ElanSendFn(), CmiStateStruct::pe, and size.

Referenced by CommunicationServer(), and SendSpanningChildren().

void CmiSyncBroadcastFn ( int  size,
char *  msg 
)

Definition at line 1182 of file machine.c.

CmiCommHandle CmiAsyncBroadcastFn ( int  size,
char *  msg 
)

Definition at line 1199 of file machine.c.

void CmiFreeBroadcastFn ( int  size,
char *  msg 
)

Definition at line 1211 of file machine.c.

void CmiSyncBroadcastAllFn ( int  size,
char *  msg 
)

Definition at line 1217 of file machine.c.

CmiCommHandle CmiAsyncBroadcastAllFn ( int  size,
char *  msg 
)

Definition at line 1232 of file machine.c.

void CmiFreeBroadcastAllFn ( int  size,
char *  msg 
)

Definition at line 1241 of file machine.c.

void ConverseExit ( void   ) 

Definition at line 1257 of file machine.c.

static CmiIdleState* CmiNotifyGetState ( void   )  [static]

Definition at line 1290 of file machine.c.

References CmiGetState(), malloc(), and s.

Referenced by CommunicationServer(), ConverseRunPE(), and KillOnAllSigs().

void elan_barrier (  ) 

Definition at line 1342 of file machine.c.

References CmiReleaseSentMessages(), cur_unsent, elan_base, ElanSendQueuedMessages(), and PumpMsgs().

void elan_machine_broadcast ( int  size,
void *  buffer,
int  root 
)

Definition at line 1356 of file machine.c.

References CmiReleaseSentMessages(), cur_unsent, elan_base, ElanSendQueuedMessages(), PumpMsgs(), and size.

void elan_machine_allreduce ( int  nelem,
int  size,
void *  data,
void *  dest,
ELAN_REDUCER  fn 
)

Definition at line 1373 of file machine.c.

References CmiReleaseSentMessages(), cur_unsent, elan_base, ElanSendQueuedMessages(), PumpMsgs(), and size.

void elan_machine_reduce ( int  nelem,
int  size,
void *  data,
void *  dest,
ELAN_REDUCER  fn,
int  root 
)

Definition at line 1391 of file machine.c.

References CmiReleaseSentMessages(), cur_unsent, elan_base, ElanSendQueuedMessages(), printf(), PumpMsgs(), sent_msgs, and size.

void elan_CmiFree ( void *  res  ) 

Definition at line 1471 of file machine.c.

References elan_base, enableBufferPooling, free_nomigrate(), localSmallBufferQueue, size, SMALL_MESSAGE_SIZE, and type.

Referenced by CmiFree().

void* elan_CmiStaticAlloc ( int  size  ) 

Definition at line 1511 of file machine.c.

References malloc_nomigrate(), and size.

void elan_CmiStaticFree ( void *  res  ) 

Definition at line 1525 of file machine.c.

References free_nomigrate().

Referenced by PerFree().

void ConverseInit ( int  argc,
char **  argv,
CmiStartFn  fn,
int  usched,
int  initret 
)

Definition at line 1557 of file machine.c.

void CmiBarrier ( void   ) 

Definition at line 1858 of file machine.c.

void CmiBarrierZero ( void   ) 

Definition at line 1865 of file machine.c.


Variable Documentation

ELAN_BASE* elan_base

Definition at line 60 of file machine.c.

Referenced by CmiAllAsyncMsgsSent(), CmiAsyncMsgSent(), CmiBarrier(), CmiBarrierZero(), CmiCpuTimer(), CmiFreeListSendFn(), CmiReleaseSentMessages(), CmiSendPersistentMsg(), CmiTimer(), CmiTimerInit(), CmiWallTimer(), ConverseExit(), ConverseInit(), ConverseRunPE(), elan_barrier(), elan_CmiFree(), elan_machine_allreduce(), elan_machine_broadcast(), elan_machine_reduce(), handleGetHeader(), processGetEnv(), PumpMsgs(), remote_get(), and remote_put_done().

ELAN_TPORT* elan_port

Definition at line 61 of file machine.c.

Referenced by CmiFreeSendFn(), ConverseInit(), ElanBasicSendFn(), ElanGetBasedSend(), and PumpMsgs().

ELAN_QUEUE* elan_q

Definition at line 62 of file machine.c.

Referenced by ConverseInit().

int enableGetBasedSend = 1

Definition at line 64 of file machine.c.

Referenced by ConverseInit(), and ElanBasicSendFn().