1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-02-06 12:04:20 +00:00

Increase GPU timing resolution to microsecond and add sanity check to ensure times are positive.

This commit is contained in:
ckolivas 2012-06-26 12:50:52 +10:00
parent 999dba479a
commit dffda2382f
2 changed files with 16 additions and 13 deletions

View File

@ -1346,6 +1346,7 @@ static uint64_t opencl_scanhash(struct thr_info *thr, struct work *work,
struct cgpu_info *gpu = thr->cgpu; struct cgpu_info *gpu = thr->cgpu;
_clState *clState = clStates[thr_id]; _clState *clState = clStates[thr_id];
const cl_kernel *kernel = &clState->kernel; const cl_kernel *kernel = &clState->kernel;
const int dynamic_us = opt_dynamic_interval * 1000;
cl_int status; cl_int status;
size_t globalThreads[1]; size_t globalThreads[1];
@ -1359,21 +1360,23 @@ static uint64_t opencl_scanhash(struct thr_info *thr, struct work *work,
if (gpu->dynamic) { if (gpu->dynamic) {
struct timeval diff; struct timeval diff;
suseconds_t gpu_ms; suseconds_t gpu_us;
timersub(&gpu->tv_gpuend, &gpu->tv_gpustart, &diff); timersub(&gpu->tv_gpuend, &gpu->tv_gpustart, &diff);
gpu_ms = diff.tv_sec * 1000 + diff.tv_usec / 1000; gpu_us = diff.tv_sec * 1000 + diff.tv_usec;
gpu->gpu_ms_average = (gpu->gpu_ms_average + gpu_ms * 0.63) / 1.63; if (likely(gpu_us > 0)) {
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 6ms, but /* Try to not let the GPU be out for longer than
* increase intensity when the system is idle, unless * opt_dynamic_interval in ms, but increase
* dynamic is disabled. */ * intensity when the system is idle in dynamic mode */
if (gpu->gpu_ms_average > opt_dynamic_interval) { if (gpu->gpu_us_average > dynamic_us) {
if (gpu->intensity > MIN_INTENSITY) if (gpu->intensity > MIN_INTENSITY)
--gpu->intensity; --gpu->intensity;
} else if (gpu->gpu_ms_average < (float)opt_dynamic_interval / 2) { } else if (gpu->gpu_us_average < dynamic_us / 2) {
if (gpu->intensity < MAX_INTENSITY) if (gpu->intensity < MAX_INTENSITY)
++gpu->intensity; ++gpu->intensity;
}
} }
} }
set_threads_hashes(clState->vwidth, &threads, &hashes, globalThreads, set_threads_hashes(clState->vwidth, &threads, &hashes, globalThreads,

View File

@ -345,7 +345,7 @@ struct cgpu_info {
struct timeval tv_gpustart;; struct timeval tv_gpustart;;
struct timeval tv_gpuend; struct timeval tv_gpuend;
double gpu_ms_average; double gpu_us_average;
#endif #endif
float temp; float temp;