5 Unidades de Processamento Gráfico GPUs

Documentos relacionados
Fabrício Gomes Vilasbôas

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

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

Eng. Thársis T. P. Souza

Computação Paralela (CUDA)

Computadores e Programação (DCC/UFRJ)

Processamento Paralelo Utilizando GPU

ARQUITETURA DE COMPUTADORES

Organização de Computadores I

Processadores para computação de alto desempenho

INTRODUÇÃO À TECNOLOGIA DA INFORMAÇÃO ORGANIZAÇÃO COMPUTACIONAL

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD

Organização de Computadores II. Arquiteturas MIMD

ARQUITETURA DE COMPUTADORES. Organização de Sistemas Computacionais. Prof.: Agostinho S. Riofrio

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

Arquitetura de Computadores. Processamento Paralelo

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

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

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

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Sistemas Operacionais. Conceitos de Hardware

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

CPU. Funções: Componentes: Processamento; Controle. UC (Unidade de Controle); Registradores; ALU s, FPU s etc. Arquitetura de Computadores 3

PROCESSADORES Unidade de Controle Unidade Aritmética e Lógica efetua memória de alta velocidade registradores Program Counter Instruction Register

Montagem e manutenção de computadores

ARQUITETURA DE COMPUTADORES

PROCESSAMENTO PARALELO EM CUDA APLICADO AO MODELO DE GERAÇÃO DE CENÁRIOS SINTÉTICOS DE VAZÕES E ENERGIAS - GEVAZP. André Emanoel Rabello Quadros

ORGANIZAÇÃO DE COMPUTADORES

Nome: N.º Ano: Turma: Turno: Responde às seguintes questões 1. Quais as vantagens da utilização de transístores face às válvulas de vácuo?

Multiprogramação leve em arquiteturas multi-core

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

ENGENHARIA DE SISTEMAS MICROPROCESSADOS

UNIVERSIDADE FEDERAL DO ABC. Dissertação de Mestrado. Cleber Silva Ferreira da Luz

Gerência de Dispositivos. Adão de Melo Neto

Computadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão.

30/5/2011. Sistemas computacionais para processamento paralelo e distribuído

Sistemas Operacionais. Adão de Melo Neto

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos

ULA. Combina uma variedade de operações lógicas e matemáticas dentro de uma única unidade.

Algoritmos Computacionais

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

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

Organização de Sistemas de Computadores

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

SSC510 Arquitetura de Computadores. 6ª aula

Sistemas Operacionais. Sistema de entrada e Saída

Arquitetura de Computadores. Conjunto de Instruções

Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores

Parte I Multiprocessamento

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

Microprocessadores II - ELE 1084

14/3/2016. Prof. Evandro L. L. Rodrigues

Processadores. Principal função é executar programas armazenados na memória principal.

Arquitetura de Computadores

Principais Componentes do Gabinete. Componentes Básicos de um Computador. CPU ou UCP (Processador) 17/02/2017

COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto

SEL-433 APLICAÇÕES DE MICROPROCESSADORES I

Organização e Arquitetura de Computadores I

Gerência de Dispositivos. Adão de Melo Neto

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES PROF. DEJAIR PRIEBE

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

Arquitetura e organização de computadores Uma visão geral

Arquitetura de Computadores Aula 11 - Multiprocessamento

Arquitetura de computadores

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 02: INTRODUÇÃO

Patricia Akemi Ikeda

ULA (ALU) - UNIDADE DE ARITMÉTICA E LÓGICA

Infraestrutura de Hardware. Funcionamento de um Computador

Capítulo 2 Livro do Mário Monteiro Componentes Representação das informações. Medidas de desempenho

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 06

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado

Transcrição:

