- Uma compreensão básica de computação em GPU é essencial para todo engenheiro de software
- Este texto foca principalmente em GPUs da Nvidia e usa a terminologia da Nvidia
- GPUs são projetadas para processamento massivamente paralelo e alta taxa de transferência em gráficos, computação numérica, deep learning e mais
Comparando CPU e GPU
- CPUs são projetadas para execução sequencial de instruções e incluem vários recursos para reduzir a latência na execução de instruções.
- GPUs são projetadas para processamento massivamente paralelo e alta taxa de transferência, e têm latência de execução de instruções de média a alta.
- GPUs podem processar um número muito maior de operações, muito mais rapidamente, do que CPUs.
# Arquitetura de GPU
Arquitetura de computação da GPU
- Uma GPU é composta por um conjunto de streaming multiprocessors (SMs).
- Cada SM inclui vários streaming processors (cores ou threads).
- Um SM possui uma quantidade limitada de memória on-chip (memória compartilhada ou scratchpad), compartilhada por todos os cores.
Arquitetura de memória da GPU
- Uma GPU possui vários tipos de memória em múltiplos níveis.
- Cada SM possui uma grande quantidade de registradores, que são compartilhados entre os cores.
- O cache de constantes é usado para armazenar em cache dados constantes usados na execução do código.
- A memória compartilhada é uma memória SRAM on-chip rápida, de baixa latência e programável.
- O cache L1 armazena em cache dados frequentemente acessados do cache L2.
- O cache L2 é compartilhado por todos os SMs e armazena em cache dados frequentemente acessados da memória global.
- A memória global é uma DRAM de alta capacidade e alta largura de banda, distante dos SMs, portanto com alta latência.
# Entendendo o modelo de execução da GPU
Breve introdução a kernels CUDA e blocos de threads
- CUDA é uma interface de programação para escrever programas para GPUs da Nvidia.
- Um kernel é uma computação expressa em uma forma semelhante a uma função C/C++ que é executada em paralelo na GPU.
- Para executar um kernel, é iniciado um conjunto de threads chamado grid.
Etapas da execução de um kernel na GPU
- Copiar dados do host para o device
- Escalonar blocos de threads para os SMs
- Single Instruction Multiple Threads (SIMT) e warps
- Escalonamento de warps e tolerância à latência
- Copiar os dados de resultado do device para a memória do host
# Conceitos de particionamento de recursos e ocupação
- A utilização de recursos da GPU é medida por uma métrica chamada "ocupação", que representa a razão entre o número de warps alocados e o número máximo de warps que um SM pode suportar.
- A ocupação é limitada pelos recursos de execução do SM, registradores, memória compartilhada, slots de blocos de threads e slots de threads.
- É importante minimizar a latência mantendo alta ocupação por meio da otimização do código.
# Resumo
- Uma GPU é composta por vários SMs, e cada SM possui vários cores de processamento.
- A memória global fica distante no chip e tem alta latência.
- Os caches L1 e L2 funcionam de forma semelhante aos caches L1/L2 da CPU.
- Cada SM tem memória compartilhada, que é compartilhada entre os cores.
- Para executar um kernel na GPU, é iniciado um grid de threads.
- A GPU atribui blocos para execução nos SMs, e todas as threads de um bloco são executadas no mesmo SM.
- As threads atribuídas a um SM são ainda agrupadas em conjuntos de 32 chamados warps.
- A GPU realiza particionamento dinâmico de recursos entre threads de acordo com os requisitos das threads e os limites do SM.
# Encerrando
- GPUs são amplamente usadas hoje em dia, e sua arquitetura e modelo de execução são fundamentalmente diferentes dos das CPUs.
- Este texto aborda vários aspectos das GPUs e oferece insights sobre por que elas são tão amplamente usadas e como funcionam.
Opinião do GN⁺
- GPUs são uma tecnologia essencial para deep learning e computação numérica complexa, e este texto ajuda a entender a arquitetura básica e o modelo de execução de uma GPU.
- O conteúdo é especialmente importante para engenheiros de software iniciantes interessados em processamento paralelo e computação de alto desempenho.
- Este texto oferece conhecimento básico sobre programação para GPU e é um material interessante que desperta curiosidade sobre a área.
1 comentários
Comentários do Hacker News