X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a001b13d7aa269a90f035f58c71778c6812b07f6..45804489f80c36a93f99118d425686131680fa22:/src/kernel/context/ContextRaw.cpp diff --git a/src/kernel/context/ContextRaw.cpp b/src/kernel/context/ContextRaw.cpp index 244fdd448a..9351c54814 100644 --- a/src/kernel/context/ContextRaw.cpp +++ b/src/kernel/context/ContextRaw.cpp @@ -7,8 +7,8 @@ #include "xbt/parmap.hpp" -#include "src/simix/smx_private.h" #include "mc/mc.h" +#include "src/simix/smx_private.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); @@ -27,10 +27,11 @@ class RawContextFactory; * preserve the signal mask when switching. This saves a system call (at least on Linux) on each context switch. */ class RawContext : public Context { -protected: +private: void* stack_ = nullptr; /** pointer to top the stack stack */ void* stack_top_ = nullptr; + public: friend class RawContextFactory; RawContext(std::function code, @@ -57,7 +58,6 @@ public: void_pfn_smxprocess_t cleanup, smx_actor_t process) override; void run_all() override; private: - void run_all_adaptative(); void run_all_serial(); void run_all_parallel(); }; @@ -267,10 +267,10 @@ RawContextFactory::RawContextFactory() xbt_os_thread_key_create(&raw_worker_id_key); // TODO, lazily init raw_parmap = nullptr; - raw_workers_context = xbt_new(RawContext*, nthreads); + raw_workers_context = new RawContext*[nthreads]; raw_maestro_context = nullptr; #endif - // TODO, if(SIMIX_context_get_parallel_threshold() > 1) => choose dynamically + // TODO: choose dynamically when SIMIX_context_get_parallel_threshold() > 1 } } @@ -278,7 +278,7 @@ RawContextFactory::~RawContextFactory() { #if HAVE_THREAD_CONTEXTS delete raw_parmap; - xbt_free(raw_workers_context); + delete[] raw_workers_context; #endif } @@ -408,7 +408,7 @@ void RawContext::suspend_parallel() XBT_DEBUG("No more processes to run"); uintptr_t worker_id = (uintptr_t) xbt_os_thread_get_specific(raw_worker_id_key); - next_context = static_cast(raw_workers_context[worker_id]); + next_context = raw_workers_context[worker_id]; XBT_DEBUG("Restoring worker stack %zu (working threads = %zu)", worker_id, raw_threads_working); } @@ -447,20 +447,4 @@ void RawContext::resume_parallel() #endif } -/** @brief Resumes all processes ready to run. */ -void RawContextFactory::run_all_adaptative() -{ - unsigned long nb_processes = simix_global->process_to_run.size(); - if (SIMIX_context_is_parallel() && - static_cast(SIMIX_context_get_parallel_threshold()) < nb_processes) { - raw_context_parallel = true; - XBT_DEBUG("Runall // %lu", nb_processes); - this->run_all_parallel(); - } else { - XBT_DEBUG("Runall serial %lu", nb_processes); - raw_context_parallel = false; - this->run_all_serial(); - } -} - }}}