X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c5c447226e4b526926a548757f9f5d539530ef82..cac8d8d7625ed02e5112d2305c1f04a125682686:/doc/bindings.doc diff --git a/doc/bindings.doc b/doc/bindings.doc index 798e21dfd3..f88237a472 100644 --- a/doc/bindings.doc +++ b/doc/bindings.doc @@ -2,9 +2,14 @@ \htmlinclude .bindings.doc.toc -\section bindings_start Available bindings +\section bindings_binding_Java Java Binding +Simgrid-Java documentation. + +\section bindings_binding_Ruby Ruby Binding +Simgrid-Ruby documentation. + +\section bindings_binding_lua Lua Binding -\subsection bindings_binding_lua Lua Binding Most of Simgrid modules require a good level in C programming, since simgrid is used to be as standard C library. Sometime users prefer using some kind of « easy scripts » or a language easier to code with, for their works, which avoid dealing with C errors, and sometime an important gain of time. @@ -12,7 +17,7 @@ Besides Java Binding, Lua and Ruby bindings are available since version 3.4 of for MSG Module, and we are currenlty working on bindings for other modules. -\subsubsection bindings_binding_lua_about What is lua ? +\subsection bindings_binding_lua_about What is lua ? Lua 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 here). \subsubsection bindings_binding_lua_why Why lua ? @@ -28,7 +33,7 @@ Actually, the use of lua in Simgrid is quite simple, you have just to follow the - and … Running the Simulation. \dontinclude lua/masterslave/master.lua -\subsubsection bindings_binding_lua_example_master_slave Master/Slave Example +\subsection bindings_binding_lua_example_master_slave Master/Slave Example \li Master Code \until end_of_master @@ -46,7 +51,7 @@ this function return directly the task recevied. \li Set Environmenet and run application \until simgrid.clean() -\subsubsection bindings_binding_lua_example_data Exchanging Data +\subsection bindings_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. @@ -77,7 +82,7 @@ so you can exchange any kind of data (tables, matrix, strings,…) between proce You can find a complet example (matrix multiplication case) in the file example/lua/mult_matrix.lua. -\subsubsection bindings_binding_lua_example_bypass Bypass XML +\subsection bindings_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 ? We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files @@ -148,163 +153,4 @@ Yes, Here too you have to resgiter your application before running the simulatio the full example is distributed in the file examples/lua/master_slave_bypass.lua -\subsection bindings_binding_ruby Ruby Binding - - -\subsubsection bindings_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. - -\subsubsection bindings_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 MSG::Process ruby class, - with a 'main' function that describe the behaviour of the process during the simulation. -\li required stuff -\verbatim -require 'simgrid' -include MSG -\endverbatim - -\li Master code -\verbatim -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 - - -the class MSG::Task contains methods that allows the management of the native MSG tasks. -in master ruby code we used : - - MSG::Task.new(task_name,compute_size,communication_size) : to instanciate a new task. - - MSG::Task.send(mailbox) : to send the task via a mailbox alias. - - MSG::Task.name : to get the task's name. - -\li Slave code -\verbatim -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 - MSG::info("Slave '"+ mailbox +"' waiting for new task"); - task = Task.receive(mailbox) - if (task.name == "finalize") - break - end - task.execute - MSG::info("Slave '" + mailbox + "' done executing task "+ task.name + ".") - end - MSG::info("I'm done, see you") - end -end -\enverbatim -to receive a task, we use the method MSG::Task.receive(mailbox) that return a MSG:Task object (received task). - -\li Main chunk - -\verbatim -require 'simgrid' -include MSG -(...) - -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 - -- MSG.createEnvironment(platform_file) : set up the environment -- MSG.deployApplication(deployment_file) : load the deployment file description. -- MSG.run : run the simulation - -\subsubsection bindings_binding_ruby_data Exchanging data -ruby bindings provides two ways to exchange data between ruby processes. -\li MSG::Task.join & MSG::Task.data
- - the MSG::Task class contains 2 methods that allows a data exchange between 2 process. - - -MSG::Task.join : makes possible to join any kind of ruby data within a task. - \verbatim - ... - myTable = Array.new - myTable <<1<<-2<<45<<67<<87<<76<<89<<56<<78<<3<<-4<<99 - # Creates and send Task With the Table inside - task = MSG::Task.new("quicksort_task",taskComputeSize, taskCommunicationSize); - task.join(myTable); - ... - task.send(mailbox); - \endverbatim - -MSG::Task.data : to access to the data contained into the task. - \verbatim - ... - task = MSG::Task.receive(recv_mailbox.to_s) - table = task.data - quicksort(table,0,table.size-1) - ... - \endverbatim -you can find a complet example illustrating the use of those methods in file /example/ruby/Quicksort.rb - -\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 ! - - 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 - @time - def setTime(t) - @time = t - end - def getTime() - return @time - end -end - \endverbatim - you can find an example of use in file example/ruby/PingPong.rb - */ \ No newline at end of file