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

385 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-22 01:37 +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 cpython.ref cimport Py_INCREF 

10  

11from libc.stddef cimport size_t 

12from libc.stdint cimport uintptr_t 

13from libc.string cimport memset as c_memset 

14  

15from libcpp.vector cimport vector 

16  

17from cuda.bindings cimport cydriver 

18  

19from cuda.core._event cimport Event 

20from cuda.core._kernel_arg_handler cimport ParamHolder 

21from cuda.core._launch_config cimport LaunchConfig 

22from cuda.core._module cimport Kernel 

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

24from cuda.core.graph._subclasses cimport ( 

25 AllocNode, 

26 ChildGraphNode, 

27 ConditionalNode, 

28 EmptyNode, 

29 EventRecordNode, 

30 EventWaitNode, 

31 FreeNode, 

32 HostCallbackNode, 

33 IfElseNode, 

34 IfNode, 

35 KernelNode, 

36 MemcpyNode, 

37 MemsetNode, 

38 SwitchNode, 

39 WhileNode, 

40) 

41from cuda.core._resource_handles cimport ( 

42 EventHandle, 

43 GraphHandle, 

44 KernelHandle, 

45 GraphNodeHandle, 

46 as_cu, 

47 as_intptr, 

48 as_py, 

49 create_graph_handle_ref, 

50 create_graph_node_handle, 

51 graph_node_get_graph, 

52 invalidate_graph_node, 

53) 

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

55  

56from cuda.core.graph._utils cimport ( 

57 _attach_host_callback_to_graph, 

58 _attach_user_object, 

59 _py_host_destructor, 

60) 

61  

62import weakref 

63  

64from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

65from cuda.core._utils.cuda_utils import driver 

66from cuda.core.typing import GraphMemoryType 

67  

68__all__ = ['GraphNode'] 

69  

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

71_node_registry = weakref.WeakValueDictionary() 

72  

73  

74cdef inline GraphNode _registered(GraphNode n): 

