Fix atttempt at NUMA aff reset on Windows

This commit is contained in:
fireice-uk
2017-07-18 23:34:16 +01:00
parent 232c0c3523
commit 06402d739a
2 changed files with 19 additions and 16 deletions
+15 -13
View File
@@ -150,7 +150,7 @@ void telemetry::push_perf_value(size_t iThd, uint64_t iHashCount, uint64_t iTime
iBucketTop[iThd] = (iTop + 1) & iBucketMask;
}
minethd::minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int affinity)
minethd::minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int64_t affinity)
{
oWork = pWork;
bQuit = 0;
@@ -307,15 +307,6 @@ std::vector<minethd*>* minethd::thread_starter(miner_work& pWork)
jconf::inst()->GetThreadConfig(i, cfg);
minethd* thd = new minethd(pWork, i, cfg.bDoubleMode, cfg.bNoPrefetch, cfg.iCpuAff);
if(cfg.iCpuAff >= 0)
{
#if defined(__APPLE__)
printer::inst()->print_msg(L1, "WARNING on MacOS thread affinity is only advisory.");
#endif
thd_setaffinity(thd->oWorkThd.native_handle(), cfg.iCpuAff);
}
pvThreads->push_back(thd);
if(cfg.iCpuAff >= 0)
@@ -370,11 +361,22 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch)
return func_table[digit.to_ulong()];
}
void minethd::work_main()
void minethd::pin_thd_affinity()
{
// pin memory to NUMA node
bindMemoryToNUMANode(affinity);
#if defined(__APPLE__)
printer::inst()->print_msg(L1, "WARNING on MacOS thread affinity is only advisory.");
#endif
thd_setaffinity(oWorkThd.native_handle(), affinity);
}
void minethd::work_main()
{
if(affinity >= 0) //-1 means no affinity
pin_thd_affinity();
cn_hash_fun hash_fun;
cryptonight_ctx* ctx;
uint64_t iCount = 0;
@@ -462,8 +464,8 @@ minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefe
void minethd::double_work_main()
{
// pin memory to NUMA node
bindMemoryToNUMANode(affinity);
if(affinity >= 0) //-1 means no affinity
pin_thd_affinity();
cn_hash_fun_dbl hash_fun;
cryptonight_ctx* ctx0;
+4 -3
View File
@@ -97,13 +97,11 @@ public:
std::atomic<uint64_t> iHashCount;
std::atomic<uint64_t> iTimestamp;
int affinity;
private:
typedef void (*cn_hash_fun)(const void*, size_t, void*, cryptonight_ctx*);
typedef void (*cn_hash_fun_dbl)(const void*, size_t, void*, cryptonight_ctx* __restrict, cryptonight_ctx* __restrict);
minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int affinity);
minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefetch, int64_t affinity);
// We use the top 10 bits of the nonce for thread and resume
// This allows us to resume up to 128 threads 4 times before
@@ -131,8 +129,11 @@ private:
static miner_work oGlobalWork;
miner_work oWork;
void pin_thd_affinity();
std::thread oWorkThd;
uint8_t iThreadNo;
int64_t affinity;
bool bQuit;
bool bNoPrefetch;