Auto Fan Control for 48xx: a guide

ribbell

n00b
Joined
Sep 1, 2008
Messages
46
In this guide i’ll show how to optimize the fan control of 48xx video cards from ATI by tuning the parameters of the fan controller with Rivatuner.
In order to fully take advantage of this guide you must use Rivatuner 2.11.
Since the 4870 X2 uses a different fan controller with respect to single GPU sisters (4870 and 4850), the automatic fan control of these boards will be described in different sections.
Before beginning, lemme say this: in this guide you’ll not find the exact parameters optimal for your system; in fact optimal parameters for fan control depend on a number of factors that are unique for each system/user, i.e. the desired temperature in idle/3d, the power consumption in idle (that can vary greatly by optimizing the powerplay states), the ambient temperature, the efficiency of the whole cooling system, the tolerated noise and so on. So don’t expect that the parameters i’ll show you (parameters that work nicely on my system based on my tastes) work out of box for you. In the end some tuning is expected from you, but don’t worry, i’ll show you the logic behind auto fan control, so it should be easy to find the right parameters for each system: this is the spirit of this guide. Ok, let’s begin.

Index

Part I - Preliminary steps: how to configure rivatuner for automatic fan control and for Crossfire systems

Part II - Automatic Optimized fan control for 4870 X2

Part III - Automatic Optimized fan control for 4850/4870

Part IV - How to reduce the power drawn in idle

Part I - Preliminary steps

Open Rivatuner, click on power user tab, find the group "Rivatuner \ Fan" , expand it by clicking on the "+" sign and change the value of the parameter "AutoFanSpeedControl" to 3 by double clicking on the right column:



Now close and restart Rivatuner. Congratulations: the auto fan control rules have been unlocked.
Now open the low level settings window: it is enough to click on the little arrow on the right under the active display adapter and left click on the first button:



Now select the fan tab:



You will see the low level fan settings window.

Fan settings Tab for x2:



Fan settings Tab for 4870/4850:



Now activate the low level fan control. It is enough to check the box "Enable low-level fan control". You'll get this prompt:



Click on "Detect now" and wait some seconds: good, now we can change the fan control rules.
If you have multiple video cards linked in crossfire, you can configure the fan controllers of the different video cards at the same time by enabling the cloning mode option for fan control in Rivatuner: in this way when you change the fan controller parameters of the master board, the fan controller parameters of the other boards are set equals to the ones of the master board; this is done automatically by Rivatuner. Note that this operation mode is valid only for same model video cards (i.e. 2 4870x2 or 2 4850 and so on).
To enabling fan cloning operational mode, browse to Power User Tab of Rivatuner, search the group "Rivatuner \ Fan" and set the variable EnableFanControlCloning = 1:



Remember: you need to close and restart Rivatuner in order for the setting to take effect.

If you interested in 4870x2 fan control, browse to part II of this guide, otherwise jump directly to part III, where i discuss about 48xx single GPU boards.
 
Awesome, can't wait for the 4850/4870 fix and the idle core settings!
Props for an awesome guide!
 
Should this work for 4870s in Crossfire? (I can not Overclock the secondary one in Crossfire with Rivatuner 2.10).

I have to admit I care more about dynamic fan control than I do about OC.
Yes, with rivatuner 2.11 it will work for 4870 crossfire (you will be able to set auto control rules for both cards).
 
Part II - Automatic Optimized fan control for 4870 X2

1) Basic Automatic Control
As you can see, you can choose between two operating modes: Fixed, where you select a fixed fan speed by moving the upper slider, and Auto, where you let the fan controller varying the fan speed based on the GPU temperature and on the parameters of automatic operation mode. Let’s see in detail the auto control mode. Auto should be selected by default. If Fixed mode is selected, select Auto.
Now I’ll show how to change the parameters in order to force the fan speed to vary linearly as a function of GPU temperature between a minimum fan speed (at which the fan duty cycle is Duty_Cycle_Min) and a maximum fan speed (at which the fan duty cycle is Duty_Cycle_Max).
Note that the fan duty cycle is given in percents, so if duty_cycle = 50, this means that the fan voltage is 50 % of the maximum value (12 V). We can assume that fan speed in this condition is also 50 % of the maximum reachable fan speed.
Let’s call T_min the temperature where the fan duty cycle is Duty_Cycle_Min and with T_max the temperature where the fan duty cycle is Duty_Cycle_Max. In other words, when the temperature varies from T_min to T_max, the fan duty cycle varies from Duty_Cycle_Min to Duty_Cycle_Max following the temperature linearly, i.e. the fan control law is a ramp.
The parameters that Rivatuner let us change are the following:

Duty_Cycle_Min
Duty_Cycle_Max
T_min
T_range
T_operating
T_low_limit
T_high_limit

From this list, you can see Duty_Cycle_Min, Duty_Cycle_Max and T_min…where is T_max? In fact in the fan controller you cannot specify T_max. T_max can be assigned by changing T_range using this relation:
T_range=2/3*100*(T_max-T_min)/(100-Duty_Cycle_Min)

The others parameters are to be set in this way:
T_operating=110
T_low_limit=0
T_high_limit=110
More on these parameters on the advanced control section.

