Meu grupo de pesquisa se concentra na dinâmica molecular, que obviamente pode gerar gigabytes de dados como parte de uma única trajetória que deve ser analisada.
Vários dos problemas com os quais estamos preocupados envolvem correlações no conjunto de dados, o que significa que precisamos acompanhar grandes quantidades de dados na memória e analisá-las, em vez de usar uma abordagem mais seqüencial.
O que eu gostaria de saber é quais são as estratégias mais eficientes para lidar com E / S de grandes conjuntos de dados em scripts. Normalmente, usamos scripts baseados em Python porque tornam a codificação do E / S do arquivo muito menos dolorosa do que o C ou o Fortran, mas quando temos dezenas ou centenas de milhões de linhas que precisam ser processadas, não está tão claro qual é a melhor abordagem. . Devemos considerar fazer a entrada do arquivo como parte do código em C ou outra estratégia é mais útil? (Simplesmente pré-carregar toda a matriz na memória será melhor do que uma série de leituras seqüenciais de "chunks" (ordem de megabytes)?
Algumas notas adicionais:
Estamos procurando principalmente ferramentas de script para pós-processamento, em vez de ferramentas "on-line" - daí o uso do Python.
Como mencionado acima, estamos fazendo simulações de MD. Um tópico de interesse são os cálculos de difusão, para os quais precisamos obter o coeficiente de difusão de Einstein: Isso significa que realmente precisam carregar todos os dados na memória antes de começar o cálculo, todos os blocos de dados (registros de horários individuais) irão interagir entre si.
fonte
mmap
no seu código principal. Muitos sistemas operacionais modernos oferecem desempenho semelhante entre os regulares,read
com menos complicações. (Além disso, sim, o mmap no Python fornece uma interface portátil para os mapas de memória do Windows e UNIX).Talvez você possa usar o Cython nas seções de E / S do arquivo e converter esta parte em código C?
fonte