@@ -159,6 +159,16 @@ cdef class GraphDef:
159159 """
160160 return self._entry.launch(config, kernel, *args)
161161
162+ def empty(self) -> "EmptyNode":
163+ """ Add an entry- point empty node (no dependencies).
164+
165+ Returns
166+ -------
167+ EmptyNode
168+ A new EmptyNode with no dependencies.
169+ """
170+ return self._entry.join()
171+
162172 def join(self, *nodes) -> "EmptyNode":
163173 """ Create an empty node that depends on all given nodes.
164174
@@ -322,18 +332,20 @@ cdef class GraphDef:
322332 set of GraphNode
323333 All nodes in the graph.
324334 """
325- cdef size_t num_nodes = 0
335+ cdef vector[cydriver.CUgraphNode] nodes_vec
336+ nodes_vec.resize(128)
337+ cdef size_t num_nodes = 128
326338
327339 with nogil:
328- HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), NULL , &num_nodes))
340+ HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data() , &num_nodes))
329341
330342 if num_nodes == 0:
331343 return set()
332344
333- cdef vector[cydriver.CUgraphNode] nodes_vec
334- nodes_vec.resize(num_nodes)
335- with nogil:
336- HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes))
345+ if num_nodes > 128:
346+ nodes_vec.resize(num_nodes)
347+ with nogil:
348+ HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes))
337349
338350 return set(GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes))
339351
@@ -346,21 +358,12 @@ cdef class GraphDef:
346358 Each element is a (from_node, to_node) pair representing
347359 a dependency edge in the graph.
348360 """
349- cdef size_t num_edges = 0
350-
351- with nogil:
352- IF CUDA_CORE_BUILD_MAJOR >= 13:
353- HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, NULL, &num_edges))
354- ELSE:
355- HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, &num_edges))
356-
357- if num_edges == 0:
358- return set()
359-
360361 cdef vector[cydriver.CUgraphNode] from_nodes
361362 cdef vector[cydriver.CUgraphNode] to_nodes
362- from_nodes.resize(num_edges)
363- to_nodes.resize(num_edges)
363+ from_nodes.resize(128)
364+ to_nodes.resize(128)
365+ cdef size_t num_edges = 128
366+
364367 with nogil:
365368 IF CUDA_CORE_BUILD_MAJOR >= 13:
366369 HANDLE_RETURN(cydriver.cuGraphGetEdges(
@@ -369,6 +372,20 @@ cdef class GraphDef:
369372 HANDLE_RETURN(cydriver.cuGraphGetEdges(
370373 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), &num_edges))
371374
375+ if num_edges == 0:
376+ return set()
377+
378+ if num_edges > 128:
379+ from_nodes.resize(num_edges)
380+ to_nodes.resize(num_edges)
381+ with nogil:
382+ IF CUDA_CORE_BUILD_MAJOR >= 13:
383+ HANDLE_RETURN(cydriver.cuGraphGetEdges(
384+ as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), NULL, &num_edges))
385+ ELSE:
386+ HANDLE_RETURN(cydriver.cuGraphGetEdges(
387+ as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), &num_edges))
388+
372389 return set(
373390 (GraphNode._create(self._h_graph, from_nodes[i]),
374391 GraphNode._create(self._h_graph, to_nodes[i]))
0 commit comments