Coverage for cuda/core/graph/_graph_node.pyx: 83.98%

462 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5"""GraphNode base class — factory, properties, and builder methods.""" 

6  

7from __future__ import annotations 

8  

9from collections.abc import Iterable 

10from typing import TYPE_CHECKING 

11  

12from libc.stddef cimport size_t 

13from libc.stdint cimport uintptr_t 

14from libc.string cimport memset as c_memset 

15  

16from libcpp.vector cimport vector 

17  

18from cuda.bindings cimport cydriver 

19  

20from cuda.core._event cimport Event, Event_check_open 

21from cuda.core._kernel_arg_handler cimport ParamHolder 

22from cuda.core._launch_config cimport LaunchConfig 

23from cuda.core._memory._buffer cimport Buffer, Buffer_check_open 

24from cuda.core._memory._location cimport cumemlocation_from_id 

25from cuda.core._module cimport Kernel 

26from cuda.core.graph._graph_definition cimport ( 

27 GraphCondition, 

28 GraphDefinition, 

29 GD_check_valid, 

30) 

31from cuda.core.graph._subclasses cimport ( 

32 AllocNode, 

33 ChildGraphNode, 

34 ConditionalNode, 

35 EmptyNode, 

36 EventRecordNode, 

37 EventWaitNode, 

38 FreeNode, 

39 HostCallbackNode, 

40 IfElseNode, 

41 IfNode, 

42 KernelNode, 

43 MemcpyNode, 

44 MemsetNode, 

45 SwitchNode, 

46 WhileNode, 

47) 

48from cuda.core._rt cimport attach_rollback_failure 

49from cuda.core._rt cimport ( 

50 GraphHandle, 

51 GraphNodeHandle, 

52 OpaqueHandle, 

53 PreparedAttachment, 

54 as_cu, 

55 as_intptr, 

56 as_py, 

57 create_child_graph_handle, 

58 create_graph_node_handle, 

59 graph_clone_attachments, 

60 graph_commit_attachment, 

61 graph_node_get_graph, 

62 graph_prepare_attachment, 

63 invalidate_child_graph_state, 

64 invalidate_graph_node, 

65 make_opaque_py, 

66) 

67from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value 

68  

69from cuda.core.graph._host_callback cimport ( 

70 _resolve_host_callback, 

71) 

72  

73import ctypes as ct 

74import weakref 

75  

76from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

77from cuda.core._utils.validators import check_str_enum 

78from cuda.core._utils.cuda_utils import driver 

79from cuda.core.typing import GraphMemoryType 

80  

81if TYPE_CHECKING: 

82 from cuda.core._device import Device 

83  

84__all__ = ['GraphNode'] 

85  

86# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object) 

87_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary() 

88  

89  

90cdef inline GraphNode _registered(GraphNode n): 

91 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 26g{btd=g|b?g7gmfnfRcac+e,e-eVe4b.ebcWe/eWc+f,f-f.f/f:fccof0c1c2c3cIbkd;f=fvewexeyezeb c d e G H I J :e;e=ewbxbybxfyfzfgdAeXe~c@gJbdcecfc4c?f@fudvd4 g # $ % ' wdxdJfYeKfadKbgcLfhcMficNf5c[f]fydzdOf5 Ffh Pf( Qf) Rf* Sf+ AdBdZe5b?ejc0e@e1e6b[ekc2e]e3ebdLblcmcnc6c^f_fCdDd6 i , - . / EdFdTf4eUfcdMbVfocWfpcXfqcYf7c`f{fGdHdZf7 Gfj 0f: 1f; 2f= 3f? IdJd4f5e5fddNb6frc7fsc8ftc9f8c|f}fKdLd!f8 #fk $f@ %f[ 'f] (f^ MdNd6eedObucvcwc9c~fagOdPd9 l _ ` { | QdRd7e7b^exc8e_e9e8b`eyc!e{etf#e9b|ezc$e}eCfAb8g9gfdBe~eScbgSdTdUdVdC D E F vfpfqfcgdg! qbzb%e} QcL M N O Q R S T egAcfgldmdBcggnb1 TcUcV f z W X WdXdCeubDeEe'b(b)b*bDb}b~b:c;c}crb2 rftbhgVcsbPbigmbU P K ~ 3gAfwf'ey 4gEbabndBf3 5ghdQb*fCcodFbjgkgYdZd0d+b,b-b=c?cidpdqdlgmg1d2d3d!b#b$b.c/cRbobpbFeGe.b/b:bY Z 0 BbCbngXcYcZcHeIe@cJe;b[c4dDcrdGbogpg5d6d7d=b?b@b]c^cvbqgEcsdHbrgsg8d9d!d[b]b^b_c`c(eSb#d$d_b`b{c|cDfEf!g%bA B %dtgug)e*ejdvgx afTbFcwgxg!cyg'd(dKem bb)d*dlfbfUbGczgAg#cBg+d,dLen cb-d.dcfVbHcCgDg$cEg/d:dMeo db;d=da dfWbIcFgGg%cHg?d@dNep eb[d]defXbJcIgJg'cKg^d_dOeq fb`d{dffYbKcLgMg(cNg|d}dPer gb~daegfZbLcOgPg)cQgbeceQes hbdeeehf0bMcRgSg*cTgfegeRet ibheieif1bNcUgVg+cWgjekeSeu jblemejf2bOcXgYg,cZgneoeTev kbpeqekf3bPc0g1g-c2greseUew lbteue

92  

93  

94cdef class GraphNode: 

95 """A node in a graph definition. 

96  

97 Nodes are created by calling builder methods on GraphDefinition (for 

98 entry-point nodes with no dependencies) or on other Nodes (for 

99 nodes that depend on a predecessor). 

100 """ 

101  

102 @staticmethod 

103 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node): 

104 """Factory: dispatch to the right subclass based on node type.""" 

105 return GN_create(h_graph, node) 2{b=g|b?gacghhhihjhccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z ubrb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 Ccobpb@cDcEc{c|cDfEf!g

106  

107 def __repr__(self) -> str: 

108 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2)h

109 if node == NULL: 2)h

110 if self._is_entry and self.is_valid: 2)h

111 return "<GraphNode entry>" 2)h

112 return "<GraphNode destroyed>" 

113 return f"<GraphNode handle=0x{<uintptr_t>node:x}>" 

114  

115 def __eq__(self, other: object) -> bool: 

116 if not isinstance(other, GraphNode): 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

117 return NotImplemented 2whxhyhzhAhBhChDhEhFhGhHhIhJhKh*h

118 cdef GraphNode o = <GraphNode>other 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

119 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

120 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

121 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

122 and as_intptr(self_graph) == as_intptr(other_graph)) 2acJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fwhxhyhzhAhBhChDhEhFhGhHhIhJhKh*h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{hLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

123  

124 def __hash__(self) -> int: 

125 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2{b=g|b?gacghhhwiihjhxiccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:gqhrhshthuhvh^g_gsi`g{gti|g}gui~gahviCfAbC D E F vf! qb} L M N O Q R S T rb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 CcRbobpbFeGe.b/b:bY Z 0 BbCb@cDcEc{c|cDfEf!gyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_iLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

126 return hash((as_intptr(self._h_node), as_intptr(g))) 2{b=g|b?gacghhhwiihjhxiccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:gqhrhshthuhvh^g_gsi`g{gti|g}gui~gahviCfAbC D E F vf! qb} L M N O Q R S T rb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 CcRbobpbFeGe.b/b:bY Z 0 BbCb@cDcEc{c|cDfEf!gyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_iLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h

127  

128 @property 

129 def type(self) -> driver.CUgraphNodeType | None: 

130 """Return the CUDA graph node type. 

131  

132 Returns 

133 ------- 

134 CUgraphNodeType or None 

135 The node type enum value, or None for the entry node. 

136 """ 

137 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2}h~haibicidieifigihiiijikiliminioipiqiriab

138 if node == NULL: 2}h~haibicidieifigihiiijikiliminioipiqiriab

