added empty lines to uniform the headers in the html output
authorFilippo Gioachin <gioachin@illinois.edu>
Sun, 9 Dec 2007 06:18:43 +0000 (06:18 +0000)
committerFilippo Gioachin <gioachin@illinois.edu>
Sun, 9 Dec 2007 06:18:43 +0000 (06:18 +0000)
19 files changed:
doc/charm++/advancedlb.tex
doc/charm++/arrays.tex
doc/charm++/callbacks.tex
doc/charm++/chares.tex
doc/charm++/checkpoint.tex
doc/charm++/delegation.tex
doc/charm++/entry.tex
doc/charm++/further.tex
doc/charm++/groups.tex
doc/charm++/inhertmplt.tex
doc/charm++/loadb.tex
doc/charm++/marshalling.tex
doc/charm++/messages.tex
doc/charm++/othercalls.tex
doc/charm++/pup.tex
doc/charm++/python.tex
doc/charm++/quiesce.tex
doc/charm++/readonly.tex
doc/charm++/reductions.tex

index b0b190f625f435f393cc9008e0b6f2feb10af9c8..b985e25ed734464e8f9e6db90c9fac89237f800f 100644 (file)
@@ -1,8 +1,10 @@
 
 \subsection{Advanced Load Balancing}
+
 \label{advancedlb}
 
 \subsubsection{Write a Measurement-based Object Migration Strategy}
+
 \label{writelb}
 
 Charm++ programmers can pick load balancing strategy from Charm++'s built-in
@@ -36,6 +38,7 @@ load balancing strategy files.
 
 
 \subsubsection{Understand Load Balancing Database Data Structure}
+
 \label{lbdatabase}
 
 To write a load balancing strategy, one may want to know 
index 1121a7151350dca6e95e54941b95c1e48cc0bd53..eac2a9c61c4503eff65322e854773e2e3c7e34d7 100644 (file)
@@ -116,6 +116,7 @@ a message to a deleted array element.
 
 
 \subsubsection{Broadcasts}
+
 To \index{Array broadcast} broadcast a message to all the current elements of an array, 
 simply omit the index, as:
 
@@ -129,6 +130,7 @@ migrations, insertions, and deletions.
 
 
 \subsubsection{Reductions on Chare Arrays}
+
 A \index{array reduction}reduction applies a single operation (e.g. add,
 max, min, ...) to data items scattered across many processors and
 collects the result in one place.  \charmpp{} supports reductions on the
@@ -145,6 +147,7 @@ Reductions are described in more detail in Section~\ref{reductions}.
 
 
 \subsubsection{Destroying Arrays}
+
 To destroy an array element-- detach it from the array,
 call its destructor, and release its memory--invoke its 
 \kw{Array destroy} method, as:
@@ -161,6 +164,7 @@ its index.
 
 
 \subsection{Advanced Arrays}
+
 \label{advanced arrays}
 
 The basic array features described above (creation, messaging,
@@ -222,6 +226,7 @@ For 4D, 5D, 6D and user-defined arrays, this functionality cannot be used.
 You need to insert the array elements individually (Section~\ref{dynamic_insertion}).
 
 \subsubsection{Advanced Array Creation}
+
 \label{advanced array create}
 There are several ways to control the array creation process.
 You can adjust the map and bindings before creation, change
@@ -236,6 +241,7 @@ how it was created.
 
 
 \subsubsection{Advanced Array Creation: CkArrayOptions}
+
 \index{CkArrayOptions}
 \label{CkArrayOptions}
 
@@ -268,6 +274,7 @@ out of date.
 
 
 \subsubsection{Advanced Array Creation: Map Object}
+
 \index{array map}
 \label{array map}
 
@@ -335,6 +342,7 @@ For example, if you've declared a map object named ``blockMap'':
 
 
 \subsubsection{Advanced Array Creation: Initial Elements}
+
 \index{array initial}
 \label{array initial}
 
@@ -382,6 +390,7 @@ Thus calling \kw{ckNew(10)} on a 3-processor machine would result in
 
 
 \subsubsection{Advanced Array Creation: Bound Arrays}
+
 \experimental{}
 \index{bound arrays} \index{bindTo}
 \label{bound arrays}
@@ -466,6 +475,7 @@ private:
 
 
 \subsubsection{Advanced Array Creation: Dynamic Insertion}
+
 \label{dynamic_insertion}
 
 In addition to creating initial array elements using ckNew,
@@ -632,6 +642,7 @@ AF::AF()
 
 
 \subsubsection{Migratable Array Elements}
+
 \label{arraymigratable}
 Array objects can \index{migrate}migrate from one PE to another.
 For example, the load balancer (see section~\ref{lbFramework})
@@ -720,10 +731,12 @@ Deallocation is done in the element destructor as usual.
 
 
 \subsubsection{Load Balancing Chare Arrays}
+
 see section~\ref{lbFramework}
 
 
 \subsubsection{Local Access}
+
 \experimental{}
 \index{ckLocal for arrays}
 \label{ckLocal for arrays}
@@ -746,6 +759,7 @@ of each entry method.
 
 
 \subsubsection{Array Section}
+
 \experimental{}
 \label{array section}
 
index 678bd99007122b1f8c7911fab0945cde2140ddaa..c44f0497d64194690e111dd7d0e533748b123ed1 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Callbacks}
+
 \label{callbacks}
 
 A callback is a generic way to transfer control back to a client