Example:
We want the minimum fan speed equal to 34 % of the maximum reachable fan speed. The fan speed has to be increased starting from a GPU temperature of 55 °C and has to be equal to maximum reachable value at 95°C.
We have to enter the following parameters:
Duty_Cycle_Min=34
Duty_Cycle_Max=100
T_min=55
T_range=2/3*100*(T_max-T_min)/(100-Duty_Cycle_Min)=2/3*100*(95-55)/(100-34)=40.4->40(Rivatuner accepts only integer values)
T_operating=110
T_low_limit=0
T_high_limit=110
So, let’s modify these parameters in Rivatuner:





If we want that these parameters are applied at windows startup, it is enough to check the box "Apply fan settings at windows startup":



Now click on the apply button and voila, the job is done.
Just some observations:

-Please take note that you don't need Rivaruner to start automatically with windows in order to apply the fan settings: by checking the box "Apply fan settings at windows startup", rivatuner will start with windows, apply the needed changes and close itself.

-You can save the settings you just changed by clicking on the diskette icon: enter the name you want for the fan profile and click ok:



I named the profile Automatic. In this way you can create two or more fan profiles and activate them just by selecting in the drop-down menu the associated profile.

-About Trange, this parameter can assume only 16 possible values. When you enter the computed value for Trange, Rivatuner will automatically adjust the computed Trange to the closest possible value.

-I said that by setting the fan control parameters as shown, the fan speed will vary linearly with the GPU temperature...this is right and wrong at the same time :confused:
Let's explain better this concept with some screenshots.
On the main tab of Rivatuner open the Hardware Monitor Window by clicking on the usual little arrow and selecting the last icon:



You will get a window like this:



In this screenshot we see the memory clock and core clock of the master gpu, the core temperature of the master gpu, the fan speed and the fan duty cycle. Now the core temperature shown in this window is the same as the one reported by CCC and other utilities (like GPU-Z). Fact is that the controller doesn't change the fan speed based on this core themperature, but on "another" core temperature that is taken from external sensor of the fan. We can see this temperature easily: right click on the core temperature graph, select setup:



From the data provider drop down menu select ADT7473.dll:0 and click ok:



This is the hardware monitor after ADT7473.dll:0 has been selected:



See, the core temperature has changed from 53 °C to 56 °C, in fact in my case the temperature reported by the fan sensor is 3-4 °C higher than the temperature you see in CCC.
Ok, let's test the parameters chosen for automatic fan control. The testing procedure is simple: starting form idle condition, i launch a fullscreen application ( GRID in this case), play some time, then return to the desktop and wait that the system cool down. Well, this is the result:



Note that the temperature shown in this screenshot is from the fan sensor, i.e. the higher one.
So, in idle the temperature is 56 °C while the fan speed duty cycle is 36 %, higher than the minimum fan speed duty cycle (34 %) because the temperature is higher than Tmin (55 °C). Then the 3d application is started, as you can deduce from core/memory clocks switching (powerplay in action). See, the temperature increases and the fan duty-cycle follows nicely the temperature profile. I marked the maximum temperature reached ( 77 °C) where the fan speed is 69 %. Take note that these results are with a room temperature of 30 °C ( :( )

2) Advanced Automatic Control
Now i'll show how to take advantage of dynamic control mode of the fan controller. This mode has been disabled in the previous example by setting T_operating=110 and T_low_limit=0. Now we'll change these parameters to further optimize tha auto control mode of the fan controller.
Let's first explain the dynamic control mode. The aim of this control mode is to regulate the fan speed in such a way that the temperature of the GPU will be close to the target temperature set by T_operating when the GPU is under load. In other words the fan control tries to keep the temperature close to T_operating with the minimum possible fan speed. T_operating should be set to the value we would have for the GPU temperature under 3d. Of course T_operating should be a realistic value: if T_operating is too low, even at 100 % fan speed it would be impossible for the fan controller to keep the GPU temperature close to the target temperature set by T_operating; if T_operating is too high, the GPU temperature would become too high under 3d.
T_low_limit is important when the GPU is in 2d. When the temperature becomes lower than T_low_limit, the fan controller decreases the fan speed until the fan speed becomes the minimum fan speed or the temperature becomes higher than T_low_limit as an effect of the reduced speed. In other words it tries to keep the temperature close to T_low_limit again with the minimum fan speed.
So, in short, T_operating should be set to our desired temperature in 3d and T_low_limit a little higher than our idle temperature with the minimum ducy-cycle chosen.
Because the dynamic control varies the fan speed increasing or decreasing Tmin, it is clear that is not important the value we set for this parameter, because it will be changed by fan controller.
About Trange, now we can choose a greater value for Trange (greater Trange means that the fan speed varies slower with temperature) because in this control mode it's the job of the controller to vary faster the fan speed when the GPU temperature approaches the target temperature set by T_operating.

Example
We want a GPU temperature in 3d close to 85 °C. The minimum fan speed we want is 34 % (as before). Moreover the fan speed has to be decreased faster when the gpu temperature is under 60 °C. Finally we want a quieter system than the previous case when the GPU temperature is far from the target temperature (i.e. light load): it is enough to set Trange higher -> let's double Trange:

