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

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

Computação de Alto Desempenho Utilizando Placas Gráficas

Apresentações semelhantes


Apresentação em tema: "Computação de Alto Desempenho Utilizando Placas Gráficas"— Transcrição da apresentação:

1 Computação de Alto Desempenho Utilizando Placas Gráficas
Divino César S. Lucas Universidade Católica de Goiás

2 Crônograma Introdução [10:30 até 11:00] Arquitetura [11:00 até 11:15]
O que é CUDA? [11:15 até 11:30] Aplicações [11:30 até 11:40] Exemplo de Código [11:40 até 11:50] Futuro [11:50 até 12:00] Dúvidas [12:00 até ~]

3 Introdução – Modelos de Programação
SISD (Single instruction single data) Fluxo sequêncial de instruções e dados

4 Introdução – Modelos de Programação
SIMD (Single Instruction Multiple Data) A mesma instrução com dados diferentes

5 Introdução – Modelos de Programação
MISD (Multiple Instruction Single Data) Multiplas instruções para o mesmo dado

6 Introdução – Modelos de Programação
MIMD (Multiple Instruction Multiple Data) Multiplas instruções e multiplos dados

7 Introdução – Porquê GPU?
Baixo Custo Alto Desempenho Relativamente fácil de ser programada Programas são portáveis Escalável Possibilita programação “heterogênea” Relação Custo/Beneficio extremamente alta

8 Introdução – Comparando a Performance
Gráfico comparativo com CPU 3.0 GHZ

9 Introdução – Lista de NVIDIA GPU’S
Modelo Processadores Clock Mem. Clock GForce 8400 GS 16 450 MHz 400 MHz GForce 8800 GT 96 550 MHz 800 MHz GForce 9600 GT 64 1,2 GHz 750 MHz GForce 9800 GT 112 1,5 GHz 900 MHz Tesla C1060 240 1,3 GHz Tesla S1070 960 1,44 GHz -

10 Introdução – Diferenças entre GPU e CPU
Quantidade de processadores Velocidade de acesso a memória Arquitetura projetada para paralelismo

11 Introdução – Benefícios da Prog. Paralela
Um pesquisador um supercomputador Possibilidade de resolver problemas maiores Solução para os problemas de arquitetura Possibilita aplicações, mais realistas Desenvolvimento acelerado da computação científica

12 Arquitetura – Hierarquia de Memória
Memória local por thread Memória compartilhada no bloco Memória constante por grid Memória global por grid Essa hierarquia foi projetada para permitir compartilhamento de tarefas entre as threads e reduzir acesso a memória externa.

13 Arquitetura – CUDA SDK

14 CUDA – O que é? CUDA – (Computing Unified Device Architecture)
Extensão para a linguagem C, Python, Java, Fortran ...

15 CUDA – O Básico Device = GPU = conjunto de multiprocessadores
Host = CPU Multiprocessador = Conjunto de processadores Kernel = Programa executável na GPU Grid = Array de threads que executam um Kernel Bloco de Thread = Grupo de threads executando no modelo SIMD.

16 CUDA – Visão Geral Funções Matemáticas sinf, powf, atanf, ceil, etc
Tipos primitivos float4, int4, unit4, etc Modificadores de funções __global__ // chamada via host __device__ // chamada via kernel __host__ // chamada e executa no host Modificadores de variáveis __constant__ // memória constante __device__ // no device, memória global __shared__ // compartilhada

17 CUDA – Visão Geral Configuração de execução kernel_cod<<<4,4>>>(...); Variáveis globais gridDim = Tamanho do grid blockDim = Tamanho do bloco blockIdx = Índice do bloco no grid threadIdx = Índice da thread no bloco Funções globais __syncthreads(); Gerenciamento de memória cudaMalloc(); // Alocação de memória cudaFree(); // Desalocação de memória cudaMemcpy(); // Copia memória

18 CUDA – Tipos de Memória Memória Local Local a thread, acesso de leitura/escrita Memória Compartilhada Local ao bloco, acesso de leitura/escrita Memória Global Todas as threads mais o host, leitura/escrita Memória Constante Todas as threads mais o host, apenas leitura

19 CUDA – Extensões e Bibliotecas
pyCUDA – CUDA for Python jaCUDA – CUDA for Java CuBLAS – Utilizada para Álgebra Linear CuFFT – Transformações de Fourier jCublas – Java para Álgebra Linear

20 CUDA – Exemplo de Código

21 Aplicações – Nicho de desenvolvimento
Uso intensivo de cálculos Algebra Linear Física Uso de largura de banda Mercado Financeiro Dados Genômicos Banco de Dados Computação Visual Processamento de Imagens Tomográfia Visão de Máquina

22 Aplicações – Casos reais

23 Exemplo – Somar Vetores em C
KERNEL __global__ void incrementArrayOnDevice(float *a, float *b, float *c, int N) { int idx = blockIdx.x*blockDim.x + threadIdx.x; if (idx<N) c[idx] = a[idx] + a[idx]; } HOST void incrementArrayOnHost(float *a, float *b, float *c, int N) { int i; for (i=0; i < N; i++) c[i] = a[i] + b[i]; } // Chamada do Kernel incrementArrayOnDevice <<< nBlocks, blockSize >>> (a, b, c, N);

24 Exemplo – Multiplicar Vetor com pyCUDA
KERNEL mod = drv.SourceModule(""" __global__ void multiply_them(float *dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """) HOST multiply_them = mod.get_function("multiply_them") a = numpy.random.randn(400).astype(numpy.float32) b = numpy.random.randn(400).astype(numpy.float32) dest = numpy.zeros_like(a) multiply_them(drv.Out(dest), drv.In(a), drv.In(b), block=(400,1,1))

25 Futuro – Supercomputador pessoal Tesla
Primeiro computador do mundo com vários núcleos na faixa de teraflops. 960 núcleos. Processamento de alto paralelismo. 250 vezes a performance de computação de um PC.

26 Futuro – Integração CPU e GPU
Como será o processador no futuro?

27 Obrigado pela atenção. Dúvidas. Divino César S
Obrigado pela atenção! Dúvidas? Divino César S. Lucas Universidade Católica de Goiás


Carregar ppt "Computação de Alto Desempenho Utilizando Placas Gráficas"

Apresentações semelhantes


Anúncios Google