BE de programmation OpenMP



Documents pareils
Tout savoir sur le matériel informatique

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Livre blanc Mesure des performances sous Windows Embedded Standard 7

Eléments d architecture des machines parallèles et distribuées

FICHE PEDAGOGIQUE. Questions à poser. - Avant de démarrer l ordinateur,

Initiation au HPC - Généralités

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

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

TRAAM STI Acquisition et exploitations pédagogiques des données sur un système pédagogique

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

Solutions de Virtualisation du poste de travail. ViewSonic vous présente le poste de travail virtuel du futur

«Vous éditez, nous archivons!»

Catalogue des stages Ercom 2013

IDENTIFICATION CONDITIONS D ÉVALUATION : le public ciblé : Sous statut scolaire En apprentissage En formation continue. Niveau II (bac+4 et 3)

Performances de la programmation multi-thread

Algorithmique avec Algobox

Cours Langage C/C++ Programmation modulaire

Bien travailler sur plusieurs écrans

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

Analyse de la bande passante

G4L (Ghost for Linux) Clonage vers FTP Version: août 2006

Bernard HAMM, Évelyne LAVOISIER

Segmentation d'images à l'aide d'agents sociaux : applications GPU

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

Cours 3 : L'ordinateur

Séance 0 : Linux + Octave : le compromis idéal

Animation Shop PREAMBULE... 2 CONTRAINTE... 2 CREER UNE ANIMATION... 2 AJOUTER DES IMAGES... 3 ENREGISTRER UNE ANIMATION... 3

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

ORTIZ Franck Groupe 4. Terminal serveur pour administrer un serveur Windows à distance, client rdp linux.

PRÉ-REQUIS ET INSTALLATION SERVEUR

Module 0 : Présentation de Windows 2000

Comment mettre en page votre livre

FTP Expert 3 est idéal pour :

BANQUES DE DONNÉES PÉDAGOGIQUES

QUELQUES CONSEILS POUR LA MAINTENANCE DE VOTRE ORDINATEUR

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

et de suivi de la corpulence des enfants

Les tableaux croisés dynamiques

STATISTICA Version 12 : Instructions d'installation

Mon-Expert-en-Gestion est un portail collaboratif 100% Web, constitué de plusieurs modules utiles pour la gestion en ligne de votre entreprise.

Tutoriel Atout Facture. 14/01/2015 Codelpi

Qu'est-ce que c'est Windows NT?

Table des matières. Table des matières

Cyberclasse L'interface web pas à pas

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Guide d utilisation de l utilitaire Intel One Boot Flash Update

La Certification de la Sécurité des Automatismes de METEOR

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Gestionnaire de Données WORD A4 F - USB / / 6020 Alco-Connect

La Solution Crypto et les accès distants

MS PROJECT Prise en main. Date: Mars Anère MSI. 12, rue Chabanais PARIS E mail : jcrussier@anere.com Site :

Sommaire. Systèmes d Exploitation Intégration Sage 100 Sage CRM Disponibilité Client Bases de données... 3

Chap 2 : Noyaux, masse, énergie.

Rapport d activité. Mathieu Souchaud Juin 2007

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

PC Check & Tuning 2010 Optimisez et accélérez rapidement et simplement les performances de votre PC!

Prise en compte des ressources dans les composants logiciels parallèles

MEDIAplus elearning. version 6.6

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

WN/CMGC/08/98. Enjeu et problématique du portage d'arpege-nemo sur calculateurs super-scalaires. Eric Maisonnave

Table des matières Chapitre 1 Virtualisation, enjeux et concepts Chapitre 2 Ligne de produit XEN

Sommaire. Page d accueil. Comment effectuer une mise à jour? Comment insérer le logo de sa société? Comment effectuer une sauvegarde?

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

GESTION DE L'ORDINATEUR

SAUVEGARDE COBIAN. LE B.A. BA De La sauvegarde Avec «CobianBackup» ou comment faire des sauvegardes automatiques

Systèmes Dynamiques. making workspace work

Outils pour les réseaux de neurones et contenu du CD-Rom