139 return None 2}hab

140 cdef cydriver.CUgraphNodeType node_type 

141 with nogil: 2~haibicidieifigihiiijikiliminioipiqiri

142 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2~haibicidieifigihiiijikiliminioipiqiri

143 return driver.CUgraphNodeType(<int>node_type) 2~haibicidieifigihiiijikiliminioipiqiri

144  

145 @property 

146 def graph(self) -> GraphDefinition: 

147 """Return the GraphDefinition this node belongs to.""" 

148 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2`i{i|i}i~iaj

149  

150 @property 

151 def handle(self) -> driver.CUgraphNode: 

152 """Return the underlying driver CUgraphNode handle. 

153  

154 Returns None for the entry node. 

155 """ 

156 return as_py(self._h_node) 2ab*f4d#dDfEf!g%bx whxhyhzhAhBhChDhEhFhGhHhIhJhKh

157  

158 @property 

159 def is_valid(self) -> bool: 

160 """Whether this node and its graph definition remain valid. 

161  

162 Returns ``False`` after :meth:`destroy` has been called. 

163 """ 

164 return ( 2} L M N O PbEbab3 RbobpbFeGe.b/b:bY Z 0 BbCblf)h

165 as_intptr(graph_node_get_graph(self._h_node)) != 0 2} L M N O PbEbab3 RbobpbFeGe.b/b:bY Z 0 BbCblf)h

166 and (self._is_entry or as_intptr(self._h_node) != 0) 2} PbEbab3 RbobpbFeGe.b/b:bY Z 0 BbCblf)h

167 ) 

168  

169 def destroy(self) -> None: 

170 """Destroy this node and remove all its edges from the parent graph. 

171  

172 After this call, :attr:`is_valid` returns ``False`` and the node 

173 cannot be re-added to any graph. Safe to call on an 

174 already-destroyed node (no-op). 

175 """ 

176 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

177 cdef PreparedAttachment prepared 

178 if self._is_entry or node == NULL: 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

179 return 2ab

180  

181 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

182 # Allocate the cleanup transaction before asking CUDA to destroy the 

183 # node. A failed CUDA call leaves metadata and wrappers unchanged. 

184 HANDLE_RETURN(graph_prepare_attachment( 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

185 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared)) 

186 with nogil: 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

187 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K Ebabnd3 RbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

188  

189 # Publish attachment removal before invalidating graph and node aliases. 

190 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K EbabndRbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

191 invalidate_child_graph_state(h_graph, node) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K EbabndRbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

192 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K EbabndRbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

193 invalidate_graph_node(self._h_node) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K EbabndRbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

194 HANDLE_RETURN(cleanup_status) 2tfvfpfqfqbzb%e} QcL M N O Q R S T rbrftbsbU P K EbabndRbobpbFeGe.b/b:bY Z 0 BbCbXcYcZcvbx lf

195  

196 @property 

197 def pred(self) -> AdjacencySetProxy: 

198 """A mutable set-like view of this node's predecessors.""" 

199 return AdjacencySetProxy(self, False) 2RcWc}hofwbxbybxfgd4f5fbj6f7f8f9fcjdjejfj!f#f$f%f'f(fgjhj^g_gsi`g{gtiAbnb1 TcUcV f z ubwf'ey Ebab

200  

201 @pred.setter 

202 def pred(self, value: Iterable[GraphNode]) -> None: 

203 p = AdjacencySetProxy(self, False) 2K 'e

204 p.clear() 2K 'e

205 p.update(value) 2K 'e

206  

207 @property 

208 def succ(self) -> AdjacencySetProxy: 

209 """A mutable set-like view of this node's successors.""" 

210 return AdjacencySetProxy(self, True) 2}hofyfzf4f5f6f7f8f9f!f#f$f%f'f(f|g}gui~gahviP ~ 3gAfwf'ey 4gEbabndBf5g

211  

212 @succ.setter 

213 def succ(self, value: Iterable[GraphNode]) -> None: 

214 s = AdjacencySetProxy(self, True) 2of'e

215 s.clear() 2of'e

216 s.update(value) 2of'e

217  

218 def launch(self, LaunchConfig config not None: LaunchConfig, Kernel kernel not None: Kernel, *args) -> KernelNode: 

219 """Add a kernel launch node depending on this node. 

220  

221 Clustered and cooperative launch configurations are not currently 

222 supported for graph kernel nodes. 

223  

224 .. warning:: 

225  

226 Use caution when a retained kernel argument directly or indirectly 

227 owns a graph. Any reference cycle involving the argument and a 

228 graph that retains it cannot be broken by Python's cyclic garbage 

229 collector. Use a weak reference to break such cycles. 

230  

231 Parameters 

232 ---------- 

233 config : LaunchConfig 

234 Launch configuration (grid, block, shared memory, etc.) 

235 kernel : Kernel 

236 The kernel to launch. 

237 *args 

238 Kernel arguments. 

239  

240 Returns 

241 ------- 

242 KernelNode 

243 A new KernelNode representing the kernel launch. 

244 """ 

245 GN_check_valid(self) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

246 return GN_launch(self, config, kernel, ParamHolder(args)) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

247  

248 def join(self, *nodes: GraphNode) -> EmptyNode: 

249 """Create an empty node that depends on this node and all given nodes. 

250  

251 This is used to synchronize multiple branches of execution. 

252  

253 Parameters 

254 ---------- 

255 *nodes : GraphNode 

256 Additional nodes to depend on. 

257  

258 Returns 

259 ------- 

260 EmptyNode 

261 A new EmptyNode that depends on all input nodes. 

262 """ 

263 return GN_join(self, nodes) 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

264  

265 def allocate(self, size_t size, *, device: Device | int | None = None, 

266 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

267 peer_access: list[Device | int] | None = None) -> AllocNode: 

268 """Add a memory allocation node depending on this node. 

269  

270 Parameters 

271 ---------- 

272 size : int 

273 Number of bytes to allocate. 

274 device : int or Device, optional 

275 The device on which to allocate memory. If None (default), 

276 uses the current CUDA context's device. 

277 memory_type : GraphMemoryType or str, optional 

278 Type of memory to allocate. One of: 

279  

280 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory, 

281 optimal for GPU kernels. 

282 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from 

283 both host and device. Useful for graphs containing host 

284 callback nodes. Note: may not be supported on all 

285 systems/drivers. 

286 - ``GraphMemoryType.MANAGED``: Managed/unified memory that 

287 automatically migrates between host and device. Useful for 

288 mixed host/device access patterns. 

289  

290 peer_access : list of int or Device, optional 

291 List of devices that should have read-write access to the 

292 allocated memory. If None (default), only the allocating 

293 device has access. 

294  

295 Returns 

296 ------- 

297 AllocNode 

298 A new AllocNode representing the allocation. Access the allocated 

299 device pointer via the dptr property. 

300  

301 Notes 

302 ----- 

303 IPC (inter-process communication) is not supported for graph 

304 memory allocation nodes per CUDA documentation. 

305 """ 