@@ -10,6 +11,7 @@ callback object to the reduction library.
 
 
 \subsubsection{Client Interface}
+
 \index{CkCallback}
 
 You can create a \kw{CkCallback} object in a number of ways,
index 1a44b2af015099f174f18ec0c0ae7e01098aba6a..55ce94b2fdb83808f2cb0b3a8193aa457e96bf32 100644 (file)
@@ -65,6 +65,7 @@ this form is not suggested.
 mechanism allows chares to send their handles to other chares.
 
 \subsubsection{Chare Creation}
+
 \label{chare creation}
 
 First, a \index{chare}chare needs to be declared, both in \texttt{.ci} file and
@@ -194,6 +195,7 @@ message.
 
 
 \subsubsection{Local Access}
+
 \experimental{}
 You can get direct access to a local chare using the
 proxy's \kw{ckLocal} method, which returns an ordinary \CC\ pointer
index efc65a8c7dab4c6b438bf902f90829426dd2901a..5550d368375b39c162feffed9184ac79c745ba72 100644 (file)
@@ -1,4 +1,5 @@
 \section{Checkpoint/Restart}
+
 \index{Checkpoint/Restart}
 \label{sec:checkpoint}
 
@@ -18,6 +19,7 @@ Two schemes of fault tolerance protocols are implemented.
 \subsection{Disk-based Checkpoint/Restart}
 
 \subsubsection{Checkpointing}
+
 \label{sec:diskcheckpoint}
        The API to checkpoint the application is:
 
@@ -95,6 +97,7 @@ restored individually. A copy from processor 0 will be propagate to all
 the processors.
 
 \subsubsection{Choosing What to Save}
+
 In your programs, you may use chare groups for different types of purposes. 
 For example, groups holding read-only data can avoid excessive data copying,
 while groups maintaining processor-specific information is used as a local
@@ -113,6 +116,7 @@ for intermediate objects, and do save/restore only for the important
 objects. 
 
 \subsection{Double Memory/Disk Checkpoint/Restart}
+
 \label{sec:MemCheckpointing}
 
 The previous disk-based fault-tolerance scheme is a very basic scheme in 
index cfa9b50a0e4ed171a2eaee14560cdc2faebbfebe..2a8d01ccbf930d0d247c3490f58234b567ef4ef9 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Delegation}
+
 \index{Delegation}
 \label{delegation}
 
index 46354c5de36c085c1b822f269c28ea242f0c8e25..dc5fcb480b8dffe3f4f894f24e57d46fd537915a 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Entry Methods}
+
 \label{entry}
 
 In \charmpp, \index{chare}chares, \index{group}groups and \index{nodegroup}
@@ -25,6 +26,7 @@ have no return type.  Finally, sync methods, described below,
 may return a message.
 
 \subsubsection{Entry Method Attributes}
