63ª Reunião Anual da SBPC
B. Engenharias - 1. Engenharia - 3. Engenharia Civil
COMPARAÇÃO DO DESEMPENHO COMPUTACIONAL NA MUTIPLICAÇÃO DE MATRIZES UTILIZANDO FERRAMENTAS DE COMPUTAÇÃO DE ALTO DESEMPENHO
Heleno Pontes de Bezerra Neto 1
Ketson Roberto Maximiano dos Santos 1
Lucas Pereira de Gouveia 1
Joseanderson Augusto de Caldas Costa 1
William Wagner Matos Lira 2
1. Laboratório de Computação Científica e Visualização – LCCV/UFAL
2. Prof. Dr./Orientador - Laboratório de Computação Científica e Visualização – LCCV/UFAL
INTRODUÇÃO:
Problemas de engenharia vêm se tornando cada vez mais complexos e para solucioná-los novas técnicas computacionais têm sido desenvolvidas, tais como o Método dos Elementos Finitos e o Método dos Elementos Discretos. Entretanto, a complexidade desses problemas pode ser tamanha que encontrar uma solução pode demandar um alto custo computacional.
Operações matriciais são comuns nas práticas de engenharia, como, na resolução de problemas de elementos finitos. Tais operações também são conhecidas pelo elevado custo computacional por se tratarem de operações de ordem de complexidade quadrática e cúbica.
A programação em paralelo possibilita o acesso a um maior poder de processamento e a uma maior quantidade de memória, recursos estes que não são facilmente encontrados na computação serial. É possível utilizar programação em paralelo em ambientes de memória compartilhada com o uso da arquitetura Multi-core, através do uso do OpenMP, ou com CUDA C utilizando GPUs (Graphic Processing Units) em placas gráficas da Nvidia. Este trabalho procura realizar um comparativo, através da métrica Speed-Up, entre algumas metodologias de computação de alto desempenho na operação de multiplicação de matrizes quadradas de diversas ordens em ambiente de memória compartilhada.
METODOLOGIA:
Foram implementadas versões para ambientes de memória compartilhada e para uso de placas gráficas. Para a realização dos testes de desempenho utilizou-se um dos nós do cluster da GradeBR instalado no Laboratório de Computação Científica e Visualização localizado na Universidade Federal de Alagoas, onde esse nó possui dois processadores i7 nehalem com quatro núcleos cada, 24Gb de memória RAM e GPU Nvidia TeslaC1060.
Em ambientes de memória compartilhada foi utilizado o padrão OpenMP com a aplicação de uma diretiva (#pragma omp parallel for) em um dos loops existentes. Essa versão foi executada variando o número de threads de 1 a 8.
Com a versão na placa gráfica, utilizou-se o CUDA C. Verificando a existência da biblioteca matemática CUBLAS e a existência de implementações para multiplicação de matrizes, essa biblioteca foi utilizada. O número de threads utilizadas é um parâmetro definido durante a execução e depende da dimensão da matriz a ser trabalhada.
Nas versões analisadas fez-se a multiplicação de matrizes quadradas, com a dimensão variando de 500 a 2000. Durante as execuções foram medidos os tempos e posteriormente calculados os ganhos de desempenhos de cada implementação.
RESULTADOS:
Operações matriciais apresentam um alto custo computacional associado, porém com o uso de programação em paralelo em ambiente com memória compartilhada, utilizando OpenMP ou em GPUs utilizando CUDA C, é possível obter resultados extraordinários em relação ao desempenho das operações. Esses resultados são apresentados aqui usando a métrica Speed-Up, que relaciona o tempo gasto em processamento serial com o tempo gasto em processamento paralelo.
Realizando o produto de matrizes sequencialmente e variando as dimensões das matrizes de 500 a 2000, o tempo de processamento chegou até 76.1 segundos de processamento para a maior dimensão. Na versão em que se usou OpenMP foi observado um Speed-up de 7.75, sendo utilizadas 8 Threads. O desempenho na GPU usando a biblioteca CUBLAS foi o mais eficiente sendo obtido um discrepante Speed-up de 317. Desta forma, o desempenho na GPU ficou quase 41 vezes mais rápido do que em OpenMP.
CONCLUSÃO:
Com o uso das técnicas de computação para processamento paralelo em ambientes de memória compartilhada foi possível obter ganho de desempenho em uma operação existente em grande parte dos problemas de engenharia, a multiplicação de matrizes. Com o uso das duas estratégias foi possível obter versões de multiplicação mais rápida que a versão serial do código. Ao comparar as versões implementadas, o desempenho da versão com CUBLAS foi superior ao da versão com OpenMP.
Palavras-chave: Computação de Alto Desempenho, GPU, OpenMP.