optimisation et parallélisation de code pour processeur à instructions simd multimedia françois...

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

Upload: gratien-voisin

Post on 04-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

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

Optimisation et Optimisation et parallélisation de code parallélisation de code

pour processeur pour processeur à à instructions SIMD instructions SIMD

multimediamultimedia

FranFrançois Ferrandçois Ferrand

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

PlanPlan

IntroductionIntroduction

• Extensions multimédia pour Extensions multimédia pour processeur processeur à à usage universelusage universel

• SAC: SIMD Architecture CompilerSAC: SIMD Architecture Compiler

• Algorithme de vectorisationAlgorithme de vectorisation

• Conclusion et perspectivesConclusion et perspectives

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

Évolution des moeursÉvolution des moeurs

• Nouvelles applicationsNouvelles applications– Multimédia, jeux vidéos, …Multimédia, jeux vidéos, …

• Importante puissance de calcul Importante puissance de calcul nécessaire même pour les nécessaire même pour les applications personnellesapplications personnelles

• Architectures de processeur conçues Architectures de processeur conçues pour les applications d’il y a 10 anspour les applications d’il y a 10 ans

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

Une solution: Une solution: les extensions les extensions

multimédiamultimédia• Bon marchéBon marché

• Bonnes performances sur certaines Bonnes performances sur certaines applications (de 2x a 16x)applications (de 2x a 16x)

• Disponible sur toutes les plateformesDisponible sur toutes les plateformes

• Problèmes: Problèmes: – Compliqué à utiliserCompliqué à utiliser– Pas d’optimisation par le compilateurPas d’optimisation par le compilateur

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

PlanPlan

IntroductionIntroduction Extensions multimédia pour Extensions multimédia pour

processeur processeur à à usage universelusage universel

• SAC: SIMD Architecture CompilerSAC: SIMD Architecture Compiler

• Algorithme de vectorisationAlgorithme de vectorisation

• Conclusion et perspectivesConclusion et perspectives

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

Extensions multimédiaExtensions multimédia

• Introduites dans les années 90Introduites 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, Instructions supplémentaires, spécifiques aux applications multimédiaspécifiques aux applications multimédia

• Peuvent en fait être utilisées dans de Peuvent en fait être utilisées dans de nombreux domaines: nombreux domaines: 

•Télécommunications, traitement duTélécommunications, traitement du signal, calcul scientifique… signal, calcul scientifique…

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

Opérations SIMDOpérations SIMD

• « Single Instruction stream, Multiple « Single Instruction stream, Multiple Data stream »Data stream »

• Effectuent la même opération sur Effectuent la même opération sur plusieurs éléments en même tempsplusieurs éléments en même temps

• Types de données plus petits (8 ou 16 Types de données plus petits (8 ou 16 bits)bits)

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

« Packed Data Types »« Packed Data Types »

• Plusieurs éléments dans unPlusieurs éléments dans unseul registreseul registre

• Registre de 64 ou 128 bitsRegistre de 64 ou 128 bits– Utilisation des registres entiers, Utilisation des registres entiers,

flottants, ou de registres spécifiquesflottants, ou de registres spécifiques

• Éléments de base:Éléments de base:– Entier sur 8, 16 ou 32 bitsEntier sur 8, 16 ou 32 bits– Virgule flottante sur 64 bitsVirgule flottante sur 64 bits

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

Utilisation ?Utilisation ?

• Codage assembleurCodage assembleur

• Codage en C de bas niveauCodage en C de bas niveau

• TemplatesTemplates C++ C++

• Librairies spécialisées, déjà optimiséesLibrairies spécialisées, déjà optimisées

• Génération automatique par le Génération automatique par le compilateur ?compilateur ?

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

PlanPlan

IntroductionIntroduction Extensions multimédia pour Extensions multimédia pour

processeur processeur à à usage universelusage universel SAC: SIMD Architecture CompilerSAC: SIMD Architecture Compiler

• Algorithme de vectorisationAlgorithme de vectorisation

• Conclusion et perspectivesConclusion et perspectives

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

Présentation de SACPrésentation de SAC

• Utilise la plateforme PIPSUtilise la plateforme PIPS

• Compilateur source vers source Compilateur source vers source FortranFortran

• Génération de pseudo fonctions pour Génération de pseudo fonctions pour les instructions multimédiales instructions multimédia

• Fonctionnement: Application Fonctionnement: Application successive de plusieurs phasessuccessive de plusieurs phases

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

EtapesEtapes

• Préparation du codePréparation du codeAtomiseurAtomiseurDéroulage de bouclesDéroulage de bouclesElimination des réductionsElimination des réductionsAssignement uniqueAssignement unique

• VectorisationVectorisation

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

