aboutsummaryrefslogtreecommitdiff
path: root/src/bench/checkqueue.cpp
diff options
context:
space:
mode:
authorHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2020-08-14 14:58:27 +0300
committerHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2020-08-26 13:00:00 +0300
commit3edc4e34fe2f92e7066c1455f5e42af2fdb43b99 (patch)
tree6c7aa67be3dd264348c4cc2db549ab31ec919b13 /src/bench/checkqueue.cpp
parentce3e6a7cb21d1aa455513970846e1f70c01472a4 (diff)
bench: Prevent thread oversubscription
This change decreases the variance of benchmark results.
Diffstat (limited to 'src/bench/checkqueue.cpp')
-rw-r--r--src/bench/checkqueue.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/bench/checkqueue.cpp b/src/bench/checkqueue.cpp
index 19d7bc0dbc..ffa772d8c1 100644
--- a/src/bench/checkqueue.cpp
+++ b/src/bench/checkqueue.cpp
@@ -14,8 +14,6 @@
#include <vector>
-
-static const int MIN_CORES = 2;
static const size_t BATCHES = 101;
static const size_t BATCH_SIZE = 30;
static const int PREVECTOR_SIZE = 28;
@@ -26,6 +24,9 @@ static const unsigned int QUEUE_BATCH_SIZE = 128;
// and there is a little bit of work done between calls to Add.
static void CCheckQueueSpeedPrevectorJob(benchmark::Bench& bench)
{
+ // We shouldn't ever be running with the checkqueue on a single core machine.
+ if (GetNumCores() <= 1) return;
+
const ECCVerifyHandle verify_handle;
ECC_Start();
@@ -44,7 +45,9 @@ static void CCheckQueueSpeedPrevectorJob(benchmark::Bench& bench)
};
CCheckQueue<PrevectorJob> queue {QUEUE_BATCH_SIZE};
boost::thread_group tg;
- for (auto x = 0; x < std::max(MIN_CORES, GetNumCores()); ++x) {
+ // The main thread should be counted to prevent thread oversubscription, and
+ // to decrease the variance of benchmark results.
+ for (auto x = 0; x < GetNumCores() - 1; ++x) {
tg.create_thread([&]{queue.Thread();});
}