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.
This commit is contained in:
Stephen Seo 2021-09-08 15:55:08 +09:00
parent 388d48056f
commit 79748d58f1

View file

@ -731,13 +731,13 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructZero, ThreadCount> fnDataAr; std::array<TPFnDataStructZero, ThreadCount * 2> fnDataAr;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -852,13 +852,13 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructOne<Function>, ThreadCount> fnDataAr; std::array<TPFnDataStructOne<Function>, ThreadCount * 2> fnDataAr;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1002,13 +1002,13 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructTwo, ThreadCount> fnDataAr; std::array<TPFnDataStructTwo, ThreadCount * 2> fnDataAr;
std::size_t s = matching.size() / ThreadCount; std::size_t s = matching.size() / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = matching.size(); end = matching.size();
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1075,14 +1075,14 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructThree, ThreadCount> fnDataAr; std::array<TPFnDataStructThree, ThreadCount * 2> fnDataAr;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
std::mutex mutex; 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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1452,14 +1452,14 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructFour, ThreadCount> fnDataAr; std::array<TPFnDataStructFour, ThreadCount * 2> fnDataAr;
std::mutex mutex; std::mutex mutex;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1522,13 +1522,14 @@ namespace EC
} }
} }
} else { } else {
std::array<TPFnDataStructFive, ThreadCount> fnDataAr; std::array<TPFnDataStructFive, ThreadCount * 2>
fnDataAr;
std::size_t s = multiMatchingEntities[index].size() std::size_t s = multiMatchingEntities[index].size()
/ ThreadCount; / (ThreadCount * 2);
for(unsigned int i = 0; i < ThreadCount; ++i) { for(unsigned int i = 0; i < ThreadCount * 2; ++i) {
std::size_t begin = s * i; std::size_t begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = multiMatchingEntities[index].size(); end = multiMatchingEntities[index].size();
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1660,14 +1661,14 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructSix, ThreadCount> fnDataAr; std::array<TPFnDataStructSix, ThreadCount * 2> fnDataAr;
std::mutex mutex; std::mutex mutex;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1735,13 +1736,14 @@ namespace EC
} }
else else
{ {
std::array<TPFnDataStructFive, ThreadCount> fnDataAr; std::array<TPFnDataStructFive, ThreadCount * 2>
fnDataAr;
std::size_t s = multiMatchingEntities[index].size() std::size_t s = multiMatchingEntities[index].size()
/ ThreadCount; / (ThreadCount * 2);
for(unsigned int i = 0; i < ThreadCount; ++i) { for(unsigned int i = 0; i < ThreadCount * 2; ++i) {
std::size_t begin = s * i; std::size_t begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = multiMatchingEntities[index].size(); end = multiMatchingEntities[index].size();
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1821,13 +1823,13 @@ namespace EC
} }
} }
} else { } else {
std::array<TPFnDataStructZero, ThreadCount> fnDataAr; std::array<TPFnDataStructZero, ThreadCount * 2> fnDataAr;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);
@ -1906,13 +1908,14 @@ namespace EC
fn(i, this, userData); fn(i, this, userData);
} }
} else { } else {
std::array<TPFnDataStructSeven<Iterable>, ThreadCount> fnDataAr; std::array<TPFnDataStructSeven<Iterable>, ThreadCount * 2>
fnDataAr;
std::size_t s = currentSize / ThreadCount; std::size_t s = currentSize / (ThreadCount * 2);
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 begin = s * i;
std::size_t end; std::size_t end;
if(i == ThreadCount - 1) { if(i == ThreadCount * 2 - 1) {
end = currentSize; end = currentSize;
} else { } else {
end = s * (i + 1); end = s * (i + 1);