75 _node_registry[<uintptr_t>n._h_node.get()] = n 2OiPivepdcidieiqhqdficerhgi/eKjJiffgfhfifweKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfykxedeGeHejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfyeee9iIe!iJe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdqifevhriwhsdsigexhtiyhOfzeheKeLelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfAe,iie-iMe.iNe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfBe^ije_iOe`iPe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfCekeQeReofXjYj@g[gfcab'c(c)c*c]g^gChtduileDhviEhudwimeFhxidjGhvdyineHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1joe2jLiMipe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jRiQiLhDb6jwd7jnhGf=c,cZi0ikdSi:e;eHfJ -b=e?eMh%dFd8j9jSeljSfTfNh5 lcUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 oc2f3fSh)dId'j(jYeoj4f5fTh9 pc6f7fUh*dJd)j*jZepj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vc/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xc^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcbgcgFf!h?dSd`j{j9exjdgeg#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[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcTgUg`eDiDesezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf`hae!dsktk-eIjVgWg{h^ LcXgYg|hbe#dukvk.eJjZg0g}h_ Mc1g2gIf|c.c3i4indTi{e|eJfO :b}e~eKf}c/c5i6iodUiafbfLfP ;bcfdfFiEeteBkCkqfwkehfhGikb:cghhhHiFeueDkEkrfxkihjhIilb;ckhlh

76 return n 2OiPivepdcidieiqhqdficerhgi/eKjJiffgfhfifweKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfykxedeGeHejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfyeee9iIe!iJe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdqifevhriwhsdsigexhtiyhOfzeheKeLelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfAe,iie-iMe.iNe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfBe^ije_iOe`iPe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfCekeQeReofXjYj@g[gfcab'c(c)c*c]g^gChtduileDhviEhudwimeFhxidjGhvdyineHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1joe2jLiMipe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jRiQiLhDb6jwd7jnhGf=c,cZi0ikdSi:e;eHfJ -b=e?eMh%dFd8j9jSeljSfTfNh5 lcUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 oc2f3fSh)dId'j(jYeoj4f5fTh9 pc6f7fUh*dJd)j*jZepj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vc/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xc^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcbgcgFf!h?dSd`j{j9exjdgeg#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[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcTgUg`eDiDesezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf`hae!dsktk-eIjVgWg{h^ LcXgYg|hbe#dukvk.eJjZg0g}h_ Mc1g2gIf|c.c3i4indTi{e|eJfO :b}e~eKf}c/c5i6iodUiafbfLfP ;bcfdfFiEeteBkCkqfwkehfhGikb:cghhhHiFeueDkEkrfxkihjhIilb;ckhlh

77  

78  

79cdef class GraphNode: 

80 """A node in a graph definition. 

81  

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

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

84 nodes that depend on a predecessor). 

85 """ 

86  

87 @staticmethod 

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

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

90 return GN_create(h_graph, node) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd

91  

92 def __repr__(self) -> str: 

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

94 if node == NULL: 2nl

95 return "<GraphNode entry>" 2nl

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

97  

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

99 if not isinstance(other, GraphNode): 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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[ JcAlPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcBlTgUg`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

100 return NotImplemented 2Gf=c,cZi0ikdSi: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

101 cdef GraphNode o = <GraphNode>other 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

102 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

103 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

104 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

105 and as_intptr(self_graph) == as_intptr(other_graph)) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi: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 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

106  

107 def __hash__(self) -> int: 

108 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2pd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiLhDbwdMh%dFd8j9jSeljSfTfNh5 lcElUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 ocGl2f3fSh)dId'j(jYeoj4f5fTh9 pcHl6f7fUh*dJd)j*jZepj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vcLl/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xcNl^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j9exjdgeg#h, AcPlfggg`hae!dsktk-eIjVgWg{h^ LcQlXgYg|hbe#dukvk.eJjZg0g}h_ McRl1g2gIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

109 return hash((as_intptr(self._h_node), as_intptr(g))) 2pd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiLhDbwdMh%dFd8j9jSeljSfTfNh5 lcElUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 ocGl2f3fSh)dId'j(jYeoj4f5fTh9 pcHl6f7fUh*dJd)j*jZepj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vcLl/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xcNl^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j9exjdgeg#h, AcPlfggg`hae!dsktk-eIjVgWg{h^ LcQlXgYg|hbe#dukvk.eJjZg0g}h_ McRl1g2gIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf

110  

111 @property 

112 def type(self): 

113 """Return the CUDA graph node type. 

114  

115 Returns 

116 ------- 

117 CUgraphNodeType or None 

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

119 """ 

120 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

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

122 return None 2/kwd

123 cdef cydriver.CUgraphNodeType node_type 

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

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

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

127  

128 @property 

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

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

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

132  

133 @property 

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

135 """Return the underlying driver CUgraphNode handle. 

136  

137 Returns None for the entry node. 

138 """ 

139 return as_py(self._h_node) 2wdGf=c,cZi0ikdSi:e;eHfJ -b+k=e?e

140  

141 @property 

142 def is_valid(self): 

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

144  

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

146 """ 

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

148  

149 def destroy(self): 

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

151  

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

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

154 already-destroyed node (no-op). 

155 """ 

156 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2dj3bYbMbwd

157 if node == NULL: 2dj3bYbMbwd

158 return 2wd

159 with nogil: 2dj3bYbMbwd

160 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2dj3bYbMbwd

161 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2dj3bYbMbwd

162 invalidate_graph_node(self._h_node) 2dj3bYbMbwd

163  

164 @property 

165 def pred(self): 

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

167 return AdjacencySetProxy(self, False) 2ve/e/kJiNcOcPcoh[i]iGo^i_i`i{iHoIoJoKo|i}i~iajbjcjLoMoSkTkolUkVkpl+ccdQiLhDbwd

168  

169 @pred.setter 

170 def pred(self, value): 

171 p = AdjacencySetProxy(self, False) 2MbLh

172 p.clear() 2MbLh

173 p.update(value) 2MbLh

174  

175 @property 

176 def succ(self): 

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

178 return AdjacencySetProxy(self, True) 2/kJi[i]i^i_i`i{i|i}i~iajbjcjWkXkqlYkZkrlYb=b5jRiQiLhDb6jwd7j

179  

180 @succ.setter 

181 def succ(self, value): 

182 s = AdjacencySetProxy(self, True) 2JiLh

183 s.clear() 2JiLh

184 s.update(value) 2JiLh

185  

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

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

188  

189 Parameters 

190 ---------- 

191 config : LaunchConfig 

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

193 kernel : Kernel 

194 The kernel to launch. 

195 *args 

196 Kernel arguments. 

197  

198 Returns 

199 ------- 

200 KernelNode 

201 A new KernelNode representing the kernel launch. 

202 """ 

203 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

204  

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

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

207  

208 This is used to synchronize multiple branches of execution. 

209  

210 Parameters 

211 ---------- 

212 *nodes : GraphNode 

213 Additional nodes to depend on. 

214  

215 Returns 

216 ------- 

217 EmptyNode 

218 A new EmptyNode that depends on all input nodes. 

219 """ 

220 return GN_join(self, nodes) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

221  

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

223 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

226  

227 Parameters 

228 ---------- 

229 size : int 

230 Number of bytes to allocate. 

231 device : int or Device, optional 

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

233 uses the current CUDA context's device. 

234 memory_type : GraphMemoryType or str, optional 

235 Type of memory to allocate. One of: 

236  

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

238 optimal for GPU kernels. 

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

240 both host and device. Useful for graphs containing host 

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

242 systems/drivers. 

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

244 automatically migrates between host and device. Useful for 

245 mixed host/device access patterns. 

246  

247 peer_access : list of int or Device, optional 

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

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

250 device has access. 

251  

252 Returns 

253 ------- 

254 AllocNode 

255 A new AllocNode representing the allocation. Access the allocated 

256 device pointer via the dptr property. 

257  

258 Notes 

259 ----- 

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

261 memory allocation nodes per CUDA documentation. 

262 """ 

263 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

264  

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

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

267  

268 Parameters 

269 ---------- 

270 dptr : int 

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

272  

273 Returns 

274 ------- 

275 FreeNode 

276 A new FreeNode representing the free operation. 

277 """ 

278 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

279  

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

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

282  

283 Parameters 

284 ---------- 

285 dst : int 

286 Destination device pointer. 

287 value : int or buffer-protocol object 

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

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

290 width : int 

291 Width of the row in elements. 

292 height : int, optional 

293 Number of rows (default 1). 

294 pitch : int, optional 

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

296  

297 Returns 

298 ------- 

299 MemsetNode 

300 A new MemsetNode representing the memset operation. 

301 """ 

302 cdef unsigned int val 

303 cdef unsigned int elem_size 

304 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

305 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

306  

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

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

309  

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

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

312 pointers are supported. 

313  

314 Parameters 

315 ---------- 

316 dst : int 

317 Destination pointer (device or pinned host). 

318 src : int 

319 Source pointer (device or pinned host). 

320 size : int 

321 Number of bytes to copy. 

322  

323 Returns 

324 ------- 

325 MemcpyNode 

326 A new MemcpyNode representing the copy operation. 

327 """ 

328 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

329  

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

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

332  

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

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

335 nodes. 

336  

337 Parameters 

338 ---------- 

339 child : GraphDefinition 

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

341  

342 Returns 

343 ------- 

344 ChildGraphNode 

345 A new ChildGraphNode representing the embedded sub-graph. 

346 """ 

347 return GN_embed(self, <GraphDefinition>child) 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

348  

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

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

351  

352 Parameters 

353 ---------- 

354 event : Event 

355 The event to record. 

356  

357 Returns 

358 ------- 

359 EventRecordNode 

360 A new EventRecordNode representing the event record operation. 

361 """ 

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

363  

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

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

366  

367 Parameters 

368 ---------- 

369 event : Event 

370 The event to wait for. 

371  

372 Returns 

373 ------- 

374 EventWaitNode 

375 A new EventWaitNode representing the event wait operation. 

376 """ 

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

378  

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

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

381  

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

383 Two modes are supported: 

384  

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

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

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

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

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

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

391 for the lifetime of the graph. 

392  

393 .. warning:: 

394  

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

396 deadlock or corrupt driver state. 

397  

398 Parameters 

399 ---------- 

400 fn : callable or ctypes function pointer 

401 The callback function. 

402 user_data : int or bytes-like, optional 

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

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

405 copied and its lifetime is tied to the graph. 

406  

407 Returns 

408 ------- 

409 HostCallbackNode 

410 A new HostCallbackNode representing the callback. 

411 """ 

412 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

413  

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

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

416  

417 The body graph executes only when the condition evaluates to 

418 a non-zero value at runtime. 

419  

420 Parameters 

421 ---------- 

422 condition : GraphCondition 

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

424  

425 Returns 

426 ------- 

427 IfNode 

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

429 """ 

430 return _make_conditional_node( 2pd8g$g)g-g;g[gjj_gsb;eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc]e^e_eGgVbKgd E OgtfSgbhxfWg0g|ebffhjh

431 self, condition, 

432 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2pd8g$g)g-g;g[gjj_gsb;eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc]e^e_eGgVbKgd E OgtfSgbhxfWg0g|ebffhjh

433  

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

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

436  

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

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

439  

440 Parameters 

441 ---------- 

442 condition : GraphCondition 

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

444  

445 Returns 

446 ------- 

447 IfElseNode 

448 A new IfElseNode with branches accessible via 

449 ``.then`` and ``.else_``. 

450 """ 

451 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{eafehih

452 self, condition, 

453 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{eafehih

454  

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

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

457  

458 The body graph executes repeatedly while the condition 

459 evaluates to a non-zero value. 

460  

461 Parameters 

462 ---------- 

463 condition : GraphCondition 

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

465  

466 Returns 

467 ------- 

468 WhileNode 

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

470 """ 

471 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`edhzfYg2g~edfhhlh

472 self, condition, 

473 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`edhzfYg2g~edfhhlh

474  

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

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

477  

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

479 value is out of range, no branch executes. 

480  

481 Parameters 

482 ---------- 

483 condition : GraphCondition 

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

485 count : int 

486 Number of switch cases (branches). 

487  

488 Returns 

489 ------- 

490 SwitchNode 

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

492 """ 

493 return _make_conditional_node( 29g%g*g.g=g]gkj{gub=eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc@e^eHgWbLge F PgufTg`echyfXg1g}ecfghkh

494 self, condition, 

495 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 29g%g*g.g=g]gkj{gub=eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc@e^eHgWbLge F PgufTg`echyfXg1g}ecfghkh

496  

497  

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

499 cdef EventHandle* p = <EventHandle*>ptr 2SlTlUlVlWlXlYlZl0l1l2l3l4l1joe2jpe3j5l6l7l8l9l!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

500 del p 2SlTlUlVlWlXlYlZl0l1l2l3l4l1joe2jpe3j5l6l7l8l9l!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

501  

502  

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

504 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

505 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

506  

507  

508cdef inline ConditionalNode _make_conditional_node( 

509 GraphNode pred, 

510 GraphCondition condition, 

511 cydriver.CUgraphConditionalNodeType cond_type, 

512 unsigned int size, 

513 type node_cls): 

514 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

515 raise TypeError( 

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

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

518 cdef cydriver.CUgraphNodeParams params 

519 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

520  

521 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

522 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

523 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

524 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

525 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

526  

527 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

528 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

529 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

530 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

531 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

532  

533 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

534 deps = &pred_node 

535 num_deps = 1 

536  

537 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

538 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

539 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

540  

541 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

542 IF CUDA_CORE_BUILD_MAJOR >= 13: 

543 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^gjjkj_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}e~eafbfcfdfehfhghhhihjhkhlh

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

545 ELSE: 

546 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

548  

549 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}e~eafbfcfdfehfhghhhihjhkhlh

550 cdef unsigned int i 

551 cdef cydriver.CUgraph bg 

552 cdef GraphHandle h_branch 

553 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}e~eafbfcfdfehfhghhhihjhkhlh

554 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}e~eafbfcfdfehfhghhhihjhkhlh

555 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}e~eafbfcfdfehfhghhhihjhkhlh

556 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}e~eafbfcfdfehfhghhhihjhkhlh

