From ad75343665355cda333a5d86e0ccae4d0c1813bf Mon Sep 17 00:00:00 2001 From: Florian Schmaus <flow@cs.fau.de> Date: Tue, 22 Feb 2022 19:22:16 +0100 Subject: [PATCH] [AbstractWorkStealingScheduler] Move pushBottom() in module Also rename 'res' to 'pushed' and only notify about new work if there was work pushed. --- emper/strategies/AbstractWorkStealingScheduler.cpp | 8 ++++++++ emper/strategies/AbstractWorkStealingScheduler.hpp | 9 +-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/emper/strategies/AbstractWorkStealingScheduler.cpp b/emper/strategies/AbstractWorkStealingScheduler.cpp index 47a89a7a..7cd422d5 100644 --- a/emper/strategies/AbstractWorkStealingScheduler.cpp +++ b/emper/strategies/AbstractWorkStealingScheduler.cpp @@ -284,3 +284,11 @@ auto AbstractWorkStealingScheduler::nextFiberResultFromMpscQueueOrWorkStealing() return nextFiberResultViaWorkStealing(); } + +auto AbstractWorkStealingScheduler::pushBottom(AbstractFiber& fiber) -> bool { + auto pushed = queue.pushBottom(&fiber); + if (pushed) [[likely]] { + onNewWork<CallerEnvironment::EMPER>(emper::FiberHint{emper::FiberSource::local}); + } + return pushed; +} diff --git a/emper/strategies/AbstractWorkStealingScheduler.hpp b/emper/strategies/AbstractWorkStealingScheduler.hpp index f6006cb2..35f80893 100644 --- a/emper/strategies/AbstractWorkStealingScheduler.hpp +++ b/emper/strategies/AbstractWorkStealingScheduler.hpp @@ -5,10 +5,7 @@ #include <cstddef> // for size_t #include <optional> -#include "CallerEnvironment.hpp" #include "Fiber.hpp" -#include "FiberHint.hpp" -#include "FiberSource.hpp" #include "Scheduler.hpp" #include "emper-common.h" #include "lib/adt/MpscQueue.hpp" @@ -48,11 +45,7 @@ class AbstractWorkStealingScheduler : public Scheduler { auto nextFiberResultViaWorkStealing() -> std::optional<NextFiberResult>; auto nextFiberResultFromMpscQueueOrWorkStealing() -> std::optional<NextFiberResult>; - auto pushBottom(AbstractFiber& fiber) -> bool override { - bool res = queue.pushBottom(&fiber); - onNewWork<CallerEnvironment::EMPER>(emper::FiberHint{emper::FiberSource::local}); - return res; - } + auto pushBottom(AbstractFiber& fiber) -> bool override; auto popBottom() -> AbstractFiber* override { AbstractFiber* fiber; -- GitLab