From: Martin Quinson Date: Sun, 27 Feb 2022 16:46:37 +0000 (+0100) Subject: Kill popping_bodies.cpp X-Git-Tag: v3.31~300 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/b92ccbf24de98e83153f96b440ec559fc739e295?hp=fb461c4d727a8bc0acb66a13d726149052849c62 Kill popping_bodies.cpp --- diff --git a/MANIFEST.in b/MANIFEST.in index 60a81f4616..1066f25375 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2466,7 +2466,6 @@ include src/simgrid/sg_version.cpp include src/simgrid/util.hpp include src/simix/libsmx.cpp include src/simix/popping.cpp -include src/simix/popping_bodies.cpp include src/simix/popping_enum.hpp include src/simix/popping_generated.cpp include src/simix/popping_private.hpp diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 2c5473b32b..1a00a7365f 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -11,6 +11,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "mc/mc.h" +#include "src/kernel/EngineImpl.hpp" #include "src/kernel/activity/CommImpl.hpp" #include "src/kernel/activity/ConditionVariableImpl.hpp" #include "src/kernel/activity/MutexImpl.hpp" @@ -19,13 +20,18 @@ #include "src/mc/mc_replay.hpp" #include "xbt/random.hpp" #include +#include -#include "popping_bodies.cpp" +#if SIMGRID_HAVE_MC +#include "src/mc/mc_forward.hpp" +#endif #include #include #include +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); + /** * @ingroup simix_comm_management */ @@ -220,17 +226,34 @@ bool simcall_comm_test(simgrid::kernel::activity::ActivityImpl* comm) // XBT_ATT return false; } +template static R simcall(simgrid::simix::Simcall call, T const&... t) +{ + auto self = simgrid::kernel::actor::ActorImpl::self(); + simgrid::simix::marshal(&self->simcall_, call, t...); + if (not simgrid::kernel::EngineImpl::get_instance()->is_maestro(self)) { + XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_)); + self->yield(); + } else { + self->simcall_handle(0); + } + return simgrid::simix::unmarshal(self->simcall_.result_); +} + void simcall_run_kernel(std::function const& code, simgrid::kernel::actor::SimcallObserver* observer) { simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = observer; - simcall_BODY_run_kernel(&code); + if (false) /* Go to that function to follow the code flow through the simcall barrier */ + SIMIX_run_kernel(&code); + simcall const*>(simgrid::simix::Simcall::RUN_KERNEL, &code); simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = nullptr; } void simcall_run_blocking(std::function const& code, simgrid::kernel::actor::SimcallObserver* observer) { simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = observer; - simcall_BODY_run_blocking(&code); + if (false) /* Go to that function to follow the code flow through the simcall barrier */ + SIMIX_run_kernel(&code); + simcall const*>(simgrid::simix::Simcall::RUN_BLOCKING, &code); simgrid::kernel::actor::ActorImpl::self()->simcall_.observer_ = nullptr; } diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp deleted file mode 100644 index 89e4a5efbf..0000000000 --- a/src/simix/popping_bodies.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/**********************************************************************/ -/* File generated by src/simix/simcalls.py from src/simix/simcalls.in */ -/* */ -/* DO NOT EVER CHANGE THIS FILE */ -/* */ -/* change simcalls specification in src/simix/simcalls.in */ -/* Copyright (c) 2014-2022. The SimGrid Team. All rights reserved. */ -/**********************************************************************/ - -/* - * Note that the name comes from http://en.wikipedia.org/wiki/Popping - * Indeed, the control flow is doing a strange dance in there. - * - * That's not about http://en.wikipedia.org/wiki/Poop, despite the odor :) - */ - -#include "src/kernel/EngineImpl.hpp" -#include "src/kernel/actor/ActorImpl.hpp" -#include "src/mc/mc_forward.hpp" -#include "xbt/ex.h" -#include -#include -#include -/** @cond */ // Please Doxygen, don't look at this - -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); - -using simgrid::simix::Simcall; - -template -inline static R simcall(Simcall call, T const&... t) -{ - auto self = simgrid::kernel::actor::ActorImpl::self(); - simgrid::simix::marshal(&self->simcall_, call, t...); - if (not simgrid::kernel::EngineImpl::get_instance()->is_maestro(self)) { - XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_)); - self->yield(); - } else { - self->simcall_handle(0); - } - return simgrid::simix::unmarshal(self->simcall_.result_); -} - -inline static void simcall_BODY_run_kernel(std::function const* code) -{ - if (false) /* Go to that function to follow the code flow through the simcall barrier */ - SIMIX_run_kernel(code); - return simcall const*>(Simcall::RUN_KERNEL, code); -} - -inline static void simcall_BODY_run_blocking(std::function const* code) -{ - if (false) /* Go to that function to follow the code flow through the simcall barrier */ - SIMIX_run_blocking(code); - return simcall const*>(Simcall::RUN_BLOCKING, code); -} -/** @endcond */ diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 20f6d4182a..0671a0c3bb 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -25,7 +25,6 @@ class Arg: class Simcall: - simcalls_body = None simcalls_pre = None def __init__(self, name, handler, res, args, call_kind): @@ -36,21 +35,6 @@ class Simcall: self.call_kind = call_kind def check(self): - # libsmx.c simcall_BODY_ - if self.simcalls_body is None: - f = open('libsmx.cpp') - self.simcalls_body = set(re.findall(r'simcall_BODY_(.*?)\(', f.read())) - f.close() - if self.name not in self.simcalls_body: - print('# ERROR: No function calling simcall_BODY_%s' % self.name) - print('# Add something like this to libsmx.c:') - print('%s simcall_%s(%s)' % (self.res.rettype(), self.name, ', '. - join('%s %s' % (arg.rettype(), arg.name) for arg in self.args))) - print('{') - print(' return simcall_BODY_%s(%s);' % (self.name, "...")) - print('}') - return False - # smx_*.c void simcall_HANDLER_host_on(smx_simcall_t simcall, # smx_host_t h) if self.simcalls_pre is None: @@ -149,29 +133,6 @@ class Simcall: res.append('') return '\n'.join(res) - def body(self): - res = [''] - res.append( - 'inline static %s simcall_BODY_%s(%s)' % (self.res.rettype(), - self.name, - ', '.join('%s %s' % (arg.rettype(), arg.name) for arg in self.args))) - res.append('{') - res.append(' if (false) /* Go to that function to follow the code flow through the simcall barrier */') - if self.need_handler: - res.append(' simcall_HANDLER_%s(%s);' % (self.name, - ', '.join(["&simgrid::kernel::actor::ActorImpl::self()->simcall_"] + [arg.name for arg in self.args]))) - else: - res.append(' SIMIX_%s(%s);' % (self.name, - ', '.join(arg.name for arg in self.args))) - res.append(' return simcall<%s%s>(Simcall::%s%s);' % ( - self.res.rettype(), - "".join([", " + arg.rettype() for i, arg in enumerate(self.args)]), - self.name.upper(), - "".join([", " + arg.name for i, arg in enumerate(self.args)]) - )) - res.append('}') - return '\n'.join(res) - def handler_prototype(self): if self.need_handler: return "XBT_PRIVATE %s simcall_HANDLER_%s(smx_simcall_t simcall%s);" % (self.res.rettype() if self.call_kind == 'Func' else 'void', @@ -347,41 +308,5 @@ def main(): fd.close() - # - # popping_bodies.cpp - # - fd = header('popping_bodies.cpp') - fd.write('#include "src/kernel/EngineImpl.hpp"\n') - fd.write('#include "src/kernel/actor/ActorImpl.hpp"\n') - fd.write('#include "src/mc/mc_forward.hpp"\n') - fd.write('#include "xbt/ex.h"\n') - fd.write('#include \n') - fd.write('#include \n') - fd.write('#include \n') - - fd.write("/** @cond */ // Please Doxygen, don't look at this\n") - fd.write(''' -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); - -using simgrid::simix::Simcall; - -template -inline static R simcall(Simcall call, T const&... t) -{ - auto self = simgrid::kernel::actor::ActorImpl::self(); - simgrid::simix::marshal(&self->simcall_, call, t...); - if (not simgrid::kernel::EngineImpl::get_instance()->is_maestro(self)) { - XBT_DEBUG("Yield process '%s' on simcall %s", self->get_cname(), SIMIX_simcall_name(self->simcall_)); - self->yield(); - } else { - self->simcall_handle(0); - } - return simgrid::simix::unmarshal(self->simcall_.result_); -} -''') - handle(fd, Simcall.body, simcalls, simcalls_dict) - fd.write("/** @endcond */\n") - fd.close() - if __name__ == '__main__': main() diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 87ca7accab..9d8235cf0c 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -25,7 +25,6 @@ set(EXTRA_DIST src/simix/simcalls.in src/simix/simcalls.py src/simix/popping_private.hpp - src/simix/popping_bodies.cpp src/simix/popping_generated.cpp src/simix/popping_enum.hpp src/smpi/colls/coll_tuned_topo.hpp