37
GPGPU

GPGPU. GPU GPU – Quebra de paradigma radical Você mudaria todo o teu paradigma de desenvolvimento e hardware apenas para ganhar 5% de desempenho?

Embed Size (px)

Citation preview

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

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?

As GPUs vão desaparecer...