Patrício Domingues Dep. Eng. Informática ESTG Instituto Politécnico de Leiria Leiria, Maio Programação Genérica de GPUs

Documentos relacionados
Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center

MC4: Introdução à Programação Paralela em GPU para a Implementação de Métodos Numéricos

Introdução a CUDA. Esteban Walter Gonzalez Clua. Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center START

TEMA DE CAPA. Introdução à Programação em CUDA

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Processamento Paralelo Utilizando GPU

Fabrício Gomes Vilasbôas

5 Unidades de Processamento Gráfico GPUs

Computação Paralela (CUDA)

Eng. Thársis T. P. Souza

Introdução ao CUDA. Material elaborado por Davi Conte.

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome

Hierarquia de memória:

Comparação de eficiência entre OpenCL e CUDA

Paralelização do Detector de Bordas Canny para a Biblioteca ITK usando CUDA

Sparse Matrix-Vector Multiplication on GPU: When Is Rows Reordering Worthwhile?

What is? Eduardo Viola Nicola Disciplina de IPPD

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU

3 Computação de Propósito Geral em Unidades de Processamento Gráfico

Introdução à Programação Paralela através de Padrões. Denise Stringhini Calebe Bianchini Luciano Silva

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO

Tópicos em Física Computacional: Introdução a Linguagem CUDA

Arquiteturas de Computadores

Arquitetura e Programação de GPU. Leandro Zanotto RA: Anselmo Ferreira RA: Marcelo Matsumoto RA:

Thársis T. P. Souza

Processamento de áudio em tempo real utilizando dispositivos não convencionais:

Aplicando Processamento Paralelo com GPU ao Problema do Fractal de Mandelbrot

ARQUITETURA DE COMPUTADORES

GPU (Graphics Processing Unit) Bruno Padilha Gregory De Bonis Luciana Kayo

Uma introdução para computação paralela de modelos massivos. Adriano Brito Pereira inf.puc-rio.br

Programação Paralela em Ambientes Computacionais Heterogêneos com OpenCL

Celso L. Mendes LAC /INPE

Introdução à Programação de GPUs

Memory-level and Thread-level Parallelism Aware GPU Architecture Performance Analytical Model

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1

Ambientes e Ferramentas de Programação para GPU. Denise Stringhini (Mackenzie) Rogério Gonçalves (UFTPR/IME- USP) Alfredo Goldman (IME- USP)

GPU Computing: Implementação do método do Gradiente Conjugado utilizando CUDA

Computadores e Programação (DCC/UFRJ)

CUDA: Compute Unified Device Architecture. Marco Antonio Simões Teixeira

Programação em Paralelo OpenMP

ESTRATÉGIAS DE OTIMIZAÇÃO DE CÓDIGO EM OPENCL

FACULDADE FARIAS BRITO

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Infraestrutura de Hardware. Processamento Paralelo Multicores, Multi-Threading e GPUs

Taxonomia de Flynn. Procura classificar todas as arquitecturas de computadores com base no processamento das instruções e dos dado.

GPU Computing. GeForce and Radeon OpenCL Test. OpenCL

Paradigmas de Computação Paralela

Estudo de Técnicas de Otimização de Desempenho para GPUs Utilizando CUDA Aplicado a um Modelo Meteorológico

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

Processadores para computação de alto desempenho

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

PARALELIZAÇÃO DO ALGORITMO AES E ANÁLISE SOBRE GPGPU 1 PARALLELIZATION OF AES ALGORITHM AND GPU ANALYSIS

Engenharia Informática Computação Gráfica

periféricos: interfaces humano-computador (HCI) arquivo de informação comunicações

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

OpenMP: Variáveis de Ambiente

Paralelização do algoritmo de Método de Estimação Não-Paramétrico por Núcleo Estimador Multivariado (KDE) utilizando GPU/CUDA

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Processadores para computação de alto desempenho

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

A Utilização da Tecnologia CUDA para Processamento Paralelo de Algoritmos Genéticos

A IMPORTÂNCIA DE THREADS NO DESEMPENHO DE APLICAÇÕES

Arquitetura e Organização de Processadores. Aula 1. Introdução Arquitetura e Organização

Waldemar Celes. 25 de Agosto de 2014

Sistemas de Entrada e Saída

ARQUITETURA DE COMPUTADORES

Implementação de um escalonador de processos em GPU

