PPL Logo

Converse Machine Layer
[Converse]

Collaboration diagram for Converse Machine Layer:
Common structures for all implementations of the machine layer

The machine layer of Converse consist of few common files to all architectures, shown in this module, which are:

More...


Files

file  machine.C
 MPI based machine layer.
file  immediate.C
 Immediate message implementation.
file  machine-smp.C
 Common function reimplementation for SMP machines

OS Threads.

file  machine-smp.h
 structures for the SMP versions
file  machine.h
 common machine header
file  pcqueue.h
 Producer-Consumer Queues

This queue implementation enables a producer and a consumer to communicate via a queue.

file  persist-comm.C
 Support for persistent communication setup.

Data Structures

struct  CmiIdleLock
struct  CmiStateStruct
struct  CmiNodeStateStruct
struct  CircQueueStruct
 The simple version of pcqueue has dropped the function of being expanded if the queue is full. More...
struct  PCQueueStruct
 The beginning of definitions for simple pcqueue. More...
struct  FreeNodePoolStruct
struct  MPSCQueueStruct
struct  MPMCDataNodeStruct
struct  FreeMPMCNodePoolStruct
struct  MPMCQueueStruct
struct  _PersistentRequestMsg
struct  _PersistentReqGrantedMsg
struct  _PersistentDestroyMsg

Typedefs

typedef struct CmiStateStructCmiState
typedef struct CmiNodeStateStruct CmiNodeState
typedef struct CircQueueStructCircQueue
typedef struct PCQueueStructPCQueue
typedef char ** DataNode
typedef struct FreeNodePoolStructFreeNodePool
typedef struct MPSCQueueStructMPSCQueue
typedef struct MPMCDataNodeStructMPMCDataNode
typedef struct
FreeMPMCNodePoolStruct
FreeMPMCNodePool
typedef struct MPMCQueueStructMPMCQueue
typedef struct
_PersistentRequestMsg 
PersistentRequestMsg
typedef struct
_PersistentReqGrantedMsg 
PersistentReqGrantedMsg
typedef struct
_PersistentDestroyMsg 
PersistentDestroyMsg

Functions

void CmiPushImmediateMsg (void *msg)
void CmiDelayImmediate (void)
void CmiHandleImmediateMessage (void *msg)
void CmiHandleImmediate (void)
void CmiStateInit (int pe, int rank, CmiState state)
void CommunicationServerInit (void)
CmiState CmiGetState (void)
void CmiYield (void)
void CommunicationServerThread (int sleepTime)
static DWORD WINAPI call_startfn (LPVOID vindex)
void CmiNodeBarrierCount (int nThreads, uint8_t mode)
static void CmiStartThreads (char **argv)
static void CmiDestroyLocks (void)
void CharmScheduler (void)
CmiNodeLock CmiCreateLock (void)
void CmiDestroyLock (CmiNodeLock lk)
void CmiCommLock (void)
void CmiCommUnlock (void)
void StartInteropScheduler (void)
static void * call_startfn (void *vindex)
void PerrorExit (const char *)
void CmiNodeBarrier (void)
void CmiNodeAllBarrier (void)
static int CmiIdleLock_hasMessage (CmiState cs)
static void CmiIdleLock_init (CmiIdleLock *l)
static void CmiIdleLock_sleep (CmiIdleLock *l, int msTimeout)
static void CmiIdleLock_addMessage (CmiIdleLock *l)
static void CmiIdleLock_checkMessage (CmiIdleLock *l)
static void getTimespec (int msFromNow, struct timespec *dest)
static void CmiIdleLock_wakeup (CmiIdleLock *l)
void CmiNodeStateInit (CmiNodeState *nodeState)
static PCQueue PCQueueCreate (void)
static void PCQueueDestroy (PCQueue Q)
static int PCQueueEmpty (PCQueue Q)
static int PCQueueLength (PCQueue Q)
static char * PCQueueTop (PCQueue Q)
static char * PCQueuePop (PCQueue Q)
static void PCQueuePush (PCQueue Q, char *data)
void ReportOverflow ()
static unsigned int WrappedDifference (unsigned int push, unsigned int pull)
static int QueueFull (unsigned int push, unsigned int pull)
static DataNode DataNodeCreate (void)
static FreeNodePool FreeNodePoolCreate (void)
static void FreeNodePoolDestroy (FreeNodePool q)
static DataNode get_free_node (FreeNodePool q)
static void add_free_node (FreeNodePool q, DataNode available)
static MPSCQueue MPSCQueueCreate (void)
static void MPSCQueueDestroy (MPSCQueue Q)
static unsigned int get_node_index (unsigned int value)
static DataNode get_push_node (MPSCQueue Q, unsigned int push_idx)
static DataNode get_pop_node (MPSCQueue Q, unsigned int pull_idx)
static void check_mem_reclamation (MPSCQueue Q, unsigned int pull_idx, DataNode node)
static int MPSCQueueEmpty (MPSCQueue Q)
static int MPSCQueueLength (MPSCQueue Q)
static char * MPSCQueueTop (MPSCQueue Q)
static char * MPSCQueuePop (MPSCQueue Q)
static void MPSCQueuePush (MPSCQueue Q, char *data)
static MPMCDataNode MPMCDataNodeCreate (void)
static FreeMPMCNodePool FreeMPMCNodePoolCreate (void)
static void FreeMPMCNodePoolDestroy (FreeMPMCNodePool q)
static MPMCDataNode mpmc_get_free_node (FreeMPMCNodePool q)
static void mpmc_add_free_node (FreeMPMCNodePool q, MPMCDataNode available)
static MPMCQueue MPMCQueueCreate (void)
static void MPMCQueueDestroy (MPMCQueue Q)
static MPMCDataNode mpmc_get_push_node (MPMCQueue Q, unsigned int push_idx)
static MPMCDataNode mpmc_get_pop_node (MPMCQueue Q, unsigned int pull_idx)
static void mpmc_check_mem_reclamation (MPMCQueue Q, unsigned int pull_idx, MPMCDataNode node)
static int MPMCQueueEmpty (MPMCQueue Q)
static int MPMCQueueLength (MPMCQueue Q)
static char * MPMCQueueTop (MPMCQueue Q)
static char * MPMCQueuePop (MPMCQueue Q)
static void MPMCQueuePush (MPMCQueue Q, void *data)
 CpvDeclare (PersistentSendsTable *, persistentSendsTableHead)
 CpvDeclare (PersistentSendsTable *, persistentSendsTableTail)
 CpvDeclare (int, persistentSendsTableCount)
 CpvDeclare (PersistentReceivesTable *, persistentReceivesTableHead)
 CpvDeclare (PersistentReceivesTable *, persistentReceivesTableTail)
 CpvDeclare (int, persistentReceivesTableCount)
 CpvDeclare (PersistentHandle *, phs)
 CpvDeclare (int, phsSize)
 CpvDeclare (int, curphs)
