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

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 %).