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
« 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
5"""GraphNode base class — factory, properties, and builder methods."""
7from __future__ import annotations
9from collections.abc import Iterable
10from typing import TYPE_CHECKING
12from libc.stddef cimport size_t
13from libc.stdint cimport uintptr_t
14from libc.string cimport memset as c_memset
16from libcpp.vector cimport vector
18from cuda.bindings cimport cydriver
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
69from cuda.core._host_callback cimport (
70 _resolve_host_callback,
71)
73import ctypes as ct
74import weakref
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
81if TYPE_CHECKING:
82 from collections.abc import Callable
84 from cuda.core._device import Device
85 from cuda.core._utils.pycompat import BufferProtocol
87__all__ = ['GraphNode']
89# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object)
90_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary()
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
97cdef class GraphNode:
98 """A node in a graph definition.
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 """
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
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}>"
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
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
131 @property
132 def type(self) -> driver.CUgraphNodeType | None:
133 """Return the CUDA graph node type.
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
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
153 @property
154 def handle(self) -> driver.CUgraphNode:
155 """Return the underlying driver CUgraphNode handle.
157 Returns None for the entry node.
158 """
159 return as_py(self._h_node) 2vcfb)fMdTd'g(g)gWcy AhBhChDhEhFhGhHhIhJhKhLhMhNhOh
161 @property
162 def is_valid(self) -> bool:
163 """Whether this node and its graph definition remain valid.
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 )
172 def destroy(self) -> None:
173 """Destroy this node and remove all its edges from the parent graph.
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
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
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
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
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
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
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
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.
224 Clustered and cooperative launch configurations are not currently
225 supported for graph kernel nodes.
227 .. warning::
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.
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.
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
251 def join(self, *nodes: GraphNode) -> EmptyNode:
252 """Create an empty node that depends on this node and all given nodes.
254 This is used to synchronize multiple branches of execution.
256 Parameters
257 ----------
258 *nodes : GraphNode
259 Additional nodes to depend on.
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
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.
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:
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.
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.
298 Returns
299 -------
300 AllocNode
301 A new AllocNode representing the allocation. Access the allocated
302 device pointer via the dptr property.
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
311 def deallocate(self, dptr: int) -> FreeNode:
312 """Add a memory free node depending on this node.
314 Parameters
315 ----------
316 dptr : int
317 Device pointer to free (typically from AllocNode.dptr).
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
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.
338 .. warning::
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.
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`.
366 Returns
367 -------
368 MemsetNode
369 A new MemsetNode representing the memset operation.
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
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.
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.
402 .. warning::
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.
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`.
430 Returns
431 -------
432 MemcpyNode
433 A new MemcpyNode representing the copy operation.
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
452 def embed(self, GraphDefinition child not None: GraphDefinition) -> ChildGraphNode:
453 """Add a child graph node depending on this node.
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.
459 Parameters
460 ----------
461 child : GraphDefinition
462 The graph definition to embed (will be cloned).
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
471 def record(self, Event event not None: Event) -> EventRecordNode:
472 """Add an event record node depending on this node.
474 Parameters
475 ----------
476 event : Event
477 The event to record.
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
486 def wait(self, Event event not None: Event) -> EventWaitNode:
487 """Add an event wait node depending on this node.
489 Parameters
490 ----------
491 event : Event
492 The event to wait for.
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
501 def callback(self, fn: Callable[..., object], *, user_data: int | BufferProtocol | None = None) -> object:
502 """Add a host callback node depending on this node.
504 The callback runs on the host CPU when the graph reaches this node.
505 Two modes are supported:
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.
517 .. warning::
519 Callbacks must not call CUDA API functions. Doing so may
520 deadlock or corrupt driver state.
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.
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.
536 Returns
537 -------
538 HostCallbackNode
539 A new HostCallbackNode representing the callback.
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
552 def if_then(self, GraphCondition condition not None: GraphCondition) -> IfNode:
553 """Add an if-conditional node depending on this node.
555 The body graph executes only when the condition evaluates to
556 a non-zero value at runtime.
558 Parameters
559 ----------
560 condition : GraphCondition
561 GraphCondition from :meth:`GraphDefinition.create_condition`.
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
572 def if_else(self, GraphCondition condition not None: GraphCondition) -> IfElseNode:
573 """Add an if-else conditional node depending on this node.
575 Two body graphs: the first executes when the condition is
576 non-zero, the second when it is zero.
578 Parameters
579 ----------
580 condition : GraphCondition
581 GraphCondition from :meth:`GraphDefinition.create_condition`.
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
593 def while_loop(self, GraphCondition condition not None: GraphCondition) -> WhileNode:
594 """Add a while-loop conditional node depending on this node.
596 The body graph executes repeatedly while the condition
597 evaluates to a non-zero value.
599 Parameters
600 ----------
601 condition : GraphCondition
602 GraphCondition from :meth:`GraphDefinition.create_condition`.
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
613 def switch(self, GraphCondition condition not None: GraphCondition, unsigned int count) -> SwitchNode:
614 """Add a switch conditional node depending on this node.
616 The condition value selects which branch to execute. If the
617 value is out of range, no branch executes.
619 Parameters
620 ----------
621 condition : GraphCondition
622 GraphCondition from :meth:`GraphDefinition.create_condition`.
623 count : int
624 Number of switch cases (branches).
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
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
650 c_memset(¶ms, 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
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
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
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
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, ¶ms))
674 ELSE:
675 HANDLE_RETURN(cydriver.cuGraphAddNode(
676 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
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
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
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
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
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
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
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
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
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
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")
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
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 )
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))
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))
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
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))
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
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
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
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))
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
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
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
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
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
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
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
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
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
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")
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
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))
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
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
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
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))
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
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
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
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
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 )
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))
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))
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
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))
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
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
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
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, ¶ms, &c_dst_type, &c_src_type)
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
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
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))
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, ¶ms, ctx))
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
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))
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
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
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)))
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
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
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
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
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))
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)))
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
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
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
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
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))
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)))
1138 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2^c'b*b/b=b[b_b_c`c~bfgqcrc|c}c# ~cadBgEgHga KgNgQgTgWgZg2g5g
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
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
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
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))
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))
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
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))