Graphics Card Uses Compression for Reducing Memory Bandwidth???
Posted by Sachin Garg on 1st October 2005 | Permanent Link
ATI Technologies Inc., has announced the introduction of its new Radeon graphics card.
It claims to use 3Dc compression technology to bring out fine details with minimum memory usage and HyperZ for lossless Z-Buffer compression that reduces memory bandwidth by up to 25%.
A quick query at google revealed that compression is a crucial technique in saving memory bandwidth for higher performance and is very often used by graphics cards.
Can the reduction in memory bandwidth really help so much so as to offset the CPU-time cost of compression/decompresssion? Although it comes as a surprise to me, it sure seems it does.
October 1st, 2005 at 2:33 pm
It surprises me, too. My understanding has always been that the limiting factor on gfx cards is not the memory, but the gpu speed and the number of pixel pipelines.
October 1st, 2005 at 4:33 pm
I’m a game developer.
Many cards have an on-board bus that is an order of magnitude faster or wider than the bus between the card and the computer, so if a program uses enough texture memory that the graphics card has to page textures off the PC’s core memory much as a PC pages from disk, I could anticipate a definite win here.
Many cards also have a very high-speed texture cache and always preload the next-needed texture. If decompression can be done by a core operating in parallel with the rendering and geometry cores, there would be no time cost to decompression.
There are/were schemes where the rendering core was tweaked to render directly from compressed data as well. S3 had a texture format where every raw pixel was surrounded by 8(?) pixels encoded with just a few bits specifying the weights for a weighted average of 4 nearby raw pixels. This format was added to an earlier Direct 3D spec I believe. I have no idea if it’s still in use.
Lastly, for historic interest and amusement, there were even some compressed framebuffer formats. The Apple 2 had a display mode where some values simply meant “repeat the last pixel” which made it easy to change large areas of the screen. The implications for simple vector animation should be obvious. Likewise, the Amiga had a HAM (Hold And Modify) mode, where 6 bits were used for each pixel. The top two bits specified whether the bottom four bits represented a palette entry, or the previous display pixel with its red, green, or blue channel changed to a new value. This worked well for producing broadcast video where one could be “lazy” on blue and red changes and attentive to green, and the sloppiness of NTSC would hide any blurring.
October 1st, 2005 at 4:47 pm
3Dc is “old” news for game developers.
3Dc was developed by ATI mainly to compress normal maps which suffer dramatically from DXTC - i.e. DirectX Texture Compression - standard hardware compression.
While DXTC offers DCT and 6:1 ratio, 3Dc reaches only 3:1 but with less “blocky” artifacts otherwise present using DXTC.
October 2nd, 2005 at 11:04 am
Thanks to you both for the added information. :-)
October 2nd, 2005 at 11:10 am
I also heard about GPUs being used for general purpose processing. They sure have a lot of processing power lying idle when I am not playing games.
And in case the GPU’s have pre-coded zlib/bzip code in them, they just might become prime targets for those looking for cutting edge performance.
Am just speculating.
October 7th, 2005 at 8:17 am
Compression was already used in microcontrollers, fpga and asic. For example, IBM has a microcontroller (powerpc 4xx) that makes automatic compression/decompression of code. Also, there are memory controllers (if i remember correctly from Marvell) that allow compresion/decompresion to memory without clock penalty. These compressions allow a more bandwith memory and more memory for the job, but not so more. In a GPU i dude the gain can be noticeable.
Also, NVidia some years ago developed a driver that allow use theirs GPU as numerical coprocessor. Don’t know if it still works.
October 7th, 2005 at 1:44 pm
“Also, NVidia some years ago developed a driver that allow use theirs GPU as numerical coprocessor. Don’t know if it still works.”
Yes, they are still going ahead with it. It called gpGPU.
(General Purpose GPU)
They also once claimed how they may someday surpass intel. This caused major “issues” between NVidia and Intel, which fortunately have now been resolved.
An older story which covers this…
[c10n: Use Processing Power of Graphics Processor for Compression]
http://www.c10n.info/archives/122