Duty_Cycle_Min=34
Duty_Cycle_Max=100
T_min=60
T_range=80
T_operating=85
T_low_limit=60
T_high_limit=110

It is reccomended that the first time you enable the dynamic control set Tmin=T_low_limit (60 °C n this case).

Let's enter the new values in Rivatuner:





Please note that after you enter these values, now the button save becomes active: since we changed the startup settings of auto control mode, rivatuner gives us the choice to save the new settings. So if we want these settings to be applied at windows startup, let's click on the save button:



Moreover we can save the profile for these settings:



I named the new profile Dynamic.
Ok, now we have two auto control settings: Automatic (linear control law) and Dynamic (adapted linear control law) and we can switch quicky between them.
Time for the results:



Well, as you can see now the fan speed varies slower than the previous case (Trange is higher) when the 3d application is started. When the tenperature becomes higher than 80 ° C the dynamic control takes on (this happens at T_operating - 5 °C): i marked three points at 80°C and 81°C and as you can see the fan speed increases with the time, even if the core temperature has increased a little:it's the control action that tries to stop the increase of the temperature. When the 3d application is closed, the fan speed start to decrease with the temperature until T_low_limit is reached (60 °C): as you can see the temperature is constant, but the fan speed in decreasing further until it reaches the minimum allowable (34 %).
 
For the almighty mods: please sticky this thread ! :)
Congrats for ribbell, nice job and informative post . :D
 
Good writeup man. I am glad you can use Rivatuner now with the new 4800 series.
 
They should rename Rivatuner or have the same program under a different name for ATI lol. Always felt wierd to use RivaTuner with a ATI card.
 
Part III - Automatic Optimized fan control for 4850/4870

[Big thanks to Unwinder who found out the variuos parameters of the Ati integrated fan controller: here's the original post of Unwinder with the explanation of the controller parameters]

Ok, now we are on the fan control tab of rivatuner with low level settings enabled.
You can choose between fixed mode, where the fan duty cycle is fixed and can be modified by moving the upper slider, and auto mode, where the fan speed is controlled automatically by the integrated fan controller of the GPU based on the auto parameters you set for this control mode.
The auto control mode of the integrated fan controller have two operating modes: the linear control mode and the look-up table control mode.
Let's discuss first the parameters shared by the two control modes.

T_min: is the temperature at which the fan speed start to be increased. Under T_min, regardless of the control mode selected, tha fan speed is zero or costant.

T_max: is the temperature at which the fan speed is set at 100%.

T_hysteresis: when the temperature reaches the value T_min-T_hysteresis, the fan is stopped. After the fan has been deactivated, the fan is reactivated when the temperature becomes higher than T_min.
Reccomended settings:
Q: Do you want your fan always on A: YES! -> Reccomended setting = 7 (this should be the maximum values for 48xx)
Q: Do you want your fan always on A: Damn, shut down that damn thing asap! -> Reccomended setting = 0 (take note that in this way you could have rapid continuos activation/reactivation of the fan in idle)
Keep in mind that on some boards the minimum duty-cycle is forced to be greater than zero, so on these boards the fan can be never deactivated. In other words, even if we set a fan duty-cycle equal to zero, the effective duty-cycle applied to the fan is gretaer than zero (tipically 20 %).
Anyway you should play with this setting and find your optimal value. Moreover if your core temperature will never become lower than T_min, this setting will have absolutely no effect.

PWM_ramp_on: if this value is set to 1, the controller modifies the fan duty-cycle softly in order to reduce drastic changes in the noise generated by the fan.
Reccomended setting: 1

PWM_ramp: this value control "how softly" the controller varies the fan speed when PWM_ramp_on = 1.
Lower values of PWM_ramp -> the fan speed varies slower
Higher values of PWM_ramp -> the fan speed varies faster
Reccomended setting: 1

PWM_hysteresis: a value of PWM_hysteresis greater than zero introduces a step variation in the duty-cycle.
Reccomended setting: 0

Spinup_cycle: is the value of the fan duty-cycle that is applied by the controller when the fan has to be stated (for example when the temperature becomes higher than T_min after the fan has been stopped).
Reccomended setting: the default value shoud be 80. Based on various reports, a much lower value should be perfeclty fine. You can try with something like 20/40 % if you are pissed by the fan suddenly acting like a hairdryer.

Spinup_time: it's the time for which the fan duty-cycle is equal to the Spinup_cycle.
Reccomended setting: leave this alone.

Ok, now it's time to describe the two control modes

1) Linear control mode
To activate this control mode we have to set:
PWM_mode = 2

In this control mode the fan speed varies linearly as a function of the core temperature of the GPU.
The fan speed duty-cycle is equal to Duty_cycle_min at T_min (the parameter introduced in the previous section) and to 100% at T_M.
From the list of parameters of the fan controller we can see Duty_cycle_min and T_min, but there'no parameter named T_M. T_M in fact can be set by varying the parameter of the controller T_slope through this relation:
T_slope=16*(100-Duty_cycle_min)/(T_M-T_min)

