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

388 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-13 01:38 +0000

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

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

6  

7from __future__ import annotations 

8  

9from collections.abc import Iterable 

10from typing import TYPE_CHECKING 

11  

12from cpython.ref cimport Py_INCREF 

13  

14from libc.stddef cimport size_t 

15from libc.stdint cimport uintptr_t 

16from libc.string cimport memset as c_memset 

17  

18from libcpp.vector cimport vector 

19  

20from cuda.bindings cimport cydriver 

21  

22from cuda.core._event cimport Event 

23from cuda.core._kernel_arg_handler cimport ParamHolder 

24from cuda.core._launch_config cimport LaunchConfig 

25from cuda.core._module cimport Kernel 

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

27from cuda.core.graph._subclasses cimport ( 

28 AllocNode, 

29 ChildGraphNode, 

30 ConditionalNode, 

31 EmptyNode, 

32 EventRecordNode, 

33 EventWaitNode, 

34 FreeNode, 

35 HostCallbackNode, 

36 IfElseNode, 

37 IfNode, 

38 KernelNode, 

39 MemcpyNode, 

40 MemsetNode, 

41 SwitchNode, 

42 WhileNode, 

43) 

44from cuda.core._resource_handles cimport ( 

45 EventHandle, 

46 GraphHandle, 

47 GraphNodeHandle, 

48 KernelHandle, 

49 as_cu, 

50 as_intptr, 

51 as_py, 

52 create_graph_handle_ref, 

53 create_graph_node_handle, 

54 graph_node_get_graph, 

55 invalidate_graph_node, 

56 py_object_user_object_destroy, 

57) 

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

59  

60from cuda.core.graph._utils cimport ( 

61 _attach_host_callback_to_graph, 

62 _attach_user_object, 

63) 

64  

65import weakref 

66  

67from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

68from cuda.core._utils.cuda_utils import driver 

69from cuda.core.typing import GraphMemoryType 

70  

71if TYPE_CHECKING: 

72 from cuda.core._device import Device 

73  

74__all__ = ['GraphNode'] 

75  

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

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

78  

79  

80cdef inline GraphNode _registered(GraphNode n): 

