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

379 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-29 01:27 +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 libc.stddef cimport size_t 

10from libc.stdint cimport uintptr_t 

11from libc.string cimport memset as c_memset 

12  

13from libcpp.vector cimport vector 

14  

15from cuda.bindings cimport cydriver 

16  

17from cuda.core._event cimport Event 

18from cuda.core._kernel_arg_handler cimport ParamHolder 

19from cuda.core._launch_config cimport LaunchConfig 

20from cuda.core._module cimport Kernel 

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

22from cuda.core.graph._subclasses cimport ( 

23 AllocNode, 

24 ChildGraphNode, 

25 ConditionalNode, 

26 EmptyNode, 

27 EventRecordNode, 

28 EventWaitNode, 

29 FreeNode, 

30 HostCallbackNode, 

31 IfElseNode, 

32 IfNode, 

33 KernelNode, 

34 MemcpyNode, 

35 MemsetNode, 

36 SwitchNode, 

37 WhileNode, 

38) 

39from cuda.core._resource_handles cimport ( 

40 EventHandle, 

41 GraphHandle, 

42 KernelHandle, 

43 GraphNodeHandle, 

44 as_cu, 

45 as_intptr, 

46 as_py, 

47 create_graph_handle_ref, 

48 create_graph_node_handle, 

49 graph_node_get_graph, 

50 invalidate_graph_node, 

51) 

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

53  

54from cuda.core.graph._utils cimport ( 

55 _attach_host_callback_to_graph, 

56 _attach_user_object, 

57) 

58  

59import weakref 

60  

61from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

62from cuda.core._utils.cuda_utils import driver 

63  

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

65_node_registry = weakref.WeakValueDictionary() 

66  

67  

68cdef inline GraphNode _registered(GraphNode n): 

69 _node_registry[<uintptr_t>n._h_node.get()] = n 2_h`h]dqd6h7h8hmhkd9h!dnh!h9eIjyi#e$e%e'e(eziJjKjDiEiFiGiHig h i j TbUbVbWb#h$h%hMcNcOc'hIiohAfwk)e#d`d{d*eLjMj5g6g}b[ QcRcScTc7g8g6iph7iBf+e$d8i|d9i}d!i,eNjOj9g!g#i~bWi] $iUc%iVc'iWc(iXc#g$gqhld(h%drh)hshmd*h'dth+huhCf-e(d~dae.ePjQj%g'gac^ YcZc0c1c(g)g)ivh*iDf/e+i)d,ibe-ice.i:eRjSj*g+g/ibcXi_ :i2c;i3c=i4c?i5c,g-g@iwh[iEf;e]i*d^ide_iee`i=eTjUj.g/g{icc|i` }i6c~i7caj8cbj9c:g;gxhFf?e+dfege@eVjWj=g?gdc{ !c#c$c%c@g[gyhnd,h,dzh-hAhod.h-dBh/hcjChpd:h.dDh;hUi'c4h{h=h]g^g_g`gybzbAbBbXjYjgcZj/d0jAiBi:d1j|hrdJiKiec2j;dPc*b!b2bhc3jQiOi5hKb4jsd5j}hGf~c(cYiZiadRi[e]e2gH #b^e_eEhhetd6j7jiejjPfQf~h0 icRfSfEbjekele=d3b4bfc1 jc5b6bFhmeud8j9jnekjTfUfai2 kcVfWflcmc{bnbobpbqbGhoevd!j#jpeljXfYfbi3 ncZf0fHhqewd$j%jremj1f2fci4 oc3f4fIhsexd'j(jtenj5f6fdi5 pc7f8fydI :b;b=b$b| } Cb6 Fb~ abJhuezd)j*jveoj9f!fei7 qc#f$fCi?hAdBdCdDd@hEdFdGdHdV rcsc|brbsbz MbtbubKhweId+j,jxepj%f'ffi8 tc(f)fbdcdddedHfIfJfKfLfLhyeJd-j.jzeqj*f+fgi9 uc,f-fAepfqfLb!e+b,bq @ -b.bMhBeKd/j:jCerj.f/fhi! vc:f;fb A B x k l m n y NbObJbJ K r L M NhDeLd;j=jEesj=f?fii# wc@f[fOhFeMd?j@jGetj]f^fji$ xc_f`fPhHeNd[j]jIeuj{f|fki% yc}f~fMfQhJeOd^j_jKevjagbgli' zccgdgvbPdQdRdfdPbQb/bQ ?bRbSbRhLeSd`j{jMewjegfgmi( Acgghg@b[b%bbbcbdbebShNeTd|j}jOexjigjgni) BckglgThPeUd~jakQeyjmgngoi* CcogpgUhReVdbkckSezjqgrgpi+ Dcsgtg=cC 7b8b9bXbW X mbR wbY Z VhTeWddkekUeAjugvgqi, EcwgxgWh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu GbhbibXhVeXdfkgkWeBjygzgri- FcAgBg)c*c+c,c`e{e|e}e~eYhXeYdhkikYeCjCgDgsi. GcEgFgZd^d_dDb9dYbZbo U 0b1bZhZe0djkkk0eDjGgHgti/ HcIgJga v w s c d e f t HbIbxbD E p F G 0h1e1dlkmk2eEjKgLgui: IcMgNgOg2d|cdjej3d0irfsfkhS _btfuf1h3e4dnkok4eFjPgQgvi; JcRgSgaf[hbf?dxkykcfpk}g~gLijb-cahbhTg5d}cfjgj6d1ivfwflhT `bxfyf2h5e7dqkrk6eGjUgVgwi= KcWgXg3h7e8dsktk8eHjYgZgxi? Lc0g1gNfgd.c2i3ihdSidfef3gO (bffgfOfid/c4i5ijdTihfif4gP )bjfkf]hlf@dzkAkmfukchdhMikb:cehfh^hnf[dBkCkofvkghhhNilb;cihjh

