From 405b873f8ecdf46f9faacdcc5a1d43dc24d4d28a Mon Sep 17 00:00:00 2001 From: Alexander Date: Sat, 23 Dec 2023 18:06:51 +0300 Subject: [PATCH] improved --- src/files/Supervisor.h | 21 ++++++++++++++++++--- src/files/version.h | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/files/Supervisor.h b/src/files/Supervisor.h index 44fb9519..2c7a2284 100644 --- a/src/files/Supervisor.h +++ b/src/files/Supervisor.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "File.h" #include "Task.h" #include "Array.h" @@ -107,15 +108,30 @@ public: map, std::greater> sortedByKernelNeeds; size_t activeTasks = 0; - + int maxNeededKernels = 0; + for (auto& task : this->getElements()) { if (task->getState() == WorkspaceReady) { activeTasks++; sortedByKernelNeeds[task->getKernels()].push(task); + if (maxNeededKernels < task->getKernels()) + maxNeededKernels = task->getKernels(); } } - printf("total tasks count = %ld, active task count %ld, maxkernels %d\n", this->getLength(), activeTasks, maxKernels); + const int maxThreads = std::thread::hardware_concurrency(); + printf("total tasks count = %ld, active task count %ld, maxKernels %d, maxNeededKernels %d, maxThreads %d\n", + this->getLength(), activeTasks, maxKernels, maxNeededKernels, maxThreads); + + if (maxKernels > maxThreads) { + printf("truncated maxKernels to maxThreads: %d -> %d\n", maxKernels, maxThreads); + maxKernels = maxThreads; + } + + if (maxNeededKernels > maxKernels) { + printf("increased maxKernels to maxNeededKernels: %d -> %d\n", maxKernels, maxNeededKernels); + maxKernels = maxNeededKernels; + } int busyKernels = 0; set activeTaskSet; @@ -129,7 +145,6 @@ public: vector toDel; size_t done = 0; - //size_t step = activeTasks * 0.01; // step == 1% size_t step = ceil(activeTasks * 0.01); // step == 1% const double total = activeTasks; diff --git a/src/files/version.h b/src/files/version.h index 56a6051c..d8263ee9 100644 --- a/src/files/version.h +++ b/src/files/version.h @@ -1 +1 @@ -1 \ No newline at end of file +2 \ No newline at end of file