From 8bbdd45b9e63f6622ee2eac8f9dd0cd881a78aa4 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Thu, 12 Oct 2017 12:52:50 +0100 Subject: Affinity - fix C --- xmrstak/backend/cpu/minethd.cpp | 9 ++++++--- xmrstak/backend/cpu/minethd.hpp | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'xmrstak/backend') diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp index 51091bf..3059891 100644 --- a/xmrstak/backend/cpu/minethd.cpp +++ b/xmrstak/backend/cpu/minethd.cpp @@ -101,12 +101,15 @@ minethd::minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefet bNoPrefetch = no_prefetch; this->affinity = affinity; - std::lock_guard lock(work_thd_mtx); + std::future order_guard = order_fix.get_future(); + if(double_work) oWorkThd = std::thread(&minethd::double_work_main, this); else oWorkThd = std::thread(&minethd::work_main, this); + order_guard.wait(); + if(!thd_setaffinity(oWorkThd.native_handle(), affinity)) printer::inst()->print_msg(L1, "WARNING setting affinity failed."); } @@ -305,8 +308,6 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch) void minethd::pin_thd_affinity() { - std::lock_guard lock(work_thd_mtx); - // pin memory to NUMA node bindMemoryToNUMANode(affinity); } @@ -316,6 +317,8 @@ void minethd::work_main() if(affinity >= 0) //-1 means no affinity pin_thd_affinity(); + order_fix.set_value(); + cn_hash_fun hash_fun; cryptonight_ctx* ctx; uint64_t iCount = 0; diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp index ad75d07..c023fcb 100644 --- a/xmrstak/backend/cpu/minethd.hpp +++ b/xmrstak/backend/cpu/minethd.hpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include namespace xmrstak { @@ -46,7 +46,7 @@ private: miner_work oWork; void pin_thd_affinity(); - std::mutex work_thd_mtx; + std::promise order_fix; std::thread oWorkThd; int64_t affinity; -- cgit v1.1