void initRecvSlot (PersistentReceivesTable *slot)
void initSendSlot (PersistentSendsTable *slot)
void swapSendSlotBuffers (PersistentSendsTable *slot)
void swapRecvSlotBuffers (PersistentReceivesTable *slot)
PersistentHandle getFreeSendSlot (void)
PersistentHandle getFreeRecvSlot (void)
PersistentHandle CmiCreateCompressPersistent (int destPE, int maxBytes, int compressStart, int type)
PersistentHandle CmiCreateCompressPersistentSize (int destPE, int maxBytes, int compressStart, int compressSize, int type)
PersistentHandle CmiCreatePersistent (int destPE, int maxBytes)
static void persistentNoDecompressHandler (void *msg)
static void persistentDecompressHandler (void *msg)
int CompressPersistentMsg (PersistentHandle h, int size, void **m)
int CompressPersistentMsg (PersistentHandle h, int size, void *msg)
PersistentHandle CmiCreateNodePersistent (int destNode, int maxBytes)
PersistentHandle CmiCreateCompressNodePersistent (int destNode, int maxBytes, int start, int type)
PersistentHandle CmiCreateCompressNodePersistentSize (int destNode, int maxBytes, int start, int compressSize, int type)
static void persistentRequestHandler (void *env)
static void persistentReqGrantedHandler (void *env)
PersistentReq CmiCreateReceiverPersistent (int maxBytes)
PersistentHandle CmiRegisterReceivePersistent (PersistentReq recvHand)
void persistentDestroyHandler (void *env)
void CmiDestroyPersistent (PersistentHandle h)
void CmiDestroyAllPersistent (void)
void CmiPersistentInit (void)
void CmiUsePersistentHandle (PersistentHandle *p, int n)
void CmiPersistentOneSend (void)

Variables

int _immediateReady = 0
int _immRunning = 0
static void * currentImmediateMsg = NULL
static struct CmiStateStruct Cmi_default_state
CmiNodeLock CmiMemLock_lock
CmiNodeLock cmiMemoryLock
static CmiNodeLock comm_mutex
static DWORD Cmi_state_key = 0xFFFFFFFF
static CmiState Cmi_state_vector = 0
static volatile LONG entered_barrier_count [CMI_NUM_NODE_BARRIER_TYPES] = {0}
static volatile LONG exited_barrier_count [CMI_NUM_NODE_BARRIER_TYPES] = {0}
static HANDLE entrance_semaphore [CMI_NUM_NODE_BARRIER_TYPES]
static HANDLE exit_semaphore [CMI_NUM_NODE_BARRIER_TYPES]
int _Cmi_sleepOnIdle = 0
int _Cmi_forceSpinOnIdle = 0
int _cleanUp
static CMK_THREADLOCAL struct
CmiStateStruct 
Cmi_mystate
int barrier = 0
pthread_cond_t barrier_cond = PTHREAD_COND_INITIALIZER
pthread_mutex_t barrier_mutex = PTHREAD_MUTEX_INITIALIZER
static int comm_mutex_isLocked = 0
pthread_t * _Cmi_mypidlist
FILE * debugLog
int DataNodeSize
int MaxDataNodes
int QueueUpperBound
int DataNodeWrap
int QueueWrap
int messageQueueOverflow
int persistentRequestHandlerIdx
int persistentReqGrantedHandlerIdx
int persistentDestroyHandlerIdx
int persistentDecompressHandlerIdx
int persistentNoDecompressHandlerIdx
CmiNodeLock CmiMemLock_lock
CmiNodeLock cmiMemoryLock

Detailed Description

Common structures for all implementations of the machine layer

The machine layer of Converse consist of few common files to all architectures, shown in this module, which are:

These files describe the common characteristics of all implementations, and provide converse, and every language built on top of it the same functional interface in all machines, however different they are.

In addition to these common files, there are files called "machine.C" which are the real implementation for the different architectures. Every file is in a different directory, and get selected for compilation at compile time through the "build" script. With this implementation, only one single machine layer can be compiled into the runtime system. Changing architecture needs a different compilation.


Typedef Documentation

typedef struct CmiStateStruct * CmiState

typedef struct CircQueueStruct * CircQueue

