Stage au laboratoire Informatique Distribuée
description
Transcript of Stage au laboratoire Informatique Distribuée
![Page 1: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/1.jpg)
Stage au laboratoire Informatique Distribuée
Charles Bouillaguet
Grenoble, été 2005Grenoble, été 2005
Parallelisation adaptativede programmes itératifs
![Page 2: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/2.jpg)
Le laboratoire ID-IMAG
• Commun CNRS-INRIA
• Fait partie de l’Institut de Math. Appliquées de Grenoble
• Deux équipes de recherche : MESCAL et MOAIS
• MOAIS = Multi-programmation et Ordonnancement sur ressources distribuées pour les Applications Interactives de Simulation
• Equipe jeune, beaucoup de stagiaires et de thésards
![Page 3: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/3.jpg)
Le laboratoire ID-IMAG
![Page 4: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/4.jpg)
Le laboratoire ID-IMAGcharles
![Page 5: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/5.jpg)
De l’autre côté de la rue
![Page 6: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/6.jpg)
De l’autre côté de la rue
![Page 7: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/7.jpg)
Le cadre
![Page 8: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/8.jpg)
Jean-Louis Roch :mon directeur de stage
QuickTime™ et undécompresseur TIFF (non compressé)
sont requis pour visionner cette image.
• Chef de MOAIS• L’homme le plus
speed du monde
![Page 9: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/9.jpg)
Deux ou trois notions d’algorithmique parallèle
![Page 10: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/10.jpg)
Deux ou trois notions d’algorithmique parallèle
• Qu’est-ce qu’un programme parallèle ?
![Page 11: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/11.jpg)
Deux ou trois notions d’algorithmique parallèle
• Qu’est-ce qu’un programme parallèle ?
• Qu’est-ce qu’une architecture parallèle ?
![Page 12: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/12.jpg)
Deux ou trois notions d’algorithmique parallèle
• Qu’est-ce qu’un programme parallèle ?
• Qu’est-ce qu’une architecture parallèle ?
• Comment ça se programme ?
![Page 13: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/13.jpg)
Deux ou trois notions d’algorithmique parallèle
• Qu’est-ce qu’un programme parallèle ?
• Qu’est-ce qu’une architecture parallèle ?
• Comment ça se programme ?
• Comment organiser les calculs ?
![Page 14: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/14.jpg)
Qu’est-ce qu’un programme parallèle ?
![Page 15: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/15.jpg)
C’est un programme qui crée plusieurs tâches(qui s’exécutent simultanément)
Qu’est-ce qu’un programme parallèle ?
![Page 16: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/16.jpg)
C’est un programme qui crée plusieurs tâches(qui s’exécutent simultanément)
On peut le voir comme un graphe orienté acyclique
Qu’est-ce qu’un programme parallèle ?
![Page 17: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/17.jpg)
• Chaque noeud représente une opération
• Une opération ne peut s’exécuter que lorsque tous ses parents ont terminé
Exemple : calcul de 10!
Qu’est-ce qu’un programme parallèle ?
![Page 18: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/18.jpg)
• nombre de noeuds du graphe = nombre total d’opérations (noté T1)
• plus long chemin dans le graphe = temps critique (noté T∞)
Qu’est-ce qu’un programme parallèle ?
![Page 19: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/19.jpg)
• nombre de noeuds du graphe = nombre total d’opérations (noté T1)
• plus long chemin dans le graphe = temps critique (noté T∞)
Chemin critique
Qu’est-ce qu’un programme parallèle ?
![Page 20: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/20.jpg)
• nombre de noeuds du graphe = nombre total d’opérations (noté T1)
• plus long chemin dans le graphe = temps critique (noté T∞)
Temps d’exécution sur p processeurs (Tp) ?
Qu’est-ce qu’un programme parallèle ?
![Page 21: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/21.jpg)
Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))
Théorie de la factorielle parallèle
Qu’est-ce qu’un programme parallèle ?
![Page 22: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/22.jpg)
Qu’est-ce qu’un programme parallèle ?Théorie de la factorielle parallèle
Fork
*
A.B.C. à n-1 noeuds
A.B.C. à n/2-1 noeuds
Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))
![Page 23: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/23.jpg)
Théorie de la factorielle parallèle
Fork
*
T1 = O(n)T∞ = O(log n)
Qu’est-ce qu’un programme parallèle ?
Let rec produit from to = match (to - from) with | 0 -> from | 1 -> from * to | n -> let i = (to-n/2) in (Fork (produit from i)) * (Fork (produit (i+1) to))
![Page 24: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/24.jpg)
Qu’est-ce qu’un programme parallèle ?
MAIS…
![Page 25: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/25.jpg)
Qu’est-ce qu’un programme parallèle ?
MAIS…En fait, T1 = (n/2) TFork + n T*
et TFork >> T*
![Page 26: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/26.jpg)
Exemple avec 2 processeurs :
9 étapes de calcul sur 2 processeurs
10 étapes sur un seul processeur
(et encore…)
Qu’est-ce qu’un programme parallèle ?
![Page 27: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/27.jpg)
Qu’est-ce qu’une architecture parallèle ?
![Page 28: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/28.jpg)
Qu’est-ce qu’une architecture parallèle ?
Deux types de base
• Les machines à mémoire partagée
• Les machines à mémoire distribuée
Et un mélange des deux
• Les clusters de machines SMP
![Page 29: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/29.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire partagée
![Page 30: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/30.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire partagée
![Page 31: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/31.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire partagée
Que des avantages :
• Possibilité d’avoir des variables globales
• Communication entre les tâches très simple et très rapide
•Synchronisation des tâches peu coûteuse
![Page 32: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/32.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire partagée
Que des avantages :
• Possibilité d’avoir des variables globales
• Communication entre les tâches très simple et très rapide
•Synchronisation des tâches peu coûteuse
Un inconvénient :
•Le prix (et la complexité) de la machine est exponentiel en le nombre de processeurs
![Page 33: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/33.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire distribuée
![Page 34: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/34.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire distribuée
![Page 35: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/35.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire distribuée
Que des inconvénients :
• Communication inter-processus lente et problématique (machines non-homogènes)
• Pas de variables globales…(dommage, c’était bien pratique)
![Page 36: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/36.jpg)
Qu’est-ce qu’une architecture parallèle ?
Architecture à mémoire distribuée
Que des inconvénients :
• Communication inter-processus lente et problématique (machines non-homogènes)
• Pas de variables globales…(dommage, c’était bien pratique)
Mais bon…
Coût linéaire, possibilité d’avoir une grosse puissance de calcul : 100, 400, 1000 machines
![Page 37: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/37.jpg)
Qu’est-ce qu’une architecture parallèle ?
En pratique…On a souvent des clusters de machines SMP (seuil critique à 2)
Problème : •Certaines tâches communiquent entre elles par le réseau, d’autres par une mémoire centrale •La création d’une tâche “locale” et d’une tâche distante ne mettent pas en jeu les mêmes mécanismes
![Page 38: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/38.jpg)
Qu’est-ce qu’une architecture parallèle ?
En pratique…On a souvent des clusters de machines SMP (seuil critique à 2)
Problème :
C’est le cauchemar du programmeur
![Page 39: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/39.jpg)
Comment ça se programme ?
![Page 40: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/40.jpg)
Comment ça se programme ?
Pour garantir un minimum de portabilité, on aimerait que le programme soit indépendant…
•Du nombre de processeurs
•Du type d’architecture
![Page 41: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/41.jpg)
Comment ça se programme ?
Pour garantir un minimum de portabilité, on aimerait que le programme soit indépendant…
•Du nombre de processeurs
•Du type d’architecture
Langages parallèlesLibrairies parallèles pour langages séquentiels
![Page 42: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/42.jpg)
Comment ça se programme ?
KAAPIKernel for Adaptative, Asynchronous Parallel and Interactive programming
•Librairie C++ developpée à ID•Gère la création de tâches de manière transparente•Gère la communication entre les tâches et la synchronisation
•Majoration de Tp
•Tolérance aux panne •Ajout/suppression de ressources en ligne
![Page 43: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/43.jpg)
Comment ça se programme ?
KAAPIKernel for Adaptative, Asynchronous Parallel and Interactive programming
•Librairie C++ developpée à ID•Gère la création de tâches de manière transparente•Gère la communication entre les tâches et la synchronisation
•Majoration de Tp
•Tolérance aux panne •Ajout/suppression de ressources en ligne•Un peu lourdingue à utiliser•API de haut niveau déficiente
![Page 44: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/44.jpg)
Comment ça se programme ?
KAAPI
Le programme : graphe de flot de données (“dataflow”)
•Graphe bi-partite•Noeuds ronds : données•Noeuds carrés : fonctions•Flèches : dépendances
![Page 45: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/45.jpg)
Comment ça se programme ?
KAAPI
KAAPI calcule le graphe lors de l’exécution. Cela permet :
•De gérer la synchronisation entre les tâches
•De déplacer les données sur la bonne machine pour exécuter une cloture donnée
![Page 46: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/46.jpg)
Comment ça se programme ?
KAAPI
![Page 47: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/47.jpg)
Comment ça se programme ?
KAAPI
![Page 48: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/48.jpg)
Comment organiser les calculs ?
![Page 49: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/49.jpg)
Comment organiser les calculs ?
Le scheduling
![Page 50: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/50.jpg)
Comment organiser les calculs ?
Le scheduling
2 processeursT2 = 9
(triche : Fork est plus long que *)
Tp dépend de l’ordonnancement des calculs.
Optimal ?
![Page 51: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/51.jpg)
Comment organiser les calculs ?
Le scheduling
2 processeursT2 = 9
(triche : Fork est plus long que *)
Tp dépend de l’ordonnancement des calculs.
Dommage :Optimal-scheduling est NP-Complet
Optimal ?
![Page 52: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/52.jpg)
Comment organiser les calculs ?
Le scheduling
Et encore !
•Le graphe du programme n’est connu qu’à l’exécution (on-line scheduling)
•Les machines n’ont pas toutes la même vitesse
•La vitesse des machines peut varier (!)
•Il est exclu que les machines passent leur temps à se renseigner les unes sur les autres
•Il est exclu que les machines passent longtemps à déterminer quelle est leur prochaine tâche
![Page 53: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/53.jpg)
Comment organiser les calculs ?
Le scheduling
Vol de travail distribué, randomizé
•Chaque processeur a une pile de clotures prêtes
•Tâche terminée ? Exécuter la cloture du dessus
•Pile vide ? Tirer un autre processeur au hasard et voler la cloture du bas (en tirer un autre si sa pile était vide)
![Page 54: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/54.jpg)
Comment organiser les calculs ?
Le scheduling
Vol de travail distribué, randomizé
•Chaque processeur a une pile de clotures prêtes
•Tâche terminée ? Exécuter la cloture du dessus
•Pile vide ? Tirer un autre processeur au hasard et voler la cloture du bas (en tirer un autre si sa pile était vide)
Magique :
![Page 55: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/55.jpg)
Comment organiser les calculs ?
La granularité des calculs
![Page 56: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/56.jpg)
Comment organiser les calculs ?
La granularité des calculs
Problème de la factoriellepasse son temps à créer des tâches !
•Algorithmes à grain fin : nombre de tâches dépendant de la taille du problème
![Page 57: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/57.jpg)
Comment organiser les calculs ?
La granularité des calculs
Problème de la factoriellepasse son temps à créer des tâches !
•Algorithmes à grain fin : nombre de tâches dépendant de la taille du problème
•Algorithmes à gros grain : nombre de tâche dépendant de la machine (une par CPU)
![Page 58: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/58.jpg)
Le sujet de mon stage
![Page 59: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/59.jpg)
Le sujet de mon stage
Le grain adaptatif
Ne garder que les avantages•Nombre de tâches réduit au strict minimum•Pas de limite à l’extraction de parallélisme
![Page 60: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/60.jpg)
Le sujet de mon stage
Le grain adaptatif
Ne garder que les avantages•Nombre de tâches réduit au strict minimum•Pas de limite à l’extraction de parallélisme
Idées•Les algo. séquentiels sont toujours plus efficaces•Work-first principle (dégénération séquentielle)
![Page 61: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/61.jpg)
Le sujet de mon stage
Le grain adaptatif
Hypothèses•Algorithme à grain fin de type découpe récursive•La séquence d’instruction qui conclut l’algo. sequentiel peut être remplacée par un appel à l’algo. parallèle
(pas très contraignant)
![Page 62: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/62.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1
![Page 63: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/63.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1
![Page 64: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/64.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1
CPU 2
![Page 65: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/65.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1
CPU 2
Vol de travail
![Page 66: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/66.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1 CPU 2
![Page 67: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/67.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1 CPU 2
![Page 68: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/68.jpg)
Le sujet de mon stage
Le grain adaptatif
CPU 1 CPU 2
![Page 69: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/69.jpg)
Le sujet de mon stage
Le grain adaptatif
Fusion des 2 morceaux(une étape de l’algo. parallèle)
![Page 70: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/70.jpg)
Le sujet de mon stage
Le grain adaptatif
“Adaptatif” parce que
•S’adapte à des machines de vitesses différentes
•S’adapte à la variation de vitesse des machines
•S’adapte aux données (algo. irreguliers)
•Permet facilement d’ajouter des machines en cours de calcul
Et en plus…
•Nombre de tâches réduit au minimum
![Page 71: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/71.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Le vrai but de mon stageObtenir un algo adaptatif pour des programmes de la forme :
(L’opérateur (+) est supposé associatif)
![Page 72: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/72.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
ExempleLet rec jouet n = function | a when a > 1 000 000 000 000 -> n-1 | a -> jouet (n+1) (a + abs (sin n))
Ça calcule :
![Page 73: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/73.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Problèmes :•Chaque itération de la boucle dépend de la précédente•Le test d’arret…
Solution :•Découper le problème en macro-étapes•On fait des calculs parallèle à l’intérieur d’une ME•On synchronise tout le monde entre 2 ME
![Page 74: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/74.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
![Page 75: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/75.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Compromis entre nombre et taille des ME
Petites ME :
résultat
![Page 76: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/76.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Compromis entre nombre et taille des ME
ME exponentielles :
résultat Calculs inutiles
![Page 77: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/77.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Accélération en fonction du nombre de CPU
0
1
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8
#CPU
Résultats expérimentaux avec le jouet
![Page 78: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/78.jpg)
Le sujet de mon stage
Paralléliser des programmes itératifs
Résultats expérimentaux avec le jouet
![Page 79: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/79.jpg)
Bilan
![Page 80: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/80.jpg)
Bilan
•Beaucoup de découvertes
•Un peu de maths
•Beaucoup de programmation (C++, grrrrr…)
•Beaucoup de debuggage (pénible, gdb, mode texte)
•Beaucoup de messages d’erreur
![Page 81: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/81.jpg)
Bilan
(.gnu.linkonce.t._ZN7ClosureI28compute_residues_in_parallelIN6LinBox7ModularIdEENS1_17IntegerModularDetINS1_12SparseMatrixINS1_17UnparametricFieldI7IntegerEESt4pairISt6vectorIjSaIjEESA_IS7_SaIS7_EEEEENS1_15WiedemannTraitsEEENS1_11RandomPrimeEEE4srunEPN4Core7ClosureEPNSM_6ThreadE+0x30): In function `Closure<compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::UnparametricField<Integer>, std::pair<std::vector<unsigned, std::allocator<unsigned> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime> >::srun(Core::Closure*, Core::Thread*)':: undefined reference to `compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::UnparametricField<Integer>, std::pair<std::vector<unsigned, std::allocator<unsigned> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime>::doit(Core::Thread*)'
test-det.o(.gnu.linkonce.t._ZNK4Core13WrapperFormatI24WorkDescriptorEncapsulerE5writeERNS_7OStreamEPKvj+0x21): In function `Core::WrapperFormat<WorkDescriptorEncapsuler>::write(Core::OStream&, void const*, unsigned) const':: undefined reference to `operator<<(Core::OStream&, WorkDescriptorEncapsuler const&)'test-det.o(.gnu.linkonce.t._ZNK4Core13WrapperFormatI24WorkDescriptorEncapsulerE4readERNS_7IStreamEPvj+0x21): In function `Core::WrapperFormat<WorkDescriptorEncapsuler>::read(Core::IStream&, void*, unsigned) const':: undefined reference to `operator>>(Core::IStream&, WorkDescriptorEncapsuler&)'collect2: ld returned 1 exit statusmake: *** [test-det] Erreur 1
![Page 82: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/82.jpg)
Bilan
/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h: In function `void LinBox::compute_residues_adaptive(std::vector<_Field::Element, std::allocator<_Field::Element> >*, std::vector<T, std::allocator<_CharT> >*, FunctionEncapsuler<Function>&, RandPrime&, WorkDescriptorEncapsuler&, WorkDescriptorEncapsuler&, bool) [with Domain = LinBox::Modular<double>, Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime]':/users/huron/bouillag/linbox-0.2.1/parallel-stuff/kaapi_stuff.h:81: instantiated from `void compute_residues_in_parallel<Domain, Function, RandPrime>::doit(Core::Thread*) [with Domain = LinBox::Modular<double>, Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime]'/users/huron/bouillag/linbox-0.2.1/parallel-stuff/kaapi_stuff.h:27: instantiated from `static void Closure<Runnable>::srun(Core::Closure*, Core::Thread*) [with Runnable = compute_residues_in_parallel<LinBox::Modular<double>, LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, LinBox::RandomPrime>]'/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:344: instantiated from `Integer& LinBox::ChineseRemainder<Domain>::Early_operator(Integer&, const Function&, RandPrime&) [with Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime, Domain = LinBox::Modular<double>]'/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:392: instantiated from `Integer& LinBox::ChineseRemainder<Domain>::operator()(Integer&, const Function&, RandPrime&) [with Function = LinBox::IntegerModularDet<LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, LinBox::WiedemannTraits>, RandPrime = LinBox::RandomPrime, Domain = LinBox::Modular<double>]'/users/huron/bouillag/linbox-0.2.1/linbox/solutions/det.h:351: instantiated from `Blackbox::Field::Element& LinBox::det(Blackbox::Field::Element&, const Blackbox&, const LinBox::RingCategories::IntegerTag&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, MyMethod = LinBox::WiedemannTraits]'/users/huron/bouillag/linbox-0.2.1/linbox/solutions/det.h:65: instantiated from `Blackbox::Field::Element& LinBox::det(Blackbox::Field::Element&, const Blackbox&, const MyMethod&) [with Blackbox = LinBox::SparseMatrix<LinBox::GMP_Integers, std::pair<std::vector<size_t, std::allocator<size_t> >, std::vector<Integer, std::allocator<Integer> > > >, MyMethod = LinBox::WiedemannTraits]'test-det.cc:77: instantiated from here/users/huron/bouillag/linbox-0.2.1/linbox/algorithms/cra-domain.h:154: `crp_format' undeclared (first use this function)
![Page 83: Stage au laboratoire Informatique Distribuée](https://reader036.fdocument.pub/reader036/viewer/2022062305/568151bb550346895dbfe6e6/html5/thumbnails/83.jpg)
Bilan
•Beaucoup de découvertes
•Un peu de maths
•Beaucoup de programmation (C++, grrrrr…)
•Beaucoup de debuggage (pénible, gdb, mode texte)
•Beaucoup de messages d’erreur
•Un article en cours d’écriture
•Une réalisation logicielle (application au calcul du polynôme minimal de grandes matrices entières creuses dans Linbox), censée être présentée lors d’un Workshop dans un mois, mais pas finie !