Use real number of cores for default -par, ignore virtual cores
To determine the default for `-par`, the number of script verification threads, use [boost::thread::physical_concurrency()](http://www.boost.org/doc/libs/1_58_0/doc/html/thread/thread_management.html#thread.thread_management.thread.physical_concurrency) which counts only physical cores, not virtual cores. Virtual cores are roughly a set of cached registers to avoid context switches while threading, they cannot actually perform work, so spawning a verification thread for them could even reduce efficiency and will put undue load on the system. Should fix issue #6358, as well as some other reported system overload issues, especially on Intel processors. The function was only introduced in boost 1.56, so provide a utility function `GetNumCores` to fall back for older Boost versions.
This commit is contained in:
committed by
Jack Grigg
parent
f630519d86
commit
da1357e6cc
10
src/util.cpp
10
src/util.cpp
@@ -908,3 +908,13 @@ std::string LicenseInfo()
|
||||
FormatParagraph(_("This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software written by Eric Young and UPnP software written by Thomas Bernard.")) +
|
||||
"\n";
|
||||
}
|
||||
|
||||
int GetNumCores()
|
||||
{
|
||||
#if BOOST_VERSION >= 105600
|
||||
return boost::thread::physical_concurrency();
|
||||
#else // Must fall back to hardware_concurrency, which unfortunately counts virtual cores
|
||||
return boost::thread::hardware_concurrency();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user