$ mkfile ./split_traces_tesh
$ ../../smpi_script/bin/smpirun -no-privatize -ext smpi_replay --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/simulate-computation:no -np 2 -platform ${srcdir:=.}/../platforms/small_platform.xml -hostfile ${srcdir:=.}/hostfile ./replay/smpi_replay ./split_traces_tesh --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
-> [Jupiter:1:(2) 0.167158] [smpi_replay/VERBOSE] 1 recv 0 0 1e6 0.167158
> [Tremblay:0:(1) 0.167158] [smpi_replay/VERBOSE] 0 send 1 0 1e6 0.167158
+> [Jupiter:1:(2) 0.167158] [smpi_replay/VERBOSE] 1 recv 0 0 1e6 0.167158
> [Jupiter:1:(2) 13.274005] [smpi_replay/VERBOSE] 1 compute 1e9 13.106847
> [Jupiter:1:(2) 13.274005] [smpi_replay/VERBOSE] 1 isend 0 1 1e6 0.000000
> [Jupiter:1:(2) 13.274005] [smpi_replay/VERBOSE] 1 irecv 0 2 1e6 0.000000
$ mkfile replay/one_trace
$ ../../smpi_script/bin/smpirun -no-privatize -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/simulate-computation:no -np 3 -platform ${srcdir:=.}/../platforms/small_platform.xml -hostfile ${srcdir:=.}/hostfile ./replay/smpi_replay replay/one_trace --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
-> [Jupiter:1:(2) 1.518421] [smpi_replay/VERBOSE] 1 recv 0 0 1e7 1.518421
> [Tremblay:0:(1) 1.518421] [smpi_replay/VERBOSE] 0 send 1 0 1e7 1.518421
+> [Jupiter:1:(2) 1.518421] [smpi_replay/VERBOSE] 1 recv 0 0 1e7 1.518421
> [Tremblay:0:(1) 1.520397] [smpi_replay/VERBOSE] 0 barrier 0.001976
> [Jupiter:1:(2) 1.521858] [smpi_replay/VERBOSE] 1 barrier 0.003438
> [Fafard:2:(3) 1.522373] [smpi_replay/VERBOSE] 2 barrier 1.522373
> [ 0.000000] (job_alone@Bourassa) Executing job 0 (smpi_app 'alone')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'alone')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'alone')
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'alone')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'alone')
> [ 737.001374] (job_alone@Bourassa) Finished job 0 (smpi_app 'alone')
> [ 737.001374] (maestro@) Simulation finished! Final time: 737.001
> [ 0.000000] (job_alone@Bourassa) Executing job 0 (smpi_app 'alone')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'alone')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'alone')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'alone')
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'alone')
> [ 737.001374] (job_alone@Bourassa) Finished job 0 (smpi_app 'alone')
> [ 0.000000] (workload_executor@Bourassa) Sleeping 1000 seconds (waiting for job 1000, app 'job1')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'job0')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
> [1000.000000] (workload_executor@Bourassa) Launching the job executor of job 1 (app 'job1')
> [1000.000000] (job_job1@Ginette) Executing job 1 (smpi_app 'job1')
> [1000.000000] (1_0@Ginette) Replaying rank 0 of job 1 (smpi_app 'job1')
> [1000.000000] (1_1@Jupiter) Replaying rank 1 of job 1 (smpi_app 'job1')
+> [1806.923160] (1_0@Ginette) Simulation time 806.923160
> [1806.923160] (1_0@Ginette) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1806.923160] (1_1@Jupiter) Simulation time 806.923160
> [1806.923160] (1_1@Jupiter) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [1806.923160] (job_job1@Ginette) Finished job 1 (smpi_app 'job1')
> [1806.923160] (maestro@) Simulation finished! Final time: 1806.92
> [ 0.000000] (workload_executor@Bourassa) Sleeping 1000 seconds (waiting for job 1000, app 'job1')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'job0')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
> [1000.000000] (workload_executor@Bourassa) Launching the job executor of job 1 (app 'job1')
> [1000.000000] (job_job1@Ginette) Executing job 1 (smpi_app 'job1')
> [1000.000000] (1_0@Ginette) Replaying rank 0 of job 1 (smpi_app 'job1')
> [1000.000000] (1_1@Jupiter) Replaying rank 1 of job 1 (smpi_app 'job1')
+> [1806.923160] (1_0@Ginette) Simulation time 806.923160
> [1806.923160] (1_0@Ginette) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1806.923160] (1_1@Jupiter) Simulation time 806.923160
> [1806.923160] (1_1@Jupiter) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [1806.923160] (job_job1@Ginette) Finished job 1 (smpi_app 'job1')
> [1806.923160] (maestro@) Simulation finished! Final time: 1806.92
> [ 0.000000] (workload_executor@Bourassa) Sleeping 1000 seconds (waiting for job 1000, app 'job1')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'job0')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
> [1000.000000] (workload_executor@Bourassa) Launching the job executor of job 1 (app 'job1')
> [1000.000000] (job_job1@Bourassa) Executing job 1 (smpi_app 'job1')
> [1000.000000] (1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
> [1000.000000] (1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
+> [1737.001374] (1_0@Bourassa) Simulation time 737.001374
> [1737.001374] (1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1737.001374] (1_1@Fafard) Simulation time 737.001374
> [1737.001374] (1_1@Fafard) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [1737.001374] (job_job1@Bourassa) Finished job 1 (smpi_app 'job1')
> [1737.001374] (maestro@) Simulation finished! Final time: 1737
> [ 0.000000] (workload_executor@Bourassa) Sleeping 1000 seconds (waiting for job 1000, app 'job1')
> [ 0.000000] (0_0@Bourassa) Replaying rank 0 of job 0 (smpi_app 'job0')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
+> [ 737.001374] (0_0@Bourassa) Simulation time 737.001374
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
-> [ 737.001374] (0_1@Fafard) Simulation time 737.001374
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
> [1000.000000] (workload_executor@Bourassa) Launching the job executor of job 1 (app 'job1')
> [1000.000000] (job_job1@Bourassa) Executing job 1 (smpi_app 'job1')
> [1000.000000] (1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
> [1000.000000] (1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
+> [1737.001374] (1_0@Bourassa) Simulation time 737.001374
> [1737.001374] (1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1737.001374] (1_1@Fafard) Simulation time 737.001374
> [1737.001374] (1_1@Fafard) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [1737.001374] (job_job1@Bourassa) Finished job 1 (smpi_app 'job1')
> [1737.001374] (maestro@) Simulation finished! Final time: 1737
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
-> [ 806.923160] (1_1@Jupiter) Simulation time 806.923160
+> [ 806.923160] (1_0@Ginette) Simulation time 806.923160
> [ 806.923160] (1_0@Ginette) Finished replaying rank 0 of job 1 (smpi_app 'job1')
> [ 806.923160] (1_1@Jupiter) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [ 806.923160] (job_job1@Ginette) Finished job 1 (smpi_app 'job1')
> [ 737.001374] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
> [ 737.001374] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 737.001374] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
-> [ 806.923160] (1_1@Jupiter) Simulation time 806.923160
+> [ 806.923160] (1_0@Ginette) Simulation time 806.923160
> [ 806.923160] (1_0@Ginette) Finished replaying rank 0 of job 1 (smpi_app 'job1')
> [ 806.923160] (1_1@Jupiter) Finished replaying rank 1 of job 1 (smpi_app 'job1')
> [ 806.923160] (job_job1@Ginette) Finished job 1 (smpi_app 'job1')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
> [ 0.000000] (1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
> [ 0.000000] (1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
-> [1473.975664] (1_1@Fafard) Simulation time 1473.975664
+> [1473.975664] (1_0@Bourassa) Simulation time 1473.975664
> [1473.975664] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
> [1473.975664] (1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
> [1473.975664] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [ 0.000000] (0_1@Fafard) Replaying rank 1 of job 0 (smpi_app 'job0')
> [ 0.000000] (1_0@Bourassa) Replaying rank 0 of job 1 (smpi_app 'job1')
> [ 0.000000] (1_1@Fafard) Replaying rank 1 of job 1 (smpi_app 'job1')
+> [1473.975664] (1_0@Bourassa) Simulation time 1473.975664
> [1473.975664] (0_0@Bourassa) Finished replaying rank 0 of job 0 (smpi_app 'job0')
> [1473.975664] (1_0@Bourassa) Finished replaying rank 0 of job 1 (smpi_app 'job1')
-> [1473.975664] (1_1@Fafard) Simulation time 1473.975664
> [1473.975664] (0_1@Fafard) Finished replaying rank 1 of job 0 (smpi_app 'job0')
> [1473.975664] (job_job0@Bourassa) Finished job 0 (smpi_app 'job0')
> [1473.975664] (1_1@Fafard) Finished replaying rank 1 of job 1 (smpi_app 'job1')
#include <xbt/parmap.h>
#ifdef __cplusplus
#include <functional>
+#include <string>
#include <unordered_map>
#endif
XBT_PUBLIC int simcall_comm_testany(smx_activity_t* comms, size_t count);
/************************** Tracing handling **********************************/
-XBT_PUBLIC void simcall_set_category(smx_activity_t synchro, const char* category);
+#ifdef __cplusplus
+XBT_PUBLIC void simcall_set_category(smx_activity_t synchro, std::string category);
+#endif
/************************** Synchro simcalls **********************************/
SG_BEGIN_DECL()
}
// trace categorized resource utilization
- if (TRACE_categorized() && !category.empty()) {
+ if (TRACE_categorized() && not category.empty()) {
std::string category_type = name[0] + category;
XBT_DEBUG("CAT %s [%f - %f] %s %s %f", type, now, now + delta, resource, category_type.c_str(), value);
container->get_variable(name)->instr_event(now, delta, resource, value);
XBT_PRIVATE container_t smpi_container(int rank);
XBT_PRIVATE void TRACE_smpi_setup_container(int rank, sg_host_t host);
-XBT_PRIVATE void TRACE_internal_smpi_set_category(const char* category);
-XBT_PRIVATE const char* TRACE_internal_smpi_get_category();
+XBT_PRIVATE void TRACE_internal_smpi_set_category(std::string category);
+XBT_PRIVATE std::string TRACE_internal_smpi_get_category();
XBT_PRIVATE void TRACE_smpi_computing_init(int rank);
XBT_PRIVATE void TRACE_smpi_computing_out(int rank);
XBT_PRIVATE void TRACE_smpi_computing_in(int rank, double amount);
simcall_execution_start(task->name ?: "", simdata->flops_amount, simdata->priority, simdata->bound,
MSG_process_get_host(MSG_process_self())));
}
- simcall_set_category(simdata->compute, task->category);
+ if (task->category != nullptr)
+ simcall_set_category(simdata->compute, task->category);
comp_state = simcall_execution_wait(simdata->compute);
simdata->setNotUsed();
smx_activity_t comm = nullptr; /* MC needs the comm to be set to nullptr during the simix call */
comm = simcall_comm_isend(SIMIX_process_self(), mailbox->get_impl(), t_simdata->bytes_amount, t_simdata->rate, task,
sizeof(void*), nullptr, nullptr, nullptr, nullptr, 0);
- if (TRACE_is_enabled())
+ if (TRACE_is_enabled() && task->category != nullptr)
simcall_set_category(comm, task->category);
t_simdata->comm = boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(comm);
simcall_comm_wait(comm, timeout);
ExecPtr Exec::set_tracing_category(std::string category)
{
- xbt_assert(state_ == State::INITED, "Cannot change the name of an exec after its start");
if (category.empty())
return this;
* @param synchro The execution synchro
* @param category The tracing category
*/
-void simcall_set_category(smx_activity_t synchro, const char *category)
+void simcall_set_category(smx_activity_t synchro, std::string category)
{
- if (category == nullptr) {
+ if (category.empty()) {
return;
}
simgrid::simix::simcall([synchro, category] { SIMIX_set_category(synchro, category); });
}
}
-void SIMIX_set_category(smx_activity_t synchro, const char *category)
+void SIMIX_set_category(smx_activity_t synchro, std::string category)
{
if (synchro->state_ != SIMIX_RUNNING)
return;
XBT_PRIVATE void SIMIX_execution_finish(smx_activity_t synchro);
-XBT_PRIVATE void SIMIX_set_category(smx_activity_t synchro, const char* category);
+XBT_PRIVATE void SIMIX_set_category(smx_activity_t synchro, std::string category);
XBT_PRIVATE boost::intrusive_ptr<simgrid::kernel::activity::ExecImpl>
SIMIX_execution_start(std::string name, double flops_amount, double priority, double bound, sg_host_t host);
{
//need to end bench otherwise categories for execution tasks are wrong
smpi_bench_end();
- TRACE_internal_smpi_set_category (category);
+ if (category != nullptr)
+ TRACE_internal_smpi_set_category(category);
//begin bench after changing process's category
smpi_bench_begin();
}
static std::unordered_map<smx_actor_t, std::string> process_category;
-void TRACE_internal_smpi_set_category (const char *category)
+void TRACE_internal_smpi_set_category(std::string category)
{
if (not TRACE_smpi_is_enabled())
return;
//declare category
- TRACE_category (category);
+ TRACE_category(category.c_str());
- if (category != nullptr)
+ if (not category.empty())
process_category[SIMIX_process_self()] = category;
}
-const char *TRACE_internal_smpi_get_category ()
+std::string TRACE_internal_smpi_get_category()
{
if (not TRACE_smpi_is_enabled())
return "";
void smpi_execute_flops(double flops) {
xbt_assert(flops >= 0, "You're trying to execute a negative amount of flops (%f)!", flops);
XBT_DEBUG("Handle real computation time: %f flops", flops);
- simgrid::s4u::this_actor::exec_init(flops)->set_name("computation")->start()->wait();
- // FIXME adding this break smpi/tracing example... ->set_tracing_category(TRACE_internal_smpi_get_category())
+ simgrid::s4u::ExecPtr e = simgrid::s4u::this_actor::exec_init(flops)->set_name("computation");
+ e->start();
+ e->set_tracing_category(TRACE_internal_smpi_get_category());
+ e->wait();
smpi_switch_data_segment(simgrid::s4u::Actor::self());
}