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

437 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-29 01:38 +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 

21from cuda.core._kernel_arg_handler cimport ParamHolder 

22from cuda.core._launch_config cimport LaunchConfig 

23from cuda.core._memory._buffer cimport Buffer 

24from cuda.core._module cimport Kernel 

25from cuda.core.graph._graph_definition cimport GraphCondition, GraphDefinition 

26from cuda.core.graph._subclasses cimport ( 

27 AllocNode, 

28 ChildGraphNode, 

29 ConditionalNode, 

30 EmptyNode, 

31 EventRecordNode, 

32 EventWaitNode, 

33 FreeNode, 

34 HostCallbackNode, 

35 IfElseNode, 

36 IfNode, 

37 KernelNode, 

38 MemcpyNode, 

39 MemsetNode, 

40 SwitchNode, 

41 WhileNode, 

42) 

43from cuda.core._resource_handles cimport ( 

44 GraphHandle, 

45 GraphNodeHandle, 

46 OpaqueHandle, 

47 PreparedAttachment, 

48 as_cu, 

49 as_intptr, 

50 as_py, 

51 create_child_graph_handle, 

52 create_graph_node_handle, 

53 graph_clone_attachments, 

54 graph_commit_attachment, 

55 graph_node_get_graph, 

56 graph_prepare_attachment, 

57 invalidate_child_graph_state, 

58 invalidate_graph_node, 

59 make_opaque_py, 

60) 

61from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value 

62  

63from cuda.core.graph._host_callback cimport ( 

64 _resolve_host_callback, 

65) 

66  

67import ctypes as ct 

68import weakref 

69  

70from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

71from cuda.core._utils.validators import check_str_enum 

72from cuda.core._utils.cuda_utils import driver 

73from cuda.core.typing import GraphMemoryType 

74  

75if TYPE_CHECKING: 

76 from cuda.core._device import Device 

77  

78__all__ = ['GraphNode'] 

79  

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

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

82  

83  

84cdef inline GraphNode _registered(GraphNode n): 

85 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2Ie,h^kJe_k,i-i-e^dUiViWi-h:dXiNe.hYilfHk.imfnfofpf_d/hIkJkGiHiIiJiKic d e f ObPbQbRbZi0i1i{c|c}cchLi:h%f`k`dOePeQeqfKkLkdhehIc; JcKcLcMcfhghlj;hmj'f{dRenjSeojTepjrfMkNkhhihqjNcfj= rjOcsjPctjQcujRcjhkh=h;d2iUe?h3i@h=d4iVe[h5i]h(f|dWeXeYesfOkPklhmhSc? TcUcVcWcnhohvj^hwj)f}dxjZeyj0ezj1eAjtfQkRkphqhBjXcgj@ CjYcDjZcEj0cFj1crhshGj_hHj*f~dIj2eJj3eKj4eLjufSkTkthuhMj2cNj[ Oj3cPj4cQj5cRj6cvhwh`h+fae5e6e7evfUkVkxhyh7c] 8c9c!c#czhAh{h?d6i8e|h7i}h@d8i9e~h9i=iai[d!i!ebi#icjdd;fMi$i#eWkBhChDhEhJbKbLbMb?i/i:iXkYk*c[c%i-c.eSbTbUbVbXbYbZb0b5k$e6kcidi%e7k/beifiNiedOiPiGdHdIdJdfd]d2f3f,f:c$c;i]cZk'e;c0k=c3b2b1b.c8k`i[iQilb9k+cDc!k'i(iFh1k4f^cgd{i|iKd]iwfxfZfH 4byfzfgiLdbe-j.j/eUj=f?fShW bc@f[fzb(e)e:eKe_b`b%cX cc{b|bhiMdce/j:j;eVj]f^fThY dc_f`f}b~b=bfbgbhbibiiNdde;j=j=eWj{f|fUhZ ec}f~fjiOdee?j@j?eXjagbgVh0 fccgdgkiPdfe[j]j@eYjegfgWh1 gcgghggeT EcFc,chcpbqbBb2 xbrbsbliQdhe^j_j[eZjigjgXh3 ickglgmiYhRdSdTdUdZhVdWdXdYd: ?c@c/cFbGbB NbHbIbniZdie`j{j]e0jmgng0h4 jcogpgzdAdBdCd5f6f7f8f9foi0dje|j}j^e1jqgrg1h5 kcsgtg1dLeMeWbke?b@bq V [b]bpi2dle~jak_e2jugvg2h6 lcwgxgb z A y l m n o u CbDbAbL M r N O qi3dmebkck`e3jygzg3h7 mcAgBgri4dnedkek{e4jCgDg4h8 ncEgFgsi5doefkgk|e5jGgHg5h9 ocIgJg!fti6dpehkik}e6jKgLg6h! pcMgNgjb7d8dqeDd$b%b^bP +b'b(bui9drejkkk~e7jOgPg7h# qcQgRg)b*b5b{ | } ~ vi!dselkmkaf8jSgTg8h$ rcUgVgwi#dtenkokbf9jWgXg9h% scYgZgxi$duepkqkcf!j0g1g!h' tc2g3gudG :b;bac,babbbmbQ ebcbdbyi%dverkskdf#j4g5g#h( uc6g7g8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwbzi'dwetkukef$j9g!g$h) wc#g$g~cadbdcdAfBfCfDfEfAi(dxevkwkff%j%g'g%h* xc(g)gpdEdFdEbvd6b7bk K 8b9bBi)dyexkykgf'j*g+g'h+ yc,g-ga v w t g h i j s nbobkbC D p E F Ci*dzezkAkhf(j.g/g(h, zc:g;g=gqdwdhjijAedjRfSf/fR -bTfUfDi+dBeBkCkif)j?g@g)h- Ac[g]gFf)iCe*e#k$kGf2kGhHhRi^ 'cIhJh^grdxdjjkjDeejVfWf:fS .bXfYfEi,dEeDkEkjf*j_g`g*h. Bc{g|gFi-dFeFkGkkf+j}g~g+h/ Ccahbh#f_csd}i~i.d^iHfIf0fI !bJfKf$f`ctdajbj/d_iLfMf1fJ #bNfOf*iGe+e%k'kPf3kKhLhSi_ (cMhNh+iHe,e(k)kQf4kOhPhTi` )cQhRh

86  

87  

88cdef class GraphNode: 

89 """A node in a graph definition. 

90  

91 Nodes are created by calling builder methods on GraphDefinition (for 

92 entry-point nodes with no dependencies) or on other Nodes (for 

93 nodes that depend on a predecessor). 

94 """ 

95  

96 @staticmethod 

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

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

99 return GN_create(h_graph, node) 2Ie^kJe_k^dhliljlkl.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0bed:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDc

100  

101 def __repr__(self) -> str: 

102 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2Zl

103 if node == NULL: 2Zl

104 return "<GraphNode entry>" 2Zl

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

106  

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

