• Nenhum resultado encontrado

3.3 Arquitetura GPU e CUDA

3.3.4 Arquiteturas NVIDIA

Para finalizarmos este cap´ıtulo sobre as GPUs, vejamos quais foram as arquitetu- ras j´a lan¸cadas, e quais est˜ao por vir, pela pioneira na ´area de processamento de prop´osito geral com o uso de GPUs, a corpora¸c˜ao NVIDIA. A Tabela 3.4 sumariza

Tabela 3.4: Roadmap das arquiteturas de GPUs da NVIDIA [43]. Arquitetura Ano de Lan¸camento Principal Novidade

Tesla 2007 CUDA Fermi 2010 FP64 Kepler 2012 Dynamic Parallelism Hyper-Q GPU Direct Maxwell 2014 DX12 Pascal 2016 3D-Stacked RAM NVLink Mixed Precision Volta 2018 ?

o roadmap (mapa de evolu¸c˜ao) das arquiteturas, mostrando os anos de lan¸camento (ou previs˜ao de lan¸camento), e as principais novidades introduzidas por cada uma delas. As informa¸c˜oes exibidas na tabela s˜ao baseadas na palestra de abertura do cofundador e CEO (Chief Executive Officer ) da NVIDIA Jen-Hsun Huang durante a conferˆencia “GPU Technology Conference” organizada pela corpora¸c˜ao no ano de 2015 [43].

A primeira arquitetura de GPUs da NVIDIA com suporte total a CUDA foi chamada de Tesla, e teve seu lan¸camento em 2007. Depois, em 2010, foi lan¸cada a arquitetura Fermi, cuja principal novidade introduzida foi a grande evolu¸c˜ao no desempenho de opera¸c˜oes de ponto flutuante de dupla precis˜ao (FP64). Em 2012, a arquitetura Kepler [42] trouxe uma s´erie de inova¸c˜oes em rela¸c˜ao `as suas an- tecessoras, entre as quais destacam-se: o Paralelismo Dinˆamico (permite `a GPU lan¸car kernels por si mesma); Hyper-Q (permite v´arios cores de CPU invocar ker- nels na GPU simultaneamente); e GPU Direct (transferˆencia direta entre mem´orias de GPUs). Mais recentemente, no ano de 2014, foi lan¸cada a arquitetura Maxwell, que ´e a mais moderna atualmente. Sua principal novidade foi o suporte `a API DirectX 12 da Microsoft (DX12), al´em de uma melhoria no tradeoff “performance X consumo energ´etico”, aumentando o desempenho por watt consumido [44]. Fi- nalmente, foi anunciado para 2016 o lan¸camento da nova arquitetura da NVIDIA chamada de Pascal, que trar´a como principais inova¸c˜oes as seguintes funcionalida- des: 3D-Stacked RAM (aumento de at´e 3 vezes na largura de banda de acesso a mem´oria); NVLink (novo barramento at´e 5 vezes mais r´apido que o PCI Express); e Mixed Precision (taxas de execu¸c˜ao distintas para opera¸c˜oes com tipos de dados de diferentes precis˜oes). Apesar de n˜ao haver detalhes, apareceu durante a conferˆencia o nome da arquitetura que deve substituir a Pascal em 2018, chamada de Volta.

Cap´ıtulo 4

Gamma Paralela e Distribu´ıda

(Solu¸c˜ao Base)

Agora que j´a realizamos uma revis˜ao geral sobre os dois principais conceitos que comp˜oem a ideia central deste trabalho, ou seja, o modelo computacional Gamma e as Unidades de Processamento Gr´afico (GPUs), dedicaremos os dois pr´oximos cap´ıtulos para descrever as solu¸c˜oes envolvidas no desenvolvimento da disserta¸c˜ao. No presente cap´ıtulo, faremos uma explica¸c˜ao sobre a implementa¸c˜ao de Gamma j´a existente, que foi utilizada como solu¸c˜ao base para o trabalho, a qual chama- remos a partir de agora de Gamma-Base. No Cap´ıtulo 5, mostraremos a solu¸c˜ao que foi criada e implementada para estender a solu¸c˜ao base, provendo suporte ao processamento na arquitetura das GPUs, chamada de Gamma-GPU.

4.1

Vis˜ao Geral

A ideia de desenvolver uma nova implementa¸c˜ao do paradigma Gamma, que fosse capaz de executar de maneira paralela sobre o hardware das GPUs, teve como ins- pira¸c˜ao uma implementa¸c˜ao paralela e distribu´ıda de Gamma, realizada por Juarez Muylaert e Simon Gay, e estendida por Gabriel Paillard, no ano de 1999 [45, 46]. A extens˜ao realizada pelo ´ultimo, focou principalmente na cria¸c˜ao e verifica¸c˜ao de novos tipos de dados, n˜ao suportados originalmente pelo Gamma, tornando-se na realidade, uma implementa¸c˜ao de Gamma Estruturada (definida na Se¸c˜ao 2.3.3). Contudo, essa nova abordagem estruturada n˜ao influenciou no modelo de execu¸c˜ao paralelo e distribu´ıdo que j´a existia na implementa¸c˜ao do Gamma original, pois a mudan¸ca afetou somente os tipos de dados suportados e adicionou a capacidade de verifica¸c˜ao e n˜ao-degenera¸c˜ao das novas estruturas do programa em tempo de compila¸c˜ao. Assim sendo, a implementa¸c˜ao desenvolvida nesta disserta¸c˜ao, descrita no Cap´ıtulo 5, foi feita sobre a implementa¸c˜ao Gamma original (Gamma-Base), e

n˜ao sobre a implementa¸c˜ao de Gamma Estruturada, uma vez que os esfor¸cos foram movidos da ideia de suporte e verifica¸c˜ao a tipos de dados, para o suporte e am- plia¸c˜ao do paralelismo utilizado intrinsecamente pelo modelo, atrav´es do uso das GPUs. A integra¸c˜ao do suporte a tipos de dados estruturados presentes em Gamma Estruturada com a nova implementa¸c˜ao utilizando GPUs ficar´a como um trabalho futuro.

Mais do que servir apenas como motiva¸c˜ao e inspira¸c˜ao para o trabalho, a im- plementa¸c˜ao paralela e distribu´ıda a qual estamos nos referenciando, foi de fato utilizada como o alicerce para a nova implementa¸c˜ao, desde a ado¸c˜ao dos mesmos moldes arquiteturais, at´e a utiliza¸c˜ao do c´odigo-fonte em si. Em outras palavras, a implementa¸c˜ao Gamma-Base foi utilizada como base de desenvolvimento, e teve sua capacidade estendida no que diz respeito ao uso e explora¸c˜ao da concorrˆencia e do pa- ralelismo dos programas Gamma, alcan¸cado com a utiliza¸c˜ao das Unidades Gr´aficas de Processamento. Esse fato nos faz real¸car a importˆancia desta implementa¸c˜ao base, pois todas as suas caracter´ısticas e particularidades, sejam elas pontos posi- tivos ou negativos, tˆem impacto direto sobre a implementa¸c˜ao Gamma-GPU, como poderemos verificar mais detalhadamente no Cap´ıtulo 6, que trata dos experimentos e an´alise dos resultados. Nesse contexto, as demais se¸c˜oes deste cap´ıtulo ser˜ao de- dicadas para que possamos obter um melhor entendimento sobre a implementa¸c˜ao Gamma-Base, nas quais falaremos sobre sua arquitetura, o compilador criado, e alguns detalhes do ambiente de execu¸c˜ao.