For those of you that want to overclock your Radeon VII GPUs(Heres what I wrote to do that) Please help me improve this

Purpose:
– script to overclock Radeon VII

For reference:
– I have 6 cards.
– Running Arch Linux.

Things at first glance to improve:
– Expression that could automatically discoverer the GPUs

Here is what I wrote:
!!CODE!!
function watch_gpus()
{
cards=(0 1 2 3 4 5)

for i in echo ${cards[@]}; do clear &&
echo -e “card $i\n” && cat /sys/kernel/debug/dri/$i/amdgpu_pm_info &&
sleep 5; done
}

function set_fans()
{
cards=(0 1 2 3 4 5)
for i in echo ${cards[@]}; do
fan=ls /sys/class/drm/card$i/device/hwmon/ &&
echo “1” > /sys/class/drm/card$i/device/hwmon/fan/pwm1_enable; done && for i in `echo {cards[@]}; do fan=ls /sys/class/drm/card$i/device/hwmon/` &&
echo “255” > /sys/class/drm/card$i/device/hwmon/$fan/pwm1; done
}

function set_fans_auto()
{
cards=(0 1 2 3 4 5)
for i in echo ${cards[@]}; do
fan=ls /sys/class/drm/card$i/device/hwmon/ &&
echo “2” > /sys/class/drm/card$i/device/hwmon/$fan/pwm1_enable; done
}

function set_power_state()
{
cards=(0 1 2 3 4 5)
for i in echo ${cards[@]}; do
echo “manual” > /sys/class/drm/card$i/device/power_dpm_force_performance_level
echo “6 7” > /sys/class/drm/card$i/device/pp_dpm_sclk
echo “2” > /sys/class/drm/card$i/device/pp_dpm_mclk; done
}

function set_power_limit()
{
cards=(0 1 2 3 4)
for i in echo ${cards[@]}; do
fan=ls /sys/class/drm/card$i/device/hwmon/ &&
echo 250000000 > /sys/class/drm/card$i/device/hwmon/$fan/power1_cap; done

}

function set_gpu_clocks(){
cards=(0 1 2 3 4 5)
for i in echo ${cards[@]}; do
echo “vc 2 1800 1075” > /sys/class/drm/card$i/device/pp_od_clk_voltage
echo “s 1 1800” > /sys/class/drm/card$i/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card$i/device/pp_od_clk_voltage
echo “manual” > /sys/class/drm/card$i/device/power_dpm_force_performance_level
echo “6 7” > /sys/class/drm/card$i/device/pp_dpm_sclk
echo “2” > /sys/class/drm/card$i/device/pp_dpm_mclk; done
}

set_fans &&
set_power_limit &&
set_gpu_clocks

usage:
set_single_gpu_clock

function set_single_gpu_clock(){
echo “vc 2 $2 $3” > /sys/class/drm/card$1/device/pp_od_clk_voltage
echo “s 1 $2” > /sys/class/drm/card$1/device/pp_od_clk_voltage
echo “c” > /sys/class/drm/card$1/device/pp_od_clk_voltage
echo “manual” > sys/class/drm/card$1/device/power_dpm_force_performance_level
echo “6 7” > /sys/class/drm/card$1/device/pp_dpm_sclk
echo “2” > /sys/class/drm/card$1/device/pp_dpm_mclk
cat /sys/kernel/debug/dri/$1/amdgpu_pm_info
}

!!CODE!!

I am working on better commenting this, but I would appreciate any help from the community on improving the functionality, versatility, and or accuracy of this script and or its functions.

Pic of my application:

3 Likes

Damn thats pretty.