Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cleaned up action code to destroy completed actions. This fixes a timing bug.
authormarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 9 Nov 2007 17:58:00 +0000 (17:58 +0000)
committermarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 9 Nov 2007 17:58:00 +0000 (17:58 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5019 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/smpi/private.h
src/smpi/smpi_bench.c
src/smpi/smpi_global.c
src/smpi/smpi_sender.c
src/smpi/smpi_util.c

index 4b92c75..8e215a6 100644 (file)
@@ -136,7 +136,7 @@ void smpi_bench_skip(void);
 void smpi_global_init(void);
 void smpi_global_destroy(void);
 int smpi_host_index(void);
-int smpi_run_simulation(int argc, char **argv);
+int smpi_run_simulation(int *argc, char **argv);
 int smpi_create_request(void *buf, int count, smpi_mpi_datatype_t datatype,
        int src, int dst, int tag, smpi_mpi_communicator_t comm, smpi_mpi_request_t *request);
 
index 81ed0f0..8f43a58 100644 (file)
@@ -29,6 +29,7 @@ double smpi_bench_end()
        SIMIX_register_action_to_condition(action, smpi_global->timer_cond);
        SIMIX_cond_wait(smpi_global->timer_cond, smpi_global->timer_mutex);
        SIMIX_unregister_action_to_condition(action, smpi_global->timer_cond);
+       SIMIX_action_destroy(action);
 
        SIMIX_mutex_unlock(smpi_global->timer_mutex);
 
@@ -43,11 +44,12 @@ void smpi_bench_skip() {
        SIMIX_mutex_lock(smpi_global->timer_mutex);
 
        host   = SIMIX_host_self();
-        action = SIMIX_action_execute(host, "computation", duration * SMPI_DEFAULT_SPEED);
+       action = SIMIX_action_execute(host, "computation", duration * SMPI_DEFAULT_SPEED);
 
        SIMIX_register_action_to_condition(action, smpi_global->timer_cond);
        SIMIX_cond_wait(smpi_global->timer_cond, smpi_global->timer_mutex);
        SIMIX_unregister_action_to_condition(action, smpi_global->timer_cond);
+       SIMIX_action_destroy(action);
 
        SIMIX_mutex_unlock(smpi_global->timer_mutex);
 
index af72607..aeec12f 100644 (file)
@@ -238,7 +238,7 @@ int smpi_host_index()
        return hdata->index;
 }
 
-int smpi_run_simulation(int argc, char **argv)
+int smpi_run_simulation(int *argc, char **argv)
 {
        xbt_fifo_item_t cond_item   = NULL;
        smx_cond_t   cond           = NULL;
@@ -250,7 +250,7 @@ int smpi_run_simulation(int argc, char **argv)
 
        srand(SMPI_RAND_SEED);
 
-       SIMIX_global_init(&argc, argv);
+       SIMIX_global_init(argc, argv);
 
        SIMIX_function_register("smpi_simulated_main", smpi_simulated_main);
        SIMIX_function_register("smpi_sender",         smpi_sender);
index 0035d63..c1c8050 100644 (file)
@@ -95,6 +95,7 @@ int smpi_sender(int argc, char **argv)
                        SIMIX_register_action_to_condition(action, request->cond);
                        SIMIX_cond_wait(request->cond, request->mutex);
                        SIMIX_unregister_action_to_condition(action, request->cond);
+                       SIMIX_action_destroy(action);
 
                        SIMIX_mutex_unlock(request->mutex);
 
index 59518a2..d1f1969 100644 (file)
@@ -18,26 +18,23 @@ int smpi_gettimeofday(struct timeval *tv, struct timezone *tz)
 
 unsigned int smpi_sleep(unsigned int seconds)
 {
-       smx_mutex_t mutex;
-       smx_cond_t cond;
        smx_host_t host;
        smx_action_t action;
 
        smpi_bench_end();
-       host   = SIMIX_host_self();
+
+       host = SIMIX_host_self();
+
+       SIMIX_mutex_lock(smpi_global->timer_mutex);
+
        action = SIMIX_action_sleep(host, seconds);
-       mutex  = SIMIX_mutex_init();
-       cond   = SIMIX_cond_init();
-
-       SIMIX_mutex_lock(mutex);
-       SIMIX_register_action_to_condition(action, cond);
-       SIMIX_cond_wait(cond, mutex);
-       SIMIX_unregister_action_to_condition(action, cond);
-       SIMIX_mutex_unlock(mutex);
-
-       SIMIX_mutex_destroy(mutex);
-       SIMIX_cond_destroy(cond);
-       //SIMIX_action_destroy(action);
+
+       SIMIX_register_action_to_condition(action, smpi_global->timer_cond);
+       SIMIX_cond_wait(smpi_global->timer_cond, smpi_global->timer_mutex);
+       SIMIX_unregister_action_to_condition(action, smpi_global->timer_cond);
+       SIMIX_action_destroy(action);
+
+       SIMIX_mutex_unlock(smpi_global->timer_mutex);
 
        smpi_bench_begin();
        return 0;