Abstract: Graphical processing units (GPUs) are specialized co-processors designed with large memory bandwidths and massively parallel processing capabilities to process graphics primitives. In the last years there has been roughly a factor of 10 in difference between the peak performances of modern GPUs and the fastest available CPUs. At the same time the programmability and development tools have matured dramatically, making modern GPUs almost as programmable as CPUs. As a consequence, many groups have started to use GPUs to accelerate their scientific codes. In this talk I will introduce the data parallel architecture of GPUs, which is necessary to understand in order to properly exploit GPUs, and the new programming models, both based on lower level languages and on higher level directives.
The scientific rationale for using GPUs can divided in roughly three different categories: to make things that before took several minutes to run almost interactive making it possible to explore data, to dramatically lower the time to solution for longer term computations carried out on single work stations, and finally to use massively in supercomputers making it possible with a midrange supercomputer to address problems only solvable on the largest supercomputers in the world.
As a concrete example I will consider the HPC perspective, and the use of GPUs to accelerate the time to solution for one the most demanding physical modeling tools; first principles particle-in-cell models of charged particle dynamics. This will not only elucidate how to effectively use GPUs, but also illustrate the programming complexity of heterogeneous architectures, and the necessity to program at various levels of parallelism, which will be a challenge for many large-scale HPC codes in the coming years.