Browse Source

Merge commit '4fbc570' into stratum

Luke Dashjr 13 years ago
parent
commit
27f5eba0ed
2 changed files with 8 additions and 2 deletions
  1. 7 2
      driver-opencl.c
  2. 1 0
      miner.h

+ 7 - 2
driver-opencl.c

@@ -1804,14 +1804,19 @@ static int64_t opencl_scanhash(struct thr_info *thr, struct work *work,
 		gpu_us = us_tdiff(&tv_gpuend, &gpu->tv_gpumid);
 		if (gpu_us > 0 && ++gpu->hit > 4) {
 			gpu_us = us_tdiff(&tv_gpuend, &gpu->tv_gpustart) / gpu->intervals;
+			/* Very rarely we may get an overflow so put an upper
+			 * limit on the detected time */
+			if (gpu_us > gpu->gpu_us_average * 4)
+				gpu_us = gpu->gpu_us_average * 4;
+			gpu->gpu_us_average = (gpu->gpu_us_average + gpu_us * 0.63) / 1.63;
 
 			/* Try to not let the GPU be out for longer than
 			 * opt_dynamic_interval in ms, but increase
 			 * intensity when the system is idle in dynamic mode */
-			if (gpu_us > dynamic_us) {
+			if (gpu->gpu_us_average > dynamic_us) {
 				if (gpu->intensity > MIN_INTENSITY)
 					--gpu->intensity;
-			} else if (gpu_us < dynamic_us / 2) {
+			} else if (gpu->gpu_us_average < dynamic_us / 2) {	
 				if (gpu->intensity < MAX_INTENSITY)
 					++gpu->intensity;
 			}

+ 1 - 0
miner.h

@@ -446,6 +446,7 @@ struct cgpu_info {
 #endif
 	struct timeval tv_gpustart;
 	struct timeval tv_gpumid;
+	double gpu_us_average;
 	int intervals, hit;
 #endif