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

387 statements  

« prev     ^ index     » next       coverage.py v7.15.0, created at 2026-07-03 01:38 +0000

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

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

6  

7from __future__ import annotations 

8  

9from collections.abc import Iterable 

10from typing import TYPE_CHECKING 

11  

12from cpython.ref cimport Py_INCREF 

13  

14from libc.stddef cimport size_t 

15from libc.stdint cimport uintptr_t 

16from libc.string cimport memset as c_memset 

17  

18from libcpp.vector cimport vector 

19  

20from cuda.bindings cimport cydriver 

21  

22from cuda.core._event cimport Event 

23from cuda.core._kernel_arg_handler cimport ParamHolder 

24from cuda.core._launch_config cimport LaunchConfig 

25from cuda.core._module cimport Kernel 

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

27from cuda.core.graph._subclasses cimport ( 

28 AllocNode, 

29 ChildGraphNode, 

30 ConditionalNode, 

31 EmptyNode, 

32 EventRecordNode, 

33 EventWaitNode, 

34 FreeNode, 

35 HostCallbackNode, 

36 IfElseNode, 

37 IfNode, 

38 KernelNode, 

39 MemcpyNode, 

40 MemsetNode, 

41 SwitchNode, 

42 WhileNode, 

43) 

44from cuda.core._resource_handles cimport ( 

45 EventHandle, 

46 GraphHandle, 

47 GraphNodeHandle, 

48 KernelHandle, 

49 as_cu, 

50 as_intptr, 

51 as_py, 

52 create_graph_handle_ref, 

53 create_graph_node_handle, 

54 graph_node_get_graph, 

55 invalidate_graph_node, 

56 py_object_user_object_destroy, 

57) 

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

59  

60from cuda.core.graph._utils cimport ( 

61 _attach_host_callback_to_graph, 

62 _attach_user_object, 

63) 

64  

65import weakref 

66  

67from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

68from cuda.core._utils.cuda_utils import driver 

69from cuda.core.typing import GraphMemoryType 

70  

71if TYPE_CHECKING: 

72 from cuda.core._device import Device 

73  

74__all__ = ['GraphNode'] 

75  

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

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

78  

79  

80cdef inline GraphNode _registered(GraphNode n): 

81 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2OiPiwepdcidieiqhqdfiderhgi:eKjJiffgfhfifxeKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfLkyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g8ith9iNfzefe!iJe#iKe$ikfPjQj#g$g%ibcXi{ 'iYc(iZc)i0c*i1c%g'guhrdqigevhriwhsdsihexhtiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g+izh,iPfBe-ije.iNe/iOe:imfTjUj,g-g;idcYi} =i6c?i7c@i8c[i9c.g/g]iAh^iQfCe_ike`iPe{iQe|infVjWj:g;g}iec~i~ aj!cbj#ccj$cdj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtduimeDhviEhudwineFhxiejGhvdyioeHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jSiQiLhDb6jwd7jnhGf=c,cZi0ikdTi;e=eHfJ -b?e@eMh%dFd8j9jTeljSfTfNh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 oc2f3fSh)dId'j(jZeoj4f5fTh9 pc6f7fUh*dJd)j*j0epj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vc/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xc^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcbgcgFf!h?dSd`j{j!exjdgeg#h, AcfgggrbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j#eyjhgig%h- Bcjgkg+b,b5b1 2 3 4 'h[dXd~jak$ezjlgmg(h. Ccngog)h]dYdbkck%eAjpgqg*h/ Dcrgsg+h^dZddkek'eBjtgug,h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk(eCjxgyg.h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik)eDjBgCg:h= GcDgEgQcRcScTc[e]e^e_e`e;h{d2djkkk*eEjFgGg=h? HcHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk+eFjJgKg@h@ IcLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok,eGjNgOg]h[ JcPgQg3gidadhjij7d1isftf4gU }bufvf^h~d8dpkqk-eHjRgSg_h] KcTgUg{eDiEeteMkNkpfrkahbhEijb-cchdh5gjdbdjjkj9d2iwfxf6gV ~byfzf`hae!dsktk.eIjVgWg{h^ LcXgYg|hbe#dukvk/eJjZg0g}h_ Mc1g2gIf|c.c3i4indUi|e}eJfO :b~eafKf}c/c5i6iodVibfcfLfP ;bdfefFiFeueOkPkqfwkehfhGikb:cghhhHiGeveQkRkrfxkihjhIilb;ckhlh

