A lot of you folks must haf heard about GPGPU (General-Purpose computation on GPUs). GPGPU is the term associated with using GPUs for general purpose computing. Today's CPUs are approaching the theoretical "speed" limit. A single core maxes out at about 3 Ghz. Going anything above does not give proportional performance gain. Its more of a liability since it involves more power, more components and hence costs more. Of corz, multi-cores is the solution which the industry has adopted; but then according to industry analysts, if there is no break-through in fundamental design of the processor then multi-cores will not scale beyond 8 cores.
So, how do we satisfy all those number hungry programs like Folding@Home? Use the shamelessly powerful GPUs as co-processors to the present-day CPUs! This idea was explored way back in the '90s. The first public project was BrookGPU which exploited the GPU for general purpose computing. But since the guys who developed it were not the ones who designed the GPU, they had little knowledge about its internals.
When they teamed up with the "GPU guys" they came out with toolkits like nVidia CUDA (Compute Unified Device Architecture) and AMD CTM (Close To Metal or AMD Stream Computing). These toolkits enable the programmer to explicitly use the GPU for general purpose computational tasks.
nVidia CUDA can be thought as an extension to the C Programming Language. It provides the user with functions which allow interaction of the host (CPU) and the device (GPU) and its memory units. The beauty of graphic processors is that they focus little on cache etc. and instead concentrate more on processing thousands of threads simultaneously since thats what the graphics of today demand. This approach makes them ideal for scientific computing which heavily depend on pristine number crunching. Till recently nVidia did not haf a Folding@Home client, but now they do. AMD (ATi) had once since long. With these toolkits, almost anybody can now code such clients. All nVidia G8x and above GPUs are supported by the CUDA toolkit.
Our current assignment is to develop and implement a sorting algorithm in CUDA. Being completely new to CUDA, it sure is a challenging assignment.
For more information on CUDA, I'd suggest the following articles:
1) nVidia CUDA Programming Guide
2) GPGPU/CUDA Tutorials
3) CUDA Introduction
4) CUDA: Supercomputing for the masses
5) nVidia CUDA Explained - DigitLife
If you own one of the current generation nVidia Geforce cards (G8x and/or up) and know C Programming, I'd suggest you try out nVidia CUDA. The CUDA toolkit and SDK can be downloaded from nVidia CUDA Zone. Get yourself some home brewed supercomputing! :)