X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6467d4e0fe4610f53d60ee72bd9dda0fbc20570f..d8178c8f3d3ade4087f2d219a6312222190c85d2:/examples/msg/actions/actions.c diff --git a/examples/msg/actions/actions.c b/examples/msg/actions/actions.c index 41d35f9e70..e1a0a70d40 100644 --- a/examples/msg/actions/actions.c +++ b/examples/msg/actions/actions.c @@ -11,7 +11,7 @@ #include "xbt.h" /* calloc, printf */ #include "simgrid_config.h" /* getline */ -XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, +XBT_LOG_NEW_DEFAULT_CATEGORY(actions, "Messages specific for this msg example"); int communicator_size=0; @@ -36,20 +36,29 @@ static double parse_double(const char *string) { /* My actions */ static void send(xbt_dynar_t action) { - char *name = xbt_str_join(action, " "); - char *to = xbt_dynar_get_as(action, 2, char *); + char *name = NULL; + char to[250]; char *size = xbt_dynar_get_as(action, 3, char *); double clock = MSG_get_clock(); + sprintf (to,"%s_%s", MSG_process_get_name(MSG_process_self()), + xbt_dynar_get_as(action, 2, char *)); + // char *to = xbt_dynar_get_as(action, 2, char *); + + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + name = xbt_str_join(action, " "); + DEBUG2("Entering Send: %s (size: %lg)", name, parse_double(size)); MSG_task_send(MSG_task_create(name, 0, parse_double(size), NULL), to); - INFO2("%s %f", name, MSG_get_clock()-clock); - free(name); + DEBUG2("%s %f", name, MSG_get_clock()-clock); + + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + free(name); } static int spawned_send(int argc, char *argv[]) { - DEBUG3("%s: Sending %s on %s", MSG_process_self()->name, + DEBUG3("%s: Sending %s on %s", MSG_process_get_name(MSG_process_self()), argv[1],argv[0]); MSG_task_send(MSG_task_create(argv[0], 0, parse_double(argv[1]), NULL), argv[0]); @@ -59,7 +68,8 @@ static int spawned_send(int argc, char *argv[]) static void Isend(xbt_dynar_t action) { char spawn_name[80]; - char *to = xbt_dynar_get_as(action, 2, char *); + char to[250]; + // char *to = xbt_dynar_get_as(action, 2, char *); char *size = xbt_dynar_get_as(action, 3, char *); char **myargv; m_process_t comm_helper; @@ -67,44 +77,56 @@ static void Isend(xbt_dynar_t action) DEBUG1("Isend on %s: spawn process ", MSG_process_get_name(MSG_process_self())); + sprintf (to,"%s_%s", MSG_process_get_name(MSG_process_self()), + xbt_dynar_get_as(action, 2, char *)); myargv = (char**) calloc (3, sizeof (char*)); myargv[0] = xbt_strdup(to); myargv[1] = xbt_strdup(size); myargv[2] = NULL; - sprintf(spawn_name,"%s_wait",MSG_process_get_name(MSG_process_self())); + // sprintf(spawn_name,"%s_wait",MSG_process_get_name(MSG_process_self())); + sprintf(spawn_name,"%s_wait",to); comm_helper = MSG_process_create_with_arguments(spawn_name, spawned_send, NULL, MSG_host_self(), 2, myargv); - INFO2("%s %f",xbt_str_join(action, " "), MSG_get_clock()-clock); + DEBUG2("%s %f",xbt_str_join(action, " "), MSG_get_clock()-clock); } static void recv(xbt_dynar_t action) { - char *name = xbt_str_join(action, " "); + char *name = NULL; + char mailbox_name[250]; m_task_t task = NULL; double clock = MSG_get_clock(); //FIXME: argument of action ignored so far; semantic not clear //char *from=xbt_dynar_get_as(action,2,char*); + sprintf (mailbox_name,"%s_%s", xbt_dynar_get_as(action, 2, char *), + MSG_process_get_name(MSG_process_self())); + + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + name = xbt_str_join(action, " "); DEBUG1("Receiving: %s", name); - MSG_task_receive(&task, MSG_process_get_name(MSG_process_self())); - INFO2("%s %f", name, MSG_get_clock()-clock); + MSG_task_receive(&task, mailbox_name); + // MSG_task_receive(&task, MSG_process_get_name(MSG_process_self())); + DEBUG2("%s %f", name, MSG_get_clock()-clock); MSG_task_destroy(task); - free(name); + + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + 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()); - DEBUG1("Receiving on %s", name); - MSG_task_receive(&task, name); + DEBUG1("Receiving on %s", argv[0]); + MSG_task_receive(&task, argv[0]); DEBUG1("Received %s", MSG_task_get_name(task)); DEBUG1("waiter on %s", MSG_process_get_name(MSG_process_self())); - MSG_task_send(MSG_task_create("waiter",0,0,NULL),MSG_process_get_name(MSG_process_self())); + MSG_task_send(MSG_task_create("waiter",0,0,NULL), + MSG_process_get_name(MSG_process_self())); MSG_task_destroy(task); return 0; @@ -113,19 +135,27 @@ static int spawned_recv(int argc, char *argv[]) static void Irecv(xbt_dynar_t action) { - char *name = xbt_str_join(action, " "); + char *name; m_process_t comm_helper; + char mailbox_name[250]; + char **myargv; double clock = MSG_get_clock(); DEBUG1("Irecv on %s: spawn process ", MSG_process_get_name(MSG_process_self())); - sprintf(name,"%s_wait",MSG_process_get_name(MSG_process_self())); - comm_helper = MSG_process_create(name,spawned_recv, - (void *) MSG_process_get_name(MSG_process_self()), - MSG_host_self()); - - INFO2("%s %f", xbt_str_join(action, " "), - MSG_get_clock()-clock); + sprintf (mailbox_name,"%s_%s", xbt_dynar_get_as(action, 2, char *), + MSG_process_get_name(MSG_process_self())); + name = bprintf("%s_wait",MSG_process_get_name(MSG_process_self())); + myargv = (char**) calloc (2, sizeof (char*)); + + myargv[0] = xbt_strdup(mailbox_name); + myargv[1] = NULL; + comm_helper = MSG_process_create_with_arguments(name,spawned_recv, + NULL, MSG_host_self(), + 1, myargv); + + DEBUG2("%s %f", xbt_str_join(action, " "), + MSG_get_clock()-clock); free(name); } @@ -133,26 +163,37 @@ static void Irecv(xbt_dynar_t action) static void wait_action(xbt_dynar_t action) { - char *name = xbt_str_join(action, " "); + char *name = NULL; char task_name[80]; m_task_t task = NULL; double clock = MSG_get_clock(); + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + name = xbt_str_join(action, " "); + DEBUG1("Entering %s", name); sprintf(task_name,"%s_wait",MSG_process_get_name(MSG_process_self())); + DEBUG1("wait: %s", task_name); MSG_task_receive(&task,task_name); MSG_task_destroy(task); - INFO2("%s %f", name, MSG_get_clock()-clock); - free(name); + DEBUG2("%s %f", name, MSG_get_clock()-clock); + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + free(name); } static void barrier (xbt_dynar_t action) { - char *name = xbt_str_join(action, " "); - INFO1("barrier: %s", name); - + char *name = NULL; - free(name); + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + name = xbt_str_join(action, " "); + + DEBUG1("barrier: %s", name); + + THROW_UNIMPLEMENTED; + + if (XBT_LOG_ISENABLED(actions,xbt_log_priority_debug)) + free(name); } @@ -162,6 +203,7 @@ static void reduce(xbt_dynar_t action) char *name; char task_name[80]; char spawn_name[80]; + char **myargv; char *comm_size = xbt_dynar_get_as(action, 2, char *); char *comp_size = xbt_dynar_get_as(action, 3, char *); m_process_t comm_helper=NULL; @@ -183,19 +225,25 @@ static void reduce(xbt_dynar_t action) name = bprintf("reduce_%d", counters->reduce_counter++); - if (!strcmp(process_name, "process0")){ + if (!strcmp(process_name, "p0")){ DEBUG2("%s: %s is the Root",name, process_name); for(i=1;ibcast_counter++); - if (!strcmp(process_name, "process0")){ + if (!strcmp(process_name, "p0")){ DEBUG2("%s: %s is the Root",name, process_name); for(i=1;iallReduce_counter++); - if (!strcmp(process_name, "process0")){ + if (!strcmp(process_name, "p0")){ DEBUG2("%s: %s is the Root",name, process_name); for(i=1;i