Browse Source

Send correct values to scrypt kernel to get it finally working.

Con Kolivas 13 years ago
parent
commit
d72add9af3
4 changed files with 24 additions and 20 deletions
  1. 12 4
      cgminer.c
  2. 4 11
      driver-opencl.c
  3. 6 3
      findnonce.c
  4. 2 2
      ocl.c

+ 12 - 4
cgminer.c

@@ -1711,8 +1711,13 @@ static bool submit_upstream_work(const struct work *work, CURL *curl)
 
 
 	if (!QUIET) {
 	if (!QUIET) {
 		hash32 = (uint32_t *)(work->hash);
 		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
 	/* 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);
 	uint32_t *work_nonce = (uint32_t *)(work->data + 64 + 12);
 
 
+	if (opt_scrypt) {
+		*work_nonce = nonce;
+		return true;
+	}
+
 	*work_nonce = htobe32(nonce);
 	*work_nonce = htobe32(nonce);
 
 
-	if (opt_scrypt)
-		return true;
 
 
 	return hashtest(work);
 	return hashtest(work);
 }
 }

+ 4 - 11
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
 #ifdef USE_SCRYPT
 static cl_int queue_scrypt_kernel(_clState *clState, dev_blk_ctx *blk, __maybe_unused cl_uint threads)
 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;
 	cl_kernel *kernel = &clState->kernel;
 	unsigned int num = 0;
 	unsigned int num = 0;
 	cl_int status = 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->CLbuffer0);
 	CL_SET_ARG(clState->outputBuffer);
 	CL_SET_ARG(clState->outputBuffer);
 	CL_SET_ARG(clState->padbuffer8);
 	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;
 	return status;
 }
 }
 #endif
 #endif

+ 6 - 3
findnonce.c

@@ -229,13 +229,16 @@ static void *postcalc_hash(void *userdata)
 	pthread_detach(pthread_self());
 	pthread_detach(pthread_self());
 
 
 	for (entry = 0; entry < FOUND; entry++) {
 	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
 #ifdef USE_SCRYPT
 			if (opt_scrypt)
 			if (opt_scrypt)
-				submit_nonce(thr, pcd->work, pcd->res[entry]);
+				submit_nonce(thr, pcd->work, nonce);
 			else
 			else
 #endif
 #endif
-				send_nonce(pcd, pcd->res[entry]);
+				send_nonce(pcd, nonce);
 		nonces++;
 		nonces++;
 		}
 		}
 	}
 	}

+ 2 - 2
ocl.c

@@ -487,8 +487,8 @@ _clState *initCl(unsigned int gpu, char *name, size_t nameSize)
 
 
 #ifdef USE_SCRYPT
 #ifdef USE_SCRYPT
 	if (opt_scrypt) {
 	if (opt_scrypt) {
-		clState->lookup_gap = 1;
-		clState->thread_concurrency = 1;
+		clState->lookup_gap = 2;
+		clState->thread_concurrency = 6144;
 	}
 	}
 #endif
 #endif