libgeodecomp icon indicating copy to clipboard operation
libgeodecomp copied to clipboard

Implement dynamic load balancing in HpxSimulator by component migration

Open gentryx opened this issue 9 years ago • 0 comments

HPX can migrate components between localities. This migration is transparent to all objects in the code as components are accessed through IDs and the ID would not change after migration.

Right now an UpdateGroup is not a component and even if it was, we'd need a way to stop it before migration (running threads can't be migrated). Ensuring a UpdateGroup is stopped isn't hard though: after setting up, the HpxSimulator only calls UpdateGroup::update(int nanoSteps) on any UpdateGroup. This should be an HPX action.

Proposed implementation:

  • make UpdateGroup a component and update() an action.
  • precondition: all objects inside an UpdateGroup need to be serializable. This is true for grids, cells, steppers, the PartitionManager, but IO objects (Writer, Steerer, Initializer) are not necessarily serializable. This was implemented once and we could resurrect that code.
  • let the HpxSimulator invoke the update() action, but check periodically for load imbalances and ask HPX to move UpdateGroups accordingly.

gentryx avatar Jan 28 '16 21:01 gentryx