Use weak_ptr in node requirements list #771
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously,
dag_node
has maintainedshared_ptr
objects to its requirements in the dependency graph. For deep dependency graphs, this can prevent nodes from being deleted even if the underlying operation has already completed since they might still be referenced.So far, this has not been a huge issue. However, with the introduction of event pools in #757, this becomes important: If the DAG node cannot be deleted, its event stays alive and cannot be returned to the pool. In the worst case, this can prevent us from benefiting from the event pool at all, having to create individual events for each operation again.
To fix this, this PR changes the requirements list to
weak_ptr
so that DAG nodes can be deleted as soon as their operation has finished.TODO:
Seems to work on GPU, but still crashes on CPU. Presumably because CPU backend has its own worker thread to execute kernels, and this additional asynchronous behavior probably changes the lifetime guarantees of DAG nodes.