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

445 statements  

« prev     ^ index     » next       coverage.py v7.17.2, created at 2026-11-05 01:11 +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 

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._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 collections.abc import Callable 

83  

84 from cuda.core._device import Device 

85 from cuda.core._utils.pycompat import BufferProtocol 

86  

87__all__ = ['GraphNode'] 

88  

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

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

91  

92  

93cdef inline GraphNode _registered(GraphNode n): 

94 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2!g7bbd^g8b_g#glfmfpc9b2e3e4eFeYb5e!bGe6exc*f+f,f-f.f/f#bnfBcCcDcEcBb^c:f;fdeeefegeheb c d e P Q R S 7e8e9etbubvbyfzfAf?cieHe-c`gCb$b%b'bFc=f?fcddd0 h ( ) * + edfdIfIeJf.cDb(bKf)bLf*bMfGc@f[fgdhdNf1 Efi Of, Pf- Qf. Rf/ idjdJeZb!e+bKe#eLe0b$e,bMe%eNe/cEb-b.b/bHc]f^fkdld2 j : ; = ? mdndSfOeTf:cFbUf:bVf;bWf=bXfIc_f`fodpdYf3 Ffk Zf@ 0f[ 1f] 2f^ qdrd3fPe4f;cGb5f?b6f@b7f[b8fJc{f|fsdtd9f4 !fl #f_ $f` %f{ 'f| udvdQe=cHb]b^b_bKc}f~fwdxd5 m } ~ abbbydzdRe1b'e`bSe(eTe2b)e{bUe*etfVe3b+e|bWe,eofvcDfwcufzb$g%gjeke-eXcagAdBdCdDdA B C D wfpfqfbgcg6 $ IbXe7 ocF G H I K L M N dg}beg_c`c~bfg! X qcrcT f U cbdbEdFdlerbmeneYcZc0c1c2c3c4c.e/e:e% Y rfebggsc' Jbhg9 O J E 8 7gBfxfYez 8gAbfb{cCfZ 9g@cKb)facig|cjgkgGdHdId5c6c7c;e=e[clg}cmgngJdKdLd8c9c!c?e@eLboe# peqe4b5b6bwbxbybtcucogyczcAcrese[ete#c]eMdbcpg~cqgrgNdOdPd$c%c'c^e_esbsgcctgadugvgQdRdSd(c)c*c`e{eZeMbTdUd+c,c|e}e'g(g)gWcV W Vdwgxg0e1e]cygzgg y ~eNbdcAgBgLcCgWdXduen gbYdZdkfafObecDgEgMcFg0d1dveo hb2d3dbfPbfcGgHgNcIg4d5dwep ib6d7da cfQbgcJgKgOcLg8d9dxeq jb!d#ddfRbhcMgNgPcOg$d%dyer kb'd(defSbicPgQgQcRg)d*dzes lb+d,dffTbjcSgTgRcUg-d.dAet mb/d:dgfUbkcVgWgScXg;d=dBeu nb?d@dhfVblcYgZgTc0g[d]dCev ob^d_difWbmc1g2gUc3g`d{dDew pb|d}djfXbnc4g5gVc6g~daeEex qbbece

95  

96  

97cdef class GraphNode: 

98 """A node in a graph definition. 

99  

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

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

102 nodes that depend on a predecessor). 

103 """ 

104  

105 @staticmethod 

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

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

108 return GN_create(h_graph, node) 27b^g8b_g9bkhlhmhnh#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U rb% Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ ac# [ebccc|e}e'g(g)g

109  

110 def __repr__(self) -> str: 

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

112 if node == NULL: 2,h

113 if self._is_entry and self.is_valid: 2,h

114 return "<GraphNode entry>" 2,h

115 return "<GraphNode destroyed>" 

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

117  

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

119 if not isinstance(other, GraphNode): 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

120 return NotImplemented 2AhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h

121 cdef GraphNode o = <GraphNode>other 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

122 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

123 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

124 return (as_intptr(self._h_node) == as_intptr(o._h_node) 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

125 and as_intptr(self_graph) == as_intptr(other_graph)) 29bIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fAhBhChDhEhFhGhHhIhJhKhLhMhNhOh-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}hPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

126  

127 def __hash__(self) -> int: 

128 cdef GraphHandle g = graph_node_get_graph(self._h_node) 27b^g8b_g9bkhlhzimhnhAi#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]guhvhwhxhyhzh|g}gti~gahuibhchvidhehwiDfzbA B C D wf6 $ 7 F G H I K L M N % Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ acLboe# peqe4b5b6bwbxbybtcuc[ebccc|e}e'g(g)gBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|iPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

129 return hash((as_intptr(self._h_node), as_intptr(g))) 27b^g8b_g9bkhlhzimhnhAi#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]guhvhwhxhyhzh|g}gti~gahuibhchvidhehwiDfzbA B C D wf6 $ 7 F G H I K L M N % Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ acLboe# peqe4b5b6bwbxbybtcuc[ebccc|e}e'g(g)gBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|iPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h

130  

131 @property 

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

133 """Return the CUDA graph node type. 

134  

135 Returns 

136 ------- 

137 CUgraphNodeType or None 

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

139 """ 

140 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2~haibicidieifigihiiijikiliminioipiqirisifb

141 if node == NULL: 2~haibicidieifigihiiijikiliminioipiqirisifb

142 return None 2~hfb

143 cdef cydriver.CUgraphNodeType node_type 

144 with nogil: 2aibicidieifigihiiijikiliminioipiqirisi