Intervenants. Thomas d'erceville Project Manager. Christian NGUYEN Practice Manager IT Quality

LOGICIEL ALARM MONITORING

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Rapidolect Les Productions de la Columelle ( ) Page 1

Certificat Informatique et internet Niveau 1 TD D1. Domaine 1 : Travailler dans un environnement numérique évolutif. 1. Généralités : Filière

Métriques de performance pour les algorithmes et programmes parallèles

DOCUMENTATION VISUALISATION UNIT

Chapitre 4 : Édition de fichiers texte - Vi

Artlcle 1:...Règ,lement g,énéral

L ' E N V I R O N N E M E N T À T R A V E R S L A S I M U L A T I O N N U M É R I Q U E : D E L ' I N G É N I E R I E D U B Â T I M E N T

Sommaire Présentation... 5 Sommaire Gérer le publipostage... 8 Gérer les modèles Gérer les groupes de contacts Mémoire d émission...

Projet Personnalisé Encadré PPE 2

Comment bien démarrer avec. NetAirClub GUIDE ADMINISTRATEUR V1.5. Table des matières

Guide de déploiement

Exécution des instructions machine

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Solution parfaite pour une expérience bureautique transparente. Récapitulatif. Processeur Teradici avancé, haute performance

Utilisation de l'outil «Open Office TEXTE»

Aspects théoriques et algorithmiques du calcul réparti L agglomération

La Carte d Identité Electronique

Calculateur d'économies d'énergie des produits client Dell. Description générale de la consommation d'énergie des systèmes informatiques :

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Guide rapide d'installation SUSE Linux Enterprise Server 11 SP1

GCOS 7 sur microprocesseur standard Diane Daniel POIRSON 14 octobre 2004 Matériels 64 / DPS 7 / DPS 7000 Architecture & Evolution - Daniel POIRSON 1

COMMENT MAITRISER LA GESTION DES APPROVISIONNEMENTS ET DES STOCKS DE MEDICAMENTS

THEGREENBOW FIREWALL DISTRIBUE TGB::BOB! Pro. Spécifications techniques

ipra*cool v 1.08 guide de l utilisateur ipra*cool v.1-08 Guide de l'utilisateur ipra*cool v

IBM SPSS Statistics Version 22. Instructions d'installation sous Windows (licence nominative)

Transcription:

