Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion cuda_core/cuda/core/graph/_graph_builder.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ class GraphCompleteOptions:
def _instantiate_graph(source, options: GraphCompleteOptions | None = None) -> Graph:
cdef GraphHandle h_graph
cdef GraphExecHandle h_exec
cdef cydriver.CUresult status

if isinstance(source, GraphBuilder):
GB_check_open(<GraphBuilder>source)
Expand Down Expand Up @@ -209,7 +210,11 @@ def _instantiate_graph(source, options: GraphCompleteOptions | None = None) -> G
# The exec is adopted only when result_out reports success, so the
# diagnostics below run before the handle is checked.
h_exec = create_graph_exec_handle(h_graph, &params)
status = get_last_error()
if params.result_out == driver.CUgraphInstantiateResult.CUDA_GRAPH_INSTANTIATE_ERROR:
# HANDLE_RETURN raises CUDAError with the CUresult name and message (e.g. CUDA_ERROR_INVALID_VALUE)
# when status is not CUDA_SUCCESS.
HANDLE_RETURN(status)
raise RuntimeError(
"Instantiation failed for an unexpected reason which is described in the return value of the function."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"Instantiation failed for an unexpected reason which is described in the return value of the function."
"CUDA graph instantiation failed, but cuGraphInstantiateWithParams "
"returned CUDA_SUCCESS; no driver error details are available."

It's an existing problem, but the error message is very unhelpful:

  • "Return value" means the CUresult from cuGraphInstantiateWithParams.
  • That value is not exposed to _instantiate_graph()s caller; it is local status.
  • The RuntimeError is reachable only when status == CUDA_SUCCESS, because otherwise HANDLE_RETURN(status) raises CUDAError.
  • "The function" is ambiguous among _instantiate_graph, create_graph_exec_handle, and cuGraphInstantiateWithParams.

It'd be great to replace it while we're at it.

)
Expand All @@ -230,7 +235,7 @@ def _instantiate_graph(source, options: GraphCompleteOptions | None = None) -> G
raise RuntimeError(f"Graph instantiation failed with unexpected error code: {params.result_out}")

if as_cu(h_exec) == NULL:
HANDLE_RETURN(get_last_error())
HANDLE_RETURN(status)
return Graph._init(h_exec)


Expand Down
Loading