gpgpu. gpu gpu – quebra de paradigma radical você mudaria todo o teu paradigma de desenvolvimento...
TRANSCRIPT
![Page 1: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/1.jpg)
GPGPU
![Page 2: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/2.jpg)
GPU
![Page 3: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/3.jpg)
GPU – Quebra de paradigma radical
Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?
![Page 4: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/4.jpg)
GPGPU – a evolução ...
Há 3 fases históricas das GPUs:
-Fixed Function GPU
- Programmable GPU
- Arquitetura Unificada
![Page 5: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/5.jpg)
Fixed Function GPUs
-Arquitetura incapaz de aceitar programação-Impossível realizar cálculos sem ser de computação gráfica-Incapacidade de acesso ao processador- Conceito de APIs
![Page 6: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/6.jpg)
Fixed Function GPUs
InterfaceCPU - GPU
CPU
InterfaceGPU - Video
Enginede
Geometria
Engines de Rasterização
FrontBuffer
BackBuffers
ZBuffer
StencilBuffer
Texture Buffer
Memória
de
vídeo
Processador(es)
Back Buffer
Front Buffer
![Page 7: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/7.jpg)
Programmable GPU
- Vertex and Pixel Shaders- Arquitetura orientada a estrutura de dados de computação gráfica
![Page 8: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/8.jpg)
Programmable GPU
![Page 9: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/9.jpg)
Programmable GPU
![Page 10: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/10.jpg)
Arquitetura Unificada - CUDA
![Page 11: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/11.jpg)
Programmable GPU
-Limitações:-Shaders-Modo de endereçamento limitado-Pequeno grupo de instruções-Dificuldade de comunicação entre processadores e processos
![Page 12: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/12.jpg)
GPGPU
- Problema de ter que mapear tudo para APIs- Usar funções OpenGL ou DirectX para efetuar todo tipo de operações
![Page 13: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/13.jpg)
Arquitetura Unificada - CUDA
![Page 14: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/14.jpg)
Arquitetura Unificada - CUDA
Paralelismo sem esforço, baixo custo...
![Page 15: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/15.jpg)
Por que mais rápido? Tarefa 100 vezes mais rápido
Tarefa de 1 ano de duração cai para 3 dias
Tarefa de 1 dia cai para 15 minutos
Tarefa de 3 segundos cai para 30 vezes por segundo
![Page 16: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/16.jpg)
Exemplo: Simulação de Multidão
![Page 17: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/17.jpg)
GPU
Operações aritiméticas ++Operações de memória --
![Page 18: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/18.jpg)
Threads
Porque programar em Threads?
-Para fazer distribuição de carga em arquitetura single core
- Para fazer distribuição de carga entre múltiplos núcleos
- Desafio de ter que manter o máximo de uso de cada núcleo
![Page 19: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/19.jpg)
Threads
Quantas threads voce já criou para seu programa?
![Page 20: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/20.jpg)
Threads
-CUDA permite até 12 mil threads- CUDA é basicamente um cluster de threads
![Page 21: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/21.jpg)
Threads – Custo de gerenciamento
Em CPU, como fazemos pouca troca de threads, podemos achar natural gastar 1000 instruções para fazer a troca de uma thread para outra. Em CUDA há outro paradigma....
Não é necessário gerenciar as threads, a priori.
Sincronismo deve ser explicito
![Page 22: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/22.jpg)
Modelo de Programação
CUDA estende a linguagem C através de kernels
Kernels equivalem a funções, que serão executadas N vezes em paralelo
N é o número de threads
![Page 23: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/23.jpg)
Arquitetura do Software
![Page 24: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/24.jpg)
Funções em CUDA
-Não pode haver recursão no __device__-Sem variáveis estáticas-Sem numero variável de parâmetros-A chamada do kernel é assíncrona-Sincronismo deve ser feito explicitamente- __device__ __host__ : podem ser usados juntos
![Page 25: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/25.jpg)
Limite de banda de memória
Importância do reuso de dados
![Page 26: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/26.jpg)
Threads, Blocos e Grids
Um kernel corresponde a um grid de Blocos
Cada Bloco é composto por threads
Todas as threads compartilham a mesma área de memória
As threads de um mesmo bloco podem compartilhar umas com as outras
Threads de blocos diferentes não podem compartilhar memória entre si
![Page 27: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/27.jpg)
Threads, Blocos e Grids - memórias
![Page 28: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/28.jpg)
Palavras reservadas
![Page 29: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/29.jpg)
Hierarquia de Threads
Todos os threads de um bloco usam da mesma memória compartilhada.
O número de threads num bloco é limitado pela memória: GPUs atuais possuem até 512 threads.
![Page 30: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/30.jpg)
Funções em CUDA
__ global__ void KernelFunction (...)
dim3 DimGrid (100, 10); // Grid com 1000 blocosdim3 DimBlock (4, 8, 8); // Cada bloco tem 256 threadsSize_t SharedMemBytes = 32
KernelFun << DimGrid, DimBlock, SharedMemBytes>> (...);
![Page 31: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/31.jpg)
Kernel – será compilado para a GPU
// Kernel definition__global__ void vecAdd(float* A, float* B, float* C){}int main(){
// Kernel invocationvecAdd<<<1, N>>>(A, B, C);
}
__global define que é um kernel
![Page 32: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/32.jpg)
kernel
__global__ void vecAdd(float* A, float* B, float* C){
int i = threadIdx.x;C[i] = A[i] + B[i];
}
int main(){
vecAdd<<<1, N>>>(A, B, C);}
threadIdx define um ID de um dos threads<< n, m>> numero de blocos (n) e threads (m) solicitados para o kernel
![Page 33: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/33.jpg)
Hierarquia de Threads
threadIdx é um vetor de 3 componentes
Threads podem ser identificados com índices de 1, 2 ou 3 dimensões (formando thread blocks de uma, duas ou três dimensões)
Índice de uma thread:-Se for um bloco 1D: é a mesma coisa-Se for um bloco 2D (Dx, Dy): threadId de um thread de índice (x, y) é x + yDx
-Se for um bloco 3D (Dx, Dy, Dz): threadId de uma thread de índice (x, y, z) é x + yDx + zDxDy
![Page 34: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/34.jpg)
Primeiro exemplo de programa
cudaMalloc aloca espaço de memória global da GPU
![Page 35: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/35.jpg)
Primeiro exemplo de programa
![Page 36: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/36.jpg)
kernel
Como faria para somar uma Matriz?
![Page 37: GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?](https://reader036.vdocuments.mx/reader036/viewer/2022062318/552fc10b497959413d8c17e8/html5/thumbnails/37.jpg)
As GPUs vão desaparecer...