Menu

Liberación de memoria en PowerDEVS

2014-07-24
2014-07-24
  • Federico Bergero

    Buenas !
    Acá con Mati estamos con unos modelos que consumen mucha memoria, y que además necesitamos correr usando el recurso de Run N Simulations.
    El problema es que entre la simu n y n+1 el proceso es el mismo así que la simu n+1 paga el costo en memoria de todas las anteriores.
    Estamos apretados de tiempo y no podemos ponernos a modificar todos los modelos para que ahorren memoria, es una tarea para más adelante.
    Necesitamos saber si se te ocurre una manera rápida y elegante de poder liberar memoria entre una corrida y lasiguiente, es decir, hacer algo en el loop de control padre.
    Abrazos !

     
  • Federico Bergero

    Buenas. En ppio la memoria se libera entre simulación y simulación. De hecho se libera el modelo viejo y se crea uno completamente nuevo ya que no tenemos una forma de re-inicializar el modelo (entonces creamos uno nuevo y ya).
    Sí tendrían uds que liberar todo lo alocado en init luego en el exit (lo de STDevs y eso). Los bloques normales no usan memoria dinámica. Sí lo hacen los vectoriales y seguramente NO lo liberan.

    Están usando bloques vectoriales?

    Saludos
    Fede

     
  • Matias Bonaventura

    Me parece que no nos explicamos bien antes. El problema no esta tanto que nuestros modelos usan mucha memoria, sino mas bien que la usan mal (en algunos lugares se hace "new" y nunca se hace "delete"). O sea que la única forma que se libere la memoria es que el proceso del simulador termine de correr (el ejecutable ./model).
    Obviamente la solución es programarlo bien y manejar la memoria como corresponde (estaba viendo de tal vez usar los shared_ptr de c++11 para que sea mas facil). Pero como estamos apretados ahora de tiempo, eso va a quedar para dentro de unas semanitas.

    Para correr una sola simulación esta bien, porque si bien pierde memoria no es mucha y la compu lo tolera. El problema es al correr N simulaciones, porque por lo que veo ahora las N simulaciones se corren dentro del mismo proceso (./model). Yo tenia la idea de que como eran simulaciones independientes, PDME corría la simulación N, esperaba que termine el proceso (liberando la memoria mal utilizada de esa simulación) y después corra otra vez el ejecutable ./model.

    Sera factible (y relativamente fácil) hacer que el loop que corre las N simulaciones este en PDME en vez de dentro del mismo simulador?
    (ahora que lo pienso mientras escribo, también puedo hacer un script por fuera de PDME que ejecute N veces "./model -i", no?)

    Abrazo!

    PD: no, todavia no empezamos con los bloques vectoriales.

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.