557 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}e~eafbfcfdfehfhghhhihjhkhlh

558  

559 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}e~eafbfcfdfehfhghhhihjhkhlh

560 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}e~eafbfcfdfehfhghhhihjhkhlh

561 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}e~eafbfcfdfehfhghhhihjhkhlh

562 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}e~eafbfcfdfehfhghhhihjhkhlh

563 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}e~eafbfcfdfehfhghhhihjhkhlh

564  

565 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}e~eafbfcfdfehfhghhhihjhkhlh

566  

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

568 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd

569  

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

571 if node == NULL: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd

572 n = GraphNode.__new__(GraphNode) 

573 (<GraphNode>n)._h_node = h_node 

574 return n 

575  

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

577 registered = _node_registry.get(<uintptr_t>h_node.get()) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd

578 if registered is not None: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd

579 return <GraphNode>registered 2pd2k3k4k5kJiNcOcPc7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+ccd[b3bYbMb=bRiQiLhDbwd

580 else: 

581 return _registered(GN_create_impl(h_node)) 2yk7i8i9i!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}i~iajbjcjsbtbubvbgc@b$dDb

582  

583  

584cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

585 cdef cydriver.CUgraphNodeType node_type 

586 with nogil: 2yk7i8i9i!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}i~iajbjcjsbtbubvbgc@b$dDb