70 return n 2_h`h]dqd6h7h8hmhkd9h!dnh!h9eIjyi#e$e%e'e(eziJjKjDiEiFiGiHig h i j TbUbVbWb#h$h%hMcNcOc'hIiohAfwk)e#d`d{d*eLjMj5g6g}b[ QcRcScTc7g8g6iph7iBf+e$d8i|d9i}d!i,eNjOj9g!g#i~bWi] $iUc%iVc'iWc(iXc#g$gqhld(h%drh)hshmd*h'dth+huhCf-e(d~dae.ePjQj%g'gac^ YcZc0c1c(g)g)ivh*iDf/e+i)d,ibe-ice.i:eRjSj*g+g/ibcXi_ :i2c;i3c=i4c?i5c,g-g@iwh[iEf;e]i*d^ide_iee`i=eTjUj.g/g{icc|i` }i6c~i7caj8cbj9c:g;gxhFf?e+dfege@eVjWj=g?gdc{ !c#c$c%c@g[gyhnd,h,dzh-hAhod.h-dBh/hcjChpd:h.dDh;hUi'c4h{h=h]g^g_g`gybzbAbBbXjYjgcZj/d0jAiBi:d1j|hrdJiKiec2j;dPc*b!b2bhc3jQiOi5hKb4jsd5j}hGf~c(cYiZiadRi[e]e2gH #b^e_eEhhetd6j7jiejjPfQf~h0 icRfSfEbjekele=d3b4bfc1 jc5b6bFhmeud8j9jnekjTfUfai2 kcVfWflcmc{bnbobpbqbGhoevd!j#jpeljXfYfbi3 ncZf0fHhqewd$j%jremj1f2fci4 oc3f4fIhsexd'j(jtenj5f6fdi5 pc7f8fydI :b;b=b$b| } Cb6 Fb~ abJhuezd)j*jveoj9f!fei7 qc#f$fCi?hAdBdCdDd@hEdFdGdHdV rcsc|brbsbz MbtbubKhweId+j,jxepj%f'ffi8 tc(f)fbdcdddedHfIfJfKfLfLhyeJd-j.jzeqj*f+fgi9 uc,f-fAepfqfLb!e+b,bq @ -b.bMhBeKd/j:jCerj.f/fhi! vc:f;fb A B x k l m n y NbObJbJ K r L M NhDeLd;j=jEesj=f?fii# wc@f[fOhFeMd?j@jGetj]f^fji$ xc_f`fPhHeNd[j]jIeuj{f|fki% yc}f~fMfQhJeOd^j_jKevjagbgli' zccgdgvbPdQdRdfdPbQb/bQ ?bRbSbRhLeSd`j{jMewjegfgmi( Acgghg@b[b%bbbcbdbebShNeTd|j}jOexjigjgni) BckglgThPeUd~jakQeyjmgngoi* CcogpgUhReVdbkckSezjqgrgpi+ Dcsgtg=cC 7b8b9bXbW X mbR wbY Z VhTeWddkekUeAjugvgqi, EcwgxgWh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu GbhbibXhVeXdfkgkWeBjygzgri- FcAgBg)c*c+c,c`e{e|e}e~eYhXeYdhkikYeCjCgDgsi. GcEgFgZd^d_dDb9dYbZbo U 0b1bZhZe0djkkk0eDjGgHgti/ HcIgJga v w s c d e f t HbIbxbD E p F G 0h1e1dlkmk2eEjKgLgui: IcMgNgOg2d|cdjej3d0irfsfkhS _btfuf1h3e4dnkok4eFjPgQgvi; JcRgSgaf[hbf?dxkykcfpk}g~gLijb-cahbhTg5d}cfjgj6d1ivfwflhT `bxfyf2h5e7dqkrk6eGjUgVgwi= KcWgXg3h7e8dsktk8eHjYgZgxi? Lc0g1gNfgd.c2i3ihdSidfef3gO (bffgfOfid/c4i5ijdTihfif4gP )bjfkf]hlf@dzkAkmfukchdhMikb:cehfh^hnf[dBkCkofvkghhhNilb;cihjh

71  

72  

73cdef class GraphNode: 

74 """A node in a graph definition. 

75  

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

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

78 nodes that depend on a predecessor). 

79 """ 

80  

81 @staticmethod 

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

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

84 return GN_create(h_graph, node) 2qdWkXkYkZkyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'cybzbAbBbgcrdec;dPc*b!b2bhcQiOi5hKbsd

85  

86 def __repr__(self) -> str: 

87 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2hl

88 if node == NULL: 2hl

89 return "<GraphNode entry>" 2hl

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

91  

92 def __eq__(self, other) -> bool: 

93 if not isinstance(other, GraphNode): 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSbRhLeSd`j{jMewjegfgmi( Acmlgghg@b[b%bbbcbdbebShNeTd|j}jOexjigjgni) BcnlkglgThPeUd~jakQeyjmgngoi* CcologpgUhReVdbkckSezjqgrgpi+ Dcplsgtg=cC 7b8b9bXbW X mbR wbY Z VhTeWddkekUeAjugvgqi, EcqlwgxgWh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu GbhbibXhVeXdfkgkWeBjygzgri- FcrlAgBg)c*c+c,c`e{e|e}e~eYhXeYdhkikYeCjCgDgsi. GcslEgFgZd^d_dDb9dYbZbo U 0b1bZhZe0djkkk0eDjGgHgti/ HctlIgJga v w s c d e f t HbIbxbD E p F G 0h1e1dlkmk2eEjKgLgui: IculMgNgOg2d|cdjej3d0irfsfkhS _btfuf1h3e4dnkok4eFjPgQgvi; JcvlRgSgafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

94 return NotImplemented 2Gf~c(cYiZiadRi[e]e2gH #b$k^e_eRhLeSd`j{jMewjegfgmi( AcmlgghgShNeTd|j}jOexjigjgni) BcnlkglgThPeUd~jakQeyjmgngoi* CcologpgUhReVdbkckSezjqgrgpi+ DcplsgtgVhTeWddkekUeAjugvgqi, EcqlwgxgXhVeXdfkgkWeBjygzgri- FcrlAgBgYhXeYdhkikYeCjCgDgsi. GcslEgFgZhZe0djkkk0eDjGgHgti/ HctlIgJg0h1e1dlkmk2eEjKgLgui: IculMgNg1h3e4dnkok4eFjPgQgvi; JcvlRgSg

95 cdef GraphNode o = <GraphNode>other 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSb@b[b%bbbcbdbeb=cC 7b8b9bXbW X mbR wbY Z Wh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu Gbhbib)c*c+c,c`e{e|e}e~eZd^d_dDb9dYbZbo U 0b1ba v w s c d e f t HbIbxbD E p F G Og2d|cdjej3d0irfsfkhS _btfufafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

96 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSb@b[b%bbbcbdbeb=cC 7b8b9bXbW X mbR wbY Z Wh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu Gbhbib)c*c+c,c`e{e|e}e~eZd^d_dDb9dYbZbo U 0b1ba v w s c d e f t HbIbxbD E p F G Og2d|cdjej3d0irfsfkhS _btfufafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

97 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSb@b[b%bbbcbdbeb=cC 7b8b9bXbW X mbR wbY Z Wh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu Gbhbib)c*c+c,c`e{e|e}e~eZd^d_dDb9dYbZbo U 0b1ba v w s c d e f t HbIbxbD E p F G Og2d|cdjej3d0irfsfkhS _btfufafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

98 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSb@b[b%bbbcbdbeb=cC 7b8b9bXbW X mbR wbY Z Wh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu Gbhbib)c*c+c,c`e{e|e}e~eZd^d_dDb9dYbZbo U 0b1ba v w s c d e f t HbIbxbD E p F G Og2d|cdjej3d0irfsfkhS _btfufafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

99 and as_intptr(self_graph) == as_intptr(other_graph)) 2qd6i7iDk8i9i!iEk#iWi$i%i'i(i)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbjGf~c(cYiZiadRi[e]e2gH #b$k^e_evbPdQdRdfdPbQb/bQ ?bRbSb@b[b%bbbcbdbeb=cC 7b8b9bXbW X mbR wbY Z Wh{g?c@c[c]c|g^c_c`c{cN ]b^b'bfbgbu Gbhbib)c*c+c,c`e{e|e}e~eZd^d_dDb9dYbZbo U 0b1ba v w s c d e f t HbIbxbD E p F G Og2d|cdjej3d0irfsfkhS _btfufafTg5d}cfjgj6d1ivfwflhT `b(kxfyfNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

