\verbatim
"cmake -D[name]=[value] ... ./"
-[name] enable_gtnets [value] ON/OFF or TRUE/FALSE or 1/0
- enable_java ON/OFF or TRUE/FALSE or 1/0
- enable_lua ON/OFF or TRUE/FALSE or 1/0
- enable_ruby ON/OFF or TRUE/FALSE or 1/0
- enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0
- enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0
- enable_smpi ON/OFF or TRUE/FALSE or 1/0
- enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0
- enable_supernovae ON/OFF or TRUE/FALSE or 1/0
- enable_tracing ON/OFF or TRUE/FALSE or 1/0
- enable_coverage ON/OFF or TRUE/FALSE or 1/0
- enable_memcheck ON/OFF or TRUE/FALSE or 1/0
- enable_model-checking ON/OFF or TRUE/FALSE or 1/0
- enable_doc ON/OFF or TRUE/FALSE or 1/0
-
- gtnets_path <path_to_gtnets_directory>
- prefix <path_to_install_directory>
- BIBTEX2HTML <path_to_bibtex2html>
- with_context auto/ucontext/pthread/window
+[name] enable_gtnets [value] ON/OFF or TRUE/FALSE or 1/0
+ enable_java ON/OFF or TRUE/FALSE or 1/0
+ enable_lua ON/OFF or TRUE/FALSE or 1/0
+ enable_ruby ON/OFF or TRUE/FALSE or 1/0
+ enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0
+ enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0
+ enable_smpi ON/OFF or TRUE/FALSE or 1/0
+ enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0
+ enable_supernovae ON/OFF or TRUE/FALSE or 1/0
+ enable_tracing ON/OFF or TRUE/FALSE or 1/0
+ enable_coverage ON/OFF or TRUE/FALSE or 1/0
+ enable_memcheck ON/OFF or TRUE/FALSE or 1/0
+ enable_model-checking ON/OFF or TRUE/FALSE or 1/0
+ enable_doc ON/OFF or TRUE/FALSE or 1/0
+ gtnets_path <path_to_gtnets_directory>
+ prefix <path_to_install_directory>
+ BIBTEX2HTML <path_to_bibtex2html>
+ with_context auto/ucontext/pthread/window
+ pipol_user <pipol_username>
\endverbatim
\subsubsection faq_cmakeoption2 Options explaination
\li BIBTEX2HTML : Path where is installed bibtex2html.
\li with context : specify which context the user wants to use.
+
+ \li pipol_user : specify your pipol username if you want to use the pipol-remote command.
\subsubsection faq_cmakeoption3 Initialisation
prefix null
BIBTEX2HTML null
with_context auto
+pipol_user null
\endverbatim
\subsubsection faq_cmakeoption4 Option's cache and how to reset?
If you want to test before make a commit you can simply make "ctest -D Experimental" and then you can visualize results submitted into Cdash. <a href="http://cdash.inria.fr/CDash/index.php?project=Simgrid">(Go to Cdash site)</a>.
-\subsubsection faq_cmakecompilation4 Examples for different mode.
+\subsubsection faq_cmakecompilation5 Examples for different mode.
\li Mode maintainer
add_test(test-simdag-1 ${PROJECT_DIRECTORY}/testsuite/simdag/sd_test --cfg=path:${PROJECT_DIRECTORY}/testsuite/simdag small_platform_variable.xml)
\endverbatim
+\subsection faq_PIPOL Pipol-remote
+
+Now we offer the possibility to test your local sources on pipol platforms before a commit. Of course you have to be user of pipol <a href="https://pipol.inria.fr/users/">(Account request)</a> cause you need to give your pipol_username to cmake. Here is a list of available systems :
+\verbatim
+ amd64_kvm-linux-debian-lenny
+ amd64_kvm-linux-debian-testing
+ amd64_kvm-windows-7
+ amd64-linux-centos-5.dd.gz
+ amd64-linux-debian-etch.dd.gz
+ amd64-linux-debian-lenny.dd.gz
+ amd64-linux-debian-testing.dd.gz
+ amd64-linux-fedora-core10.dd.gz
+ amd64-linux-fedora-core11.dd.gz
+ amd64-linux-fedora-core12.dd.gz
+ amd64-linux-fedora-core13.dd.gz
+ amd64-linux-fedora-core7.dd.gz
+ amd64-linux-fedora-core8.dd.gz
+ amd64-linux-fedora-core9.dd.gz
+ amd64-linux-mandriva-2007_springs_powerpack.dd.gz
+ amd64-linux-mandriva-2009_powerpack.dd.gz
+ amd64-linux-opensuse-11.dd.gz
+ amd64-linux-redhatEL-5.0.dd.gz
+ amd64-linux-suse-LES10.dd.gz
+ amd64-linux-ubuntu-feisty.dd.gz
+ amd64-linux-ubuntu-hardy.dd.gz
+ amd64-linux-ubuntu-intrepid.dd.gz
+ amd64-linux-ubuntu-jaunty.dd.gz
+ amd64-linux-ubuntu-karmic.dd.gz
+ amd64-linux-ubuntu-lucid.dd.gz
+ amd64-unix-freebsd-7.dd.gz
+ amd64-windows-server-2003-64bits.dd.gz
+ amd64-windows-server-2008-64bits.dd.gz
+ i386_kvm-linux-debian-lenny
+ i386_kvm-linux-debian-testing
+ i386_kvm-linux-fedora-core13
+ i386_kvm-windows-xp-pro-sp3
+ i386-linux-centos-5.dd.gz
+ i386-linux-debian-etch.dd.gz
+ i386-linux-debian-lenny.dd.gz
+ i386-linux-debian-testing.dd.gz
+ i386-linux-fedora-core10.dd.gz
+ i386-linux-fedora-core11.dd.gz
+ i386-linux-fedora-core12.dd.gz
+ i386-linux-fedora-core13.dd.gz
+ i386-linux-fedora-core7.dd.gz
+ i386-linux-fedora-core8.dd.gz
+ i386-linux-fedora-core9.dd.gz
+ i386-linux-mandriva-2007_springs_powerpack.dd.gz
+ i386-linux-mandriva-2009_powerpack.dd.gz
+ i386-linux-opensuse-11.dd.gz
+ i386-linux-redhatEL-5.0.dd.gz
+ i386-linux-suse-LES10.dd.gz
+ i386-linux-ubuntu-feisty.dd.gz
+ i386-linux-ubuntu-hardy.dd.gz
+ i386-linux-ubuntu-intrepid.dd.gz
+ i386-linux-ubuntu-jaunty.dd.gz
+ i386-linux-ubuntu-karmic.dd.gz
+ i386-linux-ubuntu-lucid.dd.gz
+ i386_mac-mac-osx-server-leopard.dd.gz
+ i386-unix-freebsd-7.dd.gz
+ i386-unix-opensolaris-10.dd.gz
+ i386-unix-opensolaris-11.dd.gz
+ i386-unix-solaris-10.dd.gz
+ ia64-linux-debian-lenny.dd
+ ia64-linux-fedora-core9.dd
+ ia64-linux-redhatEL-5.0.dd
+ x86_64_mac-mac-osx-server-snow-leopard.dd.gz
+ x86_mac-mac-osx-server-snow-leopard.dd.gz
+\endverbatim
+
+Two kind of uses are possible :
+\verbatim
+This command copy your source and execute a configure then a build and finish with tests.
+ bob@caraja:~/Developments/simgrid/tmp_build$ make <name_of_image>
+
+This command copy your source and execute a \"ctest -D Experimental\" and submit the result to cdash.
+ bob@caraja:~/Developments/simgrid/tmp_build$ make <name_of_image>_experimental
+\endverbatim
+All commands are resumed with :
+\verbatim
+bob@caraja:~/Developments/simgrid/tmp_build$ make pipol_experimental_list_images
+bob@caraja:~/Developments/simgrid/tmp_build$ make pipol_test_list_images
+\endverbatim
+
\subsection faq_cmakeExplain Explaination of sources files for cmake
\li CMakeLists.txt
\subsubsection faq_MIA_asynchronous I want to do asynchronous communications in MSG
-Up until now, there is no asynchronous communications in MSG. However,
-you can create as many process as you want so you should be able to do
-whatever you want... I've written a queue module to help implementing
-some asynchronous communications at low cost (creating thousands of
-process only to handle communications may be problematic in term of
-performance at some point). I'll add it in the distribution asap.
+We can now use asynchronous communication in MSG by using function :
+
+ MSG_task_isend()
+
+ MSG_task_irecv()
+
+ MSG_comm_test()
+
+ MSG_comm_wait()
+
+ MSG_comm_waitall()
+
+ MSG_comm_waitany()
+
+ MSG_comm_destroy()
+
+See page :\ref MSG_ex_asynchronous_communications
\subsubsection faq_MIA_thread_synchronization I need to synchronize my MSG processes
SimGrid behavior. In particular, you can change the default cpu and
network models...
+\subsubsection faq_simgrid_configuration_fullduplex Using Fullduplex
+
+Experimental fullduplex support is now available on the svn branch. In order to fullduple to work your platform must have two links for each pair
+of interconnected hosts, see an example here:
+\verbatim
+ simgrid_svn_sources/exemples/msg/gtnets/fullduplex-p.xml
+\endverbatim
+
+Using fullduplex support ongoing and incoming communication flows are
+treated independently for most models. The exception is the LV08 model which
+adds 0.05 of usage on the opposite direction for each new created flow. This
+can be useful to simulate some important TCP phenomena such as ack compression.
+
+Running a fullduplex example:
+\verbatim
+ cd simgrid_svn_sources/exemples/msg/gtnets
+ ./gtnets fullduplex-p.xml fullduplex-d.xml --cfg=fullduplex:1
+\endverbatim
+
+
+
+
+
\subsubsection faq_simgrid_configuration_gtnets Using GTNetS
It is possible to use a packet-level network simulator
- <b>Enable GTNetS support in SimGrid</b>
+
+In order to enable gtnets with simgrid you have to give where is gtnets. (path to <gtnets_path>/lib and <gtnets_path>/include)
\verbatim
+ Since v3.4 (with cmake)
+ cmake . -Dgtnets_path=/<userhome>/usr
+
+ Until v3.4 (with autotools)
./configure --with-gtnets=/<userhome>/usr
\endverbatim
runntime with the following options:</b>
\verbatim
+ Since v3.4 (with cmake)
+ cd simgrid
+ make
+ ctest -R gtnets
+
+ Until v3.4 (with autotools)
cd simgrid/example/msg/
make
make check
\subsubsubsection Mandatory Functions
-\li <b>\c TRACE_start (const char *filename)</b>: This is the first function to
-be called. It receives a single argument as parameter that contains the name of
-the file that will hold the trace in the end of the simulation. It returns 0 if
-everything was properly initialized, 1 otherwise. All trace functions called
-before TRACE_start do nothing.
+\li <b>\c TRACE_start ()</b>: This is the first function to
+be called. It returns 0 if everything was properly initialized, 1 otherwise.
+All trace functions called before TRACE_start do nothing.
\li <b>\c TRACE_category (const char *category)</b>: This function should be used
to define a user category. The category can be used to differentiate the tasks
that will be used when these functions are called is the one returned by
the function \c MSG_host_self().
+\subsubsection faq_tracing_options Tracing configuration Options
+
+These are the options accepted by the tracing system of SimGrid:
+
+\li <b>\c tracing/filename</b>: use this to specify the name of the trace file
+that will be created during the simulation. For example, after the binary
+of your simulator, you can pass as parameter this:
+\verbatim
+--cfg=tracing/filename:mytracefile.trace
+\endverbatim
+in order to trace the behavior of the simulation in a file with the name
+mytracefile.trace.
+
+\li <b>\c tracing/platform</b>: use this to activate the tracing of the
+platform. For example, you can pass as parameter to your simulator:
+\verbatim
+--cfg=tracing/platform:1
+\endverbatim
+to trace the platform utilization by the categories you declared in your
+simulator. By default, this options is set to 0.
+
\subsubsection faq_tracing_example Example of Instrumentation
A simplified example using the tracing mandatory functions.
\verbatim
int main (int argc, char **argv)
{
- TRACE_start ("traced_simulation.trace");
+ MSG_global_init (&argc, &argv);
+
+ //note that TRACE_start must be called after MSG_global_init
+ TRACE_start ();
TRACE_category ("request");
TRACE_category ("computation");
TRACE_category ("finalize");
-
- MSG_global_init (&argc, &argv);
//(... after deployment ...)
Most of Simgrid modules require a good level in C programming ,
since simgrid is used to be as standard C library .
Sometime ( for some reason or another ) developers prefer using some kind of « easy scripts »
- (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works ,
+ (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works,
which avoid dealing with C errors , and sometime an important gain of time (coding-time?) .
-Besides Java Binding , Lua and Ruby bindings are available now( since version 3.4 of Simgrid )
-for MSG Module , and we are currenlty working on bindings for other modules .
+Besides Java Binding, Lua and Ruby bindings are available now( since version 3.4 of Simgrid )
+for MSG Module, and we are currenlty working on bindings for other modules .
\subsubsection faq_binding_lua_about What is lua ?
Lua (Moon for portuguese !) is a lightweight, reflective, imperative and functional programming language,
designed as a scripting language with extensible semantics as a primary goal.(see official web site <a href="http://www.lua.org">here</a>)
\subsubsection faq_binding_lua_why Why lua ?
-Lua is a fast,portable and powerful script language , quite simple to use for developpers .
+Lua is a fast,portable and powerful script language, quite simple to use for developpers .
it combines procedural features with powerful data description facilities,
by using a simple, yet powerful, mechanism of tables.
Lua has a relatively simple C API compared to other scripting languages,
and accordingly it provides a robust, easy to use it.
\subsubsection faq_binding_lua_simgrid How to use lua in Simgrid ?
-Actually , the use of lua in Simgrid is quite simple , you have just to follow the same steps as coding with C in Simgird ,
- but this time , code with Lua ;) :
+Actually , the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird,
+ but this time, code with Lua ;) :
- Coding functions coresponding to each process
- loading the platforme/deployment XML file that describe the environment of simulation
- and … Running the Simulation !!!
+\dontinclude lua/master_slave.lua
\subsubsection faq_binding_lua_example_master_slave Master/Slave Example
+
\li Master Code
-\verbatim
-function Master(...)
- nb_task = arg[1];
- comp_size = arg[2];
- comm_size = arg[3];
- slave_count = arg[4]
- -- Dispatch the tasks
- for i=1,nb_task do
- tk = simgrid.Task.new("Task "..i,comp_size,comm_size);
- alias = "slave "..(i%slave_count);
- simgrid.info("Master sending ’" .. simgrid.Task.name(tk) .."’ To ’" .. alias .."’");
- simgrid.Task.send(tk,alias);
- simgrid.info("Master done sending ’".. simgrid.Task.name(tk) .."’ To ’" .. alias .."’");
- end
- -- Sending Finalize Message To Others
- for i=0,slave_count-1 do
- alias = "slave "..i;
- simgrid.info("Master: sending finalize to "..alias);
- finalize = simgrid.Task.new("finalize",comp_size,comm_size);
- simgrid.Task.send(finalize,alias)
- end
-end
-\endverbatim
-we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task ,
- then simgrid.Task.send(task,alias) to send it .
+ \until end_of_master
+we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task,
+ then simgrid.Task.send(task,alias) to send it.
we use also simgrid.Task.name(task), to get the task's name .
\li Slave Code
-\verbatim
-function Slave(...)
- local my_mailbox="slave "..arg[1]
- while true do
- local tk = simgrid.Task.recv(my_mailbox);
- if (simgrid.Task.name(tk) == "finalize") then
- simgrid.info("Slave ’" ..my_mailbox.."’ got finalize msg");
- break
- end
- simgrid.Task.execute(tk)
- end
- simgrid.info("Slave ’" ..my_mailbox.."’: I’m Done . See You !!");
-end
-\endverbatim
-Here , we could see how we use simgrid.Task.recv(alias) to receive a task with a specific alias ,
+\until end_of_slave
+Here, we could see how we use simgrid.Task.recv(alias) to receive a task with a specific alias,
this function return directly the task recevied .
\li Set Environmenet and run application
-\verbatim
-require "simgrid"
-simgrid.platform("my_platform.xml")
-simgrid.application("my_deployment.xml")
-simgrid.run()
-simgrid.info("Simulation’s over.See you.")
-simgrid.clean()
-\endverbatim
+\until simgrid.clean()
\subsubsection faq_binding_lua_example_data Exchanging Data
-You can also exchange data between Process using lua .for that , you have to deal with lua task as a table ,
-since lua is based itself on a mechanism of tables ,
-so you can exchange any kind of data ( tables, matrix , strings … ) between process via tasks.
+You can also exchange data between Process using lua. for that, you have to deal with lua task as a table,
+since lua is based itself on a mechanism of tables,
+so you can exchange any kind of data ( tables, matrix, strings … ) between process via tasks.
\li Sender process
\verbatim
…
simgrid.Task.send(task,alias)
\endverbatim
- After creating task , we associate to it various kind of data with a specific key , ( string in this case)
- to distinguish between data variables . Via this key the receiver could access easily to datas .
+ After creating task, we associate to it various kind of data with a specific key,( string in this case)
+ to distinguish between data variables. Via this key the receiver could access easily to datas.
\li Receiver processe
sender_message = task['message']
...
\endverbatim
- Note that in lua , both sender and receiver share the same lua task !
- So that the receiver could joint data directly on the received task without sending it back .
+ Note that in lua, both sender and receiver share the same lua task!
+ So that the receiver could joint data directly on the received task without sending it back.
You can find a complet example ( matrix multiplication case ) in the file example/lua/mult_matrix.lua
\subsubsection faq_binding_lua_example_bypass Bypass XML
- maybe you wonder if there is a way to bypass the XML files ,
- and describe your platform directly from the code , with lua bindings it's Possible !! how ?
+ maybe you wonder if there is a way to bypass the XML files,
+ and describe your platform directly from the code, with lua bindings it's Possible !! how ?
We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files
- ( this can be useful for large platforms , so a simple for loop will avoid you to deal with an annoying XML File ;) )
+ ( this can be useful for large platforms, so a simple for loop will avoid you to deal with an annoying XML File ;) )
\li set Hosts
\verbatim
- simgrid.Host.new("Tremblay",98095000);
- simgrid.Host.new("Jupiter",76296000);
- simgrid.Host.new("Fafard",76296000);
- simgrid.Host.new("Ginette",48492000);
- simgrid.Host.new("Bourassa",48492000);
+ simgrid.Host.new{id="Tremblay",power=98095000};
+ simgrid.Host.new{id="Jupiter",power=76296000};
+ simgrid.Host.new{id="Fafard",power=76296000};
+ simgrid.Host.new{id="Ginette",power=48492000};
+ simgrid.Host.new{id="Bourassa",power=48492000};
\endverbatim
- we use simgrid.Host.new(host_id,power) to instanciate our hosts.
+ we use simgrid.Host.new{id=id_host,power=power_host} to instanciate our hosts.
\li set Links
\verbatim
for i=0,11 do
- simgrid.Link.new(i,252750+ i*768,0.000270544+i*0.087); -- some crazy values ;)
+ simgrid.Link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087}; -- some crazy values ;)
end
\endverbatim
- we used simgrid.Link.new(link_id,bandwidth,latency) with a simple for loop to create all links we need ( much easier than XML hein ? )
+ we used simgrid.Link.new{id=link_id,bandwidth=bw,latency=lat} with a simple for loop to create all links we need (much easier than XML hein ?)
\li set Routes
\verbatim
simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"});
...
\endverbatim
- for each host you have to specify which route to choose to access to the rest of hosts connected in the grid .
+ for each host you have to specify which route to choose to access to the rest of hosts connected in the grid.
\li Save platform
\verbatim
simgrid.register_platform();
\endverbatim
-Don't forget to register your platform , that SURF callbacks starts their work ;)
+Don't forget to register your platform, that SURF callbacks starts their work ;)
\li set application
\verbatim
simgrid.Host.setFunction("Fafard","Slave",1,{"2"});
simgrid.Host.setFunction("Ginette","Slave",1,{"3"});
\endverbatim
- you don't need to use a deployment XML file , thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list)
+ you don't need to use a deployment XML file, thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list)
you can associate functions for each host with arguments if needed .
\li
\verbatim
simgrid.register_application();
\endverbatim
-Yes , Here too you have to resgiter your application before running the simulation .
+Yes, Here too you have to resgiter your application before running the simulation.
the full example is distributed in the file examples/lua/master_slave_bypass.lua
\subsection faq_binding_ruby Ruby Binding
-\subsubsection faq_binding_ruby_about What is Ruby ?
-Ruby is a dynamic, reflective, general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features.
-Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management;
-it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU.(see official web site <a href="http://ruby-lang.org">here</a>)
\subsubsection faq_binding_ruby_simgrid Use Ruby in Simgrid
-Since v3.4 , the use of ruby in simgrid is available for the MSG Module .
-you can find almost all MSG functionalities in Ruby code , that allows you to set up your environment , manage tasks between hosts and run the simulation.
+Since v3.4, the use of <a href="http://ruby-lang.org">ruby</a> in simgrid is available for the MSG Module.
+you can find almost all MSG functionalities in Ruby code, that allows you to set up your environment, manage tasks between hosts and run the simulation.
+\dontinclude ruby/MasterSlave.rb
\subsubsection faq_binding_ruby_example Master/Slave Ruby Application
-for each process method(master and slave in this example), you have to associate a ruby class , that should inherit from <i>MSG::Process</i> ruby class,
+for each process method(master and slave in this example), you have to associate a ruby class, that should inherit from <i>MSG::Process</i> ruby class,
with a 'main' function that describe the behaviour of the process during the simulation.
\li required stuff
\verbatim
\endverbatim
\li Master code
-\verbatim
-#################################################
-# Class Master
-#################################################
-class Master < MSG::Process
- # main : that function that will be executed when running simulation
-
- def main(args) # args is an array containing arguments for function master
- size = args.size
- for i in 0..size-1
- MSG::info("args["+String(i)+"]="+args[i])
- end
-
- raise "Master needs 3 arguments" if size < 3
- numberOfTask = Integer(args[0])
- taskComputeSize = Float(args[1])
- taskCommunicationSize = Float(args[2])
- slaveCount = Integer(args[3])
-
- # Creates and sends the tasks
- for i in 0..numberOfTask-1
- task = Task.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize);
- mailbox = "slave " + (i%slaveCount).to_s
- MSG::info("Master Sending "+ task.name + " to " + mailbox + " with Comput Size " +
- task.compSize.to_s)
- task.send(mailbox)
- MSG::info("Master Done Sending " + task.name + " to " + mailbox)
- end
-
- # Sending Finalize MSG::Tasks
- MSG::info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.")
- for i in 0..slaveCount-1
- mailbox = "slave " + i.to_s
- finalize_task = Task.new("finalize",0,0)
- finalize_task.send(mailbox)
- end
- MSG::info("Master : Everything's Done")
- end
-end
-\endverbatim
+\until end_of_master
+
the class MSG::Task contains methods that allows the management of the native MSG tasks.
in master ruby code we used :
- <i>MSG::Task.new(task_name,compute_size,communication_size)</i> : to instanciate a new task.
- <i>MSG::Task.name</i> : to get the task's name.
\li Slave code
-\verbatim
-#################################################
-# Class Slave
-#################################################
-class Slave < MSG::Process
-
- def main(args)
- mailbox = "slave " + args[0]
- for i in 0..args.size-1
- MSG::debug("args["+String(i)+"]="+args[i])
- end
-
- while true
- task = Task.receive(mailbox)
- if (task.name == "finalize")
- break
- end
- task.execute
- MSG::debug("Slave '" + mailbox + "' done executing task "+ task.name + ".")
- end
- MSG::info("I'm done, see you")
- end
-end
-\endverbatim
-to receive a task , we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
+\until end_of_slave
+to receive a task, we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
\li Main chunk
-\verbatim
-if (ARGV.length == 2)
- MSG.createEnvironment(ARGV[0])
- MSG.deployApplication(ARGV[1])
-else
- MSG.createEnvironment("platform.xml")
- MSG.deployApplication("deploy.xml")
-end
-MSG.run
-puts "Simulation time : " + MSG.getClock .to_s
-MSG.exit
-\endverbatim
+\until MSG.exit
+
- <i>MSG.createEnvironment(platform_file)</i> : set up the environment
- <i>MSG.deployApplication(deployment_file)</i> : load the deployment file description.
- <i>MSG.run</i> : run the simulation
\li inheritence
- another 'object-oriented' way to do it , is to make your own 'task' class that inherit from MSG::Task ,
- and contains data you want to deal with , the only 'tricky' thing is that "the initializer" method has no effect !
+ another 'object-oriented' way to do it, is to make your own 'task' class that inherit from MSG::Task ,
+ and contains data you want to deal with, the only 'tricky' thing is that "the initializer" method has no effect !
- the use of some getter/setter methods would be the simple way to manage your data :)
+ the use of some getter/setter methods would be the simple way to manage your data :)
\verbatim
class PingPongTask < MSG::Task
# The initialize method has no effect
header files with tons of __declspec(dllexport) cruft. We only need to do so
for data, but there is no public data in SimGrid so we are good.
+