Coverage for cuda / core / graph / _graph_node.pyx: 90.39%
385 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +0000
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5"""GraphNode base class — factory, properties, and builder methods."""
7from __future__ import annotations
9from cpython.ref cimport Py_INCREF
11from libc.stddef cimport size_t
12from libc.stdint cimport uintptr_t
13from libc.string cimport memset as c_memset
15from libcpp.vector cimport vector
17from cuda.bindings cimport cydriver
19from cuda.core._event cimport Event
20from cuda.core._kernel_arg_handler cimport ParamHolder
21from cuda.core._launch_config cimport LaunchConfig
22from cuda.core._module cimport Kernel
23from cuda.core.graph._graph_definition cimport GraphCondition, GraphDefinition
24from cuda.core.graph._subclasses cimport (
25 AllocNode,
26 ChildGraphNode,
27 ConditionalNode,
28 EmptyNode,
29 EventRecordNode,
30 EventWaitNode,
31 FreeNode,
32 HostCallbackNode,
33 IfElseNode,
34 IfNode,
35 KernelNode,
36 MemcpyNode,
37 MemsetNode,
38 SwitchNode,
39 WhileNode,
40)
41from cuda.core._resource_handles cimport (
42 EventHandle,
43 GraphHandle,
44 KernelHandle,
45 GraphNodeHandle,
46 as_cu,
47 as_intptr,
48 as_py,
49 create_graph_handle_ref,
50 create_graph_node_handle,
51 graph_node_get_graph,
52 invalidate_graph_node,
53)
54from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
56from cuda.core.graph._utils cimport (
57 _attach_host_callback_to_graph,
58 _attach_user_object,
59 _py_host_destructor,
60)
62import weakref
64from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy
65from cuda.core._utils.cuda_utils import driver
66from cuda.core.typing import GraphMemoryType
68__all__ = ['GraphNode']
70# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object)
71_node_registry = weakref.WeakValueDictionary()
74cdef inline GraphNode _registered(GraphNode n):
75 _node_registry[<uintptr_t>n._h_node.get()] = n 2OiPivepdcidieiqhqdficerhgi/eKjJiffgfhfifweKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfykxedeGeHejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfyeee9iIe!iJe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdqifevhriwhsdsigexhtiyhOfzeheKeLelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfAe,iie-iMe.iNe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfBe^ije_iOe`iPe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfCekeQeReofXjYj@g[gfcab'c(c)c*c]g^gChtduileDhviEhudwimeFhxidjGhvdyineHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1joe2jLiMipe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jRiQiLhDb6jwd7jnhGf=c,cZi0ikdSi:e;eHfJ -b=e?eMh%dFd8j9jSeljSfTfNh5 lcUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 oc2f3fSh)dId'j(jYeoj4f5fTh9 pc6f7fUh*dJd)j*jZepj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vc/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xc^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcbgcgFf!h?dSd`j{j9exjdgeg#h, AcfgggrbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j!eyjhgig%h- Bcjgkg+b,b5b1 2 3 4 'h[dXd~jak#ezjlgmg(h. Ccngog)h]dYdbkck$eAjpgqg*h/ Dcrgsg+h^dZddkek%eBjtgug,h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk'eCjxgyg.h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik(eDjBgCg:h= GcDgEgQcRcScTc@e[e]e^e_e;h{d2djkkk)eEjFgGg=h? HcHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk*eFjJgKg@h@ IcLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok+eGjNgOg]h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcTgUg`eDiDesezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf`hae!dsktk-eIjVgWg{h^ LcXgYg|hbe#dukvk.eJjZg0g}h_ Mc1g2gIf|c.c3i4indTi{e|eJfO :b}e~eKf}c/c5i6iodUiafbfLfP ;bcfdfFiEeteBkCkqfwkehfhGikb:cghhhHiFeueDkEkrfxkihjhIilb;ckhlh
76 return n 2OiPivepdcidieiqhqdficerhgi/eKjJiffgfhfifweKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfykxedeGeHejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfyeee9iIe!iJe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdqifevhriwhsdsigexhtiyhOfzeheKeLelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfAe,iie-iMe.iNe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfBe^ije_iOe`iPe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfCekeQeReofXjYj@g[gfcab'c(c)c*c]g^gChtduileDhviEhudwimeFhxidjGhvdyineHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1joe2jLiMipe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jRiQiLhDb6jwd7jnhGf=c,cZi0ikdSi:e;eHfJ -b=e?eMh%dFd8j9jSeljSfTfNh5 lcUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 oc2f3fSh)dId'j(jYeoj4f5fTh9 pc6f7fUh*dJd)j*jZepj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vc/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xc^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcbgcgFf!h?dSd`j{j9exjdgeg#h, AcfgggrbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j!eyjhgig%h- Bcjgkg+b,b5b1 2 3 4 'h[dXd~jak#ezjlgmg(h. Ccngog)h]dYdbkck$eAjpgqg*h/ Dcrgsg+h^dZddkek%eBjtgug,h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk'eCjxgyg.h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik(eDjBgCg:h= GcDgEgQcRcScTc@e[e]e^e_e;h{d2djkkk)eEjFgGg=h? HcHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk*eFjJgKg@h@ IcLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok+eGjNgOg]h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcTgUg`eDiDesezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf`hae!dsktk-eIjVgWg{h^ LcXgYg|hbe#dukvk.eJjZg0g}h_ Mc1g2gIf|c.c3i4indTi{e|eJfO :b}e~eKf}c/c5i6iodUiafbfLfP ;bcfdfFiEeteBkCkqfwkehfhGikb:cghhhHiFeueDkEkrfxkihjhIilb;ckhlh
79cdef class GraphNode:
80 """A node in a graph definition.
82 Nodes are created by calling builder methods on GraphDefinition (for
83 entry-point nodes with no dependencies) or on other Nodes (for
84 nodes that depend on a predecessor).
85 """
87 @staticmethod
88 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
89 """Factory: dispatch to the right subclass based on node type."""
90 return GN_create(h_graph, node) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd
92 def __repr__(self) -> str:
93 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2nl
94 if node == NULL: 2nl
95 return "<GraphNode entry>" 2nl
96 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
98 def __eq__(self, other) -> bool:
99 if not isinstance(other, GraphNode): 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j!eyjhgig%h- Bcsljgkg+b,b5b1 2 3 4 'h[dXd~jak#ezjlgmg(h. Cctlngog)h]dYdbkck$eAjpgqg*h/ Dculrgsg+h^dZddkek%eBjtgug,h: Ecvlvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk'eCjxgyg.h; FcwlzgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik(eDjBgCg:h= GcxlDgEgQcRcScTc@e[e]e^e_e;h{d2djkkk)eEjFgGg=h? HcylHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk*eFjJgKg@h@ IczlLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok+eGjNgOg]h[ JcAlPgQg3gidadfjgj7d1isftf4gU }bufvf^h~d8dpkqk,eHjRgSg_h] KcBlTgUg`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
100 return NotImplemented 2Gf=c,cZi0ikdSi:e;eHfJ -b+k=e?e$h@dWd|j}j!eyjhgig%h- Bcsljgkg'h[dXd~jak#ezjlgmg(h. Cctlngog)h]dYdbkck$eAjpgqg*h/ Dculrgsg+h^dZddkek%eBjtgug,h: Ecvlvgwg-h_d0dfkgk'eCjxgyg.h; FcwlzgAg/h`d1dhkik(eDjBgCg:h= GcxlDgEg;h{d2djkkk)eEjFgGg=h? HcylHgIg?h|d5dlkmk*eFjJgKg@h@ IczlLgMg[h}d6dnkok+eGjNgOg]h[ JcAlPgQg^h~d8dpkqk,eHjRgSg_h] KcBlTgUg
101 cdef GraphNode o = <GraphNode>other 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc@e[e]e^e_ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
102 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc@e[e]e^e_ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
103 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc@e[e]e^e_ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
104 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc@e[e]e^e_ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
105 and as_intptr(self_graph) == as_intptr(other_graph)) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi:e;eHfJ -b+k=e?erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc@e[e]e^e_ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf`e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
107 def __hash__(self) -> int:
108 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2pd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiLhDbwdMh%dFd8j9jSeljSfTfNh5 lcElUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 ocGl2f3fSh)dId'j(jYeoj4f5fTh9 pcHl6f7fUh*dJd)j*jZepj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vcLl/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xcNl^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j9exjdgeg#h, AcPlfggg`hae!dsktk-eIjVgWg{h^ LcQlXgYg|hbe#dukvk.eJjZg0g}h_ McRl1g2gIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
109 return hash((as_intptr(self._h_node), as_intptr(g))) 2pd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiLhDbwdMh%dFd8j9jSeljSfTfNh5 lcElUfVfEbTeUeVeqe6b7bhc6 mc8b9bOh'dGd!j#jWemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jXenj0f1fRh8 ocGl2f3fSh)dId'j(jYeoj4f5fTh9 pcHl6f7fUh*dJd)j*jZepj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j0eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j1erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j2esj-f.f1h' vcLl/f:f.d3e4eKbre!b#bq 0 $b%b2h/dOd;j=j5etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j6euj[f]f5h) xcNl^f_f6h;dQd[j]j7evj`f{f7h* yc|f}f8h=dRd^j_j8ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j9exjdgeg#h, AcPlfggg`hae!dsktk-eIjVgWg{h^ LcQlXgYg|hbe#dukvk.eJjZg0g}h_ McRl1g2gIf|c.c3i4indTi{e|eJfO :b,k}e~eKf}c/c5i6iodUiafbfLfP ;b-kcfdf
111 @property
112 def type(self):
113 """Return the CUDA graph node type.
115 Returns
116 -------
117 CUgraphNodeType or None
118 The node type enum value, or None for the entry node.
119 """
120 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
121 if node == NULL: 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
122 return None 2/kwd
123 cdef cydriver.CUgraphNodeType node_type
124 with nogil: 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
125 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
126 return driver.CUgraphNodeType(<int>node_type) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
128 @property
129 def graph(self) -> "GraphDefinition":
130 """Return the GraphDefinition this node belongs to."""
131 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2AoBoCoDoEoFo
133 @property
134 def handle(self) -> driver.CUgraphNode:
135 """Return the underlying driver CUgraphNode handle.
137 Returns None for the entry node.
138 """
139 return as_py(self._h_node) 2wdGf=c,cZi0ikdSi:e;eHfJ -b+k=e?e
141 @property
142 def is_valid(self):
143 """Whether this node is valid (not destroyed).
145 Returns ``False`` after :meth:`destroy` has been called.
146 """
147 return as_intptr(self._h_node) != 0 2wd
149 def destroy(self):
150 """Destroy this node and remove all its edges from the parent graph.
152 After this call, :attr:`is_valid` returns ``False`` and the node
153 cannot be re-added to any graph. Safe to call on an
154 already-destroyed node (no-op).
155 """
156 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2dj3bYbMbwd
157 if node == NULL: 2dj3bYbMbwd
158 return 2wd
159 with nogil: 2dj3bYbMbwd
160 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2dj3bYbMbwd
161 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2dj3bYbMbwd
162 invalidate_graph_node(self._h_node) 2dj3bYbMbwd
164 @property
165 def pred(self):
166 """A mutable set-like view of this node's predecessors."""
167 return AdjacencySetProxy(self, False) 2ve/e/kJiNcOcPcoh[i]iGo^i_i`i{iHoIoJoKo|i}i~iajbjcjLoMoSkTkolUkVkpl+ccdQiLhDbwd
169 @pred.setter
170 def pred(self, value):
171 p = AdjacencySetProxy(self, False) 2MbLh
172 p.clear() 2MbLh
173 p.update(value) 2MbLh
175 @property
176 def succ(self):
177 """A mutable set-like view of this node's successors."""
178 return AdjacencySetProxy(self, True) 2/kJi[i]i^i_i`i{i|i}i~iajbjcjWkXkqlYkZkrlYb=b5jRiQiLhDb6jwd7j
180 @succ.setter
181 def succ(self, value):
182 s = AdjacencySetProxy(self, True) 2JiLh
183 s.clear() 2JiLh
184 s.update(value) 2JiLh
186 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
187 """Add a kernel launch node depending on this node.
189 Parameters
190 ----------
191 config : LaunchConfig
192 Launch configuration (grid, block, shared memory, etc.)
193 kernel : Kernel
194 The kernel to launch.
195 *args
196 Kernel arguments.
198 Returns
199 -------
200 KernelNode
201 A new KernelNode representing the kernel launch.
202 """
203 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
205 def join(self, *nodes: GraphNode) -> EmptyNode:
206 """Create an empty node that depends on this node and all given nodes.
208 This is used to synchronize multiple branches of execution.
210 Parameters
211 ----------
212 *nodes : GraphNode
213 Additional nodes to depend on.
215 Returns
216 -------
217 EmptyNode
218 A new EmptyNode that depends on all input nodes.
219 """
220 return GN_join(self, nodes) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
222 def allocate(self, size_t size, *, device: "Device" | int | None = None,
223 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
224 peer_access: list["Device" | int] | None = None) -> AllocNode:
225 """Add a memory allocation node depending on this node.
227 Parameters
228 ----------
229 size : int
230 Number of bytes to allocate.
231 device : int or Device, optional
232 The device on which to allocate memory. If None (default),
233 uses the current CUDA context's device.
234 memory_type : GraphMemoryType or str, optional
235 Type of memory to allocate. One of:
237 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory,
238 optimal for GPU kernels.
239 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from
240 both host and device. Useful for graphs containing host
241 callback nodes. Note: may not be supported on all
242 systems/drivers.
243 - ``GraphMemoryType.MANAGED``: Managed/unified memory that
244 automatically migrates between host and device. Useful for
245 mixed host/device access patterns.
247 peer_access : list of int or Device, optional
248 List of devices that should have read-write access to the
249 allocated memory. If None (default), only the allocating
250 device has access.
252 Returns
253 -------
254 AllocNode
255 A new AllocNode representing the allocation. Access the allocated
256 device pointer via the dptr property.
258 Notes
259 -----
260 IPC (inter-process communication) is not supported for graph
261 memory allocation nodes per CUDA documentation.
262 """
263 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
265 def deallocate(self, dptr: int) -> FreeNode:
266 """Add a memory free node depending on this node.
268 Parameters
269 ----------
270 dptr : int
271 Device pointer to free (typically from AllocNode.dptr).
273 Returns
274 -------
275 FreeNode
276 A new FreeNode representing the free operation.
277 """
278 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
280 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode:
281 """Add a memset node depending on this node.
283 Parameters
284 ----------
285 dst : int
286 Destination device pointer.
287 value : int or buffer-protocol object
288 Fill value. int for 1-byte fill (range [0, 256)),
289 or buffer-protocol object of 1, 2, or 4 bytes.
290 width : int
291 Width of the row in elements.
292 height : int, optional
293 Number of rows (default 1).
294 pitch : int, optional
295 Pitch of destination in bytes (default 0, unused if height is 1).
297 Returns
298 -------
299 MemsetNode
300 A new MemsetNode representing the memset operation.
301 """
302 cdef unsigned int val
303 cdef unsigned int elem_size
304 val, elem_size = _parse_fill_value(value) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c~hDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
305 return GN_memset(self, <cydriver.CUdeviceptr>dst, val, elem_size, width, height, pitch) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
307 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode:
308 """Add a memcpy node depending on this node.
310 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
311 auto-detected via the driver, so both device and pinned host
312 pointers are supported.
314 Parameters
315 ----------
316 dst : int
317 Destination pointer (device or pinned host).
318 src : int
319 Source pointer (device or pinned host).
320 size : int
321 Number of bytes to copy.
323 Returns
324 -------
325 MemcpyNode
326 A new MemcpyNode representing the copy operation.
327 """
328 return GN_memcpy(self, <cydriver.CUdeviceptr>dst, <cydriver.CUdeviceptr>src, size) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
330 def embed(self, child: GraphDefinition) -> ChildGraphNode:
331 """Add a child graph node depending on this node.
333 Embeds a clone of the given graph definition as a sub-graph node.
334 The child graph must not contain allocation, free, or conditional
335 nodes.
337 Parameters
338 ----------
339 child : GraphDefinition
340 The graph definition to embed (will be cloned).
342 Returns
343 -------
344 ChildGraphNode
345 A new ChildGraphNode representing the embedded sub-graph.
346 """
347 return GN_embed(self, <GraphDefinition>child) 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
349 def record(self, event: Event) -> EventRecordNode:
350 """Add an event record node depending on this node.
352 Parameters
353 ----------
354 event : Event
355 The event to record.
357 Returns
358 -------
359 EventRecordNode
360 A new EventRecordNode representing the event record operation.
361 """
362 return GN_record_event(self, <Event>event) 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
364 def wait(self, event: Event) -> EventWaitNode:
365 """Add an event wait node depending on this node.
367 Parameters
368 ----------
369 event : Event
370 The event to wait for.
372 Returns
373 -------
374 EventWaitNode
375 A new EventWaitNode representing the event wait operation.
376 """
377 return GN_wait_event(self, <Event>event) 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
379 def callback(self, fn, *, user_data=None) -> HostCallbackNode:
380 """Add a host callback node depending on this node.
382 The callback runs on the host CPU when the graph reaches this node.
383 Two modes are supported:
385 - **Python callable**: Pass any callable. The GIL is acquired
386 automatically. The callable must take no arguments; use closures
387 or ``functools.partial`` to bind state.
388 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance.
389 The function receives a single ``void*`` argument (the
390 ``user_data``). The caller must keep the ctypes wrapper alive
391 for the lifetime of the graph.
393 .. warning::
395 Callbacks must not call CUDA API functions. Doing so may
396 deadlock or corrupt driver state.
398 Parameters
399 ----------
400 fn : callable or ctypes function pointer
401 The callback function.
402 user_data : int or bytes-like, optional
403 Only for ctypes function pointers. If ``int``, passed as a raw
404 pointer (caller manages lifetime). If bytes-like, the data is
405 copied and its lifetime is tied to the graph.
407 Returns
408 -------
409 HostCallbackNode
410 A new HostCallbackNode representing the callback.
411 """
412 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
414 def if_then(self, condition: GraphCondition) -> IfNode:
415 """Add an if-conditional node depending on this node.
417 The body graph executes only when the condition evaluates to
418 a non-zero value at runtime.
420 Parameters
421 ----------
422 condition : GraphCondition
423 GraphCondition from :meth:`GraphDefinition.create_condition`.
425 Returns
426 -------
427 IfNode
428 A new IfNode with one branch accessible via ``.then``.
429 """
430 return _make_conditional_node( 2pd8g$g)g-g;g[gjj_gsb;eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc]e^e_eGgVbKgd E OgtfSgbhxfWg0g|ebffhjh
431 self, condition,
432 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2pd8g$g)g-g;g[gjj_gsb;eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc]e^e_eGgVbKgd E OgtfSgbhxfWg0g|ebffhjh
434 def if_else(self, condition: GraphCondition) -> IfElseNode:
435 """Add an if-else conditional node depending on this node.
437 Two body graphs: the first executes when the condition is
438 non-zero, the second when it is zero.
440 Parameters
441 ----------
442 condition : GraphCondition
443 GraphCondition from :meth:`GraphDefinition.create_condition`.
445 Returns
446 -------
447 IfElseNode
448 A new IfElseNode with branches accessible via
449 ``.then`` and ``.else_``.
450 """
451 return _make_conditional_node( 27g#g(g,g:g@g`gtb:eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc@e[e]eFgUbJgc D NgsfRgahwfVgZg{eafehih
452 self, condition,
453 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 27g#g(g,g:g@g`gtb:eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc@e[e]eFgUbJgc D NgsfRgahwfVgZg{eafehih
455 def while_loop(self, condition: GraphCondition) -> WhileNode:
456 """Add a while-loop conditional node depending on this node.
458 The body graph executes repeatedly while the condition
459 evaluates to a non-zero value.
461 Parameters
462 ----------
463 condition : GraphCondition
464 GraphCondition from :meth:`GraphDefinition.create_condition`.
466 Returns
467 -------
468 WhileNode
469 A new WhileNode with body accessible via ``.body``.
470 """
471 return _make_conditional_node( 2!g'g+g/g?g^g|gvb$d?eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc[e_eIgXbMgf G QgvfUg`edhzfYg2g~edfhhlh
472 self, condition,
473 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2!g'g+g/g?g^g|gvb$d?eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc[e_eIgXbMgf G QgvfUg`edhzfYg2g~edfhhlh
475 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
476 """Add a switch conditional node depending on this node.
478 The condition value selects which branch to execute. If the
479 value is out of range, no branch executes.
481 Parameters
482 ----------
483 condition : GraphCondition
484 GraphCondition from :meth:`GraphDefinition.create_condition`.
485 count : int
486 Number of switch cases (branches).
488 Returns
489 -------
490 SwitchNode
491 A new SwitchNode with branches accessible via ``.branches``.
492 """
493 return _make_conditional_node( 29g%g*g.g=g]gkj{gub=eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc@e^eHgWbLge F PgufTg`echyfXg1g}ecfghkh
494 self, condition,
495 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 29g%g*g.g=g]gkj{gub=eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc@e^eHgWbLge F PgufTg`echyfXg1g}ecfghkh
498cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil:
499 cdef EventHandle* p = <EventHandle*>ptr 2SlTlUlVlWlXlYlZl0l1l2l3l4l1joe2jpe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
500 del p 2SlTlUlVlWlXlYlZl0l1l2l3l4l1joe2jpe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
503cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil:
504 cdef KernelHandle* p = <KernelHandle*>ptr 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
505 del p 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
508cdef inline ConditionalNode _make_conditional_node(
509 GraphNode pred,
510 GraphCondition condition,
511 cydriver.CUgraphConditionalNodeType cond_type,
512 unsigned int size,
513 type node_cls):
514 if not isinstance(condition, GraphCondition): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
515 raise TypeError(
516 f"condition must be a GraphCondition object (from "
517 f"GraphDefinition.create_condition()), got {type(condition).__name__}")
518 cdef cydriver.CUgraphNodeParams params
519 cdef cydriver.CUgraphNode new_node = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
521 c_memset(¶ms, 0, sizeof(params)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
522 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
523 params.conditional.handle = condition._c_handle 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
524 params.conditional.type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
525 params.conditional.size = size 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
527 cdef cydriver.CUcontext ctx = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
528 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
529 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
530 cdef cydriver.CUgraphNode* deps = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
531 cdef size_t num_deps = 0 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
533 if pred_node != NULL: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
534 deps = &pred_node
535 num_deps = 1
537 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
538 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
539 params.conditional.ctx = ctx 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
541 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
542 IF CUDA_CORE_BUILD_MAJOR >= 13:
543 HANDLE_RETURN(cydriver.cuGraphAddNode( 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
544 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
545 ELSE:
546 HANDLE_RETURN(cydriver.cuGraphAddNode(
547 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
549 cdef list branch_list = [] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
550 cdef unsigned int i
551 cdef cydriver.CUgraph bg
552 cdef GraphHandle h_branch
553 for i in range(size): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
554 bg = params.conditional.phGraph_out[i] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
555 h_branch = create_graph_handle_ref(bg, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
556 branch_list.append(GraphDefinition._from_handle(h_branch)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
557 cdef tuple branches = tuple(branch_list) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
559 cdef ConditionalNode n = node_cls.__new__(node_cls) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
560 n._h_node = create_graph_node_handle(new_node, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
561 n._condition = condition 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
562 n._cond_type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
563 n._branches = branches 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
565 return _registered(n) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d:e;e=e?eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc@e[e]e^e_eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg`eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g{e|e}e~eafbfcfdfehfhghhhihjhkhlh
567cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
568 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd
570 # Sentinel: virtual node to represent the graph entry point.
571 if node == NULL: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd
572 n = GraphNode.__new__(GraphNode)
573 (<GraphNode>n)._h_node = h_node
574 return n
576 # Return a registered object or create and register a new one.
577 registered = _node_registry.get(<uintptr_t>h_node.get()) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd
578 if registered is not None: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiLhDbwd
579 return <GraphNode>registered 2pd2k3k4k5kJiNcOcPc7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+ccd[b3bYbMb=bRiQiLhDbwd
580 else:
581 return _registered(GN_create_impl(h_node)) 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
584cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
585 cdef cydriver.CUgraphNodeType node_type
586 with nogil: 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
587 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
589 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
590 return EmptyNode._create_impl(h_node) 2XiYi}i
591 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
592 return KernelNode._create_from_driver(h_node) 2yksbtbubvbgc@bDb
593 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
594 return AllocNode._create_from_driver(h_node) 27i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i~iajbjcj
595 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
596 return FreeNode._create_from_driver(h_node)
597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
598 return MemsetNode._create_from_driver(h_node) 2Db
599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
600 return MemcpyNode._create_from_driver(h_node)
601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
602 return ChildGraphNode._create_from_driver(h_node) 2@b
603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
604 return EventRecordNode._create_from_driver(h_node)
605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
606 return EventWaitNode._create_from_driver(h_node)
607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
608 return HostCallbackNode._create_from_driver(h_node)
609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
610 return ConditionalNode._create_from_driver(h_node) 2$d
611 else:
612 n = GraphNode.__new__(GraphNode)
613 (<GraphNode>n)._h_node = h_node
614 return n
617cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args):
618 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params
619 cdef cydriver.CUgraphNode new_node = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
620 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
621 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
622 cdef cydriver.CUgraphNode* deps = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
623 cdef size_t num_deps = 0 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
625 if pred_node != NULL: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
626 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh
627 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh
629 node_params.kern = as_cu(ker._h_kernel) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
630 node_params.func = <cydriver.CUfunction>NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
631 node_params.gridDimX = conf.grid[0] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
632 node_params.gridDimY = conf.grid[1] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
633 node_params.gridDimZ = conf.grid[2] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
634 node_params.blockDimX = conf.block[0] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
635 node_params.blockDimY = conf.block[1] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
636 node_params.blockDimZ = conf.block[2] 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
637 node_params.sharedMemBytes = conf.shmem_size 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
638 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
639 node_params.extra = NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
640 node_params.ctx = <cydriver.CUcontext>NULL 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
642 with nogil: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
643 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
644 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
646 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
647 <cydriver.CUhostFn>_destroy_kernel_handle_copy)
649 cdef object kernel_args = ker_args.kernel_args 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
650 if kernel_args is not None: 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
651 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh
652 _attach_user_object(as_cu(h_graph), <void*>kernel_args, 2mhJh[b3bYbMb=bDbnh
653 <cydriver.CUhostFn>_py_host_destructor)
655 return _registered(KernelNode._create_with_params( 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
656 create_graph_node_handle(new_node, h_graph), 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
657 conf.grid, conf.block, conf.shmem_size, 2wehiiijikiliohpixeacyebczeccAedcBeecCefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d3e4eKbre!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hDeEijd6gae{hbe}h|cJf}cLfEeGiFeIi
658 ker._h_kernel))
661cdef inline EmptyNode GN_join(GraphNode self, tuple nodes):
662 cdef vector[cydriver.CUgraphNode] deps
663 cdef cydriver.CUgraphNode new_node = NULL 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
664 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
665 cdef GraphNode other
666 cdef cydriver.CUgraphNode* deps_ptr = NULL 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
667 cdef size_t num_deps = 0 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
668 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
670 if pred_node != NULL: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
671 deps.push_back(pred_node) 2qdrdsdtdudvd+c
672 for other in nodes: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
673 if as_cu((<GraphNode>other)._h_node) != NULL: 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
674 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
676 num_deps = deps.size() 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
677 if num_deps > 0: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
678 deps_ptr = deps.data() 2qdceg h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmevdne+c[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
680 with nogil: 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
681 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
682 &new_node, as_cu(h_graph), deps_ptr, num_deps))
684 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2qdceJig h i j NcOcPcde` ee{ rdfesdgehe| ie} je~ keabtdleudmedjvdneWi+c[b3bYbMb=b5jRiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] sejbbdV !d^ #d_ .cO /cP tekbuelb
687cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device,
688 object memory_type, object peer_access):
689 cdef int device_id
690 cdef cydriver.CUdevice dev
692 if device is None: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
693 with nogil: 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
694 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
695 device_id = <int>dev 2veejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
696 else:
697 device_id = getattr(device, 'device_id', device) 2OiPi
699 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
700 cdef cydriver.CUgraphNode new_node = NULL 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
701 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
702 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
703 cdef cydriver.CUgraphNode* deps = NULL 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
704 cdef size_t num_deps = 0 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
706 if pred_node != NULL: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
707 deps = &pred_node 2veqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
708 num_deps = 1 2veqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
710 cdef vector[cydriver.CUmemAccessDesc] access_descs
711 cdef int peer_id
712 cdef list peer_ids = [] 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
714 if peer_access is not None: 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
715 for peer_dev in peer_access:
716 peer_id = getattr(peer_dev, 'device_id', peer_dev)
717 peer_ids.append(peer_id)
718 access_descs.push_back(cydriver.CUmemAccessDesc_st(
719 cydriver.CUmemLocation_st(
720 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE,
721 peer_id
722 ),
723 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
724 ))
726 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
728 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
729 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
730 alloc_params.bytesize = size 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
732 if memory_type_str == "device": 2OiPiveejVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
733 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
734 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
735 alloc_params.poolProps.location.id = device_id 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
736 elif memory_type_str == "host": 2ejMfNfOfPfQfRf
737 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
738 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
739 alloc_params.poolProps.location.id = 0
740 elif memory_type_str == "managed": 2ejMfNfOfPfQfRf
741 IF CUDA_CORE_BUILD_MAJOR >= 13:
742 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2MfNfOfPfQfRf
743 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2MfNfOfPfQfRf
744 alloc_params.poolProps.location.id = device_id 2MfNfOfPfQfRf
745 ELSE:
746 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
747 else:
748 raise ValueError(f"Invalid memory_type: {memory_type_str!r}. " 2ej
749 "Must be 'device', 'host', or 'managed'.")
751 if access_descs.size() > 0: 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
752 alloc_params.accessDescs = access_descs.data()
753 alloc_params.accessDescCount = access_descs.size()
755 with nogil: 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
756 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiveVicidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
757 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
759 return _registered(AllocNode._create_with_params( 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
760 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
761 device_id, memory_type_str, tuple(peer_ids))) 2OiPivecidieiqhqdficerhgi/effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfdeGeHejfac` UcVcWcXcthNfeeIeJekfbc{ YcZc0c1cuhrdqifevhriwhsdsigexhtiyhOfheKeLelfcc| 2c3c4c5czhPfieMeNemfdc} 6c7c8c9cAhQfjeOePenfec~ !c#c$c%cBhRfkeQeReoffcab'c(c)c*cChtduileDhviEhudwimeFhxiGhvdyineHhzi+c~hAioepeGf,ckdJ -bMhFdSe5 lcEbTeUeVeqe6b7bhc6 mc8b9bOhGdWe7 ncQhHdXe8 ocShIdYe9 pcUhJdZe! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd0e$ rcR sctckcwbxbz NbybzbYhMd1e% uc0hNd2e' vcKbq 0 2hOd5e( wcb A B y k l m n u ObPbLbK L r M N 4hPd6e) xc6hQd7e* yc8hRd8e+ zc!hSd9e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd!e- Bc'hXd#e. Cc)hYd$e/ Dc+hZd%e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d'e; FcI {b|b/bfbgbv Hbhbib/h1d(e= Gc;h2d)e? HcCbo Q ?h5d*e@ Ica w x t c d e f s IbJbFbD E p F G [h6d+e[ Jc3gad7dU }b^h8d,e] KcDisepfjb-c5gbd9dV ~b`h!d-e^ Lc|h#d.e_ McIf.cndO :bKf/codP ;bFiteqfkb:cHiuerflb;c
764cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
765 cdef cydriver.CUgraphNode new_node = NULL 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
766 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
767 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
768 cdef cydriver.CUgraphNode* deps = NULL 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
769 cdef size_t num_deps = 0 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
771 if pred_node != NULL: 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
772 deps = &pred_node 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
773 num_deps = 1 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
775 with nogil: 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
776 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
777 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
779 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2ve/effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdSeVeWeXeYeZe_b0eR sctckcwbxbz Nbybzb1e2eKb5e6e7e8e9eVd!e#e$e%e)b'eI {b|b/bfbgbv Hbhbib(e)eCb*e+e7d,epf9d-e.endodqfrf
782cdef inline MemsetNode GN_memset(
783 GraphNode self, cydriver.CUdeviceptr c_dst,
784 unsigned int val, unsigned int elem_size,
785 size_t width, size_t height, size_t pitch):
786 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params
787 cdef cydriver.CUgraphNode new_node = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
788 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
789 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
790 cdef cydriver.CUgraphNode* deps = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
791 cdef size_t num_deps = 0 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
793 if pred_node != NULL: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
794 deps = &pred_node 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
795 num_deps = 1 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
797 cdef cydriver.CUcontext ctx = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
798 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
799 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
801 c_memset(&memset_params, 0, sizeof(memset_params)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
802 memset_params.dst = c_dst 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
803 memset_params.value = val 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
804 memset_params.elementSize = elem_size 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
805 memset_params.width = width 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
806 memset_params.height = height 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
807 memset_params.pitch = pitch 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
809 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
810 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
811 &new_node, as_cu(h_graph), deps, num_deps,
812 &memset_params, ctx))
814 return _registered(MemsetNode._create_with_params( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
815 create_graph_node_handle(new_node, h_graph), c_dst, 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
816 val, elem_size, width, height, pitch))
819cdef inline MemcpyNode GN_memcpy(
820 GraphNode self, cydriver.CUdeviceptr c_dst,
821 cydriver.CUdeviceptr c_src, size_t size):
822 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
823 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
824 cdef cydriver.CUresult ret
825 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
826 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
827 &dst_mem_type,
828 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
829 c_dst)
830 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
831 HANDLE_RETURN(ret)
832 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
833 &src_mem_type,
834 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
835 c_src)
836 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
837 HANDLE_RETURN(ret)
839 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
840 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
842 cdef cydriver.CUDA_MEMCPY3D params
843 c_memset(¶ms, 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
845 params.srcMemoryType = c_src_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
846 params.dstMemoryType = c_dst_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
847 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
848 params.srcHost = <const void*><uintptr_t>c_src
849 else:
850 params.srcDevice = c_src 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
851 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
852 params.dstHost = <void*><uintptr_t>c_dst
853 else:
854 params.dstDevice = c_dst 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
855 params.WidthInBytes = size 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
856 params.Height = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
857 params.Depth = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
859 cdef cydriver.CUgraphNode new_node = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
860 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
861 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
862 cdef cydriver.CUgraphNode* deps = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
863 cdef size_t num_deps = 0 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
865 if pred_node != NULL: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
866 deps = &pred_node 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
867 num_deps = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
869 cdef cydriver.CUcontext ctx = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
870 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
871 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
872 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
873 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
875 return _registered(MemcpyNode._create_with_params( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
876 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
877 c_dst_type, c_src_type))
880cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def):
881 cdef cydriver.CUgraphNode new_node = NULL 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
882 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
883 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
884 cdef cydriver.CUgraphNode* deps = NULL 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
885 cdef size_t num_deps = 0 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
887 if pred_node != NULL: 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
888 deps = &pred_node
889 num_deps = 1
891 with nogil: 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
892 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
893 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
895 cdef cydriver.CUgraph embedded_graph = NULL 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
896 with nogil: 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
897 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
898 new_node, &embedded_graph))
900 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
902 return _registered(ChildGraphNode._create_with_params( 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
903 create_graph_node_handle(new_node, h_graph), h_embedded)) 2wexeyezeAeBeCegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dDejdaebe|c}cEeFe
906cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
907 cdef cydriver.CUgraphNode new_node = NULL 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
908 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
909 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
910 cdef cydriver.CUgraphNode* deps = NULL 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
911 cdef size_t num_deps = 0 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
913 if pred_node != NULL: 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
914 deps = &pred_node 2GeIeKeMeOeQeoecd
915 num_deps = 1 2GeIeKeMeOeQeoecd
917 with nogil: 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
918 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
919 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
921 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
922 <cydriver.CUhostFn>_destroy_event_handle_copy)
924 return _registered(EventRecordNode._create_with_params( 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
925 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiGeIeKeMeOeQe1joe2jLiMicdZi8jTe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j3e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
928cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
929 cdef cydriver.CUgraphNode new_node = NULL 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
930 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
931 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
932 cdef cydriver.CUgraphNode* deps = NULL 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
933 cdef size_t num_deps = 0 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
935 if pred_node != NULL: 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
936 deps = &pred_node 2KiHeJeLeNePeReLiMipe
937 num_deps = 1 2KiHeJeLeNePeReLiMipe
939 with nogil: 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
940 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
941 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
943 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
944 <cydriver.CUhostFn>_destroy_event_handle_copy)
946 return _registered(EventWaitNode._create_with_params( 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
947 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiHeJeLeNePeReLiMipe3j0i9jUe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j4e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
950cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data):
951 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
953 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
954 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
955 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
956 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
957 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
958 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
960 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
961 deps = &pred_node
962 num_deps = 1
964 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
965 as_cu(h_graph), fn, user_data,
966 &node_params.fn, &node_params.userData)
968 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
969 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
970 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
972 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
973 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
974 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljqemj?bnjojpj.bqjaibikcrjddedfdgdsjretjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
975 node_params.fn, node_params.userData))