typedef struct PCQueueStruct * PCQueue

typedef char** DataNode

Definition at line 451 of file pcqueue.h.

typedef struct FreeNodePoolStruct * FreeNodePool

typedef struct MPSCQueueStruct * MPSCQueue

typedef struct MPMCDataNodeStruct * MPMCDataNode

typedef struct MPMCQueueStruct * MPMCQueue


Function Documentation

void CmiPushImmediateMsg ( void *  msg  ) 

Definition at line 35 of file immediate.C.

References CmiLock(), and CmiUnlock().

Referenced by CmiHandleImmediate(), CmiNotifyCommThd(), CmiPushNode(), CmiPushPE(), CmiSendNodeSelf(), and CmiSendSelf().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiDelayImmediate ( void   ) 

Definition at line 55 of file immediate.C.

References _immRunning, CQdCreate(), and currentImmediateMsg.

Referenced by CldAskLoadHandler(), and CkNodeReductionMgr::RecvMsg().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiHandleImmediateMessage ( void *  msg  ) 

Definition at line 74 of file immediate.C.

References _immRunning, CQdProcess(), h, CmiHandlerInfo::hdlr, and CmiHandlerInfo::userPtr.

Referenced by CmiHandleImmediate().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiHandleImmediate ( void   ) 

Definition at line 100 of file immediate.C.

References _immediateReady, _immRunning, CmiHandleImmediateMessage(), CmiPushImmediateMsg(), CmiTryLock(), CmiUnlock(), currentImmediateMsg, and msg.

Referenced by AdvanceCommunication(), CmiSendNodeSelf(), CmiSendSelf(), and SendMsgBuf().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiStateInit ( int  pe,
int  rank,
CmiState  state 
)

Definition at line 706 of file machine-smp.C.

References CdsFifo_Create(), CmiIdleLock_init(), CmiStateStruct::curPolledIdx, CmiStateStruct::idle, CmiStateStruct::localqueue, CmiStateStruct::myGrpIdx, CmiStateStruct::pe, CmiStateStruct::rank, and CmiStateStruct::recv.

Referenced by call_startfn(), and CmiStartThreads().

Here is the call graph for this function:

Here is the caller graph for this function:

void CommunicationServerInit ( void   ) 

Definition at line 3713 of file convcore.C.

References CQdCpvInit().

Referenced by call_startfn().

Here is the call graph for this function:

Here is the caller graph for this function:

CmiState CmiGetState ( void   ) 

void CmiYield ( void   ) 

Definition at line 124 of file machine-smp.C.

void CommunicationServerThread ( int  sleepTime  ) 

static DWORD WINAPI call_startfn ( LPVOID  vindex  )  [static]

Definition at line 154 of file machine-smp.C.

References _Cmi_mynodesize, Cmi_state_key, CommunicationServerInit(), CommunicationServerThread(), ConverseRunPE(), index, int, and PerrorExit().

Referenced by CmiStartThreads().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiNodeBarrierCount ( int  nThreads,
uint8_t  mode 
)

Definition at line 189 of file machine-smp.C.

References entered_barrier_count, entrance_semaphore, exit_semaphore, and exited_barrier_count.

Referenced by CmiNodeAllBarrier(), and CmiNodeBarrier().

Here is the caller graph for this function:

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

static void CmiDestroyLocks ( void   )  [static]

Definition at line 251 of file machine-smp.C.

References CmiDestroyLock(), CmiMemLock_lock, cmiMemoryLock, comm_mutex, entrance_semaphore, and exit_semaphore.

Here is the call graph for this function:

void CharmScheduler ( void   ) 

CmiNodeLock CmiCreateLock ( void   ) 

void CmiDestroyLock ( CmiNodeLock  lk  ) 

Definition at line 317 of file machine-smp.C.

References free().

Referenced by CmiDestroyLocks(), CkLocMgr::~CkLocMgr(), CkNodeReductionMgr::~CkNodeReductionMgr(), FuncCkLoop::~FuncCkLoop(), and NodeGroup::~NodeGroup().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiCommLock ( void   ) 

Definition at line 377 of file machine-smp.C.

References CmiAbort(), and CmiLock().

Here is the call graph for this function:

void CmiCommUnlock ( void   ) 

Definition at line 383 of file machine-smp.C.

References CmiAbort(), and CmiUnlock().

Here is the call graph for this function:

void StartInteropScheduler ( void   ) 

Definition at line 37 of file conv-interoperate.C.

References CmiMyPe(), CmiMyRank(), CmiNodeAllBarrier(), CommunicationServerThread(), CsdScheduler(), LrtsDrainResources(), and memory_order_relaxed.

Here is the call graph for this function:

static void* call_startfn ( void *  vindex  )  [static]

void PerrorExit ( const char *   ) 

void CmiNodeBarrier ( void   ) 

Definition at line 573 of file machine-smp.C.

References CmiNodeBarrierCount().

Referenced by _initCharm(), _initDone(), CkRestartMain(), CkResumeRestartMain(), ConverseCommonExit(), topo_callback(), and traceCommonInit().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiNodeAllBarrier ( void   ) 

static int CmiIdleLock_hasMessage ( CmiState  cs  )  [static]

Definition at line 598 of file machine-smp.C.

References CmiIdleLock::hasMessages, and CmiStateStruct::idle.

Referenced by CmiState_hasMessage().

Here is the caller graph for this function:

static void CmiIdleLock_init ( CmiIdleLock l  )  [static]

Definition at line 604 of file machine-smp.C.