5 Unidades de Processamento Gráfico GPUs As GPUs são processadores maciçamente paralelos, com múltiplos elementos de processamento, tipicamente utilizadas como aceleradores de computação. Elas fornecem um elevado poder computacional e têm sido usadas com sucesso em aplicações paralelas de propósito geral em diversas áreas. Embora diferentes fabricantes tenham desenvolvido GPUs nos últimos anos, optamos pelas GPUs da nvidia devido à sua flexibilidade e disponibilidade. A Figura 5.1 apresenta uma comparação de desempenho entre CPU e GPU em bilhões de operações de ponto flutuante por segundo. Theoretical GFLOP/ s 4750 4500 4250 4000 3750 3500 3250 3000 2750 2500 2250 2000 1750 1500 NVIDIA GPU Single Precision NVIDIA GPU Double Precision Intel CPU Double Precision Intel CPU Single Precision GeForce GTX 580 GeForce GTX 480 GeForce GTX TITAN GeForce GTX 680 Tesla K20X 1250 GeForce GTX 280 1000 Tesla M2090 750 GeForce 8800 GTX Tesla C2050 500 GeForce 7800 GTX Tesla C1060 GeForce 6800 Ultra GeForce FX 5800 Woodcrest Harpertown Sandy Bridge 250 0 Pentium 4 Bloomfi eld Westmere Apr-01 Sep-02 Jan-04 May-05 Oct-06 Feb-08 Jul-09 Nov-10 Apr-12 Aug-13 Dec-14 Figura 5.1: Comparação de desempenho entre CPU e GPU em bilhões de operações de ponto flutuante por segundo. Fonte: nvidia [80]. A GPU GeForce GTX TITAN apresenta um desempenho em precisão simples de ponto flutuante da ordem de 4,5 TFlops, muito superior aos cerca de 500 GFlops apresentados pela CPU Sandy Bridge. O desenvolvimento da GPU foi impulsionado pelo mercado dos jogos para computador que demanda imagens de alta definição em tempo real. Assim, a GPU se tornou um

Capítulo 5. Unidades de Processamento Gráfico GPUs 48 hardware especializado para realizar tarefas altamente paralelas, destinando mais transistores para processamento, enquanto que a CPU possui uma área muito maior destinada a controle de fluxo e cache de dados. A Figura 5.2 apresenta uma comparação entre a largura de banda da CPU e da GPU em bilhões de bytes por segundo. Theoret ical GB/ s 300 270 GeForce GTX TITAN Tesla K20X 240 210 180 150 120 CPU GeForce GPU Tesla GPU GeForce GTX 480 GeForce GTX 680 Tesla M2090 GeForce GTX 280 Tesla C2050 90 GeForce 8800 GTX Tesla C1060 GeForce 7800 GTX 60 Sandy Bridge Bloomfi eld GeForce 6800 GT 30 Prescott Woodcrest GeForce FX 5900 West mere Harpert own 0 Nort hwood 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 Figura 5.2: Comparação da largura de banda da memória entre CPU e GPU em bilhões de bytes por segundo. Fonte: nvidia [80]. GPU GeForce GTX TITAN apresenta uma velocidade de acesso a memória de 288,4 GB/s, muito superior aos cerca de 50 GB/s apresentados pela CPU Sandy Bridge. Essa maior velocidade de acesso permite que a GPU seja capaz de manter os seus elementos de processamento ocupadas com dados a serem processados. O controle de fluxo e a cache da GPU é menos sofisticado quando comparado à uma CPU, por isso a GPU apresenta bom desempenho para problemas que podem ser expressos como paralelismo de dados escondendo a latência de acesso à memória com a realização maciça de operações de ponto flutuante.

