From d72add9af350f62fc17b7d8119812247a3c70561 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Fri, 20 Jul 2012 16:16:18 +1000 Subject: [PATCH] Send correct values to scrypt kernel to get it finally working. --- cgminer.c | 16 ++++++++++++---- driver-opencl.c | 15 ++++----------- findnonce.c | 9 ++++++--- ocl.c | 4 ++-- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/cgminer.c b/cgminer.c index df9feee7..f2ea3826 100644 --- a/cgminer.c +++ b/cgminer.c @@ -1711,8 +1711,13 @@ static bool submit_upstream_work(const struct work *work, CURL *curl) if (!QUIET) { hash32 = (uint32_t *)(work->hash); - sprintf(hashshow, "%08lx.%08lx%s", (unsigned long)(hash32[6]), (unsigned long)(hash32[5]), - work->block? " BLOCK!" : ""); + if (opt_scrypt) { + sprintf(hashshow, "%08lx.%08lx%s", (unsigned long)(hash32[7]), (unsigned long)(hash32[6]), + work->block? " BLOCK!" : ""); + } else { + sprintf(hashshow, "%08lx.%08lx%s", (unsigned long)(hash32[6]), (unsigned long)(hash32[5]), + work->block? " BLOCK!" : ""); + } } /* Theoretically threads could race when modifying accepted and @@ -3991,10 +3996,13 @@ bool test_nonce(struct work *work, uint32_t nonce) { uint32_t *work_nonce = (uint32_t *)(work->data + 64 + 12); + if (opt_scrypt) { + *work_nonce = nonce; + return true; + } + *work_nonce = htobe32(nonce); - if (opt_scrypt) - return true; return hashtest(work); } diff --git a/driver-opencl.c b/driver-opencl.c index 4ddf3365..3ec60dd3 100644 --- a/driver-opencl.c +++ b/driver-opencl.c @@ -995,7 +995,7 @@ static cl_int queue_diablo_kernel(_clState *clState, dev_blk_ctx *blk, cl_uint t #ifdef USE_SCRYPT static cl_int queue_scrypt_kernel(_clState *clState, dev_blk_ctx *blk, __maybe_unused cl_uint threads) { - cl_uint4 *midstate = (cl_uint4 *)blk->work->midstate; + char *midstate = blk->work->midstate; cl_kernel *kernel = &clState->kernel; unsigned int num = 0; cl_int status = 0; @@ -1006,16 +1006,9 @@ static cl_int queue_scrypt_kernel(_clState *clState, dev_blk_ctx *blk, __maybe_u CL_SET_ARG(clState->CLbuffer0); CL_SET_ARG(clState->outputBuffer); CL_SET_ARG(clState->padbuffer8); - CL_SET_ARG(midstate[0]); - CL_SET_ARG(midstate[16]); - -#if 0 - clSetKernelArg(clState->kernel,0,sizeof(cl_mem), &clState->CLbuffer[0]); - clSetKernelArg(clState->kernel,1,sizeof(cl_mem), &clState->CLbuffer[1]); - clSetKernelArg(clState->kernel,2,sizeof(cl_mem), &clState->padbuffer8); - clSetKernelArg(clState->kernel,3,sizeof(cl_uint4), &midstate[0]); - clSetKernelArg(clState->kernel,4,sizeof(cl_uint4), &midstate[16]); -#endif + CL_SET_VARG(4, &midstate[0]); + CL_SET_VARG(4, &midstate[16]); + return status; } #endif diff --git a/findnonce.c b/findnonce.c index d0e19176..a11333a1 100644 --- a/findnonce.c +++ b/findnonce.c @@ -229,13 +229,16 @@ static void *postcalc_hash(void *userdata) pthread_detach(pthread_self()); for (entry = 0; entry < FOUND; entry++) { - if (pcd->res[entry]) { + uint32_t nonce = pcd->res[entry]; + + if (nonce) { + applog(LOG_DEBUG, "OCL NONCE %u", nonce); #ifdef USE_SCRYPT if (opt_scrypt) - submit_nonce(thr, pcd->work, pcd->res[entry]); + submit_nonce(thr, pcd->work, nonce); else #endif - send_nonce(pcd, pcd->res[entry]); + send_nonce(pcd, nonce); nonces++; } } diff --git a/ocl.c b/ocl.c index feb6aa2c..1c6d98ee 100644 --- a/ocl.c +++ b/ocl.c @@ -487,8 +487,8 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize) #ifdef USE_SCRYPT if (opt_scrypt) { - clState->lookup_gap = 1; - clState->thread_concurrency = 1; + clState->lookup_gap = 2; + clState->thread_concurrency = 6144; } #endif