100  

101 def __hash__(self) -> int: 

102 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2qdWkXkwlYkZkxlyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk6k7k8k9k!k#kMkNkilOkPkjlQkRkklSkTkllUi'cybzbAbBbgcec;dPc*b!b2bhcQiOi5hKbsdEhhetd6j7jiejjPfQf~h0 icylRfSfEbjekele=d3b4bfc1 jc5b6bFhmeud8j9jnekjTfUfai2 kczlVfWflcmc{bnbobpbqbGhoevd!j#jpeljXfYfbi3 ncAlZf0fHhqewd$j%jremj1f2fci4 ocBl3f4fIhsexd'j(jtenj5f6fdi5 pcCl7f8fydI :b;b=b$b| } Cb6 Fb~ abJhuezd)j*jveoj9f!fei7 qcDl#f$fCi?hAdBdCdDd@hEdFdGdHdV rcsc|brbsbz MbtbubKhweId+j,jxepj%f'ffi8 tcEl(f)fbdcdddedHfIfJfKfLfLhyeJd-j.jzeqj*f+fgi9 ucFl,f-fAepfqfLb!e+b,bq @ -b.bMhBeKd/j:jCerj.f/fhi! vcGl:f;fb A B x k l m n y NbObJbJ K r L M NhDeLd;j=jEesj=f?fii# wcHl@f[fOhFeMd?j@jGetj]f^fji$ xc_f`fPhHeNd[j]jIeuj{f|fki% ycIl}f~fMfQhJeOd^j_jKevjagbgli' zcJlcgdg2h5e7dqkrk6eGjUgVgwi= KcKlWgXg3h7e8dsktk8eHjYgZgxi? LcLl0g1gNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

103 return hash((as_intptr(self._h_node), as_intptr(g))) 2qdWkXkwlYkZkxlyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk6k7k8k9k!k#kMkNkilOkPkjlQkRkklSkTkllUi'cybzbAbBbgcec;dPc*b!b2bhcQiOi5hKbsdEhhetd6j7jiejjPfQf~h0 icylRfSfEbjekele=d3b4bfc1 jc5b6bFhmeud8j9jnekjTfUfai2 kczlVfWflcmc{bnbobpbqbGhoevd!j#jpeljXfYfbi3 ncAlZf0fHhqewd$j%jremj1f2fci4 ocBl3f4fIhsexd'j(jtenj5f6fdi5 pcCl7f8fydI :b;b=b$b| } Cb6 Fb~ abJhuezd)j*jveoj9f!fei7 qcDl#f$fCi?hAdBdCdDd@hEdFdGdHdV rcsc|brbsbz MbtbubKhweId+j,jxepj%f'ffi8 tcEl(f)fbdcdddedHfIfJfKfLfLhyeJd-j.jzeqj*f+fgi9 ucFl,f-fAepfqfLb!e+b,bq @ -b.bMhBeKd/j:jCerj.f/fhi! vcGl:f;fb A B x k l m n y NbObJbJ K r L M NhDeLd;j=jEesj=f?fii# wcHl@f[fOhFeMd?j@jGetj]f^fji$ xc_f`fPhHeNd[j]jIeuj{f|fki% ycIl}f~fMfQhJeOd^j_jKevjagbgli' zcJlcgdg2h5e7dqkrk6eGjUgVgwi= KcKlWgXg3h7e8dsktk8eHjYgZgxi? LcLl0g1gNfgd.c2i3ihdSidfef3gO (b%kffgfOfid/c4i5ijdTihfif4gP )b'kjfkf

104  

105 @property 

106 def type(self): 

107 """Return the CUDA graph node type. 

108  

109 Returns 

110 ------- 

111 CUgraphNodeType or None 

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

113 """ 

114 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}ksd

115 if node == NULL: 2zf)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}ksd

116 return None 2)ksd

117 cdef cydriver.CUgraphNodeType node_type 

118 with nogil: 2*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k

119 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k

120 return driver.CUgraphNodeType(<int>node_type) 2*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k

121  

122 @property 

123 def graph(self) -> "GraphDefinition": 

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

125 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2uovowoxoyozo

126  

127 @property 

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

129 """Return the underlying driver CUgraphNode handle. 

130  

131 Returns None for the entry node. 

132 """ 

133 return as_py(self._h_node) 2zfsdGf~c(cYiZiadRi[e]e2gH #b$k^e_e

134  

135 @property 

136 def is_valid(self): 

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

138  

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

140 """ 

141 return as_intptr(self._h_node) != 0 2sd

142  

143 def destroy(self): 

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

145  

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

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

148 already-destroyed node (no-op). 

149 """ 

150 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2cj*b!b2bsd

151 if node == NULL: 2cj*b!b2bsd

152 return 2sd

153 with nogil: 2cj*b!b2bsd

154 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2cj*b!b2bsd

155 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2cj*b!b2bsd

156 invalidate_graph_node(self._h_node) 2cj*b!b2bsd

157  

158 @property 

159 def pred(self): 

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

161 return AdjacencySetProxy(self, False) 2]d9e)kyiMcNcOc'h@i[iAo]i^i_i`iBoCoDoEo{i|i}i~iajbjFoGoMkNkilOkPkjl'crdOi5hKbsd

162  

163 @pred.setter 

164 def pred(self, value): 

165 p = AdjacencySetProxy(self, False) 22b5h

