Aula 29: Largura de Banda e Intensidade Aritmética
Todo kernel faz dois tipos de trabalho: cálculo (operações de ponto flutuante, FLOPs) e movimentação de dados (bytes indo e voltando da memória). Duas métricas simples nos ajudam a entender o que importa. A primeira é a largura de banda: quantos bytes a memória movimenta por segundo. Calculamos como
Imagine um caminhão entregando tijolos para um construtor: a largura de banda é quantos tijolos o caminhão entrega por minuto, e a intensidade é quanto trabalho o construtor coloca em cada tijolo. Quando a intensidade é baixa, o construtor está sempre a esperar o caminhão — a memória é o gargalo. Quando a intensidade é alta, o caminhão espera pelo construtor — o cálculo é o gargalo.
- largura de banda (GB/s)
- Os bytes que a memória movimenta por segundo. Calculada como bytes dividido pelo tempo, convertida para GB/s dividindo por 1e9.
- intensidade aritmética (FLOP/byte)
- Os FLOPs realizados divididos pelos bytes movimentados da memória. Baixa = memory-bound; alta = compute-bound.
- memory-bound
- Um kernel de baixa intensidade cujo tempo de execução é governado pela largura de banda. Para acelerá-lo você reduz bytes, não adiciona FLOPs.
- compute-bound
- Um kernel de alta intensidade cujo tempo de execução é governado pelas unidades de cálculo, então a memória não é o gargalo.