81 _node_registry[<uintptr_t>n._h_node.get()] = n 2OiPiwepddieifiqhqdgiderhhi:eKjJiffgfhfifxeKiLjMjiijikilimig h i j Zb0b1b2bnioipiNcOcPcohqishMfykyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfzefe9iJe!iKe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdrigevhsiwhsdtihexhuiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfBe,ije-iNe.iOe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfCe^ike_iPe`iQe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtdvimeDhwiEhudxineFhyidjGhvdzioeHhAiWi+caiIhBi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdCiLh@b4j$d[b3bYbMb=b5jRiQiMhDb6jwd7jnhGf=c,cZi0ikdSi;e=eHfJ -b?e@eNh%dFd8j9jTeljSfTfOh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 oc2f3fTh)dId'j(jZeoj4f5fUh9 pc6f7fVh*dJd)j*j0epj8f9fWh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rc'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% uc+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vc/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wc?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xc^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcbgcgFf#h?dSd`j{j!exjdgeg$h, AcfgggrbTdUdVdldQbRb*bS `bSbTb%h@dWd|j}j#eyjhgig'h- Bcjgkg+b,b5b1 2 3 4 (h[dXd~jak$ezjlgmg)h. Ccngog*h]dYdbkck%eAjpgqg+h/ Dcrgsg,h^dZddkek'eBjtgug-h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z .h_d0dfkgk(eCjxgyg/h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib:h`d1dhkik)eDjBgCg;h= GcDgEgQcRcScTc[e]e^e_e`e=h{d2djkkk*eEjFgGg?h? HcHgIghd3d4dCbmdUbVbo Q WbXb@h|d5dlkmk+eFjJgKg[h@ IcLgMga w x t c d e f s IbJbFbD E p F G ]h}d6dnkok,eGjNgOg^h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf_h~d8dpkqk-eHjRgSg`h] KcTgUg{eDiEetezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf{hae!dsktk.eIjVgWg|h^ LcXgYg}hbe#dukvk/eJjZg0g~h_ Mc1g2gIf|c.c3i4indTi|e}eJfO :b~eafKf}c/c5i6iodUibfcfLfP ;bdfefFiFeueBkCkqfwkehfhGikb:cghhhHiGeveDkEkrfxkihjhIilb;ckhlh

82 return n 2OiPiwepddieifiqhqdgiderhhi:eKjJiffgfhfifxeKiLjMjiijikilimig h i j Zb0b1b2bnioipiNcOcPcohqishMfykyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfzefe9iJe!iKe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdrigevhsiwhsdtihexhuiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfBe,ije-iNe.iOe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfCe^ike_iPe`iQe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtdvimeDhwiEhudxineFhyidjGhvdzioeHhAiWi+caiIhBi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdCiLh@b4j$d[b3bYbMb=b5jRiQiMhDb6jwd7jnhGf=c,cZi0ikdSi;e=eHfJ -b?e@eNh%dFd8j9jTeljSfTfOh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 oc2f3fTh)dId'j(jZeoj4f5fUh9 pc6f7fVh*dJd)j*j0epj8f9fWh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rc'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% uc+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vc/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wc?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xc^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcbgcgFf#h?dSd`j{j!exjdgeg$h, AcfgggrbTdUdVdldQbRb*bS `bSbTb%h@dWd|j}j#eyjhgig'h- Bcjgkg+b,b5b1 2 3 4 (h[dXd~jak$ezjlgmg)h. Ccngog*h]dYdbkck%eAjpgqg+h/ Dcrgsg,h^dZddkek'eBjtgug-h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z .h_d0dfkgk(eCjxgyg/h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib:h`d1dhkik)eDjBgCg;h= GcDgEgQcRcScTc[e]e^e_e`e=h{d2djkkk*eEjFgGg?h? HcHgIghd3d4dCbmdUbVbo Q WbXb@h|d5dlkmk+eFjJgKg[h@ IcLgMga w x t c d e f s IbJbFbD E p F G ]h}d6dnkok,eGjNgOg^h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf_h~d8dpkqk-eHjRgSg`h] KcTgUg{eDiEetezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf{hae!dsktk.eIjVgWg|h^ LcXgYg}hbe#dukvk/eJjZg0g~h_ Mc1g2gIf|c.c3i4indTi|e}eJfO :b~eafKf}c/c5i6iodUibfcfLfP ;bdfefFiFeueBkCkqfwkehfhGikb:cghhhHiGeveDkEkrfxkihjhIilb;ckhlh

83  

84  

85cdef class GraphNode: 

86 """A node in a graph definition. 

87  

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

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

90 nodes that depend on a predecessor). 

91 """ 

92  

93 @staticmethod 

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

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

96 return GN_create(h_graph, node) 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=bRiQiMhDbwd

97  

98 def __repr__(self) -> str: 

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

100 if node == NULL: 2nl

101 return "<GraphNode entry>" 2nl

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

103  

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

105 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

106 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

107 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

108 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

109 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

110 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

111 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~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

112  

113 def __hash__(self) -> int: 

114 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=bRiQiMhDbwdNh%dFd8j9jTeljSfTfOh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncFlYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 ocGl2f3fTh)dId'j(jZeoj4f5fUh9 pcHl6f7fVh*dJd)j*j0epj8f9fWh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rcJl'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% ucKl+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xcNl^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcOlbgcgFf#h?dSd`j{j!exjdgeg$h, AcPlfggg{hae!dsktk.eIjVgWg|h^ LcQlXgYg}hbe#dukvk/eJjZg0g~h_ McRl1g2gIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

115 return hash((as_intptr(self._h_node), as_intptr(g))) 2cepd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!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=bRiQiMhDbwdNh%dFd8j9jTeljSfTfOh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncFlYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 ocGl2f3fTh)dId'j(jZeoj4f5fUh9 pcHl6f7fVh*dJd)j*j0epj8f9fWh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rcJl'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% ucKl+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xcNl^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcOlbgcgFf#h?dSd`j{j!exjdgeg$h, AcPlfggg{hae!dsktk.eIjVgWg|h^ LcQlXgYg}hbe#dukvk/eJjZg0g~h_ McRl1g2gIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef

116  

117 @property 

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

119 """Return the CUDA graph node type. 

120  

121 Returns 

122 ------- 

123 CUgraphNodeType or None 

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

125 """ 

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

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

128 return None 2/kwd