587 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2yk7i8i9i!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}i~iajbjcjsbtbubvbgc@b$dDb

588  

589 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2yk7i8i9i!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}i~iajbjcjsbtbubvbgc@b$dDb

590 return EmptyNode._create_impl(h_node) 2XiYi}i

591 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

592 return KernelNode._create_from_driver(h_node) 2yksbtbubvbgc@bDb

593 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

594 return AllocNode._create_from_driver(h_node) 27i8i9i!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~iajbjcj

595 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

596 return FreeNode._create_from_driver(h_node) 

597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

598 return MemsetNode._create_from_driver(h_node) 2Db

599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

600 return MemcpyNode._create_from_driver(h_node) 

601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

602 return ChildGraphNode._create_from_driver(h_node) 2@b

603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

604 return EventRecordNode._create_from_driver(h_node) 

605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

606 return EventWaitNode._create_from_driver(h_node) 

607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

608 return HostCallbackNode._create_from_driver(h_node) 

609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

610 return ConditionalNode._create_from_driver(h_node) 2$d

611 else: 

612 n = GraphNode.__new__(GraphNode) 

613 (<GraphNode>n)._h_node = h_node 

614 return n 

615  

616  

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

618 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

619 cdef cydriver.CUgraphNode new_node = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

620 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

621 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

