Assisti ao Intel's Architecture Day 2021 lançado em agosto de 2021 (mês passado no momento em que escrevo isso). Depois de assistir ao vídeo da Intel sobre sua nova CPU, fiquei – honestamente – um pouco confuso. Acho que os novos microprocessadores não terão mais uma proporção de thread para núcleo de 2 para 1. Supostamente, o i5 terá 10 núcleos e 16 threads, e os i7 e i9 são semelhantes, só não lembro exatamente quais serão. Pelo que entendi, porém, as novas proporções de núcleo para thread são o resultado de núcleos especializados. Se eu entendi direito, alguns núcleos são "Efficiency Cores" , e eles foram nomeados Efficiency Cores
e o restante dos núcleos na CPU são "Performance Cores" , que - sem surpresa - foram nomeados Performance Cores
.
Quando novos microprocessadores são lançados, pode ser muito difícil saber quais nomes e números são realmente baseados em ciência da computação e quais são apenas uma tentativa de marketing para fazer os chips parecerem bons. Em outras palavras, o que eu gostaria de saber:
Existe realmente algo para os núcleos de desempenho e eficiência, ou é apenas uma jogada de marketing? E se os dois núcleos não são apenas uma jogada de marketing, e ter núcleos para eficiência e núcleos para desempenho vai fazer a diferença, então o que exatamente os núcleos de eficiência farão que será diferente do que os núcleos de desempenho fazem?
É a versão da Intel do big.LITTLE da ARM . Você tem alguns núcleos grandes com desempenho de thread único muito bom (mas que gastam energia significativa em execução fora de ordem ampla / profunda) e alguns núcleos pequenos mais simples que não podem ser executados tão rápido, mas usam menos energia por trabalho. por exemplo, um núcleo de eficiência de 2 GHz pode ser tão rápido quanto um núcleo de desempenho de 1 GHz, mas ainda usa menos energia. (Esses números são totalmente inventados, não pretendem ser um palpite sobre Alder Lake. A Intel tem alguns gráficos de marketing).
Os núcleos Performance (P) são núcleos Ice Lake de última geração , como no desktop/laptop/servidor convencional. Especificamente, Golden Cove (igual ao Sapphire Rapids Xeon), mas com seu suporte AVX-512 desativado. (A menos que uma opção de BIOS desative os E-cores ou você tenha comprado um desktop Alder Lake sem nenhum E-core [ pcworld ].)
(Os chips híbridos são novos e o ecossistema de hardware / software x86 não tem como um processo descobrir que apenas alguns núcleos podem executar o AVX-512 sem falhas , e a libc memcpy tenderia a usar o AVX-512 em todos os processos se estivesse disponível, então a opção menos ruim é reduzir todos os núcleos ao seu menor denominador comum. Gracemont suporta um monte de coisas como AVX2, então não está mergulhando abaixo da linha de base Haswell, mas está um passo atrás das CPUs Ice Lake e Tiger Lake. Veja as instruções Conjuntos: Alder Lake despeja o AVX-512 em uma seção BIG Way do recente artigo da Anandtech.)
Os núcleos Efficiency (E) são Gracemont , última geração da família Silvermont, CPUs de baixo consumo da Intel.
As primeiras CPUs da família Silvermont eram bastante simples, com exec fora de ordem (apenas para números inteiros, não FP/SIMD), mas com uma "janela" muito menor para encontrar paralelismo no nível de instrução e pipeline muito mais estreito ( menos instruções decodificadas ou executadas em paralelo). Eles foram os sucessores do Atom original, usado em netbooks e em alguns dispositivos de servidor, como caixas NAS.
Mas com Tremont e agora Gracemont, eles aumentaram significativamente, com aparentemente um tamanho de ROB ( ReOrder Buffer for out-of-order exec ) de 256, acima de 208 em Tremont (vs. como 32 em Silvermont; veja o profundo mergulhe nele, vs. Haswell ). Em comparação, o ROB de Skylake é de 224 entradas, enquanto o ROB de Golden Cove é de 512. Ainda assim, Tremont visava "microservidores" de baixo consumo e similares; eles não fazem chips com um grande número desses núcleos 1 .
Gracemont tem muitas unidades de execução SIMD e inteiras, e um pipeline de 5 larguras (no ponto mais estreito, alocação/renomeação), mesma largura que Ice Lake! (Mas menos área gasta em cache e menor velocidade máxima de clock.) E 4 portas ALU inteiras, 2x carga e 2x armazenamento por clock, 2/clock SIMD FP e 3/clock SIMD ALU inteiro (o mesmo que Ice Lake). Então, isso é muito mais robusto do que o Silvermont da velha escola (que tinha 2 larguras).
O que eu não sei é como Gracemont está economizando energia contra o Lago de Gelo! Talvez alguns de seus outros recursos de execução fora de ordem sejam menos robustos, como o(s) tamanho(s) do agendador (estação de reserva) para rastrear uops ainda não executados, escolhendo o uop mais antigo para cada porta que tem suas entradas prontas. (Um grande ROB pode ocultar a latência de uma falha de cache por um longo tempo se a maioria das instruções posteriores forem independentes, mas um grande RS é necessário para sobrepor longas cadeias de dependência com o código circundante . write-up sobre OoO exec.) Um grande RS consome bastante energia, e os uops entram e saem em ordem imprevisível, ao contrário do ROB, que pode ser um grande buffer circular com instruções emitindo e sendo retiradas na ordem do programa. oOs slides do Intel Architecture Day 2021 não pareciam mencionar um número para o tamanho RS. (E pode haver filas de agendamento separadas para portas separadas, ao contrário do agendador principalmente unificado nos grandes núcleos da Intel, já que o poder escala mais do que linearmente com o tamanho.)
(Se isso soou como technobabble, mas você está curioso para aprender mais sobre arquitetura de CPU, confira Modern Microprocessors A 90-Minute Guide! se você já tem alguma ideia do que é uma instrução e o que significa para uma CPU buscar, decodificar , e execute um.)
Nota de rodapé 1 : (Exceto pelas placas de computação Xeon Phi agora descontinuadas ; Knight's Landing era basicamente 72 núcleos Silvermont com AVX-512 aparafusado, com uma interconexão de malha e algum cache rápido e memória local.)
Motivação para CPUs multicore heterogêneas
Muitas coisas em um desktop (como reproduzir um vídeo, animar uma interface do usuário, rolar uma página da Web ou executar a verificação ortográfica enquanto você digita ou executar todo o javascript de baixa qualidade que mostra anúncios) requer apenas um pouco de CPU em intervalos muito frequentes , então acordar um núcleo eficiente para fazer isso custa menos energia total do que acordar um núcleo grande para fazer a mesma coisa.
Os núcleos de eficiência são otimizados para produtividade por área de matriz . Melhorar o desempenho de thread único de um núcleo tem retornos decrescentes (por exemplo, grandes caches por núcleo), mas muitas coisas na computação atual são difíceis de paralelizar (ou simplesmente não foram porque ainda não são triviais).
Um bom desempenho de thread único ainda é muito importante para uso interativo. Para literalmente apenas navegar na web, eu usaria um Ice Lake dual core de 5 GHz-max-turbo sobre um enorme sistema Xeon de 40-core 2.4GHz-max-turbo. (Isso talvez seja um pouco irreal, porque a maioria dos grandes Xeons pode turbinar um ou dois núcleos para mais de 2,4 GHz se o restante estiver ocioso, mas digamos 40 núcleos de eficiência.)
As GPUs estão no extremo oposto do espectro das CPUs de grande núcleo convencionais: desempenho de thread único quase inútil, mas taxa de transferência geral muito boa, mas alguns trabalhos computacionais não se prestam facilmente à execução em uma GPU. (por exemplo, executando um compilador, mesmo que haja um tremendo paralelismo se você tiver vários arquivos de origem que precisam ser reconstruídos.)
Ter um monte de núcleos de eficiência deve ser ótimo para coisas que têm algum paralelismo, novamente como um grande trabalho de compilação. E com sua boa quantidade de unidades de execução SIMD / FP, provavelmente também codificação de vídeo e até coisas numéricas como multiplicadores de matriz. (Gracemont adicionou o AVX2 para combinar com os núcleos "grandes").
Portanto, você deseja pelo menos alguns núcleos de desempenho para itens de thread único, especialmente para uso interativo.
Mas uma vez que você tenha 4 núcleos Golden Cove, dada a escolha entre mais 4 núcleos Golden Cove ou adicionar 16 núcleos Gracemont, ter núcleos Gracemont é bastante atraente se sua taxa de transferência não for terrível. (O que não é.) Aparentemente, essa proporção de área de 4:1 está correta, de acordo com a Intel.
(Exceto que isso significa que você não pode usar o hardware AVX-512 que faz parte de um núcleo Golden Cove, então isso é uma grande desvantagem para cargas de trabalho que podem se beneficiar do AVX-512. Embora diferente do Skylake-X, eu acho que Ice Lake só uma unidade FMA de 512 bits (que é composta pelas duas unidades FMA de 256 bits), então a taxa de transferência máxima de FMA é a mesma com AVX ou AVX-512 em Ice Lake (Sunny Cove) / Tiger Lake. E provavelmente também Golden Cove CPUs baseadas em AVX-512, como Sapphire Rapids. Mas AVX-512 é bom por muitas outras razões, e alta taxa de transferência para SIMD-inteiro não depende de uma porta FMA.)
(Atualização: se você desabilitar os núcleos E no momento da inicialização, você pode usar o AVX-512. A menos que você tenha comprado um desktop que não tinha nenhum E-core em primeiro lugar, isso pode não ser uma vitória para a taxa de transferência geral no código que escala bem para mais núcleos. O melhor caso é provavelmente coisas em que novas instruções somente AVX-512 ajudam muito, como bitwise boolean
vpternlogd
, ou que são parcialmente limitadas pela largura de banda de memória agregada. Mas pode ser útil para testar / ajustar o código que executado em servidores com AVX-512. Alguns fornecedores de mobo / laptop podem não incluir essa opção de BIOS.)A existência dos núcleos de eficiência significa que os núcleos de desempenho podem ir mais longe nos retornos decrescentes da busca de desempenho de thread único ao custo de energia e área, já que as cargas de trabalho que não precisam disso podem ser executadas nos núcleos de eficiência.
Embora a Intel ainda use a mesma microarquitetura Golden Cove em CPUs sem núcleos E (por exemplo, Sapphire Rapids Xeon), então eles não podem ficar totalmente loucos aqui. Na verdade, o Sapphire Rapids tem 2 MiB de cache L2 por núcleo Golden Cove, contra 1,25 MiB em chips clientes. ( https://download.intel.com/newsroom/2021/client-computing/intel-architecture-day-2021-presentation.pdf ). (Isso faz algum sentido, já que os servidores estão executando com mais frequência várias coisas com uso intensivo de CPU, portanto, a competição pelo cache L3 é pior e sua latência também é pior com a interconexão mais lenta entre mais núcleos.)
Em Alder Lake, cada grupo de quatro núcleos E compartilha um cache L2 de até 4 MiB.
Agendamento de threads para núcleos
Os sistemas operacionais precisam decidir qual thread deve ser executado em qual núcleo. (Ou mais precisamente, em cada núcleo separadamente, uma função (por exemplo, do Linux
schedule()
) precisa escolher uma tarefa para executar neste núcleo. O agendamento é um algoritmo distribuído, não um programa de controle mestre que atribui threads a núcleos.)Como os núcleos não são todos iguais, importa onde um thread é executado. Tomar boas decisões pode se beneficiar de algumas informações do hardware sobre o tipo de coisa que um thread está fazendo, por exemplo, em um grande núcleo se estiver rodando se estiver rodando perto da largura do pipeline uops por clock, então está se beneficiando totalmente de estar lá. Mas se está travando muito nos erros de cache, não está. Em vez de fazer os SOs usarem eventos PMU (Performance Monitoring Unit) como para
perf stat
, a Intel adicionou um novo mecanismo para o SO perguntar à CPU sobre coisas como esta: Intel Thread Directoré hardware e software. (Infelizmente, apenas o Windows 11 terá um bom suporte para isso inicialmente. O artigo da Anandtech vinculado abaixo menciona que o Linux não terá um bom suporte para ele inicialmente; a Intel não terminou de trabalhar nos patches do Linux para enviar upstream. Portanto, podemos ter um thread ingênuo agendamento em sistemas Alder Lake Linux por um tempo :(.)https://www.anandtech.com/show/16881/a-deep-dive-into-intels-alder-lake-microarchitectures/2 tem alguns detalhes. (E todo o artigo, escrito em agosto de 2021, é uma boa leitura se você quiser saber mais sobre Alder Lake.)
Também relacionado: https://download.intel.com/newsroom/2021/client-computing/intel-architecture-day-2021-presentation.pdf que já vinculei algumas vezes nesta resposta para detalhes de microarquitetura.
Os processadores Alder Lake terão dois tipos de núcleos. Apenas os núcleos de desempenho terão capacidade de hyperthreading. Esta é a razão pela qual você pode ter um processador de 10 núcleos que suporta 16 threads. No caso do
Core i5-12600K,
tem 6 núcleos P e 4 núcleos E.Dado que o produto não foi lançado, os benchmarks de desempenho reais não são possíveis, mas os dados de vazamento de usuários com amostras de engenharia indicam que os ganhos de desempenho são reais.
A intenção dos núcleos de eficiência é que eles fariam tarefas em segundo plano, é claro que sem um sistema operacional que aproveite esses núcleos, eles serão usados apenas por software que os use explicitamente. O serviço que lida com a atualização do Chrome provavelmente usará esses núcleos, permitindo que os núcleos de desempenho lidem com os principais threads do navegador.
Fonte da imagem: Alder Lake da Intel combina núcleos de CPU 'desempenho' e 'eficiência' em um chip
A arquitetura ARM tem núcleos de desempenho e eficiência há algum tempo.
Suspeito que a verdadeira razão por trás da decisão da Intel de introduzir núcleos de eficiência se deve ao fato de que você só pode reduzir seus núcleos até certo ponto, e a energia necessária para seus processadores só aumentava. Portanto, ao introduzir núcleos de eficiência, você pode aumentar significativamente o desempenho de um processador, mas manter o tamanho do processador praticamente o mesmo. Esse aumento de desempenho será dimensionado à medida que você for capaz de reduzir o tamanho da matriz do processador, é uma maneira de evitar ter que diminuir 32 núcleos de desempenho e ter rendimentos horríveis.
Para lhe dar uma perspectiva, o TDP esperado do Core i9-12900K é de cerca de 125 W. O TDP do i9-11900K também é de 125 W, mas tem 16 núcleos a menos.
Espera-se que o Alder Lake seja fabricado no processo Intel 7, anteriormente chamado de 10 nm Enhanced SuperFin (ESF). (Nomes de nós de processo têm sido tanto marketing quanto realidade há alguns anos, e a mudança da Intel para nomes que nem fingem ser nanômetros apenas reforça isso). Independentemente da densidade do transistor, um núcleo de eficiência ocupa menos área total (tamanho do die) do que um núcleo de desempenho, uma vez que ambos os tipos de núcleos (e a lógica "uncore" que os conecta em uma CPU multi-core) fazem parte do mesmo pedaço de silício, todos usando os mesmos transistores.
(A Intel está planejando "chiplets" para um 2023, onde cada núcleo pode ser fabricado separadamente, então um defeito em um não arruinará todo o valor de núcleos de uma CPU. Alder Lake não está fazendo isso.)
Os núcleos de eficiência são muito menores que os núcleos de desempenho. Na verdade, eles ocupam cerca de um quarto do espaço dos núcleos de desempenho. O diagrama a seguir mostra uma configuração com 8 núcleos de desempenho com 8 núcleos de eficiência.
P-Core = Núcleo de desempenho, E-Cores = Núcleos de eficiência. Fonte
Isso se traduz em núcleos mais simples que podem lidar com menos instruções por segundo e têm recursos limitados de conjunto de instruções. Mas a beleza disso é que eles usam menos energia e podemos encaixar muito mais deles.
Então, qual é o problema com os núcleos de desempenho, por que eles são muito maiores?
Os núcleos de desempenho têm muito mais recursos para casos de uso específicos. Eles são projetados para consumir o máximo de energia possível, aumentando sua frequência ao máximo para tentar realizar grandes tarefas o mais rápido possível.
Se você ainda não ouviu falar do AVX-512, esta é uma instrução relativamente nova que foi adicionada às CPUs Intel de desktop convencionais, começando com o Rocket Lake. É usado principalmente em aplicações científicas e IA. Aqui está uma citação da AnandTech descrevendo as térmicas produzidas a partir de sua utilização.
A instrução AVX-512 sozinha ocupa MUITO espaço na matriz. E você pode apostar que está incluído nos núcleos de desempenho.
Por que os núcleos de eficiência são tão bonitos e impulsionam até mesmo cargas de trabalho pesadas?
Há duas coisas principais se juntando aqui. Tamanho e frequência de operação. O que se resume é o aumento da contagem de núcleos.
Tamanho
Como os núcleos são menores, podemos colocar muito mais deles no chip.
Frequência de operação
Como a frequência máxima desses núcleos é limitada, ter tantos núcleos em um espaço apertado não é um problema porque eles geram uma quantidade de calor muito mais gerenciável.
Essas duas propriedades nos permitem ter muito mais núcleos em um chip. Mais núcleos significa que mais trabalho pode ser feito em paralelo. Programas mais novos adoram alocar trabalho adicional para mais threads de processador, se houver algum disponível.
Ter menos núcleos em uma frequência mais alta é muito menos eficiente para o espaço térmico porque a quantidade de energia necessária por aumento de frequência não aumenta proporcionalmente . Ter um aumento de núcleos eficientes em paralelo é o caminho a percorrer.