4 void smpi_execute(double duration) {
5 smx_host_t host = SIMIX_host_self();
8 SIMIX_mutex_lock(smpi_global->execute_mutex);
10 action = SIMIX_action_execute(host, "execute", duration * SMPI_DEFAULT_SPEED);
12 SIMIX_register_action_to_condition(action, smpi_global->execute_cond);
13 SIMIX_cond_wait(smpi_global->execute_cond, smpi_global->execute_mutex);
14 SIMIX_unregister_action_to_condition(action, smpi_global->execute_cond);
15 SIMIX_action_destroy(action);
17 SIMIX_mutex_unlock(smpi_global->execute_mutex);
22 void smpi_start_timer()
24 SIMIX_mutex_lock(smpi_global->timer_mutex);
25 xbt_os_timer_start(smpi_global->timer);
28 double smpi_stop_timer()
31 xbt_os_timer_stop(smpi_global->timer);
32 duration = xbt_os_timer_elapsed(smpi_global->timer);
33 SIMIX_mutex_unlock(smpi_global->timer_mutex);
37 void smpi_bench_begin()
44 smpi_execute(smpi_stop_timer());
47 void smpi_do_once_1(const char *file, int line) {
48 smpi_do_once_duration_node_t curr, prev;
50 SIMIX_mutex_lock(smpi_global->do_once_mutex);
52 for(curr = smpi_global->do_once_duration_nodes;
53 NULL != curr && (strcmp(curr->file, file) || curr->line != line);
58 curr = xbt_new(s_smpi_do_once_duration_node_t, 1);
59 curr->file = xbt_strdup(file);
64 smpi_global->do_once_duration_nodes = curr;
69 smpi_global->do_once_duration = &curr->duration;
72 int smpi_do_once_2() {
73 double duration = *(smpi_global->do_once_duration);
75 SIMIX_mutex_unlock(smpi_global->do_once_mutex);
76 smpi_execute(duration);
84 void smpi_do_once_3() {
85 *(smpi_global->do_once_duration) = smpi_stop_timer();