//allocate a single buffer for all sends, growing it if needed
void* smpi_get_tmp_sendbuffer(int size)
{
- if (!smpi_process()->replaying())
+ if (not smpi_process()->replaying())
return xbt_malloc(size);
if (sendbuffer_size<size){
sendbuffer=static_cast<char*>(xbt_realloc(sendbuffer,size));
//allocate a single buffer for all recv
void* smpi_get_tmp_recvbuffer(int size){
- if (!smpi_process()->replaying())
+ if (not smpi_process()->replaying())
return xbt_malloc(size);
if (recvbuffer_size<size){
recvbuffer=static_cast<char*>(xbt_realloc(recvbuffer,size));
}
void smpi_free_tmp_buffer(void* buf){
- if (!smpi_process()->replaying())
+ if (not smpi_process()->replaying())
xbt_free(buf);
}
extra->dst = dst_traced;
extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
- if (!TRACE_smpi_view_internals())
+ if (not TRACE_smpi_view_internals())
TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
Request::send(nullptr, size, MPI_CURRENT_TYPE, to , 0, MPI_COMM_WORLD);
extra->dst = dst_traced;
extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
- if (!TRACE_smpi_view_internals())
+ if (not TRACE_smpi_view_internals())
TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
MPI_Request request = Request::isend(nullptr, size, MPI_CURRENT_TYPE, to, 0,MPI_COMM_WORLD);
Request::recv(nullptr, size, MPI_CURRENT_TYPE, from, 0, MPI_COMM_WORLD, &status);
TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
- if (!TRACE_smpi_view_internals()) {
+ if (not TRACE_smpi_view_internals()) {
TRACE_smpi_recv(rank, src_traced, rank, 0);
}
}} // namespace simgrid::smpi
-void smpi_replay_run(int *argc, char***argv){
- /* First initializes everything */
+/** @brief Only initialize the replay, don't do it for real */
+void smpi_replay_init(int* argc, char*** argv)
+{
simgrid::smpi::Process::init(argc, argv);
smpi_process()->mark_as_initialized();
smpi_process()->set_replaying(true);
TRACE_smpi_computing_init(rank);
instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
extra->type = TRACING_INIT;
- char *operation =bprintf("%s_init",__FUNCTION__);
- TRACE_smpi_collective_in(rank, -1, operation, extra);
- TRACE_smpi_collective_out(rank, -1, operation);
- xbt_free(operation);
+ TRACE_smpi_collective_in(rank, -1, "smpi_replay_run_init", extra);
+ TRACE_smpi_collective_out(rank, -1, "smpi_replay_run_init");
xbt_replay_action_register("init", simgrid::smpi::action_init);
xbt_replay_action_register("finalize", simgrid::smpi::action_finalize);
xbt_replay_action_register("comm_size", simgrid::smpi::action_comm_size);
//if we have a delayed start, sleep here.
if(*argc>2){
- char *endptr;
- double value = strtod((*argv)[2], &endptr);
- if (*endptr != '\0')
- THROWF(unknown_error, 0, "%s is not a double", (*argv)[2]);
+ double value = xbt_str_parse_double((*argv)[2], "%s is not a double");
XBT_VERB("Delayed start for instance - Sleeping for %f flops ",value );
smpi_execute_flops(value);
} else {
XBT_DEBUG("Force context switch by smpi_execute_flops - Sleeping for 0.0 flops ");
smpi_execute_flops(0.0);
}
+}
- /* Actually run the replay */
+/** @brief actually run the replay after initialization */
+void smpi_replay_main(int* argc, char*** argv)
+{
simgrid::xbt::replay_runner(*argc, *argv);
/* and now, finalize everything */
/* One active process will stop. Decrease the counter*/
XBT_DEBUG("There are %zu elements in reqq[*]", get_reqq_self()->size());
- if (!get_reqq_self()->empty()){
+ if (not get_reqq_self()->empty()) {
unsigned int count_requests=get_reqq_self()->size();
MPI_Request requests[count_requests];
MPI_Status status[count_requests];
instr_extra_data extra_fin = xbt_new0(s_instr_extra_data_t,1);
extra_fin->type = TRACING_FINALIZE;
- operation =bprintf("%s_finalize",__FUNCTION__);
- TRACE_smpi_collective_in(rank, -1, operation, extra_fin);
+ TRACE_smpi_collective_in(smpi_process()->index(), -1, "smpi_replay_run_finalize", extra_fin);
smpi_process()->finalize();
- TRACE_smpi_collective_out(rank, -1, operation);
+ TRACE_smpi_collective_out(smpi_process()->index(), -1, "smpi_replay_run_finalize");
TRACE_smpi_finalize(smpi_process()->index());
- xbt_free(operation);
+}
+
+/** @brief chain a replay initialization and a replay start */
+void smpi_replay_run(int* argc, char*** argv)
+{
+ smpi_replay_init(argc, argv);
+ smpi_replay_main(argc, argv);
}