EISE5 - Calcul haute performance

Séance 1 - Le 13 septembre 2022

Cours (2h) - Introduction aux architectures programmables modernes - Adrien Cassagne

Support de cours

TD (2h) - Installation et prise en main de l'environnement EasyPAP

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.

Installation sous Ubuntu

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é !

Prendre en main l'environnement EasyPAP

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 !

Énoncé


Séance 2 - Le 20 septembre 2022

Cours (2h) - Architecture et optimisations mono-coeur CPU - Adrien Cassagne

Support de cours

TP (2h) - Optimisations mono-coeur CPU sur le noyau de calcul "blur"

Énoncé


Séance 3 - Le 27 septembre 2022

Cours (2h) - Introduction à la programmation SIMD sur CPU - Adrien Cassagne

Support de cours

TP (2h) - Programmation SIMD sur le noyau de calcul "spin"

Énoncé


Séance 4 - Le 4 octobre 2022

Cours (2h) - Introduction à la programmation MPI - Adrien Cassagne

Support de cours (ce cours provient du centre de calul "IDRIS", voir la page du cours ici)

TP (2h) - Programmation MPI sur le noyau de calcul "heat"

Énoncé


Séance 5 - Le 11 octobre 2022

Cours (2h) - Outils pour l’analyse du parallélisme et des noyaux de calcul - Adrien Cassagne

Support de cours

TP (2h) - Finir les 3 TPs précédents

À 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.


Séance 6 - Le 18 octobre 2022

Cours (2h) - Multi-thread et synchronisation (partie 1) - Quentin L. Meunier

Support de cours

TP (2h) - Introduction aux threads et à la synchronisation

Énoncé

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;
}

Séance 7 - Le 25 octobre 2022

Cours (2h) - Multi-Thread et Synchronisation (partie 2) - Quentin L. Meunier

Support de cours

TP (2h) - OpenMP

Énoncé


Séance 8,9,10 - Projet - Détection du mouvement

Sujet du projet

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:

  • Le code devra contenir un Makefile, un code qui ne compile pas correctement ne sera pas évalué.
  • Les présentations auront lieu le mardi 29 novembre. Chaque groupe aura 15 minutes pour présenter son travail à l'aide de slides. Vous présenterez les optimisations implémentées ainsi que les gains obtenus. S'en suivra 5 à 10 minutes de questions. Tous les groupes devront assister aux présentations des autres groupes.
  • Vous rédigerez un rapport d'une dizaine de pages. Il contiendra des explications imagées des optimisations que vous avez implémenté ainsi que des courbes de performance montrant les gains obtenus (les monômes sont dispensés de rapport).
  • Rendre une archive la veille de la présentation contenant : 1) le code source, 2) la présentation et 3) le rapport (sauf les monômes) par e-mail (adrien.cassagne@lip6.fr). Vous suivrez le formalisme suivant pour le sujet de l'e-mail "[EISE5-HPC-Projet] NOM1 Prénom1 et NOM2 Prénom2". Tout travail non reçu la veille de la présentation s'expose à une pénalité de 5 points.