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

460 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5"""GraphNode base class — factory, properties, and builder methods.""" 

6  

7from __future__ import annotations 

8  

9from collections.abc import Iterable 

10from typing import TYPE_CHECKING 

11  

12from libc.stddef cimport size_t 

13from libc.stdint cimport uintptr_t 

14from libc.string cimport memset as c_memset 

15  

16from libcpp.vector cimport vector 

17  

18from cuda.bindings cimport cydriver 

19  

20from cuda.core._event cimport Event, Event_check_open 

21from cuda.core._kernel_arg_handler cimport ParamHolder 

22from cuda.core._launch_config cimport LaunchConfig 

23from cuda.core._memory._buffer cimport Buffer, 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 

67  

68from cuda.core.graph._host_callback cimport ( 

69 _resolve_host_callback, 

70) 

71  

72import ctypes as ct 

73import weakref 

74  

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 

79  

80if TYPE_CHECKING: 

81 from cuda.core._device import Device 

82  

83__all__ = ['GraphNode'] 

84  

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

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

87  

88  

89cdef inline GraphNode _registered(GraphNode n): 

90 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2?lzewgfmAegm@l8j9jmfIehjijjj.i9dkjJe/iljvfykzkAkBkCkDkKe!jwfxfyfzfpdngEkFkviwixiyizic d e f FbGbHbIbmjnjojcddded+j,j-j|fAi:i@fhmqdLeMeNeAfGkHkxgyg?bQ ccdcecfczgAg@j;i[j[frdOe]jPe^jQe_jBfIkJkBgCg`j@b:jR {jgc|jhc}jic~jjcDgEg=i!dpjRe?iqj@i#drjSe[isj]i]fsdTeUeVeCfKkLkFgGg[bS kclcmcncHgIgak^ibk^ftdckWedkXeekYefkDfMkNkJgKggk]b;jT hkocikpcjkqckkrcLgMglk_imk_fudnkZeok0epk1eqkEfOkPkNgOgrk^bskU tkscuktcvkucwkvcPgQg`i`fvd2e3e4eFfQkRkRgSg_bV wcxcyczcTgUg{i$dtj5e|iuj}i%dvj6e~iwj'jaj'dxj7ebjyj/jgd{fBizjnfSkVgWgXgYgBbCbDbEb)j#j$jTkUk`b@cfdcjAclfUbVbWbXb1b2b3b4bVk8eWkogpg9eXk$bZg0gCiadDiEi,d-d.d/djdBe*f+f?f[c;b%j^cYkof]cwdZk-c5b0bJbBc:l.j*jdj| ;lkdCcqg=b=l}fxd!ergmd0k1k1g2g3g:d;d=d,f-f~fsgtg2k3k4g5g6g(d)d*d(f)fyd:c;cFiGi?d@d[d%b'b(bhdid4kHi]d.f#eugnd5k6k7g8g9g^d_d`d/f:fbd7k$evgod8k9k!g#g$g{d|d}d;f=fejzd%g~dae+dub'g!k#kfjgjag$k{ AjAd%e%k'kGf(k(g)gIiW Dc*g+g7jBjBd'e)k*kHf+k,g-gJiX Ec.g/ggbpfqfIfrfFcGc.cY HcIcJcCjCd(e,k-kJf.k:g;gKiZ Kc=g?g6b7b8b} ~ abbbDjDd)e/k:kKf;k@g[gLi0 Lc]g^gEjEd*e=k?kLf@k_g`gMi1 Mc{g|gFjFd+e[k]kMf^k}g~gNi2 Ncahbh,eC {b|b=c}bhbibsb3 jbkblbGjGd-e_k`kNf{kchdhOi4 OcehfhPiQibecedeeeRifegeheieO _c`c{cKbLbA MbNbObHjHd.e|k}kOf~kghhhSi5 PcihjhjekelemebgcgdgegfgIjId/ealblPfclkhlhTi6 QcmhnhJdCeDeYbEe)b*bo M +b,bJjKd:edlelQfflohphUi7 Rcqhrha u v w g h i j s vbwbxbE F q G H KjLd;eglhlRfilshthVi8 ScuhvhLjMd=ejlklSfllwhxhWi9 TcyhzhMjNd?emlnlTfolAhBhXi! UcChDhggNjOd@eplqlUfrlEhFhYi# VcGhHhmbsftfVfufWcXc/c$ YcZc0cOjPd[esltlWfulIhJhZi% 1cKhLh9b!b#bcbdbebfbPjQd]evlwlXfxlMhNh0i' 2cOhPhQjRd^eylzlYfAlQhRh1i( 3cShThRjSd_eBlClZfDlUhVh2i) 4cWhXh`eD ~bac?cbcnbobtb* pbqbrbSjTd{eElFl0fGlYhZh3i+ 5c0h1h4i5ineoepeqe6ireseteueP |c}c~cPbQbB RbSbTbTjUd|eHlIl1fJl2h3h7i, 6c4h5hvewexeyehgigjgkglgUjVd}eKlLl2fMl6h7h8i- 7c8h9hWdFeGeZbHe-b.bp N /b:bVjXd~eNlOl3fPl!h#h9i. 8c$h%hb x y z k l m n t ybzbAbI J r K L WjYdafQlRl4fSl'h(h!i/ 9c)h*hXjZdbfTlUl5fVl+h,h#i: !c-h.hYj0dcfWlXl6fYl/h:h$i; #c;h=hmgZj1ddfZl0l7f1l?h@h%i= $c[h]h0j2def2l3l8f4l^h_h'i? %c`h{h1j3dff5l6l9f7l|h}h(i@ 'c~hai2j4dgf8l9l!f!lbici)i[ (cdiei3j5dhf#l$l#f%lfigi*i] )chiii4j6dif'l(l$f)ljiki+i^ *climi5j7djf*l+l%f,lnioi,i_ +cpiqi6j8dkf-l.l'f/lrisi-i` ,ctiui

91  

92  

93cdef class GraphNode: 

94 """A node in a graph definition. 

95  

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 """ 

100  

101 @staticmethod 

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

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

104 return GN_create(h_graph, node) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e

105  

106 def __repr__(self) -> str: 

107 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2{m

108 if node == NULL: 2{m

109 if self._is_entry and self.is_valid: 2{m

110 return "<GraphNode entry>" 2{m

111 return "<GraphNode destroyed>" 

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

113  

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

115 if not isinstance(other, GraphNode): 2ldIe@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjn2o3o4o5o6o7o8o9o!o#o$o%o'o(o)oknlnmnnnonpnqn*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpyprnsntnunvnwnxnynznAnBnCnDnzpApBpCpDpEpFpGpHpIpJpKpLpMpNpEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnOpPpQpRpSpTpUpVpWpXpYpZp0p1p2pZn0n1n2n3n4n5n6n7n3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p8n9n!n#n$n%n'n(n)n*n+n+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n{p|p}p~paqbqcqdqeqfqgqhqiqjqkq~naobocodoeofogohoiojokolomolqmqnqoqpqqqrqsqtquqvqwqxqyqzqnooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

116 return NotImplemented 2NmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzq

117 cdef GraphNode o = <GraphNode>other 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

118 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

119 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

120 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

121 and as_intptr(self_graph) == as_intptr(other_graph)) 2Ie@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCo2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

122  

123 def __hash__(self) -> int: 

124 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2zefmAegmIexmymAqzmAmBqKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmHmImJmKmLmMmkmlmYommnmZoompm0oqmrm1o/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!eyd:c;cFiGi?d@d[d%b'b(bhdid#e$eCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

125 return hash((as_intptr(self._h_node), as_intptr(g))) 2zefmAegmIexmymAqzmAmBqKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmHmImJmKmLmMmkmlmYommnmZoompm0oqmrm1o/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!eyd:c;cFiGi?d@d[d%b'b(bhdid#e$eCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m

126  

127 @property 

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

129 """Return the CUDA graph node type. 

130  

131 Returns 

132 ------- 

133 CUgraphNodeType or None 

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

135 """ 

136 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2EoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoCc

137 if node == NULL: 2EoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoCc

138 return None 2EoCc

139 cdef cydriver.CUgraphNodeType node_type 

140 with nogil: 2FoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo

141 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2FoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo

142 return driver.CUgraphNodeType(<int>node_type) 2ldFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXo

143  

144 @property 

145 def graph(self) -> GraphDefinition: 

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

147 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2;t=t?t@t[t]t

148  

149 @property 

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

151 """Return the underlying driver CUgraphNode handle. 

152  

153 Returns None for the entry node. 

154 """ 

155 return as_py(self._h_node) 2Cc+d{ NmOmPmQmRmSmTmUmVmWmXmYmZm0m1m

156  

157 @property 

158 def is_valid(self) -> bool: 

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

160  

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

162 """ 

163 return ( 2AcUbVbWbXbwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m

164 as_intptr(graph_node_get_graph(self._h_node)) != 0 2AcUbVbWbXbwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m

165 and (self._is_entry or as_intptr(self._h_node) != 0) 2AcwdkdCc=byd:c;cFiGi?d@d[d%b'b(bhdid7j{m

166 ) 

167  

168 def destroy(self) -> None: 

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

170  

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

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

173 already-destroyed node (no-op). 

174 """ 

175 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

176 cdef PreparedAttachment prepared 

177 if self._is_entry or node == NULL: 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

178 return 2Cc

179  

180 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

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

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

183 HANDLE_RETURN(graph_prepare_attachment( 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

184 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared)) 

185 with nogil: 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

186 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqg=byd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

187  

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

189 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

190 invalidate_child_graph_state(h_graph, node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

191 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

192 invalidate_graph_node(self._h_node) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

193 HANDLE_RETURN(cleanup_status) 2'j)j#j$j@cfdcjAclfUbVbWbXb1b2b3b4b[c%j^c]c5b0bJbkdCcqgyd:c;cFiGi?d@d[d%b'b(bhdidbd{ 7j

194  

195 @property 

196 def pred(self) -> AdjacencySetProxy: 

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

198 return AdjacencySetProxy(self, False) 2mfvfEo!jcddded+j|flkmk^tnkokpkqk_t`t{t|trksktkukvkwk}t~tkmlmYommnmZogdad*jdj| kdCc

199  

200 @pred.setter 

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

202 p = AdjacencySetProxy(self, False) 2Jbdj

203 p.clear() 2Jbdj

204 p.update(value) 2Jbdj

205  

206 @property 

207 def succ(self) -> AdjacencySetProxy: 

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

209 return AdjacencySetProxy(self, True) 2Eo!j,j-jlkmknkokpkqkrksktkukvkwkompm0oqmrm1o0bBc:l.j*jdj| ;lkdCcqg=l

210  

211 @succ.setter 

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

213 s = AdjacencySetProxy(self, True) 2!jdj

214 s.clear() 2!jdj

215 s.update(value) 2!jdj

216  

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

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

219  

220 Clustered and cooperative launch configurations are not currently 

221 supported for graph kernel nodes. 

222  

223 .. warning:: 

224  

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. 

229  

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. 

238  

239 Returns 

240 ------- 

241 KernelNode 

242 A new KernelNode representing the kernel launch. 

243 """ 

244 GN_check_valid(self) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

245 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

246  

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

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

249  

250 This is used to synchronize multiple branches of execution. 

251  

252 Parameters 

253 ---------- 

254 *nodes : GraphNode 

255 Additional nodes to depend on. 

256  

257 Returns 

258 ------- 

259 EmptyNode 

260 A new EmptyNode that depends on all input nodes. 

261 """ 

262 return GN_join(self, nodes) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

263  

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. 

268  

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: 

278  

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. 

288  

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. 

293  

294 Returns 

295 ------- 

296 AllocNode 

297 A new AllocNode representing the allocation. Access the allocated 

298 device pointer via the dptr property. 

299  

300 Notes 

301 ----- 

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

303 memory allocation nodes per CUDA documentation. 

304 """ 

305 return GN_alloc(self, size, device, memory_type, peer_access) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

306  

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

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

309  

310 Parameters 

311 ---------- 

312 dptr : int 

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

314  

315 Returns 

316 ------- 

317 FreeNode 

318 A new FreeNode representing the free operation. 

319 """ 

320 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

321  

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. 

333  

334 .. warning:: 

335  

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. 

340  

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`. 

361  

362 Returns 

363 ------- 

364 MemsetNode 

365 A new MemsetNode representing the memset operation. 

366  

367 Raises 

368 ------ 

369 ValueError 

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

371 """ 

372 GN_check_valid(self) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f`m|m?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

373 cdef cydriver.CUdeviceptr c_dst 

374 cdef unsigned int val 

375 cdef unsigned int elem_size 

376 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f`m|m?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

377 dst, dst_owner, "dst", &c_dst) 

378 val, elem_size = _parse_fill_value(value) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc{f*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

379 return GN_memset( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

380 self, c_dst, dst_attachment_owner, 

381 val, elem_size, width, height, pitch) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

382  

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. 

393  

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. 

397  

398 .. warning:: 

399  

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. 

404  

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`. 

425  

426 Returns 

427 ------- 

428 MemcpyNode 

429 A new MemcpyNode representing the copy operation. 

430  

431 Raises 

432 ------ 

433 ValueError 

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

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

436 """ 

437 GN_check_valid(self) 2c d e f Q R S T U V nffd$b,dDoem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

438 cdef cydriver.CUdeviceptr c_dst 

439 cdef cydriver.CUdeviceptr c_src 

440 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V nffd$b,dDoem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

441 dst, dst_owner, "dst", &c_dst) 

442 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V nffd$b,dem-d.d/djmjdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

443 src, src_owner, "src", &c_src) 

444 return GN_memcpy( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

445 self, c_dst, dst_attachment_owner, 

446 c_src, src_attachment_owner, size) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

447  

448 def embed(self, child: GraphDefinition) -> ChildGraphNode: 

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

450  

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. 

454  

455 Parameters 

456 ---------- 

457 child : GraphDefinition 

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

459  

460 Returns 

461 ------- 

462 ChildGraphNode 

463 A new ChildGraphNode representing the embedded sub-graph. 

464 """ 

465 return GN_embed(self, <GraphDefinition>child) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

466  

467 def record(self, event: Event) -> EventRecordNode: 

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

469  

470 Parameters 

471 ---------- 

472 event : Event 

473 The event to record. 

474  

475 Returns 

476 ------- 

477 EventRecordNode 

478 A new EventRecordNode representing the event record operation. 

479 """ 

480 return GN_record_event(self, <Event>event) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

481  

482 def wait(self, event: Event) -> EventWaitNode: 

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

484  

485 Parameters 

486 ---------- 

487 event : Event 

488 The event to wait for. 

489  

490 Returns 

491 ------- 

492 EventWaitNode 

493 A new EventWaitNode representing the event wait operation. 

494 """ 

495 return GN_wait_event(self, <Event>event) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

496  

497 def callback(self, fn, *, user_data=None) -> object: 

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

499  

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

501 Two modes are supported: 

502  

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. 

512  

513 .. warning:: 

514  

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

516 deadlock or corrupt driver state. 

517  

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. 

522  

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. 

531  

532 Returns 

533 ------- 

534 HostCallbackNode 

535 A new HostCallbackNode representing the callback. 

536  

537 Raises 

538 ------ 

539 TypeError 

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

541 does not match ``CUhostFn``. 

542 ValueError 

543 If ``user_data`` is given for a Python callable. 

544 """ 

545 return GN_callback(self, fn, user_data) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

546  

547 def if_then(self, condition: GraphCondition) -> IfNode: 

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

549  

550 The body graph executes only when the condition evaluates to 

551 a non-zero value at runtime. 

552  

553 Parameters 

554 ---------- 

555 condition : GraphCondition 

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

557  

558 Returns 

559 ------- 

560 IfNode 

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

562 """ 

563 return _make_conditional_node( 2IeygCgGgKgOgSg=jVgBbUb1b)g-gGc;g~ [g`g~gibdhcegeLbhhkedgegfglh*bphh F thxhBhFhXcJhdbNhRhVhobZhoeseQb3hwejgkglg7h.b#hl J (h,h:h@h_h}hcigikioisi

564 self, condition, 

565 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2IeygCgGgKgOgSg=jVgBbUb1b)g-gGc;g~ [g`g~gibdhcegeLbhhkedgegfglh*bphh F thxhBhFhXcJhdbNhRhVhobZhoeseQb3hwejgkglg7h.b#hl J (h,h:h@h_h}hcigikioisi

566  

567 def if_else(self, condition: GraphCondition) -> IfElseNode: 

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

569  

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

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

572  

573 Parameters 

574 ---------- 

575 condition : GraphCondition 

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

577  

578 Returns 

579 ------- 

580 IfElseNode 

581 A new IfElseNode with branches accessible via 

582 ``.then`` and ``.else_``. 

583 """ 

584 return _make_conditional_node( 2xgBgFgJgNgRgWgCbVb2b(g,gFc:g} @g_g}ghbchbefeKbghjebgcgdgkh)bohg E shwhAhEhWcIhcbMhQhUhnbYhnerePb2hvehgigjg6h-b!hk I 'h+h/h?h^h|hbifijiniri

585 self, condition, 

586 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2xgBgFgJgNgRgWgCbVb2b(g,gFc:g} @g_g}ghbchbefeKbghjebgcgdgkh)bohg E shwhAhEhWcIhcbMhQhUhnbYhnerePb2hvehgigjg6h-b!hk I 'h+h/h?h^h|hbifijiniri

587  

588 def while_loop(self, condition: GraphCondition) -> WhileNode: 

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

590  

591 The body graph executes repeatedly while the condition 

592 evaluates to a non-zero value. 

593  

594 Parameters 

595 ---------- 

596 condition : GraphCondition 

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

598  

599 Returns 

600 ------- 

601 WhileNode 

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

603 """ 

604 return _make_conditional_node( 2AgEgIgMgQgUgYgEbXb4bof+g/gJc?gbb^g|gbhlbfheeieObjhmecgfgnh,brhj H vhzhDhggHh0cLhfbPhThXhrb1hqeueTb5hyeiglg9h:b%hn L *h.h=hmg]h{haieiiimiqiui

605 self, condition, 

606 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2AgEgIgMgQgUgYgEbXb4bof+g/gJc?gbb^g|gbhlbfheeieObjhmecgfgnh,brhj H vhzhDhggHh0cLhfbPhThXhrb1hqeueTb5hyeiglg9h:b%hn L *h.h=hmg]h{haieiiimiqiui

607  

608 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode: 

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

610  

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

612 value is out of range, no branch executes. 

613  

614 Parameters 

615 ---------- 

616 condition : GraphCondition 

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

618 count : int 

619 Number of switch cases (branches). 

620  

621 Returns 

622 ------- 

623 SwitchNode 

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

625 """ 

626 return _make_conditional_node( 2zgDgHgLgPgTg?jXgDbWb3b*g.gIc=gab]g{gahkbehdeheNbihlebgegmh+bqhi G uhyhChggGhZcKhebOhShWhqb0hpeteSb4hxehgkg8h/b$hm K )h-h;hmg[h`h~hdihilipiti

627 self, condition, 

628 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2zgDgHgLgPgTg?jXgDbWb3b*g.gIc=gab]g{gahkbehdeheNbihlebgegmh+bqhi G uhyhChggGhZcKhebOhShWhqb0hpeteSb4hxehgkg8h/b$hm K )h-h;hmg[h`h~hdihilipiti

629  

630  

631cdef inline ConditionalNode _make_conditional_node( 

632 GraphNode pred, 

633 GraphCondition condition, 

634 cydriver.CUgraphConditionalNodeType cond_type, 

635 unsigned int size, 

636 type node_cls): 

637 GN_check_valid(pred) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

638 if not isinstance(condition, GraphCondition): 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

639 raise TypeError( 

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

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

642 cdef cydriver.CUgraphNodeParams params 

643 cdef cydriver.CUgraphNode new_node = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

644  

645 c_memset(&params, 0, sizeof(params)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

646 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

647 params.conditional.handle = condition._c_handle 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

648 params.conditional.type = cond_type 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

649 params.conditional.size = size 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

650  

651 cdef cydriver.CUcontext ctx = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

652 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

653 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

654 cdef cydriver.CUgraphNode* deps = NULL 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

655 cdef size_t num_deps = 0 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

656  

657 if pred_node != NULL: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

658 deps = &pred_node 

659 num_deps = 1 

660  

661 with nogil: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

662 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

663 params.conditional.ctx = ctx 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

664  

665 with nogil: 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

666 IF CUDA_CORE_BUILD_MAJOR >= 13: 

667 HANDLE_RETURN(cydriver.cuGraphAddNode( 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUg=j?jVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

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

669 ELSE: 

670 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

672  

673 cdef list branch_list = [] 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

674 cdef unsigned int i 

675 cdef cydriver.CUgraph bg 

676 cdef GraphHandle h_branch 

677 for i in range(size): 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

678 bg = params.conditional.phGraph_out[i] 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

679 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

680 branch_list.append(GraphDefinition._from_handle(h_branch)) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

681 cdef tuple branches = tuple(branch_list) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

682  

683 cdef ConditionalNode n = node_cls.__new__(node_cls) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

684 n._h_node = create_graph_node_handle(new_node, h_graph) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

685 n._condition = condition 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

686 n._cond_type = cond_type 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

687 n._branches = branches 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

688  

689 return _registered(n) 2IexgygzgAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgBbCbDbEbUbVbWbXb1b2b3b4bof(g)g*g+g,g-g.g/gFcGcIcJc:g;g=g?g} ~ abbb@g[g]g^g_g`g{g|g}g~gahbhhbibkblbchdhehfhbecedeeefegeheieKbLbNbObghhhihjhjekelemebgcgdgegfgkhlhmhnh)b*b+b,bohphqhrhg h i j E F G H shthuhvhwhxhyhzhAhBhChDhggEhFhGhHhWcXcZc0cIhJhKhLhcbdbebfbMhNhOhPhQhRhShThUhVhWhXhnbobqbrbYhZh0h1hneoepeqereseteuePbQbSbTb2h3h4h5hvewexeyehgigjgkglg6h7h8h9h-b.b/b:b!h#h$h%hk l m n I J K L 'h(h)h*h+h,h-h.h/h:h;h=hmg?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiui

690  

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

692 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e

693  

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

695 if node == NULL: 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e

696 n = GraphNode.__new__(GraphNode) 

697 (<GraphNode>n)._h_node = h_node 

698 (<GraphNode>n)._is_entry = True 

699 return n 

700  

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

702 registered = _node_registry.get(<uintptr_t>h_node.get()) 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e

703 if registered is not None: 2zefmAegmIexmymzmAmKe!jcddded+j,j-jhm@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4bad[c;b^cof]cwd-c5b0bJbBc.j*jdj| Ccqg=b!e:c;c#e$e

704 return <GraphNode>registered 2zeAeIexmymzmAm!jcddded+j,j-j@j[j[l]j^j_j]l^l_l`j:j{j|j}j~j`l{lBmCmDmEmFmGmakbk|lckdkekfk}l~lambmgk;jhkikjkkkcmdmlkmknkokpkqkrksktkukvkwkHmImJmKmLmMmkmlmmmnmompmqmrm/jgdad-c5b0bJbBc.j*jdj| Ccqg=b

705 else: 

706 return _registered(GN_create_impl(h_node)) 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e

707  

708  

709cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

710 cdef cydriver.CUgraphNodeType node_type 

711 with nogil: 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e

712 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e

713  

714 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2zefmAegmKehm@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrksktkukvkwkBbCbDbEb)j`b@cAcUbVbWbXb1b2b3b4b[c;b^cof]cwd| !e:c;c#e$e

715 return EmptyNode._create_impl(h_node) 2:j;jsk

716 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

717 return KernelNode._create_from_driver(h_node) 2zefmAegmhmBbCbDbEb`b;b|

718 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

719 return AllocNode._create_from_driver(h_node) 2@j[j]j^j_j`j:j{j|j}j~jakbkckdkekfkgk;jhkikjkkklkmknkokpkqkrktkukvkwk

720 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

721 return FreeNode._create_from_driver(h_node) 

722 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

723 return MemsetNode._create_from_driver(h_node) 1|

724 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

725 return MemcpyNode._create_from_driver(h_node) 

726 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

727 return ChildGraphNode._create_from_driver(h_node) 2)j@cAc[c;b]cwd

728 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

729 return EventRecordNode._create_from_driver(h_node) 

730 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

731 return EventWaitNode._create_from_driver(h_node) 

732 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

733 return HostCallbackNode._create_from_driver(h_node) 2Ke)j@cAc[c^c]cwd!e:c;c#e$e

734 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

735 return ConditionalNode._create_from_driver(h_node) 2UbVbWbXb1b2b3b4bof

736 else: 

737 n = GraphNode.__new__(GraphNode) 

738 (<GraphNode>n)._h_node = h_node 

739 return n 

740  

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

742 cdef cydriver.CUgraphNode new_node = NULL 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

743 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

744 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

745 cdef cydriver.CUgraphNode* deps = NULL 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

746 cdef size_t num_deps = 0 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

747 cdef OpaqueHandle args_owner 

748 cdef PreparedAttachment prepared 

749  

750 GN_check_valid(self) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

751 if conf.cluster is not None or conf.is_cooperative: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

752 raise NotImplementedError( 2%g

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

754  

755 if pred_node != NULL: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

756 deps = &pred_node 2zeAe|f?b@b[b]b^b_b-c5b0bJbBc| xdzdag

757 num_deps = 1 2zeAe|f?b@b[b]b^b_b-c5b0bJbBc| xdzdag

758  

759 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS( 

760 kern=as_cu(ker._h_kernel), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

761 func=<cydriver.CUfunction>NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

762 gridDimX=conf.grid[0], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

763 gridDimY=conf.grid[1], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

764 gridDimZ=conf.grid[2], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

765 blockDimX=conf.block[0], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

766 blockDimY=conf.block[1], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

767 blockDimZ=conf.block[2], 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

768 sharedMemBytes=conf.shmem_size, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

769 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

770 extra=NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

771 ctx=<cydriver.CUcontext>NULL, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

772 ) 

773  

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

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

776 cdef OpaqueHandle kernel_owner = ker._h_kernel 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

777 kernel_args = ker_args.kernel_args 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

778 if kernel_args is not None: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

779 args_owner = make_opaque_py(kernel_args) 2zewgAeZg0g-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[d7g8g9g!g#g$gzd'gag

780 HANDLE_RETURN(graph_prepare_attachment( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

781 h_graph, kernel_owner, args_owner, &prepared)) 

782  

783 with nogil: 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

784 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

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

786  

787 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

788  

789 return _registered(KernelNode._create_with_params( 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

790 create_graph_node_handle(new_node, h_graph), 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

791 conf.grid, conf.block, conf.shmem_size, 2zewgAepdviwixiyizi|fAiqd?brd@bsd[btd]bud^bvd_bBiBbCbDbEb`bZg0gCiadDiEi;b-c5b0bJbBc| xd1g2g3g4g5g6g?d@d[dHi7g8g9gbd!g#g$gzd%g'gagAdIiBdJigb.cCdKi6b7b8b} ~ abbbDdLiEdMiFdNiC sbGdOiO HdSiIdTiJdCeDeYbEe)b*bo M +b,bKdUia s LdViMdWiNdXiOdYimb/cPdZi9b!b#bcbdbebfbQd0iRd1iSd2iD tbTd3iP Ud7iVd8iWdFeGeZbHe-b.bp N /b:bXd9ib t Yd!iZd#i0d$i1d%i2d'i3d(i4d)i5d*i6d+i7d,i8d-i

792 ker._h_kernel)) 

793  

794  

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

796 cdef vector[cydriver.CUgraphNode] deps 

797 cdef cydriver.CUgraphNode new_node = NULL 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

798 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

799 cdef GraphNode other 

800 cdef cydriver.CUgraphNode* deps_ptr = NULL 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

801 cdef size_t num_deps = 0 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

802 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

803  

804 GN_check_valid(self) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

805 if pred_node != NULL: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

806 deps.push_back(pred_node) 29d!d#d$d%d'dgdkd

807 for other in nodes: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

808 GN_check_valid(other) 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBckd%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

809 if as_cu((<GraphNode>other)._h_node) != NULL: 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

810 deps.push_back(as_cu((<GraphNode>other)._h_node)) 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7e-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

811  

812 num_deps = deps.size() 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

813 if num_deps > 0: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

814 deps_ptr = deps.data() 29dJec d e f cdddedLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'd7egd-c5b0bJbBc%eW 'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

815  

816 with nogil: 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

817 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

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

819  

820 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2?l@l9dJe!jc d e f cddded+j,j-jLeQ OeR !dRe#dSeTeS WeT ZeU 2eV $d5e%d6e'j'd7e/jgd-c5b0bJbBc:l.j*jdj;lkdqg=lbdejfjgj%eW 7j'eX Y (eZ )e0 *e1 +e2 ,eC {b|b=c}bhbibsb3 jbkblb-e4 A .e5 /e6 o :e7 a u v w g h i j q ;e8 =e9 ?e! @e# $ [e% ]e' ^e( _e) `eD ~bac?cbcnbobtb* pbqbrb{e+ B |e, }e- p ~e. b x y z k l m n r af/ bf: cf; df= ef? ff@ gf[ hf] if^ jf_ kf`

821  

822  

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 

827  

828 GN_check_valid(self) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

829 if device is None: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

830 with nogil: 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

831 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

832 device_id = <int>dev 2mfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

833 else: 

834 device_id = getattr(device, 'device_id', device) 28j9j

835  

836 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

837 cdef cydriver.CUgraphNode new_node = NULL 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

838 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

839 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

840 cdef cydriver.CUgraphNode* deps = NULL 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

841 cdef size_t num_deps = 0 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

842  

843 if pred_node != NULL: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

844 deps = &pred_node 2mf.i9d/i:i@f;i[f=i!d?i@i#d[i]i]f^i^f_i_f`i`f{i$d|i}i%d~iaj'dbj

845 num_deps = 1 2mf.i9d/i:i@f;i[f=i!d?i@i#d[i]i]f^i^f_i_f`i`f{i$d|i}i%d~iaj'dbj

846  

847 cdef vector[cydriver.CUmemAccessDesc] access_descs 

848 cdef cydriver.CUmemAccessDesc access_desc 

849 cdef int peer_id 

850 cdef list peer_ids = [] 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

851  

852 if peer_access is not None: 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

853 for peer_dev in peer_access: 

854 peer_id = getattr(peer_dev, 'device_id', peer_dev) 

855 peer_ids.append(peer_id) 

856 access_desc.location = cumemlocation_from_id( 

857 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, peer_id) 

858 access_desc.flags = cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

859 access_descs.push_back(access_desc) 

860  

861 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

862  

863 c_memset(&alloc_params, 0, sizeof(alloc_params)) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

864 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

865 alloc_params.bytesize = size 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

866  

867 check_str_enum(memory_type_str, GraphMemoryType) 28j9jmfxk(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

868 if memory_type_str == "device": 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

869 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

870 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

871 alloc_params.poolProps.location.id = device_id 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

872 elif memory_type_str == "host": 2@f[f]f^f_f`f

873 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 

874 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST 

875 alloc_params.poolProps.location.id = 0 

876 elif memory_type_str == "managed": 2@f[f]f^f_f`f

877 IF CUDA_CORE_BUILD_MAJOR >= 13: 

878 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2@f[f]f^f_f`f

879 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2@f[f]f^f_f`f

880 alloc_params.poolProps.location.id = device_id 2@f[f]f^f_f`f

881 ELSE: 

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

883  

884 if access_descs.size() > 0: 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

885 alloc_params.accessDescs = access_descs.data() 

886 alloc_params.accessDescCount = access_descs.size() 

887  

888 with nogil: 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

889 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 28j9jmf(jhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

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

891  

892 return _registered(AllocNode._create_with_params( 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

893 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

894 device_id, memory_type_str, tuple(peer_ids))) 28j9jmfhjijjj.i9dkjJe/iljvfwfxfyfzfc d e f FbGbHbIbmjnjojcddded:i@fLeMeNeAf?bQ ccdcecfc;i[fOePeQeBf@bR gchcicjc=i!dpjRe?iqj@i#drjSe[isj]i]fTeUeVeCf[bS kclcmcnc^i^fWeXeYeDf]bT ocpcqcrc_i_fZe0e1eEf^bU sctcucvc`i`f2e3e4eFf_bV wcxcyczc{i$dtj5e|iuj}i%dvj6e~iwjaj'dxj7ebjyjgd{fzj8e9e=bAj%eGfW DcBj'eHfX EcgbpfqfIfrfFcGc.cY HcIcJcCj(eJfZ KcDj)eKf0 LcEj*eLf1 McFj+eMf2 Nc,eC {b|b=c}bhbibsb3 jbkblbGj-eNf4 OcO _c`c{cKbLbA MbNbObHj.eOf5 PcIj/ePf6 QcYbo M Jj:eQf7 Rca u v w g h i j s vbwbxbE F q G H Kj;eRf8 ScLj=eSf9 TcMj?eTf! UcNj@eUf# VcmbsftfVfufWcXc/c$ YcZc0cOj[eWf% 1cPj]eXf' 2cQj^eYf( 3cRj_eZf) 4c`eD ~bac?cbcnbobtb* pbqbrbSj{e0f+ 5cP |c}c~cPbQbB RbSbTbTj|e1f, 6cUj}e2f- 7cZbp N Vj~e3f. 8cb x y z k l m n t ybzbAbI J r K L Wjaf4f/ 9cXjbf5f: !cYjcf6f; #cZjdf7f= $c0jef8f? %c1jff9f@ 'c2jgf!f[ (c3jhf#f] )c4jif$f^ *c5jjf%f_ +c6jkf'f` ,c

895  

896  

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

898 cdef cydriver.CUgraphNode new_node = NULL 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

899 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

900 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

901 cdef cydriver.CUgraphNode* deps = NULL 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

902 cdef size_t num_deps = 0 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

903  

904 GN_check_valid(self) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

905 if pred_node != NULL: 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

906 deps = &pred_node 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

907 num_deps = 1 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

908  

909 with nogil: 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

910 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfimGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

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

912  

913 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2mfvfwfxfyfzfc d e f FbGbHbIbAfBfCfDfEfFfGfHfIfJfKfLfMf=cNfO _c`c{cKbLbA MbNbObOfPfYbQfRfSfTfUfVfWfXfYfZf?c0fP |c}c~cPbQbB RbSbTb1f2fZb3f4f5f6f7f8f9f!f#f$f%f'f

914  

915  

916cdef inline OpaqueHandle _buffer_attachment_owner(Buffer buf, str label): 

917 """Copy a Buffer's device-pointer handle into an attachment owner.""" 

918 Buffer_check_open(buf) 2$b,dem-d.d/djmjdBe*f+f`m|m?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

919 # The local is required: Cython permits the DevicePtrHandle -> OpaqueHandle 

920 # conversion on assignment, but not directly in a return statement. 

921 cdef OpaqueHandle attachment_owner = buf._h_ptr 2$b,dem-d.d/djdBe*f+f?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

922 return attachment_owner 2$b,dem-d.d/djdBe*f+f?f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

923  

924  

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. 

929  

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``). 

935  

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 

944  

945 if isinstance(operand, Buffer): 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$b,dDoem-d.d/djmjdBe*f+f`m|m?f| Cc:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{ W DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c

946 if owner is not None: 2,dDoem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

947 raise ValueError( 2Doem

948 f"{side}_owner cannot be used when {side} is a Buffer" 2Doem

949 ) 

950 buf = operand 2,dem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

951 attachment_owner = _buffer_attachment_owner(buf, side) 2,dem-d.d/djd*f+f|m:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

952 out_ptr[0] = as_cu(buf._h_ptr) 2,dem-d.d/djd*f+f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

953 return attachment_owner 2,dem-d.d/djd*f+f:d;d=d,f-f(d)d*d(f)f%b'b(bhdid]d.f^d_d`d/f:f{d|d}d;f=f~dae+dub{

954 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$bjmjdBe`m?f| Cc(d)d*d(f)fW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c

955 if owner is None: 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fnffd$bjmjdBe`m?f| CcW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c

956 return OpaqueHandle() 2c d e f FbGbHbIbQ ccdcecfcR gchcicjcS kclcmcncT ocpcqcrcU sctcucvcV wcxcyczc{fjm| CcW DcX EcY HcZ Kc0 Lc1 Mc2 Nc3 jb4 OcA Mb5 Pc6 Qco M 7 Rca u v w g h i j s vbwbxbE F q G H 8 Sc9 Tc! Uc# Vc$ Yc% 1c' 2c( 3c) 4c* pb+ 5cB Rb, 6c- 7cp N . 8cb x y z k l m n t ybzbAbI J r K L / 9c: !c; #c= $c? %c@ 'c[ (c] )c^ *c_ +c` ,c

957 if isinstance(owner, Buffer): 2nffd$bjmjdBe`m?f

958 return _buffer_attachment_owner(owner, f"{side}_owner") 2$bjmjdBe`m?f

959 return make_opaque_py(owner) 2nffd

960  

961  

962cdef inline MemsetNode GN_memset( 

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

964 unsigned int val, unsigned int elem_size, 

965 size_t width, size_t height, size_t pitch): 

966 cdef cydriver.CUgraphNode new_node = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

967 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

968 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

969 cdef cydriver.CUgraphNode* deps = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

970 cdef size_t num_deps = 0 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

971 cdef PreparedAttachment prepared 

972  

973 GN_check_valid(self) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

974 if pred_node != NULL: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

975 deps = &pred_node 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc| CcDcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

976 num_deps = 1 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc| CcDcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

977  

978 cdef cydriver.CUcontext ctx = NULL 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

979 with nogil: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

980 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

981  

982 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS( 

983 dst=c_dst, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

984 pitch=pitch, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

985 value=val, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

986 elementSize=elem_size, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

987 width=width, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

988 height=height, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

989 ) 

990  

991 if dst_owner: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

992 HANDLE_RETURN(graph_prepare_attachment( 2*f+f?f,f-f(f)fhdid.f/f:f;f=fub{

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

994  

995 with nogil: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

996 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

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

998 &memset_params, ctx)) 

999  

1000 if dst_owner: 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

1001 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2*f+f?f,f-f(f)fhdid.f/f:f;f=fub{

1002  

1003 return _registered(MemsetNode._create_with_params( 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

1004 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f FbGbHbIbccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczc*f+f?f| Cc,f-f(f)fhdid.f/f:f;f=fub{ DcEcHcKcLcMcNcjbOcMbPcQcM Rcs vbwbxbE F q G H ScTcUcVcYc1c2c3c4cpb5cRb6c7cN 8ct ybzbAbI J r K L 9c!c#c$c%c'c(c)c*c+c,c

1005 val, elem_size, width, height, pitch)) 

1006  

1007  

1008cdef cydriver.CUmemorytype _get_memcpy_memory_type( 

1009 cydriver.CUdeviceptr ptr) except *: 

1010 cdef unsigned int memory_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1011 cdef cydriver.CUresult ret 

1012 with nogil: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1013 ret = cydriver.cuPointerGetAttribute( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1014 &memory_type, 

1015 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

1016 ptr) 

1017 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1018 HANDLE_RETURN(ret) 

1019 return <cydriver.CUmemorytype>memory_type 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1020  

1021  

1022cdef void _init_memcpy_params( 

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

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

1025 cydriver.CUmemorytype* src_type) except *: 

1026 dst_type[0] = _get_memcpy_memory_type(dst) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1027 src_type[0] = _get_memcpy_memory_type(src) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1028  

1029 c_memset(params, 0, sizeof(params[0])) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1030 params.srcMemoryType = src_type[0] 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1031 params.dstMemoryType = dst_type[0] 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1032 if src_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1033 params.srcHost = <void*><uintptr_t>src 2:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{

1034 else: 

1035 params.srcDevice = src 2c d e f Q R S T U V nffd$b,d-d.d/djdBeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1036 if dst_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1037 params.dstHost = <void*><uintptr_t>dst 2:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{

1038 else: 

1039 params.dstDevice = dst 2c d e f Q R S T U V nffd$b,d-d.d/djdBeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1040 params.WidthInBytes = size 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1041 params.Height = 1 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1042 params.Depth = 1 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1043  

1044  

1045cdef inline MemcpyNode GN_memcpy( 

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

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

1048 cdef cydriver.CUDA_MEMCPY3D params 

1049 cdef cydriver.CUmemorytype c_dst_type 

1050 cdef cydriver.CUmemorytype c_src_type 

1051 _init_memcpy_params( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

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

1053  

1054 cdef cydriver.CUgraphNode new_node = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1055 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1056 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1057 cdef cydriver.CUgraphNode* deps = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1058 cdef size_t num_deps = 0 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1059 cdef PreparedAttachment prepared 

1060  

1061 GN_check_valid(self) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1062 if pred_node != NULL: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1063 deps = &pred_node 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`

1064 num_deps = 1 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`

1065  

1066 cdef cydriver.CUcontext ctx = NULL 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1067 if dst_owner or src_owner: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1068 HANDLE_RETURN(graph_prepare_attachment( 2nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{

1069 h_graph, dst_owner, src_owner, &prepared)) 

1070  

1071 with nogil: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1072 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1073 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

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

1075  

1076 if dst_owner or src_owner: 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1077 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{

1078  

1079 return _registered(MemcpyNode._create_with_params( 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1080 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f Q R S T U V nffd$b,d-d.d/djdBe:d;d=d(d)d*d%b'b(b]d^d_d`d{d|d}d~dae+dub{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1081 c_dst_type, c_src_type)) 

1082  

1083  

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

1085 cdef cydriver.CUgraphNode new_node = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1086 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1087 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1088 cdef cydriver.CUgraphNode* deps = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1089 cdef size_t num_deps = 0 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1090 cdef cydriver.CUresult rollback_status 

1091  

1092 GN_check_valid(self) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1093 GD_check_valid(child_def) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1094 if pred_node != NULL: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1095 deps = &pred_node 2kd

1096 num_deps = 1 2kd

1097  

1098 with nogil: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1099 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

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

1101  

1102 cdef cydriver.CUgraph embedded_graph = NULL 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1103 cdef GraphHandle h_embedded 

1104 try: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1105 with nogil: 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1106 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1107 new_node, &embedded_graph)) 

1108 h_embedded = create_child_graph_handle( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1109 embedded_graph, h_graph, new_node) 

1110 HANDLE_RETURN(graph_clone_attachments( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1111 h_embedded, child_def._h_graph)) 

1112 except: 

1113 with nogil: 

1114 rollback_status = cydriver.cuGraphDestroyNode(new_node) 

1115 if rollback_status == cydriver.CUDA_SUCCESS: 

1116 invalidate_child_graph_state(h_graph, new_node) 

1117 raise 

1118  

1119 return _registered(ChildGraphNode._create_with_params( 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1120 create_graph_node_handle(new_node, h_graph), h_embedded)) 2Kepdqdrdsdtdudvd`b@ccjAclf[c;b^c]cwdkd}f!e~fyd#e$eAdBdgbCd6b7b8b} ~ abbbDdEdFdC GdO HdIdJdKda s LdMdNdOdmbPd9b!b#bcbdbebfbQdRdSdD TdP UdVdWdXdb t YdZd0d1d2d3d4d5d6d7d8d

1121  

1122  

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

1124 GN_check_valid(self) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1125 Event_check_open(ev) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1126 cdef cydriver.CUgraphNode new_node = NULL 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1127 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1128 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1129 cdef cydriver.CUgraphNode* deps = NULL 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1130 cdef size_t num_deps = 0 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1131 cdef PreparedAttachment prepared 

1132  

1133 if pred_node != NULL: 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1134 deps = &pred_node 2MePeUeXe0e3e8eadrgmdsg:cugndvgod

1135 num_deps = 1 2MePeUeXe0e3e8eadrgmdsg:cugndvgod

1136  

1137 cdef OpaqueHandle owner = ev._h_event 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1138 HANDLE_RETURN(graph_prepare_attachment( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

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

1140  

1141 with nogil: 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1142 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

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

1144  

1145 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1146  

1147 return _registered(EventRecordNode._create_with_params( 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1148 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2ngMePeUeXe0e3eVk8eWkogpgadrgmdsg:cugndvgod%k)kpf,k6b/k=k[k{b_kPiQibecedeee_c|kalCedlu vbgljlmlplsfsl9bvlylBl~bEl4i5ineoepeqe|cHlKlFeNlx ybQlTlWlZl2l5l8l#l'l*l-l

1149  

1150  

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

1152 GN_check_valid(self) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1153 Event_check_open(ev) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1154 cdef cydriver.CUgraphNode new_node = NULL 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1155 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1156 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1157 cdef cydriver.CUgraphNode* deps = NULL 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1158 cdef size_t num_deps = 0 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1159 cdef PreparedAttachment prepared 

1160  

1161 if pred_node != NULL: 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1162 deps = &pred_node 2ngNeQeVeYe1e4eogpg9e

1163 num_deps = 1 2ngNeQeVeYe1e4eogpg9e

1164  

1165 cdef OpaqueHandle owner = ev._h_event 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1166 HANDLE_RETURN(graph_prepare_attachment( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

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

1168  

1169 with nogil: 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1170 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

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

1172  

1173 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1174  

1175 return _registered(EventWaitNode._create_with_params( 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1176 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2ngNeQeVeYe1e4eogpg9eXkmdtg;cndod'k*kqf-k7b:k?k]k|b`kPiRifegeheie`c}kblDeelv wbhlklnlqltftl!bwlzlClacFl4i6ireseteue}cIlLlGeOly zbRlUlXl0l3l6l9l$l(l+l.l

1177  

1178  

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

1180 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1181 cdef cydriver.CUgraphNode new_node = NULL 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1182 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1183 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1184 cdef cydriver.CUgraphNode* deps = NULL 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1185 cdef size_t num_deps = 0 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1186 cdef OpaqueHandle fn_owner, data_owner 

1187 cdef PreparedAttachment prepared 

1188  

1189 GN_check_valid(self) 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1190 if pred_node != NULL: 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1191 deps = &pred_node 2$b=bmdtg;cndod

1192 num_deps = 1 2$b=bmdtg;cndod

1193  

1194 _resolve_host_callback( 2ykzkAkBkCksmtmumvmDkKewmEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1195 fn, user_data, &node_params.fn, &node_params.userData, 

1196 &fn_owner, &data_owner) 

1197 HANDLE_RETURN(graph_prepare_attachment( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1198 h_graph, fn_owner, data_owner, &prepared)) 

1199  

1200 with nogil: 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1201 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

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

1203  

1204 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1205  

1206 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1207 return _registered(HostCallbackNode._create_with_params( 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1208 create_graph_node_handle(new_node, h_graph), callable_obj, 2ykzkAkBkCkDkKeEkFkGkHkIkJkKkLkMkNkOkPkQkRkSk#j$jTkUk@cAclfUbVbWbXb1b2b3b4b$b[c%j^cYk]cwdZk=b}fxd!ergmd0k1k~fsgtg2k3kyd:c;cFiGi4k#eugnd5k6k7k$evgod8k9kejzd!k#kfjgj$k(k+krf.k8b;k@k^k}b{kQiRi{c~kjekelemeclEeflw xbilllolrluful#bxlAlDlbcGl5i6i~cJlvewexeyeMlHePlz AbSlVlYl1l4l7l!l%l)l,l/l

1209 node_params.fn, node_params.userData))