Coverage for cuda/core/graph/_graph_node.pyx: 87.33%
442 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-19 01:12 +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
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._module cimport Kernel
25from cuda.core.graph._graph_definition cimport GraphCondition, GraphDefinition
26from cuda.core.graph._subclasses cimport (
27 AllocNode,
28 ChildGraphNode,
29 ConditionalNode,
30 EmptyNode,
31 EventRecordNode,
32 EventWaitNode,
33 FreeNode,
34 HostCallbackNode,
35 IfElseNode,
36 IfNode,
37 KernelNode,
38 MemcpyNode,
39 MemsetNode,
40 SwitchNode,
41 WhileNode,
42)
43from cuda.core._resource_handles cimport (
44 GraphHandle,
45 GraphNodeHandle,
46 OpaqueHandle,
47 as_cu,
48 as_intptr,
49 as_py,
50 create_graph_handle_ref,
51 create_graph_node_handle,
52 graph_node_get_graph,
53 graph_set_slot,
54 invalidate_graph_node,
55 make_opaque_py,
56)
57from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
59from cuda.core.graph._host_callback cimport (
60 _attach_host_callback_owners,
61 _resolve_host_callback,
62)
64import ctypes as ct
65import weakref
67from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy
68from cuda.core._utils.validators import check_str_enum
69from cuda.core._utils.cuda_utils import driver
70from cuda.core.typing import GraphMemoryType
72if TYPE_CHECKING:
73 from cuda.core._device import Device
75__all__ = ['GraphNode']
77# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object)
78_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary()
81cdef inline GraphNode _registered(GraphNode n):
82 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2PdCh6kQd7k0i1i5eRdEiFiGi6hIdHioe7hIi`ekk2i{e|e}e~epe8hlkmkqirisitiuic d e f PbQbRbSbJiKiLi'c(c)c;gvi9hVf8kqereseteafnkok=g?gyc: FcGcHcIc@g[g;i!h=iWfueve?iwe@ixe[ibfpkqk]g^g]izc+i; ^iJc_iKc`iLc{iMc_g`g#hJdMiye$hNi%hKdOize'hPi(hXfAeBeCeDecfrksk{g|gAc= NcOcPcQc}g~g|i)h}iYfEe~iFeajGebjHecjdftkukahbhdjBc,i? ejRcfjScgjTchjUcchdhij*hjjZfIekjJeljKemjLenjefvkwkehfhojCcpj@ qjVcrjWcsjXctjYcghhh+h0fMeNeOePeffxkykihjhDc[ Zc0c1c2ckhlh,hLdQiQe-hRi.hMdSiRe/hTiuj:hNdUiSe;hVi(i.c7fwiWimhnhohphJbKbLbMbzkAk#cHkTeIk=h?hUeJkDhEhxi/cyizirdsdtdud:cOd1f2f8f8cBkCkVeWeDk9c(b7bXb3cKk8i4iAifbLk;cMk:gMf=c?c9i!ivd5igfhfJfG Ybifjf@hSdTdXjYj6exj9f!fFhV ]b#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _b(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |b,f-f^hYdZd3j4j!eAj.f/fIhZ }b:f;f_h0d1d5j6j#eBj=f?fJh0 ~b@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 cc_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dc}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 eccgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fcgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gckglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 icsgtgSfdi,d-d.j/j,eJjugvgTh! jcwgxgqbEdFd.dodZb0b-bK 8b1b2bei/d:d:j;j-eKjygzgUh# kcAgBg9b!b5b{ | } ~ fi;d=d=j?j.eLjCgDgVh$ lcEgFggi?d@d@j[j/eMjGgHgWh% mcIgJghi[d]d]j^j:eNjKgLgXh' ncMgNgcdJ #b$b=b6babbbgbL ebcbdbii^d_d_j`j;eOjOgPgYh( ocQgRgSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbubji`d{d{j|j=ePjTgUgZh) rcVgWg*c+c,c-ckflfmfnfofki|d}d}j~j?eQjXgYg0h* scZg0gddpdqdBbedTbUbk M VbWbli~daeakbk@eRj1g2g1h+ tc3g4ga u v s g h i j t vbwbhbC D p E F mibececkdk[eSj5g6g2h, uc7g8g9gfdgd-i.ide)iBfCf5fN %bDfEfnieefeekfk]eTj!g#g3h- vc$g%gpfXiZe0eNkOkqfEkqhrhBi] 5cshth'ghdid/i:ige*iFfGf6fO 'bHfIfoiheiegkhk^eUj(g)g4h. wc*g+gpijekeikjk_eVj,g-g5h/ xc.g/gTf}c~c#i$iGd6irfsfKfH 3btfufUfadbd%i'iHd7ivfwfLfI 4bxfyfYi1e2ePkQkzfFkuhvhCi^ 6cwhxhZi3e4eRkSkAfGkyhzhDi_ 7cAhBh
85cdef class GraphNode:
86 """A node in a graph definition.
88 Nodes are created by calling builder methods on GraphDefinition (for
89 entry-point nodes with no dependencies) or on other Nodes (for
90 nodes that depend on a predecessor).
91 """
93 @staticmethod
94 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
95 """Factory: dispatch to the right subclass based on node type."""
96 return GN_create(h_graph, node) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c
98 def __repr__(self) -> str:
99 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2Bl
100 if node == NULL: 2Bl
101 return "<GraphNode entry>" 2Bl
102 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
104 def __eq__(self, other: object) -> bool:
105 if not isinstance(other, GraphNode): 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2bei/d:d:j;j-eKjygzgUh# kcGlAgBg9b!b5b{ | } ~ fi;d=d=j?j.eLjCgDgVh$ lcHlEgFggi?d@d@j[j/eMjGgHgWh% mcIlIgJghi[d]d]j^j:eNjKgLgXh' ncJlMgNgcdJ #b$b=b6babbbgbL ebcbdbii^d_d_j`j;eOjOgPgYh( ocKlQgRgSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbubji`d{d{j|j=ePjTgUgZh) rcLlVgWg*c+c,c-ckflfmfnfofki|d}d}j~j?eQjXgYg0h* scMlZg0gddpdqdBbedTbUbk M VbWbli~daeakbk@eRj1g2g1h+ tcNl3g4ga u v s g h i j t vbwbhbC D p E F mibececkdk[eSj5g6g2h, ucOl7g8g9gfdgd-i.ide)iBfCf5fN %bDfEfnieefeekfk]eTj!g#g3h- vcPl$g%gpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
106 return NotImplemented 2Mf=c?c9i!ivd5igfhfJfG Yb~kifjfei/d:d:j;j-eKjygzgUh# kcGlAgBgfi;d=d=j?j.eLjCgDgVh$ lcHlEgFggi?d@d@j[j/eMjGgHgWh% mcIlIgJghi[d]d]j^j:eNjKgLgXh' ncJlMgNgii^d_d_j`j;eOjOgPgYh( ocKlQgRgji`d{d{j|j=ePjTgUgZh) rcLlVgWgki|d}d}j~j?eQjXgYg0h* scMlZg0gli~daeakbk@eRj1g2g1h+ tcNl3g4gmibececkdk[eSj5g6g2h, ucOl7g8gnieefeekfk]eTj!g#g3h- vcPl$g%g
107 cdef GraphNode o = <GraphNode>other 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
108 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
109 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
110 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
111 and as_intptr(self_graph) == as_intptr(other_graph)) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
113 def __hash__(self) -> int:
114 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2Pd6kQd7kRd-k.kQl/k:kRl2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5k^k_k`k{k|k}k#k$kCl%k'kDl(k)kEl*k+kFl(i.cJbKbLbMb#c8cVe9c(b7bXb3c8i4iAifb;c@hSdTdXjYj6exj9f!fFhV ]bSl#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _bTl(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |bUl,f-f^hYdZd3j4j!eAj.f/fIhZ }bVl:f;f_h0d1d5j6j#eBj=f?fJh0 ~bWl@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 ccXl_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dcYl}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 ecZlcgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fc0lgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gc1lkglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 ic2lsgtgSfdi,d-d.j/j,eJjugvgTh! jc3lwgxgoiheiegkhk^eUj(g)g4h. wc4l*g+gpijekeikjk_eVj,g-g5h/ xc5l.g/gTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
115 return hash((as_intptr(self._h_node), as_intptr(g))) 2jdPd6kQd7kRd-k.kQl/k:kRl2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5k^k_k`k{k|k}k#k$kCl%k'kDl(k)kEl*k+kFl(i.cJbKbLbMb#c8cVe9c(b7bXb3c8i4iAifb;c@hSdTdXjYj6exj9f!fFhV ]bSl#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _bTl(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |bUl,f-f^hYdZd3j4j!eAj.f/fIhZ }bVl:f;f_h0d1d5j6j#eBj=f?fJh0 ~bWl@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 ccXl_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dcYl}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 ecZlcgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fc0lgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gc1lkglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 ic2lsgtgSfdi,d-d.j/j,eJjugvgTh! jc3lwgxgoiheiegkhk^eUj(g)g4h. wc4l*g+gpijekeikjk_eVj,g-g5h/ xc5l.g/gTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf
117 @property
118 def type(self) -> driver.CUgraphNodeType | None:
119 """Return the CUDA graph node type.
121 Returns
122 -------
123 CUgraphNodeType or None
124 The node type enum value, or None for the entry node.
125 """
126 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2glhliljlklllmlnlolplqlrlsltlulvlwlxlylzl;c
127 if node == NULL: 2glhliljlklllmlnlolplqlrlsltlulvlwlxlylzl;c
128 return None 2gl;c
129 cdef cydriver.CUgraphNodeType node_type
130 with nogil: 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl
131 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl
132 return driver.CUgraphNodeType(<int>node_type) 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl
134 @property
135 def graph(self) -> GraphDefinition:
136 """Return the GraphDefinition this node belongs to."""
137 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 26l7l8l9l!l#l
139 @property
140 def handle(self) -> driver.CUgraphNode:
141 """Return the underlying driver CUgraphNode handle.
143 Returns None for the entry node.
144 """
145 return as_py(self._h_node) 2;cMf=c?c9i!ivd5igfhfJfG Yb~kifjf
147 @property
148 def is_valid(self) -> bool:
149 """Whether this node is valid (not destroyed).
151 Returns ``False`` after :meth:`destroy` has been called.
152 """
153 return as_intptr(self._h_node) != 0 2;c
155 def destroy(self) -> None:
156 """Destroy this node and remove all its edges from the parent graph.
158 After this call, :attr:`is_valid` returns ``False`` and the node
159 cannot be re-added to any graph. Safe to call on an
160 already-destroyed node (no-op).
161 """
162 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2uj(b7bXb;c
163 if node == NULL: 2uj(b7bXb;c
164 return 2;c
166 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2uj(b7bXb;c
167 invalidate_graph_node(self._h_node) 2uj(b7bXb;c
168 with nogil: 2uj(b7bXb;c
169 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2uj(b7bXb;c
171 @property
172 def pred(self) -> AdjacencySetProxy:
173 """A mutable set-like view of this node's predecessors."""
174 return AdjacencySetProxy(self, False) 25e`egl2i'c(c)c;gijjj$lkjljmjnj%l'l(l)lojpjqjrjsjtj*l+l#k$kCl%k'kDl.c/c4iAifb;c
176 @pred.setter
177 def pred(self, value: Iterable[GraphNode]) -> None:
178 p = AdjacencySetProxy(self, False) 2XbAi
179 p.clear() 2XbAi
180 p.update(value) 2XbAi
182 @property
183 def succ(self) -> AdjacencySetProxy:
184 """A mutable set-like view of this node's successors."""
185 return AdjacencySetProxy(self, True) 2gl2iijjjkjljmjnjojpjqjrjsjtj(k)kEl*k+kFl7b3cKk8i4iAifbLk;cMk
187 @succ.setter
188 def succ(self, value: Iterable[GraphNode]) -> None:
189 s = AdjacencySetProxy(self, True) 22iAi
190 s.clear() 22iAi
191 s.update(value) 22iAi
193 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
194 """Add a kernel launch node depending on this node.
196 Parameters
197 ----------
198 config : LaunchConfig
199 Launch configuration (grid, block, shared memory, etc.)
200 kernel : Kernel
201 The kernel to launch.
202 *args
203 Kernel arguments.
205 Returns
206 -------
207 KernelNode
208 A new KernelNode representing the kernel launch.
209 """
210 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
212 def join(self, *nodes: GraphNode) -> EmptyNode:
213 """Create an empty node that depends on this node and all given nodes.
215 This is used to synchronize multiple branches of execution.
217 Parameters
218 ----------
219 *nodes : GraphNode
220 Additional nodes to depend on.
222 Returns
223 -------
224 EmptyNode
225 A new EmptyNode that depends on all input nodes.
226 """
227 return GN_join(self, nodes) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
229 def allocate(self, size_t size, *, device: Device | int | None = None,
230 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
231 peer_access: list[Device | int] | None = None) -> AllocNode:
232 """Add a memory allocation node depending on this node.
234 Parameters
235 ----------
236 size : int
237 Number of bytes to allocate.
238 device : int or Device, optional
239 The device on which to allocate memory. If None (default),
240 uses the current CUDA context's device.
241 memory_type : GraphMemoryType or str, optional
242 Type of memory to allocate. One of:
244 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory,
245 optimal for GPU kernels.
246 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from
247 both host and device. Useful for graphs containing host
248 callback nodes. Note: may not be supported on all
249 systems/drivers.
250 - ``GraphMemoryType.MANAGED``: Managed/unified memory that
251 automatically migrates between host and device. Useful for
252 mixed host/device access patterns.
254 peer_access : list of int or Device, optional
255 List of devices that should have read-write access to the
256 allocated memory. If None (default), only the allocating
257 device has access.
259 Returns
260 -------
261 AllocNode
262 A new AllocNode representing the allocation. Access the allocated
263 device pointer via the dptr property.
265 Notes
266 -----
267 IPC (inter-process communication) is not supported for graph
268 memory allocation nodes per CUDA documentation.
269 """
270 return GN_alloc(self, size, device, memory_type, peer_access) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
272 def deallocate(self, dptr: int) -> FreeNode:
273 """Add a memory free node depending on this node.
275 Parameters
276 ----------
277 dptr : int
278 Device pointer to free (typically from AllocNode.dptr).
280 Returns
281 -------
282 FreeNode
283 A new FreeNode representing the free operation.
284 """
285 return GN_free(self, <cydriver.CUdeviceptr>dptr) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
287 def memset(
288 self,
289 dst: Buffer | int,
290 value,
291 size_t width,
292 size_t height=1,
293 size_t pitch=0,
294 *,
295 dst_owner=None,
296 ) -> MemsetNode:
297 """Add a memset node depending on this node.
299 Parameters
300 ----------
301 dst : Buffer or int
302 Destination. When ``dst`` is a :class:`Buffer`, the underlying
303 allocation is retained for the graph's lifetime. A raw pointer
304 (``int``) is used as-is; the caller must keep the underlying memory
305 alive, or supply ``dst_owner`` to have the graph retain it.
306 value : int or buffer-protocol object
307 Fill value. int for 1-byte fill (range [0, 256)),
308 or buffer-protocol object of 1, 2, or 4 bytes.
309 width : int
310 Width of the row in elements.
311 height : int, optional
312 Number of rows (default 1).
313 pitch : int, optional
314 Pitch of destination in bytes (default 0, unused if height is 1).
315 dst_owner : object, optional
316 Object retained for the graph's lifetime when ``dst`` is a raw
317 pointer. A :class:`Buffer` owner retains its underlying allocation,
318 not the wrapper. Must not be passed when ``dst`` is a :class:`Buffer`.
320 Returns
321 -------
322 MemsetNode
323 A new MemsetNode representing the memset operation.
325 Raises
326 ------
327 ValueError
328 If ``dst_owner`` is given together with a :class:`Buffer` ``dst``.
329 """
330 cdef cydriver.CUdeviceptr c_dst
331 cdef unsigned int val
332 cdef unsigned int elem_size
333 cdef OpaqueHandle dst_slot_owner
334 dst_slot_owner = _resolve_memcpy_operand(dst, dst_owner, "dst", &c_dst) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c7f1f2fclel8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
335 val, elem_size = _parse_fill_value(value) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c7f1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
336 return GN_memset(self, c_dst, dst_slot_owner, val, elem_size, width, height, pitch) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
338 def memcpy(
339 self,
340 dst: Buffer | int,
341 src: Buffer | int,
342 size_t size,
343 *,
344 dst_owner=None,
345 src_owner=None,
346 ) -> MemcpyNode:
347 """Add a memcpy node depending on this node.
349 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
350 auto-detected via the driver, so both device and pinned host
351 pointers are supported.
353 Parameters
354 ----------
355 dst : Buffer or int
356 Destination (device or pinned host). When a :class:`Buffer` is given,
357 the underlying allocation is retained for the graph's lifetime. A raw
358 pointer (``int``) is used as-is; the caller must keep the underlying
359 memory alive, or supply ``dst_owner`` to have the graph retain it.
360 src : Buffer or int
361 Source (device or pinned host). Same retention rules as ``dst``;
362 use ``src_owner`` for a raw pointer.
363 size : int
364 Number of bytes to copy.
365 dst_owner : object, optional
366 Object retained for the graph's lifetime when ``dst`` is a raw
367 pointer. A :class:`Buffer` owner retains its underlying allocation.
368 Must not be passed when ``dst`` is a :class:`Buffer`.
369 src_owner : object, optional
370 Object retained for the graph's lifetime when ``src`` is a raw
371 pointer. A :class:`Buffer` owner retains its underlying allocation.
372 Must not be passed when ``src`` is a :class:`Buffer`.
374 Returns
375 -------
376 MemcpyNode
377 A new MemcpyNode representing the copy operation.
379 Raises
380 ------
381 ValueError
382 If ``dst_owner`` or ``src_owner`` is given together with a
383 :class:`Buffer` ``dst`` or ``src`` respectively.
384 """
385 cdef cydriver.CUdeviceptr c_dst
386 cdef cydriver.CUdeviceptr c_src
387 cdef OpaqueHandle dst_slot_owner, src_slot_owner
388 dst_slot_owner = _resolve_memcpy_operand(dst, dst_owner, "dst", &c_dst) 2c d e f : ; = ? @ [ rdAl9ksdtdud!k:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
389 src_slot_owner = _resolve_memcpy_operand(src, src_owner, "src", &c_src) 2c d e f : ; = ? @ [ rd9ksdtdud!k:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
390 return GN_memcpy(self, c_dst, dst_slot_owner, c_src, src_slot_owner, size) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
392 def embed(self, child: GraphDefinition) -> ChildGraphNode:
393 """Add a child graph node depending on this node.
395 Embeds a clone of the given graph definition as a sub-graph node.
396 The child graph must not contain allocation, free, or conditional
397 nodes.
399 Parameters
400 ----------
401 child : GraphDefinition
402 The graph definition to embed (will be cloned).
404 Returns
405 -------
406 ChildGraphNode
407 A new ChildGraphNode representing the embedded sub-graph.
408 """
409 return GN_embed(self, <GraphDefinition>child) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
411 def record(self, event: Event) -> EventRecordNode:
412 """Add an event record node depending on this node.
414 Parameters
415 ----------
416 event : Event
417 The event to record.
419 Returns
420 -------
421 EventRecordNode
422 A new EventRecordNode representing the event record operation.
423 """
424 return GN_record_event(self, <Event>event) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
426 def wait(self, event: Event) -> EventWaitNode:
427 """Add an event wait node depending on this node.
429 Parameters
430 ----------
431 event : Event
432 The event to wait for.
434 Returns
435 -------
436 EventWaitNode
437 A new EventWaitNode representing the event wait operation.
438 """
439 return GN_wait_event(self, <Event>event) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
441 def callback(self, fn, *, user_data=None) -> object:
442 """Add a host callback node depending on this node.
444 The callback runs on the host CPU when the graph reaches this node.
445 Two modes are supported:
447 - **Python callable**: Pass any callable. The GIL is acquired
448 automatically. The callable must take no arguments; use closures
449 or ``functools.partial`` to bind state.
450 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance.
451 The function receives a single ``void*`` argument (the
452 ``user_data``). The caller must keep the ctypes wrapper alive
453 for the lifetime of the graph.
455 .. warning::
457 Callbacks must not call CUDA API functions. Doing so may
458 deadlock or corrupt driver state.
460 Parameters
461 ----------
462 fn : callable or ctypes function pointer
463 The callback function.
464 user_data : int or bytes-like, optional
465 Only for ctypes function pointers. If ``int``, passed as a raw
466 pointer (caller manages lifetime). If bytes-like, the data is
467 copied and its lifetime is tied to the graph.
469 Returns
470 -------
471 HostCallbackNode
472 A new HostCallbackNode representing the callback.
473 """
474 return GN_callback(self, fn, user_data) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
476 def if_then(self, condition: GraphCondition) -> IfNode:
477 """Add an if-conditional node depending on this node.
479 The body graph executes only when the condition evaluates to
480 a non-zero value at runtime.
482 Parameters
483 ----------
484 condition : GraphCondition
485 GraphCondition from :meth:`GraphDefinition.create_condition`.
487 Returns
488 -------
489 IfNode
490 A new IfNode with one branch accessible via ``.then``.
491 """
492 return _make_conditional_node( 2Rd?g^g|gbhfhjhvjmhJbhf!f/b'fjb+f/f?fnb^fxdBdEb|fldPfQfRfbg*bfgm Q jgngrgvg0bzg| DgHgLgbbPg[c`csbUg+cmfnfofYgUb2gh D 6gCf#grhGf)g-gsfwfvhzh
493 self, condition,
494 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2Rd?g^g|gbhfhjhvjmhJbhf!f/b'fjb+f/f?fnb^fxdBdEb|fldPfQfRfbg*bfgm Q jgngrgvg0bzg| DgHgLgbbPg[c`csbUg+cmfnfofYgUb2gh D 6gCf#grhGf)g-gsfwfvhzh
496 def if_else(self, condition: GraphCondition) -> IfElseNode:
497 """Add an if-else conditional node depending on this node.
499 Two body graphs: the first executes when the condition is
500 non-zero, the second when it is zero.
502 Parameters
503 ----------
504 condition : GraphCondition
505 GraphCondition from :meth:`GraphDefinition.create_condition`.
507 Returns
508 -------
509 IfElseNode
510 A new IfElseNode with branches accessible via
511 ``.then`` and ``.else_``.
512 """
513 return _make_conditional_node( 2=g]g{gahehihnhKbgf9f.b%fib*f.f=fmb]fwdAdDb{fkdNfOfPfag)begl P igmgqgugZbyg{ CgGgKgabOg@c_crbTg*ckflfmfXgTb1gg C 5gBf!gqhFf(g,grfvfuhyh
514 self, condition,
515 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2=g]g{gahehihnhKbgf9f.b%fib*f.f=fmb]fwdAdDb{fkdNfOfPfag)begl P igmgqgugZbyg{ CgGgKgabOg@c_crbTg*ckflfmfXgTb1gg C 5gBf!gqhFf(g,grfvfuhyh
517 def while_loop(self, condition: GraphCondition) -> WhileNode:
518 """Add a while-loop conditional node depending on this node.
520 The body graph executes repeatedly while the condition
521 evaluates to a non-zero value.
523 Parameters
524 ----------
525 condition : GraphCondition
526 GraphCondition from :meth:`GraphDefinition.create_condition`.
528 Returns
529 -------
530 WhileNode
531 A new WhileNode with body accessible via ``.body``.
532 """
533 return _make_conditional_node( 2[g`g~gdhhhlhphMbVejf$f;b)flb-f;f[fpb`fzdDdGb~fndOfRfdg,bhgo S lgpgtgSfxg2bBg~ FgJgNgdbRg^c|cubWg-clfof0gWb4gj F 8gEf%gpfthIf+g/gufyfxhBh
534 self, condition,
535 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2[g`g~gdhhhlhphMbVejf$f;b)flb-f;f[fpb`fzdDdGb~fndOfRfdg,bhgo S lgpgtgSfxg2bBg~ FgJgNgdbRg^c|cubWg-clfof0gWb4gj F 8gEf%gpfthIf+g/gufyfxhBh
537 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
538 """Add a switch conditional node depending on this node.
540 The condition value selects which branch to execute. If the
541 value is out of range, no branch executes.
543 Parameters
544 ----------
545 condition : GraphCondition
546 GraphCondition from :meth:`GraphDefinition.create_condition`.
547 count : int
548 Number of switch cases (branches).
550 Returns
551 -------
552 SwitchNode
553 A new SwitchNode with branches accessible via ``.branches``.
554 """
555 return _make_conditional_node( 2@g_g}gchghkhwjohLbif#f:b(fkb,f:f@fob_fydCdFb}fmdNfQfcg+bggn R kgogsgSfwg1bAg} EgIgMgcbQg]c{ctbVg,ckfnfZgVb3gi E 7gDf$gpfshHf*g.gtfxfwhAh
556 self, condition,
557 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2@g_g}gchghkhwjohLbif#f:b(fkb,f:f@fob_fydCdFb}fmdNfQfcg+bggn R kgogsgSfwg1bAg} EgIgMgcbQg]c{ctbVg,ckfnfZgVb3gi E 7gDf$gpfshHf*g.gtfxfwhAh
560cdef inline ConditionalNode _make_conditional_node(
561 GraphNode pred,
562 GraphCondition condition,
563 cydriver.CUgraphConditionalNodeType cond_type,
564 unsigned int size,
565 type node_cls):
566 if not isinstance(condition, GraphCondition): 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
567 raise TypeError(
568 f"condition must be a GraphCondition object (from "
569 f"GraphDefinition.create_condition()), got {type(condition).__name__}")
570 cdef cydriver.CUgraphNodeParams params
571 cdef cydriver.CUgraphNode new_node = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
573 c_memset(¶ms, 0, sizeof(params)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
574 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
575 params.conditional.handle = condition._c_handle 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
576 params.conditional.type = cond_type 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
577 params.conditional.size = size 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
579 cdef cydriver.CUcontext ctx = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
580 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
581 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
582 cdef cydriver.CUgraphNode* deps = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
583 cdef size_t num_deps = 0 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
585 if pred_node != NULL: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
586 deps = &pred_node
587 num_deps = 1
589 with nogil: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
590 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
591 params.conditional.ctx = ctx 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
593 with nogil: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
594 IF CUDA_CORE_BUILD_MAJOR >= 13:
595 HANDLE_RETURN(cydriver.cuGraphAddNode( 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
596 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
597 ELSE:
598 HANDLE_RETURN(cydriver.cuGraphAddNode(
599 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
601 cdef list branch_list = [] 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
602 cdef unsigned int i
603 cdef cydriver.CUgraph bg
604 cdef GraphHandle h_branch
605 for i in range(size): 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
606 bg = params.conditional.phGraph_out[i] 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
607 h_branch = create_graph_handle_ref(bg, h_graph) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
608 branch_list.append(GraphDefinition._from_handle(h_branch)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
609 cdef tuple branches = tuple(branch_list) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
611 cdef ConditionalNode n = node_cls.__new__(node_cls) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
612 n._h_node = create_graph_node_handle(new_node, h_graph) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
613 n._condition = condition 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
614 n._cond_type = cond_type 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
615 n._branches = branches 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
617 return _registered(n) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh
619cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
620 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c
622 # Sentinel: virtual node to represent the graph entry point.
623 if node == NULL: 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c
624 n = GraphNode.__new__(GraphNode)
625 (<GraphNode>n)._h_node = h_node
626 return n
628 # Return a registered object or create and register a new one.
629 registered = _node_registry.get(<uintptr_t>h_node.get()) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c
630 if registered is not None: 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c
631 return <GraphNode>registered 2PdQdRd-k.k/k:k2i'c(c)c;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.c/c9c(b7bXb3c8i4iAifb;c
632 else:
633 return _registered(GN_create_impl(h_node)) 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb
636cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
637 cdef cydriver.CUgraphNodeType node_type
638 with nogil: 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb
639 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb
641 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb
642 return EmptyNode._create_impl(h_node) 2+i,ipj
643 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
644 return KernelNode._create_from_driver(h_node) 2Pd6kQd7k8kJbKbLbMb#c8cfb
645 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
646 return AllocNode._create_from_driver(h_node) 2;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojqjrjsjtj
647 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
648 return FreeNode._create_from_driver(h_node)
649 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
650 return MemsetNode._create_from_driver(h_node) 2fb
651 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
652 return MemcpyNode._create_from_driver(h_node)
653 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
654 return ChildGraphNode._create_from_driver(h_node) 28c
655 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
656 return EventRecordNode._create_from_driver(h_node)
657 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
658 return EventWaitNode._create_from_driver(h_node)
659 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
660 return HostCallbackNode._create_from_driver(h_node)
661 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
662 return ConditionalNode._create_from_driver(h_node) 2Ve
663 else:
664 n = GraphNode.__new__(GraphNode)
665 (<GraphNode>n)._h_node = h_node
666 return n
669cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args):
670 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params
671 cdef cydriver.CUgraphNode new_node = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
672 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
673 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
674 cdef cydriver.CUgraphNode* deps = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
675 cdef size_t num_deps = 0 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
676 cdef OpaqueHandle owner
678 if pred_node != NULL: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
679 deps = &pred_node 2PdQd;gyczcAcBcCcDc9c(b7bXb3cfb:g
680 num_deps = 1 2PdQd;gyczcAcBcCcDc9c(b7bXb3cfb:g
682 node_params.kern = as_cu(ker._h_kernel) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
683 node_params.func = <cydriver.CUfunction>NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
684 node_params.gridDimX = conf.grid[0] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
685 node_params.gridDimY = conf.grid[1] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
686 node_params.gridDimZ = conf.grid[2] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
687 node_params.blockDimX = conf.block[0] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
688 node_params.blockDimY = conf.block[1] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
689 node_params.blockDimZ = conf.block[2] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
690 node_params.sharedMemBytes = conf.shmem_size 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
691 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
692 node_params.extra = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
693 node_params.ctx = <cydriver.CUcontext>NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
695 with nogil: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
696 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
697 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
699 # Slot 0 keeps the kernel loaded; slot 1 keeps the Python kernel-argument
700 # objects (notably device Buffers) alive for the graph's lifetime. The
701 # driver copies argument values into the node at add time but does not own
702 # the device memory they reference.
703 owner = ker._h_kernel 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
704 try: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
705 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
706 kernel_args = ker_args.kernel_args 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
707 if kernel_args is not None: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
708 owner = make_opaque_py(kernel_args) 2PdChQdDhEh9c(b7bXb3cfb:g
709 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 1, owner)) 2PdChQdDhEh9c(b7bXb3cfb:g
710 except:
711 cydriver.cuGraphDestroyNode(new_node) # best effort
712 raise
714 return _registered(KernelNode._create_with_params( 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
715 create_graph_node_handle(new_node, h_graph), 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
716 conf.grid, conf.block, conf.shmem_size, 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi
717 ker._h_kernel))
720cdef inline EmptyNode GN_join(GraphNode self, tuple nodes):
721 cdef vector[cydriver.CUgraphNode] deps
722 cdef cydriver.CUgraphNode new_node = NULL 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
723 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
724 cdef GraphNode other
725 cdef cydriver.CUgraphNode* deps_ptr = NULL 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
726 cdef size_t num_deps = 0 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
727 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
729 if pred_node != NULL: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
730 deps.push_back(pred_node) 2IdJdKdLdMdNd.c
731 for other in nodes: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
732 if as_cu((<GraphNode>other)._h_node) != NULL: 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
733 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
735 num_deps = deps.size() 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
736 if num_deps > 0: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
737 deps_ptr = deps.data() 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe.c9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
739 with nogil: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
740 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
741 &new_node, as_cu(h_graph), deps_ptr, num_deps))
743 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_
746cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device,
747 object memory_type, object peer_access):
748 cdef int device_id
749 cdef cydriver.CUdevice dev
751 if device is None: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
752 with nogil: 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
753 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
754 device_id = <int>dev 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
755 else:
756 device_id = getattr(device, 'device_id', device) 20i1i
758 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
759 cdef cydriver.CUgraphNode new_node = NULL 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
760 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
761 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
762 cdef cydriver.CUgraphNode* deps = NULL 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
763 cdef size_t num_deps = 0 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
765 if pred_node != NULL: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
766 deps = &pred_node 25e6hId7h9hVf!hWf#hJd$h%hKd'h(hXf)hYf*hZf+h0f,hLd-h.hMd/h:hNd;h
767 num_deps = 1 25e6hId7h9hVf!hWf#hJd$h%hKd'h(hXf)hYf*hZf+h0f,hLd-h.hMd/h:hNd;h
769 cdef vector[cydriver.CUmemAccessDesc] access_descs
770 cdef int peer_id
771 cdef list peer_ids = [] 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
773 if peer_access is not None: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
774 for peer_dev in peer_access:
775 peer_id = getattr(peer_dev, 'device_id', peer_dev)
776 peer_ids.append(peer_id)
777 access_descs.push_back(cydriver.CUmemAccessDesc_st(
778 cydriver.CUmemLocation_st(
779 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE,
780 peer_id
781 ),
782 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
783 ))
785 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
787 c_memset(&alloc_params, 0, sizeof(alloc_params)) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
788 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
789 alloc_params.bytesize = size 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
791 check_str_enum(memory_type_str, GraphMemoryType) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
792 if memory_type_str == "device": 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
793 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
794 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
795 alloc_params.poolProps.location.id = device_id 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
796 elif memory_type_str == "host": 2VfWfXfYfZf0f
797 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
798 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
799 alloc_params.poolProps.location.id = 0
800 elif memory_type_str == "managed": 2VfWfXfYfZf0f
801 IF CUDA_CORE_BUILD_MAJOR >= 13:
802 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2VfWfXfYfZf0f
803 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2VfWfXfYfZf0f
804 alloc_params.poolProps.location.id = device_id 2VfWfXfYfZf0f
805 ELSE:
806 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
808 if access_descs.size() > 0: 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
809 alloc_params.accessDescs = access_descs.data()
810 alloc_params.accessDescCount = access_descs.size()
812 with nogil: 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
813 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
814 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
816 return _registered(AllocNode._create_with_params( 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
817 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
818 device_id, memory_type_str, tuple(peer_ids))) 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c
821cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
822 cdef cydriver.CUgraphNode new_node = NULL 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
823 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
824 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
825 cdef cydriver.CUgraphNode* deps = NULL 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
826 cdef size_t num_deps = 0 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
828 if pred_node != NULL: 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
829 deps = &pred_node 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
830 num_deps = 1 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
832 with nogil: 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
833 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
834 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
836 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf
839cdef inline OpaqueHandle _buffer_slot_owner(Buffer buf, str label):
840 """Copy a Buffer's device-pointer handle into a graph slot owner."""
841 cdef OpaqueHandle slot_owner
842 if not buf._h_ptr: 2rd9ksdtdud!k:cOd1f2fclel8f
843 raise ValueError(f"{label} Buffer has no active allocation") 2!kclel
844 slot_owner = buf._h_ptr 2rd9ksdtdud:cOd1f2f8f
845 return slot_owner 2rd9ksdtdud:cOd1f2f8f
848cdef inline OpaqueHandle _resolve_memcpy_operand(
849 object operand, object owner, str side, cydriver.CUdeviceptr* out_ptr):
850 """Resolve a memcpy/memset operand to a pointer and optional slot owner.
852 ``operand`` is a :class:`Buffer` or a raw integer address; its device
853 pointer is written to ``out_ptr``. For a :class:`Buffer` operand, returns an
854 owner that retains the underlying allocation (not the wrapper). For a raw
855 pointer, returns an owner built from ``owner`` (or an empty handle when
856 ``owner`` is ``None``).
858 Raises
859 ------
860 ValueError
861 If ``operand`` is a :class:`Buffer` and ``owner`` is not ``None``.
862 If a :class:`Buffer` operand or ``*_owner`` has no active allocation.
863 """
864 cdef Buffer buf
866 if isinstance(operand, Buffer): 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7frdAl9ksdtdud!k:cOd1f2fclel8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c
867 if owner is not None: 2rdAl9ksdtdud:c1f2fel
868 raise ValueError( 2Al9k
869 f"{side}_owner cannot be used when {side} is a Buffer" 2Al9k
870 )
871 buf = operand 2rd9ksdtdud:c1f2fel
872 slot_owner = _buffer_slot_owner(buf, side) 2rd9ksdtdud:c1f2fel
873 out_ptr[0] = as_cu(buf._h_ptr) 2rd9ksdtdud:c1f2f
874 return slot_owner 2rd9ksdtdud:c1f2f
875 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!k:cOdcl8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c
876 if owner is None: 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!k:cOdcl8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c
877 return OpaqueHandle() 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!kfb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c
878 if isinstance(owner, Buffer): 2!k:cOdcl8fWe
879 return _buffer_slot_owner(owner, f"{side}_owner") 2!k:cOdcl8f
880 return make_opaque_py(owner) 2We
883cdef inline MemsetNode GN_memset(
884 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner,
885 unsigned int val, unsigned int elem_size,
886 size_t width, size_t height, size_t pitch):
887 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params
888 cdef cydriver.CUgraphNode new_node = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
889 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
890 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
891 cdef cydriver.CUgraphNode* deps = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
892 cdef size_t num_deps = 0 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
894 if pred_node != NULL: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
895 deps = &pred_node 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2cfb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
896 num_deps = 1 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2cfb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
898 cdef cydriver.CUcontext ctx = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
899 with nogil: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
900 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
902 c_memset(&memset_params, 0, sizeof(memset_params)) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
903 memset_params.dst = c_dst 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
904 memset_params.value = val 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
905 memset_params.elementSize = elem_size 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
906 memset_params.width = width 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
907 memset_params.height = height 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
908 memset_params.pitch = pitch 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
910 with nogil: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
911 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
912 &new_node, as_cu(h_graph), deps, num_deps,
913 &memset_params, ctx))
915 # Retain the destination allocation for the graph's lifetime (slot 0). Roll
916 # the node back if slot attachment fails, so it cannot outlive an
917 # unretained allocation.
918 if dst_owner: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
919 try: 21f2f8f
920 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, dst_owner)) 21f2f8f
921 except:
922 cydriver.cuGraphDestroyNode(new_node) # best effort
923 raise
925 return _registered(MemsetNode._create_with_params( 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
926 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c
927 val, elem_size, width, height, pitch))
930cdef inline MemcpyNode GN_memcpy(
931 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner,
932 cydriver.CUdeviceptr c_src, OpaqueHandle src_owner, size_t size):
933 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
934 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
935 cdef cydriver.CUresult ret
936 with nogil: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
937 ret = cydriver.cuPointerGetAttribute( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
938 &dst_mem_type,
939 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
940 c_dst)
941 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
942 HANDLE_RETURN(ret)
943 ret = cydriver.cuPointerGetAttribute( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
944 &src_mem_type,
945 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
946 c_src)
947 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
948 HANDLE_RETURN(ret)
950 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
951 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
953 cdef cydriver.CUDA_MEMCPY3D params
954 c_memset(¶ms, 0, sizeof(params)) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
956 params.srcMemoryType = c_src_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
957 params.dstMemoryType = c_dst_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
958 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
959 params.srcHost = <const void*><uintptr_t>c_src
960 else:
961 params.srcDevice = c_src 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
962 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
963 params.dstHost = <void*><uintptr_t>c_dst
964 else:
965 params.dstDevice = c_dst 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
966 params.WidthInBytes = size 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
967 params.Height = 1 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
968 params.Depth = 1 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
970 cdef cydriver.CUgraphNode new_node = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
971 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
972 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
973 cdef cydriver.CUgraphNode* deps = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
974 cdef size_t num_deps = 0 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
976 if pred_node != NULL: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
977 deps = &pred_node 1cdef:;=?@[GVWXYZ012B34q6bzAxlmnor789!K#$%'L(w)*k+auvsghijp,N-]O./HI^_
978 num_deps = 1 1cdef:;=?@[GVWXYZ012B34q6bzAxlmnor789!K#$%'L(w)*k+auvsghijp,N-]O./HI^_
980 cdef cydriver.CUcontext ctx = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
981 with nogil: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
982 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
983 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
984 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
986 # Retain operand allocations for the graph's lifetime (dst -> slot 0, src ->
987 # slot 1). Roll the node back if slot attachment fails.
988 try: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
989 if dst_owner: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
990 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, dst_owner)) 2rdsdtdud:cOdWe
991 if src_owner: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
992 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 1, src_owner)) 2rdsdtdud:cOdWe
993 except:
994 cydriver.cuGraphDestroyNode(new_node) # best effort
995 raise
997 return _registered(MemcpyNode._create_with_params( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
998 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _
999 c_dst_type, c_src_type))
1002cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def):
1003 cdef cydriver.CUgraphNode new_node = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1004 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1005 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1006 cdef cydriver.CUgraphNode* deps = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1007 cdef size_t num_deps = 0 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1009 if pred_node != NULL: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1010 deps = &pred_node
1011 num_deps = 1
1013 with nogil: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1014 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1015 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
1017 cdef cydriver.CUgraph embedded_graph = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1018 with nogil: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1019 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1020 new_node, &embedded_graph))
1022 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1024 return _registered(ChildGraphNode._create_with_params( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1025 create_graph_node_handle(new_node, h_graph), h_embedded)) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e
1028cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
1029 cdef cydriver.CUgraphNode new_node = NULL 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1030 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1031 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1032 cdef cydriver.CUgraphNode* deps = NULL 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1033 cdef size_t num_deps = 0 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1034 cdef OpaqueHandle owner
1036 if pred_node != NULL: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1037 deps = &pred_node 2seweCeGeKeOeTe/c
1038 num_deps = 1 2seweCeGeKeOeTe/c
1040 with nogil: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1041 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1042 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1044 owner = ev._h_event 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1045 try: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1046 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1047 except:
1048 cydriver.cuGraphDestroyNode(new_node) # best effort
1049 raise
1051 return _registered(EventRecordNode._create_with_params( 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1052 create_graph_node_handle(new_node, h_graph), ev._h_event)) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk
1055cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
1056 cdef cydriver.CUgraphNode new_node = NULL 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1057 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1058 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1059 cdef cydriver.CUgraphNode* deps = NULL 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1060 cdef size_t num_deps = 0 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1061 cdef OpaqueHandle owner
1063 if pred_node != NULL: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1064 deps = &pred_node 28htexeDeHeLePe=h?hUe
1065 num_deps = 1 28htexeDeHeLePe=h?hUe
1067 with nogil: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1068 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1069 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1071 owner = ev._h_event 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1072 try: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1073 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1074 except:
1075 cydriver.cuGraphDestroyNode(new_node) # best effort
1076 raise
1078 return _registered(EventWaitNode._create_with_params( 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1079 create_graph_node_handle(new_node, h_graph), ev._h_event)) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk
1082cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data):
1083 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
1084 cdef cydriver.CUgraphNode new_node = NULL 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1085 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1086 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1087 cdef cydriver.CUgraphNode* deps = NULL 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1088 cdef size_t num_deps = 0 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1089 cdef OpaqueHandle fn_owner, data_owner
1091 if pred_node != NULL: 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1092 deps = &pred_node
1093 num_deps = 1
1095 _resolve_host_callback( 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1096 fn, user_data, &node_params.fn, &node_params.userData,
1097 &fn_owner, &data_owner)
1099 with nogil: 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1100 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1101 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
1103 # Roll the node back if owner attachment fails: an unretained host node
1104 # leaves the driver holding a raw pointer into freed Python memory.
1105 try: 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1106 _attach_host_callback_owners(h_graph, new_node, fn_owner, data_owner) 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1107 except:
1108 cydriver.cuGraphDestroyNode(new_node) # best effort
1109 raise
1111 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1112 return _registered(HostCallbackNode._create_with_params( 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1113 create_graph_node_handle(new_node, h_graph), callable_obj, 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk
1114 node_params.fn, node_params.userData))