X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/098b6beb025164bc7226f11ccf32ee5b3fa9fbb2..950b9d175a7966b91adf53b74745ce4e6e5da5f9:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 0c5d88a847..2169f674a0 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -53,14 +53,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (ke extern "C" void _gfortran_set_args(int, char **); #endif -#ifndef RTLD_DEEPBIND -/* RTLD_DEEPBIND is a bad idea of GNU ld that obviously does not exist on other platforms - * See https://www.akkadia.org/drepper/dsohowto.pdf - * and https://lists.freebsd.org/pipermail/freebsd-current/2016-March/060284.html -*/ -#define RTLD_DEEPBIND 0 -#endif - #if HAVE_PAPI #include "papi.h" std::string papi_default_config_name = "default"; @@ -95,8 +87,6 @@ MPI_Errhandler *MPI_ERRHANDLER_NULL = nullptr; // No instance gets manually created; check also the smpirun.in script as // this default name is used there as well (when the tag is generated). static const std::string smpi_default_instance_name("smpirun"); -XBT_PRIVATE simgrid::config::Flag smpi_wtime_sleep( - "smpi/wtime", "Minimum time to inject inside a call to MPI_Wtime", 0.0); static simgrid::config::Flag smpi_init_sleep( "smpi/init", "Time to inject inside a call to MPI_Init", 0.0); @@ -579,7 +569,7 @@ static void smpi_init_privatization_dlopen(std::string executable) smpi_copy_file(executable, target_executable, fdin_size); // if smpi/privatize-libs is set, duplicate pointed lib and link each executable copy to a different one. - std::string target_lib; + std::vector target_libs; for (auto const& libpath : privatize_libs_paths) { // if we were given a full path, strip it size_t index = libpath.find_last_of("/\\"); @@ -598,8 +588,9 @@ static void smpi_init_privatization_dlopen(std::string executable) unsigned int pad = 7; if (libname.length() < pad) pad = libname.length(); - target_lib = + std::string target_lib = std::string(pad - std::to_string(rank).length(), '0') + std::to_string(rank) + libname.substr(pad); + target_libs.push_back(target_lib); XBT_DEBUG("copy lib %s to %s, with size %lld", libpath.c_str(), target_lib.c_str(), (long long)fdin_size2); smpi_copy_file(libpath, target_lib, fdin_size2); @@ -612,11 +603,11 @@ static void smpi_init_privatization_dlopen(std::string executable) rank++; // Load the copy and resolve the entry point: - void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND); + void* handle = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL); int saved_errno = errno; if (simgrid::config::get_value("smpi/keep-temps") == false) { unlink(target_executable.c_str()); - if (not target_lib.empty()) + for (const std::string& target_lib : target_libs) unlink(target_lib.c_str()); } if (handle == nullptr) @@ -745,24 +736,3 @@ void smpi_mpi_init() { if(smpi_init_sleep > 0) simcall_process_sleep(smpi_init_sleep); } - -double smpi_mpi_wtime(){ - double time; - if (smpi_process()->initialized() != 0 && smpi_process()->finalized() == 0 && smpi_process()->sampling() == 0) { - smpi_bench_end(); - time = SIMIX_get_clock(); - // to avoid deadlocks if used as a break condition, such as - // while (MPI_Wtime(...) < time_limit) { - // .... - // } - // because the time will not normally advance when only calls to MPI_Wtime - // are made -> deadlock (MPI_Wtime never reaches the time limit) - if(smpi_wtime_sleep > 0) - simcall_process_sleep(smpi_wtime_sleep); - smpi_bench_begin(); - } else { - time = SIMIX_get_clock(); - } - return time; -} -