Skip to content

Commit de4eed0

Browse files
committed
gpu-engine and gpu-memclock exit values are now applied when disabling a device.
This goes for both the ncurses interface and through the API.
1 parent 2c8b922 commit de4eed0

File tree

4 files changed

+47
-19
lines changed

4 files changed

+47
-19
lines changed

adl.c

+34-19
Original file line numberDiff line numberDiff line change
@@ -1485,38 +1485,53 @@ static void free_adl(void)
14851485
#endif
14861486
}
14871487

1488-
void clear_adl(int nDevs)
1488+
void adl_reset_device(int device_id, bool _disabling, bool _freeing)
14891489
{
14901490
struct gpu_adl *ga;
1491-
int i;
14921491

14931492
if (!adl_active)
14941493
return;
14951494

14961495
lock_adl();
1497-
/* Try to reset values to their defaults */
1498-
for (i = 0; i < nDevs; i++) {
1499-
ga = &gpus[i].adl;
1500-
/* Only reset the values if we've changed them at any time */
1501-
if (!gpus[i].has_adl || !ga->managed)
1502-
continue;
1503-
1496+
ga = &gpus[device_id].adl;
1497+
// Only reset the values if we've changed them at any time
1498+
if (gpus[device_id].has_adl && ga->managed)
1499+
{
15041500
int lev;
15051501
lev = ga->lpOdParameters.iNumberOfPerformanceLevels - 1;
15061502

1507-
/* Set exit values of the GPU */
1508-
if (gpus[i].gpu_engine_exit)
1509-
ga->DefPerfLev->aLevels[lev].iEngineClock = gpus[i].gpu_engine_exit * 100;
1510-
if (gpus[i].gpu_memclock_exit)
1511-
ga->DefPerfLev->aLevels[lev].iMemoryClock = gpus[i].gpu_memclock_exit * 100;
1512-
1503+
ga->DefPerfLev->aLevels[lev].iEngineClock = gpus[device_id].gpu_engine * 100;
1504+
ga->DefPerfLev->aLevels[lev].iMemoryClock = gpus[device_id].gpu_memclock * 100;
1505+
if (_disabling) // Set exit/disable values of the GPU
1506+
{
1507+
if (gpus[device_id].gpu_engine_exit)
1508+
ga->DefPerfLev->aLevels[lev].iEngineClock = gpus[device_id].gpu_engine_exit * 100;
1509+
if (gpus[device_id].gpu_memclock_exit)
1510+
ga->DefPerfLev->aLevels[lev].iMemoryClock = gpus[device_id].gpu_memclock_exit * 100;
1511+
}
15131512
ADL_Overdrive5_ODPerformanceLevels_Set(ga->iAdapterIndex, ga->DefPerfLev);
1514-
free(ga->DefPerfLev);
1515-
ADL_Overdrive5_FanSpeed_Set(ga->iAdapterIndex, 0, &ga->DefFanSpeedValue);
1516-
ADL_Overdrive5_FanSpeedToDefault_Set(ga->iAdapterIndex, 0);
1513+
1514+
if (_freeing) {
1515+
free(ga->DefPerfLev);
1516+
ADL_Overdrive5_FanSpeed_Set(ga->iAdapterIndex, 0, &ga->DefFanSpeedValue);
1517+
ADL_Overdrive5_FanSpeedToDefault_Set(ga->iAdapterIndex, 0);
1518+
}
15171519
}
1518-
adl_active = false;
15191520
unlock_adl();
1521+
}
1522+
1523+
void clear_adl(int nDevs)
1524+
{
1525+
int i;
1526+
1527+
if (!adl_active)
1528+
return;
1529+
1530+
for (i = 0; i < nDevs; i++) {
1531+
adl_reset_device(i, true, true);
1532+
}
1533+
1534+
adl_active = false;
15201535
free_adl();
15211536
}
15221537
#endif /* HAVE_ADL */

adl.h

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ bool gpu_stats(int gpu, float *temp, int *engineclock, int *memclock, float *vdd
1818
int *activity, int *fanspeed, int *fanpercent, int *powertune);
1919
void change_gpusettings(int gpu);
2020
void gpu_autotune(int gpu, enum dev_enable *denable);
21+
void adl_reset_device(int device_id, bool _disabling, bool _freeing);
2122
void clear_adl(int nDevs);
2223
#else /* HAVE_ADL */
2324
#define adl_active (0)

api.c

+6
Original file line numberDiff line numberDiff line change
@@ -2690,6 +2690,9 @@ static void gpuenable(struct io_data *io_data, __maybe_unused SOCKETTYPE c, char
26902690
return;
26912691
}
26922692
gpus[id].deven = DEV_ENABLED;
2693+
#ifdef HAVE_ADL
2694+
adl_reset_device(id, false, false);
2695+
#endif
26932696
applog(LOG_DEBUG, "API Pushing sem post to thread %d", thr->id);
26942697
cgsem_post(&thr->sem);
26952698
}
@@ -2727,6 +2730,9 @@ static void gpudisable(struct io_data *io_data, __maybe_unused SOCKETTYPE c, cha
27272730
}
27282731

27292732
gpus[id].deven = DEV_DISABLED;
2733+
#ifdef HAVE_ADL
2734+
adl_reset_device(id, true, false);
2735+
#endif
27302736

27312737
message(io_data, MSG_GPUDIS, id, NULL, isjson);
27322738
}

driver-opencl.c

+6
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,9 @@ void manage_gpu(void)
887887
goto retry;
888888
}
889889
gpus[selected].deven = DEV_ENABLED;
890+
#ifdef HAVE_ADL
891+
adl_reset_device(selected, false, false);
892+
#endif
890893
for (i = 0; i < mining_threads; ++i) {
891894
thr = get_thread(i);
892895
cgpu = thr->cgpu;
@@ -915,6 +918,9 @@ void manage_gpu(void)
915918
goto retry;
916919
}
917920
gpus[selected].deven = DEV_DISABLED;
921+
#ifdef HAVE_ADL
922+
adl_reset_device(selected, true, false);
923+
#endif
918924
goto retry;
919925
} else if (!strncasecmp(&input, "i", 1)) {
920926
int intensity;

0 commit comments

Comments
 (0)