Downlocking Ice Lake AVX-512

imagem


Este é um breve post sobre um estudo do comportamento do AVX2 e do AVX-512 em relação ao downlocking licenciado de novos chips Intel Ice Lake.



O Downlocking licenciado 1 é um efeito pouco conhecido no qual os limites de frequência caem abaixo do nominal quando certas instruções SIMD são executadas, especialmente instruções de ponto flutuante pesadas ou instruções com largura de 512 bits.



Você pode ler mais sobre esse tipo de downlocking nesta resposta em StackOverflow , e já explicamos a mecânica de baixo nível de tais transições com alguns detalhes . Você também pode encontrar instruçõescomo tirar proveito do amplo SIMD (Single Instruction Multiple Data: um tipo ou extensão da arquitetura do conjunto de instruções, por exemplo, Intel AVX ou ARM NEON, capaz de realizar várias operações idênticas em elementos compactados em um registro SIMD) com este problema em mente 2 .



As informações nos links são escritas no contexto do Skylake-SP (SKX, arquitetura de servidor Intel Skylake que inclui Skylake-SP, Skylake-X e Skylake-W), que foram a primeira geração de chips a suportar AVX-512.



Qual é a situação com o Ice Lake, com os mais novos chips suportando as instruções AVX-512 da SKX e o novo conjunto de instruções AVX-512 ? Teremos que olhar para essas novas instruções de longe e nunca poderemos usá-las devido ao downlock?



Leia o artigo para descobrir ou pule para a seção Resumo.



AVX-Turbo



Usaremos o utilitário avx-turbo para medir a dependência da frequência no número de núcleos e conjunto de instruções. Essa ferramenta funciona de forma simples: executa um determinado conjunto de instruções em um determinado número de núcleos, medindo a frequência alcançada durante o teste.



Por exemplo, um teste avx256_fma_tque mede o custo de instruções pesadas de 256 bits com um alto ILP (paralelismo de nível de instrução: a quantidade de paralelismo no nível entre instruções de um processador superescalar) executa a seguinte sequência FMA:



	vfmadd132pd ymm0,ymm10,ymm11
	vfmadd132pd ymm1,ymm10,ymm11
	vfmadd132pd ymm2,ymm10,ymm11
	vfmadd132pd ymm3,ymm10,ymm11
	vfmadd132pd ymm4,ymm10,ymm11
	vfmadd132pd ymm5,ymm10,ymm11
	vfmadd132pd ymm6,ymm10,ymm11
	vfmadd132pd ymm7,ymm10,ymm11
	vfmadd132pd ymm8,ymm10,ymm11
	vfmadd132pd ymm9,ymm10,ymm11
	; repeat 10x for a total of 100 FMAs


No total, usamos cinco testes para testar cada combinação de instruções leves e pesadas de 256 bits e 512 bits, bem como instruções escalares (o SIMD de 128 bits se comporta da mesma forma que as instruções escalares) inserindo:



./avx-turbo --test=scalar_iadd,avx256_iadd,avx512_iadd,avx256_fma_t,avx512_fma_t


Resultados do Lago de Gelo



Eu rodei o avx-turbo conforme descrito acima em um Ice Lake i5-1035G4, um processador de cliente Ice Lake de gama média rodando a até 3,7 GHz. Os resultados completos estão ocultos na essência , e aqui apresento os resultados mais importantes para as frequências obtidas (todos os valores estão em GHz):



Conjunto de instruções Núcleos ativos
1 2 3 4
Escalar / 128 bits 3,7 3,6 3,3 3,3
256 bits leve 3,7 3,6 3,3 3,3
Pesado de 256 bits 3,7 3,6 3,3 3,3
512 bits leve 3,6 3,6 3,3 3,3
Pesado de 512 bits 3,6 3,6 3,3 3,3


Como esperado, a queda máxima na frequência ocorre à medida que o número de núcleos ativos aumenta, mas observe cada coluna para ver o impacto nas categorias de instrução. Quase nenhum bloqueio para baixo ocorre ao longo deste eixo! Com apenas um núcleo ativo, há uma diminuição com instruções amplas, e apenas por míseros 100 MHz: de 3.700 MHz para 3.600 MHz usando quaisquer instruções de 512 bits.



Em todos os outros casos, inclusive com vários núcleos ativos, bem como os pesados ​​de 256 bits, o downlocking licenciado é zero : tudo funciona tão rápido quanto com instruções escalares.



Tipos de licenças



Há outra mudança aqui. A arquitetura SKX tem três licenças ou categorias de instruções de downlock: L0, L1 e L2. Aqui, na ICL do cliente, existem apenas dois 3 deles e eles não correspondem exatamente às três categorias no SKX.



