61ª Reunião Anual da SBPC
B. Engenharias - 1. Engenharia - 3. Engenharia Civil
COMPUTAÇÃO DE ALTO DESEMPENHO PARA O FRAMEWORK PREADYN++ UTILIZANDO A TÉCNICA DA DECOMPOSIÇÃO ESPACIAL DE DOMÍNIO
Daniel Almeida Tenório 1
Eduardo Setton Sampaio da Silveira 1
Fábio Martins Gonçalves Ferreira 1
1. Universidade Federal de Alagoas
INTRODUÇÃO:
Nos últimos anos a crescente expansão das atividades realizadas pelas indústrias exploradoras de petróleo, tem motivado o desenvolvimento de sistemas computacionais para simulação numérica do comportamento de estruturas offshore (Menezes et al., 2000; Silva, 2005). Inicialmente, destaca-se o sistema desenvolvido por Silveira (2001), denominado Preadyn, que tinha como principal atribuição à análise de linhas de ancoragens e risers. Esse sistema vem sendo utilizado para análise de linhas de ancoragens e risers pela PETROBRAS em conjunto com outros sistemas computacionais, a exemplo do TPN (Nishimoto et al., 2004) e Dinasyn (Coelho et al., 2001; Fucatu & Nishimoto, 2003). Em 2005, o sistema Preadyn, inicialmente desenvolvido em C, foi convertido para um framework orientado a objetos em C++ (Ferreira, 2005), denominado Preadyn++. Atualmente , esse sistema é utilizado em pesquisa, análise e desenvolvimento nos sistemas supracitados. Nas análises realizadas pelo framework Preadyn++, a linha de ancoragem ou riser é discretizado em nós e elementos, gerando uma malha de elementos finitos. Em algumas situações de projeto, essa malha precisa de um maior grau de refinamento para obtenção de uma resposta satisfatória. Uma maior discretização acarreta em um maior volume de dados e um alto custo de processamento, implicando em maior espaço para armazenamento de dados e um maior tempo de processamento. Dessa forma, em alguns casos, tal análise pode se tornar inviável. Uma solução possível para esse tipo de problema é a utilização de técnicas de computação de alto desempenho, como o processamento paralelo. Portanto, visando tornar possíveis tais simulações, o presente trabalho descreve o módulo incorporado ao Preadyn++ que é responsável pela implementação da técnica de processamento paralelo voltado para ambientes de memória distribuída. O mesmo também é responsável pela partição e gerenciamento do domínio do problema, e utiliza como interface para comunicação entre os processadores o padrão MPI. Encontra-se na literatura técnica uma variedade de trabalhos que fazem uso de cluster de computadores com memória distribuída. Em tais trabalhos são evidenciados os benefícios obtidos na utilização desse tipo de computação de alto desempenho, apresentando comparações de tempo entre o uso de apenas um computador e de um cluster de computadores. Chau et al. (2007) implementa o método da sobreposição de subdomínio via MPI em múltiplos processos com memória distribuída, considerando o esquema de computação iterativa assíncrona paralela. Aplicando isso a problemas de convecção-difusão que ocorre em diversas áreas, como finanças e hidráulica. No trabalho de Ramadan (2007), ele utiliza um método para solucionar problemas de eletromagnetismo no qual é exigido um elevado tempo de processamento e armazenamento de dados. Com o objetivo de melhorar o desempenho desse método é realizada uma decomposição espacial sem sobreposição de subdomínio, onde cada subdomínio é processado por um processo. Entretanto, é feita uma atualização dos dados nas interfaces dos subdomínios, sendo necessário a troca de informações entre os processos. Dessa forma, é preciso uma comunicação entre processos, na qual é utilizada a biblioteca MPI. Krysl et al. (2000) e Rao (2007) apresenta uma implementação em paralelo, utilizando a decomposição de domínio e troca de mensagem com MPI, para solucionar problemas que envolvem a discretização temporal através de algoritmos de integração explícitos. Como dito anteriormente, pode-se facilmente encontrar na literatura de Engenharia diversas publicação a respeito de programação em paralelo com o uso da técnica de decomposição espacial de domínio. Entretanto, pouco se sabe sobre a aplicação dessa técnica em análise de linhas de ancoragem e de risers.
METODOLOGIA:
Para a realização de uma análise com framework Preadyn++ é necessário a definição de um modelo computacional para dar início a análise de problemas de linhas. Esse modelo consiste na geração de um modelo numérico, a partir de um modelo matemático representativo do modelo real, formado por linhas de ancoragem e risers. Dessa forma, obtém-se o modelo numérico, por meio de uma discretização do domínio real em estruturas menores, denominadas nós e elementos, gerando uma malha de elementos finitos. O framework apresenta algumas classes, a Model é uma das classes principais, responsável pelo gerenciamento de todo o processo de modelagem do framework. Outra classe importante do framework é a IntAlg, que tem como principal papel fazer a simulação numérica do modelo. As classes Node e Element são utilizadas para compor a malha de elementos finitos, e as classes Line, Segment e Vertex são responsáveis pela modelagem baseada em geometria. Os modulos implementados no framework foram: a classe IntAlgP que é uma versão paralelizada da classe IntAlg, e a classe BeginMpi que tem a função de inicializar, finalizar e da acesso as diversas funções do MPI que forem necessárias ao processo de paralelização. No modulo implementado, o primeiro passo é dividir a malha de elementos finitos entre os processos criados, este procedimento é realizado pela identificação dos nós de interface, ou seja: os nós que separam os trechos da linha que cada processo ira ficar responsável de analisar. Após a identificação deste(s) nó(s) de interface cada processo ira criar a linha e ficar responsável por seu trecho. Para que cada processo consiga analisar apenas o seu pedaço da linha é necessário haver a compatibilidade da linha como um todo, ou seja: é preciso haver a compatibilidade cinemática e de força, isto acontece pela troca de mensagens feita pelas funções do MPI, que para cada instante de tempo da análise dinâmica é feito a troca de mensagens entre todos os processos, estas trocas de mensagens consiste em envio e recebimento de esforços externos, internos e de massa do elemento de interface, bem como o envio de velocidade, aceleração e deslocamento do nó de interface.
RESULTADOS:
As aplicações foram feitas para linhas com 8000, 16000, 20000, 24000 e 30000 nós donde cada aplicação foi executada com o numero de processos variando de 5 a 40 com intervalos de 5, ou seja, cada linha foi dividida em 5, 10, 15 até 40 partes, sendo cada parte da linha calculada por um processo. Os exemplos apresentaram resultados precisos, Os valores máximos dos speedup’s encontrados para os exemplos ficaram aproximadamente entre 3.2 e 3.75, uma outra observação importante é que para todos os exemplos o gráfico do speedup iniciou crescente encontrou um pico (valor máximo) e decaiu, demonstrando que os exemplos foram elaborados corretamente para o numero de computadores disponíveis no cluster.
CONCLUSÃO:
Pode-se dizer que os objetivos esperados foram alcançados com êxito, entre eles implementação do modelo para a paralelização do framework. A implementação paralela do Preadyn++, foi utilizando o MPI, pelo intermédio de duas novas classes, a IntAlgP que é responsável pela paralelização da integração no tempo pela técnica de partição do domínio da linha, e da classe BeginMpi responsável pela inicialização, finalização e acesso as funções do MPI. Vale enfatizar os bons resultados alcançados, pois o módulo não apresentou muita variação nos resultados analisados, além disso conseguiu-se uma boa otimização com o SpeedUp chegando próximo a 4.
Instituição de Fomento: CNPq
Palavras-chave: Computação de Alto Desempenho, Processamento Paralelo, MPI.