Architectures vectorielles

publicité
Architectures vectorielles
Architecture des microprocesseurs – GIF-3000
Professeur : Christian Gagné
Semaine 10 : 6 novembre 2012
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
1 / 43
Partie I
SIMD
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
2 / 43
Rappel : taxonomie de Flynn (1966)
Single Instruction, Single Data stream (SISD) : ordinateurs à un
processeur
Single Instruction, Multiple Data stream (SIMD) : la même
instruction est exécutée sur plusieurs processeurs, permettant ainsi un
parallélisme de données
I
Correspond aux architectures vectorielles et aux GPU
Multiple Instruction, Single Data stream (MISD) : aucun ordinateur
commercial basé sur cette organisation n’a été construit jusqu’à
présent
Multiple Instruction, Multiple Data stream (MIMD) : chaque
processeur exécute ses instructions propres sur des données
différentes, ce qui permet un parallélisme de tâches
I
Correspond aux architectures multi-cœurs, SMP, grappes de calcul,
supercalculateurs, centres informatiques, etc.
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
3 / 43
Rappel : classes et approches de parallélisme
Classes de parallélismes
I
I
Parallélisme de données : plusieurs données peuvent être traitées
simultanément
Parallélisme de tâches : plusieurs tâches peuvent être traitées
indépendamment et largement en parallèle
Approches pour exploiter le parallélisme
I
I
I
I
Parallélisme d’instructions : exploite le parallélisme de données, à
l’aide du compilateur, d’un pipeline et d’une exécution spéculative
Architectures vectorielles et GPU : exploite le parallélisme de
données en appliquant une instruction à un ensemble de données
Parallélisme multifilaire : effectue du parallélisme à l’aide de matériel
permettant interaction étroite entre plusieurs fils d’exécution parallèles
Parallélisme de requêtes : permet un parallélisme par l’exécution de
tâches fortement découplées
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
4 / 43
Architectures SIMD pour parallélisme de données
Architectures SIMD idéales pour applications avec bonne densité de
parallélisme de données
I
I
Calcul matriciel dans les applications scientifiques
Applications multimédias pour traitement de l’image et du son
Meilleure efficacité énergétique avec SIMD que MIMD
I
I
Une instruction lancée pour traiter plusieurs données
Particulièrement pertinent avec dispositifs mobiles personnels
Architectures SIMD populaires
I
I
I
Architectures vectorielles
Instructions SIMD multimédias des processeurs modernes
Processeurs graphiques (GPU)
F
Pas couvert dans le cours
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
5 / 43
Gains avec architectures SIMD
Architectures MIMD (multi-cœurs) reçues beaucoup d’attention ces
dernières années
I
I
I
Essentiel des gains possibles avec le parallélisme d’instructions sont
maintenant acquis
Quantité de transistors disponibles sur les puces continue de croı̂tre
(Loi de Moore)
Ajouter des cœurs permet des gains en performance avec peu d’efforts
Cependant, système MIMD reste difficile à programmer
I
SIMD permet au programmeur de développer un programme séquentiel
Croissance des performances projetées dans la prochaine décennie
I
I
MIMD : deux cœurs de plus par puce à chaque 2 ans
SIMD : nombre de données traitées par instructions double à chaque 4
ans
Gain potentiel avec architectures SIMD est 2 fois plus important
qu’avec MIMD
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
6 / 43
Croissance du parallélisme projetée, processeurs x86
1000
MIMD*SIMD (32 b)
MIMD*SIMD (64 b)
SIMD (32 b)
SIMD (64 b)
Potential parallel speedup
MIMD
100
10
1
2003
GIF-3000 (U. Laval)
2007
2011
2015
Architectures vectorielles
2019
2023
C. Gagné
7 / 43
Partie II
Architectures vectorielles
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
8 / 43
Architectures vectorielles
Architectures vectorielles
I
I
I
Pipeline spécialisé pour application d’opérations sur plusieurs données
Chaque opération vectorielle peut traiter des dizaines de données à la
fois
Proposé il y a plus de 30 ans, utilisé dans les supercalculateurs
F
I
Jusqu’à récemment considéré comme trop coûteux pour les
microprocesseurs
Coûteux en nombre de transistors et en bande passante à la mémoire
Principe de fonctionnement
I
I
I
I
Lit de larges ensembles de données distribuées en mémoire
Place ces ensembles dans de grands registres séquentiels
Effectue des opérations sur ces registres séquentiels
Écrit les résultats en mémoire
Chaque opération traite un vecteur de données
I
I
Dizaines d’opérations registre-registre indépendantes
Permet l’amortissement de la latence des accès mémoire
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
9 / 43
Processeur VMIPS
Processeur VMIPS
I
I
I
Utilisé pour illustrer les propos, n’existe pas d’implantation réelle
Inspiré du Cray-1 (1976), un célèbre supercalculateur à architecture
vectorielle
Partie scalaire du jeux d’instructions correspond à MIPS
Composantes de VMIPS
I
I
I
I
Huit registres vectoriels, chacun contenant 64 valeurs représentées sur
64 bits
Cinq unités fonctionnelles, pleinement pipelinées
Unités de lecture/écriture vectorielles pleinement pipelinées
Registres scalaires de MIPS
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
10 / 43
Structure de l’architecture VMIPS
Main memory
Vector
load/store
FP add/subtract
FP multiply
FP divide
Vector
registers
Integer
Logical
Scalar
registers
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
11 / 43
Instructions VMIPS
Registres de VMIPS
I
I
Registres vectoriels : V0 à V7
Registre de la longueur du vecteur
F
I
Utilisé lorsque la taille naturelle des vecteurs n’est pas sur un multiple
de 64
Registre du masque du vecteur
F
Pour gérer efficacement les énoncés conditionnels
Instructions de VMIPS
I
I
I
Opérations vecteur-vecteur (suffixe VV)
Opérations vecteur-scalaire (suffixe VS)
Lecture et écriture de vecteurs (LV et SV)
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
12 / 43
Instructions vectorielles de VMIPS
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
13 / 43
Consommation énergétique et architectures vectorielles
Enjeux de la consommation énergétique
I
I
I
Puissance consommée est un enjeux important considérant limites du
refroidissement à l’air
Architectures avec exécution dans le désordre sont complexes et
énergivores
Comment obtenir hautes performances sans augmenter
significativement consommation énergétique ?
Architectures vectoriels répondent bien à cette tendance
I
I
Peut augmenter significativement la performance de processeurs
scalaires avec exécution dans l’ordre, sans augmenter énormément la
complexité et la consommation
Réimplantations vectorielles plus efficaces de programmes ayant déjà de
bonnes performances sur processeurs avec exécution dans le désordre
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
14 / 43
Attraits des architectures vectorielles
Flexibilité dans la conception de processeurs vectoriels
I
I
Traitements des éléments composant les vecteurs peuvent se faire de
différentes façons
Différents compromis entre performance et consommation énergétique
Indépendance des données formant un vecteur
I
I
Traitements fortement parallèles possibles, par duplication des unités
fonctionnelles
Ne requiert pas de vérification de dépendances par le matériel
Vecteurs peuvent traiter différentes configuration de tailles/nombre
d’éléments
I
I
64 données sur 64 bits, ou 128 données sur 32 bits, ou 256 données sur
16 bits, ou même 512 données sur 8 bits
Représentations sur nombre réduit de bits particulièrement
intéressantes pour applications multimédias
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
15 / 43
Exemple : DAXPY
DAXPY : Double precision a × X + Y
Code MIPS de DAXPY :
Loop:
L.D
DADDIU
L.D
MUL.D
L.D
ADD.D
S.D
DADDIU
DADDIU
DSUBU
BNEZ
F0,a
R4,Rx,#512
F2,0(Rx)
F2,F2,F0
F4,0(Ry)
F4,F4,F2
F4,0(Ry)
Rx,Rx,#8
Ry,Ry,#8
R20,R4,Rx
R20,Loop
Code VMIPS correspondant :
L.D
LV
MULVS.D
LV
ADDVV.D
SV
F0,a
V1,Rx
V2,V1,F0
V3,Ry
V4,V2,V3
V4,Ry
578 instructions MIPS exécutées vs 6 instructions avec VMIPS
I
Chaque instruction vectorielle de VMIPS prend cependant 64 cycles
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
16 / 43
Vectorialisation du code
Retrait des instructions de contrôle de la boucle avec VMIPS
I
4 instructions de contrôle sur les 9 de la boucle MIPS
Code vectorialisable : compilateur peut produire un programme
fonctionnant essentiellement en mode vectoriel
I
Code vectorialisable pour une boucle s’il n’y a pas de dépendance entre
les itérations
Blocage du pipeline réduit avec code vectoriel
I
I
Avec code MIPS, chaque S.D doit attendre après le ADD.D, qui doit
attendre après le MUL.D
Avec VMIPS, une seule attente sur le premier élément des vecteurs
F
I
I
Autres éléments des vecteurs suivent dans le pipeline
Appelé chaı̂nage dans les architectures vectorielles
Dans l’exemple, réduction de la fréquence des blocages d’un facteur
64×
Effet similaire au déroulement de boucles sur le blocage du pipeline
I
Sans le surcoût important sur le nombre d’instructions devant être
exécutées
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
17 / 43
Pipelines, convois et chaı̂nage
Architectures vectorielles modernes utilisent des pipelines parallèles
I
I
I
Chaque unité fonctionnelle peut donc traiter plusieurs éléments à
chaque cycle
Cependant, architectures modernes peuvent avoir des unités
fonctionnelles non-pipelinées
Pour la discussion, implantation VMIPS utilise un seul pipeline dans
chaque unité fonctionnelle
F
Temps d’exécution d’une instruction vectorielle correspond donc au
nombre d’éléments
Convoi : suite d’instructions vectorielles pouvant s’exécuter ensemble
I
I
I
Regroupe la suite d’instructions pouvant s’exécuter sans aléa structurel
Chaı̂nage permet d’intégrer plusieurs instructions dans un convoi même
avec dépendances RAW
Pour l’analyse, suppose que l’exécution d’un convoi est terminée avant
l’exécution d’autres instructions
Chaı̂nage fait de l’envoi de données entre les unités fonctionnelles
traitant un même convoi
I
Écriture simultanée possible à plusieurs éléments distincts d’un même
registre vecteur
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
18 / 43
Temps d’exécution d’instructions vectorielles
Chime (carillon) : temps d’exécution d’un convoi d’instructions
vectorielles
I
I
Une séquence d’instructions vectorielles formées de m convois prend
donc m chimes
Pour VMIPS, avec vecteur de n éléments, temps d’exécution de m
convois correspond approximativement à m × n cycles
Mesure en chime ne tient pas compte de certaines approximations
I
Ne tient pas compte du nombre d’instructions vectorielles pouvant être
lancées simultanément
F
I
La plupart des processeurs vectoriels permettent le lancement d’une
seule instruction vectorielle par cycle
Reste tout de même une bonne approximation avec de grands vecteurs
Temps de lancement est généralement négligeable relativement au
temps d’un chime
I
Cependant le temps de démarrage des pipelines d’unités fonctionnelles
vectorielles peut être significatif
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
19 / 43
Exemple d’estimation du temps d’exécution
LV
MULVS.D
LV
ADDVV.D
SV
V1,Rx
V2,V1,F0
V3,Ry
V4,V2,V3
V4,Ry
;
;
;
;
;
Lecture vecteur X
Multiplication vecteur-scalaire
Lecture vecteur Y
Addition des deux vecteurs
Écriture résultat dans Y
Combien de chimes cette séquence vectorielle prendra à s’exécuter ?
I
On suppose une seule copie de chaque unité fonctionnelle
Solution : la séquence comporte trois convois, donc prendra trois
chimes
1
2
3
LV V1,Rx
LV V3,Ry
SV V4,Ry
MULVS.D V2,V1,F0
ADDVV.D V4,V2,V3
Cette séquence prend donc une moyenne de 1,5 cycles par instruction
à virgule flottante, en ignorant les temps de lancement
I
Trois chimes pour deux instructions à VF (MULVS.D et ADDVV.D)
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
20 / 43
Partie III
Optimisation des architectures vectorielles
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
21 / 43
Questions d’optimisation pour architectures vectorielles
Comment traiter plus d’un élément par cycle ?
Comment traiter des vecteurs n’ayant pas la même taille que les
registres vecteurs ?
Comment gérer des énoncées conditionnels avec les opérations
vectorielles ?
Quels sont les besoins des opérations vectorielles relativement au
système de mémoire ?
De quelle façon gère-t’on les matrices multidimensionnelles avec ces
architectures ?
De quelle façon gère-t’on les matrices creuses (sparse matrices) ?
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
22 / 43
Couloirs d’exécution parallèles
Éléments formant un vecteur sont indépendants, donc aisément
parallélisables
I
I
I
Exécution dans des unités fonctionnelles fortement pipelinées
Exécution simultanée dans de multiples unités fonctionnelles (pas
pipelinées)
Exécution dans une combinaison d’UF avec pipelines parallèles et
pipelinées
Exploiter indépendance des éléments pour plusieurs instructions
I
I
I
Dans VMIPS, élément N d’un vecteur interagit qu’avec éléments à la
même position des autres vecteurs
Donc, on peut assigner couloir d’exécution pour chaque position
d’élément dans les vecteurs
Ces couloirs parallèles permettent d’augmenter significativement débit
des unités fonctionnelles
Réduit significativement nombre de cycles pour exécuter un chime
I
I
Avec 4 couloirs parallèles, vecteurs de 64 éléments prennent 16 cycles
Requiert cependant de longs vecteurs, sinon exécution trop rapide et
taux de lancement ne suivra pas
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
23 / 43
Couloirs d’exécution parallèles
Element group
(a)
GIF-3000 (U. Laval)
(b)
Architectures vectorielles
C. Gagné
24 / 43
Implantation des couloirs d’exécution parallèles
Composantes de chaque couloir d’exécution
I
I
Éléments des registres vecteurs associés au couloir
Un pipeline d’exécution pour chaque unité fonctionnelle
Indépendance des couloirs implique aucune communication entre eux
I
Donc pas de câblage complexe et de ports de registres pour
transmettre l’information entre eux
Possible d’exécuter 64 opérations par cycle !
I
2 ALU et 2 unités load/store dans 16 couloirs
Approche populaire pour augmenter la performance de processeurs
vectoriels
I
I
I
Augmentation faible de la complexité de contrôle
Pas de changement au jeu d’instructions
Permet de faire un compromis entre l’aire des dés, la fréquence
d’horloge, le voltage et l’énergie consommée, sans affecter la
performance
F
Couper de moitié la fréquence d’horloge et doubler le nombre de
couloirs résulte en la même performance
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
25 / 43
Implantation de quatre couloirs parallèles
Lane 0
FP add
pipe 0
Vector
registers:
elements
0, 4, 8, . . .
FP mul.
pipe 0
Lane 1
Lane 2
Lane 3
FP add
pipe 1
FP add
pipe 2
FP add
pipe 3
Vector
registers:
elements
1, 5, 9, . . .
Vector
registers:
elements
2, 6, 10, . . .
Vector
registers:
elements
3, 7, 11, . . .
FP mul.
pipe 2
FP mul.
pipe 3
FP mul.
pipe 1
Vector load-store unit
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
26 / 43
Taille variable des vecteurs
Peu probable que la taille naturel d’un vecteur corresponde au nombre
d’éléments des registres (ou à un multiple de)
I
I
La taille d’une opération vectorielle est souvent inconnue à la
compilation
for (i=0; i<n; ++i)
Y[i] = a * X[i] + Y[i];
Taille du vecteur dépend de n, qui pourrait changer au cours de
l’exécution
Solution : registre donnant la longueur du vecteur (VLR,
vector-length register)
I
I
I
Contrôle les opérations vectorielles, incluant load-store
Ne peut excéder la taille maximale des registres vecteurs (MVL,
maximum vector length)
Donc, même code peut être exécuté avec différentes tailles de vecteurs
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
27 / 43
Strip mining
Strip mining : générer du code de sorte que chaque itération sera sur
un vecteur de taille égale ou inférieure à la taille maximale
Exemple avec DAXPY :
m = 0;
VL = (n % MVL);
for (j=0; j<=(n/MVL); ++j) {
for (i=m; i<(m+VL); ++i)
Y[i] = a * X[i] + Y[i];
m += VL;
VL = MVL;
}
I Première itération sur le reste entre n et MVL
I Autres itérations sur vecteurs de taille MVL
Value of j
Range of i
GIF-3000 (U. Laval)
0
1
m
0
..
..
(m − 1) (m − 1)
+ MVL
2
3
...
...
n/MVL
(m + MVL) (m + 2 × MVL) . . .
..
..
(m − 1)
(m − 1)
+ 2 × MVL + 3 × MVL
...
(n − MVL)
..
(n − 1)
Architectures vectorielles
C. Gagné
28 / 43
Gestion d’énoncés conditionnels
Énoncés conditionnels limite le niveau de vectorialisation possible
I
I
Exemple de boucle avec énoncé conditionnel :
for (i=0; i<64; ++i) {
if (X[i] != 0) X[i] -= Y[i];
}
Ne peut être exécuté tel quel dans une opération vectorielle
F
Mais on pourrait vectorialiser l’exécution seulement avec les itérations
où X[i] != 0
Solution : masque de contrôle de vecteur
I
I
I
Détermine la condition de contrôle pour chaque élément des vecteurs
Valeur booléenne pour chaque élément, traite l’élément pour une valeur
à 1
Opérations pour calculer valeur du masque et tout réinitialiser à 1
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
29 / 43
Code VMIPS avec masque de contrôle
Exemple de code VMIPS avec masque de contrôle :
LV
LV
L.D
SNEVS.D
SUBVV.D
SV
V1,Rx
V2,Ry
F0,#0
V1,F0
V1,V1,V2
V1,Rx
;
;
;
;
;
;
Lecture vecteur X
Lecture vecteur Y
Assigner valeur 0 à F0
VM(i) vaut 1 si Vi(1)!=F0
Soustraction sous masque VM
Écrire résultat dans X
Version avec masque de contrôle fait du travail inutile
I
Reste que même avec plusieurs zéros dans le masque, version
vectorielle peut être significativement plus rapide que version scalaire
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
30 / 43
Banques de mémoire
Architectures vectorielles sont exigeantes en accès mémoires
I
I
I
I
Lecture/écriture implique autant d’accès aux données que d’éléments
dans le vecteur
Données d’un vecteur ne sont pas nécessairement séquentielles en
mémoire
Plusieurs architectures supportent plusieurs lectures/écritures
simultanées
Architectures vectorielles modernes supportent également exploitation
de plusieurs processeurs
Utilisation de banques de mémoire permet des accès multiples
simultanés
I
I
I
I
Banques de mémoire : séparer la mémoire principales en plusieurs
morceaux indépendants, éléments contiguës dans banques distinctes
Accès à chaque banque peut être simultané
Adresses peuvent être contrôlées indépendamment par chaque banque
Pour de bonnes performances avec architectures vectorielles, utiliser un
grand nombre de banques indépendantes
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
31 / 43
Tableaux multidimensionnels
Code de multiplication de matrices en C :
for (i=0; i<100; ++i) {
for (j=0; j<100; ++j) {
A[i][j] = 0.0;
for (k=0; k<100; ++k) {
A[i][j] += B[i][k] * D[k][j];
}
}
}
I On peut utiliser du strip mining pour la boucle interne (compteur k)
F
I
Positions en mémoire des éléments adjacents ne seront pas séquentielles
En langage C, position en mémoire de tableau 2D est ligne à ligne
F
Donc, accès à valeur D[k][j] à chaque itération de boucle interne est
séparé par 8 × nombre d’éléments d’une ligne de D
Foulée (stride) : distance entre chaque élément collecté dans un
registre vectoriel
I
Foulée de D est de 100 éléments (800 octets) ; foulée de B est de 1
élément (8 octets)
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
32 / 43
Traitement de tableaux multidimensionnels
Avec architecture vectorielle, foulée peut être différente de 1
I
I
Données non-séquentielles en mémoire peuvent ainsi être colligées dans
un registre
Permet une gestion de caches efficace pour les accès mémoire dans
certains cas
Avec VMIPS, instructions LVWS et SVWS permettent lecture/écriture
avec foulée non-unitaire
Support de foulée complexifie le système de mémoire
I
I
Avec foulée non-unitaire, possible d’accéder à la même banque de
mémoire fréquemment
Conflits d’accès simultanés à une banque peuvent générer des blocages
F
Blocages surviennent lorsque :
Nombre de banques
< Temps d’attente d’une banque
PPCM(Foulée,Nombre de banques)
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
33 / 43
Exemple : temps accès mémoire avec foulée
Supposons 8 banques, temps d’attente d’une banque de 6 cycles et
latence d’accès mémoire de 12 cycles
I
Temps de lecture d’un vecteur de 64 éléments avec une foulée de 1 ?
F
I
Comme nombre de banque > foulée, lecture prend 12 + 64 = 72 cycles,
soit 1,2 cycles par élément
Temps de lecture d’un vecteur avec foulée de 32 ?
F
F
F
F
PPCM(Foulée,Nombre de banques) = PPCM(32,8) = 32
Nombre de banques / PPCM(32,8) = 8 / 32 = 4
4 < 6 ⇒ collisions à chaque accès subséquent au premier
Temps de lecture : 12 + 1 + 6 × 63 = 391 cycles, soit 6,1 cycles par
élément
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
34 / 43
Matrices creuses
Matrices creuses (sparse matrices) : matrice contenant une majorité
de valeurs nulles
I
I
I
Courantes dans de nombreuses applications numériques
Conserver les matrices explicitement est souvent très inefficace
Conserver plutôt structure indirecte, dans une liste de (indices,valeurs)
des valeurs non-nulles
Exemple d’une boucle avec matrices creuses :
for (i=0; i<n; ++i) {
A[K[i]] += C[M[i]];
}
I
I
A et C sont des matrices creuses et K et M donnent les indices des
valeurs non-nulles
On suppose que A et C ont toutes deux n éléments non-nuls
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
35 / 43
Gestion des matrices creuses
Opérations de collecte-dispersion (gather-scatter) : utiliser un vecteur
d’indices pour lecture/écriture
I
Opérations LVI et SVI font collecte et dispersion des données
Exemple de la boucle avec matrices creuses :
LV
LVI
LV
LVI
ADDVV.D
SVI
Vk,Rk
Va,(Ra+Vk)
Vm,Rm
Vc,(Rc+Vm)
Va,Va,Vc
(Ra+Vk),Va
;
;
;
;
;
;
Lecture K
Lecture A[K[]]
Lecture M
Lecture C[M[]]
Addition
Écriture A[K[]]
Instructions de collecte-dispersion sont pratiques et peuvent être
pipelinées
I
I
I
Elles sont en général plus lentes que des instructions de lecture/écriture
standards
Une adresse distincte pour chaque élément, implique une latence
significative
Adresses individuelles génèrent plus de conflits d’accès mémoires
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
36 / 43
Partie IV
Extensions SIMD pour multimédia
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
37 / 43
Extensions SIMD pour multimédia
Nombreuses applications multimédias utilisent des données
représentées sur peu de bits
I
I
Pixels représentés sur 32 bits (3×8 bits pour RGB + 8 bits de
transparence)
Échantillons audios sur 8 ou 16 bits
En modifiant la gestion des retenues d’un additionneur sur 256 bits,
plusieurs opérations peuvent être faites simultanément
I
32 additions d’opérandes 8 bits, 16 additions d’opérandes 16 bits, 8
additions d’opérandes 32 bits, ou 4 additions d’opérandes 64 bits
Extensions SIMD pour multimédia
I
I
I
Extensions aux microprocesseurs modernes (ex. MMX, SSE, AVX dans
x86)
Instructions similaires à celles d’architectures vectorielles
Cependant, utilise un petit nombre de registres de plus petites tailles
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
38 / 43
Extensions SIMD multimédias vs opérations vectorielles
Éléments manquants dans extensions SIMD multimédias
I
N’incluent pas de registre de longueur de vecteur
F
I
I
Dans MMX, SSE et AVX, le nombre d’opérandes est fixé dans
l’opcode, ce qui a mené a des centaines d’opérations distinctes
N’offrent pas de mode d’adressage sophistiqué comme les accès avec
foulées et les opérations de collecte-dispersion
N’offrent pas de masque de contrôle de registres pour exécution
conditionnelle
Ces omissions font que les compilateurs et les programmeurs ont de la
difficulté à utiliser ces extensions dans leurs programmes
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
39 / 43
Historique des extensions SIMD multimédias x86
MMX (1996)
I
Réutilise les registres à virgule flottante 64 bits
F
I
I
8 opérations 8 bits ou 4 opérations 16 bits simultanément
Variété d’opérations : min, max, masques et opérations conditionnelles,
opérations de DSP, etc.
Accès mémoires via instructions à virgule flottante 64 bits
SSE (1999)
I
I
I
Registres sur 128 bits distincts
Opérations sur nombres à virgule flottante à simple précision (32 bits)
SSE2 et + ajoutent des opérations sur nombres à VF à double précision
AVX (2010)
I
Double la taille des registres à 256 bits
F
I
Donc deux fois plus d’éléments peuvent être traités simultanément
Dispositions pour étendre la taille des registres à 512 bits et 1024 bits
dans le futur
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
40 / 43
Popularité des extensions SIMD
Objectif des extensions : accélérer les traitements de librairies
spécialisées
I
Difficile pour les compilateurs d’exploiter ces extensions
Raisons de la popularité de ces instructions
I
I
I
I
Coût faible et facilité d’implantation
Requiert beaucoup moins de stockage (registres) que architectures
vectorielles
Pas besoin de grande bande passante à la mémoire ou de gérer les
manquements de pages
Vecteurs courts de taille fixe sont plus versatiles
Également, un certain scepticisme relativement aux architectures
vectorielles reste présent chez les concepteurs
I
I
Dans le passé, plusieurs problèmes ont jeté du discrédit sur
architectures vectorielles
Principaux problèmes sont cependant réglés depuis
GIF-3000 (U. Laval)
Architectures vectorielles
C. Gagné
41 / 43
Exploitation des extensions SIMD
Nature ad hoc des extensions SIMD rend leur utilisation difficile par le
compilateur
I
I
I
Versions plus récentes sont plus cohérentes, rendant leur utilisation plus
aisées par le compilateur
Compilateurs récents tentent de les utiliser pour applications
scientifiques, lorsqu’il y a beaucoup d’opérations à VF
Accès mémoire doivent cependant être alignés sur la largeur des
registres des extensions
Intensité arithmétique : ratio du nombre d’opérations à VF par octet
de mémoire accédé
O(1)
O(log(N))
O(N)
Arithmetic Intensity
Sparse
matrix
(SpMV)
Structured
grids
(Stencils,
PDEs)
GIF-3000 (U. Laval)
Spectral
methods
(FFTs)
Structured
grids
(Lattice
methods)
Architectures vectorielles
Dense
matrix
(BLAS3)
N-body
(Particle
methods)
C. Gagné
42 / 43
Modèle roofline
Comment caractériser la performance de processeurs selon l’intensité
arithmétique ?
I
I
Calculs à faible densité : limités par les accès mémoires
Calculs à plus forte densité : limités par la capacité de traitement du
processeur
Comparaison entre un processeur standard et un processeur vectoriel
NEC SX-9 est un supercalculateur (2008) coûtant des millions de
dollars
32
16
(S 2 G
tre B
am /s
)
Double precision GLFOP/sec
102.4 GFLOP/sec
128
64
256
16
8
4
2
1/8 1/4 1/2 1
2
4
8
Arithmetic intensity
GIF-3000 (U. Laval)
16
Intel Core i7 920
(Nehalem)
128
64
42.66 GFLOP/sec
32
16
8
16
(S .4 G
tre B
am /s
)
NEC SX-9 CPU
256
Double precision GLFOP/sec
I
4
2
1/8 1/4 1/2 1
2
4
8
Arithmetic intensity
Architectures vectorielles
16
C. Gagné
43 / 43
Téléchargement