Logo NascimentoIgor Nascimento / Blog
Infraestrutura

Por que uma CPU de 5 GHz passa vergonha em IA perto de uma GPU intermediária

A dúvida clássica de quem começa a olhar hardware para inteligência artificial. A resposta não está na força de cada núcleo, e sim na matemática para a qual cada chip foi desenhado. Uma conversa sobre lógica sequencial, paralelismo em massa, multiplicação de matrizes em uma instrução, e a barreira que nenhuma instrução vetorial de CPU atravessa: a alimentação de dados.

InfraestruturaInferência12 min de leituraIgor Nascimento

A dúvida clássica

"Se uma CPU topo de linha tem dezenas de núcleos a mais de 5 GHz, por que ela passa vergonha rodando IA perto de uma GPU intermediária?" É a pergunta de todo mundo que começa a olhar hardware para inteligência artificial, e a resposta não está na força bruta de cada núcleo. Está na arquitetura matemática para a qual cada chip foi desenhado.

CPUs: os mestres da lógica sequencial

Uma CPU moderna foi projetada para lidar com qualquer tipo de tarefa. Ela tem poucos núcleos, 8, 16, 32, mas cada um carrega instruções complexas, predição de desvio pesada, execução fora de ordem e caches ultrarrápidos de vários níveis. A maior parte do silício de um núcleo de CPU não é unidade de cálculo. É maquinário para descobrir o que calcular a seguir sem parar: prever o próximo salto, reordenar instruções, esconder a latência da memória.

É como uma equipe de cirurgiões: resolve problemas lógicos e condicionais, um passo de cada vez, com máxima precisão. O problema é que um modelo de linguagem não precisa de lógica ramificada. Precisa de bilhões de multiplicações simples, idênticas, ao mesmo tempo. Todo aquele maquinário de predição fica ocioso, porque não há nada para prever: a próxima operação é sempre a mesma.

Núcleos CUDA: paralelismo em massa

Enquanto a CPU tem dezenas de núcleos, uma GPU carrega milhares. Uma RTX 3060 tem 3.584; uma placa de datacenter passa de 16 mil. Cada um deles é muito mais simples do que um núcleo de CPU: sem predição elaborada, sem execução fora de ordem, com pouco cache. Em vez de poucos cirurgiões, um exército de operários fazendo contas básicas idênticas em sincronia. O modelo de execução se chama SIMT, single instruction, multiple threads: uma instrução, aplicada por grupos de 32 threads de uma vez, sobre dados diferentes.

Esse paralelismo já deixa a CPU para trás por ordens de grandeza em qualquer coisa que seja "faça a mesma conta em um milhão de elementos", que é a definição de renderizar pixels e de multiplicar matrizes.

Tensor Cores: o motor de multiplicação de matrizes

O salto definitivo para IA veio com os Tensor Cores. Eles não são núcleos de propósito geral. São blocos de silício dedicados a uma única operação: a multiplicação e acumulação de matrizes, GEMM, em formatos de baixa precisão, FP16, BF16, INT8, FP8.

A diferença é de granularidade. Um núcleo comum multiplica pares de números, e precisa de vários ciclos para percorrer um bloco de matriz. Um Tensor Core recebe uma matriz 4×4 (ou maior, nas gerações recentes), multiplica por outra e acumula o resultado numa terceira, em uma instrução de hardware, a fused multiply-add. É aceleração por hardware nativo feita sob medida para a matemática dos Transformers, em que praticamente tudo, atenção, projeções, feed-forward, é multiplicação de matrizes.

UnidadeQuantidade típicaDesenhada paraEm IA
Núcleo de CPU8 a 64Lógica condicional, latência baixa, qualquer cargaOrquestração, tokenização, pré e pós-processamento
Núcleo CUDAMilharesMesma operação em muitos dadosOperações elemento a elemento, normalizações, softmax
Tensor CoreCentenasMultiplicar e acumular matrizes em baixa precisãoO grosso do cálculo: atenção e camadas densas

Por que a CPU simplesmente não acompanha

Mesmo quando a CPU usa instruções vetoriais, AVX-512 ou as extensões de matriz AMX das gerações mais recentes, ela esbarra em dois limites que não se contornam com clock:

Densidade de silício para cálculo matricial

Uma GPU dedica ordens de magnitude mais circuitos exclusivamente a empilhar matrizes. A CPU gasta a maior parte da área em cache e em controle, porque é isso que a torna boa no que ela é boa. Não dá para ter as duas coisas na mesma área de chip.

A barreira da alimentação de dados

De nada adianta calcular rápido se a memória não entrega os dados a tempo. Em decode, cada token exige ler todos os pesos do modelo. A VRAM de uma GPU dedicada entrega centenas de gigabytes por segundo (360 numa RTX 3060) até alguns terabytes por segundo nas placas de datacenter. A RAM de um sistema desktop com dois canais de DDR5 fica entre 60 e 90. Mesmo que a CPU calculasse na velocidade da GPU, ela ficaria parada esperando a RAM na maior parte do tempo. Um modelo de 8 GB em RAM a 80 GB/s dá um teto de 10 tokens por segundo, por mais núcleos que se tenha.

O modelo mental que organiza tudo

Pense em intensidade aritmética: quantas operações você faz por byte que lê. Um chip é limitado por computação quando a intensidade é alta e por memória quando é baixa. O decode de um LLM tem intensidade baixíssima, uma operação por peso lido, e por isso a banda de memória decide antes do clock. A CPU perde nas duas frentes, mas perde primeiro na memória. É por isso que uma GPU "intermediária" com GDDR6 ganha de uma CPU "topo de linha" com DDR5: não é o motor, é a estrada.

Quando a CPU ainda faz sentido

Rodar IA em CPU é tentar cavar um túnel com bisturis de alta precisão. Funciona em emergências, e vale ser honesto sobre quais são:

Fora dessas situações, nada substitui o maquinário pesado feito especificamente para essa rocha. E, como discuto em outro texto sobre a hierarquia de largura de banda, a pior configuração de todas é a intermediária: um modelo que quase cabe na GPU e transborda um pouco para a RAM. Aí você paga o preço da CPU sem ter escolhido a CPU.

Resumo da conversa