Currently we can't do this because dependencies are automatically released based on an epoch terminating, but this is an action completing which would release it potentially too early. We should broaden how dependencies work so they can be manually created/released for cases like this.
Should we add a dependency between epoch and encapsulated_epoch? The runtime could detect circular dependencies that way and I think(?) it lowers the number of termination detection messages.
If we changed the order of handling an epoch finishing so that when epoch x finishes we inform dependent epochs only after enqueuing x's actions, we could also remove the explicit produce/consumes and just use epoch dependencies and runnables.
Currently we can't do this because dependencies are automatically released based on an epoch terminating, but this is an action completing which would release it potentially too early. We should broaden how dependencies work so they can be manually created/released for cases like this.
If we changed the order of handling an epoch finishing so that when epoch x finishes we inform dependent epochs only after enqueuing x's actions, we could also remove the explicit produce/consumes and just use epoch dependencies and runnables.
_Originally posted by @Matthew-Whitlock in https://github.com/DARMA-tasking/vt/pull/2196#discussion_r1344291577_