166 p.clear() 22b5h

167 p.update(value) 22b5h

168  

169 @property 

170 def succ(self): 

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

172 return AdjacencySetProxy(self, True) 2)kyi@i[i]i^i_i`i{i|i}i~iajbjQkRkklSkTkll!bhc3jQiOi5hKb4jsd5j

173  

174 @succ.setter 

175 def succ(self, value): 

176 s = AdjacencySetProxy(self, True) 2yi5h

177 s.clear() 2yi5h

178 s.update(value) 2yi5h

179  

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

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

182  

183 Parameters 

184 ---------- 

185 config : LaunchConfig 

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

187 kernel : Kernel 

188 The kernel to launch. 

189 *args 

190 Kernel arguments. 

191  

192 Returns 

193 ------- 

194 KernelNode 

195 A new KernelNode representing the kernel launch. 

196 """ 

197 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

198  

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

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

201  

202 This is used to synchronize multiple branches of execution. 

203  

204 Parameters 

205 ---------- 

206 *nodes : GraphNode 

207 Additional nodes to depend on. 

208  

209 Returns 

210 ------- 

211 EmptyNode 

212 A new EmptyNode that depends on all input nodes. 

213 """ 

214 return GN_join(self, nodes) 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

215  

216 def alloc(self, size_t size, options=None) -> AllocNode: 

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

218  

219 Parameters 

220 ---------- 

221 size : int 

222 Number of bytes to allocate. 

223 options : GraphAllocOptions, optional 

224 Allocation options. If None, allocates on the current device. 

225  

226 Returns 

227 ------- 

228 AllocNode 

229 A new AllocNode representing the allocation. Access the allocated 

230 device pointer via the dptr property. 

231 """ 

232 return GN_alloc(self, size, options) 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

233  

234 def free(self, dptr: int) -> FreeNode: 

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

236  

237 Parameters 

238 ---------- 

239 dptr : int 

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

241  

242 Returns 

243 ------- 

244 FreeNode 

245 A new FreeNode representing the free operation. 

246 """ 

247 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

248  

249 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode: 

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

251  

252 Parameters 

253 ---------- 

254 dst : int 

255 Destination device pointer. 

256 value : int or buffer-protocol object 

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

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

259 width : int 

260 Width of the row in elements. 

261 height : int, optional 

262 Number of rows (default 1). 

263 pitch : int, optional 

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

265  

266 Returns 

267 ------- 

268 MemsetNode 

269 A new MemsetNode representing the memset operation. 

270 """ 

271 cdef unsigned int val 

272 cdef unsigned int elem_size 

273 val, elem_size = _parse_fill_value(value) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c4hKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

274 return GN_memset(self, <cydriver.CUdeviceptr>dst, val, elem_size, width, height, pitch) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

275  

276 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode: 

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

278  

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

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

281 pointers are supported. 

282  

283 Parameters 

284 ---------- 

285 dst : int 

286 Destination pointer (device or pinned host). 

287 src : int 

288 Source pointer (device or pinned host). 

289 size : int 

290 Number of bytes to copy. 

291  

292 Returns 

293 ------- 

294 MemcpyNode 

295 A new MemcpyNode representing the copy operation. 

296 """ 

297 return GN_memcpy(self, <cydriver.CUdeviceptr>dst, <cydriver.CUdeviceptr>src, size) 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

298  

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

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

301  

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

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

304 nodes. 

305  

306 Parameters 

307 ---------- 

308 child : GraphDefinition 

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

310  

311 Returns 

312 ------- 

313 ChildGraphNode 

314 A new ChildGraphNode representing the embedded sub-graph. 

315 """ 

316 return GN_embed(self, <GraphDefinition>child) 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

317  

318 def record_event(self, event: Event) -> EventRecordNode: 

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

320  

321 Parameters 

322 ---------- 

323 event : Event 

324 The event to record. 

325  

326 Returns 

327 ------- 

328 EventRecordNode 

329 A new EventRecordNode representing the event record operation. 

330 """ 

331 return GN_record_event(self, <Event>event) 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

332  

333 def wait_event(self, event: Event) -> EventWaitNode: 

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

335  

336 Parameters 

337 ---------- 

338 event : Event 

339 The event to wait for. 

340  

341 Returns 

342 ------- 

343 EventWaitNode 

344 A new EventWaitNode representing the event wait operation. 

345 """ 

346 return GN_wait_event(self, <Event>event) 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

347  

348 def callback(self, fn, *, user_data=None) -> HostCallbackNode: 

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

350  

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

352 Two modes are supported: 

353  

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

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

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

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

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

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

360 for the lifetime of the graph. 

361  

362 .. warning:: 

363  

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

365 deadlock or corrupt driver state. 

366  

367 Parameters 

368 ---------- 

369 fn : callable or ctypes function pointer 

370 The callback function. 

371 user_data : int or bytes-like, optional 

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

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

374 copied and its lifetime is tied to the graph. 

375  

376 Returns 

377 ------- 

378 HostCallbackNode 

379 A new HostCallbackNode representing the callback. 

380 """ 

381 return GN_callback(self, fn, user_data) 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

382  

383 def if_cond(self, condition: GraphCondition) -> IfNode: 

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

385  

386 The body graph executes only when the condition evaluates to 

387 a non-zero value at runtime. 

388  

389 Parameters 

390 ---------- 

391 condition : GraphCondition 

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

393  

394 Returns 

395 ------- 

396 IfNode 

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

398 """ 

399 return _make_conditional_node( 2qd5g9g%g*g.g=ghj]gyb]eQf4bUfobYf2f6f} !fBdFdsb'fcdJfKfLf+f,b/fl K ?f^f|fbgQbfgcbjgngrgX vg@c_cgbzg*c|e}e~eDgZbHgd E LgsfQg~gwfVgZgefifdhhh

400 self, condition, 

401 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2qd5g9g%g*g.g=ghj]gyb]eQf4bUfobYf2f6f} !fBdFdsb'fcdJfKfLf+f,b/fl K ?f^f|fbgQbfgcbjgngrgX vg@c_cgbzg*c|e}e~eDgZbHgd E LgsfQg~gwfVgZgefifdhhh

402  

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

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

405  

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

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

408  

409 Parameters 

410 ---------- 

411 condition : GraphCondition 

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

413  

414 Returns 

415 ------- 

416 IfElseNode 

417 A new IfElseNode with branches accessible via 

418 ``.then`` and ``.else_``. 

419 """ 

420 return _make_conditional_node( 26g!g'g+g/g?g^gzb[ePf3bTfnbXf1f5f| 9fAdEdrb%fbdHfIfJf*f+b.fk J =f]f{fagPbegbbigmgqgW ug?c^cfbyg)c`e{e|eCgYbGgc D KgrfPg}gvfUgYgdfhfchgh

