Coverage for cuda/core/graph/_graph_node.pyx: 90.18%
387 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
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 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2OiPiwepdcidieiqhqdfiderhgi:eKjJiffgfhfifxeKiLjMjhiiijikilig h i j Zb0b1b2bminioiNcOcPcohpishMfLkyeeeHeIejfNjOj7g8gac` UcVcWcXc9g!g8ith9iNfzefe!iJe#iKe$ikfPjQj#g$g%ibcXi{ 'iYc(iZc)i0c*i1c%g'guhrdqigevhriwhsdsihexhtiyhOfAeieLeMelfRjSj(g)gcc| 2c3c4c5c*g+g+izh,iPfBe-ije.iNe/iOe:imfTjUj,g-g;idcYi} =i6c?i7c@i8c[i9c.g/g]iAh^iQfCe_ike`iPe{iQe|infVjWj:g;g}iec~i~ aj!cbj#ccj$cdj%c=g?gBhRfDeleReSeofXjYj@g[gfcab'c(c)c*c]g^gChtduimeDhviEhudwineFhxiejGhvdyioeHhziWi+c~hIhAi_g`g{g|gsbtbubvbZj0jgc1jpe2jLiMiqe3jmhJhKhcdBiCi@b4j$d[b3bYbMb=b5jSiQiLhDb6jwd7jnhGf=c,cZi0ikdTi;e=eHfJ -b?e@eMh%dFd8j9jTeljSfTfNh5 lcUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 oc2f3fSh)dId'j(jZeoj4f5fTh9 pc6f7fUh*dJd)j*j0epj8f9fVh! qc!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rc'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% uc+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vc/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wc?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xc^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcbgcgFf!h?dSd`j{j!exjdgeg#h, AcfgggrbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j#eyjhgig%h- Bcjgkg+b,b5b1 2 3 4 'h[dXd~jak$ezjlgmg(h. Ccngog)h]dYdbkck%eAjpgqg*h/ Dcrgsg+h^dZddkek'eBjtgug,h: Ecvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk(eCjxgyg.h; FczgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik)eDjBgCg:h= GcDgEgQcRcScTc[e]e^e_e`e;h{d2djkkk*eEjFgGg=h? HcHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk+eFjJgKg@h@ IcLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok,eGjNgOg]h[ JcPgQg3gidadhjij7d1isftf4gU }bufvf^h~d8dpkqk-eHjRgSg_h] KcTgUg{eDiEeteMkNkpfrkahbhEijb-cchdh5gjdbdjjkj9d2iwfxf6gV ~byfzf`hae!dsktk.eIjVgWg{h^ LcXgYg|hbe#dukvk/eJjZg0g}h_ Mc1g2gIf|c.c3i4indUi|e}eJfO :b~eafKf}c/c5i6iodVibfcfLfP ;bdfefFiFeueOkPkqfwkehfhGikb:cghhhHiGeveQkRkrfxkihjhIilb;ckhlh
84cdef class GraphNode:
85 """A node in a graph definition.
87 Nodes are created by calling builder methods on GraphDefinition (for
88 entry-point nodes with no dependencies) or on other Nodes (for
89 nodes that depend on a predecessor).
90 """
92 @staticmethod
93 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
94 """Factory: dispatch to the right subclass based on node type."""
95 return GN_create(h_graph, node) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd
97 def __repr__(self) -> str:
98 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2nl
99 if node == NULL: 2nl
100 return "<GraphNode entry>" 2nl
101 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
103 def __eq__(self, other: object) -> bool:
104 if not isinstance(other, GraphNode): 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb$h@dWd|j}j#eyjhgig%h- Bcsljgkg+b,b5b1 2 3 4 'h[dXd~jak$ezjlgmg(h. Cctlngog)h]dYdbkck%eAjpgqg*h/ Dculrgsg+h^dZddkek'eBjtgug,h: Ecvlvgwg~cC 'b(b)b4bW X qbT AbY Z -h_d0dfkgk(eCjxgyg.h; FcwlzgAgph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv Hbhbib/h`d1dhkik)eDjBgCg:h= GcxlDgEgQcRcScTc[e]e^e_e`e;h{d2djkkk*eEjFgGg=h? HcylHgIghd3d4dCbmdUbVbo Q WbXb?h|d5dlkmk+eFjJgKg@h@ IczlLgMga w x t c d e f s IbJbFbD E p F G [h}d6dnkok,eGjNgOg]h[ JcAlPgQg3gidadhjij7d1isftf4gU }bufvf^h~d8dpkqk-eHjRgSg_h] KcBlTgUg{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
105 return NotImplemented 2Gf=c,cZi0ikdTi;e=eHfJ -b+k?e@e$h@dWd|j}j#eyjhgig%h- Bcsljgkg'h[dXd~jak$ezjlgmg(h. Cctlngog)h]dYdbkck%eAjpgqg*h/ Dculrgsg+h^dZddkek'eBjtgug,h: Ecvlvgwg-h_d0dfkgk(eCjxgyg.h; FcwlzgAg/h`d1dhkik)eDjBgCg:h= GcxlDgEg;h{d2djkkk*eEjFgGg=h? HcylHgIg?h|d5dlkmk+eFjJgKg@h@ IczlLgMg[h}d6dnkok,eGjNgOg]h[ JcAlPgQg^h~d8dpkqk-eHjRgSg_h] KcBlTgUg
106 cdef GraphNode o = <GraphNode>other 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
107 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
108 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
109 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
110 and as_intptr(self_graph) == as_intptr(other_graph)) 2pd8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdjGf=c,cZi0ikdTi;e=eHfJ -b+k?e@erbTdUdVdldQbRb*bS `bSbTb+b,b5b1 2 3 4 ~cC 'b(b)b4bW X qbT AbY Z ph}g?c@c[c]c~g^c_c`c{cI {b|b/bfbgbv HbhbibQcRcScTc[e]e^e_e`ehd3d4dCbmdUbVbo Q WbXba w x t c d e f s IbJbFbD E p F G 3gidadhjij7d1isftf4gU }bufvf{e5gjdbdjjkj9d2iwfxf6gV ~b.kyfzfIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
112 def __hash__(self) -> int:
113 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2pd2k3kCl4k5kDlJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bSiQiLhDbwdMh%dFd8j9jTeljSfTfNh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 ocGl2f3fSh)dId'j(jZeoj4f5fTh9 pcHl6f7fUh*dJd)j*j0epj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xcNl^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j!exjdgeg#h, AcPlfggg`hae!dsktk.eIjVgWg{h^ LcQlXgYg|hbe#dukvk/eJjZg0g}h_ McRl1g2gIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
114 return hash((as_intptr(self._h_node), as_intptr(g))) 2pd2k3kCl4k5kDlJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk$k%k'k(k)k*kSkTkolUkVkplWkXkqlYkZkrlWi+csbtbubvbgc@b$d[b3bYbMb=bSiQiLhDbwdMh%dFd8j9jTeljSfTfNh5 lcElUfVfEbUeVeWere6b7bhc6 mc8b9bOh'dGd!j#jXemjWfXfPh7 ncFlYfZficjc?bmbnbobpbQh(dHd$j%jYenj0f1fRh8 ocGl2f3fSh)dId'j(jZeoj4f5fTh9 pcHl6f7fUh*dJd)j*j0epj8f9fVh! qcIl!f#fKdH ]b^b_b.bbbcbBb# GbdbebWh+dLd+j,j1eqj$f%fXh$ rcJl'f(fNiaixdydzdAdbiBdCdDdEdR sctckcwbxbz NbybzbYh,dMd-j.j2erj)f*fZh% ucKl+f,fddedfdgdAfBfCfDfEf0h-dNd/j:j3esj-f.f1h' vcLl/f:f.d4e5eKbse!b#bq 0 $b%b2h/dOd;j=j6etj;f=f3h( wcMl?f@fb A B y k l m n u ObPbLbK L r M N 4h:dPd?j@j7euj[f]f5h) xcNl^f_f6h;dQd[j]j8evj`f{f7h* yc|f}f8h=dRd^j_j9ewj~fag9h+ zcOlbgcgFf!h?dSd`j{j!exjdgeg#h, AcPlfggg`hae!dsktk.eIjVgWg{h^ LcQlXgYg|hbe#dukvk/eJjZg0g}h_ McRl1g2gIf|c.c3i4indUi|e}eJfO :b,k~eafKf}c/c5i6iodVibfcfLfP ;b-kdfef
116 @property
117 def type(self) -> driver.CUgraphNodeType | None:
118 """Return the CUDA graph node type.
120 Returns
121 -------
122 CUgraphNodeType or None
123 The node type enum value, or None for the entry node.
124 """
125 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
126 if node == NULL: 2/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelwd
127 return None 2/kwd
128 cdef cydriver.CUgraphNodeType node_type
129 with nogil: 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
130 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
131 return driver.CUgraphNodeType(<int>node_type) 2:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlel
133 @property
134 def graph(self) -> GraphDefinition:
135 """Return the GraphDefinition this node belongs to."""
136 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2AoBoCoDoEoFo
138 @property
139 def handle(self) -> driver.CUgraphNode:
140 """Return the underlying driver CUgraphNode handle.
142 Returns None for the entry node.
143 """
144 return as_py(self._h_node) 2wdGf=c,cZi0ikdTi;e=eHfJ -b+k?e@e
146 @property
147 def is_valid(self) -> bool:
148 """Whether this node is valid (not destroyed).
150 Returns ``False`` after :meth:`destroy` has been called.
151 """
152 return as_intptr(self._h_node) != 0 2wd
154 def destroy(self) -> None:
155 """Destroy this node and remove all its edges from the parent graph.
157 After this call, :attr:`is_valid` returns ``False`` and the node
158 cannot be re-added to any graph. Safe to call on an
159 already-destroyed node (no-op).
160 """
161 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2ej3bYbMbwd
162 if node == NULL: 2ej3bYbMbwd
163 return 2wd
164 with nogil: 2ej3bYbMbwd
165 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2ej3bYbMbwd
166 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2ej3bYbMbwd
167 invalidate_graph_node(self._h_node) 2ej3bYbMbwd
169 @property
170 def pred(self) -> AdjacencySetProxy:
171 """A mutable set-like view of this node's predecessors."""
172 return AdjacencySetProxy(self, False) 2we:e/kJiNcOcPcoh]i^iGo_i`i{i|iHoIoJoKo}i~iajbjcjdjLoMoSkTkolUkVkpl+ccdQiLhDbwd
174 @pred.setter
175 def pred(self, value: Iterable[GraphNode]) -> None:
176 p = AdjacencySetProxy(self, False) 2MbLh
177 p.clear() 2MbLh
178 p.update(value) 2MbLh
180 @property
181 def succ(self) -> AdjacencySetProxy:
182 """A mutable set-like view of this node's successors."""
183 return AdjacencySetProxy(self, True) 2/kJi]i^i_i`i{i|i}i~iajbjcjdjWkXkqlYkZkrlYb=b5jSiQiLhDb6jwd7j
185 @succ.setter
186 def succ(self, value: Iterable[GraphNode]) -> None:
187 s = AdjacencySetProxy(self, True) 2JiLh
188 s.clear() 2JiLh
189 s.update(value) 2JiLh
191 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
192 """Add a kernel launch node depending on this node.
194 Parameters
195 ----------
196 config : LaunchConfig
197 Launch configuration (grid, block, shared memory, etc.)
198 kernel : Kernel
199 The kernel to launch.
200 *args
201 Kernel arguments.
203 Returns
204 -------
205 KernelNode
206 A new KernelNode representing the kernel launch.
207 """
208 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
210 def join(self, *nodes: GraphNode) -> EmptyNode:
211 """Create an empty node that depends on this node and all given nodes.
213 This is used to synchronize multiple branches of execution.
215 Parameters
216 ----------
217 *nodes : GraphNode
218 Additional nodes to depend on.
220 Returns
221 -------
222 EmptyNode
223 A new EmptyNode that depends on all input nodes.
224 """
225 return GN_join(self, nodes) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
227 def allocate(self, size_t size, *, device: Device | int | None = None,
228 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
229 peer_access: list[Device | int] | None = None) -> AllocNode:
230 """Add a memory allocation node depending on this node.
232 Parameters
233 ----------
234 size : int
235 Number of bytes to allocate.
236 device : int or Device, optional
237 The device on which to allocate memory. If None (default),
238 uses the current CUDA context's device.
239 memory_type : GraphMemoryType or str, optional
240 Type of memory to allocate. One of:
242 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory,
243 optimal for GPU kernels.
244 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from
245 both host and device. Useful for graphs containing host
246 callback nodes. Note: may not be supported on all
247 systems/drivers.
248 - ``GraphMemoryType.MANAGED``: Managed/unified memory that
249 automatically migrates between host and device. Useful for
250 mixed host/device access patterns.
252 peer_access : list of int or Device, optional
253 List of devices that should have read-write access to the
254 allocated memory. If None (default), only the allocating
255 device has access.
257 Returns
258 -------
259 AllocNode
260 A new AllocNode representing the allocation. Access the allocated
261 device pointer via the dptr property.
263 Notes
264 -----
265 IPC (inter-process communication) is not supported for graph
266 memory allocation nodes per CUDA documentation.
267 """
268 return GN_alloc(self, size, device, memory_type, peer_access) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
270 def deallocate(self, dptr: int) -> FreeNode:
271 """Add a memory free node depending on this node.
273 Parameters
274 ----------
275 dptr : int
276 Device pointer to free (typically from AllocNode.dptr).
278 Returns
279 -------
280 FreeNode
281 A new FreeNode representing the free operation.
282 """
283 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
285 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode:
286 """Add a memset node depending on this node.
288 Parameters
289 ----------
290 dst : int
291 Destination device pointer.
292 value : int or buffer-protocol object
293 Fill value. int for 1-byte fill (range [0, 256)),
294 or buffer-protocol object of 1, 2, or 4 bytes.
295 width : int
296 Width of the row in elements.
297 height : int, optional
298 Number of rows (default 1).
299 pitch : int, optional
300 Pitch of destination in bytes (default 0, unused if height is 1).
302 Returns
303 -------
304 MemsetNode
305 A new MemsetNode representing the memset operation.
306 """
307 cdef unsigned int val
308 cdef unsigned int elem_size
309 val, elem_size = _parse_fill_value(value) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c~hDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
310 return GN_memset(self, <cydriver.CUdeviceptr>dst, val, elem_size, width, height, pitch) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
312 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode:
313 """Add a memcpy node depending on this node.
315 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
316 auto-detected via the driver, so both device and pinned host
317 pointers are supported.
319 Parameters
320 ----------
321 dst : int
322 Destination pointer (device or pinned host).
323 src : int
324 Source pointer (device or pinned host).
325 size : int
326 Number of bytes to copy.
328 Returns
329 -------
330 MemcpyNode
331 A new MemcpyNode representing the copy operation.
332 """
333 return GN_memcpy(self, <cydriver.CUdeviceptr>dst, <cydriver.CUdeviceptr>src, size) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
335 def embed(self, child: GraphDefinition) -> ChildGraphNode:
336 """Add a child graph node depending on this node.
338 Embeds a clone of the given graph definition as a sub-graph node.
339 The child graph must not contain allocation, free, or conditional
340 nodes.
342 Parameters
343 ----------
344 child : GraphDefinition
345 The graph definition to embed (will be cloned).
347 Returns
348 -------
349 ChildGraphNode
350 A new ChildGraphNode representing the embedded sub-graph.
351 """
352 return GN_embed(self, <GraphDefinition>child) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
354 def record(self, event: Event) -> EventRecordNode:
355 """Add an event record node depending on this node.
357 Parameters
358 ----------
359 event : Event
360 The event to record.
362 Returns
363 -------
364 EventRecordNode
365 A new EventRecordNode representing the event record operation.
366 """
367 return GN_record_event(self, <Event>event) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
369 def wait(self, event: Event) -> EventWaitNode:
370 """Add an event wait node depending on this node.
372 Parameters
373 ----------
374 event : Event
375 The event to wait for.
377 Returns
378 -------
379 EventWaitNode
380 A new EventWaitNode representing the event wait operation.
381 """
382 return GN_wait_event(self, <Event>event) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
384 def callback(self, fn, *, user_data=None) -> object:
385 """Add a host callback node depending on this node.
387 The callback runs on the host CPU when the graph reaches this node.
388 Two modes are supported:
390 - **Python callable**: Pass any callable. The GIL is acquired
391 automatically. The callable must take no arguments; use closures
392 or ``functools.partial`` to bind state.
393 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance.
394 The function receives a single ``void*`` argument (the
395 ``user_data``). The caller must keep the ctypes wrapper alive
396 for the lifetime of the graph.
398 .. warning::
400 Callbacks must not call CUDA API functions. Doing so may
401 deadlock or corrupt driver state.
403 Parameters
404 ----------
405 fn : callable or ctypes function pointer
406 The callback function.
407 user_data : int or bytes-like, optional
408 Only for ctypes function pointers. If ``int``, passed as a raw
409 pointer (caller manages lifetime). If bytes-like, the data is
410 copied and its lifetime is tied to the graph.
412 Returns
413 -------
414 HostCallbackNode
415 A new HostCallbackNode representing the callback.
416 """
417 return GN_callback(self, fn, user_data) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
419 def if_then(self, condition: GraphCondition) -> IfNode:
420 """Add an if-conditional node depending on this node.
422 The body graph executes only when the condition evaluates to
423 a non-zero value at runtime.
425 Parameters
426 ----------
427 condition : GraphCondition
428 GraphCondition from :meth:`GraphDefinition.create_condition`.
430 Returns
431 -------
432 IfNode
433 A new IfNode with one branch accessible via ``.then``.
434 """
435 return _make_conditional_node( 2pd8g$g)g-g;g[gfj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh
436 self, condition,
437 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2pd8g$g)g-g;g[gfj_gsb=eTf7bXfnb1f5f9fcb%fydCdxb*fedCfDfEf.f#b=fl L ]f{fagegRbig2 mgqgugX yg@c_cgbCgRc^e_e`eGgVbKgd E OgtfSgbhxfWg0g}ecffhjh
439 def if_else(self, condition: GraphCondition) -> IfElseNode:
440 """Add an if-else conditional node depending on this node.
442 Two body graphs: the first executes when the condition is
443 non-zero, the second when it is zero.
445 Parameters
446 ----------
447 condition : GraphCondition
448 GraphCondition from :meth:`GraphDefinition.create_condition`.
450 Returns
451 -------
452 IfElseNode
453 A new IfElseNode with branches accessible via
454 ``.then`` and ``.else_``.
455 """
456 return _make_conditional_node( 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih
457 self, condition,
458 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 27g#g(g,g:g@g`gtb;eSf6bWfmb0f4f8fbb$fxdBdwb)fddAfBfCf-f!b;fk K [f`f~fdgQbhg1 lgpgtgW xg?c^cfbBgQc[e]e^eFgUbJgc D NgsfRgahwfVgZg|ebfehih
460 def while_loop(self, condition: GraphCondition) -> WhileNode:
461 """Add a while-loop conditional node depending on this node.
463 The body graph executes repeatedly while the condition
464 evaluates to a non-zero value.
466 Parameters
467 ----------
468 condition : GraphCondition
469 GraphCondition from :meth:`GraphDefinition.create_condition`.
471 Returns
472 -------
473 WhileNode
474 A new WhileNode with body accessible via ``.body``.
475 """
476 return _make_conditional_node( 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh
477 self, condition,
478 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2!g'g+g/g?g^g|gvb$d@eVf9bZfpb3f7f#feb(fAdEdzb,fgdBfEf:f%b@fn N _f}fcgFfggTbkg4 ogsgwgZ Ag]c{cibEgTc]e`eIgXbMgf G QgvfUg{edhzfYg2gafefhhlh
480 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
481 """Add a switch conditional node depending on this node.
483 The condition value selects which branch to execute. If the
484 value is out of range, no branch executes.
486 Parameters
487 ----------
488 condition : GraphCondition
489 GraphCondition from :meth:`GraphDefinition.create_condition`.
490 count : int
491 Number of switch cases (branches).
493 Returns
494 -------
495 SwitchNode
496 A new SwitchNode with branches accessible via ``.branches``.
497 """
498 return _make_conditional_node( 29g%g*g.g=g]ggj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh
499 self, condition,
500 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 29g%g*g.g=g]ggj{gub?eUf8bYfob2f6f!fdb'fzdDdyb+ffdAfDf/f$b?fm M ^f|fbgFffgSbjg3 ngrgvgY zg[c`chbDgSc[e_eHgWbLge F PgufTg{echyfXg1g~edfghkh
503cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil:
504 cdef EventHandle* p = <EventHandle*>ptr 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
505 del p 2SlTlUlVlWlXlYlZl0l1l2l3l4l1jpe2jqe3j5l6l7l8l9l!l#l$lflgl%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmhlildmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumjlklvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmllmlWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m
508cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil:
509 cdef KernelHandle* p = <KernelHandle*>ptr 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
510 del p 2;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnIhsbtbubvbgcmhKh@b[b3bYbMb=bhninjnknlnmnnnonflglpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnhlilKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7njlkl8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[nllml]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozo
513cdef inline ConditionalNode _make_conditional_node(
514 GraphNode pred,
515 GraphCondition condition,
516 cydriver.CUgraphConditionalNodeType cond_type,
517 unsigned int size,
518 type node_cls):
519 if not isinstance(condition, GraphCondition): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
520 raise TypeError(
521 f"condition must be a GraphCondition object (from "
522 f"GraphDefinition.create_condition()), got {type(condition).__name__}")
523 cdef cydriver.CUgraphNodeParams params
524 cdef cydriver.CUgraphNode new_node = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
526 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^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
527 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
528 params.conditional.handle = condition._c_handle 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
529 params.conditional.type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
530 params.conditional.size = size 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
532 cdef cydriver.CUcontext ctx = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
533 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
534 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
535 cdef cydriver.CUgraphNode* deps = NULL 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
536 cdef size_t num_deps = 0 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
538 if pred_node != NULL: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
539 deps = &pred_node
540 num_deps = 1
542 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
543 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
544 params.conditional.ctx = ctx 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
546 with nogil: 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
547 IF CUDA_CORE_BUILD_MAJOR >= 13:
548 HANDLE_RETURN(cydriver.cuGraphAddNode( 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^gfjgj_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
549 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
550 ELSE:
551 HANDLE_RETURN(cydriver.cuGraphAddNode(
552 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
554 cdef list branch_list = [] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
555 cdef unsigned int i
556 cdef cydriver.CUgraph bg
557 cdef GraphHandle h_branch
558 for i in range(size): 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
559 bg = params.conditional.phGraph_out[i] 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
560 h_branch = create_graph_handle_ref(bg, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
561 branch_list.append(GraphDefinition._from_handle(h_branch)) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
562 cdef tuple branches = tuple(branch_list) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
564 cdef ConditionalNode n = node_cls.__new__(node_cls) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
565 n._h_node = create_graph_node_handle(new_node, h_graph) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
566 n._condition = condition 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
567 n._cond_type = cond_type 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
568 n._branches = branches 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
570 return _registered(n) 2pd7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g^g_g`g{g|gsbtbubvb$d;e=e?e@eSfTfUfVf6b7b8b9bWfXfYfZfmbnbobpb0f1f2f3f4f5f6f7f8f9f!f#fbbcbdbeb$f%f'f(fxdydzdAdBdCdDdEdwbxbybzb)f*f+f,fddedfdgdAfBfCfDfEf-f.f/f:f!b#b$b%b;f=f?f@fk l m n K L M N [f]f^f_f`f{f|f}f~fagbgcgFfdgegfgggQbRbSbTbhgigjgkg1 2 3 4 lgmgngogpgqgrgsgtgugvgwgW X Y Z xgygzgAg?c@c[c]c^c_c`c{cfbgbhbibBgCgDgEgQcRcScTc[e]e^e_e`eFgGgHgIgUbVbWbXbJgKgLgMgc d e f D E F G NgOgPgQgsftfufvfRgSgTgUg{eahbhchdhwfxfyfzfVgWgXgYgZg0g1g2g|e}e~eafbfcfdfefehfhghhhihjhkhlh
572cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node):
573 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd
575 # Sentinel: virtual node to represent the graph entry point.
576 if node == NULL: 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd
577 n = GraphNode.__new__(GraphNode)
578 (<GraphNode>n)._h_node = h_node
579 return n
581 # Return a registered object or create and register a new one.
582 registered = _node_registry.get(<uintptr_t>h_node.get()) 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd
583 if registered is not None: 2pd2k3k4k5kJiNcOcPcLk8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+csbtbubvbgccd@b$d[b3bYbMb=bSiQiLhDbwd
584 return <GraphNode>registered 2pd2k3k4k5kJiNcOcPc8i9iyk!i#i$izkAkBk%iXi'i(i)i*iCkDk6k7k8k9k!k#k+i,iEk-i.i/i:iFkGkHkIk;iYi=i?i@i[iJkKk]i^i_i`i{i|i}i~iajbjcjdj$k%k'k(k)k*kSkTkUkVkWkXkYkZkWi+ccd[b3bYbMb=bSiQiLhDbwd
585 else:
586 return _registered(GN_create_impl(h_node)) 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb
589cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node):
590 cdef cydriver.CUgraphNodeType node_type
591 with nogil: 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb
592 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb
594 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2Lk8i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjsbtbubvbgc@b$dDb
595 return EmptyNode._create_impl(h_node) 2XiYi~i
596 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
597 return KernelNode._create_from_driver(h_node) 2Lksbtbubvbgc@bDb
598 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
599 return AllocNode._create_from_driver(h_node) 28i9i!i#i$i%iXi'i(i)i*i+i,i-i.i/i:i;iYi=i?i@i[i]i^i_i`i{i|i}iajbjcjdj
600 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
601 return FreeNode._create_from_driver(h_node)
602 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
603 return MemsetNode._create_from_driver(h_node) 2Db
604 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
605 return MemcpyNode._create_from_driver(h_node)
606 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
607 return ChildGraphNode._create_from_driver(h_node) 2@b
608 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
609 return EventRecordNode._create_from_driver(h_node)
610 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
611 return EventWaitNode._create_from_driver(h_node)
612 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
613 return HostCallbackNode._create_from_driver(h_node)
614 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
615 return ConditionalNode._create_from_driver(h_node) 2$d
616 else:
617 n = GraphNode.__new__(GraphNode)
618 (<GraphNode>n)._h_node = h_node
619 return n
622cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args):
623 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params
624 cdef cydriver.CUgraphNode new_node = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
625 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
626 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
627 cdef cydriver.CUgraphNode* deps = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
628 cdef size_t num_deps = 0 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
630 if pred_node != NULL: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
631 deps = &pred_node 2ohacbcccdcecfc[b3bYbMb=bDbnh
632 num_deps = 1 2ohacbcccdcecfc[b3bYbMb=bDbnh
634 node_params.kern = as_cu(ker._h_kernel) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
635 node_params.func = <cydriver.CUfunction>NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
636 node_params.gridDimX = conf.grid[0] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
637 node_params.gridDimY = conf.grid[1] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
638 node_params.gridDimZ = conf.grid[2] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
639 node_params.blockDimX = conf.block[0] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
640 node_params.blockDimY = conf.block[1] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
641 node_params.blockDimZ = conf.block[2] 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
642 node_params.sharedMemBytes = conf.shmem_size 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
643 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
644 node_params.extra = NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
645 node_params.ctx = <cydriver.CUcontext>NULL 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
647 with nogil: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
648 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
649 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
651 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
652 <cydriver.CUhostFn>_destroy_kernel_handle_copy)
654 cdef object kernel_args = ker_args.kernel_args 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
655 if kernel_args is not None: 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
656 Py_INCREF(kernel_args) 2mhJh[b3bYbMb=bDbnh
657 _attach_user_object(as_cu(h_graph), <void*>kernel_args, 2mhJh[b3bYbMb=bDbnh
658 <cydriver.CUhostFn>py_object_user_object_destroy)
660 return _registered(KernelNode._create_with_params( 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
661 create_graph_node_handle(new_node, h_graph), 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
662 conf.grid, conf.block, conf.shmem_size, 2xehiiijikiliohpiyeaczebcAeccBedcCeecDefcIhsbtbubvbgcmhJhKhcdBiCi@b[b3bYbMb=bDbnh=cHf%dNhEbhc'dPhicjc?bmbnbobpb(dRh)dTh*dVhH Bb+dXhR ,dZh-d1h.d4e5eKbse!b#bq 0 $b%b/d3hb u :d5h;d7h=d9h?d#hrb*b@d%h+b,b5b1 2 3 4 [d(h]d*h^d,hC qb_d.hI `d:h{d=hhd3d4dCbmdUbVbo Q WbXb|d@ha s }d]hid4g~d_hEeEijd6gae{hbe}h|cJf}cLfFeGiGeIi
663 ker._h_kernel))
666cdef inline EmptyNode GN_join(GraphNode self, tuple nodes):
667 cdef vector[cydriver.CUgraphNode] deps
668 cdef cydriver.CUgraphNode new_node = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
669 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
670 cdef GraphNode other
671 cdef cydriver.CUgraphNode* deps_ptr = NULL 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
672 cdef size_t num_deps = 0 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
673 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
675 if pred_node != NULL: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
676 deps.push_back(pred_node) 2qdrdsdtdudvd+c
677 for other in nodes: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
678 if as_cu((<GraphNode>other)._h_node) != NULL: 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
679 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
681 num_deps = deps.size() 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
682 if num_deps > 0: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
683 deps_ptr = deps.data() 2qddeg h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudnevdoe+c[b3bYbMb=b,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
685 with nogil: 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
686 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
687 &new_node, as_cu(h_graph), deps_ptr, num_deps))
689 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2qddeJig h i j NcOcPcee` fe{ rdgesdheie| je} ke~ leabtdmeudneejvdoeWi+c[b3bYbMb=b5jSiQiLh6j7j,cJ Fd5 6 Gd7 Hd8 Id9 Jd! KdH ]b^b_b.bbbcbBb# GbdbebLd$ z Md% Nd' q Od( b A B y k l m n r Pd) Qd* Rd+ Sd, S Wd- Xd. Yd/ Zd: ~cC 'b(b)b4bW X qbT AbY Z 0d; v 1d= 2d? o 5d@ a w x t c d e f p 6d[ adU 8d] tejbbdV !d^ #d_ .cO /cP uekbvelb
692cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device,
693 object memory_type, object peer_access):
694 cdef int device_id
695 cdef cydriver.CUdevice dev
697 if device is None: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
698 with nogil: 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
699 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
700 device_id = <int>dev 2we7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
701 else:
702 device_id = getattr(device, 'device_id', device) 2OiPi
704 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
705 cdef cydriver.CUgraphNode new_node = NULL 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
706 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
707 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
708 cdef cydriver.CUgraphNode* deps = NULL 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
709 cdef size_t num_deps = 0 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
711 if pred_node != NULL: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
712 deps = &pred_node 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
713 num_deps = 1 2weqhqdrhshMfthNfuhrdvhwhsdxhyhOfzhPfAhQfBhRfChtdDhEhudFhGhvdHh
715 cdef vector[cydriver.CUmemAccessDesc] access_descs
716 cdef int peer_id
717 cdef list peer_ids = [] 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
719 if peer_access is not None: 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
720 for peer_dev in peer_access:
721 peer_id = getattr(peer_dev, 'device_id', peer_dev)
722 peer_ids.append(peer_id)
723 access_descs.push_back(cydriver.CUmemAccessDesc_st(
724 cydriver.CUmemLocation_st(
725 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE,
726 peer_id
727 ),
728 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
729 ))
731 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
733 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
734 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
735 alloc_params.bytesize = size 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
737 if memory_type_str == "device": 2OiPiwe7iRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
738 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
739 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
740 alloc_params.poolProps.location.id = device_id 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
741 elif memory_type_str == "host": 27iMfNfOfPfQfRf
742 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
743 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
744 alloc_params.poolProps.location.id = 0
745 elif memory_type_str == "managed": 27iMfNfOfPfQfRf
746 IF CUDA_CORE_BUILD_MAJOR >= 13:
747 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2MfNfOfPfQfRf
748 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2MfNfOfPfQfRf
749 alloc_params.poolProps.location.id = device_id 2MfNfOfPfQfRf
750 ELSE:
751 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
752 else:
753 raise ValueError(f"Invalid memory_type: {memory_type_str!r}. " 27i
754 "Must be 'device', 'host', or 'managed'.")
756 if access_descs.size() > 0: 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
757 alloc_params.accessDescs = access_descs.data()
758 alloc_params.accessDescCount = access_descs.size()
760 with nogil: 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
761 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2OiPiweRicidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
762 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
764 return _registered(AllocNode._create_with_params( 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
765 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
766 device_id, memory_type_str, tuple(peer_ids))) 2OiPiwecidieiqhqdfiderhgi:effgfhfifg h i j Zb0b1b2bminioiNcOcPcshMfeeHeIejfac` UcVcWcXcthNffeJeKekfbc{ YcZc0c1cuhrdqigevhriwhsdsihexhtiyhOfieLeMelfcc| 2c3c4c5czhPfjeNeOemfdc} 6c7c8c9cAhQfkePeQenfec~ !c#c$c%cBhRfleReSeoffcab'c(c)c*cChtduimeDhviEhudwineFhxiGhvdyioeHhzi+c~hAipeqeGf,ckdJ -bMhFdTe5 lcEbUeVeWere6b7bhc6 mc8b9bOhGdXe7 ncQhHdYe8 ocShIdZe9 pcUhJd0e! qcKdH ]b^b_b.bbbcbBb# GbdbebWhLd1e$ rcR sctckcwbxbz NbybzbYhMd2e% uc0hNd3e' vcKbq 0 2hOd6e( wcb A B y k l m n u ObPbLbK L r M N 4hPd7e) xc6hQd8e* yc8hRd9e+ zc!hSd!e, AcrbTdUdVdldQbRb*bS `bSbTb$hWd#e- Bc'hXd$e. Cc)hYd%e/ Dc+hZd'e: Ec~cC 'b(b)b4bW X qbT AbY Z -h0d(e; FcI {b|b/bfbgbv Hbhbib/h1d)e= Gc;h2d*e? HcCbo Q ?h5d+e@ Ica w x t c d e f s IbJbFbD E p F G [h6d,e[ Jc3gad7dU }b^h8d-e] KcDitepfjb-c5gbd9dV ~b`h!d.e^ Lc|h#d/e_ McIf.cndO :bKf/codP ;bFiueqfkb:cHiverflb;c
769cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr):
770 cdef cydriver.CUgraphNode new_node = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
771 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
772 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
773 cdef cydriver.CUgraphNode* deps = NULL 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
774 cdef size_t num_deps = 0 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
776 if pred_node != NULL: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
777 deps = &pred_node 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
778 num_deps = 1 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
780 with nogil: 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
781 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfof0kkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
782 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
784 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2we:effgfhfifg h i j Zb0b1b2bjfkflfmfnfofkdTeWeXeYeZe0e_b1eR sctckcwbxbz Nbybzb2e3eKb6e7e8e9e!eVd#e$e%e'e)b(eI {b|b/bfbgbv Hbhbib)e*eCb+e,e7d-epf9d.e/endodqfrf
787cdef inline MemsetNode GN_memset(
788 GraphNode self, cydriver.CUdeviceptr c_dst,
789 unsigned int val, unsigned int elem_size,
790 size_t width, size_t height, size_t pitch):
791 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params
792 cdef cydriver.CUgraphNode new_node = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
793 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
794 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
795 cdef cydriver.CUgraphNode* deps = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
796 cdef size_t num_deps = 0 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
798 if pred_node != NULL: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
799 deps = &pred_node 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
800 num_deps = 1 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
802 cdef cydriver.CUcontext ctx = NULL 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
803 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
804 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
806 c_memset(&memset_params, 0, sizeof(memset_params)) 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
807 memset_params.dst = c_dst 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
808 memset_params.value = val 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
809 memset_params.elementSize = elem_size 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
810 memset_params.width = width 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
811 memset_params.height = height 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
812 memset_params.pitch = pitch 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
814 with nogil: 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
815 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
816 &new_node, as_cu(h_graph), deps, num_deps,
817 &memset_params, ctx))
819 return _registered(MemsetNode._create_with_params( 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
820 create_graph_node_handle(new_node, h_graph), c_dst, 2g h i j Zb0b1b2bUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*cDbwd-blcmcncocpcqcGbrcNbucvc0 wcu ObPbLbK L r M N xcyczcAc`bBcCcDcEcAbFcHbGcHcQ Ics IbJbFbD E p F G Jc}bKc-c~bLcMc:b;b:c;c
821 val, elem_size, width, height, pitch))
824cdef inline MemcpyNode GN_memcpy(
825 GraphNode self, cydriver.CUdeviceptr c_dst,
826 cydriver.CUdeviceptr c_src, size_t size):
827 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
828 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
829 cdef cydriver.CUresult ret
830 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
831 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
832 &dst_mem_type,
833 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
834 c_dst)
835 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
836 HANDLE_RETURN(ret)
837 ret = cydriver.cuPointerGetAttribute( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
838 &src_mem_type,
839 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
840 c_src)
841 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
842 HANDLE_RETURN(ret)
844 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
845 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
847 cdef cydriver.CUDA_MEMCPY3D params
848 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
850 params.srcMemoryType = c_src_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
851 params.dstMemoryType = c_dst_type 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
852 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
853 params.srcHost = <const void*><uintptr_t>c_src
854 else:
855 params.srcDevice = c_src 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
856 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
857 params.dstHost = <void*><uintptr_t>c_dst
858 else:
859 params.dstDevice = c_dst 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
860 params.WidthInBytes = size 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
861 params.Height = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
862 params.Depth = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
864 cdef cydriver.CUgraphNode new_node = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
865 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
866 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
867 cdef cydriver.CUgraphNode* deps = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
868 cdef size_t num_deps = 0 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
870 if pred_node != NULL: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
871 deps = &pred_node 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
872 num_deps = 1 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
874 cdef cydriver.CUcontext ctx = NULL 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
875 with nogil: 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
876 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
877 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
878 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
880 return _registered(MemcpyNode._create_with_params( 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
881 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2g h i j ` { | } ~ abJ 5 6 7 8 9 ! # $ z % ' q ( b A B y k l m n r ) * + , S - . / : T ; v = ? o @ a w x t c d e f p [ U ] jbV ^ _ O P kblb
882 c_dst_type, c_src_type))
885cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def):
886 cdef cydriver.CUgraphNode new_node = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
887 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
888 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
889 cdef cydriver.CUgraphNode* deps = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
890 cdef size_t num_deps = 0 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
892 if pred_node != NULL: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
893 deps = &pred_node
894 num_deps = 1
896 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
897 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
898 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
900 cdef cydriver.CUgraph embedded_graph = NULL 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
901 with nogil: 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
902 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
903 new_node, &embedded_graph))
905 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
907 return _registered(ChildGraphNode._create_with_params( 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
908 create_graph_node_handle(new_node, h_graph), h_embedded)) 2xeyezeAeBeCeDegc@b=c%dEb'dicjc?bmbnbobpb(d)d*dH +dR ,d-d.d/db u :d;d=d?drb@d+b,b5b1 2 3 4 [d]d^dC _dI `d{dhd|da s }did~dEejdaebe|c}cFeGe
911cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev):
912 cdef cydriver.CUgraphNode new_node = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
913 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
914 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
915 cdef cydriver.CUgraphNode* deps = NULL 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
916 cdef size_t num_deps = 0 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
918 if pred_node != NULL: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
919 deps = &pred_node 2HeJeLeNePeRepecd
920 num_deps = 1 2HeJeLeNePeRepecd
922 with nogil: 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
923 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
924 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
926 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
927 <cydriver.CUhostFn>_destroy_event_handle_copy)
929 return _registered(EventRecordNode._create_with_params( 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
930 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiHeJeLeNePeRe1jpe2jLiMicdZi8jUe!jic$j'j)j]b+jNiaixdydzdAdsc-j/j4e;jA Ob?j[j^j`jTd|j+b~jbkdk'bfkph}g?c@c[c]c{bhkjk3dlkw IbnkhjpkMkjjskuk3i5iOkQk
933cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev):
934 cdef cydriver.CUgraphNode new_node = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
935 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
936 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
937 cdef cydriver.CUgraphNode* deps = NULL 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
938 cdef size_t num_deps = 0 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
940 if pred_node != NULL: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
941 deps = &pred_node 2KiIeKeMeOeQeSeLiMiqe
942 num_deps = 1 2KiIeKeMeOeQeSeLiMiqe
944 with nogil: 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
945 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
946 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
948 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
949 <cydriver.CUhostFn>_destroy_event_handle_copy)
951 return _registered(EventWaitNode._create_with_params( 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
952 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2KiIeKeMeOeQeSeLiMiqe3j0i9jVe#jjc%j(j*j^b,jNibiBdCdDdEdtc.j:j5e=jB Pb@j]j_j{jUd}j,bakckek(bgkph~g^c_c`c{c|bikkk4dmkx JbokijqkNkkjtkvk4i6iPkRk
955cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data):
956 import ctypes as ct 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
958 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
959 cdef cydriver.CUgraphNode new_node = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
960 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
961 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
962 cdef cydriver.CUgraphNode* deps = NULL 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
963 cdef size_t num_deps = 0 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
965 if pred_node != NULL: 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
966 deps = &pred_node
967 num_deps = 1
969 _attach_host_callback_to_graph( 2Kj1kLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
970 as_cu(h_graph), fn, user_data,
971 &node_params.fn, &node_params.userData)
973 with nogil: 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
974 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
975 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
977 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
978 return _registered(HostCallbackNode._create_with_params( 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
979 create_graph_node_handle(new_node, h_graph), callable_obj, 2KjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j4jTiljremj?bnjojpj.bqjaibikcrjddedfdgdsjsetjy Lbujvjwjxjldyj5bzjAjBj4bCj}g~g/bDjQcRcScTcEjmdFjt FbGj1iHjrk2iIjJjUiViwkxk
980 node_params.fn, node_params.userData))