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();
10 SIMIX_mutex_lock(smpi_global->execute_mutex);
12 action = SIMIX_action_execute(host, "execute", duration * SMPI_DEFAULT_SPEED);
14 SIMIX_register_action_to_condition(action, smpi_global->execute_cond);
15 SIMIX_cond_wait(smpi_global->execute_cond, smpi_global->execute_mutex);
16 SIMIX_unregister_action_to_condition(action, smpi_global->execute_cond);
17 SIMIX_action_destroy(action);
19 SIMIX_mutex_unlock(smpi_global->execute_mutex);
24 void smpi_start_timer()
26 SIMIX_mutex_lock(smpi_global->timer_mutex);
27 xbt_os_timer_start(smpi_global->timer);
30 double smpi_stop_timer()
33 xbt_os_timer_stop(smpi_global->timer);
34 duration = xbt_os_timer_elapsed(smpi_global->timer);
35 SIMIX_mutex_unlock(smpi_global->timer_mutex);
39 void smpi_bench_begin()
46 smpi_execute(smpi_stop_timer());
49 void smpi_do_once_1(const char *file, int line) {
50 smpi_do_once_duration_node_t curr, prev;
52 SIMIX_mutex_lock(smpi_global->do_once_mutex);
54 for(curr = smpi_global->do_once_duration_nodes;
55 NULL != curr && (strcmp(curr->file, file) || curr->line != line);
60 curr = xbt_new(s_smpi_do_once_duration_node_t, 1);
61 curr->file = xbt_strdup(file);
66 smpi_global->do_once_duration_nodes = curr;
71 smpi_global->do_once_duration = &curr->duration;
74 int smpi_do_once_2() {
75 double duration = *(smpi_global->do_once_duration);
80 SIMIX_mutex_unlock(smpi_global->do_once_mutex);
81 smpi_execute(duration);
86 void smpi_do_once_3() {
87 *(smpi_global->do_once_duration) = smpi_stop_timer();