|
|
@ -209,13 +209,13 @@ double time2secs(struct timeval *tv_start) { |
|
|
|
static void hashmeter(int thr_id, struct timeval *tv_start, |
|
|
|
static void hashmeter(int thr_id, struct timeval *tv_start, |
|
|
|
unsigned long hashes_done) |
|
|
|
unsigned long hashes_done) |
|
|
|
{ |
|
|
|
{ |
|
|
|
double khashes, secs; |
|
|
|
double mhashes, secs; |
|
|
|
|
|
|
|
|
|
|
|
secs = time2secs(tv_start); |
|
|
|
secs = time2secs(tv_start); |
|
|
|
|
|
|
|
|
|
|
|
khashes = hashes_done / 1000.0; |
|
|
|
mhashes = hashes_done / 1000.0 / 1000.0; |
|
|
|
|
|
|
|
|
|
|
|
hashrates[thr_id] = khashes / secs; |
|
|
|
hashrates[thr_id] = mhashes / secs; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void print_hashmeter(double hashrate, char *rates) { |
|
|
|
static void print_hashmeter(double hashrate, char *rates) { |
|
|
@ -289,11 +289,6 @@ static void *miner_thread(void *thr_id_int) |
|
|
|
unsigned long hashes_done; |
|
|
|
unsigned long hashes_done; |
|
|
|
hashes_done = 0; |
|
|
|
hashes_done = 0; |
|
|
|
|
|
|
|
|
|
|
|
unsigned int h0count = 0; |
|
|
|
|
|
|
|
struct timeval tv_start0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gettimeofday(&tv_start0, NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (1) { |
|
|
|
while (1) { |
|
|
|
struct timeval tv_start; |
|
|
|
struct timeval tv_start; |
|
|
|
bool rc; |
|
|
|
bool rc; |
|
|
@ -355,8 +350,6 @@ static void *miner_thread(void *thr_id_int) |
|
|
|
|
|
|
|
|
|
|
|
clFlush(clState->commandQueue); |
|
|
|
clFlush(clState->commandQueue); |
|
|
|
|
|
|
|
|
|
|
|
hashes_done = 1024 * threads; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (work[res_frame].ready) |
|
|
|
if (work[res_frame].ready) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int j; |
|
|
|
int j; |
|
|
@ -378,7 +371,6 @@ static void *miner_thread(void *thr_id_int) |
|
|
|
printf("Found solution for %08x %08x: %08x\n", *target1, *target2, res[j]); |
|
|
|
printf("Found solution for %08x %08x: %08x\n", *target1, *target2, res[j]); |
|
|
|
submit_nonce(&work[res_frame], swap32 (res[j])); |
|
|
|
submit_nonce(&work[res_frame], swap32 (res[j])); |
|
|
|
block++; |
|
|
|
block++; |
|
|
|
h0count++; |
|
|
|
|
|
|
|
need_work = true; |
|
|
|
need_work = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
@ -390,17 +382,14 @@ static void *miner_thread(void *thr_id_int) |
|
|
|
work[res_frame].ready = false; |
|
|
|
work[res_frame].ready = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (h0count != 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
double secs; |
|
|
|
|
|
|
|
secs = time2secs(&tv_start0); |
|
|
|
|
|
|
|
hashrates[thr_id] = h0count * pow (2, 256) / (secs * 1e6 * (pow (2, 224) - 1.0)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
status = clEnqueueReadBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, |
|
|
|
status = clEnqueueReadBuffer(clState->commandQueue, clState->outputBuffer, CL_TRUE, 0, |
|
|
|
sizeof(uint32_t) * threads, res, 0, NULL, NULL); |
|
|
|
sizeof(uint32_t) * threads, res, 0, NULL, NULL); |
|
|
|
if(status != CL_SUCCESS) { printf("Error: clEnqueueReadBuffer failed. (clEnqueueReadBuffer)\n"); return 0; } |
|
|
|
if(status != CL_SUCCESS) { printf("Error: clEnqueueReadBuffer failed. (clEnqueueReadBuffer)\n"); return 0; } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hashes_done = threads; |
|
|
|
|
|
|
|
hashmeter(thr_id, &tv_start, hashes_done); |
|
|
|
|
|
|
|
|
|
|
|
res_frame = frame; |
|
|
|
res_frame = frame; |
|
|
|
work[res_frame].ready = threads; |
|
|
|
work[res_frame].ready = threads; |
|
|
|
work[res_frame].res_nonce = work[res_frame].blk.data[19]; |
|
|
|
work[res_frame].res_nonce = work[res_frame].blk.data[19]; |
|
|
|