O FlashAttention-3 eleva a eficiência de atenção exata em GPUs NVIDIA Hopper de 35% para até 86% do pico teórico de TFLOPS. O algoritmo atinge 850 TFLOPS em precisão FP16 e ultrapassa 1,3 PFLOPS em FP8 no acelerador H100 SXM5.
A transição para contextos longos de até 128k tokens impõe um teto severo na largura de banda de memória e na ocupação de registradores. Enquanto as gerações anteriores focavam em reduzir o tráfego HBM-SRAM, o silício Hopper exige controle direto de execução assíncrona.

Por que o FlashAttention-2 estagnou na microarquitetura Hopper (SM90)
O FlashAttention-2 atinge apenas 30% a 35% da capacidade do chip NVIDIA H100 por manter um fluxo síncrono centrado em registradores gerais. A arquitetura Ampere tolerava essa abordagem, mas o silício Hopper triplicou o poder computacional sem triplicar a taxa de transferência.
Na GPU NVIDIA A100 (Ampere SM80), a intensidade computacional de pico era de 312 TFLOPS ÷ 1.935 TB/s ≈ 161 FLOP/byte. O algoritmo mantinha os núcleos ocupados reutilizando blocos em SRAM.
No acelerador NVIDIA H100 SXM5 (Hopper SM90), o cálculo bruto saltou para 989 TFLOPS não-esparsos em FP16. Com banda de 3,35 TB/s na HBM3, a intensidade requerida subiu para 989 TFLOPS ÷ 3.35 TB/s ≈ 295 FLOP/byte.
O profiling via NVIDIA Nsight Compute revela três gargalos que travavam o FlashAttention-2 em cerca de 320 TFLOPS no H100:
- Movimentação síncrona via registradores: A transferência de matrizes entre HBM3 e memória compartilhada (SMem) consumia ciclos dos warps e inflava o
Register File. - Ociosidade dos Tensor Cores: Os warps alternavam entre GEMM denso e redução de Softmax nas unidades SIMT FP32, paralisando os motores matriciais.
- Barreiras de bloco monolíticas: Primitivas como
__syncthreads()forçavam a sincronização de todos os threads, acumulando atrasos de cauda a cada ladrilho de atenção.
| Microarquitetura | GPU de Referência | Pico FP16 Denso (TFLOPS) | Banda HBM (TB/s) | Intensidade Roofline (FLOP/byte) | Throughput FlashAttention-2 | Throughput FlashAttention-3 |
|---|---|---|---|---|---|---|
| Ampere (SM80) | NVIDIA A100 SXM | 312 TFLOPS | 1,935 TB/s | ~161 FLOP/byte | 225 TFLOPS (72% pico) | Não suportado (requer SM90+) |
| Hopper (SM90) | NVIDIA H100 SXM5 | 989 TFLOPS | 3,35 TB/s | ~295 FLOP/byte | 320 TFLOPS (32% pico) | 850 TFLOPS (86% pico) |
| Hopper (SM90a) | NVIDIA H200 SXM | 989 TFLOPS | 4,80 TB/s | ~206 FLOP/byte | 345 TFLOPS (35% pico) | 870 TFLOPS (88% pico) |
| Blackwell (SM100) | NVIDIA B200 SXM | 2.250 TFLOPS | 8,00 TB/s | ~281 FLOP/byte | ~650 TFLOPS (29% pico) | > 2.000 TFLOPS (89% pico) |
O papel do TMA e das instruções WGMMA na memória compartilhada
O Tensor Memory Accelerator (TMA) transfere blocos multidimensionais diretamente da HBM3 para a memória compartilhada sem usar registradores de uso geral. A cópia ocorre em segundo plano com descritores de tensores em nível de hardware.
Nos kernels convencionais, cada elemento trafegava da memória global para os registradores antes de ser gravado na SMem. No Hopper, uma única instrução TMA iniciada por um thread move matrizes inteiras. Barreiras de hardware (mbarrier) sincronizam o término, liberando 31 threads do warp para computação imediata.
// Inicialização do mbarrier assíncrono via PTX no Hopper SM90
#if __CUDA_ARCH__ >= 900
asm volatile (
"mbarrier.init.shared::cta.b64 [%0], %1;\n"
:
: "r"(smem_barrier_ptr), "r"(expected_transaction_bytes)
: "memory"
);
#endif
As instruções Warp Group Matrix Multiply and Accumulate (WGMMA) operam diretamente sobre dados na memória compartilhada. Um grupo de 4 warps (128 threads) alimenta os Tensor Cores com operandos sem estágios intermediários em registradores, acumulando o resultado em FP32.

