4 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_bench, smpi, "Logging specific to SMPI (benchmarking)");
6 void smpi_execute(double duration) {
7 smx_host_t host = SIMIX_host_self();
8 smx_mutex_t mutex = smpi_host_mutex();
9 smx_cond_t cond = smpi_host_cond();
11 e_surf_action_state_t state;
13 SIMIX_mutex_lock(mutex);
15 action = SIMIX_action_execute(host, "execute", duration * SMPI_DEFAULT_SPEED);
17 SIMIX_register_action_to_condition(action, cond);
19 state = SIMIX_action_get_state(action);
20 state == SURF_ACTION_READY ||
21 state == SURF_ACTION_RUNNING;
22 state = SIMIX_action_get_state(action)
24 SIMIX_cond_wait(cond, mutex);
26 SIMIX_unregister_action_to_condition(action, cond);
27 SIMIX_action_destroy(action);
29 SIMIX_mutex_unlock(mutex);
34 void smpi_start_timer()
36 SIMIX_mutex_lock(smpi_global->timer_mutex);
37 xbt_os_timer_start(smpi_global->timer);
40 double smpi_stop_timer()
43 xbt_os_timer_stop(smpi_global->timer);
44 duration = xbt_os_timer_elapsed(smpi_global->timer);
45 SIMIX_mutex_unlock(smpi_global->timer_mutex);
49 void smpi_bench_begin()
56 smpi_execute(smpi_stop_timer());
59 void smpi_do_once_1(const char *file, int line) {
60 smpi_do_once_duration_node_t curr, prev;
62 SIMIX_mutex_lock(smpi_global->do_once_mutex);
64 for(curr = smpi_global->do_once_duration_nodes;
65 NULL != curr && (strcmp(curr->file, file) || curr->line != line);
70 curr = xbt_new(s_smpi_do_once_duration_node_t, 1);
71 curr->file = xbt_strdup(file);
76 smpi_global->do_once_duration_nodes = curr;
81 smpi_global->do_once_duration = &curr->duration;
84 int smpi_do_once_2() {
85 double duration = *(smpi_global->do_once_duration);
90 SIMIX_mutex_unlock(smpi_global->do_once_mutex);
91 smpi_execute(duration);
96 void smpi_do_once_3() {
97 *(smpi_global->do_once_duration) = smpi_stop_timer();