• Nenhum resultado encontrado

Os benefícios advindos da utilização da área de GPUs fazem-se presentes em diferentes áreas científicas. Através da utilização de tais arquiteturas, os pesquisadores conseguem obter aumentos de desempenho consideráveis nas aplicações rescritas para as arquiteturas de GPU. Infelizmente, na área de programação paralela em GPUs não existem ainda pesquisas focadas no cenário educacional, como é o caso do GPUHelp. As pesquisas a seguir envolvem a aplicação de GPUs em diferentes contextos.

3.3.1 Revisão de Trabalhos

Os atuais avanços das GPUs têm proporcionado que tal arquitetura atue em diferentes áreas científicas. O trabalho apresentado em (CROIX; KHATRI, 2009) realiza uma análise das arqui- teturas de GPU, bem como dos frameworks para programação paralela em tais arquiteturas, o CUDA e o OpenCL. Os autores abordam conceitos sobre a correta tradução do código escrito para arquiteturas de CPU, para GPU. São trabalhados ainda, conceitos sobre o modo de pensar necessário para programação paralela em GPU, além dos possíveis problemas envolvendo tal questão. Segundo os autores, o desempenho da aplicação portada ou desenvolvida para arquite- turas de GPU possui relação direta com o propósito de tal aplicação, bem como, da maneira em que esta será programada. Os autores alertam ainda para o fato de que nem todas as aplicações desenvolvidas para arquiteturas de GPU conseguirão obter o speedup esperado, tendo em vista o propósito das atuais arquiteturas de GPU: trabalhar com uma imensa quantidade de dados em paralelo. Caso a aplicação não permita isso, o desempenho pode ser inferior à mesma aplicação escrita para arquiteturas de CPU.

Em (SANTOS, 2010) é apresentado um método para acesso as GPUs através de virtualiza- ção, o VirtCUDA. Para tornar-se possível o acesso a placa gráfica, por meio de uma aplicação virtualizada, o autor utiliza-se de uma camada de consistência entre a aplicação e o driver do dispositivo, denominada wrapper. As funcionalidades do wrapper podem variar desde um sim- ples redirecionamento de tarefas a um complexo gerenciamento do dispositivo. Através da utilização de tal método, é possível ainda, ocultar as características de hardware do sistema, como por exemplo, a quantidade de GPUs existentes. Dessa forma, as aplicações não sabem quantas ou quais são as GPUs existentes. O wrapper foi aplicado para disponibilizar o acesso as GPUs pelas máquinas virtuais. Desse modo, tal camada é responsável por encaminhar as requi- sições das aplicações que estão sendo executadas nas virtual machines para o driver nativo do

dispositivo, possibilitando assim, a execução das aplicações. A avaliação do trabalho apresenta o problema envolvendo a virtualização, um custo na performance das aplicações testadas.

Atualmente, aplicações que combinam arquiteturas de CPU-GPU vem chamando a atenção de diversos pesquisadores devido ao alto poder computacional obtido com a combinação de tais arquiteturas. Porém, o consumo de energia necessário para utilização de tais arquiteturas tornou-se alvo de pesquisas na área científica. Em (MA et al., 2012) é apresentada uma proposta de gestão de energia para arquiteturas heterogêneas de CPU-GPU. Até então, as pesquisas na área de gestão de energia concentravam esforços em técnicas voltadas a arquiteturas de CPU ou GPU. A pesquisa dos autores visa solucionar a deficiência na área de energia para arquiteturas heterogêneas, apresentando o GreenGPU. Tal framework baseia-se na carga de trabalho para cada arquitetura, de CPU e GPU, com o objetivo de fazer com que ambas terminem a execução de determinada tarefa ao mesmo tempo. Como resultado disso, o consumo de energia diminui, visto que uma arquitetura não precisa esperar pela outra, já que ambas estão sendo coordenadas para evitar o desperdício de energia.

