From a2dd410e362116a12ac5609da77abb3a5ee1b736 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Sun, 17 Jul 2011 19:33:53 +1000 Subject: [PATCH] Make sure not to try and submit work for nonces higher than already submitted in current work item. This reduces rejects substantially. --- findnonce.c | 17 ++++++++--------- main.c | 1 + miner.h | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/findnonce.c b/findnonce.c index de9890e2..06882b5f 100644 --- a/findnonce.c +++ b/findnonce.c @@ -157,7 +157,6 @@ static void *postcalc_hash(void *userdata) cl_uint A, B, C, D, E, F, G, H; cl_uint W[16]; cl_uint nonce; - cl_uint best_g; uint32_t end; int entry = 0; @@ -172,7 +171,6 @@ cycle: if (entry == MAXBUFFERS) goto out; - best_g = ~0; end = start + 1026; for (nonce = start; nonce != end; nonce+=1) { @@ -206,20 +204,21 @@ cycle: FR(48); PFR(56); if (unlikely(H == 0xA41F32E7)) { - if (unlikely(submit_nonce(thr, work, nonce) == false)) { - applog(LOG_ERR, "Failed to submit work, exiting"); - break; - } G += 0x1f83d9ab; G = ByteReverse(G); - if (G < best_g) - best_g = G; + if (G < thr->best_g) { + if (unlikely(submit_nonce(thr, work, nonce) == false)) { + applog(LOG_ERR, "Failed to submit work, exiting"); + break; + } + thr->best_g = G; + } } } - if (unlikely(best_g == ~0)) { + if (unlikely(thr->best_g == ~0)) { if (opt_debug) applog(LOG_DEBUG, "No best_g found! Error in OpenCL code?"); hw_errors++; diff --git a/main.c b/main.c index eb111fe2..1c9268ce 100644 --- a/main.c +++ b/main.c @@ -1727,6 +1727,7 @@ static void *gpuminer_thread(void *userdata) "gpu mining thread %d", mythr->id); goto out; } + mythr->best_g = ~0; mythr->cgpu->getworks++; work->thr_id = thr_id; requested = false; diff --git a/miner.h b/miner.h index 53a537e1..358590fc 100644 --- a/miner.h +++ b/miner.h @@ -145,6 +145,7 @@ struct thr_info { struct thread_q *q; struct cgpu_info *cgpu; struct timeval last; + cl_uint best_g; }; static inline uint32_t swab32(uint32_t v)