ROMEO HPC Center

Compilateur Intel C/C++, Fortran et OpenMP

Résumé: Ce document sert juste de rapide introduction à l'utilisation du compilateur Intel C/C++ avec OpenMP installé sur le cluster Romeo2. Nous ne détaillerons pas comment programmer avec OpenMP, ce n'est pas le but recherché.

1 Connexion à Romeo2

Pour se connecter à Romeo2, vous pouvez utiliser la commande ssh :

ssh nom@romeo2.univ?reims.fr

ou

ssh ?X nom@romeo2.univ?reims.fr

si vous souhaitez exporter le Display. Vous trouverez plus d'informations sur la commance ssh en tapant dans votre terminal man ssh.

2 Le compilateur Intel C/C++ - Fortran

Le compilateur Intel C/C++ est le seul compilateur ?actuellement? sur Romeo2 capable d'utiliser la librairie OpenMP. Cependant, l'appel au compilateur icc (langage C) ou icpc (langage C++) ne vous renverra qu'un message d'erreur (command not found). Pour pouvoir utiliser ces compilateurs vous devez tout d'abord en définir la source. Pour cela tapez :

source /opt/intel/iccvars.sh

pour charger l'environnement Fortran

source /opt/intel/ifortvars.sh

 


Cette commande est à taper à chaque nouvelle session sur Romeo2. Afin de nous faciliter la tâche, nous allons rajouter cette ligne dans notre fichier .bashrc se trouvant à la racine de notre compte (voir listing 1).

Listing 1: Le fichier .bashrc

 

# .bashrc
# User specific aliases and functions
# Acces au compilateur C/C++ d'Intel (uniquement sur Romeo1)
if [ "$HOSTNAME" == romeo1 ]; then
source /opt/intel/iccvars.sh
fi
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

Désormais, à chaque nouvelle session, nous aurons accès au compilateur icc et icpc directement.

3 Intel C/C++ et OpenMP

Pour compiler votre projet OpenMP avec les compilateurs Intel, il suffit de rajouter l'argument -openmp à la ligne de commande. Par exemple :

icc ?openmp source.c ?o executable
ou
icpc ?openmp source.c ?o executable

4 Soumettre un job

Afin de soumettre un job à Romeo2, il faut passer par un gestionnaire. On l'appelle par la commande qsub. Cette commande prend une série de paramètres assez conséquent et où il est facile de se tromper. C'est pourquoi nous allons créer un script (listing 2) contenant les informations à passer à qsub.

Listing 2: Le fichier Script

 

#!/bin/sh
### On nomme le job afin de l'identifier facilement
#PBS -N NOM_NB_DE_PROC_UTIL
### Le job peut-il être relancé ? (ici non)
#PBS -r n
### Fichier de sortie d'erreur
#PBS -e erreur.err
### Fichier de sortie standard
#PBS -o sortie.log
### Configuration de la messagerie
### Le serveur enverra un message si le job :
### (a) est tué / (b) commence / (e) est terminé
#PBS -m abe
### Le serveur enverra le mail à l'adresse :
#PBS -M Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
### Placement du job dans la file correspondante à sa durée
### small / long / infinite
#PBS -q long
### Réservation des ressources
### Attention : si votre programme fonctionne en mémoire partagée
### (OpenMP) vous ne devez demander qu'un seul noeud.
#PBS -l nodes=1:ppn=32
### Pour les utilisateurs de OpenMP, il faut indiquer le nombre de threads
export OMP_NUM_THREADS=32
### Définition du répertoire
PBS_O_WORKDIR=/home_nfs/nom/chemin/repertoire_de_l_application/
cd $PBS_O_WORKDIR
./l_applicaton parametres_de_l_application

Le script créé (et adapté à vos besoins) est soumis au gestionnaire par la commande :

qsub Script

5 Pour finir

Vous savez maintenant compiler vos programmes C/C++ utilisant OpenMP sur Romeo2, et les soumettre au système. Pour plus d'informations, je vous invite à lire le User's Guide (User.pdf) disponible sur le site http://cosy.univ-reims.fr/romeo2/.