References CmiIdleLock::hasMessages, CmiIdleLock::isSleeping, and CmiIdleLock::sem.

Referenced by CmiStateInit().

Here is the caller graph for this function:

static void CmiIdleLock_sleep ( CmiIdleLock l,
int  msTimeout 
) [static]

Definition at line 610 of file machine-smp.C.

References CmiIdleLock::hasMessages, CmiIdleLock::isSleeping, and CmiIdleLock::sem.

Referenced by CmiGetNonLocalNodeQ().

Here is the caller graph for this function:

static void CmiIdleLock_addMessage ( CmiIdleLock l  )  [static]

Definition at line 619 of file machine-smp.C.

References CmiIdleLock::hasMessages, CmiIdleLock::isSleeping, and CmiIdleLock::sem.

Referenced by CmiPushNode(), and CmiPushPE().

Here is the caller graph for this function:

static void CmiIdleLock_checkMessage ( CmiIdleLock l  )  [static]

Definition at line 626 of file machine-smp.C.

References CmiIdleLock::hasMessages.

Referenced by CmiGetNonLocal(), and CmiGetNonLocalNodeQ().

Here is the caller graph for this function:

static void getTimespec ( int  msFromNow,
struct timespec *  dest 
) [static]

Definition at line 641 of file machine-smp.C.

static void CmiIdleLock_wakeup ( CmiIdleLock l  )  [static]

Definition at line 676 of file machine-smp.C.

void CmiNodeStateInit ( CmiNodeState nodeState  ) 

Definition at line 727 of file machine-smp.C.

References CmiCreateLock(), CmiNodeStateStruct::CmiNodeRecvLock, CmiNodeStateStruct::delayedImmQ, CmiNodeStateStruct::immQ, CmiNodeStateStruct::immRecvLock, CmiNodeStateStruct::immSendLock, MPMCQueueCreate(), and CmiNodeStateStruct::NodeRecv.

Referenced by ConverseInit().

Here is the call graph for this function:

Here is the caller graph for this function:

static PCQueue PCQueueCreate ( void   )  [static]

Definition at line 109 of file pcqueue.h.

References calloc(), CmiCreateLock(), PCQueueStruct::head, PCQueueStruct::len, PCQueueStruct::lock, malloc(), and PCQueueStruct::tail.

Referenced by cpd_memory_single_pup(), PPCAtomicQueueInit(), and SendMsgBuf().

Here is the call graph for this function:

Here is the caller graph for this function:

static void PCQueueDestroy ( PCQueue  Q  )  [static]

Definition at line 126 of file pcqueue.h.

References free(), PCQueueStruct::head, CircQueueStruct::next, and PCQueueStruct::tail.

Referenced by cpd_memory_single_pup().

Here is the call graph for this function:

Here is the caller graph for this function:

static int PCQueueEmpty ( PCQueue  Q  )  [static]

Definition at line 137 of file pcqueue.h.

References PCQueueStruct::len, and memory_order_acquire.

Referenced by PumpMsgsBlocking(), and SendMsgBuf().

Here is the caller graph for this function:

static int PCQueueLength ( PCQueue  Q  )  [static]

Definition at line 142 of file pcqueue.h.

References PCQueueStruct::len, and memory_order_acquire.

Referenced by EnqueueMsg(), PPCAtomicQueueEmpty(), and PumpMsgs().

Here is the caller graph for this function:

static char * PCQueueTop ( PCQueue  Q  )  [static]

static char * PCQueuePop ( PCQueue  Q  )  [static]

Definition at line 166 of file pcqueue.h.

References CmiLock(), CmiUnlock(), CircQueueStruct::data, data, free(), PCQueueStruct::head, PCQueueStruct::len, PCQueueStruct::lock, memory_order_acquire, memory_order_relaxed, memory_order_release, and CircQueueStruct::pull.

Referenced by cpd_memory_single_pup(), PPCAtomicDequeue(), and SendMsgBuf().

Here is the call graph for this function:

Here is the caller graph for this function:

static void PCQueuePush ( PCQueue  Q,
char *  data 
) [static]

Definition at line 209 of file pcqueue.h.

References calloc(), CmiLock(), CmiUnlock(), CircQueueStruct::data, PCQueueStruct::len, PCQueueStruct::lock, memory_order_relaxed, memory_order_release, CircQueueStruct::next, CircQueueStruct::push, and PCQueueStruct::tail.

Referenced by cpd_memory_single_pup(), EnqueueMsg(), MPIPostOneBuffer(), and PPCAtomicEnqueue().

Here is the call graph for this function:

Here is the caller graph for this function:

void ReportOverflow (  ) 

Definition at line 465 of file pcqueue.h.

Referenced by MPMCQueuePush(), and MPSCQueuePush().

Here is the caller graph for this function:

static unsigned int WrappedDifference ( unsigned int  push,
unsigned int  pull 
) [static]

Definition at line 498 of file pcqueue.h.

Referenced by MPSCQueueEmpty(), MPSCQueueLength(), and QueueFull().

Here is the caller graph for this function:

static int QueueFull ( unsigned int  push,
unsigned int  pull 
) [static]

Definition at line 512 of file pcqueue.h.

References WrappedDifference().

Referenced by MPMCQueuePush(), and MPSCQueuePush().

Here is the call graph for this function:

Here is the caller graph for this function:

static DataNode DataNodeCreate ( void   )  [static]

Definition at line 527 of file pcqueue.h.

References malloc().

Referenced by get_free_node().

Here is the call graph for this function:

Here is the caller graph for this function:

static FreeNodePool FreeNodePoolCreate ( void   )  [static]

