Graphics Core Next (GCN) é o codinome de uma série de microarquiteturas e uma arquitetura de conjunto de instruções que foram desenvolvidas pela AMD para suas GPUs como sucessoras de sua microarquitetura TeraScale. O primeiro produto com GCN foi lançado em 9 de janeiro de 2012.

GCN é uma microarquitetura SIMD de conjunto de instruções reduzido que contrasta com a arquitetura SIMD de Very Long Instruction Word do TeraScale. O GCN requer consideravelmente mais transístores que o TeraScale, mas oferece vantagens para computação de GPU de uso geral (GPGPU) devido a um compilador mais simples.

Os chips gráficos GCN foram fabricados com CMOS a 28 nm, e com FinFET em 14 nm (pela Samsung Electronics e GlobalFoundries) e 7 nm (pela TSMC), disponível em modelos selecionados nas séries de placas de vídeo Radeon HD 7000, HD 8000, 200, 300, 400, 500 e Vega da AMD, incluindo a Radeon VII lançada separadamente. O GCN também foi usado na parte gráfica das Unidades de Processamento Acelerado (APUs), incluindo aquelas no PlayStation 4 e no Xbox One.

O GCN foi sucedido pela microarquitetura RDNA e pela arquitetura do conjunto de instruções em 2019.

Conjunto de instruções O conjunto de instruções GCN é de propriedade da AMD e foi desenvolvido especificamente para GPUs. Não possui micro-operação para divisão.

A documentação está disponível para: o conjunto de instruções do Graphics Core Next 1, o conjunto de instruções do Graphics Core Next 2, os conjuntos de instruções Graphics Core Next 3 e 4, o conjunto de instruções do Graphics Core Next 5 e arquitetura do conjunto de instruções "Vega" de 7 nm (também conhecida como Graphics Core Next 5.1).

Um backend do compilador LLVM está disponível para o conjunto de instruções GCN. É usado pelo Mesa 3D.

O GNU Compiler Collection 9 oferece suporte ao GCN 3 e ao GCN 5 desde 2019 para programas autônomos de thread única, com o GCC 10 também sendo descarregado via OpenMP e OpenACC.

MIAOW é uma implementação RTL de código aberto da microarquitetura AMD Southern Islands GPGPU.

Em novembro de 2015, a AMD anunciou sua Iniciativa Boltzmann, que visa permitir a portabilidade de aplicativos baseados em CUDA para um modelo de programação C++ comum.

No evento Super Computing 15, a AMD exibiu um Heterogeneous Compute Compiler (HCC), um driver Linux headless e uma infraestrutura de tempo de execução HSA para computação de alto desempenho em classe de cluster, e uma ferramenta Heterogeneous-compute Interface for Portability (HIP) para portar aplicativos CUDA para o modelo C++ comum mencionado anteriormente.

Microarquiteturas Em julho de 2017, o conjunto de instruções do Graphics Core Next teve cinco iterações. As diferenças entre as quatro primeiras gerações são mínimas, mas a arquitetura GCN de quinta geração apresenta processadores de fluxo bastante modificados para melhorar o desempenho e suportar o processamento simultâneo de dois números de menor precisão no lugar de um único número de maior precisão.

Processamento de comando

Graphics Command Processor O Processador de Comando Gráfico (Graphics Command Processor, GCP) é uma unidade funcional da microarquitetura GCN. Entre outras tarefas, é responsável pelo manuseio de shaders assíncronos.

Asynchronous Compute Engine O Asynchronous Compute Engine (ACE) é um bloco funcional distinto que atende a propósitos de computação, cuja finalidade é semelhante à do Processador de Comando Gráfico.

Agendadores Desde a terceira iteração do GCN, o hardware contém dois agendadores: um para agendar "frentes de onda" durante a execução do shader (o CU Scheduler ou Compute Unit Scheduler) e o outro para agendar a execução de filas de desenho e computação. Este último ajuda no desempenho executando operações de computação quando as unidades de computação (CUs) são subutilizadas devido a comandos gráficos limitados pela velocidade do pipeline de função fixa ou largura de banda. Essa funcionalidade é conhecida como Async Compute.

