Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d21c24c94a88c5a38994cf2da9895469e8246869
[simgrid.git] / doc / doxygen / modules.doc
1 /** 
2 @defgroup MSG_API      MSG
3 @brief Simple programming environment
4
5 MSG was the first distributed programming environment provided within
6 SimGrid. While almost realistic, it remains quite simple
7 (simplistic?).
8
9 @section MSG_who Who should use this (and who shouldn't)
10
11 You should use this module if you want to study some heuristics for a
12 given problem you don't really want to implement. If you want to use
13 DAGs, have a look at the \ref SD_API programming environment. If you
14 want to study an existing MPI program, have a look at the \ref
15 SMPI_API one. If none of those programming environments fits your
16 needs, you may consider implementing your own directly on top of 
17 \ref SURF_API (but you probably want to contact us before). 
18 */
19
20 /** 
21 @defgroup XBT_API      XBT
22 @brief The core toolbox of SimGrid, containing usefull datatypes and friends
23 */
24
25 /**
26 @defgroup TRACE_API TRACE
27 @brief Tracing mechanism and its functions.
28
29 SimGrid can trace the resource (of hosts and links) utilization using
30 any of its programming interfaces (MSG, SimDAG and SMPI). This means
31 that the tracing will register how much power is used for each host
32 and how much bandwidth is used for each link of the platform.
33
34 The idea of the tracing facilities is to give SimGrid users to
35 possibility to classify MSG and SimDAG tasks by category, tracing the
36 platform utilization (hosts and links) for each of the categories.
37 The API enables the declaration of categories and a function to
38 associate them to the tasks (MSG and SD). The tasks that are not
39 classified according to a category are not traced. If no categories
40 are specified, simulations can still be traced using a special
41 parameter in the command line (see \ref tracing for details).
42 */
43
44
45 /** \defgroup SIMIX_API      SIMIX
46     \brief POSIX-like interface for building simulation
47
48     This is a developer-level interface that should be useful only if you
49     plan to design a new interface for SimGrid.
50 */
51
52
53 /** \defgroup SMPI_API      SMPI
54     \brief Programming environment for the simulation of MPI applications
55
56 This programming environment permits to study existing MPI application
57 by emulating them on top of the SimGrid simulator. In other words, it
58 will constitute an emulation solution for parallel codes. You don't
59 even have to modify your code for that, although that may help, as
60 detailed below.
61
62 \section SMPI_who Who should use SMPI (and who shouldn't)
63
64 You should use this programming environment of the SimGrid suite if
65 you want to study existing MPI applications.  If you want to study
66 some heuristics for a given problem (and if your goal is to produce
67 theorems and publications, not code), have a look at the \ref MSG_API
68 environment, or the \ref SD_API one if you need to use DAGs. If none
69 of those programming environments fits your needs, you may consider
70 implementing your own directly on top of \ref SURF_API (but you
71 probably want to contact us before).
72
73 \section SMPI_what What can run within SMPI?
74
75 You can run unmodified MPI applications (both C and Fortran) within
76 SMPI, provided you only use MPI calls that we implemented in MPI. Our
77 coverage of the interface is not bad, but will probably never be
78 complete. One sided communications and I/O primitives are not targeted
79 for now. The full list of not yet implemented functions is available
80 in file <tt>include/smpi/smpi.h</tt> of the archive, between two lines
81 containing the <tt>FIXME</tt> marker. If you really need a missing
82 feature, please get in touch with us: we can guide you though the
83 SimGrid code to help you implementing it, and we'd glad to integrate
84 it in the main project afterward if you contribute them back.
85
86 \section SMPI_adapting Adapting your MPI code to the use of SMPI
87
88 As detailed in the reference article (available at
89 http://hal.inria.fr/inria-00527150), you may want to adapt your code
90 to improve the simulation performance. But these tricks may seriously
91 hinder the result qualtity (or even prevent the app to run) if used
92 wrongly. We assume that if you want to simulate an HPC application,
93 you know what you are doing. Don't prove us wrong!
94
95 If you get short on memory (the whole app is executed on a single node
96 when simulated), you should have a look at the SMPI_SHARED_MALLOC and
97 SMPI_SHARED_FREE macros. It allows to share memory areas between
98 processes. For example, matrix multiplication code may want to store
99 the blocks on the same area. Of course, the resulting computations
100 will useless, but you can still study the application behavior this
101 way. Of course, if your code is data-dependent, this won't work.
102
103 If your application is too slow, try using SMPI_SAMPLE_LOCAL,
104 SMPI_SAMPLE_GLOBAL and friends to indicate which computation loops can
105 be sampled. Some of the loop iterations will be executed to measure
106 their duration, and this duration will be used for the subsequent
107 iterations. These samples are done per processor with
108 SMPI_SAMPLE_LOCAL, and shared between all processors with
109 SMPI_SAMPLE_GLOBAL. Of course, none of this will work if the execution
110 time of your loop iteration are not stable.
111
112 Yes, that's right, these macros are not documented yet, but we'll fix
113 it as soon as time permits. Sorry about that -- patch welcomed!
114 Meanwhile, grep for them on the examples for more information.
115
116 \section SMPI_compiling Compiling your code
117
118 This is very simply done with the <tt>smpicc</tt> script. If you
119 already compiled any MPI code before, you already know how to use it.
120 If not, you should try to get your MPI code running on top of MPI
121 before giving SMPI a spin. Actually, that's very simple even if it's
122 the first time you use MPI code: just use smpicc as a compiler (in
123 replacement of gcc or your usual compiler), and you're set.
124
125 \section SMPI_executing Executing your code on top of the simulator
126
127 This is done though the <tt>smpirun</tt> script as follows.
128 <tt>my_hostfile.txt</tt> is a classical MPI hostfile (that is, this
129 file lists the machines on which the processes must be dispatched, one
130 per line)  <tt>my_platform.xml</tt> is a classical SimGrid platform
131 file. Of course, the hosts of the hostfile must exist in the provided
132 platform. <tt>./program</tt> is the MPI program that you want to
133 simulate (must be compiled by <tt>smpicc</tt>) while <tt>-arg</tt> is
134 a command-line parameter passed to this program.
135
136 \verbatim
137 smpirun -hostfile my_hostfile.txt -platform my_platform.xml ./program -arg
138 \endverbatim
139
140 smpirun accepts other parameters, such as <tt>-np</tt> if you don't
141 want to use all the hosts defined in the hostfile, <tt>-map</tt> to
142 display on which host each rank gets mapped of <tt>-trace</tt> to
143 activate the tracing during the simulation. You can get the full list
144 by running
145 \verbatim
146 smpirun -help
147 \endverbatim
148
149
150 */
151
152
153 /** \defgroup SD_API      SimDag
154     \brief Programming environment for DAG applications
155
156     SimDag provides some functionnalities to simulate parallel task scheduling
157     with DAGs models (Direct Acyclic Graphs).
158     The old versions of SimGrid were based on DAGs. But the DAG part (named SG)
159     was removed in SimGrid 3 because the new kernel (\ref SURF_API) was implemented. \ref SURF_API
160     was much faster and more flexible than SG and did not use DAGs.
161     SimDag is a new implementation of DAGs handling and it is built on top of \ref SURF_API.
162
163     \section SD_who Who should use this (and who shouldn't)
164
165     You should use this programming environment of the SimGrid suite if you want
166     to study algorithms and heuristics with DAGs of parallel tasks.
167     If you don't need to use DAGs for your simulation, have a look at the
168     \ref MSG_API programming environment.
169     If you want to study an existing MPI program, have a look at the
170     \ref SMPI_API one.
171     If none of those programming environments fits your needs, you may
172     consider implementing your own directly on top of \ref SURF_API (but you
173     probably want to contact us before).
174
175 */
176
177 /**
178 @defgroup SURF_API SURF
179 @brief Internal kernel of all the simulators used in SimGrid, and associated models.
180
181 SURF provides the core functionnalities to simulate a virtual
182 platform. It is very low-level and is not intended to be used by end
183 users, but rather to serve as a basis for higher-level simulators. Its
184 interface are not frozen (and will probably never be), and the
185 structure emphasis on performance over ease of use. This module
186 contains the platform models. If you need a model that is not encoded
187 yet, please come to the devel mailing list so that we can discuss on
188 the feasibility of your idea.
189
190 Please note that as it is not really intended for public use, this
191 module is only partially documented.
192 */
193
194
195