X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2247d8d7ee677ba1a970301b456537022c53f503..5e9351c7145890c8105dd81af2f09cd6dc50383f:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index aa77ce4c8e..ba06a81e18 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -4,12 +4,13 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "mc/mc.h" -#include "simgrid/s4u/Engine.hpp" #include "simgrid/plugins/file_system.h" +#include "simgrid/s4u/Engine.hpp" #include "smpi_coll.hpp" +#include "smpi_config.hpp" #include "smpi_f2c.hpp" #include "smpi_host.hpp" -#include "smpi_config.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" @@ -20,7 +21,6 @@ #include #include /* split */ #include -#include #include #include #include /* intmax_t */ @@ -351,8 +351,8 @@ static void smpi_copy_file(const std::string& src, const std::string& target, of { int fdin = open(src.c_str(), O_RDONLY); xbt_assert(fdin >= 0, "Cannot read from %s. Please make sure that the file exists and is executable.", src.c_str()); - XBT_ATTRIB_UNUSED int unlink_status = unlink(target.c_str()); - xbt_assert(unlink_status == 0 || errno == ENOENT, "Failed to unlink file %s: %s", target.c_str(), strerror(errno)); + xbt_assert(unlink(target.c_str()) == 0 || errno == ENOENT, "Failed to unlink file %s: %s", target.c_str(), + strerror(errno)); int fdout = open(target.c_str(), O_CREAT | O_RDWR | O_EXCL, S_IRWXU); xbt_assert(fdout >= 0, "Cannot write into %s: %s", target.c_str(), strerror(errno)); @@ -363,10 +363,10 @@ static void smpi_copy_file(const std::string& src, const std::string& target, of close(fdin); close(fdout); return; - } else if (sent_size != -1 || errno != ENOSYS) { - xbt_die("Error while copying %s: only %zd bytes copied instead of %" PRIdMAX " (errno: %d -- %s)", target.c_str(), - sent_size, static_cast(fdin_size), errno, strerror(errno)); } + xbt_assert(sent_size == -1 && errno == ENOSYS, + "Error while copying %s: only %zd bytes copied instead of %" PRIdMAX " (errno: %d -- %s)", target.c_str(), + sent_size, static_cast(fdin_size), errno, strerror(errno)); #endif // If this point is reached, sendfile() actually is not available. Copy file by hand. std::vector buf(1024 * 1024 * 4); @@ -419,14 +419,13 @@ static void smpi_init_privatization_dlopen(const std::string& executable) for (auto const& libname : privatize_libs) { // load the library once to add it to the local libs, to get the absolute path void* libhandle = dlopen(libname.c_str(), RTLD_LAZY); - xbt_assert(libhandle != nullptr, - "Cannot dlopen %s - check your settings in smpi/privatize-libs", libname.c_str()); + xbt_assert(libhandle != nullptr, "Cannot dlopen %s - check your settings in smpi/privatize-libs", + libname.c_str()); // get library name from path std::string fullpath = libname; #if not defined(__APPLE__) && not defined(__HAIKU__) - XBT_ATTRIB_UNUSED int dl_iterate_res = dl_iterate_phdr(visit_libs, &fullpath); - xbt_assert(dl_iterate_res != 0, "Can't find a linked %s - check your settings in smpi/privatize-libs", - fullpath.c_str()); + xbt_assert(dl_iterate_phdr(visit_libs, &fullpath) != 0, + "Can't find a linked %s - check your settings in smpi/privatize-libs", fullpath.c_str()); XBT_DEBUG("Extra lib to privatize '%s' found", fullpath.c_str()); #else xbt_die("smpi/privatize-libs is not (yet) compatible with OSX nor with Haiku"); @@ -490,7 +489,7 @@ static void smpi_init_privatization_dlopen(const std::string& executable) dlerror(), saved_errno, strerror(saved_errno)); smpi_entry_point_type entry_point = smpi_resolve_function(handle); - xbt_assert(entry_point, "Could not resolve entry point"); + xbt_assert(entry_point, "Could not resolve entry point. Does your program contain a main() function?"); smpi_run_entry_point(entry_point, executable, args); }); }); @@ -536,7 +535,7 @@ int smpi_main(const char* executable, int argc, char* argv[]) sg_storage_file_system_init(); // parse the platform file: get the host list engine->load_platform(argv[1]); - SIMIX_comm_set_copy_data_callback(smpi_comm_copy_buffer_callback); + simgrid::kernel::activity::CommImpl::set_copy_data_callback(smpi_comm_copy_buffer_callback); if (smpi_cfg_privatization() == SmpiPrivStrategies::DLOPEN) smpi_init_privatization_dlopen(executable); @@ -566,7 +565,7 @@ int smpi_main(const char* executable, int argc, char* argv[]) if (MC_is_active()) { MC_run(); } else { - SIMIX_run(); + simgrid::kernel::EngineImpl::get_instance()->run(); xbt_os_walltimer_stop(global_timer); simgrid::smpi::utils::print_time_analysis(xbt_os_timer_elapsed(global_timer)); @@ -625,4 +624,5 @@ void smpi_mpi_init() { void SMPI_thread_create() { TRACE_smpi_init(simgrid::s4u::this_actor::get_pid(), __func__); + smpi_process()->mark_as_initialized(); }