Coverage for cuda/core/graph/_graph_node.pyx: 91.96%
460 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5"""GraphNode base class — factory, properties, and builder methods."""
7from __future__ import annotations
9from collections.abc import Iterable
10from typing import TYPE_CHECKING
12from libc.stddef cimport size_t
13from libc.stdint cimport uintptr_t
14from libc.string cimport memset as c_memset
16from libcpp.vector cimport vector
18from cuda.bindings cimport cydriver
20from cuda.core._event cimport Event, Event_check_open
21from cuda.core._kernel_arg_handler cimport ParamHolder
22from cuda.core._launch_config cimport LaunchConfig
23from cuda.core._memory._buffer cimport Buffer, Buffer_check_open
24from cuda.core._memory._location cimport cumemlocation_from_id
25from cuda.core._module cimport Kernel
26from cuda.core.graph._graph_definition cimport (
27 GraphCondition,
28 GraphDefinition,
29 GD_check_valid,
30)
31from cuda.core.graph._subclasses cimport (
32 AllocNode,
33 ChildGraphNode,
34 ConditionalNode,
35 EmptyNode,
36 EventRecordNode,
37 EventWaitNode,
38 FreeNode,
39 HostCallbackNode,
40 IfElseNode,
41 IfNode,
42 KernelNode,
43 MemcpyNode,
44 MemsetNode,
45 SwitchNode,
46 WhileNode,
47)
48from cuda.core._resource_handles cimport (
49 GraphHandle,
50 GraphNodeHandle,
51 OpaqueHandle,
52 PreparedAttachment,
53 as_cu,
54 as_intptr,
55 as_py,
56 create_child_graph_handle,
57 create_graph_node_handle,
58 graph_clone_attachments,
59 graph_commit_attachment,
60 graph_node_get_graph,
61 graph_prepare_attachment,
62 invalidate_child_graph_state,
63 invalidate_graph_node,
64 make_opaque_py,
65)
66from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
68from cuda.core.graph._host_callback cimport (
69 _resolve_host_callback,
70)
72import ctypes as ct
73import weakref
75from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy
76from cuda.core._utils.validators import check_str_enum
77from cuda.core._utils.cuda_utils import driver
78from cuda.core.typing import GraphMemoryType
80if TYPE_CHECKING:
81 from cuda.core._device import Device
83__all__ = ['GraphNode']
85# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object)
86_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary()
89cdef inline GraphNode _registered(GraphNode n):
90 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2?lzewgfmAegm@l8j9jmfIehjijjj.i9dkjJe/iljvfykzkAkBkCkDkKe!jwfxfyfzfpdngEkFkviwixiyizic d e f FbGbHbIbmjnjojcddded+j,j-j|fAi:i@fhmqdLeMeNeAfGkHkxgyg?bQ ccdcecfczgAg@j;i[j[frdOe]jPe^jQe_jBfIkJkBgCg`j@b:jR {jgc|jhc}jic~jjcDgEg=i!dpjRe?iqj@i#drjSe[isj]i]fsdTeUeVeCfKkLkFgGg[bS kclcmcncHgIgak^ibk^ftdckWedkXeekYefkDfMkNkJgKggk]b;jT hkocikpcjkqckkrcLgMglk_imk_fudnkZeok0epk1eqkEfOkPkNgOgrk^bskU tkscuktcvkucwkvcPgQg`i`fvd2e3e4eFfQkRkRgSg_bV wcxcyczcTgUg{i$dtj5e|iuj}i%dvj6e~iwj'jaj'dxj7ebjyj/jgd{fBizjnfSkVgWgXgYgBbCbDbEb)j#j$jTkUk`b@cfdcjAclfUbVbWbXb1b2b3b4bVk8eWkogpg9eXk$bZg0gCiadDiEi,d-d.d/djdBe*f+f?f[c;b%j^cYkof]cwdZk-c5b0bJbBc:l.j*jdj| ;lkdCcqg=b=l}fxd!ergmd0k1k1g2g3g:d;d=d,f-f~fsgtg2k3k4g5g6g(d)d*d(f)fyd:c;cFiGi?d@d[d%b'b(bhdid4kHi]d.f#eugnd5k6k7g8g9g^d_d`d/f:fbd7k$evgod8k9k!g#g$g{d|d}d;f=fejzd%g~dae+dub'g!k#kfjgjag$k{ AjAd%e%k'kGf(k(g)gIiW Dc*g+g7jBjBd'e)k*kHf+k,g-gJiX Ec.g/ggbpfqfIfrfFcGc.cY HcIcJcCjCd(e,k-kJf.k:g;gKiZ Kc=g?g6b7b8b} ~ abbbDjDd)e/k:kKf;k@g[gLi0 Lc]g^gEjEd*e=k?kLf@k_g`gMi1 Mc{g|gFjFd+e[k]kMf^k}g~gNi2 Ncahbh,eC {b|b=c}bhbibsb3 jbkblbGjGd-e_k`kNf{kchdhOi4 OcehfhPiQibecedeeeRifegeheieO _c`c{cKbLbA MbNbObHjHd.e|k}kOf~kghhhSi5 PcihjhjekelemebgcgdgegfgIjId/ealblPfclkhlhTi6 QcmhnhJdCeDeYbEe)b*bo M +b,bJjKd:edlelQfflohphUi7 Rcqhrha u v w g h i j s vbwbxbE F q G H KjLd;eglhlRfilshthVi8 ScuhvhLjMd=ejlklSfllwhxhWi9 TcyhzhMjNd?emlnlTfolAhBhXi! UcChDhggNjOd@eplqlUfrlEhFhYi# VcGhHhmbsftfVfufWcXc/c$ YcZc0cOjPd[esltlWfulIhJhZi% 1cKhLh9b!b#bcbdbebfbPjQd]evlwlXfxlMhNh0i' 2cOhPhQjRd^eylzlYfAlQhRh1i( 3cShThRjSd_eBlClZfDlUhVh2i) 4cWhXh`eD ~bac?cbcnbobtb* pbqbrbSjTd{eElFl0fGlYhZh3i+ 5c0h1h4i5ineoepeqe6ireseteueP |c}c~cPbQbB RbSbTbTjUd|eHlIl1fJl2h3h7i, 6c4h5hvewexeyehgigjgkglgUjVd}eKlLl2fMl6h7h8i- 7c8h9hWdFeGeZbHe-b.bp N /b:bVjXd~eNlOl3fPl!h#h9i. 8c$h%hb x y z k l m n t ybzbAbI J r K L WjYdafQlRl4fSl'h(h!i/ 9c)h*hXjZdbfTlUl5fVl+h,h#i: !c-h.hYj0dcfWlXl6fYl/h:h$i; #c;h=hmgZj1ddfZl0l7f1l?h@h%i= $c[h]h0j2def2l3l8f4l^h_h'i? %c`h{h1j3dff5l6l9f7l|h}h(i@ 'c~hai2j4dgf8l9l!f!lbici)i[ (cdiei3j5dhf#l$l#f%lfigi*i] )chiii4j6dif'l(l$f)ljiki+i^ *climi5j7djf*l+l%f,lnioi,i_ +cpiqi6j8dkf-l.l'f/lrisi-i` ,ctiui
93cdef class GraphNode:
94 """A node in a graph definition.
96 Nodes are created by calling builder methods on GraphDefinition (for
97 entry-point nodes with no dependencies) or on other Nodes (for
98 nodes that depend on a predecessor).
99 """
101 @staticmethod
102 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
103 """Factory: dispatch to the right subclass based on node type."""
104 return GN_create(h_graph, node) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e
106 def __repr__(self) -> str:
107 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2{m
108 if node == NULL: 2{m
109 if self._is_entry and self.is_valid: 2{m
110 return "<GraphNode entry>" 2{m
111 return "<GraphNode destroyed>"
112 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
114 def __eq__(self, other: object) -> bool:
115 if not isinstance(other, GraphNode): 2ldIe@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjn2o3o4o5o6o7o8o9o!o#o$o%o'o(o)oknlnmnnnonpnqn*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpyprnsntnunvnwnxnynznAnBnCnDnzpApBpCpDpEpFpGpHpIpJpKpLpMpNpEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnOpPpQpRpSpTpUpVpWpXpYpZp0p1p2pZn0n1n2n3n4n5n6n7n3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p8n9n!n#n$n%n'n(n)n*n+n+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n{p|p}p~paqbqcqdqeqfqgqhqiqjqkq~naobocodoeofogohoiojokolomolqmqnqoqpqqqrqsqtquqvqwqxqyqzqnooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
116 return NotImplemented 2NmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzq
117 cdef GraphNode o = <GraphNode>other 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
118 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
119 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
120 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
121 and as_intptr(self_graph) == as_intptr(other_graph)) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
123 def __hash__(self) -> int:
124 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2zefmAegmIexmymAqzmAmBqKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmHmImJmKmLmMmkmlmYommnmZoompm0oqmrm1o/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!eyd:c;cFiGi?d@d[d%b'b(bhdid#e$eCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
125 return hash((as_intptr(self._h_node), as_intptr(g))) 2zefmAegmIexmymAqzmAmBqKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmHmImJmKmLmMmkmlmYommnmZoompm0oqmrm1o/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!eyd:c;cFiGi?d@d[d%b'b(bhdid#e$eCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m
127 @property
128 def type(self) -> driver.CUgraphNodeType | None:
129 """Return the CUDA graph node type.
131 Returns
132 -------
133 CUgraphNodeType or None
134 The node type enum value, or None for the entry node.
135 """
136 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2EoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoCc
137 if node == NULL: 2EoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoCc
138 return None 2EoCc
139 cdef cydriver.CUgraphNodeType node_type
140 with nogil: 2FoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo
141 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2FoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo
142 return driver.CUgraphNodeType(<int>node_type) 2ldFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo
144 @property
145 def graph(self) -> GraphDefinition:
146 """Return the GraphDefinition this node belongs to."""
147 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2;t=t?t@t[t]t
149 @property
150 def handle(self) -> driver.CUgraphNode:
151 """Return the underlying driver CUgraphNode handle.
153 Returns None for the entry node.
154 """
155 return as_py(self._h_node) 2Cc+d{ NmOmPmQmRmSmTmUmVmWmXmYmZm0m1m
157 @property
158 def is_valid(self) -> bool:
159 """Whether this node and its graph definition remain valid.
161 Returns ``False`` after :meth:`destroy` has been called.
162 """
163 return ( 2AcUbVbWbXbwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m
164 as_intptr(graph_node_get_graph(self._h_node)) != 0 2AcUbVbWbXbwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m
165 and (self._is_entry or as_intptr(self._h_node) != 0) 2AcwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m
166 )
168 def destroy(self) -> None:
169 """Destroy this node and remove all its edges from the parent graph.
171 After this call, :attr:`is_valid` returns ``False`` and the node
172 cannot be re-added to any graph. Safe to call on an
173 already-destroyed node (no-op).
174 """
175 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
176 cdef PreparedAttachment prepared
177 if self._is_entry or node == NULL: 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
178 return 2Cc
180 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
181 # Allocate the cleanup transaction before asking CUDA to destroy the
182 # node. A failed CUDA call leaves metadata and wrappers unchanged.
183 HANDLE_RETURN(graph_prepare_attachment( 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
184 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared))
185 with nogil: 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
186 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
188 # Publish attachment removal before invalidating graph and node aliases.
189 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
190 invalidate_child_graph_state(h_graph, node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
191 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
192 invalidate_graph_node(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
193 HANDLE_RETURN(cleanup_status) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j
195 @property
196 def pred(self) -> AdjacencySetProxy:
197 """A mutable set-like view of this node's predecessors."""
198 return AdjacencySetProxy(self, False) 2mfvfEo!jcddded+j|flkmk^tnkokpkqk_t`t{t|trksktkukvkwk}t~tkmlmYommnmZogdad*jdj| kdCc
200 @pred.setter
201 def pred(self, value: Iterable[GraphNode]) -> None:
202 p = AdjacencySetProxy(self, False) 2Jbdj
203 p.clear() 2Jbdj
204 p.update(value) 2Jbdj
206 @property
207 def succ(self) -> AdjacencySetProxy:
208 """A mutable set-like view of this node's successors."""
209 return AdjacencySetProxy(self, True) 2Eo!j,j-jlkmknkokpkqkrksktkukvkwkompm0oqmrm1o0bBc:l.j*jdj| ;lkdCcqg=l
211 @succ.setter
212 def succ(self, value: Iterable[GraphNode]) -> None:
213 s = AdjacencySetProxy(self, True) 2!jdj
214 s.clear() 2!jdj
215 s.update(value) 2!jdj
217 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
218 """Add a kernel launch node depending on this node.
220 Clustered and cooperative launch configurations are not currently
221 supported for graph kernel nodes.
223 .. warning::
225 Use caution when a retained kernel argument directly or indirectly
226 owns a graph. Any reference cycle involving the argument and a
227 graph that retains it cannot be broken by Python's cyclic garbage
228 collector. Use a weak reference to break such cycles.
230 Parameters
231 ----------
232 config : LaunchConfig
233 Launch configuration (grid, block, shared memory, etc.)
234 kernel : Kernel
235 The kernel to launch.
236 *args
237 Kernel arguments.
239 Returns
240 -------
241 KernelNode
242 A new KernelNode representing the kernel launch.
243 """
244 GN_check_valid(self) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
245 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
247 def join(self, *nodes: GraphNode) -> EmptyNode:
248 """Create an empty node that depends on this node and all given nodes.
250 This is used to synchronize multiple branches of execution.
252 Parameters
253 ----------
254 *nodes : GraphNode
255 Additional nodes to depend on.
257 Returns
258 -------
259 EmptyNode
260 A new EmptyNode that depends on all input nodes.
261 """
262 return GN_join(self, nodes) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
264 def allocate(self, size_t size, *, device: Device | int | None = None,
265 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
266 peer_access: list[Device | int] | None = None) -> AllocNode:
267 """Add a memory allocation node depending on this node.
269 Parameters
270 ----------
271 size : int
272 Number of bytes to allocate.
273 device : int or Device, optional
274 The device on which to allocate memory. If None (default),
275 uses the current CUDA context's device.
276 memory_type : GraphMemoryType or str, optional
277 Type of memory to allocate. One of:
279 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory,
280 optimal for GPU kernels.
281 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from
282 both host and device. Useful for graphs containing host
283 callback nodes. Note: may not be supported on all
284 systems/drivers.
285 - ``GraphMemoryType.MANAGED``: Managed/unified memory that
286 automatically migrates between host and device. Useful for
287 mixed host/device access patterns.
289 peer_access : list of int or Device, optional
290 List of devices that should have read-write access to the
291 allocated memory. If None (default), only the allocating
292 device has access.
294 Returns
295 -------
296 AllocNode
297 A new AllocNode representing the allocation. Access the allocated
298 device pointer via the dptr property.
300 Notes
301 -----
302 IPC (inter-process communication) is not supported for graph
303 memory allocation nodes per CUDA documentation.
304 """
305 return GN_alloc(self, size, device, memory_type, peer_access) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
307 def deallocate(self, dptr: int) -> FreeNode:
308 """Add a memory free node depending on this node.
310 Parameters
311 ----------
312 dptr : int
313 Device pointer to free (typically from AllocNode.dptr).
315 Returns
316 -------
317 FreeNode
318 A new FreeNode representing the free operation.
319 """
320 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
322 def memset(
323 self,
324 dst: Buffer | int,
325 value,
326 size_t width,
327 size_t height=1,
328 size_t pitch=0,
329 *,
330 dst_owner=None,
331 ) -> MemsetNode:
332 """Add a memset node depending on this node.
334 .. warning::
336 Use caution when a retained operand owner directly or indirectly
337 owns a graph. Any reference cycle involving the owner and a graph
338 that retains it cannot be broken by Python's cyclic garbage
339 collector. Use a weak reference to break such cycles.
341 Parameters
342 ----------
343 dst : Buffer or int
344 Destination. When ``dst`` is a :class:`Buffer`, the underlying
345 allocation is retained for the graph's lifetime. A raw pointer
346 (``int``) is used as-is; the caller must keep the underlying memory
347 alive, or supply ``dst_owner`` to have the graph retain it.
348 value : int or buffer-protocol object
349 Fill value. int for 1-byte fill (range [0, 256)),
350 or buffer-protocol object of 1, 2, or 4 bytes.
351 width : int
352 Width of the row in elements.
353 height : int, optional
354 Number of rows (default 1).
355 pitch : int, optional
356 Pitch of destination in bytes (default 0, unused if height is 1).
357 dst_owner : object, optional
358 Object retained for the graph's lifetime when ``dst`` is a raw
359 pointer. A :class:`Buffer` owner retains its underlying allocation,
360 not the wrapper. Must not be passed when ``dst`` is a :class:`Buffer`.
362 Returns
363 -------
364 MemsetNode
365 A new MemsetNode representing the memset operation.
367 Raises
368 ------
369 ValueError
370 If ``dst_owner`` is given together with a :class:`Buffer` ``dst``.
371 """
372 GN_check_valid(self) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f`m|m?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
373 cdef cydriver.CUdeviceptr c_dst
374 cdef unsigned int val
375 cdef unsigned int elem_size
376 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f`m|m?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
377 dst, dst_owner, "dst", &c_dst)
378 val, elem_size = _parse_fill_value(value) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
379 return GN_memset( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
380 self, c_dst, dst_attachment_owner,
381 val, elem_size, width, height, pitch) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
383 def memcpy(
384 self,
385 dst: Buffer | int,
386 src: Buffer | int,
387 size_t size,
388 *,
389 dst_owner=None,
390 src_owner=None,
391 ) -> MemcpyNode:
392 """Add a memcpy node depending on this node.
394 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
395 auto-detected via the driver, so both device and pinned host
396 pointers are supported.
398 .. warning::
400 Use caution when a retained operand owner directly or indirectly
401 owns a graph. Any reference cycle involving the owner and a graph
402 that retains it cannot be broken by Python's cyclic garbage
403 collector. Use a weak reference to break such cycles.
405 Parameters
406 ----------
407 dst : Buffer or int
408 Destination (device or pinned host). When a :class:`Buffer` is given,
409 the underlying allocation is retained for the graph's lifetime. A raw
410 pointer (``int``) is used as-is; the caller must keep the underlying
411 memory alive, or supply ``dst_owner`` to have the graph retain it.
412 src : Buffer or int
413 Source (device or pinned host). Same retention rules as ``dst``;
414 use ``src_owner`` for a raw pointer.
415 size : int
416 Number of bytes to copy.
417 dst_owner : object, optional
418 Object retained for the graph's lifetime when ``dst`` is a raw
419 pointer. A :class:`Buffer` owner retains its underlying allocation.
420 Must not be passed when ``dst`` is a :class:`Buffer`.
421 src_owner : object, optional
422 Object retained for the graph's lifetime when ``src`` is a raw
423 pointer. A :class:`Buffer` owner retains its underlying allocation.
424 Must not be passed when ``src`` is a :class:`Buffer`.
426 Returns
427 -------
428 MemcpyNode
429 A new MemcpyNode representing the copy operation.
431 Raises
432 ------
433 ValueError
434 If ``dst_owner`` or ``src_owner`` is given together with a
435 :class:`Buffer` ``dst`` or ``src`` respectively.
436 """
437 GN_check_valid(self) 2c d e f Q R S T U V nffd$b,dDoem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
438 cdef cydriver.CUdeviceptr c_dst
439 cdef cydriver.CUdeviceptr c_src
440 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V nffd$b,dDoem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
441 dst, dst_owner, "dst", &c_dst)
442 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V nffd$b,dem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
443 src, src_owner, "src", &c_src)
444 return GN_memcpy( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
445 self, c_dst, dst_attachment_owner,
446 c_src, src_attachment_owner, size) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
448 def embed(self, child: GraphDefinition) -> ChildGraphNode:
449 """Add a child graph node depending on this node.
451 Embeds a clone of the given graph definition as a sub-graph node.
452 The child graph must not contain allocation, free, or conditional
453 nodes.
455 Parameters
456 ----------
457 child : GraphDefinition
458 The graph definition to embed (will be cloned).
460 Returns
461 -------
462 ChildGraphNode
463 A new ChildGraphNode representing the embedded sub-graph.
464 """
465 return GN_embed(self, <GraphDefinition>child) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
467 def record(self, event: Event) -> EventRecordNode:
468 """Add an event record node depending on this node.
470 Parameters
471 ----------
472 event : Event
473 The event to record.
475 Returns
476 -------
477 EventRecordNode
478 A new EventRecordNode representing the event record operation.
479 """
480 return GN_record_event(self, <Event>event) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
482 def wait(self, event: Event) -> EventWaitNode:
483 """Add an event wait node depending on this node.
485 Parameters
486 ----------
487 event : Event
488 The event to wait for.
490 Returns
491 -------
492 EventWaitNode
493 A new EventWaitNode representing the event wait operation.
494 """
495 return GN_wait_event(self, <Event>event) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
497 def callback(self, fn, *, user_data=None) -> object:
498 """Add a host callback node depending on this node.
500 The callback runs on the host CPU when the graph reaches this node.
501 Two modes are supported:
503 - **Python callable**: Pass any callable. The GIL is acquired
504 automatically. The callable must take no arguments; use closures
505 or ``functools.partial`` to bind state.
506 - **ctypes function pointer**: The function receives a single
507 ``void*`` argument (the ``user_data``), and the caller must keep
508 the ctypes wrapper alive for the lifetime of the graph. Its
509 declared prototype must match the driver's ``CUhostFn``
510 (``void (*)(void*)``): ``ctypes.CFUNCTYPE(None, ctypes.c_void_p)``,
511 or ``ctypes.WINFUNCTYPE(None, ctypes.c_void_p)`` on Windows.
513 .. warning::
515 Callbacks must not call CUDA API functions. Doing so may
516 deadlock or corrupt driver state.
518 Use caution when a Python callback retains an object that owns a
519 graph. Any reference cycle involving the callback and a graph that
520 retains it cannot be broken by Python's cyclic garbage collector.
521 Use a weak reference to break such cycles.
523 Parameters
524 ----------
525 fn : callable or ctypes function pointer
526 The callback function.
527 user_data : int or bytes-like, optional
528 Only for ctypes function pointers. If ``int``, passed as a raw
529 pointer (caller manages lifetime). If bytes-like, the data is
530 copied and its lifetime is tied to the graph.
532 Returns
533 -------
534 HostCallbackNode
535 A new HostCallbackNode representing the callback.
537 Raises
538 ------
539 TypeError
540 If ``fn`` is a ctypes function pointer whose declared prototype
541 does not match ``CUhostFn``.
542 ValueError
543 If ``user_data`` is given for a Python callable.
544 """
545 return GN_callback(self, fn, user_data) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
547 def if_then(self, condition: GraphCondition) -> IfNode:
548 """Add an if-conditional node depending on this node.
550 The body graph executes only when the condition evaluates to
551 a non-zero value at runtime.
553 Parameters
554 ----------
555 condition : GraphCondition
556 GraphCondition from :meth:`GraphDefinition.create_condition`.
558 Returns
559 -------
560 IfNode
561 A new IfNode with one branch accessible via ``.then``.
562 """
563 return _make_conditional_node( 2IeygCgGgKgOgSg=jVgBbUb1b)g-gGc;g~ [g`g~gibdhcegeLbhhkedgegfglh*bphh F thxhBhFhXcJhdbNhRhVhobZhoeseQb3hwejgkglg7h.b#hl J (h,h:h@h_h}hcigikioisi
564 self, condition,
565 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2IeygCgGgKgOgSg=jVgBbUb1b)g-gGc;g~ [g`g~gibdhcegeLbhhkedgegfglh*bphh F thxhBhFhXcJhdbNhRhVhobZhoeseQb3hwejgkglg7h.b#hl J (h,h:h@h_h}hcigikioisi
567 def if_else(self, condition: GraphCondition) -> IfElseNode:
568 """Add an if-else conditional node depending on this node.
570 Two body graphs: the first executes when the condition is
571 non-zero, the second when it is zero.
573 Parameters
574 ----------
575 condition : GraphCondition
576 GraphCondition from :meth:`GraphDefinition.create_condition`.
578 Returns
579 -------
580 IfElseNode
581 A new IfElseNode with branches accessible via
582 ``.then`` and ``.else_``.
583 """
584 return _make_conditional_node( 2xgBgFgJgNgRgWgCbVb2b(g,gFc:g} @g_g}ghbchbefeKbghjebgcgdgkh)bohg E shwhAhEhWcIhcbMhQhUhnbYhnerePb2hvehgigjg6h-b!hk I 'h+h/h?h^h|hbifijiniri
585 self, condition,
586 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2xgBgFgJgNgRgWgCbVb2b(g,gFc:g} @g_g}ghbchbefeKbghjebgcgdgkh)bohg E shwhAhEhWcIhcbMhQhUhnbYhnerePb2hvehgigjg6h-b!hk I 'h+h/h?h^h|hbifijiniri
588 def while_loop(self, condition: GraphCondition) -> WhileNode:
589 """Add a while-loop conditional node depending on this node.
591 The body graph executes repeatedly while the condition
592 evaluates to a non-zero value.
594 Parameters
595 ----------
596 condition : GraphCondition
597 GraphCondition from :meth:`GraphDefinition.create_condition`.
599 Returns
600 -------
601 WhileNode
602 A new WhileNode with body accessible via ``.body``.
603 """
604 return _make_conditional_node( 2AgEgIgMgQgUgYgEbXb4bof+g/gJc?gbb^g|gbhlbfheeieObjhmecgfgnh,brhj H vhzhDhggHh0cLhfbPhThXhrb1hqeueTb5hyeiglg9h:b%hn L *h.h=hmg]h{haieiiimiqiui
605 self, condition,
606 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2AgEgIgMgQgUgYgEbXb4bof+g/gJc?gbb^g|gbhlbfheeieObjhmecgfgnh,brhj H vhzhDhggHh0cLhfbPhThXhrb1hqeueTb5hyeiglg9h:b%hn L *h.h=hmg]h{haieiiimiqiui
608 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
609 """Add a switch conditional node depending on this node.
611 The condition value selects which branch to execute. If the
612 value is out of range, no branch executes.
614 Parameters
615 ----------
616 condition : GraphCondition
617 GraphCondition from :meth:`GraphDefinition.create_condition`.
618 count : int
619 Number of switch cases (branches).
621 Returns
622 -------
623 SwitchNode
624 A new SwitchNode with branches accessible via ``.branches``.
625 """
626 return _make_conditional_node( 2zgDgHgLgPgTg?jXgDbWb3b*g.gIc=gab]g{gahkbehdeheNbihlebgegmh+bqhi G uhyhChggGhZcKhebOhShWhqb0hpeteSb4hxehgkg8h/b$hm K )h-h;hmg[h`h~hdihilipiti
627 self, condition,
628 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2zgDgHgLgPgTg?jXgDbWb3b*g.gIc=gab]g{gahkbehdeheNbihlebgegmh+bqhi G uhyhChggGhZcKhebOhShWhqb0hpeteSb4hxehgkg8h/b$hm K )h-h;hmg[h`h~hdihilipiti
631cdef inline ConditionalNode _make_conditional_node(
632 GraphNode pred,
633 GraphCondition condition,
634 cydriver.CUgraphConditionalNodeType cond_type,
635 unsigned int size,
636 type node_cls):
637 GN_check_valid(pred) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
638 if not isinstance(condition, GraphCondition): 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
639 raise TypeError(
640 f"condition must be a GraphCondition object (from "
641 f"GraphDefinition.create_condition()), got {type(condition).__name__}")
642 cdef cydriver.CUgraphNodeParams params
643 cdef cydriver.CUgraphNode new_node = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
645 c_memset(¶ms, 0, sizeof(params)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
646 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
647 params.conditional.handle = condition._c_handle 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
648 params.conditional.type = cond_type 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
649 params.conditional.size = size 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
651 cdef cydriver.CUcontext ctx = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
652 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
653 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
654 cdef cydriver.CUgraphNode* deps = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
655 cdef size_t num_deps = 0 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
657 if pred_node != NULL: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
658 deps = &pred_node
659 num_deps = 1
661 with nogil: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
662 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
663 params.conditional.ctx = ctx 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
665 with nogil: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
666 IF CUDA_CORE_BUILD_MAJOR >= 13:
667 HANDLE_RETURN(cydriver.cuGraphAddNode( 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
668 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
669 ELSE:
670 HANDLE_RETURN(cydriver.cuGraphAddNode(
671 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
673 cdef list branch_list = [] 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
674 cdef unsigned int i
675 cdef cydriver.CUgraph bg
676 cdef GraphHandle h_branch
677 for i in range(size): 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
678 bg = params.conditional.phGraph_out[i] 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
679 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
680 branch_list.append(GraphDefinition._from_handle(h_branch)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
681 cdef tuple branches = tuple(branch_list) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
683 cdef ConditionalNode n = node_cls.__new__(node_cls) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
684 n._h_node = create_graph_node_handle(new_node, h_graph) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
685 n._condition = condition 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
686 n._cond_type = cond_type 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
687 n._branches = branches 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
689 return _registered(n) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui
691cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
692 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e
694 # Sentinel: virtual node to represent the graph entry point.
695 if node == NULL: 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e
696 n = GraphNode.__new__(GraphNode)
697 (<GraphNode>n)._h_node = h_node
698 (<GraphNode>n)._is_entry = True
699 return n
701 # Return a registered object or create and register a new one.
702 registered = _node_registry.get(<uintptr_t>h_node.get()) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e
703 if registered is not None: 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e
704 return <GraphNode>registered 2zeAeIexmymzmAm!jcddded+j,j-j@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdad-c5b0bJbBc.j*jdj| Ccqg=b
705 else:
706 return _registered(GN_create_impl(h_node)) 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e
709cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
710 cdef cydriver.CUgraphNodeType node_type
711 with nogil: 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e
712 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e
714 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e
715 return EmptyNode._create_impl(h_node) 2:j;jsk
716 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
717 return KernelNode._create_from_driver(h_node) 2zefmAegmhmBbCbDbEb`b;b|
718 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
719 return AllocNode._create_from_driver(h_node) 2@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrktkukvkwk
720 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
721 return FreeNode._create_from_driver(h_node)
722 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
723 return MemsetNode._create_from_driver(h_node) 1|
724 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
725 return MemcpyNode._create_from_driver(h_node)
726 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
727 return ChildGraphNode._create_from_driver(h_node) 2)j@cAc[c;b]cwd
728 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
729 return EventRecordNode._create_from_driver(h_node)
730 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
731 return EventWaitNode._create_from_driver(h_node)
732 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
733 return HostCallbackNode._create_from_driver(h_node) 2Ke)j@cAc[c^c]cwd!e:c;c#e$e
734 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
735 return ConditionalNode._create_from_driver(h_node) 2UbVbWbXb1b2b3b4bof
736 else:
737 n = GraphNode.__new__(GraphNode)
738 (<GraphNode>n)._h_node = h_node
739 return n
741cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args):
742 cdef cydriver.CUgraphNode new_node = NULL 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
743 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
744 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
745 cdef cydriver.CUgraphNode* deps = NULL 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
746 cdef size_t num_deps = 0 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
747 cdef OpaqueHandle args_owner
748 cdef PreparedAttachment prepared
750 GN_check_valid(self) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
751 if conf.cluster is not None or conf.is_cooperative: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
752 raise NotImplementedError( 2%g
753 "clustered or cooperative graph kernel nodes are not supported")
755 if pred_node != NULL: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
756 deps = &pred_node 2zeAe|f?b@b[b]b^b_b-c5b0bJbBc| xdzdag
757 num_deps = 1 2zeAe|f?b@b[b]b^b_b-c5b0bJbBc| xdzdag
759 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS(
760 kern=as_cu(ker._h_kernel), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
761 func=<cydriver.CUfunction>NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
762 gridDimX=conf.grid[0], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
763 gridDimY=conf.grid[1], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
764 gridDimZ=conf.grid[2], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
765 blockDimX=conf.block[0], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
766 blockDimY=conf.block[1], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
767 blockDimZ=conf.block[2], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
768 sharedMemBytes=conf.shmem_size, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
769 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
770 extra=NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
771 ctx=<cydriver.CUcontext>NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
772 )
774 # Keep the kernel and argument objects alive because CUDA copies argument
775 # values but does not retain the resources they reference.
776 cdef OpaqueHandle kernel_owner = ker._h_kernel 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
777 kernel_args = ker_args.kernel_args 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
778 if kernel_args is not None: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
779 args_owner = make_opaque_py(kernel_args) 2zewgAeZg0g-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[d7g8g9g!g#g$gzd'gag
780 HANDLE_RETURN(graph_prepare_attachment( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
781 h_graph, kernel_owner, args_owner, &prepared))
783 with nogil: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
784 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
785 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
787 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
789 return _registered(KernelNode._create_with_params( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
790 create_graph_node_handle(new_node, h_graph), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
791 conf.grid, conf.block, conf.shmem_size, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i
792 ker._h_kernel))
795cdef inline EmptyNode GN_join(GraphNode self, tuple nodes):
796 cdef vector[cydriver.CUgraphNode] deps
797 cdef cydriver.CUgraphNode new_node = NULL 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
798 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
799 cdef GraphNode other
800 cdef cydriver.CUgraphNode* deps_ptr = NULL 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
801 cdef size_t num_deps = 0 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
802 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
804 GN_check_valid(self) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
805 if pred_node != NULL: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
806 deps.push_back(pred_node) 29d!d#d$d%d'dgdkd
807 for other in nodes: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
808 GN_check_valid(other) 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBckd%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
809 if as_cu((<GraphNode>other)._h_node) != NULL: 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
810 deps.push_back(as_cu((<GraphNode>other)._h_node)) 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
812 num_deps = deps.size() 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
813 if num_deps > 0: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
814 deps_ptr = deps.data() 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7egd-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
816 with nogil: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
817 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
818 &new_node, as_cu(h_graph), deps_ptr, num_deps))
820 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`
823cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device,
824 object memory_type, object peer_access):
825 cdef int device_id
826 cdef cydriver.CUdevice dev
828 GN_check_valid(self) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
829 if device is None: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
830 with nogil: 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
831 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
832 device_id = <int>dev 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
833 else:
834 device_id = getattr(device, 'device_id', device) 28j9j
836 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
837 cdef cydriver.CUgraphNode new_node = NULL 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
838 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
839 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
840 cdef cydriver.CUgraphNode* deps = NULL 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
841 cdef size_t num_deps = 0 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
843 if pred_node != NULL: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
844 deps = &pred_node 2mf.i9d/i:i@f;i[f=i!d?i@i#d[i]i]f^i^f_i_f`i`f{i$d|i}i%d~iaj'dbj
845 num_deps = 1 2mf.i9d/i:i@f;i[f=i!d?i@i#d[i]i]f^i^f_i_f`i`f{i$d|i}i%d~iaj'dbj
847 cdef vector[cydriver.CUmemAccessDesc] access_descs
848 cdef cydriver.CUmemAccessDesc access_desc
849 cdef int peer_id
850 cdef list peer_ids = [] 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
852 if peer_access is not None: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
853 for peer_dev in peer_access:
854 peer_id = getattr(peer_dev, 'device_id', peer_dev)
855 peer_ids.append(peer_id)
856 access_desc.location = cumemlocation_from_id(
857 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, peer_id)
858 access_desc.flags = cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
859 access_descs.push_back(access_desc)
861 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
863 c_memset(&alloc_params, 0, sizeof(alloc_params)) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
864 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
865 alloc_params.bytesize = size 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
867 check_str_enum(memory_type_str, GraphMemoryType) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
868 if memory_type_str == "device": 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
869 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
870 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
871 alloc_params.poolProps.location.id = device_id 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
872 elif memory_type_str == "host": 2@f[f]f^f_f`f
873 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
874 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
875 alloc_params.poolProps.location.id = 0
876 elif memory_type_str == "managed": 2@f[f]f^f_f`f
877 IF CUDA_CORE_BUILD_MAJOR >= 13:
878 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2@f[f]f^f_f`f
879 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2@f[f]f^f_f`f
880 alloc_params.poolProps.location.id = device_id 2@f[f]f^f_f`f
881 ELSE:
882 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
884 if access_descs.size() > 0: 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
885 alloc_params.accessDescs = access_descs.data()
886 alloc_params.accessDescCount = access_descs.size()
888 with nogil: 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
889 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
890 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
892 return _registered(AllocNode._create_with_params( 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
893 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
894 device_id, memory_type_str, tuple(peer_ids))) 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c
897cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
898 cdef cydriver.CUgraphNode new_node = NULL 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
899 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
900 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
901 cdef cydriver.CUgraphNode* deps = NULL 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
902 cdef size_t num_deps = 0 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
904 GN_check_valid(self) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
905 if pred_node != NULL: 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
906 deps = &pred_node 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
907 num_deps = 1 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
909 with nogil: 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
910 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
911 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
913 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f
916cdef inline OpaqueHandle _buffer_attachment_owner(Buffer buf, str label):
917 """Copy a Buffer's device-pointer handle into an attachment owner."""
918 Buffer_check_open(buf) 2$b,dem-d.d/djmjdBe*f+f`m|m?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
919 # The local is required: Cython permits the DevicePtrHandle -> OpaqueHandle
920 # conversion on assignment, but not directly in a return statement.
921 cdef OpaqueHandle attachment_owner = buf._h_ptr 2$b,dem-d.d/djdBe*f+f?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
922 return attachment_owner 2$b,dem-d.d/djdBe*f+f?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
925cdef inline OpaqueHandle _resolve_memcpy_operand(
926 object operand, object owner, str side,
927 cydriver.CUdeviceptr* out_ptr) except *:
928 """Resolve an operand to a pointer and optional attachment owner.
930 ``operand`` is a :class:`Buffer` or a raw integer address; its device
931 pointer is written to ``out_ptr``. For a :class:`Buffer` operand, returns an
932 owner that retains the underlying allocation (not the wrapper). For a raw
933 pointer, returns an owner built from ``owner`` (or an empty handle when
934 ``owner`` is ``None``).
936 Raises
937 ------
938 ValueError
939 If ``operand`` is a :class:`Buffer` and ``owner`` is not ``None``.
940 If a :class:`Buffer` operand or ``*_owner`` has no active allocation.
941 """
942 cdef Buffer buf
943 cdef OpaqueHandle attachment_owner
945 if isinstance(operand, Buffer): 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$b,dDoem-d.d/djmjdBe*f+f`m|m?f| Cc:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{ W DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c
946 if owner is not None: 2,dDoem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
947 raise ValueError( 2Doem
948 f"{side}_owner cannot be used when {side} is a Buffer" 2Doem
949 )
950 buf = operand 2,dem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
951 attachment_owner = _buffer_attachment_owner(buf, side) 2,dem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
952 out_ptr[0] = as_cu(buf._h_ptr) 2,dem-d.d/djd*f+f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
953 return attachment_owner 2,dem-d.d/djd*f+f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{
954 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$bjmjdBe`m?f| Cc(d)d*d(f)fW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c
955 if owner is None: 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$bjmjdBe`m?f| CcW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c
956 return OpaqueHandle() 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fjm| CcW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c
957 if isinstance(owner, Buffer): 2nffd$bjmjdBe`m?f
958 return _buffer_attachment_owner(owner, f"{side}_owner") 2$bjmjdBe`m?f
959 return make_opaque_py(owner) 2nffd
962cdef inline MemsetNode GN_memset(
963 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner,
964 unsigned int val, unsigned int elem_size,
965 size_t width, size_t height, size_t pitch):
966 cdef cydriver.CUgraphNode new_node = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
967 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
968 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
969 cdef cydriver.CUgraphNode* deps = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
970 cdef size_t num_deps = 0 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
971 cdef PreparedAttachment prepared
973 GN_check_valid(self) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
974 if pred_node != NULL: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
975 deps = &pred_node 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc| CcDcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
976 num_deps = 1 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc| CcDcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
978 cdef cydriver.CUcontext ctx = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
979 with nogil: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
980 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
982 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS(
983 dst=c_dst, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
984 pitch=pitch, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
985 value=val, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
986 elementSize=elem_size, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
987 width=width, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
988 height=height, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
989 )
991 if dst_owner: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
992 HANDLE_RETURN(graph_prepare_attachment( 2*f+f?f,f-f(f)fhdid.f/f:f;f=fub{
993 h_graph, dst_owner, OpaqueHandle(), &prepared))
995 with nogil: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
996 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
997 &new_node, as_cu(h_graph), deps, num_deps,
998 &memset_params, ctx))
1000 if dst_owner: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
1001 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2*f+f?f,f-f(f)fhdid.f/f:f;f=fub{
1003 return _registered(MemsetNode._create_with_params( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
1004 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c
1005 val, elem_size, width, height, pitch))
1008cdef cydriver.CUmemorytype _get_memcpy_memory_type(
1009 cydriver.CUdeviceptr ptr) except *:
1010 cdef unsigned int memory_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1011 cdef cydriver.CUresult ret
1012 with nogil: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1013 ret = cydriver.cuPointerGetAttribute( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1014 &memory_type,
1015 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
1016 ptr)
1017 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1018 HANDLE_RETURN(ret)
1019 return <cydriver.CUmemorytype>memory_type 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1022cdef void _init_memcpy_params(
1023 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t size,
1024 cydriver.CUDA_MEMCPY3D* params, cydriver.CUmemorytype* dst_type,
1025 cydriver.CUmemorytype* src_type) except *:
1026 dst_type[0] = _get_memcpy_memory_type(dst) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1027 src_type[0] = _get_memcpy_memory_type(src) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1029 c_memset(params, 0, sizeof(params[0])) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1030 params.srcMemoryType = src_type[0] 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1031 params.dstMemoryType = dst_type[0] 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1032 if src_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1033 params.srcHost = <void*><uintptr_t>src 2:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{
1034 else:
1035 params.srcDevice = src 2c d e f Q R S T U V nffd$b,d-d.d/djdBeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1036 if dst_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1037 params.dstHost = <void*><uintptr_t>dst 2:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{
1038 else:
1039 params.dstDevice = dst 2c d e f Q R S T U V nffd$b,d-d.d/djdBeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1040 params.WidthInBytes = size 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1041 params.Height = 1 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1042 params.Depth = 1 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1045cdef inline MemcpyNode GN_memcpy(
1046 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner,
1047 cydriver.CUdeviceptr c_src, OpaqueHandle src_owner, size_t size):
1048 cdef cydriver.CUDA_MEMCPY3D params
1049 cdef cydriver.CUmemorytype c_dst_type
1050 cdef cydriver.CUmemorytype c_src_type
1051 _init_memcpy_params( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1052 c_dst, c_src, size, ¶ms, &c_dst_type, &c_src_type)
1054 cdef cydriver.CUgraphNode new_node = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1055 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1056 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1057 cdef cydriver.CUgraphNode* deps = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1058 cdef size_t num_deps = 0 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1059 cdef PreparedAttachment prepared
1061 GN_check_valid(self) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1062 if pred_node != NULL: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1063 deps = &pred_node 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`
1064 num_deps = 1 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`
1066 cdef cydriver.CUcontext ctx = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1067 if dst_owner or src_owner: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1068 HANDLE_RETURN(graph_prepare_attachment( 2nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{
1069 h_graph, dst_owner, src_owner, &prepared))
1071 with nogil: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1072 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1073 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1074 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
1076 if dst_owner or src_owner: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1077 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{
1079 return _registered(MemcpyNode._create_with_params( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1080 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `
1081 c_dst_type, c_src_type))
1084cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def):
1085 cdef cydriver.CUgraphNode new_node = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1086 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1087 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1088 cdef cydriver.CUgraphNode* deps = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1089 cdef size_t num_deps = 0 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1090 cdef cydriver.CUresult rollback_status
1092 GN_check_valid(self) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1093 GD_check_valid(child_def) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1094 if pred_node != NULL: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1095 deps = &pred_node 2kd
1096 num_deps = 1 2kd
1098 with nogil: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1099 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1100 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
1102 cdef cydriver.CUgraph embedded_graph = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1103 cdef GraphHandle h_embedded
1104 try: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1105 with nogil: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1106 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1107 new_node, &embedded_graph))
1108 h_embedded = create_child_graph_handle( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1109 embedded_graph, h_graph, new_node)
1110 HANDLE_RETURN(graph_clone_attachments( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1111 h_embedded, child_def._h_graph))
1112 except:
1113 with nogil:
1114 rollback_status = cydriver.cuGraphDestroyNode(new_node)
1115 if rollback_status == cydriver.CUDA_SUCCESS:
1116 invalidate_child_graph_state(h_graph, new_node)
1117 raise
1119 return _registered(ChildGraphNode._create_with_params( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1120 create_graph_node_handle(new_node, h_graph), h_embedded)) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d
1123cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
1124 GN_check_valid(self) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1125 Event_check_open(ev) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1126 cdef cydriver.CUgraphNode new_node = NULL 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1127 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1128 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1129 cdef cydriver.CUgraphNode* deps = NULL 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1130 cdef size_t num_deps = 0 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1131 cdef PreparedAttachment prepared
1133 if pred_node != NULL: 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1134 deps = &pred_node 2MePeUeXe0e3e8eadrgmdsg:cugndvgod
1135 num_deps = 1 2MePeUeXe0e3e8eadrgmdsg:cugndvgod
1137 cdef OpaqueHandle owner = ev._h_event 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1138 HANDLE_RETURN(graph_prepare_attachment( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1139 h_graph, owner, OpaqueHandle(), &prepared))
1141 with nogil: 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1142 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1143 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1145 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1147 return _registered(EventRecordNode._create_with_params( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1148 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l
1151cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
1152 GN_check_valid(self) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1153 Event_check_open(ev) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1154 cdef cydriver.CUgraphNode new_node = NULL 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1155 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1156 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1157 cdef cydriver.CUgraphNode* deps = NULL 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1158 cdef size_t num_deps = 0 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1159 cdef PreparedAttachment prepared
1161 if pred_node != NULL: 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1162 deps = &pred_node 2ngNeQeVeYe1e4eogpg9e
1163 num_deps = 1 2ngNeQeVeYe1e4eogpg9e
1165 cdef OpaqueHandle owner = ev._h_event 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1166 HANDLE_RETURN(graph_prepare_attachment( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1167 h_graph, owner, OpaqueHandle(), &prepared))
1169 with nogil: 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1170 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1171 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1173 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1175 return _registered(EventWaitNode._create_with_params( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1176 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l
1179cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data):
1180 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
1181 cdef cydriver.CUgraphNode new_node = NULL 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1182 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1183 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1184 cdef cydriver.CUgraphNode* deps = NULL 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1185 cdef size_t num_deps = 0 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1186 cdef OpaqueHandle fn_owner, data_owner
1187 cdef PreparedAttachment prepared
1189 GN_check_valid(self) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1190 if pred_node != NULL: 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1191 deps = &pred_node 2$b=bmdtg;cndod
1192 num_deps = 1 2$b=bmdtg;cndod
1194 _resolve_host_callback( 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1195 fn, user_data, &node_params.fn, &node_params.userData,
1196 &fn_owner, &data_owner)
1197 HANDLE_RETURN(graph_prepare_attachment( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1198 h_graph, fn_owner, data_owner, &prepared))
1200 with nogil: 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1201 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1202 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
1204 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1206 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1207 return _registered(HostCallbackNode._create_with_params( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1208 create_graph_node_handle(new_node, h_graph), callable_obj, 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l
1209 node_params.fn, node_params.userData))