Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add Tchimou's illustration of an old bug to the tests.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 14 Jul 2008 09:29:30 +0000 (09:29 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 14 Jul 2008 09:29:30 +0000 (09:29 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5883 48e7efb5-ca39-0410-a469-dd3cf9ba447f

examples/msg/Makefile.am
examples/msg/parallel_task/parallel_task.tesh
examples/msg/parallel_task/test_ptask.c [new file with mode: 0644]
examples/msg/parallel_task/test_ptask_deployment.xml [new file with mode: 0644]
examples/msg/parallel_task/test_ptask_platform.xml [new file with mode: 0644]

index 9f7e094..9e90778 100644 (file)
@@ -23,6 +23,8 @@ EXTRA_DIST = msg_platform.xml \
              gtnets/r-n200-f50-s4-2-p.xml \
              gtnets/dogbone-d.xml \
              gtnets/dogbone-p.xml \
              gtnets/r-n200-f50-s4-2-p.xml \
              gtnets/dogbone-d.xml \
              gtnets/dogbone-p.xml \
+             parallel_task/test_ptask_deployment.xml \
+             parallel_task/test_ptask_platform.xml \
              priority/deployment_priority.xml \
              properties/deployment_properties.xml
 
              priority/deployment_priority.xml \
              properties/deployment_properties.xml
 