As licenças no SKX correspondem à largura e peso das instruções da seguinte forma:



Largura Pulmões Pesado
Escalar / 128 L0 L0
256 L0 L1
512 L1 L2


Em particular, observe que as instruções pesadas de 256 bits são licenciadas sob a mesma licença que as instruções leves de 512 bits.



Em ICLs de cliente, o esquema é o seguinte:



Largura Pulmões Pesado
Escalar / 128 L0 L0
256 L0 L0
512 L1 L1


Aqui, as instruções pesadas de 256 bits e leves de 512 bits estão em categorias diferentes! Na verdade, o conceito de instruções leves versus pesadas não parece se aplicar aqui: a categorização é inteiramente dependente da largura 4 .



E daí?



E daí?



No mínimo, isso significa que precisamos mudar nosso modelo mental do custo das instruções AVX-512 em relação às frequências. Em vez de dizer que eles “geralmente causam downlocking significativo”, pode-se dizer que este chip Ice Lake tem AVX-512 causando pouco ou nenhum downlocking licenciado, e presumo que isso também seja verdade para outros chips clientes Ice Lake.



No entanto, essa mudança em nossas expectativas tem uma falha importante: o downlocking licenciado não é o únicofonte de downlocking. Também podemos encontrar limitações de energia, calor ou corrente. Algumas configurações só são capazes de executar instruções amplas de SIMD em todos os núcleos por um curto período de tempo e depois exceder os limites de potência operacional. No meu caso, o laptop de US $ 250 que eu estava testando era extremamente mal resfriado e, em vez de limitações de energia, cheguei a um limite de dissipação de calor (100 ° C) segundos depois de executar instruções pesadas em todos os núcleos.



No entanto, essas outras restrições são qualitativamente diferentes das restrições de licenciamento. Basicamente, 5 eles limitam o princípio de pagar pelo que você usa: Se você usar instruções amplas ou pesadas (ou ambas), isso causará apenas um aumento microscópico na geração de energia ou calor associado apenas a essas instruções. Isso é diferente de alguns efeitos de licenciamento nos quais as mudanças de frequência ocorrem dentro do núcleo ou do chip inteiro, afetando significativamente a execução subsequente não relacionada a esses tipos de instruções.



Uma vez que operações amplas geralmente consomem menos energia do que um número semelhante de operações estreitas 6 , fica imediatamente claro se as operações amplas valem a pena ; pelo menos em casos que escalam bem com o aumento da largura. Seja como for, este problema é principalmente local: não depende do comportamento do código vizinho.



Resultado



Aqui estão minhas conclusões.



  • O processador Ice Lake i5-1035 demonstra apenas downlocking licenciado de 100 MHz com um núcleo ativo ao executar instruções de 512 bits.
  • Em todos os outros casos, não há downlock.
  • A frequência turbo de execução de instruções de 512 bits em todos os núcleos é 3,3 GHz, que é 89% da frequência máxima de execução das operações escalares em um núcleo (3,7 GHz), portanto, dentro dos limites de potência e dissipação de calor, este chip tem uma frequência muito “plana” vício.
  • Ao contrário da arquitetura SKX, este chip Ice Lake não usa a divisão em

    instruções "leves" e "pesadas" para escalar frequências: as operações FMA são realizadas da mesma maneira que as operações mais leves.


Ou seja, não há necessidade de ter medo de downlock em ICLs do cliente. Apenas o futuro nos dirá se isso também se aplica a ICLs do lado do servidor.



Discussões e comunicação



Esta postagem pode ser discutida no Hacker News .



Se você tiver dúvidas ou outros comentários, pode deixar um comentário na postagem original . Também estou interessado nos resultados em outros chips ICL, por exemplo nas versões i3 e i7: diga-me se você os tem e podemos obter os resultados.






Notas



  1. Já me canso de repetir constantemente down-locking licenciado , então geralmente usarei apenas o termo "down-locking", mas deve ficar claro que esta é uma versão licenciada dele, e não outros tipos de limitação de frequência
  2. Observe que Daniel escreveu sobre isso por muito mais tempo , de uma vez.

  3. : , - ( ) , , .
  4. , , ICL FMA : 512- . , 256- : - 2x256- FMA , , 1x512- FMA . , , 512- .
  5. , , , , , . , , , vzeroupper vzeroall.
  6. Por exemplo, uma adição de número inteiro de 512 bits normalmente consumirá menos energia do que as duas operações de 256 bits necessárias para calcular o mesmo resultado, porque a sobrecarga na execução aumenta não linearmente com o aumento da largura (eles incluem quase tudo, exceto a própria execução).



All Articles