82  

83  

84cdef class GraphNode: 

85 """A node in a graph definition. 

86  

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

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

89 nodes that depend on a predecessor). 

90 """ 

91  

92 @staticmethod 

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

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

95 return GN_create(h_graph, node) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd

96  

97 def __repr__(self) -> str: 

98 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2nl

99 if node == NULL: 2nl

100 return "<GraphNode entry>" 2nl

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

102  

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

104 if not isinstance(other, GraphNode): 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j#eyjhgig%h- Bcsljgkg+b,b5b1 2 3 4 'h[dXd~jak$ezjlgmg(h. Cctlngog)h]dYdbkck%eAjpgqg*h/ Dculrgsg+h^dZddkek'eBjtgug,h: Ecvlvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk(eCjxgyg.h; FcwlzgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik)eDjBgCg:h= GcxlDgEgQcRcScTc[e]e^e_e`e;h{d2djkkk*eEjFgGg=h? HcylHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk+eFjJgKg@h@ IczlLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok,eGjNgOg]h[ JcAlPgQg3gidadhjij7d1isftf4gU }bufvf^h~d8dpkqk-eHjRgSg_h] KcBlTgUg{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

105 return NotImplemented 2Gf=c,cZi0ikdTi;e=eHfJ -b+k?e@e$h@dWd|j}j#eyjhgig%h- Bcsljgkg'h[dXd~jak$ezjlgmg(h. Cctlngog)h]dYdbkck%eAjpgqg*h/ Dculrgsg+h^dZddkek'eBjtgug,h: Ecvlvgwg-h_d0dfkgk(eCjxgyg.h; FcwlzgAg/h`d1dhkik)eDjBgCg:h= GcxlDgEg;h{d2djkkk*eEjFgGg=h? HcylHgIg?h|d5dlkmk+eFjJgKg@h@ IczlLgMg[h}d6dnkok,eGjNgOg]h[ JcAlPgQg^h~d8dpkqk-eHjRgSg_h] KcBlTgUg

106 cdef GraphNode o = <GraphNode>other 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

107 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

108 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

109 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

110 and as_intptr(self_graph) == as_intptr(other_graph)) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

111  

112 def __hash__(self) -> int: 

113 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2pd2k3kCl4k5kDlJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bSiQiLhDbwdMh%dFd8j9jTeljSfTfNh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 ocGl2f3fSh)dId'j(jZeoj4f5fTh9 pcHl6f7fUh*dJd)j*j0epj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xcNl^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j!exjdgeg#h, AcPlfggg`hae!dsktk.eIjVgWg{h^ LcQlXgYg|hbe#dukvk/eJjZg0g}h_ McRl1g2gIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

114 return hash((as_intptr(self._h_node), as_intptr(g))) 2pd2k3kCl4k5kDlJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bSiQiLhDbwdMh%dFd8j9jTeljSfTfNh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 ocGl2f3fSh)dId'j(jZeoj4f5fTh9 pcHl6f7fUh*dJd)j*j0epj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xcNl^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j!exjdgeg#h, AcPlfggg`hae!dsktk.eIjVgWg{h^ LcQlXgYg|hbe#dukvk/eJjZg0g}h_ McRl1g2gIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef

115  

116 @property 

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

118 """Return the CUDA graph node type. 

119  

120 Returns 

121 ------- 

122 CUgraphNodeType or None 

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

124 """ 

125 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd

126 if node == NULL: 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd

127 return None 2/kwd

128 cdef cydriver.CUgraphNodeType node_type 

129 with nogil: 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel

130 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel

131 return driver.CUgraphNodeType(<int>node_type) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel

132  

133 @property 

134 def graph(self) -> GraphDefinition: 

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

136 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2AoBoCoDoEoFo

137  

138 @property 

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

140 """Return the underlying driver CUgraphNode handle. 

141  

142 Returns None for the entry node. 

143 """ 

144 return as_py(self._h_node) 2wdGf=c,cZi0ikdTi;e=eHfJ -b+k?e@e

145  

146 @property 

147 def is_valid(self) -> bool: 

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

149  

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

