\htmlinclude .bindings.doc.toc
+\section bindings_binding_Java Java Binding
+<a href="http://simgrid.gforge.inria.fr/simgrid-java/1.0/doc/">Simgrid-Java documentation</a>.
+
+\section bindings_binding_Ruby Ruby Binding
+<a href="http://simgrid.gforge.inria.fr/simgrid-ruby/1.0/doc/">Simgrid-Ruby documentation</a>.
+
\section 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.
the full example is distributed in the file examples/lua/master_slave_bypass.lua
-\section bindings_binding_ruby Ruby Binding
-
-\subsection bindings_binding_ruby_install How to install Simgrid-ruby
-
-To use Ruby with Simgrid you have to install some dependancies:
- \li Simgrid (see \ref installSimgrid_cmake). Be sure having set the environment variable "SIMGRID_ROOT".
- \li Ruby package.
-
-Then Download and install package Simgrid-ruby:
-\verbatim
-git clone git://scm.gforge.inria.fr/simgrid/simgrid-ruby.git
-cd simgrid-ruby
-cmake .
-\endverbatim
-
- Cmake output
-
-\verbatim
--- SITE : Linux_2.6.38-8-generic_x86_64
--- BUILDNAME : Simgrid-Ruby
--- Looking for lib SimGrid
--- Looking for lib SimGrid - found
--- Simgrid version : 3.6
--- Looking for gras.h
--- Looking for gras.h - found
--- Found Tesh: /home/user/Bureau/simgrid/git/bin/tesh
--- Found gras_stub_generator: /home/user/Bureau/simgrid/git/bin/gras_stub_generator
--- Found ruby: /usr/bin/ruby
--- Looking for ruby.h
--- Looking for ruby.h - found
--- Looking for confi.h
--- Looking for config.h - found
--- Looking for lib ruby
--- Looking for lib ruby - found
--- Lib ruby version: 1.9.1
--- Configuring done
--- Generating done
--- Build files have been written to: /home/user/workspace/simgrid-ruby/build
-\endverbatim
-
-\subsection bindings_binding_ruby_simgrid Use Ruby in Simgrid
-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.
-
-\subsection 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 <i>MSG::Process</i> 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 :
- - <i>MSG::Task.new(task_name,compute_size,communication_size)</i> : to instanciate a new task.
- - <i>MSG::Task.send(mailbox)</i> : to send the task via a mailbox alias.
- - <i>MSG::Task.name</i> : 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 <i>MSG::Task.receive(mailbox)</i> 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
-
-- <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
-
-\subsection bindings_binding_ruby_data Exchanging data
-ruby bindings provides two ways to exchange data between ruby processes.
-\li MSG::Task.join & MSG::Task.data <br/>
-
- the MSG::Task class contains 2 methods that allows a data exchange between 2 process.
-
- -<i>MSG::Task.join</i> : 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
- -<i>MSG::Task.data</i> : 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
-
-
-\section bindings_binding_java Java Binding
-
-\subsection bindings_binding_java_install How to install Simgrid-java
-
-To use java with Simgrid you have to install some dependancies:
- \li Simgrid (see \ref installSimgrid_cmake). Be sure having set the environment variable "SIMGRID_ROOT".
- \li Java packages: sun-java6-jdk and libgcj10-dev. If you cannot find the
-libgcj10-dev, try another version.
-
-Then Download and install package Simgrid-java:
-\verbatim
-git clone git://scm.gforge.inria.fr/simgrid/simgrid-java.git
-cd simgrid-java
-cmake .
-\endverbatim
-
-Cmake output
-\verbatim
--- SITE : Linux_2.6.38-8-generic_x86_64
--- BUILDNAME : Simgrid-Java
--- Looking for lib SimGrid
--- Looking for lib SimGrid - found
--- Simgrid version : 3.6
--- Looking for gras.h
--- Looking for gras.h - found
--- Found Tesh: /home/user/Bureau/simgrid/git/bin/tesh
--- Found gras_stub_generator: /home/user/Bureau/simgrid/git/bin/gras_stub_generator
--- Java version 1.6.0.22 configured successfully!
--- Looking for jni.h
--- Looking for jni.h - found
--- Add flags -I/usr/lib/jvm/java-6-openjdk/include
--- Looking for jni_md.h
--- Looking for jni_md.h - found
--- Found javac: /usr/bin/javac
--- Found jar: /usr/bin/jar
--- Configuring done
--- Generating done
--- Build files have been written to: /home/user/workspace/simgrid-java/build
-\endverbatim
-
-\subsection bindings_binding_java_use Use Java in Simgrid
-
-The use of java in simgrid is available for the MSG Module. You can find almost all MSG functionalities
-in Java code (\ref MSG_JAVA).
-
*/
\ No newline at end of file