From f05270b8c880a8334fc12469b18c00d5d1b24419 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 22 Jun 2011 01:19:19 +1000 Subject: [PATCH] Optimise loop and make debug debug only. --- cpu-miner.c | 35 +++++++++++++++++------------------ ocl.c | 3 ++- oclminer.cl | 3 ++- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/cpu-miner.c b/cpu-miner.c index 16c6a9e8..cf611f9c 100644 --- a/cpu-miner.c +++ b/cpu-miner.c @@ -814,25 +814,24 @@ static void *gpuminer_thread(void *userdata) BUFFERSIZE, res, 0, NULL, NULL); if (unlikely(status != CL_SUCCESS)) { applog(LOG_ERR, "Error: clEnqueueReadBuffer failed. (clEnqueueReadBuffer)"); goto out;} - for (i = 0; i < 128; i++) { - int found = false; - - if (res[i]) { - uint32_t start = res[i]; - uint32_t my_g, my_nonce; - - applog(LOG_INFO, "GPU Found something?"); - my_g = postcalc_hash(mythr, &work->blk, work, start, start + 1026, &my_nonce, &h0count); - found = true; - res[i] = 0; - } - if (found) { - /* Clear the buffer again */ - status = clEnqueueWriteBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, - BUFFERSIZE, res, 0, NULL, NULL); - if (unlikely(status != CL_SUCCESS)) - { applog(LOG_ERR, "Error: clEnqueueWriteBuffer failed."); goto out; } + if (unlikely(res[127])) { + /* 127 is used as a flag to say nonces exist */ + for (i = 0; i < 127; i++) { + if (res[i]) { + uint32_t start = res[i]; + uint32_t my_g, my_nonce; + + applog(LOG_INFO, "GPU Found something?"); + my_g = postcalc_hash(mythr, &work->blk, work, start, start + 1026, &my_nonce, &h0count); + res[i] = 0; + } else + break; } + /* Clear the buffer again */ + status = clEnqueueWriteBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, + BUFFERSIZE, res, 0, NULL, NULL); + if (unlikely(status != CL_SUCCESS)) + { applog(LOG_ERR, "Error: clEnqueueWriteBuffer failed."); goto out; } } gettimeofday(&tv_end, NULL); diff --git a/ocl.c b/ocl.c index 02e0d60d..326f303d 100644 --- a/ocl.c +++ b/ocl.c @@ -308,7 +308,8 @@ _clState *initCl(int gpu, char *name, size_t nameSize) { /* copy over all of the generated binaries. */ binaries = (char **)malloc( sizeof(char *)*nDevices ); for( i = 0; i < nDevices; i++ ) { - printf("binary size %d : %d\n", i, binary_sizes[i]); + if (opt_debug) + applog(LOG_DEBUG, "binary size %d : %d\n", i, binary_sizes[i]); if( binary_sizes[i] != 0 ) binaries[i] = (char *)malloc( sizeof(char)*binary_sizes[i] ); else diff --git a/oclminer.cl b/oclminer.cl index 968d01c6..54fd1a0d 100644 --- a/oclminer.cl +++ b/oclminer.cl @@ -629,9 +629,10 @@ A = A + E; H = H + D; if (H==0xa41f32e7) { - for (it = 0; it != 128; it++) { + for (it = 0; it != 127; it++) { if (!output[it]) { output[it] = tnonce; + output[127] = 1; break; } }