306 return GN_alloc(self, size, device, memory_type, peer_access) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

307  

308 def deallocate(self, dptr: int) -> FreeNode: 

309 """Add a memory free node depending on this node. 

310  

311 Parameters 

312 ---------- 

313 dptr : int 

314 Device pointer to free (typically from AllocNode.dptr). 

315  

316 Returns 

317 ------- 

318 FreeNode 

319 A new FreeNode representing the free operation. 

320 """ 

321 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

322  

323 def memset( 

324 self, 

325 dst: Buffer | int, 

326 value, 

327 size_t width, 

328 size_t height=1, 

329 size_t pitch=0, 

330 *, 

331 dst_owner=None, 

332 ) -> MemsetNode: 

333 """Add a memset node depending on this node. 

334  

335 .. warning:: 

336  

337 Use caution when a retained operand owner directly or indirectly 

338 owns a graph. Any reference cycle involving the owner and a graph 

339 that retains it cannot be broken by Python's cyclic garbage 

340 collector. Use a weak reference to break such cycles. 

341  

342 Parameters 

343 ---------- 

344 dst : Buffer or int 

345 Destination. When ``dst`` is a :class:`Buffer`, the underlying 

346 allocation is retained for the graph's lifetime. A raw pointer 

347 (``int``) is used as-is; the caller must keep the underlying memory 

348 alive, or supply ``dst_owner`` to have the graph retain it. 

349 value : int or buffer-protocol object 

350 Fill value. int for 1-byte fill (range [0, 256)), 

351 or buffer-protocol object of 1, 2, or 4 bytes. 

352 width : int 

353 Width of the row in elements. 

354 height : int, optional 

355 Number of rows (default 1). 

356 pitch : int, optional 

357 Pitch of destination in bytes (default 0, unused if height is 1). 

358 dst_owner : object, optional 

359 Object retained for the graph's lifetime when ``dst`` is a raw 

360 pointer. A :class:`Buffer` owner retains its underlying allocation, 

361 not the wrapper. Must not be passed when ``dst`` is a :class:`Buffer`. 

362  

363 Returns 

364 ------- 

365 MemsetNode 

366 A new MemsetNode representing the memset operation. 

367  

368 Raises 

369 ------ 

370 ValueError 

371 If ``dst_owner`` is given together with a :class:`Buffer` ``dst``. 

372 """ 

373 GN_check_valid(self) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | fd:c;c(h+h}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

374 cdef cydriver.CUdeviceptr c_dst 

375 cdef unsigned int val 

376 cdef unsigned int elem_size 

377 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | fd:c;c(h+h}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

378 dst, dst_owner, "dst", &c_dst) 

379 val, elem_size = _parse_fill_value(value) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | fd:c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

380 return GN_memset( 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

381 self, c_dst, dst_attachment_owner, 

382 val, elem_size, width, height, pitch) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

383  

384 def memcpy( 

385 self, 

386 dst: Buffer | int, 

387 src: Buffer | int, 

388 size_t size, 

389 *, 

390 dst_owner=None, 

391 src_owner=None, 

392 ) -> MemcpyNode: 

393 """Add a memcpy node depending on this node. 

394  

395 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are 

396 auto-detected via the driver, so both device and pinned host 

397 pointers are supported. 

398  

399 .. warning:: 

400  

401 Use caution when a retained operand owner directly or indirectly 

402 owns a graph. Any reference cycle involving the owner and a graph 

403 that retains it cannot be broken by Python's cyclic garbage 

404 collector. Use a weak reference to break such cycles. 

405  

406 Parameters 

407 ---------- 

408 dst : Buffer or int 

409 Destination (device or pinned host). When a :class:`Buffer` is given, 

410 the underlying allocation is retained for the graph's lifetime. A raw 

411 pointer (``int``) is used as-is; the caller must keep the underlying 

412 memory alive, or supply ``dst_owner`` to have the graph retain it. 

413 src : Buffer or int 

414 Source (device or pinned host). Same retention rules as ``dst``; 

415 use ``src_owner`` for a raw pointer. 

416 size : int 

417 Number of bytes to copy. 

418 dst_owner : object, optional 

419 Object retained for the graph's lifetime when ``dst`` is a raw 

420 pointer. A :class:`Buffer` owner retains its underlying allocation. 

421 Must not be passed when ``dst`` is a :class:`Buffer`. 

422 src_owner : object, optional 

423 Object retained for the graph's lifetime when ``src`` is a raw 

424 pointer. A :class:`Buffer` owner retains its underlying allocation. 

425 Must not be passed when ``src`` is a :class:`Buffer`. 

426  

427 Returns 

428 ------- 

429 MemcpyNode 

430 A new MemcpyNode representing the copy operation. 

431  

432 Raises 

433 ------ 

434 ValueError 

435 If ``dst_owner`` or ``src_owner`` is given together with a 

436 :class:`Buffer` ``dst`` or ``src`` respectively. 

437 """ 

438 GN_check_valid(self) 2b c d e g h i j k l Sczbf z W X 'b|h;g(b)b*b]gDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

439 cdef cydriver.CUdeviceptr c_dst 

440 cdef cydriver.CUdeviceptr c_src 

441 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2b c d e g h i j k l Sczbf z W X 'b|h;g(b)b*b]gDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

442 dst, dst_owner, "dst", &c_dst) 

443 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2b c d e g h i j k l Sczbf z W X 'b;g(b)b*b]gDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

444 src, src_owner, "src", &c_src) 

445 return GN_memcpy( 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

446 self, c_dst, dst_attachment_owner, 

447 c_src, src_attachment_owner, size) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

448  

449 def embed(self, GraphDefinition child not None: GraphDefinition) -> ChildGraphNode: 

450 """Add a child graph node depending on this node. 

451  

452 Embeds a clone of the given graph definition as a sub-graph node. 

453 The child graph must not contain allocation, free, or conditional 

454 nodes. 

455  

456 Parameters 

457 ---------- 

458 child : GraphDefinition 

459 The graph definition to embed (will be cloned). 

460  

461 Returns 

462 ------- 

463 ChildGraphNode 

464 A new ChildGraphNode representing the embedded sub-graph. 

465 """ 

466 return GN_embed(self, child) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

467  

468 def record(self, Event event not None: Event) -> EventRecordNode: 

469 """Add an event record node depending on this node. 

470  

471 Parameters 

472 ---------- 

473 event : Event 

474 The event to record. 

475  

476 Returns 

477 ------- 

478 EventRecordNode 

479 A new EventRecordNode representing the event record operation. 

480 """ 

481 return GN_record_event(self, event) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

482  

483 def wait(self, Event event not None: Event) -> EventWaitNode: 

484 """Add an event wait node depending on this node. 

485  

486 Parameters 

487 ---------- 

488 event : Event 

489 The event to wait for. 

490  

491 Returns 

492 ------- 

493 EventWaitNode 

494 A new EventWaitNode representing the event wait operation. 

495 """ 

496 return GN_wait_event(self, event) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

497  

498 def callback(self, fn, *, user_data=None) -> object: 

