En mi programa estoy simulando un sistema de N-cuerpo para una gran cantidad de iteraciones. Para cada iteración, produzco un conjunto de coordenadas 6N que necesito adjuntar a un archivo y luego utilizar para ejecutar la siguiente iteración. El código está escrito en C++ y actualmente utiliza el método ofstream
write()
para escribir los datos en formato binario en cada iteración.La manera más rápida de escribir datos mientras lo produce
No soy un experto en este campo, pero me gustaría mejorar esta parte del programa, ya que estoy en el proceso de optimizar todo el código. Siento que la latencia asociada con la escritura del resultado del cálculo en cada ciclo ralentiza significativamente el rendimiento del software.
Estoy confundido porque no tengo experiencia en programación paralela real y archivos de nivel bajo de E/S. Pensé en algunas técnicas abstractas que me imaginaba que podía poner en práctica, ya que soy de programación para los modernos (posiblemente varios núcleos) máquinas con Unix sistemas operativos:
- escribir los datos en el archivo en trozos de n iteraciones (no parece para ser mejores maneras de proceder ...)
- paralelización del código con OpenMP (en realidad la forma de implementar una memoria intermedia de manera que los hilos están sincronizados adecuadamente y no se superponen?)
- Usando
mmap
(el tamaño del archivo podría ser enorme, en el orden de los GB, ¿este enfoque es lo suficientemente robusto?)
Sin embargo, no sé cómo implementarlos mejor y combinarlos apropiadamente.
¿Cuál es tu pregunta? –
"Siento que la latencia asociada con la escritura del resultado del cálculo en cada ciclo ralentiza significativamente el rendimiento del software". ¿Lo sientes o perfilaste tu código? –
¿Ha perfilado el código para asegurarse de que sus sentimientos sobre la latencia sean correctos? – Grizzly