151 """ 

152 return as_intptr(self._h_node) != 0 2wd

153  

154 def destroy(self) -> None: 

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

156  

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

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

159 already-destroyed node (no-op). 

160 """ 

161 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2ej3bYbMbwd

162 if node == NULL: 2ej3bYbMbwd

163 return 2wd

164 with nogil: 2ej3bYbMbwd

165 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2ej3bYbMbwd

166 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2ej3bYbMbwd

167 invalidate_graph_node(self._h_node) 2ej3bYbMbwd

168  

169 @property 

170 def pred(self) -> AdjacencySetProxy: 

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

172 return AdjacencySetProxy(self, False) 2we:e/kJiNcOcPcoh]i^iGo_i`i{i|iHoIoJoKo}i~iajbjcjdjLoMoSkTkolUkVkpl+ccdQiLhDbwd

173  

174 @pred.setter 

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

176 p = AdjacencySetProxy(self, False) 2MbLh

177 p.clear() 2MbLh

178 p.update(value) 2MbLh

179  

180 @property 

181 def succ(self) -> AdjacencySetProxy: 

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

183 return AdjacencySetProxy(self, True) 2/kJi]i^i_i`i{i|i}i~iajbjcjdjWkXkqlYkZkrlYb=b5jSiQiLhDb6jwd7j

184  

185 @succ.setter 

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

187 s = AdjacencySetProxy(self, True) 2JiLh

188 s.clear() 2JiLh

189 s.update(value) 2JiLh

190  

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

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

193  

194 Parameters 

195 ---------- 

196 config : LaunchConfig 

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

198 kernel : Kernel 

199 The kernel to launch. 

200 *args 

201 Kernel arguments. 

202  

203 Returns 

204 ------- 

205 KernelNode 

206 A new KernelNode representing the kernel launch. 

207 """ 

208 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

209  

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

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

212  

213 This is used to synchronize multiple branches of execution. 

214  

215 Parameters 

216 ---------- 

217 *nodes : GraphNode 

218 Additional nodes to depend on. 

219  

220 Returns 

221 ------- 

222 EmptyNode 

223 A new EmptyNode that depends on all input nodes. 

224 """ 

225 return GN_join(self, nodes) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

226  

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

228 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

231  

232 Parameters 

233 ---------- 

234 size : int 

235 Number of bytes to allocate. 

236 device : int or Device, optional 

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

238 uses the current CUDA context's device. 

239 memory_type : GraphMemoryType or str, optional 

240 Type of memory to allocate. One of: 

241  

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

243 optimal for GPU kernels. 

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

245 both host and device. Useful for graphs containing host 

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

247 systems/drivers. 

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

249 automatically migrates between host and device. Useful for 

250 mixed host/device access patterns. 

251  

252 peer_access : list of int or Device, optional 

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

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

255 device has access. 

256  

257 Returns 

258 ------- 

259 AllocNode 

260 A new AllocNode representing the allocation. Access the allocated 

261 device pointer via the dptr property. 

262  

263 Notes 

264 ----- 

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

266 memory allocation nodes per CUDA documentation. 

267 """ 

268 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

269  

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

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

272  

273 Parameters 

274 ---------- 

275 dptr : int 

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

277  

278 Returns 

279 ------- 

280 FreeNode 

281 A new FreeNode representing the free operation. 

282 """ 

283 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

284  

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

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

287  

288 Parameters 

289 ---------- 

290 dst : int 

291 Destination device pointer. 

292 value : int or buffer-protocol object 

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

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

295 width : int 

296 Width of the row in elements. 

297 height : int, optional 

298 Number of rows (default 1). 

299 pitch : int, optional 

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

301  

302 Returns 

303 ------- 

304 MemsetNode 

305 A new MemsetNode representing the memset operation. 

306 """ 

307 cdef unsigned int val 

308 cdef unsigned int elem_size 

309 val, elem_size = _parse_fill_value(value) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c~hDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

310 return GN_memset(self, <cydriver.CUdeviceptr>dst, val, elem_size, width, height, pitch) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

311  

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

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

314  

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

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

317 pointers are supported. 

318  

319 Parameters 

320 ---------- 

321 dst : int 

322 Destination pointer (device or pinned host). 

323 src : int 

324 Source pointer (device or pinned host). 

325 size : int 

326 Number of bytes to copy. 

327  

328 Returns 

329 ------- 

330 MemcpyNode 

331 A new MemcpyNode representing the copy operation. 

332 """ 

