Sunday, 18 November 2007

For fglrx using people having idle overheating problems and eco friendly people...

While reading radeonhd dev mailing list I stumbled upon a link to a modified version of radeontool that enables setting power saving registers on new radeon adapters. I've tested it with my Radeon 1950Pro, and sure enough, the card is much cooler when idle (about the same as in Windows).

This version changes a couple of settings in the CLKIND power saving registers of which I believe that the "Auto disable unused pipes' clk" (DYN_SCLK_PWMEN_PIPE in ATI documentation) bit is the most important . When running "./radeontool power low" my glx performance falls from about 12000 FPS to 7000FPS. I've changed the modified radeontool to only enable the 'Auto disable unused pipes clk" power saving bit, and the performance of glxgears came back to 12k FPS level, while retaining a cool device.

So I've put the radeontool binary in my /usr/local/sbin, did a chown root:root radeontool, and chmod +s radeontool, and made gnome to issue "radeontool power low" command when starting up to workaround the bug in the current fglrx driver.

Radeon tool commands:
radeontool power status - show the current status of the power saving registers
radeontool power low - enable power saving

I still don't know how to read the temperature sensor data from the card and if anybody knows the relevant registers or other way to access this info, please tell. I used Windows freshly booted after linux and my own fingers to see the temperature differences.

Temperature without using radeontool: 50 C
Temperature after using radeontool: 40-41 C

Link to the radeon hd mailing list:

Link to the discussion:

Direct link to the original modified radeon tool:

My modified version that only turns on disabling of the unused pipes is here EDIT updated version:

Old version:

Relevant documentation from ATI:

Monday, 16 July 2007

Disappointing Windows STL performance (just reading strings)

A friend recently wrote a little test C++ program that counts number of lines in a text file.

We tested with a text file that was about 1 GB in size. The computer had 2 GB of RAM, enabling the OS to keep the whole thing in cache.

With Windows STL implementation the program run for 40 seconds, even if the cache was hot. Linux version ran for 40 seconds if the cache was cold, and 4 seconds if the cache was hot. He wrote a C version of the program that also took 4 seconds to comlete on Linux. On Windows, C version of the program ran for 10 seconds, still much slower than in Linux.

Here is the test source code:

He later rewrote the C++ version to use a class member function instead of a global function from <string>, and that got it to a speed of 23 seconds. Still, much slower than in Linux.

The version of Windows C++ runtime was from Visual Studio 2005.