Para um determinado shader, os drivers da GPU também podem agendar instruções na CPU para minimizar a latência.

Geometric processor

O processador de geometria (Geometric processor) contém um Montador de Geometria, um Tesselador e um Montador de Vértices.

O Tesselator é capaz de fazer tesselação em hardware conforme definido pelo Direct3D 11 e OpenGL 4.5 (veja AMD 21 de janeiro de 2017), e sucedeu o ATI TruForm e a tesselação de hardware no TeraScale como o então mais recente núcleo de propriedade intelectual de semicondutores da AMD.

Compute units Uma unidade de computação (Compute units, UC) combina 64 processadores de shader com 4 unidades de mapeamento de textura (TMUs). As unidades de computação são separadas, mas alimentam, as unidades de saída de renderização (ROPs). Cada unidade de computação consiste no seguinte:

um CU scheduler uma Branch & Message Unit 4 SIMD Vector Units de 16 faixas de largura (SIMD-VUs) 4 arquivos de 64 KiB de registro de uso geral de vetores (VGPR) 1 scalar unit (SU) um arquivo GPR scalar de 8 KiB um compartilhamento de dados local de 64 KiB 4 Texture Filter Units 16 Texture Fetch Load/Store Units um Cache de 16 KiB de nível 1 (L1)

Quatro unidades de computação são conectadas para compartilhar um cache de instruções L1 de 16 KiB e um cache de dados L1 de 32 KiB, ambos somente leitura. Um SIMD-VU opera em 16 elementos por vez (por ciclo), enquanto um SU pode operar em um por vez (um/ciclo). Além disso, o SU lida com algumas outras operações, como ramificação.

Cada SIMD-VU tem alguma memória privada onde armazena seus registradores. Existem dois tipos de registradores: registradores escalares (S0, S1, etc.), que contêm números de 4 bytes cada, e registradores vetoriais (V0, V1, etc.), que representam cada um um conjunto de 64 números de 4 bytes. Nos registradores vetoriais, cada operação é feita em paralelo nos 64 números. que correspondem a 64 entradas. Por exemplo, ele pode funcionar em 64 pixels diferentes ao mesmo tempo (para cada um deles as entradas são ligeiramente diferentes e, portanto, você obtém uma cor ligeiramente diferente no final).

Cada SIMD-VU tem espaço para 512 registradores escalares e 256 registradores vetoriais.

A AMD afirmou que cada unidade de computação GCN (CU) tem 64 KiB de compartilhamento de dados local (LDS).

CU scheduler O agendador CU (CU scheduler) é o bloco funcional de hardware, que escolhe quais frentes de onda o SIMD-VU executa. Ele escolhe um SIMD-VU por ciclo para agendamento. Não deve ser confundido com outros agendadores de hardware ou software.

Wavefront Um shader é um pequeno programa escrito em GLSL que executa processamento gráfico, e um kernel é um pequeno programa escrito em OpenCL que executa processamento GPGPU. Esses processos não precisam de tantos registradores, mas precisam carregar dados da memória do sistema ou gráfica. Esta operação vem com latência significativa. A AMD e a Nvidia escolheram abordagens semelhantes para esconder essa latência inevitável: o agrupamento de vários threads. A AMD chama esse grupo de "wavefront", enquanto a Nvidia o chama de "warp". Um grupo de threads é a unidade mais básica de agendamento de GPUs que implementam essa abordagem para ocultar a latência. É o tamanho mínimo dos dados processados no modo SIMD, a menor unidade executável de código e a maneira de processar uma única instrução em todos os threads ao mesmo tempo.

Em todas as GPUs GCN, uma "wavefront" consiste em 64 threads, e em todas as GPUs Nvidia, uma "warp" consiste em 32 threads.

