- printf("Description of the tracing options accepted by this simulator:\n\n");
- print_line (OPT_TRACING_CATEGORIZED, "Trace categorized resource utilization",
- " It activates the categorized resource utilization tracing. It should\n"
- " be enabled if tracing categories are used by this simulator.", detailed);
- print_line (OPT_TRACING_UNCATEGORIZED, "Trace uncategorized resource utilization",
- " It activates the uncategorized resource utilization tracing. Use it if\n"
- " this simulator do not use tracing categories and resource use have to be\n"
- " traced.", detailed);
- print_line (OPT_TRACING_SMPI, "Trace the MPI Interface (SMPI)",
- " This option only has effect if this simulator is SMPI-based. Traces the MPI\n"
- " interface and generates a trace that can be analyzed using Gantt-like\n"
- " visualizations. Every MPI function (implemented by SMPI) is transformed in a\n"
- " state, and point-to-point communications can be analyzed with arrows.", detailed);
- print_line (OPT_TRACING_SMPI_GROUP, "Group MPI processes by host (SMPI)",
- " This option only has effect if this simulator is SMPI-based. The processes\n"
- " are grouped by the hosts where they were executed.", detailed);
- print_line (OPT_TRACING_SMPI_COMPUTING, "Generates a \" Computing \" State",
- " This option aims at tracing computations in the application, outside SMPI\n"
- " to allow further study of simulated or real computation time", detailed);
- print_line (OPT_TRACING_SMPI_SLEEPING, "Generates a \" Sleeping \" State",
- " This option aims at tracing sleeps in the application, outside SMPI\n"
- " to allow further study of simulated or real sleep time", detailed);
- print_line (OPT_TRACING_SMPI_INTERNALS, "Generates tracing events corresponding",
- " to point-to-point messages sent by collective communications", detailed);
- print_line (OPT_TRACING_BUFFER, "Buffer events to put them in temporal order",
- " This option put some events in a time-ordered buffer using the insertion\n"
- " sort algorithm. The process of acquiring and releasing locks to access this\n"
- " buffer and the cost of the sorting algorithm make this process slow. The\n"
- " simulator performance can be severely impacted if this option is activated,\n"
- " but you are sure to get a trace file with events sorted.", detailed);
- print_line (OPT_TRACING_DISABLE_DESTROY, "Disable platform containers destruction",
- " Disable the destruction of containers at the end of simulation. This can be\n"
- " used with simulators that have a different notion of time (different from\n"
- " the simulated time).", detailed);
- print_line (OPT_TRACING_BASIC, "Avoid extended events (impoverished trace file).",
- " Some visualization tools are not able to parse correctly the Paje file format.\n"
- " Use this option if you are using one of these tools to visualize the simulation\n"
- " trace. Keep in mind that the trace might be incomplete, without all the\n"
- " information that would be registered otherwise.", detailed);
- print_line (OPT_TRACING_DISPLAY_SIZES, "Only works for SMPI now. Add message size information",
- " Message size (in bytes) is added to links, and to states. For collectives,\n"
- " the displayed value is the more relevant to the collective (total sent by\n"
- " the process, usually)", detailed);
- print_line (OPT_TRACING_FORMAT_TI_ONEFILE, "Only works for SMPI now, and TI output format",
- " By default, each process outputs to a separate file, inside a filename_files folder\n"
- " By setting this option to yes, all processes will output to only one file\n"
- " This is meant to avoid opening thousands of files with large simulations", detailed);
- print_line (OPT_TRACING_COMMENT, "Comment to be added on the top of the trace file.",
- " Use this to add a comment line to the top of the trace file.", detailed);
- print_line (OPT_TRACING_COMMENT_FILE, "File contents added to trace file as comment.",
- " Use this to add the contents of a file to the top of the trace file as comment.", detailed);
- print_line (OPT_TRACING_TOPOLOGY, "Register the platform topology as a graph",
- " This option (enabled by default) can be used to disable the tracing of\n"
- " the platform topology in the trace file. Sometimes, such task is really\n"
- " time consuming, since it must get the route from each host to other hosts\n"
- " within the same Autonomous System (AS).", detailed);
+ static bool is_initialized = false;
+ if (is_initialized)
+ return;
+
+ is_initialized = true;
+
+ /* name of the tracefile */
+ config::declare_flag<std::string>("tracing/filename", "Trace file created by the instrumented SimGrid.",
+ "simgrid.trace");
+ config::declare_flag<std::string>("tracing/smpi/format",
+ "Select trace output format used by SMPI. The default is the 'Paje' format. "
+ "The 'TI' (Time-Independent) format allows for trace replay.",
+ "Paje");
+
+ config::declare_flag<bool>(OPT_TRACING_FORMAT_TI_ONEFILE,
+ "(smpi only) For replay format only : output to one file only", false);
+ config::declare_flag<std::string>("tracing/comment", "Add a comment line to the top of the trace file.", "");
+ config::declare_flag<std::string>(OPT_TRACING_COMMENT_FILE,
+ "Add the contents of a file as comments to the top of the trace.", "");
+ config::declare_flag<int>("tracing/precision",
+ "Numerical precision used when timestamping events "
+ "(expressed in number of digits after decimal point)",
+ 6);
+
+ /* Connect Engine callbacks */
+ s4u::Engine::on_platform_creation.connect(on_simulation_start);
+ s4u::Engine::on_time_advance.connect([](double /*time_delta*/) { dump_buffer(false); });
+ s4u::Engine::on_deadlock.connect(on_simulation_end);
+ s4u::Engine::on_simulation_end.connect(on_simulation_end);