Updated machine model chapter and merged it with Cmi chapter.
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 29 Jul 1997 20:55:29 +0000 (20:55 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Tue, 29 Jul 1997 20:55:29 +0000 (20:55 +0000)
doc/converse/cmi.tex
doc/converse/cpvmacros.tex
doc/converse/manual.tex

index aeb24b7b096510f6599ee10645f5d78dbc27308c..8d6b8860e9d99f8ffca5928d8f05994369856193 100644 (file)
@@ -2,7 +2,21 @@
 
 This chapter describes two of Converse's modules: the CMI, and the
 CSD.  Together, they serve to transmit messages and schedule the
-delivery of messages.
+delivery of messages. First, we describe the machine model assumed by
+Converse.
+
+\section{Machine Model}
+\label{model}
+
+Converse treats the parallel machine as a collection of nodes, where
+each node is comprised of a number of processors that share memory 
+In some cases, the number of processors per node may be exactly one  
+(e.g. Distributed memory multicomputers such as IBM SP.)  
+In addition, each of the processors may have multiple threads running on
+them which share code and data but have different stacks.
+Functions and macros are provided for handling shared memory across
+processors and querying node information. These are discussed in section
+\ref{globalvars}
 
 \section{Defining Handler Numbers}
 \label{handler1}
@@ -530,6 +544,8 @@ caller resides. A processor Id is between \param{0} and \param{CmiNumPe()-1}.}
 
 Also see the calls in Section~\ref{utility}.  % put a ref here..??
 
+\input{cpvmacros}
+
 \section{Input/Output}
 
 \function{void CmiPrintf(char *format, arg1, arg2, ...)}
index 26ee697edfae395576965685e4776e5891d0daca..c8dfe2835715a4aff998ece2f2e0cddbe4568b30 100644 (file)
 % REVISION HISTORY:
 %
 % $Log$
-% Revision 1.8  1997-07-19 23:51:52  wilmarth
+% Revision 1.9  1997-07-29 20:55:30  milind
+% Updated machine model chapter and merged it with Cmi chapter.
+%
+% Revision 1.8  1997/07/19 23:51:52  wilmarth
 % Several changes to correct/clarify test were made.
 %
 % Revision 1.7  1997/06/26 05:16:22  jyelon
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\chapter{Machine Model and Global Variables}
-
-Converse treats the parallel machine as a collection of nodes, where
-each node is comprised of a number of processors that share memory.  In
-some cases, the number of processors per node may be exactly one.  In
-addition, each of the processors may have multiple threads running on
-them which share code and data but have different stacks.
+\section{Global Variables and Utility functions}
+\label{globalvars}
 
 Different vendors are not consistent about how they treat global and static
 variables.  Most vendors write C compilers in which global variables are
@@ -61,7 +59,7 @@ shared.  For these reasons, we added ``pseudoglobals'' to Converse.
 These act much like C global and static variables, except that you have
 explicit control over the degree of sharing.
 
-\section{Converse PseudoGlobals}
+\subsection{Converse PseudoGlobals}
 
 Three classes of pseudoglobal variables are supported: node-private,
 process-private, and thread-private variables.
@@ -179,7 +177,7 @@ File Module1.c
 \label{fig:cpv}
 \end{figure}
 
-\section{Utility Functions}
+\subsection{Utility Functions}
 \label{utility}
 
 To further simplify programming with global variables on shared memory
@@ -188,15 +186,75 @@ macros. \note{These functions are defined on machines other than
 shared-memory machines also, and have the effect of only one processor
 per node and only one thread per processor.}
 
+\function{int CmiMyNode()}
+\index{CmiMyNode}
+\desc{Returns the node number to which the calling processor belongs.}
+
+\function{int CmiNumNodes()}
+\index{CmiNumNodes}
+\desc{Returns number of nodes in the system. Note that this is not the
+same as \param{CmiNumPes()}.}
+
 \function{int CmiMyRank()}
 \index{CmiMyRank}
 \desc{Returns the rank of the calling processor within a shared memory node.}
 
+\function{int CmiNodeFirst(int node)}
+\index{CmiNodeFirst}
+\desc{Returns the processor number of the lowest ranked processor on node
+\param{node}}
+
+\function{int CmiNodeSize(int node)}
+\index{CmiNodeSize}
+\desc{Returns the number of processors that belong to the node \param{node}.}
+
+\function{int CmiNodeOf(int pe)}
+\index{CmiNodeOf}
+\desc{Returns the node number to which processor \param{pe} belongs. Indeed,
+\param{CmiMyNode()} is a utility macro that is aliased to 
+\param{CmiNodeOf(CmiMyPe())}.}
+
+\function{int CmiRankOf(int pe)}
+\index{CmiRankOf}
+\desc{Returns the rank of processor \param{pe} in the node to which it belongs.}
+
+\subsection{Node-level Locks and other Synchronization Mechanisms}
+\label{nodelocks}
+
 \function{void CmiNodeBarrier()}
 \index{CmiNodeBarrier}
 \desc{Provide barrier synchronization at the node level, i.e. all the 
 processors belonging to the node participate in this barrier.}
 
+\function{typedef McDependentType CmiNodeLock}
+\index{CmiNodeLock}
+\desc{This is the type for all the node-level locks in Converse.}
+
+\function{CmiNodeLock CmiCreateLock(void)}
+\index{CmiCreateLock}
+\desc{Creates, initializes and returns a new lock. Initially the
+lock is unlocked.}
+
+\function{void CmiLock(CmiNodeLock lock)}
+\index{CmiLock}
+\desc{Locks \param{lock}. If the \param{lock} has been locked by other
+processor, waits for \param{lock} to be unlocked.}
+
+\function{void CmiUnlock(CmiNodeLock lock)}
+\index{CmiUnlock}
+\desc{Unlocks \param{lock}. Processors waiting for the \param{lock} can
+then compete for acquiring \param{lock}.}
+
+\function{int CmiTryLock(CmiNodeLock lock)}
+\index{CmiTryLock}
+\desc{Tries to lock \param{lock}. If it succeeds in locking, it returns
+0. If any other processor has already acquired the lock, it returns 1.}
+
+\function{voi CmiDestroyLock(CmiNodeLock lock)}
+\index{CmiDestroyLock}
+\desc{Frees any memory associated with \param{lock}. It is an error to
+perform any operations with \param{lock} after a call to this function.}
+
 \function{void *CmiSvAlloc(int size)}
 \index{CmiSvAlloc}
 \desc{Allocates a block of memory of \param{size} bytes from the heap in node's 
index 527a92f757b287d488a93da8e9152d050394980b..141f25077453fc8e3c7ff3b5ce36b217f8247fe6 100644 (file)
@@ -69,7 +69,6 @@ Brunner and Laxmikant Kale.
 \input{cmi}
 \input{queue}
 \input{threads}
-\input{cpvmacros}
 \input{conditions}
 
 \end{document}