Estou executando simulações de dinâmica molecular (MD) usando vários pacotes de software, como Gromacs e DL_POLY.
O Gromacs agora suporta os algoritmos de decomposição de partículas e de domínio. Por padrão, as simulações do Gromacs usam a decomposição de domínio, embora por muitos anos, até recentemente, a decomposição de partículas fosse o único método implementado no Gromacs. Em um dos trabalhos de Gromacs (DOI 10.1002 / jcc.20291), os autores dão uma razão para sua escolha inicial de decomposição de partículas:
"Uma decisão inicial do projeto foi a escolha de trabalhar com a decomposição de partículas em vez da decomposição de domínio para distribuir o trabalho pelos processadores. No último caso, os domínios espaciais são atribuídos aos processadores, o que permite encontrar vizinhos espaciais rapidamente apenas pela comunicação local, mas complicações devido as partículas que se movem sobre os limites espaciais são consideráveis. A decomposição de domínio é uma escolha melhor apenas quando o tamanho do sistema linear excede consideravelmente o intervalo de interação, o que raramente é o caso na dinâmica molecular. Com a decomposição de partículas, cada processador calcula as forças e atualiza as coordenadas / velocidades para uma fração atribuída das partículas, usando uma lista de vizinhos pré-computada distribuída uniformemente pelos processadores. resultantes da interacção entre as partículas par i e j , o qual é necessário para a actualização da velocidade de ambas as partículas i e j, é calculado apenas uma vez e comunicado a outros processadores. Todo processador mantém em sua memória local o conjunto completo de coordenadas do sistema, em vez de restringir o armazenamento às coordenadas necessárias. Isso é mais simples e economiza sobrecarga de comunicação, enquanto a reivindicação de memória geralmente não é um fator limitante, mesmo para milhões de partículas. A lista de vizinhos, por outro lado, que pode conter até 1000 vezes o número de partículas, é distribuída pelos processadores. A comunicação é essencialmente restrita ao envio de coordenadas e forças uma vez por vez, em torno do anel do processador. Essas opções provaram ser robustas ao longo do tempo e facilmente aplicáveis aos modernos clusters de processadores ".
O que eles querem dizer com "tamanho do sistema linear" na frase "A decomposição de domínio é uma escolha melhor apenas quando o tamanho do sistema linear excede consideravelmente o intervalo de interação, o que raramente acontece na dinâmica molecular"? A partir do parágrafo acima, entendo que a decomposição de partículas tem a vantagem de que não é necessário lidar com partículas que se movem através dos limites do domínio; em vez disso, você só precisa ter memória suficiente para cada processador para armazenar a configuração total do sistema. Portanto, a decomposição de partículas parece muito favorável, enquanto a decomposição de domínio parece muito desfavorável.
Tenho certeza de que essa é uma pergunta muito complicada (e provavelmente o assunto de muitos livros), mas basicamente, se a decomposição de partículas parece tão favorável, por que alguém precisaria usar a decomposição de domínio? A decomposição do domínio é apenas favorável se o tamanho do sistema for muito grande (tornando difícil ou impossível armazenar a configuração total em cada processador)? Com base no parágrafo citado acima, não sei por que a decomposição de domínio é agora, apenas recentemente, o algoritmo de paralelização padrão no Gromacs.
Parece que o DL_POLY agora (versão 4) também usa decomposição de domínio. No manual da versão 4:
"A divisão dos dados de conguração dessa maneira é baseada na localização dos átomos na célula de simulação, uma alocação geométrica de dados do sistema é a marca registrada dos algoritmos DD. Observe que, para que essa estratégia funcione com eficiência, a simulação O sistema deve possuir uma densidade razoavelmente uniforme, de modo que cada processador seja alocado quase uma porção igual de dados de átomos (tanto quanto possível). Com essa abordagem, a computação de forças e a integração das equações de movimento são compartilhadas (razoavelmente) igualmente entre processadores e em grande parte, pode ser calculado independentemente em cada processador.O método é conceitualmente simples, porém difícil de programar e é particularmente adequado para simulações em larga escala, nas quais a eficiência é mais alta.
...
No caso da estratégia DD, o algoritmo SHAKE (RATTLE) é mais simples que no método Replicated Data do DL_POLY Classic), onde são necessárias atualizações globais das posições do átomo (mesclagem e junção). "
Isso faz parecer que a decomposição do domínio é boa porque pode ser mais eficiente, mesmo que talvez seja mais difícil de implementar.
Por outro lado, uma versão anterior (DL_POLY Classic) usava paralelização de dados replicados, que parece ser outro nome para decomposição de partículas. No manual dessa versão:
átomos no sistema simulado, são reproduzidos em todos os nós de processamento). Nesta estratégia, a maioria das forças de computação e integração das equações de movimento pode ser compartilhada facilmente e igualmente entre nós e, em grande parte, ser processada independentemente em cada nó. O método é relativamente simples de programar e é razoavelmente eficiente. Além disso, pode ser "recolhido" para rodar em um único processador com muita facilidade. No entanto, a estratégia pode ser cara na memória e ter altos custos de comunicação, mas, no geral, provou ser bem-sucedida em uma ampla gama de aplicativos.
Este parágrafo geralmente parece consistente com o primeiro parágrafo desta questão, exceto pelo fato de dizer que a decomposição de dados / partículas replicadas possui "altos custos indiretos de comunicação". O parágrafo do documento Gromacs parece dizer o contrário - que a decomposição de partículas é preferível porque possui menor sobrecarga de comunicação do que a decomposição de domínio.
Você tem alguma ideia?
Por "A decomposição do domínio é uma escolha melhor apenas quando o tamanho do sistema linear excede consideravelmente o intervalo de interação, o que raramente é o caso na dinâmica molecular", os autores desse (muito antigo) artigo do GROMACS significam que, se o tamanho espacial da lista de vizinhos for da ordem de 1 nm, e a célula de simulação é de apenas vários nanômetros, então a sobrecarga da decomposição do domínio é muito alta. Você também pode aceitar uma distribuição de informações de todos para todos na decomposição de partículas e não precisa gastar tempo com toda a contabilidade para decomposição de domínio.
O problema com a decomposição de partículas implementado pelo GROMACS foi que, com o tempo, as partículas atribuídas a cada processador se difundem no espaço. Como a responsabilidade de calcular cada interação foi fixada por sua localização inicial, a difusão aumentou gradualmente o volume do espaço total que cada processador precisava conhecer para criar sua lista de vizinhos, mesmo que o cálculo total descrito pela lista de vizinhos fosse constante. Na prática, você reiniciaria periodicamente a simulação para redefinir a localidade de dados e comunicação.
Sua suposição de que "a decomposição de partículas tem a vantagem de que não é necessário lidar com partículas que se movem através dos limites do domínio" não se aplica se a difusão for significativa ao longo da escala de tempo da simulação.
A decomposição de domínio lida com isso "antecipadamente", migrando a responsabilidade pela interação junto com a difusão, melhorando a localização dos dados em cada processador e minimizando o volume de comunicação.
Isenção de responsabilidade: eu ajudo a desenvolver o GROMACS e provavelmente rasgarei a implementação da decomposição de partículas na próxima semana ;-)
fonte
Gostaria de acrescentar a resposta de Hristo Iliev. Enquanto seu post fala principalmente sobre a complexidade computacional , quando se trata de paralelismo, a complexidade da comunicação é pelo menos tão importante - e é o principal motivo da decomposição do domínio.
Máquinas paralelas modernas geralmente têm algum tipo de topologia no toro. Isso significa que cada CPU possui um número de CPUs "vizinhas" com as quais pode se comunicar muito rapidamente. Comunicar-se com uma CPU que não é vizinha é mais caro. Portanto, é sempre favorável ter um algoritmo que só precisa se comunicar com as CPUs vizinhas.
Ao usar uma decomposição de partículas, os parceiros de interação de uma partícula são distribuídos aleatoriamente em todas as outras CPUs. Para poder calcular as interações, ele precisa conhecer as coordenadas de todos os parceiros, portanto, precisa se comunicar comP O ( P2)
Observe, no entanto, que sistemas não uniformes não são tão comuns quanto parece, eles ocorrem apenas ao simular algo no vácuo ou ao usar um solvente implícito. As densidades de cristais e líquidos são próximas o suficiente para executar a decomposição do domínio.
fonte