622 cdef cydriver.CUgraphNode* deps = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

623 cdef size_t num_deps = 0 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

624  

625 if pred_node != NULL: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

626 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh

627 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh

628  

629 node_params.kern = as_cu(ker._h_kernel) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

630 node_params.func = <cydriver.CUfunction>NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

631 node_params.gridDimX = conf.grid[0] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

632 node_params.gridDimY = conf.grid[1] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

633 node_params.gridDimZ = conf.grid[2] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

634 node_params.blockDimX = conf.block[0] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

635 node_params.blockDimY = conf.block[1] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

636 node_params.blockDimZ = conf.block[2] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

637 node_params.sharedMemBytes = conf.shmem_size 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

638 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

639 node_params.extra = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

640 node_params.ctx = <cydriver.CUcontext>NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

641  

642 with nogil: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

643 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

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

645  

646 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

647 <cydriver.CUhostFn>_destroy_kernel_handle_copy) 

648  

649 cdef object kernel_args = ker_args.kernel_args 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

650 if kernel_args is not None: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

651 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh

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

653 <cydriver.CUhostFn>_py_host_destructor) 

654  

655 return _registered(KernelNode._create_with_params( 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

656 create_graph_node_handle(new_node, h_graph), 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

657 conf.grid, conf.block, conf.shmem_size, 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!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_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi

658 ker._h_kernel)) 