499 """Add a host callback node depending on this node. 

500  

501 The callback runs on the host CPU when the graph reaches this node. 

502 Two modes are supported: 

503  

504 - **Python callable**: Pass any callable. The GIL is acquired 

505 automatically. The callable must take no arguments; use closures 

506 or ``functools.partial`` to bind state. 

507 - **ctypes function pointer**: The function receives a single 

508 ``void*`` argument (the ``user_data``), and the caller must keep 

509 the ctypes wrapper alive for the lifetime of the graph. Its 

510 declared prototype must match the driver's ``CUhostFn`` 

511 (``void (*)(void*)``): ``ctypes.CFUNCTYPE(None, ctypes.c_void_p)``, 

512 or ``ctypes.WINFUNCTYPE(None, ctypes.c_void_p)`` on Windows. 

513  

514 .. warning:: 

515  

516 Callbacks must not call CUDA API functions. Doing so may 

517 deadlock or corrupt driver state. 

518  

519 Use caution when a Python callback retains an object that owns a 

520 graph. Any reference cycle involving the callback and a graph that 

521 retains it cannot be broken by Python's cyclic garbage collector. 

522 Use a weak reference to break such cycles. 

523  

524 Parameters 

525 ---------- 

526 fn : callable or ctypes function pointer 

527 The callback function. 

528 user_data : int or bytes-like, optional 

529 Only for ctypes function pointers. If ``int``, passed as a raw 

530 pointer (caller manages lifetime). If bytes-like, the data is 

531 copied and its lifetime is tied to the graph. 

532  

533 Returns 

534 ------- 

535 HostCallbackNode 

536 A new HostCallbackNode representing the callback. 

537  

538 Raises 

539 ------ 

540 TypeError 

541 If ``fn`` is a ctypes function pointer whose declared prototype 

542 does not match ``CUhostFn``. 

543 ValueError 

544 If ``user_data`` is given for a Python callable. 

545 """ 

546 return GN_callback(self, fn, user_data) 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

547  

548 def if_then(self, GraphCondition condition not None: GraphCondition) -> IfNode: 

549 """Add an if-conditional node depending on this node. 

550  

551 The body graph executes only when the condition evaluates to 

552 a non-zero value at runtime. 

553  

554 Parameters 

555 ---------- 

556 condition : GraphCondition 

557 GraphCondition from :meth:`GraphDefinition.create_condition`. 

558  

559 Returns 

560 ------- 

561 IfNode 

562 A new IfNode with one branch accessible via ``.then``. 

563 """ 

