Como funcionam as placas de vídeo

Mascote do LinuxPro encaixando placa de video no slot

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 y de 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.

Referencias

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.