From f13f70c28eb9e4b38d3b4932f5845f1d5cc01906 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Fri, 13 Oct 2017 16:35:10 +0100 Subject: Implement pool-controlled nonce allocation --- xmrstak/backend/nvidia/minethd.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'xmrstak/backend/nvidia/minethd.cpp') diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index fcd01cd..6e157ab 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -192,11 +192,10 @@ void minethd::consume_work() void minethd::work_main() { uint64_t iCount = 0; - uint32_t iNonce; cryptonight_ctx* cpu_ctx; cpu_ctx = cpu::minethd::minethd_alloc_ctx(); cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/); - uint32_t* piNonce = (uint32_t*)(oWork.bWorkBlob + 39); + uint32_t iNonce = *(uint32_t*)(oWork.bWorkBlob + 39); globalStates::inst().iConsumeCnt++; @@ -222,16 +221,23 @@ void minethd::work_main() } cryptonight_extra_cpu_set_data(&ctx, oWork.bWorkBlob, oWork.iWorkSize); - if(oWork.bNiceHash) - iNonce = calc_nicehash_nonce(*piNonce, oWork.iResumeCnt); - else - iNonce = calc_start_nonce(oWork.iResumeCnt); + + uint32_t h_per_round = ctx.device_blocks * ctx.device_threads; + size_t round_ctr = 0; assert(sizeof(job_result::sJobID) == sizeof(pool_job::sJobID)); while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) { - + //Allocate a new nonce every 16 rounds + if((++round_ctr & 0xF) == 0) + { + if(oWork.bNiceHash) + iNonce = globalStates::inst().calc_start_nonce(iNonce & 0xFF000000u, h_per_round * 16); + else + iNonce = globalStates::inst().calc_start_nonce(0, h_per_round * 16); + } + uint32_t foundNonce[10]; uint32_t foundCount; @@ -257,8 +263,8 @@ void minethd::work_main() executor::inst()->log_result_error("NVIDIA Invalid Result"); } - iCount += ctx.device_blocks * ctx.device_threads; - iNonce += ctx.device_blocks * ctx.device_threads; + iCount += h_per_round; + iNonce += h_per_round; using namespace std::chrono; uint64_t iStamp = time_point_cast(high_resolution_clock::now()).time_since_epoch().count(); -- cgit v1.1 From 98a4caa224f637d1e1025b5e385352e5156896a8 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Sun, 15 Oct 2017 22:00:22 +0100 Subject: Implement changes suggested --- xmrstak/backend/nvidia/minethd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'xmrstak/backend/nvidia/minethd.cpp') diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 6e157ab..f82d56b 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -230,7 +230,7 @@ void minethd::work_main() while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) { //Allocate a new nonce every 16 rounds - if((++round_ctr & 0xF) == 0) + if((round_ctr++ & 0xF) == 0) { if(oWork.bNiceHash) iNonce = globalStates::inst().calc_start_nonce(iNonce & 0xFF000000u, h_per_round * 16); -- cgit v1.1 From d3c5911f8e486ac0d08c5160f6d9bd934c697b91 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Tue, 17 Oct 2017 21:30:29 +0100 Subject: move nicehash check into nonce calc --- xmrstak/backend/nvidia/minethd.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'xmrstak/backend/nvidia/minethd.cpp') diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index f82d56b..20d578d 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -232,10 +232,7 @@ void minethd::work_main() //Allocate a new nonce every 16 rounds if((round_ctr++ & 0xF) == 0) { - if(oWork.bNiceHash) - iNonce = globalStates::inst().calc_start_nonce(iNonce & 0xFF000000u, h_per_round * 16); - else - iNonce = globalStates::inst().calc_start_nonce(0, h_per_round * 16); + iNonce = globalStates::inst().calc_start_nonce(iNonce, oWork.bNiceHash, h_per_round * 16); } uint32_t foundNonce[10]; -- cgit v1.1 From 265ef629a19128a2ae7faff31179a9f4816ce2a3 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Tue, 17 Oct 2017 21:35:26 +0100 Subject: Fix GPU nicehash support --- xmrstak/backend/nvidia/minethd.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'xmrstak/backend/nvidia/minethd.cpp') diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 20d578d..8913877 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -195,7 +195,7 @@ void minethd::work_main() cryptonight_ctx* cpu_ctx; cpu_ctx = cpu::minethd::minethd_alloc_ctx(); cn_hash_fun hash_fun = cpu::minethd::func_selector(::jconf::inst()->HaveHardwareAes(), true /*bNoPrefetch*/); - uint32_t iNonce = *(uint32_t*)(oWork.bWorkBlob + 39); + uint32_t iNonce; globalStates::inst().iConsumeCnt++; @@ -227,6 +227,9 @@ void minethd::work_main() assert(sizeof(job_result::sJobID) == sizeof(pool_job::sJobID)); + if(oWork.bNiceHash) + iNonce = *(uint32_t*)(oWork.bWorkBlob + 39); + while(globalStates::inst().iGlobalJobNo.load(std::memory_order_relaxed) == iJobNo) { //Allocate a new nonce every 16 rounds -- cgit v1.1 From 53ddca9640ef54d709237c6a7929b1418b0ec438 Mon Sep 17 00:00:00 2001 From: fireice-uk Date: Tue, 17 Oct 2017 22:04:28 +0100 Subject: small fix --- xmrstak/backend/nvidia/minethd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'xmrstak/backend/nvidia/minethd.cpp') diff --git a/xmrstak/backend/nvidia/minethd.cpp b/xmrstak/backend/nvidia/minethd.cpp index 8913877..7549c86 100644 --- a/xmrstak/backend/nvidia/minethd.cpp +++ b/xmrstak/backend/nvidia/minethd.cpp @@ -235,7 +235,7 @@ void minethd::work_main() //Allocate a new nonce every 16 rounds if((round_ctr++ & 0xF) == 0) { - iNonce = globalStates::inst().calc_start_nonce(iNonce, oWork.bNiceHash, h_per_round * 16); + globalStates::inst().calc_start_nonce(iNonce, oWork.bNiceHash, h_per_round * 16); } uint32_t foundNonce[10]; -- cgit v1.1