564 return _make_conditional_node( 2acvdzdDdHdLdPdHfSdC L Q (d,d:da @d_d}dcegekeoese

565 self, condition, 

566 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2acvdzdDdHdLdPdHfSdC L Q (d,d:da @d_d}dcegekeoese

567  

568 def if_else(self, GraphCondition condition not None: GraphCondition) -> IfElseNode: 

569 """Add an if-else conditional node depending on this node. 

570  

571 Two body graphs: the first executes when the condition is 

572 non-zero, the second when it is zero. 

573  

574 Parameters 

575 ---------- 

576 condition : GraphCondition 

577 GraphCondition from :meth:`GraphDefinition.create_condition`. 

578  

579 Returns 

580 ------- 

581 IfElseNode 

582 A new IfElseNode with branches accessible via 

583 ``.then`` and ``.else_``. 

584 """ 

585 return _make_conditional_node( 2udydCdGdKdOdTdD M R 'd+d/da ?d^d|dbefejenere

586 self, condition, 

587 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2udydCdGdKdOdTdD M R 'd+d/da ?d^d|dbefejenere

588  

589 def while_loop(self, GraphCondition condition not None: GraphCondition) -> WhileNode: 

590 """Add a while-loop conditional node depending on this node. 

591  

592 The body graph executes repeatedly while the condition 

593 evaluates to a non-zero value. 

594  

595 Parameters 

596 ---------- 

597 condition : GraphCondition 

598 GraphCondition from :meth:`GraphDefinition.create_condition`. 

599  

600 Returns 

601 ------- 

602 WhileNode 

603 A new WhileNode with body accessible via ``.body``. 

604 """ 

605 return _make_conditional_node( 2xdBdFdJdNdRdVdF O T Vc*d.d=da ]d{daeeeiemeqeue

606 self, condition, 

607 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2xdBdFdJdNdRdVdF O T Vc*d.d=da ]d{daeeeiemeqeue

608  

609 def switch(self, GraphCondition condition not None: GraphCondition, unsigned int count) -> SwitchNode: 

610 """Add a switch conditional node depending on this node. 

611  

612 The condition value selects which branch to execute. If the 

613 value is out of range, no branch executes. 

614  

615 Parameters 

616 ---------- 

617 condition : GraphCondition 

618 GraphCondition from :meth:`GraphDefinition.create_condition`. 

619 count : int 

620 Number of switch cases (branches). 

621  

622 Returns 

623 ------- 

624 SwitchNode 

625 A new SwitchNode with branches accessible via ``.branches``. 

626 """ 

627 return _make_conditional_node( 2wdAdEdIdMdQdIfUdE N S )d-d;da [d`d~ddehelepete

628 self, condition, 

629 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2wdAdEdIdMdQdIfUdE N S )d-d;da [d`d~ddehelepete

630  

631  

632cdef inline ConditionalNode _make_conditional_node( 

633 GraphNode pred, 

634 GraphCondition condition, 

635 cydriver.CUgraphConditionalNodeType cond_type, 

636 unsigned int size, 

637 type node_cls): 

638 GN_check_valid(pred) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

639 if not isinstance(condition, GraphCondition): 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

640 raise TypeError( 

641 f"condition must be a GraphCondition object (from " 

642 f"GraphDefinition.create_condition()), got {type(condition).__name__}") 

643 cdef cydriver.CUgraphNodeParams params 

644 cdef cydriver.CUgraphNode new_node = NULL 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

645  

646 c_memset(&params, 0, sizeof(params)) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

647 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

648 params.conditional.handle = condition._c_handle 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

649 params.conditional.type = cond_type 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

650 params.conditional.size = size 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

651  

652 cdef cydriver.CUcontext ctx = NULL 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

653 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

654 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

655 cdef cydriver.CUgraphNode* deps = NULL 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

656 cdef size_t num_deps = 0 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

657  

658 if pred_node != NULL: 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

659 deps = &pred_node 

660 num_deps = 1 

661  

662 with nogil: 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

663 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

664 params.conditional.ctx = ctx 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

665  

666 with nogil: 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

667 IF CUDA_CORE_BUILD_MAJOR >= 13: 

668 HANDLE_RETURN(cydriver.cuGraphAddNode( 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdHfIfSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

669 &new_node, as_cu(h_graph), deps, NULL, num_deps, &params)) 

670 ELSE: 

671 HANDLE_RETURN(cydriver.cuGraphAddNode( 

672 &new_node, as_cu(h_graph), deps, num_deps, &params)) 

673  

674 cdef list branch_list = [] 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

675 cdef unsigned int i 

676 cdef cydriver.CUgraph bg 

677 cdef GraphHandle h_branch 

678 for i in range(size): 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

679 bg = params.conditional.phGraph_out[i] 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

680 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

681 branch_list.append(GraphDefinition._from_handle(h_branch)) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

682 cdef tuple branches = tuple(branch_list) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

683  

684 cdef ConditionalNode n = node_cls.__new__(node_cls) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

685 n._h_node = create_graph_node_handle(new_node, h_graph) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

686 n._condition = condition 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

687 n._cond_type = cond_type 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

688 n._branches = branches 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

689  

690 return _registered(n) 2acudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdC D E F L M N O Q R S T Vc'd(d)d*d+d,d-d.d/d:d;d=da ?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteue

691  

692cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node): 

693 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2{b=g|b?gacghhhihjhccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z ubrb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 Ccobpb@cDcEc{c|cDfEf!g

694  

695 # Sentinel: virtual node to represent the graph entry point. 

696 if node == NULL: 2{b=g|b?gacghhhihjhccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z ubrb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 Ccobpb@cDcEc{c|cDfEf!g

697 n = GraphNode.__new__(GraphNode) 

698 (<GraphNode>n)._h_node = h_node 

699 (<GraphNode>n)._is_entry = True 

700 return n 

701  

702 # Return a registered object or create and register a new one. 

703 registered = _node_registry.get(<uintptr_t>h_node.get()) 2{b=g|b?gacghhhihjhccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z ubrb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 Ccobpb@cDcEc{c|cDfEf!g

704 if registered is not None: 2{b=g|b?gacghhhihjhccofwbxbybxfyfzf@gJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z ubrb2 tbVcsbPbmbU P K ~ Afwf'ey abndBf3 Ccobpb@cDcEc{c|cDfEf!g

705 return <GraphNode>registered 2{b|bacghhhihjhofwbxbybxfyfzfJfKf#gLfMfNf$g%g'gOfFfPfQfRfSf(g)gkhlhmhnhohphTfUf*gVfWfXfYf+g,g-g.gZfGf0f1f2f3f/g:g4f5f6f7f8f9f!f#f$f%f'f(fqhrhshthuhvh^g_g`g{g|g}g~gahCfAbubmbU P K ~ Afwf'ey abndBf3

706 else: 

707 return _registered(GN_create_impl(h_node)) 2{b=g|b?gcc@gJfKfLfMfNfOfFfPfQfRfSfTfUfVfWfXfYfZfGf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(fC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z rb2 tbVcsbPby Ccobpb@cDcEc{c|cDfEf!g

708  

709  

710cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

711 cdef cydriver.CUgraphNodeType node_type 

712 with nogil: 2{b=g|b?gcc@gJfKfLfMfNfOfFfPfQfRfSfTfUfVfWfXfYfZfGf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(fC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z rb2 tbVcsbPby Ccobpb@cDcEc{c|cDfEf!g

713 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2{b=g|b?gcc@gJfKfLfMfNfOfFfPfQfRfSfTfUfVfWfXfYfZfGf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(fC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z rb2 tbVcsbPby Ccobpb@cDcEc{c|cDfEf!g

714  

715 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2{b=g|b?gcc@gJfKfLfMfNfOfFfPfQfRfSfTfUfVfWfXfYfZfGf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'f(fC D E F vf! qb} L M N O Q R S T nb1 TcUcV f z rb2 tbVcsbPby Ccobpb@cDcEc{c|cDfEf!g

716 return EmptyNode._create_impl(h_node) 2FfGf#f

717 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

718 return KernelNode._create_from_driver(h_node) 2{b=g|b?g@gC D E F ! 2 y

719 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

720 return AllocNode._create_from_driver(h_node) 2JfKfLfMfNfOfFfPfQfRfSfTfUfVfWfXfYfZfGf0f1f2f3f4f5f6f7f8f9f!f$f%f'f(fnb1

721 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

722 return FreeNode._create_from_driver(h_node) 1V

723 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

724 return MemsetNode._create_from_driver(h_node) 1y

725 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

726 return MemcpyNode._create_from_driver(h_node) 2f z @c{c|cDfEf!g

727 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

728 return ChildGraphNode._create_from_driver(h_node) 2vfqb} rb2 sbPb

729 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

730 return EventRecordNode._create_from_driver(h_node) 2Tc

731 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

732 return EventWaitNode._create_from_driver(h_node) 2Uc

733 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

734 return HostCallbackNode._create_from_driver(h_node) 2ccvfqb} rbtbsbPbCcobpbDcEc

735 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

736 return ConditionalNode._create_from_driver(h_node) 2L M N O Q R S T Vc

737 else: 

738 n = GraphNode.__new__(GraphNode) 

739 (<GraphNode>n)._h_node = h_node 

740 return n 

741  

742cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args): 

743 cdef cydriver.CUgraphNode new_node = NULL 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

744 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

745 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

746 cdef cydriver.CUgraphNode* deps = NULL 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

747 cdef size_t num_deps = 0 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

748 cdef OpaqueHandle args_owner 

749 cdef PreparedAttachment prepared 

750  

751 GN_check_valid(self) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

752 if conf.cluster is not None or conf.is_cooperative: 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

753 raise NotImplementedError( 2$d

754 "clustered or cooperative graph kernel nodes are not supported") 

755  

756 if pred_node != NULL: 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

757 deps = &pred_node 2{b|bgd4 5 6 7 8 9 mbU P K ~ y QbSbjd

758 num_deps = 1 2{b|bgd4 5 6 7 8 9 mbU P K ~ y QbSbjd

759  

760 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS( 

761 kern=as_cu(ker._h_kernel), 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

762 func=<cydriver.CUfunction>NULL, 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

763 gridDimX=conf.grid[0], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

764 gridDimY=conf.grid[1], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

765 gridDimZ=conf.grid[2], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

766 blockDimX=conf.block[0], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

767 blockDimY=conf.block[1], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

768 blockDimZ=conf.block[2], 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

769 sharedMemBytes=conf.shmem_size, 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

770 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

771 extra=NULL, 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

772 ctx=<cydriver.CUcontext>NULL, 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

773 ) 

774  

775 # Keep the kernel and argument objects alive because CUDA copies argument 

776 # values but does not retain the resources they reference. 

777 cdef OpaqueHandle kernel_owner = ker._h_kernel 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

778 kernel_args = ker_args.kernel_args 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

779 if kernel_args is not None: 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

780 args_owner = make_opaque_py(kernel_args) 2{btd|bWdXdmbU P K ~ y QbYdZd0d1d2d3d.b/b:b5d6d7d8d9d!dSb%djd

781 HANDLE_RETURN(graph_prepare_attachment( 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

782 h_graph, kernel_owner, args_owner, &prepared)) 

783  

784 with nogil: 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

785 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

786 &new_node, as_cu(h_graph), deps, num_deps, &node_params)) 

787  

788 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

789  

790 return _registered(KernelNode._create_with_params( 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

791 create_graph_node_handle(new_node, h_graph), 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

792 conf.grid, conf.block, conf.shmem_size, 2{btd|bIbvewexeyezegdAeJb4 Kb5 Lb6 Mb7 Nb8 Ob9 BeC D E F ! WdXdCeubDeEe2 mbU P K ~ y QbYdZd0d1d2d3d.b/b:bXcYcZcHeIeJe4d5d6d7dvb8d9d!dSb#d$d%djdTbKeUbLeVbMea WbNeXbOeYbPeZbQe0bRe1bSe2bTe3bUe

793 ker._h_kernel)) 

794  

795  

796cdef inline EmptyNode GN_join(GraphNode self, tuple nodes): 

797 cdef vector[cydriver.CUgraphNode] deps 

798 cdef cydriver.CUgraphNode new_node = NULL 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

799 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

800 cdef GraphNode other 

801 cdef cydriver.CUgraphNode* deps_ptr = NULL 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

802 cdef size_t num_deps = 0 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

803 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

804  

805 GN_check_valid(self) 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

806 if pred_node != NULL: 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

807 deps.push_back(pred_node) 24b5b6b7b8b9bAbEb

808 for other in nodes: 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

809 GN_check_valid(other) 24bbcb c d e wbxbybdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byc9bzcf mbU P K ~ EbFcm Gcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

810 if as_cu((<GraphNode>other)._h_node) != NULL: 24bbcb c d e wbxbybdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byc9bzcf mbU P K ~ Fcm Gcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

811 deps.push_back(as_cu((<GraphNode>other)._h_node)) 24bbcb c d e wbxbybdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byc9bzcf mbU P K ~ Fcm Gcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

812  

813 num_deps = deps.size() 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

814 if num_deps > 0: 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

815 deps_ptr = deps.data() 24bbcb c d e wbxbybdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byc9bzcAbf mbU P K ~ Fcm Gcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

816  

817 with nogil: 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

818 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

819 &new_node, as_cu(h_graph), deps_ptr, num_deps)) 

820  

821 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 26g7g4bbcofb c d e wbxbybxfyfzfdcg gch 5bjc6bkclci ocj rck ucl 7bxc8byctf9bzcCfAb8g9gf mbU P K ~ 3gAfwf'e4gEbndBf5gvb(e)e*eFcm lfGcn Hco a Icp Jcq Kcr Lcs Mct Ncu Ocv Pcw

822  

823  

824cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device, 

825 object memory_type, object peer_access): 

826 cdef int device_id 

827 cdef cydriver.CUdevice dev 

828  

829 GN_check_valid(self) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

830 if device is None: 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

831 with nogil: 2Rcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnbV f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

832 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2Rcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnbV f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

833 device_id = <int>dev 2Rcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnbV f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

834 else: 

835 device_id = getattr(device, 'device_id', device) 2mfnf1

836  

837 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

838 cdef cydriver.CUgraphNode new_node = NULL 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

839 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

840 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

841 cdef cydriver.CUgraphNode* deps = NULL 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

842 cdef size_t num_deps = 0 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

843  

844 if pred_node != NULL: 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

845 deps = &pred_node 2RcVe4bWeXe~cYeadZe5b0e1e6b2e3ebd4ecd5edd6eed7e7b8e9e8b!e#e9b$e

846 num_deps = 1 2RcVe4bWeXe~cYeadZe5b0e1e6b2e3ebd4ecd5edd6eed7e7b8e9e8b!e#e9b$e

847  

848 cdef vector[cydriver.CUmemAccessDesc] access_descs 

849 cdef cydriver.CUmemAccessDesc access_desc 

850 cdef int peer_id 

851 cdef list peer_ids = [] 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

852  

853 if peer_access is not None: 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

854 for peer_dev in peer_access: 11

855 peer_id = getattr(peer_dev, 'device_id', peer_dev) 11

856 peer_ids.append(peer_id) 11

857 access_desc.location = cumemlocation_from_id( 11

858 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, peer_id) 

859 access_desc.flags = cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 11

860 access_descs.push_back(access_desc) 11

861  

862 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

863  

864 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

865 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

866 alloc_params.bytesize = size 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

867  

868 check_str_enum(memory_type_str, GraphMemoryType) 2mfnfRcsf)fuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

869 if memory_type_str == "device": 2mfnfRcsfuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

870 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2mfnfRcuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBc1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

871 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2mfnfRcuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBc1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

872 alloc_params.poolProps.location.id = device_id 2mfnfRcuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBc1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

873 elif memory_type_str == "host": 2sf~cadbdcdddednb

874 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2sf

875 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST 2sf

876 alloc_params.poolProps.location.id = 0 2sf

877 elif memory_type_str == "managed": 2~cadbdcdddednb

878 IF CUDA_CORE_BUILD_MAJOR >= 13: 

879 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2~cadbdcdddednb

880 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2~cadbdcdddednb

881 alloc_params.poolProps.location.id = device_id 2~cadbdcdddednb

882 ELSE: 

883 raise ValueError("memory_type='managed' requires CUDA 13.0 or later") 

884  

885 if access_descs.size() > 0: 2mfnfRcsfuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

886 alloc_params.accessDescs = access_descs.data() 11

887 alloc_params.accessDescCount = access_descs.size() 11

888  

889 with nogil: 2mfnfRcsfuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

890 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2mfnfRcsfuf+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

891 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params)) 

892  

893 return _registered(AllocNode._create_with_params( 2mfnfRc+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

894 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2mfnfRc+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

895 device_id, memory_type_str, tuple(peer_ids))) 2mfnfRc+e,e-eVe4b.ebcWe/eWc0c1c2c3cb c d e G H I J :e;e=ewbxbybXe~cdcecfc4c4 g # $ % ' Yeadgchcic5c5 h ( ) * + Ze5b?ejc0e@e1e6b[ekc2e]e3ebdlcmcnc6c6 i , - . / 4ecdocpcqc7c7 j : ; = ? 5eddrcsctc8c8 k @ [ ] ^ 6eeducvcwc9c9 l _ ` { | 7e7b^exc8e_e9e8b`eyc!e{e#e9b|ezc$e}eAbfd~eAcBcnb1 V f 3 afFc!cm bbbfGc#cn cbcfHc$co dba dfIc%cp ebefJc'cq fbffKc(cr gbgfLc)cs hbhfMc*ct ibifNc+cu jbjfOc,cv kbkfPc-cw lb

896  

897  

898cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr): 

899 cdef cydriver.CUgraphNode new_node = NULL 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

900 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

901 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

902 cdef cydriver.CUgraphNode* deps = NULL 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

903 cdef size_t num_deps = 0 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

904  

905 GN_check_valid(self) 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

906 if pred_node != NULL: 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

907 deps = &pred_node 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9cV !c#c$ca %c'c(c)c*c+c,c-c

908 num_deps = 1 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9cV !c#c$ca %c'c(c)c*c+c,c-c

909  

910 with nogil: 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

911 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9c[gV !c#c$ca %c'c(c)c*c+c,c-c

912 &new_node, as_cu(h_graph), deps, num_deps, c_dptr)) 

913  

914 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2RcWc0c1c2c3cb c d e G H I J 4c5c6c7c8c9cV !c#c$ca %c'c(c)c*c+c,c-c

915  

916  

917cdef inline OpaqueHandle _buffer_attachment_owner(Buffer buf, str label): 

918 """Copy a Buffer's device-pointer handle into an attachment owner.""" 

919 Buffer_check_open(buf) 2z W X 'b;g(b)b*b]gDb}b~b:c;c(h+h}c+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

920 # The local is required: Cython permits the DevicePtrHandle -> OpaqueHandle 

921 # conversion on assignment, but not directly in a return statement. 

922 cdef OpaqueHandle attachment_owner = buf._h_ptr 2z W X 'b;g(b)b*bDb}b~b:c;c}c+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

923 return attachment_owner 2z W X 'b;g(b)b*bDb}b~b:c;c}c+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

924  

925  

926cdef inline OpaqueHandle _resolve_memcpy_operand( 

927 object operand, object owner, str side, 

928 cydriver.CUdeviceptr* out_ptr) except *: 

929 """Resolve an operand to a pointer and optional attachment owner. 

930  

931 ``operand`` is a :class:`Buffer` or a raw integer address; its device 

932 pointer is written to ``out_ptr``. For a :class:`Buffer` operand, returns an 

933 owner that retains the underlying allocation (not the wrapper). For a raw 

934 pointer, returns an owner built from ``owner`` (or an empty handle when 

935 ``owner`` is ``None``). 

936  

937 Raises 

938 ------ 

939 ValueError 

940 If ``operand`` is a :class:`Buffer` and ``owner`` is not ``None``. 

941 If a :class:`Buffer` operand or ``*_owner`` has no active allocation. 

942 """ 

943 cdef Buffer buf 

944 cdef OpaqueHandle attachment_owner 

945  

946 if isinstance(operand, Buffer): 2b c d e G H I J g # $ % ' h ( ) * + i , - . / j : ; = ? k @ [ ] ^ l _ ` { | fdSczbf z W X 'b|h;g(b)b*b]gDb}b~b:c;c(h+h}cy ab+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x m bbn cbo dba p ebq fbr gbs hbt ibu jbv kbw lb

947 if owner is not None: 2z 'b|h;g(b)b*bDb:c;c+h+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

948 raise ValueError( 2|h;g

949 f"{side}_owner cannot be used when {side} is a Buffer" 2|h;g

950 ) 

951 buf = operand 2z 'b;g(b)b*bDb:c;c+h+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

952 attachment_owner = _buffer_attachment_owner(buf, side) 2z 'b;g(b)b*bDb:c;c+h+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

953 out_ptr[0] = as_cu(buf._h_ptr) 2z 'b;g(b)b*bDb:c;c+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

954 return attachment_owner 2z 'b;g(b)b*bDb:c;c+b,b-b=c?c!b#b$b.c/cY Z 0 BbCb@c;b[c=b?b@b]c^c[b]b^b_c`c_b`b{c|cDfEf%bA B x

955 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2b c d e G H I J g # $ % ' h ( ) * + i , - . / j : ; = ? k @ [ ] ^ l _ ` { | fdSczbf W X ]gDb}b~b(h}cy ab!b#b$b.c/cm bbn cbo dba p ebq fbr gbs hbt ibu jbv kbw lb

956 if owner is None: 2b c d e G H I J g # $ % ' h ( ) * + i , - . / j : ; = ? k @ [ ] ^ l _ ` { | fdSczbf W X ]gDb}b~b(h}cy abm bbn cbo dba p ebq fbr gbs hbt ibu jbv kbw lb

957 return OpaqueHandle() 2b c d e G H I J g # $ % ' h ( ) * + i , - . / j : ; = ? k @ [ ] ^ l _ ` { | fdf ]gy abm bbn cbo dba p ebq fbr gbs hbt ibu jbv kbw lb

958 if isinstance(owner, Buffer): 2SczbW X ]gDb}b~b(h}c

959 return _buffer_attachment_owner(owner, f"{side}_owner") 2W X ]gDb}b~b(h}c

960 return make_opaque_py(owner) 2Sczb

961  

962  

963cdef inline MemsetNode GN_memset( 

964 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner, 

965 unsigned int val, unsigned int elem_size, 

966 size_t width, size_t height, size_t pitch): 

967 cdef cydriver.CUgraphNode new_node = NULL 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

968 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

969 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

970 cdef cydriver.CUgraphNode* deps = NULL 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

971 cdef size_t num_deps = 0 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

972 cdef PreparedAttachment prepared 

973  

974 GN_check_valid(self) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

975 if pred_node != NULL: 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

976 deps = &pred_node 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | y abbbcbdba ebfbgbhbibjbkblb

977 num_deps = 1 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | y abbbcbdba ebfbgbhbibjbkblb

978  

979 cdef cydriver.CUcontext ctx = NULL 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

980 with nogil: 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

981 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

982  

983 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS( 

984 dst=c_dst, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

985 pitch=pitch, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

986 value=val, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

987 elementSize=elem_size, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

988 width=width, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

989 height=height, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

990 ) 

991  

992 if dst_owner: 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

993 HANDLE_RETURN(graph_prepare_attachment( 2:c;c}c=c?c.c/cBbCb[c]c^c_c`cA B x

994 h_graph, dst_owner, OpaqueHandle(), &prepared)) 

995  

996 with nogil: 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

997 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

998 &new_node, as_cu(h_graph), deps, num_deps, 

999 &memset_params, ctx)) 

1000  

1001 if dst_owner: 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

1002 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2:c;c}c=c?c.c/cBbCb[c]c^c_c`cA B x

1003  

1004 return _registered(MemsetNode._create_with_params( 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

1005 create_graph_node_handle(new_node, h_graph), c_dst, 2b c d e G H I J # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | :c;c}cy ab=c?c.c/cBbCb[c]c^c_c`cA B x bbcbdba ebfbgbhbibjbkblb

1006 val, elem_size, width, height, pitch)) 

1007  

1008  

1009cdef cydriver.CUmemorytype _get_memcpy_memory_type( 

1010 cydriver.CUdeviceptr ptr) except *: 

1011 cdef unsigned int memory_type = cydriver.CU_MEMORYTYPE_DEVICE 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1012 cdef cydriver.CUresult ret 

1013 with nogil: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1014 ret = cydriver.cuPointerGetAttribute( 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1015 &memory_type, 

1016 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

1017 ptr) 

1018 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1019 HANDLE_RETURN(ret) 

1020 return <cydriver.CUmemorytype>memory_type 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1021  

1022  

1023cdef void _init_memcpy_params( 

1024 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t size, 

1025 cydriver.CUDA_MEMCPY3D* params, cydriver.CUmemorytype* dst_type, 

1026 cydriver.CUmemorytype* src_type) except *: 

1027 dst_type[0] = _get_memcpy_memory_type(dst) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1028 src_type[0] = _get_memcpy_memory_type(src) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1029  

1030 c_memset(params, 0, sizeof(params[0])) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1031 params.srcMemoryType = src_type[0] 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1032 params.dstMemoryType = dst_type[0] 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1033 if src_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1034 params.srcHost = <void*><uintptr_t>src 2z +b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b{c|c%bA B x

1035 else: 

1036 params.srcDevice = src 2b c d e g h i j k l Sczbf W X 'b(b)b*bDb}b~b@cm n o a p q r s t u v w

1037 if dst_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1038 params.dstHost = <void*><uintptr_t>dst 2z +b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x

1039 else: 

1040 params.dstDevice = dst 2b c d e g h i j k l Sczbf W X 'b(b)b*bDb}b~b@c{c|cm n o a p q r s t u v w

1041 params.WidthInBytes = size 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1042 params.Height = 1 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1043 params.Depth = 1 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 @c;b=b?b@b[b]b^b_b`b{c|c%bA B x m n o a p q r s t u v w

1044  

1045  

1046cdef inline MemcpyNode GN_memcpy( 

1047 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner, 

1048 cydriver.CUdeviceptr c_src, OpaqueHandle src_owner, size_t size): 

1049 cdef cydriver.CUDA_MEMCPY3D params 

1050 cdef cydriver.CUmemorytype c_dst_type 

1051 cdef cydriver.CUmemorytype c_src_type 

1052 _init_memcpy_params( 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1053 c_dst, c_src, size, &params, &c_dst_type, &c_src_type) 

1054  

1055 cdef cydriver.CUgraphNode new_node = NULL 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1056 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1057 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1058 cdef cydriver.CUgraphNode* deps = NULL 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1059 cdef size_t num_deps = 0 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1060 cdef PreparedAttachment prepared 

1061  

1062 GN_check_valid(self) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1063 if pred_node != NULL: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1064 deps = &pred_node 1bcdeghijklfmnoapqrstuvw

1065 num_deps = 1 1bcdeghijklfmnoapqrstuvw

1066  

1067 cdef cydriver.CUcontext ctx = NULL 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1068 if dst_owner or src_owner: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1069 HANDLE_RETURN(graph_prepare_attachment( 2Sczbz W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x

1070 h_graph, dst_owner, src_owner, &prepared)) 

1071  

1072 with nogil: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1073 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1074 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1075 &new_node, as_cu(h_graph), deps, num_deps, &params, ctx)) 

1076  

1077 if dst_owner or src_owner: 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1078 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2Sczbz W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x

1079  

1080 return _registered(MemcpyNode._create_with_params( 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1081 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2b c d e g h i j k l Sczbf z W X 'b(b)b*bDb}b~b+b,b-b!b#b$bY Z 0 ;b=b?b@b[b]b^b_b`b%bA B x m n o a p q r s t u v w

1082 c_dst_type, c_src_type)) 

1083  

1084  

1085cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def): 

1086 cdef cydriver.CUgraphNode new_node = NULL 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1087 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1088 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1089 cdef cydriver.CUgraphNode* deps = NULL 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1090 cdef size_t num_deps = 0 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1091 cdef cydriver.CUresult rollback_status 

1092  

1093 GN_check_valid(self) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1094 GD_check_valid(child_def) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1095 if pred_node != NULL: 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1096 deps = &pred_node 2Eb

1097 num_deps = 1 2Eb

1098  

1099 with nogil: 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1100 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1101 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph))) 

1102  

1103 cdef cydriver.CUgraph embedded_graph = NULL 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1104 cdef GraphHandle h_embedded 

1105 try: 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1106 with nogil: 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1107 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1108 new_node, &embedded_graph)) 

1109 h_embedded = create_child_graph_handle( 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1110 embedded_graph, h_graph, new_node) 

1111 HANDLE_RETURN(graph_clone_attachments( 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1112 h_embedded, child_def._h_graph)) 

1113 except: 

1114 with nogil: 

1115 rollback_status = cydriver.cuGraphDestroyNode(new_node) 

1116 if rollback_status == cydriver.CUDA_SUCCESS: 

1117 invalidate_child_graph_state(h_graph, new_node) 

1118 else: 

1119 # The original exception propagates with the failed rollback 

1120 # attached as a note (error handling policy). 

1121 attach_rollback_failure( 

1122 b"cuGraphDestroyNode", rollback_status, 

1123 b"failed while rolling back a child graph node; the node remains in the graph") 

1124 raise 

1125  

1126 return _registered(ChildGraphNode._create_with_params( 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1127 create_graph_node_handle(new_node, h_graph), h_embedded)) 2ccIbJbKbLbMbNbOb! qb%e} Qcrb2 tbsbPbEbhdCcidRbDcEcTbUbVba WbXbYbZb0b1b2b3b

1128  

1129  

1130cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev): 

1131 GN_check_valid(self) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1132 Event_check_open(ev) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1133 cdef cydriver.CUgraphNode new_node = NULL 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1134 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1135 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1136 cdef cydriver.CUgraphNode* deps = NULL 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1137 cdef size_t num_deps = 0 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1138 cdef PreparedAttachment prepared 

1139  

1140 if pred_node != NULL: 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1141 deps = &pred_node 2echcmcpcscvcAcnb1 UcV f z ubodFbpdobrdGbsdHb

1142 num_deps = 1 2echcmcpcscvcAcnb1 UcV f z ubodFbpdobrdGbsdHb

1143  

1144 cdef OpaqueHandle owner = ev._h_event 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1145 HANDLE_RETURN(graph_prepare_attachment( 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1146 h_graph, owner, OpaqueHandle(), &prepared)) 

1147  

1148 with nogil: 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1149 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1150 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event))) 