Example:
We want the minimum fan speed equal to 35 % the maximum reachable fan speed. The fan speed has to be increased starting from a temperature equal to 55 °C. The fan speed has to be equal at 100 % the maximum reachable fan speed at a temperature equal to 95 ° C.

These are the correct parameters:
T_min=55
Duty_cycle_min=35
T_slope=16*(100-Duty_cycle_min)/(T_M-T_min)=16*(100-35)/(95-55)=26 (choose the nearest integer here)
T_max=T_M=95

Other parameters:
PWM_mode = 2
T_hysteresis=0
PWM_ramp_on=1
PWM_ramp=1
PWM_hysteresis=0
Spinup_cycle=34

You can ignore all the lookup entries in Rivatuner for this control mode.
Time to enter the parameters in Rivatuner. After you finished, you can check the box "Apply fan settings at windows startup" if you want these parameters to be applied automatically at windows startup.
Finally apply the settings by clicking on the button Apply.
For the screenshots of this procedure you can refer to the second part of this guide (the section relative to 4870 X2), the steps at this point are almost identical.

2) Look-up table control mode
This control mode is activated by setting:
PWM_mode = 3
This control mode is characterized by 8 look-up entries.
Each look-up table entry is definied by two values: the temperature (left column in rivatuner low level fan tab) and the fan duty cycle (right column in rivatuner low level fan tab).
So you define this control mode by setting 8 couples of values for temperature and duty-cycle. The logic of the look-up entries is pretty simple.
Let's call T0 and Duty_Cycle0 the temperature and the fan duty cycle we set for the first look-up entry in Rivatuner (Look_up_entry_0), T1 and Duty_Cycle1 the temperature and the fan duty cycle we set for the second look-up entry in Rivatuner (Look_up_entry_1).
When the temperature is in the range T0,T1, the fan duty cycle is Duty_Cycle0 if the temperature is closer to T0 and Duty_Cycle1 if the temperature is closer to T1.
Ok, what happens when the temperature is greater than T1? Following the same logic, now the controller behavior is definied by the Look_up_entry_1 and the Look_up_entry_2.

Example
Look_up_entry_0 -> T0=30 Duty_Cycle0=0
Look_up_entry_1 -> T1=55 Duty_Cycle1=30
Look_up_entry_2 -> T2=70 Duty_Cycle2=50
Look_up_entry_3 -> T3=80 Duty_Cycle3=63
Look_up_entry_4-> T4=87 Duty_Cycle4=81
Look_up_entry_5-> T5=92 Duty_Cycle5=87
Look_up_entry_6-> T6=95 Duty_Cycle6=93
Look_up_entry_7-> T7=97 Duty_Cycle7=100

In this way, when the temperature is in the range 30/55, the fan duty cycle varies between 0 and 30, when the temperature is in the range 55/70, the fan duty cycle varies between 30 and 50, when the temperature is in the range 70/80, the fan duty cycle varies between 50 and 63...and so on.
From these settings you can note that switching from two look-up entries (for example look-up-entries 0/1) to the next two (for example look-up-entries 1/2), makes the fan speed to vary faster as the temperature increases. This is the correct way to setup the look-up entries.

Other parameters:
PWM_mode = 3
T_min=T0=30 (i.e. set T_min equal to the temperature of the first look-up entry)
T_max=T7=97 (i.e. set T_max equal to the temperature of the last look-up entry)
T_hysteresis=0
PWM_ramp_on=1
PWM_ramp=1
PWM_hysteresis=0
Spinup_cycle=0
 
Thanks for putting all this info into a guide. I'm pretty familiar with RivaTuner, having beta tested the last few versions including 2.11, but still, I did learn a couple things.

However I would have to say that the writing style is somewhat hard to follow and could use a more refined and concise "technical writing" style. Basically your guide is about twice as long as it needs to be to get all the information across, and it could use a little more consistent formatting and logical structuring, as well as fewer but better-illustrated graphics/screenshots.

I hope you take this as constructive criticism, and thanks again for taking the time to create this guide.
 
Thanks for putting all this info into a guide. I'm pretty familiar with RivaTuner, having beta tested the last few versions including 2.11, but still, I did learn a couple things.

However I would have to say that the writing style is somewhat hard to follow and could use a more refined and concise "technical writing" style. Basically your guide is about twice as long as it needs to be to get all the information across, and it could use a little more consistent formatting and logical structuring, as well as fewer but better-illustrated graphics/screenshots.

I hope you take this as constructive criticism, and thanks again for taking the time to create this guide.
Yes, you are right, maybe i used too much screenshots and i agree, the structure could be improved, maybe i made a mistake trying to discuss about fan control of different boards (x2 vs single GPUIs) in a single post, in fact i exceeded the maximum number of allowable characters.
Well, i hope that at least the guide can be followed without problems.
Edit: Ok, i re-arranged a little the guide structure and deleted some screenshot. Hope it's better now.
 
very nice.
when do you expect the 2.11 version???
will it be significantly different in mechanics to set it up for automatic fan function???

As far as I'm concerned, you can NEVER have enough pictures.
I am really dumb and pictures are worth way more than text.
That's why Kyle's little video was so helpful.

Keep it up man.:D
 
