46d2b89293933fb74ffa107db6bbec55b8301d5e
[charm.git] / doc / charm++ / othercalls.tex
1 \subsection{\kw{initnode} and \kw{initproc} routines}
2
3 \index{initcall}
4 \label{initcall}
5 Some registration routines need be executed exactly once
6 before the computation begins. You may choose to 
7 declare a regular  \CC\ subroutine \kw{initnode} in the .ci file
8 to ask \charmpp to execute the routine exactly once on {\em every node} 
9 before the computation begins, or to declare a regular  \CC\ subroutine 
10 \kw{initproc} to be executed exactly once on {\em every processor}.
11
12 \begin{alltt}
13 module foo \{
14     initnode void fooNodeInit(void);
15     initproc void fooProcInit(void);
16     chare bar \{
17         ...
18         initnode void barNodeInit(void);
19         initproc void barProcInit(void);
20     \};
21 \};
22 \end{alltt}
23
24 This code will execute the routines \uw{fooNodeInit} and static 
25 \uw{bar::barNodeInit} once on every node and \uw{fooProcInit}
26 and \uw{bar::barProcInit} on every processor before the main computation 
27 starts.
28 Initnode calls are always executed before initproc calls.
29 Both init calls (declared as static member function) can be used in chare, 
30 group or chare arrays.
31
32 Note that these routines should only do registration, not computation since
33 Charm run-time initialization does not start yet ---
34 use a mainchare instead, which gets executed on only processor 0,
35 to begin the computation.  Initcall routines are typically
36 used to do special registrations and global variable setup
37 before the computation actually begins.
38