From 0c4bed931070a9ece9f0a97066ffdacb1a90400c Mon Sep 17 00:00:00 2001 From: Jiacheng Huang Date: Fri, 10 Jul 2026 11:00:46 +0800 Subject: [PATCH] fix: support legacy CUDA graph instantiate --- src/native/cuda/iluvatar/runtime_.h | 22 ++++++++++++++++++++-- src/native/cuda/nvidia/runtime_.h | 22 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/native/cuda/iluvatar/runtime_.h b/src/native/cuda/iluvatar/runtime_.h index 5c7facc..150621c 100644 --- a/src/native/cuda/iluvatar/runtime_.h +++ b/src/native/cuda/iluvatar/runtime_.h @@ -146,8 +146,26 @@ struct Runtime return cudaGraphDestroy(std::forward(args)...); }; - static constexpr auto GraphInstantiate = [](auto&&... args) { - return cudaGraphInstantiate(std::forward(args)...); + private: + template + static auto GraphInstantiateImpl(GraphExecPtr graph_exec, GraphType graph, + int) + -> decltype(cudaGraphInstantiate(graph_exec, graph)) { + return cudaGraphInstantiate(graph_exec, graph); + } + + template + static auto GraphInstantiateImpl(GraphExecPtr graph_exec, GraphType graph, + long) + -> decltype(cudaGraphInstantiate(graph_exec, graph, nullptr, nullptr, + 0)) { + return cudaGraphInstantiate(graph_exec, graph, nullptr, nullptr, 0); + } + + public: + static constexpr auto GraphInstantiate = [](GraphExec* graph_exec, + Graph graph) { + return GraphInstantiateImpl(graph_exec, graph, 0); }; static constexpr auto GraphExecDestroy = [](auto&&... args) { diff --git a/src/native/cuda/nvidia/runtime_.h b/src/native/cuda/nvidia/runtime_.h index 2fb53cd..cf1d72f 100644 --- a/src/native/cuda/nvidia/runtime_.h +++ b/src/native/cuda/nvidia/runtime_.h @@ -146,8 +146,26 @@ struct Runtime return cudaGraphDestroy(std::forward(args)...); }; - static constexpr auto GraphInstantiate = [](auto&&... args) { - return cudaGraphInstantiate(std::forward(args)...); + private: + template + static auto GraphInstantiateImpl(GraphExecPtr graph_exec, GraphType graph, + int) + -> decltype(cudaGraphInstantiate(graph_exec, graph)) { + return cudaGraphInstantiate(graph_exec, graph); + } + + template + static auto GraphInstantiateImpl(GraphExecPtr graph_exec, GraphType graph, + long) + -> decltype(cudaGraphInstantiate(graph_exec, graph, nullptr, nullptr, + 0)) { + return cudaGraphInstantiate(graph_exec, graph, nullptr, nullptr, 0); + } + + public: + static constexpr auto GraphInstantiate = [](GraphExec* graph_exec, + Graph graph) { + return GraphInstantiateImpl(graph_exec, graph, 0); }; static constexpr auto GraphExecDestroy = [](auto&&... args) {