T_hysteresis: when the temperature reaches the value T_min-T_hysteresis the fan is stopped. The fan is reactivated when the temperature becomes higher than T_min.
Please take not that the value you set for T_hysteresis has to be lower than T_min.
Reccomended settings:
Q: Do you want your fan always on A: YES! -> Reccomended setting = T_min-1 (i.e. if T_min is 55, set T_hysteresis to 54)
Q: Do you want your fan always on A: Damn, shut down that damn thing asap! -> Reccomended setting = 0
Take note that on some boards the duty-cycle never becomes zero...

This part doesn't seem correct. I don't think it has anything to do with shutting the fan off, but rather works to prevent rapid fluctuations in fan speed. For me it only goes up to 8C anyways. Any clarification here? I always set it to 1.
 
very nice.
when do you expect the 2.11 version???
will it be significantly different in mechanics to set it up for automatic fan function???

As far as I'm concerned, you can NEVER have enough pictures.
I am really dumb and pictures are worth way more than text.
That's why Kyle's little video was so helpful.

Keep it up man.:D
Thank you.
Procedure for rivatuner 2.11 will be absolutely the same described here.
The new version shoud be out in next few days: the beta testing started seven days ago and Unwinder predicted 7/14 days, so final release is near.

This part doesn't seem correct. I don't think it has anything to do with shutting the fan off, but rather works to prevent rapid fluctuations in fan speed. For me it only goes up to 8C anyways. Any clarification here? I always set it to 1.
In fact T_hysteresis should prevent rapid fluctuations in fan speed by setting an hysteresis threshold on the temperature at which the fan is deactivated. It should work in this way:
when the teperature fall down the temperature T_min-T_hysteresis, the fan is deactivated. In order for the fan to be reactivated, the temperature should become higher than T_min.
In this way it is possible to avoid rapid activation/deactivation of the fan. In fact a value of T_Hysteresis = 0 would force deactivation/reactivation of the fan each time the temperature would cross T_min in lower direction/upper direction. Anyway on some boards the minimum fan speed can never become zero by design, regardless of the T_hysteresis setting. Can you test on your system what happens when core temperature becomes lower than Tmin-Thysteresis?
About the possible values of T_hysteresis, you are right, i made a mistake, the maximum possible value for T_hysteresis on 48xx integrated fan controller should be 7.
Edit: ok, i updated a little the section on T_Hysteresis.
 
Yes, if the T_min is set above the current idle temp + T_hysteresis, the reference duty cycle goes to 0%, however the fan speed is set to 1000RPM at least in my case. This also seems to occur regardless of whether T_hysteresis is 0 or 7 or anything in between.
 
Yes, if the T_min is set above the current idle temp + T_hysteresis, the reference duty cycle goes to 0%, however the fan speed is set to 1000RPM at least in my case. This also seems to occur regardless of whether T_hysteresis is 0 or 7 or anything in between.
Thanx for reporting, So in your case the minimum duty cycle applied is forced to be something like 20 %, like for my x2.
 
Part IV - How to reduce the power drawn in idle

1) Preliminary steps
As first step, we are going to create a CCC Overdrive profile.
Kyle here explained how to create and modify a CCC Overdrive Profile in order to vary manually the fan speed (there's a really nice video too). Now we're doing something a little different, because in this guide the control of the fan speed is carried out by tuning out the fan controller using Rivatuner, so we are not going to modify the section of the CCC profile that deals with the fan speed, here we are interested in the section of the CCC profile that deals with the clocks and voltages.
So. let's create a CCC Overdrive profile. The procedure is well explained in the video on the article referenced above; anyway these are the steps:
1) Open catalyst control center.
2) Browse to the overdrive tab and be sure that Overdrive is enabled. Please note that the first time you open the overdrive tab, the overdrive feature is locked. It is enough to click on the little gold key on the upper left of the overdrive tab to unlock overdrive.
3) Open the profiles manager by clicking on the profiles button in the CCC window and then selecting profiles manager.
4) In the upper field of the profiles manager window enter the name of your choice for the profile. This name will be used by CCC for the file that will store your CCC profile.
5) In the composition tab of the profiles manager window expand the first adapter settings by clicking on the "+" sign and be sure that Ati Overdrive is selected.
6) Click on the Save button (on the upper right).
Ok, the job is done, now the profile has been created.
You can activate the profile by clicking on the activate button of the profiles manager window or by right clicking on the CCC tray icon, then activate -> name of the profile you want to activate.
Keep in mind that when you activate an overdrive profile, that profile will be loaded automatically on windows startup.
In order to modify the profile just created, you need to browse to the directory where the profiles are stored (you need to enable the option "show hidden files and folders" in windows explorer). The directory path is:
C:\Users\<user_name>\AppData\Local\ATI\ACE\Profiles (for Vista)
C:\Documents and Settings\<user_name>\Local Settings\Application Data\ATI\ACE\Profiles\ (for XP)
I assumed that your windows OS is installed on C:\.
Ok, browse to the directory pointed out. You should see a file with the name of the profile you just created. This file has a .xml extension. You can open it with notepad.
Open it!
Now i'll discuss in the next two sections first about 4870x2 then about 4850/4870.