+
 \label{attributes}
 
 \charmpp{}  provides a handful of special attributes that \index{entry
index b68b60c445a82219ec66791aae1f6ca01886cf80..7f720d5732825f3ad7dd14813f5f34ea3e98e018 100644 (file)
@@ -1,6 +1,7 @@
 \section{Further Information}
 
 \subsection{Related Publications}
+
 \label{publications}
 
 For starters, see the publications, reports, and manuals 
@@ -32,6 +33,7 @@ Future versions will be able to provide recommendations/suggestions for
 improving performance as well.
 
 \subsection{Contacts}
+
 \label{Distribution}
 
 While we can promise neither bug-free software nor immediate solutions   
index 2b80d3d52ff78789d16c0e9a93b2fb8915cb8f79..f60ea4639cb2b9970bf2a2ac5d745c45b9221971 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Group Objects}
+
 \label{sec:group}
 
 A \kw{group}\footnote{Originally called {\em Branch Office Chare} or 
index 75fad0ffbb3ea5cdde998fe29913e4acb0bf6d50..5791a8f8416340ea75ca6aa05d441cf155c64fa7 100644 (file)
@@ -1,4 +1,5 @@
 \section{Inheritance and Templates in Charm++}
+
 \label{inheritance and templates}
 
 \charmpp\ supports inheritance among \charmpp\ objects such as
@@ -7,6 +8,7 @@ programming using \CC\ style templates for \charmpp\ objects, is a
 major enhancement over the previous versions of \charmpp.
 
 \subsection{Chare Inheritance}
+
 \index{inheritance}
 
 Chare inheritance makes it possible to remotely invoke methods of a base
@@ -89,6 +91,7 @@ in the interface file.
 
 
 \subsection{Inheritance for Messages}
+
 \index{message inheritance}
 
 Messages cannot inherit from other messages.  A message can, however,
@@ -126,6 +129,7 @@ methods, and virtual base classes via the PUP::able framework.
 
 
 \subsection{Generic Programming Using Templates}
+
 \index{templates}
 
 One can write ``templated'' code for Chares, Groups, Messages and other
index 7451c61d0a89b628efadc05e9aeeb768d1021757..512f4de62af3ee1c1ecb008b03ddc653397713fb 100644 (file)
@@ -1,5 +1,6 @@
 
 \subsection{Load Balancing}
+
 \label{loadbalancing}
 
 %(This introduction added on 11/12/2003)
@@ -40,6 +41,7 @@ one also spawns off work in the form of chares that can run on any
 processor. The seed balancer will handle such work as it arises.
 
 \subsubsection{Measurement-based Object Migration Strategies}
+
 \label{lbFramework}
 \label{migrationlb}
 
@@ -81,6 +83,7 @@ Here are the two terms often used in \charmpp{} load balancing framework:
 \end{itemize}
 
 \subsubsection{Available Load Balancing Strategies}
+
 \label{lbStrategy}
 
 Load balancing can be performed in either a centralized or distributed
@@ -130,6 +133,7 @@ are described in section \ref{lbOption}.
 %step, and use RefineLB for the later load balancing steps.
 
 \subsubsection{Load Balancing Chare Arrays}
+
 \label{lbarray}
 
 Load balancing framework is well integrated with Chare array implementation - 
@@ -262,6 +266,7 @@ switches back to the automatic Load balancing mode.
 \end{enumerate}
 
 \subsubsection{Migrating objects}
+
 \label{lbmigobj}
 
 Load balancers migrate objects automatically.
@@ -309,6 +314,7 @@ LBSetPeriod(5.0);
 \end{itemize}
 
 \subsubsection{Compiler and run-time options to use load balancing module}
+
 \label{lbOption}
 
 Load balancing strategies are implemented as libraries in \charmpp{}. This
@@ -427,6 +433,7 @@ The instrument of CPU usage is left on.
 \end{enumerate}
 
 \subsubsection{Load Balancing Simulation}
+
 The simulation feature of load balancing framework allows the users to collect information
 about the compute wall/cpu time and communication of the chares during a particular run of
 the program and use this information to later test different load balancing strategies to
@@ -555,6 +562,7 @@ callable from user program to modify the predictor. These methods are:
 
 
 \subsubsection{Seed load balancers - load balancing Chares at creation time}
+
 \label{seedlb}
 
 Seed load balancing involves the movement of object creation messages, or
@@ -644,6 +652,7 @@ name used above. Now one can use {\bf -balance foo} as compile time option
 to {\bf charmc} to link with the {\em foo} seed load balancer.
 
 \subsubsection{Simple Load Balancer Usage Example - Automatic with Sync LB}
+
 \label{lbexample}
 A simple example of how to use a load balancer in sync mode in one's application is presented below.
 
index bbd28f28ad03621329f8284448bbcf18adc91871..d567f950649fa24f70c9b70f6552bc1e0d64be44 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Parameter Marshalling}
+
 \label{marshalling}
 
 \experimental{}        
