SimGrid
3.7
Scalable simulation of distributed systems
|
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. Besides Java Binding, Lua and Ruby bindings are available since version 3.4 of Simgrid for MSG Module, and we are currenlty working on bindings for other modules.
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).
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.
Actually, the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird :
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.
task = simgrid.Task.new("data_task",task_comp,task_comm); task['matrix'] = my_matrix; task['table'] = my_table; task['message'] = "Hello from (Lua || Simgrid ) !! " … simgrid.Task.send(task,alias)
task = simgrid.Task.recv(alias); sender_matrix = task['matrix']; sender_table = task['table']; sender_message = task['message'] ...
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 ;) )
simgrid.AS.new{id="AS0",mode="Full"};
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};
for i=0,11 do simgrid.Link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087}; -- some crazy values ;) end
-- simgrid.Route.new(src_id,des_id,links_nb,links_list) simgrid.Route.new("Tremblay","Jupiter",1,{"1"}); simgrid.Route.new("Tremblay","Fafard",6,{"0","1","2","3","4","8"}); simgrid.Route.new("Tremblay","Ginette",3,{"3","4","5"}); simgrid.Route.new("Tremblay","Bourassa",7,{"0","1","3","2","4","6","7"}); simgrid.Route.new("Jupiter","Tremblay",1,{"1"}); simgrid.Route.new("Jupiter","Fafard",7,{"0","1","2","3","4","8","9"}); simgrid.Route.new("Jupiter","Ginette",4,{"3","4","5","9"}); simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"}); ...
simgrid.register_platform();
simgrid.Host.setFunction("Tremblay","Master",4,{"20","550000000","1000000","4"}); simgrid.Host.setFunction("Bourassa","Slave",1,{"0"}); simgrid.Host.setFunction("Jupiter","Slave",1,{"1"}); simgrid.Host.setFunction("Fafard","Slave",1,{"2"}); simgrid.Host.setFunction("Ginette","Slave",1,{"3"});
simgrid.register_application();
the full example is distributed in the file examples/lua/master_slave_bypass.lua
Back to the main Simgrid Documentation page |
The version of SimGrid documented here is v3.7. Documentation of other versions can be found in their respective archive files (directory doc/html). |
Generated by ![]() |