Módulo 3 - Estrutura e configuração de Sistemas Operativos monoposto

Processamento Sísmico de Alto Desempenho na Petrobras

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

Introdução OpenMP. Nielsen Castelo Damasceno

Elementos de conexão e condições de paralelismo. Aleardo Manacero Jr.

Arquiteturas de Computadores

Aplicação de Processamento Paralelo com GPU a Problemas de Escoamento Monofásico em Meios Porosos. Bruno Pereira dos Santos Dany Sanchez Dominguez

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

USO DE PARALELISMO DE DADOS PARA MAIOR EFICIÊNCIA DE ALGORITMOS DE PROCESSAMENTO DE IMAGENS

Sistemas de Entrada e Saída

Entrada/Saída. Capítulo 5. Sistemas Operacionais João Bosco Junior -

Exploração do paralelismo em arquiteturas multicore, multicomputadores e gpus

Arquitetura do SET de instruções Instruction SET. CISC vs RISC. What s assembly as to do with it?

Elementos de conexão e condições de paralelismo. Aleardo Manacero Jr.

Atol Fortin, Bruno da Hora, Lucas Piva, Marcela Ortega, Natan Lima, Pedro Raphael, Ricardo Sider, Rogério Papetti. 28 de novembro de 2008

COMPUTAÇÃO PARALELA COM ACELERADORES GPGPU 1. Emilio Hoffmann De Oliveira 2, Edson Luiz Padoin 3.

Soluções em GPU para o Problema do Alinhamento Spliced

PROPOSTA DE UMA ESTRATÉGIA DE PROGRAMAÇÃO EXPLÍCITA COM ANOTAÇÃO EM CÓDIGO EM BUSCA DE EFICIÊNCIA ENERGÉTICA 1

Análise e Testes de Algoritmos Utilizando Sistemas de Arquiteturas Híbridas CPU/GPU

Relatório de Atividades Desenvolvidas. Uso de GPU para Aceleração de Simulações Atmosféricas com o Modelo CCATT BRAMS.

Proposta de Melhoria de uma Implementação Paralela para GPUs Usando CUDA - Estudo de Caso em Modelo Atmosférico

Processamento de áudio em tempo real em dispositivos computacionais de alta disponibilidade e baixo custo

Jônatas Lopes de Paiva Instituto de Matemática e Estatística Universidade de São Paulo. 06 de maio de 2011

Comparação das Características de Simuladores de Arquiteturas Heterogêneas

Suporte à Execução Eficiente de Aplicações em Plataformas com Paralelismo Multi-Nível

Workshop de Informática Biomédica (WIBm)

Patricia Akemi Ikeda

Transcrição:

Patrício Domingues Dep. Eng. Informática ESTG Instituto Politécnico de Leiria Leiria, Maio 2012 http://bit.ly/patricio Programação Genérica de GPUs 1

CUDA Teaching Center A ESTG/IPLeiria é um CUDA Teaching Center para 2011-12 O único de Portugal http://research.nvidia.com/content/cuda-teaching-centers 2

Agenda Introdução ao GPGPU CPU vs GPU CUDA OpenCL OpenCL vs CUDA Término 3

GPU Graphical Processing Unit GPGPU Vulgo placa gráfica O que é GPGPU? Generic Programming of GPU Programação de placas gráficas para a execução de programas genéricos Programas não necessariamente gráficos 45X 35X 110-240X 4

Porquê GPUs? (1) O poder computacional das GPUs tem crescido muito mais rapidamente que o dos CPUs O mercado (e evolução) das GPUs é sustentado em grande parte pelos...gamers! 5

Obrigado Gamers! 6

Porquê GPUs? (2) A filosofia GPU é explorar paralelismo Aplicar simultaneamente a mesma operação a um conjunto de píxeis Lembrete: GPU servem primariamente para...gráficos! Conceito de manycore GPU têm muitos cores Um CPU tem que procurar ser eficiente num muito maior espetro de aplicações Um core CPU é mais poderoso e versátil do que um core GPU Intel i7 Sandy Bridge-E versus NVIDIA GTX 680 i7: 6 cores (x2 com hyperthreading) GTX 680: 1536 cores (8 x 192) 7

CPU vs GPU (1) CPU Baixa largura de banda CPU-memória Acesso aleatório à memória Nível médio de paralelismo Suporta código para qualquer fim GPU Elevada largura de banda GPU-memória Acesso serializado à memória Elevado nível de paralelismo Orientado para processamento paralelo de dados Fonte: Daniel Moth, C++ AMP, Principle Program Manager 8