index cedc9119e26520c741bbf0033a86a3a131021ac8..4c9a76f2ff726848252533c7f344435a3c2abed5 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Messages}
+
 \label{messages}
 A message encapsulates all the parameters sent to an
 entry method.  Since the parameters are already encapsulated,
@@ -52,6 +53,7 @@ is generated by the charm translator. Then message definition has the form:
 
 
 \subsubsection{Message Creation and Deletion}
+
 \label{memory allocation}
 
 \index{message}Messages are allocated using the \CC\ \kw{new} operator:
@@ -128,6 +130,7 @@ message class may not redefine operators \texttt{new} or \texttt{delete}.
 
 
 \subsubsection{Messages with Variable Length Arrays}
+
 \label{varsize messages}
 \index{variable size messages}
 \index{varsize message}
@@ -246,6 +249,7 @@ p->secondArray[4] = 6.7;
 No special handling is needed for deleting varsize messages.
 
 \subsubsection{Message Packing}
+
 \label{message packing}
 \index{message packing}
 
@@ -331,6 +335,7 @@ offsets from the address of the pointer variable to the start of the pointed-to
 data.  Unpacking restores them to pointers. 
 
 \subsubsection{Custom Packed Messages}
+
 \index{packed messages}
 
 In many cases, a message must store a {\em non-linear} data structure using
@@ -472,6 +477,7 @@ compiler to ensure proper alignment of all its member fields.
 
 
 \subsubsection{Prioritized Execution}
+
 \label{prioritized message passing}
 \index{prioritized execution}
 \index{prioritized message passing}
index a9203187e017606d85596e225b8448b05ea4a85c..5a8a501117ed9f47ee8efdf0511ef3e3df3f9bb3 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{\kw{initnode} and \kw{initproc} routines}
+
 \index{initcall}
 \label{initcall}
 \experimental{}
index 859c51140fe9908dccae2b90ae77686414ca1d21..d2dd8354cc6a2e09b8adc615fc855d2511f97eee 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{PUP}
+
 \label{sec:pup}
 
 The \index{PUP} PUP framework is a generic way to describe the data in an object and to use that description for any task requiring serialization.
@@ -57,6 +58,7 @@ no pup routine, you must pup the values in the superclass yourself.
 
 
 \paragraph{PUP operator}
+
 \label{sec:pupstl}
 
 The recommended way to pup any object \verb.a. is to use \verb.p|a;..
@@ -115,6 +117,7 @@ operator\verb.|. might look like:
 
 
 \paragraph{PUP as bytes}
+
 \label{sec:pupbytes}
 
 For classes and structs with many fields, it can be tedious and 
@@ -151,6 +154,7 @@ eventually may, so pupping as bytes is currently discouraged.
 
 
 \paragraph{PUP overhead}
+
 \label{sec:pupoverhead}
 
 The \kw{PUP::er} overhead is very small---one virtual function call
@@ -163,6 +167,7 @@ transfer, with one virtual function call per array.
 
 
 \paragraph{PUP structured dagger}
+
 \label{sec:pupsdag}
 
 Please note that if your object contains Structured Dagger code (see section ``Structured Dagger'') you must call the generated routine \kw{\_\_sdag\_pup} to correctly pup the Structured Dagger state:
@@ -184,6 +189,7 @@ class bar : public barParent \{
 
 
 \paragraph{PUP modes}
+
 \label{sec:pupmodes}
 
 \charmpp{} uses your pup routine to both pack and unpack, 
@@ -219,6 +225,7 @@ memory should be deallocated in the destructor as usual.
 
 
 \subsubsection{Life Cycle}
+
 \label{sec:lifecycle}
 
 \begin{figure}[h]
@@ -255,6 +262,7 @@ as usual.
 
 
 \subsubsection{Dynamic Allocation}
+
 \label{sec:pupdynalloc}
 
 If your class has fields that are dynamically allocated, when unpacking
@@ -262,6 +270,7 @@ these need to be allocated (in the usual way) before you pup them.
 Deallocation should be left to the class destructor as usual.
 
 \paragraph{No allocation}
+
 The simplest case is when there is no dynamic allocation.
 \begin{alltt}
 class keepsFoo : public mySuperclass \{
@@ -278,6 +287,7 @@ public:
 \end{alltt}
 
 \paragraph{Allocation outside pup}
+
 The next simplest case is when we contain a class 
 that is always allocated during our constructor,
 and deallocated during our destructor.  Then no allocation
@@ -299,6 +309,7 @@ public:
 \end{alltt}
 
 \paragraph{Allocation during pup}
+
 If we need values obtained during the pup routine
 before we can allocate the class, we must 
 allocate the class inside the pup routine.
@@ -322,6 +333,7 @@ public:
 \end{alltt}
 
 \paragraph{Allocatable array}
+
 For example, if we keep an array of doubles,
 we need to know how many doubles there are 
 before we can allocate the array.  Hence we must
@@ -352,6 +364,7 @@ public:
 \end{alltt}
 
 \paragraph{NULL object pointer}
+
 If our allocated object may be NULL, our allocation
 becomes much more complicated.  We must first check
 and pup a flag to indicate whether the object exists, 
@@ -382,6 +395,7 @@ This sort of code is normally much longer and more
 error-prone if split into the various packing/unpacking cases.
 
 \paragraph{Array of classes}
+
 An array of actual classes can be treated exactly the same way
 as an array of basic types.  PUParray will pup each 
 element of the array properly, calling the appropriate \verb.operator|..
@@ -410,6 +424,7 @@ public:
 
 
 \paragraph{Array of pointers to classes}
+
 An array of pointers to classes must handle each element
 separately, since the PUParray routine does not work with 
 pointers.  An ``allocate'' routine to set up the array
@@ -452,6 +467,7 @@ in the next section can be helpful in this case.
 
 
 \subsubsection{Subclass allocation via PUP::able}
+
 \label{sec:pup::able}
 If the class \uw{foo} above might have been a subclass, instead of
 simply using \uw{new foo} above we would have had to allocate 
@@ -643,6 +659,7 @@ In the example above, we could do:
 
 
 \subsubsection{C and Fortran bindings}
+
 C and Fortran programmers can use a limited subset of the
 \kw{PUP::er} capability.  The routines all take a 
 handle named \kw{pup\_er}.  The routines 
@@ -676,6 +693,7 @@ interface is recommended.
 
 
 \subsubsection{Common PUP::ers}
+
 The most common \kw{PUP::er}s used are \kw{PUP::sizer},
 \kw{PUP::toMem}, and \kw{PUP::fromMem}.  These are sizing,
 packing, and unpacking \kw{PUP::er}s, respectively.
@@ -699,6 +717,7 @@ that describes the format used by the source machine.
 
 
 \subsubsection{PUP::seekBlock}
+
 It may rarely occur that you require items to be unpacked
 in a different order than they are packed.  That is, you
 want a seek capability.  \kw{PUP::er}s support a limited 
@@ -743,6 +762,7 @@ maximum number of seek sections.
 
 
 \subsubsection{Writing a PUP::er}
+
 System-level programmers may occasionally find it useful to define
 their own \kw{PUP::er} objects.  The system \kw{PUP::er} class is 
 an abstract base class that funnels all incoming pup requests
index 268f4432e9296d994487d0f8f6b58d8aa7eaaf80..249150ea89479370a137af361e68404d2df50572 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Python scripting language}
+
 \label{python}
 
 The Python scripting language in \charmpp{} allows the user to dynamically
@@ -39,6 +40,7 @@ on the server implementation.
 
 
 \subsubsection{The client side}
+
 \label{pythonClient}
 
 In order to facilitate the interface between the client and the server, some
@@ -79,6 +81,7 @@ CcsSendRequest (&server, "pyCode", 0, request.size(), request.pack());
 \end{alltt}
 
 \subsubsection{PythonExecute}
+
 \label{pythonExecute}
 
 To execute a Python script on a running server, the client has to create an
@@ -168,6 +171,7 @@ still running on that interpreter.
 
 
 \subsubsection{Auto-imported modules}
+
 \label{pythonModules}
 
 When a Python script is run inside a \charmpp{} application, two Python modules
@@ -225,6 +229,7 @@ extra parenthesis may be needed to create tuples from individual values.
 \end{description}
 
 \subsubsection{Iterate mode}
+
 \label{pythonIterator}
 
 Sometimes some operations need to be iterated over all the elements in the
@@ -290,6 +295,7 @@ the work opposite to pack and fix all the pointers. This method will not return
 anything and is supposed to fix the pointers ``inline''.
 
 \subsubsection{PythonPrint}
+
 \label{pythonPrint}
 
 In order to receive the output printed by the Python script, the client needs to
@@ -329,6 +335,7 @@ bool isKill();
 \end{alltt}
 
 \subsubsection{PythonFinished}
+
 \label{pythonFinished}
 
 In order to know when a Python code has finished executing, especially when
@@ -352,6 +359,7 @@ if the Python script has already finished, or zero if the script is still
 running.
 
 \subsubsection{The server side}
+
 \label{pythonServer}
 
 In order for a \charmpp{} object (chare, array, node, or nodegroup) to receive
@@ -379,6 +387,7 @@ localVar.registerPython(``pycode'');
 
 
 \subsubsection{Server \kw{read} and \kw{write} functions}
+
 \label{pythonServerRW}
 
 As explained previously in subsection~\ref{pythonModules}, some functions are
@@ -402,6 +411,7 @@ manual ``Extending and Embedding the Python Interpreter''
 \texttt{PyArg\_ParseTuple} and \texttt{Py\_BuildValue}.
 
 \subsubsection{Server iterator functions}
+
 \label{pythonServerIterator}
 
 In order to use the iterative mode as explained in
@@ -441,6 +451,7 @@ Both functions return an integer which will be interpreted by the system as foll
 \end{description}
 
 \subsubsection{Server utility functions}
+
 \label{pythonUtilityFuncs}
 
 They are inherited when declaring an object as Python-compliant, and therefore
@@ -477,6 +488,7 @@ void pythonGetComplex(PyObject*, char*, double*, double*);
 To handle more complicated structures like Dictionaries, Lists or Tuples, please refer to ``Python/C API Reference Manual'' (http://docs.python.org/).
 
 \subsubsection{High level scripting}
+
 \label{pythonHighLevel}
 
 When other than defining the \charmpp{} object as \kw{python}, an entry method
index 1d00885096255413ae2639d864fbcbc7a2dca5f6..629ba8c00b4c91eeb7d166b0f351f85adb0b883f 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Quiescence Detection}
+
 \label{sec:qd}
 
 In \charmpp, \index{quiescence}quiescence is defined as the state in which no
index 036f4c47bcab2acaa452b71bd65a3596849a74f4..61a43945c9bdb316cfed6ad42571d7dc4f55ebad 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Read-only Variables, Messages and Arrays}
+
 \label{readonly}
 
 Since \charmpp\ does not allow global variables for keeping programs portable
index c32dbd00f11b8b64f37276c7522216cc2ba00054..f82b99d715dd731ed6e1e99f3095d20a55820f58 100644 (file)
@@ -1,4 +1,5 @@
 \subsection{Reductions}
+
 \label{reductions}
 
 A \index{array reduction}reduction applies a single operation (e.g. add,
@@ -53,6 +54,7 @@ explained below (Section~\ref{reductionClients}).
 
 
 \subsubsection{Reduction Clients}
+
 \label{reductionClients}
 
 After the data is reduced, it is passed to a you via a callback object,
@@ -130,6 +132,7 @@ void myClient(void *param,int dataSize,void *data)
 
 
 \subsubsection{Built-in Reduction Types}
+
 \label{builtin_reduction}
 
 \charmpp{} includes several built-in reduction types, used to combine 
@@ -223,6 +226,7 @@ your own reduction type.  See the next section
 
 
 \subsubsection{Defining a New Reduction Type}
+
 \label{new_type_reduction}
 
 It is possible to define a new type of reduction, performing a