421 self, condition, 

422 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 26g!g'g+g/g?g^gzb[ePf3bTfnbXf1f5f| 9fAdEdrb%fbdHfIfJf*f+b.fk J =f]f{fagPbegbbigmgqgW ug?c^cfbyg)c`e{e|eCgYbGgc D KgrfPg}gvfUgYgdfhfchgh

423  

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

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

426  

427 The body graph executes repeatedly while the condition 

428 evaluates to a non-zero value. 

429  

430 Parameters 

431 ---------- 

432 condition : GraphCondition 

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

434  

435 Returns 

436 ------- 

437 WhileNode 

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

439 """ 

440 return _make_conditional_node( 28g$g)g-g;g[g`gBb;d_eSf6bWfqb0f4f8fab$fDdHdub)fedIfLf-f.b;fn M [f`f~fMfdgSbhgeblgpgtgZ xg]c{cibBg,c{e~eFg1bJgf G NgufSgafbhyfXg1ggfkffhjh

441 self, condition, 

442 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 28g$g)g-g;g[g`gBb;d_eSf6bWfqb0f4f8fab$fDdHdub)fedIfLf-f.b;fn M [f`f~fMfdgSbhgeblgpgtgZ xg]c{cibBg,c{e~eFg1bJgf G NgufSgafbhyfXg1ggfkffhjh

443  

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

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

446  

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

448 value is out of range, no branch executes. 

449  

450 Parameters 

451 ---------- 

452 condition : GraphCondition 

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

454 count : int 

455 Number of switch cases (branches). 

456  

457 Returns 

458 ------- 

459 SwitchNode 

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

461 """ 

