• Nenhum resultado encontrado

A abordagem numérica dos procedimentos apresentados ao longo deste capítulo é condicionada por diversos factores. Por um lado, esta depende directamente do tipo de problema e das restrições associadas. Por outro lado, é moldada por especificidades de programação e algoritmia. Estas dependências estão intimamente ligada às opções tomadas ao nível da programação paralela, quer em termos de infra-estrutura computacional quer em termos de opções de programação. Note-se ainda que uma parte integrante de aplicações de elementos finitos em cálculo paralelo é o esquema de partição de domínio utilizado (vd. Sec. 3.2.3). Neste trabalho a decomposição de domínios é feita utilizando a livraria METIS [Karypis e Kumar 1998].

Resumem-se em seguida algumas questões associadas à versão paralela do programa aqui des- crito. Para o efeito, começa-se por abordar questões gerais, seguindo depois para especificidades

Cálculo Paralelo

dos problemas de optimização e dos múltiplos problemas da abordagem hierárquica.

7.7.1

Problemas Gerais do MEF

Começando por problemas gerais de elementos finitos, a paralelização é feita a diversos níveis. O sistema de equações é construído localmente, isto é, em cada nó computacional é construída apenas a parte do sistema de equações respeitante a cada subdomínio. Apesar de ser possível construir todo o sistema no nó mestre e fazer a posterior comunicação aos nós responsáveis por cada um dos subdomínios, a opção implementada é significativamente mais eficiente [Kim e Im 2003]. Na realidade, para além de se reduzir a quantidade de memória computacional exigida, esperam- -se, nesta etapa, eficiências próximas de 1. Este processo é perfeitamente expansível pelo facto de quer a formulação elementar quer a maior parte da assemblagem poderem ser realizadas sem necessidade de comunicação entre os diferentes processos. A gestão das condições de fronteira também é realizada localmente. Uma das características do método do gradiente conjugado é o facto de não ser essencial assemblar globalmente a matriz de coeficientes, sendo apenas necessários os resultados das multiplicações de matrizes por vectores e dos produtos internos envolvidos no método. É por esta razão que os subdomínios podem ser tratados independentemente em cada um dos processos. Neste sentido, a única troca de informação entre diferentes processos, no que diz respeito à definição do sistema, consiste em completar as partes do sistema relativas a graus de liberdade das fronteiras dos domínios. Assim, cada processo precisa de assemblar, também, a influência da rigidez dos elementos pertencentes aos outros subdomínios com conectividade em nós de fronteiras comuns. Esta operação é feita apenas no início da fase de resolução. Em termos de processamento paralelo, em cada iteração existem apenas dois tipos de operações relevantes, os produtos internos e as multiplicações de matrizes por vectores [Kim e Im 2003]. No entanto, em cada processo, estas operações são executadas de forma independente sobre o subdomínio respectivo. Na realidade, o método do CG paralelizado tem um funcionamento idêntico ao da versão em série, sendo apenas necessário influenciar os diferentes subdomínios com a mesma direcção de busca para garantir que as varias partes do sistema reajam como se fossem processadas pelo mesmo processador. Assim, as actualizações dos vectores x e r são realizadas em cada processador (vd. Eqs. 7.24 e 7.25). Em cada iteração, a convergência do processo é influenciada pelos coeficientes globais α e β, calculados pelos produtos internos envolvendo os vectores de resíduo e as direcções de busca. Em rigor, estes constituem os dois pontos de sincronização dos processos paralelos, sendo os que requerem comunicações colectivas. Contudo, estas comunicações envolvem apenas os escalares provenientes dos produtos internos realizados em cada processador, sendo somados em todos os processadores. Em cada iteração é ainda necessário resolver o produto Ap, que, mais uma vez, apresenta a vantagem de não necessitar do armazenamento explícito da matriz global, apenas da obtenção da parte do resultado respeitante a cada processador.

7.7.2

Optimização Topológica

A tarefa mais exigente de um problema de optimização topológica é tipicamente a resolução do sistema de equações associada à análise do problema [Borrvall e Petersson 2001, Amir e Sigmund 2010, Bendsøe e Sigmund 2003]. Esta tarefa é feita múltiplas vezes ao longo do processo iterativo, assim como as tarefas associadas à sua definição. No entanto, a estrutura geral deste procedimento é idêntica ao abordado na secção anterior, com a definição do sistema de equações, configuração de condições de fronteira e posterior resolução. Neste aspecto, os pressupostos apresentados para a versão paralela são aqui válidos também. Assim, o cálculo macroestrutural paralelo de proble- mas de optimização começa por ter uma configuração de processamento distribuído na definição das equações elementares e na assemblagem local. Note-se, contudo, que o facto de as equações locais serem armazenadas em memória para serem apenas afectadas das variações de densidade do material em cada iteração traz grandes benefícios em termos de processamento, mas levam a que o peso da sua paralelização se faça sentir de forma menos pronunciada após a primeira itera-

