diff --git a/src/scheduler/ParallelScheduler.cpp b/src/scheduler/ParallelScheduler.cpp index 4e515099006b9e0588eafc7e981c5f5e80bbe97d..1d70646b70091e2e3ff6f03b8ee82ae62aeb1e43 100644 --- a/src/scheduler/ParallelScheduler.cpp +++ b/src/scheduler/ParallelScheduler.cpp @@ -127,7 +127,12 @@ void Aidge::ParallelScheduler::forward(bool forwardDims, const std::vector<std:: // in the next step for (size_t i = 0; i < staticSchedule.size(); ) { auto runnable = staticSchedule[i]; - if (!pool.busy() && runnable->early <= latest) { + if (runnable->early > latest) { + // No more node can be run at this step (latest) + break; + } + + if (!pool.busy()) { // Check that potential preceding non-critical nodes are finished bool ready = true; for (auto elt : runnable->laterThan) { @@ -168,9 +173,17 @@ void Aidge::ParallelScheduler::forward(bool forwardDims, const std::vector<std:: } } else { - // Thread pool is already full or no more node can be run at - // this step (latest) - break; + // Thread pool is already full + bool ready = true; + for (auto elt : mustFinish) { + ready = ready && finished.at(elt); + } + if (!ready) { + std::this_thread::yield(); + } + else { + break; + } } }