There's been some discussion in various threads about undervolting GPUs to cut down on power/heat/noise, so I figured I'd share my findings here and make a place where others can share their results about cutting power consumption without giving up performanceThis is a rudimentary guide from my experience undervolting my RX480
First off, there are many power saving options offered in the AMD settings. "Power Efficiency", Frame Rate Target Control", and "Chill". As far as I know, unless you enable at least one of these settings, or an in-game framerate target setting, your GPU will simply run at it's max frequency (State 7) at all times in games.Power Efficiency:
Not 100% sure what this setting does, but I was able to use it effectively in Rise of Tomb Raider to lower power draw by an average of 15W without affecting framerates. I used that feature while Global Wattman was set to Auto voltage.Frame Rate Target Control:
This feature allows the GPU to dynamically downclock itself to only deliver a max of the target frame rate. I have this enabled in global settings to cap framerates at my monitor's 60Hz native refresh rate. No use in running your RX480 at max clocks to play LoL at 1000fps if your monitor is only showing you 60fps. This has obvious power saving benefits depending on how un-demanding the game is. It also effectively serves as a (IMO) more desirable (albeit not quite as consistent) form of VSync because it doesn't introduce added latency. The downside of FRTC, is that it only works on DX9/DX10/DX11 games so far.Chill:
Works similar to FRTC, with some added features. Easier to just point you at TR's article on Chill.
I haven't dabbled with this much, since it seems to apply more to FreeSync monitors. Worth noting that AMD's Whitelist
of games that support Chill is pretty scarce at the moment.
Now, to the undervolting. To do this in AMD Wattman, you'll go to Global Settings -> Global Wattman and toggle the GPU voltage control from Auto to Manual. This will populate the GPU core voltages from State 1 to State 7 (these are load states), as well as the memory frequency State 1. I also have frequency set to dynamic which shows the clock speed at each state.
First you'll want to test for the lowest memory voltage your card can run stable (I used FurMark and Doom-Vulkan to test my settings). I've found that the memory voltage seems to act as the lower limit of core voltage (ie, if my memory voltage was set to 975mV, the core would receive a minimum of 975mV also, despite core voltage settings being less than 975mV for the frequency being tested). My RX480's minimum stable memory voltage was 900mV. My card idles at 300MHz/800mV.
Once you get a stable memory voltage, start by lowering your State 7 core voltage. Depending on what your particular GPU's advertised boost clocks are, and ASIC quality, will determine what the core voltage can be. My 1305MHz state is plenty stable at 1030mV for example. Test your settings for State 7.
Next, set the State 7 frequency and voltage equal to the values in State 6. When you benchmark (with power saving features off), the GPU will ramp up to State 7. In order to test the lower States, you'll need to set every State higher than the one you're testing to be equal (ie. if you're testing State 5, frequency and voltage of States 5,6,and 7 need to be the same). Proceed down the states as far as you like. I tested States 5-7.
I found that creating an Excel scatter plot of my Frequency/Voltage curve helped visualize what intermediate states should be if you don't want to test for voltage at every state. If you set the Voltage Control toggle back to Auto at any point, there's a good chance your voltage curve will be lost, so it's nice to have a record of what you found stable.
One last thing. Since I tested in Doom - Vulkan, I found that power saving features like Power Efficiency and FRTC didn't work and my GPU ran in State 7 at all times. Even 1235MHz on my RX480 @ 1080p and Ultra settings produced 120+fps, which is wasteful on my 60Hz fixed refresh rate monitor. You can enable game-specific frequency curves by clicking on the game in AMD settings and navigating to Profile Wattman. TL;DR, here are the settings I tested stable on my MSI RX480 Gaming X 8G:
Some people like to also reduce maximum frequency to avoid the range of exponential voltage increases needed to maintain higher frequencies than a GPU/architecture is comfortable with (AMD Hawaii GPUs were notorious for being pushed beyond their comfortable range by AMD). My personal opinion is that I paid for the clock frequency of my card, so I'm not going to give that away. Hence I'm only doing voltage adjustments and leaving my card's frequency curve alone.
ASIC Quality = 80.1%
Memory Voltage = 900mV at 2000MHz (8GHz effective)
Core Frequency/Voltage = 610MHz/818mV - 910/840 - 1075/880 - 1145/900 - 1190/910 - 1235/925 - 1305/1030.
Power usage as reported by GPU-z: Doom - Vulkan = 135W@1305MHz, 110W@1235MHz. Furmark = ~100W@1305MHz, and ~80W@1235MHz. Auto voltage setting wanted 1150mV for 1305MHz = 130W in Furmark.
[Updated after more testing in the 1190MHz-1235MHz range.]
Share your results!!
Main: i5-3570K, ASRock Z77 Pro4-M, MSI RX480 8G, 500GB Crucial BX100, 2 TB Samsung EcoGreen F4, 16GB 1600MHz G.Skill @1.25V, EVGA 550-G2, Silverstone PS07B
HTPC: A8-5600K, MSI FM2-A75IA-E53, 4TB Seagate SSHD, 8GB 1866MHz G.Skill, Crosley D-25 Case Mod