Parallélisme d’instructions

Slides:



Advertisements
Présentations similaires
Électronique de base du processeur
Advertisements

Architecture de machines Codage des informations
Architecture de machines Le microprocesseur
Sémantique des déclarations pour le langage Z minimal
Algorithmes et structures de données 7ème cours
Calculs de complexité d'algorithmes
Concepts d’architectures avancées
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
Les diagrammes d’interactions
Performances 1 Évolution : Performance. Performances 2 Évolution : Mémoire.
Aléas 1 Les aléas de données Jusquà présent toutes les instructions étaient indépendantes ; aucune dentre elles nutilisaient les résultats calculés par.
C.
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
People want to do X, but computers can only do Y. This leads to a problem. My job is to explain how this problem can be solved.
Les aléas de données Jusqu’à présent toutes les instructions étaient indépendantes ; aucune d’entre elles n’utilisaient les résultats calculés par une.
Un programme Hello World du début des années #T OXXXXXX0 HELLO WORLD Ce programme ( en langage machine ) consiste en 3 lignes, totalisant 27.
Les opérateurs combinatoires
Le processeur Introduction Construction d ’un chemin de données
Les circuits séquentiels
Le Concept du programme enregistré
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Exécution en ordre partiel Une fois les instructions renommées, les seules dépendances qui subsistent entre instructions registre-registre sont les dépendances.
Renommage et ILP Le compilateur mappe la mémoire sur les registres architecturaux. Les registres architecturaux étant peu nombreux, sont fortement réutilisés.
8. Les tableaux P. Costamagna – ISEN N1.
Architecture de machines Le microprocesseur
ALGORTHME DE COMPOSITION INTRODUCTION PRINCIPES DE BASE LES ETAPES CONCLUSION.
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Semaine #1 INF155 par Frédérick Henri.
Introduction à l’algorithmique
Architecture et technologie des ordinateurs II
Analyse des algorithmes: une introduction
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Algorithmique et Programmation
Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.
Addition vectorielle de vecteurs
1 Exercice : longueur d’un mot est-elle paire ?  Test fonctionnel  Quel ensemble de valeur choisir / spécification  Test structurel  Soit le code d’un.
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Pipeline – opérations multicycles Nous avons vu jusquà maintenant comment faire un.
Systèmes Superscalaires et VLIW
Architecture des ordinateurs II GEI Frédéric Mailhot
Semaine #1 INF130 par Frédérick Henri.
Semaine #1 INF135 par Frédérick Henri.
Parallélisme des instructions
Comment construire des vecteurs vitesse et des vecteurs accélération ?
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
2.1 - Historique Chapitre 2 : Introduction au langage C++
La Boucle Repeat Cours LCS N°1 Présenté par Mr: LALLALI.
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
8INF856 Programmation sur architectures parallèles
Un survol du language C.
PARALLÉLISATION AUTOMATIQUE D’ALGORITHMES
Les Machines RAM.
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Étude de cas Maintenant qu’on a vu les pipelines, le superscalaire, le VLIW, la gestion des.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Superscalaires Comment peut-on déterminer de façon dynamique, au niveau du processeur,
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
Introduction et Généralités sur l’Algorithmique
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Architecture et technologie des ordinateurs II
2.4 Le langage SFC - Un langage de description de systèmes séquentiels
PROJET CAPS Compilation, Architecture, Processeurs Superscalaires et Spécialisées.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Pipeline 1 Amélioration des performances par la technique du pipeline.
Enseigner / apprendre le calcul mental… (2)
Pipeline 1 Amélioration des performances par la technique du pipeline.
Introduction au langage C
M1Info-ASE 1 Pipeline logiciel. M1Info-ASE 2 Pipeline logiciel Le déroulage de boucle a ses limites Approcher des perf optimales  facteurs de déroulage.
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Transcription de la présentation:

Parallélisme d’instructions Objectif : Examiner comment le compilateur peut augmenter la quantité disponible de parallélisme d ’instructions. La capacité du compilateur à réaliser cet ordonnancement dépend : des latences des UFs de la quantité de parallélisme d ’instructions disponible dans le programme.

Exemple : le déroulage de boucles.

Pipeline avec opérations flottantes Entier EX Multiplication LI DI MI MI MI MI MI MI MI M ER Addition AI AI AI AI

Latence et intervalle de démarrage Définitions : Intervalle de démarrage : nombre de cycles entre deux instructions d ’un type donné. Latence : nombre de cycles entre une instruction qui produit et une instruction qui utilise le résultat.

Latence Donner les valeurs de la latence et de l’intervalle de démarrage LI DI EX MI AI M ER Entier Multiplication Addition U. F. Entier Donnée mémoire ADDD MULD Latence Intervalle de démarrage

Intervalle de démarrage LI DI M ER MI LI DI M ER MI LI DI M ER MI LI DI AI M ER AI LI DI M ER AI LI DI M ER

Latence 1 2 3 4 5 6 1 2 3 LI DI M ER LI DI M ER LI DI M ER LI DI M ER MI LI DI M ER MI 1 2 3 4 5 6 LI DI AI M ER AI LI DI M ER 1 2 3

Latence Donner les valeurs de la latence et de l’intervalle de démarrage Solution U. F. Entier Donnée mémoire ADDD MULD Latence 1 3 6 Intervalle de démarrage

Questions Donner le diagramme temporel du pipeline d’un ensemble d’opérations flottantes indépendantes. Indiquer en italique à quel étage la donnée est nécessaire. Indiquer en gras à quel étage le résultat est disponible. MULTD ADDD LD SD D= Double

