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) {