4 // FIXME: could cause trouble with multithreaded procs on same host...
5 // FIXME: add benchmarking flag?
7 void smpi_bench_begin()
9 SIMIX_mutex_lock(smpi_global->timer_mutex);
11 xbt_os_timer_start(smpi_global->timer);
16 double smpi_bench_end()
22 xbt_os_timer_stop(smpi_global->timer);
24 duration = xbt_os_timer_elapsed(smpi_global->timer);
26 host = SIMIX_host_self();
27 action = SIMIX_action_execute(host, "computation", duration * SMPI_DEFAULT_SPEED);
29 SIMIX_register_action_to_condition(action, smpi_global->timer_cond);
30 SIMIX_cond_wait(smpi_global->timer_cond, smpi_global->timer_mutex);
31 SIMIX_unregister_action_to_condition(action, smpi_global->timer_cond);
32 SIMIX_action_destroy(action);
34 SIMIX_mutex_unlock(smpi_global->timer_mutex);
39 void smpi_bench_skip() {
42 double duration = smpi_global->times[0];
44 SIMIX_mutex_lock(smpi_global->timer_mutex);
46 host = SIMIX_host_self();
47 action = SIMIX_action_execute(host, "computation", duration * SMPI_DEFAULT_SPEED);
49 SIMIX_register_action_to_condition(action, smpi_global->timer_cond);
50 SIMIX_cond_wait(smpi_global->timer_cond, smpi_global->timer_mutex);
51 SIMIX_unregister_action_to_condition(action, smpi_global->timer_cond);
52 SIMIX_action_destroy(action);
54 SIMIX_mutex_unlock(smpi_global->timer_mutex);
59 void smpi_do_once_1() {
61 SIMIX_mutex_lock(smpi_global->times_mutex);
62 if (0 < smpi_global->times[0]) {
68 int smpi_do_once_2() {
70 if (0 < smpi_global->times[0]) {
71 SIMIX_mutex_unlock(smpi_global->times_mutex);
78 void smpi_do_once_3() {
79 smpi_global->times[0] = smpi_bench_end();