2) Minimizing 4870x2 idle power
This is my default profile (without changing anything) for 4870x2:



This profile is able to set memory clock, core clock and gpu voltage for both 2d/3d and for both GPUs:
The memory clock is controlled by MemoryClockTarget feature. In particular the memory clock of the first GPU is controlled by MemoryClockTarget_0, while the memory clock of the second GPU is controlled by MemoryClockTarget_1. Please take note that usually the features that end in _0 control the slave GPU, while the ones that end in _1 control the master GPU. However this is not an absolute rule, because it depends on how the OS enumerates the GPUs. But we don't care about this question because we are going to change the variables of the two GPUs in the same way. If you have two 4870x2 in crossfire (you lucky bastard :D) you'll see of course four istances of MemoryClockTarget (ending in _0,_1,_2 amd _3).
Ok, let's suppose we want to change the clocks of the memory of GPU 0. We need to look out for the section relative to MemoryClockTarget_0:

<Feature name="MemoryClockTarget_0">
<Property name="Want_0" value="50000" />
<Property name="Want_1" value="90000" />
</Feature>


The clocks are controlled by the values relative to Want_0 and Want_1. Want_0 specifies the clock in 2d while Want_1 specifies the clock in 3d. You see, in this case the memory clock in 2d is 500 Mhz (50000) while the memory clock in 3d is 900 Mhz (90000).
So, if you want to downclock your memory in 2d to 300 Mhz, you need to modify the want_0 line by replacing 50000 with 30000:

<Feature name="MemoryClockTarget_0">
<Property name="Want_0" value="30000" />
<Property name="Want_1" value="90000" />
</Feature>


Ok, we modified the memory clock in 2d of the first GPU from 500 Mhz to 300 Mhz, what about the second GPU? Sure, let's do the same thing for the other GPU:

<Feature name="MemoryClockTarget_1">
<Property name="Want_0" value="30000" />
<Property name="Want_1" value="90000" />
</Feature>


What about the core clock and the GPU voltage? Well, changing the values in this case works in the same way (i.e. CoreClockTarget_0 and CoreClockTarget_1 set the core clocks of first and second GPU, while CoreVoltageTarget_0 and CoreVoltageTarget_1 control their voltages). From the profile i posted you can deduce that the default 2d/3d clocks for both GPUs are 507/750 Mhz, while the default 2d/3d voltages are 1.05/1.25 V (1050 in the profile stands for 1.05 V, 1250 for 1.25 V).
The aim here is to reduce the power drawn in idle, so maybe you're wondering if i'm going to change core clocks and voltages too...the answer is NO, because:
1) The lowest voltage that can be programmed without hardware mods is 1.05 V (the possible values are 1.05, 1.15 and 1.25 V)
2) Downclocking further the GPUs from my testing gives really little gains in power reduction, while generates problems in 2d/3d switching (too wide step variations in the core clock) with possible BSODs and system freezes. Of course you are free to try.
Ok, so let's modify only the clocks of memory in 2d for both GPUs. Lets change the profile:



The parts modified are in green. After you have modified the profile, save it, close it and actvate it from CCC. Remember to save first and then to activate from CCC.
Results:
This is a scrrenshot showing two istances of GPU-Z after windows startup (i just waited for the temperature to stabilize) without activating whatever profile:



On the left you see the slave GPU, on the right the master GPU...something is not working correctly here: the master GPU is in 3d! Well, this is a bug of the drivers that forces the master GPU in 3d after windows startup. Anyway the temp of the master GPU in idle is 83 °C...let's see how to reduce this temp by more than 30 ° C without increasing too much the fan speed.
This bug effect fades away after launching a 3d fullscreen application, because in the switch 2d/3d/2d the drivers takes note of the mistake :D :



You see, now the clocks on the two GPUs are equal, moreover the current adsorbed by the master GPU (VDDC current in the right window) has changed from 31.2 A :)eek:) to 13.5 A. The master GPU temp now is 5 ° C lower (take note that even the fan speed is lower in the second case). Ok, but we want the master GPU in 2d mode at windows startup, why we have to launch and close a 3d application? Moreover we want to reduce further the idle power...simple, let's activate the profile we modified and saved. Here's the situation after a windows startup:



See, the temperature of the master is 8 °C lower (from 78 to 70) while the temperature of the slave is 5 ° C lower...and take note that the fan speed has not changed...
Finally let's use rivatuner to optimize the automatic fan control of the board (i'm using the settings described in part II of this guide):



Not bad at all, 51 °C on the master gpu with 2100 RPM (34 % duty cycle). These results are with a room temp equal to 28 ° C, case temp -> 35 ° C.

Ok, that's all...later i'll add some analysis to give you the idea of the power reduction.

3) Minimizing 4850/4870 idle power
Coming soon
 
Ok, i added the guide for reducing idle power of 4870 x2 and re-arranged Part III of the guide.
As soon as possible i'll add the guide for power idle reduction of 4850/4870 and rewrite a litle the fan control for 4850/4870 in order to illustrate the steps more clearly.
 
