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 Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler Algorithme de vectorisation Conclusion et perspectives

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

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

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

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

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

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

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

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

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

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

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

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

15 Élimination des réductions
Réductions incompatibles avec la vectorisation 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+1] End For tS[0] = tS[1] = 0 tS[0] = tS[0] + A[i] tS[1] = tS[1] + A[i+1] S = S + tS[0] + tS[1]

16 Assignement unique Elimine les « fausses » dépendances
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 Extensions multimédia pour processeur à usage universel SAC: SIMD Architecture Compiler Algorithme de vectorisation Conclusion et perspectives

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

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

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

21 Generation du code Pour chaque instruction SIMD, on genere:
Des instructions pour charger les vecteurs SIMD Une instruction pour executer l’operation 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+1] = B[i+1] + C[i+1] End For vecB = {B[i], B[i+1]} vecC = {C[i], C[i+1]} vecA = vecB + vecC {A[i], A[i+1]} = vecA

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

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

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

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


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

Présentations similaires


Annonces Google