Menu
Rechercher
Accueil > Le LPNHE > Pages du personnel permanent > Beau Tristan > Divers > Vielleries > makefile pour ferme hétérogène de calcul (tel qu’au ccin2p3)
makefile pour ferme hétérogène de calcul (tel qu’au ccin2p3)
18 octobre 2005
par Tristan Beau - 7 juin 2017
Anastasie au ccin2p3 constitue une ferme de machines issues de constructeurs différents. Les compilateurs et bien sûr les binaires que chaque machine peut interpréter sont distincts. Plutôt que de recompiler, à la main, à chaque fois que l’on se trouve sur une nouvelle plateforme, il y a des méthodes efficaces pour travailler, autres que de rester attaché sans raison à un seul type de machine.
Créer les répertoires bin
et obj
Vous devez tout d’abord créer (ou vérifier que tout est OK) des répertoires où seront logés vous fichiers binaires, objet ou librairies pour chaque machine.
On effectue cette opération en créant les répertoire :
Puis on crée un lien automatique (en fonction de la machine sur laquelle on se trouve) vers le bon répertoire :
Il est pratique de créer ces répertoires non dans le $HOME
mais plutôt dans son répertoire de travail, ce qui évite d’avoir des 100aines de binaires dans un unique répertoire. Désormais, je suppose que l’on se place dans un répertoire de travail disposant de ses répertoires et liens correctement configurés.
Une remarque. Dans le cas de l’apparition d’un nouveau cluster, ce fut le cas il y a peu avec ccali61, ces répertoires ne seront pas créés automatiquement bien sûr ; vous devrez effectuer l’opération seuls. Pour connaître le nom du nouveau système et créer correctement les nouveaux répertoires, lancer
qui renverra le nom correct du système (attention, ne confondez pas avec la commande sys
seule qui ne fonctionne pas correctement dans ce cadre !).
Le makefile
générique
Je suppose également que vous placez vos sources dans votre répertoire de travail. Dans ce répertoire, je trouve pratique de ne posséder qu’une seule source possédant un main()
. Le makefile que je propose cherche alors toutes les sources, les compile et place les objets dans obj
, puis link le tout dans bin
. Si vous effectuez une compilation sous chaque cluster, vous trouverez dans bin
, quelque soit la machine, le bon exécutable.
Voici donc mon makefile
(utilisez gmake
), orienté C (pour du fortran, le compilateur au CCIN2P3 est simplement fort
pour tout le monde).
Bien sûr cette écriture de makefile
permet de placer des options spécifiques pour chaque plateforme, et ça c’est un peu le travail de chacun ! Quoi qu’il en soit, pour une source basique, ce makefile fonctionne parfaitement et définit des macros (option -D
) spécifiques à chaque machine afin, dans le code C, de pouvoir par exemple identifier quelle est la machine destination (commande au préprocesseur #define CPP_PREDEFINES
puis commandes du type #ifdef LINUX_SYSTEM...
par exemple). Dernier point de détail, dans les makefile
qui suivent - je vous invite à les essayer - les tabulations après les commandes suivies de ’ :’ ont disparu ; replacez les correctement sinon gmake
ne sera pas content.
Makefile pour ROOT
Pour le cas de ROOT, on voit une belle application de l’aspect général du makefile précédent. Voyez plutôt :
Dans la même rubrique :
- tutoriel rapide matlab 5
- thèse sur Borexino
- anti-spam et imap
- permutations et appel récursif
- format non trivial pour les nombres en c++
- Sommer des champs dans un fichier
- vim et ses folles astuces
- aide minimale emacs
- pointeur de fonction
- makefile et recherche de dépendances
- fork, ou comment créer des processus fils en C
- rediriger la sortie standard de Minuit
- les énumérations en C
- publications et communications
- code ascii d’un caractère
- rapports et communications internes
- calcul d’histogramme
- test d’argument numérique entier
- calculs sur nombres flottants en shell
- créer un pdf récapitulant les logins d’une machine
- indications sur le sujet d’examen d’UNIX-1...
- lister en C le contenu d’un répertoire
- contrôle des processus fils créés par fork()
- variables globales (extern) et commandes du préprocesseur
- Programme d’orchestre au tuba...
- Léopard : installation de l’OS et packages divers
- Mountain Lion : une configuration personnelle
- Soucis avec Yosemite ( MacOS 10.10 )
- CV - très vieille version