Compte Rendu de Calcul Parallèle

Documents pareils
Programmation C. Apprendre à développer des programmes simples dans le langage C

Chap III : Les tableaux

Initiation au HPC - Généralités

Algorithmique I. Algorithmique I p.1/??

Rappels sur les suites - Algorithme

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

3 Approximation de solutions d équations

IRL : Simulation distribuée pour les systèmes embarqués

Machines virtuelles Cours 1 : Introduction

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Résolution de systèmes linéaires par des méthodes directes

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

Bases de programmation. Cours 5. Structurer les données

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours 1 : Qu est-ce que la programmation?

Quelques éléments de compilation en C et makefiles

Rapport 2014 et demande pour Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121

Algorithme des fourmis appliqué à la détection et au suivi de contours dans une image

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours 1 : La compilation

Définitions. Numéro à préciser. (Durée : )

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Figure 3.1- Lancement du Gambit

Introduction à la Programmation Parallèle: MPI

Cours Informatique Master STEP

Algorithmes pour la planification de mouvements en robotique non-holonome

1. Structure d'un programme FORTRAN 95

INFO-F-404 : Techniques avancées de systèmes d exploitation

Optimisation de logiciels de modélisation sur centre de calcul

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.


Programmer en JAVA. par Tama

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Limitations of the Playstation 3 for High Performance Cluster Computing

Résolution d équations non linéaires

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Sujet 1 : Diagnostique du Syndrome de l apnée du sommeil par des techniques d analyse discriminante.

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

de calibration Master 2: Calibration de modèles: présentation et simulation d

Formations spécifiques

Evaluation des performances de programmes parallèles haut niveau à base de squelettes algorithmiques

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Chp. 4. Minimisation d une fonction d une variable

Introduction au langage C

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Quatrième partie IV. Test. Test 15 février / 71

La gestion des contraintes pour modéliser les stratégies humaines d'ordonnancement et concevoir des interfaces homme-machine ergonomiques

Programmes des classes préparatoires aux Grandes Ecoles

Correction TD algorithmique

Limites finies en un point

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

I. Polynômes de Tchebychev

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Organigramme / Algorigramme Dossier élève 1 SI

Introduction à l algorithmique et à la programmation (Info 2)

Cours d algorithmique pour la classe de 2nde

Théorème du point fixe - Théorème de l inversion locale

Votre Réseau est-il prêt?

Introduction à MATLAB R

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Processus d Informatisation

Algorithmique et Programmation, IMA

Rapport d activité. Mathieu Souchaud Juin 2007

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

S LICENCE INFORMATIQUE Non Alt Alt SS1 S2 S3 S4 S5 S6 Parcours : IL (Ingénierie Logicielle) SRI (Systèmes et Réseaux Informatiques)

Analyse de sécurité de logiciels système par typage statique

Parallélisme et Répartition

Génération de code binaire pour application multimedia : une approche au vol

Qualité du logiciel: Méthodes de test

Java Licence Professionnelle CISII,

Cours d initiation à la programmation en C++ Johann Cuenin

Algorithme. Table des matières

I. Introduction aux fonctions : les fonctions standards

Initiation à l algorithmique

EXERCICE 4 (7 points ) (Commun à tous les candidats)

Asynchronisme : Cadres continu et discret

Dérivation : Résumé de cours et méthodes

Gestion de Projet Agile

Initiation. àl algorithmique et à la programmation. en C

Équations non linéaires

Evaluation des performances de programmes parallèles haut niveau à base de squelettes

Gé nié Logiciél Livré Blanc

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Continuité et dérivabilité d une fonction

OPTION SCIENCES BELLE-ISLE-EN-TERRE

La fonction d audit interne garantit la correcte application des procédures en vigueur et la fiabilité des informations remontées par les filiales.

Texte Agrégation limitée par diffusion interne

Améliorez et industrialisez vos feedback produit

TP : Gestion d une image au format PGM

Systèmes de transmission

Examen Médian - 1 heure 30

Initiation à la programmation en Python

Transcription:

