Desde meados dos anos 2000, as CPUs de desktop oferecem vários núcleos de CPU em um único pacote. Este é um processador multicore. Enquanto os primeiros designs eram limitados a dois ou quatro núcleos de CPU, as CPUs modernas oferecem até 64 núcleos físicos em uma única CPU. Contagens de núcleos tão altas não são padrão para CPUs de desktop e geralmente são reservadas para estações de trabalho ou servidores de ponta. As contagens de núcleos típicas em CPUs de desktop modernas estão entre 4 e 16. Mas o que há nas CPUs multicore que as tornam dominantes nos computadores modernos?
Único nucleo
Historicamente, uma CPU de núcleo único limitava-se a executar apenas uma única tarefa por vez. Isso vem com toda uma gama de questões. Por exemplo, em um computador moderno, há uma enorme quantidade de processos em segundo plano em execução. Se uma CPU pode processar apenas uma coisa por vez, isso significa que esses processos em segundo plano devem tirar o tempo de processamento do processo em primeiro plano. Além disso, as faltas de cache significam que os dados precisam ser recuperados – comparativamente – da RAM lenta. Durante o tempo em que os dados estão sendo buscados na RAM, o processador simplesmente fica ocioso, pois não pode fazer nada até obter os dados. Isso mantém o processo em execução, bem como quaisquer outros processos que estão aguardando sua conclusão.
Embora os processadores single-core modernos não sejam realmente uma coisa graças ao aumento de CPUs multicore de baixo custo, eles poderiam usar outros truques modernos para operar mais rápido. Um pipeline permitiria que cada parte diferente do manuseio de uma instrução fosse usada simultaneamente, fornecendo um aumento significativo de desempenho usando apenas um estágio do pipeline por clock ciclo. Um pipeline amplo veria várias instruções podendo ser tratadas em cada estágio do pipeline por ciclo de clock. O processamento fora de ordem permitiria que as instruções fossem agendadas de maneira mais eficiente em termos de tempo. Um preditor de desvio seria capaz de prever o resultado de uma instrução de desvio e executar preventivamente a resposta presumida.
Todos esses fatores funcionariam bem e forneceriam algum desempenho. Adicionar um ou mais núcleos, no entanto, permite tudo isso e, de uma só vez, permite o processamento de duas vezes os dados de uma só vez.
Multicore
Adicionar um segundo núcleo parece que deve dobrar o desempenho bruto. As coisas são, infelizmente, mais complicadas do que isso. A lógica do programa geralmente é de thread único, o que significa que há apenas uma coisa que um programa tenta fazer a qualquer momento. O que pode acontecer, porém, é que outros processos possam usar o outro núcleo ao mesmo tempo. Embora não haja aumento de desempenho inerente à maioria dos programas individuais, o fornecimento de um recurso de processamento, reduz efetivamente a competição por um recurso limitado, que fornece uma aumento de desempenho. Este aumento de desempenho, simplesmente por reduzir a competição pelo tempo de CPU, é mais perceptível ao saltar de um único para uma CPU de núcleo duplo, há retornos decrescentes de aumentar ainda mais a contagem de núcleos, embora geralmente seja mais Melhor.
Para aproveitar adequadamente os sistemas multicore e realmente ver um sólido aumento de desempenho, os programas precisam ser programados para usar vários threads de processamento. A lógica multithread é notoriamente difícil de fazer de forma confiável, pois muitas vezes é difícil de aprender e há muitas armadilhas em potencial. Um exemplo de armadilha é conhecido como condição de corrida. Em uma condição de corrida, um processo assume que outro processo que ele inicia será executado sem problemas e, em seguida, tenta fazer algo que depende desse outro processo ter sido executado sem problemas. Por exemplo, imagine que um processo inicia outro processo para fechar um documento e abrir outro. Se o processo original não verificar corretamente se o segundo processo foi concluído, isso pode resultar em resultados inesperados. Se houver um problema ao fechar o primeiro documento, por exemplo, ele ainda poderá estar aberto quando o processo original apenas gravar mais dados nele.
Problemas térmicos
Um dos maiores problemas que os processadores multicore acabam enfrentando é o calor. Enquanto um núcleo de CPU não produz tanto calor, dois emitem mais. Em CPUs de alta contagem de núcleos, essa concentração de calor pode resultar em um clock boost menor, pois a CPU gerencia sua temperatura. Um clock de reforço mais baixo causará desempenho inferior em aplicativos de thread único. Isso geralmente pode ser visto em benchmarks de desempenho de jogos. Os videogames geralmente dependem muito de um único segmento. Como tal, o desempenho de thread único geralmente é crítico para jogos. As CPUs de contagem de núcleos altos, como os modelos de contagem de 16 núcleos, geralmente são de compartimentos de alto desempenho. Apesar disso, eles podem ser regularmente superados por CPUs “menores” com uma contagem de núcleos mais baixa em benchmarks de thread único. Esse problema é ainda mais óbvio em CPUs com contagem de núcleos ultra-alta, como o AMD Threadripper de 64 núcleos, onde a velocidade do clock é visivelmente menor do que as CPUs de desktop topo de linha.
Sucessos
Muitos aplicativos são capazes de fazer uso adequado de vários núcleos de CPU. Por exemplo, a renderização da CPU é uma tarefa relativamente fácil de paralelizar. As melhorias de desempenho podem ser vistas até 64 núcleos e superiores, embora nenhuma CPU ofereça mais de 64 núcleos atualmente. Muitos aplicativos simplesmente não podem ser multithread, pois dependem da lógica sequencial. Embora estes não vejam nem perto da velocidade de um programa multithread, o fato de que os programas multithread e outros programas de thread único podem usar outros núcleos de CPU, liberando o tempo do processador, permitindo melhor atuação.
Opções arquitetônicas
Em processadores de desktop, cada núcleo de CPU dentro de uma CPU multicore geralmente é idêntico. Essa homogeneidade simplifica o trabalho de agendamento nos núcleos. Usar o mesmo design repetido também ajuda a manter os custos de desenvolvimento baixos. Os processadores móveis, no entanto, há muito usam arquiteturas de núcleo heterogêneo. Neste design, existem duas ou até três camadas de núcleo de CPU. Cada camada pode executar os mesmos processos, no entanto, alguns são projetados para eficiência de energia e outros são ajustados para desempenho. Isso provou ser uma receita de sucesso para dispositivos alimentados por bateria, pois muitas tarefas podem usar o mais lento mais núcleos com eficiência de energia, aumentando a vida útil da bateria, enquanto os processos de alta prioridade ainda podem ser executados em alta velocidade quando necessário.
A arquitetura de CPU de desktop também está se movendo na direção de um design de núcleo heterogêneo. Alder Lake 12 da Intelº A linha de CPU Core de geração é a primeira CPU de desktop a fazer isso. Nesse caso, o principal fator determinante dos núcleos menores não é necessariamente a eficiência energética, mas a eficiência térmica, embora sejam dois lados da mesma moeda. Ter vários núcleos poderosos oferece alto desempenho, enquanto muitos núcleos eficientes podem lidar com tarefas em segundo plano sem afetar muito os núcleos principais.
Conclusão
Uma CPU multicore é uma CPU que apresenta vários núcleos de processamento em um único pacote, muitas vezes, embora não exclusivamente, no mesmo die. CPUs multicore não oferecem um aumento direto de desempenho para muitos programas, no entanto, ao aumentar o número de núcleos, os programas single-thread não precisam competir tanto pelo tempo de CPU. Alguns programas podem aproveitar ao máximo vários núcleos, fazendo uso direto de tantos quantos estiverem disponíveis. Isso fornece um grande aumento de desempenho, embora devido a restrições térmicas e de energia esse aumento não seja necessariamente uma duplicação direta de desempenho com uma duplicação de núcleos.