From: coldpeace Date: Thu, 29 Jul 2010 23:24:45 +0000 (+0000) Subject: add new example masterslave_console using lua console script to generate platform X-Git-Tag: v3_5~753 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bab16d8f35578ff1b187c31168c1a98b4c2eb255 add new example masterslave_console using lua console script to generate platform git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8068 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/examples/msg/masterslave/CMakeLists.txt b/examples/msg/masterslave/CMakeLists.txt index cd5f0cede2..0f59cf0e02 100644 --- a/examples/msg/masterslave/CMakeLists.txt +++ b/examples/msg/masterslave/CMakeLists.txt @@ -6,9 +6,11 @@ add_executable(masterslave_failure "masterslave_failure.c") add_executable(masterslave_forwarder "masterslave_forwarder.c") add_executable(masterslave_mailbox "masterslave_mailbox.c") add_executable(masterslave_bypass "masterslave_bypass.c") +add_executable(masterslave_console "masterslave_console.c") ### Add definitions for compile target_link_libraries(masterslave_forwarder simgrid m ) target_link_libraries(masterslave_failure simgrid m ) target_link_libraries(masterslave_mailbox simgrid m ) target_link_libraries(masterslave_bypass simgrid m ) +target_link_libraries(masterslave_console simgrid m ) diff --git a/examples/msg/masterslave/masterslave_console.c b/examples/msg/masterslave/masterslave_console.c new file mode 100644 index 0000000000..fa5543b6c0 --- /dev/null +++ b/examples/msg/masterslave/masterslave_console.c @@ -0,0 +1,130 @@ +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include +#include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */ +#include "surf/surfxml_parse.h" /* to override surf_parse and bypass the parser */ + +/* Create a log channel to have nice outputs. */ +#include "xbt/log.h" +XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, + "Messages specific for this msg example"); +#define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */ + +int master(int argc, char *argv[]); +int slave(int argc, char *argv[]); +MSG_error_t test_all(const char*); + +typedef enum { + PORT_22 = 0, + MAX_CHANNEL +} channel_t; + +/** Emitter function */ +int master(int argc, char *argv[]) +{ + long number_of_tasks = atol(argv[1]); + double task_comp_size = atof(argv[2]); + double task_comm_size = atof(argv[3]); + long slaves_count = atol(argv[4]); + int i; + + INFO2("Got %ld slaves and %ld tasks to process", slaves_count,number_of_tasks); + for (i = 0; i < number_of_tasks; i++) { + char mailbox[256]; + char sprintf_buffer[256]; + m_task_t task=NULL; + + sprintf(mailbox,"slave-%ld",i % slaves_count); + sprintf(sprintf_buffer, "Task_%d", i); + task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL); + if (number_of_tasks<10000 || i%10000 == 0) + INFO3("Sending \"%s\" (of %ld) to mailbox \"%s\"", task->name, number_of_tasks, mailbox); + MSG_task_send(task, mailbox); + } + + INFO0("All tasks have been dispatched. Let's tell everybody the computation is over."); + for (i = 0; i < slaves_count; i++) { + char mailbox[80]; + + sprintf(mailbox,"slave-%ld",i % slaves_count); + m_task_t finalize = MSG_task_create ("finalize", 0, 0, 0); + MSG_task_send(finalize, mailbox); + } + + INFO0("Goodbye now!"); + return 0; +} /* end_of_master */ + +/** Receiver function */ +int slave(int argc, char *argv[]) +{ + m_task_t task = NULL; + int res; + int id = -1; + char mailbox[80]; + + xbt_assert1(sscanf(argv[1],"%d", &id), + "Invalid argument %s\n",argv[1]); + + sprintf(mailbox,"slave-%d",id); + + while(1) { + res = MSG_task_receive(&(task), mailbox); + xbt_assert0(res == MSG_OK, "MSG_task_get failed"); + + INFO1("Received \"%s\"", MSG_task_get_name(task)); + if (!strcmp(MSG_task_get_name(task),"finalize")) { + MSG_task_destroy(task); + break; + } + + INFO1("Processing \"%s\"", MSG_task_get_name(task)); + MSG_task_execute(task); + INFO1("\"%s\" done", MSG_task_get_name(task)); + MSG_task_destroy(task); + task = NULL; + } + INFO0("I'm done. See you!"); + return 0; +} /* end_of_slave */ + +/** Test function */ +MSG_error_t test_all(const char *file)//(void) +{ + MSG_error_t res = MSG_OK; + /* Simulation setting */ + MSG_set_channel_number(MAX_CHANNEL); + /*start by registering functions before loading script */ + MSG_function_register("master", master); + MSG_function_register("slave", slave); + MSG_load_platform_script(file); + + res = MSG_main(); + + INFO1("Simulation time %g", MSG_get_clock()); + return res; +} /* end_of_test_all */ + +/** Main function */ +int main(int argc, char *argv[]) +{ + MSG_error_t res = MSG_OK; + + MSG_global_init(&argc, argv); + if (argc < 2) { + printf ("Usage: %s platform_script[.lua]\n",argv[0]); + printf ("example: %s platform_script.lua\n",argv[0]); + exit(1); + } + res = test_all(argv[1]); + MSG_clean(); + + if (res == MSG_OK) + return 0; + else + return 1; +} /* end_of_main */ diff --git a/examples/msg/masterslave/platform_script.lua b/examples/msg/masterslave/platform_script.lua new file mode 100644 index 0000000000..870a959723 --- /dev/null +++ b/examples/msg/masterslave/platform_script.lua @@ -0,0 +1,52 @@ +require "simgrid" + + 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}; + + -- create Links + for i=0,11 do + simgrid.Link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087}; + end + -- simgrid.Route.new(src_id,des_id,links_nb,links_list) + simgrid.Route.new("Tremblay","Jupiter",{"1"}); + simgrid.Route.new("Tremblay","Fafard",{"0","1","2","3","4","8"}); + simgrid.Route.new("Tremblay","Ginette",{"3","4","5"}); + simgrid.Route.new("Tremblay","Bourassa",{"0","1","3","2","4","6","7"}); + + simgrid.Route.new("Jupiter","Tremblay",{"1"}); + simgrid.Route.new("Jupiter","Fafard",{"0","1","2","3","4","8","9"}); + simgrid.Route.new("Jupiter","Ginette",{"3","4","5","9"}); + simgrid.Route.new("Jupiter","Bourassa",{"0","1","2","3","4","6","7","9"}); + + simgrid.Route.new("Fafard","Tremblay",{"0","1","2","3","4","8"}); + simgrid.Route.new("Fafard","Jupiter",{"0","1","2","3","4","8","9"}); + simgrid.Route.new("Fafard","Ginette",{"0","1","2","5","8"}); + simgrid.Route.new("Fafard","Bourassa",{"6","7","8"}); + + simgrid.Route.new("Ginette","Tremblay",{"3","4","5"}); + simgrid.Route.new("Ginette","Jupiter",{"3","4","5","9"}); + simgrid.Route.new("Ginette","Fafard",{"0","1","2","5","8"}); + simgrid.Route.new("Ginette","Bourassa",{"0","1","2","5","6","7"}); + + simgrid.Route.new("Bourassa","Tremblay",{"0","1","3","2","4","6","7"}); + simgrid.Route.new("Bourassa","Jupiter",{"0","1","2","3","4","6","7","9"}); + simgrid.Route.new("Bourassa","Fafard",{"6","7","8"}); + simgrid.Route.new("Bourassa","Ginette",{"0","1","2","5","6","7"}); + + --Save Platform + simgrid.register_platform(); + + --Set Application + simgrid.Host.setFunction("Tremblay","master",{"20","550000000","1000000","4"}); + simgrid.Host.setFunction("Bourassa","slave",{"0"}); + simgrid.Host.setFunction("Jupiter","slave",{"1"}); + simgrid.Host.setFunction("Fafard","slave",{"2"}); + simgrid.Host.setFunction("Ginette","slave",{"3"}); + + --Save Application + simgrid.register_application(); + +