Compte Rendu de Calcul Parallèle Erik Pernod & Rebecca Bonnet Le but de ce TP est d étudier une résolution d équation aux dérivées partielles (EDP) afin de montrer d une part l efficacité et l utilité du calcul parallèle et, d autre part, de comparer l utilisation d OpenMP et de MPI. I Etude du problème Où L EDP que nous devons résoudre est la suivante : et k=k(x,y) et f=f(x,y). Ω Ω Le domaine de calcul est le carré unité. On décide d utiliser la méthode des différences finies afin d étudier ce problème. On exprime par différences finies ce qui nous donne l équation :, 2,,, 2,, ²,,, On décide d utiliser la méthode de Jacobi car la méthode de Gauss est peu parallélisable. En effet, les algorithmes de montée et de descente nécessitent l utilisation des termes en i et i+1 (ou i-1) ce qui rend difficile la séparation des calculs. On sépare donc A en 3 matrices : A = D + L + U Où D est une matrice diagonale, L, une matrice triangulaire inférieure et U, une matrice triangulaire supérieure. On obtient le système linéaire à une inconnue :

II Résultats Nous allons donc lancer cet algorithme avec et sans méthode de parallélisation. Dans le cas où on parallélise le problème, nous allons tout d abord utiliser Open MP puis MPI. II.1 Open MP vs Séquentiel Le principe d OpenMP est de répartir le calcul des opérations sur plusieurs processeurs. Le programme est codé «normalement», on ne fait appel à la parallélisation que pour des opérations ponctuelles (addition, multiplication etc.). Généralement, on parallélise des boucles. Le schéma suivant illustre bien la méthode : On remarquera deux choses : Premièrement, à la fin de chaque région parallèle, il est nécessaire d attendre la fin des calculs répartis sur les différents processeurs pour continuer le programme (fin de la boucle). Deuxièmement, la librairie OMP ainsi que ses commandes sont des commentaires donc le programme est entièrement exécutable, tel qu il est, en séquentiel. N=M 1 1 25 4 Sans parallèle,46,3,15 1,5 1,483,15 26,32 25,874,3 Parallèle 1 Proc,1,1 21,2 21,2 6,92 6,92 Parallèle 2 Procs,7,9,6 1,9 21,9 61,84 Compteur Speed Up : 1=>2 procs 1,42 83 1,83 3727 1,94 1183 15211

En observant le speed-up, on peut conclure que la parallélisation est efficace. En effet, l accélération est «normale» : le speed up tend vers le nombre de processeurs (2) tout en restant inférieur. Les données récupérées pour N=4 sont sûrement erronées ce qui est probablement dû à une surcharge de calcul de Bigmath (pour les calculs en parallèle) ou à un problème de codage (ce qui expliquerait le fait que le programme de compile pas en séquentiel). On calcul le speedup à l aide de : t(1)= temps pour un processeur t(p)= temps pour 2 processeurs On constate bien que le speedup converge vers 2. On peut donc en conclure que le programme est bien parallélisable. II.2 MPI vs Séquentiel Contrairement à OpenMP, la parallélisation en MPI nécessite une syntaxe totalement différente du programme codé en séquentiel. Cette méthode de travail nécessite une réflexion préalable avant de commencer à programmer. Par exemple, dans notre cas, nous avons décidé de programmer le problème pour l effectuer sur deux processeurs. De ce fait, notre vecteur de taille n devra être décomposé en deux vecteurs. Du coup, au niveau de la programmation, on initialisera un vecteur de taille n/2. Il faut bien comprendre que l on écrit qu un seul code qui sera compilé simultanément sur deux processeurs, chaque processeur traitant la moitié des données. Remarque : Dans certains cas, les données envoyées sur chacun des processeurs ne doivent pas être traitées exactement de la même manière. On a donc recours à des boucles if afin de préciser à chacun des processeurs ce qu il doit faire. Dans notre problème, le calcul de la température dans chaque maille nécessite la connaissance des valeurs des mailles voisines. Il faut donc, au moment où on sépare le vecteur en deux, récupérer les données situées de part et d autre de la césure et de les intégrer dans des lignes de buffer de chacun des deux vecteurs créés. Décomposition du maillage : L L 1 M 1 L L 1 M M on décompose la matrice en 2 vecteurs. M O N M 1 1 1 x 1 1 M N O M 1 M 1 L L 1 M M la composante x sert de buffer. L L 1 x Il y a en réalité n composantes x, pour stocker une ligne entière de la matrice en mémoire.

