Docs: refer to illinois.edu, not uiuc.edu
[charm.git] / doc / charm++ / startuporder.tex
1 %describe the order in which entities are constructed on PE 0 and other PEs
2 %what assumptions can user program make about entity availability:
3 %ie groups are available in any chare array constructor, but not vice versa etc.
4
5 The \charmpp{} program starts with the following sequence:
6 \begin{enumerate}
7 \item Modules Registration: the modules are registered in the same order with
8 their specified order at the linking stage of the program compilation.
9 For example, if "-module A -module B" is specified for \charmpp{} program
10 linking, then module A is registered before module B at runtime.
11
12 \item \kw{initnode},\kw{initproc} Calls: all those calls are invoked before the
13 creation of other \charmpp{} data structures and the invocation of every
14 mainchares from different modules.
15
16 \item \kw{readonly} Variables: those variables are initialized in the mainchare following the program order as written on PE 0. After the initialization, they
17 are broadcasted to every other PEs making them available in the constructors
18 of \charmpp{} objects such as Group objects etc..
19
20 \item \kw{Group} and \kw{NodeGroup} Creation: on PE 0, constructors of these
21 objects are invoked in the program order. However, on every other PEs, their
22 creation are triggered by messages. Since the message order is not guaranteed
23 in \charmpp{} program, constructors should \textbf{not} depend on other Group
24 or NodeGroup objects on a PE. In addition, since those objects are initialized
25 after the initialization of readonly variabales, readonly variables can be used
26 in their constructors.
27
28 \item \charmpp{} Array Creation: the order of calling Array constructors follows
29 the same mechanism with that of Group and NodeGroup as described above.
30 Therefore, the creation of one array should \textbf{not} depend on other arrays.
31 As Array objects are initialized last, their constructors can use 
32 readonly variables and local branches to Group or NodeGroup objects.
33 \end{enumerate}