659  

660  

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

662 cdef vector[cydriver.CUgraphNode] deps 

663 cdef cydriver.CUgraphNode new_node = NULL 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

664 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

665 cdef GraphNode other 

666 cdef cydriver.CUgraphNode* deps_ptr = NULL 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

667 cdef size_t num_deps = 0 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

668 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

669  

670 if pred_node != NULL: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

671 deps.push_back(pred_node) 2qdrdsdtdudvd+c

672 for other in nodes: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

673 if as_cu((<GraphNode>other)._h_node) != NULL: 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne[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] sejbbdV !d^ #d_ .cO /cP tekbuelb

674 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne[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] sejbbdV !d^ #d_ .cO /cP tekbuelb

675  

676 num_deps = deps.size() 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

677 if num_deps > 0: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

678 deps_ptr = deps.data() 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne+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] sejbbdV !d^ #d_ .cO /cP tekbuelb

679  

680 with nogil: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

681 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

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

683  

684 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,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] sejbbdV !d^ #d_ .cO /cP tekbuelb

685  

686  

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

688 object memory_type, object peer_access): 

689 cdef int device_id 

690 cdef cydriver.CUdevice dev 

691  

692 if device is None: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

693 with nogil: 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

694 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

695 device_id = <int>dev 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

696 else: 

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

698  

699 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

700 cdef cydriver.CUgraphNode new_node = NULL 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

701 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

702 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

703 cdef cydriver.CUgraphNode* deps = NULL 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

704 cdef size_t num_deps = 0 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

705  

706 if pred_node != NULL: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

707 deps = &pred_node 2veqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

708 num_deps = 1 2veqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

709  

710 cdef vector[cydriver.CUmemAccessDesc] access_descs 

711 cdef int peer_id 

712 cdef list peer_ids = [] 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

713  

714 if peer_access is not None: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

715 for peer_dev in peer_access: 

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

717 peer_ids.append(peer_id) 

718 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

719 cydriver.CUmemLocation_st( 

720 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

721 peer_id 

722 ), 

723 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

724 )) 

725  

726 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

727  

728 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

729 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

730 alloc_params.bytesize = size 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

731  

732 if memory_type_str == "device": 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

733 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

734 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

735 alloc_params.poolProps.location.id = device_id 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

736 elif memory_type_str == "host": 2ejMfNfOfPfQfRf

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

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

739 alloc_params.poolProps.location.id = 0 

740 elif memory_type_str == "managed": 2ejMfNfOfPfQfRf

741 IF CUDA_CORE_BUILD_MAJOR >= 13: 

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

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

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

745 ELSE: 

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

747 else: 

748 raise ValueError(f"Invalid memory_type: {memory_type_str!r}. " 2ej

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

750  

751 if access_descs.size() > 0: 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

752 alloc_params.accessDescs = access_descs.data() 

753 alloc_params.accessDescCount = access_descs.size() 

754  

755 with nogil: 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

756 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

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

758  

759 return _registered(AllocNode._create_with_params( 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

760 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

761 device_id, memory_type_str, tuple(peer_ids))) 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, 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] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c