Definition at line 536 of file pcqueue.h.

References malloc(), memory_order_relaxed, FreeNodePoolStruct::nodes, FreeNodePoolStruct::pull, FreeNodePoolStruct::push, and PUP::u.

Referenced by MPSCQueueCreate().

Here is the call graph for this function:

Here is the caller graph for this function:

static void FreeNodePoolDestroy ( FreeNodePool  q  )  [static]

Definition at line 552 of file pcqueue.h.

References free(), memory_order_acquire, n, and FreeNodePoolStruct::nodes.

Referenced by MPSCQueueDestroy().

Here is the call graph for this function:

Here is the caller graph for this function:

static DataNode get_free_node ( FreeNodePool  q  )  [static]

Definition at line 566 of file pcqueue.h.

References DataNodeCreate(), memory_order_acquire, memory_order_relaxed, memory_order_release, FreeNodePoolStruct::nodes, FreeNodePoolStruct::pull, and FreeNodePoolStruct::push.

Referenced by get_push_node().

Here is the call graph for this function:

Here is the caller graph for this function:

static void add_free_node ( FreeNodePool  q,
DataNode  available 
) [static]

Definition at line 589 of file pcqueue.h.

References free(), memory_order_acquire, memory_order_relaxed, memory_order_release, FreeNodePoolStruct::nodes, and FreeNodePoolStruct::push.

Referenced by check_mem_reclamation().

Here is the call graph for this function:

Here is the caller graph for this function:

static MPSCQueue MPSCQueueCreate ( void   )  [static]

static void MPSCQueueDestroy ( MPSCQueue  Q  )  [static]

Definition at line 627 of file pcqueue.h.

References free(), MPSCQueueStruct::freeNodePool, FreeNodePoolDestroy(), memory_order_acquire, and MPSCQueueStruct::nodes.

Here is the call graph for this function:

static unsigned int get_node_index ( unsigned int  value  )  [inline, static]

Definition at line 643 of file pcqueue.h.

Referenced by check_mem_reclamation(), get_pop_node(), get_push_node(), mpmc_check_mem_reclamation(), mpmc_get_pop_node(), and mpmc_get_push_node().

Here is the caller graph for this function:

static DataNode get_push_node ( MPSCQueue  Q,
unsigned int  push_idx 
) [static]

Definition at line 649 of file pcqueue.h.

References MPSCQueueStruct::freeNodePool, get_free_node(), get_node_index(), memory_order_acquire, memory_order_release, and MPSCQueueStruct::nodes.

Referenced by MPSCQueuePush().

Here is the call graph for this function:

Here is the caller graph for this function:

static DataNode get_pop_node ( MPSCQueue  Q,
unsigned int  pull_idx 
) [inline, static]

Definition at line 670 of file pcqueue.h.

References get_node_index(), memory_order_relaxed, and MPSCQueueStruct::nodes.

Referenced by MPSCQueuePop(), and MPSCQueueTop().

Here is the call graph for this function:

Here is the caller graph for this function:

static void check_mem_reclamation ( MPSCQueue  Q,
unsigned int  pull_idx,
DataNode  node 
) [static]

Definition at line 678 of file pcqueue.h.

References add_free_node(), MPSCQueueStruct::freeNodePool, get_node_index(), memory_order_relaxed, and MPSCQueueStruct::nodes.

Referenced by MPSCQueuePop().

Here is the call graph for this function:

Here is the caller graph for this function:

static int MPSCQueueEmpty ( MPSCQueue  Q  )  [static]

Definition at line 690 of file pcqueue.h.

References memory_order_relaxed, MPSCQueueStruct::pull, MPSCQueueStruct::push, and WrappedDifference().

Here is the call graph for this function:

static int MPSCQueueLength ( MPSCQueue  Q  )  [static]

Definition at line 697 of file pcqueue.h.

References memory_order_relaxed, MPSCQueueStruct::pull, MPSCQueueStruct::push, and WrappedDifference().

Here is the call graph for this function:

static char* MPSCQueueTop ( MPSCQueue  Q  )  [static]

Definition at line 704 of file pcqueue.h.

References get_pop_node(), memory_order_acquire, MPSCQueueStruct::pull, and MPSCQueueStruct::push.

Here is the call graph for this function:

static char* MPSCQueuePop ( MPSCQueue  Q  )  [static]

Definition at line 719 of file pcqueue.h.

References check_mem_reclamation(), get_pop_node(), memory_order_acquire, MPSCQueueStruct::pull, and MPSCQueueStruct::push.

Here is the call graph for this function:

static void MPSCQueuePush ( MPSCQueue  Q,
char *  data 
) [static]

Definition at line 745 of file pcqueue.h.

References get_push_node(), memory_order_release, MPSCQueueStruct::pull, MPSCQueueStruct::push, QueueFull(), ReportOverflow(), and PUP::u.

Here is the call graph for this function:

static MPMCDataNode MPMCDataNodeCreate ( void   )  [static]

Definition at line 837 of file pcqueue.h.

References MPMCDataNodeStruct::data, malloc(), memory_order_relaxed, MPMCDataNodeStruct::num_popped, and PUP::u.

Referenced by mpmc_get_free_node(), and mpmc_get_push_node().

Here is the call graph for this function:

Here is the caller graph for this function:

static FreeMPMCNodePool FreeMPMCNodePoolCreate ( void   )  [static]

Definition at line 848 of file pcqueue.h.

References malloc(), memory_order_relaxed, FreeMPMCNodePoolStruct::nodes, FreeMPMCNodePoolStruct::pull, FreeMPMCNodePoolStruct::push, and PUP::u.

