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



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

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

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

Apresentação dos Serviços para Processamento de Dados de Alto Desempenho disponibilizados pela InterNuvem

Eng. Thársis T. P. Souza

Waldemar Celes. 25 de Agosto de 2014

Computação Heterogênea Programação paralela, clusters e GPUs

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

Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler

Aula 10 - Streams (Parte I)

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

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013

Computação Paralela (CUDA)

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

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0

Fabrício Gomes Vilasbôas

Hierarquia de memória:

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

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2012/2013

Processamento Paralelo Utilizando GPU

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

Programação Paralela em OpenCL

Thársis T. P. Souza

Programação Paralela Híbrida em CPU e GPU: Uma Alternativa na Busca por Desempenho

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2010/2011

Universidade Federal do ABC. Dissertação de Mestrado. Aderbal de Morais Junior

Programação em Paralelo. N. Cardoso & P. Bicudo. Física Computacional - MEFT 2010/2011

Introdução à Computação Heterogênea

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

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

CUDA. José Ricardo da Silva Jr.

Edison Gustavo Muenz. Estudo e implementação de um algoritmo de processamento de imagens com técnicas GPGPU

Oracle Grid Engine. Thiago Marques Soares. Pós-Graduação em Modelagem Computacional Universidade Federal de Juiz de Fora. 8 de abril de 2015

O Problema do Fractal de Mandelbrot como Comparativo de Arquiteturas de Memória Compartilhada GPU vs OpenMP

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

1 Padrões de Implementação em Processamento de Imagens. 2 Resumo. 4 Computação paralela. 1.1 Relátório final para PIBIC/CNPq

Centro Nacional de Processamento de Alto Desempenho em São Paulo

Introdução à Programação de GPUs

Estrutura de um Computador

ANÁLISE DE DESEMPENHO DA PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PRIMOS UTILIZANDO PTHREAD E OPENMP 1

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

CCE Internet Data Center

Capítulo 8 Arquitetura de Computadores Paralelos

Problema: Solução: Vantagens da estruturação em Níveis: Introdução INTRODUÇÃO À ARQUITETURA DE COMPUTADORES. Introdução

5 Unidades de Processamento Gráfico GPUs

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

SSC510 Arquitetura de Computadores. 12ª aula

Computação de alto desempenho utilizando CUDA

Point Based Graphics e Aplicações em Jogos

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores

Centro Nacional de Processamento de Alto Desempenho em São Paulo

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

O COMPUTADOR. Introdução à Computação

Computação de Alto Desempenho uma pequena introdução

SO: Gerenciamento de Processos

Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas

Site : Sniperpspg1.besaba.com. profdjair@sniperpspg1.besaba.com

RODRIGO AMADOR COELHO IMPLEMENTAÇÃO DE UMA REDE NEURAL ARTIFICIAL DE CAMADA SIMPLES EM PLATAFORMA GPU UTILIZANDO LINGUAGEM CUDA

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

Introdução à estrutura e funcionamento de um Sistema Informático

Linguagem de Montagem

LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU

MODULO II - HARDWARE

UCP. Memória Periféricos de entrada e saída. Sistema Operacional

MC102 Algoritmos e Programação de Computadores

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

Programação em Paralelo OpenMP

Requisitos de Hardware - Humanus

Aplicando Processamento Paralelo com GPU ao Problema do Fractal de Mandelbrot

What is? Eduardo Viola Nicola Disciplina de IPPD

Computação Distribuída de Alto Desempenho. Marcelo Giovani M Souza mgm@cbpf.br

armazenamento (escrita ou gravação (write)) recuperação (leitura (read))

Microprocessadores. Cap. 2 Microprocessador, operação de hardware e computação

Hardware Avançado. Laércio Vasconcelos Rio Branco, mar/2007

Desenvolvimento de Programas Paralelos para Máquinas NUMA: Conceitos e Ferramentas

Processamento de Sinal através do GPU

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS ESTUDO DE CASO I

COMPARAÇÃO DE DESEMPENHO ENTRE DIFERENTES IMPLEMENTAÇÕES DO ALGORITMO KECCAK PARA PLATAFORMAS GPGPUS UTILIZANDO OPENCL

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

Hardware 2. O Gabinete. Unidades Derivadas do BYTE. 1 KB = Kilobyte = 1024B = 2 10 B. 1 MB = Megabyte = 1024KB = 2 20 B

SCC Capítulo 1 Introdução à Computação e Introdução à Programação

Relatório de Diagnóstico de Eficiência de Energia

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

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

Celso L. Mendes LAC /INPE

PRODUTIVIDADE NA INTEGRAÇÃO DE FERRAMENTAS E AUMENTO DE VELOCIDADE DE PROCESSAMENTO. Mário Castro - Especialista Rio de Janeiro, 05/07/2011

Barramentos - BUS. Professor Especialista: Airton Ribeiro de Sousa