CPU vs GPU (2) Core i7 Sandy Bridge NVIDIA Kepler (GTX 680) 9

Programação de GPUs Antigamente... Necessário recorrer às APIs gráficas (e.g., OpenGL) para execução de processamento genérico de dados Difícil de programar, muito pouco produtivo Em 2007, a NVIDIA lançou o CUDA CUDA: Compute Unified Device Architecture Simplifica a programação e execução de código na GPU Acessível como (pequena) extensão à linguagem C Também acessível via outras linguagens (C++,Java, Python, etc.) Presentemente na versão 4.2 (5.0 a caminho) Mas...CUDA apenas corre em hardware NVIDIA 10

Paradigma de programação orientado à thread GPU suporta a existência simultânea de vários milhares de threads Granulosidade diferente das threads num contexto CPU Idealmente, as threads executam as mesmas instruções sobre dados diferentes Exemplo Modelo SIMT Single Instruction Multiple Thread soma de dois vetores com N elementos cada thread soma apenas um elemento CUDA 1 2 3 N t 1 t 2 t 3 t i t n 2 4 6 2N t 1 t 2 t 3 t i t n 3 6 9 3N V_a + V_b = V_c 11

Quero ver código fonte! (1) O CUDA distingue entre código... a ser executado no CPU host a ser executado no GPU device Código executado no GPU Ponto de entrada: kernel global O compilador ( nvcc ) converte código fonte para PTX (instruções do GPU) ID da thread /* N: tamanho dos vetores */ global void addv(int *V_a, int *V_b, int *V_c, int N) { int i = threadidx.x; while( i < N) { V_c[i]=V_a[i]+V_b[i]; // salta p/ próximo i += blockdim.x; } } 12

Quero ver código fonte! (2) Cada thread executa o código do kernel Cada thread tem um threadidx.x diferente Cada thread efetua a soma dos elementos de índice threadidx.x Cada thread executa num core distinto ID da thread /* N: tamanho dos vetores */ global void addv(int *V_a, int *V_b, int *V_c, int N) { int i = threadidx.x; while( i < N) { V_c[i]=V_a[i]+V_b[i]; // salta p/ próximo i += blockdim.x; } } 13

Chamada ao kernel GPU Corresponde à execução do kernel no GPU A chamada é feita a partir do CPU Como é chamado o kernel? (1) addv<<<numblocos,threadsporbloco>>>(va,vb,vc,n); NumBlocos Número de blocos de threads que vão executar o kernel ThreadsPorBloco Número de threads por bloco addv<<<5,6>>>(...) 5 blocos de threads, cada um com 6 threads 14

Como é chamado o kernel? (2) Na realidade, o CUDA disponibiliza uma organização que pode ser tridimensional para a especificação dos blocos de execução Exemplo (duas dimensões) dim3 NumBlocosXY(3,2); dim3 ThreadBlocosXY(4,3); addv<<<numblocos,threadsblocos>>> (va,vb,vc,n); 15

Coordenadas no GPU Coordenadas acessíveis no código da GPU (blockidx.x,blockidx.y) (threadidx.x,threadidx.y) griddim.x griddim.y /* N: tamanho dos vetores */ global void addv(int *V_a, int *V_b, int *V_c, int N) { int i = threadidx.x; while( i < N) { V_c[i]=V_a[i]+V_b[i]; // salta p/ próximo i += blockdim.x; } } blockdim.x 16 blockdim.y

OK, e a memória? A memória do GPU é separada da memória do CPU Exemplos NVIDIA GTX 680 2GB (GPU) Intel i7 Sandy Bridge-E 8 GB (CPU) Espaços de endereçamento diferentes Implicações Cópia explícita de dados entre CPU e GPU via PCI-express CPU GPU PCI-Express Memória CPU Memória GPU 17

Gestão da memória O programador é responsável por... Alocar memória do GPU cudaerror_t cudamalloc(void ** devptr, size_t size); Transferir explicitamente os dados do CPU para o GPU cudaerror_t cudamemcpy(void *dst, const void *src, size_t count, cudamemcpyhosttodevice); Transferir explicitamente os resultados do GPU para o CPU cudaerror_t cudamemcpy(void *dst, const void *src, size_t count, cudamemcpydevicetohost); Libertar memória cudaerror_t cudafree(void *devptr); 18

Ainda sobre memória (1/2) thread Bloco threads Memória local Registos GPU Memória partilhada shared Memória local é privada à thread Implementada na memória global do GPU Registos são a memória mais rápida (on chip) Número limitado Memória partilhada é acessível por bloco de threads Memória rápida (on chip) Requer sincronização entre as threads do bloco 19

Ainda sobre memória (2/2) Kernel 1 Kernel 2 Memória global GPU (peristente entre chamadas a kernels) CPU Memória CPU Memória constantes (leitura) O desempenho de aplicações CUDA está muito dependente da forma como se usa a memória! 20

Estrutura de programa CUDA Estrutura de programa CUDA #1- Alocar memória (cudamalloc(...)) #2 - Copiar conteúdo memória CPU GPU (cudamemcpy(..., cudamemcpyhosttodevice)) #3 Lançar kernel (func<<<blocos,threads>>>(...)) #4 - Execução (assíncrona) do kernel, CPU fica livre (cudadevicesynchronize()) #5 Copiar resultados GPU CPU (cudamemcpy(...,cudamemcpydevicetohost)) #6 Libertar recursos (cudafree(...)) 21

Ainda sobre CUDA Foi apresentado o CUDA runtime API level Interface de alto (!) nível Alternativa CUDA driver API level API de baixo nível O programador deve: Explicitar inicialização do dispositivo Carregamento de módulo Carregmanento de parâmetros Execução de kernel(s)... 22

OpenCL Outros paradigmas/frameworks para GPGPU OpenCL Norma proposta pela Apple e apoiada por muitas empresas Intel, AMD/ATI, IBM, Samsung,..., NVIDIA Presentemente na versão 1.2 (Dez. 2011) Pequena extensão à linguagem C Visa o suporte de vários dispositivos de processamento ( aceleradores ) Norma mais genérica do que o CUDA» Requer mais esforço do programador Exemplos: GPUs, CPUs (Intel, CELL, etc.) 23

Suporte para vários aceleradores Driver OpenCL AMD Código OpenCL Driver OpenCL NVIDIA Driver OpenCL CELL Driver OpenCL Intel 24

OpenCL vs CUDA API requer elevado número de parâmetros Suporte para dispositivos genéricos Exemplo: clenqueuereadbuffer(...) cl_int clenqueuereadbuffer( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, size_t offset, size_t cb, void*ptr, cl_uint num_events_in_wait_list, const cl_event*event_wait_list, cl_event*event) cudaerror_t cudamemcpy(void *dst, const void *src, size_t count, cudamemcpydevicetohost); 25

Estrutura de programa OpenCL Obter informação sobre dispositivos disponíveis Seleção dos dispositivos a serem empregues Criação de uma command queue OpenCL Criação dos buffers no dispositivo Transferência dados do CPU para o dispositivo Criação do objeto kernel program Compilação do kernel Criação do objeto kernel Suporte dispositivos genéricos Requer muitos mais passos... Configuração dos parâmetros do kernel Execução do kernel Cópia dos resultados (dispositivo CPU) Libertar recursos 26

E a Microsoft? C++ AMP (C++ Accelerated Massive Parallelism) Norma aberta da Microsoft baseada no DirectX11 Apenas disponível para sistemas Windows... Aproveitamento de GPU para GPGPU Extensão à linguagem C++ e biblioteca para processamento de dados multidimensionais #include <amp.h> using namespace concurrency; void AddArrays(int n, int * pa, int * pb, int * pc) { array_view<int,1> a(n, pa); array_view<int,1> b(n, pb); array_view<int,1> sum(n, pc); parallel_for_each( sum.grid, [=](index<1> i) restrict(direct3d) { sum[i] = a[i] + b[i]; } ); } 27

Onde posso saber mais? Mestrado em Eng. Informática Computação Móvel UC de Computação de Alto Desempenho NVIDIA CUDA Programming Guide CUDA Zone (documentation) CUDA C BEST PRACTICES GUIDE NVIDIA CUDA C - Programming Guide http://www.nvidia.com/object/cuda_develop.html Programming Massively Parallel Processors: A Hands-on Approach, David B. Kirk, Wen-mei W. Hwu, Morgan Kaufmann, 1st edition (February 2010) 28

Obrigado! Questões? (c) Internet, 2012 (e obrigado OpenClipArt.org) 29