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

442 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-19 01:12 +0000

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 as_cu, 

48 as_intptr, 

49 as_py, 

50 create_graph_handle_ref, 

51 create_graph_node_handle, 

52 graph_node_get_graph, 

53 graph_set_slot, 

54 invalidate_graph_node, 

55 make_opaque_py, 

56) 

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

58  

59from cuda.core.graph._host_callback cimport ( 

60 _attach_host_callback_owners, 

61 _resolve_host_callback, 

62) 

63  

64import ctypes as ct 

65import weakref 

66  

67from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

68from cuda.core._utils.validators import check_str_enum 

69from cuda.core._utils.cuda_utils import driver 

70from cuda.core.typing import GraphMemoryType 

71  

72if TYPE_CHECKING: 

73 from cuda.core._device import Device 

74  

75__all__ = ['GraphNode'] 

76  

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

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

79  

80  

81cdef inline GraphNode _registered(GraphNode n): 

82 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2PdCh6kQd7k0i1i5eRdEiFiGi6hIdHioe7hIi`ekk2i{e|e}e~epe8hlkmkqirisitiuic d e f PbQbRbSbJiKiLi'c(c)c;gvi9hVf8kqereseteafnkok=g?gyc: FcGcHcIc@g[g;i!h=iWfueve?iwe@ixe[ibfpkqk]g^g]izc+i; ^iJc_iKc`iLc{iMc_g`g#hJdMiye$hNi%hKdOize'hPi(hXfAeBeCeDecfrksk{g|gAc= NcOcPcQc}g~g|i)h}iYfEe~iFeajGebjHecjdftkukahbhdjBc,i? ejRcfjScgjTchjUcchdhij*hjjZfIekjJeljKemjLenjefvkwkehfhojCcpj@ qjVcrjWcsjXctjYcghhh+h0fMeNeOePeffxkykihjhDc[ Zc0c1c2ckhlh,hLdQiQe-hRi.hMdSiRe/hTiuj:hNdUiSe;hVi(i.c7fwiWimhnhohphJbKbLbMbzkAk#cHkTeIk=h?hUeJkDhEhxi/cyizirdsdtdud:cOd1f2f8f8cBkCkVeWeDk9c(b7bXb3cKk8i4iAifbLk;cMk:gMf=c?c9i!ivd5igfhfJfG Ybifjf@hSdTdXjYj6exj9f!fFhV ]b#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _b(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |b,f-f^hYdZd3j4j!eAj.f/fIhZ }b:f;f_h0d1d5j6j#eBj=f?fJh0 ~b@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 cc_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dc}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 eccgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fcgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gckglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 icsgtgSfdi,d-d.j/j,eJjugvgTh! jcwgxgqbEdFd.dodZb0b-bK 8b1b2bei/d:d:j;j-eKjygzgUh# kcAgBg9b!b5b{ | } ~ fi;d=d=j?j.eLjCgDgVh$ lcEgFggi?d@d@j[j/eMjGgHgWh% mcIgJghi[d]d]j^j:eNjKgLgXh' ncMgNgcdJ #b$b=b6babbbgbL ebcbdbii^d_d_j`j;eOjOgPgYh( ocQgRgSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbubji`d{d{j|j=ePjTgUgZh) rcVgWg*c+c,c-ckflfmfnfofki|d}d}j~j?eQjXgYg0h* scZg0gddpdqdBbedTbUbk M VbWbli~daeakbk@eRj1g2g1h+ tc3g4ga u v s g h i j t vbwbhbC D p E F mibececkdk[eSj5g6g2h, uc7g8g9gfdgd-i.ide)iBfCf5fN %bDfEfnieefeekfk]eTj!g#g3h- vc$g%gpfXiZe0eNkOkqfEkqhrhBi] 5cshth'ghdid/i:ige*iFfGf6fO 'bHfIfoiheiegkhk^eUj(g)g4h. wc*g+gpijekeikjk_eVj,g-g5h/ xc.g/gTf}c~c#i$iGd6irfsfKfH 3btfufUfadbd%i'iHd7ivfwfLfI 4bxfyfYi1e2ePkQkzfFkuhvhCi^ 6cwhxhZi3e4eRkSkAfGkyhzhDi_ 7cAhBh

83  

84  

85cdef class GraphNode: 

86 """A node in a graph definition. 

87  

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

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

90 nodes that depend on a predecessor). 

91 """ 

92  

93 @staticmethod 

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

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

96 return GN_create(h_graph, node) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c

97  

98 def __repr__(self) -> str: 

99 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2Bl

100 if node == NULL: 2Bl

101 return "<GraphNode entry>" 2Bl

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

103  

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

105 if not isinstance(other, GraphNode): 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2bei/d:d:j;j-eKjygzgUh# kcGlAgBg9b!b5b{ | } ~ fi;d=d=j?j.eLjCgDgVh$ lcHlEgFggi?d@d@j[j/eMjGgHgWh% mcIlIgJghi[d]d]j^j:eNjKgLgXh' ncJlMgNgcdJ #b$b=b6babbbgbL ebcbdbii^d_d_j`j;eOjOgPgYh( ocKlQgRgSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbubji`d{d{j|j=ePjTgUgZh) rcLlVgWg*c+c,c-ckflfmfnfofki|d}d}j~j?eQjXgYg0h* scMlZg0gddpdqdBbedTbUbk M VbWbli~daeakbk@eRj1g2g1h+ tcNl3g4ga u v s g h i j t vbwbhbC D p E F mibececkdk[eSj5g6g2h, ucOl7g8g9gfdgd-i.ide)iBfCf5fN %bDfEfnieefeekfk]eTj!g#g3h- vcPl$g%gpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

106 return NotImplemented 2Mf=c?c9i!ivd5igfhfJfG Yb~kifjfei/d:d:j;j-eKjygzgUh# kcGlAgBgfi;d=d=j?j.eLjCgDgVh$ lcHlEgFggi?d@d@j[j/eMjGgHgWh% mcIlIgJghi[d]d]j^j:eNjKgLgXh' ncJlMgNgii^d_d_j`j;eOjOgPgYh( ocKlQgRgji`d{d{j|j=ePjTgUgZh) rcLlVgWgki|d}d}j~j?eQjXgYg0h* scMlZg0gli~daeakbk@eRj1g2g1h+ tcNl3g4gmibececkdk[eSj5g6g2h, ucOl7g8gnieefeekfk]eTj!g#g3h- vcPl$g%g

107 cdef GraphNode o = <GraphNode>other 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

108 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

109 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

110 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

111 and as_intptr(self_graph) == as_intptr(other_graph)) 2Rd;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtjMf=c?c9i!ivd5igfhfJfG Yb~kifjfqbEdFd.dodZb0b-bK 8b1b2b9b!b5b{ | } ~ cdJ #b$b=b6babbbgbL ebcbdbSg3f@c[c]c^c4f_c`c{c|cU pcqc[brbsbw ybtbub*c+c,c-ckflfmfnfofddpdqdBbedTbUbk M VbWba u v s g h i j t vbwbhbC D p E F 9gfdgd-i.ide)iBfCf5fN %bDfEfpf'ghdid/i:ige*iFfGf6fO 'bflHfIfTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

112  

113 def __hash__(self) -> int: 

114 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2Pd6kQd7kRd-k.kQl/k:kRl2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5k^k_k`k{k|k}k#k$kCl%k'kDl(k)kEl*k+kFl(i.cJbKbLbMb#c8cVe9c(b7bXb3c8i4iAifb;c@hSdTdXjYj6exj9f!fFhV ]bSl#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _bTl(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |bUl,f-f^hYdZd3j4j!eAj.f/fIhZ }bVl:f;f_h0d1d5j6j#eBj=f?fJh0 ~bWl@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 ccXl_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dcYl}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 ecZlcgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fc0lgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gc1lkglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 ic2lsgtgSfdi,d-d.j/j,eJjugvgTh! jc3lwgxgoiheiegkhk^eUj(g)g4h. wc4l*g+gpijekeikjk_eVj,g-g5h/ xc5l.g/gTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

115 return hash((as_intptr(self._h_node), as_intptr(g))) 2jdPd6kQd7kRd-k.kQl/k:kRl2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5k^k_k`k{k|k}k#k$kCl%k'kDl(k)kEl*k+kFl(i.cJbKbLbMb#c8cVe9c(b7bXb3c8i4iAifb;c@hSdTdXjYj6exj9f!fFhV ]bSl#f$fCbXeYe7ele.b/bEcW ^b:b;b[hUdVdZj0j8eyj%f'fGhX _bTl(f)f`b{b?bibjbkblb]hWdXd1j2j9ezj*f+fHhY |bUl,f-f^hYdZd3j4j!eAj.f/fIhZ }bVl:f;f_h0d1d5j6j#eBj=f?fJh0 ~bWl@f[f2dT acbc4c@bmbnbzb1 xbobpb`h3d4d7j8j$eCj]f^fKh2 ccXl_f`f{hLhwdxdydzdMhAdBdCdDd` $c%c!cDbEbB NbFbGb|h5d6d9j!j%eDj{f|fNh3 dcYl}f~fkdldmdndNfOfPfQfRf}h7d8d#j$j'eEjagbgOh4 ecZlcgdg9dmeneOb!d)b*bq 5 +b,b~h#d$d%j'j(eFjegfgPh6 fc0lgghgb z A x l m n o y HbIbAbP Q r R S ai%d'd(j)j)eGjigjgQh7 gc1lkglgbi(d)d*j+j*eHjmgngRh8 hcogpgci*d+d,j-j+eIjqgrgSh9 ic2lsgtgSfdi,d-d.j/j,eJjugvgTh! jc3lwgxgoiheiegkhk^eUj(g)g4h. wc4l*g+gpijekeikjk_eVj,g-g5h/ xc5l.g/gTf}c~c#i$iGd6irfsfKfH 3baltfufUfadbd%i'iHd7ivfwfLfI 4bblxfyf

116  

117 @property 

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

119 """Return the CUDA graph node type. 

120  

121 Returns 

122 ------- 

123 CUgraphNodeType or None 

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

125 """ 

126 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2glhliljlklllmlnlolplqlrlsltlulvlwlxlylzl;c

127 if node == NULL: 2glhliljlklllmlnlolplqlrlsltlulvlwlxlylzl;c

128 return None 2gl;c

129 cdef cydriver.CUgraphNodeType node_type 

130 with nogil: 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl

131 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl

132 return driver.CUgraphNodeType(<int>node_type) 2hliljlklllmlnlolplqlrlsltlulvlwlxlylzl

133  

134 @property 

135 def graph(self) -> GraphDefinition: 

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

137 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 26l7l8l9l!l#l

138  

139 @property 

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

141 """Return the underlying driver CUgraphNode handle. 

142  

143 Returns None for the entry node. 

144 """ 

145 return as_py(self._h_node) 2;cMf=c?c9i!ivd5igfhfJfG Yb~kifjf

146  

147 @property 

148 def is_valid(self) -> bool: 

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

150  

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

152 """ 

153 return as_intptr(self._h_node) != 0 2;c

154  

155 def destroy(self) -> None: 

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

157  

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

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

160 already-destroyed node (no-op). 

161 """ 

162 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2uj(b7bXb;c

163 if node == NULL: 2uj(b7bXb;c

164 return 2;c

165  

166 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2uj(b7bXb;c

167 invalidate_graph_node(self._h_node) 2uj(b7bXb;c

168 with nogil: 2uj(b7bXb;c

169 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2uj(b7bXb;c

170  

171 @property 

172 def pred(self) -> AdjacencySetProxy: 

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

174 return AdjacencySetProxy(self, False) 25e`egl2i'c(c)c;gijjj$lkjljmjnj%l'l(l)lojpjqjrjsjtj*l+l#k$kCl%k'kDl.c/c4iAifb;c

175  

176 @pred.setter 

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

178 p = AdjacencySetProxy(self, False) 2XbAi

179 p.clear() 2XbAi

180 p.update(value) 2XbAi

181  

182 @property 

183 def succ(self) -> AdjacencySetProxy: 

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

185 return AdjacencySetProxy(self, True) 2gl2iijjjkjljmjnjojpjqjrjsjtj(k)kEl*k+kFl7b3cKk8i4iAifbLk;cMk

186  

187 @succ.setter 

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

189 s = AdjacencySetProxy(self, True) 22iAi

190 s.clear() 22iAi

191 s.update(value) 22iAi

192  

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

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

195  

196 Parameters 

197 ---------- 

198 config : LaunchConfig 

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

200 kernel : Kernel 

201 The kernel to launch. 

202 *args 

203 Kernel arguments. 

204  

205 Returns 

206 ------- 

207 KernelNode 

208 A new KernelNode representing the kernel launch. 

209 """ 

210 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

211  

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

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

214  

215 This is used to synchronize multiple branches of execution. 

216  

217 Parameters 

218 ---------- 

219 *nodes : GraphNode 

220 Additional nodes to depend on. 

221  

222 Returns 

223 ------- 

224 EmptyNode 

225 A new EmptyNode that depends on all input nodes. 

226 """ 

227 return GN_join(self, nodes) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

228  

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

230 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

233  

234 Parameters 

235 ---------- 

236 size : int 

237 Number of bytes to allocate. 

238 device : int or Device, optional 

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

240 uses the current CUDA context's device. 

241 memory_type : GraphMemoryType or str, optional 

242 Type of memory to allocate. One of: 

243  

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

245 optimal for GPU kernels. 

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

247 both host and device. Useful for graphs containing host 

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

249 systems/drivers. 

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

251 automatically migrates between host and device. Useful for 

252 mixed host/device access patterns. 

253  

254 peer_access : list of int or Device, optional 

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

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

257 device has access. 

258  

259 Returns 

260 ------- 

261 AllocNode 

262 A new AllocNode representing the allocation. Access the allocated 

263 device pointer via the dptr property. 

264  

265 Notes 

266 ----- 

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

268 memory allocation nodes per CUDA documentation. 

269 """ 

270 return GN_alloc(self, size, device, memory_type, peer_access) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

271  

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

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

274  

275 Parameters 

276 ---------- 

277 dptr : int 

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

279  

280 Returns 

281 ------- 

282 FreeNode 

283 A new FreeNode representing the free operation. 

284 """ 

285 return GN_free(self, <cydriver.CUdeviceptr>dptr) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

286  

287 def memset( 

288 self, 

289 dst: Buffer | int, 

290 value, 

291 size_t width, 

292 size_t height=1, 

293 size_t pitch=0, 

294 *, 

295 dst_owner=None, 

296 ) -> MemsetNode: 

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

298  

299 Parameters 

300 ---------- 

301 dst : Buffer or int 

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

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

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

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

306 value : int or buffer-protocol object 

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

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

309 width : int 

310 Width of the row in elements. 

311 height : int, optional 

312 Number of rows (default 1). 

313 pitch : int, optional 

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

315 dst_owner : object, optional 

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

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

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

319  

320 Returns 

321 ------- 

322 MemsetNode 

323 A new MemsetNode representing the memset operation. 

324  

325 Raises 

326 ------ 

327 ValueError 

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

329 """ 

330 cdef cydriver.CUdeviceptr c_dst 

331 cdef unsigned int val 

332 cdef unsigned int elem_size 

333 cdef OpaqueHandle dst_slot_owner 

334 dst_slot_owner = _resolve_memcpy_operand(dst, dst_owner, "dst", &c_dst) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c7f1f2fclel8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

335 val, elem_size = _parse_fill_value(value) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c7f1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

336 return GN_memset(self, c_dst, dst_slot_owner, val, elem_size, width, height, pitch) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

337  

338 def memcpy( 

339 self, 

340 dst: Buffer | int, 

341 src: Buffer | int, 

342 size_t size, 

343 *, 

344 dst_owner=None, 

345 src_owner=None, 

346 ) -> MemcpyNode: 

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

348  

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

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

351 pointers are supported. 

352  

353 Parameters 

354 ---------- 

355 dst : Buffer or int 

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

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

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

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

360 src : Buffer or int 

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

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

363 size : int 

364 Number of bytes to copy. 

365 dst_owner : object, optional 

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

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

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

369 src_owner : object, optional 

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

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

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

373  

374 Returns 

375 ------- 

376 MemcpyNode 

377 A new MemcpyNode representing the copy operation. 

378  

379 Raises 

380 ------ 

381 ValueError 

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

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

384 """ 

385 cdef cydriver.CUdeviceptr c_dst 

386 cdef cydriver.CUdeviceptr c_src 

387 cdef OpaqueHandle dst_slot_owner, src_slot_owner 

388 dst_slot_owner = _resolve_memcpy_operand(dst, dst_owner, "dst", &c_dst) 2c d e f : ; = ? @ [ rdAl9ksdtdud!k:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

389 src_slot_owner = _resolve_memcpy_operand(src, src_owner, "src", &c_src) 2c d e f : ; = ? @ [ rd9ksdtdud!k:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

390 return GN_memcpy(self, c_dst, dst_slot_owner, c_src, src_slot_owner, size) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

391  

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

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

394  

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

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

397 nodes. 

398  

399 Parameters 

400 ---------- 

401 child : GraphDefinition 

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

403  

404 Returns 

405 ------- 

406 ChildGraphNode 

407 A new ChildGraphNode representing the embedded sub-graph. 

408 """ 

409 return GN_embed(self, <GraphDefinition>child) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

410  

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

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

413  

414 Parameters 

415 ---------- 

416 event : Event 

417 The event to record. 

418  

419 Returns 

420 ------- 

421 EventRecordNode 

422 A new EventRecordNode representing the event record operation. 

423 """ 

424 return GN_record_event(self, <Event>event) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

425  

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

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

428  

429 Parameters 

430 ---------- 

431 event : Event 

432 The event to wait for. 

433  

434 Returns 

435 ------- 

436 EventWaitNode 

437 A new EventWaitNode representing the event wait operation. 

438 """ 

439 return GN_wait_event(self, <Event>event) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

440  

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

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

443  

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

445 Two modes are supported: 

446  

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

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

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

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

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

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

453 for the lifetime of the graph. 

454  

455 .. warning:: 

456  

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

458 deadlock or corrupt driver state. 

459  

460 Parameters 

461 ---------- 

462 fn : callable or ctypes function pointer 

463 The callback function. 

464 user_data : int or bytes-like, optional 

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

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

467 copied and its lifetime is tied to the graph. 

468  

469 Returns 

470 ------- 

471 HostCallbackNode 

472 A new HostCallbackNode representing the callback. 

473 """ 

474 return GN_callback(self, fn, user_data) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

475  

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

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

478  

479 The body graph executes only when the condition evaluates to 

480 a non-zero value at runtime. 

481  

482 Parameters 

483 ---------- 

484 condition : GraphCondition 

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

486  

487 Returns 

488 ------- 

489 IfNode 

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

491 """ 

492 return _make_conditional_node( 2Rd?g^g|gbhfhjhvjmhJbhf!f/b'fjb+f/f?fnb^fxdBdEb|fldPfQfRfbg*bfgm Q jgngrgvg0bzg| DgHgLgbbPg[c`csbUg+cmfnfofYgUb2gh D 6gCf#grhGf)g-gsfwfvhzh

493 self, condition, 

494 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2Rd?g^g|gbhfhjhvjmhJbhf!f/b'fjb+f/f?fnb^fxdBdEb|fldPfQfRfbg*bfgm Q jgngrgvg0bzg| DgHgLgbbPg[c`csbUg+cmfnfofYgUb2gh D 6gCf#grhGf)g-gsfwfvhzh

495  

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

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

498  

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

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

501  

502 Parameters 

503 ---------- 

504 condition : GraphCondition 

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

506  

507 Returns 

508 ------- 

509 IfElseNode 

510 A new IfElseNode with branches accessible via 

511 ``.then`` and ``.else_``. 

512 """ 

513 return _make_conditional_node( 2=g]g{gahehihnhKbgf9f.b%fib*f.f=fmb]fwdAdDb{fkdNfOfPfag)begl P igmgqgugZbyg{ CgGgKgabOg@c_crbTg*ckflfmfXgTb1gg C 5gBf!gqhFf(g,grfvfuhyh

514 self, condition, 

515 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2=g]g{gahehihnhKbgf9f.b%fib*f.f=fmb]fwdAdDb{fkdNfOfPfag)begl P igmgqgugZbyg{ CgGgKgabOg@c_crbTg*ckflfmfXgTb1gg C 5gBf!gqhFf(g,grfvfuhyh

516  

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

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

519  

520 The body graph executes repeatedly while the condition 

521 evaluates to a non-zero value. 

522  

523 Parameters 

524 ---------- 

525 condition : GraphCondition 

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

527  

528 Returns 

529 ------- 

530 WhileNode 

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

532 """ 

533 return _make_conditional_node( 2[g`g~gdhhhlhphMbVejf$f;b)flb-f;f[fpb`fzdDdGb~fndOfRfdg,bhgo S lgpgtgSfxg2bBg~ FgJgNgdbRg^c|cubWg-clfof0gWb4gj F 8gEf%gpfthIf+g/gufyfxhBh

534 self, condition, 

535 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2[g`g~gdhhhlhphMbVejf$f;b)flb-f;f[fpb`fzdDdGb~fndOfRfdg,bhgo S lgpgtgSfxg2bBg~ FgJgNgdbRg^c|cubWg-clfof0gWb4gj F 8gEf%gpfthIf+g/gufyfxhBh

536  

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

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

539  

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

541 value is out of range, no branch executes. 

542  

543 Parameters 

544 ---------- 

545 condition : GraphCondition 

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

547 count : int 

548 Number of switch cases (branches). 

549  

550 Returns 

551 ------- 

552 SwitchNode 

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

554 """ 

555 return _make_conditional_node( 2@g_g}gchghkhwjohLbif#f:b(fkb,f:f@fob_fydCdFb}fmdNfQfcg+bggn R kgogsgSfwg1bAg} EgIgMgcbQg]c{ctbVg,ckfnfZgVb3gi E 7gDf$gpfshHf*g.gtfxfwhAh

556 self, condition, 

557 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2@g_g}gchghkhwjohLbif#f:b(fkb,f:f@fob_fydCdFb}fmdNfQfcg+bggn R kgogsgSfwg1bAg} EgIgMgcbQg]c{ctbVg,ckfnfZgVb3gi E 7gDf$gpfshHf*g.gtfxfwhAh

558  

559  

560cdef inline ConditionalNode _make_conditional_node( 

561 GraphNode pred, 

562 GraphCondition condition, 

563 cydriver.CUgraphConditionalNodeType cond_type, 

564 unsigned int size, 

565 type node_cls): 

566 if not isinstance(condition, GraphCondition): 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

567 raise TypeError( 

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

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

570 cdef cydriver.CUgraphNodeParams params 

571 cdef cydriver.CUgraphNode new_node = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

572  

573 c_memset(&params, 0, sizeof(params)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

574 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

575 params.conditional.handle = condition._c_handle 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

576 params.conditional.type = cond_type 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

577 params.conditional.size = size 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

578  

579 cdef cydriver.CUcontext ctx = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

580 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

581 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

582 cdef cydriver.CUgraphNode* deps = NULL 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

583 cdef size_t num_deps = 0 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

584  

585 if pred_node != NULL: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

586 deps = &pred_node 

587 num_deps = 1 

588  

589 with nogil: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

590 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

591 params.conditional.ctx = ctx 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

592  

593 with nogil: 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

594 IF CUDA_CORE_BUILD_MAJOR >= 13: 

595 HANDLE_RETURN(cydriver.cuGraphAddNode( 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhvjwjmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

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

597 ELSE: 

598 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

600  

601 cdef list branch_list = [] 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

602 cdef unsigned int i 

603 cdef cydriver.CUgraph bg 

604 cdef GraphHandle h_branch 

605 for i in range(size): 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

606 bg = params.conditional.phGraph_out[i] 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

607 h_branch = create_graph_handle_ref(bg, h_graph) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

608 branch_list.append(GraphDefinition._from_handle(h_branch)) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

609 cdef tuple branches = tuple(branch_list) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

610  

611 cdef ConditionalNode n = node_cls.__new__(node_cls) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

612 n._h_node = create_graph_node_handle(new_node, h_graph) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

613 n._condition = condition 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

614 n._cond_type = cond_type 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

615 n._branches = branches 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

616  

617 return _registered(n) 2Rd=g?g@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphJbKbLbMbVegfhfifjf9f!f#f$f.b/b:b;b%f'f(f)fibjbkblb*f+f,f-f.f/f:f;f=f?f@f[fmbnbobpb]f^f_f`fwdxdydzdAdBdCdDdDbEbFbGb{f|f}f~fkdldmdndNfOfPfQfRfagbgcgdg)b*b+b,begfggghgl m n o P Q R S igjgkglgmgngogpgqgrgsgtgSfugvgwgxgZb0b1b2bygzgAgBg{ | } ~ CgDgEgFgGgHgIgJgKgLgMgNgabbbcbdbOgPgQgRg@c[c]c^c_c`c{c|crbsbtbubTgUgVgWg*c+c,c-ckflfmfnfofXgYgZg0gTbUbVbWb1g2g3g4gg h i j C D E F 5g6g7g8gBfCfDfEf!g#g$g%gpfqhrhshthFfGfHfIf(g)g*g+g,g-g.g/grfsftfufvfwfxfyfuhvhwhxhyhzhAhBh

618  

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

620 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c

621  

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

623 if node == NULL: 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c

624 n = GraphNode.__new__(GraphNode) 

625 (<GraphNode>n)._h_node = h_node 

626 return n 

627  

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

629 registered = _node_registry.get(<uintptr_t>h_node.get()) 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c

630 if registered is not None: 2Pd6kQd7kRd-k.k/k:k2i'c(c)c8k;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.cJbKbLbMb#c/c8cVe9c(b7bXb3c8i4iAifb;c

631 return <GraphNode>registered 2PdQdRd-k.k/k:k2i'c(c)c;i=iTk?i@i[iUkVkWk]i+i^i_i`i{iXkYk;k=k?k@k[k]k|i}iZk~iajbjcj0k1k2k3kdj,iejfjgjhj4k5kijjjkjljmjnjojpjqjrjsjtj^k_k`k{k|k}k#k$k%k'k(k)k*k+k(i.c/c9c(b7bXb3c8i4iAifb;c

632 else: 

633 return _registered(GN_create_impl(h_node)) 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb

634  

635  

636cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

637 cdef cydriver.CUgraphNodeType node_type 

638 with nogil: 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb

639 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb

640  

641 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2Pd6kQd7k8k;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojpjqjrjsjtjJbKbLbMb#c8cVefb

642 return EmptyNode._create_impl(h_node) 2+i,ipj

643 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

644 return KernelNode._create_from_driver(h_node) 2Pd6kQd7k8kJbKbLbMb#c8cfb

645 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

646 return AllocNode._create_from_driver(h_node) 2;i=i?i@i[i]i+i^i_i`i{i|i}i~iajbjcjdj,iejfjgjhjijjjkjljmjnjojqjrjsjtj

647 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

648 return FreeNode._create_from_driver(h_node) 

649 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

650 return MemsetNode._create_from_driver(h_node) 2fb

651 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

652 return MemcpyNode._create_from_driver(h_node) 

653 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

654 return ChildGraphNode._create_from_driver(h_node) 28c

655 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

656 return EventRecordNode._create_from_driver(h_node) 

657 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

658 return EventWaitNode._create_from_driver(h_node) 

659 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

660 return HostCallbackNode._create_from_driver(h_node) 

661 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

662 return ConditionalNode._create_from_driver(h_node) 2Ve

663 else: 

664 n = GraphNode.__new__(GraphNode) 

665 (<GraphNode>n)._h_node = h_node 

666 return n 

667  

668  

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

670 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

671 cdef cydriver.CUgraphNode new_node = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

672 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

673 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

674 cdef cydriver.CUgraphNode* deps = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

675 cdef size_t num_deps = 0 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

676 cdef OpaqueHandle owner 

677  

678 if pred_node != NULL: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

679 deps = &pred_node 2PdQd;gyczcAcBcCcDc9c(b7bXb3cfb:g

680 num_deps = 1 2PdQd;gyczcAcBcCcDc9c(b7bXb3cfb:g

681  

682 node_params.kern = as_cu(ker._h_kernel) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

683 node_params.func = <cydriver.CUfunction>NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

684 node_params.gridDimX = conf.grid[0] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

685 node_params.gridDimY = conf.grid[1] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

686 node_params.gridDimZ = conf.grid[2] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

687 node_params.blockDimX = conf.block[0] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

688 node_params.blockDimY = conf.block[1] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

689 node_params.blockDimZ = conf.block[2] 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

690 node_params.sharedMemBytes = conf.shmem_size 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

691 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

692 node_params.extra = NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

693 node_params.ctx = <cydriver.CUcontext>NULL 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

694  

695 with nogil: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

696 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

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

698  

699 # Slot 0 keeps the kernel loaded; slot 1 keeps the Python kernel-argument 

700 # objects (notably device Buffers) alive for the graph's lifetime. The 

701 # driver copies argument values into the node at add time but does not own 

702 # the device memory they reference. 

703 owner = ker._h_kernel 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

704 try: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

705 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

706 kernel_args = ker_args.kernel_args 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

707 if kernel_args is not None: 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

708 owner = make_opaque_py(kernel_args) 2PdChQdDhEh9c(b7bXb3cfb:g

709 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 1, owner)) 2PdChQdDhEh9c(b7bXb3cfb:g

710 except: 

711 cydriver.cuGraphDestroyNode(new_node) # best effort 

712 raise 

713  

714 return _registered(KernelNode._create_with_params( 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

715 create_graph_node_handle(new_node, h_graph), 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

716 conf.grid, conf.block, conf.shmem_size, 2PdChQdpeqirisitiui;gviqeycuezcAeAcEeBcIeCcMeDcwiJbKbLbMb#cDhEhxi/cyizi8c9c(b7bXb3cfb:g=cJfSdFhCbEcUdGh`b{b?bibjbkblbWdHhYdIh0dJhT zb3dKh` 5dNh7dOh9dmeneOb!d)b*bq 5 +b,b#dPhb y %dQh(dRh*dSh,dThqb-b/dUh9b!b5b{ | } ~ ;dVh?dWh[dXhJ gb^dYhU `dZh|d0hddpdqdBbedTbUbk M VbWb~d1ha t be2hfd5fee3hZeBihd6fhe4hje5h}cKfadLf1eCi3eDi

717 ker._h_kernel)) 

718  

719  

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

721 cdef vector[cydriver.CUgraphNode] deps 

722 cdef cydriver.CUgraphNode new_node = NULL 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

723 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

724 cdef GraphNode other 

725 cdef cydriver.CUgraphNode* deps_ptr = NULL 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

726 cdef size_t num_deps = 0 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

727 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

728  

729 if pred_node != NULL: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

730 deps.push_back(pred_node) 2IdJdKdLdMdNd.c

731 for other in nodes: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

732 if as_cu((<GraphNode>other)._h_node) != NULL: 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

733 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

734  

735 num_deps = deps.size() 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

736 if num_deps > 0: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

737 deps_ptr = deps.data() 2Idoec d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReNdSe.c9c(b7bXb3c?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

738  

739 with nogil: 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

740 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

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

742  

743 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2Idoe2ic d e f 'c(c)cre: ve; JdyeKdzeBe= Fe? Je@ Ne[ LdQeMdReujNdSe(i.c9c(b7bXb3cKk8i4iAiLkMk?cG TdV W VdX XdY ZdZ 1d0 2dT acbc4c@bmbnbzb1 xbobpb4d2 B 6d3 8d4 q $d6 b z A x l m n o r 'd7 )d8 +d9 -d! K :d# =d$ @d% ]d' cdJ #b$b=b6babbbgbL ebcbdb_d( w {d) }d* k ae+ a u v s g h i j p ce, gdN fe- 0e] idO ie. ke/ ~cH bdI 2e^ 4e_

744  

745  

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

747 object memory_type, object peer_access): 

748 cdef int device_id 

749 cdef cydriver.CUdevice dev 

750  

751 if device is None: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

752 with nogil: 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

753 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

754 device_id = <int>dev 25eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

755 else: 

756 device_id = getattr(device, 'device_id', device) 20i1i

757  

758 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

759 cdef cydriver.CUgraphNode new_node = NULL 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

760 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

761 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

762 cdef cydriver.CUgraphNode* deps = NULL 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

763 cdef size_t num_deps = 0 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

764  

765 if pred_node != NULL: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

766 deps = &pred_node 25e6hId7h9hVf!hWf#hJd$h%hKd'h(hXf)hYf*hZf+h0f,hLd-h.hMd/h:hNd;h

767 num_deps = 1 25e6hId7h9hVf!hWf#hJd$h%hKd'h(hXf)hYf*hZf+h0f,hLd-h.hMd/h:hNd;h

768  

769 cdef vector[cydriver.CUmemAccessDesc] access_descs 

770 cdef int peer_id 

771 cdef list peer_ids = [] 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

772  

773 if peer_access is not None: 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

774 for peer_dev in peer_access: 

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

776 peer_ids.append(peer_id) 

777 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

778 cydriver.CUmemLocation_st( 

779 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

780 peer_id 

781 ), 

782 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

783 )) 

784  

785 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

786  

787 c_memset(&alloc_params, 0, sizeof(alloc_params)) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

788 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

789 alloc_params.bytesize = size 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

790  

791 check_str_enum(memory_type_str, GraphMemoryType) 20i1i5eWj3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

792 if memory_type_str == "device": 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

793 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

794 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

795 alloc_params.poolProps.location.id = device_id 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

796 elif memory_type_str == "host": 2VfWfXfYfZf0f

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

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

799 alloc_params.poolProps.location.id = 0 

800 elif memory_type_str == "managed": 2VfWfXfYfZf0f

801 IF CUDA_CORE_BUILD_MAJOR >= 13: 

802 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2VfWfXfYfZf0f

803 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2VfWfXfYfZf0f

804 alloc_params.poolProps.location.id = device_id 2VfWfXfYfZf0f

805 ELSE: 

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

807  

808 if access_descs.size() > 0: 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

809 alloc_params.accessDescs = access_descs.data() 

810 alloc_params.accessDescCount = access_descs.size() 

811  

812 with nogil: 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

813 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 20i1i5e3iEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

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

815  

816 return _registered(AllocNode._create_with_params( 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

817 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

818 device_id, memory_type_str, tuple(peer_ids))) 20i1i5eEiFiGi6hIdHioe7hIi`e{e|e}e~ec d e f PbQbRbSbJiKiLi'c(c)c9hVfreseteafyc: FcGcHcIc!hWfvewexebfzc; JcKcLcMc#hJdMiye$hNi%hKdOize'hPi(hXfBeCeDecfAc= NcOcPcQc)hYfFeGeHedfBc? RcScTcUc*hZfJeKeLeefCc@ VcWcXcYc+h0fNeOePeffDc[ Zc0c1c2c,hLdQiQe-hRi.hMdSiRe/hTi:hNdUiSe;hVi.c7fWiTeUeMf?cvdG Yb@hTd6eV ]bCbXeYe7ele.b/bEcW ^b:b;b[hVd8eX _b]hXd9eY |b^hZd!eZ }b_h1d#e0 ~b2dT acbc4c@bmbnbzb1 xbobpb`h4d$e2 cc` $c%c!cDbEbB NbFbGb|h6d%e3 dc}h8d'e4 ecObq 5 ~h$d(e6 fcb z A x l m n o y HbIbAbP Q r R S ai'd)e7 gcbi)d*e8 hcci+d+e9 icdi-d,e! jcqbEdFd.dodZb0b-bK 8b1b2bei:d-e# kcfi=d.e$ lcgi@d/e% mchi]d:e' nccdJ #b$b=b6babbbgbL ebcbdbii_d;e( ocU pcqc[brbsbw ybtbubji{d=e) rcki}d?e* scBbk M liae@e+ tca u v s g h i j t vbwbhbC D p E F mice[e, uc9ggddeN %bnife]e- vcXi0eqf] 5c'gidgeO 'boiie^e. wcpike_e/ xcTf~cGdH 3bUfbdHdI 4bYi2ezf^ 6cZi4eAf_ 7c

819  

820  

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

822 cdef cydriver.CUgraphNode new_node = NULL 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

823 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

824 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

825 cdef cydriver.CUgraphNode* deps = NULL 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

826 cdef size_t num_deps = 0 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

827  

828 if pred_node != NULL: 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

829 deps = &pred_node 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

830 num_deps = 1 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

831  

832 with nogil: 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

833 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefff,kvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

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

835  

836 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 25e`e{e|e}e~ec d e f PbQbRbSbafbfcfdfefffvd6e7e8e9e!e#e4c$e` $c%c!cDbEbB NbFbGb%e'eOb(e)e*e+e,e.d-e.e/e:e=b;eU pcqc[brbsbw ybtbub=e?eBb@e[ede]eqfge^e_eGdHdzfAf

837  

838  

839cdef inline OpaqueHandle _buffer_slot_owner(Buffer buf, str label): 

840 """Copy a Buffer's device-pointer handle into a graph slot owner.""" 

841 cdef OpaqueHandle slot_owner 

842 if not buf._h_ptr: 2rd9ksdtdud!k:cOd1f2fclel8f

843 raise ValueError(f"{label} Buffer has no active allocation") 2!kclel

844 slot_owner = buf._h_ptr 2rd9ksdtdud:cOd1f2f8f

845 return slot_owner 2rd9ksdtdud:cOd1f2f8f

846  

847  

848cdef inline OpaqueHandle _resolve_memcpy_operand( 

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

850 """Resolve a memcpy/memset operand to a pointer and optional slot owner. 

851  

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

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

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

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

856 ``owner`` is ``None``). 

857  

858 Raises 

859 ------ 

860 ValueError 

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

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

863 """ 

864 cdef Buffer buf 

865  

866 if isinstance(operand, Buffer): 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7frdAl9ksdtdud!k:cOd1f2fclel8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c

867 if owner is not None: 2rdAl9ksdtdud:c1f2fel

868 raise ValueError( 2Al9k

869 f"{side}_owner cannot be used when {side} is a Buffer" 2Al9k

870 ) 

871 buf = operand 2rd9ksdtdud:c1f2fel

872 slot_owner = _buffer_slot_owner(buf, side) 2rd9ksdtdud:c1f2fel

873 out_ptr[0] = as_cu(buf._h_ptr) 2rd9ksdtdud:c1f2f

874 return slot_owner 2rd9ksdtdud:c1f2f

875 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!k:cOdcl8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c

876 if owner is None: 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!k:cOdcl8fWefb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c

877 return OpaqueHandle() 2c d e f PbQbRbSb: FcGcHcIc; JcKcLcMc= NcOcPcQc? RcScTcUc@ VcWcXcYc[ Zc0c1c2c7f!kfb;cG YbV ]bW ^bX _bY |bZ }b0 ~b1 xb2 ccB Nb3 dc4 ecq 5 6 fcb z A x l m n o y HbIbAbP Q r R S 7 gc8 hc9 ic! jcK 8b# kc$ lc% mc' ncL eb( ocw yb) rc* sck M + tca u v s g h i j t vbwbhbC D p E F , ucN %b- vc] 5cO 'b. wc/ xcH 3bI 4b^ 6c_ 7c

878 if isinstance(owner, Buffer): 2!k:cOdcl8fWe

879 return _buffer_slot_owner(owner, f"{side}_owner") 2!k:cOdcl8f

880 return make_opaque_py(owner) 2We

881  

882  

883cdef inline MemsetNode GN_memset( 

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

885 unsigned int val, unsigned int elem_size, 

886 size_t width, size_t height, size_t pitch): 

887 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

888 cdef cydriver.CUgraphNode new_node = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

889 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

890 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

891 cdef cydriver.CUgraphNode* deps = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

892 cdef size_t num_deps = 0 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

893  

894 if pred_node != NULL: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

895 deps = &pred_node 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2cfb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

896 num_deps = 1 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2cfb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

897  

898 cdef cydriver.CUcontext ctx = NULL 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

899 with nogil: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

900 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

901  

902 c_memset(&memset_params, 0, sizeof(memset_params)) 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

903 memset_params.dst = c_dst 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

904 memset_params.value = val 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

905 memset_params.elementSize = elem_size 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

906 memset_params.width = width 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

907 memset_params.height = height 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

908 memset_params.pitch = pitch 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

909  

910 with nogil: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

911 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

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

913 &memset_params, ctx)) 

914  

915 # Retain the destination allocation for the graph's lifetime (slot 0). Roll 

916 # the node back if slot attachment fails, so it cannot outlive an 

917 # unretained allocation. 

918 if dst_owner: 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

919 try: 21f2f8f

920 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, dst_owner)) 21f2f8f

921 except: 

922 cydriver.cuGraphDestroyNode(new_node) # best effort 

923 raise 

924  

925 return _registered(MemsetNode._create_with_params( 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

926 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f PbQbRbSbFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c1f2f8ffb;cYb]b^b_b|b}b~bxbccNbdcec5 fcy HbIbAbP Q r R S gchcicjc8bkclcmcncebocybrcscM tct vbwbhbC D p E F uc%bvc5c'bwcxc3b4b6c7c

927 val, elem_size, width, height, pitch)) 

928  

929  

930cdef inline MemcpyNode GN_memcpy( 

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

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

933 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

934 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

935 cdef cydriver.CUresult ret 

936 with nogil: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

937 ret = cydriver.cuPointerGetAttribute( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

938 &dst_mem_type, 

939 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

940 c_dst) 

941 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

942 HANDLE_RETURN(ret) 

943 ret = cydriver.cuPointerGetAttribute( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

944 &src_mem_type, 

945 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

946 c_src) 

947 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

948 HANDLE_RETURN(ret) 

949  

950 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

951 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

952  

953 cdef cydriver.CUDA_MEMCPY3D params 

954 c_memset(&params, 0, sizeof(params)) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

955  

956 params.srcMemoryType = c_src_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

957 params.dstMemoryType = c_dst_type 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

958 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

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

960 else: 

961 params.srcDevice = c_src 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

962 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

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

964 else: 

965 params.dstDevice = c_dst 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

966 params.WidthInBytes = size 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

967 params.Height = 1 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

968 params.Depth = 1 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

969  

970 cdef cydriver.CUgraphNode new_node = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

971 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

972 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

973 cdef cydriver.CUgraphNode* deps = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

974 cdef size_t num_deps = 0 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

975  

976 if pred_node != NULL: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

977 deps = &pred_node 1cdef:;=?@[GVWXYZ012B34q6bzAxlmnor789!K#$%'L(w)*k+auvsghijp,N-]O./HI^_

978 num_deps = 1 1cdef:;=?@[GVWXYZ012B34q6bzAxlmnor789!K#$%'L(w)*k+auvsghijp,N-]O./HI^_

979  

980 cdef cydriver.CUcontext ctx = NULL 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

981 with nogil: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

982 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

983 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

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

985  

986 # Retain operand allocations for the graph's lifetime (dst -> slot 0, src -> 

987 # slot 1). Roll the node back if slot attachment fails. 

988 try: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

989 if dst_owner: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

990 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, dst_owner)) 2rdsdtdud:cOdWe

991 if src_owner: 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

992 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 1, src_owner)) 2rdsdtdud:cOdWe

993 except: 

994 cydriver.cuGraphDestroyNode(new_node) # best effort 

995 raise 

996  

997 return _registered(MemcpyNode._create_with_params( 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

998 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f : ; = ? @ [ rdsdtdud:cOdWeG V W X Y Z 0 1 2 B 3 4 q 6 b z A x l m n o r 7 8 9 ! K # $ % ' L ( w ) * k + a u v s g h i j p , N - ] O . / H I ^ _

999 c_dst_type, c_src_type)) 

1000  

1001  

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

1003 cdef cydriver.CUgraphNode new_node = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1004 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1005 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1006 cdef cydriver.CUgraphNode* deps = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1007 cdef size_t num_deps = 0 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1008  

1009 if pred_node != NULL: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1010 deps = &pred_node 

1011 num_deps = 1 

1012  

1013 with nogil: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1014 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

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

1016  

1017 cdef cydriver.CUgraph embedded_graph = NULL 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1018 with nogil: 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1019 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1020 new_node, &embedded_graph)) 

1021  

1022 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1023  

1024 return _registered(ChildGraphNode._create_with_params( 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1025 create_graph_node_handle(new_node, h_graph), h_embedded)) 2peqeueAeEeIeMe#c8c=cSdCbUd`b{b?bibjbkblbWdYd0dT 3d` 5d7d9d#db y %d(d*d,dqb/d9b!b5b{ | } ~ ;d?d[dJ ^dU `d|ddd~da t befdeeZehdheje}cad1e3e

1026  

1027  

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

1029 cdef cydriver.CUgraphNode new_node = NULL 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1030 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1031 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1032 cdef cydriver.CUgraphNode* deps = NULL 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1033 cdef size_t num_deps = 0 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1034 cdef OpaqueHandle owner 

1035  

1036 if pred_node != NULL: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1037 deps = &pred_node 2seweCeGeKeOeTe/c

1038 num_deps = 1 2seweCeGeKeOeTe/c

1039  

1040 with nogil: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1041 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

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

1043  

1044 owner = ev._h_event 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1045 try: 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1046 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1047 except: 

1048 cydriver.cuGraphDestroyNode(new_node) # best effort 

1049 raise 

1050  

1051 return _registered(EventRecordNode._create_with_params( 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1052 create_graph_node_handle(new_node, h_graph), ev._h_event)) 28hseweCeGeKeOeHkTeIk=h?h/c9iXjXeZj`b1j3j5jac7j{hLhwdxdydzd$c9j#jme%jz Hb(j*j,j.jEd:j9b=j@j]j#b_jSg3f@c[c]c^cpc{j}jpdaku vbck-iekNk/igkik#i%iPkRk

1053  

1054  

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

1056 cdef cydriver.CUgraphNode new_node = NULL 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1057 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1058 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1059 cdef cydriver.CUgraphNode* deps = NULL 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1060 cdef size_t num_deps = 0 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1061 cdef OpaqueHandle owner 

1062  

1063 if pred_node != NULL: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1064 deps = &pred_node 28htexeDeHeLePe=h?hUe

1065 num_deps = 1 28htexeDeHeLePe=h?hUe

1066  

1067 with nogil: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1068 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

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

1070  

1071 owner = ev._h_event 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1072 try: 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1073 HANDLE_RETURN(graph_set_slot(h_graph, new_node, 0, owner)) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1074 except: 

1075 cydriver.cuGraphDestroyNode(new_node) # best effort 

1076 raise 

1077  

1078 return _registered(EventWaitNode._create_with_params( 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1079 create_graph_node_handle(new_node, h_graph), ev._h_event)) 28htexeDeHeLePe=h?hUeJk!iYjYe0j{b2j4j6jbc8j{hMhAdBdCdDd%c!j$jne'jA Ib)j+j-j/jFd;j!b?j[j^j$b`jSg4f_c`c{c|cqc|j~jqdbkv wbdk.ifkOk:ihkjk$i'iQkSk

1080  

1081  

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

1083 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1084 cdef cydriver.CUgraphNode new_node = NULL 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1085 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1086 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1087 cdef cydriver.CUgraphNode* deps = NULL 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1088 cdef size_t num_deps = 0 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1089 cdef OpaqueHandle fn_owner, data_owner 

1090  

1091 if pred_node != NULL: 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1092 deps = &pred_node 

1093 num_deps = 1 

1094  

1095 _resolve_host_callback( 2kkdllkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1096 fn, user_data, &node_params.fn, &node_params.userData, 

1097 &fn_owner, &data_owner) 

1098  

1099 with nogil: 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1100 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

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

1102  

1103 # Roll the node back if owner attachment fails: an unretained host node 

1104 # leaves the driver holding a raw pointer into freed Python memory. 

1105 try: 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1106 _attach_host_callback_owners(h_graph, new_node, fn_owner, data_owner) 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1107 except: 

1108 cydriver.cuGraphDestroyNode(new_node) # best effort 

1109 raise 

1110  

1111 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1112 return _registered(HostCallbackNode._create_with_params( 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1113 create_graph_node_handle(new_node, h_graph), callable_obj, 2kklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDk5ixjleyj?bzjAjBj@bCjLhMh!cDjkdldmdndEj!dFjx AbGjHjIjJjodKj5bLjMjNj6bOj3f4f[bPj*c+c,c-cQjedRjs hbSj)iTjEk*iUjVj6i7iFkGk

1114 node_params.fn, node_params.userData))