Coverage for cuda/core/graph/_graph_node.pyx: 93.48%
460 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +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~lCeBgpmDeqmam)j*jpfLepjqjrj]i$dsjMe^itjAfIkJkKkLkMkNkNe+jBfCfDfEfsdsgOkPkBiCiDiEiFic d e f HbIbJbKbujvjwjfdgdhd@j[j]jcgGi_i`frmtdOePeQeFfQkRkCgDg]bQ fcgchcicEgFg~j`iak{fudRebkSeckTedkGfSkTkGgHgek^b`jR fkjcgkkchklcikmcIgJg{i%dxjUe|iyj}i'dzjVe~iAjaj|fvdWeXeYeHfUkVkKgLg_bS ncocpcqcMgNgjkbjkk}fwdlkZemk0enk1eokIfWkXkOgPgpk`b{jT qkrcrkscsktctkucQgRgukcjvk~fxdwk2exk3eyk4ezkJfYkZkSgTgAk{bBkU CkvcDkwcEkxcFkycUgVgdjagyd5e6e7eKf0k1kWgXg|bV zcAcBcCcYgZgej(dBj8efjCjgj)dDj9ehjEj:jij*dFj!ejjGj_jjdbgHiHjqf2k0g1g2g3gDbEbFbGb=j,j-j3k4k}b^cidkjDcofWbXbYbZb3b4b5b6b5k#e6ktgug$e7krfsf8bub(b4g5gIiddJiKi/d:d;d=dmdEe/f:f_f_c@b.j{c8ktf`czd9k:c7b2bLbEc{l^j?jlj| |lndFcvg[b}ldgAdHk%ewgpd!k#k6g7g8g?d@d[d;f=fegxgyg$k%k9g!g#g+d,d-d-f.fBd?c@cLiMi]d^d_d)b*b+bkdld'kNiOiPi`d?f$g'ezgqd(k)k%g'g(g{d|d}d@f[fed*k(eAgrd+k,k)g*g+g~daebe]f^fmjCd,gcede.dvbwb-g-k.knjojfg/k{ IjDd)e:k;kLf=k.g/gQiW Gc:g;g(jJjEd*e?k@kMf[k=g?gRiX Hc@g[ggbufvfNfwfIcJc;cY KcLcMcKjFd+e]k^kOf_k]g^gSiZ Nc_g`g9b!b#b} ~ abbbLjGd,e`k{kPf|k{g|gTi0 Oc}g~gMjHd-e}k~kQfalahbhUi1 PcchdhNjId.eblclRfdlehfhVi2 Qcghhh/eC ~bac[cbchbibsb3 jbkblbOjJd:eelflSfglihjhWi4 RckhlhXiYieefegeheZiiejekeleO |c}c~cMbNbA ObPbQbPjKd;ehlilTfjlmhnh0i5 ScohphmeneoepegghgigjgkgQjLd=eklllUfmlqhrh1i6 TcshthMdFeGe0bHe,b-bo M .b/bRjNd?enlolVfpluhvh2i7 Ucwhxha u v w g h i j s xbybzbE F q G H SjOd@eqlrlWfslyhzh3i8 VcAhBhTjPd[etlulXfvlChDh4i9 WcEhFhUjQd]ewlxlYfylGhHh5i! XcIhJhlgVjRd^ezlAlZfBlKhLh6i# YcMhNhmbxfyf0fzfZc0c=c$ 1c2c3cWjSd_eClDl1fElOhPh7i% 4cQhRh$b%b'bcbdbebfbXjTd`eFlGl2fHlShTh8i' 5cUhVhYjUd{eIlJl3fKlWhXh9i( 6cYhZhZjVd|eLlMl4fNl0h1h!i) 7c2h3h}eD ccdc]cecnbobtb* pbqbrb0jWd~eOlPl5fQl4h5h#i+ 8c6h7h$i%iqeresete'iuevewexeP adbdcdRbSbB TbUbVb1jXdafRlSl6fTl8h9h(i, 9c!h#hyezeAeBemgngogpgqg2jYdbfUlVl7fWl$h%h)i- !c'h(hZdIeJe1bKe:b;bp N =b?b3j0dcfXlYl8fZl)h*h*i. #c+h,hb x y z k l m n t AbBbCbI J r K L 4j1ddf0l1l9f2l-h.h+i/ $c/h:h5j2def3l4l!f5l;h=h,i: %c?h@h6j3dff6l7l#f8l[h]h-i; 'c^h_hrg7j4dgf9l!l$f#l`h{h.i= (c|h}h8j5dhf$l%l%f'l~hai/i? )cbici9j6dif(l)l'f*ldiei:i@ *cfigi!j7djf+l,l(f-lhiii;i[ +cjiki#j8dkf.l/l)f:llimi=i] ,cnioi$j9dlf;l=l*f?lpiqi?i^ -crisi%j!dmf@l[l+f]ltiui@i_ .cviwi'j#dnf^l_l,f`lxiyi[i` /cziAi
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) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e
106 def __repr__(self) -> str:
107 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2gn
108 if node == NULL: 2gn
109 if self._is_entry and self.is_valid: 2gn
110 return "<GraphNode entry>" 2gn
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): 2odLe~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntn$o%o'o(o)o*o+o,o-o.o/o:o;o=o?ounvnwnxnynznAn@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpBnCnDnEnFnGnHnInJnKnLnMnNnJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p9n!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[p]p^p_p`p{p|p}p~paqbqcqdqeqfq]n^n_n`n{n|n}n~naobocodoeofogohoiogqhqiqjqkqlqmqnqoqpqqqrqsqtquqjokolomonooopoqorosotouovowovqwqxqyqzqAqBqCqDqEqFqGqHqIqJqxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
116 return NotImplemented 2XmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$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~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq
117 cdef GraphNode o = <GraphNode>other 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
118 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
119 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
120 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
121 and as_intptr(self_graph) == as_intptr(other_graph)) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
123 def __hash__(self) -> int:
124 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2CepmDeqmLeHmImKqJmKmLqNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmRmSmTmUmVmWmumvm8owmxm9oymzm!oAmBm#o_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6b_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%eBd?c@cLiMi]d^d_d)b*b+bkdld'e(eMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!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:t;t=t?t@t[t]t^t_t`t{t$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
125 return hash((as_intptr(self._h_node), as_intptr(g))) 2CepmDeqmLeHmImKqJmKmLqNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmRmSmTmUmVmWmumvm8owmxm9oymzm!oAmBm#o_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6b_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%eBd?c@cLiMi]d^d_d)b*b+bkdld'e(eMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!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:t;t=t?t@t[t]t^t_t`t{t$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen
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) 2OoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7oFc
137 if node == NULL: 2OoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7oFc
138 return None 2OoFc
139 cdef cydriver.CUgraphNodeType node_type
140 with nogil: 2PoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o
141 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2PoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o
142 return driver.CUgraphNodeType(<int>node_type) 2odPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o
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~taubucu
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) 2FcHk$g.d{ XmYmZm0m1m2m3m4m5m6m7m8m9m!m#m
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 ( 2DcWbXbYbZbzdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn
164 as_intptr(graph_node_get_graph(self._h_node)) != 0 2DcWbXbYbZbzdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn
165 and (self._is_entry or as_intptr(self._h_node) != 0) 2DczdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn
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^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
176 cdef PreparedAttachment prepared
177 if self._is_entry or node == NULL: 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
178 return 2Fc
180 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
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^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
184 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared))
185 with nogil: 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
186 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
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^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
190 invalidate_child_graph_state(h_graph, node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
191 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
192 invalidate_graph_node(self._h_node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
193 HANDLE_RETURN(cleanup_status) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j
195 @property
196 def pred(self) -> AdjacencySetProxy:
197 """A mutable set-like view of this node's predecessors."""
198 return AdjacencySetProxy(self, False) 2pfAfOo+jfdgdhd@jcgukvkduwkxkykzkeufuguhuAkBkCkDkEkFkiujuumvm8owmxm9ojdrfsf8bubdd?jlj| ndFc
200 @pred.setter
201 def pred(self, value: Iterable[GraphNode]) -> None:
202 p = AdjacencySetProxy(self, False) 2Lblj
203 p.clear() 2Lblj
204 p.update(value) 2Lblj
206 @property
207 def succ(self) -> AdjacencySetProxy:
208 """A mutable set-like view of this node's successors."""
209 return AdjacencySetProxy(self, True) 2Oo+j[j]jukvkwkxkykzkAkBkCkDkEkFkymzm!oAmBm#o2bEc{l^j?jlj| |lndFcvg}l
211 @succ.setter
212 def succ(self, value: Iterable[GraphNode]) -> None:
213 s = AdjacencySetProxy(self, True) 2+jlj
214 s.clear() 2+jlj
215 s.update(value) 2+jlj
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) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
245 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[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~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
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) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,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) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:ffnhn_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:ffnhn_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
379 return GN_memset( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 qfidub(b/dNoom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/dNoom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/dom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
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) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.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) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/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) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-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( 2LeDgHgLgPgTgXg|j0gDbWb3b/g?gJc^g~ |gbhfhibjhfejeNbnhneigjgkgrh-bvhh F zhDhHhLh0cPhdbThXh1hob5hreveSb9hzeogpgqg%h;b*hl J .h=h]h{haieiiimiqiuiyi
564 self, condition,
565 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2LeDgHgLgPgTgXg|j0gDbWb3b/g?gJc^g~ |gbhfhibjhfejeNbnhneigjgkgrh-bvhh F zhDhHhLh0cPhdbThXh1hob5hreveSb9hzeogpgqg%h;b*hl J .h=h]h{haieiiimiqiuiyi
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( 2CgGgKgOgSgWg1gEbXb4b.g=gIc]g} {gahehhbiheeieMbmhmegghgigqh,buhg E yhChGhKhZcOhcbShWh0hnb4hqeueRb8hyemgngog$h:b)hk I -h;h[h`h~hdihilipitixi
585 self, condition,
586 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2CgGgKgOgSgWg1gEbXb4b.g=gIc]g} {gahehhbiheeieMbmhmegghgigqh,buhg E yhChGhKhZcOhcbShWh0hnb4hqeueRb8hyemgngog$h:b)hk I -h;h[h`h~hdihilipitixi
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( 2FgJgNgRgVgZg3gGbZb6btf;g[gMc`gbb~gdhhhlblhheleQbphpehgkgth/bxhj H BhFhJhlgNh3cRhfbVhZh3hrb7htexeVb#hBengqg(h?b,hn L :h@h_hrg}hcigikioisiwiAi
605 self, condition,
606 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2FgJgNgRgVgZg3gGbZb6btf;g[gMc`gbb~gdhhhlblhheleQbphpehgkgth/bxhj H BhFhJhlgNh3cRhfbVhZh3hrb7htexeVb#hBengqg(h?b,hn L :h@h_hrg}hcigikioisiwiAi
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( 2EgIgMgQgUgYg}j2gFbYb5b:g@gLc_gab}gchghkbkhgekePbohoeggjgsh.bwhi G AhEhIhlgMh2cQhebUhYh2hqb6hseweUb!hAemgpg'h=b+hm K /h?h^hrg|hbifijinirivizi
627 self, condition,
628 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2EgIgMgQgUgYg}j2gFbYb5b:g@gLc_gab}gchghkbkhgekePbohoeggjgsh.bwhi G AhEhIhlgMh2cQhebUhYh2hqb6hseweUb!hAemgpg'h=b+hm K /h?h^hrg|hbifijinirivizi
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) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
638 if not isinstance(condition, GraphCondition): 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
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 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
645 c_memset(¶ms, 0, sizeof(params)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
646 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
647 params.conditional.handle = condition._c_handle 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
648 params.conditional.type = cond_type 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
649 params.conditional.size = size 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
651 cdef cydriver.CUcontext ctx = NULL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
652 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
653 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
654 cdef cydriver.CUgraphNode* deps = NULL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
655 cdef size_t num_deps = 0 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
657 if pred_node != NULL: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
658 deps = &pred_node
659 num_deps = 1
661 with nogil: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
662 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
663 params.conditional.ctx = ctx 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
665 with nogil: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
666 IF CUDA_CORE_BUILD_MAJOR >= 13:
667 HANDLE_RETURN(cydriver.cuGraphAddNode( 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
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 = [] 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
674 cdef unsigned int i
675 cdef cydriver.CUgraph bg
676 cdef GraphHandle h_branch
677 for i in range(size): 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
678 bg = params.conditional.phGraph_out[i] 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
679 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
680 branch_list.append(GraphDefinition._from_handle(h_branch)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
681 cdef tuple branches = tuple(branch_list) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
683 cdef ConditionalNode n = node_cls.__new__(node_cls) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
684 n._h_node = create_graph_node_handle(new_node, h_graph) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
685 n._condition = condition 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
686 n._cond_type = cond_type 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
687 n._branches = branches 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
689 return _registered(n) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h: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_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi
691cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
692 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e
694 # Sentinel: virtual node to represent the graph entry point.
695 if node == NULL: 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[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()) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e
703 if registered is not None: 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e
704 return <GraphNode>registered 2CeDeLeHmImJmKm+jfdgdhd@j[j]j~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjddd:c7b2bLbEc^j?jlj| Fcvg[b
705 else:
706 return _registered(GN_create_impl(h_node)) 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e
709cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
710 cdef cydriver.CUgraphNodeType node_type
711 with nogil: 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e
712 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e
714 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e
715 return EmptyNode._create_impl(h_node) 2`j{jBk
716 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
717 return KernelNode._create_from_driver(h_node) 2CepmDeqmrmDbEbFbGb}b@b|
718 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
719 return AllocNode._create_from_driver(h_node) 2~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkCkDkEkFk
720 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
721 return FreeNode._create_from_driver(h_node) 28b
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) 2ub
726 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
727 return ChildGraphNode._create_from_driver(h_node) 2=j^cDc_c@b`czd
728 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
729 return EventRecordNode._create_from_driver(h_node) 2rf
730 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
731 return EventWaitNode._create_from_driver(h_node) 2sf
732 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
733 return HostCallbackNode._create_from_driver(h_node) 2Ne=j^cDc_c{c`czd%e?c@c'e(e
734 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
735 return ConditionalNode._create_from_driver(h_node) 2WbXbYbZb3b4b5b6btf
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 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
743 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
744 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
745 cdef cydriver.CUgraphNode* deps = NULL 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
746 cdef size_t num_deps = 0 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
747 cdef OpaqueHandle args_owner
748 cdef PreparedAttachment prepared
750 GN_check_valid(self) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
751 if conf.cluster is not None or conf.is_cooperative: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
752 raise NotImplementedError( 2,g
753 "clustered or cooperative graph kernel nodes are not supported")
755 if pred_node != NULL: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
756 deps = &pred_node 2CeDecg]b^b_b`b{b|b:c7b2bLbEc| AdCdfg
757 num_deps = 1 2CeDecg]b^b_b`b{b|b:c7b2bLbEc| AdCdfg
759 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS(
760 kern=as_cu(ker._h_kernel), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
761 func=<cydriver.CUfunction>NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
762 gridDimX=conf.grid[0], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
763 gridDimY=conf.grid[1], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
764 gridDimZ=conf.grid[2], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
765 blockDimX=conf.block[0], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
766 blockDimY=conf.block[1], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
767 blockDimZ=conf.block[2], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
768 sharedMemBytes=conf.shmem_size, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
769 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
770 extra=NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
771 ctx=<cydriver.CUcontext>NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[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 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
777 kernel_args = ker_args.kernel_args 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
778 if kernel_args is not None: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
779 args_owner = make_opaque_py(kernel_args) 2CeBgDe4g5g:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_d%g'g(g)g*g+gCd-gfg
780 HANDLE_RETURN(graph_prepare_attachment( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
781 h_graph, kernel_owner, args_owner, &prepared))
783 with nogil: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
784 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
785 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
787 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
789 return _registered(KernelNode._create_with_params( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
790 create_graph_node_handle(new_node, h_graph), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i
791 conf.grid, conf.block, conf.shmem_size, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[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~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
798 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
799 cdef GraphNode other
800 cdef cydriver.CUgraphNode* deps_ptr = NULL 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
801 cdef size_t num_deps = 0 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
802 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
804 GN_check_valid(self) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
805 if pred_node != NULL: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
806 deps.push_back(pred_node) 2$d%d'd(d)d*djdnd
807 for other in nodes: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
808 GN_check_valid(other) 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEcnd)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
809 if as_cu((<GraphNode>other)._h_node) != NULL: 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
810 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
812 num_deps = deps.size() 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
813 if num_deps > 0: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
814 deps_ptr = deps.data() 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!ejd:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
816 with nogil: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
817 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
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~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 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 ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`
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) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
829 if device is None: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
830 with nogil: 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
831 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
832 device_id = <int>dev 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
833 else:
834 device_id = getattr(device, 'device_id', device) 2)j*j
836 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
837 cdef cydriver.CUgraphNode new_node = NULL 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
838 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
839 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
840 cdef cydriver.CUgraphNode* deps = NULL 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
841 cdef size_t num_deps = 0 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
843 if pred_node != NULL: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
844 deps = &pred_node 2pf]i$d^i_i`f`i{f{i%d|i}i'd~iaj|fbj}fcj~fdjagej(dfjgj)dhjij*djj
845 num_deps = 1 2pf]i$d^i_i`f`i{f{i%d|i}i'd~iaj|fbj}fcj~fdjagej(dfjgj)dhjij*djj
847 cdef vector[cydriver.CUmemAccessDesc] access_descs
848 cdef cydriver.CUmemAccessDesc access_desc
849 cdef int peer_id
850 cdef list peer_ids = [] 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
852 if peer_access is not None: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,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) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
863 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
864 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
865 alloc_params.bytesize = size 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
867 check_str_enum(memory_type_str, GraphMemoryType) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
868 if memory_type_str == "device": 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
869 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
870 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
871 alloc_params.poolProps.location.id = device_id 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
872 elif memory_type_str == "host": 2/j`f{f|f}f~fag
873 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2/j
874 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST 2/j
875 alloc_params.poolProps.location.id = 0 2/j
876 elif memory_type_str == "managed": 2`f{f|f}f~fag
877 IF CUDA_CORE_BUILD_MAJOR >= 13:
878 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2`f{f|f}f~fag
879 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2`f{f|f}f~fag
880 alloc_params.poolProps.location.id = device_id 2`f{f|f}f~fag
881 ELSE:
882 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
884 if access_descs.size() > 0: 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
885 alloc_params.accessDescs = access_descs.data()
886 alloc_params.accessDescCount = access_descs.size()
888 with nogil: 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
889 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
890 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
892 return _registered(AllocNode._create_with_params( 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
893 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
894 device_id, memory_type_str, tuple(peer_ids))) 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c
897cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
898 cdef cydriver.CUgraphNode new_node = NULL 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
899 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
900 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
901 cdef cydriver.CUgraphNode* deps = NULL 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
902 cdef size_t num_deps = 0 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
904 GN_check_valid(self) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
905 if pred_node != NULL: 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
906 deps = &pred_node 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
907 num_deps = 1 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
909 with nogil: 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f
910 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(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)) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(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) 2ub(b/dom:d;d=dtmmdEe/f:ffnhn_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
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 2ub(b/dom:d;d=dmdEe/f:f_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
922 return attachment_owner 2ub(b/dom:d;d=dmdEe/f:f_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
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 HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfidub(b/dNoom:d;d=dtmmdEe/f:ffnhn_f| Fc?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{ W GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c
946 if owner is not None: 2ub/dNoom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
947 raise ValueError( 2Noom
948 f"{side}_owner cannot be used when {side} is a Buffer" 2Noom
949 )
950 buf = operand 2ub/dom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
951 attachment_owner = _buffer_attachment_owner(buf, side) 2ub/dom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
952 out_ptr[0] = as_cu(buf._h_ptr) 2ub/dom:d;d=dmd/f:f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
953 return attachment_owner 2ub/dom:d;d=dmd/f:f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{
954 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfid(btmmdEefn_f| Fc+d,d-d-f.fW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c
955 if owner is None: 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfid(btmmdEefn_f| FcW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c
956 return OpaqueHandle() 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgtm| FcW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c
957 if isinstance(owner, Buffer): 2qfid(btmmdEefn_f
958 return _buffer_attachment_owner(owner, f"{side}_owner") 2(btmmdEefn_f
959 return make_opaque_py(owner) 2qfid
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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
969 cdef cydriver.CUgraphNode* deps = NULL 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
970 cdef size_t num_deps = 0 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
971 cdef PreparedAttachment prepared
973 GN_check_valid(self) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
974 if pred_node != NULL: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
975 deps = &pred_node 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc| FcGcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
976 num_deps = 1 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc| FcGcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
978 cdef cydriver.CUcontext ctx = NULL 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
979 with nogil: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
980 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
984 pitch=pitch, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
985 value=val, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
986 elementSize=elem_size, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
987 width=width, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
988 height=height, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
989 )
991 if dst_owner: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
992 HANDLE_RETURN(graph_prepare_attachment( 2/f:f_f;f=f-f.fkdld?f@f[f]f^fvbwb{
993 h_graph, dst_owner, OpaqueHandle(), &prepared))
995 with nogil: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c
996 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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.fkdld?f@f[f]f^fvbwb{
1003 return _registered(MemsetNode._create_with_params( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 2ub?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{
1034 else:
1035 params.srcDevice = src 2c d e f Q R S T U V qfid(b/d:d;d=dmdEeW 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 2ub?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{
1038 else:
1039 params.dstDevice = dst 2c d e f Q R S T U V qfid(b/d:d;d=dmdEeW 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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( 2qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{
1069 h_graph, dst_owner, src_owner, &prepared))
1071 with nogil: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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)) 2qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{
1079 return _registered(MemcpyNode._create_with_params( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ 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 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1086 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1087 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1088 cdef cydriver.CUgraphNode* deps = NULL 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1089 cdef size_t num_deps = 0 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1090 cdef cydriver.CUresult rollback_status
1092 GN_check_valid(self) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1093 GD_check_valid(child_def) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1094 if pred_node != NULL: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1095 deps = &pred_node 2nd
1096 num_deps = 1 2nd
1098 with nogil: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1099 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1100 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
1102 cdef cydriver.CUgraph embedded_graph = NULL 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1103 cdef GraphHandle h_embedded
1104 try: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1105 with nogil: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1106 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1107 new_node, &embedded_graph))
1108 h_embedded = create_child_graph_handle( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1109 embedded_graph, h_graph, new_node)
1110 HANDLE_RETURN(graph_clone_attachments( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
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( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1120 create_graph_node_handle(new_node, h_graph), h_embedded)) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d
1123cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
1124 GN_check_valid(self) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1125 Event_check_open(ev) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1126 cdef cydriver.CUgraphNode new_node = NULL 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1127 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1128 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1129 cdef cydriver.CUgraphNode* deps = NULL 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1130 cdef size_t num_deps = 0 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1131 cdef PreparedAttachment prepared
1133 if pred_node != NULL: 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1134 deps = &pred_node 2PeSeXe0e3e6e#esf8bubddwgpdxg?czgqdAgrd
1135 num_deps = 1 2PeSeXe0e3e6e#esf8bubddwgpdxg?czgqdAgrd
1137 cdef OpaqueHandle owner = ev._h_event 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1138 HANDLE_RETURN(graph_prepare_attachment( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1139 h_graph, owner, OpaqueHandle(), &prepared))
1141 with nogil: 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1142 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.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)) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1147 return _registered(EventRecordNode._create_with_params( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1148 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l
1151cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
1152 GN_check_valid(self) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1153 Event_check_open(ev) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1154 cdef cydriver.CUgraphNode new_node = NULL 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1155 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1156 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1157 cdef cydriver.CUgraphNode* deps = NULL 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1158 cdef size_t num_deps = 0 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1159 cdef PreparedAttachment prepared
1161 if pred_node != NULL: 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1162 deps = &pred_node 2sgQeTeYe1e4e7etgug$erf
1163 num_deps = 1 2sgQeTeYe1e4e7etgug$erf
1165 cdef OpaqueHandle owner = ev._h_event 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1166 HANDLE_RETURN(graph_prepare_attachment( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1167 h_graph, owner, OpaqueHandle(), &prepared))
1169 with nogil: 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1170 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/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)) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1175 return _registered(EventWaitNode._create_with_params( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l
1176 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/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 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1182 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1183 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1184 cdef cydriver.CUgraphNode* deps = NULL 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1185 cdef size_t num_deps = 0 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1186 cdef OpaqueHandle fn_owner, data_owner
1187 cdef PreparedAttachment prepared
1189 GN_check_valid(self) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1190 if pred_node != NULL: 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1191 deps = &pred_node 2(b[bpdyg@cqdrd
1192 num_deps = 1 2(b[bpdyg@cqdrd
1194 _resolve_host_callback( 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-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( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1198 h_graph, fn_owner, data_owner, &prepared))
1200 with nogil: 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1201 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-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)) 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1206 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1207 return _registered(HostCallbackNode._create_with_params( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1208 create_graph_node_handle(new_node, h_graph), callable_obj, 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l
1209 node_params.fn, node_params.userData))