optimisation et parallélisation de code pour processeur à instructions simd multimedia françois...
TRANSCRIPT
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
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
É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
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
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
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…
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)
« 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
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 ?
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
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
EtapesEtapes
• Préparation du codePréparation du codeAtomiseurAtomiseurDéroulage de bouclesDéroulage de bouclesElimination des réductionsElimination des réductionsAssignement uniqueAssignement unique
• VectorisationVectorisation
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
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
É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
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]
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
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
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
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
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
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
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
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
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…