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

Contenu supprimé Contenu ajouté
Ligne 218 :
===La hiérarchie mémoire d'une carte graphique===
 
La grande quantité de processeurs, cœurs et unités de calcul a des conséquences sur la hiérarchie mémoire, qui doit gérer un grand nombre d'accès mémoire simultanés : qui dit plein d'instructions en parallèle qui travaillent sur des données indépendantes dit aussi plein de données indépendantes à lire ou écrire ! La hiérarchie mémoire d'une carte graphique ressemble à celle-ci, si on omet les très nombreux caches spécialisés pour le rendu 3D et quelques caches généralistes qui se retrouvent un peu partout dans la hiérarchie mémoire.
 
[[File:Stream processor.png|centre|vignette|upright=2|Stream processor]]
 
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.
 
Les processeurs de shaders incorporent un cache d'instruction, mais ils sont censés se passer de mémoire cache 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.
 
La mémoire RAM d'unune processeurcarte de fluxgraphique est souvent une mémoire multibanques, comme avec les processeurs vectoriels. Elle a souvent un gros débit binaire (pour rappel, le débit binaire d'une mémoire est le nombre de bits qu'elle peut transférer en une seule seconde). Par contre, le temps d'accès est généralement assez mauvais.
Ensuite, les cartes graphiques 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.
 
[[File:Stream processor registers.png|centre|vignette|upright=2|Hiérarchie de registres d'un processeur de flux.]]
 
On peut se demander pourquoi utiliser plusieurs couches de registres ? Le fait est que les processeurs de flux disposent de plus d'une centaine ou d'un millier d'ALU ! Alimenter ces unités de calcul en opérandes demanderait un banc de registres énorme, lent, et qui chaufferait beaucoup trop. Pour garder un banc de registres rapide et pratique, on est obligé de limiter le nombre d'unités de calcul connectées dessus, ainsi que le nombre de registres contenus dans le banc de registres. La solution est d'utiliser une hiérarchie de registres, similaire à la hiérarchie mémoire d'un ordinateur. Cela garantit que les bancs de registres locaux sont petits et rapides, secondés par un banc de registre global d'appoint, de forte capacité, mais plus lent.
 
La mémoire RAM d'un processeur de flux est souvent une mémoire multibanques, comme avec les processeurs vectoriels. Elle a souvent un gros débit binaire (pour rappel, le débit binaire d'une mémoire est le nombre de bits qu'elle peut transférer en une seule seconde). Par contre, le temps d'accès est généralement assez mauvais.
 
<noinclude>