BE-OpenMP Page 1 of 2 Calcul parallèle et distribué, et Grilles de calculs Cours de 3ème année IIC à Supélec BE de programmation OpenMP Objectifs du Bureau d'etude : (parallélisation en mémoire partagée) Les processeurs d'aujourd'hui sont tous "multi-coeurs", et certaines architectures possèdent plusieurs centaines de processeurs coopérant à travers une mémoire partagée. La programmation "multithreads" est une bonne façon d'exploiter le parallélisme de ces architectures, et OpenMP est un formalisme simple et souvent efficace pour mettre en oeuvre le "multithreading" (bien qu'il existe maintenant des bibliothèques de multithreading optimisées pour les architectures multi-coeurs). Ce BE a pour objectif d'apréhender par la pratique les principaux aspects d'openmp, notamment la parallélisation des boucles de calculs, qui constitue sont attrait principal. Les développements et expérimentations se feront sur des machines quadri-coeurs. Plates-formes de développement et de test : La version 2005 de VisualStudio et du compilateur C/C++ de Microsoftintègre la norme OpenMP. Les développements pourront donc se faire en Windows/VisualStudio 2005 sur les postes IIC traditionnels. La version 4.1.2 de gcc en Fedora 5 ou plus, supporte OpenMP. Il est donc également possible de développer sous Linux sur les postes IIC traditionnels. Les squelettes de programmes à compléter accompagnant les énoncés sont compilables autant sous Windows que sous Linux. Vous pouvez donc choisir votre environnement de développement favori. Les Tests de performances se feront sur PC quadri-coeurs. Documents à rendre : Vous rendrez un SEUL document par binôme : un fichier Word (.doc) ou PDF : il sera nommé avec vos noms précédés de "BE-OpenMP". Ex : "BE-OpenMP- Martin-Dupont.pdf" il comportera sur la première page : vos nom et prénoms, et le nom de votre option de 3A, la date de remise du rapport, le titre ("BE de programmation OpenMP"). il comportera ensuite : pour chaque étape : une description de la parallélisation réalisée (pourquoi?

BE-OpenMP Page 2 of 2 comment?), vos mesures de performances (Texec, MegaFlops, SpeedUp) sur PC quadri-coeurs, des graphiques de synthèse représentant les performances fonction du nombre de threads créés et éventuellement de la taille du problème, votre analyse/synthèse des performances obtenues, en annexe : les codes sources des parties importantes du code à chaque étape (ex : les portions parallélisées). Date limite de remise de vos rapports : jeudi 28 janvier 2009 à 18h. Remise par e-mail à S. Vialle. Travail à effectuer : Remarques préliminaires : OpenMP permet de réaliser une parallélisation incrémentale d'un code séquentiel. Afin de cumuler toutes les sources de performance on partira toujours d'un code séquentiel optimisé au maximum, comme étudié au BE "Optimisations sérielles". Les codes de calcul de ce BE seront évalués par leurs temps d'exécution des principales boucles de calculs, dont on déduira les MegaFlops (performances absolues), puis par leurs accélérations vis-à-vis de la version séquentielle optimisée (performances relatives). Exercices : 1. Parallélisation d'une relaxation de Jacobi : Enoncé. 2. Parallélisation d'un produit matriciel : Enoncé. 3. Si le temps le permet traitez la parallélisation d'une suite de calculs matricels : Enoncé. 4. Synthèse et analyse globales des résultats : quelles leçons tirez-vous de l'exploitation d'un PC multi-processeurs ou multi-coeurs?

OpenMP-RelaxationJacobi Page 1 of 3 BE de programmation OpenMP (parallélisation en mémoire partagée) Exercice 1 : Parallélisation d'une relaxation de jacobi L'utilisation d'openmp dans un code C nécessite en général d'inclure le fichier omp.h : #include <omp.h>, puis d'utiliser la bibliothèque OpenMP lors de l'édition de liens, et d'utiliser un compilateur OpenMP. Dans le cas d'un projet VisualStudio en mode "Console-Win32" il est nécessaire de préciser de prendre en compte les directives de compilation OpenMP et de générer du code "Release" et "Multithread", par une modification des "propriétés du projet Visualstudio". Dans le cas de gcc sous Linux, il est nécessaire de compiler avec l'option "-fopenmp". Dans tous les cas on veille aussi à préciser au compilateur d'optimiser la génération de code en vitesse! Dans cet exercice : Un squelette de programme C est fourni. C'est un répertoire contenant un projet VisualStudio "Console-Win32" où tous les propriétés du projet ont été positionnées correctement, et où un "Makefile" permet aussi une compilation OpenMP sous Linux avec gcc 1.4.2. Il ne vous reste plus qu'à développer le code C en insérant des directives et fonctions OpenMP avec votre environnement préféré.. Utilisez le squelette de programme C-OpenMP pour Windows ou Linux fourni pour ce BE : Enonce-omp-src-jacobi.zip 1 - Prise en main et affichage du numéro de thread et du nombre de threads Le programme de l'énoncé contient plusieurs affichages d'un message avec le numéro du thread et le nombre de threads lancés, par appel aux routines omp_get_thread_num() et omp_get_num_threads(). Ce programme permet aussi de préciser sur la ligne de commande le nombre de threads à utiliser (par l'option "-nt #value"). Ce nombre de threads est alors imposé à OpenMP par la fonction omp_set_num_threads() (voir le code). Faites varier le nombre de threads sur la ligne de commande et observez l'évolution de l'affichage. En l'absence de régions parallèles observez-vous un ou plusieurs threads? 2 - Parallélisation de la boucle de relaxation, recherche de la solution la plus rapide. Plusieurs solutions permettent de paralléliser le code séquentiel fourni, avec des efficacités différentes. 1. Quelle boucle for est-elle la plus intéressante à paralléliser? 2. Réalisez une parallélisation d'une grille de 256x256 points utiles pendant 50000 cycles,

