Fix HRX HIP graph lifecycle query semantics#69
Open
AWoloszyn wants to merge 1 commit into
Open
Conversation
HRX treated several HIP graph lifecycle APIs as shallow stubs: hipGraphNodeGetType always reported an empty node, hipGraphDestroyNode was a no-op, dependency insertion trusted caller-owned node handles, and hipGraphGetNodes always returned the total graph size even when the caller supplied a smaller output buffer. Those APIs expose graph-template structure directly, so the runtime needs to preserve node membership, liveness, dependency identity, and query counts consistently while the graph is being edited. Track the owning graph on each template node while it is active, validate added dependency edges before mutating the graph, reject null/self/duplicate/cross-graph dependencies, and keep separately-added edges visible to duplicate detection. Implement node destruction by removing the node from graph/root node lists, dropping dependency references and extra edges that mention it, clearing its owning graph, and renumbering the remaining active nodes so query order stays dense. Also map HRX internal node kinds back to HIP graph node types and make hipGraphGetNodes follow native small-buffer behavior: copy only the requested number of nodes, report the copied count, and clear the unused tail when the caller asks for more entries than exist. This makes graph lifecycle/query behavior deterministic and prevents destroyed or foreign nodes from remaining observable through later graph queries.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
HRX treated several HIP graph lifecycle APIs as shallow stubs: hipGraphNodeGetType always reported an empty node, hipGraphDestroyNode was a no-op, dependency insertion trusted caller-owned node handles, and hipGraphGetNodes always returned the total graph size even when the caller supplied a smaller output buffer. Those APIs expose graph-template structure directly, so the runtime needs to preserve node membership, liveness, dependency identity, and query counts consistently while the graph is being edited.
Track the owning graph on each template node while it is active, validate added dependency edges before mutating the graph, reject null/self/duplicate/cross-graph dependencies, and keep separately-added edges visible to duplicate detection. Implement node destruction by removing the node from graph/root node lists, dropping dependency references and extra edges that mention it, clearing its owning graph, and renumbering the remaining active nodes so query order stays dense.
Also map HRX internal node kinds back to HIP graph node types and make hipGraphGetNodes follow native small-buffer behavior: copy only the requested number of nodes, report the copied count, and clear the unused tail when the caller asks for more entries than exist. This makes graph lifecycle/query behavior deterministic and prevents destroyed or foreign nodes from remaining observable through later graph queries.