X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0c06c178342da8b6df3c53a91107bae2078b45fb..320dd2ebba27932ac6cbec8b51dd50cc169a61f4:/testsuite/msg/msg_test.c diff --git a/testsuite/msg/msg_test.c b/testsuite/msg/msg_test.c index 56195fbc69..040474e603 100644 --- a/testsuite/msg/msg_test.c +++ b/testsuite/msg/msg_test.c @@ -1,28 +1,21 @@ /* $Id$ */ -/* Copyright (c) 2002,2004,2004 Arnaud Legrand. All rights reserved. */ +/* Copyright (c) 2002,2003,2004 Arnaud Legrand. 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. */ -/** \file msg_test.c - * \brief Test program for msg. -*/ - #include "msg/msg.h" -/** This flag enable the debugging messages from PRINT_DEBUG_MESSAGE() */ #define VERBOSE #include "messages.h" -int unix_emitter(int argc, char *argv[]); -int unix_receiver(int argc, char *argv[]); -int unix_forwarder(int argc, char *argv[]); -void test_all(const char *platform_file, const char *application_file, double sharing); +int master(int argc, char *argv[]); +int slave(int argc, char *argv[]); +int forwarder(int argc, char *argv[]); +void test_all(const char *platform_file, const char *application_file); -/** The names of the channels we will use in this simulation. There is - only one channel identified by the name PORT_22. */ typedef enum { PORT_22 = 0, MAX_CHANNEL @@ -39,42 +32,48 @@ void print_args(int argc, char** argv) fprintf(stderr,">\n"); } -/** The number of task each slave will process */ -#define NB_TASK 3 -int unix_emitter(int argc, char *argv[]) +int master(int argc, char *argv[]) { int slaves_count = 0; m_host_t *slaves = NULL; - int todo_count = 0; m_task_t *todo = NULL; + int number_of_tasks = 0; + double task_comp_size = 0; + double task_comm_size = 0; + int i; - PRINT_MESSAGE("Hello !"); + print_args(argc,argv); - { /* Process organisation */ - slaves_count = argc - 1; - slaves = calloc(slaves_count, sizeof(m_host_t)); - - for (i = 1; i < argc; i++) { - slaves[i-1] = MSG_get_host_by_name(argv[i]); - if(slaves[i-1]==NULL) { - PRINT_MESSAGE("Unknown host %s. Stopping Now! \n", argv[i]); - abort(); - } - } - } + ASSERT(sscanf(argv[1],"%d", &number_of_tasks), + "Invalid argument %s\n",argv[1]); + ASSERT(sscanf(argv[2],"%lg", &task_comp_size), + "Invalid argument %s\n",argv[2]); + ASSERT(sscanf(argv[3],"%lg", &task_comm_size), + "Invalid argument %s\n",argv[3]); { /* Task creation */ char sprintf_buffer[64]; - int slave = slaves_count; - todo = calloc(NB_TASK * slave, sizeof(m_task_t)); - todo_count = NB_TASK * slave; + todo = xbt_new0(m_task_t,number_of_tasks); - for (i = 0; i < NB_TASK * slave; i++) { + for (i = 0; i < number_of_tasks; i++) { sprintf(sprintf_buffer, "Task_%d", i); - todo[i] = MSG_task_create(sprintf_buffer, 5000, 10, NULL); + todo[i] = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL); + } + } + + { /* Process organisation */ + slaves_count = argc - 4; + slaves = calloc(slaves_count, sizeof(m_host_t)); + + for (i = 4; i < argc; i++) { + slaves[i-4] = MSG_get_host_by_name(argv[i]); + if(slaves[i-4]==NULL) { + PRINT_MESSAGE("Unknown host %s. Stopping Now! \n", argv[i]); + abort(); + } } } @@ -82,12 +81,12 @@ int unix_emitter(int argc, char *argv[]) for (i = 0; i < slaves_count; i++) PRINT_MESSAGE("\t %s\n", slaves[i]->name); - PRINT_MESSAGE("Got %d task to process :\n", todo_count); + PRINT_MESSAGE("Got %d task to process :\n", number_of_tasks); - for (i = 0; i < todo_count; i++) + for (i = 0; i < number_of_tasks; i++) PRINT_MESSAGE("\t\"%s\"\n", todo[i]->name); - for (i = 0; i < todo_count; i++) { + for (i = 0; i < number_of_tasks; i++) { PRINT_MESSAGE("Sending \"%s\" to \"%s\"\n", todo[i]->name, slaves[i % slaves_count]->name); @@ -96,101 +95,100 @@ int unix_emitter(int argc, char *argv[]) PRINT_MESSAGE("Send completed\n"); } + PRINT_MESSAGE("All tasks have been dispatched. Bye!\n"); free(slaves); free(todo); return 0; } -int unix_receiver(int argc, char *argv[]) +int slave(int argc, char *argv[]) { - int todo_count = 0; - m_task_t *todo = (m_task_t *) calloc(NB_TASK, sizeof(m_task_t)); - int i; - - PRINT_MESSAGE("Hello !"); print_args(argc,argv); - for (i = 0; i < NB_TASK;) { + while(1) { + m_task_t task = NULL; int a; - PRINT_MESSAGE("Awaiting Task %d \n", i); - a = MSG_task_get(&(todo[i]), PORT_22); + a = MSG_task_get(&(task), PORT_22); if (a == MSG_OK) { - todo_count++; - PRINT_MESSAGE("Received \"%s\" \n", todo[i]->name); - PRINT_MESSAGE("Processing \"%s\" \n", todo[i]->name); - MSG_task_execute(todo[i]); - PRINT_MESSAGE("\"%s\" done \n", todo[i]->name); - MSG_task_destroy(todo[i]); - i++; + PRINT_MESSAGE("Received \"%s\" \n", task->name); + PRINT_MESSAGE("Processing \"%s\" \n", task->name); + MSG_task_execute(task); + PRINT_MESSAGE("\"%s\" done \n", task->name); + MSG_task_destroy(task); } else { PRINT_MESSAGE("Hey ?! What's up ? \n"); DIE("Unexpected behaviour"); } } - free(todo); PRINT_MESSAGE("I'm done. See you!\n"); return 0; } -int unix_forwarder(int argc, char *argv[]) +int forwarder(int argc, char *argv[]) { - int todo_count = 0; - m_task_t *todo = (m_task_t *) calloc(NB_TASK, sizeof(m_task_t)); int i; + int slaves_count = argc - 1; + m_host_t *slaves = calloc(slaves_count, sizeof(m_host_t)); - PRINT_MESSAGE("Hello !"); print_args(argc,argv); - for (i = 0; i < NB_TASK;) { + { /* Process organisation */ + slaves_count = argc - 1; + slaves = calloc(slaves_count, sizeof(m_host_t)); + + for (i = 1; i < argc; i++) { + slaves[i-1] = MSG_get_host_by_name(argv[i]); + if(slaves[i-1]==NULL) { + PRINT_MESSAGE("Unknown host %s. Stopping Now! \n", argv[i]); + abort(); + } + } + } + + + while(1) { + m_task_t task = NULL; int a; - PRINT_MESSAGE("Awaiting Task %d \n", i); - a = MSG_task_get(&(todo[i]), PORT_22); + a = MSG_task_get(&(task), PORT_22); if (a == MSG_OK) { - todo_count++; - PRINT_MESSAGE("Received \"%s\" \n", todo[i]->name); - PRINT_MESSAGE("Processing \"%s\" \n", todo[i]->name); - MSG_task_execute(todo[i]); - PRINT_MESSAGE("\"%s\" done \n", todo[i]->name); - MSG_task_destroy(todo[i]); - i++; + PRINT_MESSAGE("Received \"%s\" \n", task->name); + PRINT_MESSAGE("Sending \"%s\" to \"%s\"\n", + task->name, + slaves[i % slaves_count]->name); + MSG_task_put(task, slaves[i % slaves_count], + PORT_22); } else { PRINT_MESSAGE("Hey ?! What's up ? \n"); DIE("Unexpected behaviour"); } } - free(todo); + PRINT_MESSAGE("I'm done. See you!\n"); return 0; } -void test_all(const char *platform_file,const char *application_file, double sharing) +void test_all(const char *platform_file,const char *application_file) { { /* Simulation setting */ - MSG_global_init(); - MSG_set_verbosity(MSG_SILENT); MSG_set_channel_number(MAX_CHANNEL); - if(sharing<=0) { - MSG_set_sharing_policy(MSG_TCP,.1); - } else { - MSG_set_sharing_policy(MSG_STORE_AND_FORWARD,sharing); - } MSG_create_environment(platform_file); } { /* Application deployment */ - MSG_function_register("master", unix_emitter); - MSG_function_register("slave", unix_receiver); + MSG_function_register("master", master); + MSG_function_register("slave", slave); + MSG_function_register("forwarder", forwarder); MSG_launch_application(application_file); } MSG_main(); - printf("Simulation time %Lg\n",MSG_getClock()); - MSG_clean(); + printf("Simulation time %g\n",MSG_getClock()); } int main(int argc, char *argv[]) { - test_all("msg_platform.txt","msg_deployment.txt",-.1); -/* test_all("msg_platform.txt","msg_deployment.txt",.1); */ + MSG_global_init_args(&argc,argv); + test_all("msg_platform.xml","msg_deployment.xml"); + MSG_clean(); return (0); }