When I go to unlock low-level fan control on my X2, I can only do it for the secondary core. It doesn't show the right parameters, just "lookup entry 0", "lookup entry 1" etc

When I try and unlock fan control for the master, it remains greyed out no matter how many times I tick the box. Tried reboots, different drivers, still not working.
 
When I go to unlock low-level fan control on my X2, I can only do it for the secondary core. It doesn't show the right parameters, just "lookup entry 0", "lookup entry 1" etc

When I try and unlock fan control for the master, it remains greyed out no matter how many times I tick the box. Tried reboots, different drivers, still not working.
In your case rivatuber 2.10 is not working. As i said in the beginning, rivatuner 2.10 for x2 works for some, doesn't work for others. Wait for 2.11, it should come out in few days.
 
Thanks for the great guide! Working very well for my 4870s in Crossfire.
 
Thanks for the great guide! Working very well for my 4870s in Crossfire.
Thank you. Anyway for crossfire rivatuner 2.11 has some big surprises. I'll be sure to update the guide when the new version will be available.
Btw, i made a complete restyling of the guide and corrected some parts: now it should be easier to browse the different contents.
 
thanks for this one chief. amd can't get this part right?! fanspeed based on temp range?!
 
Ok.
2.11 just came out.
I'm going to need some help and ask a couple of questions.
I know how to set the auto fan control, been doing that for some time.

Will the hardware monitor "see" all 4 of my CrossfireX X2 cores and record them on one panel as it could with SLI??? In other words, I could set my auto fan to run both of my sli cards AND the hardward monitor would record both cores, both fan cycles,etc.

Will the 2.11 do this for X2 crossfire???

Thanks.
 
The new drivers include a bunch of quadfire functionality. Definitely grab them as well.
 
Ok.
2.11 just came out.
I'm going to need some help and ask a couple of questions.
I know how to set the auto fan control, been doing that for some time.

Will the hardware monitor "see" all 4 of my CrossfireX X2 cores and record them on one panel as it could with SLI??? In other words, I could set my auto fan to run both of my sli cards AND the hardward monitor would record both cores, both fan cycles,etc.

Will the 2.11 do this for X2 crossfire???

Thanks.
In the hardware monitor, you can view only one GPU variables (core temperature, core clock and so on) at the same time. To switch between GPUs in the HM, you need to select the associated target adapter in Rivatuner main TAB. So, if you refer to auto fan control done in Rivatuner by setting thresholds for switching different fan profiles (i.e. software fan control, for which the hardware monitor has to be active), the answer is no, this approach is not valid for crossfire systems.
For this type of systems, the hardware fan control approach is valid.
In fact, with Rivatuner 2.11 you are able to set the parameters of the fan controller of both boards (in your case 2 4870X2) in cloning mode, i.e. when you modify the parameters of the fan controller of the master board, the parameters of the fan controller of slave board are set equal. To enable this behavior, you need to set the variable EnableFanControlCloning = 1. This variable is placed in the Power User Tab of Rivatuner under the group "Rivatuner \ Fan". In ths way you can follow my guide about 4870X2 automatic fan control: you need to set only the parameters of the fan controller of Master board. Take note that if you follow these steps, the fan speed on each board will depend only on the core temperature of master GPU of that board, because the fan control is done in hardware: after you set up the auto fan control parameters, you don't need rivatuner to be running.
 
Updated the first part of this guide (first post) with instructions on how to set up fan control on crossfire systems.
 
Excellent.

Thanks alot.

I figured that I'd have to use hardware control, but didn't really understand how.
Your explaination was VERY helpful.:D
 
The parameters that Rivatuner let us change are the following:

Duty_Cycle_Min
Duty_Cycle_Max
T_min
T_range
T_operating
T_low_limit
T_high_limit

Some of those parameters are missing or renamed with my VisionTek 4870X2 with the 8.9 catalyst drivers. After setting AutoFanSpeedControl to 3 and moving into the Low-Level/Fan tab, I see:

Lookup entry 0-7
PWM mode
PWM hysteresis
PWM ramp on
PWM ramp
Duty cycle 100%
Duty cycle min
Spinup cycle
Spinup time
Tmin
Tmax
Tslope
Thysteresis

In fact, they match up to your settings for the single 4870. I do note that, even though I have a 4870X2, I see two 4870 adapters, whereas in your image in the first post in this thread, you seem to have a single 4870X2 adapter target showing.

I'd appreciate your opinion on why there is a difference and how it may impact your instructions. Presumably, I may have to follow the single 4870 and repeat (or clone).

Thanks.
 
Some of those parameters are missing or renamed with my VisionTek 4870X2 with the 8.9 catalyst drivers. After setting AutoFanSpeedControl to 3 and moving into the Low-Level/Fan tab, I see:

Lookup entry 0-7
PWM mode
PWM hysteresis
PWM ramp on
PWM ramp
Duty cycle 100%
Duty cycle min
Spinup cycle
Spinup time
Tmin
Tmax
Tslope
Thysteresis

In fact, they match up to your settings for the single 4870. I do note that, even though I have a 4870X2, I see two 4870 adapters, whereas in your image in the first post in this thread, you seem to have a single 4870X2 adapter target showing.

