Como funcionam as placas de vídeo

Tux numa cidade de silício, olho da NVIDIA e uma GPU como navio cargueiro

Quantos cálculos uma placa de vídeo faz por segundo para desenhar um frame de Cyberpunk ou para treinar uma rede? O canal Branch Education desmontou uma RTX 3090 — no sentido literal — e reconstruiu o die GA102 em 3D. Este texto segue o vídeo How do Graphics Cards Work? Exploring GPU Architecture. A geração Blackwell já está na rua; a lição de arquitetura é a mesma.

A escala

Três âncoras do vídeo:

  • Super Mario 64 (1996): ~100 milhões de cálculos por segundo.
  • Minecraft (2011): ~100 bilhões.
  • RTX 3090: mais de 36 TFLOPS. A 4090, citada no mesmo vídeo, sobe para 82,58 TFLOPS.

Se cada um dos 8 bilhões de humanos fizesse uma multiplicação por segundo, faltariam ~4.400 planetas Terra para igualar uma GPU topo de linha. O silício cabe numa moeda.

CPU é jato, GPU é navio cargueiro

Os dois são processadores. A filosofia é o oposto:

CPU  — jato
poucos núcleos (8–24) | latência baixa | cache L2/L3 enorme
preditor de desvio | controle flexível | kernel, disco, rede

GPU  — navio cargueiro
milhares de núcleos (10.496 na 3090) | vazão (throughput)
controle compartilhado | a mesma conta em milhões de dados

A CPU decola e pousa em milhares de aeroportos: tarefa sequencial, imprevisível. A GPU leva dezenas de milhares de contêineres entre dois portos fixos: milhões de vértices, pixels ou pesos de rede sofrendo a mesma operação. É o mesmo recorte do post GPU vs TPU — aqui o zoom é o die de consumo, não o acelerador de datacenter.

Por dentro do GA102 (Ampere)

A 3090 usa o GA102: Samsung 8 nm custom, 28,3 bilhões de transistores, 628 mm². Hierarquia rígida:

GA102
  7 GPC  (Graphics Processing Clusters)
    12 SM por GPC  →  84 SM no silício inteiro
      4 partições / warp schedulers por SM
        32 CUDA cores por partição  (128 por SM)
        1 Tensor Core por partição  (4 por SM)
      1 RT Core por SM

GA102 cheio: 10.752 CUDA | 336 Tensor | 84 RT

As placas 3080 / 3080 Ti / 3090 / 3090 Ti saem do mesmo projeto. Na fotolitografia, poeira e defeito de wafer matam um SM. Em vez de jogar fora 628 mm², a NVIDIA desliga o bloco a laser — binning:

  • 3090 Ti: silício perfeito, 10.752 CUDA.
  • 3090: 10.496 (2 SM off).
  • 3080 Ti: 10.240 (4 SM off).
  • 3080: 8.704 (16 SM off).

O CUDA core é um FMA

Cada núcleo CUDA tem ~410 mil transistores. O circuito que importa é o FMA (Fused Multiply-Add), uma operação por ciclo de clock:

Resultado = A × B + C

É a espinha da gráfica 3D e da IA — o mesmo MAC do neurônio e do Tensor Core / MXU. No Ampere, metade dos caminhos é FP32; a outra metade faz FP32 ou INT32 no mesmo ciclo. Contas mais caras (divisão, raiz, seno, cosseno) caem nas SFU — só 4 por SM.

GDDR6X, PAM-4 e o PAM-3 da GDDR7

Milhares de núcleos sem dado ficam parados. A RAM da CPU (DDR4/DDR5) anda num barramento de 64 bits, uns 50–80 GB/s. A 3090 leva 24 GB de GDDR6X (Micron) num barramento de 384 bits, ~936 GB/s (o vídeo arredonda para 1 TB/s).

CPU + DDR5          GPU + GDDR6X
barramento 64-bit   barramento 384-bit
~60 GB/s            ~1 TB/s
caminhão de entrega porto de contêineres

Computador não é só 0 e 1 nas trilhas. Para não dobrar o clock (calor, ruído):

  • PAM-4 (GDDR6X): quatro níveis de tensão. Cada símbolo carrega 2 bits (00, 01, 10, 11).
  • PAM-3 (GDDR7): três estados (−1, 0, +1). Codifica 3 bits em 2 dígitos ternários — decoder mais simples, mais tolerância a ruído, menos energia.

SIMD, o chapéu de cowboy e o “embarrassingly parallel”

Desenhar um mundo 3D é um problema embaraçosamente paralelo: quase não custa fatiar em milhares de pedaços independentes. O chapéu do vídeo tem ~14.000 vértices (X, Y, Z) e 28.000 triângulos:

  1. Model space: vértices na origem do objeto (0, 0, 0).
  2. World space: translação, rotação, escala — cada vértice × matriz 4×4.
  3. Cena com 5.000 objetos e ~8 milhões de vértices: a mesma instrução em milhões de números. Isso é SIMD (Single Instruction, Multiple Data).

De SIMD para SIMT — e de onde veio o “warp”

Até ~2016 o warp de 32 threads marchava em lockstep, falange grega. No SIMT moderno cada thread tem o próprio program counter e registradores. Um if/else que parte o warp ao meio (warp divergence) não trava o SM inteiro: os dois caminhos andam, depois reconciliam no L1 de 128 KB por SM.

O nome warp não veio do Star Trek. Veio da tecelagem: o tear de Jacquard (1804) escolhia os fios de urdidura (warp threads) em paralelo, com cartão perfurado.

O GigaThread Engine espalha os blocos de threads pelos SM livres. É o despachante que faz 10 mil núcleos parecerem um só programa.

SHA-256, ASIC e Tensor Core

A mesma máquina serve para mais do que jogo.

Mineração de Bitcoin. Cada tentativa de SHA-256 (nonce diferente) é independente da anterior. A 3090 gerava ~95 milhões de hashes/s. ASIC dedicado passa de 250 trilhões/s: colher versus escavadeira. GPU para Bitcoin morreu.

Tensor Cores e DLSS. Em vez de escalar par a par, o Tensor Core faz matriz inteira em ponto flutuante misto numa instrução:

D = A × B + C

É o alicerce de rede neural e transformer no silício de consumo — o mesmo MatMul que o post de GPU vs TPU coloca no MXU sistólico da TPU, e que o crash course de deep learning trata como a conta do treino. No Linux, o atalho prático de usar essa conta sem comprar cluster é o Ollama.

Referências

A placa de vídeo não é “milhares de CPUs pequenas”. É um porto: FMA em massa, memória larga demais para o DDR da CPU, e um despachante (GigaThread) que só funciona enquanto o problema se parte sozinho. O Branch Education mostrou o porto por dentro. O resto — DLSS, LLM, mineração morta — é o mesmo navio com carga diferente.