145 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2aibicidieifigihiiijikiliminioipiqirisi

146 return driver.CUgraphNodeType(<int>node_type) 2aibicidieifigihiiijikiliminioipiqirisi

147  

148 @property 

149 def graph(self) -> GraphDefinition: 

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

151 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2bjcjdjejfjgj

152  

153 @property 

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

155 """Return the underlying driver CUgraphNode handle. 

156  

157 Returns None for the entry node. 

158 """ 

159 return as_py(self._h_node) 2vcfb)fMdTd'g(g)gWcy AhBhChDhEhFhGhHhIhJhKhLhMhNhOh

160  

161 @property 

162 def is_valid(self) -> bool: 

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

164  

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

166 """ 

167 return ( 27 F G H I JbAbfbZ Lboe# peqe4b5b6bwbxbybtcuckf,h

168 as_intptr(graph_node_get_graph(self._h_node)) != 0 27 F G H I JbAbfbZ Lboe# peqe4b5b6bwbxbybtcuckf,h

169 and (self._is_entry or as_intptr(self._h_node) != 0) 27 JbAbfbZ Lboe# peqe4b5b6bwbxbybtcuckf,h

170 ) 

171  

172 def destroy(self) -> None: 

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

174  

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

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

177 already-destroyed node (no-op). 

178 """ 

179 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

180 cdef PreparedAttachment prepared 

181 if self._is_entry or node == NULL: 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

182 return 2fb

183  

184 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

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

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

187 HANDLE_RETURN(graph_prepare_attachment( 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

188 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared)) 

189 with nogil: 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

190 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cZ Lboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

191  

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

193 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cLboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

194 invalidate_child_graph_state(h_graph, node) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cLboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

195 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cLboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

196 invalidate_graph_node(self._h_node) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cLboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

197 HANDLE_RETURN(cleanup_status) 2tfofvcwcufwfpfqf$ IbXe7 ocF G H I K L M N % rfeb' O J E Abfb{cLboe# peqe4b5b6bwbxbybtcucyczcAcsby kf

198  

199 @property 

200 def pred(self) -> AdjacencySetProxy: 

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

202 return AdjacencySetProxy(self, False) 2pcxc~hnftbubvbyf?c3f4fhj5f6f7f8fijjjkjlj9f!f#f$f%f'fmjnj|g}gti~gahuizb! X qcrcT f U rbxfYez Abfb

203  

204 @pred.setter 

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

206 p = AdjacencySetProxy(self, False) 2E Ye

207 p.clear() 2E Ye

208 p.update(value) 2E Ye

209  

210 @property 

211 def succ(self) -> AdjacencySetProxy: 

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

213 return AdjacencySetProxy(self, True) 2~hnfzfAf3f4f5f6f7f8f9f!f#f$f%f'fbhchvidhehwiwcJ 8 7gBfxfYez 8gAbfb{cCf9g

214  

215 @succ.setter 

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

217 s = AdjacencySetProxy(self, True) 2nfYe

218 s.clear() 2nfYe

219 s.update(value) 2nfYe

220  

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

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

223  

224 Clustered and cooperative launch configurations are not currently 

225 supported for graph kernel nodes. 

226  

227 .. warning:: 

228  

229 Use caution when a retained kernel argument directly or indirectly 

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

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

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

233  

234 Parameters 

235 ---------- 

236 config : LaunchConfig 

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

238 kernel : Kernel 

239 The kernel to launch. 

240 *args 

241 Kernel arguments. 

242  

243 Returns 

244 ------- 

245 KernelNode 

246 A new KernelNode representing the kernel launch. 

247 """ 

248 GN_check_valid(self) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

249 return GN_launch(self, config, kernel, ParamHolder(args)) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

250  

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

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

253  

254 This is used to synchronize multiple branches of execution. 

255  

256 Parameters 

257 ---------- 

258 *nodes : GraphNode 

259 Additional nodes to depend on. 

260  

261 Returns 

262 ------- 

263 EmptyNode 

264 A new EmptyNode that depends on all input nodes. 

265 """ 

266 return GN_join(self, nodes) 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

267  

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

269 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

272  

273 Parameters 

274 ---------- 

275 size : int 

276 Number of bytes to allocate. 

277 device : int or Device, optional 

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

279 uses the current CUDA context's device. 

280 memory_type : GraphMemoryType or str, optional 

281 Type of memory to allocate. One of: 

282  

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

284 optimal for GPU kernels. 

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

286 both host and device. Useful for graphs containing host 

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

288 systems/drivers. 

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

290 automatically migrates between host and device. Useful for 

291 mixed host/device access patterns. 

292  

293 peer_access : list of int or Device, optional 

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

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

296 device has access. 

297  

298 Returns 

299 ------- 

300 AllocNode 

301 A new AllocNode representing the allocation. Access the allocated 

302 device pointer via the dptr property. 

303  

304 Notes 

305 ----- 

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

307 memory allocation nodes per CUDA documentation. 

308 """ 

309 return GN_alloc(self, size, device, memory_type, peer_access) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

310  

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

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

313  

314 Parameters 

315 ---------- 

316 dptr : int 

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

318  

319 Returns 

320 ------- 

321 FreeNode 

322 A new FreeNode representing the free operation. 

323 """ 

324 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

325  

326 def memset( 

327 self, 

328 dst: Buffer | int, 

329 value, 

330 size_t width, 

331 size_t height=1, 

332 size_t pitch=0, 

333 *, 

334 dst_owner=None, 

335 ) -> MemsetNode: 

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