@@ -59,6 +61,7 @@ CLEANFILES = sendrecv/*~ \
              masterslave/masterslave_failure \
              masterslave/masterslave_bypass \
              parallel_task/parallel_task \
              masterslave/masterslave_failure \
              masterslave/masterslave_bypass \
              parallel_task/parallel_task \
+             parallel_task/test_ptask \
              priority/priority \
              properties/msg_prop
 
              priority/priority \
              properties/msg_prop
 
@@ -75,6 +78,7 @@ noinst_PROGRAMS = sendrecv/sendrecv \
                   masterslave/masterslave_failure \
                   masterslave/masterslave_bypass \
                   parallel_task/parallel_task \
                   masterslave/masterslave_failure \
                   masterslave/masterslave_bypass \
                   parallel_task/parallel_task \
+                  parallel_task/test_ptask \
                   priority/priority \
                   properties/msg_prop
 
                   priority/priority \
                   properties/msg_prop
 
@@ -99,6 +103,8 @@ suspend_suspend_LDADD   = $(top_builddir)/src/libsimgrid.la
 # parallel task example
 parallel_task_parallel_task_SOURCES = parallel_task/parallel_task.c
 parallel_task_parallel_task_LDADD   = $(top_builddir)/src/libsimgrid.la
 # parallel task example
 parallel_task_parallel_task_SOURCES = parallel_task/parallel_task.c
 parallel_task_parallel_task_LDADD   = $(top_builddir)/src/libsimgrid.la
+parallel_task_test_ptask_SOURCES = parallel_task/test_ptask.c
+parallel_task_test_ptask_LDADD   = $(top_builddir)/src/libsimgrid.la
 
 # playing with priorities example
 priority_priority_SOURCES = priority/priority.c
 
 # playing with priorities example
 priority_priority_SOURCES = priority/priority.c
index 512518c..0eec513 100644 (file)
@@ -6,3 +6,9 @@ $ $SG_TEST_EXENV parallel_task/parallel_task$EXEEXT ${srcdir:=.}/small_platform.
 > [0.000000] [xbt_cfg/INFO] type in variable = 2
 > [Ginette:test:(1) 0.009378] [msg_test/INFO] Goodbye now!
 > [0.009378] [msg_test/INFO] Simulation time 0.00937836
 > [0.000000] [xbt_cfg/INFO] type in variable = 2
 > [Ginette:test:(1) 0.009378] [msg_test/INFO] Goodbye now!
 > [0.009378] [msg_test/INFO] Simulation time 0.00937836
+
+$ $SG_TEST_EXENV parallel_task/test_ptask$EXEEXT ${srcdir:=.}/parallel_task/test_ptask_platform.xml ${srcdir:=.}/parallel_task/test_ptask_deployment.xml
+> [0.000000] [xbt_cfg/INFO] type in variable = 2
+> [Ginette:execute:(1) 1.000300] [msg_test/INFO] execution_time=1.0003 
+> [Ginette:redistribute:(2) 6.000900] [msg_test/INFO] redistribution_time=6.0009 
+> [6.000900] [msg_test/INFO] Simulation time 6.0009
diff --git a/examples/msg/parallel_task/test_ptask.c b/examples/msg/parallel_task/test_ptask.c
new file mode 100644 (file)
index 0000000..b74a2e2
--- /dev/null
@@ -0,0 +1,167 @@
+#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");
+
+int execute(int argc, char *argv[]);
+int redistribute(int argc, char *argv[]);
+MSG_error_t test_all(const char *platform_file,
+                    const char *application_file);
+
+typedef enum {
+  PORT_22 = 0,
+  MAX_CHANNEL
+} channel_t;
+
+
+int execute(int argc, char *argv[])
+{
+  char buffer[32];
+  int i, j;
+  m_host_t *m_host_list = NULL;
+  m_task_t task = NULL;
+  int host_list_size;
+  double *computation_duration = NULL;
+  double *communication_table = NULL;
+  double communication_amount;
+  double computation_amount;
+  double execution_time;
+
+
+  host_list_size = argc - 3;
+  DEBUG1("host_list_size=%d", host_list_size);
+  m_host_list = calloc(host_list_size, sizeof(m_host_t));
+  for (i = 1; i <= host_list_size; i++) {
+    m_host_list[i - 1] = MSG_get_host_by_name(argv[i]);
+    xbt_assert1(m_host_list[i - 1] != NULL,
+               "Unknown host %s. Stopping Now! ", argv[i]);
+  }
+
+  xbt_assert1(sscanf(argv[argc - 2], "%lg", &computation_amount),
+             "Invalid argument %s\n",argv[argc - 2]);
+  xbt_assert1(sscanf(argv[argc - 1], "%lg", &communication_amount),
+             "Invalid argument %s\n",argv[argc - 1]);
+  computation_duration = (double *) calloc(host_list_size, sizeof(double));
+  communication_table =
+      (double *) calloc(host_list_size * host_list_size, sizeof(double));
+  for (i = 0; i < host_list_size; i++) {
+    computation_duration[i] = computation_amount / host_list_size;
+    for (j = 0; j < host_list_size; j++)
+      communication_table[i * host_list_size + j]  =
+       communication_amount / (host_list_size * host_list_size);
+  }
+
+  sprintf(buffer, "redist#0\n");
+  task = MSG_parallel_task_create(buffer,
+                                 host_list_size,
+                                 m_host_list,
+                                 computation_duration,
+                                 communication_table, NULL);
+
+  execution_time = MSG_get_clock();
+  MSG_parallel_task_execute(task);
+  execution_time = MSG_get_clock() - execution_time;
+
+  INFO1("execution_time=%g ", execution_time);
+
+  return 0;
+}
+
+
+int redistribute(int argc, char *argv[])
+{
+  char buffer[32];
+  int i, j;
+  m_host_t *m_host_list = NULL;
+  m_task_t task = NULL;
+  int host_list_size;
+  double *computation_duration = NULL;
+  double *communication_table = NULL;
+  double communication_amount;
+  double redistribution_time;
+
+
+  host_list_size = argc - 2;
+  DEBUG1("host_list_size=%d", host_list_size);
+  m_host_list = calloc(host_list_size, sizeof(m_host_t));
+  for (i = 1; i <= host_list_size; i++) {
+    m_host_list[i - 1] = MSG_get_host_by_name(argv[i]);
+    xbt_assert1(m_host_list[i - 1] != NULL,
+               "Unknown host %s. Stopping Now! ", argv[i]);
+  }
+
+  xbt_assert1(sscanf(argv[argc - 1], "%lg", &communication_amount),
+             "Invalid argument %s\n",argv[argc - 1]);
+  computation_duration = (double *) calloc(host_list_size, sizeof(double));
+  communication_table =
+      (double *) calloc(host_list_size * host_list_size, sizeof(double));
+  for (i = 0; i < host_list_size; i++) {
+    for (j = 0; j < host_list_size; j++)
+      communication_table[i * host_list_size + j]  =
+       communication_amount / (host_list_size * host_list_size);
+  }
+
+  sprintf(buffer, "redist#0\n");
+  task = MSG_parallel_task_create(buffer,
+                                 host_list_size,
+                                 m_host_list,
+                                 computation_duration,
+                                 communication_table, NULL);
+
+  redistribution_time = MSG_get_clock();
+  MSG_parallel_task_execute(task);
+  redistribution_time = MSG_get_clock() - redistribution_time;
+
+  INFO1("redistribution_time=%g ", redistribution_time);
+
+  return 0;
+}
+
+
+MSG_error_t test_all(const char *platform_file,
+                    const char *application_file)
+{
+  MSG_error_t res = MSG_OK;
+
+
+  MSG_config("workstation_model","ptask_L07");
+
+  /*  Simulation setting */
+  MSG_set_channel_number(MAX_CHANNEL);
+  MSG_create_environment(platform_file);
+  
+  /*   Application deployment */
+  MSG_function_register("execute", execute);
+  MSG_function_register("redistribute", redistribute);
+  MSG_launch_application(application_file);
+  
+  res = MSG_main();
+
+  INFO1("Simulation time %g", MSG_get_clock());
+  return res;
+}
+
+
+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]);
+    exit(1);
+  }
+  res = test_all(argv[1], argv[2]);
+  MSG_clean();
+
+  if (res == MSG_OK)
+    return 0;
+  else
+    return 1;
+}
diff --git a/examples/msg/parallel_task/test_ptask_deployment.xml b/examples/msg/parallel_task/test_ptask_deployment.xml
new file mode 100644 (file)
index 0000000..4193bb5
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "simgrid.dtd">
+<platform version="2">
+  <!-- The master process (with some arguments) -->
+  <process host="Ginette" function="execute">
+     <argument value="Tremblay"/>
+     <argument value="Jupiter"/>
+     <argument value="Fafard"/> 
+     <argument value="Ginette"/>
+     <argument value="4e9"/>
+     <argument value="16e4"/>
+  </process>
+  <process host="Ginette" function="redistribute">
+    <argument value="Tremblay"/>
+    <argument value="Jupiter"/>
+    <argument value="Fafard"/> 
+    <argument value="Ginette"/>
+    <argument value="16e8"/>
+  </process>
+</platform>
diff --git a/examples/msg/parallel_task/test_ptask_platform.xml b/examples/msg/parallel_task/test_ptask_platform.xml
new file mode 100644 (file)
index 0000000..551ecde
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "simgrid.dtd">
+<platform version="2">
+  <!-- ljlkj -->
+  <host id="Tremblay" power="1e9"/>
+  <host id="Jupiter" power="1e9"/>
+  <host id="Fafard" power="1e9"/>
+  <host id="Ginette" power="1e9"/>
+  <link id="0" bandwidth="1e8" latency="100e-6"/>
+  <link id="1" bandwidth="1e8" latency="100e-6"/>
+  <link id="2" bandwidth="1e8" latency="100e-6"/>
+  <link id="3" bandwidth="1e8" latency="100e-6"/>
+  <link id="switch" bandwidth="1e8" latency="100e-6" sharing_policy="FATPIPE"/>
+  <link id="loopback" bandwidth="1e10" latency="1e-6" sharing_policy="FATPIPE"/>
+  <route src="Tremblay" dst="Tremblay"><link:ctn id="loopback"/></route>
+  <route src="Jupiter" dst="Jupiter"><link:ctn id="loopback"/></route>
+  <route src="Fafard" dst="Fafard"><link:ctn id="loopback"/></route>
+  <route src="Ginette" dst="Ginette"><link:ctn id="loopback"/></route>
+  <route src="Tremblay" dst="Jupiter">
+    <link:ctn id="0"/><link:ctn id="switch"/><link:ctn id="1"/>
+  </route>
+  <route src="Tremblay" dst="Fafard">
+    <link:ctn id="0"/><link:ctn id="switch"/><link:ctn id="2"/>
+  </route>
+  <route src="Tremblay" dst="Ginette">
+    <link:ctn id="0"/><link:ctn id="switch"/><link:ctn id="3"/>
+  </route>
+  <route src="Jupiter" dst="Tremblay">
+    <link:ctn id="1"/><link:ctn id="switch"/><link:ctn id="0"/>
+  </route>
+  <route src="Jupiter" dst="Fafard">
+    <link:ctn id="1"/><link:ctn id="switch"/><link:ctn id="2"/>
+  </route>
+  <route src="Jupiter" dst="Ginette">
+    <link:ctn id="1"/><link:ctn id="switch"/><link:ctn id="3"/>
+  </route>
+  <route src="Fafard" dst="Tremblay">
+    <link:ctn id="2"/><link:ctn id="switch"/><link:ctn id="0"/>
+  </route>
+  <route src="Fafard" dst="Jupiter">
+    <link:ctn id="2"/><link:ctn id="switch"/><link:ctn id="1"/>
+  </route>
+  <route src="Fafard" dst="Ginette">
+    <link:ctn id="2"/><link:ctn id="switch"/><link:ctn id="3"/>
+  </route>
+  <route src="Ginette" dst="Tremblay">
+    <link:ctn id="3"/><link:ctn id="switch"/><link:ctn id="0"/>
+  </route>
+  <route src="Ginette" dst="Jupiter">
+    <link:ctn id="3"/><link:ctn id="switch"/><link:ctn id="1"/>
+  </route>
+  <route src="Ginette" dst="Fafard">
+    <link:ctn id="3"/><link:ctn id="switch"/><link:ctn id="2"/>
+  </route>
+</platform>