Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added some doc for ns-3. Changed a +50 to a ~100 in welcome index.php
[simgrid.git] / doc / module-msg.doc
1 /** \defgroup MSG_JAVA      jMSG
2     \ingroup MSG_API
3     \brief Java bindings to MSG (\ref MSG_API)
4
5     \htmlonly <!-- 
6       DOXYGEN_NAVBAR_LABEL="JAVA bindings" 
7       DOXYGEN_NAVBAR_CHILD "Simulation functions"=classsimgrid_1_1msg_1_1Msg.html
8       DOXYGEN_NAVBAR_CHILD "Host"=classsimgrid_1_1msg_1_1Host.html
9       DOXYGEN_NAVBAR_CHILD "Process"=classsimgrid_1_1msg_1_1Process.html
10       DOXYGEN_NAVBAR_CHILD "Task"=classsimgrid_1_1msg_1_1Task.html      
11       DOXYGEN_NAVBAR_CHILD "MsgException"=classsimgrid_1_1msg_1_1MsgException.html
12     --> \endhtmlonly 
13           
14       MSG was the first distributed programming environment provided within
15       SimGrid. While almost realistic, it remains quite simple (simplistic?).
16       This describes the Java bindings to this interface.
17
18       \section jMSG_who Who should use this (and who shouldn't)
19       
20       You should use MSG if you want to study some heuristics for a
21       given problem you don't really want to implement. If you want to
22       use the Java programming language, your are in the right
23       section. To use the C interface, please refer to \ref MSG_C.
24 */
25
26 /** \defgroup MSG_C      MSG native
27     \ingroup MSG_API
28     \brief Native interface to MSG (\ref MSG_API)
29
30     \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Native interface" --> \endhtmlonly 
31           
32       MSG was the first distributed programming environment provided within
33       SimGrid. While almost realistic, it remains quite simple (simplistic?).
34       This describes the native to MSG.
35
36       \section jMSG_who Who should use this (and who shouldn't)
37       
38       You should use MSG if you want to study some heuristics for a
39       given problem you don't really want to implement. If you want to
40       use the C programming language, your are in the right
41       section. To use the Java programming interface, please refer to
42       \ref MSG_JAVA.
43 */
44
45
46 /**
47
48 \defgroup MSG_LUA      lMSG
49     \ingroup MSG_API
50     \brief Lua bindings to MSG (\ref MSG_API)
51
52     \htmlonly <!-- 
53       DOXYGEN_NAVBAR_LABEL="LUA bindings" 
54     --> \endhtmlonly 
55           
56       MSG was the first distributed programming environment provided within
57       SimGrid. While almost realistic, it remains quite simple (simplistic?).
58       This describes the Lua bindings to this interface.
59
60       \section lMSG_who Who should use this (and who shouldn't)
61       
62       You should use MSG if you want to study some heuristics for a
63       given problem you don't really want to implement. If you want to
64       use the Lua script language, your are in the right
65       section. To use the C interface, please refer to \ref MSG_C.
66
67 */
68
69 /** @addtogroup MSG_C
70
71   \section MSG_funct Offered functionnalities
72    - \ref m_process_management
73    - \ref m_datatypes_management
74    - \ref m_host_management
75    - \ref m_task_management
76    - \ref msg_gos_functions
77    - \ref m_channel_management
78    - \ref msg_easier_life
79    - \ref msg_simulation
80
81   \section MSG_examples Examples of MSG
82  
83    - \ref MSG_ex_master_slave
84    - \ref MSG_ex_asynchronous_communications
85    - \ref MSG_ex_master_slave_scrip_lua
86 */
87
88 /** @addtogroup MSG_LUA
89
90   \section MSG_Lua_funct  Lua offered functionnalities in MSG
91    - \ref host_management
92    - \ref tasks_management
93    - \ref environment_management
94   \section Lua_examples Examples of lua MSG
95  
96    - \ref MSG_ex_master_slave_lua
97    - \ref MSG_ex_master_slave_lua_bypass
98 */
99
100
101 /** @defgroup m_datatypes_management MSG Data Types 
102     @ingroup MSG_C
103     @brief This section describes the different datatypes provided by MSG.
104     
105     \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Data types" --> \endhtmlonly
106 */
107 /**     \addtogroup m_process_management
108         \ingroup MSG_C  */
109 /**     \addtogroup m_host_management
110         \ingroup MSG_C  */
111 /**     \addtogroup m_task_management
112         \ingroup MSG_C  */
113 /**     \addtogroup msg_gos_functions
114         \ingroup MSG_C  */
115 /**     \addtogroup m_channel_management
116         \ingroup MSG_C  */
117 /**     \addtogroup msg_easier_life
118         \ingroup MSG_C  */
119 /**     \addtogroup msg_simulation
120         \ingroup MSG_C  */
121
122
123 /** \page MSG_ex_asynchronous_communications Asynchronous communication applications
124
125     Simulation of asynchronous communications between a sender and a receiver using a realistic platform and
126     an external description of the deployment.
127  
128     \section MSG_ex_ms_TOC Table of contents:
129      - \ref MSG_ext_icomms_code
130        - \ref MSG_ext_icomms_preliminary
131        - \ref MSG_ext_icomms_Sender
132        - \ref MSG_ext_icomms_Receiver
133        - \ref MSG_ext_icomms_core
134        - \ref MSG_ext_icomms_Main
135      - \ref MSG_ext_icomms_fct_Waitall
136      - \ref MSG_ext_icomms_fct_Waitany
137
138     <hr> 
139     
140     \dontinclude msg/icomms/peer.c
141
142     \section MSG_ext_icomms_code Code of the application
143
144     \subsection MSG_ext_icomms_preliminary Preliminary declarations
145     \skip include
146     \until Sender function
147
148     \subsection MSG_ext_icomms_Sender Sender function
149
150     The sender send to a receiver an asynchronous message with the function "MSG_task_isend()". Cause this function is non-blocking 
151     we have to make "MSG_comm_test()" to know   if the communication is finished for finally destroy it with function "MSG_comm_destroy()".
152     It also available to "make MSG_comm_wait()" which make both of them.  
153
154       C style arguments (argc/argv) are interpreted as:
155        - the number of tasks to distribute
156        - the computation size of each task
157        - the size of the files associated to each task
158        - a list of host that will accept those tasks.
159        - the time to sleep at the beginning of the function
160        - This time defined the process sleep time
161                         if time = 0 use of MSG_comm_wait()
162                         if time > 0 use of MSG_comm_test()
163
164
165     \until Receiver function
166
167     \subsection MSG_ext_icomms_Receiver Receiver function
168
169     This function executes tasks when it receives them. As the receiving is asynchronous we have to test the communication to know
170     if it is completed or not with "MSG_comm_test()" or wait for the completion "MSG_comm_wait()".
171
172       C style arguments (argc/argv) are interpreted as:
173        - the id to use for received the communication.
174        - the time to sleep at the beginning of the function
175        - This time defined the process sleep time
176                         if time = 0 use of MSG_comm_wait()
177                         if time > 0 use of MSG_comm_test()
178
179     \until Test function
180
181     \subsection MSG_ext_icomms_core Simulation core
182
183       This function is the core of the simulation and is divided only into 3 parts
184       thanks to MSG_create_environment() and MSG_launch_application().
185          -# Simulation settings : MSG_create_environment() creates a realistic 
186             environment
187          -# Application deployment : create the agents on the right locations with  
188             MSG_launch_application()
189          -# The simulation is run with #MSG_main()
190          
191       Its arguments are:
192         - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.
193         - <i>application_file</i>: the name of a file containing a valid surfxml application description
194
195     \until Main function
196
197     \subsection MSG_ext_icomms_Main Main function
198
199     This initializes MSG, runs a simulation, and free all data-structures created by MSG.
200
201     \until end_of_main
202
203     \dontinclude msg/icomms/peer2.c
204
205     \section MSG_ext_icomms_fct_Waitall Waitall function for sender
206
207     The use of this function permit to send all messages and wait for the completion of all in one time.
208
209     \skipline Sender function
210     \until end_of_sender
211
212     \section MSG_ext_icomms_fct_Waitany Waitany function
213
214     The MSG_comm_waitany() function return the place of the first message send or receive from a xbt_dynar_t table.
215
216     \subsection MSG_ext_icomms_fct_Waitany_sender From a sender
217         We can use this function to wait all sended messages.
218     \dontinclude msg/icomms/peer3.c
219     \skipline Sender function
220     \until end_of_sender
221
222     \subsection MSG_ext_icomms_fct_Waitany_receiver From a receiver
223         We can also wait for the receiving of all messages.
224     \dontinclude msg/icomms/peer3.c
225     \skipline Receiver function
226     \until end_of_receiver
227
228 */
229
230 /** \page MSG_ex_master_slave_scrip_lua Master/slave application using lua console
231             
232     Simulation of a master-slave application using a realistic platform and
233     an external description of the deployment via a lua script.
234
235     \section MSG_ex_msl_TOC Table of contents:
236         
237      - \ref MSG_ext_msl_code
238        - \ref MSG_ext_msl_preliminary
239        - \ref MSG_ext_msl_master
240        - \ref MSG_ext_msl_slave
241        - \ref MSG_ext_msl_core
242        - \ref MSG_ext_msl_main
243      - \ref MSG_ext_msl_helping
244        - \ref MSG_ext_msl_platform
245
246 <hr> 
247     
248     \dontinclude msg/masterslave/masterslave_console.c
249     
250     \section MSG_ext_msl_code Code of the application
251     
252     \subsection MSG_ext_msl_preliminary Preliminary declarations
253     
254     \skip include
255     \until } channel_t;
256     
257     \subsection MSG_ext_msl_master Master code
258     
259       This function has to be assigned to a m_process_t that will behave as the master.
260       It should not be called directly but either given as a parameter to
261       #MSG_process_create() or registered as a public function through 
262       #MSG_function_register() and then automatically assigned to a process through
263       #MSG_load_platform_script(). 
264  
265       C style arguments (argc/argv) are interpreted as:
266        - the number of tasks to distribute
267        - the computation size of each task
268        - the size of the files associated to each task
269        - number of hosts that will accept those tasks.
270
271       Tasks are dumbly sent in a round-robin style.
272       
273       \until end_of_master
274 \subsection MSG_ext_msl_slave Slave code
275     
276       This function has to be assigned to a #m_process_t that has to behave as a slave.
277       Just like the master fuction (described in \ref MSG_ext_ms_master), it should not be called directly.
278
279       This function keeps waiting for tasks and executes them as it receives them.
280       
281       \until end_of_slave
282
283 \subsection MSG_ext_msl_core Simulation core
284
285       This function is the core of the simulation and is divided now only into 2 parts
286       thanks to MSG_load_platform_script().
287          -# Simulation settings and application deployment : MSG_load_platform_script() loads and creates a realistic 
288             environment and the agents on the right locations, described in the lua script file (see example below).
289             Note that the use of this function require a lua installation on your machine. 
290          -# The simulation is run with #MSG_main().
291          
292       Its arguments are:
293         - <i>platform_script_file</i>: the name of the script file containing a valid  platform and application description, using bound lua methods to bypass the surfxml parser.
294
295       \until end_of_test_all
296
297 \subsection MSG_ext_msl_main Main() function
298    
299       This initializes MSG, runs a simulation, and free all data-structures created by MSG.
300       
301       \until end_of_main
302
303    \section MSG_ext_msl_helping Helping files
304
305    \subsection MSG_ext_msl_platform Example of platform script file
306
307    \include msg/masterslave/platform_script.lua
308
309
310 */
311
312 /** \page MSG_ex_master_slave Master/slave application
313     
314     Simulation of a master-slave application using a realistic platform and
315     an external description of the deployment. 
316
317     \section MSG_ex_ms_TOC Table of contents:
318     
319      - \ref MSG_ext_ms_code
320        - \ref MSG_ext_ms_preliminary
321        - \ref MSG_ext_ms_master
322        - \ref MSG_ext_ms_slave
323        - \ref MSG_ext_ms_forwarder
324        - \ref MSG_ext_ms_core
325        - \ref MSG_ext_ms_main
326      - \ref MSG_ext_ms_helping
327        - \ref MSG_ext_ms_application 
328        - \ref MSG_ext_ms_platform
329      
330     <hr> 
331     
332     \dontinclude msg/masterslave/masterslave_forwarder.c
333     
334     \section MSG_ext_ms_code Code of the application
335     
336     \subsection MSG_ext_ms_preliminary Preliminary declarations
337     
338     \skip include
339     \until printf
340     \until }
341     
342     \subsection MSG_ext_ms_master Master code
343     
344       This function has to be assigned to a m_process_t that will behave as the master.
345       It should not be called directly but either given as a parameter to
346       #MSG_process_create() or registered as a public function through 
347       #MSG_function_register() and then automatically assigned to a process through
348       #MSG_launch_application().
349  
350       C style arguments (argc/argv) are interpreted as:
351        - the number of tasks to distribute
352        - the computation size of each task
353        - the size of the files associated to each task
354        - a list of host that will accept those tasks.
355
356       Tasks are dumbly sent in a round-robin style.
357       
358       \until end_of_master
359     
360     \subsection MSG_ext_ms_slave Slave code
361     
362       This function has to be assigned to a #m_process_t that has to behave as a slave.
363       Just like the master fuction (described in \ref MSG_ext_ms_master), it should not be called directly.
364
365       This function keeps waiting for tasks and executes them as it receives them.
366       
367       \until end_of_slave
368
369    \subsection MSG_ext_ms_forwarder Forwarder code
370    
371       This function has to be assigned to a #m_process_t that has to behave as a forwarder.
372       Just like the master function (described in \ref MSG_ext_ms_master), it should not be called directly.
373
374       C style arguments (argc/argv) are interpreted as a list of host
375       that will accept those tasks.
376
377       This function keeps waiting for tasks and dispathes them to its slaves.
378
379       \until end_of_forwarder
380
381    \subsection MSG_ext_ms_core Simulation core
382
383       This function is the core of the simulation and is divided only into 3 parts
384       thanks to MSG_create_environment() and MSG_launch_application().
385          -# Simulation settings : MSG_create_environment() creates a realistic 
386             environment
387          -# Application deployment : create the agents on the right locations with  
388             MSG_launch_application()
389          -# The simulation is run with #MSG_main()
390          
391       Its arguments are:
392         - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.
393         - <i>application_file</i>: the name of a file containing a valid surfxml application description
394         
395       \until end_of_test_all
396       
397    \subsection MSG_ext_ms_main Main() function
398    
399       This initializes MSG, runs a simulation, and free all data-structures created by MSG.
400       
401       \until end_of_main
402
403    \section MSG_ext_ms_helping Helping files
404
405    \subsection MSG_ext_ms_application Example of application file
406
407    \include msg/masterslave/deployment_masterslave.xml
408
409    \subsection MSG_ext_ms_platform Example of platform file
410    
411    \include msg/small_platform.xml
412    
413 */
414
415 /** \page MSG_ex_master_slave_lua Master/slave Lua application
416     
417     Simulation of a master-slave application using lua bindings
418        - \ref MSG_ext_ms_code_lua
419        - \ref MSG_ext_ms_master_lua
420        - \ref MSG_ext_ms_slave_lua
421        - \ref MSG_ext_ms_core_lua
422
423      - \ref MSG_ext_ms_helping
424        - \ref MSG_ext_ms_application 
425        - \ref MSG_ext_ms_platform
426        
427        
428       \dontinclude lua/masterslave/master_slave.lua
429       
430       \section MSG_ext_ms_code_lua Code of the application
431       
432       \subsection MSG_ext_ms_master_lua Master code
433       
434             as described ine the C native master/Slave exmaple , this function has to be assigned to a m_process_t that will behave as the master.
435  
436       Lua style arguments (...) in for the master are interpreted as:
437        - the number of tasks to distribute
438        - the computation size of each task
439        - the size of the files associated to each task
440        - a list of host that will accept those tasks.
441
442       Tasks are dumbly sent in a round-robin style.
443       
444       \until end_of_master
445       
446       
447       \subsection MSG_ext_ms_slave_lua Slave code
448     
449       This function has to be assigned to a #m_process_t that has to behave as a slave.
450       This function keeps waiting for tasks and executes them as it receives them.
451       
452       \until end_of_slave
453          \subsection MSG_ext_ms_core_lua Simulation core
454
455       in this section the core of the simulation which start by including the simgrid lib for bindings
456       : <i>require "simgrid" </i>
457       
458          -# Simulation settings : <i>simgrid.platform</i> creates a realistic 
459             environment 
460          -# Application deployment : create the agents on the right locations with  
461             <i>simgrid.application</i>
462          -# The simulation is run with <i>simgrid.run</i>
463          
464       Its arguments are:
465         - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.( first command line argument)
466         - <i>application_file</i>: the name of a file containing a valid surfxml application description ( second commande line argument )
467         
468       \until simgrid.clean()
469       
470 */
471
472 /** \page MSG_ex_master_slave_lua_bypass Master/slave Bypass Lua application
473     
474     Simulation of a master-slave application using lua bindings, Bypassing the XML parser
475        - \ref MSG_ext_ms_code_lua
476        - \ref MSG_ext_ms_master_lua
477        - \ref MSG_ext_ms_slave_lua
478        - \ref MSG_ext_ms_core_lua
479        
480        
481       \dontinclude lua/console/master_slave_bypass.lua
482       
483       \section MSG_ext_ms_code_lua Code of the application
484       
485       \subsection MSG_ext_ms_master_lua Master code
486       
487             as described ine the C native master/Slave exmaple , this function has to be assigned to a m_process_t that will behave as the master.
488  
489       Lua style arguments (...) in for the master are interpreted as:
490        - the number of tasks to distribute
491        - the computation size of each task
492        - the size of the files associated to each task
493        - a list of host that will accept those tasks.
494
495       Tasks are dumbly sent in a round-robin style.
496       
497       \until end_of_master
498       
499       
500       \subsection MSG_ext_ms_slave_lua Slave code
501     
502       This function has to be assigned to a #m_process_t that has to behave as a slave.
503       This function keeps waiting for tasks and executes them as it receives them.
504       
505       \until end_of_slave
506          \subsection MSG_ext_ms_core_lua Simulation core
507
508       in this section the core of the simulation which start by including the simgrid lib for bindings, then create the resources we need to set up our environment bypassing the XML parser.
509       : <i>require "simgrid" </i>
510       
511          -# Hosts : <i>simgrid.Host.new</i> instanciate a new host with an id, and power.
512          -# Links : <i>simgrid.Link.new</i> instanictae a new link that will require an id, bandwith and latency values.
513          -# Route : <i>simgrid.Route.new</i> define a route between two hosts specifying the links to use.
514          -# Simulation settings : <i>simgrid.register_platform();</i> register own platform without using the XML SURF parser.
515
516          we can also bypass the XML deployment file, and associate functions for each of defined hosts.
517         - <i>simgrid.Host.setFunction</i>: associate a function to a host, specifying arguments if needed.
518         - <i>simgrid.register_application()</i>: saving the deployment settings before running the simualtion.
519
520       \until simgrid.clean()
521       
522 */