Depending of the GPU ...
For ATI case you can do it by the driver...
Here the steps you need to do
1. Go to Catalyst and make an new profile and save it
Eg.:Fan 25%
2 You go here (watchout if you want to do this you need to see the hidden files)
C:\Users\iModAMD\AppData\Local\ATI\ACE\Profiles
(in this example iModAMD is my acount name for Windows Vista)
3. Right click on the XML file and select modify
4.In the file search for an code line like this
<Feature name="FanSpeedProtocol_0">
<Property name="FanSpeedProtocolProperty" value="Percent" />
</Feature>
<Feature name="FanSpeedAlgorithm_0">
<Property name="FanSpeedAlgorithm" value="Automatic" />
</Feature>
<Feature name="FanSpeedRPMTarget_0">
<Property name="Want" value="0" />
</Feature>
<Feature name="FanSpeedPercentTarget_0">
<Property name="Want" value="0" />
</Feature>
</Group>
It should be after Memory Voltage Target
5. Normaly <Feature name="FanSpeedAlgorithm_0">
<Property name="FanSpeedAlgorithm" value="Automatic" />
You will change the value automatic for Manual
6. Set the FanSpeedPercentTarget_0 to the value of your choice (0-100) Thoses are in %
OR
Set the FanSpeedRPMTarget_0 to the value of your choice (depending the maximum and the minimum of your fan)
Should give you something like this
<Feature name="FanSpeedProtocol_0">
<Property name="FanSpeedProtocolProperty" value="Percent" />
</Feature>
<Feature name="FanSpeedAlgorithm_0">
<Property name="FanSpeedAlgorithm" value="Manual" />
</Feature>
<Feature name="FanSpeedRPMTarget_0">
<Property name="Want" value="0" />
</Feature>
<Feature name="FanSpeedPercentTarget_0">
<Property name="Want" value="25" />
</Feature>
</Group>
7. Have fun and make profiles for control your fan
For NVIDIA
Take RIVATUNER all Nvidia GPUS should be supported
(With this trick you can change the Fan Speed of your card . Eg : By default the 4850 fan it's always at 5% who is really quiet... even too much in idle the GPU was at 80 Celcius....hot you will say yes it is .By this trick i passed to 80 celcius to 42 in idle.)