La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand.

Présentations similaires


Présentation au sujet: "Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand."— Transcription de la présentation:

1 Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand

2 Plan Introduction Introduction Extensions multimédia pour processeur à usage universel Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler SAC: SIMD Architecture Compiler Algorithme de vectorisation Algorithme de vectorisation Conclusion et perspectives Conclusion et perspectives

3 Évolution des moeurs Nouvelles applications Nouvelles applications –Multimédia, jeux vidéos, … Importante puissance de calcul nécessaire même pour les applications personnelles Importante puissance de calcul nécessaire même pour les applications personnelles Architectures de processeur conçues pour les applications dil y a 10 ans Architectures de processeur conçues pour les applications dil y a 10 ans

4 Une solution: les extensions multimédia Bon marché Bon marché Bonnes performances sur certaines applications (de 2x a 16x) Bonnes performances sur certaines applications (de 2x a 16x) Disponible sur toutes les plateformes Disponible sur toutes les plateformes Problèmes: Problèmes: –Compliqué à utiliser –Pas doptimisation par le compilateur

5 Plan Introduction Introduction Extensions multimédia pour processeur à usage universel Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler SAC: SIMD Architecture Compiler Algorithme de vectorisation Algorithme de vectorisation Conclusion et perspectives Conclusion et perspectives

6 Extensions multimédia Introduites dans les années 90 Introduites dans les années 90 Disponibles sur toutes les architectures: Disponibles sur toutes les architectures: MMX, SSE et SSE2 sur Intel, VIS sur SUN, … MMX, SSE et SSE2 sur Intel, VIS sur SUN, … Instructions supplémentaires, spécifiques aux applications multimédia Instructions supplémentaires, spécifiques aux applications multimédia Peuvent en fait être utilisées dans de nombreux domaines: Peuvent en fait être utilisées dans de nombreux domaines: Télécommunications, traitement du signal, calcul scientifique… Télécommunications, traitement du signal, calcul scientifique…

7 Opérations SIMD « Single Instruction stream, Multiple Data stream » « Single Instruction stream, Multiple Data stream » Effectuent la même opération sur plusieurs éléments en même temps Effectuent la même opération sur plusieurs éléments en même temps Types de données plus petits (8 ou 16 bits) Types de données plus petits (8 ou 16 bits)

8 « Packed Data Types » Plusieurs éléments dans un seul registre Plusieurs éléments dans un seul registre Registre de 64 ou 128 bits Registre de 64 ou 128 bits –Utilisation des registres entiers, flottants, ou de registres spécifiques Éléments de base: Éléments de base: –Entier sur 8, 16 ou 32 bits –Virgule flottante sur 64 bits

9 Utilisation ? Codage assembleur Codage assembleur Codage en C de bas niveau Codage en C de bas niveau Templates C++ Templates C++ Librairies spécialisées, déjà optimisées Librairies spécialisées, déjà optimisées Génération automatique par le compilateur ? Génération automatique par le compilateur ?

10 Plan Introduction Introduction Extensions multimédia pour processeur à usage universel Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler SAC: SIMD Architecture Compiler Algorithme de vectorisation Algorithme de vectorisation Conclusion et perspectives Conclusion et perspectives

11 Présentation de SAC Utilise la plateforme PIPS Utilise la plateforme PIPS Compilateur source vers source Fortran Compilateur source vers source Fortran Génération de pseudo fonctions pour les instructions multimédia Génération de pseudo fonctions pour les instructions multimédia Fonctionnement: Application successive de plusieurs phases Fonctionnement: Application successive de plusieurs phases

12 Etapes Préparation du code Préparation du code Atomiseur Atomiseur Déroulage de boucles Déroulage de boucles Elimination des réductions Elimination des réductions Assignement unique Assignement unique Vectorisation Vectorisation

13 Atomiseur Transforme le code pour utiliser des opérations simples, « atomiques » Transforme le code pour utiliser des opérations simples, « atomiques »

14 Déroulage de boucles Rends le parallélisme apparent Rends le parallélisme apparent Nécessite le calcul du facteur de déroulage Nécessite le calcul du facteur de déroulage For i=0 to n A[i] = B[i] + C[i] A[i] = B[i] + C[i] End For For i=0 to n step 4 A[i] = B[i] + C[i] A[i] = B[i] + C[i] A[i+1] = B[i+1] + C[i+1] A[i+1] = B[i+1] + C[i+1] A[i+2] = B[i+2] + C[i+2] A[i+2] = B[i+2] + C[i+2] A[i+3] = B[i+3] + C[i+3] A[i+3] = B[i+3] + C[i+3] End For

