Browse Source

modminer: Don't delay 2nd+ FPGAs during work restart

Add primary_thread boolean to threads to identify a single one as the "primary" thread for shared-resource multithreading.
This is needed since ModMiners use multiple threads to interface with independent hashing components.
nfactor-troky
Luke Dashjr 13 years ago
parent
commit
1215da39ee
  1. 4
      cgminer.c
  2. 2
      driver-modminer.c
  3. 1
      miner.h

4
cgminer.c

@ -3824,6 +3824,8 @@ void *miner_thread(void *userdata)
const time_t request_interval = opt_scantime * 2 / 3 ? : 1; const time_t request_interval = opt_scantime * 2 / 3 ? : 1;
unsigned const long request_nonce = MAXTHREADS / 3 * 2; unsigned const long request_nonce = MAXTHREADS / 3 * 2;
bool requested = false; bool requested = false;
const bool primary = (!mythr->device_thread) || mythr->primary_thread;
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
gettimeofday(&getwork_start, NULL); gettimeofday(&getwork_start, NULL);
@ -3905,7 +3907,7 @@ void *miner_thread(void *userdata)
* starting of every next thread to try and get * starting of every next thread to try and get
* all devices busy before worrying about * all devices busy before worrying about
* getting work for their extra threads */ * getting work for their extra threads */
if (mythr->device_thread) { if (!primary) {
struct timespec rgtp; struct timespec rgtp;
rgtp.tv_sec = 0; rgtp.tv_sec = 0;

2
driver-modminer.c

@ -318,6 +318,8 @@ modminer_fpga_init(struct thr_info *thr)
mutex_unlock(&modminer->device_mutex); mutex_unlock(&modminer->device_mutex);
thr->primary_thread = true;
return true; return true;
} }

1
miner.h

@ -391,6 +391,7 @@ struct thread_q {
struct thr_info { struct thr_info {
int id; int id;
int device_thread; int device_thread;
bool primary_thread;
pthread_t pth; pthread_t pth;
struct thread_q *q; struct thread_q *q;

Loading…
Cancel
Save