Mon groupe de recherche se concentre sur la dynamique moléculaire, qui peut évidemment générer des gigaoctets de données dans le cadre d'une trajectoire unique qui doit ensuite être analysée.
Plusieurs des problèmes qui nous préoccupent impliquent des corrélations dans l'ensemble de données, ce qui signifie que nous devons garder une trace de grandes quantités de données en mémoire et les analyser, plutôt que d'utiliser une approche plus séquentielle.
Ce que j'aimerais savoir, ce sont les stratégies les plus efficaces pour gérer les E / S de grands ensembles de données dans des scripts. Nous utilisons normalement des scripts basés sur Python car cela rend le codage des E / S de fichiers beaucoup moins pénible que C ou Fortran, mais lorsque nous avons des dizaines ou des centaines de millions de lignes à traiter, la meilleure approche n'est pas si claire. . Devrions-nous envisager de faire la partie d'entrée de fichier du code en C, ou une autre stratégie est-elle plus utile? (Le simple préchargement de l'ensemble de la baie en mémoire sera-t-il meilleur qu'une série de lectures séquentielles de "morceaux" (ordre de mégaoctets)?
Quelques notes supplémentaires:
Nous recherchons principalement des outils de script pour le post-traitement, plutôt que des outils "en ligne" - d'où l'utilisation de Python.
Comme indiqué ci-dessus, nous faisons des simulations MD. Un sujet d'intérêt est le calcul de diffusion, pour lequel nous devons obtenir le coefficient de diffusion d'Einstein: Cela signifie que nous devons vraiment charger toutes les données en mémoire avant de commencer le calcul - tous les morceaux de données ( enregistrements de temps individuels) interagiront les uns avec les autres.
mmap
dans votre code principal. De nombreux systèmes d'exploitation modernes offrent des performances similaires entre les standardsread
avec moins de complications. (De plus, oui, mmap en Python fournit une interface portable avec les cartes mémoire Windows et UNIX).