Nossas simulações de dinâmica de plasma geralmente produzem muita informação. Durante as simulações, registramos várias propriedades físicas em uma grade (x, y, z, t) que é tão grande quanto (8192x1024x1024x1500), por pelo menos 10 propriedades. Esta informação é processada após a simulação ser concluída. Com isso nós
- fazer filmes de propriedades,
- realizar uma análise de Fourier,
- calcular propriedades médias.
Esse simples despejo de tanta informação quanto possível funcionou bem quando estudamos sistemas menores. Isso nos deu a flexibilidade de interagir com os resultados e decidir mais tarde o que queríamos fazer com ele. Também nos permitiu alocar nossos recursos computacionais (tempo de CPU) para simplesmente executar as simulações.
Iniciamos o processo de fazer a análise de Fourier em tempo real e filtrar apenas uma faixa selecionada de escalas de comprimento. Por razões numéricas, às vezes precisamos resolver escalas de comprimento menores do que realmente estamos interessados; portanto, nesses casos, esse filtro ajuda bastante. Também estamos explorando várias bibliotecas de E / S paralelas , por exemplo , opções de E / S paralela, em particular HDF5 paralelo .
Quais estratégias estão disponíveis para maximizar a eficiência do processamento de dados?
Existe algum benefício em realizar todas as análises (não incluindo pós-processamento, por exemplo, filmes e plotagens) em tempo real?
Eu posso imaginar esse problema surgindo em outras áreas de pesquisa. Por exemplo, você pode ter uma simulação de dinâmica molecular que precisa evoluir por um longo tempo, mas está interessado no breve momento em que algo interessante está acontecendo. Ou no CFD, o desenvolvimento inicial pode ser lento, mas depois que a turbulência se instala, você pode precisar de uma resolução de tempo maior para monitorar a dinâmica.
Existem exemplos disponíveis gratuitamente de coleta sofisticada de resultados de simulações?
Respostas:
Eu acho que você pode ter que dividir sua saída para corresponder às suas metas:
Isso significa bastante trabalho para ter saídas dedicadas em vez de uma grande genérica, mas isso deve ajudar a manter o custo e o tamanho baixos. Espero que isto ajude !
Apenas mais uma coisa que quero acrescentar, em geral, a resolução total dos dados é necessária apenas para reiniciar arquivos, ou seja, arquivos para reiniciar sua simulação. Você não precisa de muitos deles para uma determinada simulação (digamos 100, para que, se algo acontecer entre 2 reinicializações, você perca no máximo 1% do seu cálculo), enquanto você provavelmente deseja aumentar a frequência de saída do seu computador. filmes. E você pode fazer isso em apenas 1/64 da resolução, por exemplo (1 a cada 4 pontos em cada direção).
fonte
Eu acho que os mestres atuais dessa arte são os grandes experimentos de física de partículas (eu estou mais familiarizado com CDF e D0 porque sou velho e trabalho na Universidade de Chicago). Eles possuem acionadores de hardware que descartam petabytes (ou mais) por ano. No entanto, esse é o assunto da quantização / discretização, ou "jogando fora apenas o que você não precisa". Não tenho certeza de que você possa dar uma resposta sensata em geral. Seria melhor restringir o problema para algo como "Eu tenho uma simulação PDE discretizada da seguinte maneira e gostaria de reduzir eficientemente a amostra".
fonte
Peter LePage é bastante famoso nos círculos de redes QCD por sugerir um método pelo qual redes de redes grandes inviáveis podem ser reduzidas encontrando e aplicando boas soluções analíticas de curto alcance.
Isso equivale a notar que um conjunto de splines bem escolhidos pode permitir uma integração precisa com menos nós que o método trapezoidal (exceto que, no seu caso, você pode tirar proveito dele em quatro dimensões ao mesmo tempo).
O resultado é que você troca o tamanho bruto do conjunto de dados por mais computação por nó - etapa, mas sai à frente no final devido à alta dimensionalidade do seu problema.
Não sou um assunto que conheço bem o suficiente para dar dicas decentes, mas funcionou em alguns campos no passado.
fonte
A questão é um pouco ampla, por isso fornecerei uma resposta correspondentemente vaga que sugere possíveis técnicas nesses casos.
1) Processamento on-the-fly, no qual você já está trabalhando. Uma maneira de executar o processamento on-the-fly e, ainda assim, dissociá-lo da etapa de geração de dados é gerar um arquivo de saída cíclico que sempre contém as últimas N etapas e fazer com que a análise seja executada em um processo separado. Obviamente, você deve sincronizar os dois para evitar uma condição de corrida.
2) Escolhendo os dados armazenados com mais cuidado. Infelizmente, isso é altamente específico da situação.
3) Compacte seus dados antes de armazená-los ou use uma biblioteca de armazenamento com opções de compactação integradas, como HDF5.
4) Armazene pontos de verificação regulares em vez da saída total. Se você armazenar um ponto de verificação completo a cada N etapas, ou seja, dados suficientes para reiniciar a simulação a partir daí, poderá reconstruir os dados ausentes de maneira altamente paralela, se e quando necessário. Observe que, no caso dos métodos de Monte-Carlo, o ponto de verificação deve incluir o estado dos geradores de números aleatórios. Você pode realmente considerar isso uma técnica de compactação altamente específica do aplicativo.
fonte