Referenced by MPMCQueueCreate().

Here is the call graph for this function:

Here is the caller graph for this function:

static void FreeMPMCNodePoolDestroy ( FreeMPMCNodePool  q  )  [static]

Definition at line 864 of file pcqueue.h.

References MPMCDataNodeStruct::data, free(), memory_order_relaxed, n, and FreeMPMCNodePoolStruct::nodes.

Referenced by MPMCQueueDestroy().

Here is the call graph for this function:

Here is the caller graph for this function:

static MPMCDataNode mpmc_get_free_node ( FreeMPMCNodePool  q  )  [static]

static void mpmc_add_free_node ( FreeMPMCNodePool  q,
MPMCDataNode  available 
) [static]

Definition at line 899 of file pcqueue.h.

References MPMCDataNodeStruct::data, free(), memory_order_acquire, memory_order_relaxed, memory_order_release, FreeMPMCNodePoolStruct::nodes, and FreeMPMCNodePoolStruct::push.

Referenced by mpmc_check_mem_reclamation().

Here is the call graph for this function:

Here is the caller graph for this function:

static MPMCQueue MPMCQueueCreate ( void   )  [static]

Definition at line 919 of file pcqueue.h.

References MPMCQueueStruct::freeMPMCNodePool, FreeMPMCNodePoolCreate(), malloc(), memory_order_relaxed, MPMCQueueStruct::nodes, MPMCQueueStruct::pull, MPMCQueueStruct::push, and PUP::u.

Referenced by CmiNodeStateInit().

Here is the call graph for this function:

Here is the caller graph for this function:

static void MPMCQueueDestroy ( MPMCQueue  Q  )  [static]

Definition at line 937 of file pcqueue.h.

References MPMCDataNodeStruct::data, free(), MPMCQueueStruct::freeMPMCNodePool, FreeMPMCNodePoolDestroy(), memory_order_relaxed, n, and MPMCQueueStruct::nodes.

Here is the call graph for this function:

static MPMCDataNode mpmc_get_push_node ( MPMCQueue  Q,
unsigned int  push_idx 
) [static]

Definition at line 957 of file pcqueue.h.

References free(), get_node_index(), MPMCDataNodeCreate(), and MPMCQueueStruct::nodes.

Referenced by MPMCQueuePush().

Here is the call graph for this function:

Here is the caller graph for this function:

static MPMCDataNode mpmc_get_pop_node ( MPMCQueue  Q,
unsigned int  pull_idx 
) [inline, static]

Definition at line 983 of file pcqueue.h.

References get_node_index(), memory_order_relaxed, and MPMCQueueStruct::nodes.

Referenced by MPMCQueuePop(), and MPMCQueueTop().

Here is the call graph for this function:

Here is the caller graph for this function:

static void mpmc_check_mem_reclamation ( MPMCQueue  Q,
unsigned int  pull_idx,
MPMCDataNode  node 
) [static]

Definition at line 991 of file pcqueue.h.

References MPMCQueueStruct::freeMPMCNodePool, get_node_index(), memory_order_relaxed, mpmc_add_free_node(), MPMCQueueStruct::nodes, MPMCDataNodeStruct::num_popped, and PUP::u.

Referenced by MPMCQueuePop().

Here is the call graph for this function:

Here is the caller graph for this function:

static int MPMCQueueEmpty ( MPMCQueue  Q  )  [static]

Definition at line 1005 of file pcqueue.h.

References memory_order_relaxed, MPMCQueueStruct::pull, and MPMCQueueStruct::push.

Referenced by CmiGetNonLocalNodeQ().

Here is the caller graph for this function:

static int MPMCQueueLength ( MPMCQueue  Q  )  [static]

Definition at line 1010 of file pcqueue.h.

References memory_order_relaxed, MPMCQueueStruct::pull, and MPMCQueueStruct::push.

static char* MPMCQueueTop ( MPMCQueue  Q  )  [static]

Definition at line 1015 of file pcqueue.h.

References MPMCDataNodeStruct::data, memory_order_acquire, mpmc_get_pop_node(), MPMCQueueStruct::pull, and MPMCQueueStruct::push.

Here is the call graph for this function:

static char* MPMCQueuePop ( MPMCQueue  Q  )  [static]

Definition at line 1032 of file pcqueue.h.

References MPMCDataNodeStruct::data, memory_order_acquire, memory_order_relaxed, memory_order_release, mpmc_check_mem_reclamation(), mpmc_get_pop_node(), MPMCQueueStruct::pull, and MPMCQueueStruct::push.

Referenced by CmiGetNonLocalNodeQ().

Here is the call graph for this function:

Here is the caller graph for this function:

static void MPMCQueuePush ( MPMCQueue  Q,
void *  data 
) [static]

Definition at line 1060 of file pcqueue.h.

References MPMCDataNodeStruct::data, memory_order_acquire, memory_order_release, mpmc_get_push_node(), MPMCQueueStruct::pull, MPMCQueueStruct::push, QueueFull(), ReportOverflow(), and PUP::u.

Referenced by CmiPushNode(), and CmiSendNodeSelf().

Here is the call graph for this function:

Here is the caller graph for this function:

CpvDeclare ( PersistentSendsTable *  ,
persistentSendsTableHead   
)

CpvDeclare ( PersistentSendsTable *  ,
persistentSendsTableTail   
)

CpvDeclare ( int  ,
persistentSendsTableCount   
)

CpvDeclare ( PersistentReceivesTable *  ,
persistentReceivesTableHead   
)

