xbt_dict_free(&calls);
}
+XBT_PUBLIC(void) smpi_execute_flops_(double *flops);
+void smpi_execute_flops_(double *flops)
+{
+ smpi_execute_flops(*flops);
+}
+
+XBT_PUBLIC(void) smpi_execute_(double *duration);
+void smpi_execute_(double *duration)
+{
+ smpi_execute(*duration);
+}
+
void smpi_execute_flops(double flops) {
smx_action_t action;
smx_host_t host;
simcall_host_execution_wait(action);
}
-static void smpi_execute(double duration)
+void smpi_execute(double duration)
{
if (duration >= smpi_cpu_threshold) {
XBT_DEBUG("Sleep for %g to handle real computation time", duration);
void smpi_bench_end(void)
{
xbt_os_timer_t timer = smpi_process_timer();
-
xbt_os_threadtimer_stop(timer);
+ if (smpi_process_get_sampling()) {
+ XBT_CRITICAL("Cannot do recursive benchmarks.");
+ XBT_CRITICAL("Are you trying to make a call to MPI within a SMPI_SAMPLE_ block?");
+ xbt_backtrace_display_current();
+ xbt_die("Aborting.");
+ }
smpi_execute(xbt_os_timer_elapsed(timer));
}
}
#endif
-int smpi_shared_known_call(const char* func, const char* input) {
- char* loc = bprintf("%s:%s", func, input);
- xbt_ex_t ex;
- int known;
+int smpi_shared_known_call(const char* func, const char* input)
+{
+ char* loc = bprintf("%s:%s", func, input);
+ xbt_ex_t ex;
+ int known = 0;
- if(!calls) {
- calls = xbt_dict_new_homogeneous(NULL);
- }
- TRY {
- xbt_dict_get(calls, loc); /* Succeed or throw */
- known = 1;
- }
- CATCH(ex) {
- if(ex.category == not_found_error) {
- known = 0;
- xbt_ex_free(ex);
- } else {
- RETHROW;
- }
- }
- free(loc);
- return known;
+ if (!calls) {
+ calls = xbt_dict_new_homogeneous(NULL);
+ }
+ TRY {
+ xbt_dict_get(calls, loc); /* Succeed or throw */
+ known = 1;
+ }
+ TRY_CLEANUP {
+ xbt_free(loc);
+ }
+ CATCH(ex) {
+ if (ex.category != not_found_error)
+ RETHROW;
+ xbt_ex_free(ex);
+ }
+ return known;
}
void* smpi_shared_get_call(const char* func, const char* input) {