Cálculo Paralelo

ção. O sistema de equações, por sua vez, é em cada iteração resolvido com recurso ao método do CG anteriormente referido. É assim possível obter bons resultados de desempenho paralelo com a paralelização da fase de análise de um problema de optimização topológica, pelo que se optou por não paralelizar os algoritmos de optimização utilizados. Verifica-se, no entanto, que em alguns problemas há uma tarefa cujo peso tem um crescimento geométrico com a dimensão do problema. A avaliação inicial da malha para a definição de vizinhanças e distâncias entre elementos finitos em problemas com filtros torna-se muito onerosa com o aumento das dimensões do problemas. No entanto, a sua simplicidade torna-a também propensa a uma simples paralelização. Como esta avaliação pode ser efectuada de modo completamente independente, elemento a elemento, torna-se perfeitamente escalável e resulta em ganhos assinaláveis.

7.7.3

Optimização Topológica Multiescala

É conveniente referir, antes de mais, que as considerações efectuadas relativamente às versões para- lelas definidas anteriormente continuam a ser válidas quando se tratam de problemas de optimização topológica multiescala. Note-se também que esta secção se centra na estrutura hierárquica, sendo os restantes problemas, nomeadamente os problemas de optimização estrutural com microescala predefinida, regidos pelos pressupostos anteriores. Em qualquer caso, a parte macroestrutural dos problemas em análise assenta na mesma estrutura computacional, pelo que se mantém o seu fun- cionamento paralelo. A principal diferença prende-se com a definição das equações elementares, visto que numa estrutura hierárquica as propriedades constitutivas se alteram em cada iteração e obrigam à construção completa de cada sistema de equações.

A estrutura de cálculo para problemas de optimização topológica hierárquica rege-se, em termos de cálculo paralelo, pela gestão dos problemas locais. Para além de constituírem, por larga margem, o principal requisito computacional destes problemas, acarretam alguns desafios particulares. São necessários dois modelos de elementos finitos, um correspondente à discretização da estrutura (macroescala – Ω) e outro à discretização do domínio onde se desenvolve a optimização de cada uma das distribuições de material associadas (microescala – Y ). A estrutura hierárquica do problema leva a que seja necessário resolver um problema de homogeneização, acarretando várias resoluções de sistemas de equações por cada ponto de integração de cada elemento da macroescala, assim como o próprio problema de elementos finitos global. Mesmo utilizando uma aproximação comum, como o caso neste trabalho, em que se usa o campo médio de deformação em cada elementos da macroescala para permitir a resolução de um problema de optimização local por elemento macroestrutural, a dimensão do problema pode assumir proporções bastante limitativas. Considere-se como exemplo um problema bidimensional, com uma malha regular de 20× 40 elementos quadriláteros (1722 Graus de Liberdade – GL) na macroescala e malhas regulares de 20× 20 elementos quadriláteros (882 GL) na microescala. Apesar da aparente pequena dimensão, o problema global de 1722 GL será acompanhado da resolução de 800 problemas de homogeneização em cada iteração. Cada um destes problemas acarreta a resolução de 3 sistemas de equações para o caso de elasticidade, 4 no caso de termoelasticidade e 6 no caso de se resolver também o problema térmico. Se o problema for tridimensional, o número de sistemas a resolver passa para 6, 7 e 10, respectivamente, para além das maiores dimensões dos sistemas associados. Adicionalmente, estes problemas tendem a sofrer de problemas sérios de condicionamento, especialmente no caso de serem utilizados métodos de penalidade para impor as condições de periodicidade, agravados pelas diferenças de magnitude dos valores de rigidez local com a utilização do SIMP. Tudo isto pode ser relacionado com uma medida da qualidade do condicionamento de um sistema de equações através o número de condição espectral. A penalização de propriedades característica do SIMP, especialmente em problemas de material e vazio, tende a aumentar este valor, traduzindo uma deterioração do condicionamento das matrizes que definem os sistemas de equações. Uma matriz mal-condicionada resulta numa maior sensibilidade da solução do sistema a pequenas variações dos coeficientes da matriz ou do vector de coeficientes independentes, criando problemas de convergência nos algoritmos de resolução (vd. Sec. 7.2.4.1) [Borrvall e Petersson 2001, Kaw e Kalu 2011]. A utilização simultânea de penalidades nas

Cálculo Paralelo

