#include "private.h"
#include "xbt/dict.h"
#include "xbt/sysdep.h"
+#include "surf/surf.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_bench, smpi,
"Logging specific to SMPI (benchmarking)");
static void smpi_execute_flops(double flops)
{
- smx_host_t host;
smx_action_t action;
- smx_mutex_t mutex;
- smx_cond_t cond;
- e_surf_action_state_t state;
-
+ smx_host_t host;
host = SIMIX_host_self();
- mutex = SIMIX_mutex_init();
- cond = SIMIX_cond_init();
+
DEBUG1("Handle real computation time: %f flops", flops);
- action = SIMIX_action_execute(host, "computation", flops);
- SIMIX_mutex_lock(mutex);
- SIMIX_register_action_to_condition(action, cond);
- for (state = SIMIX_action_get_state(action);
- state == SURF_ACTION_READY ||
- state == SURF_ACTION_RUNNING;
- state = SIMIX_action_get_state(action)) {
- SIMIX_cond_wait(cond, mutex);
- }
- SIMIX_unregister_action_to_condition(action, cond);
- SIMIX_mutex_unlock(mutex);
- SIMIX_action_destroy(action);
- SIMIX_cond_destroy(cond);
- SIMIX_mutex_destroy(mutex);
+ action = SIMIX_req_host_execute("computation", host, flops);
+#ifdef HAVE_TRACING
+ SIMIX_req_set_category (action, TRACE_internal_smpi_get_category());
+#endif
+ SIMIX_req_host_execution_wait(action);
+ SIMIX_req_host_execution_destroy(action);
}
static void smpi_execute(double duration)
}
}
-void smpi_bench_begin(int rank, const char *mpi_call)
+void smpi_bench_begin(void)
{
- if (mpi_call && rank >= 0
- && xbt_cfg_get_int(_surf_cfg_set, "smpi/log_events")) {
- INFO3("SMPE: ts=%f rank=%d type=end et=%s", SIMIX_get_clock(), rank,
- mpi_call);
- }
xbt_os_timer_start(smpi_process_timer());
}
-void smpi_bench_end(int rank, const char *mpi_call)
+void smpi_bench_end(void)
{
xbt_os_timer_t timer = smpi_process_timer();
xbt_os_timer_stop(timer);
smpi_execute(xbt_os_timer_elapsed(timer));
- if (mpi_call && rank >= 0
- && xbt_cfg_get_int(_surf_cfg_set, "smpi/log_events")) {
- INFO3("SMPE: ts=%f rank=%d type=begin et=%s", SIMIX_get_clock(), rank,
- mpi_call);
- }
}
unsigned int smpi_sleep(unsigned int secs)
char *loc = sample_location(global, file, line);
local_data_t *data;
- smpi_bench_end(-1, NULL); /* Take time from previous MPI call into account */
+ smpi_bench_end(); /* Take time from previous MPI call into account */
if (!samples) {
samples = xbt_dict_new();
}
data->started = 0;
}
free(loc);
- smpi_bench_begin(-1, NULL);
+ smpi_bench_begin();
smpi_process_simulated_start();
return data->started;
}
if (!data || !data->started || data->count >= data->max) {
xbt_assert0(data, "Please, do thing in order");
}
- smpi_bench_end(-1, NULL);
+ smpi_bench_end();
data->time += smpi_process_simulated_elapsed();
DEBUG2("Average mean after %d steps is %f", data->count,
data->time / (double) data->count);