« Fonctionnement d'un ordinateur/Les architectures à parallélisme de données » : différence entre les versions

Contenu supprimé Contenu ajouté
D'après la doc SSE2 ajoute 144 instructions à SSE, les 70 instructions de SSE ne sont pas comprises dans SSE2
Ligne 226 :
A première vue, les schémas du dessus ne ressemblent à rien de connu. Et pourtant on peut déjà faire quelques remarques assez intéressantes.
 
Déjà,Les enprocesseurs théoriede shaders incorporent un cache d'instruction, lesmais processeursils desont shaderscensés contiennentse peupasser de mémoiresmémoire cachescache pour les données, comme pour les processeurs vectoriels. Il faut dire que les processeurs de shaders sont, comme les processeurs vectoriels, conçus pour manipuler des tableaux de données, qui ont une faible localité temporelle : quand on accède à une donnée dans un tableau, il est rare qu'on doive la réutiliser plus tard. Dans ces conditions, utiliser des mémoires caches est contre-productif. Au lieu de chercher à diminuer la latence avec des caches, les processeurs de shaders vont plutôt chercher à masquer cette dernière avec du multithreading matériel. Dans les faits, les cartes graphiques récentes disposent de plus en plus de mémoires caches pour les données, qui sont utiles pour les applications à hautes performance comme pour des calculs d'intelligence artificielle, les calculs scientifiques fortement parallèles et autres, ainsi que pour le rendu 3D.
====Les caches sur une carte graphique====
 
LesEnsuite, processeursles decartes fluxgraphiques modernes ont plusieurs bancs de registres : des bancs de registres locaux ('''Local Register File''') directement connectés aux unités de calcul, un banc de registres global ('''Global Register File''') plus gros, lui-même relié à la mémoire. Le banc de registres global sert d'intermédiaire entre la mémoire RAM et les bancs de registres locaux. Il remplace la mémoire cache et resemble beaucoup à une mémoire de type ''local store''. Le processeur dispose d'instructions pour transférer des données entre les bancs de registres, ainsi qu'avec la mémoire. Outre son rôle d'intermédiaire, le banc de registres global sert à transférer des données entre les bancs de registres locaux, où à stocker des données globales utilisées par des Clusters d'ALU différents. Un processeur de flux possède des instructions capables de transférer des données entre le banc de registre global et la mémoire RAM, qui sont capables de faire des accès mémoires en enjambées, en ''Scatter-Gather'', etc.
Déjà, en théorie, les processeurs de shaders contiennent peu de mémoires caches pour les données, comme pour les processeurs vectoriels. Il faut dire que les processeurs de shaders sont, comme les processeurs vectoriels, conçus pour manipuler des tableaux de données, qui ont une faible localité temporelle : quand on accède à une donnée dans un tableau, il est rare qu'on doive la réutiliser plus tard. Dans ces conditions, utiliser des mémoires caches est contre-productif. Au lieu de chercher à diminuer la latence avec des caches, les processeurs de shaders vont plutôt chercher à masquer cette dernière avec du multithreading matériel.
 
: Dans les faits, les cartes graphiques récentes disposent de plus en plus de mémoires caches pour les données, mais celles-ci ne sont pas utilisées pour le rendu 3D, mais pour les applications à hautes performance comme pour des calculs d'intelligence artificielle, les calculs scientifiques fortement parallèles et autres.
 
Mais attention : si les processeurs de shaders se passent souvent de mémoire cache pour les données, ils ont presque systématiquement un cache d'instructions. Après tout, si l'on doit exécuter ces instructions plusieurs fois de suite sur des données différentes, autant éviter de les charger de la mémoire à chaque fois. Pour éviter cela, les suites d'instructions à exécuter sont stockées dans une petite mémoire une bonne fois pour toutes. Il s'agit bel et bien d'une petite mémoire cache.
 
====Une hiérarchie de bancs de registres====
 
Les processeurs de flux ont plusieurs bancs de registres : des bancs de registres locaux ('''Local Register File''') directement connectés aux unités de calcul, un banc de registres global ('''Global Register File''') plus gros, lui-même relié à la mémoire. Le banc de registres global sert d'intermédiaire entre la mémoire RAM et les bancs de registres locaux. Il remplace la mémoire cache et resemble beaucoup à une mémoire de type ''local store''. Le processeur dispose d'instructions pour transférer des données entre les bancs de registres, ainsi qu'avec la mémoire. Outre son rôle d'intermédiaire, le banc de registres global sert à transférer des données entre les bancs de registres locaux, où à stocker des données globales utilisées par des Clusters d'ALU différents. Un processeur de flux possède des instructions capables de transférer des données entre le banc de registre global et la mémoire RAM, qui sont capables de faire des accès mémoires en enjambées, en ''Scatter-Gather'', etc.
 
[[File:Stream processor registers.png|centre|vignette|upright=2|Hiérarchie de registres d'un processeur de flux.]]