This post is updated periodically. To check when new information is added please scroll to the end of the post and check the date and time of it's last edit and reason for editing. I usually won't edit the post without some sizable new information. Thanks!
Ok, here is what I came up with during
extensive testing with my HD4870.
Hardware used:
Sapphire HD4870 512MB
Software used:
Radeon Bios Editor v1.12 *New 8/10/08* Radeon Bios Editor v1.13 is now available. See the end of this post for updated details.
Gpu-Z v0.2.6 *New 8/12/08* Gpu-Z v0.2.7 is now available. See the end of this post for updated details.
ATIFlash 3.60
AMD GPU Clock Tool v0.9.8 (Referred to from now on as AGCT)
To use AGCT as a shortcut to set GPU/MEM clocks, use the following command line;
"AMDGPUClockTool.exe" -eng=x -mem=x
X is the clock rate in MHz.
This quickly applies the GPU and MEMORY clocks without opening up the AGCT program. You can have a shortcut for each state (2D/3DLP/3DHP), each with it's own custom clocks, and apply them whenever necessary.
HD4870 BIOS Used:
Stock1.bin (This is the original BIOS my HD4870 came with)
Date: 06/09/08 16:25
Version String: 113-B50701-100
AtomBIOS Version: ATOMBIOSBK-ATI VER011.003.000.001.029254
2D: 500/900 @ 1.263V
3DLP: 500/900 @ 1.263V
3DHP: 750/900 @ 1.263V
Stock2.bin (This is a newer version of the above BIOS available on TechPowerUp)
Date: 06/17/08 11:20
Version String: 113-B50701-105
AtomBIOS Version: ATOMBIOSBK-ATI VER011.003.000.001.029335
2D: 550/900 @ 1.203V
3DLP: 550/900 @ 1.203V
3DHP: 750/900 @ 1.263V
I've named the two BIOSes as they are, just to make it easier to keep track of what is what.
.........................................
Idle power consumption and changes in voltage were measured with a Kill-A-Watt plug-through device.
.........................................
My testing is only in regards to the HD4870 and 2D GPU/MEM clocks, power consumption, and voltages. I do not do any video decoding, so any changes or adjustment to UVD settings in the BIOS (Clock Info settings 04, 05, and 06) have not been tested or implemented by me.
.........................................
Also, I think it's important to mention that I do not use or have installed Catalyst Control Center (CCC). I am using the Catalyst 8.8 Beta drivers only (0807281307-8.52.2-080722a-066078E-ATI.5). For changing 3D settings I use the latest beta verison of Ati Tray Tools v1.4.7.1211 (No longer available - use newest version listed below for increased HD4800 series compatibility). I am aware that there are ways to change GPU/MEM clocks and voltages by editing certain .XML files that are used with CCC, but I cannot comment on these methods.
*New 8/15/08* Ati Tray Tools Beta v1.5.8.1250 is now available. See the end of this post for updated details.
.........................................
GPU Testing:
Before you mess around with any BIOS settings or start flashing different BIOSes it is highly recommended that you find the lowest possible, stable GPU clock for your HD4870. The simplest way to do this is to download AGCT and use it to test for yourself.
I found that I had no problems with stability or 2D performance with the GPU clock running at 160MHz. I settled at this value as the updated MSI BIOS for the HD4850 has a setting of 160MHz for 2D. Both the HD4850 and HD4870 use the same RV770 GPU core, so I consider this a safe setting for me.
-
Method 1
Using AGCT to set the GPU clock here are a few pictures of the temperatures and power consumption results;
Stock1.bin - 500/900 - 1.263V - 139W ------------------
Stock1.bin - 160/900 - 1.263V - 138W
Lowering the GPU clock from 500MHz to 160MHz yielded no temperature difference for me, and only 1W savings in power consumption.
When using AGCT to set the GPU clock, the setting stays locked in, regardless of whatever state you may be in (2D/3DLP/3DHP).
-
Method 2
Using Radeon Bios Editor to set a lower GPU clock in the BIOS (Clock Info 01 + 07) is perfectly safe. Changing from 2D to 3DLP/3DHP states, and vice versa, works fine and no visual anomalies were detected.
When using an edited BIOS to set the GPU clock, the card will properly change settings based on whatever state you are in (2D/3DLP/3DHP).
-
Bottom Line
Functionality and results of changing GPU clocks in the BIOS or via AGCT are exactly the same. Either method works great.
.........................................
MEMORY Testing: *New Information 8/13/08* See the end of this post for updated details.
Before you mess around with any BIOS settings or start flashing different BIOSes it is highly recommended that you find the lowest possible, stable MEMORY clock for your HD4870. The simplest way to do this is to download AGCT and use it to test for yourself.
I found that I had no problems with stability or 2D performance with the GPU clock running at 225MHz. Going lower than 225MHz resulted in "yellow snow" artifacting and stability issues arised.
-
Method 1
Using AGCT to set the MEMORY clock here are a few pictures of the temperatures and power consumption results;
Stock1.bin - 500/900 - 1.263V - 139W ------------------
Stock1.bin - 500/225 - 1.263V - 101W
Lowering the MEMORY clock from 900MHz to 225MHz yielded a temperature difference of 6C to 11C, and 38W savings in power consumption.
As stated before, when using AGCT to set the MEMORY clock, the setting stays locked in, regardless of whatever state you may be in (2D/3DLP/3DHP). When changing the MEMORY clock there will be a single on-screen flash. Since the setting is locked in, you won't have repeated on-screen flashes after that.
-
Method 2
Using Radeon Bios Editor to set a lower MEMORY clock in the BIOS (Clock Info 01 + 07) has a problem. When the video card changes states from 2D to 3DLP/3DHP or vice versa, a quick, but noticable on-screen flash is present. Simple things like opening or closing a window (say....Internet Explorer) will cause the card to quickly change states, with the on-screen flash happening with each state change. This is very annoying. Here is a picture that shows what I am talking about;
The spikes next to the BIOS set 2D GPU and MEMORY clocks of 300MHz are just from opening and closing windows and using Gpu-Z. Clocks jump to the default BIOS set 3DHP speeds of 750/900, whenever this happens.
-
Bottom Line
Functionality and results of changing MEMORY clocks in the BIOS or via AGCT are quite different. Using AGCT to set the MEMORY clock is very simple, safe and stable. There is only one on-screen flash, and the setting is locked in, with no further flashing. Using modified MEMORY clocks in the BIOS will result in repeated on-screen flashes, even when not gaming, and is highly unacceptable. You could run all three states at the same lower MEMORY clock, which would lower 2D power consumption, but I don't find that to be a reasonable solution.
.........................................
Before I move onto HD4870 voltage testing, here are pictures and temperature results of the combined, lowered GPU/MEMORY clocks while using AGCT;
Stock1.bin - 500/900 - 1.263V - 139W ------------------
Stock1.bin - 160/225 - 1.263V - 100W
Lowering the GPU clock from 500MHz to 160MHz and the MEMORY clock from 900MHz to 225MHz yielded a temperature difference of 7C to 12C, and 39W savings in power consumption.
.........................................
VOLTAGE Testing: *New Information 8/13/08* See the end of this post for updated details.
I've learned from mat9v (poster at TechPowerUp forums), who got his information from W1zzard (Admin at TechPowerUp forums who made Gpu-Z), that the HD4870 has 4 power states [-0.2V, -0.1V, 0, +0.1V]. This corresponds to voltages of 1.063, 1.163, 1.263 (default), and 1.363. These are the figures I'm going by as information of proper voltage ranges is hard to come by.
-
Method 1
I first tried using Radeon Bios Editor to set lower VOLTAGES in the BIOS (Clock Info 01 + 07), with the Stock1.bin BIOS, which came with my HD4870. I changed the default 1.263V to 1.063V. Saved the BIOS, flashed it to the video card, and rebooted.
Upon booting into Windows there was no noticeable temperature change, or power consumption difference. I figured the HD4870 wasn't responding to different VOLTAGE settings in the BIOS.
I then tried the newer BIOS that was available on TechPowerUp, the only one with different stock VOLTAGE settings for 2D and 3DLP. The Stock2.bin BIOS has a value of 1.203V instead of 1.263V. It also has a slightly higher 2D and 3DLP GPU clock of 550MHz, instead of 500MHz.
Using the Stock2.bin BIOS with it's settings unchanged, here are a few pictures of the temperatures and power consumption results;
Stock1.bin - 500/900 - 1.263V - 139W ------------------
Stock2.bin - 550/900 - 1.203V - 132W
Lowering the VOLTAGE from 1.263V to 1.203V yielded a temperature difference of about 1C, and 7W savings in power consumption. Pretty good. Setting the GPU clock to 500MHz, instead of 550MHz, yielded no decrease in temperature or power consumption.
So with this new Stock2.bin BIOS it's now possible to change the VOLTAGES in the BIOS, with the HD4870 actually responding to them, for some strange reason. Now lets see how the HD4870 responds with a 1.063V in 2D;
Stock1.bin - 500/900 - 1.263V - 139W ------------------
Stock2.bin - 550/900 - 1.063V - 124W
Lowering the VOLTAGE from 1.263V to 1.063V yielded a temperature difference of 2C to 4C, and 15W savings in power consumption. Excellent. Setting the GPU clock to 500MHz, instead of 550MHz, yielded no decrease in temperature or power consumption.
-
Method 2
While AGCT supports changing VOLTAGES (VDDC, VDDCI, MVDDC, VDDQ), I didn't have any luck getting the HD4870 to respond to any of those command line settings.
It is possible however to revert back to the default 2D GPU and MEMORY clocks and the default 2D VOLTAGE listed in the BIOS (Clock Info 01 + 07), by opening the AGCT program and clicking on "Restore Default Clocks". Using the command line "-restore" setting does not work for the VOLTAGE, and only sets the card back to the default 2D GPU and MEMORY clocks listed in the BIOS.
-
Bottom Line
Functionality and results of changing VOLTAGES in the BIOS or via AGCT are quite different. For me, I had to use the Stock2.bin BIOS, as changing settings in the Stock1.bin BIOS, which came with my card, didn't work properly. Setting the 2D VOLTAGE to 1.063V in the Stock2.bin BIOS was simple, stable, and safe. I had no performance issues or stability problems running at the lower VOLTAGE. While the lower 2D VOLTAGE is nice, the improvement in power consumption and temperatures isn't as good as lowering the MEMORY clocks, something that cannot be done properly at this time in the BIOS. While AGCT didn't set VOLTAGES properly for me, it is possible to use the program, along with a modified BIOS to get the best of both worlds; Lower 2D GPU/MEMORY clocks and lower VOLTAGES. I will now show you how.
.........................................
Wrap-Up and Final Thoughts:
So what did all this testing, endless blathering, and wasted time come up with? Well if you're looking for a final fix (All-in-one BIOS) for HD4870 2D power consumption with modified GPU/MEMORY/VOLTAGES, you won't find it. The real killer is the on-screen flashing that is present when using varying MEMORY clocks in the BIOS. You could just settle with lowered GPU clocks and lowered VOLTAGES in 2D, but that's only half the solution. If you really want to squeeze out the most savings, here is how I did it. This is not a set it and forget it solution, nor will it function ideally for any and all situations:
1. Start with the Stock2.bin BIOS.
2. You will need to edit the Clock Info settings (01, 02, 07, and 08) with your optimum lowered GPU/MEMORY settings plus a VOLTAGE of 1.063V. They will all be the same settings. For me this would be 160/225 @ 1.063V.
3. You will need to edit the Clock Info settings (03 and 09) with your optimum lowered GPU/MEMORY settings plus a VOLTAGE of 1.263V. Both will be the same setting. For me this would be 160/225 @ 1.263V. It should look something like this;
4. Make two shortcuts in your Start button or on your desktop. One of them will be an AGCT quick setting and one will be a link to the AGCT program. THE AGCT quick setting will be your 3D settings, for gaming ("AMDGPUClockTool.exe" -eng=750 -mem=900). The other is for opening the AGCT program to use the "Restore Default Clocks" button.
5. When you boot up into Windows and get to the desktop, the HD4870 will be running at 160/225 (or whatever your optimum lowered clocks are) @ 1.063V. It will not change GPU/MEMORY clocks, as they are locked in. The VOLTAGE however will fluctuate between 1.063V and 1.263V, whenever you open or close windows, but without any on-screen flashing as was evident with modified MEMORY clocks in the BIOS.
6. When you want to game, click on the AGCT 3D shortcut, and after one on-screen flash, the HD4870 will be running at 750/900 (or whatever you set for gaming) @ 1.263V. I have seen that the VOLTAGE does not fluctuate during gaming, and I have run numerous benchmarks, and logged quite a few hours gaming and for me performance is exactly the same as before all this modified BIOS/AGCT stuff.
7. When you're done gaming, click on the AGCT program shortcut, and click on the "Restore Default Clocks" button. After one on-screen flash, the HD4870 will now revert back to 160/225 (or whatever your optimum lowered clocks are) @ 1.063V.
I have tested this setup for a number of days now, and it works great. It's not as simple and carefree as a BIOS with all the proper settings, but with the HD4870 and it's GDDR5 memory, this just isn't possible
yet, because of the lousy on-screen flashing. My total power consumption now at 160/225 @ 1.063V is 94W, compared to 500/900 @ 1.263 being 139W. A total savings of 45W. Not bad.
.........................................
Phew. What a pain in the ass. I should have just gotten a GTX 260. But seriously, I am open to any and all comments and criticisms. Maybe I missed something, or am wrong about my methods and testing. Post up your thoughts and experiences. I'm interested to see what others come up with. It would be nice if ATI had this 2D power consumption crap done right in the first place, but they didn't. In time it might be fix or bettered, but for now, this is sort of a plausible solution...
.........................................
Updates:
Regarding *Radeon Bios Editor v1.13*
Many great new features have been added to the newest version of Radeon Bios Editor. One of which is allowing (unlocking) voltage settings for the Stock1.bin BIOS (and it's various Manufacturer variants, based off of it). So the problem I reported at the beginning of the VOLTAGES testing section (HD4870 not responding to modified BIOS voltages) is now easily fixed. Simply put, now you can have the same functionality of the Stock2.bin BIOS, but with whatever Stock1.bin BIOS variant you may be using (ex........PowerColor, VisionTek, Gigabyte....etc). Add in your own custom GPU clocks, VOLTAGES, and a modified fan profile, and you're all set to go. Good stuff.
Regarding *Gpu-Z v0.2.7*
Many great new features have been added to the newest version of Gpu-Z. One of which is VRM monitoring for the HD4870. This allows you to see the Amps used, temperatures of the three digital VRM chips, and the current VDDC voltage. Previously you had to use a licensed beta copy of Everest to get VRM temps and Amps. Very nice!
One problem is that if you're using AGCT to set your GPU/MEMORY clocks it will disable all of the above VRM monitoring. If you need to see those specific temperatures/readouts, simply reboot your PC and allow the HD4870 to run at the GPU/MEMORY clock speeds specified in the BIOS.
I haven't found a way around this yet, to be able to use AGCT and get the VRM monitoring to show up.
Regarding *Ati Tray Tools Beta v1.5.8.1250*
Many great new features have been added to the newest beta version of Ati Tray Tools. Most important of which is increased support and features for ATI 48xx series video cards. I had previously been using Beta v1.4.7.1211 which had very limited functionality with my HD4870. The only real use I had for it was to set my Direct3D and OpenGL graphical settings, which worked perfectly.
Things that now function with my HD4870 are;
---Monitoring: A large highly customizable graph now displays GPU/MEM clocks, GPU temps, Fan Duty Cycle, Video Memory usage, and GPU activity. Each can be color customized and you can scroll through the graph to see exact measurements at specified times. Very nice!
---Overclocking GPU/MEM: Adjustments to the GPU and MEMORY clocks are now functional and can be set anywhere from 0MHz to a maximum of 2250MHz for GPU and 0MHz to a maximum of 2700MHz for MEMORY. Default overclocking limits are 490MHz to 1125MHz for GPU and 720MHz to 1350MHz for MEMORY. To expand these limits (up to the maximums I listed) go to Tools & Options -> General Options -> Advanced Tab. Set Overclock limit % to 200 and Downclock limit % to 100. Obviously you can use lower limits as nobody is going to go near those maximums. Personally I have "Use overclocking limits" unchecked which sets a range of 0MHz to 1000MHz for both GPU and MEMORY.
I had mentioned above in the Gpu-Z update, there was a problem with the VRM monitoring being disabled when setting GPU/MEMORY clocks with AGCT. This is not a problem with Ati Tray Tools! All of the monitoring of Gpu-Z is fully functional and visible when overclocking GPU/MEMORY clocks with ATT.
--Real-time voltage adjustments: Yes, that's right! Now you can easily set your HD4870 to specified voltage steppings listed in the BIOS. With the Stock2.bin BIOS (version string ending with 105) or Radeon Bios Editor modified Stock1.bin BIOS (version string ending with RBE), ATT will list voltage settings of 1.086v, 1.143v, 1.203v, and 1.263v. No more lousy BIOS editing, and flashing to test/verify voltages anymore! I have fully verified that these adjustments work in ATT, just as they do when using a modified BIOS. If using a Stock1.bin BIOS (version string ending with 100) or any of it's variants (multiple manufacturers/Asus) you will not have access to real-time voltage adjustments, as voltages are locked in at 1.263v in the BIOS.
--Game/Program profiles + ATT @ Startup: With the ability to set custom, working, GPU/MEMORY/VOLTAGE profiles you can now use these settings and apply them whenever you start your favorite game or benchmark and also during startup.
Examples: In limited testing I've set two profiles;
2D - 160/225 @ 1.083v (For general desktop and internet use)
3D - 750/900 @ 1.263v (For gaming)
I've set ATT to start with Windows, via a registry setting, and apply my 2D profile upon load. With ATT running in the background, it only utilizes around 3 to 6MB of memory, which is very light. 2D GPU/MEMORY/VOLTAGE settings are set and function properly.
I also configured ATT to apply my 3D profile when I start my favorite game, ETQW. You can also have custom Direct3D and/or OpenGL settings applied also. When loading ETQW the 2D profile setting seemlessly changes to the 3D profile settings (with the single on-screen flash, of course). Once I am done playing ETQW and exit the game, ATT applies the 2D profile settings (with the single on-screen flash), and everything is back to normal.
This is a bit simpler and more transparent than using AGCT and it's shortcuts for the various 2D/3DLP/3DHP modes, except you have to do a little legwork and set profiles in ATT, which can take a little time. It's not as good as fully functional modified BIOS + properly working PowerPlay, but we're getting closer!
--Fan control adjustments: I can't totally comment on the functionality of ATT's fan controls with the HD4870, as I'm using an aftermarket cooler. But it's listed as a working feature, so maybe others can chime in on this. It might be a much better alternative than using a BIOS with modified fan settings or the .XML CCC profile hack.
--Final thoughts: As this is a beta program there are a few quirks that need to be ironed out, so I'm not totally recommending it yet, but it's current functionality is very good, and will only improve over time. If you're sick of CCC, it's definetly worth giving ATT a shot, if you're using an HD4870. There are probably lots of new working features I haven't mentioned or gotten to (like Auto Overclocking! I'm still testing it out...), so I'll be sure to report my experiences when new information is available.
Regarding *MEMORY testing*
I was just dumbfounded after reading the
TechPowerUp review of the HD4870 X2 2GB, mainly to do with it's IDLE power consumption. System power consumption for the HD4870 was measured at 158W and the HD4870 X2 at 160W. It seems ATI successfully managed to tone down the GDDR5 memory clocks (and I'm guessing without any on-screen flashing). Considering that the HD4870 X2 is merely two HD4870's on one PCB plus the PLX chip; one wonders, how did they do it?
The answer is right in the
power consumption section of the review;
W1zzard said:
In order to keep the power consumption down of their card AMD has implemented R600 style 2D/3D clocks in their card - the dynamic power management of the RV770 is not used at all.
On the HD 4850 and HD 4870 the GPU is configured in a way to dynamically adjust the clock frequencies based on GPU load, without any software intervention - this is disabled now. Instead the driver detects if the card is running in 2D or fullscreen (!) 3D and switches clocks accordingly. In 2D and windowed 3D the card will always run at 500 MHz / 500 MHz to conserve power. Also it seems CrossFire is disabled when running windowed 3D apps. I did a quick test with Crysis (same settings for both tests) and got 27.1 FPS in a window and 54.4 FPS in fullscreen 3D, quite a difference.
So as we've seen, and known for a while now, the HD4870's dynamic power management (state switching based on GPU load) combined with the HD4870's retraining of it's memory controller and GDDR5 memory (See
this post, regarding GDDR5), is leading to this on-screen flashing problem.
This brings hope that somehow ATI could possibly use the same method of state switching as the HD4870 X2, on the HD4870, and when combined with a properly set BIOS with lowered 2D GPU/MEMORY/VOLTAGES, would give us the lowered power consumption that the card should have had in the first place.
As far as running windows 3D applications, one could just use AGCT to lock in a higher GPU/MEM, if necessary.
Regarding *VOLTAGE testing*
I was recently checking out settings with Ati Tray Tools and clicked on the System Information section. Reading through quite a bit of detailed information of my HD4870's current settings, I noticed the ATI OverDrive 5 VDDC voltage range. It's listed from a MIN of 1.083v to a MAX of 1.263v. Jackpot! Also in Ati Tray Tools, in the Overclocking section, 4 voltage states are shown in a drop-down box,
1.083v, 1.143v, 1.203v, and 1.263v. If that 1.203v looks familiar, it's from the Stock2.bin BIOS.
This is pretty darn close to the first range of values I started with; 1.063v, 1.163v, 1.263v, and 1.363v, with the exception of the one over voltage.
It's fairly evident that the voltage steppings and ranges are set in the HD4870 BIOS by ATI or the video card manufacturers (I don't know which). So then I did some more testing (does it ever end?), to see what the differences in power consumption are for these voltages and others inside and outside the range (if the card even responds to them).
I used the Stock2.bin BIOS and altered the GPU/MEMORY clocks to 375/450. After a whole lot of BIOS flashing here's what I came up with;
Code:
BIOS set VOLTAGE | Power Consumption | Gpu-Z VDDC Current
1.063 (-0.2v) 104W 12.2A
[b]1.083 (-0.18v) 104W 12.2A[/b]
[b]1.143 (-0.12v) 108W 13.5A[/b]
1.163 (-0.1v) 110W 14.9A
[b]1.203 (-0.06v) 110W 14.9A[/b]
1.217 (-0.46v) 114W 14.9A
[b]1.263 (Default) 114W 14.9A[/b]
1.323 (+0.06) 104W 12.2A
1.363 (+0.1v) 104W 12.2A
It's pretty clear from analyzing the results that the maximum VOLTAGE for the Stock2.bin BIOS is 1.263v and the minimum VOLTAGE is 1.083. There are two steppings inbetween at 1.143v, and 1.203v. Any values set over or under this range are set at 1.083v. Any values in the range, that are not one of the steppings, run at whatever stepping is closest.
I'm not sure why the Amps is the same for 1.263v and 1.203v. It could be an error in what is reported to Gpu-Z or something that I'm unaware of. I retested those values a few times and got the same result. Interesting.
At the request of
Fr@nk and because of my own curiosity I did some more VOLTAGE testing to hopefully clear up the above issue with 1.263v and 1.203v reporting the same Amps consumption in Gpu-Z. Here are the results, this time tested much easier (without BIOS flashing! Yay!) using ATT with GPU/MEM clocks set at 500/900:
Code:
ATT set VOLTAGE | Power Consumption | Gpu-Z VDDC Current
[b]1.083 (-0.18v) 117W 21.0A[/b]
[b]1.143 (-0.12v) 122W 23.0A[/b]
[b]1.203 (-0.06v) 126W 24.4A[/b]
[b]1.263 (Default) 133W 25.7A[/b]
It should have been obvious during the first round of testing that using such low GPU/MEMORY clocks would have made it harder to see variations in the Amp usage. Now there is a clear and definite increase in both Watts and Amps consumption when increasing voltage.
I should note that the Amps do fluctuate during 2D operation, (I have Gpu-Z open right now, and I can see the variations, as I type this). I'd say this is from the dynamic GPU load detection, courtesy of ATI's PowerPlay.
Another thing to add is that Gpu-Z reports the same VDDC voltage of 1.2625v, regardless of what your HD4870 is running at. This is normal as Gpu-Z is reporting the default voltage value given by the ATI drivers, which is 1.263v. Somewhat useless, but it's there.
All-in-all, I'm pretty confident now as to what the voltages are available to us with this Stock2.bin BIOS. In the future, newer BIOSes could have expanded voltage ranges, or there may be some possible unlocking of current BIOSes voltage ranges. Time will tell.