Na superfície, todos sabemos que os melhores processadores são aqueles que conseguem fazer mais com menos, atingindo a maior velocidade possível sem disparar o consumo de energia. Mas, quando cruzamos a barreira das especificações básicas, descobrimos que os processadores modernos buscam, de modo geral, pré-calcular, antecipar e prever tudo o que passa por eles. O youtuber Matt Godbolt descreve isso por meio de cinco aspectos muito pouco conhecidos pelo usuário comum e que, apesar da complexidade técnica, continuam fascinantes.
Uma das primeiras coisas que qualquer pessoa lembra dos primeiros processadores Atom é que eles eram lentos como caracóis. Em essência, o que a Intel fez foi priorizar o baixo consumo em detrimento do desempenho, aplicando uma nova arquitetura baseada em conceitos antigos. E uma das coisas que ficaram no tinteiro foi a execução out-of-order.
O que isso significa? Em termos informais, é um dos muitos truques que os processadores atuais têm à disposição para acelerar a execução de instruções. Quem quiser entender melhor esses truques precisa mergulhar no estranho mundo das arquiteturas, especialmente as desenvolvidas pela Intel. A alternativa é assistir a este vídeo publicado por Matt Godbolt, que descreve cinco deles:
Cinco coisas que um CPU faz
- Tratam de adivinhar como você acessa seus dados e reconhecer padrões, uma forma de prefetching que se traduz em um importante aumento da velocidade. Em outras palavras, carregam linhas de cache automaticamente antes que você precise delas, ficando um passo à frente do processo.
- Convertem CISC (“Complex” Instruction Set Computing) em RISC (“Reduced” Instruction Set Computing). As operações da primeira arquitetura são transformadas em uma série de “microcódigo” ou “micro-operações” que podem ser programadas de forma independente, ganhando simplicidade e eficiência.
- Reorganizam a execução de código. A ordem em que o código é escrito não é a ordem em que é executado pelos processadores. A independência entre blocos permite executar instruções mesmo enquanto outro grupo está em espera.
- Convertem o código para SSA. Explicar SSA de maneira simples é um desafio enorme, mas Godbolt o reduz a uma série de otimizações que verificam se o código é de fato independente (algo essencial para as ações anteriores) e, caso não seja, reescrevê-lo para que adquira essa propriedade. Em seu exemplo, utiliza registros “fictícios” como EAX1 e EAX2.
- Predizem o futuro. Aqui é quando intervém o chamado preditor de saltos, que, como sugere o nome, tem a tarefa de antecipar se um salto condicional ocorrerá ou não, classificando os resultados como especulativos. Se a previsão falhar, eles são descartados. Se acertou, já estão carregados. Mais velocidade.
Em resumo: pré-carga de dados, conversão para microcódigo, execução out-of-order, renomeação de registradores e previsão de saltos.
Se algo disso te lembra daqueles garotos maus chamados Spectre e Meltdown, é porque, de certo modo, eles surgem de fraquezas nessas tarefas. A relação entre velocidade e segurança exige um equilíbrio muito mais delicado do que imaginamos...
https://old.neoteo.com/como-trabaja-un-cpu/