Auto merge of #2227 - str4d:2074-ignore-virtual-cores, r=str4d
Use real number of cores, ignore virtual cores Cherry-picked from the following upstream PRs: - bitcoin/bitcoin#6361 - bitcoin/bitcoin#6370 Part of #2074.
This commit is contained in:
commit
0a80a1cea3
|
@ -59,7 +59,6 @@ public:
|
|||
pchMessageStart[3] = 0x64;
|
||||
vAlertPubKey = ParseHex("04b7ecf0baa90495ceb4e4090f6b2fd37eec1e9c85fac68a487f3ce11589692e4a317479316ee814e066638e1db54e37a10689b70286e6315b1087b6615d179264");
|
||||
nDefaultPort = 8233;
|
||||
nMinerThreads = 0;
|
||||
nMaxTipAge = 24 * 60 * 60;
|
||||
nPruneAfterHeight = 100000;
|
||||
const size_t N = 200, K = 9;
|
||||
|
@ -219,7 +218,6 @@ public:
|
|||
pchMessageStart[3] = 0xbf;
|
||||
vAlertPubKey = ParseHex("044e7a1553392325c871c5ace5d6ad73501c66f4c185d6b0453cf45dec5a1322e705c672ac1a27ef7cdaf588c10effdf50ed5f95f85f2f54a5f6159fca394ed0c6");
|
||||
nDefaultPort = 18233;
|
||||
nMinerThreads = 0;
|
||||
nPruneAfterHeight = 1000;
|
||||
|
||||
//! Modify the testnet genesis block so the timestamp is valid for a later start.
|
||||
|
@ -308,7 +306,6 @@ public:
|
|||
pchMessageStart[1] = 0xe8;
|
||||
pchMessageStart[2] = 0x3f;
|
||||
pchMessageStart[3] = 0x5f;
|
||||
nMinerThreads = 1;
|
||||
nMaxTipAge = 24 * 60 * 60;
|
||||
const size_t N = 48, K = 5;
|
||||
BOOST_STATIC_ASSERT(equihash_parameters_acceptable(N, K));
|
||||
|
|
|
@ -53,8 +53,6 @@ public:
|
|||
const std::vector<unsigned char>& AlertKey() const { return vAlertPubKey; }
|
||||
int GetDefaultPort() const { return nDefaultPort; }
|
||||
|
||||
/** Used if GenerateBitcoins is called with a negative number of threads */
|
||||
int DefaultMinerThreads() const { return nMinerThreads; }
|
||||
const CBlock& GenesisBlock() const { return genesis; }
|
||||
/** Make miner wait to have peers to avoid wasting work */
|
||||
bool MiningRequiresPeers() const { return fMiningRequiresPeers; }
|
||||
|
@ -91,7 +89,6 @@ protected:
|
|||
//! Raw pub key bytes for the broadcast alert signing key.
|
||||
std::vector<unsigned char> vAlertPubKey;
|
||||
int nDefaultPort = 0;
|
||||
int nMinerThreads = 0;
|
||||
long nMaxTipAge = 0;
|
||||
uint64_t nPruneAfterHeight = 0;
|
||||
unsigned int nEquihashN = 0;
|
||||
|
|
|
@ -351,7 +351,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
|||
strUsage += HelpMessageOpt("-loadblock=<file>", _("Imports blocks from external blk000??.dat file") + " " + _("on startup"));
|
||||
strUsage += HelpMessageOpt("-maxorphantx=<n>", strprintf(_("Keep at most <n> unconnectable transactions in memory (default: %u)"), DEFAULT_MAX_ORPHAN_TRANSACTIONS));
|
||||
strUsage += HelpMessageOpt("-par=<n>", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"),
|
||||
-(int)boost::thread::hardware_concurrency(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS));
|
||||
-GetNumCores(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS));
|
||||
#ifndef WIN32
|
||||
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "zcashd.pid"));
|
||||
#endif
|
||||
|
@ -927,7 +927,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
||||
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
||||
if (nScriptCheckThreads <= 0)
|
||||
nScriptCheckThreads += boost::thread::hardware_concurrency();
|
||||
nScriptCheckThreads += GetNumCores();
|
||||
if (nScriptCheckThreads <= 1)
|
||||
nScriptCheckThreads = 0;
|
||||
else if (nScriptCheckThreads > MAX_SCRIPTCHECK_THREADS)
|
||||
|
|
|
@ -46,6 +46,12 @@ bool AtomicTimer::running()
|
|||
return threads > 0;
|
||||
}
|
||||
|
||||
uint64_t AtomicTimer::threadCount()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
return threads;
|
||||
}
|
||||
|
||||
double AtomicTimer::rate(const AtomicCounter& count)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
|
@ -192,15 +198,8 @@ int printMiningStatus(bool mining)
|
|||
int lines = 1;
|
||||
|
||||
if (mining) {
|
||||
int nThreads = GetArg("-genproclimit", 1);
|
||||
if (nThreads < 0) {
|
||||
// In regtest threads defaults to 1
|
||||
if (Params().DefaultMinerThreads())
|
||||
nThreads = Params().DefaultMinerThreads();
|
||||
else
|
||||
nThreads = boost::thread::hardware_concurrency();
|
||||
}
|
||||
if (miningTimer.running()) {
|
||||
auto nThreads = miningTimer.threadCount();
|
||||
if (nThreads > 0) {
|
||||
std::cout << strprintf(_("You are mining with the %s solver on %d threads."),
|
||||
GetArg("-equihashsolver", "default"), nThreads) << std::endl;
|
||||
} else {
|
||||
|
|
|
@ -49,6 +49,8 @@ public:
|
|||
|
||||
bool running();
|
||||
|
||||
uint64_t threadCount();
|
||||
|
||||
double rate(const AtomicCounter& count);
|
||||
};
|
||||
|
||||
|
|
|
@ -748,13 +748,8 @@ void GenerateBitcoins(bool fGenerate, int nThreads)
|
|||
{
|
||||
static boost::thread_group* minerThreads = NULL;
|
||||
|
||||
if (nThreads < 0) {
|
||||
// In regtest threads defaults to 1
|
||||
if (Params().DefaultMinerThreads())
|
||||
nThreads = Params().DefaultMinerThreads();
|
||||
else
|
||||
nThreads = boost::thread::hardware_concurrency();
|
||||
}
|
||||
if (nThreads < 0)
|
||||
nThreads = GetNumCores();
|
||||
|
||||
if (minerThreads != NULL)
|
||||
{
|
||||
|
|
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
|
||||
}
|
||||
|
||||
|
|
|
@ -219,6 +219,13 @@ std::string HelpMessageGroup(const std::string& message);
|
|||
*/
|
||||
std::string HelpMessageOpt(const std::string& option, const std::string& message);
|
||||
|
||||
/**
|
||||
* Return the number of physical cores available on the current system.
|
||||
* @note This does not count virtual cores, such as those provided by HyperThreading
|
||||
* when boost is newer than 1.56.
|
||||
*/
|
||||
int GetNumCores();
|
||||
|
||||
void SetThreadPriority(int nPriority);
|
||||
void RenameThread(const char* name);
|
||||
|
||||
|
|
Loading…
Reference in New Issue