CpvDeclare ( PersistentReceivesTable *  ,
persistentReceivesTableTail   
)

CpvDeclare ( int  ,
persistentReceivesTableCount   
)

CpvDeclare ( PersistentHandle ,
phs   
)

CpvDeclare ( int  ,
phsSize   
)

CpvDeclare ( int  ,
curphs   
)

void initRecvSlot ( PersistentReceivesTable *  slot  ) 

Referenced by getFreeRecvSlot().

Here is the caller graph for this function:

void initSendSlot ( PersistentSendsTable *  slot  ) 

Referenced by getFreeSendSlot().

Here is the caller graph for this function:

void swapSendSlotBuffers ( PersistentSendsTable *  slot  ) 

Definition at line 77 of file persist-comm.C.

void swapRecvSlotBuffers ( PersistentReceivesTable *  slot  ) 

Definition at line 95 of file persist-comm.C.

PersistentHandle getFreeSendSlot ( void   ) 

Definition at line 113 of file persist-comm.C.

References initSendSlot(), and malloc().

Referenced by CmiCreateCompressPersistent(), CmiCreateCompressPersistentSize(), CmiCreatePersistent(), and CmiRegisterReceivePersistent().

Here is the call graph for this function:

Here is the caller graph for this function:

PersistentHandle getFreeRecvSlot ( void   ) 

Definition at line 129 of file persist-comm.C.

References initRecvSlot(), and malloc().

Referenced by CmiCreateReceiverPersistent(), and persistentRequestHandler().

Here is the call graph for this function:

Here is the caller graph for this function:

PersistentHandle CmiCreateCompressPersistent ( int  destPE,
int  maxBytes,
int  compressStart,
int  type 
)

PersistentHandle CmiCreateCompressPersistentSize ( int  destPE,
int  maxBytes,
int  compressStart,
int  compressSize,
int  type 
)

PersistentHandle CmiCreatePersistent ( int  destPE,
int  maxBytes 
)

Definition at line 222 of file persist-comm.C.

References CmiAlloc(), CmiMyPe(), CmiNodeOf(), Converse::CmiSyncSendAndFree(), getFreeSendSlot(), h, _PersistentRequestMsg::maxBytes, msg, persistentRequestHandlerIdx, _PersistentRequestMsg::requestorPE, and _PersistentRequestMsg::sourceHandler.

Referenced by CmiCreateNodePersistent().

Here is the call graph for this function:

Here is the caller graph for this function:

static void persistentNoDecompressHandler ( void *  msg  )  [static]

Definition at line 250 of file persist-comm.C.

References CldRestoreHandler(), CmiHandleMessage(), and size.

Referenced by CmiPersistentInit().

Here is the call graph for this function:

Here is the caller graph for this function:

static void persistentDecompressHandler ( void *  msg  )  [static]

Definition at line 265 of file persist-comm.C.

References CldRestoreHandler(), CmiHandleMessage(), CmiPrintf(), decompressChar(), decompressFloatingPoint(), decompressLz4(), decompressZlib(), free(), int, malloc(), originalSize, and size.

Referenced by CmiPersistentInit().

Here is the call graph for this function:

Here is the caller graph for this function:

int CompressPersistentMsg ( PersistentHandle  h,
int  size,
void **  m 
)

Definition at line 331 of file persist-comm.C.

References CldSwitchHandler(), CmiAlloc(), CmiFree(), CmiPrintf(), CmiReference(), compressChar(), dest, int, msg, persistentDecompressHandlerIdx, and persistentNoDecompressHandlerIdx.

Here is the call graph for this function:

int CompressPersistentMsg ( PersistentHandle  h,
int  size,
void *  msg 
)

PersistentHandle CmiCreateNodePersistent ( int  destNode,
int  maxBytes 
)

Definition at line 524 of file persist-comm.C.

References CmiCreatePersistent(), and CmiNodeFirst().

Here is the call graph for this function:

PersistentHandle CmiCreateCompressNodePersistent ( int  destNode,
int  maxBytes,
int  start,
int  type 
)

Definition at line 531 of file persist-comm.C.

References CmiCreateCompressPersistent(), and CmiNodeFirst().

Here is the call graph for this function:

PersistentHandle CmiCreateCompressNodePersistentSize ( int  destNode,
int  maxBytes,
int  start,
int  compressSize,
int  type 
)

Definition at line 539 of file persist-comm.C.

References CmiCreateCompressPersistentSize(), and CmiNodeFirst().

Here is the call graph for this function:

static void persistentRequestHandler ( void *  env  )  [static]

static void persistentReqGrantedHandler ( void *  env  )  [static]

Definition at line 590 of file persist-comm.C.

References _PersistentReqGrantedMsg::buf, CmiFree(), CmiNodeOf(), _PersistentReqGrantedMsg::destDataHandler, _PersistentReqGrantedMsg::destHandler, h, LrtsSendPersistentMsg(), msg, and _PersistentReqGrantedMsg::sourceHandler.

Referenced by CmiPersistentInit().

Here is the call graph for this function:

Here is the caller graph for this function:

PersistentReq CmiCreateReceiverPersistent ( int  maxBytes  ) 

Definition at line 624 of file persist-comm.C.

References PersistentReq::bufPtr, CmiMyPe(), getFreeRecvSlot(), h, malloc(), PersistentReq::maxBytes, PersistentReq::myHand, and PersistentReq::pe.

Here is the call graph for this function:

PersistentHandle CmiRegisterReceivePersistent ( PersistentReq  recvHand  ) 

Definition at line 651 of file persist-comm.C.