OpenMP-RelaxationJacobi Page 2 of 3 à partir d'une directive orpheline. Exécuter votre code en émulant un quadri-processeurs et vérifiez l'exactitude du résultat obtenu (potentiel affiché du centre de la grille de relaxation). Les résultats corrects sont récapitulés au bas de cette page. 3. Réalisez une parallélisation à partir d'une région parallèle définissant une variable OI et une variable NI propre à chaque thread et intialisées dans la région parallèle. Insérez l'instruction d'affichage du message "c" au début de la région parallèle. Vérifiez que le message "c" s'affiche plusieurs fois et vérifiez l'exactitude du résultat. 4. Réalisez une parallélisation à partir d'une région parallèle définissant une variable OI et une variable NI propre à chaque thread, mais initialisées avant le début de la région parallèle. Vérifiez l'exactitude du résultat. 4. Réalisez une parallélisation à partir d'une région parallèle évitant toujours de créer et détruire des threads à chaque cycle, mais laissant les variables OI et NI "shared". Vérifiez l'exactitude du résultat. Quelle parallélisation vous semble la plus intéressante? Remarque : Vous pouvez tester vos parallélisations avec d'autres couples taille/nombre-decyles dont les résultats sont donnés dans le tableau au bas de cette page. 3 - Mesures de performances calculatoires et énergétiques sur PC quadri-coeurs Cette question a pour but de réaliser une rapide étude de performances en fonction du nombre de threads créés et de la taille du problème. 1. Calculez la taille totale du tableau des potentiels en fonction de la taille de la variable "SIZE" du code source. Quelles tailles de la grille de Jacobi mènent à une implantation qui tient dans le cache? 2. Mesurez les performances de votre parallélisation pour 1, 2, 3, 4 et 8 threads sur un des PC quadri-coeurs, pour des grilles de 256x256, 384x384, 512x512 et 1024x1024 points utiles (soit 20 mesures à effectuer au total), et pour la meilleure parallélisation identifiée à la question précédente. Diminuer le nombre de cycles quand vous augmentez la taille du problème, afin de conserver des temps d'exécution proche de 1 minute. Dans chaque cas : mesurez les performances obtenues (MFlops), mesurez le temps d'exécution du programme et déduisez le temps d'exécution d'un cycle de calcul, mesurez le nombre de Watts consommés par l'exécution du programme, et déduisez l'énergie absorbée (nbr de Joules) par l'exécution d'un cycle de calcul. 3. Pour chaque taille de problème, quelles performances et accélérations maximales obtenez vous, et pour quel nombre de threads? Expliquez les différences de performances observées en fonction de la taille du problème. 4. Calculez et tracez les accélérations obtenues en fonction du nombre de threads déployés et leurs efficacités vis-à-vis du nombre de coeurs utilisés. On prendra comme référence séquentielle l'exécution du même code avec un seul thread. 5. Calculez et tracez également les gains d'énergie obtenus en déployant de plus en plus de threads. 6. Tracez le produit de l'accélération par le gain d'énergie (sorte d'intérêt global du multithreading sur multi-coeurs), en fonction du nombre de threads déployés et pour chaque taille de problème.

OpenMP-RelaxationJacobi Page 3 of 3 Analysez ces résultats, et concluez sur l'utilisation de ces PC quadri-coeurs. 4 - Résultats corrects attendus. Taille "utile" de la grille de relaxation (SIZExSIZE) Nombre de cycles de relaxation Potentiel au centre de la Grille 64x64 500000 6,315464 96x96 50000 6,351585 128x128 50000 6,369809 256x256 50000 6,158332 384x384 5000 0,004151 512x512 5000 0,000011 1024x1024 500 0,000000

BE-OpenMP-ProduitMatriciel Page 1 of 1 BE de programmation OpenMP (parallélisation en mémoire partagée) Exercice 2 : Parallélisation d'un produit matriciel On considère deux matrices carrées A et B de SIZExSIZE éléments de type double, et on souhaite calculer leur produit : C = AxB. 1. Utilisez le squelette de programme fourni pour cet exercice, dont le projet a été configuré pour une compilation optimisée en vitesse et prenant en compte les directives OpenMP sous Windows et sous Linux : Enonce-omp-src-matrix.zip 2. Implantez un produit de matrice optimisé séquentiellement, conformément au BE d'optimisations sérielles. Reprenez votre code de produit de matrices qui s'est avéré le plus efficace au BE d'optimisations sérielles. 3. Parallélisez ce code avec OpenMP, selon la stratégie qui vous semble la plus efficace. Mesurez les performances calculatoires et énergétiques pour des matrices de 1536x1536 (vérifiez l'exactitude des résultats) sur un PC quadri-coeurs, et pour des matrices de 4032x4032 si le temps le permet. 4. Tracez les courbes de performances et d'accélération en fonction du nombre de threads déployés, d'efficacité vis à vis du nombe de coeurs utilisés. 5. Tracez les courbes d'énergie consommée par l'ensemble du produit matriciel en fonction du nombre de threads déployés, et les courbes de gain énergétique (obtenez-vous des gains ou des pertes?). 6. Identifiez les meilleures solutions calculatoires et énergétiques pour chaque taille de problème. La solution la plus économique est-elle aussi la solution la plus rapide? Quelle allure a le produit de l'accélération par le gain énergétique? 7. Si vous travaillez sous Linux, vous pouvez recommencer l'étude sous icc : éditez le Makefile et changez le nom du compilateur (icc) et l'option d'utilisation d'openmp (en icc il faut utiliser -openmp). exécutez la commande 'source /opt/intel/cce/10.1.018/bin/iccvars.sh' pour être prêt à utiliser le compilateur icc, lancez vos tests à partir du terminal dans lequel vous avez exécuter la commande 'source'. Comparez alors les performances obtenues sous icc et sous gcc.

BE-OpenMP-CalculMatriciel Page 1 of 1 BE de programmation OpenMP (parallélisation en mémoire partagée) Exercice 3 : Parallélisation d'une suite de calculs matriciels On considère une matrice "A" carrée de SIZExSIZE éléments de type double, et une autre matrice "F" carrée de la même taille. "A" est une matrice de données et "F" est un "filtre" matriciel. 1. Implantez un programme réalisant une boucle de NbIter itérations, réalisant à chaque itération : A n+1 = A n xf (on applique le filtre récursivement à chaque itération). A la fin de chaque itération implantez le calcul de la valeur moyenne des éléments de la matrice A n+1. - Utilisez le squelette de programme fourni pour cet exercice (le même que pour l'exercice précédent), dont le projet a été configuré pour une compilation optimisée en vitesse et prenant Enonce-omp-src- en compte les directives OpenMP sous Windows et sous Linux: matrix.zip - Utilisez un produit de matrice optimisé séquentiellement, conformément au BE d'optimisations sérielles. 2. Parallélisez ce code avec OpenMP, en utilisant principalement une directive orpheline et une clause de réduction. Tout au long du développement, vérifiez l'exactitude des résultats en prenant comme filtre la matrice identité et en initialisant la matrice A avec : A[i][j] = i*size+j. 3. Mesurez les performances calculatoires et énergétiques de votre code sur un PC quadricoeurs, pour 1,2, 3, 4 et 8 threads, pour une valeur de SIZE susceptible de produire une hyper-accélération (justifiez votre choix de la valeur SIZE), puis pour des valeurs menant à un problème de taille inférieure au cache accessible à un seul coeur, et à un problème de taille supérieure à l'ensemble du cache du processeur. Les performances obtenues sont-elles cohérentes avec celles observées lors de la parallélisation de la relaxation de Jacobi? 4. Parallélisez votre code séquentiel avec OpenMP en définissant une région parallèle permettant de ne créer les threads qu'une seule fois. Attention, les clauses de réduction ne fonctionne pas à l'intérieur d'une région parallèle. Observez-vous une amélioration par rapport à la parallélisation par directive orpheline?