The GPU is an integral component in commodity machines. It was
previously designed to be a co-processor to the CPU for games and other interactive applications. Recently, the GPU has been used as a hardware accelerator for various non-graphics applications, such as scientific computation, matrix multiplication [26],databases [14, 16, 22], and distributed computing projects including Folding@home and Seti@home. For additional information on the state-of-the-art GPGPU techniques, we refer the reader to a recent survey by Owens et al. [30].