|
|
@ -2035,7 +2035,8 @@ static void flush_requests(void) |
|
|
|
|
|
|
|
|
|
|
|
static inline bool can_roll(struct work *work) |
|
|
|
static inline bool can_roll(struct work *work) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return (!stale_work(work) && work->pool->has_rolltime && work->rolls < 11); |
|
|
|
return (work->pool && !stale_work(work) && work->pool->has_rolltime && |
|
|
|
|
|
|
|
work->rolls < 11); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool get_work(struct work *work, bool queued, struct thr_info *thr, |
|
|
|
static bool get_work(struct work *work, bool queued, struct thr_info *thr, |
|
|
@ -2179,6 +2180,7 @@ bool submit_nonce(struct thr_info *thr, struct work *work, uint32_t nonce) |
|
|
|
|
|
|
|
|
|
|
|
static void *miner_thread(void *userdata) |
|
|
|
static void *miner_thread(void *userdata) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
struct work work __attribute__((aligned(128))); |
|
|
|
struct thr_info *mythr = userdata; |
|
|
|
struct thr_info *mythr = userdata; |
|
|
|
const int thr_id = mythr->id; |
|
|
|
const int thr_id = mythr->id; |
|
|
|
uint32_t max_nonce = 0xffffff, total_hashes = 0; |
|
|
|
uint32_t max_nonce = 0xffffff, total_hashes = 0; |
|
|
@ -2205,8 +2207,10 @@ static void *miner_thread(void *userdata) |
|
|
|
if (!(opt_n_threads % num_processors)) |
|
|
|
if (!(opt_n_threads % num_processors)) |
|
|
|
affine_to_cpu(thr_id - gpu_threads, dev_from_id(thr_id)); |
|
|
|
affine_to_cpu(thr_id - gpu_threads, dev_from_id(thr_id)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Invalidate pool so it fails can_roll() test */ |
|
|
|
|
|
|
|
work.pool = NULL; |
|
|
|
|
|
|
|
|
|
|
|
while (1) { |
|
|
|
while (1) { |
|
|
|
struct work work __attribute__((aligned(128))); |
|
|
|
|
|
|
|
struct timeval tv_workstart, tv_start, tv_end, diff; |
|
|
|
struct timeval tv_workstart, tv_start, tv_end, diff; |
|
|
|
uint64_t max64; |
|
|
|
uint64_t max64; |
|
|
|
bool rc; |
|
|
|
bool rc; |
|
|
@ -2477,6 +2481,8 @@ static void *gpuminer_thread(void *userdata) |
|
|
|
diff.tv_sec = 0; |
|
|
|
diff.tv_sec = 0; |
|
|
|
gettimeofday(&tv_end, NULL); |
|
|
|
gettimeofday(&tv_end, NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
work->pool = NULL; |
|
|
|
|
|
|
|
|
|
|
|
status = clEnqueueWriteBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, |
|
|
|
status = clEnqueueWriteBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, |
|
|
|
BUFFERSIZE, blank_res, 0, NULL, NULL); |
|
|
|
BUFFERSIZE, blank_res, 0, NULL, NULL); |
|
|
|
if (unlikely(status != CL_SUCCESS)) |
|
|
|
if (unlikely(status != CL_SUCCESS)) |
|
|
@ -3323,10 +3329,6 @@ int main (int argc, char *argv[]) |
|
|
|
quit(1, "stage thread create failed"); |
|
|
|
quit(1, "stage thread create failed"); |
|
|
|
pthread_detach(thr->pth); |
|
|
|
pthread_detach(thr->pth); |
|
|
|
|
|
|
|
|
|
|
|
/* Flag the work as ready forcing the mining threads to wait till we
|
|
|
|
|
|
|
|
* actually put something into the queue */ |
|
|
|
|
|
|
|
inc_staged(current_pool(), mining_threads, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Create a unique get work queue */ |
|
|
|
/* Create a unique get work queue */ |
|
|
|
getq = tq_new(); |
|
|
|
getq = tq_new(); |
|
|
|
if (!getq) |
|
|
|
if (!getq) |
|
|
@ -3433,13 +3435,6 @@ int main (int argc, char *argv[]) |
|
|
|
if (pthread_create(&thr->pth, NULL, watchdog_thread, NULL)) |
|
|
|
if (pthread_create(&thr->pth, NULL, watchdog_thread, NULL)) |
|
|
|
quit(1, "wakeup thread create failed"); |
|
|
|
quit(1, "wakeup thread create failed"); |
|
|
|
|
|
|
|
|
|
|
|
/* Restart count as it will be wrong till all threads are started */ |
|
|
|
|
|
|
|
pthread_mutex_lock(&hash_lock); |
|
|
|
|
|
|
|
gettimeofday(&total_tv_start, NULL); |
|
|
|
|
|
|
|
gettimeofday(&total_tv_end, NULL); |
|
|
|
|
|
|
|
total_mhashes_done = 0; |
|
|
|
|
|
|
|
pthread_mutex_unlock(&hash_lock); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Now that everything's ready put enough work in the queue */ |
|
|
|
/* Now that everything's ready put enough work in the queue */ |
|
|
|
for (i = 0; i < opt_queue + mining_threads; i++) { |
|
|
|
for (i = 0; i < opt_queue + mining_threads; i++) { |
|
|
|
if (unlikely(!queue_request())) |
|
|
|
if (unlikely(!queue_request())) |
|
|
|