mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
Create the hash queued work variant for use with devices that are fast enough to require a queue.
This commit is contained in:
parent
649f2939f7
commit
5e3253a7cf
47
cgminer.c
47
cgminer.c
@ -5595,6 +5595,53 @@ static void hash_sole_work(struct thr_info *mythr)
|
||||
}
|
||||
}
|
||||
|
||||
/* This version of hash work is for devices that are fast enough to always
|
||||
* perform a full nonce range and need a queue to maintain the device busy.
|
||||
* Work creation and destruction is not done from within this function
|
||||
* directly. */
|
||||
static void hash_queued_work(struct thr_info *mythr)
|
||||
{
|
||||
const long cycle = opt_log_interval / 5 ? : 1;
|
||||
struct timeval tv_start = {0, 0}, tv_end;
|
||||
struct cgpu_info *cgpu = mythr->cgpu;
|
||||
struct device_drv *drv = cgpu->drv;
|
||||
const int thr_id = mythr->id;
|
||||
int64_t hashes_done = 0;
|
||||
|
||||
while (42) {
|
||||
struct timeval diff;
|
||||
int64_t hashes;
|
||||
|
||||
mythr->work_restart = false;
|
||||
|
||||
//fill_queue(mythr, cgpu, drv, thr_id);
|
||||
|
||||
thread_reportin(mythr);
|
||||
hashes = drv->scanwork(mythr);
|
||||
if (unlikely(hashes == -1 )) {
|
||||
applog(LOG_ERR, "%s %d failure, disabling!", drv->name, cgpu->device_id);
|
||||
cgpu->deven = DEV_DISABLED;
|
||||
dev_error(cgpu, REASON_THREAD_ZERO_HASH);
|
||||
mt_disable(mythr, thr_id, drv);
|
||||
}
|
||||
|
||||
hashes_done += hashes;
|
||||
gettimeofday(&tv_end, NULL);
|
||||
timersub(&tv_end, &tv_start, &diff);
|
||||
if (diff.tv_sec >= cycle) {
|
||||
hashmeter(thr_id, &diff, hashes_done);
|
||||
hashes_done = 0;
|
||||
memcpy(&tv_start, &tv_end, sizeof(struct timeval));
|
||||
}
|
||||
|
||||
//if (unlikely(mythr->work_restart))
|
||||
// flush_queue(mythr, cgpu);
|
||||
|
||||
if (unlikely(mythr->pause || cgpu->deven != DEV_ENABLED))
|
||||
mt_disable(mythr, thr_id, drv);
|
||||
}
|
||||
}
|
||||
|
||||
void *miner_thread(void *userdata)
|
||||
{
|
||||
struct thr_info *mythr = userdata;
|
||||
|
1
miner.h
1
miner.h
@ -298,6 +298,7 @@ struct device_drv {
|
||||
bool (*thread_init)(struct thr_info *);
|
||||
bool (*prepare_work)(struct thr_info *, struct work *);
|
||||
int64_t (*scanhash)(struct thr_info *, struct work *, int64_t);
|
||||
int64_t (*scanwork)(struct thr_info *);
|
||||
void (*hw_error)(struct thr_info *);
|
||||
void (*thread_shutdown)(struct thr_info *);
|
||||
void (*thread_enable)(struct thr_info *);
|
||||
|
Loading…
Reference in New Issue
Block a user