Altifigence Academy

18 / 24 · Conceito

Blocos, halos e somas parciais

Para Th=Tw=2,Tc=1,Tm=2,kernel 3×3,passo dois,dilatação um, calcule os bytes de entrada/pesos/somas de 32 bits/viés com buffer único.

Particione tensores para caber no armazenamento

Escolha altura de saída Th,largura Tw,quantidade de canais de entrada Tc e de saída Tm para um bloco. Um halo de entrada se estende além do bloco de saída. Para passo S,dilatação D e kernel R, a altura necessária da entrada é (Th−1)S+(R−1)D+1; aplique o equivalente horizontal para a largura. O preenchimento das bordas pode ser gerado em vez de buscado.

Dividir os canais de entrada exige preservar cada soma parcial de saída ao longo de todos os blocos de canais. Arredondar cada bloco antecipadamente muda a operação. Some o viés uma vez no primeiro bloco de canais e continue a mesma soma. Mudar os blocos de canais de saída também muda pesos e vieses.

Orçamento de armazenamento resolvido

Para uma operação 3×3 de passo e dilatação unitários, considere Th=Tw=2,Tc=2,Tm=2. O halo é 4×4, exigindo 32 bytes de entrada int8. Os pesos usam 2×2×3×3=36 bytes. Oito somas parciais de 32 bits usam 32 bytes e dois vieses de 32 bits usam oito. Total:108 bytes. Armazenamento de escalas, endereços, validade e controle está excluído e precisa de uma reserva separada.

Buffers duplos de entrada e pesos exigem 2×(32+36)+32+8=176 bytes, além de um orçamento de 128 bytes. Reduzir Tc para um dá dezesseis bytes de entrada e dezoito de pesos. O armazenamento com buffers duplos torna-se 2×34+32+8=108 bytes. Preserve as somas parciais pelos dois blocos de canais de entrada. Fazer os buffers caberem não prova que as transferências possam se sobrepor ao cálculo; verifique o cronograma separadamente.

O passo dois amplia a região de entrada do mesmo bloco de saída 2×2 para 5×5. Blocos adjacentes podem compartilhar valores de halo, mas recargas independentes ainda duplicam tráfego. Distinga bytes únicos do tensor, que são um limite inferior, das transferências reais dos blocos.

Se M=5 e Tm=2, o último bloco tem um canal de saída válido. Masque o acesso extra a pesos e saída. Aplique máscaras equivalentes aos blocos finais espaciais e de canais de entrada. A documentação do NVIDIA CUTLASS descreve uma abordagem real de GEMM implícito que gera blocos sem uma matriz expandida completa. Calculamos armazenamento e somas parciais aqui em vez de executar essa implementação CUDA.

Experimente

Para Th=Tw=2,Tc=1,Tm=2,kernel 3×3,passo dois,dilatação um, calcule os bytes de entrada/pesos/somas de 32 bits/viés com buffer único.

Ler a explicação

A entrada 5×5 usa 25 bytes. Acrescente dezoito bytes de pesos,32 bytes de somas e oito bytes de viés:83 bytes, excluindo controle e escalas.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.