762  

763  

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

765 cdef cydriver.CUgraphNode new_node = NULL 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

766 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

767 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

768 cdef cydriver.CUgraphNode* deps = NULL 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

769 cdef size_t num_deps = 0 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

770  

771 if pred_node != NULL: 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

772 deps = &pred_node 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

773 num_deps = 1 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

774  

775 with nogil: 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

776 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

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

778  

779 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf

780  

781  

782cdef inline MemsetNode GN_memset( 

783 GraphNode self, cydriver.CUdeviceptr c_dst, 

784 unsigned int val, unsigned int elem_size, 

785 size_t width, size_t height, size_t pitch): 

786 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

787 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

788 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

789 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

790 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

791 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

792  

793 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

794 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

795 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

796  

797 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

798 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

799 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

800  

801 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

802 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

803 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

804 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

805 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

806 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

807 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

808  

809 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

810 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

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

812 &memset_params, ctx)) 

813  

814 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

815 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

816 val, elem_size, width, height, pitch)) 

817  

818  

819cdef inline MemcpyNode GN_memcpy( 

820 GraphNode self, cydriver.CUdeviceptr c_dst, 

821 cydriver.CUdeviceptr c_src, size_t size): 

822 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

823 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

824 cdef cydriver.CUresult ret 

825 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

826 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

827 &dst_mem_type, 

828 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

829 c_dst) 

830 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

831 HANDLE_RETURN(ret) 

832 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

833 &src_mem_type, 

834 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

835 c_src) 

836 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

837 HANDLE_RETURN(ret) 

838  

839 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

840 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

841  

842 cdef cydriver.CUDA_MEMCPY3D params 

843 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

844  

845 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

846 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

847 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

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

849 else: 

850 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

851 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

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

853 else: 

854 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

855 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

856 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

857 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

858  

859 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

860 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

861 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

862 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

863 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

864  

865 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

866 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

867 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

868  

869 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

870 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

871 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

872 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

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

874  

875 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

876 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

877 c_dst_type, c_src_type)) 

878  

879  

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

881 cdef cydriver.CUgraphNode new_node = NULL 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

882 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

883 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

884 cdef cydriver.CUgraphNode* deps = NULL 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

885 cdef size_t num_deps = 0 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

886  

887 if pred_node != NULL: 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

888 deps = &pred_node 

889 num_deps = 1 

890  

891 with nogil: 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

892 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

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

894  

895 cdef cydriver.CUgraph embedded_graph = NULL 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

896 with nogil: 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

897 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

898 new_node, &embedded_graph)) 

899  

900 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

901  

902 return _registered(ChildGraphNode._create_with_params( 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

903 create_graph_node_handle(new_node, h_graph), h_embedded)) 2wexeyezeAeBeCegc@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~dDejdaebe|c}cEeFe

904  

905  

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

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

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

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

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

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

912  

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

914 deps = &pred_node 2GeIeKeMeOeQeoecd

915 num_deps = 1 2GeIeKeMeOeQeoecd

916  

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

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

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

920  

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

922 <cydriver.CUhostFn>_destroy_event_handle_copy) 

923  

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

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

926  

927  

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

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

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

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

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

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

934  

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

936 deps = &pred_node 2KiHeJeLeNePeReLiMipe

937 num_deps = 1 2KiHeJeLeNePeReLiMipe

938  

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

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

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

942  

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

944 <cydriver.CUhostFn>_destroy_event_handle_copy) 

945  

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

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

948  

949  

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

951 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

952  

953 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

954 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

955 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

956 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

957 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

958 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

959  

960 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

961 deps = &pred_node 

962 num_deps = 1 

963  

964 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

965 as_cu(h_graph), fn, user_data, 

966 &node_params.fn, &node_params.userData) 

967  

968 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

969 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

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

971  

972 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

973 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

974 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

975 node_params.fn, node_params.userData))