108 if not isinstance(other, GraphNode): 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(bui9drejkkk~e7jOgPg7h# qc4lQgRg)b*b5b{ | } ~ vi!dselkmkaf8jSgTg8h$ rc5lUgVgwi#dtenkokbf9jWgXg9h% sc6lYgZgxi$duepkqkcf!j0g1g!h' tc7l2g3gudG :b;bac,babbbmbQ ebcbdbyi%dverkskdf#j4g5g#h( uc8l6g7g8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwbzi'dwetkukef$j9g!g$h) wc9l#g$g~cadbdcdAfBfCfDfEfAi(dxevkwkff%j%g'g%h* xc!l(g)gpdEdFdEbvd6b7bk K 8b9bBi)dyexkykgf'j*g+g'h+ yc#l,g-ga v w t g h i j s nbobkbC D p E F Ci*dzezkAkhf(j.g/g(h, zc$l:g;g=gqdwdhjijAedjRfSf/fR -bTfUfDi+dBeBkCkif)j?g@g)h- Ac%l[g]gFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

109 return NotImplemented 24f^cgd{i|iKd]iwfxfZfH 4bxlyfzfui9drejkkk~e7jOgPg7h# qc4lQgRgvi!dselkmkaf8jSgTg8h$ rc5lUgVgwi#dtenkokbf9jWgXg9h% sc6lYgZgxi$duepkqkcf!j0g1g!h' tc7l2g3gyi%dverkskdf#j4g5g#h( uc8l6g7gzi'dwetkukef$j9g!g$h) wc9l#g$gAi(dxevkwkff%j%g'g%h* xc!l(g)gBi)dyexkykgf'j*g+g'h+ yc#l,g-gCi*dzezkAkhf(j.g/g(h, zc$l:g;gDi+dBeBkCkif)j?g@g)h- Ac%l[g]g

110 cdef GraphNode o = <GraphNode>other 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(b)b*b5b{ | } ~ udG :b;bac,babbbmbQ ebcbdb8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwb~cadbdcdAfBfCfDfEfpdEdFdEbvd6b7bk K 8b9ba v w t g h i j s nbobkbC D p E F =gqdwdhjijAedjRfSf/fR -bTfUfFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

111 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(b)b*b5b{ | } ~ udG :b;bac,babbbmbQ ebcbdb8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwb~cadbdcdAfBfCfDfEfpdEdFdEbvd6b7bk K 8b9ba v w t g h i j s nbobkbC D p E F =gqdwdhjijAedjRfSf/fR -bTfUfFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

112 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(b)b*b5b{ | } ~ udG :b;bac,babbbmbQ ebcbdb8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwb~cadbdcdAfBfCfDfEfpdEdFdEbvd6b7bk K 8b9ba v w t g h i j s nbobkbC D p E F =gqdwdhjijAedjRfSf/fR -bTfUfFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

113 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(b)b*b5b{ | } ~ udG :b;bac,babbbmbQ ebcbdb8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwb~cadbdcdAfBfCfDfEfpdEdFdEbvd6b7bk K 8b9ba v w t g h i j s nbobkbC D p E F =gqdwdhjijAedjRfSf/fR -bTfUfFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

114 and as_intptr(self_graph) == as_intptr(other_graph)) 2^dljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRj4f^cgd{i|iKd]iwfxfZfH 4bxlyfzfjb7d8dqeDd$b%b^bP +b'b(b)b*b5b{ | } ~ udG :b;bac,babbbmbQ ebcbdb8g-fhdidjdkd.fldmdndodU GcHcvctbubx ybvbwb~cadbdcdAfBfCfDfEfpdEdFdEbvd6b7bk K 8b9ba v w t g h i j s nbobkbC D p E F =gqdwdhjijAedjRfSf/fR -bTfUfFf^grdxdjjkjDeejVfWf:fS .bDlXfYf#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

115  

116 def __hash__(self) -> int: 

117 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2Ie^kJe_k^dhlil'ljlkl(l.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]krlsltlulvlwl}k~k0lalbl1lcldl2lelfl3lcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDcgiLdbe-j.j/eUj=f?fShW bc)l@f[fzb(e)e:eKe_b`b%cX cc{b|bhiMdce/j:j;eVj]f^fThY dc*l_f`f}b~b=bfbgbhbibiiNdde;j=j=eWj{f|fUhZ ec+l}f~fjiOdee?j@j?eXjagbgVh0 fc,lcgdgkiPdfe[j]j@eYjegfgWh1 gc-lgghggeT EcFc,chcpbqbBb2 xbrbsbliQdhe^j_j[eZjigjgXh3 ic.lkglgmiYhRdSdTdUdZhVdWdXdYd: ?c@c/cFbGbB NbHbIbniZdie`j{j]e0jmgng0h4 jc/logpgzdAdBdCd5f6f7f8f9foi0dje|j}j^e1jqgrg1h5 kc:lsgtg1dLeMeWbke?b@bq V [b]bpi2dle~jak_e2jugvg2h6 lc;lwgxgb z A y l m n o u CbDbAbL M r N O qi3dmebkck`e3jygzg3h7 mc=lAgBgri4dnedkek{e4jCgDg4h8 ncEgFgsi5doefkgk|e5jGgHg5h9 oc?lIgJg!fti6dpehkik}e6jKgLg6h! pc@lMgNgEi,dEeDkEkjf*j_g`g*h. Bc[l{g|gFi-dFeFkGkkf+j}g~g+h/ Cc]lahbh#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

118 return hash((as_intptr(self._h_node), as_intptr(g))) 2Ie^kJe_k^dhlil'ljlkl(l.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]krlsltlulvlwl}k~k0lalbl1lcldl2lelfl3lcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDcgiLdbe-j.j/eUj=f?fShW bc)l@f[fzb(e)e:eKe_b`b%cX cc{b|bhiMdce/j:j;eVj]f^fThY dc*l_f`f}b~b=bfbgbhbibiiNdde;j=j=eWj{f|fUhZ ec+l}f~fjiOdee?j@j?eXjagbgVh0 fc,lcgdgkiPdfe[j]j@eYjegfgWh1 gc-lgghggeT EcFc,chcpbqbBb2 xbrbsbliQdhe^j_j[eZjigjgXh3 ic.lkglgmiYhRdSdTdUdZhVdWdXdYd: ?c@c/cFbGbB NbHbIbniZdie`j{j]e0jmgng0h4 jc/logpgzdAdBdCd5f6f7f8f9foi0dje|j}j^e1jqgrg1h5 kc:lsgtg1dLeMeWbke?b@bq V [b]bpi2dle~jak_e2jugvg2h6 lc;lwgxgb z A y l m n o u CbDbAbL M r N O qi3dmebkck`e3jygzg3h7 mc=lAgBgri4dnedkek{e4jCgDg4h8 ncEgFgsi5doefkgk|e5jGgHg5h9 oc?lIgJg!fti6dpehkik}e6jKgLg6h! pc@lMgNgEi,dEeDkEkjf*j_g`g*h. Bc[l{g|gFi-dFeFkGkkf+j}g~g+h/ Cc]lahbh#f_csd}i~i.d^iHfIf0fI !bylJfKf$f`ctdajbj/d_iLfMf1fJ #bzlNfOf

119  

120 @property 

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

122 """Return the CUDA graph node type. 

123  

124 Returns 

125 ------- 

126 CUgraphNodeType or None 

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

128 """ 

129 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2ElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl+c

130 if node == NULL: 2ElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl+c

131 return None 2El+c

132 cdef cydriver.CUgraphNodeType node_type 

133 with nogil: 2ydFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl

134 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2FlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl

135 return driver.CUgraphNodeType(<int>node_type) 2FlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl

136  

137 @property 

138 def graph(self) -> GraphDefinition: 

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

