Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMurilo Pao Alterado mais de 9 anos atrás
1
Computação de Alto Desempenho Utilizando Placas Gráficas Divino César S. Lucas Universidade Católica de Goiás divcesar@gmail.com
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 ModeloProcessadoresClockMem. Clock GForce 8400 GS16450 MHz400 MHz GForce 8800 GT96550 MHz800 MHz GForce 9600 GT641,2 GHz750 MHz GForce 9800 GT1121,5 GHz900 MHz Tesla C10602401,3 GHz800 MHz Tesla S10709601,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 >>(...); 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 __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]; } 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 >> (a, b, c, N); KERNEL HOST
24
Exemplo – Multiplicar Vetor com pyCUDA mod = drv.SourceModule(""" __global__ void multiply_them(float *dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """) 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)) KERNEL HOST
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. Lucas Universidade Católica de Goiás divcesar@gmail.com
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.