462 return _make_conditional_node( 27g#g(g,g:g@gij_gAb^eRf5bVfpbZf3f7f~ #fCdGdtb(fddHfKf,f-b:fm L @f_f}fMfcgRbggdbkgogsgY wg[c`chbAg+c`e}eEg0bIge F MgtfRgafahxfWg0gffjfehih

463 self, condition, 

464 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 27g#g(g,g:g@gij_gAb^eRf5bVfpbZf3f7f~ #fCdGdtb(fddHfKf,f-b:fm L @f_f}fMfcgRbggdbkgogsgY wg[c`chbAg+c`e}eEg0bIge F MgtfRgafahxfWg0gffjfehih

465  

466  

467cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil: 

468 cdef EventHandle* p = <EventHandle*>ptr 2MlNlOlPlQlRlSlTlUlVlWlXlYlZj/d0j:d1jZl0l1l2l3l4l5l6l~kal7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lblcl|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmomdlelpmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmflglQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m

469 del p 2MlNlOlPlQlRlSlTlUlVlWlXlYlZj/d0j:d1jZl0l1l2l3l4l5l6l~kal7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{lblcl|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmomdlelpmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmflglQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m

470  

471  

472cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil: 

473 cdef KernelHandle* p = <KernelHandle*>ptr 2+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~man{hybzbAbBbgc|hecPc*b!b2bhcbncndnenfngnhnin~kaljnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnblclEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1ndlel2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/nflgl:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto

474 del p 2+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~man{hybzbAbBbgc|hecPc*b!b2bhcbncndnenfngnhnin~kaljnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnblclEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1ndlel2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/nflgl:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto

475  

476  

477cdef inline ConditionalNode _make_conditional_node( 

478 GraphNode pred, 

479 GraphCondition condition, 

480 cydriver.CUgraphConditionalNodeType cond_type, 

481 unsigned int size, 

482 type node_cls): 

483 if not isinstance(condition, GraphCondition): 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

484 raise TypeError( 

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

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

487 cdef cydriver.CUgraphNodeParams params 

488 cdef cydriver.CUgraphNode new_node = NULL 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

489  

490 c_memset(&params, 0, sizeof(params)) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

491 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

492 params.conditional.handle = condition._c_handle 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

493 params.conditional.type = cond_type 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

494 params.conditional.size = size 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

495  

496 cdef cydriver.CUcontext ctx = NULL 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

497 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

498 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

499 cdef cydriver.CUgraphNode* deps = NULL 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

500 cdef size_t num_deps = 0 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

501  

502 if pred_node != NULL: 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

503 deps = &pred_node 

504 num_deps = 1 

505  

506 with nogil: 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

507 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

508 params.conditional.ctx = ctx 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

509  

510 with nogil: 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

511 IF CUDA_CORE_BUILD_MAJOR >= 13: 

512 HANDLE_RETURN(cydriver.cuGraphAddNode( 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[ghjij]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

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

514 ELSE: 

515 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

517  

518 cdef list branch_list = [] 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

519 cdef unsigned int i 

520 cdef cydriver.CUgraph bg 

521 cdef GraphHandle h_branch 

522 for i in range(size): 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

523 bg = params.conditional.phGraph_out[i] 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

524 h_branch = create_graph_handle_ref(bg, h_graph) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

525 branch_list.append(GraphDefinition._from_handle(h_branch)) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

526 cdef tuple branches = tuple(branch_list) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

527  

528 cdef ConditionalNode n = node_cls.__new__(node_cls) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

529 n._h_node = create_graph_node_handle(new_node, h_graph) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

530 n._condition = condition 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

531 n._cond_type = cond_type 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

532 n._branches = branches 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

533  

534 return _registered(n) 2qd5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`gybzbAbBb;d[e]e^e_ePfQfRfSf3b4b5b6bTfUfVfWfnbobpbqbXfYfZf0f1f2f3f4f5f6f7f8f| } ~ ab9f!f#f$fAdBdCdDdEdFdGdHdrbsbtbub%f'f(f)fbdcdddedHfIfJfKfLf*f+f,f-f+b,b-b.b.f/f:f;fk l m n J K L M =f?f@f[f]f^f_f`f{f|f}f~fMfagbgcgdgPbQbRbSbegfggghgbbcbdbebigjgkglgmgngogpgqgrgsgtgW X Y Z ugvgwgxg?c@c[c]c^c_c`c{cfbgbhbibygzgAgBg)c*c+c,c`e{e|e}e~eCgDgEgFgYbZb0b1bGgHgIgJgc d e f D E F G KgLgMgNgrfsftfufPgQgRgSgaf}g~gahbhvfwfxfyfUgVgWgXgYgZg0g1gdfefffgfhfifjfkfchdhehfhghhhihjh

535  

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

537 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2qdWkXkYkZkyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'cybzbAbBbgcrdec;dPc*b!b2bhcQiOi5hKbsd

538  

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

540 if node == NULL: 2qdWkXkYkZkyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'cybzbAbBbgcrdec;dPc*b!b2bhcQiOi5hKbsd

541 n = GraphNode.__new__(GraphNode) 

542 (<GraphNode>n)._h_node = h_node 

543 return n 

544  

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

546 registered = _node_registry.get(<uintptr_t>h_node.get()) 2qdWkXkYkZkyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'cybzbAbBbgcrdec;dPc*b!b2bhcQiOi5hKbsd

547 if registered is not None: 2qdWkXkYkZkyiMcNcOcwk6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'cybzbAbBbgcrdec;dPc*b!b2bhcQiOi5hKbsd

548 return <GraphNode>registered 2qdWkXkYkZkyiMcNcOc6i7iDk8i9i!iEk#iWi$i%i'i(i0k1k2k3k4k5k)i*iFk+i,i-i.iGkHkIkJk/iXi:i;i=i?iKkLk@i[i]i^i_i`i{i|i}i~iajbj6k7k8k9k!k#kMkNkOkPkQkRkSkTkUi'crdPc*b!b2bhcQiOi5hKbsd

549 else: 

550 return _registered(GN_create_impl(h_node)) 2wk6i7i8i9i!i#iWi$i%i'i(i)i*i+i,i-i.i/iXi:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjybzbAbBbgcec;dKb

551  

552  

553cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

554 cdef cydriver.CUgraphNodeType node_type 

555 with nogil: 2wk6i7i8i9i!i#iWi$i%i'i(i)i*i+i,i-i.i/iXi:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjybzbAbBbgcec;dKb

556 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2wk6i7i8i9i!i#iWi$i%i'i(i)i*i+i,i-i.i/iXi:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjybzbAbBbgcec;dKb

557  

558 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2wk6i7i8i9i!i#iWi$i%i'i(i)i*i+i,i-i.i/iXi:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjybzbAbBbgcec;dKb

559 return EmptyNode._create_impl(h_node) 2WiXi|i

560 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

561 return KernelNode._create_from_driver(h_node) 2wkybzbAbBbgcecKb

562 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

563 return AllocNode._create_from_driver(h_node) 26i7i8i9i!i#iWi$i%i'i(i)i*i+i,i-i.i/iXi:i;i=i?i@i[i]i^i_i`i{i}i~iajbj

564 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

565 return FreeNode._create_from_driver(h_node) 

566 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

567 return MemsetNode._create_from_driver(h_node) 2Kb

568 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

569 return MemcpyNode._create_from_driver(h_node) 

570 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

571 return ChildGraphNode._create_from_driver(h_node) 2ec

572 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

573 return EventRecordNode._create_from_driver(h_node) 

574 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

575 return EventWaitNode._create_from_driver(h_node) 

576 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

577 return HostCallbackNode._create_from_driver(h_node) 

578 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

579 return ConditionalNode._create_from_driver(h_node) 2;d

580 else: 

581 n = GraphNode.__new__(GraphNode) 

582 (<GraphNode>n)._h_node = h_node 

583 return n 

584  

585  

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

587 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

588 cdef cydriver.CUgraphNode new_node = NULL 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

589 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

590 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

591 cdef cydriver.CUgraphNode* deps = NULL 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

592 cdef size_t num_deps = 0 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

593  

594 if pred_node != NULL: 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

595 deps = &pred_node 2'h}b~bacbcccdcPc*b!b2bhcKb}h

596 num_deps = 1 2'h}b~bacbcccdcPc*b!b2bhcKb}h

597  

598 node_params.kern = as_cu(ker._h_kernel) 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

599 node_params.func = <cydriver.CUfunction>NULL 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

600 node_params.gridDimX = conf.grid[0] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

601 node_params.gridDimY = conf.grid[1] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

602 node_params.gridDimZ = conf.grid[2] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

603 node_params.blockDimX = conf.block[0] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

604 node_params.blockDimY = conf.block[1] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

605 node_params.blockDimZ = conf.block[2] 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

606 node_params.sharedMemBytes = conf.shmem_size 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

607 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

608 node_params.extra = NULL 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

609 node_params.ctx = <cydriver.CUcontext>NULL 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

610  

611 with nogil: 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

612 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

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

614  

615 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

616 <cydriver.CUhostFn>_destroy_kernel_handle_copy) 

617  

618 return _registered(KernelNode._create_with_params( 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

619 create_graph_node_handle(new_node, h_graph), 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

620 conf.grid, conf.block, conf.shmem_size, 2(eDiEiFiGiHi'hIi)e}b+e~b-eac/ebc;ecc?edc{hybzbAbBbgc|hrdJiKiecPc*b!b2bhcKb}h~c2ghe~hEbfcmeailcmc{bnbobpbqboebiqecisediI CbueeiV wefiyegiAepfqfLb!e+b,bq @ -b.bBehib y DeiiFejiHekiJelivb/bLemi@b[b%bbbcbdbebNeniPeoiRepiC mbTeqiN VeriXesiZd^d_dDb9dYbZbo U 0b1bZetia t 1eui2dkh3evibfLi5dlh5ewi7exigd3gid4glfMinfNi

621 ker._h_kernel)) 

622  

623  

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

625 cdef vector[cydriver.CUgraphNode] deps 

626 cdef cydriver.CUgraphNode new_node = NULL 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

627 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

628 cdef GraphNode other 

629 cdef cydriver.CUgraphNode* deps_ptr = NULL 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

630 cdef size_t num_deps = 0 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

631 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

632  

633 if pred_node != NULL: 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

634 deps.push_back(pred_node) 2kdldmdndodpd'c

635 for other in nodes: 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

636 if as_cu((<GraphNode>other)._h_node) != NULL: 2kd!dg h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dpd.dPc*b!b2bhc(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

637 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2kd!dg h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dpd.dPc*b!b2bhc(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

638  

639 num_deps = deps.size() 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

640 if num_deps > 0: 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

641 deps_ptr = deps.data() 2kd!dg h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dpd.d'cPc*b!b2bhc(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

642  

643 with nogil: 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

644 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

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

646  

647 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2kd!dyig h i j McNcOc#d[ $d] ld%dmd'd(d^ )d_ *d` +d{ nd,dod-dcjpd.dUi'cPc*b!b2bhc3jQiOi5h4j5j(cH td0 1 ud2 vd3 wd4 xd5 ydI :b;b=b$b| } Cb6 Fb~ abzd7 z Id8 Jd9 q Kd! b A B x k l m n r Ld# Md$ Nd% Od' Q Sd( Td) Ud* Vd+ =cC 7b8b9bXbW X mbR wbY Z Wd, u Xd- Yd. o 0d/ a v w s c d e f p 1d: |cS 4d; ?djb}cT 7d= 8d? .cO /cP @dkb[dlb

648  

649  

650cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object options): 

651 cdef int device_id 

652 cdef cydriver.CUdevice dev 

653  

654 if options is None or options.device is None: 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

655 with nogil: 2]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

656 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

657 device_id = <int>dev 2]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

658 else: 

659 device_id = getattr(options.device, 'device_id', options.device) 2_h`h

660  

661 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

662 cdef cydriver.CUgraphNode new_node = NULL 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

663 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

664 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

665 cdef cydriver.CUgraphNode* deps = NULL 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

666 cdef size_t num_deps = 0 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

667  

668 if pred_node != NULL: 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

669 deps = &pred_node 2]dmhkdnhohAfphBfqhldrhshmdthuhCfvhDfwhEfxhFfyhndzhAhodBhChpdDh

670 num_deps = 1 2]dmhkdnhohAfphBfqhldrhshmdthuhCfvhDfwhEfxhFfyhndzhAhodBhChpdDh

671  

672 cdef vector[cydriver.CUmemAccessDesc] access_descs 

673 cdef int peer_id 

674 cdef list peer_ids = [] 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

675  

676 if options is not None and options.peer_access is not None: 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

677 for peer_dev in options.peer_access: 

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

679 peer_ids.append(peer_id) 

680 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

681 cydriver.CUmemLocation_st( 

682 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

683 peer_id 

684 ), 

685 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

686 )) 

687  

688 cdef str memory_type = "device" 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

689 if options is not None and options.memory_type is not None: 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

690 memory_type = options.memory_type 2_h`hViAfBfCfDfEfFf

691  

692 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

693 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

694 alloc_params.bytesize = size 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

695  

696 if memory_type == "device": 2_h`h]dViPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

697 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

698 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

699 alloc_params.poolProps.location.id = device_id 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

700 elif memory_type == "host": 2ViAfBfCfDfEfFf

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

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

703 alloc_params.poolProps.location.id = 0 

704 elif memory_type == "managed": 2ViAfBfCfDfEfFf

705 IF CUDA_CORE_BUILD_MAJOR >= 13: 

706 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2AfBfCfDfEfFf

707 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2AfBfCfDfEfFf

708 alloc_params.poolProps.location.id = device_id 2AfBfCfDfEfFf

709 ELSE: 

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

711 else: 

712 raise ValueError(f"Invalid memory_type: {memory_type!r}. " 2Vi

713 "Must be 'device', 'host', or 'managed'.") 

714  

715 if access_descs.size() > 0: 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

716 alloc_params.accessDescs = access_descs.data() 

717 alloc_params.accessDescCount = access_descs.size() 

718  

719 with nogil: 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

720 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2_h`h]dPi6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

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

722  

723 return _registered(AllocNode._create_with_params( 2_h`h]d6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

724 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2_h`h]d6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

725 device_id, memory_type, tuple(peer_ids))) 2_h`h]d6h7h8hmhkd9h!dnh!h9e#e$e%e'eg h i j TbUbVbWb#h$h%hMcNcOcohAf#d`d{d*e}b[ QcRcScTcphBf$d|d}d,e~b] UcVcWcXcqhld(h%drh)hshmd*h'dth+huhCf(d~dae.eac^ YcZc0c1cvhDf)dbece:ebc_ 2c3c4c5cwhEf*ddeee=ecc` 6c7c8c9cxhFf+dfege@edc{ !c#c$c%cyhnd,h,dzh-hAhod.h-dBh/hChpd:h.dDh;h'c4h=h/d:dGf(cadH #bEhtdie0 icEbjekele=d3b4bfc1 jc5b6bFhudne2 kcGhvdpe3 ncHhwdre4 ocIhxdte5 pcydI :b;b=b$b| } Cb6 Fb~ abJhzdve7 qcV rcsc|brbsbz MbtbubKhIdxe8 tcLhJdze9 ucLbq @ MhKdCe! vcb A B x k l m n y NbObJbJ K r L M NhLdEe# wcOhMdGe$ xcPhNdIe% ycQhOdKe' zcvbPdQdRdfdPbQb/bQ ?bRbSbRhSdMe( AcShTdOe) BcThUdQe* CcUhVdSe+ Dc=cC 7b8b9bXbW X mbR wbY Z VhWdUe, EcN ]b^b'bfbgbu GbhbibXhXdWe- FcYhYdYe. GcDbo U Zh0d0e/ Hca v w s c d e f t HbIbxbD E p F G 0h1d2e: IcOg|c3dS _b1h4d4e; Jc[h?dcfjb-cTg}c6dT `b2h7d6e= Kc3h8d8e? LcNf.chdO (bOf/cjdP )b]h@dmfkb:c^h[doflb;c

726  

727  

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

729 cdef cydriver.CUgraphNode new_node = NULL 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

730 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

731 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

732 cdef cydriver.CUgraphNode* deps = NULL 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

733 cdef size_t num_deps = 0 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

734  

735 if pred_node != NULL: 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

736 deps = &pred_node 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

737 num_deps = 1 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

738  

739 with nogil: 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

740 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eUkadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

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

742  

743 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2]d9e#e$e%e'eg h i j TbUbVbWb*e,e.e:e=e@eadieleneperete=bveV rcsc|brbsbz MbtbubxezeLbCeEeGeIeKeRdMeOeQeSe9bUeN ]b^b'bfbgbu GbhbibWeYeDb0e2e3d4ecf6d6e8ehdjdmfof

744  

745  

746cdef inline MemsetNode GN_memset( 

747 GraphNode self, cydriver.CUdeviceptr c_dst, 

748 unsigned int val, unsigned int elem_size, 

749 size_t width, size_t height, size_t pitch): 

750 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

751 cdef cydriver.CUgraphNode new_node = NULL 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

752 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

753 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

754 cdef cydriver.CUgraphNode* deps = NULL 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

755 cdef size_t num_deps = 0 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

756  

757 if pred_node != NULL: 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

758 deps = &pred_node 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

759 num_deps = 1 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

760  

761 cdef cydriver.CUcontext ctx = NULL 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

762 with nogil: 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

763 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

764  

765 c_memset(&memset_params, 0, sizeof(memset_params)) 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

766 memset_params.dst = c_dst 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

767 memset_params.value = val 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

768 memset_params.elementSize = elem_size 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

769 memset_params.width = width 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

770 memset_params.height = height 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

771 memset_params.pitch = pitch 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

772  

773 with nogil: 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

774 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

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

776 &memset_params, ctx)) 