140 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2^l_l`l{l|l}l

141  

142 @property 

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

144 """Return the underlying driver CUgraphNode handle. 

145  

146 Returns None for the entry node. 

147 """ 

148 return as_py(self._h_node) 2+c4f^cgd{i|iKd]iwfxfZfH 4bxlyfzf

149  

150 @property 

151 def is_valid(self) -> bool: 

152 """Whether this node is valid (not destroyed). 

153  

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

155 """ 

156 return as_intptr(self._h_node) != 0 2-cSbTbUbVb+cDc

157  

158 def destroy(self) -> None: 

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

160  

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

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

163 already-destroyed node (no-op). 

164 """ 

165 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

166 cdef PreparedAttachment prepared 

167 if node == NULL: 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

168 return 2+c

169  

170 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

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

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

173 HANDLE_RETURN(graph_prepare_attachment( 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

174 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared)) 

175 with nogil: 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

176 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+cDc

177  

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

179 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+c

180 invalidate_child_graph_state(h_graph, node) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+c

181 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+c

182 invalidate_graph_node(self._h_node) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+c

183 HANDLE_RETURN(cleanup_status) 2=i?i/i:i[c%i-c.eSbTbUbVbXbYbZb0b:c;i]c;c3b2b1b+c

184  

185 @property 

186 def pred(self) -> AdjacencySetProxy: 

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

188 return AdjacencySetProxy(self, False) 2-elfEl.i{c|c}cchGjHj~lIjJjKjLjambmcmdmMjNjOjPjQjRjemfm}k~k0lalbl1ldded[iQilb+c

189  

190 @pred.setter 

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

192 p = AdjacencySetProxy(self, False) 21bQi

193 p.clear() 21bQi

194 p.update(value) 21bQi

195  

196 @property 

197 def succ(self) -> AdjacencySetProxy: 

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

199 return AdjacencySetProxy(self, True) 2El.iGjHjIjJjKjLjMjNjOjPjQjRjcldl2lelfl3l2b.c8k`i[iQilb9k+c!k

200  

201 @succ.setter 

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

203 s = AdjacencySetProxy(self, True) 2.iQi

204 s.clear() 2.iQi

205 s.update(value) 2.iQi

206  

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

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

209  

210 .. warning:: 

211  

212 Use caution when a retained kernel argument directly or indirectly 

213 owns a graph. Any reference cycle involving the argument and a 

214 graph that retains it cannot be broken by Python's cyclic garbage 

215 collector. Use a weak reference to break such cycles. 

216  

217 Parameters 

218 ---------- 

219 config : LaunchConfig 

220 Launch configuration (grid, block, shared memory, etc.) 

221 kernel : Kernel 

222 The kernel to launch. 

223 *args 

224 Kernel arguments. 

225  

226 Returns 

227 ------- 

228 KernelNode 

229 A new KernelNode representing the kernel launch. 

230 """ 

231 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

232  

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

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

235  

236 This is used to synchronize multiple branches of execution. 

237  

238 Parameters 

239 ---------- 

240 *nodes : GraphNode 

241 Additional nodes to depend on. 

242  

243 Returns 

244 ------- 

245 EmptyNode 

246 A new EmptyNode that depends on all input nodes. 

247 """ 

248 return GN_join(self, nodes) 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

249  

250 def allocate(self, size_t size, *, device: Device | int | None = None, 

251 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

252 peer_access: list[Device | int] | None = None) -> AllocNode: 

253 """Add a memory allocation node depending on this node. 

254  

255 Parameters 

256 ---------- 

257 size : int 

258 Number of bytes to allocate. 

259 device : int or Device, optional 

260 The device on which to allocate memory. If None (default), 

261 uses the current CUDA context's device. 

262 memory_type : GraphMemoryType or str, optional 

263 Type of memory to allocate. One of: 

264  

265 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory, 

266 optimal for GPU kernels. 

267 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from 

268 both host and device. Useful for graphs containing host 

269 callback nodes. Note: may not be supported on all 

270 systems/drivers. 

271 - ``GraphMemoryType.MANAGED``: Managed/unified memory that 

272 automatically migrates between host and device. Useful for 

273 mixed host/device access patterns. 

274  

275 peer_access : list of int or Device, optional 

276 List of devices that should have read-write access to the 

277 allocated memory. If None (default), only the allocating 

278 device has access. 

279  

280 Returns 

281 ------- 

282 AllocNode 

283 A new AllocNode representing the allocation. Access the allocated 

284 device pointer via the dptr property. 

285  

286 Notes 

287 ----- 

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

289 memory allocation nodes per CUDA documentation. 

290 """ 

291 return GN_alloc(self, size, device, memory_type, peer_access) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

292  

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

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

295  

296 Parameters 

297 ---------- 

298 dptr : int 

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

300  

301 Returns 

302 ------- 

303 FreeNode 

304 A new FreeNode representing the free operation. 

305 """ 

306 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

307  

308 def memset( 

309 self, 

310 dst: Buffer | int, 

311 value, 

312 size_t width, 

313 size_t height=1, 

314 size_t pitch=0, 

315 *, 

316 dst_owner=None, 

317 ) -> MemsetNode: 

318 """Add a memset node depending on this node. 

319  

320 .. warning:: 

321  

322 Use caution when a retained operand owner directly or indirectly 

323 owns a graph. Any reference cycle involving the owner and a graph 

324 that retains it cannot be broken by Python's cyclic garbage 

325 collector. Use a weak reference to break such cycles. 

326  

327 Parameters 

328 ---------- 

329 dst : Buffer or int 

330 Destination. When ``dst`` is a :class:`Buffer`, the underlying 

331 allocation is retained for the graph's lifetime. A raw pointer 

332 (``int``) is used as-is; the caller must keep the underlying memory 

333 alive, or supply ``dst_owner`` to have the graph retain it. 

334 value : int or buffer-protocol object 

335 Fill value. int for 1-byte fill (range [0, 256)), 

336 or buffer-protocol object of 1, 2, or 4 bytes. 

337 width : int 

338 Width of the row in elements. 

339 height : int, optional 

340 Number of rows (default 1). 

341 pitch : int, optional 

342 Pitch of destination in bytes (default 0, unused if height is 1). 

343 dst_owner : object, optional 

344 Object retained for the graph's lifetime when ``dst`` is a raw 

345 pointer. A :class:`Buffer` owner retains its underlying allocation, 

346 not the wrapper. Must not be passed when ``dst`` is a :class:`Buffer`. 

347  

348 Returns 

349 ------- 

350 MemsetNode 

351 A new MemsetNode representing the memset operation. 

352  

353 Raises 

354 ------ 

355 ValueError 

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

357 """ 

358 cdef cydriver.CUdeviceptr c_dst 

359 cdef unsigned int val 

360 cdef unsigned int elem_size 

361 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c;f2f3fAlCl,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

362 dst, dst_owner, "dst", &c_dst) 

363 val, elem_size = _parse_fill_value(value) 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c;f2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

364 return GN_memset( 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

365 self, c_dst, dst_attachment_owner, 

366 val, elem_size, width, height, pitch) 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

367  

368 def memcpy( 

369 self, 

370 dst: Buffer | int, 

371 src: Buffer | int, 

372 size_t size, 

373 *, 

374 dst_owner=None, 

375 src_owner=None, 

376 ) -> MemcpyNode: 

377 """Add a memcpy node depending on this node. 

378  

379 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are 

380 auto-detected via the driver, so both device and pinned host 

381 pointers are supported. 

382  

383 .. warning:: 

384  

385 Use caution when a retained operand owner directly or indirectly 

386 owns a graph. Any reference cycle involving the owner and a graph 

387 that retains it cannot be broken by Python's cyclic garbage 

388 collector. Use a weak reference to break such cycles. 

389  

390 Parameters 

391 ---------- 

392 dst : Buffer or int 

393 Destination (device or pinned host). When a :class:`Buffer` is given, 

394 the underlying allocation is retained for the graph's lifetime. A raw 

395 pointer (``int``) is used as-is; the caller must keep the underlying 

396 memory alive, or supply ``dst_owner`` to have the graph retain it. 

397 src : Buffer or int 

398 Source (device or pinned host). Same retention rules as ``dst``; 

399 use ``src_owner`` for a raw pointer. 

400 size : int 

401 Number of bytes to copy. 

402 dst_owner : object, optional 

403 Object retained for the graph's lifetime when ``dst`` is a raw 

404 pointer. A :class:`Buffer` owner retains its underlying allocation. 

405 Must not be passed when ``dst`` is a :class:`Buffer`. 

406 src_owner : object, optional 

407 Object retained for the graph's lifetime when ``src`` is a raw 

408 pointer. A :class:`Buffer` owner retains its underlying allocation. 

409 Must not be passed when ``src`` is a :class:`Buffer`. 

410  

411 Returns 

412 ------- 

413 MemcpyNode 

414 A new MemcpyNode representing the copy operation. 

415  

416 Raises 

417 ------ 

418 ValueError 

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

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

421 """ 

422 cdef cydriver.CUdeviceptr c_dst 

423 cdef cydriver.CUdeviceptr c_src 

424 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f ; = ? @ [ ] #e[c/bGdYl{kHdIdJd|kfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

425 dst, dst_owner, "dst", &c_dst) 

426 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2c d e f ; = ? @ [ ] #e[c/bGd{kHdIdJd|kfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

427 src, src_owner, "src", &c_src) 

428 return GN_memcpy( 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

429 self, c_dst, dst_attachment_owner, 

430 c_src, src_attachment_owner, size) 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

431  

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

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

434  

435 Embeds a clone of the given graph definition as a sub-graph node. 

436 The child graph must not contain allocation, free, or conditional 

437 nodes. 

438  

439 Parameters 

440 ---------- 

441 child : GraphDefinition 

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

443  

444 Returns 

445 ------- 

446 ChildGraphNode 

447 A new ChildGraphNode representing the embedded sub-graph. 

448 """ 

449 return GN_embed(self, <GraphDefinition>child) 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

450  

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

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

453  

454 Parameters 

455 ---------- 

456 event : Event 

457 The event to record. 

458  

459 Returns 

460 ------- 

461 EventRecordNode 

462 A new EventRecordNode representing the event record operation. 

463 """ 

464 return GN_record_event(self, <Event>event) 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

465  

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

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

468  

469 Parameters 

470 ---------- 

471 event : Event 

472 The event to wait for. 

473  

474 Returns 

475 ------- 

476 EventWaitNode 

477 A new EventWaitNode representing the event wait operation. 

478 """ 

479 return GN_wait_event(self, <Event>event) 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

480  

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

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

483  

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

485 Two modes are supported: 

486  

487 - **Python callable**: Pass any callable. The GIL is acquired 

488 automatically. The callable must take no arguments; use closures 

489 or ``functools.partial`` to bind state. 

490 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance. 

491 The function receives a single ``void*`` argument (the 

492 ``user_data``). The caller must keep the ctypes wrapper alive 

493 for the lifetime of the graph. 

494  

495 .. warning:: 

496  

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

498 deadlock or corrupt driver state. 

499  

500 Use caution when a Python callback retains an object that owns a 

501 graph. Any reference cycle involving the callback and a graph that 

502 retains it cannot be broken by Python's cyclic garbage collector. 

503 Use a weak reference to break such cycles. 

504  

505 Parameters 

506 ---------- 

507 fn : callable or ctypes function pointer 

508 The callback function. 

509 user_data : int or bytes-like, optional 

510 Only for ctypes function pointers. If ``int``, passed as a raw 

511 pointer (caller manages lifetime). If bytes-like, the data is 

512 copied and its lifetime is tied to the graph. 

513  

514 Returns 

515 ------- 

516 HostCallbackNode 

517 A new HostCallbackNode representing the callback. 

518 """ 

519 return GN_callback(self, fn, user_data) 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

520  

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

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

523  

524 The body graph executes only when the condition evaluates to 

525 a non-zero value at runtime. 

526  

527 Parameters 

528 ---------- 

529 condition : GraphCondition 

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

531  

532 Returns 

533 ------- 

534 IfNode 

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

536 """ 

537 return _make_conditional_node( 2^dehihmhqhuhyhSjBhJbSbXbxf?f`b^fgb|fbgfgqbjgSdWdGbngAd7f8f9frg@bvgm M zgDgHgLg%bPg| TgXg1gbb5gidmdub!gadCfDfEf'g7b+gh D /gSf@gHhWf`g~gIfMfLhPh

538 self, condition, 

539 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2^dehihmhqhuhyhSjBhJbSbXbxf?f`b^fgb|fbgfgqbjgSdWdGbngAd7f8f9frg@bvgm M zgDgHgLg%bPg| TgXg1gbb5gidmdub!gadCfDfEf'g7b+gh D /gSf@gHhWf`g~gIfMfLhPh

540  

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

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

543  

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

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

546  

547 Parameters 

548 ---------- 

549 condition : GraphCondition 

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

551  

552 Returns 

553 ------- 

554 IfElseNode 

555 A new IfElseNode with branches accessible via 

556 ``.then`` and ``.else_``. 

557 """ 

558 return _make_conditional_node( 2dhhhlhphthxhChKbTbYbwf=f_b]ffb{fagegpbigRdVdFbmgzd5f6f7fqg?bugl L ygCgGgKg$bOg{ SgWg0gab4ghdldtb9g~cAfBfCf%g6b*gg C .gRf?gGhVf_g}gHfLfKhOh

559 self, condition, 

560 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2dhhhlhphthxhChKbTbYbwf=f_b]ffb{fagegpbigRdVdFbmgzd5f6f7fqg?bugl L ygCgGgKg$bOg{ SgWg0gab4ghdldtb9g~cAfBfCf%g6b*gg C .gRf?gGhVf_g}gHfLfKhOh

561  

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

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

564  

565 The body graph executes repeatedly while the condition 

566 evaluates to a non-zero value. 

567  

568 Parameters 

569 ---------- 

570 condition : GraphCondition 

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

572  

573 Returns 

574 ------- 

575 WhileNode 

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

577 """ 

578 return _make_conditional_node( 2ghkhohshwhAhEhMbVb0b'ezf[f|b`fib~fdghgsblgUdYdIbpgCd6f9ftg]bxgo O BgFgJg!fNg(bRg~ VgZg3gdb7gkdodwb$gcdBfEf)g9b-gj F ;gUf]gFfJhYf|gbhKfOfNhRh

579 self, condition, 

580 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2ghkhohshwhAhEhMbVb0b'ezf[f|b`fib~fdghgsblgUdYdIbpgCd6f9ftg]bxgo O BgFgJg!fNg(bRg~ VgZg3gdb7gkdodwb$gcdBfEf)g9b-gj F ;gUf]gFfJhYf|gbhKfOfNhRh

581  

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

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

584  

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

586 value is out of range, no branch executes. 

587  

588 Parameters 

589 ---------- 

590 condition : GraphCondition 

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

592 count : int 

593 Number of switch cases (branches). 

594  

595 Returns 

596 ------- 

597 SwitchNode 

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

599 """ 

600 return _make_conditional_node( 2fhjhnhrhvhzhTjDhLbUbZbyf@f{b_fhb}fcgggrbkgTdXdHbogBd5f8fsg[bwgn N AgEgIg!fMg'bQg} UgYg2gcb6gjdndvb#gbdAfDf(g8b,gi E :gTf[gFfIhXf{gahJfNfMhQh

601 self, condition, 

602 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2fhjhnhrhvhzhTjDhLbUbZbyf@f{b_fhb}fcgggrbkgTdXdHbogBd5f8fsg[bwgn N AgEgIg!fMg'bQg} UgYg2gcb6gjdndvb#gbdAfDf(g8b,gi E :gTf[gFfIhXf{gahJfNfMhQh

603  

604  

605cdef inline ConditionalNode _make_conditional_node( 

606 GraphNode pred, 

607 GraphCondition condition, 

608 cydriver.CUgraphConditionalNodeType cond_type, 

609 unsigned int size, 

610 type node_cls): 

611 if not isinstance(condition, GraphCondition): 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

612 raise TypeError( 

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

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

615 cdef cydriver.CUgraphNodeParams params 

616 cdef cydriver.CUgraphNode new_node = NULL 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

617  

618 c_memset(&params, 0, sizeof(params)) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

619 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

620 params.conditional.handle = condition._c_handle 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

621 params.conditional.type = cond_type 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

622 params.conditional.size = size 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

623  

624 cdef cydriver.CUcontext ctx = NULL 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

625 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

626 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

627 cdef cydriver.CUgraphNode* deps = NULL 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

628 cdef size_t num_deps = 0 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

629  

630 if pred_node != NULL: 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

631 deps = &pred_node 

632 num_deps = 1 

633  

634 with nogil: 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

635 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

636 params.conditional.ctx = ctx 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

637  

638 with nogil: 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

639 IF CUDA_CORE_BUILD_MAJOR >= 13: 

640 HANDLE_RETURN(cydriver.cuGraphAddNode( 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhSjTjBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

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

642 ELSE: 

643 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

645  

646 cdef list branch_list = [] 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

647 cdef unsigned int i 

648 cdef cydriver.CUgraph bg 

649 cdef GraphHandle h_branch 

650 for i in range(size): 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

651 bg = params.conditional.phGraph_out[i] 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

652 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

653 branch_list.append(GraphDefinition._from_handle(h_branch)) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

654 cdef tuple branches = tuple(branch_list) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

655  

656 cdef ConditionalNode n = node_cls.__new__(node_cls) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

657 n._h_node = create_graph_node_handle(new_node, h_graph) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

658 n._condition = condition 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

659 n._cond_type = cond_type 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

660 n._branches = branches 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

661  

662 return _registered(n) 2^ddhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhJbKbLbMbSbTbUbVbXbYbZb0b'ewfxfyfzf=f?f@f[f_b`b{b|b]f^f_f`ffbgbhbib{f|f}f~fagbgcgdgegfggghgpbqbrbsbigjgkglgRdSdTdUdVdWdXdYdFbGbHbIbmgngogpgzdAdBdCd5f6f7f8f9fqgrgsgtg?b@b[b]bugvgwgxgl m n o L M N O ygzgAgBgCgDgEgFgGgHgIgJg!fKgLgMgNg$b%b'b(bOgPgQgRg{ | } ~ SgTgUgVgWgXgYgZg0g1g2g3gabbbcbdb4g5g6g7ghdidjdkdldmdndodtbubvbwb9g!g#g$g~cadbdcdAfBfCfDfEf%g'g(g)g6b7b8b9b*g+g,g-gg h i j C D E F .g/g:g;gRfSfTfUf?g@g[g]gFfGhHhIhJhVfWfXfYf_g`g{g|g}g~gahbhHfIfJfKfLfMfNfOfKhLhMhNhOhPhQhRh

663  

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

665 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2Ie^kJe_k^dhliljlkl.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0bed:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDc

666  

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

668 if node == NULL: 2Ie^kJe_k^dhliljlkl.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0bed:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDc

669 n = GraphNode.__new__(GraphNode) 

670 (<GraphNode>n)._h_node = h_node 

671 return n 

672  

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

674 registered = _node_registry.get(<uintptr_t>h_node.get()) 2Ie^kJe_k^dhliljlkl.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0bed:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDc

675 if registered is not None: 2Ie^kJe_k^dhliljlkl.i{c|c}c`kljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjddJbKbLbMb?i*c-cSbTbUbVbXbYbZb0bed:c$c]c'e;c=c3b2b1b.c`i[iQilb+cDc

676 return <GraphNode>registered 2IeJe^dhliljlkl.i{c|c}cljmj*knjojpj+k,k-kqjfjrjsjtjuj.k/kllmlnlolplqlvjwj:kxjyjzjAj;k=k?k@kBjgjCjDjEjFj[k]kGjHjIjJjKjLjMjNjOjPjQjRjrlsltlulvlwl}k~kalblcldlelflcjdded=c3b2b1b.c`i[iQilb+cDc

677 else: 

678 return _registered(GN_create_impl(h_node)) 2Ie^kJe_k`kljmjnjojpjqjfjrjsjtjujvjwjxjyjzjAjBjgjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;clb

679  

680  

681cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

682 cdef cydriver.CUgraphNodeType node_type 

683 with nogil: 2Ie^kJe_k`kljmjnjojpjqjfjrjsjtjujvjwjxjyjzjAjBjgjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;clb

684 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2Ie^kJe_k`kljmjnjojpjqjfjrjsjtjujvjwjxjyjzjAjBjgjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;clb

685  

686 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2Ie^kJe_k`kljmjnjojpjqjfjrjsjtjujvjwjxjyjzjAjBjgjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjJbKbLbMb?i*c-cSbTbUbVbXbYbZb0b:c$c]c'e;clb

687 return EmptyNode._create_impl(h_node) 2fjgjNj

688 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

689 return KernelNode._create_from_driver(h_node) 2Ie^kJe_k`kJbKbLbMb*c$clb

690 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

691 return AllocNode._create_from_driver(h_node) 2ljmjnjojpjqjfjrjsjtjujvjwjxjyjzjAjBjgjCjDjEjFjGjHjIjJjKjLjMjOjPjQjRj

692 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

693 return FreeNode._create_from_driver(h_node) 

694 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

695 return MemsetNode._create_from_driver(h_node) 2lb

696 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

697 return MemcpyNode._create_from_driver(h_node) 

698 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

699 return ChildGraphNode._create_from_driver(h_node) 2?i-c:c$c;c

700 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

701 return EventRecordNode._create_from_driver(h_node) 

702 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

703 return EventWaitNode._create_from_driver(h_node) 

704 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

705 return HostCallbackNode._create_from_driver(h_node) 2?i-c:c]c;c

706 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

707 return ConditionalNode._create_from_driver(h_node) 2SbTbUbVbXbYbZb0b'e

708 else: 

709 n = GraphNode.__new__(GraphNode) 

710 (<GraphNode>n)._h_node = h_node 

711 return n 

712  

713  

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

715 cdef cydriver.CUgraphNode new_node = NULL 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

716 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

717 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

718 cdef cydriver.CUgraphNode* deps = NULL 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

719 cdef size_t num_deps = 0 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

720 cdef OpaqueHandle args_owner 

721 cdef PreparedAttachment prepared 

722  

723 if pred_node != NULL: 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

724 deps = &pred_node 2IeJechIcNcScXc2c7c=c3b2b1b.clbFh

725 num_deps = 1 2IeJechIcNcScXc2c7c=c3b2b1b.clbFh

726  

727 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS( 

728 kern=as_cu(ker._h_kernel), 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

729 func=<cydriver.CUfunction>NULL, 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

730 gridDimX=conf.grid[0], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

731 gridDimY=conf.grid[1], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

732 gridDimZ=conf.grid[2], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

733 blockDimX=conf.block[0], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

734 blockDimY=conf.block[1], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

735 blockDimZ=conf.block[2], 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

736 sharedMemBytes=conf.shmem_size, 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

737 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

738 extra=NULL, 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

739 ctx=<cydriver.CUcontext>NULL, 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

740 ) 

741  

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

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

744 cdef OpaqueHandle kernel_owner = ker._h_kernel 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

745 kernel_args = ker_args.kernel_args 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

746 if kernel_args is not None: 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

747 args_owner = make_opaque_py(kernel_args) 2Ie,hJeeifi=c3b2b1b.clbFh

748 HANDLE_RETURN(graph_prepare_attachment( 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

749 h_graph, kernel_owner, args_owner, &prepared)) 

750  

751 with nogil: 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

752 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

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

754  

755 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

756  

757 return _registered(KernelNode._create_with_params( 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

758 create_graph_node_handle(new_node, h_graph), 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

759 conf.grid, conf.block, conf.shmem_size, 2Ie,hJe_dGiHiIiJiKichLi`dIc{dNc|dSc}dXc~d2cae7cMiJbKbLbMb*ceifiNiedOiPi$c=c3b2b1b.clbFh^cZfLdShzb%cMdTh}b~b=bfbgbhbibNdUhOdVhPdWhT BbQdXh: Zd0h0d1h1dLeMeWbke?b@bq V [b]b2d2hb u 3d3h4d4h5d5h6d6hjb^b9d7h)b*b5b{ | } ~ !d8h#d9h$d!hG mb%d#hU 'd$h(d%hpdEdFdEbvd6b7bk K 8b9b)d'ha s *d(hqd/f+d)hCeRird:f,d*h-d+h_c0f`c1fGeSiHeTi

760 ker._h_kernel)) 

761  

762  

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

764 cdef vector[cydriver.CUgraphNode] deps 

765 cdef cydriver.CUgraphNode new_node = NULL 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

766 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

767 cdef GraphNode other 

768 cdef cydriver.CUgraphNode* deps_ptr = NULL 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

769 cdef size_t num_deps = 0 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

770 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

771  

772 if pred_node != NULL: 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

773 deps.push_back(pred_node) 2:d;d=d?d@d[ddd

774 for other in nodes: 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

775 if as_cu((<GraphNode>other)._h_node) != NULL: 2:dNec d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e[d!e=c3b2b1b.cgdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

776 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2:dNec d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e[d!e=c3b2b1b.cgdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

777  

778 num_deps = deps.size() 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

779 if num_deps > 0: 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

780 deps_ptr = deps.data() 2:dNec d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e[d!edd=c3b2b1b.cgdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

781  

782 with nogil: 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

783 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

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

785  

786 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2:dNe.ic d e f {c|c}cOe; Re= ;dUe=dVeWe? Ze@ 2e[ 5e] ?d8e@d9e=i[d!ecjdd=c3b2b1b.c8k`i[iQi9k!k'i(igdH beW X ceY deZ ee0 fe1 geT EcFc,chcpbqbBb2 xbrbsbhe3 B ie4 je5 q le6 b z A y l m n o r me7 ne8 oe9 pe! P re# se$ te% ue' udG :b;bac,babbbmbQ ebcbdbve( x we) xe* k ye+ a v w t g h i j p ze, wdR Be- *e^ xdS Ee. Fe/ sdI tdJ +e_ ,e`

787  

788  

789cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device, 

790 object memory_type, object peer_access): 

791 cdef int device_id 

792 cdef cydriver.CUdevice dev 

793  

794 if device is None: 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

795 with nogil: 2-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

796 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

797 device_id = <int>dev 2-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

798 else: 

799 device_id = getattr(device, 'device_id', device) 2,i-i

800  

801 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

802 cdef cydriver.CUgraphNode new_node = NULL 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

803 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

804 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

805 cdef cydriver.CUgraphNode* deps = NULL 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

806 cdef size_t num_deps = 0 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

807  

808 if pred_node != NULL: 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

809 deps = &pred_node 2-e-h:d.h:h%f;h'f=h;d?h@h=d[h]h(f^h)f_h*f`h+f{h?d|h}h@d~hai[dbi

810 num_deps = 1 2-e-h:d.h:h%f;h'f=h;d?h@h=d[h]h(f^h)f_h*f`h+f{h?d|h}h@d~hai[dbi

811  

812 cdef vector[cydriver.CUmemAccessDesc] access_descs 

813 cdef int peer_id 

814 cdef list peer_ids = [] 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

815  

816 if peer_access is not None: 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

817 for peer_dev in peer_access: 

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

819 peer_ids.append(peer_id) 

820 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

821 cydriver.CUmemLocation_st( 

822 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

823 peer_id 

824 ), 

825 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

826 )) 

827  

828 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

829  

830 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

831 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

832 alloc_params.bytesize = size 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

833  

834 check_str_enum(memory_type_str, GraphMemoryType) 2,i-i-e,j@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

835 if memory_type_str == "device": 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

836 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

837 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

838 alloc_params.poolProps.location.id = device_id 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

839 elif memory_type_str == "host": 2%f'f(f)f*f+f

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

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

842 alloc_params.poolProps.location.id = 0 

843 elif memory_type_str == "managed": 2%f'f(f)f*f+f

844 IF CUDA_CORE_BUILD_MAJOR >= 13: 

845 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2%f'f(f)f*f+f

846 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2%f'f(f)f*f+f

847 alloc_params.poolProps.location.id = device_id 2%f'f(f)f*f+f

848 ELSE: 

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

850  

851 if access_descs.size() > 0: 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

852 alloc_params.accessDescs = access_descs.data() 

853 alloc_params.accessDescCount = access_descs.size() 

854  

855 with nogil: 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

856 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2,i-i-e@iUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

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

858  

859 return _registered(AllocNode._create_with_params( 2,i-i-eUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

860 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2,i-i-eUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

861 device_id, memory_type_str, tuple(peer_ids))) 2,i-i-eUiViWi-h:dXiNe.hYilfmfnfofpfc d e f ObPbQbRbZi0i1i{c|c}c:h%fOePeQeqfIc; JcKcLcMc;h'fReSeTerfNc= OcPcQcRc=h;d2iUe?h3i@h=d4iVe[h5i]h(fWeXeYesfSc? TcUcVcWc^h)fZe0e1etfXc@ YcZc0c1c_h*f2e3e4euf2c[ 3c4c5c6c`h+f5e6e7evf7c] 8c9c!c#c{h?d6i8e|h7i}h@d8i9e~h9iai[d!i!ebi#idd;f$i$e%eDc4fgdKdH 4bgibe/eW bczb(e)e:eKe_b`b%cX cc{b|bhice;eY dciide=eZ ecjiee?e0 fckife@e1 gcgeT EcFc,chcpbqbBb2 xbrbsblihe[e3 ic: ?c@c/cFbGbB NbHbIbniie]e4 jcoije^e5 kcWbq V pile_e6 lcb z A y l m n o u CbDbAbL M r N O qime`e7 mcrine{e8 ncsioe|e9 octipe}e! pcjb7d8dqeDd$b%b^bP +b'b(buire~e# qcviseaf$ rcwitebf% scxiuecf' tcudG :b;bac,babbbmbQ ebcbdbyivedf( ucU GcHcvctbubx ybvbwbziweef) wcAixeff* xcEbk K Biyegf+ yca v w t g h i j s nbobkbC D p E F Cizehf, zc=gwdAeR -bDiBeif- Ac)i*eGf^ 'c^gxdDeS .bEiEejf. BcFiFekf/ Cc#fsd.dI !b$ftd/dJ #b*i+ePf_ (c+i,eQf` )c

862  

863  

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

865 cdef cydriver.CUgraphNode new_node = NULL 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

866 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

867 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

868 cdef cydriver.CUgraphNode* deps = NULL 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

869 cdef size_t num_deps = 0 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

870  

871 if pred_node != NULL: 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

872 deps = &pred_node 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

873 num_deps = 1 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

874  

875 with nogil: 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

876 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfglKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

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

878  

879 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2-elfmfnfofpfc d e f ObPbQbRbqfrfsftfufvfKd/e:e;e=e?e@e,c[e: ?c@c/cFbGbB NbHbIb]e^eWb_e`e{e|e}eqe~eafbfcfacdfU GcHcvctbubx ybvbwbefffEbgfhfAeifGfDejfkf.d/dPfQf

880  

881  

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

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

884 if not buf._h_ptr: 2/bGd{kHdIdJd|kfd]d2f3fAlCl,f

885 raise ValueError(f"{label} Buffer has no active allocation") 2|kAlCl

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

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

888 cdef OpaqueHandle attachment_owner = buf._h_ptr 2/bGd{kHdIdJdfd]d2f3f,f

889 return attachment_owner 2/bGd{kHdIdJdfd]d2f3f,f

890  

891  

892cdef inline OpaqueHandle _resolve_memcpy_operand( 

893 object operand, object owner, str side, cydriver.CUdeviceptr* out_ptr): 

894 """Resolve an operand to a pointer and optional attachment owner. 

895  

896 ``operand`` is a :class:`Buffer` or a raw integer address; its device 

897 pointer is written to ``out_ptr``. For a :class:`Buffer` operand, returns an 

898 owner that retains the underlying allocation (not the wrapper). For a raw 

899 pointer, returns an owner built from ``owner`` (or an empty handle when 

900 ``owner`` is ``None``). 

901  

902 Raises 

903 ------ 

904 ValueError 

905 If ``operand`` is a :class:`Buffer` and ``owner`` is not ``None``. 

906 If a :class:`Buffer` operand or ``*_owner`` has no active allocation. 

907 """ 

908 cdef Buffer buf 

909 cdef OpaqueHandle attachment_owner 

910  

911 if isinstance(operand, Buffer): 2c d e f ObPbQbRb; JcKcLcMc= OcPcQcRc? TcUcVcWc@ YcZc0c1c[ 3c4c5c6c] 8c9c!c#c;f#e[c/bGdYl{kHdIdJd|kfd]d2f3fAlCl,flb+cH 4bW bcX ccY dcZ ec0 fc1 gc2 xb3 icB Nb4 jc5 kcq V 6 lcb z A y l m n o u CbDbAbL M r N O 7 mc8 nc9 oc! pcP +b# qc$ rc% sc' tcQ eb( ucx yb) wc* xck K + yca v w t g h i j s nbobkbC D p E F , zcR -b- Ac^ 'cS .b. Bc/ CcI !bJ #b_ (c` )c

912 if owner is not None: 2GdYl{kHdIdJdfd2f3fCl

913 raise ValueError( 2Yl{k

914 f"{side}_owner cannot be used when {side} is a Buffer" 2Yl{k

915 ) 

916 buf = operand 2Gd{kHdIdJdfd2f3fCl

917 attachment_owner = _buffer_attachment_owner(buf, side) 2Gd{kHdIdJdfd2f3fCl

918 out_ptr[0] = as_cu(buf._h_ptr) 2Gd{kHdIdJdfd2f3f

919 return attachment_owner 2Gd{kHdIdJdfd2f3f

920 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f ObPbQbRb; JcKcLcMc= OcPcQcRc? TcUcVcWc@ YcZc0c1c[ 3c4c5c6c] 8c9c!c#c;f#e[c/b|kfd]dAl,flb+cH 4bW bcX ccY dcZ ec0 fc1 gc2 xb3 icB Nb4 jc5 kcq V 6 lcb z A y l m n o u CbDbAbL M r N O 7 mc8 nc9 oc! pcP +b# qc$ rc% sc' tcQ eb( ucx yb) wc* xck K + yca v w t g h i j s nbobkbC D p E F , zcR -b- Ac^ 'cS .b. Bc/ CcI !bJ #b_ (c` )c

921 if owner is None: 2c d e f ObPbQbRb; JcKcLcMc= OcPcQcRc? TcUcVcWc@ YcZc0c1c[ 3c4c5c6c] 8c9c!c#c;f#e[c/b|kfd]dAl,flb+cH 4bW bcX ccY dcZ ec0 fc1 gc2 xb3 icB Nb4 jc5 kcq V 6 lcb z A y l m n o u CbDbAbL M r N O 7 mc8 nc9 oc! pcP +b# qc$ rc% sc' tcQ eb( ucx yb) wc* xck K + yca v w t g h i j s nbobkbC D p E F , zcR -b- Ac^ 'cS .b. Bc/ CcI !bJ #b_ (c` )c

922 return OpaqueHandle() 2c d e f ObPbQbRb; JcKcLcMc= OcPcQcRc? TcUcVcWc@ YcZc0c1c[ 3c4c5c6c] 8c9c!c#c;f|klb+cH 4bW bcX ccY dcZ ec0 fc1 gc2 xb3 icB Nb4 jc5 kcq V 6 lcb z A y l m n o u CbDbAbL M r N O 7 mc8 nc9 oc! pcP +b# qc$ rc% sc' tcQ eb( ucx yb) wc* xck K + yca v w t g h i j s nbobkbC D p E F , zcR -b- Ac^ 'cS .b. Bc/ CcI !bJ #b_ (c` )c

923 if isinstance(owner, Buffer): 2#e[c/b|kfd]dAl,f

924 return _buffer_attachment_owner(owner, f"{side}_owner") 2/b|kfd]dAl,f

925 return make_opaque_py(owner) 2#e[c

926  

927  

928cdef inline MemsetNode GN_memset( 

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

930 unsigned int val, unsigned int elem_size, 

931 size_t width, size_t height, size_t pitch): 

932 cdef cydriver.CUgraphNode new_node = NULL 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

933 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

934 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

935 cdef cydriver.CUgraphNode* deps = NULL 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

936 cdef size_t num_deps = 0 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

937 cdef PreparedAttachment prepared 

938  

939 if pred_node != NULL: 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

940 deps = &pred_node 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#clb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

941 num_deps = 1 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#clb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

942  

943 cdef cydriver.CUcontext ctx = NULL 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

944 with nogil: 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

945 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

946  

947 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS( 

948 dst=c_dst, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

949 pitch=pitch, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

950 value=val, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

951 elementSize=elem_size, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

952 width=width, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

953 height=height, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

954 ) 

955  

956 if dst_owner: 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

957 HANDLE_RETURN(graph_prepare_attachment( 22f3f,f

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

959  

960 with nogil: 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

961 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

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

963 &memset_params, ctx)) 

964  

965 if dst_owner: 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

966 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 22f3f,f

967  

968 return _registered(MemsetNode._create_with_params( 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

969 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f ObPbQbRbJcKcLcMcOcPcQcRcTcUcVcWcYcZc0c1c3c4c5c6c8c9c!c#c2f3f,flb+c4bbcccdcecfcgcxbicNbjckcV lcu CbDbAbL M r N O mcncocpc+bqcrcsctcebucybwcxcK ycs nbobkbC D p E F zc-bAc'c.bBcCc!b#b(c)c

970 val, elem_size, width, height, pitch)) 

971  

972  

973cdef inline MemcpyNode GN_memcpy( 

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

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

976 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

977 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

978 cdef cydriver.CUresult ret 

979 with nogil: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

980 ret = cydriver.cuPointerGetAttribute( 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

981 &dst_mem_type, 

982 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

983 c_dst) 

984 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

985 HANDLE_RETURN(ret) 

986 ret = cydriver.cuPointerGetAttribute( 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

987 &src_mem_type, 

988 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

989 c_src) 

990 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

991 HANDLE_RETURN(ret) 

992  

993 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

994 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

995  

996 cdef cydriver.CUDA_MEMCPY3D params 

997 c_memset(&params, 0, sizeof(params)) 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

998  

999 params.srcMemoryType = c_src_type 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1000 params.dstMemoryType = c_dst_type 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1001 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1002 params.srcHost = <const void*><uintptr_t>c_src 

1003 else: 

1004 params.srcDevice = c_src 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1005 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1006 params.dstHost = <void*><uintptr_t>c_dst 

1007 else: 

1008 params.dstDevice = c_dst 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1009 params.WidthInBytes = size 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1010 params.Height = 1 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1011 params.Depth = 1 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1012  

1013 cdef cydriver.CUgraphNode new_node = NULL 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1014 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1015 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1016 cdef cydriver.CUgraphNode* deps = NULL 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1017 cdef size_t num_deps = 0 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1018 cdef PreparedAttachment prepared 

1019  

1020 if pred_node != NULL: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1021 deps = &pred_node 1cdef;=?@[]HWXYZ0123B45q6bzAylmnor789!P#$%'Q(x)*k+avwtghijp,R-^S./IJ_`

1022 num_deps = 1 1cdef;=?@[]HWXYZ0123B45q6bzAylmnor789!P#$%'Q(x)*k+avwtghijp,R-^S./IJ_`

1023  

1024 cdef cydriver.CUcontext ctx = NULL 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1025 if dst_owner or src_owner: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1026 HANDLE_RETURN(graph_prepare_attachment( 2#e[c/bGdHdIdJdfd]d

1027 h_graph, dst_owner, src_owner, &prepared)) 

1028  

1029 with nogil: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1030 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1031 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

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

1033  

1034 if dst_owner or src_owner: 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1035 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2#e[c/bGdHdIdJdfd]d

1036  

1037 return _registered(MemcpyNode._create_with_params( 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1038 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f ; = ? @ [ ] #e[c/bGdHdIdJdfd]dH W X Y Z 0 1 2 3 B 4 5 q 6 b z A y l m n o r 7 8 9 ! P # $ % ' Q ( x ) * k + a v w t g h i j p , R - ^ S . / I J _ `

1039 c_dst_type, c_src_type)) 

1040  

1041  

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

1043 cdef cydriver.CUgraphNode new_node = NULL 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1044 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1045 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1046 cdef cydriver.CUgraphNode* deps = NULL 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1047 cdef size_t num_deps = 0 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1048 cdef cydriver.CUresult rollback_status 

1049  

1050 if pred_node != NULL: 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1051 deps = &pred_node 

1052 num_deps = 1 

1053  

1054 with nogil: 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1055 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

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

1057  

1058 cdef cydriver.CUgraph embedded_graph = NULL 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1059 cdef GraphHandle h_embedded 

1060 try: 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1061 with nogil: 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1062 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1063 new_node, &embedded_graph)) 

1064 h_embedded = create_child_graph_handle( 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1065 embedded_graph, h_graph, new_node) 

1066 HANDLE_RETURN(graph_clone_attachments( 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1067 h_embedded, child_def._h_graph)) 

1068 except: 

1069 with nogil: 

1070 rollback_status = cydriver.cuGraphDestroyNode(new_node) 

1071 if rollback_status == cydriver.CUDA_SUCCESS: 

1072 invalidate_child_graph_state(h_graph, new_node) 

1073 raise 

1074  

1075 return _registered(ChildGraphNode._create_with_params( 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1076 create_graph_node_handle(new_node, h_graph), h_embedded)) 2_d`d{d|d}d~dae*c%i-c.e:c$c]c;c^cLdzbMd}b~b=bfbgbhbibNdOdPdT Qd: Zd0d1d2db u 3d4d5d6djb9d)b*b5b{ | } ~ !d#d$dG %dU 'd(dpd)da s *dqd+dCerd,d-d_c`cGeHe

1077  

1078  

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

1080 cdef cydriver.CUgraphNode new_node = NULL 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1081 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1082 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1083 cdef cydriver.CUgraphNode* deps = NULL 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1084 cdef size_t num_deps = 0 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1085 cdef PreparedAttachment prepared 

1086  

1087 if pred_node != NULL: 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1088 deps = &pred_node 2PeSeXe0e3e6e$eed

1089 num_deps = 1 2PeSeXe0e3e6e$eed

1090  

1091 cdef OpaqueHandle owner = ev._h_event 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1092 HANDLE_RETURN(graph_prepare_attachment( 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

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

1094  

1095 with nogil: 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1096 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

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

1098  

1099 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1100  

1101 return _registered(EventRecordNode._create_with_params( 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1102 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2/hPeSeXe0e3e6e5k$e6kcidied{i-j(e/j}b;j?j[jEc^jmiYhRdSdTdUd?c`j|jLe~jz Cbbkdkfkhk7djk)blknkpk:brk8g-fhdidjdkdGctkvkEdxkv nbzkhjBk#kjjDkFk}iaj%k(k

1103  

1104  

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

1106 cdef cydriver.CUgraphNode new_node = NULL 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1107 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1108 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1109 cdef cydriver.CUgraphNode* deps = NULL 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1110 cdef size_t num_deps = 0 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1111 cdef PreparedAttachment prepared 

1112  

1113 if pred_node != NULL: 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1114 deps = &pred_node 2/hQeTeYe1e4e7ecidi%e

1115 num_deps = 1 2/hQeTeYe1e4e7ecidi%e

1116  

1117 cdef OpaqueHandle owner = ev._h_event 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1118 HANDLE_RETURN(graph_prepare_attachment( 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

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

1120  

1121 with nogil: 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1122 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

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

1124  

1125 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1126  

1127 return _registered(EventWaitNode._create_with_params( 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1128 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2/hQeTeYe1e4e7ecidi%e7k|i.j)e:j~b=j@j]jFc_jmiZhVdWdXdYd@c{j}jMeakA Dbckekgkik8dkk*bmkokqk;bsk8g.fldmdndodHcukwkFdykw obAkijCk$kkjEkGk~ibj'k)k

1129  

1130  

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

1132 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1133 cdef cydriver.CUgraphNode new_node = NULL 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1134 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1135 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1136 cdef cydriver.CUgraphNode* deps = NULL 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1137 cdef size_t num_deps = 0 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1138 cdef OpaqueHandle fn_owner, data_owner 

1139 cdef PreparedAttachment prepared 

1140  

1141 if pred_node != NULL: 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1142 deps = &pred_node 2/bDc

1143 num_deps = 1 2/bDc

1144  

1145 _resolve_host_callback( 2HkBlIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1146 fn, user_data, &node_params.fn, &node_params.userData, 

1147 &fn_owner, &data_owner) 

1148 HANDLE_RETURN(graph_prepare_attachment( 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1149 h_graph, fn_owner, data_owner, &prepared)) 

1150  

1151 with nogil: 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1152 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

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

1154  

1155 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1156  

1157 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1158 return _registered(HostCallbackNode._create_with_params( 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1159 create_graph_node_handle(new_node, h_graph), callable_obj, 2HkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWk/i:iXkYk-c.eSbTbUbVbXbYbZb0b/b:c;i]cZk;c0kDc'i(i1k]iUjKeVj=bWjXjYjhcZjYhZh/c0jzdAdBdCd1jke2jy Ab3j4j5j6jDd7j5b8j9j!j,b#j-f.fvc$j~cadbdcd%jvd'jt kb(jdj)j2kej*j+j^i_i3k4k

1160 node_params.fn, node_params.userData))