Capítulo 5. Unidades de Processamento Gráfico GPUs 49 5.1 Arquitetura da GPU As GPUs da nvidia são tipicamente compostas por um conjunto de streaming multiprocessors (SMs), cada um sendo composto por um conjunto de elementos de processamento (scalar processors SPs). Os SPs podem ser vistos como núcleos de processamento relativamente simples quando comparados aos complexos núcleos das CPUs. A arquitetura de uma GPU Kepler com o chip GK110 é composta por 15 SMs e 6 controladores de memória de 64 bits [81]. Algumas variações do chip GK110 podem possuir 13 ou 14 SMs. A Figura 5.3 ilustra um SM da arquitetura de GPUs Kepler. Cada SM é composto por 192 SPs, capazes de realizar operações com precisão simples de ponto flutuante, lógica e aritmética de inteiros. Há 64 unidades para realizar instruções em precisão dupla de ponto flutuante, 32 unidades para funções especiais capazes de realizar instruções complexas e 32 unidades de leitura e escrita. A Figura 5.4 apresenta a organização da memória da GPU, podendo ser descrita da seguinte forma: uma grande memória global com elevada latência; uma memória muito rápida, de baixa latência, integrada ao chip chamada de memória compartilhada para cada SM; e uma memória local privada para cada thread. Além disso, uma GPU Kepler com o chip GK110 possui alguns espaços adicionais de memória para implementar caches, tais como um espaço de memória com 64 KB que pode ser configurado entre a memória cache L1 e a memória compartilhada. As possíveis configurações são: 32 KB para cada uma das duas; 48 KB de cache L1 com 16 KB de memória compartilhada; ou 16 KB de cache L1 com 48 KB de memória compartilhada. Uma cache L2 com 1536 KB através da qual são realizadas as leituras e escritas dos dados. E uma memória cache de 48 KB, somente leitura, usada para implementar ambas as caches de textura e de constantes. Toda GPU deve estar acoplada a uma CPU. A GPU necessita do controle da CPU para iniciar seu processamento. O termo host é comumente empregado para designar a CPU na qual a GPU está instalada. A transferência de dados entre a CPU e a GPU é realizada através do barramento PCIe. A CPU e a GPU possuem espaços de memória RAM separados, chamados de memória do host e memória do dispositivo, e o tempo de transferência entre CPU-GPU é limitado pela velocidade do barramento PCIe.

Capítulo 5. Unidades de Processamento Gráfico GPUs 50 Figura 5.3: SM (streaming multiprocessor) da arquitetura de uma GPU Kepler com o chip GK110. Fonte: nvidia [81]. 5.2 Modelo de Programação O modelo de programação da nvidia é chamado de CUDA (Computer Unified Device Architecture) [80]. CUDA é um ambiente de desenvolvimento baseado em C que permite que o programador defina funções especiais em C, chamadas de kernels, as quais executam em paralelo na GPU utilizando diferentes threads. A GPU suporta um grande número de threads com paralelismo finamente granulado. As threads são organizadas em uma hierarquia de grupos de threads, conforme ilustrado pela Figura 5.5. Threads são divididas em uma grid bi ou tridimensional de blocos de threads. Cada bloco de threads é um conjunto bi ou tridimensional de threads. Os blocos de threads são executados

Capítulo 5. Unidades de Processamento Gráfico GPUs 51 Host CPU Dispositivo DRAM Local Global Constante Textura GPU Multiprocessador Registers Multiprocessador Shared Memory Registers Multiprocessador Registradores Shared Memory Memória Compartilhada Memória Cache de Constante e Textura Figura 5.4: Organização dos espaços de memória de uma GPU. Adaptado de: nvidia [82]. na GPU através da atribuição de um determinado número de blocos para serem executados num SM. Cada thread de um bloco de threads tem um identificador único, dado por variáveis internas threadidx.x, threadidx.y e threadidx.z. Cada bloco de threads tem um identificador único que distingue sua posição na grid, dado por variáveis internas blockidx.x, blockidx.y e blockidx.z. As dimensões da grid e do bloco de threads são especificadas no momento em que o kernel é carregado através dos identificadores griddim e blockdim, respectivamente. Todas as threads em um bloco de threads são atribuídas para serem executas em um mesmo SM. Por este motivo, as threads dentro de um bloco podem cooperar entre elas através da utilização de primitivas de sincronização e através do uso da memória compartilhada. Entretanto, o número de threads dentro de um bloco pode exceder o número de elementos de processamento em um SM, sendo necessário um mecanismo de scheduling. Este mecanismo de scheduling divide o bloco em warps. Cada warp tem um número fixo de threads agrupadas por identificadores consecutivos. O warp é executado em um SM de uma maneira SIMD implícita, chamada de SIMT (Single Instruction Multiple Threads). Todos os elementos de processamento do SM executam a mesma instrução simultaneamente, porém sobre elementos de dados diferentes. Entretanto, as threads podem logicamente seguir diferentes caminhos de controle de fluxo e são livres para divergir. Se alguma das threads executando em paralelo dentro do warp escolher um caminho de execução diferente, chamado de divergência de