Warp Specialization: dividindo papéis entre Producers e Consumers
A especialização de warps segrega o bloco de threads em dois grupos funcionais independentes com responsabilidades exclusivas no pipeline. Essa separação impede que a latência de transferência de dados interrompa a execução dos Tensor Cores.
No paper seminal do FlashAttention-3 (arXiv:2407.08608), formulado por Jay Shah e Tri Dao, a partição típica em um threadblock de 256 threads aloca:
- Producer Warps (1 Warp / 32 threads): Emite comandos assíncronos ao TMA para carregar blocos
KeVda memória global para a SMem e sinaliza o avanço de fase nombarrier. - Consumer Warpgroups (2 Warpgroups / 224 threads): Aguardam a liberação do
mbarrier, executam as instruções WGMMA nos Tensor Cores e aplicam a Softmax nas unidades SIMT FP32.
Como os Producers não realizam cálculo aritmético pesado e os Consumers não gerenciam endereçamento global, os registradores são particionados de forma assimétrica. O compilador CUDA reserva o mínimo de registradores para os produtores e concentra a capacidade máxima nos consumidores.
+-----------------------------------------------------------------------------------------------+
| ARQUITETURA DE WARP SPECIALIZATION NO FLASHATTENTION-3 |
+-----------------------------------------------------------------------------------------------+
PRODUCER WARP (1 Warp = 32 Threads) CONSUMER WARPGROUPS (7 Warps = 224 Threads)
+---------------------------------------+ +---------------------------------------+
| 1. Emite comandos TMA para HBM3 | | 1. Aguarda mbarrier.try_wait() |
| 2. Monitora cópia assíncrona | ====> | 2. Executa GEMM 1 (Q x K^T) via WGMMA |
| 3. Sinaliza mbarrier.arrive() | | 3. Processa Softmax nas ALUs SIMT FP32 |
| 4. Gerencia anel de buffers em SMem | | 4. Executa GEMM 2 (P x V) via WGMMA |
+---------------------------------------+ +---------------------------------------+
Interleaving de GEMM e Softmax: eliminando a ociosidade do silício
O escalonamento entrelaçado sobrepõe as operações escalares da Softmax com as multiplicações matriciais de blocos adjacentes. Essa técnica mantém os Tensor Cores e as ALUs SIMT ocupados simultaneamente.
No FlashAttention-2, o cálculo de atenção O = Softmax(Q × K^T) × V ocorria em etapas sequenciais. Durante a redução de máximo, exponencial e normalização de S = Q K^T, os Tensor Cores ficavam parados aguardando os resultados intermediários.
No FlashAttention-3, o algoritmo fatia o cálculo em blocos menores com software pipelining em padrão ping-pong:
- Enquanto os Tensor Cores calculam a multiplicação matricial
Q_i × K_{j+1}^Tdo próximo bloco, as unidades SIMT calculam o exponencial e a soma parcial da Softmax do bloco anteriorS_{ij}. - Enquanto os Tensor Cores multiplicam a matriz de probabilidades
P_{ij}pelo valorV_j(GEMM 2), a thread recalibra o fator de escala nos acumuladores.
Essa sobreposição de instruções elimina bolhas de execução nos multiprocessadores de streaming (SMs), sustentando alta utilização dos Tensor Cores.
Estabilidade em FP8: Algoritmo de 2 Passos e Incoherent Processing
O FlashAttention-3 resolve as falhas de precisão e underflow do formato FP8 através de um algoritmo de atenção em dois passos combinado com transformações ortogonais de Hadamard. Essa técnica viabiliza inferência rápida sem degradar a perplexidade.
O formato FP8 E4M3 (1 bit de sinal, 4 bits de expoente e 3 bits de mantissa) dobra o throughput teórico no H100 (1.979 TFLOPS), mas possui faixa dinâmica restrita (±448). Em Softmax online de passo único, a variação entre o expoente máximo estimado e o real provoca cancelamento catastrófico e overflow.
O FlashAttention-3 implementa duas defesas matemáticas complementares:
- Algoritmo de Atenção em 2 Passos: O primeiro passo calcula o valor máximo exato de cada linha
m_i = max_j (Q_i × K_j^T)com acumulação em FP32. O segundo passo executa a exponenciação e a multiplicaçãoP × Vcom fatores de escala estáticos, reduzindo o erro numérico em 2,6x. - Incoherent Processing (Hadamard Transform): Multiplica projeções de ativações e pesos por matrizes aleatórias ortogonais de Hadamard
H_d. Essa rotação distribui outliers de grande magnitude por todas as dimensões, eliminando picos pontuais que estouram a faixa do FP8.
// Formulação matemática do reescalonamento estável em FP8 no FlashAttention-3
// Passo 1: Determinação do máximo global por linha
float row_max = -INFINITY;
for (int j = 0; j < num_blocks_k; ++j) {
row_max = fmaxf(row_max, block_max[j]);
}
// Passo 2: Multiplicação estável com normalização calibrada
float p_scale = 1.0f / expf(row_max);
// Executa WGMMA com operandos em FP8 (E4M3) e acumulador FP32

