63ª Reunião Anual da SBPC |
A. Ciências Exatas e da Terra - 2. Ciência da Computação - 8. Processamento Paralelo e Distribuído |
COMPUTAÇÃO CiENTÍFICA DE ALTO DESEMPENHO USANDO GPGPU. |
Bruno da Silva Ferreira 1 Thiago Novaes Barbosa 2 Walter matheos Junior 3 |
1. Aluno de graduação / Bolsista PIBIT - Fatec de Carapicuíba - CEETEPS 2. Aluno de graduação - Fatec de Carapicuíba - CEETEPS 3. Prof. Mestre - Depto de Computação - Fatec de Carapicuíba - CEETEPS |
INTRODUÇÃO: |
A demanda computacional apresentada pelos jogos de computador, fez surgir toda uma indústria de equipamentos de hardware, baseados em co-processadores dedicados para cálculos geométricos e movimentação de dados em bitmap. Estes co-processadores são chamados de GPU (Unidade de Processamento Gráfico). Atualmente as GPUs são implementadas através de arquiteturas paralelas formadas por múltiplos processadores que segundo a classificação de Flynn para arquiteturas paralelas, são considerados SIMD (Single Struction Multiple Data Stream). Uma arquitetura SIMD permite a execução de um determinado processamento simultaneamente sobre vários conjuntos de dados, alcançando um alto grau de paralelismo e com potencial para se ter um alto speedup (fator de redução de tempo de execução de um programa paralelizado). Operações sobre vetores e matrizes podem ter seu processamento acelerado nestas arquiteturas. Estas operações são a base para a solução de muitos problemas técnicos e científicos. Desta forma existe uma tendencia de se usar as GPUs também para processamento não gráfico levando ao conceito de GPGPU ( Computação de uso geral em Unidade de Processamento Gráfico). Existem basicamente dois modelos de programação para este ambiente, o CUDA (Compute Unified Device Architecture) da Nvidia e o OpenCL (Open Computing Language) do Khronos Group. |
METODOLOGIA: |
Estudo da metodologia de implementação de programas para a plataforma CUDA. Implementação de algoritmos para operações básicas sobre vetores e matrizes também usando a plataforma CUDA. Analise comparativa de desempenho destes algorítimos em ambiente SISD (Single Instruction, Single Data stream) correspondente a computadores com arquitetura de Von Neumman, em ambiente MIMD (Multiple Instruction, Multiple Data streams) correspondente a multicomputadores paralelos e ambientes SIMD correspondente a GPGPUs, segundo a taxonomia de Flynn. Efetuamos também analise comparativa de desempenho entre programas implementados usando a biblioteca BLAS (Basic Linear Algebra Subprograms) e a sua implementação em CUDA a CUBLAS desenvolvida pela Nvidia. |
RESULTADOS: |
Encontramos ganhos significativos no desempenho de operações sobre vetores e matrizes rodando o programa em CUDA para diversos modelos de GPUs . Para um maior desempenho é necessário desenvolver um código CUDA específico para a GPU onde se quer rodar o programa tendo em vista que existem diferenças significativas no número de processadores, no arranjo destes processadores e na organização de memória das GPUs comerciais mesmo sobre um mesmo fabricante, no caso, a Nvidia. A utilização da CUBLAS apresenta um relevante ganho de desempenho em todas as GPUs estudadas, sendo uma alternativa interessante para o desenvolvimento de códigos de uso mais geral. |
CONCLUSÃO: |
A utilização de GPGPUs pode aumentar significativamente a performance na resolução de problemas técnicos e científicos cuja solução é baseada em operações sobre vetores e matrizes, ou que apresentam a necessidade de executar uma mesma operação sobre muitos dados no seu algorítimo de resolução. |
Palavras-chave: Computação de alto desempenho, GPGPU, NVIDIA CUDA. |