Browse Source

Combine all stats collating into one function to avoid repeating function calls on each variable.

nfactor-troky
Con Kolivas 13 years ago
parent
commit
1ed219372e
  1. 111
      adl.c
  2. 2
      adl.h
  3. 9
      main.c

111
adl.c

@ -249,20 +249,14 @@ void init_adl(int nDevs)
adl_active = true; adl_active = true;
} }
float gpu_temp(int gpu) static inline float __gpu_temp(struct gpu_adl *ga)
{ {
struct gpu_adl *ga;
if (!gpus[gpu].has_adl || !adl_active)
return 0;
ga = &gpus[gpu].adl;
if (ADL_Overdrive5_Temperature_Get(ga->iAdapterIndex, 0, &ga->lpTemperature) != ADL_OK) if (ADL_Overdrive5_Temperature_Get(ga->iAdapterIndex, 0, &ga->lpTemperature) != ADL_OK)
return 0; return 0;
return (float)ga->lpTemperature.iTemperature / 1000; return (float)ga->lpTemperature.iTemperature / 1000;
} }
int gpu_engineclock(int gpu) float gpu_temp(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -270,12 +264,15 @@ int gpu_engineclock(int gpu)
return 0; return 0;
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK) return __gpu_temp(ga);
return 0; }
static inline int __gpu_engineclock(struct gpu_adl *ga)
{
return ga->lpActivity.iEngineClock / 100; return ga->lpActivity.iEngineClock / 100;
} }
int gpu_memclock(int gpu) int gpu_engineclock(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -285,10 +282,15 @@ int gpu_memclock(int gpu)
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK) if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK)
return 0; return 0;
return __gpu_engineclock(ga);
}
static inline int __gpu_memclock(struct gpu_adl *ga)
{
return ga->lpActivity.iMemoryClock / 100; return ga->lpActivity.iMemoryClock / 100;
} }
float gpu_vddc(int gpu) int gpu_memclock(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -298,10 +300,15 @@ float gpu_vddc(int gpu)
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK) if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK)
return 0; return 0;
return __gpu_memclock(ga);
}
static inline float __gpu_vddc(struct gpu_adl *ga)
{
return (float)ga->lpActivity.iVddc / 1000; return (float)ga->lpActivity.iVddc / 1000;
} }
int gpu_activity(int gpu) float gpu_vddc(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -309,14 +316,19 @@ int gpu_activity(int gpu)
return 0; return 0;
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
if (!ga->lpOdParameters.iActivityReportingSupported)
return 0;
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK) if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK)
return 0; return 0;
return __gpu_vddc(ga);
}
static inline int __gpu_activity(struct gpu_adl *ga)
{
if (!ga->lpOdParameters.iActivityReportingSupported)
return 0;
return ga->lpActivity.iActivityPercent; return ga->lpActivity.iActivityPercent;
} }
int gpu_fanspeed(int gpu) int gpu_activity(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -324,6 +336,13 @@ int gpu_fanspeed(int gpu)
return 0; return 0;
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK)
return 0;
return __gpu_activity(ga);
}
static inline int __gpu_fanspeed(struct gpu_adl *ga)
{
if (!(ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_RPM_READ)) if (!(ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_RPM_READ))
return 0; return 0;
ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM; ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM;
@ -332,14 +351,19 @@ int gpu_fanspeed(int gpu)
return ga->lpFanSpeedValue.iFanSpeed; return ga->lpFanSpeedValue.iFanSpeed;
} }
int gpu_fanpercent(int gpu) int gpu_fanspeed(int gpu)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
if (!gpus[gpu].has_adl || !adl_active) if (!gpus[gpu].has_adl || !adl_active)
return -1; return 0;
ga = &gpus[gpu].adl; ga = &gpus[gpu].adl;
return __gpu_fanspeed(ga);
}
static inline int __gpu_fanpercent(struct gpu_adl *ga)
{
if (!(ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ )) if (!(ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ ))
return -1; return -1;
ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_PERCENT; ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
@ -348,6 +372,44 @@ int gpu_fanpercent(int gpu)
return ga->lpFanSpeedValue.iFanSpeed; return ga->lpFanSpeedValue.iFanSpeed;
} }
int gpu_fanpercent(int gpu)
{
struct gpu_adl *ga;
if (!gpus[gpu].has_adl || !adl_active)
return -1;
ga = &gpus[gpu].adl;
return __gpu_fanpercent(ga);
}
bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, float *vddc,
int *activity, int *fanspeed, int *fanpercent)
{
struct gpu_adl *ga;
if (!gpus[gpu].has_adl || !adl_active)
return false;
ga = &gpus[gpu].adl;
*temp = __gpu_temp(ga);
if (ADL_Overdrive5_CurrentActivity_Get(ga->iAdapterIndex, &ga->lpActivity) != ADL_OK) {
*engineclock = 0;
*memclock = 0;
*vddc = 0;
*activity = 0;
} else {
*engineclock = __gpu_engineclock(ga);
*memclock = __gpu_memclock(ga);
*vddc = __gpu_vddc(ga);
*activity = __gpu_activity(ga);
}
*fanspeed = __gpu_fanspeed(ga);
*fanpercent = __gpu_fanpercent(ga);
return true;
}
static void get_enginerange(int gpu, int *imin, int *imax) static void get_enginerange(int gpu, int *imin, int *imax)
{ {
struct gpu_adl *ga; struct gpu_adl *ga;
@ -578,11 +640,11 @@ void gpu_autotune(int gpu)
if (!gpus[gpu].has_adl || !adl_active) if (!gpus[gpu].has_adl || !adl_active)
return; return;
temp = gpu_temp(gpu); ga = &gpus[gpu].adl;
newpercent = fanpercent = gpu_fanpercent(gpu); temp = __gpu_temp(ga);
newpercent = fanpercent = __gpu_fanpercent(ga);
newengine = engine = gpu_engineclock(gpu) * 100; newengine = engine = gpu_engineclock(gpu) * 100;
ga = &gpus[gpu].adl;
if (temp && fanpercent >= 0 && ga->autofan) { if (temp && fanpercent >= 0 && ga->autofan) {
if (temp > ga->overtemp && fanpercent < 100) { if (temp > ga->overtemp && fanpercent < 100) {
applog(LOG_WARNING, "Overheat detected, increasing fan to 100%"); applog(LOG_WARNING, "Overheat detected, increasing fan to 100%");
@ -687,9 +749,12 @@ void change_gpusettings(int gpu)
float fval, fmin = 0, fmax = 0; float fval, fmin = 0, fmax = 0;
int val, imin = 0, imax = 0; int val, imin = 0, imax = 0;
char input; char input;
int engineclock = 0, memclock = 0, activity = 0, fanspeed = 0, fanpercent = 0;
float temp = 0, vddc = 0;
wlogprint("Temp: %.1f °C\nFan Speed: %d RPM\nEngine Clock: %d MHz\nMemory Clock: %d Mhz\nVddc: %.3f V\nActivity: %d%%\n", if (gpu_stats(gpu, &temp, &engineclock, &memclock, &vddc, &activity, &fanspeed, &fanpercent))
gpu_temp(gpu), gpu_fanspeed(gpu), gpu_engineclock(gpu), gpu_memclock(gpu), gpu_vddc(gpu), gpu_activity(gpu)); wlogprint("Temp: %.1f °C\nFan Speed: %d%% (%d RPM)\nEngine Clock: %d MHz\nMemory Clock: %d Mhz\nVddc: %.3f V\nActivity: %d%%\n",
temp, fanpercent, fanspeed, engineclock, memclock, vddc, activity);
wlogprint("Fan autotune is %s\n", ga->autofan ? "enabled" : "disabled"); wlogprint("Fan autotune is %s\n", ga->autofan ? "enabled" : "disabled");
wlogprint("GPU engine clock autotune is %s\n", ga->autoengine ? "enabled" : "disabled"); wlogprint("GPU engine clock autotune is %s\n", ga->autoengine ? "enabled" : "disabled");
wlogprint("Change [A]utomatic [E]ngine [F]an [M]emory [V]oltage\n"); wlogprint("Change [A]utomatic [E]ngine [F]an [M]emory [V]oltage\n");

2
adl.h

@ -13,6 +13,8 @@ float gpu_vddc(int gpu);
int gpu_activity(int gpu); int gpu_activity(int gpu);
int gpu_fanspeed(int gpu); int gpu_fanspeed(int gpu);
int gpu_fanpercent(int gpu); int gpu_fanpercent(int gpu);
bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, float *vddc,
int *activity, int *fanspeed, int *fanpercent);
void change_gpusettings(int gpu); void change_gpusettings(int gpu);
void gpu_autotune(int gpu); void gpu_autotune(int gpu);
void clear_adl(int nDevs); void clear_adl(int nDevs);

9
main.c

@ -2778,9 +2778,14 @@ retry:
cgpu->getworks, cgpu->accepted, cgpu->rejected, cgpu->hw_errors, cgpu->getworks, cgpu->accepted, cgpu->rejected, cgpu->hw_errors,
cgpu->efficiency, cgpu->utility); cgpu->efficiency, cgpu->utility);
#ifdef HAVE_ADL #ifdef HAVE_ADL
if (gpus[gpu].has_adl) if (gpus[gpu].has_adl) {
int engineclock = 0, memclock = 0, activity = 0, fanspeed = 0, fanpercent = 0;
float temp = 0, vddc = 0;
if (gpu_stats(gpu, &temp, &engineclock, &memclock, &vddc, &activity, &fanspeed, &fanpercent))
wlog("Temp: %.1f °C\nFan Speed: %d%% (%d RPM)\nEngine Clock: %d MHz\nMemory Clock: %d Mhz\nVddc: %.3f V\nActivity: %d%%\n", wlog("Temp: %.1f °C\nFan Speed: %d%% (%d RPM)\nEngine Clock: %d MHz\nMemory Clock: %d Mhz\nVddc: %.3f V\nActivity: %d%%\n",
gpu_temp(gpu), gpu_fanpercent(gpu), gpu_fanspeed(gpu), gpu_engineclock(gpu), gpu_memclock(gpu), gpu_vddc(gpu), gpu_activity(gpu)); temp, fanpercent, fanspeed, engineclock, memclock, vddc, activity);
}
#endif #endif
wlog("Last initialised: %s\n", cgpu->init); wlog("Last initialised: %s\n", cgpu->init);
for (i = 0; i < mining_threads; i++) { for (i = 0; i < mining_threads; i++) {

Loading…
Cancel
Save