réponse MULTD ADDD LD SD LI DI M ER MI MI7 LI DI AI AI4 M ER LI DI EX M ER LI DI EX M ER Création d’un nouveau type d’aléas : aléas d’écriture D= Double

Autre aléas : Problème de l’écriture Nous allons voir un nouveau problème : l’aléas structurel

Autre aléas : Problème de l’écriture Donner la séquence de code pour la séquence suivante : MULD F0,F4,F6 … ADDD F2,F4,F6 LD F8,0(R2)

Autre aléas : Problème de l’écriture Réponse MULD F0,F4,F6 … ADDD F2,F4,F6 LD F8,0(R2) LI DI MI M ER LI DI M ER EX LI DI M ER EX LI DI AI AI AI AI M ER LI DI M ER EX LI DI M ER EX LI DI EX M ER

Séquence d’instruction Donner la séquence d’instructions qui montre les suspensions résultant des aléas LD F4,0(R2) MULTD F0,F4,F6 ADDD F2,F0,F8 SD F2,0(R2)

Séquence d’instruction Réponse 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 MI DI EX M ER n M1 M2 M3 M4 M5 M6 M7 A1 A2 A3 A4 ID LD F4,0(R2) MULTD F0,F4,F6 ADDD F2,F0,F8 SD F2,0(R2)

Exemple de déroulage de boucle : unrolling Sur une machine RISC : DLX

Latences des opérations flottantes utilisées Type Inst produisant UALF Charg D Inst Utilisant Rang D 3 2 1 Exemple ADDF F4,F0,F suspension Type 2 Suspension SD 0(R1),F4

Exemple de code Source For (i=1;i<=100,i++) x(i)=x(i)+S; Comment peut-on utiliser le parallélisme pour améliorer sa performance sur un pipeline ?

Code Assembleur Donner le code assembleur de la boucle. R1 contient l ’adresse du dernier élément du vecteur, c ’est à dire l ’élément avec la plus grande adresse et F2 contient la valeur scalaire S. L ’adresse du premier élément est zéro. Remarque : si l’adresse du premier élément était différente, la boucle utiliserait une instruction entière supplémentaire pour faire la comparaison avec R1.

Code assembleur Boucle LD F0,0(R1) # F0 = élément du vecteur ADDD F4,F0,F2 # ajouter le scalaire à F2 SD 0(R1),F4 # ranger le résultat SUBI R1,R1,#8 # décrémenter le pointeur de 8 octets. BNEZ R1,Boucle N.B. l’écriture de SD

Code assembleur non ordonnancé Montrer à quoi ressemblerait la boucle DLX, ordonnancée et non ordonnancée, en tenant compte de suspensions ou cycles inutilisés. Ordonnancer pour tenir compte des délais des opérations flottantes et du branchement retardé. Remarque : la suspension des aléas de branchement est réduit en transférant le test à Zéro et le calcul de l’adresse de branchement Dans la phase DI du pipeline

Prise en compte du pipeline 1 2 cas 3 3 4 cas 2 5 6 7 8 9 Boucle LD F0,0(R1) susp ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,#8 BNEZ R1,Boucle

Réordonnancement et modification du code Boucle LD F0,0(R1) susp ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,#8 BNEZ R1,Boucle Boucle LD F0,0(R1) susp ADDD F4,F0,F2 SUBI R1,R1,#8 BNEZ R1,Boucle SD 8(R1),F4 Modification car échangé avec SUB Le temps d ’exécution a été réduit de 9 à 6 cycles. Remarque : Le compilateur a du déterminer qu ’il pouvait échanger SUB et SD en modifiant l ’adresse où SD range. Ce n ’est pas trivial.

Analyse du code On termine une itération et on range un élément du vecteur Tous les 6 cycles. Travail réel sur le vecteur 3 Gestion de la boucle 3 6 L ’idée est de faire plus d ’opérations dans la boucle par rapport à la gestion de la boucle. L ’idée est de dérouler la boucle en dupliquant le corps de la boucle.

Déroulage de la boucle Montrer la boucle déroulé avec quatre copies du corps de la boucle, en supposant qu’à l’initialisation, R1 est un multiple de 32, ce qui signifie que le nombre d’itérations de boucle est un multiple de 4. Éliminer tout calcul à l’évidence redondant, et ne pas réutiliser de registres.

Déroulage de la boucle Boucle LD F0,0(R1) ADDD F4,F0,F2 SD 0(R1),F4 SUBI R1,R1,#32 BNEZ R1,Boucle 1 3 6 7 9 12 13 15 18 19 21 24 25 26 27 cycles Boucle 1 Boucle 2 Boucle 3 Boucle 4

Remarques La taille du code augmente le nombre de registres est plus important

Réordonnancement de la boucle Présenter la boucle de l’exemple précédent déroulée après son ordonnancement sur DLX.

Réordonnancement Boucle LD F0,0(R1) 1 2 LD F6,-8(R1) LD F10,-16(R1) 3 ADDD F4,F0,F2 ADDD F8,F6,F2 ADDD F12,F10,F2 ADDD F16,F14,F2 SD 0(R1),F4 SD -8(R1),F8 SD -16(R1),F12 SUBI R1,R1,#32 BNEZ R1,Boucle SD 8(R1),F16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cycles 8= 32 - 24

Bilan Le temps d ’exécution d ’une boucle est tombé à 3.5 cycles par rapport à 6 avec ordonnancement non déroulé.

Aujourd’hui : VLIW Les instructions sont sur plus de 128bits Instruct

Aujourd’hui : VLIW Les instructions sont sur plus de 128bits Instruct

Aujourd’hui : VLIW Les instructions sont compactées en mémoire