mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-11 07:17:58 +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)
|
void *miner_thread(void *userdata)
|
||||||
{
|
{
|
||||||
struct thr_info *mythr = 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 (*thread_init)(struct thr_info *);
|
||||||
bool (*prepare_work)(struct thr_info *, struct work *);
|
bool (*prepare_work)(struct thr_info *, struct work *);
|
||||||
int64_t (*scanhash)(struct thr_info *, struct work *, int64_t);
|
int64_t (*scanhash)(struct thr_info *, struct work *, int64_t);
|
||||||
|
int64_t (*scanwork)(struct thr_info *);
|
||||||
void (*hw_error)(struct thr_info *);
|
void (*hw_error)(struct thr_info *);
|
||||||
void (*thread_shutdown)(struct thr_info *);
|
void (*thread_shutdown)(struct thr_info *);
|
||||||
void (*thread_enable)(struct thr_info *);
|
void (*thread_enable)(struct thr_info *);
|
||||||
|
Loading…
Reference in New Issue
Block a user