A solução da AMD é atribuir múltiplas frentes de onda a cada SIMD-VU. O hardware distribui os registradores para as diferentes frentes de onda e, quando uma frente de onda está esperando por algum resultado, que está na memória, o CU Scheduler atribui outra frente de onda ao SIMD-VU. As frentes de onda são atribuídas por SIMD-VU. SIMD-VUs não trocam frentes de onda. Um máximo de 10 frentes de onda podem ser atribuídas por SIMD-VU (portanto, 40 por CU).

O AMD CodeXL mostra tabelas com a relação entre o número de SGPRs e VGPRs em relação ao número de frentes de onda, mas essencialmente, para SGPRS é entre 104 e 512 por número de frentes de onda, e para VGPRS é 256 por número de frentes de onda.

Observe que, em conjunto com as instruções SSE, esse conceito do nível mais básico de paralelismo é frequentemente chamado de "largura de vetor". A largura do vetor é caracterizada pelo número total de bits nele contidos.

SIMD Vector Unit Cada Unidade Vetorial SIMD (SIMD Vector Unit) possui:

uma Unidade Lógica Aritmética (Arithmetic Logic Unit, ALU) de 16 pistas, com vetores inteiros e de ponto flutuante 64 Arquivo KiB Vector General Purpose Register (VGPR) 10× Contadores de Programa (Program Counters) de 48 bits Buffer de instruções para 10 wavefronts (cada wavefront é um grupo de 64 threads, ou o tamanho de um VGPR lógico) Uma wavefront de 64 threads emite para uma SIMD Unit de 16 pistas ao longo de quatro ciclos

Cada SIMD-VU tem 10 buffers de instruções de wavefront e leva 4 ciclos para executar uma wavefront.

Blocos de aceleração de áudio e vídeo Muitas implementações do GCN são normalmente acompanhadas por vários outros blocos ASIC da AMD. Incluindo, mas não se limitando ao Unified Video Decoder, Video Coding Engine e AMD TrueAudio.

Video Coding Engine

O Video Coding Engine é um ASIC de codificação de vídeo, introduzido pela primeira vez com a série Radeon HD 7000.

A versão inicial do VCE adicionou suporte para codificação de quadros I e P H.264 no formato de pixel YUV420, juntamente com codificação temporal SVE e modo de codificação de exibição, enquanto a segunda versão adicionou suporte de quadro B para quadros I YUV420 e YUV444.

O VCE 3.0 fez parte da terceira geração do GCN, adicionando dimensionamento de vídeo de alta qualidade e o codec HEVC (H.265).

O VCE 4.0 fazia parte da arquitetura Vega e foi posteriormente sucedido pelo Video Core Next.

Unified virtual memory Em uma prévia em 2011, AnandTech escreveu sobre a memória virtual unificada (Unified virtual memory), suportada pelo Graphics Core Next.

Heterogeneous System Architecture (HSA)

miniaturadaimagem|O GCN inclui blocos de funções de propósito especial a serem usados pelo HSA. O suporte para esses blocos de função está disponível por meio de desde o kernel Linux 3.19.

Alguns dos recursos específicos do HSA implementados no hardware precisam de suporte do kernel do sistema operacional (seus subsistemas) e/ou de drivers de dispositivo específicos. Por exemplo, em julho de 2014, a AMD publicou um conjunto de 83 patches a serem incorporados ao kernel Linux mainline 3.17 para oferecer suporte às suas placas de vídeo Radeon baseadas no Graphics Core Next. O chamado driver de kernel HSA reside no diretório , enquanto os drivers de dispositivos gráficos DRM residem em e aumentar os drivers DRM já existentes para placas Radeon. Esta primeira implementação se concentra em uma única APU "Kaveri" e funciona junto com o driver gráfico do kernel Radeon existente (kgd).

Agendadores de hardware Os agendadores de hardware são usados para executar o agendamento e descarregar a atribuição de filas de computação aos ACEs do driver para o hardware, armazenando essas filas em buffer até que haja pelo menos uma fila vazia em pelo menos um ACE. Isso faz com que o HWS atribua imediatamente filas armazenadas em buffer aos ACEs até que todas as filas estejam cheias ou não haja mais filas para atribuir com segurança.