From: suter Date: Thu, 22 Oct 2009 18:12:25 +0000 (+0000) Subject: Add Irecv and wait actions and corresponding example X-Git-Tag: SVN~902 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f2dfa42a467e09f316eec0f0c948b1609c4e1fb8 Add Irecv and wait actions and corresponding example git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6812 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/examples/msg/actions/actions.c b/examples/msg/actions/actions.c index 8ca04c2072..b6b74897a4 100644 --- a/examples/msg/actions/actions.c +++ b/examples/msg/actions/actions.c @@ -10,9 +10,15 @@ #include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */ #include "xbt.h" /* calloc, printf */ +typedef enum { + LOCAL = 0, + MAX_CHANNEL +} channel_t; + XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example"); + /* Helper function */ static double parse_double(const char *string) { double value; @@ -49,6 +55,48 @@ static void recv(xbt_dynar_t action) free(name); } +static int spawned_recv(int argc, char *argv[]) +{ + m_task_t task = NULL; + char* name = (char *) MSG_process_get_data(MSG_process_self()); + INFO1("Receiving on %s", name); + MSG_task_receive(&task, name); + INFO1("Received %s", MSG_task_get_name(task)); + + MSG_task_put(MSG_task_create("waiter", 0, 0, NULL), + MSG_process_get_host(MSG_process_self()), LOCAL); + + MSG_task_destroy(task); + return 0; +} + +static void Irecv(xbt_dynar_t action) +{ + char *name = xbt_str_join(action, " "); + m_process_t comm_helper; + + INFO1("Irecv on %s: spawn process ", + MSG_process_get_name(MSG_process_self())); + + comm_helper = + MSG_process_create("spawned_recv", + spawned_recv, + (void *) MSG_process_get_name(MSG_process_self()), + MSG_process_get_host(MSG_process_self())); + + free(name); +} + +static void wait(xbt_dynar_t action) +{ + char *name = xbt_str_join(action, " "); + m_task_t task = NULL; + INFO1("wait: %s", name); + MSG_task_get(&(task), LOCAL); + INFO1("waited: %s", name); + free(name); +} + static void sleep(xbt_dynar_t action) { char *name = xbt_str_join(action, " "); @@ -86,6 +134,7 @@ int main(int argc, char *argv[]) } /* Simulation setting */ + MSG_set_channel_number(MAX_CHANNEL); MSG_create_environment(argv[1]); /* No need to register functions as in classical MSG programs: the actions get started anyway */ @@ -94,6 +143,8 @@ int main(int argc, char *argv[]) /* Action registration */ MSG_action_register("send", send); MSG_action_register("recv", recv); + MSG_action_register("Irecv", Irecv); + MSG_action_register("wait", wait); MSG_action_register("sleep", sleep); MSG_action_register("compute", compute); diff --git a/examples/msg/actions/actions_deployment.xml b/examples/msg/actions/actions_deployment.xml index e854ed0369..7a401b4f6a 100644 --- a/examples/msg/actions/actions_deployment.xml +++ b/examples/msg/actions/actions_deployment.xml @@ -3,4 +3,5 @@ + diff --git a/examples/msg/actions/actions_with_isend.txt b/examples/msg/actions/actions_with_isend.txt new file mode 100644 index 0000000000..3e59843f4a --- /dev/null +++ b/examples/msg/actions/actions_with_isend.txt @@ -0,0 +1,14 @@ +# sample action file +tutu send toto 1e9 +tutu compute 1e9 +tutu recv + +toto Irecv +toto compute 1e9 +toto wait +toto send titi 1e9 + +titi Irecv +titi compute 5e8 +titi wait +titi send tutu 1e9 \ No newline at end of file diff --git a/examples/msg/actions/homogeneous_3_hosts.xml b/examples/msg/actions/homogeneous_3_hosts.xml new file mode 100644 index 0000000000..50b720b4da --- /dev/null +++ b/examples/msg/actions/homogeneous_3_hosts.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +