From 79748d58f1a6d2914b94e961bd7270b24e51bbd7 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Wed, 8 Sep 2021 15:55:08 +0900 Subject: [PATCH] Double the number of tasks given to ThreadPool Previous implementation only enqueued "ThreadCount" tasks to ThreadPool. For more efficiency, this has been changed to "ThreadCount * 2" tasks. --- src/EC/Manager.hpp | 83 ++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/src/EC/Manager.hpp b/src/EC/Manager.hpp index ada54d3..6a5333b 100644 --- a/src/EC/Manager.hpp +++ b/src/EC/Manager.hpp @@ -731,13 +731,13 @@ namespace EC } else { - std::array fnDataAr; + std::array fnDataAr; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -852,13 +852,13 @@ namespace EC } else { - std::array, ThreadCount> fnDataAr; + std::array, ThreadCount * 2> fnDataAr; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -1002,13 +1002,13 @@ namespace EC } else { - std::array fnDataAr; + std::array fnDataAr; - std::size_t s = matching.size() / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = matching.size() / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = matching.size(); } else { end = s * (i + 1); @@ -1075,14 +1075,14 @@ namespace EC } else { - std::array fnDataAr; + std::array fnDataAr; - std::size_t s = currentSize / ThreadCount; + std::size_t s = currentSize / (ThreadCount * 2); std::mutex mutex; - for(std::size_t i = 0; i < ThreadCount; ++i) { + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -1452,14 +1452,14 @@ namespace EC } else { - std::array fnDataAr; + std::array fnDataAr; std::mutex mutex; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -1522,13 +1522,14 @@ namespace EC } } } else { - std::array fnDataAr; + std::array + fnDataAr; std::size_t s = multiMatchingEntities[index].size() - / ThreadCount; - for(unsigned int i = 0; i < ThreadCount; ++i) { + / (ThreadCount * 2); + for(unsigned int i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = multiMatchingEntities[index].size(); } else { end = s * (i + 1); @@ -1660,14 +1661,14 @@ namespace EC } else { - std::array fnDataAr; + std::array fnDataAr; std::mutex mutex; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -1735,13 +1736,14 @@ namespace EC } else { - std::array fnDataAr; + std::array + fnDataAr; std::size_t s = multiMatchingEntities[index].size() - / ThreadCount; - for(unsigned int i = 0; i < ThreadCount; ++i) { + / (ThreadCount * 2); + for(unsigned int i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = multiMatchingEntities[index].size(); } else { end = s * (i + 1); @@ -1821,13 +1823,13 @@ namespace EC } } } else { - std::array fnDataAr; + std::array fnDataAr; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1); @@ -1906,13 +1908,14 @@ namespace EC fn(i, this, userData); } } else { - std::array, ThreadCount> fnDataAr; + std::array, ThreadCount * 2> + fnDataAr; - std::size_t s = currentSize / ThreadCount; - for(std::size_t i = 0; i < ThreadCount; ++i) { + std::size_t s = currentSize / (ThreadCount * 2); + for(std::size_t i = 0; i < ThreadCount * 2; ++i) { std::size_t begin = s * i; std::size_t end; - if(i == ThreadCount - 1) { + if(i == ThreadCount * 2 - 1) { end = currentSize; } else { end = s * (i + 1);