777  

778 return _registered(MemsetNode._create_with_params( 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

779 create_graph_node_handle(new_node, h_graph), c_dst, 2g h i j TbUbVbWbQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%cKbsd#bicjckcncocpcFbqcMbtcuc@ vcy NbObJbJ K r L M wcxcyczc?bAcBcCcDcwbEcGbFcGcU Hct HbIbxbD E p F G Ic_bJc-c`bKcLc(b)b:c;c

780 val, elem_size, width, height, pitch)) 

781  

782  

783cdef inline MemcpyNode GN_memcpy( 

784 GraphNode self, cydriver.CUdeviceptr c_dst, 

785 cydriver.CUdeviceptr c_src, size_t size): 

786 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

787 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

788 cdef cydriver.CUresult ret 

789 with nogil: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

790 ret = cydriver.cuPointerGetAttribute( 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

791 &dst_mem_type, 

792 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

793 c_dst) 

794 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

795 HANDLE_RETURN(ret) 

796 ret = cydriver.cuPointerGetAttribute( 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

797 &src_mem_type, 

798 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

799 c_src) 

800 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

801 HANDLE_RETURN(ret) 

802  

803 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

804 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

805  

806 cdef cydriver.CUDA_MEMCPY3D params 

807 c_memset(&params, 0, sizeof(params)) 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

