Coverage for cuda / core / _graph / _graphdef.pyx: 89.99%
799 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 01:07 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 01:07 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5"""
6Private module for explicit CUDA graph construction.
8This module provides GraphDef and a GraphNode class hierarchy for building CUDA
9graphs explicitly (as opposed to stream capture). Both approaches produce
10the same public Graph type for execution.
12GraphNode hierarchy:
13 GraphNode (base — also used for the internal entry point)
14 ├── EmptyNode (synchronization / join point)
15 ├── KernelNode (kernel launch)
16 ├── AllocNode (memory allocation, exposes dptr and bytesize)
17 ├── FreeNode (memory free, exposes dptr)
18 ├── MemsetNode (memory set, exposes dptr, value, element_size, etc.)
19 ├── MemcpyNode (memory copy, exposes dst, src, size)
20 ├── ChildGraphNode (embedded sub-graph)
21 ├── EventRecordNode (record an event)
22 ├── EventWaitNode (wait for an event)
23 ├── HostCallbackNode (host CPU callback)
24 └── ConditionalNode (conditional execution — base for reconstruction)
25 ├── IfNode (if-then conditional, 1 branch)
26 ├── IfElseNode (if-then-else conditional, 2 branches)
27 ├── WhileNode (while-loop conditional, 1 branch)
28 └── SwitchNode (switch conditional, N branches)
29"""
31from __future__ import annotations
33from cpython.ref cimport Py_INCREF
35from libc.stddef cimport size_t
36from libc.stdint cimport uintptr_t
37from libc.stdlib cimport malloc, free
38from libc.string cimport memset as c_memset, memcpy as c_memcpy
40from libcpp.vector cimport vector
42from cuda.bindings cimport cydriver
44from cuda.core._event cimport Event
45from cuda.core._kernel_arg_handler cimport ParamHolder
46from cuda.core._launch_config cimport LaunchConfig
47from cuda.core._module cimport Kernel
48from cuda.core._resource_handles cimport (
49 EventHandle,
50 GraphHandle,
51 KernelHandle,
52 GraphNodeHandle,
53 as_cu,
54 as_intptr,
55 as_py,
56 create_event_handle_ref,
57 create_graph_handle,
58 create_graph_handle_ref,
59 create_kernel_handle_ref,
60 create_graph_node_handle,
61 graph_node_get_graph,
62)
63from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
65from dataclasses import dataclass
67from cuda.core import Device
68from cuda.core._utils.cuda_utils import driver, handle_return
70__all__ = [
71 "Condition",
72 "GraphAllocOptions",
73 "GraphDef",
74 "GraphNode",
75 "EmptyNode",
76 "KernelNode",
77 "AllocNode",
78 "FreeNode",
79 "MemsetNode",
80 "MemcpyNode",
81 "ChildGraphNode",
82 "EventRecordNode",
83 "EventWaitNode",
84 "HostCallbackNode",
85 "ConditionalNode",
86 "IfNode",
87 "IfElseNode",
88 "WhileNode",
89 "SwitchNode",
90]
93cdef bint _has_cuGraphNodeGetParams = False
94cdef bint _version_checked = False
96cdef bint _check_node_get_params():
97 global _has_cuGraphNodeGetParams, _version_checked
98 if not _version_checked: 2ZcOkPkQkRkLc
99 ver = handle_return(driver.cuDriverGetVersion()) 2Lc
100 _has_cuGraphNodeGetParams = ver >= 13020 2Lc
101 _version_checked = True 2Lc
102 return _has_cuGraphNodeGetParams 2ZcOkPkQkRkLc
105cdef extern from "Python.h":
106 void _py_decref "Py_DECREF" (void*)
109cdef void _py_host_trampoline(void* data) noexcept with gil:
110 (<object>data)()
113cdef void _py_host_destructor(void* data) noexcept with gil:
114 _py_decref(data) 29p!p#p$p%p'p(p)p*p+p,p-p.pai/p:p;p=p/m?p@p[p]p^p:m;m_p`p{p|p}p~paq=mbqcqdqeqfqgqhqiqjq?mkqlqmqnqoq@m[mpqqqrqsqtquqvq]mwqxqyqzqAqBqCqDqEqFqGqHqIqJq
117cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil:
118 cdef EventHandle* p = <EventHandle*>ptr 2|m}m~manbncndnenfngnhninjn'jId(jJd)jknlnmnnnonpnqnrnimjmsntnunvnwnxnynznAnBnCn:mDnEnFnGn;mHnInJnKnLnMnNnOnPnQnkmlmRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nmmnm9n!n#n$n%n'n(n)n*n+n,n@m-n.n/n:n[m;n=n?n@n[n]n^n_n`n{nompm|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyo
119 del p 2|m}m~manbncndnenfngnhninjn'jId(jJd)jknlnmnnnonpnqnrnimjmsntnunvnwnxnynznAnBnCn:mDnEnFnGn;mHnInJnKnLnMnNnOnPnQnkmlmRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nmmnm9n!n#n$n%n'n(n)n*n+n,n@m-n.n/n:n[m;n=n?n@n[n]n^n_n`n{nompm|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyo
122cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil:
123 cdef KernelHandle* p = <KernelHandle*>ptr 2zoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoX V Y Z )bBhxhLbToUoVoWoXoYoZo0o1oimjm/m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.okmlm/o=m:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpmmnm?mipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpompmCp]mDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p
124 del p 2zoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoX V Y Z )bBhxhLbToUoVoWoXoYoZo0o1oimjm/m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.okmlm/o=m:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpmmnm?mipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpompmCp]mDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p
127cdef void _attach_user_object(
128 cydriver.CUgraph graph, void* ptr,
129 cydriver.CUhostFn destroy) except *:
130 """Create a CUDA user object and transfer ownership to the graph.
132 On success the graph owns the resource (via MOVE semantics).
133 On failure the destroy callback is invoked to clean up ptr,
134 then a CUDAError is raised — callers need no try/except.
135 """
136 cdef cydriver.CUuserObject user_obj = NULL 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
137 cdef cydriver.CUresult ret
138 with nogil: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
139 ret = cydriver.cuUserObjectCreate( 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
140 &user_obj, ptr, destroy, 1,
141 cydriver.CU_USER_OBJECT_NO_DESTRUCTOR_SYNC)
142 if ret == cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
143 ret = cydriver.cuGraphRetainUserObject( 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
144 graph, user_obj, 1, cydriver.CU_GRAPH_USER_OBJECT_MOVE)
145 if ret != cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
146 cydriver.cuUserObjectRelease(user_obj, 1)
147 if ret != cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h
148 if user_obj == NULL:
149 destroy(ptr)
150 HANDLE_RETURN(ret)
153cdef class Condition:
154 """Wraps a CUgraphConditionalHandle.
156 Created by :meth:`GraphDef.create_condition` and passed to
157 conditional-node builder methods (``if_cond``, ``if_else``,
158 ``while_loop``, ``switch``). The underlying value is set at
159 runtime by device code via ``cudaGraphSetConditional``.
160 """
162 def __repr__(self) -> str:
163 return f"<Condition handle=0x{<unsigned long long>self._c_handle:x}>" 2!k
165 def __eq__(self, other) -> bool:
166 if not isinstance(other, Condition): 2FldlKlGlWk0kUftcXcbicirdTfVfWfNeP @bUkXfYf1k2k3kXk4k5k6k7k8kYkZk
167 return NotImplemented 2Wk0kUftcXcbicirdTfVfWfNeP @bUkXfYf1k2k3kXk4k5k6k7k
168 return self._c_handle == (<Condition>other)._c_handle 2FldlKlGlWk8kYkZk
170 def __hash__(self) -> int:
171 return hash(<unsigned long long>self._c_handle) 2#k$k6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k'k(k9k)k*k+k,k-k.k/kYkZk
173 @property
174 def handle(self) -> int:
175 """The raw CUgraphConditionalHandle as an int."""
176 return <unsigned long long>self._c_handle 2Wk
179cdef ConditionalNode _make_conditional_node(
180 GraphNode pred,
181 Condition condition,
182 cydriver.CUgraphConditionalNodeType cond_type,
183 unsigned int size,
184 type node_cls):
185 if not isinstance(condition, Condition): 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
186 raise TypeError(
187 f"condition must be a Condition object (from "
188 f"GraphDef.create_condition()), got {type(condition).__name__}")
189 cdef cydriver.CUgraphNodeParams params
190 cdef cydriver.CUgraphNode new_node = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
192 c_memset(¶ms, 0, sizeof(params)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
193 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
194 params.conditional.handle = condition._c_handle 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
195 params.conditional.type = cond_type 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
196 params.conditional.size = size 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
198 cdef cydriver.CUcontext ctx = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
199 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
200 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
201 cdef cydriver.CUgraphNode* deps = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
202 cdef size_t num_deps = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
204 if pred_node != NULL: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
205 deps = &pred_node
206 num_deps = 1
208 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
209 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
210 params.conditional.ctx = ctx 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
212 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
213 IF CUDA_CORE_BUILD_MAJOR >= 13:
214 HANDLE_RETURN(cydriver.cuGraphAddNode( 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
215 &new_node, as_cu(h_graph), deps, NULL, num_deps, ¶ms))
216 ELSE:
217 HANDLE_RETURN(cydriver.cuGraphAddNode(
218 &new_node, as_cu(h_graph), deps, num_deps, ¶ms))
220 # cuGraphAddNode sets phGraph_out to an internal array of body
221 # graphs (it replaces the pointer, not writing into a caller array).
222 cdef list branch_list = [] 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
223 cdef unsigned int i
224 cdef cydriver.CUgraph bg
225 cdef GraphHandle h_branch
226 for i in range(size): 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
227 bg = params.conditional.phGraph_out[i] 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
228 h_branch = create_graph_handle_ref(bg, h_graph) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
229 branch_list.append(GraphDef._from_handle(h_branch)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
230 cdef tuple branches = tuple(branch_list) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
232 cdef ConditionalNode n = node_cls.__new__(node_cls) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
233 n._h_node = create_graph_node_handle(new_node, h_graph) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
234 n._condition = condition 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
235 n._cond_type = cond_type 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
236 n._branches = branches 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
238 pred._succ_cache = None 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
239 return n 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
242@dataclass
243class GraphAllocOptions:
244 """Options for graph memory allocation nodes.
246 Attributes
247 ----------
248 device : int or Device, optional
249 The device on which to allocate memory. If None (default),
250 uses the current CUDA context's device.
251 memory_type : str, optional
252 Type of memory to allocate. One of:
254 - ``"device"`` (default): Pinned device memory, optimal for GPU kernels.
255 - ``"host"``: Pinned host memory, accessible from both host and device.
256 Useful for graphs containing host callback nodes. Note: may not be
257 supported on all systems/drivers.
258 - ``"managed"``: Managed/unified memory that automatically migrates
259 between host and device. Useful for mixed host/device access patterns.
261 peer_access : list of int or Device, optional
262 List of devices that should have read-write access to the
263 allocated memory. If None (default), only the allocating
264 device has access.
266 Notes
267 -----
268 - IPC (inter-process communication) is not supported for graph
269 memory allocation nodes per CUDA documentation.
270 - The allocation uses the device's default memory pool.
271 """
273 device: int | Device | None = None
274 memory_type: str = "device"
275 peer_access: list | None = None
278cdef class GraphDef:
279 """Represents a CUDA graph definition (CUgraph).
281 A GraphDef is used to construct a graph explicitly by adding nodes
282 and specifying dependencies. Once construction is complete, call
283 instantiate() to obtain an executable Graph.
284 """
286 def __init__(self):
287 """Create a new empty graph definition."""
288 cdef cydriver.CUgraph graph = NULL 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh
289 with nogil: 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh
290 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh
291 self._h_graph = create_graph_handle(graph) 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh
293 @staticmethod
294 cdef GraphDef _from_handle(GraphHandle h_graph):
295 """Create a GraphDef from an existing GraphHandle (internal use)."""
296 cdef GraphDef g = GraphDef.__new__(GraphDef) 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
297 g._h_graph = h_graph 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
298 return g 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh
300 def __repr__(self) -> str:
301 return f"<GraphDef handle=0x{as_intptr(self._h_graph):x}>" 2yhei.l
303 def __eq__(self, other) -> bool:
304 if not isinstance(other, GraphDef): 29j0l1l2l3l4l5lHlRlSlTlUlfizdXkce!j#j0ediZf0fAh? Vc{k1f2fVlWlXlYlZlLlMl
305 return NotImplemented 2HlRlSlTlUlfizdXkce!j#j0ediZf0fAh? Vc{k1f2fVlWlXlYl
306 return as_intptr(self._h_graph) == as_intptr((<GraphDef>other)._h_graph) 29j0l1l2l3l4l5lHlZlLlMl
308 def __hash__(self) -> int:
309 return hash(as_intptr(self._h_graph)) 2#l$l%l'l(lriCd9kfe*j+j$epi#f$fDh] Ycbl%f'f)l*l+l,l-l/l:lLlMl
311 @property
312 def _entry(self) -> GraphNode:
313 """Return the internal entry-point GraphNode (no dependencies)."""
314 cdef GraphNode n = GraphNode.__new__(GraphNode) 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh
315 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh
316 return n 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh
318 def alloc(self, size_t size, options: GraphAllocOptions | None = None) -> AllocNode:
319 """Add an entry-point memory allocation node (no dependencies).
321 See :meth:`GraphNode.alloc` for full documentation.
322 """
323 return self._entry.alloc(size, options) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
325 def free(self, dptr) -> FreeNode:
326 """Add an entry-point memory free node (no dependencies).
328 See :meth:`GraphNode.free` for full documentation.
329 """
330 return self._entry.free(dptr) 2:k
332 def memset(self, dst, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode:
333 """Add an entry-point memset node (no dependencies).
335 See :meth:`GraphNode.memset` for full documentation.
336 """
337 return self._entry.memset(dst, value, width, height, pitch)
339 def launch(self, config, kernel, *args) -> KernelNode:
340 """Add an entry-point kernel launch node (no dependencies).
342 See :meth:`GraphNode.launch` for full documentation.
343 """
344 return self._entry.launch(config, kernel, *args) 2Bd]h^h_h`h{h0cAi9d!d#d$d%d'dyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
346 def join(self, *nodes) -> EmptyNode:
347 """Create an empty node that depends on all given nodes.
349 Parameters
350 ----------
351 *nodes : GraphNode
352 Nodes to merge.
354 Returns
355 -------
356 EmptyNode
357 A new EmptyNode that depends on all input nodes.
358 """
359 return self._entry.join(*nodes) 2Oek l m n %b'b(bPewbQexbReSeTeybUezbVeAbWeBbXeYeZe3jFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
361 def memcpy(self, dst, src, size_t size) -> MemcpyNode:
362 """Add an entry-point memcpy node (no dependencies).
364 See :meth:`GraphNode.memcpy` for full documentation.
365 """
366 return self._entry.memcpy(dst, src, size)
368 def embed(self, child: GraphDef) -> ChildGraphNode:
369 """Add an entry-point child graph node (no dependencies).
371 See :meth:`GraphNode.embed` for full documentation.
372 """
373 return self._entry.embed(child) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
375 def record_event(self, event: Event) -> EventRecordNode:
376 """Add an entry-point event record node (no dependencies).
378 See :meth:`GraphNode.record_event` for full documentation.
379 """
380 return self._entry.record_event(event) 2.h'j(jJhzhOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
382 def wait_event(self, event: Event) -> EventWaitNode:
383 """Add an entry-point event wait node (no dependencies).
385 See :meth:`GraphNode.wait_event` for full documentation.
386 """
387 return self._entry.wait_event(event) 2)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
389 def callback(self, fn, *, user_data=None) -> HostCallbackNode:
390 """Add an entry-point host callback node (no dependencies).
392 See :meth:`GraphNode.callback` for full documentation.
393 """
394 return self._entry.callback(fn, user_data=user_data) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
396 def create_condition(self, default_value: int | None = None) -> Condition:
397 """Create a condition variable for use with conditional nodes.
399 The returned :class:`Condition` object is passed to conditional-node
400 builder methods. Its value is controlled at runtime by device code
401 via ``cudaGraphSetConditional``.
403 Parameters
404 ----------
405 default_value : int, optional
406 The default value to assign to the condition.
407 If None, no default is assigned.
409 Returns
410 -------
411 Condition
412 A condition variable for controlling conditional execution.
413 """
414 cdef cydriver.CUgraphConditionalHandle c_handle
415 cdef unsigned int flags = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
416 cdef unsigned int default_val = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
418 if default_value is not None: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
419 default_val = <unsigned int>default_value 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
420 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
422 cdef cydriver.CUcontext ctx = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
423 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
424 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
425 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
426 &c_handle, as_cu(self._h_graph), ctx, default_val, flags))
428 cdef Condition cond = Condition.__new__(Condition) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
429 cond._c_handle = c_handle 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
430 return cond 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh
432 def if_cond(self, condition: Condition) -> IfNode:
433 """Add an entry-point if-conditional node (no dependencies).
435 See :meth:`GraphNode.if_cond` for full documentation.
436 """
437 return self._entry.if_cond(condition) 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth
439 def if_else(self, condition: Condition) -> IfElseNode:
440 """Add an entry-point if-else conditional node (no dependencies).
442 See :meth:`GraphNode.if_else` for full documentation.
443 """
444 return self._entry.if_else(condition) 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh
446 def while_loop(self, condition: Condition) -> WhileNode:
447 """Add an entry-point while-loop conditional node (no dependencies).
449 See :meth:`GraphNode.while_loop` for full documentation.
450 """
451 return self._entry.while_loop(condition) 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh
453 def switch(self, condition: Condition, unsigned int count) -> SwitchNode:
454 """Add an entry-point switch conditional node (no dependencies).
456 See :meth:`GraphNode.switch` for full documentation.
457 """
458 return self._entry.switch(condition, count) 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh
460 def instantiate(self, options=None):
461 """Instantiate the graph definition into an executable Graph.
463 Parameters
464 ----------
465 options : :obj:`~_graph.GraphCompleteOptions`, optional
466 Customizable dataclass for graph instantiation options.
468 Returns
469 -------
470 Graph
471 An executable graph that can be launched on a stream.
472 """
473 from cuda.core._graph import _instantiate_graph 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai
475 return _instantiate_graph( 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai
476 driver.CUgraph(as_intptr(self._h_graph)), options) 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai
478 def debug_dot_print(self, path: str, options=None) -> None:
479 """Write a GraphViz DOT representation of the graph to a file.
481 Parameters
482 ----------
483 path : str
484 File path for the DOT output.
485 options : GraphDebugPrintOptions, optional
486 Customizable options for the debug print.
487 """
488 from cuda.core._graph import GraphDebugPrintOptions 2sibj|h
490 cdef unsigned int flags = 0 2sibj|h
491 if options is not None: 2sibj|h
492 if not isinstance(options, GraphDebugPrintOptions): 2bj|h
493 raise TypeError("options must be a GraphDebugPrintOptions instance") 2bj
494 flags = options._to_flags() 2|h
496 cdef bytes path_bytes = path.encode('utf-8') 2si|h
497 cdef const char* c_path = path_bytes 2si|h
498 with nogil: 2si|h
499 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2si|h
501 def nodes(self) -> tuple:
502 """Return all nodes in the graph.
504 Returns
505 -------
506 tuple of GraphNode
507 All nodes in the graph.
508 """
509 cdef size_t num_nodes = 0 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc
511 with nogil: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc
512 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), NULL, &num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc
514 if num_nodes == 0: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc
515 return () 2;lqfnfrfsf
517 cdef vector[cydriver.CUgraphNode] nodes_vec
518 nodes_vec.resize(num_nodes) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc
519 with nogil: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc
520 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc
522 return tuple(GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc
524 def edges(self) -> tuple:
525 """Return all edges in the graph as (from_node, to_node) pairs.
527 Returns
528 -------
529 tuple of tuple
530 Each element is a (from_node, to_node) pair representing
531 a dependency edge in the graph.
532 """
533 cdef size_t num_edges = 0 2GjkiPl=lliHjQl
535 with nogil: 2GjkiPl=lliHjQl
536 IF CUDA_CORE_BUILD_MAJOR >= 13:
537 HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, NULL, &num_edges)) 2GjkiPl=lliHjQl
538 ELSE:
539 HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, &num_edges))
541 if num_edges == 0: 2GjkiPl=lliHjQl
542 return () 2Pl=lQl
544 cdef vector[cydriver.CUgraphNode] from_nodes
545 cdef vector[cydriver.CUgraphNode] to_nodes
546 from_nodes.resize(num_edges) 2GjkiliHj
547 to_nodes.resize(num_edges) 2GjkiliHj
548 with nogil: 2GjkiliHj
549 IF CUDA_CORE_BUILD_MAJOR >= 13:
550 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2GjkiliHj
551 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), NULL, &num_edges))
552 ELSE:
553 HANDLE_RETURN(cydriver.cuGraphGetEdges(
554 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), &num_edges))
556 return tuple( 2GjkiliHj
557 (GraphNode._create(self._h_graph, from_nodes[i]), 2GjkiliHj
558 GraphNode._create(self._h_graph, to_nodes[i])) 2GjkiliHj
559 for i in range(num_edges) 2GjkiliHj
560 )
562 @property
563 def handle(self) -> int:
564 """Return the underlying CUgraph handle."""
565 return as_py(self._h_graph) 2KqJh+hHl
568cdef class GraphNode:
569 """Base class for all graph nodes.
571 Nodes are created by calling builder methods on GraphDef (for
572 entry-point nodes with no dependencies) or on other Nodes (for
573 nodes that depend on a predecessor).
574 """
576 @staticmethod
577 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node):
578 """Factory: dispatch to the right subclass based on node type."""
579 if node == NULL: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b
580 n = GraphNode.__new__(GraphNode)
581 (<GraphNode>n)._h_node = create_graph_node_handle(node, h_graph)
582 return n
584 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b
585 cdef cydriver.CUgraphNodeType node_type
586 with nogil: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b
587 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b
589 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b
590 return EmptyNode._create_impl(h_node) 2kilipf$j%jNj3f4f.fEjFj-hMk3j
591 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL:
592 return KernelNode._create_from_driver(h_node) 20cHk)fEh,dX V Y Z )b4bLb
593 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC:
594 return AllocNode._create_from_driver(h_node) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
595 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE:
596 return FreeNode._create_from_driver(h_node) 23bhiti%e
597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET:
598 return MemsetNode._create_from_driver(h_node) 2*f+f,f-fFhGhHhIh-d.d/d:d
599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY:
600 return MemcpyNode._create_from_driver(h_node) 2pf3f.f
601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH:
602 return ChildGraphNode._create_from_driver(h_node) 29jNkLb
603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD:
604 return EventRecordNode._create_from_driver(h_node) 2}hii3e
605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT:
606 return EventWaitNode._create_from_driver(h_node) 2~hji4e
607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST:
608 return HostCallbackNode._create_from_driver(h_node) 2,jzkCk
609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL:
610 return ConditionalNode._create_from_driver(h_node) 2ZcOkPkQkRkLc
611 else:
612 n = GraphNode.__new__(GraphNode)
613 (<GraphNode>n)._h_node = h_node
614 return n
616 def __repr__(self) -> str:
617 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2cl
618 if node == NULL: 2cl
619 return "<GraphNode entry>" 2cl
620 return f"<GraphNode handle=0x{<uintptr_t>node:x}>"
622 def __eq__(self, other) -> bool:
623 if not isinstance(other, GraphNode): 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
624 return NotImplemented 2(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e?iWdBefkgkdfMiGgHgXhkb'colIgJgUftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg]iZdEelkmkgfPiSgTg0hnb*crlUgVgfizdce!j#j0ediZf0fAh? Vc{k1f2f^i0dFenkokhfQiWgXg1hob+cslYgZg_i1dGepkqkifRi0g1g2hpb,ctl2g3g`i2dHerkskjfSi4g5g3hqb-cul6g7g{i3dJetkukkfTi8g9g4hrb.cvl!g#g
625 cdef GraphNode o = <GraphNode>other 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
626 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
627 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
628 return (as_intptr(self._h_node) == as_intptr(o._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
629 and as_intptr(self_graph) == as_intptr(other_graph)) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
631 def __hash__(self) -> int:
632 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2GjkiPlliHjQl%b'b(bZjEj0jFj1j2juivi|kwixi}kyi-h~kMkzial2b(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
633 return hash((as_intptr(self._h_node), as_intptr(g))) 2GjkiPlliHjQl%b'b(bZjEj0jFj1j2juivi|kwixi}kyi-h~kMkzial2b(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e
635 @property
636 def type(self):
637 """Return the CUDA graph node type.
639 Returns
640 -------
641 CUgraphNodeType or None
642 The node type enum value, or None for the entry node.
643 """
644 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2@k?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm
645 if node == NULL: 2@k?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm
646 return None 2@k
647 cdef cydriver.CUgraphNodeType node_type
648 with nogil: 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm
649 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm
650 return driver.CUgraphNodeType(<int>node_type) 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm
652 @property
653 def graph(self) -> GraphDef:
654 """Return the GraphDef this node belongs to."""
655 return GraphDef._from_handle(graph_node_get_graph(self._h_node)) 20l1l2l3l4l5l
657 @property
658 def handle(self) -> int | None:
659 """Return the underlying CUgraphNode handle as an int.
661 Returns None for the entry node.
662 """
663 return as_py(self._h_node) 2(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e
665 @property
666 def pred(self) -> tuple:
667 """Return the predecessor nodes (dependencies) of this node.
669 Results are cached since a node's dependencies are immutable
670 once created.
672 Returns
673 -------
674 tuple of GraphNode
675 The nodes that this node depends on.
676 """
677 if self._pred_cache is not None: 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
678 return self._pred_cache 20c
680 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
681 if node == NULL: 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
682 self._pred_cache = () 2@k
683 return self._pred_cache 2@k
685 cdef size_t num_deps = 0 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
687 with nogil: 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
688 IF CUDA_CORE_BUILD_MAJOR >= 13:
689 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, NULL, NULL, &num_deps)) 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
690 ELSE:
691 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, NULL, &num_deps))
693 if num_deps == 0: 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b
694 self._pred_cache = () 2ylzlAlBlClDlEluivi|kwixi}k
695 return self._pred_cache 2ylzlAlBlClDlEluivi|kwixi}k
697 cdef vector[cydriver.CUgraphNode] deps
698 deps.resize(num_deps) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
699 with nogil: 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
700 IF CUDA_CORE_BUILD_MAJOR >= 13:
701 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, deps.data(), NULL, &num_deps)) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
702 ELSE:
703 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, deps.data(), &num_deps))
705 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
706 self._pred_cache = tuple(GraphNode._create(h_graph, deps[i]) for i in range(num_deps)) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
707 return self._pred_cache 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b
709 @property
710 def succ(self) -> tuple:
711 """Return the successor nodes (dependents) of this node.
713 Results are cached and automatically invalidated when new
714 dependent nodes are added via builder methods.
716 Returns
717 -------
718 tuple of GraphNode
719 The nodes that depend on this node.
720 """
721 if self._succ_cache is not None: 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
722 return self._succ_cache
724 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
725 if node == NULL: 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
726 self._succ_cache = () 2@k
727 return self._succ_cache 2@k
729 cdef size_t num_deps = 0 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
731 with nogil: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
732 IF CUDA_CORE_BUILD_MAJOR >= 13:
733 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, NULL, NULL, &num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
734 ELSE:
735 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, NULL, &num_deps))
737 if num_deps == 0: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial
738 self._succ_cache = () 2yi-h~kMkzial
739 return self._succ_cache 2yi-h~kMkzial
741 cdef vector[cydriver.CUgraphNode] deps
742 deps.resize(num_deps) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
743 with nogil: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
744 IF CUDA_CORE_BUILD_MAJOR >= 13:
745 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, deps.data(), NULL, &num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
746 ELSE:
747 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, deps.data(), &num_deps))
749 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
750 self._succ_cache = tuple(GraphNode._create(h_graph, deps[i]) for i in range(num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
751 return self._succ_cache 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi
753 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
754 """Add a kernel launch node depending on this node.
756 Parameters
757 ----------
758 config : LaunchConfig
759 Launch configuration (grid, block, shared memory, etc.)
760 kernel : Kernel
761 The kernel to launch.
762 *args
763 Kernel arguments.
765 Returns
766 -------
767 KernelNode
768 A new KernelNode representing the kernel launch.
769 """
770 cdef LaunchConfig conf = config 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
771 cdef Kernel ker = <Kernel>kernel 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
772 cdef ParamHolder ker_args = ParamHolder(args) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
774 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params
775 cdef cydriver.CUgraphNode new_node = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
776 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
777 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
778 cdef cydriver.CUgraphNode* deps = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
779 cdef size_t num_deps = 0 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
781 if pred_node != NULL: 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
782 deps = &pred_node 20cmcncocpcqcrc
783 num_deps = 1 20cmcncocpcqcrc
785 node_params.kern = as_cu(ker._h_kernel) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
786 node_params.func = <cydriver.CUfunction>NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
787 node_params.gridDimX = conf.grid[0] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
788 node_params.gridDimY = conf.grid[1] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
789 node_params.gridDimZ = conf.grid[2] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
790 node_params.blockDimX = conf.block[0] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
791 node_params.blockDimY = conf.block[1] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
792 node_params.blockDimZ = conf.block[2] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
793 node_params.sharedMemBytes = conf.shmem_size 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
794 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
795 node_params.extra = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
796 node_params.ctx = <cydriver.CUcontext>NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
798 with nogil: 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
799 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
800 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
802 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
803 <cydriver.CUhostFn>_destroy_kernel_handle_copy)
805 self._succ_cache = None 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
806 return KernelNode._create_with_params( 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
807 create_graph_node_handle(new_node, h_graph), 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
808 conf.grid, conf.block, conf.shmem_size, 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
809 ker._h_kernel)
811 def join(self, *nodes: GraphNode) -> EmptyNode:
812 """Create an empty node that depends on this node and all given nodes.
814 This is used to synchronize multiple branches of execution.
816 Parameters
817 ----------
818 *nodes : GraphNode
819 Additional nodes to depend on.
821 Returns
822 -------
823 EmptyNode
824 A new EmptyNode that depends on all input nodes.
825 """
826 cdef vector[cydriver.CUgraphNode] deps
827 cdef cydriver.CUgraphNode new_node = NULL 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
828 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
829 cdef GraphNode other
830 cdef cydriver.CUgraphNode* deps_ptr = NULL 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
831 cdef size_t num_deps = 0 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
832 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
834 if pred_node != NULL: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
835 deps.push_back(pred_node) 2iejekelemene2b
836 for other in nodes: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
837 if as_cu((<GraphNode>other)._h_node) != NULL: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
838 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
840 num_deps = deps.size() 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
841 if num_deps > 0: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
842 deps_ptr = deps.data() 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
844 with nogil: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
845 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
846 &new_node, as_cu(h_graph), deps_ptr, num_deps))
848 self._succ_cache = None 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
849 for other in nodes: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
850 (<GraphNode>other)._succ_cache = None 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
851 return EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph)) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
853 def alloc(self, size_t size, options: GraphAllocOptions | None = None) -> AllocNode:
854 """Add a memory allocation node depending on this node.
856 Parameters
857 ----------
858 size : int
859 Number of bytes to allocate.
860 options : GraphAllocOptions, optional
861 Allocation options. If None, allocates on the current device.
863 Returns
864 -------
865 AllocNode
866 A new AllocNode representing the allocation. Access the allocated
867 device pointer via the dptr property.
868 """
869 cdef int device_id
870 cdef cydriver.CUdevice dev
872 if options is None or options.device is None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
873 with nogil: 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
874 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
875 device_id = <int>dev 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
876 else:
877 device_id = getattr(options.device, 'device_id', options.device) 2WjXj
879 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params
880 cdef cydriver.CUgraphNode new_node = NULL 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
881 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
882 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
883 cdef cydriver.CUgraphNode* deps = NULL 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
884 cdef size_t num_deps = 0 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
886 if pred_node != NULL: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
887 deps = &pred_node 23bWiieXiYi9hZi!h0ije1i2ike3i4i#h5i$h6i%h7i'h8ile9i!ime#i$ine%i
888 num_deps = 1 23bWiieXiYi9hZi!h0ije1i2ike3i4i#h5i$h6i%h7i'h8ile9i!ime#i$ine%i
890 cdef vector[cydriver.CUmemAccessDesc] access_descs
891 cdef int peer_id
892 cdef list peer_ids = [] 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
894 if options is not None and options.peer_access is not None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
895 for peer_dev in options.peer_access:
896 peer_id = getattr(peer_dev, 'device_id', peer_dev)
897 peer_ids.append(peer_id)
898 access_descs.push_back(cydriver.CUmemAccessDesc_st(
899 cydriver.CUmemLocation_st(
900 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE,
901 peer_id
902 ),
903 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE
904 ))
906 cdef str memory_type = "device" 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
907 if options is not None and options.memory_type is not None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
908 memory_type = options.memory_type 2WjXjTk9h!h#h$h%h'h
910 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
911 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
912 alloc_params.bytesize = size 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
914 if memory_type == "device": 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
915 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
916 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
917 alloc_params.poolProps.location.id = device_id 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
918 elif memory_type == "host": 2Tk9h!h#h$h%h'h
919 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED
920 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST
921 alloc_params.poolProps.location.id = 0
922 elif memory_type == "managed": 2Tk9h!h#h$h%h'h
923 IF CUDA_CORE_BUILD_MAJOR >= 13:
924 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 29h!h#h$h%h'h
925 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 29h!h#h$h%h'h
926 alloc_params.poolProps.location.id = device_id 29h!h#h$h%h'h
927 ELSE:
928 raise ValueError("memory_type='managed' requires CUDA 13.0 or later")
929 else:
930 raise ValueError(f"Invalid memory_type: {memory_type!r}. " 2Tk
931 "Must be 'device', 'host', or 'managed'.")
933 if access_descs.size() > 0: 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
934 alloc_params.accessDescs = access_descs.data()
935 alloc_params.accessDescCount = access_descs.size()
937 with nogil: 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
938 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
939 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params))
941 self._succ_cache = None 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
942 return AllocNode._create_with_params( 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
943 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
944 device_id, memory_type, tuple(peer_ids)) 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
946 def free(self, dptr: int) -> FreeNode:
947 """Add a memory free node depending on this node.
949 Parameters
950 ----------
951 dptr : int
952 Device pointer to free (typically from AllocNode.dptr).
954 Returns
955 -------
956 FreeNode
957 A new FreeNode representing the free operation.
958 """
959 cdef cydriver.CUgraphNode new_node = NULL 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
960 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
961 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
962 cdef cydriver.CUgraphNode* deps = NULL 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
963 cdef size_t num_deps = 0 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
964 cdef cydriver.CUdeviceptr c_dptr = <cydriver.CUdeviceptr>dptr 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
966 if pred_node != NULL: 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
967 deps = &pred_node 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
968 num_deps = 1 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
970 with nogil: 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
971 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
972 &new_node, as_cu(h_graph), deps, num_deps, c_dptr))
974 self._succ_cache = None 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
975 return FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
977 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode:
978 """Add a memset node depending on this node.
980 Parameters
981 ----------
982 dst : int
983 Destination device pointer.
984 value : int or buffer-protocol object
985 Fill value. int for 1-byte fill (range [0, 256)),
986 or buffer-protocol object of 1, 2, or 4 bytes.
987 width : int
988 Width of the row in elements.
989 height : int, optional
990 Number of rows (default 1).
991 pitch : int, optional
992 Pitch of destination in bytes (default 0, unused if height is 1).
994 Returns
995 -------
996 MemsetNode
997 A new MemsetNode representing the memset operation.
998 """
999 cdef unsigned int val
1000 cdef unsigned int elem_size
1001 val, elem_size = _parse_fill_value(value) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndod'iCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1003 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params
1004 cdef cydriver.CUgraphNode new_node = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1005 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1006 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1007 cdef cydriver.CUgraphNode* deps = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1008 cdef size_t num_deps = 0 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1010 if pred_node != NULL: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1011 deps = &pred_node 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1012 num_deps = 1 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1014 cdef cydriver.CUdeviceptr c_dst = <cydriver.CUdeviceptr>dst 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1015 cdef cydriver.CUcontext ctx = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1016 with nogil: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1017 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1019 c_memset(&memset_params, 0, sizeof(memset_params)) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1020 memset_params.dst = c_dst 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1021 memset_params.value = val 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1022 memset_params.elementSize = elem_size 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1023 memset_params.width = width 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1024 memset_params.height = height 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1025 memset_params.pitch = pitch 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1027 with nogil: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1028 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1029 &new_node, as_cu(h_graph), deps, num_deps,
1030 &memset_params, ctx))
1032 self._succ_cache = None 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1033 return MemsetNode._create_with_params( 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1034 create_graph_node_handle(new_node, h_graph), c_dst, 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1035 val, elem_size, width, height, pitch)
1037 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode:
1038 """Add a memcpy node depending on this node.
1040 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are
1041 auto-detected via the driver, so both device and pinned host
1042 pointers are supported.
1044 Parameters
1045 ----------
1046 dst : int
1047 Destination pointer (device or pinned host).
1048 src : int
1049 Source pointer (device or pinned host).
1050 size : int
1051 Number of bytes to copy.
1053 Returns
1054 -------
1055 MemcpyNode
1056 A new MemcpyNode representing the copy operation.
1057 """
1058 cdef cydriver.CUdeviceptr c_dst = <cydriver.CUdeviceptr>dst 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1059 cdef cydriver.CUdeviceptr c_src = <cydriver.CUdeviceptr>src 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1061 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1062 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1063 cdef cydriver.CUresult ret
1064 with nogil: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1065 ret = cydriver.cuPointerGetAttribute( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1066 &dst_mem_type,
1067 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
1068 c_dst)
1069 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1070 HANDLE_RETURN(ret)
1071 ret = cydriver.cuPointerGetAttribute( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1072 &src_mem_type,
1073 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
1074 c_src)
1075 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1076 HANDLE_RETURN(ret)
1078 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1079 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1081 cdef cydriver.CUDA_MEMCPY3D params
1082 c_memset(¶ms, 0, sizeof(params)) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1084 params.srcMemoryType = c_src_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1085 params.dstMemoryType = c_dst_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1086 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1087 params.srcHost = <const void*><uintptr_t>c_src
1088 else:
1089 params.srcDevice = c_src 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1090 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1091 params.dstHost = <void*><uintptr_t>c_dst
1092 else:
1093 params.dstDevice = c_dst 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1094 params.WidthInBytes = size 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1095 params.Height = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1096 params.Depth = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1098 cdef cydriver.CUgraphNode new_node = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1099 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1100 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1101 cdef cydriver.CUgraphNode* deps = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1102 cdef size_t num_deps = 0 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1104 if pred_node != NULL: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1105 deps = &pred_node 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1106 num_deps = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1108 cdef cydriver.CUcontext ctx = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1109 with nogil: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1110 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1111 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1112 &new_node, as_cu(h_graph), deps, num_deps, ¶ms, ctx))
1114 self._succ_cache = None 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1115 return MemcpyNode._create_with_params( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1116 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1117 c_dst_type, c_src_type)
1119 def embed(self, child: GraphDef) -> ChildGraphNode:
1120 """Add a child graph node depending on this node.
1122 Embeds a clone of the given graph definition as a sub-graph node.
1123 The child graph must not contain allocation, free, or conditional
1124 nodes.
1126 Parameters
1127 ----------
1128 child : GraphDef
1129 The graph definition to embed (will be cloned).
1131 Returns
1132 -------
1133 ChildGraphNode
1134 A new ChildGraphNode representing the embedded sub-graph.
1135 """
1136 cdef GraphDef child_def = <GraphDef>child 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1137 cdef cydriver.CUgraphNode new_node = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1138 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1139 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1140 cdef cydriver.CUgraphNode* deps = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1141 cdef size_t num_deps = 0 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1143 if pred_node != NULL: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1144 deps = &pred_node
1145 num_deps = 1
1147 with nogil: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1148 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1149 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph)))
1151 cdef cydriver.CUgraph embedded_graph = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1152 with nogil: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1153 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1154 new_node, &embedded_graph))
1156 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1158 self._succ_cache = None 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1159 return ChildGraphNode._create_with_params( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1160 create_graph_node_handle(new_node, h_graph), h_embedded) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1162 def record_event(self, event: Event) -> EventRecordNode:
1163 """Add an event record node depending on this node.
1165 Parameters
1166 ----------
1167 event : Event
1168 The event to record.
1170 Returns
1171 -------
1172 EventRecordNode
1173 A new EventRecordNode representing the event record operation.
1174 """
1175 cdef Event ev = <Event>event 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1176 cdef cydriver.CUgraphNode new_node = NULL 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1177 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1178 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1179 cdef cydriver.CUgraphNode* deps = NULL 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1180 cdef size_t num_deps = 0 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1182 if pred_node != NULL: 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1183 deps = &pred_node 2;d?d[d^d`d|dId4b
1184 num_deps = 1 2;d?d[d^d`d|dId4b
1186 with nogil: 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1187 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1188 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1190 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1191 <cydriver.CUhostFn>_destroy_event_handle_copy)
1193 self._succ_cache = None 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1194 return EventRecordNode._create_with_params( 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1195 create_graph_node_handle(new_node, h_graph), ev._h_event) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1197 def wait_event(self, event: Event) -> EventWaitNode:
1198 """Add an event wait node depending on this node.
1200 Parameters
1201 ----------
1202 event : Event
1203 The event to wait for.
1205 Returns
1206 -------
1207 EventWaitNode
1208 A new EventWaitNode representing the event wait operation.
1209 """
1210 cdef Event ev = <Event>event 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1211 cdef cydriver.CUgraphNode new_node = NULL 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1212 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1213 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1214 cdef cydriver.CUgraphNode* deps = NULL 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1215 cdef size_t num_deps = 0 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1217 if pred_node != NULL: 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1218 deps = &pred_node 2.h=d@d]d_d{d}dJhzhJd
1219 num_deps = 1 2.h=d@d]d_d{d}dJhzhJd
1221 with nogil: 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1222 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1223 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event)))
1225 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1226 <cydriver.CUhostFn>_destroy_event_handle_copy)
1228 self._succ_cache = None 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1229 return EventWaitNode._create_with_params( 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1230 create_graph_node_handle(new_node, h_graph), ev._h_event) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1232 def callback(self, fn, *, user_data=None) -> HostCallbackNode:
1233 """Add a host callback node depending on this node.
1235 The callback runs on the host CPU when the graph reaches this node.
1236 Two modes are supported:
1238 - **Python callable**: Pass any callable. The GIL is acquired
1239 automatically. The callable must take no arguments; use closures
1240 or ``functools.partial`` to bind state.
1241 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance.
1242 The function receives a single ``void*`` argument (the
1243 ``user_data``). The caller must keep the ctypes wrapper alive
1244 for the lifetime of the graph.
1246 .. warning::
1248 Callbacks must not call CUDA API functions. Doing so may
1249 deadlock or corrupt driver state.
1251 Parameters
1252 ----------
1253 fn : callable or ctypes function pointer
1254 The callback function.
1255 user_data : int or bytes-like, optional
1256 Only for ctypes function pointers. If ``int``, passed as a raw
1257 pointer (caller manages lifetime). If bytes-like, the data is
1258 copied and its lifetime is tied to the graph.
1260 Returns
1261 -------
1262 HostCallbackNode
1263 A new HostCallbackNode representing the callback.
1264 """
1265 import ctypes as ct 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1267 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params
1268 cdef cydriver.CUgraphNode new_node = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1269 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1270 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1271 cdef cydriver.CUgraphNode* deps = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1272 cdef size_t num_deps = 0 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1273 cdef void* c_user_data = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1274 cdef object callable_obj = None 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1275 cdef void* fn_pyobj = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1277 if pred_node != NULL: 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1278 deps = &pred_node
1279 num_deps = 1
1281 if isinstance(fn, ct._CFuncPtr): 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1282 Py_INCREF(fn) 2[hIjdjfjhjjjljnjChmi
1283 fn_pyobj = <void*>fn 2[hIjdjfjhjjjljnjChmi
1284 _attach_user_object( 2[hIjdjfjhjjjljnjChmi
1285 as_cu(h_graph), fn_pyobj,
1286 <cydriver.CUhostFn>_py_host_destructor)
1287 node_params.fn = <cydriver.CUhostFn><uintptr_t>ct.cast( 2[hIjdjfjhjjjljnjChmi
1288 fn, ct.c_void_p).value 2[hIjdjfjhjjjljnjChmi
1290 if user_data is not None: 2[hIjdjfjhjjjljnjChmi
1291 if isinstance(user_data, int): 2[hCh
1292 c_user_data = <void*><uintptr_t>user_data
1293 else:
1294 buf = bytes(user_data) 2[hCh
1295 c_user_data = malloc(len(buf)) 2[hCh
1296 if c_user_data == NULL: 2[hCh
1297 raise MemoryError(
1298 "failed to allocate user_data buffer")
1299 c_memcpy(c_user_data, <const char*>buf, len(buf)) 2[hCh
1300 _attach_user_object( 2[hCh
1301 as_cu(h_graph), c_user_data,
1302 <cydriver.CUhostFn>free)
1304 node_params.userData = c_user_data 2[hIjdjfjhjjjljnjChmi
1305 else:
1306 if user_data is not None: 2;kJjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1307 raise ValueError( 2;k
1308 "user_data is only supported with ctypes "
1309 "function pointers")
1310 callable_obj = fn 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1311 Py_INCREF(fn) 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1312 fn_pyobj = <void*>fn 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1313 node_params.fn = <cydriver.CUhostFn>_py_host_trampoline 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1314 node_params.userData = fn_pyobj 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1315 _attach_user_object( 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1316 as_cu(h_graph), fn_pyobj,
1317 <cydriver.CUhostFn>_py_host_destructor)
1319 with nogil: 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1320 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1321 &new_node, as_cu(h_graph), deps, num_deps, &node_params))
1323 self._succ_cache = None 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1324 return HostCallbackNode._create_with_params( 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1325 create_graph_node_handle(new_node, h_graph), callable_obj, 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1326 node_params.fn, node_params.userData)
1328 def if_cond(self, condition: Condition) -> IfNode:
1329 """Add an if-conditional node depending on this node.
1331 The body graph executes only when the condition evaluates to
1332 a non-zero value at runtime.
1334 Parameters
1335 ----------
1336 condition : Condition
1337 Condition from :meth:`GraphDef.create_condition`.
1339 Returns
1340 -------
1341 IfNode
1342 A new IfNode with one branch accessible via ``.then``.
1343 """
1344 return _make_conditional_node( 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth
1345 self, condition,
1346 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth
1348 def if_else(self, condition: Condition) -> IfElseNode:
1349 """Add an if-else conditional node depending on this node.
1351 Two body graphs: the first executes when the condition is
1352 non-zero, the second when it is zero.
1354 Parameters
1355 ----------
1356 condition : Condition
1357 Condition from :meth:`GraphDef.create_condition`.
1359 Returns
1360 -------
1361 IfElseNode
1362 A new IfElseNode with branches accessible via
1363 ``.then`` and ``.else_``.
1364 """
1365 return _make_conditional_node( 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh
1366 self, condition,
1367 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh
1369 def while_loop(self, condition: Condition) -> WhileNode:
1370 """Add a while-loop conditional node depending on this node.
1372 The body graph executes repeatedly while the condition
1373 evaluates to a non-zero value.
1375 Parameters
1376 ----------
1377 condition : Condition
1378 Condition from :meth:`GraphDef.create_condition`.
1380 Returns
1381 -------
1382 WhileNode
1383 A new WhileNode with body accessible via ``.body``.
1384 """
1385 return _make_conditional_node( 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh
1386 self, condition,
1387 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh
1389 def switch(self, condition: Condition, unsigned int count) -> SwitchNode:
1390 """Add a switch conditional node depending on this node.
1392 The condition value selects which branch to execute. If the
1393 value is out of range, no branch executes.
1395 Parameters
1396 ----------
1397 condition : Condition
1398 Condition from :meth:`GraphDef.create_condition`.
1399 count : int
1400 Number of switch cases (branches).
1402 Returns
1403 -------
1404 SwitchNode
1405 A new SwitchNode with branches accessible via ``.branches``.
1406 """
1407 return _make_conditional_node( 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh
1408 self, condition,
1409 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh
1412# =============================================================================
1413# GraphNode subclasses
1414# =============================================================================
1417cdef class EmptyNode(GraphNode):
1418 """A synchronization / join node with no operation."""
1420 @staticmethod
1421 cdef EmptyNode _create_impl(GraphNodeHandle h_node):
1422 cdef EmptyNode n = EmptyNode.__new__(EmptyNode) 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
1423 n._h_node = h_node 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
1424 return n 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb
1426 def __repr__(self) -> str:
1427 cdef Py_ssize_t n = len(self.pred) 2-b
1428 return f"<EmptyNode with {n} {'pred' if n == 1 else 'preds'}>" 2-b
1431cdef class KernelNode(GraphNode):
1432 """A kernel launch node.
1434 Properties
1435 ----------
1436 grid : tuple of int
1437 Grid dimensions (gridDimX, gridDimY, gridDimZ).
1438 block : tuple of int
1439 Block dimensions (blockDimX, blockDimY, blockDimZ).
1440 shmem_size : int
1441 Dynamic shared memory size in bytes.
1442 kernel : Kernel
1443 The kernel object for this launch node.
1444 config : LaunchConfig
1445 A LaunchConfig reconstructed from this node's parameters.
1446 """
1448 @staticmethod
1449 cdef KernelNode _create_with_params(GraphNodeHandle h_node,
1450 tuple grid, tuple block, unsigned int shmem_size,
1451 KernelHandle h_kernel):
1452 """Create from known params (called by launch() builder)."""
1453 cdef KernelNode n = KernelNode.__new__(KernelNode) 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1454 n._h_node = h_node 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1455 n._grid = grid 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1456 n._block = block 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1457 n._shmem_size = shmem_size 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1458 n._h_kernel = h_kernel 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1459 return n 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h
1461 @staticmethod
1462 cdef KernelNode _create_from_driver(GraphNodeHandle h_node):
1463 """Create by fetching params from the driver (called by _create factory)."""
1464 cdef cydriver.CUgraphNode node = as_cu(h_node) 20cHk)fEh,dX V Y Z )b4bLb
1465 cdef cydriver.CUDA_KERNEL_NODE_PARAMS params
1466 with nogil: 20cHk)fEh,dX V Y Z )b4bLb
1467 HANDLE_RETURN(cydriver.cuGraphKernelNodeGetParams(node, ¶ms)) 20cHk)fEh,dX V Y Z )b4bLb
1468 cdef KernelHandle h_kernel = create_kernel_handle_ref(params.kern) 20cHk)fEh,dX V Y Z )b4bLb
1469 return KernelNode._create_with_params( 20cHk)fEh,dX V Y Z )b4bLb
1470 h_node,
1471 (params.gridDimX, params.gridDimY, params.gridDimZ), 20cHk)fEh,dX V Y Z )b4bLb
1472 (params.blockDimX, params.blockDimY, params.blockDimZ), 20cHk)fEh,dX V Y Z )b4bLb
1473 params.sharedMemBytes,
1474 h_kernel)
1476 def __repr__(self) -> str:
1477 return (f"<KernelNode grid={self._grid} block={self._block}>") 2,h
1479 @property
1480 def grid(self) -> tuple:
1481 """Grid dimensions as a 3-tuple (gridDimX, gridDimY, gridDimZ)."""
1482 return self._grid 26l)f
1484 @property
1485 def block(self) -> tuple:
1486 """Block dimensions as a 3-tuple (blockDimX, blockDimY, blockDimZ)."""
1487 return self._block 26l)f
1489 @property
1490 def shmem_size(self) -> int:
1491 """Dynamic shared memory size in bytes."""
1492 return self._shmem_size 26l)f
1494 @property
1495 def kernel(self) -> Kernel:
1496 """The Kernel object for this launch node."""
1497 return Kernel._from_handle(self._h_kernel) 26l)fBh4b
1499 @property
1500 def config(self) -> LaunchConfig:
1501 """A LaunchConfig reconstructed from this node's grid, block, and shmem_size.
1503 Note: cluster dimensions and cooperative_launch are not preserved
1504 by the CUDA driver's kernel node params, so they are not included.
1505 """
1506 return LaunchConfig(grid=self._grid, block=self._block, 26l)f
1507 shmem_size=self._shmem_size) 26l)f
1510cdef class AllocNode(GraphNode):
1511 """A memory allocation node.
1513 Properties
1514 ----------
1515 dptr : int
1516 The device pointer for the allocation.
1517 bytesize : int
1518 The number of bytes allocated.
1519 device_id : int
1520 The device on which the allocation was made.
1521 memory_type : str
1522 The type of memory allocated (``"device"``, ``"host"``, or ``"managed"``).
1523 peer_access : tuple of int
1524 Device IDs that have read-write access to this allocation.
1525 options : GraphAllocOptions
1526 A GraphAllocOptions reconstructed from this node's parameters.
1527 """
1529 @staticmethod
1530 cdef AllocNode _create_with_params(GraphNodeHandle h_node,
1531 cydriver.CUdeviceptr dptr, size_t bytesize,
1532 int device_id, str memory_type, tuple peer_access):
1533 """Create from known params (called by alloc() builder)."""
1534 cdef AllocNode n = AllocNode.__new__(AllocNode) 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1535 n._h_node = h_node 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1536 n._dptr = dptr 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1537 n._bytesize = bytesize 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1538 n._device_id = device_id 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1539 n._memory_type = memory_type 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1540 n._peer_access = peer_access 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1541 return n 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd
1543 @staticmethod
1544 cdef AllocNode _create_from_driver(GraphNodeHandle h_node):
1545 """Create by fetching params from the driver (called by _create factory)."""
1546 cdef cydriver.CUgraphNode node = as_cu(h_node) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1547 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS params
1548 with nogil: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1549 HANDLE_RETURN(cydriver.cuGraphMemAllocNodeGetParams(node, ¶ms)) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1551 cdef str memory_type
1552 if params.poolProps.allocType == cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1553 if params.poolProps.location.type == cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1554 memory_type = "host"
1555 else:
1556 memory_type = "device" 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1557 else:
1558 IF CUDA_CORE_BUILD_MAJOR >= 13:
1559 if params.poolProps.allocType == cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED: 2giYj-g
1560 memory_type = "managed" 2giYj-g
1561 else:
1562 memory_type = "device"
1563 ELSE:
1564 memory_type = "device"
1566 cdef list peer_ids = [] 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1567 cdef size_t i
1568 for i in range(params.accessDescCount): 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1569 peer_ids.append(<int>params.accessDescs[i].location.id)
1571 return AllocNode._create_with_params( 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1572 h_node, params.dptr, params.bytesize,
1573 <int>params.poolProps.location.id, memory_type, tuple(peer_ids)) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b
1575 def __repr__(self) -> str:
1576 return f"<AllocNode dptr=0x{self._dptr:x} size={self._bytesize}>" 2aj
1578 @property
1579 def dptr(self) -> int:
1580 """The device pointer for the allocation."""
1581 return self._dptr 2WjXj3bfcPfQfRfSfk l m n `b{b|b}bIlJlBfwb[c]c^c_c~igiCfxb`c{c|c}cDfyb~cadbdcdEfzbddedfdgdFfAbhdidjdkdGfBbldmdndod'ibe9 Cc[e| 2c]e} 3c^e~ 4cwdU ~b_eab5c`ebb6cHccbVb{edb7cN kclcXb^ _ M *b` { $e] Yc|eeb8cIbp W }efb9cb y z s g h i j v MbNb$ I J u K L ~egb!cafhb#cbfib$ccfjb%cAe. Icdfkb'crdP @beflb(cffmb)cic/ Kbgfnb*cH dcecPb* + F Wb, - 0e? Vchfob+cvbo O ifpb,ca w x q c d e f t FbGb4 B C r D E jfqb-cIe: Jckfrb.cof@ /cKe; Kclfsb:cmftb;cde! Dcee# EcHfCbpdIfDbqd
1583 @property
1584 def bytesize(self) -> int:
1585 """The number of bytes allocated."""
1586 return self._bytesize 2IlJl~igi
1588 @property
1589 def device_id(self) -> int:
1590 """The device on which the allocation was made."""
1591 return self._device_id 2IlJl~igi
1593 @property
1594 def memory_type(self) -> str:
1595 """The type of memory: ``"device"``, ``"host"``, or ``"managed"``."""
1596 return self._memory_type 2IlJl~igi
1598 @property
1599 def peer_access(self) -> tuple:
1600 """Device IDs with read-write access to this allocation."""
1601 return self._peer_access 2IlJl~igi
1603 @property
1604 def options(self) -> GraphAllocOptions:
1605 """A GraphAllocOptions reconstructed from this node's parameters."""
1606 return GraphAllocOptions( 2IlJl~igi
1607 device=self._device_id, 2IlJl~igi
1608 memory_type=self._memory_type,
1609 peer_access=list(self._peer_access) if self._peer_access else None, 2IlJl~igi
1610 )
1613cdef class FreeNode(GraphNode):
1614 """A memory free node.
1616 Properties
1617 ----------
1618 dptr : int
1619 The device pointer being freed.
1620 """
1622 @staticmethod
1623 cdef FreeNode _create_with_params(GraphNodeHandle h_node,
1624 cydriver.CUdeviceptr dptr):
1625 """Create from known params (called by free() builder)."""
1626 cdef FreeNode n = FreeNode.__new__(FreeNode) 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
1627 n._h_node = h_node 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
1628 n._dptr = dptr 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
1629 return n 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf
1631 @staticmethod
1632 cdef FreeNode _create_from_driver(GraphNodeHandle h_node):
1633 """Create by fetching params from the driver (called by _create factory)."""
1634 cdef cydriver.CUgraphNode node = as_cu(h_node) 23bhiti%e
1635 cdef cydriver.CUdeviceptr dptr
1636 with nogil: 23bhiti%e
1637 HANDLE_RETURN(cydriver.cuGraphMemFreeNodeGetParams(node, &dptr)) 23bhiti%e
1638 return FreeNode._create_with_params(h_node, dptr) 23bhiti%e
1640 def __repr__(self) -> str:
1641 return f"<FreeNode dptr=0x{self._dptr:x}>" 2of
1643 @property
1644 def dptr(self) -> int:
1645 """The device pointer being freed."""
1646 return self._dptr 2Lqhi
1649cdef class MemsetNode(GraphNode):
1650 """A memory set node.
1652 Properties
1653 ----------
1654 dptr : int
1655 The destination device pointer.
1656 value : int
1657 The fill value.
1658 element_size : int
1659 Element size in bytes (1, 2, or 4).
1660 width : int
1661 Width of the row in elements.
1662 height : int
1663 Number of rows.
1664 pitch : int
1665 Pitch in bytes (unused if height is 1).
1666 """
1668 @staticmethod
1669 cdef MemsetNode _create_with_params(GraphNodeHandle h_node,
1670 cydriver.CUdeviceptr dptr, unsigned int value,
1671 unsigned int element_size, size_t width,
1672 size_t height, size_t pitch):
1673 """Create from known params (called by memset() builder)."""
1674 cdef MemsetNode n = MemsetNode.__new__(MemsetNode) 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1675 n._h_node = h_node 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1676 n._dptr = dptr 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1677 n._value = value 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1678 n._element_size = element_size 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1679 n._width = width 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1680 n._height = height 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1681 n._pitch = pitch 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1682 return n 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd
1684 @staticmethod
1685 cdef MemsetNode _create_from_driver(GraphNodeHandle h_node):
1686 """Create by fetching params from the driver (called by _create factory)."""
1687 cdef cydriver.CUgraphNode node = as_cu(h_node) 2*f+f,f-fFhGhHhIh-d.d/d:d
1688 cdef cydriver.CUDA_MEMSET_NODE_PARAMS params
1689 with nogil: 2*f+f,f-fFhGhHhIh-d.d/d:d
1690 HANDLE_RETURN(cydriver.cuGraphMemsetNodeGetParams(node, ¶ms)) 2*f+f,f-fFhGhHhIh-d.d/d:d
1691 return MemsetNode._create_with_params( 2*f+f,f-fFhGhHhIh-d.d/d:d
1692 h_node, params.dst, params.value,
1693 params.elementSize, params.width, params.height, params.pitch) 2*f+f,f-fFhGhHhIh-d.d/d:d
1695 def __repr__(self) -> str:
1696 return (f"<MemsetNode dptr=0x{self._dptr:x} " 2/c
1697 f"value={self._value} elem={self._element_size}>") 2/c
1699 @property
1700 def dptr(self) -> int:
1701 """The destination device pointer."""
1702 return self._dptr 27l8l9l!l*f+f,f-f
1704 @property
1705 def value(self) -> int:
1706 """The fill value."""
1707 return self._value 27l8l9l!l*f+f,f-f
1709 @property
1710 def element_size(self) -> int:
1711 """Element size in bytes (1, 2, or 4)."""
1712 return self._element_size 27l8l9l!l*f+f,f-f
1714 @property
1715 def width(self) -> int:
1716 """Width of the row in elements."""
1717 return self._width 27l8l9l!l*f+f,f-f
1719 @property
1720 def height(self) -> int:
1721 """Number of rows."""
1722 return self._height 27l8l9l!l*f+f,f-f
1724 @property
1725 def pitch(self) -> int:
1726 """Pitch in bytes (unused if height is 1)."""
1727 return self._pitch 27l8l9l!l*f+f,f-f
1730cdef class MemcpyNode(GraphNode):
1731 """A memory copy node.
1733 Properties
1734 ----------
1735 dst : int
1736 The destination pointer.
1737 src : int
1738 The source pointer.
1739 size : int
1740 The number of bytes copied.
1741 """
1743 @staticmethod
1744 cdef MemcpyNode _create_with_params(GraphNodeHandle h_node,
1745 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src,
1746 size_t size, cydriver.CUmemorytype dst_type,
1747 cydriver.CUmemorytype src_type):
1748 """Create from known params (called by memcpy() builder)."""
1749 cdef MemcpyNode n = MemcpyNode.__new__(MemcpyNode) 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1750 n._h_node = h_node 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1751 n._dst = dst 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1752 n._src = src 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1753 n._size = size 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1754 n._dst_type = dst_type 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1755 n._src_type = src_type 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1756 return n 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb
1758 @staticmethod
1759 cdef MemcpyNode _create_from_driver(GraphNodeHandle h_node):
1760 """Create by fetching params from the driver (called by _create factory)."""
1761 cdef cydriver.CUgraphNode node = as_cu(h_node) 2pf3f.f
1762 cdef cydriver.CUDA_MEMCPY3D params
1763 with nogil: 2pf3f.f
1764 HANDLE_RETURN(cydriver.cuGraphMemcpyNodeGetParams(node, ¶ms)) 2pf3f.f
1766 cdef cydriver.CUdeviceptr dst
1767 cdef cydriver.CUdeviceptr src
1768 if params.dstMemoryType == cydriver.CU_MEMORYTYPE_HOST: 2pf3f.f
1769 dst = <cydriver.CUdeviceptr><uintptr_t>params.dstHost
1770 else:
1771 dst = params.dstDevice 2pf3f.f
1772 if params.srcMemoryType == cydriver.CU_MEMORYTYPE_HOST: 2pf3f.f
1773 src = <cydriver.CUdeviceptr><uintptr_t>params.srcHost
1774 else:
1775 src = params.srcDevice 2pf3f.f
1777 return MemcpyNode._create_with_params( 2pf3f.f
1778 h_node, dst, src, params.WidthInBytes,
1779 params.dstMemoryType, params.srcMemoryType) 2pf3f.f
1781 def __repr__(self) -> str:
1782 cdef str dt = "H" if self._dst_type == cydriver.CU_MEMORYTYPE_HOST else "D" 1@
1783 cdef str st = "H" if self._src_type == cydriver.CU_MEMORYTYPE_HOST else "D" 1@
1784 return (f"<MemcpyNode dst=0x{self._dst:x}({dt}) " 1@
1785 f"src=0x{self._src:x}({st}) size={self._size}>") 1@
1787 @property
1788 def dst(self) -> int:
1789 """The destination pointer."""
1790 return self._dst 2{mpf
1792 @property
1793 def src(self) -> int:
1794 """The source pointer."""
1795 return self._src 2{mpf
1797 @property
1798 def size(self) -> int:
1799 """The number of bytes copied."""
1800 return self._size 2{mpf
1803cdef class ChildGraphNode(GraphNode):
1804 """A child graph (sub-graph) node.
1806 Properties
1807 ----------
1808 child_graph : GraphDef
1809 The embedded graph definition (non-owning wrapper).
1810 """
1812 @staticmethod
1813 cdef ChildGraphNode _create_with_params(GraphNodeHandle h_node,
1814 GraphHandle h_child_graph):
1815 """Create from known params (called by embed() builder)."""
1816 cdef ChildGraphNode n = ChildGraphNode.__new__(ChildGraphNode) 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1817 n._h_node = h_node 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1818 n._h_child_graph = h_child_graph 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1819 return n 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d
1821 @staticmethod
1822 cdef ChildGraphNode _create_from_driver(GraphNodeHandle h_node):
1823 """Create by fetching params from the driver (called by _create factory)."""
1824 cdef cydriver.CUgraphNode node = as_cu(h_node) 29jNkLb
1825 cdef cydriver.CUgraph child_graph = NULL 29jNkLb
1826 with nogil: 29jNkLb
1827 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph(node, &child_graph)) 29jNkLb
1828 cdef GraphHandle h_graph = graph_node_get_graph(h_node) 29jNkLb
1829 cdef GraphHandle h_child = create_graph_handle_ref(child_graph, h_graph) 29jNkLb
1830 return ChildGraphNode._create_with_params(h_node, h_child) 29jNkLb
1832 def __repr__(self) -> str:
1833 cdef cydriver.CUgraph g = as_cu(self._h_child_graph) 2ud
1834 cdef size_t num_nodes = 0 2ud
1835 with nogil: 2ud
1836 HANDLE_RETURN(cydriver.cuGraphGetNodes(g, NULL, &num_nodes)) 2ud
1837 cdef Py_ssize_t n = <Py_ssize_t>num_nodes 2ud
1838 return f"<ChildGraphNode with {n} {'subnode' if n == 1 else 'subnodes'}>" 2ud
1840 @property
1841 def child_graph(self) -> GraphDef:
1842 """The embedded graph definition (non-owning wrapper)."""
1843 return GraphDef._from_handle(self._h_child_graph) 2Hk9j)bLb
1846cdef class EventRecordNode(GraphNode):
1847 """An event record node.
1849 Properties
1850 ----------
1851 event : Event
1852 The event being recorded.
1853 """
1855 @staticmethod
1856 cdef EventRecordNode _create_with_params(GraphNodeHandle h_node,
1857 EventHandle h_event):
1858 """Create from known params (called by record_event() builder)."""
1859 cdef EventRecordNode n = EventRecordNode.__new__(EventRecordNode) 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1860 n._h_node = h_node 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1861 n._h_event = h_event 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1862 return n 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk
1864 @staticmethod
1865 cdef EventRecordNode _create_from_driver(GraphNodeHandle h_node):
1866 """Create by fetching params from the driver (called by _create factory)."""
1867 cdef cydriver.CUgraphNode node = as_cu(h_node) 2}hii3e
1868 cdef cydriver.CUevent event
1869 with nogil: 2}hii3e
1870 HANDLE_RETURN(cydriver.cuGraphEventRecordNodeGetEvent(node, &event)) 2}hii3e
1871 cdef EventHandle h_event = create_event_handle_ref(event) 2}hii3e
1872 return EventRecordNode._create_with_params(h_node, h_event) 2}hii3e
1874 def __repr__(self) -> str:
1875 return f"<EventRecordNode event=0x{as_intptr(self._h_event):x}>" 2Ak
1877 @property
1878 def event(self) -> Event:
1879 """The event being recorded."""
1880 return Event._from_handle(self._h_event) 2Mq}h'jId(j
1883cdef class EventWaitNode(GraphNode):
1884 """An event wait node.
1886 Properties
1887 ----------
1888 event : Event
1889 The event being waited on.
1890 """
1892 @staticmethod
1893 cdef EventWaitNode _create_with_params(GraphNodeHandle h_node,
1894 EventHandle h_event):
1895 """Create from known params (called by wait_event() builder)."""
1896 cdef EventWaitNode n = EventWaitNode.__new__(EventWaitNode) 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1897 n._h_node = h_node 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1898 n._h_event = h_event 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1899 return n 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk
1901 @staticmethod
1902 cdef EventWaitNode _create_from_driver(GraphNodeHandle h_node):
1903 """Create by fetching params from the driver (called by _create factory)."""
1904 cdef cydriver.CUgraphNode node = as_cu(h_node) 2~hji4e
1905 cdef cydriver.CUevent event
1906 with nogil: 2~hji4e
1907 HANDLE_RETURN(cydriver.cuGraphEventWaitNodeGetEvent(node, &event)) 2~hji4e
1908 cdef EventHandle h_event = create_event_handle_ref(event) 2~hji4e
1909 return EventWaitNode._create_with_params(h_node, h_event) 2~hji4e
1911 def __repr__(self) -> str:
1912 return f"<EventWaitNode event=0x{as_intptr(self._h_event):x}>" 2Bk
1914 @property
1915 def event(self) -> Event:
1916 """The event being waited on."""
1917 return Event._from_handle(self._h_event) 2Nq~hJd)j
1920cdef class HostCallbackNode(GraphNode):
1921 """A host callback node.
1923 Properties
1924 ----------
1925 callback_fn : callable or None
1926 The Python callable (None for ctypes function pointer callbacks).
1927 """
1929 @staticmethod
1930 cdef HostCallbackNode _create_with_params(GraphNodeHandle h_node,
1931 object callable_obj, cydriver.CUhostFn fn,
1932 void* user_data):
1933 """Create from known params (called by callback() builder)."""
1934 cdef HostCallbackNode n = HostCallbackNode.__new__(HostCallbackNode) 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1935 n._h_node = h_node 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1936 n._callable = callable_obj 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1937 n._fn = fn 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1938 n._user_data = user_data 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1939 return n 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj
1941 @staticmethod
1942 cdef HostCallbackNode _create_from_driver(GraphNodeHandle h_node):
1943 """Create by fetching params from the driver (called by _create factory)."""
1944 cdef cydriver.CUgraphNode node = as_cu(h_node) 2,jzkCk
1945 cdef cydriver.CUDA_HOST_NODE_PARAMS params
1946 with nogil: 2,jzkCk
1947 HANDLE_RETURN(cydriver.cuGraphHostNodeGetParams(node, ¶ms)) 2,jzkCk
1949 cdef object callable_obj = None 2,jzkCk
1950 if params.fn == <cydriver.CUhostFn>_py_host_trampoline: 2,jzkCk
1951 callable_obj = <object>params.userData 2,jzk
1953 return HostCallbackNode._create_with_params( 2,jzkCk
1954 h_node, callable_obj, params.fn, params.userData) 2,jzkCk
1956 def __repr__(self) -> str:
1957 if self._callable is not None: 2qi
1958 name = getattr(self._callable, '__name__', '?') 2qi
1959 return f"<HostCallbackNode callback={name}>" 2qi
1960 return f"<HostCallbackNode cfunc=0x{<uintptr_t>self._fn:x}>"
1962 @property
1963 def callback_fn(self):
1964 """The Python callable, or None for ctypes function pointer callbacks."""
1965 return self._callable 2Oq,j
1968cdef class ConditionalNode(GraphNode):
1969 """Base class for conditional graph nodes.
1971 When created via builder methods (if_cond, if_else, while_loop, switch),
1972 a specific subclass (IfNode, IfElseNode, WhileNode, SwitchNode) is
1973 returned. When reconstructed from the driver on CUDA 13.2+, the
1974 correct subclass is determined via cuGraphNodeGetParams. On older
1975 drivers, this base class is used as a fallback.
1977 Properties
1978 ----------
1979 condition : Condition or None
1980 The condition variable controlling execution (None pre-13.2).
1981 cond_type : str or None
1982 The conditional type ("if", "while", or "switch"; None pre-13.2).
1983 branches : tuple of GraphDef
1984 The body graphs for each branch (empty pre-13.2).
1985 """
1987 @staticmethod
1988 cdef ConditionalNode _create_from_driver(GraphNodeHandle h_node):
1989 cdef ConditionalNode n
1990 if not _check_node_get_params(): 2ZcOkPkQkRkLc
1991 n = ConditionalNode.__new__(ConditionalNode) 2ZcOkPkQkRkLc
1992 n._h_node = h_node 2ZcOkPkQkRkLc
1993 n._condition = None 2ZcOkPkQkRkLc
1994 n._cond_type = cydriver.CU_GRAPH_COND_TYPE_IF 2ZcOkPkQkRkLc
1995 n._branches = () 2ZcOkPkQkRkLc
1996 return n 2ZcOkPkQkRkLc
1998 cdef cydriver.CUgraphNode node = as_cu(h_node)
1999 params = handle_return(driver.cuGraphNodeGetParams(
2000 <uintptr_t>node))
2001 cond_params = params.conditional
2002 cdef int cond_type_int = int(cond_params.type)
2003 cdef unsigned int size = int(cond_params.size)
2005 cdef Condition condition = Condition.__new__(Condition)
2006 condition._c_handle = <cydriver.CUgraphConditionalHandle>(
2007 <unsigned long long>int(cond_params.handle))
2009 cdef GraphHandle h_graph = graph_node_get_graph(h_node)
2010 cdef list branch_list = []
2011 cdef unsigned int i
2012 cdef GraphHandle h_branch
2013 if cond_params.phGraph_out is not None:
2014 for i in range(size):
2015 h_branch = create_graph_handle_ref(
2016 <cydriver.CUgraph><uintptr_t>int(cond_params.phGraph_out[i]),
2017 h_graph)
2018 branch_list.append(GraphDef._from_handle(h_branch))
2019 cdef tuple branches = tuple(branch_list)
2021 cdef type cls
2022 if cond_type_int == <int>cydriver.CU_GRAPH_COND_TYPE_IF:
2023 if size == 1:
2024 cls = IfNode
2025 else:
2026 cls = IfElseNode
2027 elif cond_type_int == <int>cydriver.CU_GRAPH_COND_TYPE_WHILE:
2028 cls = WhileNode
2029 else:
2030 cls = SwitchNode
2032 n = cls.__new__(cls)
2033 n._h_node = h_node
2034 n._condition = condition
2035 n._cond_type = <cydriver.CUgraphConditionalNodeType>cond_type_int
2036 n._branches = branches
2037 return n
2039 def __repr__(self) -> str:
2040 return "<ConditionalNode>"
2042 @property
2043 def condition(self) -> Condition | None:
2044 """The condition variable controlling execution."""
2045 return self._condition 2FldlKlGl
2047 @property
2048 def cond_type(self) -> str | None:
2049 """The conditional type as a string: 'if', 'while', or 'switch'.
2051 Returns None when reconstructed from the driver pre-CUDA 13.2,
2052 as the conditional type cannot be determined.
2053 """
2054 if self._condition is None: 2FldlKlGl
2055 return None
2056 if self._cond_type == cydriver.CU_GRAPH_COND_TYPE_IF: 2FldlKlGl
2057 return "if" 2Fldl
2058 elif self._cond_type == cydriver.CU_GRAPH_COND_TYPE_WHILE:
2059 return "while" 2Gl
2060 else:
2061 return "switch" 2Kl
2063 @property
2064 def branches(self) -> tuple:
2065 """The body graphs for each branch as a tuple of GraphDef.
2067 Returns an empty tuple when reconstructed from the driver
2068 pre-CUDA 13.2.
2069 """
2070 return self._branches 2FldlKlGlrfY Lc
2073cdef class IfNode(ConditionalNode):
2074 """An if-conditional node (1 branch, executes when condition is non-zero)."""
2076 def __repr__(self) -> str:
2077 return f"<IfNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2/g
2079 @property
2080 def then(self) -> GraphDef:
2081 """The 'then' branch graph."""
2082 return self._branches[0] 2FlqfX
2085cdef class IfElseNode(ConditionalNode):
2086 """An if-else conditional node (2 branches)."""
2088 def __repr__(self) -> str:
2089 return f"<IfElseNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2.g
2091 @property
2092 def then(self) -> GraphDef:
2093 """The 'then' branch graph (executed when condition is non-zero)."""
2094 return self._branches[0] 2dlnfV
2096 @property
2097 def else_(self) -> GraphDef:
2098 """The 'else' branch graph (executed when condition is zero)."""
2099 return self._branches[1] 2dlnfV
2102cdef class WhileNode(ConditionalNode):
2103 """A while-loop conditional node (1 branch, repeats while condition is non-zero)."""
2105 def __repr__(self) -> str:
2106 return f"<WhileNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2:g
2108 @property
2109 def body(self) -> GraphDef:
2110 """The loop body graph."""
2111 return self._branches[0] 2GlsfZ
2114cdef class SwitchNode(ConditionalNode):
2115 """A switch conditional node (N branches, selected by condition value)."""
2117 def __repr__(self) -> str:
2118 cdef Py_ssize_t n = len(self._branches) 2(f
2119 return (f"<SwitchNode condition=0x{<unsigned long long>self._condition._c_handle:x}" 2(f
2120 f" with {n} {'branch' if n == 1 else 'branches'}>") 2(f