condições MFC e penalidades do modelo SIMP em problemas de homogeneização com optimização topológica criam ainda mais problemas de condicionamento. Apesar de estes problemas serem reduzidos com recurso a técnicas de precondicionamento, esta questão pode tornar-se ainda mais limitativa se o método de resolução for paralelizado. Note-se que a decomposição de domínio resulta numa divisão do sistema de equações usualmente feita de duas formas alternativas, por nós (ou por graus de liberdade) ou por elementos, como é ilustrado na figura 7.16 para elementos de dois nós. O método aqui utilizado segue a segunda opção [Pinho-da-Cruz 2007], mais adequada para a resolução de problemas de elementos finitos por não fazer a divisão de equações elementares. Em qualquer dos casos, a comunicação entre domínios é feita com informação relativa às fronteiras. Como a periodicidade impõe a existência de elementos virtuais com conectividade entre nós usualmente pertencentes a domínios diferentes, para além das questões de condicionamento, pode surgir uma tendência inicial para que as penalidades se tornem dominantes nos respectivos domínios, levando a erros mais pronunciados nas soluções iniciais e à consequente deterioração da qualidade da convergência, já que é a comunicação entre processos que gradualmente regula a coerência das soluções.

(a) (b)

Figura 7.16: Ilustração dos sistemas de equações resultantes da decomposição de domínio (a) por nós e (b) por elementos.

Neste trabalho, foram três as estratégias de paralelização adoptadas para a resolução dos pro- blemas locais. Estas são ilustradas na figura 7.17 e resumem-se de seguida. Apesar das referidas limitações, uma das abordagens adoptadas consiste em resolver cada sistema de equações em pa- ralelo, recorrendo a métodos de decomposição de domínio. Neste caso, cada um dos problemas locais é resolvido em sequência e em todos os processadores (Fig. 7.17(a)), com uma estrutura paralela interna de resolução dos problemas de elementos finitos em tudo idêntica à versão paralela do problema macroestrutural. Alternativamente, pode tirar-se partido da estrutura hierárquica e da separação dos problemas locais para distribuir cada um deles em diferentes nós de processa- mento. Assim, cada sistema é resolvido em série, mas no nó de computação correspondente ao elemento macroestrutural respectivo, dando origem a uma estrutura de cálculo distribuído. Esta abordagem traz evidentes vantagens em termos de eficiência, sendo estes problemas resolvidos em simultâneo com outros problemas locais. Esta estratégia, apesar de representar um grão computa- cional potencialmente diferente para cada processador, tem as vantagens de, sendo uma estratégia de processamento distribuído, tender a ser mais escalável e menos sensível a problemas de condici- onamento do sistema associado. Mesmo no caso de utilização de metodologias de optimização que

Considerações Gerais

percam a independência dos problemas locais – como o modo H1 com MMA –, esta estratégia traz claras vantagens pelo facto de continuar a permitir que os problemas de homogeneização associados a cada problema local, responsáveis pela maior parte dos recursos consumidos, continuem a ser executados deste modo. Distinguem-se assim duas estruturas alternativas. Por um lado, em modos de cálculo que mantenham a separação total dos problemas locais, os problemas são totalmente distribuídos, tanto em termos de homogeneização quanto em termos de procedimentos locais de optimização (Fig. 7.17(b)). Alternativamente, modos de cálculo em que as variáveis microestru- turais sejam optimizadas em simultâneo, separou-se a optimização, não-paralelizada, da fase de cálculo de homogeneização e determinação das sensibilidades constitutivas locais, distribuída de modo a manter o desempenho paralelo pretendido (7.17(c)). Salienta-se o facto de ter sido necessá- rio adaptar, nesta versão distribuída, a estrutura do método de resolução de sistemas de equações aqui utilizado. A versão paralela utilizada recorria sempre ao universo de processadores disponíveis, fornecido pela livraria MPI através do comunicador MPI_COMM_WORLD. Foram necessárias algumas alterações para permitir que este fosse executado apenas no respectivo processador local, de modo a correr em série considerando cada um dos processadores como nó mestre do processo em causa. Note-se ainda que a estrutura distribuída implementada tem algumas limitações. Por um lado, o seu desempenho depende do resto da divisão inteira de processos pelo número de processadores. Por outro lado, as comunicações podem tornar-se num peso bastante elevado nesta abordagem. Como a quantidade de dados envolvidos pode ser maciça, a forma como estes são geridos e comu- nicados entre processadores pode constituir um sério bottleneck9 ao desempenho computacional,

especialmente em situações de pequeno grão computacional. Dependendo da estratégia de opti- mização utilizada, os requisitos de memória na resolução de alguns problemas podem ser bastante elevados. Este facto é notório não só em termos de armazenamento geral mas também ao nível de variáveis isoladas, levando mesmo à necessidade de se anular os limites de alocação de processos (ULIMIT -S UNLIMITED) no sistema operativo Linux. Neste trabalho, algumas concessões foram feitas a este nível devido à flexibilidade pretendida em termos de modularidade, e à necessidade de controlar uma elevada quantidade de resultados e valores intermédios, com sucessivas escritas e operações de pós-processamento.