AULA: Introdução à informática Computador Digital

CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES

XVI Simpósio em Sistemas Computacionais de Alto Desempenho

Introdução à Arquitetura de Computadores

Comparativo de desempenho do Pervasive PSQL v11

Motherboard Significado

Disciplina de Introdução à Computação para Engenharia Ambiental

Capítulo 4 Livro do Mário Monteiro Introdução Hierarquia de memória Memória Principal. Memória principal

LEVANTAMENTO DE HARDWARES PARA O DESENVOLVIMENTO DE SOFTWARE. Graphics

AULA TEÓRICA 2 Tema 2. Conceitos básicos de informática, computadores e tecnologias de informação. Sistemas de numeração (continuação)

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Transcrição:

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Francisco Ribacionka e Ettore Enrico (STI ) USP/STI/InterNuvem internuvem@usp.br Março -2016

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

GPU Aplicação Código Sequencial CPU Código Paralelo Controle ULA ULA Cache ULA ULA DRAM DRAM Código Sequencial +

Host Device PCI Bus 1. Copiardados da memóriada CPU para a memóriada GPU

Host Device PCI Bus 1. Copiardados da memóriada CPU para a memóriada GPU 2. Carregaro códigogpu e executar

Host Device PCI Bus 1. Copiardados da memóriada CPU para a memóriada GPU 2. Carregaro códigogpu e executar 3. Copiarosresultadosda memóriada GPU para a memóriada CPU

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

NVIDIA - CUDA CUDA é uma plataforma de computação paralela e um modelo de programação inventados pela NVIDIA Linguagens de Programação C, C++, Python, Fortran CUDA-MPI Cuda-MPI: Suporte a chamadas MPI a partir da memória da GPU OpenCL OpenCL: Suporte a Open Computing Language através do CUDA OpenACC OpenACC: Acelerando as aplicações através de diretivas de programação Fonte: https://nvidia.developer.com

Bibliotecas Otimizadas para GPU s Thrust(C++ TemplateLibrary); cublas(algebralinear); cusparse(algebralinear); NPP (Processamento de imagem e sinais); cufft(processamento de imagem e sinais).

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

Aplicações:

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

Tesla K20m GPU Precisão Simples Precisão Dupla 1xGK110 3.5 TF 1.2 TF Memória 4.8 GB Largura de Banda 208 GB/s # Cores CUDA 2496 Energia 225W

Cluster Jaguar SGI Altix 450 56 CPUs Intel Itanium 2 112 GB de RAM 0,34 TFlops Cluster Puma Servidores DeLL - Rede Gibabit-ethernet 59 X 16 GB de memória RAM 59 X 16 CPUs Intel Xeon 2.6 GHz 1.26 TFlops

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

Computação de alto desempenho HPC 32 servidores, cada um com: 2 Tesla k20m 16 cores Intel E7-2870 (2,4 GHz) 129 GB RAM Scratch com 55 TB Sistema de filas Torque

Softwares Instalados na lince que utilizam GPU: gromacs lammps NAMD Sugestões: hpc@usp.br

Job CUDA: Comandos para executar o programa #!/bin/bash -v #PBS -S /bin/bash #PBS -N cuda Recursos #PBS -l nodes=1:ppn=16 #PBS -l gpus=2 #PBS -joe #PBS -l walltime= 249:00:00 #PBS -q parallel Fila ulimit -s unlimited module load cuda/7.0 cd /scratch/fribacio/1_utilities/devicequery time./devicequery

$ qsub job_cuda.sh 7927.lince.lcca.usp.br $ qstat lince.lcca.usp.br: Req'd Req'd Elap Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time ------------------------------------------------------- ----- ---------------------------- ------------ 7927.lince fribacio parallel cuda 795 1 16 -- 3000:00:0 R 00:00:00 $ ls cuda.o7927

CUDA Device Query (Runtime API) version(cudart static linking) Detected 2 CUDA Capable device(s) Device 0: "Tesla K20m" CUDA Driver Version/ Runtime Version 7.0 / 6.5 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 4800 MBytes(5032706048 bytes) (13) Multiprocessors, (192) CUDA Cores/MP: 2496 CUDA Cores GPU Clock rate: 706 MHz (0.71 GHz) Memory Clock rate: 2600 Mhz Memory Bus Width: 320-bit L2 Cache Size: 1310720 bytes......

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

ComputaçãoHeterogênea Terminologia: Host CPU e a memória RAM Device GPU e a sua memória Host Device 24

ComputaçãoHeterogênea NVIDIA CUDA CUDA é uma plataforma de computação paralela e um modelo de programação inventados pela NVIDIA Linguagens de Programação C, C++, Python, Fortran Baseado no padrão C Extensões que permitem programação heterogênea APIs para gerenciar memória e dispositivos Fonte: https://nvidia.developer.com

