From 46fe9a9157c135ef89c114e5c8f537a46de19ddc Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 7 Jul 2021 14:39:50 +0200 Subject: [PATCH] Reduce number of unnecessary copies of 'args'. --- src/smpi/internals/smpi_global.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index ee5fd23c26..bfe9aa3c57 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -294,7 +294,8 @@ using smpi_c_entry_point_type = int (*)(int argc, char** argv); using smpi_fortran_entry_point_type = void (*)(); template -static int smpi_run_entry_point(const F& entry_point, const std::string& executable_path, std::vector args) +static int smpi_run_entry_point(const F& entry_point, const std::string& executable_path, + const std::vector& args) { // copy C strings, we need them writable auto* args4argv = new std::vector(args.size()); @@ -447,7 +448,7 @@ static void smpi_init_privatization_dlopen(const std::string& executable) } simgrid::s4u::Engine::get_instance()->register_default([executable, fdin_size](std::vector args) { - return std::function([executable, fdin_size, args] { + return simgrid::kernel::actor::ActorCode([executable, fdin_size, args = std::move(args)] { static std::size_t rank = 0; // Copy the dynamic library: simgrid::xbt::Path path(executable); @@ -523,7 +524,7 @@ static void smpi_init_privatization_no_dlopen(const std::string& executable) // Execute the same entry point for each simulated process: simgrid::s4u::Engine::get_instance()->register_default([entry_point, executable](std::vector args) { - return std::function([entry_point, executable, args] { + return simgrid::kernel::actor::ActorCode([entry_point, executable, args = std::move(args)] { if (smpi_cfg_privatization() == SmpiPrivStrategies::MMAP) { simgrid::smpi::ActorExt* ext = smpi_process(); /* Now using the segment index of this process */ -- 2.20.1