Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Avoid warning
[simgrid.git] / examples / msg / alias / masterslave_forwarder_with_alias.c
index a389a76..19e967f 100644 (file)
-/*     $Id: masterslave_forwarder.c 5108 2007-12-04 16:29:05Z mquinson $        */\r
-\r
-/* Copyright (c) 2002,2003,2004 Arnaud Legrand. All rights reserved.        */\r
-\r
-/* This program is free software; you can redistribute it and/or modify it\r
- * under the terms of the license (GNU LGPL) which comes with this package. */\r
-\r
-#include <stdio.h>\r
-#include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */\r
-#include "xbt/sysdep.h" /* calloc, printf */\r
-\r
-/* Create a log channel to have nice outputs. */\r
-#include "xbt/log.h"\r
-#include "xbt/asserts.h"\r
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,"Messages specific for this msg example");\r
-\r
-\r
-typedef enum {\r
-  PORT_22 = 0,\r
-  MAX_CHANNEL\r
-} channel_t;\r
-\r
-int master(int argc, char *argv[]);\r
-int slave(int argc, char *argv[]);\r
-int forwarder(int argc, char *argv[]);\r
-MSG_error_t test_all(const char *platform_file, const char *application_file);\r
-\r
-\r
-#define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */\r
-\r
-/** Emitter function  */\r
-int master(int argc, char *argv[])\r
-{\r
-       int alias_count = 0;\r
-       char** aliases = NULL;\r
-       m_task_t *todo = NULL;\r
-       int number_of_tasks = 0;\r
-       double task_comp_size = 0;\r
-       double task_comm_size = 0;\r
-\r
-\r
-       int i;\r
-\r
-       xbt_assert1(sscanf(argv[1],"%d", &number_of_tasks),"Invalid argument %s\n",argv[1]);\r
-       xbt_assert1(sscanf(argv[2],"%lg", &task_comp_size),"Invalid argument %s\n",argv[2]);\r
-       xbt_assert1(sscanf(argv[3],"%lg", &task_comm_size),"Invalid argument %s\n",argv[3]);\r
-\r
-       {\r
-               /*  Task creation */\r
-               char sprintf_buffer[64];\r
-\r
-               todo = xbt_new0(m_task_t,number_of_tasks);\r
-\r
-               for (i = 0; i < number_of_tasks; i++) \r
-               {\r
-                       sprintf(sprintf_buffer, "Task_%d", i);\r
-                       todo[i] = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL);\r
-               }\r
-       }\r
-\r
-       {                  \r
-               /* Process organisation */\r
-               alias_count = argc - 4;\r
-               aliases = xbt_new0(char*,alias_count);\r
-\r
-               for(i = 4; i < argc; i++) \r
-               {\r
-                       aliases[i-4] = strdup(argv[i]);\r
-               }\r
-       }\r
-\r
-       INFO2("Got %d aliases and %d tasks to process", alias_count,number_of_tasks);\r
-       \r
-       for (i = 0; i < alias_count; i++)\r
-               DEBUG1("%s", aliases[i]);\r
-\r
-       for (i = 0; i < number_of_tasks; i++) \r
-       {\r
-               INFO2("Sending \"%s\" to \"%s\"",todo[i]->name,aliases[i % alias_count]);\r
-               \r
-               if(!strcmp(MSG_host_get_name(MSG_host_self()), aliases[i % alias_count])) \r
-               {\r
-                       INFO0("Hey ! It's me ! :)");\r
-               }\r
-\r
-               MSG_task_send(todo[i], aliases[i % alias_count]);\r
-               INFO0("Sent");\r
-       }\r
-\r
-       INFO0("All tasks have been dispatched. Let's tell everybody the computation is over.");\r
-       \r
-       for (i = 0; i < alias_count; i++) \r
-               MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE),aliases[i]);\r
-\r
-       INFO0("Goodbye now!");\r
-       \r
-       for(i = 0; i < alias_count; i++)\r
-               free(aliases[i]);\r
-               \r
-       free(aliases);\r
-       free(todo);\r
-       return 0;\r
-} /* end_of_master */\r
-\r
-/** Receiver function  */\r
-int slave(int argc, char *argv[])\r
-{\r
-       m_task_t task = NULL;\r
-       int res;\r
-       \r
-       while(1) \r
-       {\r
-               res = MSG_task_receive(&(task), MSG_host_get_name(MSG_host_self()));\r
-               xbt_assert0(res == MSG_OK, "MSG_task_receive failed");\r
-       \r
-               INFO1("Received \"%s\"", MSG_task_get_name(task));\r
-       \r
-               if (!strcmp(MSG_task_get_name(task),"finalize")) \r
-               {\r
-                       MSG_task_destroy(task);\r
-                       break;\r
-               }\r
-\r
-               INFO1("Processing \"%s\"", MSG_task_get_name(task));\r
-               MSG_task_execute(task);\r
-               INFO1("\"%s\" done", MSG_task_get_name(task));\r
-               MSG_task_destroy(task);\r
-               task = NULL;\r
-       }\r
-       \r
-       INFO0("I'm done. See you!");\r
-       return 0;\r
-} /* end_of_slave */\r
-\r
-/** Forwarder function */\r
-int forwarder(int argc, char *argv[])\r
-{\r
-       int i;\r
-       int alias_count;\r
-       char** aliases;\r
-       \r
-       {                  /* Process organisation */\r
-               alias_count = argc - 1;\r
-               aliases = xbt_new0(char*,alias_count);\r
-       \r
-               for (i = 1; i < argc; i++) \r
-                       aliases[i-1] =strdup(argv[i]);\r
-       }\r
-\r
-       i=0;\r
-       \r
-       while(1) \r
-       {\r
-               m_task_t task = NULL;\r
-               int a;\r
-               \r
-               a = MSG_task_receive(&(task),MSG_host_get_name(MSG_host_self()));\r
-               \r
-               if (a == MSG_OK) \r
-               {\r
-                       INFO1("Received \"%s\"", MSG_task_get_name(task));\r
-                       \r
-                       if(MSG_task_get_data(task)==FINALIZE) \r
-                       {\r
-                               INFO0("All tasks have been dispatched. Let's tell everybody the computation is over.");\r
-                               \r
-                               for (i = 0; i < alias_count; i++) \r
-                                       MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE),aliases[i]);\r
-                               \r
-                               MSG_task_destroy(task);\r
-                               break;\r
-                       }\r
-               \r
-                       INFO2("Sending \"%s\" to \"%s\"",MSG_task_get_name(task),aliases[i% alias_count]);\r
-                       MSG_task_send(task, aliases[i % alias_count]);\r
-                       i++;\r
-               } \r
-               else \r
-               {\r
-                       INFO0("Hey ?! What's up ? ");\r
-                       xbt_assert0(0,"Unexpected behavior");\r
-               }\r
-       }\r
-       \r
-       for(i = 0; i < alias_count; i++)\r
-               free(aliases[i]);\r
-\r
-       INFO0("I'm done. See you!");\r
-       return 0;\r
-       \r
-} /* end_of_forwarder */\r
-\r
-/** Test function */\r
-MSG_error_t test_all(const char *platform_file,const char *application_file)\r
-{\r
-       MSG_error_t res = MSG_OK;\r
-\r
-       {       /*  Simulation setting */\r
-               MSG_set_channel_number(MAX_CHANNEL);\r
-               MSG_paje_output("msg_test.trace");\r
-               MSG_create_environment(platform_file);\r
-       }\r
-       \r
-       {\r
-               /*   Application deployment */\r
-               MSG_function_register("master", master);\r
-               MSG_function_register("slave", slave);\r
-               MSG_function_register("forwarder", forwarder);\r
-               MSG_launch_application(application_file);\r
-       }\r
-       \r
-       res = MSG_main();\r
-\r
-       INFO1("Simulation time %g",MSG_get_clock());\r
-       return res;\r
-} /* end_of_test_all */\r
-\r
-\r
-/** Main function */\r
-int main(int argc, char *argv[])\r
-{\r
-       MSG_error_t res = MSG_OK;\r
-       \r
-       MSG_global_init(&argc,argv);\r
-       \r
-       if (argc < 3) \r
-       {\r
-               printf ("Usage: %s platform_file deployment_file\n",argv[0]);\r
-               printf ("example: %s msg_platform.xml msg_deployment.xml\n",argv[0]);\r
-               exit(1);\r
-       }\r
-       \r
-       res = test_all(argv[1],argv[2]);\r
-       MSG_clean();\r
-       \r
-       if(res==MSG_OK)\r
-               return 0;\r
-       else\r
-               return 1;\r
-} /* end_of_main */\r
+/* Copyright (c) 2008, 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 <stdio.h>
+#include "msg/msg.h"            /* Yeah! If you want to use msg, you need to include msg/msg.h */
+#include "xbt/sysdep.h"         /* calloc, printf */
+
+/* Create a log channel to have nice outputs. */
+#include "xbt/log.h"
+#include "xbt/asserts.h"
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
+                             "Messages specific for this msg example");
+
+
+typedef enum {
+  PORT_22 = 0,
+  MAX_CHANNEL
+} channel_t;
+
+int master(int argc, char *argv[]);
+int slave(int argc, char *argv[]);
+int forwarder(int argc, char *argv[]);
+MSG_error_t test_all(const char *platform_file,
+                     const char *application_file);
+
+
+#define FINALIZE ((void*)221297)        /* a magic number to tell people to stop working */
+
+/** Emitter function  */
+int master(int argc, char *argv[])
+{
+  int alias_count = 0;
+  char **aliases = NULL;
+  m_task_t *todo = NULL;
+  int number_of_tasks = 0;
+  double task_comp_size = 0;
+  double task_comm_size = 0;
+  int i;
+  int read;
+
+  read = sscanf(argv[1], "%d", &number_of_tasks);
+  xbt_assert1(read, "Invalid argument %s\n", argv[1]);
+  read = sscanf(argv[2], "%lg", &task_comp_size);
+  xbt_assert1(read, "Invalid argument %s\n", argv[2]);
+  read = sscanf(argv[3], "%lg", &task_comm_size);
+  xbt_assert1(read, "Invalid argument %s\n", argv[3]);
+
+  {
+    /*  Task creation */
+    char sprintf_buffer[64];
+
+    todo = xbt_new0(m_task_t, number_of_tasks);
+
+    for (i = 0; i < number_of_tasks; i++) {
+      sprintf(sprintf_buffer, "Task_%d", i);
+      todo[i] =
+          MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size,
+                          NULL);
+    }
+  }
+
+  {
+    /* Process organisation */
+    alias_count = argc - 4;
+    aliases = xbt_new0(char *, alias_count);
+
+    for (i = 4; i < argc; i++) {
+      aliases[i - 4] = strdup(argv[i]);
+    }
+  }
+
+  XBT_INFO("Got %d aliases and %d tasks to process", alias_count,
+        number_of_tasks);
+
+  for (i = 0; i < alias_count; i++)
+    XBT_DEBUG("%s", aliases[i]);
+
+  for (i = 0; i < number_of_tasks; i++) {
+    XBT_INFO("Sending \"%s\" to \"%s\"", todo[i]->name,
+          aliases[i % alias_count]);
+
+    if (!strcmp
+        (MSG_host_get_name(MSG_host_self()), aliases[i % alias_count])) {
+      XBT_INFO("Hey ! It's me ! :)");
+    }
+
+    MSG_task_send(todo[i], aliases[i % alias_count]);
+    XBT_INFO("Sent");
+  }
+
+  XBT_INFO
+      ("All tasks have been dispatched. Let's tell everybody the computation is over.");
+
+  for (i = 0; i < alias_count; i++)
+    MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE), aliases[i]);
+
+  XBT_INFO("Goodbye now!");
+
+  for (i = 0; i < alias_count; i++)
+    free(aliases[i]);
+
+  free(aliases);
+  free(todo);
+  return 0;
+}                               /* end_of_master */
+
+/** Receiver function  */
+int slave(int argc, char *argv[])
+{
+  m_task_t task = NULL;
+  int res;
+
+  while (1) {
+    res = MSG_task_receive(&(task), MSG_host_get_name(MSG_host_self()));
+    xbt_assert0(res == MSG_OK, "MSG_task_receive failed");
+
+    XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
+
+    if (!strcmp(MSG_task_get_name(task), "finalize")) {
+      MSG_task_destroy(task);
+      break;
+    }
+
+    XBT_INFO("Processing \"%s\"", MSG_task_get_name(task));
+    MSG_task_execute(task);
+    XBT_INFO("\"%s\" done", MSG_task_get_name(task));
+    MSG_task_destroy(task);
+    task = NULL;
+  }
+
+  XBT_INFO("I'm done. See you!");
+  return 0;
+}                               /* end_of_slave */
+
+/** Forwarder function */
+int forwarder(int argc, char *argv[])
+{
+  int i;
+  int alias_count;
+  char **aliases;
+
+  {                             /* Process organisation */
+    alias_count = argc - 1;
+    aliases = xbt_new0(char *, alias_count);
+
+    for (i = 1; i < argc; i++)
+      aliases[i - 1] = strdup(argv[i]);
+  }
+
+  i = 0;
+
+  while (1) {
+    m_task_t task = NULL;
+    int a;
+
+    a = MSG_task_receive(&(task), MSG_host_get_name(MSG_host_self()));
+
+    if (a == MSG_OK) {
+      XBT_INFO("Received \"%s\"", MSG_task_get_name(task));
+
+      if (MSG_task_get_data(task) == FINALIZE) {
+        XBT_INFO
+            ("All tasks have been dispatched. Let's tell everybody the computation is over.");
+
+        for (i = 0; i < alias_count; i++)
+          MSG_task_send(MSG_task_create("finalize", 0, 0, FINALIZE),
+                        aliases[i]);
+
+        MSG_task_destroy(task);
+        break;
+      }
+
+      XBT_INFO("Sending \"%s\" to \"%s\"", MSG_task_get_name(task),
+            aliases[i % alias_count]);
+      MSG_task_send(task, aliases[i % alias_count]);
+      i++;
+    } else {
+      XBT_INFO("Hey ?! What's up ? ");
+      xbt_die( "Unexpected behavior");
+    }
+  }
+
+  for (i = 0; i < alias_count; i++)
+    free(aliases[i]);
+
+  XBT_INFO("I'm done. See you!");
+  return 0;
+
+}                               /* end_of_forwarder */
+
+/** Test function */
+MSG_error_t test_all(const char *platform_file,
+                     const char *application_file)
+{
+  MSG_error_t res = MSG_OK;
+
+  {                             /*  Simulation setting */
+    MSG_set_channel_number(MAX_CHANNEL);
+    MSG_paje_output("msg_test.trace");
+    MSG_create_environment(platform_file);
+  }
+
+  {
+    /*   Application deployment */
+    MSG_function_register("master", master);
+    MSG_function_register("slave", slave);
+    MSG_function_register("forwarder", forwarder);
+    MSG_launch_application(application_file);
+  }
+
+  res = MSG_main();
+
+  XBT_INFO("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 < 3) {
+    printf("Usage: %s platform_file deployment_file\n", argv[0]);
+    printf("example: %s msg_platform.xml msg_deployment.xml\n", argv[0]);
+    exit(1);
+  }
+
+  res = test_all(argv[1], argv[2]);
+  MSG_clean();
+
+  if (res == MSG_OK)
+    return 0;
+  else
+    return 1;
+}                               /* end_of_main */