337  

338 .. warning:: 

339  

340 Use caution when a retained operand owner directly or indirectly 

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

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

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

344  

345 Parameters 

346 ---------- 

347 dst : Buffer or int 

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

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

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

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

352 value : int or buffer-protocol object 

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

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

355 width : int 

356 Width of the row in elements. 

357 height : int, optional 

358 Number of rows (default 1). 

359 pitch : int, optional 

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

361 dst_owner : object, optional 

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

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

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

365  

366 Returns 

367 ------- 

368 MemsetNode 

369 A new MemsetNode representing the memset operation. 

370  

371 Raises 

372 ------ 

373 ValueError 

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

375 """ 

376 GN_check_valid(self) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbje.e/e}i~i:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

377 cdef cydriver.CUdeviceptr c_dst 

378 cdef unsigned int val 

379 cdef unsigned int elem_size 

380 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbje.e/e}i~i:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

381 dst, dst_owner, "dst", &c_dst) 

382 val, elem_size = _parse_fill_value(value) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbje.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

383 return GN_memset( 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

384 self, c_dst, dst_attachment_owner, 

385 val, elem_size, width, height, pitch) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

386  

387 def memcpy( 

388 self, 

389 dst: Buffer | int, 

390 src: Buffer | int, 

391 size_t size, 

392 *, 

393 dst_owner=None, 

394 src_owner=None, 

395 ) -> MemcpyNode: 

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

397  

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

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

400 pointers are supported. 

401  

402 .. warning:: 

403  

404 Use caution when a retained operand owner directly or indirectly 

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

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

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

408  

409 Parameters 

410 ---------- 

411 dst : Buffer or int 

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

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

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

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

416 src : Buffer or int 

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

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

419 size : int 

420 Number of bytes to copy. 

421 dst_owner : object, optional 

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

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

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

425 src_owner : object, optional 

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

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

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

429  

430 Returns 

431 ------- 

432 MemcpyNode 

433 A new MemcpyNode representing the copy operation. 

434  

435 Raises 

436 ------ 

437 ValueError 

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

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

440 """ 

441 GN_check_valid(self) 2b c d e h i j k l m XcIbf U cbdbYcajxiZc0c1cyi2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

442 cdef cydriver.CUdeviceptr c_dst 

443 cdef cydriver.CUdeviceptr c_src 

444 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2b c d e h i j k l m XcIbf U cbdbYcajxiZc0c1cyi2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

445 dst, dst_owner, "dst", &c_dst) 

446 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2b c d e h i j k l m XcIbf U cbdbYcxiZc0c1cyi2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

447 src, src_owner, "src", &c_src) 

448 return GN_memcpy( 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

449 self, c_dst, dst_attachment_owner, 

450 c_src, src_attachment_owner, size) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

451  

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

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

454  

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

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

457 nodes. 

458  

459 Parameters 

460 ---------- 

461 child : GraphDefinition 

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

463  

464 Returns 

465 ------- 

466 ChildGraphNode 

467 A new ChildGraphNode representing the embedded sub-graph. 

468 """ 

469 return GN_embed(self, child) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

470  

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

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

473  

474 Parameters 

475 ---------- 

476 event : Event 

477 The event to record. 

478  

479 Returns 

480 ------- 

481 EventRecordNode 

482 A new EventRecordNode representing the event record operation. 

483 """ 

484 return GN_record_event(self, event) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

485  

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

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

488  

489 Parameters 

490 ---------- 

491 event : Event 

492 The event to wait for. 

493  

494 Returns 

495 ------- 

496 EventWaitNode 

497 A new EventWaitNode representing the event wait operation. 

498 """ 

499 return GN_wait_event(self, event) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

500  

501 def callback(self, fn: Callable[..., object], *, user_data: int | BufferProtocol | None = None) -> object: 

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

503  

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

505 Two modes are supported: 

506  

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

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

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

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

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

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

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

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

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

516  

517 .. warning:: 

518  

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

520 deadlock or corrupt driver state. 

521  

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

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

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

525 Use a weak reference to break such cycles. 

526  

527 Parameters 

528 ---------- 

529 fn : callable or ctypes function pointer 

530 The callback function. 

531 user_data : int or bytes-like, optional 

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

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

534 copied and its lifetime is tied to the graph. 

535  

536 Returns 

537 ------- 

538 HostCallbackNode 

539 A new HostCallbackNode representing the callback. 

540  

541 Raises 

542 ------ 

543 TypeError 

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

545 does not match ``CUhostFn``. 

546 ValueError 

547 If ``user_data`` is given for a Python callable, or if ``fn`` is 

548 :data:`HOST_COPY_FN` and ``user_data`` is not a packed record. 

549 """ 

550 return GN_callback(self, fn, user_data) 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

551  

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

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

554  

555 The body graph executes only when the condition evaluates to 

556 a non-zero value at runtime. 

557  

558 Parameters 

559 ---------- 

560 condition : GraphCondition 

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

562  

563 Returns 

564 ------- 

565 IfNode 

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

567 """ 

568 return _make_conditional_node( 29bddhdldpdtdxdGfAdA F K Xd1d5da 9d%d*d.d=d]d{dae

569 self, condition, 

570 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 29bddhdldpdtdxdGfAdA F K Xd1d5da 9d%d*d.d=d]d{dae

571  

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

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

574  

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

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

577  

578 Parameters 

579 ---------- 

580 condition : GraphCondition 

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

582  

583 Returns 

584 ------- 

585 IfElseNode 

586 A new IfElseNode with branches accessible via 

587 ``.then`` and ``.else_``. 

588 """ 

