“…However, the increasing demand for sophisticated graphics for video games, computer-aided design (CAD), animation, and other applications is driving the development of more and more powerful graphical processing units (GPUs), which take advantage of data parallelism to render graphics at high speeds. While video cards have been traditionally used only for graphics-intensive applications, they have also been recently leveraged towards scientific-computing problems, such as finite-difference time-domain algorithms [1], sorting algorithms for large databases [2], n-body problems [3], and quantum Monte Carlo methods for chemical applications [4]. In these cases, programmers were required to construct GPU algorithms using a limited set of operations originally intended for computer graphics applications; however, the recent release of graphics card manufacturer NVIDIA's compute unified device architecture (CUDA) development toolkit for some of their high-end graphics cards allows developers to code algorithms in a C-like language [5].…”