Résultats : N=M 15 1 25 4 Sans parallèle Parallèle 2 Procs PC,46,3,15 1,5 1,483,15 26,32 25,874,3 1,58,4,7 4,417,7,86 26,9 19,29,45 57,19,35,3 Parallèle 2 Procs Bigmath,3,2,2,9 1,2,2 15,767 19,29,5 4,12 79,2,14 Compteur 83 372 11825 15311 Speed Up,15 1,6 1,75 Quand on n est pas connecté à Bigmath, on ne fait que simuler des doubles processeurs, qui n existent pas physiquement, ce qui a pour conséquence un nombre de bugs assez important. Lorsque l on utilise Bigmath, ce problème est résolu. Les bugs rencontrés sont : - Une impossibilité d exécuter le programme pour une valeur N=M supérieur à 35 alors que le programme OpenMP et mpi tourne sur Bigmath. On constate à nouveau que le speedup converge vers 2 mais moins vite que pour l OpenMP.

II.3 OpenMP vs MPI N=M OMP 2Procs Speed Up OMP MPI 2Procs Speed Up MPI 15 1 25 4,7,9,6 1,9 21,9 1,42,3,2,2 1,83,9 1,2,2 1,94 15,767 19,29,5 61,84 4,12 79,2,14,15 1,6 1,75 On peut donc constater que la parallélisation est tout d abord meilleur par le langage OpenMP puis par la suite, lorsqu on dépasse une taille de N=M=3 le langage MPI devient meilleur. Mais ceci uniquement sur Bigmath. On peut supposer que la simulation de doubles processeurs n est pas aussi efficace que de vrais processeurs en parallèle. Ce qui paraît logique. On constate néanmoins que les valeurs de speedup de OpenMP sont meilleurs que celles du MPI. Comme nous l avons expliqué le langage OpenMP peut être compilé comme du séquentiel, alors que le MPI ne peut pas. Cela peut expliquer les différences de speedup lorsqu on passe d un à deux processeurs. Il n a pas été possible de pousser le programme au delà de 4 itérations, ou alors uniquement en mpi sur Bigmath. Ce qui rendait impossible les comparaisons.

Voici quelques petites remarques sur l optimisation du codage du programme pour une application en parallèle : Il est préférable de travailler sur des vecteurs plutôt que sur des matrices. En effet, même si le remplissage des vecteurs représente plus d opération que le remplissage d une matrice, le programme sera plus rapide. L explication est la suivante : Lors d un remplissage d un vecteur, à partir de la première composante, le processeur alloue automatiquement de la mémoire cache pour les n composantes suivantes. Alors que lors d un remplissage d une matrice, seules les composantes de la première ligne se voient alloue une place dans la mémoire cache. Le passage à la ligne suivante réinitialise l opération. L utilisation de double boucle (sur i puis sur j par exemple), ou de rang supérieur peut être optimisée. Exemple : Dans le premier cas, pour une valeur de i, on calcul «i* n» m fois (à chaque itération de j) alors que dans le deuxième cas, le calcul «i*n» est effectué qu une seule fois. Il s agit donc d un gain de m*n opérations. Ce qui peut devenir non négligeable pour de gros programmes. Boucle non optimisée For(i= ; i<n ; i++) For(j= ; j<m ; j++) U[ j+ i*n] = 1 ; Boucle optimisée Int in= ; For(i= ; i<n ; i++) in=i*n; For(j= ; j<m ; j++) U[ j+ in] = 1 ; III Conclusion A travers ce petit exemple, nous avons pu voir les possibilités et l importance des langages de programmation en parallèle. En effet, même pour des calculs simples, s ils deviennent vraiment nombreux, la différence de temps de calcul peut vite devenir un paramètre à ne pas négliger. Nous avons donc constaté que le langage OpenMP est préférable pour des petits programmes comportant que des boucles à paralléliser. Alors que le MPI qui demande une certaine réflexion préalable, est préférable pour des grosses applications.