A Survey on Parallel Computing and Its Applications in Data-Parallel Problems Using GPU Architectures (Communications in Computational Physics, 2018)
Parallel computing has become an important subject in the field of computerscience and has proven to be critical when researching high performance solutions.The evolution of computer architectures (multi-core and many-core) towards a highernumber of cores can only confirm that parallelism is the method of choice for speedingup an algorithm. In the last decade, the graphics processing unit, or GPU, has gainedan important place in the field of high performance computing (HPC) because of itslow cost and massive parallel processing power. Super-computing has become, for thefirst time, available to anyone at the price of a desktop computer. In this paper, wesurvey the concept of parallel computing and especially GPU computing. Achievingefficient parallel algorithms for the GPU is not a trivial task, there are several technicalrestrictions that must be satisfied in order to achieve the expected performance. Someof these limitations are consequences of the underlying architecture of the GPU andthe theoretical models behind it. Our goal is to present a set of theoretical and technical concepts that are often required to understand the GPU and its massive parallelism model. In particular, we show how this new technology can help the field of computational physics, especially when the problem is data-parallel. We present four examplesof computational physics problems: n-body, collision detection, Potts model and cellularautomata simulations. These examples well represent the kind of problems that aresuitable for GPU computing. By understanding the GPU architecture and its massiveparallelism programming model, one can overcome many of the technical limitationsfound along the way, design better GPU-based algorithms for computational physicsproblems and achieve speedups that can reach up to two orders of magnitude whencompared to sequential implementations.