High-Performance FP16 General Matrix Multiplication on NVIDIA Ada Lovelace via CUTLASS and WMMA: A Benchmark and Pipeline-Depth Analysis
Este artigo avalia o desempenho de GEMM em FP16 na NVIDIA RTX 4060 da arquitetura Ada Lovelace através de cuBLAS, CUTLASS e implementações customizadas de WMMA, revelando que uma profundidade de pipeline de três com uma geometria de tile específica atinge 52,7% do throughput de pico ao demonstrar que a pressão na memória compartilhada, em vez da profundidade do pipeline, é o principal gargalo que limita a otimização adicional.
Artigo original sob licença CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine que você tem uma cozinha superveloz (uma GPU) com uma equipe de chefs especializados chamados Tensor Cores. Esses chefs são incrivelmente rápidos em picar e misturar ingredientes (multiplicação de matrizes) para um banquete gigante (aprendizado profundo). A cozinha no novo fogão "Ada Lovelace" (uma placa gráfica RTX 4060) é teoricamente capaz de servir 60,55 TFLOPS (isso são 60,55 trilhões de operações matemáticas por segundo).
Mas tem um detalhe: só porque os chefs podem picar nessa velocidade, não significa que eles estejam picando assim. Eles frequentemente precisam esperar os ingredientes serem entregues da despensa.
O Grande Experimento: Como Manter os Chefs Ocupados
Os pesquisadores queriam descobrir a melhor maneira de organizar a cozinha para que os chefs nunca parem de picar. Eles testaram três maneiras diferentes de rodar a cozinha:
- A Caixa Preta (cuBLAS): Uma receita pré-embalada e de código fechado da NVIDIA que geralmente funciona muito bem, mas não permite que você ajuste os detalhes.
- O Projeto Aberto (CUTLASS): Um kit de ferramentas flexível e de código aberto que permite que você construa seu próprio layout de cozinha do zero.
- A Abordagem DIY (WMMA): Uma cozinha construída sob medida onde você controla cada movimento dos chefs, mas é muito mais difícil de construir.
Eles montaram um enorme desafio de culinária com ingredientes de tamanho 8192 × 8192 e testaram diferentes "profundidades de pipeline". Pense na profundidade de pipeline como o número de bandejas de ingredientes que a cozinha mantém prontos.
- Profundidade de Pipeline 2: Apenas 2 bandejas prontas.
- Profundidade de Pipeline 3: 3 bandejas prontas.
- Profundidade de Pipeline 4: 4 bandejas prontas.
O senso comum (e um modelo matemático simples) sugeria que mais bandejas = mais velocidade. A lógica era: "Se tivermos mais bandejas, os chefs nunca ficarão sem ingredientes, então eles trabalharão mais rápido."
A Surpresa: Mais Não é Sempre Melhor
Os pesquisadores mediram a velocidade e aqui está o que encontraram:
- Profundidade 2: A cozinha operou a 25,6 TFLOPS. Os chefs estavam esperando demais.
- Profundidade 3: A cozinha acelerou para 31,9 TFLOPS (o que é 52,7% do máximo teórico). Este foi o ponto ideal!
- Profundidade 4: A cozinha na verdade desacelerou para 31,1 TFLOPS.
Esta é a principal descoberta: Adicionar aquela quarta bandeja não ajudou; tornou as coisas piores. O modelo matemático simples previu que a velocidade deveria ter saltado para 35,4 TFLOPS, mas não saltou. O modelo estava errado por 13,8%.
Por que Adicionar uma Bandeja Deu Errado?
O artigo explica que a cozinha tem espaço limitado. Quando eles adicionaram a 4ª bandeja (aumentando o uso da "Memória Compartilhada" para 96 KB), isso forçou a cozinha a reduzir o número de equipes de cozinha (threadblocks) que poderiam trabalhar ao mesmo tempo.
- Com 3 bandejas, a cozinha podia acomodar 2 equipes de chefs em cada fogão.
- Com 4 bandejas, a cozinha só conseguia acomodar 1 equipe.
Mesmo que a única equipe tivesse mais ingredientes, eles tiveram que esperar mais tempo porque havia menos equipes para substituir quando uma ficava travada. A cozinha ficou "lotada" de ingredientes, mas "vazia" de trabalhadores. Os pesquisadores mediram que a ocupação (quantas equipes estão trabalhando) caiu, e os chefs tiveram que usar mais "registradores" (seus blocos de notas pessoais), o que também os atrasou.
Os Vencedores e Perdedores
- O Vencedor: O kit de ferramentas CUTLASS com 3 bandejas e um tamanho de tile específico de 256 × 128. Ele atingiu 31,9 TFLOPS. Isso foi tão bom que superou a "Caixa Preta" padrão (cuBLAS) por uma margem minúscula, quase imperceptível de 1,3% (o que os autores dizem ser apenas ruído, mas prova que o projeto aberto pode igualar o fechado).
- O Segundo Lugar do DIY: O kernel customizado WMMA (a cozinha totalmente DIY) conseguiu 25,1 TFLOPS em um teste ligeiramente menor. Foi mais lento porque não utilizou os truques sofisticados de "double buffering" para sobrepor a entrega de ingredientes com o cozimento.
- O Perdedor: A ideia de que "mais profundidade de pipeline é sempre melhor". O artigo explicitamente descarta isso para este hardware específico.
O Quão Certos Eles Estão?
Os autores estão muito confiantes nesses números porque os mediram diretamente no hardware, rodando o teste 10 vezes e tirando a média dos resultados. Eles até conferiram sua matemática contra uma ferramenta de medição integrada da NVIDIA (o profiler) e descobriram que seu código customizado correspondia perfeitamente.
No entanto, eles admitem algumas coisas que não provaram:
- Eles testaram apenas um tamanho específico de problema (8192). Eles não sabem se a regra de "3 bandejas é o melhor" se mantém para problemas menores ou de formatos estranhos.
- Eles não puderam testar profundidades de pipeline superiores a 4 porque a cozinha simplesmente ficou sem espaço (memória).
- Tiveram que rodar seus testes no Windows, onde um erro de driver impediu que comparassem seu código customizado e o código padrão exatamente na mesma execução (embora o tenham feito em execuções separadas).
A Conclusão
Se você está tentando tirar o máximo proveito de uma placa gráfica de consumo como a RTX 4060 para tarefas pesadas de matemática, não fique apenas adicionando mais buffers. Existe uma zona "Goldilocks" (o ponto ideal). Neste caso, 3 estágios de preparação foram perfeitos. Ir para 4 estágios deixou a cozinha muito apertada, atrasando todo mundo.
Os pesquisadores liberaram todo o seu código como código aberto, para que qualquer pessoa possa tentar construir sua própria cozinha e ver se consegue bater o recorde de 31,9 TFLOPS. Eles sugerem que trabalhos futuros devem olhar para diferentes tamanhos de problemas e usar Linux para obter dados ainda mais limpos, mas, por enquanto, eles mostraram que 31,9 TFLOPS é o pico atual para essa configuração, e que 31,1 TFLOPS é o que acontece quando você tenta ser ganancioso demais com a memória.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.