EasyPAP doit être installé sur votre ordinateur. Pour cela vous devez d'abord le télécharger :
git clone https://gitlab.lip6.fr/cassagnea/easypap-se.git
En fonction de votre système d'exploitation, cela peut être plus ou moins simple. Si vous êtes sous Linux (Debian-like) ou macOS, vous avez de la chance c'est relativement simple.
Si vous êtes sous Windows c'est un peu plus compliqué. Dans ce cas là, il faut installer WSL2. Vous pouvez suivre les étapes indiquées ici : https://docs.microsoft.com/fr-fr/windows/wsl/install.
Il faut éviter d'installer/utiliser une machine virtuelle type VirtualBox. Nous allons nous attacher aux performances et une machine virtuelle n'est pas adaptée.
Ces consignes sont aussi valables pour les utilisateurs de WSL avec Ubuntu et les machines virtuelles (VirtualBox) sous Ubuntu. Installation des dépendances :
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libhwloc-dev flex libfxt-dev libopenmpi-dev gawk help2man libssl-dev
À partir de là vous pouvez compiler l'environnement EasyPAP depuis sa racine en faisant :
make -j4
Pour vérifier qu'EasyPAP fonctionne correctement vous pouvez lancer la commande suivante :
./run -k spin
Si vous voyez des rayures jaunes et bleues qui tournent, alors EasyPAP est bien installé !
Le TP du jour consiste à suivre le getting started d'EasyPAP. L'objectif est d'arriver jusqu'à la section "2.9 Stencil codes" comprise. Le code vous est donné mais il faut regarder, tester, comprendre l'environnement à chaque étape. Le premier TP vous servira de mise en route et tout ce qui est décrit dans le getting started jusqu'à la section 2.9 sera considéré comme acquis pour la prochaine séance. N'hésitez pas à nous poser des questions. Bon TP !
Support de cours (ce cours provient du centre de calul "IDRIS", voir la page du cours ici)
À la fin de la séance vous rendrez vos TP envoyant un e-mail à XXX@lip6.fr.
Le sujet de l'e-mail devra suivre le formalisme suivant : "[EISE5-HPC-TP] NOM Prénom".
Vous joindrez uniquement les fichiers des noyaux de calcul correspondant aux TP ("blur.c", "spin.cpp" et "heat.cpp").
Tout retard (après 13h00 le 11/10) fera l'objet de points en moins.
Pour vous aider à bootstrapper, question 3.1 :
void * calc_par_0(void * id) {
// /!\ le code de cette fonction est exécuté par plusieurs threads
int32_t tid = *(int32_t *) id;
thread_arg_t * thread_arg = &args[tid];
int32_t * red = thread_arg->red;
int32_t * gre = thread_arg->gre;
int32_t * blu = thread_arg->blu;
uint8_t * data = thread_arg->data;
// on partage l'espace d'itération de la boucle entre les threads
for (int32_t i = thread_arg->start; i < thread_arg->start + thread_arg->len; i += 3) {
/* votre code ici */
}
return NULL;
}
Pour vous aider vous pouvez regarder la sortie attendue après l'algorithme Sigma-Delta ainsi que la sortie attendue après Sigma-Delta + Morpho .
Travail attendu, 1) code, 2) présentation et 3) rapport: