|
|
@ -1318,7 +1318,6 @@ static void *miner_thread(void *userdata) |
|
|
|
struct thr_info *mythr = (struct thr_info *)userdata; |
|
|
|
struct thr_info *mythr = (struct thr_info *)userdata; |
|
|
|
int thr_id = mythr->id; |
|
|
|
int thr_id = mythr->id; |
|
|
|
struct work work; |
|
|
|
struct work work; |
|
|
|
uint64_t loopcnt = 0; |
|
|
|
|
|
|
|
uint32_t max_nonce; |
|
|
|
uint32_t max_nonce; |
|
|
|
uint32_t end_nonce = UINT32_MAX / opt_n_threads * (thr_id + 1) - (thr_id + 1); |
|
|
|
uint32_t end_nonce = UINT32_MAX / opt_n_threads * (thr_id + 1) - (thr_id + 1); |
|
|
|
time_t firstwork_time = 0; |
|
|
|
time_t firstwork_time = 0; |
|
|
@ -1476,6 +1475,12 @@ static void *miner_thread(void *userdata) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* prevent gpu scans before a job is received */ |
|
|
|
|
|
|
|
if (have_stratum && !firstwork_time && work.data[0] == 0) { |
|
|
|
|
|
|
|
sleep(1); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* adjust max_nonce to meet target scan time */ |
|
|
|
/* adjust max_nonce to meet target scan time */ |
|
|
|
if (have_stratum) |
|
|
|
if (have_stratum) |
|
|
|
max64 = LP_SCANTIME; |
|
|
|
max64 = LP_SCANTIME; |
|
|
@ -1743,9 +1748,6 @@ static void *miner_thread(void *userdata) |
|
|
|
/* record scanhash elapsed time */ |
|
|
|
/* record scanhash elapsed time */ |
|
|
|
gettimeofday(&tv_end, NULL); |
|
|
|
gettimeofday(&tv_end, NULL); |
|
|
|
|
|
|
|
|
|
|
|
if (firstwork_time == 0) |
|
|
|
|
|
|
|
firstwork_time = time(NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rc && opt_debug) |
|
|
|
if (rc && opt_debug) |
|
|
|
applog(LOG_NOTICE, CL_CYN "found => %08x" CL_GRN " %08x", nonceptr[0], swab32(nonceptr[0])); // data[19]
|
|
|
|
applog(LOG_NOTICE, CL_CYN "found => %08x" CL_GRN " %08x", nonceptr[0], swab32(nonceptr[0])); // data[19]
|
|
|
|
if (rc > 1 && opt_debug) |
|
|
|
if (rc > 1 && opt_debug) |
|
|
@ -1793,14 +1795,14 @@ static void *miner_thread(void *userdata) |
|
|
|
hashlog_remember_scan_range(&work); |
|
|
|
hashlog_remember_scan_range(&work); |
|
|
|
|
|
|
|
|
|
|
|
/* output */ |
|
|
|
/* output */ |
|
|
|
if (!opt_quiet && loopcnt) { |
|
|
|
if (!opt_quiet && firstwork_time) { |
|
|
|
format_hashrate(thr_hashrates[thr_id], s); |
|
|
|
format_hashrate(thr_hashrates[thr_id], s); |
|
|
|
applog(LOG_INFO, "GPU #%d: %s, %s", |
|
|
|
applog(LOG_INFO, "GPU #%d: %s, %s", |
|
|
|
device_map[thr_id], device_name[device_map[thr_id]], s); |
|
|
|
device_map[thr_id], device_name[device_map[thr_id]], s); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* loopcnt: ignore first loop hashrate */ |
|
|
|
/* ignore first loop hashrate */ |
|
|
|
if (loopcnt && thr_id == (opt_n_threads - 1)) { |
|
|
|
if (firstwork_time && thr_id == (opt_n_threads - 1)) { |
|
|
|
double hashrate = 0.; |
|
|
|
double hashrate = 0.; |
|
|
|
pthread_mutex_lock(&stats_lock); |
|
|
|
pthread_mutex_lock(&stats_lock); |
|
|
|
for (int i = 0; i < opt_n_threads && thr_hashrates[i]; i++) |
|
|
|
for (int i = 0; i < opt_n_threads && thr_hashrates[i]; i++) |
|
|
@ -1815,6 +1817,9 @@ static void *miner_thread(void *userdata) |
|
|
|
global_hashrate = llround(hashrate); |
|
|
|
global_hashrate = llround(hashrate); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (firstwork_time == 0) |
|
|
|
|
|
|
|
firstwork_time = time(NULL); |
|
|
|
|
|
|
|
|
|
|
|
/* if nonce found, submit work */ |
|
|
|
/* if nonce found, submit work */ |
|
|
|
if (rc && !opt_benchmark) { |
|
|
|
if (rc && !opt_benchmark) { |
|
|
|
if (!submit_work(mythr, &work)) |
|
|
|
if (!submit_work(mythr, &work)) |
|
|
@ -1843,8 +1848,6 @@ static void *miner_thread(void *userdata) |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
loopcnt++; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
out: |
|
|
|
out: |
|
|
|