A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução a GPGPU CUDA: arquitetura de computação paralela para GPGPU.

Apresentações semelhantes


Apresentação em tema: "Introdução a GPGPU CUDA: arquitetura de computação paralela para GPGPU."— Transcrição da apresentação:

1 Introdução a GPGPU CUDA: arquitetura de computação paralela para GPGPU

2 Introdução a GPGPU Por que CUDA? Instalação de CUDA
Desempenho versus custo NVIDIA é líder de mercado: mais de 108 GPUs Programação paralela para muitos Instalação de CUDA Driver CUDA toolkit (compilador e bibliotecas) CUDA SDK (utilitários e exemplos) CUDA: modelo de programação + interface de programação (C para CUDA, APIs, runtime) + driver + hardware. Porque CUDA: performance versus custo, mais de 100 milhões de unidades vendidas (jogos), programação paralela. Como instalar.

3 Fundamentos de programação CUDA
Modelo de programação Host: executa a aplicação (CPU) Dispositivo (GPU) Coprocessador da CPU Executa kernels Host e dispositivo tem DRAMs próprias Host: Aloca memória no dispositivo Transfere dados de entrada para o dispositivo Dispara a execução de kernels Transfere dados resultantes do dispositivo Libera memória no dispositivo

4 Fundamentos de programação CUDA
Modelo de programação Kernel Função geralmente escrita em C para CUDA Executa no dispositivo N vezes em N threads em paralelo Threads são organizadas em blocos Um bloco é um arranjo 1D, 2D ou 3D de threads Cada thread de um bloco tem um índice 1D, 2D ou 3D Blocos são organizados em grids Um grid é um arranjo 1D ou 2D de blocos Cada bloco de um grid tem um índice 1D ou 2D Os blocos de um grid têm o mesmo número de threads GPUs Fermi podem executar vários kernels em paralelo.

5 Fundamentos de programação CUDA
Exemplo: kernel executando em 72 threads Grid 2D com: Dimensão 3×2×1 6 blocos Blocos 2D com: Dimensão 4×3×1 12 threads cada

6 Fundamentos de programação CUDA
Modelo de programação Um kernel é uma função que: Começa com o especificador __global__ Tem tipo de retorno void Kernels podem invocar outras funções que: São especificadas como __device__ Podem invocar outras especificadas como __device__ Funções que executam no dispositivo: Não admitem número variável de argumentos Não admitem variáveis estáticas Não admitem recursão Não admitem variáveis do tipo endereço de função GPUs Fermi podem executar vários kernels em paralelo.

7 Fundamentos de programação CUDA
Modelo de programação Kernels são invocados do host Um dispositivo executa um kernel de cada vez GPUs Fermi podem executar vários kernels em paralelo.

8 Fundamentos de programação CUDA
Modelo de programação Configuração de execução de um kernel Dimensões do grid e dos blocos Tamanho da memória compartilhada (opcional) Especificada na invocação (ou lançamento) do kernel Dimensão 3D é representada por objeto do tipo dim3 Um grid: 1D de dimensão dim3 dG tem dG.x × 1 × 1 blocos 2D de dimensão dim3 dG tem dG.x × dG.y × 1 blocos Um bloco: 1D de dimensão dim3 dB tem dB.x × 1 × 1 threads 2D de dimensão dim3 dB tem dB.x × dB.y × 1 threads 3D de dimensão dim3 dB tem dB.x × dB.y × dB.z threads

9 Fundamentos de programação CUDA
Modelo de programação Identificador global de uma thread Pode ser usado para indexar vetores em funções __global__ ou __device__ Determinado a partir das variáveis pré-definidas: dim3 gridDim Dimensão do grid dim3 blockDim Dimensão do bloco dim3 blockIdx Índice do bloco no grid dim3 threadIdx Índice da thread no bloco

10 Fundamentos de programação CUDA
Modelo de programação Hierarquia de memória acessada por uma thread Memória compartilhada do bloco da thread Visível para todas as threads do bloco Tempo de vida do bloco Memória local da thread Memória global Memória constante Memória de textura Tempo de vida da aplicação Somente leitura

11 Fundamentos de programação CUDA
Modelo de programação Capacidade de computação 1.0 1.1 1.2 1.3 Especificações: depende do dispositivo Número de multiprocessadores e processadores Dimensões de grids e blocos DRAM Memória compartilhada, etc.

12 Fundamentos de programação CUDA
Interface de programação C para CUDA e API de runtime API de driver Ambas APIs têm funções para: Gerência de memória no dispositivo Transferência de dados entre host e dispositivo Gerência de sistemas com vários dispositivos, etc. API de runtime tem também funções para: Gerenciamento de threads Detecção de erros Manual de referência de CUDA APIs exclusivas

13 Fundamentos de programação CUDA
Programa básico em C para CUDA Seleção do dispositivo a ser usado Alocação de memória no host Dados de entrada na memória do host Alocação de memória no dispositivo Transferência de dados do host para dispositivo Invocação do(s) kernel(s) Transferência de dados do dispositivo para host Liberação de memória no host Liberação de memória no dispositivo Finalização

14 Fundamentos de programação CUDA
Programa básico em C para CUDA Seleção do dispositivo a ser usado cudaSetDevice() Alocação de memória no dispositivo cudaMalloc() Transferência de dados entre host e dispositivo cudaMemcpy() Liberação de memória no dispositivo cudaFree() Finalização cudaThreadExit()


Carregar ppt "Introdução a GPGPU CUDA: arquitetura de computação paralela para GPGPU."

Apresentações semelhantes


Anúncios Google