\section{Introduction}\label{ch6:intro}

This chapter proposes  to draw upon several development  methodologies to obtain
efficient codes  in classical scientific applications.   Those methodologies are
based on  the feedback from several  research works involving GPUs,  either in a
single machine  or in  a cluster of  machines.  Indeed, our  past collaborations
with industries have  allowed us to point out that  in their economical context,
they can adopt a parallel  technology only if its implementation and maintenance
costs   are   small  compared   with   the   potential  benefits   (performance,
accuracy, etc.). So,  in such  contexts, GPU programming  is still  regarded with
some  distance due  to its  specific  field of  applicability (SIMD/SIMT  model:
Single  Instruction  Multiple  Data/Thread)  and its  still  higher  programming
complexity and maintenance.  In the academic domain, things are a bit different,
but studies  for efficiently integrating GPU computations  in multicore clusters
with  maximal  overlapping  of  computations with  communications  and/or  other
computations are still rare.

For  these  reasons,  the major  aim  of  that  chapter  is to  propose  general
programming patterns, as simple as possible,  that can be followed or adapted in
practical implementations of parallel scientific applications.
% Also, according to  our experience in industrial collaborations,  we propose a
% small  prospect  analysis about  the  perenity  of  such accelerators  in  the
% middle/long term.
In  addition,  we  propose  a  prospect  analysis  together  with  a  particular
programming tool that is intended to ease multicore GPU cluster programming.


%%% Local Variables:
%%% mode: latex
%%% fill-column: 80
%%% ispell-dictionary: "american"
%%% mode: flyspell
%%% TeX-master: "../../BookGPU.tex"
%%% End:
