XBT_PRIVATE MPI_Comm* smpi_deployment_comm_world(const std::string& instance_id);
XBT_PRIVATE void smpi_deployment_cleanup_instances();
+XBT_PRIVATE int smpi_deployment_smpirun(simgrid::s4u::Engine* e, const std::string& hostfile, int np,
+ const std::string& replayfile, int map, int argc, char* argv[]);
XBT_PRIVATE void smpi_comm_copy_buffer_callback(simgrid::kernel::activity::CommImpl* comm, void* buff,
size_t buff_size);
XBT_PRIVATE bool smpi_cfg_display_alloc();
// utilities
+XBT_PUBLIC void smpi_init_options(bool called_by_smpimain = false);
+
extern XBT_PRIVATE char* smpi_data_exe_start; // start of the data+bss segment of the executable
extern XBT_PRIVATE size_t smpi_data_exe_size; // size of the data+bss segment of the executable
-XBT_PRIVATE void smpi_switch_data_segment(simgrid::s4u::ActorPtr actor);
+XBT_PRIVATE bool smpi_switch_data_segment(simgrid::s4u::ActorPtr actor, const void* addr = nullptr);
XBT_PRIVATE void smpi_prepare_global_memory_segment();
XBT_PRIVATE void smpi_backup_global_memory_segment();
XBT_PRIVATE void smpi_shared_destroy();
XBT_PRIVATE double smpi_adjust_comp_speed();
+// This helper class uses RAII to call smpi_bench_end() when an object is built, and have smpi_bench_begin() be called
+// automatically when going out of scope.
+class XBT_PRIVATE SmpiBenchGuard {
+public:
+ SmpiBenchGuard() { smpi_bench_end(); }
+ SmpiBenchGuard(const SmpiBenchGuard&) = delete;
+ SmpiBenchGuard& operator=(const SmpiBenchGuard&) = delete;
+ ~SmpiBenchGuard() { smpi_bench_begin(); }
+};
+
XBT_PRIVATE unsigned char* smpi_get_tmp_sendbuffer(size_t size);
XBT_PRIVATE unsigned char* smpi_get_tmp_recvbuffer(size_t size);
XBT_PRIVATE void smpi_free_tmp_buffer(const unsigned char* buf);