cuda.bindings._v2.driver.graph_exec_update_v2#

cuda.bindings._v2.driver.graph_exec_update_v2(intptr_t h_graph_exec, intptr_t h_graph)#

Check whether an executable graph can be updated with a graph and perform the update if possible.

Updates the node parameters in the instantiated graph specified by h_graph_exec with the node parameters in a topologically identical graph specified by h_graph. Limitations:.

  • Kernel nodes:.

  • The owning context of the function cannot change.

  • A node whose function originally did not use CUDA dynamic parallelism cannot be updated to a function which uses CDP.

  • A node whose function originally did not make device-side update calls cannot be updated to a function which makes device-side update calls.

  • A cooperative node cannot be updated to a non-cooperative node, and vice- versa.

  • If the graph was instantiated with CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, the priority attribute cannot change. Equality is checked on the originally requested priority values, before they are clamped to the device’s supported range.

  • If h_graph_exec was not instantiated for device launch, a node whose function originally did not use device-side cudaGraphLaunch() cannot be updated to a function which uses device-side cudaGraphLaunch() unless the node resides on the same context as nodes which contained such calls at instantiate-time. If no such calls were present at instantiation, these updates cannot be performed at all.

  • Neither h_graph nor h_graph_exec may contain device-updatable kernel nodes.

  • Memset and memcpy nodes:.

  • The CUDA device(s) to which the operand(s) was allocated/mapped cannot change.

  • The source/destination memory must be allocated from the same contexts as the original source/destination memory.

  • For 2d memsets, only address and assigned value may be updated.

  • For 1d memsets, updating dimensions is also allowed, but may fail if the resulting operation doesn’t map onto the work resources already allocated for the node.

  • Additional memcpy node restrictions:.

  • Changing either the source or destination memory type(i.e. CU_MEMORYTYPE_DEVICE, CU_MEMORYTYPE_ARRAY, etc.) is not supported.

  • External semaphore wait nodes and record nodes:.

  • Changing the number of semaphores is not supported.

  • Conditional nodes:.

  • Changing node parameters is not supported.

  • Changing parameters of nodes within the conditional body graph is subject to the rules above.

  • Conditional handle flags and default values are updated as part of the graph update.

Note: The API may add further restrictions in future releases. The return code should always be checked. cuGraphExecUpdate sets the result member of result_info to CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED under the following conditions:.

  • The count of nodes directly in h_graph_exec and h_graph differ, in which case result_info->errorNode is set to NULL.

  • h_graph has more exit nodes than h_graph, in which case result_info->errorNode is set to one of the exit nodes in h_graph.

  • A node in h_graph has a different number of dependencies than the node from h_graph_exec it is paired with, in which case result_info->errorNode is set to the node from h_graph.

  • A node in h_graph has a dependency that does not match with the corresponding dependency of the paired node from h_graph_exec. result_info->errorNode will be set to the node from h_graph. result_info->errorFromNode will be set to the mismatched dependency. The dependencies are paired based on edge order and a dependency does not match when the nodes are already paired based on other edges examined in the graph.

cuGraphExecUpdate sets the result member of result_info to:.

  • CU_GRAPH_EXEC_UPDATE_ERROR if passed an invalid value.

  • CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED if the graph topology changed.

  • CU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED if the type of a node changed, in which case hErrorNode_out is set to the node from h_graph.

  • CU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE if the function changed in an unsupported way(see note above), in which case hErrorNode_out is set to the node from h_graph.

  • CU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED if any parameters to a node changed in a way that is not supported, in which case hErrorNode_out is set to the node from h_graph.

  • CU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED if any attributes of a node changed in a way that is not supported, in which case hErrorNode_out is set to the node from h_graph.

  • CU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED if something about a node is unsupported, like the node’s type or configuration, in which case hErrorNode_out is set to the node from h_graph.

If the update fails for a reason not listed above, the result member of result_info will be set to CU_GRAPH_EXEC_UPDATE_ERROR. If the update succeeds, the result member will be set to CU_GRAPH_EXEC_UPDATE_SUCCESS. cuGraphExecUpdate returns CUDA_SUCCESS when the updated was performed successfully. It returns CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE if the graph update was not performed because it included changes which violated constraints specific to instantiated graph update.

Parameters:
  • h_graph_exec (intptr_t) – The instantiated graph to be updated.

  • h_graph (intptr_t) – The graph containing the updated parameters.

Returns:

the error info structure.

Return type:

CUgraphExecUpdateResultInfo_v1

See also

cuGraphExecUpdate_v2