With contributions from: M. Amini, C. Ancourt, F. Andzembe, V. Arslan, R. Barrere, M. Barreteau, J.-M. Batto, F. Boumezbeur, M. Bourgoin, F. Catthoor, E. Chailloux, H.-P. Charles, J.M. Chauvet, A. Cohen, S. Contassot-Vivier, R. Couturier, B. Creusillet, G.C. de Verdiere, V. Ducrot, J.I. Gomez, D.R.C. Hill, F. Irigoin, J.C. Juega, R. Keryell, J. Koko, J.-L. Lamotte, E. Lenormand, V. Lomuller, F. Magoules, E. Mahe, S. Monot, J. Passerat-Palmbach, T. Saidani, B. Starynkevitch, F. Tahi, D. Tello, S. Tempel, C. Tenllado, V.D. Tran, S. Verdoolaege, S. Vialle and L. Ziane Khodja. Multi-core and many-core platforms lead the computer industry, forcing software developers to adopt new programming paradigms, in order to fully exploit their computing capabilities such as graphics processing units (GPUs). GPU-based application development requires a great effort from application programmers. On one hand, they must take advantage of the massively parallel platform in the problem modeling. On the other hand, the applications have to make an efficient use of the heterogeneous memory system, managing several levels that are software or hardware controlled.
Generally the programmers' methodology consists in evaluating several mapping alternatives, guided by their experience and intuition, which becomes inefficient for software development and maintenance.This volume presents in thirteen chapters some methodologies and design patterns for parallel programing on GPUs, to help programmers make good choices. Each chapter, written by different authors, presents a state-of-the-art of some innovative methods, techniques or algorithms useful for GPU computing. A bibliography is included at the end of each chapter.The main topics considered in the book include: CUDA and OpenCL programming language, parallelizing compilers generating code, dynamic code generation, parallel skeletons, high level data flow models, optimizing source code, and numerical methods. The book includes details of the implementation of the algorithms as well as both academic and real engineering examples.