129 cdef cydriver.CUgraphNodeType node_type 

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

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

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

133  

134 @property 

135 def graph(self) -> GraphDefinition: 

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

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

138  

139 @property 

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

141 """Return the underlying driver CUgraphNode handle. 

142  

143 Returns None for the entry node. 

144 """ 

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

146  

147 @property 

148 def is_valid(self) -> bool: 

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

150  

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

152 """ 

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

154  

155 def destroy(self) -> None: 

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

157  

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

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

160 already-destroyed node (no-op). 

161 """ 

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

163 if node == NULL: 2dj3bYbMbwd

164 return 2wd

165 with nogil: 2dj3bYbMbwd

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

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

168 invalidate_graph_node(self._h_node) 2dj3bYbMbwd

169  

170 @property 

171 def pred(self) -> AdjacencySetProxy: 

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

173 return AdjacencySetProxy(self, False) 2we:e/kJiNcOcPcoh[i]iGo^i_i`i{iHoIoJoKo|i}i~iajbjcjLoMoSkTkolUkVkpl+ccdQiMhDbwd

174  

175 @pred.setter 

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

177 p = AdjacencySetProxy(self, False) 2MbMh

178 p.clear() 2MbMh

179 p.update(value) 2MbMh

180  

181 @property 

182 def succ(self) -> AdjacencySetProxy: 

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

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

185  

186 @succ.setter 

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

188 s = AdjacencySetProxy(self, True) 2JiMh

189 s.clear() 2JiMh

190 s.update(value) 2JiMh

191  

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

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

194  

195 Parameters 

196 ---------- 

197 config : LaunchConfig 

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

199 kernel : Kernel 

200 The kernel to launch. 

201 *args 

202 Kernel arguments. 

203  

204 Returns 

205 ------- 

206 KernelNode 

207 A new KernelNode representing the kernel launch. 

208 """ 

209 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

210  

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

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

213  

214 This is used to synchronize multiple branches of execution. 

215  

216 Parameters 

217 ---------- 

218 *nodes : GraphNode 

219 Additional nodes to depend on. 

220  

221 Returns 

222 ------- 

223 EmptyNode 

224 A new EmptyNode that depends on all input nodes. 

225 """ 

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

227  

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

229 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

232  

233 Parameters 

234 ---------- 

235 size : int 

236 Number of bytes to allocate. 

237 device : int or Device, optional 

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

239 uses the current CUDA context's device. 

240 memory_type : GraphMemoryType or str, optional 

241 Type of memory to allocate. One of: 

242  

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

244 optimal for GPU kernels. 

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

246 both host and device. Useful for graphs containing host 

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

248 systems/drivers. 

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

250 automatically migrates between host and device. Useful for 

251 mixed host/device access patterns. 

252  

253 peer_access : list of int or Device, optional 

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

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

256 device has access. 

257  

258 Returns 

259 ------- 

260 AllocNode 

261 A new AllocNode representing the allocation. Access the allocated 

262 device pointer via the dptr property. 

263  

264 Notes 

265 ----- 

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

267 memory allocation nodes per CUDA documentation. 

268 """ 

269 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

270  

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

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

273  

274 Parameters 

275 ---------- 

276 dptr : int 

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

278  

279 Returns 

280 ------- 

281 FreeNode 

282 A new FreeNode representing the free operation. 

283 """ 

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

285  

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

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

288  

289 Parameters 

290 ---------- 

291 dst : int 

292 Destination device pointer. 

293 value : int or buffer-protocol object 

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

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

296 width : int 

297 Width of the row in elements. 

298 height : int, optional 

299 Number of rows (default 1). 

300 pitch : int, optional 

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

302  

303 Returns 

304 ------- 

305 MemsetNode 

306 A new MemsetNode representing the memset operation. 

307 """ 

308 cdef unsigned int val 

309 cdef unsigned int elem_size 

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

311 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

312  

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

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

315  

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

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

318 pointers are supported. 

319  

320 Parameters 

321 ---------- 

322 dst : int 

323 Destination pointer (device or pinned host). 

324 src : int 

325 Source pointer (device or pinned host). 

326 size : int 

327 Number of bytes to copy. 

328  

329 Returns 

330 ------- 

331 MemcpyNode 

332 A new MemcpyNode representing the copy operation. 

333 """ 

334 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

335  

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

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

338  

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

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

341 nodes. 

342  

343 Parameters 

344 ---------- 

345 child : GraphDefinition 

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

347  

348 Returns 

349 ------- 

350 ChildGraphNode 

351 A new ChildGraphNode representing the embedded sub-graph. 

352 """ 

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

354  

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

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

357  

358 Parameters 

359 ---------- 

360 event : Event 

361 The event to record. 

362  

363 Returns 

364 ------- 

365 EventRecordNode 

366 A new EventRecordNode representing the event record operation. 

367 """ 

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

369  

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

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

372  

373 Parameters 

374 ---------- 

375 event : Event 

376 The event to wait for. 

377  

378 Returns 

379 ------- 

380 EventWaitNode 

381 A new EventWaitNode representing the event wait operation. 

382 """ 

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

384  

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

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

387  

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

389 Two modes are supported: 

390  

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

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

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

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

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

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

397 for the lifetime of the graph. 

398  

399 .. warning:: 

400  

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

402 deadlock or corrupt driver state. 

403  

404 Parameters 

405 ---------- 

406 fn : callable or ctypes function pointer 

407 The callback function. 

408 user_data : int or bytes-like, optional 

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

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

411 copied and its lifetime is tied to the graph. 

412  

413 Returns 

414 ------- 

415 HostCallbackNode 

416 A new HostCallbackNode representing the callback. 

417 """ 

418 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

419  

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

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

422  

423 The body graph executes only when the condition evaluates to 

424 a non-zero value at runtime. 

425  

426 Parameters 

427 ---------- 

428 condition : GraphCondition 

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

430  

431 Returns 

432 ------- 

433 IfNode 

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

435 """ 

436 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}ecffhjh

437 self, condition, 

438 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}ecffhjh

439  

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

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

442  

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

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

445  

446 Parameters 

447 ---------- 

448 condition : GraphCondition 

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

450  

451 Returns 

452 ------- 

453 IfElseNode 

454 A new IfElseNode with branches accessible via 

455 ``.then`` and ``.else_``. 

456 """ 

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

458 self, condition, 

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

460  

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

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

463  

464 The body graph executes repeatedly while the condition 

465 evaluates to a non-zero value. 

466  

467 Parameters 

468 ---------- 

469 condition : GraphCondition 

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

471  

472 Returns 

473 ------- 

474 WhileNode 

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

476 """ 

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

478 self, condition, 

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

480  

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

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

483  

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

485 value is out of range, no branch executes. 

486  

487 Parameters 

488 ---------- 

489 condition : GraphCondition 

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

491 count : int 

492 Number of switch cases (branches). 

493  

494 Returns 

495 ------- 

496 SwitchNode 

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

498 """ 

499 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~edfghkh

500 self, condition, 

501 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~edfghkh

502  

503  

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

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

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

507  

508  

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

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

511 del p 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKhLh@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

512  

513  

514cdef inline ConditionalNode _make_conditional_node( 

515 GraphNode pred, 

516 GraphCondition condition, 

517 cydriver.CUgraphConditionalNodeType cond_type, 

518 unsigned int size, 

519 type node_cls): 

520 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~eafbfcfdfefehfhghhhihjhkhlh

521 raise TypeError( 

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

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

524 cdef cydriver.CUgraphNodeParams params 

525 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~eafbfcfdfefehfhghhhihjhkhlh

526  

527 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~eafbfcfdfefehfhghhhihjhkhlh

528 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~eafbfcfdfefehfhghhhihjhkhlh

529 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~eafbfcfdfefehfhghhhihjhkhlh

530 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~eafbfcfdfefehfhghhhihjhkhlh

531 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~eafbfcfdfefehfhghhhihjhkhlh

532  

533 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~eafbfcfdfefehfhghhhihjhkhlh

534 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~eafbfcfdfefehfhghhhihjhkhlh

535 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~eafbfcfdfefehfhghhhihjhkhlh

536 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~eafbfcfdfefehfhghhhihjhkhlh

537 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~eafbfcfdfefehfhghhhihjhkhlh

538  

539 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~eafbfcfdfefehfhghhhihjhkhlh

540 deps = &pred_node 

541 num_deps = 1 

542  

543 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~eafbfcfdfefehfhghhhihjhkhlh

544 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~eafbfcfdfefehfhghhhihjhkhlh

545 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~eafbfcfdfefehfhghhhihjhkhlh

546  

547 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~eafbfcfdfefehfhghhhihjhkhlh

548 IF CUDA_CORE_BUILD_MAJOR >= 13: 

549 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~eafbfcfdfefehfhghhhihjhkhlh

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

551 ELSE: 

552 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

554  

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

556 cdef unsigned int i 

557 cdef cydriver.CUgraph bg 

558 cdef GraphHandle h_branch 

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

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

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

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

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

564  

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

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

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

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

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

570  

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

572  

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

574 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=bRiQiMhDbwd

575  

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

577 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=bRiQiMhDbwd

578 n = GraphNode.__new__(GraphNode) 

579 (<GraphNode>n)._h_node = h_node 

580 return n 

581  

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

583 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=bRiQiMhDbwd

584 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=bRiQiMhDbwd

585 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=bRiQiMhDbwd

586 else: 

587 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

588  

589  

590cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

591 cdef cydriver.CUgraphNodeType node_type 

592 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

593 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

594  

595 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

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

597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

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

599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

600 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

601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

602 return FreeNode._create_from_driver(h_node) 

603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

604 return MemsetNode._create_from_driver(h_node) 2Db

605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

606 return MemcpyNode._create_from_driver(h_node) 

607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

608 return ChildGraphNode._create_from_driver(h_node) 2@b

609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

610 return EventRecordNode._create_from_driver(h_node) 

611 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

612 return EventWaitNode._create_from_driver(h_node) 

613 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

614 return HostCallbackNode._create_from_driver(h_node) 

615 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

616 return ConditionalNode._create_from_driver(h_node) 2$d

617 else: 

618 n = GraphNode.__new__(GraphNode) 

619 (<GraphNode>n)._h_node = h_node 

620 return n 

621  

622  

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

624 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

625 cdef cydriver.CUgraphNode new_node = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

626 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

627 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

628 cdef cydriver.CUgraphNode* deps = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

629 cdef size_t num_deps = 0 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

630  

631 if pred_node != NULL: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

632 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh

633 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh

634  

635 node_params.kern = as_cu(ker._h_kernel) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

636 node_params.func = <cydriver.CUfunction>NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

637 node_params.gridDimX = conf.grid[0] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

638 node_params.gridDimY = conf.grid[1] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

639 node_params.gridDimZ = conf.grid[2] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

640 node_params.blockDimX = conf.block[0] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

641 node_params.blockDimY = conf.block[1] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

642 node_params.blockDimZ = conf.block[2] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

643 node_params.sharedMemBytes = conf.shmem_size 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

644 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

645 node_params.extra = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

646 node_params.ctx = <cydriver.CUcontext>NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

647  

648 with nogil: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

649 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

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

651  

652 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

653 <cydriver.CUhostFn>_destroy_kernel_handle_copy) 

654  

655 cdef object kernel_args = ker_args.kernel_args 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

656 if kernel_args is not None: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

657 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh

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

659 <cydriver.CUhostFn>py_object_user_object_destroy) 

660  

661 return _registered(KernelNode._create_with_params( 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

662 create_graph_node_handle(new_node, h_graph), 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

663 conf.grid, conf.block, conf.shmem_size, 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi

664 ker._h_kernel)) 

665  

666  

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

668 cdef vector[cydriver.CUgraphNode] deps 

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

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

671 cdef GraphNode other 

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

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

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

675  

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

677 deps.push_back(pred_node) 2qdrdsdtdudvd+c

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

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

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

681  

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

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

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

685  

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

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

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

689  

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

691  

692  

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

694 object memory_type, object peer_access): 

695 cdef int device_id 

696 cdef cydriver.CUdevice dev 

697  

698 if device is None: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

699 with nogil: 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

700 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

701 device_id = <int>dev 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

702 else: 

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

704  

705 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

706 cdef cydriver.CUgraphNode new_node = NULL 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

707 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

708 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

709 cdef cydriver.CUgraphNode* deps = NULL 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

710 cdef size_t num_deps = 0 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

711  

712 if pred_node != NULL: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

713 deps = &pred_node 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

714 num_deps = 1 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh

715  

716 cdef vector[cydriver.CUmemAccessDesc] access_descs 

717 cdef int peer_id 

718 cdef list peer_ids = [] 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

719  

720 if peer_access is not None: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

721 for peer_dev in peer_access: 

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

723 peer_ids.append(peer_id) 

724 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

725 cydriver.CUmemLocation_st( 

726 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

727 peer_id 

728 ), 

729 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

730 )) 

731  

732 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

733  

734 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

735 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

736 alloc_params.bytesize = size 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

737  

738 if memory_type_str == "device": 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

739 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

740 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

741 alloc_params.poolProps.location.id = device_id 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

742 elif memory_type_str == "host": 2ejMfNfOfPfQfRf

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

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

745 alloc_params.poolProps.location.id = 0 

746 elif memory_type_str == "managed": 2ejMfNfOfPfQfRf

747 IF CUDA_CORE_BUILD_MAJOR >= 13: 

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

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

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

751 ELSE: 

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

753 else: 

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

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

756  

757 if access_descs.size() > 0: 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

758 alloc_params.accessDescs = access_descs.data() 

759 alloc_params.accessDescCount = access_descs.size() 

760  

761 with nogil: 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

762 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

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

764  

765 return _registered(AllocNode._create_with_params( 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

766 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

767 device_id, memory_type_str, tuple(peer_ids))) 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c

768  

769  

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

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

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

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

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

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

776  

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

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

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

780  

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

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

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

784  

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

786  

787  

788cdef inline MemsetNode GN_memset( 

789 GraphNode self, cydriver.CUdeviceptr c_dst, 

790 unsigned int val, unsigned int elem_size, 

791 size_t width, size_t height, size_t pitch): 

792 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

793 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

794 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

795 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

796 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

797 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

798  

799 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

800 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

801 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

802  

803 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

804 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

805 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

806  

807 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

808 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

809 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

810 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

811 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

812 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

813 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

814  

815 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

816 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

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

818 &memset_params, ctx)) 

819  

820 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

821 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

822 val, elem_size, width, height, pitch)) 

823  

824  

825cdef inline MemcpyNode GN_memcpy( 

826 GraphNode self, cydriver.CUdeviceptr c_dst, 

827 cydriver.CUdeviceptr c_src, size_t size): 

828 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

829 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

830 cdef cydriver.CUresult ret 

831 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

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 &dst_mem_type, 

834 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

835 c_dst) 

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

839 &src_mem_type, 

840 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

841 c_src) 

842 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

843 HANDLE_RETURN(ret) 

844  

845 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

846 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

847  

848 cdef cydriver.CUDA_MEMCPY3D params 

849 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

850  

851 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

852 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

853 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

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

855 else: 

856 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

857 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

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

859 else: 

860 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

861 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

862 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

863 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

864  

865 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

866 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

867 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

868 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

869 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

870  

871 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

872 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

873 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

874  

875 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

876 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

877 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

878 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

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

880  

881 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

882 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

883 c_dst_type, c_src_type)) 

884  

885  

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

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

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

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

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

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

892  

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

894 deps = &pred_node 

895 num_deps = 1 

896  

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

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

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

900  

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

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

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

904 new_node, &embedded_graph)) 

905  

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

907  

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

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

910  

911  

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

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

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

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

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

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

918  

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

920 deps = &pred_node 2HeJeLeNePeRepecd

921 num_deps = 1 2HeJeLeNePeRepecd

922  

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

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

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

926  

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

928 <cydriver.CUhostFn>_destroy_event_handle_copy) 

929  

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

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

932  

933  

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

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

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

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

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

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

940  

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

942 deps = &pred_node 2KiIeKeMeOeQeSeLiMiqe

943 num_deps = 1 2KiIeKeMeOeQeSeLiMiqe

944  

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

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

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

948  

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

950 <cydriver.CUhostFn>_destroy_event_handle_copy) 

951  

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

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

954  

955  

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

957 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

958  

959 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

960 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

961 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

962 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

963 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

964 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

965  

966 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

967 deps = &pred_node 

968 num_deps = 1 

969  

970 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

971 as_cu(h_graph), fn, user_data, 

972 &node_params.fn, &node_params.userData) 

973  

974 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

975 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

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

977  

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

979 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

980 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk

981 node_params.fn, node_params.userData))