References PersistentReq::bufPtr, getFreeSendSlot(), h, PersistentReq::maxBytes, PersistentReq::myHand, and PersistentReq::pe.

Here is the call graph for this function:

void persistentDestroyHandler ( void *  env  ) 

Definition at line 677 of file persist-comm.C.

References CmiFree(), _PersistentDestroyMsg::destHandlerIndex, free(), h, and msg.

Referenced by CmiPersistentInit().

Here is the call graph for this function:

Here is the caller graph for this function:

void CmiDestroyPersistent ( PersistentHandle  h  ) 

Definition at line 708 of file persist-comm.C.

References CmiAlloc(), Converse::CmiSyncSendAndFree(), _PersistentDestroyMsg::destHandlerIndex, free(), msg, and persistentDestroyHandlerIdx.

Here is the call graph for this function:

void CmiDestroyAllPersistent ( void   ) 

Definition at line 739 of file persist-comm.C.

References free().

Here is the call graph for this function:

void CmiPersistentInit ( void   ) 

void CmiUsePersistentHandle ( PersistentHandle p,
int  n 
)

Definition at line 807 of file persist-comm.C.

References CmiAbort().

Here is the call graph for this function:

void CmiPersistentOneSend ( void   ) 

Definition at line 822 of file persist-comm.C.

Referenced by _skipCldEnqueue().

Here is the caller graph for this function:


Variable Documentation

Definition at line 15 of file immediate.C.

Referenced by CmiHandleImmediate(), and ConverseRunPE().

void* currentImmediateMsg = NULL [static]

Definition at line 25 of file immediate.C.

Referenced by CmiDelayImmediate(), and CmiHandleImmediate().

Definition at line 87 of file machine-smp.C.

Referenced by CmiGetState().

Definition at line 97 of file machine-smp.C.

Referenced by CmiDestroyLocks(), and CmiStartThreads().

Definition at line 99 of file machine-smp.C.

Referenced by CmiDestroyLocks(), and CmiStartThreads().

static CmiNodeLock comm_mutex [static]

Definition at line 101 of file machine-smp.C.

Referenced by CmiDestroyLocks(), CmiStartThreads(), and ConverseInit().

static pthread_key_t Cmi_state_key = 0xFFFFFFFF [static]

Definition at line 106 of file machine-smp.C.

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

static CmiState Cmi_state_vector = 0 [static]

Definition at line 107 of file machine-smp.C.

volatile LONG entered_barrier_count[CMI_NUM_NODE_BARRIER_TYPES] = {0} [static]

Definition at line 181 of file machine-smp.C.

Referenced by CmiNodeBarrierCount().

volatile LONG exited_barrier_count[CMI_NUM_NODE_BARRIER_TYPES] = {0} [static]

Definition at line 182 of file machine-smp.C.

Referenced by CmiNodeBarrierCount().

HANDLE entrance_semaphore[CMI_NUM_NODE_BARRIER_TYPES] [static]

Definition at line 183 of file machine-smp.C.

Referenced by CmiDestroyLocks(), CmiNodeBarrierCount(), and CmiStartThreads().

HANDLE exit_semaphore[CMI_NUM_NODE_BARRIER_TYPES] [static]

Definition at line 184 of file machine-smp.C.

Referenced by CmiDestroyLocks(), CmiNodeBarrierCount(), and CmiStartThreads().

Definition at line 274 of file machine-smp.C.

Referenced by _initCharm(), and ConverseCommonInit().

CMK_THREADLOCAL struct CmiStateStruct Cmi_mystate [static]

Definition at line 279 of file machine-smp.C.

Referenced by call_startfn().

int barrier = 0

pthread_cond_t barrier_cond = PTHREAD_COND_INITIALIZER

Definition at line 342 of file machine-smp.C.

pthread_mutex_t barrier_mutex = PTHREAD_MUTEX_INITIALIZER

Definition at line 343 of file machine-smp.C.

int comm_mutex_isLocked = 0 [static]

Definition at line 376 of file machine-smp.C.

pthread_t* _Cmi_mypidlist

Definition at line 463 of file machine-smp.C.

FILE* debugLog

Definition at line 13 of file machine-common-core.C.

Referenced by ConverseInit().

Definition at line 282 of file convcore.C.

Referenced by check_and_set_queue_parameters(), and ConverseInit().

Definition at line 283 of file convcore.C.

Referenced by check_and_set_queue_parameters(), and ConverseInit().

Definition at line 284 of file convcore.C.

Referenced by check_and_set_queue_parameters().

Definition at line 285 of file convcore.C.

Referenced by check_and_set_queue_parameters().

Definition at line 286 of file convcore.C.

Referenced by check_and_set_queue_parameters().

Definition at line 287 of file convcore.C.

Definition at line 61 of file persist-comm.C.

Referenced by CmiPersistentInit(), and persistentRequestHandler().

Definition at line 62 of file persist-comm.C.

Referenced by CmiDestroyPersistent(), and CmiPersistentInit().

Definition at line 63 of file persist-comm.C.

Referenced by CmiPersistentInit(), and CompressPersistentMsg().

Definition at line 64 of file persist-comm.C.

Referenced by CmiPersistentInit(), and CompressPersistentMsg().

Definition at line 530 of file converse.h.

Referenced by CmiDestroyLocks(), and CmiStartThreads().

Definition at line 2073 of file converse.h.

Referenced by CmiDestroyLocks(), and CmiStartThreads().


Generated on Mon Sep 21 08:16:07 2020 for Charm++ by  doxygen 1.5.5