#include "smpi_host.hpp"
#include "src/kernel/EngineImpl.hpp"
#include "src/kernel/activity/CommImpl.hpp"
-#include "src/simix/smx_private.hpp"
#include "src/smpi/include/smpi_actor.hpp"
#include "xbt/config.hpp"
#include "xbt/file.hpp"
// No instance gets manually created; check also the smpirun.in script as
// this default name is used there as well (when the <actor> tag is generated).
static const std::string smpi_default_instance_name("smpirun");
-static simgrid::config::Flag<double> smpi_init_sleep(
- "smpi/init", "Time to inject inside a call to MPI_Init", 0.0);
static simgrid::config::Flag<std::string>
smpi_hostfile("smpi/hostfile",
// take a copy of args4argv to keep reference of the allocated strings
const std::vector<char*> args2str(*args4argv);
#endif
- int argc = args4argv->size();
+ int argc = static_cast<int>(args4argv->size());
args4argv->push_back(nullptr);
char** argv = args4argv->data();
// Copy the dynamic library, the new name must be the same length as the old one
// just replace the name with 7 digits for the rank and the rest of the name.
- auto pad = std::min<unsigned>(7, libname.length());
+ auto pad = std::min<size_t>(7, libname.length());
std::string target_libname = std::string(pad - std::to_string(rank).length(), '0') + std::to_string(rank) + libname.substr(pad);
std::string target_lib = simgrid::config::get_value<std::string>("smpi/tmpdir") + "/" + target_libname;
target_libs.push_back(target_lib);
}
smpi_init_options_internal(true);
- simgrid::instr::init();
- SIMIX_global_init(&argc, argv);
-
- auto engine = simgrid::s4u::Engine::get_instance();
+ simgrid::s4u::Engine engine(&argc, argv);
sg_storage_file_system_init();
// parse the platform file: get the host list
- engine->load_platform(argv[1]);
- simgrid::kernel::activity::CommImpl::set_copy_data_callback(smpi_comm_copy_buffer_callback);
+ engine.load_platform(argv[1]);
+ engine.set_default_comm_data_copy_callback(smpi_comm_copy_buffer_callback);
if (smpi_cfg_privatization() == SmpiPrivStrategies::DLOPEN)
smpi_init_privatization_dlopen(executable);
const std::vector<const char*> args(argv + 2, argv + argc);
int rank_counts =
- smpi_deployment_smpirun(engine, smpi_hostfile.get(), smpi_np.get(), smpi_replay.get(), smpi_map.get(), args);
+ smpi_deployment_smpirun(&engine, smpi_hostfile.get(), smpi_np.get(), smpi_replay.get(), smpi_map.get(), args);
SMPI_app_instance_register(smpi_default_instance_name.c_str(), nullptr, rank_counts);
MPI_COMM_WORLD = *smpi_deployment_comm_world(smpi_default_instance_name);
if (MC_is_active()) {
MC_run();
} else {
- simgrid::kernel::EngineImpl::get_instance()->run();
+ engine.get_impl()->run();
xbt_os_walltimer_stop(global_timer);
simgrid::smpi::utils::print_time_analysis(xbt_os_timer_elapsed(global_timer));
void smpi_mpi_init() {
smpi_init_fortran_types();
- if(smpi_init_sleep > 0)
- simgrid::s4u::this_actor::sleep_for(smpi_init_sleep);
+ if(_smpi_init_sleep > 0)
+ simgrid::s4u::this_actor::sleep_for(_smpi_init_sleep);
}
void SMPI_thread_create() {
TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__);
smpi_process()->mark_as_initialized();
}
+
+void smpi_exit(int res){
+ if(res != 0){
+ XBT_WARN("SMPI process did not return 0. Return value : %d", res);
+ smpi_exit_status = res;
+ }
+ simgrid::s4u::this_actor::exit();
+ while(1);//necessary for the noreturn attribute
+}