I'd appreciate your opinion on why there is a difference and how it may impact your instructions. Presumably, I may have to follow the single 4870 and repeat (or clone).

Thanks.
Are you using Rivatuner 2.10 or 2.11?
With rivatuner 2.11 in the main tab you should see three adapters, i.e. something like this:



The fan controller parameters of the 4870 x2 can be viewed by accessing the low level fan settings TAB of the first two adapters. If this doesn't happen in your case (i.e. whatever adapter you choose you get the fan control parameters of single GPU 48xx), then i suppose that your board doesn't have the external fan controller as per ATI reference board: in this case you should be able to control the fan speed by using the 48xx single gpu settings.
Best way to find out if the fan controller is active is to vary the fan duty cycle in fixed mode by moving the upper slider in the fan tab and verify if the fan speed changes. Remember to click on the apply button after you moved the slider in order for the new duty cycle to become active.
 
ribbell, I have a question, it's a bit off the mark........

my son's computer has 8800 GTs in SLi.
right now I use Riva 2.10 and have the fans on a static profile using the driver method, as listed here:http://www.vaguetech.com/index.php?pageid=rt207

I would like to have both cards run under the auto mode as you described for my Crossfired X2s, using the cloning method.

Will the clone method work for nvidia cards in SLI??? and will I need to upgrade to version 2.11???

Thanks in advance.:D
 
ribbell, I have a question, it's a bit off the mark........

my son's computer has 8800 GTs in SLi.
right now I use Riva 2.10 and have the fans on a static profile using the driver method, as listed here:http://www.vaguetech.com/index.php?pageid=rt207

I would like to have both cards run under the auto mode as you described for my Crossfired X2s, using the cloning method.

Will the clone method work for nvidia cards in SLI??? and will I need to upgrade to version 2.11???

Thanks in advance.:D
If the 8800 GTs you're talking about use a controller that rivatuner can configure by the low level fan settings tab (usually Nvidia boards use the ADT473, the same available on x2), yes, all what i said for crossfire systems should be valid for your son's computer too. And yes to the second question too, you need Rivatuner 2.11, because cloning mode has been introduced in this version.
 
If the 8800 GTs you're talking about use a controller that rivatuner can configure by the low level fan settings tab (usually Nvidia boards use the ADT473, the same available on x2), yes, all what i said for crossfire systems should be valid for your son's computer too. And yes to the second question too, you need Rivatuner 2.11, because cloning mode has been introduced in this version.

Great. Thanks alot.:D
I need to learn the terminology better so I can get my points across.
The 8800 GT responds to low level fan controls.:p

So, if I enable fan control cloning = 1 under power user in RT 2.11, I can create a single low level profile and both cards will be dynamically controlled!!!!! That's excellent. (sorry if I restate the obvious, but I'm stupid and need to repeat things so I understand them.)

As you said, in the hardware monitor only the master card's temps will be displayed, AND the dynamic control of both cards will be off the master card temperature response, correct?

My son was playing Warhead last night and the card temps went over 100C:eek:
I guess my old static profiles just weren't up to the task.

Your help is appreciated!!
 
So, if I enable fan control cloning = 1 under power user in RT 2.11, I can create a single low level profile and both cards will be dynamically controlled!!!!! That's excellent. (sorry if I restate the obvious, but I'm stupid and need to repeat things so I understand them.)
It is enough that you check the box "apply fan settings at windows startup" in the low level fan settings tab after you apply the settings you changed in the "auto fan speed rule" window. (you don't need a profile).

As you said, in the hardware monitor only the master card's temps will be displayed, AND the dynamic control of both cards will be off the master card temperature response, correct?
Cloning mode means that the fan control rules are set equal for the similiar fan controllers rivatuner finds on the system. So if you have two video cards of the same model, the two fan controllers of these card will be programmed by rivatuner with the same parameters, but, since the fan control is done in hardware, the two fan controllers will regulate the fan speed based on the temperature of the GPU where the fan controllers is installed, i.e. the fan controllers will operate with the same parameters, but will set fan speed based on different temperature (the first fan controller based on the temperature of the GPU of the first card, the second fan controller based on the temperature of the GPU of the second card).
So if for example card 1 is super hot and card two is super cool :D...fan of card 1 will be super fast, while fan of card 2 will be super slow.
Lemme know if you get fan cloning working on SLI.
 
this is great. thanks for the riva write up. i tried the fan profile approach first in CCC and for some reason once i created the gaming profile, i was not able to switch between profiles or anything. even after deleting the profiles i couldnt do anything. lucky i didnt upgrade to 8.9 and it went back to stock speeds after the patch. i installed riva 2.11 and this method worked awesome. far better then the 2 profile way aswell.

thanks again, this should be sticky'd :)
 
ribbell:

worked a bit on the SLi deal this afternoon.
used the optimized dynamic control rules under the low level, with cloning enabled.

worked as advertised.
confirmed by GPU-z that both cards are ramping up their fans and the hardware monitor in RT notes a nice duty cycle curve.
only problem is the 8800 GTs have god-awful fans and sound like mini leaf blowers when they are ramped to 100%.:eek:

thanks again for the advice.;)
 
Back
Top