From 93425711d72657a979fd9188202ec63a35574fb5 Mon Sep 17 00:00:00 2001 From: alegrand Date: Mon, 14 Jul 2008 09:29:30 +0000 Subject: [PATCH 1/1] Add Tchimou's illustration of an old bug to the tests. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5883 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- examples/msg/Makefile.am | 6 + examples/msg/parallel_task/parallel_task.tesh | 6 + examples/msg/parallel_task/test_ptask.c | 167 ++++++++++++++++++ .../parallel_task/test_ptask_deployment.xml | 20 +++ .../msg/parallel_task/test_ptask_platform.xml | 55 ++++++ 5 files changed, 254 insertions(+) create mode 100644 examples/msg/parallel_task/test_ptask.c create mode 100644 examples/msg/parallel_task/test_ptask_deployment.xml create mode 100644 examples/msg/parallel_task/test_ptask_platform.xml diff --git a/examples/msg/Makefile.am b/examples/msg/Makefile.am index 9f7e094a7e..9e90778ec1 100644 --- a/examples/msg/Makefile.am +++ b/examples/msg/Makefile.am @@ -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 \ + parallel_task/test_ptask_deployment.xml \ + parallel_task/test_ptask_platform.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 \ + parallel_task/test_ptask \ priority/priority \ properties/msg_prop @@ -75,6 +78,7 @@ noinst_PROGRAMS = sendrecv/sendrecv \ masterslave/masterslave_failure \ masterslave/masterslave_bypass \ parallel_task/parallel_task \ + parallel_task/test_ptask \ 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_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 diff --git a/examples/msg/parallel_task/parallel_task.tesh b/examples/msg/parallel_task/parallel_task.tesh index 512518c0e9..0eec513b71 100644 --- a/examples/msg/parallel_task/parallel_task.tesh +++ b/examples/msg/parallel_task/parallel_task.tesh @@ -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 + +$ $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 index 0000000000..b74a2e2bd2 --- /dev/null +++ b/examples/msg/parallel_task/test_ptask.c @@ -0,0 +1,167 @@ +#include +#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 index 0000000000..4193bb5786 --- /dev/null +++ b/examples/msg/parallel_task/test_ptask_deployment.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/examples/msg/parallel_task/test_ptask_platform.xml b/examples/msg/parallel_task/test_ptask_platform.xml new file mode 100644 index 0000000000..551ecde83a --- /dev/null +++ b/examples/msg/parallel_task/test_ptask_platform.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.20.1