808  

809 params.srcMemoryType = c_src_type 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

810 params.dstMemoryType = c_dst_type 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

811 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

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

813 else: 

814 params.srcDevice = c_src 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

815 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

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

817 else: 

818 params.dstDevice = c_dst 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

819 params.WidthInBytes = size 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

820 params.Height = 1 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

821 params.Depth = 1 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

822  

823 cdef cydriver.CUgraphNode new_node = NULL 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

824 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

825 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

826 cdef cydriver.CUgraphNode* deps = NULL 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

827 cdef size_t num_deps = 0 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

828  

829 if pred_node != NULL: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

830 deps = &pred_node 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

831 num_deps = 1 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

832  

833 cdef cydriver.CUcontext ctx = NULL 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

834 with nogil: 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

835 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

836 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

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

838  

839 return _registered(MemcpyNode._create_with_params( 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

840 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2g h i j [ ] ^ _ ` { H 0 1 2 3 4 5 6 7 z 8 9 q ! b A B x k l m n r # $ % ' Q ( ) * + R , u - . o / a v w s c d e f p : S ; jbT = ? O P kblb

841 c_dst_type, c_src_type)) 

842  

843  

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

845 cdef cydriver.CUgraphNode new_node = NULL 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

846 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

847 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

848 cdef cydriver.CUgraphNode* deps = NULL 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

849 cdef size_t num_deps = 0 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

850  

851 if pred_node != NULL: 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

852 deps = &pred_node 

853 num_deps = 1 

854  

855 with nogil: 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

856 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

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

858  

859 cdef cydriver.CUgraph embedded_graph = NULL 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

860 with nogil: 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

861 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

862 new_node, &embedded_graph)) 

863  

864 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

865  

866 return _registered(ChildGraphNode._create_with_params( 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

867 create_graph_node_handle(new_node, h_graph), h_embedded)) 2(e)e+e-e/e;e?egcec~cheEbmelcmc{bnbobpbqboeqeseI ueV weyeAeBeb y DeFeHeJevbLe@b[b%bbbcbdbebNePeReC TeN VeXeZdZea t 1e2d3ebf5d5e7egdidlfnf

868  

869  

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

871 cdef cydriver.CUgraphNode new_node = NULL 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

872 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

873 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

874 cdef cydriver.CUgraphNode* deps = NULL 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

875 cdef size_t num_deps = 0 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

876  

877 if pred_node != NULL: 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

878 deps = &pred_node 2`d|d~dbedefe/drd

879 num_deps = 1 2`d|d~dbedefe/drd

880  

881 with nogil: 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

882 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

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

884  

885 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

886 <cydriver.CUhostFn>_destroy_event_handle_copy) 

887  

888 return _registered(EventRecordNode._create_with_params( 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

889 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2zi`d|d~dbedefeZj/d0jAiBirdYi6jje8jlc!j$j'j:b)jCi?hAdBdCdDdrc+j-jpf/jA Nb;j?j[j^jPd`j@b|j~jbk7bdkWh{g?c@c[c]c]bfkhk^djkv Hblkdjnkxkfjqksk2i4izkBk

890  

891  

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

893 cdef cydriver.CUgraphNode new_node = NULL 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

894 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

895 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

896 cdef cydriver.CUgraphNode* deps = NULL 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

897 cdef size_t num_deps = 0 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

898  

899 if pred_node != NULL: 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

900 deps = &pred_node 2zi{d}daeceeegeAiBi:d

901 num_deps = 1 2zi{d}daeceeegeAiBi:d

902  

903 with nogil: 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

904 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

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

906  

907 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

908 <cydriver.CUhostFn>_destroy_event_handle_copy) 

909  

910 return _registered(EventWaitNode._create_with_params( 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

911 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2zi{d}daeceeegeAiBi:d1jZi7jke9jmc#j%j(j;b*jCi@hEdFdGdHdsc,j.jqf:jB Ob=j@j]j_jQd{j[b}jakck8bekWh|g^c_c`c{c^bgkik_dkkw Ibmkejokykgjrktk3i5iAkCk

912  

913  

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

915 import ctypes as ct 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

916  

917 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

918 cdef cydriver.CUgraphNode new_node = NULL 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

919 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

920 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

921 cdef cydriver.CUgraphNode* deps = NULL 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

922 cdef size_t num_deps = 0 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

923  

924 if pred_node != NULL: 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

925 deps = &pred_node 

926 num_deps = 1 

927  

928 _attach_host_callback_to_graph( 2IjVkJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

929 as_cu(h_graph), fn, user_data, 

930 &node_params.fn, &node_params.userData) 

931  

932 with nogil: 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

933 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

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

935  

936 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

937 return _registered(HostCallbackNode._create_with_params( 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

938 create_graph_node_handle(new_node, h_graph), callable_obj, 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYj2jRijj=dkj{bljmjnj$boj?h@h|bpjbdcdddedqj!erjx Jbsjtjujvjfdwj%bxjyjzjXbAj{g|g'bBj)c*c+c,cCj9dDjs xbEj0iFjpk1iGjHjSiTiukvk

939 node_params.fn, node_params.userData))