install.tex [SRC] [CPP] [JOB] [SCAN]
DOC / fr



   1 | \chapter{Installer le code}\label{chap_install}
   2 | 
   3 | Dans ce chapitre, nous allons détailler toutes les étapes préparatoires afin de pouvoir utiliser le code \code. Dans un premier temps, nous verrons la configuration minimale requise pour pouvoir utiliser le code. Ensuite, nous expliquerons comment télécharger puis installer et compiler le code et toutes les routines qui l'accompagnent.
   4 | 
   5 | \section{Configuration système requise}
   6 | Le code a été compilé et testé sur des environnements de type Unix. Il doit être utilisable dans un environnement Windows, mais aucun test n'a été effectué.
   7 |     
   8 |     \subsection{Logiciels requis}
   9 | Pour pouvoir télécharger et compiler le code ainsi que les routines qui l'accompagnent, il est nécessaire d'avoir les éléments suivants sur son système :
  10 | \begin{description}
  11 | 	\item[GCC (GNU Compiler Collection) :] la version minimale nécessaire est la 4.2.3 \footnote{La routine predatas que l'on présente plus loin utilise une fonctionnalité de la norme Fortran 2003 : l'allocation dynamique dans un typé dérivé qui ne fut introduit qu'à partir de la version 4.2.x de GCC.}
  12 |     \item[Open MPI :] une bibliothèque de fonctions qui permet de faire du calcul parallèle,
  13 |     \item[m4 :] un processeur de macros, il permet de remplacer du texte comme nous le verrons  dans la partie \ref{subsec_def_host},
  14 |      \item[make :] un logiciel qui permet d'exécuter les différentes opérations nécessaires à la compilation du code et des routines qui l'accompagnent.
  15 |     \item[Subversion (SVN) :] un logiciel de suivi de version.
  16 | \end{description}
  17 | 
  18 |     \subsection{Logiciels recommandés}
  19 | Outre les logiciels requis, certains autres peuvent s'avérer nécessaires pour tirer profit pleinement des possibilités offertes par \code afin d'effectuer le post-traitement des solutions obtenues :
  20 | \begin{description}
  21 |     \item[Grace :] un logiciel open source de tracé de courbes 2D,\footnotemark[2] ;
  22 |     \item[ParaView :] une application open source d'analyse de données et de visualisation 3D \footnotemark[3].
  23 | \end{description}
  24 | \footnotetext[2]{\urlcolor{http://plasma-gate.weizmann.ac.il/Grace/}}
  25 | \footnotetext[3]{\urlcolor{http://www.paraview.org/}}
  26 | \addtocounter{footnote}{2}
  27 | Nous verrons au chapitre \ref{chap_tests} que les tests s'appuient sur Grace pour générer automatiquement le tracé des courbes.
  28 | 
  29 |     \subsection{Aide à l'installation}
  30 |         \subsubsection{sur Linux}
  31 | Sur Linux, la plupart de ces logiciels sont soit installés par défaut sur le système soit disponibles via les dépôts associés aux distributions. La plupart des distributions récentes fournissent en standard GCC 4.3 ; sur les plus anciennes, il faudra vérifier que la version fournie est compatible : \newline
  32 | \indent \cmd{gcc -\,-version} \newline
  33 | et si nécessaire, télécharger et compiler GCC 4.2 (ou 4.3) ou éventuellement mettre à jour votre distribution Linux vers une version plus récente.
  34 | 
  35 |         \subsubsection{sur OS X}
  36 | Sur OS X, les choses ne sont malheureusement pas aussi simples. Dans un premier temps, il est nécessaire d'installer les outils de développement Apple disponible à l'adresse suivante : \urlcolor{http://developer.apple.com/mac/} \footnote{Pour accéder au téléchargement, il est nécessaire de se créer un compte gratuit sur le site d'Apple.}, ne serait-ce que pour accéder à la commande \texttt{make}. 
  37 | 
  38 | Ensuite, le plus simple est d'installer GCC 4.3 et Open MPI en utilisant le projet MacPorts \footnote{\urlcolor{http://www.macports.org/}}. Une fois MacPorts installé, il est nécessaire d'ajouter les lignes suivantes au fichier \texttt{.bash\_profile} qui se trouve à la racine de votre compte utilisateur :
  39 | \begin{verbatim}
  40 |     export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH
  41 |     export PATH=/opt/local/lib/openmpi/bin:/opt/local/include/openmpi:$PATH
  42 |     export MANPATH=$MANPATH:/opt/local/share/man
  43 |     export INFOPATH=$INFOPATH:/opt/local/share/info
  44 | \end{verbatim}
  45 | 
  46 | Ensuite dans le terminal, exécutez la commande suivante pour installer GCC 4.3 et Open MPI : \newline
  47 | \indent \cmd{sudo port install openmpi +gcc43} \newline
  48 | 
  49 | Le logiciel Grace est également disponible via MacPorts : \cmd{sudo port install grace}.
  50 | 
  51 | \section{Téléchargement du code source}\label{sec_telechargementDOM}
  52 | Le code est actuellement développé et maintenu par le CERFACS. Le projet s'appuie sur le logiciel Subversion pour gérer le suivi de version et permettre le téléchargement du code source. Le dépôt Subversion est à l'adresse suivante : \newline
  53 | \indent \urlcolor{http://www.cerfacs.fr/domasiumsvn/trunk} \newline
  54 | Le code n'est pas en accès libre, il est nécessaire de prendre contact avec la personne en charge du code. Actuellement, il s'agit de Jorge Amaya que l'on peut joindre par courriel à l'adresse \urlcolor{jorge.amaya@cerfacs.fr}.
  55 | 
  56 | \subsection*{Utilisation de Subversion}
  57 | La première fois que l'on veut récupérer une copie du code source, il faut effectuer l'opération SVN appelée \cmd{checkout}. On se place dans le répertoire dans lequel on veut effectuer le téléchargement et on lance la commande suivante : \newline
  58 | \indent \cmd{svn co \url{http://www.cerfacs.fr/domasiumsvn/trunk .}} \newline
  59 | 
  60 | \noindent Ensuite pour mettre à jour notre copie, on effectue l'opération SVN appelée \cmd{update} depuis le répertoire où se situe notre copie: \newline
  61 | \indent \cmd{svn update}
  62 | 
  63 | \section{Organisation du code}
  64 | Le code source est organisée en cinq répertoires : HOSTS, SEQCODE, SOURCES, TOOLS, WORK.
  65 | 
  66 | \subsubsection{HOSTS}
  67 | Chaque sous-répertoire du répertoire HOSTS définit la configuration système d'une machine, notamment les compilateurs Fortran utilisés pour compiler le code séquentiel ou le code parallèle. On appellera par la suite ce sous-répertoire un « host ».
  68 | 
  69 | \subsubsection{SEQCODE et SOURCES}
  70 | Ces répertoires contiennent respectivement la version séquentielle et la version parallèle du code \code.
  71 | 
  72 | \subsubsection{TOOLS}
  73 | Ce répertoire contient les routines de pré et post-traitement. Leur utilisation sera détaillée au chapitre \ref{chap_calcul}.
  74 | 
  75 | \subsubsection{WORK}
  76 | Ce répertoire contient les données spectrales des mélanges considérés et les données des modèles de quadrature.
  77 | 
  78 | 
  79 | \section{Installation}
  80 |     \subsection{Variables d'environnement}
  81 | Trois variables d'environnement doivent être définis pour le bon fonctionnement du code :
  82 | \begin{description}
  83 | 	\item[DOMHOME] donne le chemin vers le répertoire \code,
  84 | 	\item[DOM\_VERSION] définit la version de \code : actuellement 3.X,
  85 | 	\item[DOM\_HOSTTYPE] définit le type de machine sur lequel on est et correspond au nom du sous-répertoire dans le répertoire HOSTS de \code.	
  86 | \end{description}
  87 | Selon le type de shell disponible sur votre machine, vous déclarerez ces variables de la manière suivante pour les shell de type « Bourne shell » :
  88 | \begin{verbatim}
  89 | export DOMHOME=chemin/vers/\code 
  90 | export DOM_VERSION=numéro_de_version 
  91 | export DOM_HOSTTYPE=nom_du_type de_host
  92 | \end{verbatim}
  93 | et de la manière suivante pour les shell de type « C shell »  :
  94 | \begin{verbatim}
  95 | setenv DOMHOME chemin/vers/\code 
  96 | setenv DOM_VERSION numéro_de_version 
  97 | setenv DOM_HOSTTYPE nom_du_type de_host
  98 | \end{verbatim}
  99 | dans le fichier de configuration correspondant, par exemple \texttt{.bashrc} pour le shell Bash ou \texttt{.cshrc} pour le C shell. \newline
 100 | 
 101 | Pour une configuration de type « C shell » , il est possible d'utiliser le fichier \$DOM\_HOME/HOSTS/dom.cshrc pour definir le type de la machine utilisé à partir des types prédéfinis. Il suffit d'ajouter dans le fichier \texttt{.cshrc}, après la définition de la variable \textbf{DOM\_HOSTTYPE}~:
 102 | \begin{verbatim}
 103 | source $DOM_HOME/HOSTS/dom.cshrc
 104 | \end{verbatim}
 105 | Si la machine ne correspond pas à un type prédéfinit il faut ajouter un nouveau type dans le répertoire HOSTS.
 106 | 
 107 |     \subsection{Définition de son host}\label{subsec_def_host}
 108 | Un host contient deux fichiers : \texttt{dom.inc} et \texttt{makefile.h}. 
 109 | 
 110 | Le fichier \texttt{dom.inc} contient essentiellement les valeurs utilisées pour les substitutions effectuées dans le code source par le processeur de macro m4. On peut ainsi modifier la précision des entiers et des réels dans le code. Il est toutefois recommandé de faire ce genre de modifications en toute connaissance de cause.
 111 | 
 112 | Le fichier \texttt{makefile.h} permet de définir les compilateurs Fortran utilisés pour le code parallèle (variable FF) et le code séquentiel (variable FFS) ainsi que les options de compilation. \newline
 113 | 
 114 | Pour chaque nouvelle machine ou type de machine, il est conseillé de se créer un host. Pour cela, on duplique un autre host et on le nomme du nom de la machine et on adapte le contenu à sa configuration système. Comme nous l'avons vu précédemment, le nom de ce répertoire est utilisé pour définir la variable d'environnement \textbf{DOM\_HOSTTYPE}. \newline
 115 | 
 116 | \textbf{Remarque}~: Lors de la définition d'un nouveau type il est nécessaire d'ajouter également ce type dans le fichier~:
 117 | \begin{verbatim}
 118 | $DOM_HOME/TOOLS/EXTERNAL/ensightgold_writecbin.c
 119 | \end{verbatim}
 120 | 
 121 | Les fichiers de visualisation sont écrits en binaire dont le format dépend de la machine utilisée\footnote{\url{http://fr.wikipedia.org/wiki/Endianness}}. Il faut donc ajouter une définition correspondant au \og nouveautype \fg définit dans la section \texttt{/* Swtich to BigEndian if necessary */}~:
 122 | \begin{verbatim}
 123 | #elif defined (nouveautype)
 124 | #  define FWRITE fwrite_byteswap
 125 | #  define BYTESWAPIO TRUE
 126 | ou 
 127 | #elif if defined (nouveautype)
 128 | #  define FWRITE fwrite
 129 | #  define BYTESWAPIO FALSE
 130 | \end{verbatim}
 131 | selon si la machine est de type \og Big Endian \fg ou \og Little Endian \fg. \\
 132 | \textbf{Attention}~: Le nom \og nouveautype \fg utilisé ne doit pas contenir de tiret '-'.
 133 | 
 134 | \section{Compilation}
 135 | La compilation des divers programmes s'appuient comme nous allons le voir sur la commande \cmd{make}.
 136 | 
 137 |     \subsection{Compilation des outils}
 138 | Chaque outil peut être compilé séparément, il suffit de se placer dans son répertoire et d'exécuter la commande : \newline
 139 | \indent \cmd{make clean; make} \newline
 140 | 
 141 | À la racine du répertoire TOOLS, on trouve deux scripts shell : \texttt{clean\_all} et \texttt{compile\_all} qui permettent respectivement de supprimer les compilations précédentes et de compiler tous les outils. On peut ainsi proprement compiler les outils en exécutant la commande : \newline
 142 | \indent \cmd{clean\_all; compile\_all} \newline
 143 | 
 144 |     \subsection{Compilation du code séquentiel}
 145 | Ce code est peu optimisé, des tests ont montré que le code parallèle tournant avec un seul processus est environ deux fois plus rapide. Nous vous conseillons donc d'utiliser plutôt la version parallèle même sur une machine ne comprenant qu'un simple processeur.
 146 | Toutefois si vous souhaitez utiliser cette version, la compilation s'effectue en se plaçant dans le répertoire SEQCODE et en lançant la commande : \newline
 147 | \cmd{make clean; make}
 148 | 
 149 |     \subsection{Compilation du code parallèle}
 150 | De la même manière que pour le code séquentiel, il suffit de se placer dans le répertoire SOURCES et de lancer la commande : \newline
 151 | \cmd{make clean; make}
 152 | 
 153 | Si votre système est bien configuré, les compilations devraient se passer problème et nous allons pouvoir passer au chapitre suivant où nous allons voir comment effectuer un calcul avec \code.