Browse Source

Map GPU devices to virtual devices in their true physical order based on BusNumber.

nfactor-troky
Con Kolivas 13 years ago
parent
commit
5a0b4f62d0
  1. 31
      adl.c
  2. 12
      adl.h
  3. 1
      miner.h

31
adl.c

@ -364,29 +364,38 @@ void init_adl(int nDevs) @@ -364,29 +364,38 @@ void init_adl(int nDevs)
ga->lasttemp = __gpu_temp(ga);
}
/* Search for twin GPUs on a single card. They will be separated by one
* bus id and one will have fanspeed while the other won't. */
for (gpu = 0; gpu < devices; gpu++) {
struct gpu_adl *ga = &gpus[gpu].adl;
struct cgpu_info *cgpu = &gpus[gpu];
int j;
if (ga->has_fanspeed)
continue;
cgpu->virtual_gpu = 0;
for (j = 0; j < devices; j++) {
struct gpu_adl *other_ga;
if (j == gpu)
continue;
other_ga = &gpus[j].adl;
if (fanspeed_twin(ga, other_ga)) {
applog(LOG_INFO, "Dual GPUs detected: %d and %d",
ga->gpu, other_ga->gpu);
ga->twin = other_ga;
other_ga->twin = ga;
break;
/* Find the real GPU order based on their order
* according to their iBusNumber value */
if (other_ga->iBusNumber < ga->iBusNumber)
cgpu->virtual_gpu++;
/* Search for twin GPUs on a single card. They will be
* separated by one bus id and one will have fanspeed
* while the other won't. */
if (!ga->has_fanspeed) {
if (fanspeed_twin(ga, other_ga)) {
applog(LOG_INFO, "Dual GPUs detected: %d and %d",
ga->gpu, other_ga->gpu);
ga->twin = other_ga;
other_ga->twin = ga;
}
}
}
applog(LOG_INFO, "GPU %d mapped to virtual GPU %d", gpu, cgpu->virtual_gpu);
}
}

12
adl.h

@ -20,8 +20,18 @@ void change_gpusettings(int gpu); @@ -20,8 +20,18 @@ void change_gpusettings(int gpu);
void gpu_autotune(int gpu, bool *enable);
void clear_adl(int nDevs);
#else /* HAVE_ADL */
#include "miner.h"
#define adl_active (0)
static inline void init_adl(int nDevs) {}
static inline void init_adl(int nDevs)
{
int i;
for (i = 0; i < nDevs; i++) {
struct cgpu_info *cgpu = &gpus[i];
cgpu->virtual_gpu = i;
}
}
static inline void change_gpusettings(int gpu) { }
static inline void clear_adl(int nDevs) {}
#endif

1
miner.h

@ -277,6 +277,7 @@ struct cgpu_info { @@ -277,6 +277,7 @@ struct cgpu_info {
int threads;
struct thr_info *thread;
int virtual_gpu;
bool dynamic;
int intensity;
#ifdef HAVE_ADL

Loading…
Cancel
Save