global void mykernel(void) { } int main(void) { } mykernel<<<1,1>>>(); printf( STI-USP\n"); return 0; $ nvcc sti_usp.cu $ a.out STI-USP $ 26

Soma de dois inteiros: #include <stdio.h> global void add( int a, int b, int *c ) { *c = a + b;} int main( void ) { int c; int *dev_c; cudamalloc( (void**)&dev_c, sizeof(int) ); add<<<1,1>>>( 2, 7, dev_c ); cudamemcpy( &c, dev_c, sizeof(int), cudamemcpydevicetohost ); printf( "2 + 7 = %d\n", c ); cudafree( dev_c ); return 0; } 27

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

ProgramaçãoParalelaemCUDA

VersãoHost #include <stdio.h> #define N 10 voidadd( int*a, int*b, int*c ) { intindice= 0; while(indice< N) { c[indice] = a[indice] + b[indice]; indice+= 1; } } intmain( void) { inta[n], b[n], c[n]; for (inti=0; i<n; i++) { a[i] = -i; b[i] = i * i; } add( a, b, c ); for (inti=0; i<n; i++) { printf( "%d + %d = %d\n", a[i], b[i], c[i] ); } return 0; } 30

#include <stdio.h> #define N 10 global voidadd( int*a, int*b, int*c ) { int indice = blockidx.x; if(indice< N) c[indice] = a[indice] + b[indice]; } intmain( void) { inta[n], b[n], c[n]; int*dev_a, *dev_b, *dev_c; cudamalloc( (void**)&dev_a, N * sizeof(int) ) ; cudamalloc( (void**)&dev_b, N * sizeof(int) ) ; cudamalloc( (void**)&dev_c, N * sizeof(int) ) ; for (inti=0; i<n; i++) { a[i] = -i; b[i] = i * i; } VersãoDevice } cudamemcpy( dev_a, a, N * sizeof(int), cudamemcpyhosttodevice) ; cudamemcpy( dev_b, b, N * sizeof(int), cudamemcpyhosttodevice) ; add<<<n,1>>>( dev_a, dev_b, dev_c); cudamemcpy( c, dev_c, N * sizeof(int), cudamemcpydevicetohost) ; for (inti=0; i<n; i++) { printf( "%d + %d = %d\n", a[i], b[i], c[i] ); } cudafree( dev_a) ; cudafree( dev_b) ; cudafree( dev_c) ; return 0; 31

ProgramaçãoParalelaemCUDA Computação com GPU é para paralelismo massivo Como rodarcódigoemparalelono device? add<<< 1, 1 >>>(); add<<< N, 1 >>>(); Emvezde executaradd()umavez, executarnvezesem paralelo 32

ProgramaçãoParalelaemCUDA global void add(int *a, int *b, int *c) { c[blockidx.x] = a[blockidx.x] + b[blockidx.x]; } Na GPU, cadablocopodeexecutaremparalelo: Block 0 Block 1 Block 2 Block 3 c[0] = a[0] + b[0]; c[1] = a[1] + b[1]; c[2] = a[2] + b[2]; c[3] = a[3] + b[3]; 33

Blocos e Grids

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Programação 1. Utilização de GPU para HPC O que é processamento por GPU Recursos para desenvolvimento de software Aplicações 2. Tesla K20m 3. HPC com recursos da InterNuvem: Cluster lince 4. Computação heterogênea Blocos Threads

int tid = threadidx.x + blockidx.x* blockdim.x;

int tid = threadidx.x + blockidx.x* blockdim.x; add<<<4,4>>>( dev_a, dev_b, dev_c);

Hierarquia de Memória

Hierarquia de thread threadidx é um vetor de 3 componentes Formando blocos de threads de uma, duas ou três dimensões Provendo uma maneira natural para computar vetores, matrizes ou volumes

global void MatAdd(float A[N][N], float B[N][N], float C[N][N]) { inti = threadidx.x; int j = threadidx.y; C[i][j] = A[i][j] + B[i][j]; } Intmain() { // Chamada kernelde um bloco com N * N * 1 threads intnumblocks= 1; dim3 threadsperblock(n, N); matadd<<<numblocks, threadsperblock>>> (A, B, C);...

Modelo de Hardware

SMX: 192 single-precision CUDA cores, 64 double-precision units, 32 special function units (SFU), and 32 load/store units (LD/ST).

Tesla K20m Multiprocessor count: 13 Sharedmemper mp: 49152 Registersper mp: 65536

Bibliografia SANDERS, J.; KANDROT, E. CUDA by Example -An Introduction to General-Purpose GPU Programming. Addison-Wesley. 2011 KIRK, D.; HWU, W. Programming Massively Parallel Processors -A Hands-on Approach. Morgan Kaufmann. 2010

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Dúvidas? hpc@usp.br

Processamento de Alto Desempenho utilizando Unidade de Processamento Gráfico - GPU Francisco Ribacionka e Ettore Enrico (STI ) USP/STI/InterNuvem internuvem@usp.br Março -2016