1151  

1152 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1153  

1154 return _registered(EventRecordNode._create_with_params( 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1155 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2kdechcmcpcscvcegAcfgldmdnb1 TcUcV f z ubodFbpdobrdGbsdHbwgzgCga FgIgLgOgRgUgXg0g

1156  

1157  

1158cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev): 

1159 GN_check_valid(self) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1160 Event_check_open(ev) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1161 cdef cydriver.CUgraphNode new_node = NULL 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1162 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1163 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1164 cdef cydriver.CUgraphNode* deps = NULL 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1165 cdef size_t num_deps = 0 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1166 cdef PreparedAttachment prepared 

1167  

1168 if pred_node != NULL: 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1169 deps = &pred_node 2kdfcicncqctcwcldmdBcTc

1170 num_deps = 1 2kdfcicncqctcwcldmdBcTc

1171  

1172 cdef OpaqueHandle owner = ev._h_event 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1173 HANDLE_RETURN(graph_prepare_attachment( 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1174 h_graph, owner, OpaqueHandle(), &prepared)) 

1175  

1176 with nogil: 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1177 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1178 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event))) 

1179  

1180 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1181  

1182 return _registered(EventWaitNode._create_with_params( 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1183 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2kdfcicncqctcwcldmdBcggTcUcFbqdpbGbHbxgAgDga GgJgMgPgSgVgYg1g

1184  

1185  

1186cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data): 

1187 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1188 cdef cydriver.CUgraphNode new_node = NULL 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1189 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1190 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1191 cdef cydriver.CUgraphNode* deps = NULL 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1192 cdef size_t num_deps = 0 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1193 cdef OpaqueHandle fn_owner, data_owner 

1194 cdef PreparedAttachment prepared 

1195  

1196 GN_check_valid(self) 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1197 if pred_node != NULL: 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1198 deps = &pred_node 2W X 3 FbqdpbGbHb

1199 num_deps = 1 2W X 3 FbqdpbGbHb

1200  

1201 _resolve_host_callback( 2+f,f-f.f/fbhchdheh:fccfh;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1202 fn, user_data, &node_params.fn, &node_params.userData, 

1203 &fn_owner, &data_owner) 

1204 HANDLE_RETURN(graph_prepare_attachment( 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1205 h_graph, fn_owner, data_owner, &prepared)) 

1206  

1207 with nogil: 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1208 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1209 &new_node, as_cu(h_graph), deps, num_deps, &node_params)) 

1210  

1211 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1212  

1213 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1214 return _registered(HostCallbackNode._create_with_params( 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1215 create_graph_node_handle(new_node, h_graph), callable_obj, 2+f,f-f.f/f:fcc;f=f?f@f[f]f^f_f`f{f|f}f~fagbgpfqfcgdgqb} QcL M N O Q R S T W X rbrftbhgsbPbig3 hdQb*fCcodFbjgkgidpdqdlgmgRbobpbFeGengDcrdGbogpgqgEcsdHbrgsg(eSbtgug)e*evgygBgEga HgKgNgQgTgWgZg2g

1216 node_params.fn, node_params.userData))