Graphics Core Next (GCN) est le nom d'une série de microarchitectures et d'un jeu d'instructions, développés par AMD pour leurs GPU. GCN succède à TeraScale.
GCN est une microarchitecture RISC SIMD, contrastant avec l'architecture VLIW SIMD de TeraScale. GCN nécessite beaucoup plus de transistors que TeraScale, mais offre des avantages pour les calculs sur GPU à usage général (GPGPU) grâce à un compilateur plus simple.
Les puces graphiques GCN ont été fabriquées en CMOS à 28 nm et en FinFET à 14 nm (par Samsung Electronics et GlobalFoundries) et en 7 nm (par TSMC), et sont disponibles sur certains modèles de cartes graphiques AMD Radeon HD 7000, , 200, 300, 400, 500 et RX Vega, y compris la Radeon VII sortie séparément. GCN a également été utilisée dans la partie graphique des unités de traitement accéléré (APU), y compris celles de la PlayStation 4 et de la Xbox One.
Microarchitectures En date de , le jeu d’instructions de Graphics Core Next a connu cinq itérations. Les différences entre les quatre premières générations sont plutôt minimes, mais l’architecture GCN de cinquième génération comporte des processeurs de flux fortement modifiés pour améliorer les performances et prendre en charge le traitement simultané de deux nombres de précision inférieure au lieu d’un seul nombre de plus haute précision.
Traitement des commandes graphiques vignette|250 px|Traitement des commandes dans GCN : chaque moteur de calcul asynchrone (ACE) analyse les commandes entrantes et répartit le travail vers les unités de calcul (CU). Chaque ACE peut gérer jusqu’à 8 files d’attente indépendantes. Les ACE peuvent fonctionner en parallèle avec le processeur de commandes graphiques et deux moteurs DMA. Le processeur de commandes graphiques gère les files d’attente graphiques, les ACE gèrent les files d’attente de calcul et les moteurs DMA gèrent les files d’attente de copie. Chaque file d’attente peut distribuer des éléments de travail sans attendre la fin d’autres tâches, ce qui permet d’entrelacer des flux de commandes indépendants sur le shader du GPU.
Processeur de commandes graphiques Le processeur de commandes graphiques (GCP, Graphics Command Processor) est une unité fonctionnelle de la microarchitecture GCN. Il est notamment responsable de la gestion des shaders asynchrones.
Moteur de calcul asynchrone Le moteur de calcul asynchrone (ACE, Asynchronous Compute Engine) est un bloc fonctionnel distinct servant à des fins informatiques, dont l’objectif est similaire à celui du processeur de commandes graphiques.
Ordonnanceurs Depuis la troisième itération de GCN, le matériel contient deux ordonnanceurs : l’un pour planifier les « fronts d’onde » pendant l’exécution du shader (le CU Scheduler, ou Compute Unit Scheduler) et l’autre pour planifier l’exécution des files d’attente de dessin et de calcul. Ce dernier améliore les performances en exécutant des opérations de calcul lorsque les unités de calcul (CU) sont sous-utilisées en raison de commandes graphiques limitées par la vitesse ou la bande passante du pipeline à fonction fixe. Cette fonctionnalité est connue sous le nom de calcul asynchrone.
Pour un shader donné, les pilotes GPU peuvent également programmer des instructions sur le CPU afin de minimiser la latence.
Processeur de géométrie thumb|Processeur de géométrie. Un processeur de géométrie contient un assembleur de géométrie, un Tesselateur et un assembleur de sommets.
Le Tesselateur est capable de faire de la tessellation matérielle telle que définie par Direct3D 11 et OpenGL 4.5, et a succédé à et à la tessellation matérielle dans TeraScale.
Unités de calcul Une unité de calcul (CU) combine 64 processeurs de shader avec 4 unités de mappage de texture (TMU). Les unités de calcul sont séparées des unités de sortie de rendu (ROP), mais les alimentent. Chaque unité de calcul se compose des éléments suivants : un ordonnanceur de CU une unité de branchement et de messages 4 unités vectorielles SIMD de 16 voies de large (SIMD-VU) 4 fichiers VGPR (Vector General-Purpose Register) de 64 ko 1 unité scalaire (SU) un fichier GPR scalaire de 8 ko un fichier de partage de données local de 64 Ko 4 unités de filtrage de texture 16 unités de récupération-chargement/stockage de texture un cache de niveau 1 (L1) de 16 ko
Quatre unités de calcul sont câblées pour partager un cache d’instructions L1 de 16 ko et un cache de données L1 de 32 ko, tous deux en lecture seule. Un SIMD-VU traite 16 éléments à la fois (par cycle), tandis qu’un SU traite un seul élément à la fois (un/cycle). De plus, le SU gère d’autres opérations, telles que le branchement.
Chaque SIMD-VU dispose d’une mémoire privée où il stocke ses registres. Il existe deux types de registres : les registres scalaires (S0, S1, etc.), qui contiennent chacun un nombre de 4 octets, et les registres vectoriels (V0, V1, etc.), qui représentent chacun un ensemble de 64 nombres de 4 octets. Sur les registres vectoriels, chaque opération se fait en parallèle sur les 64 nombres, ce qui correspond à 64 entrées. Par exemple, il peut fonctionner sur 64 pixels différents à la fois.
Chaque SIMD-VU possède 512 registres scalaires et 256 registres vectoriels.
AMD indique que chaque unité de calcul (CU) de GCN dispose d’un fichier de partage de données local (LDS) de 64 ko.
Ordonnanceur de CU L’ordonnanceur de CU est le bloc fonctionnel matériel qui choisit les fronts d’onde exécutés par le SIMD-VU. Il sélectionne un SIMD-VU par cycle pour l'ordonnancement. Il ne doit pas être confondu avec d’autres ordonnanceurs matériels ou logiciels.
« Front d'onde » Un shader est un petit programme écrit en GLSL qui effectue un traitement graphique, et un est un petit programme écrit en OpenCL qui effectue un traitement GPGPU. Ces processus n’ont pas besoin de tellement de registres, mais ils ont besoin de charger des données à partir de la mémoire système ou graphique. Cette opération s’accompagne d’une latence importante. AMD et Nvidia ont choisi des approches similaires pour masquer cette latence inévitable : le regroupement de plusieurs threads. AMD appelle un tel groupe un « front d'onde », tandis que Nvidia l’appelle un « warp ». Un groupe de threads est l’unité de planification la plus élémentaire des GPU qui implémentent cette approche pour masquer la latence. Il s’agit de la taille minimale des données traitées à la manière SIMD, de la plus petite unité de code exécutable et de la façon de traiter une seule instruction sur tous les threads qu’elle contient en même temps.
Dans tous les GPU GCN, un « front d'onde » se compose de 64 threads, et dans tous les GPU Nvidia, un « warp » se compose de 32 threads.
La solution retenue par AMD est d’attribuer plusieurs fronts d'onde à chaque SIMD-VU. Le matériel distribue les registres aux différents fronts d’onde, et lorsqu’un front d’onde attend un résultat qui se trouve en mémoire, l'ordonnanceur de CU attribue au SIMD-VU un autre front d’onde. Les fronts d’onde sont attribués par SIMD-VU. Les SIMD-VU n’échangent pas de front d’onde. Un maximum de 10 fronts d’onde peuvent être attribués par SIMD-VU (donc 40 par CU).
affiche des tableaux avec la relation entre le nombre de SGPR et de VGPR par rapport au nombre de fronts d’onde, mais essentiellement, pour SGPRS, il est compris entre 104 et 512 par nombre de fronts d’onde, et pour VGPRS, il est de 256 par nombre de fronts d’onde.
On notera qu’en conjonction avec les instructions SSE, ce concept du niveau le plus élémentaire de parallélisme est souvent appelé une « largeur de vecteur ». La largeur du vecteur est caractérisée par le nombre total de bits qu’elle contient.
Unité vectorielle SIMD Chaque unité vectorielle SIMD possède : une unité arithmétique et logique (ALU) vectorielle à 16 voies entier et virgule flottante Un fichier VGPR (Vector General Purpose Register) de 64 ko 10× compteurs de programme 48 bits Un tampon d’instructions pour 10 fronts d'onde (chaque front d’onde est un groupe de 64 threads, soit la taille d’un VGPR logique) un front d’onde de 64 threads parcourt une unité SIMD à 16 voies en quatre cycles.
Chaque SIMD-VU dispose de 10 tampons d’instructions de front d’onde, et il faut 4 cycles pour exécuter un front d’onde.
Blocs d’accélération audio et vidéo De nombreuses implémentations de GCN sont généralement accompagnées de plusieurs autres blocs ASIC d’AMD. Y compris, mais sans s’y limiter, (UVD, décodeur vidéo unifié), le (VCE, moteur de codage vidéo) et .
Moteur de codage vidéo Le moteur de codage vidéo est un ASIC d’encodage vidéo, introduit pour la première fois avec la série Radeon HD 7000.
La version initiale de VCE a ajouté la prise en charge de l’encodage des trames I et P de H.264 au format de pixels YUV420, ainsi que l’encodage temporel SVE et le mode d’encodage d’affichage, tandis que la deuxième version a ajouté la prise en charge des trames B pour les trames I YUV420 et YUV444.
VCE 3.0 faisait partie de la troisième génération de GCN, ajoutant une mise à l’échelle vidéo de haute qualité et le codec HEVC (H.265).
VCE 4.0 faisait partie de l’architecture Vega, et a ensuite été remplacé par .
Mémoire virtuelle unifiée Dans un article paru en 2011, AnandTech a présenté la mémoire virtuelle unifiée prise en charge par Graphics Core Next.
Générations Graphics Core Next 1 thumb|Die shot du GPU Tahiti utilisé dans les cartes graphiques Radeon HD 7950 GHz Edition La microarchitecture GCN 1 a été utilisée dans plusieurs cartes graphiques de la famille Radeon HD 7000. prise en charge de l’adressage 64 bits (espace d’adressage x86-64) avec espace d’adressage unifié pour le CPU et le GPU Le GPU envoie des demandes d’interruption au CPU sur divers événements (tels que les erreurs de page) prise en charge de PCIe 3.0 prise en charge des textures partiellement résidentes, qui permettent la prise en charge de la mémoire virtuelle via les extensions DirectX et OpenGL Prise en charge de , qui ajuste dynamiquement les performances pour rester dans les limites d’un TDP spécifique prise en charge de l'interface de programmation
Des moteurs de calcul asynchrones contrôlent le calcul et la répartition de la charge.
ZeroCore Power ZeroCore Power est une technologie d’économie d’énergie à long terme, qui éteint les unités fonctionnelles du GPU lorsqu’elles ne sont pas utilisées. La technologie AMD ZeroCore Power complète .
Puces GPU discrets (famille Southern Islands) : Hainan Oland Cap-Vert Pitcairn Tahiti
Graphics Core Next 2 thumb|Principe de fonctionnement de sur "Bonaire" thumb|Die shot du GPU Hawaii utilisé dans les cartes graphiques Radeon R9 290 La génération de GCN a été introduite avec la Radeon HD 7790 et se trouve également dans les Radeon HD 8770, R7 260/260X, R9 290/290X, R9 295X2, R7 360 et R9 390/390X, ainsi que dans les APU pour PC de bureau « Kaveri » et pour PC portables « Kaveri » basés sur Steamroller ainsi que dans les APU « Beema » et « Mullins » basés sur Puma. Elle présente plusieurs améliorations par rapport au GCN d’origine, notamment la prise en charge de FreeSync, et une version révisée de la technologie .
La génération de GCN a introduit une entité appelée « Shader Engine » (SE, moteur de shader). Un moteur de shader comprend un processeur de géométrie, jusqu’à 44 « Compute Units » (CU, unités de calcul) (puce Hawaï), des rastériseurs, des ROP et un cache L1. Le processeur de commandes graphiques, les 8 ACE (Asynchronous Compute Engine), les contrôleurs de cache L2 et de mémoire ainsi que les accélérateurs audio et vidéo, les contrôleurs d’affichage, les 2 contrôleurs DMA et l’interface PCIe ne font pas partie d’un moteur de shader.
L’A10-7850K « Kaveri » contient 8 CU (unités de calcul) et 8 ACE (moteurs de calcul asynchrones) pour une planification indépendante et une répartition des éléments de travail.
Lors de l’AMD Developer Summit (APU) en , Michael Mantor a présenté la Radeon R9 290X . Puces