1 /** \defgroup MSG_JAVA jMSG
3 \brief Java bindings to MSG (\ref MSG_API)
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
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.
18 \section jMSG_who Who should use this (and who shouldn't)
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.
26 /** \defgroup MSG_C MSG native
28 \brief Native interface to MSG (\ref MSG_API)
30 \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Native interface" --> \endhtmlonly
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.
36 \section jMSG_who Who should use this (and who shouldn't)
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
48 \defgroup MSG_LUA lMSG
50 \brief Lua bindings to MSG (\ref MSG_API)
53 DOXYGEN_NAVBAR_LABEL="LUA bindings"
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.
60 \section lMSG_who Who should use this (and who shouldn't)
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.
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
81 \section MSG_examples Examples of MSG
83 - \ref MSG_ex_master_slave
84 - \ref MSG_ex_asynchronous_communications
85 - \ref MSG_ex_master_slave_scrip_lua
88 /** @addtogroup MSG_LUA
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
96 - \ref MSG_ex_master_slave_lua
97 - \ref MSG_ex_master_slave_lua_bypass
101 /** @defgroup m_datatypes_management MSG Data Types
103 @brief This section describes the different datatypes provided by MSG.
105 \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Data types" --> \endhtmlonly
107 /** \addtogroup m_process_management
109 /** \addtogroup m_host_management
111 /** \addtogroup m_task_management
113 /** \addtogroup msg_gos_functions
115 /** \addtogroup m_channel_management
117 /** \addtogroup msg_easier_life
119 /** \addtogroup msg_simulation
123 /** \page MSG_ex_asynchronous_communications Asynchronous communication applications
125 Simulation of asynchronous communications between a sender and a receiver using a realistic platform and
126 an external description of the deployment.
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
139 \dontinclude msg/icomms/peer.c
141 \section MSG_ext_icomms_code Code of the application
143 \subsection MSG_ext_icomms_preliminary Preliminary declarations
145 \until Sender function
147 \subsection MSG_ext_icomms_Sender Sender function
149 The sender send to a receiver an asynchronous message with the function "MSG_task_isend()". Cause this function is non-blocking
150 we have to make "MSG_comm_test()" to know if the communication is finished for finally destroy it with function "MSG_comm_destroy()".
151 It also available to "make MSG_comm_wait()" which make both of them.
153 C style arguments (argc/argv) are interpreted as:
154 - the number of tasks to distribute
155 - the computation size of each task
156 - the size of the files associated to each task
157 - a list of host that will accept those tasks.
158 - the time to sleep at the beginning of the function
159 - This time defined the process sleep time
160 if time = 0 use of MSG_comm_wait()
161 if time > 0 use of MSG_comm_test()
164 \until Receiver function
166 \subsection MSG_ext_icomms_Receiver Receiver function
168 This function executes tasks when it receives them. As the receiving is asynchronous we have to test the communication to know
169 if it is completed or not with "MSG_comm_test()" or wait for the completion "MSG_comm_wait()".
171 C style arguments (argc/argv) are interpreted as:
172 - the id to use for received the communication.
173 - the time to sleep at the beginning of the function
174 - This time defined the process sleep time
175 if time = 0 use of MSG_comm_wait()
176 if time > 0 use of MSG_comm_test()
180 \subsection MSG_ext_icomms_core Simulation core
182 This function is the core of the simulation and is divided only into 3 parts
183 thanks to MSG_create_environment() and MSG_launch_application().
184 -# Simulation settings : MSG_create_environment() creates a realistic
186 -# Application deployment : create the agents on the right locations with
187 MSG_launch_application()
188 -# The simulation is run with #MSG_main()
191 - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.
192 - <i>application_file</i>: the name of a file containing a valid surfxml application description
196 \subsection MSG_ext_icomms_Main Main function
198 This initializes MSG, runs a simulation, and free all data-structures created by MSG.
202 \dontinclude msg/icomms/peer2.c
204 \section MSG_ext_icomms_fct_Waitall Waitall function for sender
206 The use of this function permit to send all messages and wait for the completion of all in one time.
208 \skipline Sender function
211 \section MSG_ext_icomms_fct_Waitany Waitany function
213 The MSG_comm_waitany() function return the place of the first message send or receive from a xbt_dynar_t table.
215 \subsection MSG_ext_icomms_fct_Waitany_sender From a sender
216 We can use this function to wait all sended messages.
217 \dontinclude msg/icomms/peer3.c
218 \skipline Sender function
221 \subsection MSG_ext_icomms_fct_Waitany_receiver From a receiver
222 We can also wait for the receiving of all messages.
223 \dontinclude msg/icomms/peer3.c
224 \skipline Receiver function
225 \until end_of_receiver
229 /** \page MSG_ex_master_slave_scrip_lua Master/slave application using lua console
231 Simulation of a master-slave application using a realistic platform and
232 an external description of the deployment via a lua script.
234 \section MSG_ex_msl_TOC Table of contents:
236 - \ref MSG_ext_msl_code
237 - \ref MSG_ext_msl_preliminary
238 - \ref MSG_ext_msl_master
239 - \ref MSG_ext_msl_slave
240 - \ref MSG_ext_msl_core
241 - \ref MSG_ext_msl_main
242 - \ref MSG_ext_msl_helping
243 - \ref MSG_ext_msl_platform
247 \dontinclude msg/masterslave/masterslave_console.c
249 \section MSG_ext_msl_code Code of the application
251 \subsection MSG_ext_msl_preliminary Preliminary declarations
256 \subsection MSG_ext_msl_master Master code
258 This function has to be assigned to a m_process_t that will behave as the master.
259 It should not be called directly but either given as a parameter to
260 #MSG_process_create() or registered as a public function through
261 #MSG_function_register() and then automatically assigned to a process through
262 #MSG_load_platform_script().
264 C style arguments (argc/argv) are interpreted as:
265 - the number of tasks to distribute
266 - the computation size of each task
267 - the size of the files associated to each task
268 - number of hosts that will accept those tasks.
270 Tasks are dumbly sent in a round-robin style.
273 \subsection MSG_ext_msl_slave Slave code
275 This function has to be assigned to a #m_process_t that has to behave as a slave.
276 Just like the master fuction (described in \ref MSG_ext_ms_master), it should not be called directly.
278 This function keeps waiting for tasks and executes them as it receives them.
282 \subsection MSG_ext_msl_core Simulation core
284 This function is the core of the simulation and is divided now only into 2 parts
285 thanks to MSG_load_platform_script().
286 -# Simulation settings and application deployment : MSG_load_platform_script() loads and creates a realistic
287 environment and the agents on the right locations, described in the lua script file (see example below).
288 Note that the use of this function require a lua installation on your machine.
289 -# The simulation is run with #MSG_main().
292 - <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 \until end_of_test_all
296 \subsection MSG_ext_msl_main Main() function
298 This initializes MSG, runs a simulation, and free all data-structures created by MSG.
302 \section MSG_ext_msl_helping Helping files
304 \subsection MSG_ext_msl_platform Example of platform script file
306 \include msg/masterslave/platform_script.lua
311 /** \page MSG_ex_master_slave Master/slave application
313 Simulation of a master-slave application using a realistic platform and
314 an external description of the deployment.
316 \section MSG_ex_ms_TOC Table of contents:
318 - \ref MSG_ext_ms_code
319 - \ref MSG_ext_ms_preliminary
320 - \ref MSG_ext_ms_master
321 - \ref MSG_ext_ms_slave
322 - \ref MSG_ext_ms_forwarder
323 - \ref MSG_ext_ms_core
324 - \ref MSG_ext_ms_main
325 - \ref MSG_ext_ms_helping
326 - \ref MSG_ext_ms_application
327 - \ref MSG_ext_ms_platform
331 \dontinclude msg/masterslave/masterslave_forwarder.c
333 \section MSG_ext_ms_code Code of the application
335 \subsection MSG_ext_ms_preliminary Preliminary declarations
341 \subsection MSG_ext_ms_master Master code
343 This function has to be assigned to a m_process_t that will behave as the master.
344 It should not be called directly but either given as a parameter to
345 #MSG_process_create() or registered as a public function through
346 #MSG_function_register() and then automatically assigned to a process through
347 #MSG_launch_application().
349 C style arguments (argc/argv) are interpreted as:
350 - the number of tasks to distribute
351 - the computation size of each task
352 - the size of the files associated to each task
353 - a list of host that will accept those tasks.
355 Tasks are dumbly sent in a round-robin style.
359 \subsection MSG_ext_ms_slave Slave code
361 This function has to be assigned to a #m_process_t that has to behave as a slave.
362 Just like the master fuction (described in \ref MSG_ext_ms_master), it should not be called directly.
364 This function keeps waiting for tasks and executes them as it receives them.
368 \subsection MSG_ext_ms_forwarder Forwarder code
370 This function has to be assigned to a #m_process_t that has to behave as a forwarder.
371 Just like the master function (described in \ref MSG_ext_ms_master), it should not be called directly.
373 C style arguments (argc/argv) are interpreted as a list of host
374 that will accept those tasks.
376 This function keeps waiting for tasks and dispathes them to its slaves.
378 \until end_of_forwarder
380 \subsection MSG_ext_ms_core Simulation core
382 This function is the core of the simulation and is divided only into 3 parts
383 thanks to MSG_create_environment() and MSG_launch_application().
384 -# Simulation settings : MSG_create_environment() creates a realistic
386 -# Application deployment : create the agents on the right locations with
387 MSG_launch_application()
388 -# The simulation is run with #MSG_main()
391 - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.
392 - <i>application_file</i>: the name of a file containing a valid surfxml application description
394 \until end_of_test_all
396 \subsection MSG_ext_ms_main Main() function
398 This initializes MSG, runs a simulation, and free all data-structures created by MSG.
402 \section MSG_ext_ms_helping Helping files
404 \subsection MSG_ext_ms_application Example of application file
406 \include msg/masterslave/deployment_masterslave.xml
408 \subsection MSG_ext_ms_platform Example of platform file
410 \include msg/small_platform.xml
414 /** \page MSG_ex_master_slave_lua Master/slave Lua application
416 Simulation of a master-slave application using lua bindings
417 - \ref MSG_ext_ms_code_lua
418 - \ref MSG_ext_ms_master_lua
419 - \ref MSG_ext_ms_slave_lua
420 - \ref MSG_ext_ms_core_lua
422 - \ref MSG_ext_ms_helping
423 - \ref MSG_ext_ms_application
424 - \ref MSG_ext_ms_platform
427 \dontinclude lua/master_slave.lua
429 \section MSG_ext_ms_code_lua Code of the application
431 \subsection MSG_ext_ms_master_lua Master code
433 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 Lua style arguments (...) in for the master are interpreted as:
436 - the number of tasks to distribute
437 - the computation size of each task
438 - the size of the files associated to each task
439 - a list of host that will accept those tasks.
441 Tasks are dumbly sent in a round-robin style.
446 \subsection MSG_ext_ms_slave_lua Slave code
448 This function has to be assigned to a #m_process_t that has to behave as a slave.
449 This function keeps waiting for tasks and executes them as it receives them.
452 \subsection MSG_ext_ms_core_lua Simulation core
454 in this section the core of the simulation which start by including the simgrid lib for bindings
455 : <i>require "simgrid" </i>
457 -# Simulation settings : <i>simgrid.platform</i> creates a realistic
459 -# Application deployment : create the agents on the right locations with
460 <i>simgrid.application</i>
461 -# The simulation is run with <i>simgrid.run</i>
464 - <i>platform_file</i>: the name of a file containing an valid surfxml platform description.( first command line argument)
465 - <i>application_file</i>: the name of a file containing a valid surfxml application description ( second commande line argument )
467 \until simgrid.clean()
471 /** \page MSG_ex_master_slave_lua_bypass Master/slave Bypass Lua application
473 Simulation of a master-slave application using lua bindings, Bypassing the XML parser
474 - \ref MSG_ext_ms_code_lua
475 - \ref MSG_ext_ms_master_lua
476 - \ref MSG_ext_ms_slave_lua
477 - \ref MSG_ext_ms_core_lua
480 \dontinclude lua/master_slave_bypass.lua
482 \section MSG_ext_ms_code_lua Code of the application
484 \subsection MSG_ext_ms_master_lua Master code
486 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 Lua style arguments (...) in for the master are interpreted as:
489 - the number of tasks to distribute
490 - the computation size of each task
491 - the size of the files associated to each task
492 - a list of host that will accept those tasks.
494 Tasks are dumbly sent in a round-robin style.
499 \subsection MSG_ext_ms_slave_lua Slave code
501 This function has to be assigned to a #m_process_t that has to behave as a slave.
502 This function keeps waiting for tasks and executes them as it receives them.
505 \subsection MSG_ext_ms_core_lua Simulation core
507 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.
508 : <i>require "simgrid" </i>
510 -# Hosts : <i>simgrid.Host.new</i> instanciate a new host with an id, and power.
511 -# Links : <i>simgrid.Link.new</i> instanictae a new link that will require an id, bandwith and latency values.
512 -# Route : <i>simgrid.Route.new</i> define a route between two hosts specifying the links to use.
513 -# Simulation settings : <i>simgrid.register_platform();</i> register own platform without using the XML SURF parser.
515 we can also bypass the XML deployment file, and associate functions for each of defined hosts.
516 - <i>simgrid.Host.setFunction</i>: associate a function to a host, specifying arguments if needed.
517 - <i>simgrid.register_application()</i>: saving the deployment settings before running the simualtion.
519 \until simgrid.clean()