15 Élimination des réductions Réduction: Réduction: Réductions incompatibles avec la vectorisation Réductions incompatibles avec la vectorisation Remplacement de la variable de réduction par un vecteur de réduction Remplacement de la variable de réduction par un vecteur de réduction For i=0 to n step 2 S = S + A[i] S = S + A[i] S = S + A[i+1] S = S + A[i+1] End For tS[0] = tS[1] = 0 For i=0 to n step 2 tS[0] = tS[0] + A[i] tS[0] = tS[0] + A[i] tS[1] = tS[1] + A[i+1] tS[1] = tS[1] + A[i+1] End For S = S + tS[0] + tS[1]

16 Assignement unique Elimine les « fausses » dépendances Elimine les « fausses » dépendances Les variables sont renommées, avec un nom différent par assignation Les variables sont renommées, avec un nom différent par assignation t = B[i] * C[i] A[i] = t + D[i] t = B[i+1] * C[i+1] A[i+1] = t + D[i+1] t1 = B[i] * C[i] A[i] = t1 + D[i] t2 = B[i+1] * C[i+1] A[i+1] = t2 + D[i+1]

17 Plan Introduction Introduction Extensions multimédia pour processeur à usage universel Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler SAC: SIMD Architecture Compiler Algorithme de vectorisation Algorithme de vectorisation Conclusion et perspectives Conclusion et perspectives

18 Principe de la vectorisation Générer des instructions SIMD à partir des instructions originales Générer des instructions SIMD à partir des instructions originales Simple grâce aux transformations précédentes Simple grâce aux transformations précédentes Suffisant de transformer les sequences Suffisant de transformer les sequences

19 Regroupage des instructions Algorithme glouton Algorithme glouton Regroupe les instructions du même type Regroupe les instructions du même type Une instruction est ajoutée à un groupe si: Une instruction est ajoutée à un groupe si: Elle est de même type Elle est de même type Il ny a pas de dépendance avec les autres instructions du groupe Il ny a pas de dépendance avec les autres instructions du groupe Linstruction peut être déplacée a la fin du groupe Linstruction peut être déplacée a la fin du groupe

20 Analyse des groupes Sélection des opcodes utilisés pour implanter un groupe Sélection des opcodes utilisés pour implanter un groupe Information sur les instructions SIMD à générer Information sur les instructions SIMD à générer Création de vecteurs SIMD pour chacune des instructions SIMD Création de vecteurs SIMD pour chacune des instructions SIMD Analyse des dépendance entre ces vecteurs Analyse des dépendance entre ces vecteurs

21 Generation du code Pour chaque instruction SIMD, on genere: Pour chaque instruction SIMD, on genere: Des instructions pour charger les vecteurs SIMD Des instructions pour charger les vecteurs SIMD Une instruction pour executer loperation Une instruction pour executer loperation Une instruction pour sauvegarder le vecteur SIMD contenant le resultat Une instruction pour sauvegarder le vecteur SIMD contenant le resultat For i=0 to n step 2 A[i] = B[i] + C[i] A[i] = B[i] + C[i] A[i+1] = B[i+1] + C[i+1] A[i+1] = B[i+1] + C[i+1] End For For i=0 to n step 2 vecB = {B[i], B[i+1]} vecB = {B[i], B[i+1]} vecC = {C[i], C[i+1]} vecC = {C[i], C[i+1]} vecA = vecB + vecC vecA = vecB + vecC {A[i], A[i+1]} = vecA {A[i], A[i+1]} = vecA End For

22 Optimisation Chargement optimisé: Chargement optimisé: Réutilisation de vecteurs si possible Réutilisation de vecteurs si possible Utilisation dautres instructions pour ne pas effectuer un accès mémoire (shuffle, pack, …) Utilisation dautres instructions pour ne pas effectuer un accès mémoire (shuffle, pack, …) Chargement de données contiguës/constantes Chargement de données contiguës/constantes Sauvegardes inutiles éliminées par use-def elimination Sauvegardes inutiles éliminées par use-def elimination

23 Plan Introduction Introduction Extensions multimédia pour processeur à usage universel Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler SAC: SIMD Architecture Compiler Algorithme de vectorisation Algorithme de vectorisation Conclusion et perspectives Conclusion et perspectives

24 Conclusion Extensions multimédia très puissantes, mais sous-utilisées Extensions multimédia très puissantes, mais sous-utilisées SAC permet une vectorisation automatique SAC permet une vectorisation automatique Facile dutilisation Facile dutilisation Rapide Rapide Performant Performant

25 Perspectives Support du C dans PIPS Support du C dans PIPS Exploiter les spécificités des jeux dinstructions ? Exploiter les spécificités des jeux dinstructions ? Arithmétique saturée, instructions spécifiques… Arithmétique saturée, instructions spécifiques… Optimisations de plus haut niveau ? Optimisations de plus haut niveau ? Réorganisation des données à lexécution, en fonction des motifs daccès… Réorganisation des données à lexécution, en fonction des motifs daccès…


Télécharger ppt "Optimisation et parallélisation de code pour processeur à instructions SIMD multimedia François Ferrand."

Présentations similaires


Annonces Google