589 return _make_conditional_node( 2cdgdkdodsdwdBdB G L Wd0d4da 8d$d)d-d;d[d`d~d

590 self, condition, 

591 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2cdgdkdodsdwdBdB G L Wd0d4da 8d$d)d-d;d[d`d~d

592  

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

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

595  

596 The body graph executes repeatedly while the condition 

597 evaluates to a non-zero value. 

598  

599 Parameters 

600 ---------- 

601 condition : GraphCondition 

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

603  

604 Returns 

605 ------- 

606 WhileNode 

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

608 """ 

609 return _make_conditional_node( 2fdjdndrdvdzdDdD I N scZd3d7da #d(d,d:d@d_d}dce

610 self, condition, 

611 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2fdjdndrdvdzdDdD I N scZd3d7da #d(d,d:d@d_d}dce

612  

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

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

615  

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

617 value is out of range, no branch executes. 

618  

619 Parameters 

620 ---------- 

621 condition : GraphCondition 

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

623 count : int 

624 Number of switch cases (branches). 

625  

626 Returns 

627 ------- 

628 SwitchNode 

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

630 """ 

631 return _make_conditional_node( 2edidmdqdudydHfCdC H M Yd2d6da !d'd+d/d?d^d|dbe

632 self, condition, 

633 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2edidmdqdudydHfCdC H M Yd2d6da !d'd+d/d?d^d|dbe

634  

635  

636cdef inline ConditionalNode _make_conditional_node( 

637 GraphNode pred, 

638 GraphCondition condition, 

639 cydriver.CUgraphConditionalNodeType cond_type, 

640 unsigned int size, 

641 type node_cls): 

642 GN_check_valid(pred) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

643 if not isinstance(condition, GraphCondition): 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

644 raise TypeError( 

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

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

647 cdef cydriver.CUgraphNodeParams params 

648 cdef cydriver.CUgraphNode new_node = NULL 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

649  

650 c_memset(&params, 0, sizeof(params)) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

651 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

652 params.conditional.handle = condition._c_handle 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

653 params.conditional.type = cond_type 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

654 params.conditional.size = size 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

655  

656 cdef cydriver.CUcontext ctx = NULL 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

657 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

658 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

659 cdef cydriver.CUgraphNode* deps = NULL 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

660 cdef size_t num_deps = 0 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

661  

662 if pred_node != NULL: 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

663 deps = &pred_node 

664 num_deps = 1 

665  

666 with nogil: 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

667 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

668 params.conditional.ctx = ctx 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

669  

670 with nogil: 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

671 IF CUDA_CORE_BUILD_MAJOR >= 13: 

672 HANDLE_RETURN(cydriver.cuGraphAddNode( 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdGfHfAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

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

674 ELSE: 

675 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

677  

678 cdef list branch_list = [] 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

679 cdef unsigned int i 

680 cdef cydriver.CUgraph bg 

681 cdef GraphHandle h_branch 

682 for i in range(size): 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

683 bg = params.conditional.phGraph_out[i] 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

684 h_branch = create_child_graph_handle(bg, h_graph, new_node) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

685 branch_list.append(GraphDefinition._from_handle(h_branch)) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

686 cdef tuple branches = tuple(branch_list) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

687  

688 cdef ConditionalNode n = node_cls.__new__(node_cls) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

689 n._h_node = create_graph_node_handle(new_node, h_graph) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

690 n._condition = condition 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

691 n._cond_type = cond_type 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

692 n._branches = branches 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

693  

694 return _registered(n) 29bcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdA B C D F G H I K L M N scWdXdYdZd0d1d2d3d4d5d6d7da 8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebece

695  

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

697 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 27b^g8b_g9bkhlhmhnh#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U rb% Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ ac# [ebccc|e}e'g(g)g

698  

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

700 if node == NULL: 27b^g8b_g9bkhlhmhnh#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U rb% Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ ac# [ebccc|e}e'g(g)g

701 n = GraphNode.__new__(GraphNode) 

702 (<GraphNode>n)._h_node = h_node 

703 (<GraphNode>n)._is_entry = True 

704 return n 

705  

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

707 registered = _node_registry.get(<uintptr_t>h_node.get()) 27b^g8b_g9bkhlhmhnh#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U rb% Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ ac# [ebccc|e}e'g(g)g

708 if registered is not None: 27b^g8b_g9bkhlhmhnh#bnftbubvbyfzfAf`gIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U rb% Y ebsc' Jb9 O J E 8 BfxfYez fb{cCfZ ac# [ebccc|e}e'g(g)g

709 return <GraphNode>registered 27b8b9bkhlhmhnhnftbubvbyfzfAfIfJf*gKfLfMf+g,g-gNfEfOfPfQfRf.g/gohphqhrhshthSfTf:gUfVfWfXf;g=g?g@gYfFfZf0f1f2f[g]g3f4f5f6f7f8f9f!f#f$f%f'fuhvhwhxhyhzh|g}g~gahbhchdhehDfzbrb9 O J E 8 BfxfYez fb{cCfZ

710 else: 

711 return _registered(GN_create_impl(h_node)) 27b^g8b_g#b`gIfJfKfLfMfNfEfOfPfQfRfSfTfUfVfWfXfYfFfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'fA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U % Y ebsc' Jbz ac# [ebccc|e}e'g(g)g

712  

713  

714cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

715 cdef cydriver.CUgraphNodeType node_type 

716 with nogil: 27b^g8b_g#b`gIfJfKfLfMfNfEfOfPfQfRfSfTfUfVfWfXfYfFfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'fA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U % Y ebsc' Jbz ac# [ebccc|e}e'g(g)g

717 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 27b^g8b_g#b`gIfJfKfLfMfNfEfOfPfQfRfSfTfUfVfWfXfYfFfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'fA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U % Y ebsc' Jbz ac# [ebccc|e}e'g(g)g

718  

719 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 27b^g8b_g#b`gIfJfKfLfMfNfEfOfPfQfRfSfTfUfVfWfXfYfFfZf0f1f2f3f4f5f6f7f8f9f!f#f$f%f'fA B C D wf6 $ 7 F G H I K L M N ! X qcrcT f U % Y ebsc' Jbz ac# [ebccc|e}e'g(g)g

720 return EmptyNode._create_impl(h_node) 2EfFf!f

721 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

722 return KernelNode._create_from_driver(h_node) 27b^g8b_g`gA B C D 6 Y z

723 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

724 return AllocNode._create_from_driver(h_node) 2IfJfKfLfMfNfEfOfPfQfRfSfTfUfVfWfXfYfFfZf0f1f2f3f4f5f6f7f8f9f#f$f%f'f! X

725 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

726 return FreeNode._create_from_driver(h_node) 1T

727 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

728 return MemsetNode._create_from_driver(h_node) 1z

729 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

730 return MemcpyNode._create_from_driver(h_node) 2f U [e|e}e'g(g)g

731 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

732 return ChildGraphNode._create_from_driver(h_node) 2wf$ 7 % Y ' Jb

733 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

734 return EventRecordNode._create_from_driver(h_node) 2qc#

735 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

736 return EventWaitNode._create_from_driver(h_node) 2rc

737 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

738 return HostCallbackNode._create_from_driver(h_node) 2#bwf$ 7 % eb' Jbacbccc

739 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

740 return ConditionalNode._create_from_driver(h_node) 2F G H I K L M N sc

741 else: 

742 n = GraphNode.__new__(GraphNode) 

743 (<GraphNode>n)._h_node = h_node 

744 return n 

745  

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

747 cdef cydriver.CUgraphNode new_node = NULL 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

748 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

749 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

750 cdef cydriver.CUgraphNode* deps = NULL 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

751 cdef size_t num_deps = 0 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

752 cdef OpaqueHandle args_owner 

753 cdef PreparedAttachment prepared 

754  

755 GN_check_valid(self) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

756 if conf.cluster is not None or conf.is_cooperative: 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

757 raise NotImplementedError( 2Ud

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

759  

760 if pred_node != NULL: 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

761 deps = &pred_node 27b8b?c0 1 2 3 4 5 9 O J E 8 z KbMb]c

762 num_deps = 1 27b8b?c0 1 2 3 4 5 9 O J E 8 z KbMb]c

763  

764 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS( 

765 kern=as_cu(ker._h_kernel), 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

766 func=<cydriver.CUfunction>NULL, 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

767 gridDimX=conf.grid[0], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

768 gridDimY=conf.grid[1], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

769 gridDimZ=conf.grid[2], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

770 blockDimX=conf.block[0], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

771 blockDimY=conf.block[1], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

772 blockDimZ=conf.block[2], 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

773 sharedMemBytes=conf.shmem_size, 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

774 kernelParams=<void**><uintptr_t>(ker_args.ptr), 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

775 extra=NULL, 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

776 ctx=<cydriver.CUcontext>NULL, 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

777 ) 

778  

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

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

781 cdef OpaqueHandle kernel_owner = ker._h_kernel 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

782 kernel_args = ker_args.kernel_args 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

783 if kernel_args is not None: 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

784 args_owner = make_opaque_py(kernel_args) 27bbd8bEdFd9 O J E 8 z KbGdHdIdJdKdLd4b5b6bNdOdPdQdRdSdMbVd]c

785 HANDLE_RETURN(graph_prepare_attachment( 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

786 h_graph, kernel_owner, args_owner, &prepared)) 

787  

788 with nogil: 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

789 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

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

791  

792 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

793  

794 return _registered(KernelNode._create_with_params( 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

795 create_graph_node_handle(new_node, h_graph), 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

796 conf.grid, conf.block, conf.shmem_size, 27bbd8bBbdeeefegehe?cieCb0 Db1 Eb2 Fb3 Gb4 Hb5 vckeA B C D 6 EdFdlerbmeneY 9 O J E 8 z KbGdHdIdJdKdLd4b5b6byczcAcreseteMdNdOdPdsbQdRdSdMbTdUdVd]cNbueObvePbwea QbxeRbyeSbzeTbAeUbBeVbCeWbDeXbEe

797 ker._h_kernel)) 

798  

799  

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

801 cdef vector[cydriver.CUgraphNode] deps 

802 cdef cydriver.CUgraphNode new_node = NULL 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

803 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

804 cdef GraphNode other 

805 cdef cydriver.CUgraphNode* deps_ptr = NULL 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

806 cdef size_t num_deps = 0 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

807 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

808  

809 GN_check_valid(self) 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

810 if pred_node != NULL: 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

811 deps.push_back(pred_node) 2YbZb0b1b2b3bzbAb

812 for other in nodes: 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

813 GN_check_valid(other) 2Yb!bb c d e tbubvb$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{b3b|bf 9 O J E 8 Abdcn eco fcp a gcq hcr ics jct kcu lcv mcw ncx

814 if as_cu((<GraphNode>other)._h_node) != NULL: 2Yb!bb c d e tbubvb$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{b3b|bf 9 O J E 8 dcn eco fcp a gcq hcr ics jct kcu lcv mcw ncx

815 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2Yb!bb c d e tbubvb$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{b3b|bf 9 O J E 8 dcn eco fcp a gcq hcr ics jct kcu lcv mcw ncx

816  

817 num_deps = deps.size() 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

818 if num_deps > 0: 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

819 deps_ptr = deps.data() 2Yb!bb c d e tbubvb$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{b3b|bzbf 9 O J E 8 dcn eco fcp a gcq hcr ics jct kcu lcv mcw ncx

820  

821 with nogil: 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

822 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

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

824  

825 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2!g#gYb!bnfb c d e tbubvbyfzfAf$bh (bi Zb+b0b,b-bj :bk ?bl ]bm 1b`b2b{btf3b|bDfwcufzb$g%gf 9 O J E 8 7gBfxfYe8gAb{cCf9gsbZe0e1edcn kfeco fcp a gcq hcr ics jct kcu lcv mcw ncx

826  

827  

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

829 object memory_type, object peer_access): 

830 cdef int device_id 

831 cdef cydriver.CUdevice dev 

832  

833 GN_check_valid(self) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

834 if device is None: 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

835 with nogil: 2pcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

836 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2pcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

837 device_id = <int>dev 2pcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

838 else: 

839 device_id = getattr(device, 'device_id', device) 2lfmfX

840  

841 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

842 cdef cydriver.CUgraphNode new_node = NULL 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

843 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

844 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

845 cdef cydriver.CUgraphNode* deps = NULL 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

846 cdef size_t num_deps = 0 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

847  

848 if pred_node != NULL: 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

849 deps = &pred_node 2pcFeYbGeHe-cIe.cJeZbKeLe0bMeNe/cOe:cPe;cQe=cRe1bSeTe2bUeVe3bWe

850 num_deps = 1 2pcFeYbGeHe-cIe.cJeZbKeLe0bMeNe/cOe:cPe;cQe=cRe1bSeTe2bUeVe3bWe

851  

852 cdef vector[cydriver.CUmemAccessDesc] access_descs 

853 cdef cydriver.CUmemAccessDesc access_desc 

854 cdef int peer_id 

855 cdef list peer_ids = [] 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

856  

857 if peer_access is not None: 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

858 for peer_dev in peer_access: 1X

859 peer_id = getattr(peer_dev, 'device_id', peer_dev) 1X

860 peer_ids.append(peer_id) 1X

861 access_desc.location = cumemlocation_from_id( 1X

862 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, peer_id) 

863 access_desc.flags = cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 1X

864 access_descs.push_back(access_desc) 1X

865  

866 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

867  

868 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

869 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

870 alloc_params.bytesize = size 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

871  

872 check_str_enum(memory_type_str, GraphMemoryType) 2lfmfpcsf(fvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

873 if memory_type_str == "device": 2lfmfpcsfvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

874 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2lfmfpcvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~bX T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

875 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2lfmfpcvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~bX T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

876 alloc_params.poolProps.location.id = device_id 2lfmfpcvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~bX T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

877 elif memory_type_str == "host": 2sf-c.c/c:c;c=c!

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

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

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

881 elif memory_type_str == "managed": 2-c.c/c:c;c=c!

882 IF CUDA_CORE_BUILD_MAJOR >= 13: 

883 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2-c.c/c:c;c=c!

884 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2-c.c/c:c;c=c!

885 alloc_params.poolProps.location.id = device_id 2-c.c/c:c;c=c!

886 ELSE: 

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

888  

889 if access_descs.size() > 0: 2lfmfpcsfvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

890 alloc_params.accessDescs = access_descs.data() 1X

891 alloc_params.accessDescCount = access_descs.size() 1X

892  

893 with nogil: 2lfmfpcsfvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

894 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2lfmfpcsfvf2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

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

896  

897 return _registered(AllocNode._create_with_params( 2lfmfpc2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

898 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2lfmfpc2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

899 device_id, memory_type_str, tuple(peer_ids))) 2lfmfpc2e3e4eFeYb5e!bGe6excBcCcDcEcb c d e P Q R S 7e8e9etbubvbHe-c$b%b'bFc0 h ( ) * + Ie.c(b)b*bGc1 i , - . / JeZb!e+bKe#eLe0b$e,bMe%eNe/c-b.b/bHc2 j : ; = ? Oe:c:b;b=bIc3 k @ [ ] ^ Pe;c?b@b[bJc4 l _ ` { | Qe=c]b^b_bKc5 m } ~ abbbRe1b'e`bSe(eTe2b)e{bUe*eVe3b+e|bWe,ezbje-e}b~b! X T f Z ~edcLcn gbafecMco hbbffcNcp iba cfgcOcq jbdfhcPcr kbeficQcs lbffjcRct mbgfkcScu nbhflcTcv obifmcUcw pbjfncVcx qb

900  

901  

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

903 cdef cydriver.CUgraphNode new_node = NULL 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

904 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

905 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

906 cdef cydriver.CUgraphNode* deps = NULL 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

907 cdef size_t num_deps = 0 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

908  

909 GN_check_valid(self) 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

910 if pred_node != NULL: 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

911 deps = &pred_node 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKcT LcMcNca OcPcQcRcScTcUcVc

912 num_deps = 1 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKcT LcMcNca OcPcQcRcScTcUcVc

913  

914 with nogil: 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

915 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKc{gT LcMcNca OcPcQcRcScTcUcVc

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

917  

918 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2pcxcBcCcDcEcb c d e P Q R S FcGcHcIcJcKcT LcMcNca OcPcQcRcScTcUcVc

919  

920  

921cdef inline MemsetNode GN_memset( 

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

923 unsigned int val, unsigned int elem_size, 

924 size_t width, size_t height, size_t pitch): 

925 cdef cydriver.CUgraphNode new_node = NULL 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

926 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

927 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

928 cdef cydriver.CUgraphNode* deps = NULL 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

929 cdef size_t num_deps = 0 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

930 cdef PreparedAttachment prepared 

931  

932 GN_check_valid(self) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

933 if pred_node != NULL: 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

934 deps = &pred_node 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbz fbgbhbiba jbkblbmbnbobpbqb

935 num_deps = 1 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbz fbgbhbiba jbkblbmbnbobpbqb

936  

937 cdef cydriver.CUcontext ctx = NULL 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

938 with nogil: 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

939 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

940  

941 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS( 

942 dst=c_dst, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

943 pitch=pitch, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

944 value=val, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

945 elementSize=elem_size, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

946 width=width, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

947 height=height, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

948 ) 

949  

950 if dst_owner: 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

951 HANDLE_RETURN(graph_prepare_attachment( 2.e/e:e;e=e?e@etcuc]e^e_e`e{eV W g y

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

953  

954 with nogil: 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

955 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

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

957 &memset_params, ctx)) 

958  

959 if dst_owner: 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

960 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2.e/e:e;e=e?e@etcuc]e^e_e`e{eV W g y

961  

962 return _registered(MemsetNode._create_with_params( 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

963 create_graph_node_handle(new_node, h_graph), c_dst, 2b c d e P Q R S ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbb.e/e:ez fb;e=e?e@etcuc]e^e_e`e{eV W g y gbhbiba jbkblbmbnbobpbqb

964 val, elem_size, width, height, pitch)) 

965  

966  

967cdef cydriver.CUmemorytype _get_memcpy_memory_type( 

968 cydriver.CUdeviceptr ptr) except *: 

969 cdef unsigned int memory_type = cydriver.CU_MEMORYTYPE_DEVICE 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

970 cdef cydriver.CUresult ret 

971 with nogil: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

972 ret = cydriver.cuPointerGetAttribute( 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

973 &memory_type, 

974 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

975 ptr) 

976 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

977 HANDLE_RETURN(ret) 

978 return <cydriver.CUmemorytype>memory_type 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

979  

980  

981cdef void _init_memcpy_params( 

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

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

984 cydriver.CUmemorytype* src_type) except *: 

985 dst_type[0] = _get_memcpy_memory_type(dst) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

986 src_type[0] = _get_memcpy_memory_type(src) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

987  

988 c_memset(params, 0, sizeof(params[0])) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

989 params.srcMemoryType = src_type[0] 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

990 params.dstMemoryType = dst_type[0] 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

991 if src_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

992 params.srcHost = <void*><uintptr_t>src 2U 5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,c|e}eWcV W y

993 else: 

994 params.srcDevice = src 2b c d e h i j k l m XcIbf cbdbYcZc0c1c2c3c4c[eg n o p a q r s t u v w x

995 if dst_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

996 params.dstHost = <void*><uintptr_t>dst 2U 5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y

997 else: 

998 params.dstDevice = dst 2b c d e h i j k l m XcIbf cbdbYcZc0c1c2c3c4c[e|e}en o p a q r s t u v w x

999 params.WidthInBytes = size 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

1000 params.Height = 1 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

1001 params.Depth = 1 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb[e#c$c%c'c(c)c*c+c,c|e}eWcV W g y n o p a q r s t u v w x

1002  

1003  

1004cdef inline MemcpyNode GN_memcpy( 

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

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

1007 cdef cydriver.CUDA_MEMCPY3D params 

1008 cdef cydriver.CUmemorytype c_dst_type 

1009 cdef cydriver.CUmemorytype c_src_type 

1010 _init_memcpy_params( 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

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

1012  

1013 cdef cydriver.CUgraphNode new_node = NULL 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1014 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1015 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1016 cdef cydriver.CUgraphNode* deps = NULL 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1017 cdef size_t num_deps = 0 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1018 cdef PreparedAttachment prepared 

1019  

1020 GN_check_valid(self) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1021 if pred_node != NULL: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1022 deps = &pred_node 1bcdehijklmfgnopaqrstuvwx

1023 num_deps = 1 1bcdehijklmfgnopaqrstuvwx

1024  

1025 cdef cydriver.CUcontext ctx = NULL 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1026 if dst_owner or src_owner: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1027 HANDLE_RETURN(graph_prepare_attachment( 2XcIbU cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y

1028 h_graph, dst_owner, src_owner, &prepared)) 

1029  

1030 with nogil: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1031 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1032 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

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

1034  

1035 if dst_owner or src_owner: 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1036 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2XcIbU cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y

1037  

1038 return _registered(MemcpyNode._create_with_params( 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1039 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2b c d e h i j k l m XcIbf U cbdbYcZc0c1c2c3c4c5c6c7c8c9c!cwbxbyb#c$c%c'c(c)c*c+c,cWcV W g y n o p a q r s t u v w x

1040 c_dst_type, c_src_type)) 

1041  

1042  

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

1044 cdef cydriver.CUgraphNode new_node = NULL 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1045 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1046 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1047 cdef cydriver.CUgraphNode* deps = NULL 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1048 cdef size_t num_deps = 0 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1049 cdef cydriver.CUresult rollback_status 

1050  

1051 GN_check_valid(self) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1052 GD_check_valid(child_def) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1053 if pred_node != NULL: 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1054 deps = &pred_node 2Ab

1055 num_deps = 1 2Ab

1056  

1057 with nogil: 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1058 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

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

1060  

1061 cdef cydriver.CUgraph embedded_graph = NULL 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1062 cdef GraphHandle h_embedded 

1063 try: 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1064 with nogil: 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1065 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1066 new_node, &embedded_graph)) 

1067 h_embedded = create_child_graph_handle( 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1068 embedded_graph, h_graph, new_node) 

1069 HANDLE_RETURN(graph_clone_attachments( 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1070 h_embedded, child_def._h_graph)) 

1071 except: 

1072 with nogil: 

1073 rollback_status = cydriver.cuGraphDestroyNode(new_node) 

1074 if rollback_status == cydriver.CUDA_SUCCESS: 

1075 invalidate_child_graph_state(h_graph, new_node) 

1076 else: 

1077 # The original exception propagates with the failed rollback 

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

1079 attach_rollback_failure( 

1080 b"cuGraphDestroyNode", rollback_status, 

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

1082 raise 

1083  

1084 return _registered(ChildGraphNode._create_with_params( 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1085 create_graph_node_handle(new_node, h_graph), h_embedded)) 2#bBbCbDbEbFbGbHb6 $ Xe7 oc% Y eb' JbAb@cac[cLbbcccNbObPba QbRbSbTbUbVbWbXb

1086  

1087  

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

1089 GN_check_valid(self) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1090 Event_check_open(ev) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1091 cdef cydriver.CUgraphNode new_node = NULL 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1092 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1093 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1094 cdef cydriver.CUgraphNode* deps = NULL 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1095 cdef size_t num_deps = 0 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1096 cdef PreparedAttachment prepared 

1097  

1098 if pred_node != NULL: 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1099 deps = &pred_node 2%b)b.b;b@b^b}b! X rcT f U rb|c}c# ~cad

1100 num_deps = 1 2%b)b.b;b@b^b}b! X rcT f U rb|c}c# ~cad

