Mi grupo de investigación se centra en la dinámica molecular, que obviamente puede generar gigabytes de datos como parte de una sola trayectoria que luego debe analizarse.
Varios de los problemas que nos preocupan implican correlaciones en el conjunto de datos, lo que significa que necesitamos hacer un seguimiento de grandes cantidades de datos en la memoria y analizarlos, en lugar de utilizar un enfoque más secuencial.
Lo que me gustaría saber es cuáles son las estrategias más eficientes para manejar E / S de grandes conjuntos de datos en scripts. Normalmente usamos scripts basados en Python porque hace que la codificación de la E / S del archivo sea mucho menos dolorosa que C o Fortran, pero cuando tenemos decenas o cientos de millones de líneas que deben procesarse, no está tan claro cuál es el mejor enfoque. . ¿Deberíamos considerar hacer la entrada del archivo como parte del código en C, o es otra estrategia más útil? (¿Simplemente precargar toda la matriz en la memoria será mejor que una serie de lecturas secuenciales de "fragmentos" (orden de megabytes)?
Algunas notas adicionales:
Principalmente buscamos herramientas de secuencias de comandos para el procesamiento posterior, en lugar de herramientas "en línea", de ahí el uso de Python.
Como se indicó anteriormente, estamos haciendo simulaciones MD. Un tema de interés son los cálculos de difusión, para los cuales necesitamos obtener el coeficiente de difusión de Einstein: Esto significa que realmente necesitamos cargar todos los datos en la memoria antes de comenzar el cálculo, todos los fragmentos de datos ( registros de tiempos individuales) interactuarán entre sí.
fuente
mmap
en su código principal. Muchos sistemas operativos modernos ofrecen un rendimiento similar entre los regularesread
con menos complicaciones. (Además, sí, mmap en Python proporciona una interfaz portátil para los mapas de memoria de Windows y UNIX).¿Quizás pueda usar Cython en las secciones de E / S de su archivo y convertir esta parte en código C?
fuente