A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
context: rewrite some comments, and useless cosmetics
[simgrid.git]
/
src
/
kernel
/
context
/
ContextBoost.cpp
diff --git
a/src/kernel/context/ContextBoost.cpp
b/src/kernel/context/ContextBoost.cpp
index
e1fff93
..
b3d609b
100644
(file)
--- a/
src/kernel/context/ContextBoost.cpp
+++ b/
src/kernel/context/ContextBoost.cpp
@@
-21,13
+21,13
@@
BoostContextFactory::BoostContextFactory()
{
BoostContext::set_maestro(nullptr);
if (parallel_)
-
ParallelBoost
Context::initialize();
+
Swapped
Context::initialize();
}
BoostContextFactory::~BoostContextFactory()
{
if (parallel_)
-
ParallelBoost
Context::finalize();
+
Swapped
Context::finalize();
}
smx_context_t BoostContextFactory::create_context(std::function<void()> code, void_pfn_smxprocess_t cleanup_func,
@@
-35,7
+35,7
@@
smx_context_t BoostContextFactory::create_context(std::function<void()> code, vo
{
if (parallel_)
return this->new_context<ParallelBoostContext>(std::move(code), cleanup_func, process);
- return this->new_context<
Serial
BoostContext>(std::move(code), cleanup_func, process);
+ return this->new_context<BoostContext>(std::move(code), cleanup_func, process);
}
void BoostContextFactory::run_all()
@@
-43,20
+43,17
@@
void BoostContextFactory::run_all()
if (parallel_)
ParallelBoostContext::run_all();
else
- S
erialBoost
Context::run_all();
+ S
wapped
Context::run_all();
}
// BoostContext
-BoostContext* BoostContext::maestro_context_ = nullptr;
-
BoostContext::BoostContext(std::function<void()> code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process)
- : Context(std::move(code), cleanup_func, process)
+ :
Swapped
Context(std::move(code), cleanup_func, process)
{
/* if the user provided a function for the process then use it, otherwise it is the context for maestro */
if (has_code()) {
- this->stack_ = SIMIX_context_stack_new();
/* We need to pass the bottom of the stack to make_fcontext,
depending on the stack direction it may be the lower or higher address: */
#if PTH_STACKGROWTH == -1
@@
-74,8
+71,8
@@
BoostContext::BoostContext(std::function<void()> code, void_pfn_smxprocess_t cle
#if BOOST_VERSION < 105600
this->fc_ = new boost::context::fcontext_t();
#endif
- if (
BoostContext::maestro_context_
== nullptr)
-
BoostContext::maestro_context_ = this
;
+ if (
get_maestro()
== nullptr)
+
set_maestro(this)
;
}
}
@@
-85,9
+82,8
@@
BoostContext::~BoostContext()
if (not this->stack_)
delete this->fc_;
#endif
- if (this == maestro_context_)
- maestro_context_ = nullptr;
- SIMIX_context_stack_delete(this->stack_);
+ if (this == get_maestro())
+ set_maestro(nullptr);
}
void BoostContext::wrapper(BoostContext::arg_type arg)
@@
-113,14
+109,15
@@
void BoostContext::wrapper(BoostContext::arg_type arg)
context->suspend();
}
-
inline void BoostContext::swap(BoostContext* from, BoostContext* to
)
+
void BoostContext::swap_into(SwappedContext* to_
)
{
+ BoostContext* to = static_cast<BoostContext*>(to_);
#if BOOST_VERSION < 105600
- boost::context::jump_fcontext(
from
->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
+ boost::context::jump_fcontext(
this
->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
#elif BOOST_VERSION < 106100
- boost::context::jump_fcontext(&
from
->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
+ boost::context::jump_fcontext(&
this
->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
#else
- BoostContext* ctx[2] = {
from
, to};
+ BoostContext* ctx[2] = {
this
, to};
ASAN_ONLY(void* fake_stack = nullptr);
ASAN_ONLY(to->asan_ctx_ = from);
ASAN_START_SWITCH(from->asan_stop_ ? nullptr : &fake_stack, to->asan_stack_, to->asan_stack_size_);
@@
-137,67
+134,8
@@
void BoostContext::stop()
throw StopRequest();
}
-// SerialBoostContext
-
-unsigned long SerialBoostContext::process_index_;
-
-void SerialBoostContext::suspend()
-{
- /* determine the next context */
- SerialBoostContext* next_context;
- unsigned long int i = process_index_;
- process_index_++;
-
- if (i < simix_global->process_to_run.size()) {
- /* execute the next process */
- XBT_DEBUG("Run next process");
- next_context = static_cast<SerialBoostContext*>(simix_global->process_to_run[i]->context_);
- } else {
- /* all processes were run, return to maestro */
- XBT_DEBUG("No more process to run");
- next_context = static_cast<SerialBoostContext*>(BoostContext::get_maestro());
- }
- SIMIX_context_set_current(next_context);
- BoostContext::swap(this, next_context);
-}
-
-void SerialBoostContext::resume()
-{
- SIMIX_context_set_current(this);
- BoostContext::swap(BoostContext::get_maestro(), this);
-}
-
-void SerialBoostContext::run_all()
-{
- if (simix_global->process_to_run.empty())
- return;
- smx_actor_t first_process = simix_global->process_to_run.front();
- process_index_ = 1;
- /* execute the first process */
- static_cast<SerialBoostContext*>(first_process->context_)->resume();
-}
-
// ParallelBoostContext
-simgrid::xbt::Parmap<smx_actor_t>* ParallelBoostContext::parmap_;
-std::atomic<uintptr_t> ParallelBoostContext::threads_working_;
-thread_local uintptr_t ParallelBoostContext::worker_id_;
-std::vector<ParallelBoostContext*> ParallelBoostContext::workers_context_;
-
-void ParallelBoostContext::initialize()
-{
- parmap_ = nullptr;
- workers_context_.clear();
- workers_context_.resize(SIMIX_context_get_nthreads(), nullptr);
-}
-
-void ParallelBoostContext::finalize()
-{
- delete parmap_;
- parmap_ = nullptr;
- workers_context_.clear();
-}
-
void ParallelBoostContext::run_all()
{
threads_working_ = 0;
@@
-214,7
+152,7
@@
void ParallelBoostContext::run_all()
void ParallelBoostContext::suspend()
{
boost::optional<smx_actor_t> next_work = parmap_->next();
-
ParallelBoost
Context* next_context;
+
Swapped
Context* next_context;
if (next_work) {
XBT_DEBUG("Run next process");
next_context = static_cast<ParallelBoostContext*>(next_work.get()->context_);
@@
-223,19
+161,19
@@
void ParallelBoostContext::suspend()
next_context = workers_context_[worker_id_];
}
-
SIMIX_context_
set_current(next_context);
-
BoostContext::swap(this,
next_context);
+
Context::
set_current(next_context);
+
this->swap_into(
next_context);
}
void ParallelBoostContext::resume()
{
worker_id_ = threads_working_.fetch_add(1, std::memory_order_relaxed);
-
ParallelBoostContext* worker_context = static_cast<ParallelBoostContext*>(SIMIX_context_
self());
- workers_context_[worker_id_]
= worker_context;
+
SwappedContext* worker_context = static_cast<SwappedContext*>(
self());
+ workers_context_[worker_id_] = worker_context;
-
SIMIX_context_
set_current(this);
-
BoostContext::swap(worker_context,
this);
+
Context::
set_current(this);
+
worker_context->swap_into(
this);
}