Benchmarks auditados: H100 SXM5, H200 e projeções para Blackwell B200
Os testes oficiais publicados no repositório Dao-AILab/flash-attention comprovam ganhos substanciais de velocidade em sequências curtas e longas. A arquitetura demonstra escalabilidade contínua até 128k tokens de contexto.
Em medições executadas em nós de 8x NVIDIA H100 SXM5 (80GB HBM3) com dimensão de cabeça d = 128:
- FP16 / BF16: O FlashAttention-3 sustenta 740 TFLOPS em 4k tokens e alcança 850 TFLOPS em 16k a 64k tokens, contra 320 TFLOPS do FlashAttention-2 e 240 TFLOPS do Triton.
- FP8 (E4M3): O throughput ultrapassa 1.200 TFLOPS (1,2 PFLOPS) em sequências de 8k tokens e atinge 1.350 TFLOPS em 32k tokens, entregando speedup de 2,0x sobre o FlashAttention-2 em FP16.
- Ocupação de SM: A utilização da pipeline de Tensor Cores salta de 34% para mais de 82% sem necessidade de padding artificial.
Para a arquitetura NVIDIA Blackwell (SM100 / B200) com ponto flutuante microscópico NVFP4 e largura de banda HBM3e de 8,0 TB/s, as primeiras implementações projetam throughput superior a 2,0 PFLOPS em FP16 e 4,2 PFLOPS em FP8.
| Contexto (Tokens) | Precisão | FlashAttention-2 (TFLOPS) | FlashAttention-3 (TFLOPS) | Speedup Relativo | Erro Máximo vs FP32 |
|---|---|---|---|---|---|
| 4.096 | FP16 | 310 TFLOPS | 740 TFLOPS | 2,38x | 0.000 (Exato) |
| 8.192 | FP16 | 325 TFLOPS | 815 TFLOPS | 2,50x | 0.000 (Exato) |
| 16.384 | FP16 | 330 TFLOPS | 850 TFLOPS | 2,57x | 0.000 (Exato) |
| 32.768 | FP8 (E4M3) | 480 TFLOPS | 1.240 TFLOPS | 2,58x | 0.008 (Calibrado) |
| 65.536 | FP8 (E4M3) | 510 TFLOPS | 1.320 TFLOPS | 2,58x | 0.009 (Calibrado) |
| 131.072 | FP8 (E4M3) | 525 TFLOPS | 1.350 TFLOPS | 2,57x | 0.011 (Calibrado) |
Integração em motores de inferência: vLLM, FlashInfer, SGLang e PyTorch
A adoção do FlashAttention-3 otimiza o pré-preenchimento (prefill) e a decodificação de múltiplos tokens em motores de inferência modernos. A técnica reduz drasticamente o tempo até o primeiro token (Time to First Token - TTFT).
A integração ocorre nas seguintes frentes do ecossistema de produção:
- vLLM Engine: Utiliza o FlashAttention-3 na fase de Chunked Prefill, permitindo processar prompts extensos com baixo consumo de memória, conforme documentado no repositório vLLM.
- FlashInfer: Biblioteca de alta performance para kernels de atenção em Multi-Head Latent Attention (MLA) do DeepSeek-V3 e R1, adotando a especialização de warps para fundir projeções latentes de KV cache.
- SGLang: O compilador RadixAttention do SGLang delega o cálculo de atenção sobre árvores de prefixos para o backend FA3, reduzindo a latência de decodificação multi-turn.
- PyTorch FlexAttention: A partir do PyTorch 2.5, o compilador
torch.compilesintetiza pipelines com TMA e WGMMA inspiradas nos padrões do FlashAttention-3 para máscaras de atenção customizadas via PyTorch FlexAttention.
Implementando FlashAttention-3 em produção
A utilização do FlashAttention-3 em ambientes de desenvolvimento exige CUDA 12.3 ou superior e hardware NVIDIA Hopper (Compute Capability 9.0 ou 9.0a).
import torch
import flash_attn_interface
# Validação de hardware SM90 (Hopper)
assert torch.cuda.get_device_capability()[0] >= 9, "FlashAttention-3 requer microarquitetura Hopper ou superior."
# Parâmetros de execução de atenção
batch_size = 4
seq_len = 16384
num_heads = 32
head_dim = 128
# Alocação de tensores em FP16 / BF16
q = torch.randn(batch_size, seq_len, num_heads, head_dim, dtype=torch.bfloat16, device="cuda")
k = torch.randn(batch_size, seq_len, num_heads, head_dim, dtype=torch.bfloat16, device="cuda")
v = torch.randn(batch_size, seq_len, num_heads, head_dim, dtype=torch.bfloat16, device="cuda")
# Execução assíncrona com kernel FlashAttention-3
output = flash_attn_interface.flash_attn_func(
q, k, v,
dropout_p=0.0,
softmax_scale=1.0 / (head_dim ** 0.5),
causal=True
)
print("Execução concluída com sucesso. Shape de saída:", output.shape)
Comparativo arquitetural: FlashAttention-1 vs FlashAttention-2 vs FlashAttention-3
A evolução da família FlashAttention reflete a migração de foco da engenharia de IA: da mitigação de I/O de memória à exploração de paralelismo no nível de instrução de silício.
| Dimensão de Análise | FlashAttention-1 (2022) | FlashAttention-2 (2023) | FlashAttention-3 (2024–2026) |
|---|---|---|---|
| Arquitetura-Alvo | NVIDIA Turing / Ampere (SM75/SM80) | NVIDIA Ampere / Ada Lovelace (SM80/SM89) | NVIDIA Hopper / Blackwell (SM90/SM100) |
| Gargalo Central | Tráfego HBM vs SRAM (IO-Bound) | Paralelização de threads e trabalho em blocos | Latência de instruções, pressão de RF e ociosidade de Tensor Cores |
| Mecanismo de Cópia | Leituras globais síncronas via registrador | Leituras assíncronas cp.async (Ampere) | TMA por hardware com descritor de tensores |
| Sincronização | __syncthreads() homogêneo em bloco | __syncthreads() otimizado | Hardware mbarrier assíncrono por warp |
| Papéis dos Warps | Homogêneos (todas as threads fazem tudo) | Homogêneos com particionamento em Q | Warp Specialization (Producers vs Consumers) |
| Execução Softmax/GEMM | Serializada estrita | Serializada estrita com menos I/O | Interleaved Software Pipelining (Ping-Pong) |
| Suporte FP8 | Não suportado | Experimental (instável numericamente) | Algoritmo de 2 Passos com Hadamard Incoherent |
| Throughput Médio | 50% a 60% do pico A100 | 70% a 73% do pico A100 | 75% a 86% do pico H100 (até 850 TFLOPS) |
O futuro da atenção em silício: NVFP4 e Blackwell
A microarquitetura NVIDIA Blackwell expande os fundamentos introduzidos pelo FlashAttention-3 ao incorporar a segunda geração do TMA e os núcleos NVFP4.
Processando tensores quantizados em blocos de 4 bits com matrizes de escala em hardware, os novos kernels superam 4 PFLOPS por GPU. Na Produtora MaxVision, a esteira de engenharia adota esses kernels de baixo nível para acelerar modelos generativos, sistemas multiagentes e indexação vetorial.
Fontes e Referências Primárias
- arXiv:2407.08608 — FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-Precision (Shah, Bikshandi, Zhang, Thakkar, Ramani, Dao — Together AI / Colfax Research / Princeton).
- GitHub: Dao-AILab/flash-attention — Repositório oficial do algoritmo FlashAttention e implementações em CUDA/CUTLASS.
- NVIDIA Hopper Architecture In-Depth — Whitepaper técnico oficial sobre SM90, TMA e WGMMA.
- GitHub: flashinfer-ai/flashinfer — Biblioteca de aceleração de atenção para LLMs e arquiteturas MLA.
- GitHub: vllm-project/vllm — Framework de inferência e serviço de modelos de linguagem de alta vazão.
- PyTorch FlexAttention — Especificação oficial do compilador de atenção flexível no PyTorch 2.5.