Com a crescente utilização de GPUs em diversas áreas, pesquisadores começaram a rescre- ver seus códigos para tais arquiteturas. Porém, muitas vezes um esforço considerável é investido e o benefício advindo com isso é relativamente pequeno, ou seja, não há nenhuma garantia que o desempenho obtido será o esperado. Visando reduzir esse risco, foram criados modelos de desempenho com o objetivo de projetar o possível desempenho a ser obtido. Porém, as pesqui- sas atuais focam em medir apenas o tempo de execução da GPU. Na pesquisa apresentada em (BOYER; MENG; KUMARAN, 2013), os autores concentram esforços no desenvolvimento de um framework para modelagem de desempenho da GPU, que prevê tanto o tempo de execução do kernel quanto o tempo envolvendo a transferência dos dados. O framework desenvolvido inclui um analisador de dados de uso de uma sequência de kernels para determinar a quantidade de dados que precisam ser transferidos e um modelo de performance PCIe para determinar o tempo que os dados irão levar para serem transferidos.

3.3.2 Considerações

Na pesquisa apresentada em (CROIX; KHATRI, 2009), os autores realizam uma análise das arquiteturas de GPU disponíveis atualmente, além dos frameworks disponíveis para pro- gramação paralela em GPU, o CUDA e o OpenCL. São trabalhados conceitos relacionados ao modo de pensar necessário para programação paralela em GPU, além dos desafios envolvendo

tal questão.

A virtualização é uma área com diferentes aplicações. Porém, em se tratando de virtualiza- ções de GPUs, o contexto muda. Atualmente, grande parte das soluções para virtualização que possuem suporte a emulação de GPUs são pagas. As soluções open source possuem algumas li- mitações, não contemplando tal necessidade. Dessa forma, em (SANTOS, 2010) é apresentada uma proposta de acesso a GPU através de uma camada de virtualização denominada wrapper. O autor utiliza-se da ferramenta Virtual Box, com as devidas alterações, e da arquitetura CUDA, para criar o VirtCUDA. Os resultados do trabalho demonstram que o VirtCUDA apresenta uma perda no desempenho das aplicações, causado pelas questões relacionadas à virtualização da placas gráficas.

Em sua pesquisa, (MA et al., 2012) apresenta um framework para gestão de arquiteturas heterogêneas de CPU+GPU, o GreenGPU. Tal pesquisa é inovadora na área, visto que até então, os trabalhos concentravam esforços apenas em arquiteturas de CPU ou GPU. Como resultado, o framework consegue obter uma redução no consumo de energia de até 21%. Os autores realizaram os testes com a arquitetura CUDA, na linha de GPUs GeForca da NVIDIA e em processadores Phenom II da AMD.

A pesquisa apresentada em (BOYER; MENG; KUMARAN, 2013) apresenta um framework para medir o desempenho de aplicações escritas para GPUs. O framework possibilita a mode- lagem do tempo de execução além do tempo de transferência dos dados. O modelo prevê a sobrecarga de transferência de dados com um erro de apenas 8%, e a inclusão do tempo de transferência de dados pode vir a reduzir o erro na aceleração de GPU em até 9%.

4

GPUHELP - APRESENTAÇÃO DA ARQUITETURA

Este capítulo tem o objetivo de descrever a proposta de solução, denominada GPUHelp, para ambientes de programação paralela em GPU. Sebesta (SEBESTA, 2005) classifica um ambiente de programação como sendo um conjunto de ferramentas utilizadas ao longo do de- senvolvimento de software. Tal conjunto pode consistir em somente um editor de texto ou uma série de ferramentas e funcionalidades integradas. No contexto deste trabalho, classifica-se como ambiente uma infraestrutura completa que envolva todas as etapas de desenvolvimento e testes de algoritmos ao usuário. O objetivo é oferecer uma infraestrutura completa de software e aplicativos para a utilização ao longo de todo o processo de escrita e testes de códigos das arqui- teturas de GPU, com foco nas arquiteturas CUDA e OpenCL. As seções a seguir descrevem a ideia e a arquitetura da solução proposta neste trabalho. Cabe salientar que, caso o leitor deseje compreender especificamente o funcionamento do ambiente, este pode avançar diretamente ao Capítulo 5, que trata da construção do ambiente e do desenvolvimento da aplicação.