62ª Reunião Anual da SBPC
B. Engenharias - 1. Engenharia - 3. Engenharia Civil
ANÁLISE DO DESEMPENHO DE PROCESSAMENTO PARALELO COM MEMÓRIA COMPARTILHADA APLICADA NO CÁLCULO DE PROBABILIDADE DE FALHA
Ketson Roberto Maximiano dos Santos 1
Adeildo Soares Ramos Júnior 1
André Santos Dória 1
Ricardo Sampaio Romão Filho 1
1. Laboratório de Computação Científica e Visualização - LCCV/UFAL
INTRODUÇÃO:
Com o passar dos anos os problema enfrentados nas engenharias têm se tornados cada vez mais complexos e exigindo mais precisão, com isso, a computação científica tem buscado alternativas para acompanhar esse desenvolvimento, visto que o gasto computacional tende a aumentar com a complexidade do problema. Uma importante ferramenta é o processamento paralelo em memória compartilhada. Este é utilizado em ambientes que possuem vários núcleos de processamento, compartilhando o mesmo recurso de memória. Em geral usá-se o padrão OpenMP. Dentro do método de Monte Carlo a preocupação está em como dividir de maneira correta entre os núcleos de um processador a geração dos números aleatórios. A paralelização é obtida com o uso de algumas diretivas de pré-processamento, onde o programador não é responsável direto pela divisão das tarefas dentro do OpenMP. Uma importante ferramenta matemática é chamada lei de Amdhl. Ela traduz o ganho de desempenho do programa com o uso de vários processadores. Dentro desta perspectiva este trabalho busca quantificar o uso do OpenMP para verificar se seu uso é uma boa alternativa quando se deseja paralelizar códigos de programas.
METODOLOGIA:
Foi realizado um estudo prévio sobre processamento em paralelo, enfocando os conceitos de uso de memória distribuída e compartilhada. Para efetuar a analise quantitativa usou-se diretivas de pré-processamento do OpenMP dentro de implementações simples. Um código utilizado realizava produtos de matrizes, pois é conhecido que tal operação demanda muito tempo de processamento e é usual em diversos métodos numéricos. Posteriormente investigou-se a geração de números aleatórios uniformes e seguindo uma distribuição de probabilidade. Foi investigada uma maneira de efetuar as divisões de tarefas entre as threads de processamento e em seguida foram aplicadas ao código de Monte Carlo que calculava a probabilidade de falha de uma estrutura simples. A linguagem de programação utilizada foi o C++, visto que ele dá suporte ao OpenMP. O compilador foi o TDM MinGW g++ versão 4.4.1 da GNU, pois somente versões acima dessa dão suporte ao OpenMP.
RESULTADOS:
No fluxo do código se uma dessas diretivas é encontrada automaticamente a região posterior é paralelizada. Diversas funções encontradas dentro do OpenMP permitem que o usuário definam por exemplos os números de threads que ele deseja que realizem suas operações. O algoritmo de multiplicação de matrizes utiliza três laços de repetições um dentro do outro, possibilitando o uso de uma diretiva de pré-processamento. Ela permite dividir as iterações para cada thread. Foi observado um crescimento mais acentuado no tempo de processamento do código serial em comparação com o paralelo quando aumenta-se as dimensões das matrizes. Para calcular a probabilidade de falha é necessário gerar números aleatórios seguindo a distribuição de probabilidade da variável. Assim cada thread irá tomar a mesma semente e gerará a mesma seqüência de números aleatórios. Se mudarmos as sementes é verificado que os dados perdem qualidade, então a alternativa foi gerar a quantidade requerida de números aleatórios fora da região paralela e armazenar os dados em um vetor. Dessa forma as threads podem trabalhar com uma única seqüência de dados, pois o programador se torna o responsável em distribuir estes entre as threads. Assim cada uma pega os dados em seqüência e sem repetições.
CONCLUSÃO:
Estratégias de computação de alto desempenho possuem um papel relevante quando se deseja obter ganho de eficiência para problemas de grande porte, problemas estes encontrados com bastante freqüência dentro da engenharia. Foi visto que se diminuirmos a complexidade do problema o resultado pode ate piorar. Logo é importante para o programador ter a sensibilidade de quando e em que parte deve paralelizar em seu código.
Instituição de Fomento: Fundação de Amparo a Pesquisa no Estado de Alagoas - FAPEAL
Palavras-chave: Processamento Paralelo, Monte Carlo, Probabilidade de Falha .