333 return GN_memcpy(self, <cydriver.CUdeviceptr>dst, <cydriver.CUdeviceptr>src, size) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

334  

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

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

337  

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

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

340 nodes. 

341  

342 Parameters 

343 ---------- 

344 child : GraphDefinition 

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

346  

347 Returns 

348 ------- 

349 ChildGraphNode 

350 A new ChildGraphNode representing the embedded sub-graph. 

351 """ 

352 return GN_embed(self, <GraphDefinition>child) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

353  

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

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

356  

357 Parameters 

358 ---------- 

359 event : Event 

360 The event to record. 

361  

362 Returns 

363 ------- 

364 EventRecordNode 

365 A new EventRecordNode representing the event record operation. 

366 """ 

367 return GN_record_event(self, <Event>event) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

368  

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

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

371  

372 Parameters 

373 ---------- 

374 event : Event 

375 The event to wait for. 

376  

377 Returns 

378 ------- 

379 EventWaitNode 

380 A new EventWaitNode representing the event wait operation. 

381 """ 

382 return GN_wait_event(self, <Event>event) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

383  

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

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

386  

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

388 Two modes are supported: 

389  

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

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

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

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

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

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

396 for the lifetime of the graph. 

397  

398 .. warning:: 

399  

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

401 deadlock or corrupt driver state. 

402  

403 Parameters 

404 ---------- 

405 fn : callable or ctypes function pointer 

406 The callback function. 

407 user_data : int or bytes-like, optional 

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

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

410 copied and its lifetime is tied to the graph. 

411  

412 Returns 

413 ------- 

414 HostCallbackNode 

415 A new HostCallbackNode representing the callback. 

416 """ 

417 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

418  

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

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

421  

422 The body graph executes only when the condition evaluates to 

423 a non-zero value at runtime. 

424  

425 Parameters 

426 ---------- 

427 condition : GraphCondition 

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

429  

430 Returns 

431 ------- 

432 IfNode 

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

434 """ 

435 return _make_conditional_node( 2pd8g$g)g-g;g[gfj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh

436 self, condition, 

437 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2pd8g$g)g-g;g[gfj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh

438  

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

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

441  

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

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

444  

445 Parameters 

446 ---------- 

447 condition : GraphCondition 

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

449  

450 Returns 

451 ------- 

452 IfElseNode 

453 A new IfElseNode with branches accessible via 

454 ``.then`` and ``.else_``. 

455 """ 

456 return _make_conditional_node( 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih

457 self, condition, 

458 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih

459  

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

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

462  

463 The body graph executes repeatedly while the condition 

464 evaluates to a non-zero value. 

465  

466 Parameters 

467 ---------- 

468 condition : GraphCondition 

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

470  

471 Returns 

472 ------- 

473 WhileNode 

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

475 """ 

476 return _make_conditional_node( 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh

477 self, condition, 

478 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh

479  

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

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

482  

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

484 value is out of range, no branch executes. 

485  

486 Parameters 

487 ---------- 

488 condition : GraphCondition 

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

490 count : int 

491 Number of switch cases (branches). 

492  

493 Returns 

494 ------- 

495 SwitchNode 

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

497 """ 

498 return _make_conditional_node( 29g%g*g.g=g]ggj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh

499 self, condition, 

500 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 29g%g*g.g=g]ggj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh

501  

502  

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

504 cdef EventHandle* p = <EventHandle*>ptr 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m

505 del p 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m

506  

507  

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

509 cdef KernelHandle* p = <KernelHandle*>ptr 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo

510 del p 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo

511  

512  

513cdef inline ConditionalNode _make_conditional_node( 

514 GraphNode pred, 

515 GraphCondition condition, 

516 cydriver.CUgraphConditionalNodeType cond_type, 

517 unsigned int size, 

518 type node_cls): 

519 if not isinstance(condition, GraphCondition): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

