Télécharger la présentation
Publié parGratien Voisin Modifié depuis plus de 10 années
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…
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.