AtomiseurAtomiseur

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

)( dcbfa )( dcbfa

)( 2

12

1

tfa

dtt

cbt

)( 2

12

1

tfa

dtt

cbt

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

Déroulage de bouclesDéroulage de boucles

• Rends le parallélisme apparentRends le parallélisme apparent

• Nécessite le calcul du facteur de déroulageNécessite le calcul du facteur de déroulage

For i=0 to nFor i=0 to n

A[i] = B[i] + C[i]A[i] = B[i] + C[i]

End ForEnd For

For i=0 to n step 4For 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 ForEnd For

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

Élimination des réductionsÉlimination des réductions

• Réduction: Réduction:

• Réductions incompatibles avec la vectorisationRéductions incompatibles avec la vectorisation

• Remplacement de la variable de réduction par Remplacement de la variable de réduction par un vecteur de réductionun vecteur de réduction

For i=0 to n step 2For 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 ForEnd For

tS[0] = tS[1] = 0tS[0] = tS[1] = 0

For i=0 to n step 2For 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 ForEnd For

S = S + tS[0] + tS[1]S = S + tS[0] + tS[1]

),( xfx ),( xfx

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

Assignement uniqueAssignement unique

• Elimine les « fausses » dépendancesElimine les « fausses » dépendances

• Les variables sont renommées, avec un Les variables sont renommées, avec un nom différent par assignationnom différent par assignation

tt = B[i] * C[i] = B[i] * C[i]

A[i] = A[i] = tt + D[i] + D[i]

tt = B[i+1] * C[i+1] = B[i+1] * C[i+1]

A[i+1] = A[i+1] = tt + D[i+1] + D[i+1]

t1t1 = B[i] * C[i] = B[i] * C[i]

A[i] = A[i] = t1t1 + D[i] + D[i]

t2t2 = B[i+1] * C[i+1] = B[i+1] * C[i+1]

A[i+1] = A[i+1] = t2t2 + D[i+1] + D[i+1]

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

PlanPlan

IntroductionIntroduction Extensions multimédia pour Extensions multimédia pour

processeur processeur à à usage universelusage universel SAC: SIMD Architecture CompilerSAC: SIMD Architecture Compiler Algorithme de vectorisationAlgorithme de vectorisation

• Conclusion et perspectivesConclusion et perspectives

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

Principe de la vectorisationPrincipe de la vectorisation

• Générer des instructions SIMD à Générer des instructions SIMD à partir des instructions originalespartir des instructions originales

• Simple grâce aux transformations Simple grâce aux transformations précédentesprécédentes

• Suffisant de transformer les Suffisant de transformer les sequencessequences

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

Regroupage des instructionsRegroupage des instructions

• Algorithme gloutonAlgorithme glouton

• Regroupe les instructions du même typeRegroupe les instructions du même type

• Une instruction est ajoutée à un groupe Une instruction est ajoutée à un groupe si:si:

•Elle est de même typeElle est de même type

• Il n’y a pas de dépendance avec les autres Il n’y a pas de dépendance avec les autres instructions du groupeinstructions du groupe

•L’instruction peut être déplacée a la fin du L’instruction peut être déplacée a la fin du groupegroupe

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

Analyse des groupesAnalyse des groupes

• Sélection des opcodes utilisés pour Sélection des opcodes utilisés pour implanter un groupeimplanter un groupe

• Information sur les instructions SIMD à Information sur les instructions SIMD à générergénérer

• Création de vecteurs SIMD pour Création de vecteurs SIMD pour chacune des instructions SIMDchacune des instructions SIMD

• Analyse des dépendance entre ces Analyse des dépendance entre ces vecteursvecteurs

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

Generation du codeGeneration du code

• Pour chaque instruction SIMD, on genere:Pour chaque instruction SIMD, on genere:• Des instructions pour charger les vecteurs SIMDDes instructions pour charger les vecteurs SIMD

• Une instruction pour executer l’operationUne instruction pour executer l’operation

• Une instruction pour sauvegarder le vecteur SIMD Une instruction pour sauvegarder le vecteur SIMD contenant le resultatcontenant le resultat

For i=0 to n step 2For 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 ForEnd For

For i=0 to n step 2For 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 + vecCvecA = vecB + vecC

{A[i], A[i+1]} = vecA{A[i], A[i+1]} = vecA

End ForEnd For

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

OptimisationOptimisation

• Chargement optimisé:Chargement optimisé:•Réutilisation de vecteurs si possibleRéutilisation de vecteurs si possible

•Utilisation d’autres instructions pour ne pas Utilisation d’autres instructions pour ne pas effectuer un accès mémoire (shuffle, pack, effectuer un accès mémoire (shuffle, pack, …)…)

•Chargement de données Chargement de données contiguës/constantescontiguës/constantes

• Sauvegardes inutiles éliminées parSauvegardes inutiles éliminées paruse-def eliminationuse-def elimination

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

PlanPlan

IntroductionIntroduction Extensions multimédia pour Extensions multimédia pour

processeur processeur à à usage universelusage universel SAC: SIMD Architecture CompilerSAC: SIMD Architecture Compiler Algorithme de vectorisationAlgorithme de vectorisation Conclusion et perspectivesConclusion et perspectives

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

ConclusionConclusion

• Extensions multimédia très Extensions multimédia très puissantes, mais sous-utiliséespuissantes, mais sous-utilisées

• SAC permet une vectorisation SAC permet une vectorisation automatiqueautomatique

Facile d’utilisationFacile d’utilisationRapideRapidePerformantPerformant

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

PerspectivesPerspectives

• Support du C dans PIPSSupport du C dans PIPS

• Exploiter les spécificités des jeux Exploiter les spécificités des jeux d’instructions ?d’instructions ?

•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 à Réorganisation des données à

l’exécution, en fonction des motifs l’exécution, en fonction des motifs d’accès…d’accès…