Coverage for cuda/core/graph/_graph_node.pyx: 90.21%
388 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-13 01:38 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-13 01:38 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5"""GraphNode base class — factory, properties, and builder methods."""
7from __future__ import annotations
9from collections.abc import Iterable
10from typing import TYPE_CHECKING
12from cpython.ref cimport Py_INCREF
14from libc.stddef cimport size_t
15from libc.stdint cimport uintptr_t
16from libc.string cimport memset as c_memset
18from libcpp.vector cimport vector
20from cuda.bindings cimport cydriver
22from cuda.core._event cimport Event
23from cuda.core._kernel_arg_handler cimport ParamHolder
24from cuda.core._launch_config cimport LaunchConfig
25from cuda.core._module cimport Kernel
26from cuda.core.graph._graph_definition cimport GraphCondition, GraphDefinition
27from cuda.core.graph._subclasses cimport (
28 AllocNode,
29 ChildGraphNode,
30 ConditionalNode,
31 EmptyNode,
32 EventRecordNode,
33 EventWaitNode,
34 FreeNode,
35 HostCallbackNode,
36 IfElseNode,
37 IfNode,
38 KernelNode,
39 MemcpyNode,
40 MemsetNode,
41 SwitchNode,
42 WhileNode,
43)
44from cuda.core._resource_handles cimport (
45 EventHandle,
46 GraphHandle,
47 GraphNodeHandle,
48 KernelHandle,
49 as_cu,
50 as_intptr,
51 as_py,
52 create_graph_handle_ref,
53 create_graph_node_handle,
54 graph_node_get_graph,
55 invalidate_graph_node,
56 py_object_user_object_destroy,
57)
58from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
60from cuda.core.graph._utils cimport (
61 _attach_host_callback_to_graph,
62 _attach_user_object,
63)
65import weakref
67from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy
68from cuda.core._utils.cuda_utils import driver
69from cuda.core.typing import GraphMemoryType
71if TYPE_CHECKING:
72 from cuda.core._device import Device
74__all__ = ['GraphNode']
76# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object)
77_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary()
80cdef inline GraphNode _registered(GraphNode n):
81 _node_registry[<uintptr_t>n._h_node.get()] = n 2OiPiwepddieifiqhqdgiderhhi:eKjJiffgfhfifxeKiLjMjiijikilimig h i j Zb0b1b2bnioipiNcOcPcohqishMfykyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfzefe9iJe!iKe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdrigevhsiwhsdtihexhuiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfBe,ije-iNe.iOe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfCe^ike_iPe`iQe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtdvimeDhwiEhudxineFhyidjGhvdzioeHhAiWi+caiIhBi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdCiLh@b4j$d[b3bYbMb=b5jRiQiMhDb6jwd7jnhGf=c,cZi0ikdSi;e=eHfJ -b?e@eNh%dFd8j9jTeljSfTfOh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 oc2f3fTh)dId'j(jZeoj4f5fUh9 pc6f7fVh*dJd)j*j0epj8f9fWh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rc'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% uc+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vc/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wc?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xc^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcbgcgFf#h?dSd`j{j!exjdgeg$h, AcfgggrbTdUdVdldQbRb*bS `bSbTb%h@dWd|j}j#eyjhgig'h- Bcjgkg+b,b5b1 2 3 4 (h[dXd~jak$ezjlgmg)h. Ccngog*h]dYdbkck%eAjpgqg+h/ Dcrgsg,h^dZddkek'eBjtgug-h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z .h_d0dfkgk(eCjxgyg/h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib:h`d1dhkik)eDjBgCg;h= GcDgEgQcRcScTc[e]e^e_e`e=h{d2djkkk*eEjFgGg?h? HcHgIghd3d4dCbmdUbVbo Q WbXb@h|d5dlkmk+eFjJgKg[h@ IcLgMga w x t c d e f s IbJbFbD E p F G ]h}d6dnkok,eGjNgOg^h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf_h~d8dpkqk-eHjRgSg`h] KcTgUg{eDiEetezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf{hae!dsktk.eIjVgWg|h^ LcXgYg}hbe#dukvk/eJjZg0g~h_ Mc1g2gIf|c.c3i4indTi|e}eJfO :b~eafKf}c/c5i6iodUibfcfLfP ;bdfefFiFeueBkCkqfwkehfhGikb:cghhhHiGeveDkEkrfxkihjhIilb;ckhlh
82 return n 2OiPiwepddieifiqhqdgiderhhi:eKjJiffgfhfifxeKiLjMjiijikilimig h i j Zb0b1b2bnioipiNcOcPcohqishMfykyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g7ith8iNfzefe9iJe!iKe#ikfPjQj#g$g$ibcXi{ %iYc'iZc(i0c)i1c%g'guhrdrigevhsiwhsdtihexhuiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g*izh+iPfBe,ije-iNe.iOe/imfTjUj,g-g:idcYi} ;i6c=i7c?i8c@i9c.g/g[iAh]iQfCe^ike_iPe`iQe{infVjWj:g;g|iec}i~ ~i!caj#cbj$ccj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtdvimeDhwiEhudxineFhyidjGhvdzioeHhAiWi+caiIhBi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdCiLh@b4j$d[b3bYbMb=b5jRiQiMhDb6jwd7jnhGf=c,cZi0ikdSi;e=eHfJ -b?e@eNh%dFd8j9jTeljSfTfOh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 oc2f3fTh)dId'j(jZeoj4f5fUh9 pc6f7fVh*dJd)j*j0epj8f9fWh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rc'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% uc+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vc/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wc?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xc^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcbgcgFf#h?dSd`j{j!exjdgeg$h, AcfgggrbTdUdVdldQbRb*bS `bSbTb%h@dWd|j}j#eyjhgig'h- Bcjgkg+b,b5b1 2 3 4 (h[dXd~jak$ezjlgmg)h. Ccngog*h]dYdbkck%eAjpgqg+h/ Dcrgsg,h^dZddkek'eBjtgug-h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z .h_d0dfkgk(eCjxgyg/h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib:h`d1dhkik)eDjBgCg;h= GcDgEgQcRcScTc[e]e^e_e`e=h{d2djkkk*eEjFgGg?h? HcHgIghd3d4dCbmdUbVbo Q WbXb@h|d5dlkmk+eFjJgKg[h@ IcLgMga w x t c d e f s IbJbFbD E p F G ]h}d6dnkok,eGjNgOg^h[ JcPgQg3gidadfjgj7d1isftf4gU }bufvf_h~d8dpkqk-eHjRgSg`h] KcTgUg{eDiEetezkAkpfrkahbhEijb-cchdh5gjdbdhjij9d2iwfxf6gV ~byfzf{hae!dsktk.eIjVgWg|h^ LcXgYg}hbe#dukvk/eJjZg0g~h_ Mc1g2gIf|c.c3i4indTi|e}eJfO :b~eafKf}c/c5i6iodUibfcfLfP ;bdfefFiFeueBkCkqfwkehfhGikb:cghhhHiGeveDkEkrfxkihjhIilb;ckhlh
85cdef class GraphNode:
86 """A node in a graph definition.
88 Nodes are created by calling builder methods on GraphDefinition (for
89 entry-point nodes with no dependencies) or on other Nodes (for
90 nodes that depend on a predecessor).
91 """
93 @staticmethod
94 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
95 """Factory: dispatch to the right subclass based on node type."""
96 return GN_create(h_graph, node) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiMhDbwd
98 def __repr__(self) -> str:
99 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2nl
100 if node == NULL: 2nl
101 return "<GraphNode entry>" 2nl
102 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
104 def __eq__(self, other: object) -> bool:
105 if not isinstance(other, GraphNode): 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb%h@dWd|j}j#eyjhgig'h- Bcsljgkg+b,b5b1 2 3 4 (h[dXd~jak$ezjlgmg)h. Cctlngog*h]dYdbkck%eAjpgqg+h/ Dculrgsg,h^dZddkek'eBjtgug-h: Ecvlvgwg~cC 'b(b)b4bW X qbT AbY Z .h_d0dfkgk(eCjxgyg/h; FcwlzgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib:h`d1dhkik)eDjBgCg;h= GcxlDgEgQcRcScTc[e]e^e_e`e=h{d2djkkk*eEjFgGg?h? HcylHgIghd3d4dCbmdUbVbo Q WbXb@h|d5dlkmk+eFjJgKg[h@ IczlLgMga w x t c d e f s IbJbFbD E p F G ]h}d6dnkok,eGjNgOg^h[ JcAlPgQg3gidadfjgj7d1isftf4gU }bufvf_h~d8dpkqk-eHjRgSg`h] KcBlTgUg{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
106 return NotImplemented 2Gf=c,cZi0ikdSi;e=eHfJ -b+k?e@e%h@dWd|j}j#eyjhgig'h- Bcsljgkg(h[dXd~jak$ezjlgmg)h. Cctlngog*h]dYdbkck%eAjpgqg+h/ Dculrgsg,h^dZddkek'eBjtgug-h: Ecvlvgwg.h_d0dfkgk(eCjxgyg/h; FcwlzgAg:h`d1dhkik)eDjBgCg;h= GcxlDgEg=h{d2djkkk*eEjFgGg?h? HcylHgIg@h|d5dlkmk+eFjJgKg[h@ IczlLgMg]h}d6dnkok,eGjNgOg^h[ JcAlPgQg_h~d8dpkqk-eHjRgSg`h] KcBlTgUg
107 cdef GraphNode o = <GraphNode>other 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
108 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
109 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
110 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
111 and as_intptr(self_graph) == as_intptr(other_graph)) 2pd7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcjGf=c,cZi0ikdSi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadfjgj7d1isftf4gU }bufvf{e5gjdbdhjij9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
113 def __hash__(self) -> int:
114 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2pd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiMhDbwdNh%dFd8j9jTeljSfTfOh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncFlYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 ocGl2f3fTh)dId'j(jZeoj4f5fUh9 pcHl6f7fVh*dJd)j*j0epj8f9fWh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rcJl'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% ucKl+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xcNl^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcOlbgcgFf#h?dSd`j{j!exjdgeg$h, AcPlfggg{hae!dsktk.eIjVgWg|h^ LcQlXgYg}hbe#dukvk/eJjZg0g~h_ McRl1g2gIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
115 return hash((as_intptr(self._h_node), as_intptr(g))) 2cepd2k3kCl4k5kDlJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bRiQiMhDbwdNh%dFd8j9jTeljSfTfOh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bPh'dGd!j#jXemjWfXfQh7 ncFlYfZficjc?bmbnbobpbRh(dHd$j%jYenj0f1fSh8 ocGl2f3fTh)dId'j(jZeoj4f5fUh9 pcHl6f7fVh*dJd)j*j0epj8f9fWh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebXh+dLd+j,j1eqj$f%fYh$ rcJl'f(fNibixdydzdAdciBdCdDdEdR sctckcwbxbz NbybzbZh,dMd-j.j2erj)f*f0h% ucKl+f,fddedfdgdAfBfCfDfEf1h-dNd/j:j3esj-f.f2h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b3h/dOd;j=j6etj;f=f4h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 5h:dPd?j@j7euj[f]f6h) xcNl^f_f7h;dQd[j]j8evj`f{f8h* yc|f}f9h=dRd^j_j9ewj~fag!h+ zcOlbgcgFf#h?dSd`j{j!exjdgeg$h, AcPlfggg{hae!dsktk.eIjVgWg|h^ LcQlXgYg}hbe#dukvk/eJjZg0g~h_ McRl1g2gIf|c.c3i4indTi|e}eJfO :b,k~eafKf}c/c5i6iodUibfcfLfP ;b-kdfef
117 @property
118 def type(self) -> driver.CUgraphNodeType | None:
119 """Return the CUDA graph node type.
121 Returns
122 -------
123 CUgraphNodeType or None
124 The node type enum value, or None for the entry node.
125 """
126 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
127 if node == NULL: 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
128 return None 2/kwd
129 cdef cydriver.CUgraphNodeType node_type
130 with nogil: 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
131 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
132 return driver.CUgraphNodeType(<int>node_type) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
134 @property
135 def graph(self) -> GraphDefinition:
136 """Return the GraphDefinition this node belongs to."""
137 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2AoBoCoDoEoFo
139 @property
140 def handle(self) -> driver.CUgraphNode:
141 """Return the underlying driver CUgraphNode handle.
143 Returns None for the entry node.
144 """
145 return as_py(self._h_node) 2wdGf=c,cZi0ikdSi;e=eHfJ -b+k?e@e
147 @property
148 def is_valid(self) -> bool:
149 """Whether this node is valid (not destroyed).
151 Returns ``False`` after :meth:`destroy` has been called.
152 """
153 return as_intptr(self._h_node) != 0 2wd
155 def destroy(self) -> None:
156 """Destroy this node and remove all its edges from the parent graph.
158 After this call, :attr:`is_valid` returns ``False`` and the node
159 cannot be re-added to any graph. Safe to call on an
160 already-destroyed node (no-op).
161 """
162 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2dj3bYbMbwd
163 if node == NULL: 2dj3bYbMbwd
164 return 2wd
165 with nogil: 2dj3bYbMbwd
166 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2dj3bYbMbwd
167 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2dj3bYbMbwd
168 invalidate_graph_node(self._h_node) 2dj3bYbMbwd
170 @property
171 def pred(self) -> AdjacencySetProxy:
172 """A mutable set-like view of this node's predecessors."""
173 return AdjacencySetProxy(self, False) 2we:e/kJiNcOcPcoh[i]iGo^i_i`i{iHoIoJoKo|i}i~iajbjcjLoMoSkTkolUkVkpl+ccdQiMhDbwd
175 @pred.setter
176 def pred(self, value: Iterable[GraphNode]) -> None:
177 p = AdjacencySetProxy(self, False) 2MbMh
178 p.clear() 2MbMh
179 p.update(value) 2MbMh
181 @property
182 def succ(self) -> AdjacencySetProxy:
183 """A mutable set-like view of this node's successors."""
184 return AdjacencySetProxy(self, True) 2/kJi[i]i^i_i`i{i|i}i~iajbjcjWkXkqlYkZkrlYb=b5jRiQiMhDb6jwd7j
186 @succ.setter
187 def succ(self, value: Iterable[GraphNode]) -> None:
188 s = AdjacencySetProxy(self, True) 2JiMh
189 s.clear() 2JiMh
190 s.update(value) 2JiMh
192 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
193 """Add a kernel launch node depending on this node.
195 Parameters
196 ----------
197 config : LaunchConfig
198 Launch configuration (grid, block, shared memory, etc.)
199 kernel : Kernel
200 The kernel to launch.
201 *args
202 Kernel arguments.
204 Returns
205 -------
206 KernelNode
207 A new KernelNode representing the kernel launch.
208 """
209 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
211 def join(self, *nodes: GraphNode) -> EmptyNode:
212 """Create an empty node that depends on this node and all given nodes.
214 This is used to synchronize multiple branches of execution.
216 Parameters
217 ----------
218 *nodes : GraphNode
219 Additional nodes to depend on.
221 Returns
222 -------
223 EmptyNode
224 A new EmptyNode that depends on all input nodes.
225 """
226 return GN_join(self, nodes) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
228 def allocate(self, size_t size, *, device: Device | int | None = None,
229 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
230 peer_access: list[Device | int] | None = None) -> AllocNode:
231 """Add a memory allocation node depending on this node.
233 Parameters
234 ----------
235 size : int
236 Number of bytes to allocate.
237 device : int or Device, optional
238 The device on which to allocate memory. If None (default),
239 uses the current CUDA context's device.
240 memory_type : GraphMemoryType or str, optional
241 Type of memory to allocate. One of:
243 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory,
244 optimal for GPU kernels.
245 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from
246 both host and device. Useful for graphs containing host
247 callback nodes. Note: may not be supported on all
248 systems/drivers.
249 - ``GraphMemoryType.MANAGED``: Managed/unified memory that
250 automatically migrates between host and device. Useful for
251 mixed host/device access patterns.
253 peer_access : list of int or Device, optional
254 List of devices that should have read-write access to the
255 allocated memory. If None (default), only the allocating
256 device has access.
258 Returns
259 -------
260 AllocNode
261 A new AllocNode representing the allocation. Access the allocated
262 device pointer via the dptr property.
264 Notes
265 -----
266 IPC (inter-process communication) is not supported for graph
267 memory allocation nodes per CUDA documentation.
268 """
269 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
271 def deallocate(self, dptr: int) -> FreeNode:
272 """Add a memory free node depending on this node.
274 Parameters
275 ----------
276 dptr : int
277 Device pointer to free (typically from AllocNode.dptr).
279 Returns
280 -------
281 FreeNode
282 A new FreeNode representing the free operation.
283 """
284 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
286 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode:
287 """Add a memset node depending on this node.
289 Parameters
290 ----------
291 dst : int
292 Destination device pointer.
293 value : int or buffer-protocol object
294 Fill value. int for 1-byte fill (range [0, 256)),
295 or buffer-protocol object of 1, 2, or 4 bytes.
296 width : int
297 Width of the row in elements.
298 height : int, optional
299 Number of rows (default 1).
300 pitch : int, optional
301 Pitch of destination in bytes (default 0, unused if height is 1).
303 Returns
304 -------
305 MemsetNode
306 A new MemsetNode representing the memset operation.
307 """
308 cdef unsigned int val
309 cdef unsigned int elem_size
310 val, elem_size = _parse_fill_value(value) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*caiDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
311 return GN_memset(self, <cydriver.CUdeviceptr>dst, val, elem_size, width, height, pitch) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
313 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode:
314 """Add a memcpy node depending on this node.
316 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
317 auto-detected via the driver, so both device and pinned host
318 pointers are supported.
320 Parameters
321 ----------
322 dst : int
323 Destination pointer (device or pinned host).
324 src : int
325 Source pointer (device or pinned host).
326 size : int
327 Number of bytes to copy.
329 Returns
330 -------
331 MemcpyNode
332 A new MemcpyNode representing the copy operation.
333 """
334 return GN_memcpy(self, <cydriver.CUdeviceptr>dst, <cydriver.CUdeviceptr>src, size) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
336 def embed(self, child: GraphDefinition) -> ChildGraphNode:
337 """Add a child graph node depending on this node.
339 Embeds a clone of the given graph definition as a sub-graph node.
340 The child graph must not contain allocation, free, or conditional
341 nodes.
343 Parameters
344 ----------
345 child : GraphDefinition
346 The graph definition to embed (will be cloned).
348 Returns
349 -------
350 ChildGraphNode
351 A new ChildGraphNode representing the embedded sub-graph.
352 """
353 return GN_embed(self, <GraphDefinition>child) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
355 def record(self, event: Event) -> EventRecordNode:
356 """Add an event record node depending on this node.
358 Parameters
359 ----------
360 event : Event
361 The event to record.
363 Returns
364 -------
365 EventRecordNode
366 A new EventRecordNode representing the event record operation.
367 """
368 return GN_record_event(self, <Event>event) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
370 def wait(self, event: Event) -> EventWaitNode:
371 """Add an event wait node depending on this node.
373 Parameters
374 ----------
375 event : Event
376 The event to wait for.
378 Returns
379 -------
380 EventWaitNode
381 A new EventWaitNode representing the event wait operation.
382 """
383 return GN_wait_event(self, <Event>event) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
385 def callback(self, fn, *, user_data=None) -> object:
386 """Add a host callback node depending on this node.
388 The callback runs on the host CPU when the graph reaches this node.
389 Two modes are supported:
391 - **Python callable**: Pass any callable. The GIL is acquired
392 automatically. The callable must take no arguments; use closures
393 or ``functools.partial`` to bind state.
394 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance.
395 The function receives a single ``void*`` argument (the
396 ``user_data``). The caller must keep the ctypes wrapper alive
397 for the lifetime of the graph.
399 .. warning::
401 Callbacks must not call CUDA API functions. Doing so may
402 deadlock or corrupt driver state.
404 Parameters
405 ----------
406 fn : callable or ctypes function pointer
407 The callback function.
408 user_data : int or bytes-like, optional
409 Only for ctypes function pointers. If ``int``, passed as a raw
410 pointer (caller manages lifetime). If bytes-like, the data is
411 copied and its lifetime is tied to the graph.
413 Returns
414 -------
415 HostCallbackNode
416 A new HostCallbackNode representing the callback.
417 """
418 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
420 def if_then(self, condition: GraphCondition) -> IfNode:
421 """Add an if-conditional node depending on this node.
423 The body graph executes only when the condition evaluates to
424 a non-zero value at runtime.
426 Parameters
427 ----------
428 condition : GraphCondition
429 GraphCondition from :meth:`GraphDefinition.create_condition`.
431 Returns
432 -------
433 IfNode
434 A new IfNode with one branch accessible via ``.then``.
435 """
436 return _make_conditional_node( 2pd8g$g)g-g;g[gjj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh
437 self, condition,
438 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2pd8g$g)g-g;g[gjj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh
440 def if_else(self, condition: GraphCondition) -> IfElseNode:
441 """Add an if-else conditional node depending on this node.
443 Two body graphs: the first executes when the condition is
444 non-zero, the second when it is zero.
446 Parameters
447 ----------
448 condition : GraphCondition
449 GraphCondition from :meth:`GraphDefinition.create_condition`.
451 Returns
452 -------
453 IfElseNode
454 A new IfElseNode with branches accessible via
455 ``.then`` and ``.else_``.
456 """
457 return _make_conditional_node( 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih
458 self, condition,
459 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih
461 def while_loop(self, condition: GraphCondition) -> WhileNode:
462 """Add a while-loop conditional node depending on this node.
464 The body graph executes repeatedly while the condition
465 evaluates to a non-zero value.
467 Parameters
468 ----------
469 condition : GraphCondition
470 GraphCondition from :meth:`GraphDefinition.create_condition`.
472 Returns
473 -------
474 WhileNode
475 A new WhileNode with body accessible via ``.body``.
476 """
477 return _make_conditional_node( 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh
478 self, condition,
479 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh
481 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
482 """Add a switch conditional node depending on this node.
484 The condition value selects which branch to execute. If the
485 value is out of range, no branch executes.
487 Parameters
488 ----------
489 condition : GraphCondition
490 GraphCondition from :meth:`GraphDefinition.create_condition`.
491 count : int
492 Number of switch cases (branches).
494 Returns
495 -------
496 SwitchNode
497 A new SwitchNode with branches accessible via ``.branches``.
498 """
499 return _make_conditional_node( 29g%g*g.g=g]gkj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh
500 self, condition,
501 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 29g%g*g.g=g]gkj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh
504cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil:
505 cdef EventHandle* p = <EventHandle*>ptr 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
506 del p 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
509cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil:
510 cdef KernelHandle* p = <KernelHandle*>ptr 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKhLh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
511 del p 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKhLh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
514cdef inline ConditionalNode _make_conditional_node(
515 GraphNode pred,
516 GraphCondition condition,
517 cydriver.CUgraphConditionalNodeType cond_type,
518 unsigned int size,
519 type node_cls):
520 if not isinstance(condition, GraphCondition): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
521 raise TypeError(
522 f"condition must be a GraphCondition object (from "
523 f"GraphDefinition.create_condition()), got {type(condition).__name__}")
524 cdef cydriver.CUgraphNodeParams params
525 cdef cydriver.CUgraphNode new_node = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
527 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~eafbfcfdfefehfhghhhihjhkhlh
528 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
529 params.conditional.handle = condition._c_handle 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
530 params.conditional.type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
531 params.conditional.size = size 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
533 cdef cydriver.CUcontext ctx = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
534 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
535 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
536 cdef cydriver.CUgraphNode* deps = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
537 cdef size_t num_deps = 0 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
539 if pred_node != NULL: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
540 deps = &pred_node
541 num_deps = 1
543 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
544 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
545 params.conditional.ctx = ctx 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
547 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
548 IF CUDA_CORE_BUILD_MAJOR >= 13:
549 HANDLE_RETURN(cydriver.cuGraphAddNode( 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gjjkj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
550 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
551 ELSE:
552 HANDLE_RETURN(cydriver.cuGraphAddNode(
553 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
555 cdef list branch_list = [] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
556 cdef unsigned int i
557 cdef cydriver.CUgraph bg
558 cdef GraphHandle h_branch
559 for i in range(size): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
560 bg = params.conditional.phGraph_out[i] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
561 h_branch = create_graph_handle_ref(bg, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
562 branch_list.append(GraphDefinition._from_handle(h_branch)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
563 cdef tuple branches = tuple(branch_list) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
565 cdef ConditionalNode n = node_cls.__new__(node_cls) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
566 n._h_node = create_graph_node_handle(new_node, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
567 n._condition = condition 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
568 n._cond_type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
569 n._branches = branches 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
571 return _registered(n) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
573cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
574 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiMhDbwd
576 # Sentinel: virtual node to represent the graph entry point.
577 if node == NULL: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiMhDbwd
578 n = GraphNode.__new__(GraphNode)
579 (<GraphNode>n)._h_node = h_node
580 return n
582 # Return a registered object or create and register a new one.
583 registered = _node_registry.get(<uintptr_t>h_node.get()) 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiMhDbwd
584 if registered is not None: 2pd2k3k4k5kJiNcOcPcyk7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bRiQiMhDbwd
585 return <GraphNode>registered 2pd2k3k4k5kJiNcOcPc7i8iFk9i!i#iGkHkIk$iXi%i'i(i)iJkKk6k7k8k9k!k#k*i+iLk,i-i.i/iMkNkOkPk:iYi;i=i?i@iQkRk[i]i^i_i`i{i|i}i~iajbjcj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+ccd[b3bYbMb=bRiQiMhDbwd
586 else:
587 return _registered(GN_create_impl(h_node)) 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
590cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
591 cdef cydriver.CUgraphNodeType node_type
592 with nogil: 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
593 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
595 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2yk7i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjsbtbubvbgc@b$dDb
596 return EmptyNode._create_impl(h_node) 2XiYi}i
597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
598 return KernelNode._create_from_driver(h_node) 2yksbtbubvbgc@bDb
599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
600 return AllocNode._create_from_driver(h_node) 27i8i9i!i#i$iXi%i'i(i)i*i+i,i-i.i/i:iYi;i=i?i@i[i]i^i_i`i{i|i~iajbjcj
601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
602 return FreeNode._create_from_driver(h_node)
603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
604 return MemsetNode._create_from_driver(h_node) 2Db
605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
606 return MemcpyNode._create_from_driver(h_node)
607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
608 return ChildGraphNode._create_from_driver(h_node) 2@b
609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
610 return EventRecordNode._create_from_driver(h_node)
611 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
612 return EventWaitNode._create_from_driver(h_node)
613 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
614 return HostCallbackNode._create_from_driver(h_node)
615 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
616 return ConditionalNode._create_from_driver(h_node) 2$d
617 else:
618 n = GraphNode.__new__(GraphNode)
619 (<GraphNode>n)._h_node = h_node
620 return n
623cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args):
624 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params
625 cdef cydriver.CUgraphNode new_node = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
626 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
627 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
628 cdef cydriver.CUgraphNode* deps = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
629 cdef size_t num_deps = 0 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
631 if pred_node != NULL: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
632 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh
633 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh
635 node_params.kern = as_cu(ker._h_kernel) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
636 node_params.func = <cydriver.CUfunction>NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
637 node_params.gridDimX = conf.grid[0] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
638 node_params.gridDimY = conf.grid[1] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
639 node_params.gridDimZ = conf.grid[2] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
640 node_params.blockDimX = conf.block[0] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
641 node_params.blockDimY = conf.block[1] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
642 node_params.blockDimZ = conf.block[2] 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
643 node_params.sharedMemBytes = conf.shmem_size 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
644 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
645 node_params.extra = NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
646 node_params.ctx = <cydriver.CUcontext>NULL 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
648 with nogil: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
649 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
650 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
652 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
653 <cydriver.CUhostFn>_destroy_kernel_handle_copy)
655 cdef object kernel_args = ker_args.kernel_args 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
656 if kernel_args is not None: 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
657 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh
658 _attach_user_object(as_cu(h_graph), <void*>kernel_args, 2mhJh[b3bYbMb=bDbnh
659 <cydriver.CUhostFn>py_object_user_object_destroy)
661 return _registered(KernelNode._create_with_params( 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
662 create_graph_node_handle(new_node, h_graph), 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
663 conf.grid, conf.block, conf.shmem_size, 2xeiijikilimiohqiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdCiLh@b[b3bYbMb=bDbnh=cHf%dOhEbhc'dQhicjc?bmbnbobpb(dSh)dUh*dWhH Bb+dYhR ,d0h-d2h.d4e5eKbse!b#bq 0 $b%b/d4hb u :d6h;d8h=d!h?d$hrb*b@d'h+b,b5b1 2 3 4 [d)h]d+h^d-hC qb_d/hI `d;h{d?hhd3d4dCbmdUbVbo Q WbXb|d[ha s }d^hid4g~d`hEeEijd6gae|hbe~h|cJf}cLfFeGiGeIi
664 ker._h_kernel))
667cdef inline EmptyNode GN_join(GraphNode self, tuple nodes):
668 cdef vector[cydriver.CUgraphNode] deps
669 cdef cydriver.CUgraphNode new_node = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
670 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
671 cdef GraphNode other
672 cdef cydriver.CUgraphNode* deps_ptr = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
673 cdef size_t num_deps = 0 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
674 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
676 if pred_node != NULL: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
677 deps.push_back(pred_node) 2qdrdsdtdudvd+c
678 for other in nodes: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
679 if as_cu((<GraphNode>other)._h_node) != NULL: 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
680 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
682 num_deps = deps.size() 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
683 if num_deps > 0: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
684 deps_ptr = deps.data() 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe+c[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
686 with nogil: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
687 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
688 &new_node, as_cu(h_graph), deps_ptr, num_deps))
690 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnedjvdoeWi+c[b3bYbMb=b5jRiQiMh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
693cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device,
694 object memory_type, object peer_access):
695 cdef int device_id
696 cdef cydriver.CUdevice dev
698 if device is None: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
699 with nogil: 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
700 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
701 device_id = <int>dev 2weejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
702 else:
703 device_id = getattr(device, 'device_id', device) 2OiPi
705 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
706 cdef cydriver.CUgraphNode new_node = NULL 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
707 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
708 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
709 cdef cydriver.CUgraphNode* deps = NULL 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
710 cdef size_t num_deps = 0 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
712 if pred_node != NULL: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
713 deps = &pred_node 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
714 num_deps = 1 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
716 cdef vector[cydriver.CUmemAccessDesc] access_descs
717 cdef int peer_id
718 cdef list peer_ids = [] 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
720 if peer_access is not None: 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
721 for peer_dev in peer_access:
722 peer_id = getattr(peer_dev, 'device_id', peer_dev)
723 peer_ids.append(peer_id)
724 access_descs.push_back(cydriver.CUmemAccessDesc_st(
725 cydriver.CUmemLocation_st(
726 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE,
727 peer_id
728 ),
729 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
730 ))
732 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
734 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
735 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
736 alloc_params.bytesize = size 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
738 if memory_type_str == "device": 2OiPiweejVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
739 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
740 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
741 alloc_params.poolProps.location.id = device_id 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
742 elif memory_type_str == "host": 2ejMfNfOfPfQfRf
743 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
744 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
745 alloc_params.poolProps.location.id = 0
746 elif memory_type_str == "managed": 2ejMfNfOfPfQfRf
747 IF CUDA_CORE_BUILD_MAJOR >= 13:
748 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2MfNfOfPfQfRf
749 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2MfNfOfPfQfRf
750 alloc_params.poolProps.location.id = device_id 2MfNfOfPfQfRf
751 ELSE:
752 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
753 else:
754 raise ValueError(f"Invalid memory_type: {memory_type_str!r}. " 2ej
755 "Must be 'device', 'host', or 'managed'.")
757 if access_descs.size() > 0: 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
758 alloc_params.accessDescs = access_descs.data()
759 alloc_params.accessDescCount = access_descs.size()
761 with nogil: 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
762 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiweVidieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
763 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
765 return _registered(AllocNode._create_with_params( 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
766 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
767 device_id, memory_type_str, tuple(peer_ids))) 2OiPiwedieifiqhqdgiderhhi:effgfhfifg h i j Zb0b1b2bnioipiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdrigevhsiwhsdtihexhuiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtdvimeDhwiEhudxineFhyiGhvdzioeHhAi+caiBipeqeGf,ckdJ -bNhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bPhGdXe7 ncRhHdYe8 ocThIdZe9 pcVhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebXhLd1e$ rcR sctckcwbxbz NbybzbZhMd2e% uc1hNd3e' vcKbq 0 3hOd6e( wcb A B y k l m n u ObPbLbK L r M N 5hPd7e) xc7hQd8e* yc9hRd9e+ zc#hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb%hWd#e- Bc(hXd$e. Cc*hYd%e/ Dc,hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z .h0d(e; FcI {b|b/bfbgbv Hbhbib:h1d)e= Gc=h2d*e? HcCbo Q @h5d+e@ Ica w x t c d e f s IbJbFbD E p F G ]h6d,e[ Jc3gad7dU }b_h8d-e] KcDitepfjb-c5gbd9dV ~b{h!d.e^ Lc}h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
770cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
771 cdef cydriver.CUgraphNode new_node = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
772 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
773 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
774 cdef cydriver.CUgraphNode* deps = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
775 cdef size_t num_deps = 0 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
777 if pred_node != NULL: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
778 deps = &pred_node 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
779 num_deps = 1 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
781 with nogil: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
782 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
783 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
785 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
788cdef inline MemsetNode GN_memset(
789 GraphNode self, cydriver.CUdeviceptr c_dst,
790 unsigned int val, unsigned int elem_size,
791 size_t width, size_t height, size_t pitch):
792 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params
793 cdef cydriver.CUgraphNode new_node = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
794 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
795 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
796 cdef cydriver.CUgraphNode* deps = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
797 cdef size_t num_deps = 0 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
799 if pred_node != NULL: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
800 deps = &pred_node 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
801 num_deps = 1 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
803 cdef cydriver.CUcontext ctx = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
804 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
805 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
807 c_memset(&memset_params, 0, sizeof(memset_params)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
808 memset_params.dst = c_dst 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
809 memset_params.value = val 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
810 memset_params.elementSize = elem_size 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
811 memset_params.width = width 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
812 memset_params.height = height 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
813 memset_params.pitch = pitch 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
815 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
816 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
817 &new_node, as_cu(h_graph), deps, num_deps,
818 &memset_params, ctx))
820 return _registered(MemsetNode._create_with_params( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
821 create_graph_node_handle(new_node, h_graph), c_dst, 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
822 val, elem_size, width, height, pitch))
825cdef inline MemcpyNode GN_memcpy(
826 GraphNode self, cydriver.CUdeviceptr c_dst,
827 cydriver.CUdeviceptr c_src, size_t size):
828 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
829 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
830 cdef cydriver.CUresult ret
831 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
832 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
833 &dst_mem_type,
834 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
835 c_dst)
836 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
837 HANDLE_RETURN(ret)
838 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
839 &src_mem_type,
840 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
841 c_src)
842 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
843 HANDLE_RETURN(ret)
845 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
846 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
848 cdef cydriver.CUDA_MEMCPY3D params
849 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
851 params.srcMemoryType = c_src_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
852 params.dstMemoryType = c_dst_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
853 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
854 params.srcHost = <const void*><uintptr_t>c_src
855 else:
856 params.srcDevice = c_src 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
857 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
858 params.dstHost = <void*><uintptr_t>c_dst
859 else:
860 params.dstDevice = c_dst 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
861 params.WidthInBytes = size 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
862 params.Height = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
863 params.Depth = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
865 cdef cydriver.CUgraphNode new_node = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
866 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
867 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
868 cdef cydriver.CUgraphNode* deps = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
869 cdef size_t num_deps = 0 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
871 if pred_node != NULL: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
872 deps = &pred_node 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
873 num_deps = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
875 cdef cydriver.CUcontext ctx = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
876 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
877 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
878 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
879 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
881 return _registered(MemcpyNode._create_with_params( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
882 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
883 c_dst_type, c_src_type))
886cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def):
887 cdef cydriver.CUgraphNode new_node = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
888 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
889 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
890 cdef cydriver.CUgraphNode* deps = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
891 cdef size_t num_deps = 0 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
893 if pred_node != NULL: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
894 deps = &pred_node
895 num_deps = 1
897 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
898 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
899 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
901 cdef cydriver.CUgraph embedded_graph = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
902 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
903 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
904 new_node, &embedded_graph))
906 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
908 return _registered(ChildGraphNode._create_with_params( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
909 create_graph_node_handle(new_node, h_graph), h_embedded)) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
912cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
913 cdef cydriver.CUgraphNode new_node = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
914 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
915 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
916 cdef cydriver.CUgraphNode* deps = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
917 cdef size_t num_deps = 0 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
919 if pred_node != NULL: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
920 deps = &pred_node 2HeJeLeNePeRepecd
921 num_deps = 1 2HeJeLeNePeRepecd
923 with nogil: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
924 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
925 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
927 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
928 <cydriver.CUhostFn>_destroy_event_handle_copy)
930 return _registered(EventRecordNode._create_with_params( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
931 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNibixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw Ibnkfjpkzkhjskuk3i5iBkDk
934cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
935 cdef cydriver.CUgraphNode new_node = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
936 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
937 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
938 cdef cydriver.CUgraphNode* deps = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
939 cdef size_t num_deps = 0 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
941 if pred_node != NULL: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
942 deps = &pred_node 2KiIeKeMeOeQeSeLiMiqe
943 num_deps = 1 2KiIeKeMeOeQeSeLiMiqe
945 with nogil: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
946 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
947 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
949 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
950 <cydriver.CUhostFn>_destroy_event_handle_copy)
952 return _registered(EventWaitNode._create_with_params( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
953 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNiciBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokgjqkAkijtkvk4i6iCkEk
956cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data):
957 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
959 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
960 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
961 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
962 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
963 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
964 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
966 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
967 deps = &pred_node
968 num_deps = 1
970 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
971 as_cu(h_graph), fn, user_data,
972 &node_params.fn, &node_params.userData)
974 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
975 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
976 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
978 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
979 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
980 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jSiljremj?bnjojpj.bqjbicikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjTiUiwkxk
981 node_params.fn, node_params.userData))