General-Purpose Computing on Graphics Processing Units (also referred to as GPGP and to a lesser extent GP^2) is a recent trend in computer science that uses the Graphics Processing Unit to perform the computations rather than the CPU.
Sometimes, the term "GPGPU" is used to disambiguate between actual GPUs and some kind of future design evolution which will allow easier programming.
Game programmers have had the need to make more realistic-looking effects, and this led to programmable vertex shaders and fragment shaders. Vertex shaders are programs that run on the GPU and allow programmers to specify how the vertices of a geometric shape will be lit. Fragment shaders also run on the GPU and allow programmers to specify how each fragment, or pre-pixel, will be colored. Naturally, more bits per pixel allow a higher range of colors to be used, so graphics cards have increased the number of bits that represent each color component.
Now, combine these programs with higher precision arithmetic and the fact that graphics processors computational power has been increasing at an incredibly high rate, and it is easy to see why GPUs are being looked as a powerful processing unit in areas outside their original intended scope of graphics and visualization. The reasonings behind the massive performance increase being deployed are directly related to hardware design and the programming model used, called Stream processing.
The following are some of the non-graphics areas where GPUs have been used for general purpose computing:
- Cryptography
- Database operations
- FFT
- Lattice Boltzmann Method
- Ray-tracing
- Segmentation
- Sound Effects Processing
- Neural Networks
Not all applications can be ported to the GPU successfully though. Some applications are simply not well suited for today's graphics architecture. Furthermore, the precision on a GPU is limited to 24 bits on ATI cards and 32 bits on NVIDIA cards. This limitation on the precision available is enough to prevent certain type of computations from being performed on GPUs.
External Links
- http://www.gpgpu.org
- http://developer.nvidia.com
- http://www.atitech.com/developer
- Hijacking the GPU (APC Magazine article on GPGPU computing)