Browse Source

Use the max_hashes variable to determine when to abandon work.

ckolivas 14 years ago
parent
commit
c531f1bd04
2 changed files with 6 additions and 6 deletions
  1. 4 1
      cgminer.c
  2. 2 5
      device-gpu.c

+ 4 - 1
cgminer.c

@@ -3292,6 +3292,7 @@ void *miner_thread(void *userdata)
 		cycle = (can_roll(work) && should_roll(work)) ? 1 : def_cycle;
 		cycle = (can_roll(work) && should_roll(work)) ? 1 : def_cycle;
 		gettimeofday(&tv_workstart, NULL);
 		gettimeofday(&tv_workstart, NULL);
 		work->blk.nonce = 0;
 		work->blk.nonce = 0;
+		cgpu->max_hashes = 0;
 		if (api->prepare_work && !api->prepare_work(mythr, work)) {
 		if (api->prepare_work && !api->prepare_work(mythr, work)) {
 			applog(LOG_ERR, "work prepare failed, exiting "
 			applog(LOG_ERR, "work prepare failed, exiting "
 				"mining thread %d", thr_id);
 				"mining thread %d", thr_id);
@@ -3321,6 +3322,8 @@ void *miner_thread(void *userdata)
 			if (unlikely(!hashes))
 			if (unlikely(!hashes))
 				goto out;
 				goto out;
 			hashes_done += hashes;
 			hashes_done += hashes;
+			if (hashes > cgpu->max_hashes)
+				cgpu->max_hashes = hashes;
 
 
 			gettimeofday(&tv_end, NULL);
 			gettimeofday(&tv_end, NULL);
 			timeval_subtract(&diff, &tv_end, &tv_start);
 			timeval_subtract(&diff, &tv_end, &tv_start);
@@ -3380,7 +3383,7 @@ void *miner_thread(void *userdata)
 			}
 			}
 
 
 			sdiff.tv_sec = sdiff.tv_usec = 0;
 			sdiff.tv_sec = sdiff.tv_usec = 0;
-		} while (!abandon_work(work, &wdiff, hashes));
+		} while (!abandon_work(work, &wdiff, cgpu->max_hashes));
 	}
 	}
 
 
 out:
 out:

+ 2 - 5
device-gpu.c

@@ -1219,7 +1219,7 @@ static uint64_t opencl_scanhash(struct thr_info *thr, struct work *work,
 	}
 	}
 	set_threads_hashes(clState->preferred_vwidth, &threads, &hashes, globalThreads,
 	set_threads_hashes(clState->preferred_vwidth, &threads, &hashes, globalThreads,
 			   localThreads[0], gpu->intensity);
 			   localThreads[0], gpu->intensity);
-	if (gpu->dynamic && hashes > gpu->max_hashes)
+	if (hashes > gpu->max_hashes)
 		gpu->max_hashes = hashes;
 		gpu->max_hashes = hashes;
 	status = thrdata->queue_kernel_parameters(clState, &work->blk);
 	status = thrdata->queue_kernel_parameters(clState, &work->blk);
 	if (unlikely(status != CL_SUCCESS)) {
 	if (unlikely(status != CL_SUCCESS)) {
@@ -1264,10 +1264,7 @@ static uint64_t opencl_scanhash(struct thr_info *thr, struct work *work,
 	/* The amount of work scanned can fluctuate when intensity changes
 	/* The amount of work scanned can fluctuate when intensity changes
 	 * and since we do this one cycle behind, we increment the work more
 	 * and since we do this one cycle behind, we increment the work more
 	 * than enough to prevent repeating work */
 	 * than enough to prevent repeating work */
-	if (gpu->dynamic)
-		work->blk.nonce += gpu->max_hashes;
-	else
-		work->blk.nonce += hashes;
+	work->blk.nonce += gpu->max_hashes;
 
 
 	return hashes;
 	return hashes;
 }
 }