- HipKittens é um conjunto de primitivas de programação projetado para extrair o desempenho potencial das GPUs AMD, otimizando acesso à memória, escalonamento e reutilização de cache
- A GPU AMD MI355X tem uma estrutura com 256 compute units e 8 chiplets (XCD), oferecendo um grande arquivo de registradores e instruções de núcleo matricial granulares
- Ao contrário da NVIDIA, a AMD não tem realocação de registradores, instruções matriciais assíncronas nem
mbarrier, então, em vez de wave specialization, funcionam melhor os escalonamentos 8-wave ping-pong e 4-wave interleave
- O HipKittens melhora a localidade de cache L2 e LLC com escalonamento de grid consciente de chiplet, alcançando ganhos de largura de banda e TFLOPS em operações de GEMM e Attention
- Essa abordagem compensa a falta de maturidade do software no ecossistema de GPUs AMD e fornece uma base para ampliar a escalabilidade da computação de IA em diferentes hardwares
Estrutura e características de desempenho das GPUs AMD CDNA
- A GPU AMD MI355X inclui 256 compute units (CU), e cada CU é composta por 4 SIMD
- Um SIMD executa uma wave de 64 threads, em contraste com o warp de 32 threads da NVIDIA
- A MI355X tem 70% do SRAM da B200 (165KB) e não possui instruções assíncronas de multiplicação matricial, realocação de registradores, aceleração de memória tensor nem
mbarrier
- Em compensação, oferece um arquivo de registradores 2x maior e 60% mais processadores (256 CU vs. 160 SM)
- Suporta instruções de núcleo matricial pequenas e granulares e tem carregamento direto de memória global para memória compartilhada (semelhante a TMA)
- A AMD adota uma arquitetura de chiplets composta por 8 chiplets (XCD), cada um com cache L2 independente, além de um cache LLC em nível superior
- Segundo a tabela, a MI355X entrega BF16 2,5 PFLOPs, MXFP8 5,0 PFLOPs e MXFP6 10,1 PFLOPs, além de 288GB de memória e 8TB/s de largura de banda
Desafios de projeto de kernels para AMD
- Otimização de acesso à memória: devido às limitações do compilador HIPCC e ao comportamento de I/O não público, o projeto de layout de dados e padrões de swizzle é importante
- Escalonamento dentro do processador: na AMD, é preciso aproveitar o arquivo de registradores e instruções matriciais pequenas em vez de memória compartilhada
- Escalonamento entre processadores: por causa da estrutura baseada em chiplets, é necessário distribuir o trabalho considerando efeitos NUMA no nível de cache
Padrões de acesso à memória do HipKittens
- O HipKittens (HK) usa tiles como unidade básica de dados e fornece funções de operação semelhantes às do PyTorch
- Um tile é definido por tipo de dado, tamanho e layout, e atende diferentes entradas com metaprogramação de templates em C++
- Escalonamento de registradores: como o HIPCC não consegue usar certos registradores como entrada de MFMA, o HK oferece fixação explícita de registradores
- O desenvolvedor pode especificar diretamente os registradores para escrever kernels de desempenho máximo
- Layout de registradores: na AMD, o layout muda conforme o tipo de dado e a forma da matriz, então um único padrão de swizzle não é possível
- Por exemplo, um tile bf16 16×16 e um tile bf16 16×32 exigem padrões de swizzle diferentes
- Estrutura de fases das instruções: as instruções de memória compartilhada da AMD têm grupos de fases descontínuos e pouca documentação interna
- O HK fornece um solver obtido por engenharia reversa para isso
- Geração de endereços: a AMD suporta carregamento assíncrono de HBM para memória compartilhada e faz otimização com swizzle de endereços HBM
Escalonamento dentro do processador: padrões de wave
- Wave specialization funciona bem na NVIDIA, mas na AMD há perda de desempenho por causa da ausência de realocação de registradores
- Waves produtoras ocupam registradores desnecessários, enquanto waves consumidoras sofrem spill por falta de registradores
- Nos experimentos do HK, a wave specialization na AMD causou queda de intensidade aritmética e gargalo de memória
- Exemplo: em GEMM, a configuração HK 0/8 alcançou 1605 TFLOPs, enquanto o CUTLASS chegou a 1570 TFLOPs
- Padrões alternativos de escalonamento
- 8-wave ping-pong: duas waves executam alternadamente clusters de memória/cálculo
- 4-wave interleave: uma wave intercala de forma fina operações de memória e cálculo
- O 8-wave tem código mais simples, enquanto o 4-wave é mais granular, mas gera código mais longo
- Em GEMM e Attention Forward, o 8-wave atingiu desempenho em nível SoTA
Escalonamento entre processadores: abordagem consciente de chiplet
- A AMD MI355X tem 8 chiplets XCD, e cada chiplet possui cache L2 independente
- Como os blocos de thread são atribuídos aos chiplets em esquema round-robin, a ordem do grid afeta diretamente a eficiência de reutilização de cache
- Um arranjo simples em row-major tem baixa taxa de reutilização de cache L2, causando perda de largura de banda
- Exemplo: L2 55%, LLC 95%, 15,1 TB/s, 1113 TFLOPs
- O HK introduz escalonamento de grid consciente de chiplet, aproveitando ao mesmo tempo a localidade dos caches L2 e LLC
- Ele agrupa blocos de thread por regiões adjacentes da matriz de saída para maximizar a reutilização dos dados de entrada
Exemplos de kernels reais
- Os hot loops dos kernels de Attention Forward e BF16 GEMM usam o esquema 8-wave ping-pong do HK
- Cada loop executa alternadamente clusters de Compute–Memory e sincroniza com barreiras de escalonamento
- No exemplo de código, operações do HK como
mma_AtB, load, exp2, col_sum são usadas repetidamente
Conclusão: AMD na era da IA multi-silicon
- O HipKittens alcança desempenho competitivo em AMD CDNA3 e CDNA4
- Três pontos principais: acesso à memória otimizado, escalonamento de wave centrado na AMD e escalonamento de grid consciente de chiplet
- Os kernels do HK alcançam o melhor desempenho no ecossistema AMD e também competem com kernels da NVIDIA Blackwell
- Para ampliar a diversidade da computação de IA, é preciso expandir a acessibilidade às GPUs AMD, e o HipKittens fornece a base de software essencial para isso
- Melhorias no escalonamento de registradores do HIPCC são apontadas como uma área importante de evolução futura
1 comentários
Comentários no Hacker News