#include "private.h"
#include "xbt/log.h"
+#include "xbt/dict.h"
+
+/* Pimple to get an histogram of message sizes in the simulation */
+xbt_dict_t msg_sizes = NULL;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix,
"Logging specific to SIMIX (network)");
comm->act = SIMIX_action_communicate(comm->src_proc->smx_host,
comm->dst_proc->smx_host, NULL,
comm->task_size, comm->rate);
+#ifdef HAVE_TRACING
+ TRACE_smx_action_communicate (comm->act, comm->src_proc);
+#endif
/* If any of the process is suspend, create the action but stop its execution,
it will be restarted when the sender process resume */
SIMIX_communication_destroy(comm);
THROW0(network_error, 0, "Link failure");
}
+ SIMIX_communication_destroy(comm);
}
/**
comm->dst_proc->smx_host->name, comm->dst_buff,
buff_size);
(*SIMIX_network_copy_data_callback)(comm, buff_size);
+
+ /* pimple to display the message sizes */
+ {
+ if (msg_sizes == NULL)
+ msg_sizes = xbt_dict_new();
+ uintptr_t casted_size = comm->task_size;
+ uintptr_t amount = xbt_dicti_get(msg_sizes, casted_size);
+ amount++;
+
+ xbt_dicti_set(msg_sizes,casted_size, amount);
+ }
+}
+#include "xbt.h"
+/* pimple to display the message sizes */
+void SIMIX_message_sizes_output(const char *filename) {
+ FILE * out = fopen(filename,"w");
+ INFO1("Output message sizes to %s",filename);
+ xbt_assert1(out,"Cannot open file %s",filename);
+ uintptr_t key,data;
+ xbt_dict_cursor_t cursor;
+ xbt_dict_foreach(msg_sizes,cursor,key,data) {
+ fprintf(out,"%zu %zu\n",key,data);
+ }
+ fclose(out);
}
/**
XBT_INLINE void SIMIX_network_wait(smx_comm_t comm, double timeout) {
/* Wait for communication completion */
SIMIX_communication_wait_for_completion(comm, timeout);
-
- SIMIX_communication_destroy(comm);
}
/** @Returns whether the (asynchronous) communication is done yet or not */
SIMIX_communication_destroy(comm_finished);
THROW0(network_error, 0, "Link failure");
}
+ SIMIX_communication_destroy(comm_finished);
return found_comm;
}