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

This  chapter  proposes to  draw  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 alone
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  according  to the  potential
benefits (performance,  accuracy,...). So, in such contexts,  GPU programming is
still  regarded  with   some  distance  according  to  its   specific  field  of
applicability (SIMD/SIMT model) 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  multi-core 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 as  simple as
possible  general  programming patterns  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.
Also, we propose in a third part, a prospect analysis together with a particular
programming tool that is intended to ease multi-core GPU cluster programming.


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