The graphics processing unit (GPU) has become an integral part of today's mainstream computing systems. Over the past 6 years, there has been a marked increase in the performance and capabilities of GPUs. The modern GPU is not only a powerful graphics engine but also a highly parallel programmable processor featuring peak arithmetic and memory bandwidth that substantially outpaces its CPU counterpart. The GPU's rapid increase in both programmability and capability has spawned a research community that has successfully mapped a broad range of computationally demanding, complex problems to the GPU. This effort in general-purpose computing on the GPU, also known as GPU computing, has positioned the GPU as a compelling alternative to traditional microprocessors in high-performance computer systems of the future.
Based on the initially GPU readings and the current uses of this technology, I have become extremely interested in it and wanted to confirmed first-hand the performance and capabilities of GPUs. In my project I have explored CUDA, a parallel computing platform and programming model invented by NVidia. This platform enables dramatic increases in computing performance by harnessing the power of the GPU. In order to evaluate performance increases I’ve implemented the simulation of Schroedinger’s wave dissemination over a two dimension space (Wave2D) in multithreaded, single GPU and multiple GPUs versions using C language. Having the multithreaded version of the Wave2D program allowed me to compare the performance and validate the final results data. Although my program is tailored for the Wave2D application, it demonstrates how multithreaded program can be converted into a single GPU or even how multi GPUs can be coordinated to achieve even better results. Furthermore, this implementation can be used as the platform for more generic solution such as the Multi Agent and Spatial Simulation (known as MASS) library which utilizes one or multiple GPUs.