520 raise TypeError( 

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

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

523 cdef cydriver.CUgraphNodeParams params 

524 cdef cydriver.CUgraphNode new_node = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

525  

526 c_memset(&params, 0, sizeof(params)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

527 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

528 params.conditional.handle = condition._c_handle 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

529 params.conditional.type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

530 params.conditional.size = size 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

531  

532 cdef cydriver.CUcontext ctx = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

533 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

534 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

535 cdef cydriver.CUgraphNode* deps = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

536 cdef size_t num_deps = 0 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

537  

538 if pred_node != NULL: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

539 deps = &pred_node 

540 num_deps = 1 

541  

542 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

543 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

544 params.conditional.ctx = ctx 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

545  

546 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

547 IF CUDA_CORE_BUILD_MAJOR >= 13: 

548 HANDLE_RETURN(cydriver.cuGraphAddNode( 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

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

550 ELSE: 

551 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

553  

554 cdef list branch_list = [] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

555 cdef unsigned int i 

556 cdef cydriver.CUgraph bg 

557 cdef GraphHandle h_branch 

558 for i in range(size): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

559 bg = params.conditional.phGraph_out[i] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

560 h_branch = create_graph_handle_ref(bg, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

561 branch_list.append(GraphDefinition._from_handle(h_branch)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

562 cdef tuple branches = tuple(branch_list) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

563  

564 cdef ConditionalNode n = node_cls.__new__(node_cls) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

565 n._h_node = create_graph_node_handle(new_node, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

566 n._condition = condition 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

567 n._cond_type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

568 n._branches = branches 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

569  

570 return _registered(n) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh

571  

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

573 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd

574  

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

576 if node == NULL: 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd

577 n = GraphNode.__new__(GraphNode) 

578 (<GraphNode>n)._h_node = h_node 

579 return n 

580  

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

582 registered = _node_registry.get(<uintptr_t>h_node.get()) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd

583 if registered is not None: 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd

584 return <GraphNode>registered 2pd2k3k4k5kJiNcOcPc8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+ccd[b3bYbMb=bSiQiLhDbwd

585 else: 

586 return _registered(GN_create_impl(h_node)) 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb

587  

588  

589cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

590 cdef cydriver.CUgraphNodeType node_type 

591 with nogil: 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb

592 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb

593  

594 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb

595 return EmptyNode._create_impl(h_node) 2XiYi~i

596 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

597 return KernelNode._create_from_driver(h_node) 2Lksbtbubvbgc@bDb

598 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

599 return AllocNode._create_from_driver(h_node) 28i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}iajbjcjdj

600 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

601 return FreeNode._create_from_driver(h_node) 

602 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

603 return MemsetNode._create_from_driver(h_node) 2Db

604 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

605 return MemcpyNode._create_from_driver(h_node) 

606 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

607 return ChildGraphNode._create_from_driver(h_node) 2@b

608 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

609 return EventRecordNode._create_from_driver(h_node) 

610 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

611 return EventWaitNode._create_from_driver(h_node) 

612 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

613 return HostCallbackNode._create_from_driver(h_node) 

614 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

615 return ConditionalNode._create_from_driver(h_node) 2$d

616 else: 

617 n = GraphNode.__new__(GraphNode) 

618 (<GraphNode>n)._h_node = h_node 

619 return n 

620  

621  

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

623 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

624 cdef cydriver.CUgraphNode new_node = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

625 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

626 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

627 cdef cydriver.CUgraphNode* deps = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

628 cdef size_t num_deps = 0 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

629  

630 if pred_node != NULL: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

631 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh

632 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh

633  

634 node_params.kern = as_cu(ker._h_kernel) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

635 node_params.func = <cydriver.CUfunction>NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

636 node_params.gridDimX = conf.grid[0] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

637 node_params.gridDimY = conf.grid[1] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

638 node_params.gridDimZ = conf.grid[2] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

639 node_params.blockDimX = conf.block[0] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

640 node_params.blockDimY = conf.block[1] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

641 node_params.blockDimZ = conf.block[2] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

642 node_params.sharedMemBytes = conf.shmem_size 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

643 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

644 node_params.extra = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

645 node_params.ctx = <cydriver.CUcontext>NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

646  

647 with nogil: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

648 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

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

650  

651 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

652 <cydriver.CUhostFn>_destroy_kernel_handle_copy) 

653  

654 cdef object kernel_args = ker_args.kernel_args 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

655 if kernel_args is not None: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

656 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh

657 _attach_user_object(as_cu(h_graph), <void*>kernel_args, 2mhJh[b3bYbMb=bDbnh

658 <cydriver.CUhostFn>py_object_user_object_destroy) 

659  

660 return _registered(KernelNode._create_with_params( 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

661 create_graph_node_handle(new_node, h_graph), 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

662 conf.grid, conf.block, conf.shmem_size, 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi

663 ker._h_kernel)) 

664  

665  

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

667 cdef vector[cydriver.CUgraphNode] deps 

668 cdef cydriver.CUgraphNode new_node = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

669 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

670 cdef GraphNode other 

671 cdef cydriver.CUgraphNode* deps_ptr = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

672 cdef size_t num_deps = 0 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

673 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

674  

675 if pred_node != NULL: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

676 deps.push_back(pred_node) 2qdrdsdtdudvd+c

677 for other in nodes: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

678 if as_cu((<GraphNode>other)._h_node) != NULL: 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

679 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

680  

681 num_deps = deps.size() 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

682 if num_deps > 0: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

683 deps_ptr = deps.data() 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe+c[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

684  

685 with nogil: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

686 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

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

688  

689 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb

690  

691  

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

693 object memory_type, object peer_access): 

694 cdef int device_id 

695 cdef cydriver.CUdevice dev 

696  

697 if device is None: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

698 with nogil: 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

699 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

700 device_id = <int>dev 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

701 else: 

702 device_id = getattr(device, 'device_id', device) 2OiPi

703  

704 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

705 cdef cydriver.CUgraphNode new_node = NULL 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

706 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

707 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

708 cdef cydriver.CUgraphNode* deps = NULL 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

709 cdef size_t num_deps = 0 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

710  

711 if pred_node != NULL: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

712 deps = &pred_node 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

713 num_deps = 1 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

714  

715 cdef vector[cydriver.CUmemAccessDesc] access_descs 

716 cdef int peer_id 

717 cdef list peer_ids = [] 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

718  

719 if peer_access is not None: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

720 for peer_dev in peer_access: 

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

722 peer_ids.append(peer_id) 

723 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

724 cydriver.CUmemLocation_st( 

725 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

726 peer_id 

727 ), 

728 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

729 )) 

730  

731 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

732  

733 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

734 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

735 alloc_params.bytesize = size 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

736  

737 if memory_type_str == "device": 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

738 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

739 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

740 alloc_params.poolProps.location.id = device_id 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

741 elif memory_type_str == "host": 27iMfNfOfPfQfRf

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

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

744 alloc_params.poolProps.location.id = 0 

745 elif memory_type_str == "managed": 27iMfNfOfPfQfRf

746 IF CUDA_CORE_BUILD_MAJOR >= 13: 

747 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2MfNfOfPfQfRf

748 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2MfNfOfPfQfRf

749 alloc_params.poolProps.location.id = device_id 2MfNfOfPfQfRf

750 ELSE: 

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

752 else: 

753 raise ValueError(f"Invalid memory_type: {memory_type_str!r}. " 27i

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

755  

756 if access_descs.size() > 0: 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

757 alloc_params.accessDescs = access_descs.data() 

758 alloc_params.accessDescCount = access_descs.size() 

759  

760 with nogil: 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

761 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

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

763  

764 return _registered(AllocNode._create_with_params( 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

765 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

766 device_id, memory_type_str, tuple(peer_ids))) 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

767  

768  

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

770 cdef cydriver.CUgraphNode new_node = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

771 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

772 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

773 cdef cydriver.CUgraphNode* deps = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

774 cdef size_t num_deps = 0 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

775  

776 if pred_node != NULL: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

777 deps = &pred_node 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

778 num_deps = 1 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

779  

780 with nogil: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

781 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

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

783  

784 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf

785  

786  

787cdef inline MemsetNode GN_memset( 

788 GraphNode self, cydriver.CUdeviceptr c_dst, 

789 unsigned int val, unsigned int elem_size, 

790 size_t width, size_t height, size_t pitch): 

791 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

792 cdef cydriver.CUgraphNode new_node = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

793 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

794 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

795 cdef cydriver.CUgraphNode* deps = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

796 cdef size_t num_deps = 0 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

797  

798 if pred_node != NULL: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

799 deps = &pred_node 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

800 num_deps = 1 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

801  

802 cdef cydriver.CUcontext ctx = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

803 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

804 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

805  

806 c_memset(&memset_params, 0, sizeof(memset_params)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

807 memset_params.dst = c_dst 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

808 memset_params.value = val 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

809 memset_params.elementSize = elem_size 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

810 memset_params.width = width 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

811 memset_params.height = height 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

812 memset_params.pitch = pitch 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

813  

814 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

815 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

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

817 &memset_params, ctx)) 

818  

819 return _registered(MemsetNode._create_with_params( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

820 create_graph_node_handle(new_node, h_graph), c_dst, 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c

821 val, elem_size, width, height, pitch)) 

822  

823  

824cdef inline MemcpyNode GN_memcpy( 

825 GraphNode self, cydriver.CUdeviceptr c_dst, 

826 cydriver.CUdeviceptr c_src, size_t size): 

827 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

828 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

829 cdef cydriver.CUresult ret 

830 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

831 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

832 &dst_mem_type, 

833 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

834 c_dst) 

835 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

836 HANDLE_RETURN(ret) 

837 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

838 &src_mem_type, 

839 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

840 c_src) 

841 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

842 HANDLE_RETURN(ret) 

843  

844 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

845 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

846  

847 cdef cydriver.CUDA_MEMCPY3D params 

848 c_memset(&params, 0, sizeof(params)) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

849  

850 params.srcMemoryType = c_src_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

851 params.dstMemoryType = c_dst_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

852 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

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

854 else: 

855 params.srcDevice = c_src 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

856 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

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

858 else: 

859 params.dstDevice = c_dst 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

860 params.WidthInBytes = size 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

861 params.Height = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

862 params.Depth = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

863  

864 cdef cydriver.CUgraphNode new_node = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

865 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

866 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

867 cdef cydriver.CUgraphNode* deps = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

868 cdef size_t num_deps = 0 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

869  

870 if pred_node != NULL: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

871 deps = &pred_node 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

872 num_deps = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

873  

874 cdef cydriver.CUcontext ctx = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

875 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

876 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

877 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

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

879  

880 return _registered(MemcpyNode._create_with_params( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

881 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb

882 c_dst_type, c_src_type)) 

883  

884  

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

886 cdef cydriver.CUgraphNode new_node = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

887 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

888 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

889 cdef cydriver.CUgraphNode* deps = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

890 cdef size_t num_deps = 0 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

891  

892 if pred_node != NULL: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

893 deps = &pred_node 

894 num_deps = 1 

895  

896 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

897 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

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

899  

900 cdef cydriver.CUgraph embedded_graph = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

901 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

902 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

903 new_node, &embedded_graph)) 

904  

905 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

906  

907 return _registered(ChildGraphNode._create_with_params( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

908 create_graph_node_handle(new_node, h_graph), h_embedded)) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe

909  

910  

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

912 cdef cydriver.CUgraphNode new_node = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

913 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

914 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

915 cdef cydriver.CUgraphNode* deps = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

916 cdef size_t num_deps = 0 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

917  

918 if pred_node != NULL: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

919 deps = &pred_node 2HeJeLeNePeRepecd

920 num_deps = 1 2HeJeLeNePeRepecd

921  

922 with nogil: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

923 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

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

925  

926 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

927 <cydriver.CUhostFn>_destroy_event_handle_copy) 

928  

929 return _registered(EventRecordNode._create_with_params( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

930 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk

931  

932  

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

934 cdef cydriver.CUgraphNode new_node = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

935 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

936 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

937 cdef cydriver.CUgraphNode* deps = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

938 cdef size_t num_deps = 0 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

939  

940 if pred_node != NULL: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

941 deps = &pred_node 2KiIeKeMeOeQeSeLiMiqe

942 num_deps = 1 2KiIeKeMeOeQeSeLiMiqe

943  

944 with nogil: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

945 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

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

947  

948 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

949 <cydriver.CUhostFn>_destroy_event_handle_copy) 

950  

951 return _registered(EventWaitNode._create_with_params( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

952 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk

953  

954  

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

956 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

957  

958 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

959 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

960 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

961 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

962 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

963 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

964  

965 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

966 deps = &pred_node 

967 num_deps = 1 

968  

969 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

970 as_cu(h_graph), fn, user_data, 

971 &node_params.fn, &node_params.userData) 

972  

973 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

974 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

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

976  

977 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

978 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

979 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk

980 node_params.fn, node_params.userData))