1101  

1102 cdef OpaqueHandle owner = ev._h_event 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1103 HANDLE_RETURN(graph_prepare_attachment( 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

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

1105  

1106 with nogil: 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1107 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

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

1109  

1110 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1111  

1112 return _registered(EventRecordNode._create_with_params( 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1113 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2^c%b)b.b;b@b^bdg}beg_c`c! X qcrcT f U rbig|clg}coe# pg~ctgadAgDgGga JgMgPgSgVgYg1g4g

1114  

1115  

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

1117 GN_check_valid(self) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1118 Event_check_open(ev) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1119 cdef cydriver.CUgraphNode new_node = NULL 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1120 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1121 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1122 cdef cydriver.CUgraphNode* deps = NULL 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1123 cdef size_t num_deps = 0 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1124 cdef PreparedAttachment prepared 

1125  

1126 if pred_node != NULL: 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1127 deps = &pred_node 2^c'b*b/b=b[b_b_c`c~bqc

1128 num_deps = 1 2^c'b*b/b=b[b_b_c`c~bqc

1129  

1130 cdef OpaqueHandle owner = ev._h_event 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1131 HANDLE_RETURN(graph_prepare_attachment( 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

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

1133  

1134 with nogil: 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1135 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

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

1137  

1138 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1139  

1140 return _registered(EventWaitNode._create_with_params( 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1141 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g

1142  

1143  

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

1145 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1146 cdef cydriver.CUgraphNode new_node = NULL 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1147 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1148 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1149 cdef cydriver.CUgraphNode* deps = NULL 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1150 cdef size_t num_deps = 0 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1151 cdef OpaqueHandle fn_owner, data_owner 

1152 cdef PreparedAttachment prepared 

1153  

1154 GN_check_valid(self) 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1155 if pred_node != NULL: 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1156 deps = &pred_node 2wccbdbZ g

1157 num_deps = 1 2wccbdbZ g

1158  

1159 _resolve_host_callback( 2*f+f,f-f.ffhghhhih/f#bjh:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1160 fn, user_data, &node_params.fn, &node_params.userData, 

1161 &fn_owner, &data_owner) 

1162 HANDLE_RETURN(graph_prepare_attachment( 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1163 h_graph, fn_owner, data_owner, &prepared)) 

1164  

1165 with nogil: 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1166 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

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

1168  

1169 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1170  

1171 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1172 return _registered(HostCallbackNode._create_with_params( 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1173 create_graph_node_handle(new_node, h_graph), callable_obj, 2*f+f,f-f.f/f#b:f;f=f?f@f[f]f^f_f`f{f|f}f~fofwcagpfqfbgcg$ 7 ocF G H I K L M N cbdb% rfebgg' JbhgZ @cKb)facjgkg[cmgngLbpeqeogbcqgrgsgccugvgZeMbwgxg0e1eygzgg CgFgIga LgOgRgUgXg0g3g6g

1174 node_params.fn, node_params.userData))