Capítulo 5. Unidades de Processamento Gráfico GPUs 52 Grid Bloco (0,0) Bloco (1,0) Bloco (2,0) Bloco (0,1) Bloco (1,1) Bloco (2,1) Bloco (1,1) Thread (0,0) Thread (1,0) Thread (2,0) Thread (3,0) Thread (0,1) Thread (1,1) Thread (2,1) Thread (3,1) Thread (0,2) Thread (1,2) Thread (2,2) Thread (3,2) Figura 5.5: Hierarquia de organização das threads: grid e blocos de threads. Adaptado de: nvidia [80]. código, a execução das threads é serializada. Neste caso, o warp precisa ser carregado múltiplas vezes, uma para cada grupo de threads divergentes. Então, a eficiência completa só é conseguida quando todas as threads do warp seguem o mesmo caminho de execução. Caso contrário, a eficiência do paralelismo é significativamente reduzida. Na arquitetura de uma GPU Kepler com o chip GK110, cada SM possui 4 escalonadores de warps (warp schedulers) e 8 unidades de despacho de instruções [81]. Isto significa que cada SM pode selecionar e executar simultaneamente 4 warps de 32 threads por vez. Além disso, é possível executar simultaneamente duas instruções por thread do warp, desde que elas sejam independentes e utilizem unidades diferentes do hardware. Por exemplo, cada thread de um warp pode executar simultaneamente uma instrução de precisão simples e a outra de precisão dupla de ponto flutuante. Existe também a possibilidade de se executar simultaneamente duas instruções independentes, se uma delas utilizar a unidade lógica e aritmética de inteiros, enquanto a outra utilizar a unidade de ponto flutuante.

Capítulo 5. Unidades de Processamento Gráfico GPUs 53 5.3 Compilação A compilação de um programa CUDA é realizada através dos seguintes estágios. Primeiro, a interface de CUDA, chamada de cudafe, divide o programa em duas partes, uma parte composta por código C/C++ a ser executado no host e a outra parte composta por código para o dispositivo a ser executado na GPU. O código para o host é compilado com um compilador de C comum, tal como o gcc. Conforme ilustrado na Figura 5.6, o código para o dispositivo é compilado usando o compilador CUDA, chamado de nvcc, gerando um código intermediário numa linguagem pseudo-assembly chamada de PTX (Parallel Thread Execution). PTX é uma linguagem de programação de baixo nível semelhante ao assembly, usada para GPUs da nvidia e que precisa ser compilada, escondendo muitos detalhes do hardware. Esta linguagem PTX apresenta boa documentação disponibilizada pela nvidia. Numa última etapa, o código PTX é compilado para o código binário da GPU, chamado de CUBIN, através do uso do compilador ptxas. x.cu (parte do código para GPU s) nvcc Estágio 1 (nvopencc) Driver CUDA Arquitetura de computação virtual. x.ptx Estágio 2 (ptxas) Arquitetura real do SM. x.cubin Executar Figura 5.6: Etapas de compilação da parte do código destinada a executar na GPU. Ao contrário da linguagem PTX, cuja documentação é pública, o formato CUBIN é proprietário. A nvidia não disponibiliza informações sobre CUBIN. Além disso, o fabricante fornece apenas os elementos mais básicos da arquitetura do hardware e aparentemente não há planos de disponibilizar mais informações no futuro.