Coverage for cuda / core / _device.pyx: 91.41%
419 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-08 01:07 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-08 01:07 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
8from libc.stdint cimport uintptr_t
10from cuda.bindings cimport cydriver
11from cuda.core._utils.cuda_utils cimport HANDLE_RETURN
13import threading
15from cuda.core._context cimport Context
16from cuda.core._context import ContextOptions
17from cuda.core._event cimport Event as cyEvent
18from cuda.core._event import Event, EventOptions
19from cuda.core._resource_handles cimport (
20 ContextHandle,
21 create_context_handle_ref,
22 get_primary_context,
23 as_cu,
24)
26from cuda.core._graph import GraphBuilder
27from cuda.core._stream import IsStreamT, Stream, StreamOptions
28from cuda.core._utils.clear_error_support import assert_type
29from cuda.core._utils.cuda_utils import (
30 ComputeCapability,
31 CUDAError,
32 driver,
33 handle_return,
34 runtime,
35)
36from cuda.core._stream cimport default_stream
38# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
39# but it seems it is very convenient to expose them for testing purposes...
40_tls = threading.local()
41_lock = threading.Lock()
42cdef bint _is_cuInit = False
45cdef class DeviceProperties:
46 """
47 A class to query various attributes of a CUDA device.
49 Attributes are read-only and provide information about the device.
50 """
51 cdef:
52 int _handle
53 dict _cache
55 def __init__(self, *args, **kwargs):
56 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2nq
58 @classmethod
59 def _init(cls, handle):
60 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a neoedeXdYdZdpeeedg0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dId|bJd}bw dcvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=cn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5j6j]e7j^e8j_e9j!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
61 self._handle = handle 2a neoedeXdYdZdpeeedg0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dId|bJd}bw dcvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=cn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5j6j]e7j^e8j_e9j!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
62 self._cache = {} 2a neoedeXdYdZdpeeedg0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dId|bJd}bw dcvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=cn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5j6j]e7j^e8j_e9j!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
63 return self 2a neoedeXdYdZdpeeedg0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dId|bJd}bw dcvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=cn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5j6j]e7j^e8j_e9j!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
65 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
66 """Retrieve the attribute value directly from the driver."""
67 cdef int val
68 cdef cydriver.CUresult err
69 with nogil: 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdkeMc|bzmJd}blew dcKd#ffgvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
70 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdkeMc|bzmJd}blew dcKd#ffgvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
71 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdkeMc|bzmJd}blew dcKd#ffgvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
72 return <int>default
73 HANDLE_RETURN(err) 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdkeMc|bzmJd}blew dcKd#ffgvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
74 return val 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdkeMc|bzmJd}blew dcKd#ffgvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
76 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
77 """Retrieve the attribute value, using cache if applicable."""
78 if attr not in self._cache: 2a neoeRfdeXdYdZdpeee?l@l[l]l^ldg_l`l{l|l}l~lambmcmiedmemfmgmhmimjmkm0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dhgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj#ffgvdzkAkBk/j/c|cCkDkEk}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSkTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_k`k{k|k}kEd~kalblcl,jdl-jelflgljkedfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zj0jlm1jZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
79 self._cache[attr] = self._get_attribute(attr, default) 2a neoeRfdeXdYdZdpeeedgie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dIdGdke|bJd}blew dcKd#ffgvdzkAkBk/j/c|cCkDkEk}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSkTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_k`k{k|k}kEd~kalblcl,jdl-jelflgljkedfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
80 return self._cache[attr] 2a neoeRfdeXdYdZdpeee?l@l[l]l^ldg_l`l{l|l}l~lambmcmiedmemfmgmhmimjmkm0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dhgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj#ffgvdzkAkBk/j/c|cCkDkEk}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSkTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_k`k{k|k}kEd~kalblcl,jdl-jelflgljkedfdkkFdhllkiljl=cklllml.jnloln geLc`dx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjbkblbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zj0jlm1jZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
82 @property
83 def max_threads_per_block(self) -> int:
84 """int: Maximum number of threads per block."""
85 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 26kmknkokpkqkrkljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l
87 @property
88 def max_block_dim_x(self) -> int:
89 """int: Maximum block dimension X."""
90 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2Wk
92 @property
93 def max_block_dim_y(self) -> int:
94 """int: Maximum block dimension Y."""
95 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2Xk
97 @property
98 def max_block_dim_z(self) -> int:
99 """int: Maximum block dimension Z."""
100 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2Yk
102 @property
103 def max_grid_dim_x(self) -> int:
104 """int: Maximum grid dimension X."""
105 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 20k`d
107 @property
108 def max_grid_dim_y(self) -> int:
109 """int: Maximum grid dimension Y."""
110 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 21k
112 @property
113 def max_grid_dim_z(self) -> int:
114 """int: Maximum grid dimension Z."""
115 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2a 2k
117 @property
118 def max_shared_memory_per_block(self) -> int:
119 """int: Maximum shared memory available per block in bytes."""
120 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 25kmknkokpkqkrkljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l
122 @property
123 def total_constant_memory(self) -> int:
124 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
125 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2kl
127 @property
128 def warp_size(self) -> int:
129 """int: Warp size in threads."""
130 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2ol
132 @property
133 def max_pitch(self) -> int:
134 """int: Maximum pitch in bytes allowed by memory copies."""
135 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2Ad
137 @property
138 def maximum_texture1d_width(self) -> int:
139 """int: Maximum 1D texture width."""
140 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2+k
142 @property
143 def maximum_texture1d_linear_width(self) -> int:
144 """int: Maximum width for a 1D texture bound to linear memory."""
145 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2*k
147 @property
148 def maximum_texture1d_mipmapped_width(self) -> int:
149 """int: Maximum mipmapped 1D texture width."""
150 return self._get_cached_attribute( 2bk
151 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2bk
152 )
154 @property
155 def maximum_texture2d_width(self) -> int:
156 """int: Maximum 2D texture width."""
157 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2;k
159 @property
160 def maximum_texture2d_height(self) -> int:
161 """int: Maximum 2D texture height."""
162 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2Dd
164 @property
165 def maximum_texture2d_linear_width(self) -> int:
166 """int: Maximum width for a 2D texture bound to linear memory."""
167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2:k
169 @property
170 def maximum_texture2d_linear_height(self) -> int:
171 """int: Maximum height for a 2D texture bound to linear memory."""
172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2.k
174 @property
175 def maximum_texture2d_linear_pitch(self) -> int:
176 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
177 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2/k
179 @property
180 def maximum_texture2d_mipmapped_width(self) -> int:
181 """int: Maximum mipmapped 2D texture width."""
182 return self._get_cached_attribute( 2ek
183 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2ek
184 )
186 @property
187 def maximum_texture2d_mipmapped_height(self) -> int:
188 """int: Maximum mipmapped 2D texture height."""
189 return self._get_cached_attribute( 2dk
190 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2dk
191 )
193 @property
194 def maximum_texture3d_width(self) -> int:
195 """int: Maximum 3D texture width."""
196 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2@k
198 @property
199 def maximum_texture3d_height(self) -> int:
200 """int: Maximum 3D texture height."""
201 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2?k
203 @property
204 def maximum_texture3d_depth(self) -> int:
205 """int: Maximum 3D texture depth."""
206 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2=k
208 @property
209 def maximum_texture3d_width_alternate(self) -> int:
210 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
211 return self._get_cached_attribute( 2gk
212 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2gk
213 )
215 @property
216 def maximum_texture3d_height_alternate(self) -> int:
217 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
218 return self._get_cached_attribute( 2fk
219 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2fk
220 )
222 @property
223 def maximum_texture3d_depth_alternate(self) -> int:
224 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
225 return self._get_cached_attribute( 2dd
226 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2dd
227 )
229 @property
230 def maximum_texturecubemap_width(self) -> int:
231 """int: Maximum cubemap texture width or height."""
232 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2[k
234 @property
235 def maximum_texture1d_layered_width(self) -> int:
236 """int: Maximum 1D layered texture width."""
237 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2Bd
239 @property
240 def maximum_texture1d_layered_layers(self) -> int:
241 """int: Maximum layers in a 1D layered texture."""
242 return self._get_cached_attribute( 2ak
243 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2ak
244 )
246 @property
247 def maximum_texture2d_layered_width(self) -> int:
248 """int: Maximum 2D layered texture width."""
249 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2-k
251 @property
252 def maximum_texture2d_layered_height(self) -> int:
253 """int: Maximum 2D layered texture height."""
254 return self._get_cached_attribute( 2cd
255 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2cd
256 )
258 @property
259 def maximum_texture2d_layered_layers(self) -> int:
260 """int: Maximum layers in a 2D layered texture."""
261 return self._get_cached_attribute( 2ck
262 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2ck
263 )
265 @property
266 def maximum_texturecubemap_layered_width(self) -> int:
267 """int: Maximum cubemap layered texture width or height."""
268 return self._get_cached_attribute( 2ik
269 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2ik
270 )
272 @property
273 def maximum_texturecubemap_layered_layers(self) -> int:
274 """int: Maximum layers in a cubemap layered texture."""
275 return self._get_cached_attribute( 2hk
276 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2hk
277 )
279 @property
280 def maximum_surface1d_width(self) -> int:
281 """int: Maximum 1D surface width."""
282 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 29k
284 @property
285 def maximum_surface2d_width(self) -> int:
286 """int: Maximum 2D surface width."""
287 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2$k
289 @property
290 def maximum_surface2d_height(self) -> int:
291 """int: Maximum 2D surface height."""
292 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2!k
294 @property
295 def maximum_surface3d_width(self) -> int:
296 """int: Maximum 3D surface width."""
297 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2(k
299 @property
300 def maximum_surface3d_height(self) -> int:
301 """int: Maximum 3D surface height."""
302 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2'k
304 @property
305 def maximum_surface3d_depth(self) -> int:
306 """int: Maximum 3D surface depth."""
307 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2%k
309 @property
310 def maximum_surface1d_layered_width(self) -> int:
311 """int: Maximum 1D layered surface width."""
312 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 28k
314 @property
315 def maximum_surface1d_layered_layers(self) -> int:
316 """int: Maximum layers in a 1D layered surface."""
317 return self._get_cached_attribute( 2|j
318 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2|j
319 )
321 @property
322 def maximum_surface2d_layered_width(self) -> int:
323 """int: Maximum 2D layered surface width."""
324 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2#k
326 @property
327 def maximum_surface2d_layered_height(self) -> int:
328 """int: Maximum 2D layered surface height."""
329 return self._get_cached_attribute( 2ad
330 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2ad
331 )
333 @property
334 def maximum_surface2d_layered_layers(self) -> int:
335 """int: Maximum layers in a 2D layered surface."""
336 return self._get_cached_attribute( 2}j
337 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2}j
338 )
340 @property
341 def maximum_surfacecubemap_width(self) -> int:
342 """int: Maximum cubemap surface width."""
343 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2)k
345 @property
346 def maximum_surfacecubemap_layered_width(self) -> int:
347 """int: Maximum cubemap layered surface width."""
348 return self._get_cached_attribute( 2~j
349 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2~j
350 )
352 @property
353 def maximum_surfacecubemap_layered_layers(self) -> int:
354 """int: Maximum layers in a cubemap layered surface."""
355 return self._get_cached_attribute( 2bd
356 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2bd
357 )
359 @property
360 def max_registers_per_block(self) -> int:
361 """int: Maximum number of 32-bit registers available to a thread block."""
362 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 24k
364 @property
365 def clock_rate(self) -> int:
366 """int: Typical clock frequency in kilohertz."""
367 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2Mczm.ln Lc
369 @property
370 def texture_alignment(self) -> int:
371 """int: Alignment requirement for textures."""
372 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2il
374 @property
375 def texture_pitch_alignment(self) -> int:
376 """int: Pitch alignment requirement for textures."""
377 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2jl
379 @property
380 def gpu_overlap(self) -> bool:
381 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead async_engine_count."""
382 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2Mk
384 @property
385 def multiprocessor_count(self) -> int:
386 """int: Number of multiprocessors on device."""
387 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2al`d
389 @property
390 def kernel_exec_timeout(self) -> bool:
391 """bool: Specifies whether there is a run time limit on kernels."""
392 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2:l
394 @property
395 def integrated(self) -> bool:
396 """bool: Device is integrated with host memory."""
397 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2Rk
399 @property
400 def can_map_host_memory(self) -> bool:
401 """bool: Device can map host memory into CUDA address space."""
402 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2Ak
404 @property
405 def compute_mode(self) -> int:
406 """int: Compute mode (See CUcomputemode for details)."""
407 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2/l
409 @property
410 def concurrent_kernels(self) -> bool:
411 """bool: Device can possibly execute multiple kernels concurrently."""
412 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2Fk
414 @property
415 def ecc_enabled(self) -> bool:
416 """bool: Device has ECC support enabled."""
417 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Ik
419 @property
420 def pci_bus_id(self) -> int:
421 """int: PCI bus ID of the device."""
422 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2el
424 @property
425 def pci_device_id(self) -> int:
426 """int: PCI device ID of the device."""
427 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2fl
429 @property
430 def pci_domain_id(self) -> int:
431 """int: PCI domain ID of the device."""
432 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2gl
434 @property
435 def tcc_driver(self) -> bool:
436 """bool: Device is using TCC driver model."""
437 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2hl
439 @property
440 def memory_clock_rate(self) -> int:
441 """int: Peak memory clock frequency in kilohertz."""
442 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2Od
444 @property
445 def global_memory_bus_width(self) -> int:
446 """int: Global memory bus width in bits."""
447 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2yd
449 @property
450 def l2_cache_size(self) -> int:
451 """int: Size of L2 cache in bytes."""
452 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2Tk
454 @property
455 def max_threads_per_multiprocessor(self) -> int:
456 """int: Maximum resident threads per multiprocessor."""
457 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 27kmknkokpkqkrkljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj
459 @property
460 def unified_addressing(self) -> bool:
461 """bool: Device shares a unified address space with the host."""
462 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2ll
464 @property
465 def compute_capability_major(self) -> int:
466 """int: Major compute capability version number."""
467 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a neoeRfdeXdYdZdpeeeie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d#ffgDkn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
469 @property
470 def compute_capability_minor(self) -> int:
471 """int: Minor compute capability version number."""
472 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a neoeRfdeXdYdZdpeeeie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d#ffgEkn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
474 @property
475 def global_l1_cache_supported(self) -> bool:
476 """bool: Device supports caching globals in L1."""
477 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2Jk
479 @property
480 def local_l1_cache_supported(self) -> bool:
481 """bool: Device supports caching locals in L1."""
482 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2zd
484 @property
485 def max_shared_memory_per_multiprocessor(self) -> int:
486 """int: Maximum shared memory available per multiprocessor in bytes."""
487 return self._get_cached_attribute( 2{jmknkokpkqkrkljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj
488 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2{jmknkokpkqkrkljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj
489 )
491 @property
492 def max_registers_per_multiprocessor(self) -> int:
493 """int: Maximum number of 32-bit registers available per multiprocessor."""
494 return self._get_cached_attribute( 2_jljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj
495 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2_jljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj
496 )
498 @property
499 def managed_memory(self) -> bool:
500 """bool: Device can allocate managed memory on this system."""
501 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2Uk
503 @property
504 def multi_gpu_board(self) -> bool:
505 """bool: Device is on a multi-GPU board."""
506 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2}k
508 @property
509 def multi_gpu_board_group_id(self) -> int:
510 """int: Unique id for a group of devices on the same multi-GPU board."""
511 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2Ed
513 @property
514 def host_native_atomic_supported(self) -> bool:
515 """bool: Link between the device and the host supports all native atomic operations."""
516 return bool( 2]j
517 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2]j
518 )
520 @property
521 def single_to_double_precision_perf_ratio(self) -> int:
522 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
523 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2;l
525 @property
526 def pageable_memory_access(self) -> bool:
527 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
528 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2dl
530 @property
531 def concurrent_managed_access(self) -> bool:
532 """bool: Device can coherently access managed memory concurrently with the CPU."""
533 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2wdvcwc@e=d^d[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$jffhf
535 @property
536 def compute_preemption_supported(self) -> bool:
537 """bool: Device supports compute preemption."""
538 return bool( 2}c
539 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2}c
540 )
542 @property
543 def can_use_host_pointer_for_registered_mem(self) -> bool:
544 """bool: Device can access host registered memory at the same virtual address as the CPU."""
545 return bool( 2/c
546 self._get_cached_attribute( 2/c
547 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2/c
548 )
549 )
551 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
553 @property
554 def cooperative_launch(self) -> bool:
555 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2Gk`d
558 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
560 @property
561 def max_shared_memory_per_block_optin(self) -> int:
562 """int: Maximum optin shared memory per block."""
563 return self._get_cached_attribute( 2`j
564 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2`j
565 )
567 @property
568 def pageable_memory_access_uses_host_page_tables(self) -> bool:
569 """bool: Device accesses pageable memory via the host's page tables."""
570 return bool( 2-j
571 self._get_cached_attribute( 2-j
572 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2-j
573 )
574 )
576 @property
577 def direct_managed_mem_access_from_host(self) -> bool:
578 """bool: The host can directly access managed memory on the device without migration."""
579 return bool( 2'j
580 self._get_cached_attribute( 2'j
581 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2'j
582 )
583 )
585 @property
586 def virtual_memory_management_supported(self) -> bool:
587 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
588 return bool( 2.j_d~bgcAeacBe{bcc
589 self._get_cached_attribute( 2.j_d~bgcAeacBe{bcc
590 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2.j_d~bgcAeacBe{bcc
591 )
592 )
594 @property
595 def handle_type_posix_file_descriptor_supported(self) -> bool:
596 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
597 return bool( 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj;cB Zj0j1j
598 self._get_cached_attribute( 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj;cB Zj0j1j
599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj;cB Zj0j1j
600 )
601 )
603 @property
604 def handle_type_win32_handle_supported(self) -> bool:
605 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
606 return bool( 2?j
607 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2?j
608 )
610 @property
611 def handle_type_win32_kmt_handle_supported(self) -> bool:
612 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
613 return bool( 2)j
614 self._get_cached_attribute( 2)j
615 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2)j
616 )
617 )
619 @property
620 def max_blocks_per_multiprocessor(self) -> int:
621 """int: Maximum number of blocks per multiprocessor."""
622 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2Zk
624 @property
625 def generic_compression_supported(self) -> bool:
626 """bool: Device supports compression of memory."""
627 return bool( 2:j
628 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2:j
629 )
631 @property
632 def max_persisting_l2_cache_size(self) -> int:
633 """int: Maximum L2 persisting lines capacity setting in bytes."""
634 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 23k
636 @property
637 def max_access_policy_window_size(self) -> int:
638 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
639 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2Vk
641 @property
642 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
643 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
644 return bool( 2(j
645 self._get_cached_attribute( 2(j
646 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2(j
647 )
648 )
650 @property
651 def reserved_shared_memory_per_block(self) -> int:
652 """int: Shared memory reserved by CUDA driver per block in bytes."""
653 return self._get_cached_attribute( 2ed
654 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2ed
655 )
657 @property
658 def sparse_cuda_array_supported(self) -> bool:
659 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
660 return bool( 2fd
661 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2fd
662 )
664 @property
665 def read_only_host_register_supported(self) -> bool:
666 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
667 return bool( 2jk
668 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2jk
669 )
671 @property
672 def memory_pools_supported(self) -> bool:
673 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
674 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmhgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj`kvcwcbcqePd@e=d]d^dre8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j)cffzehfegB Zj0jlm1j
676 @property
677 def gpu_direct_rdma_supported(self) -> bool:
678 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
679 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2Kk{bcc
681 @property
682 def gpu_direct_rdma_flush_writes_options(self) -> int:
683 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
684 return self._get_cached_attribute( 2;j
685 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2;j
686 )
688 @property
689 def gpu_direct_rdma_writes_ordering(self) -> int:
690 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
691 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2Lk
693 @property
694 def mempool_supported_handle_types(self) -> int:
695 """int: Handle types supported with mempool based IPC."""
696 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2{k
698 @property
699 def deferred_mapping_cuda_array_supported(self) -> bool:
700 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
701 return bool( 2:c
702 self._get_cached_attribute( 2:c
703 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2:c
704 )
705 )
707 @property
708 def numa_config(self) -> int:
709 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
710 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2bl
712 @property
713 def numa_id(self) -> int:
714 """int: NUMA node ID of the GPU memory."""
715 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2cl
717 @property
718 def multicast_supported(self) -> bool:
719 """bool: Device supports switch multicast and reduction operations."""
720 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2~k
722 @property
723 def surface_alignment(self) -> int:
724 """int: Surface alignment requirement in bytes."""
725 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2Fd
727 @property
728 def async_engine_count(self) -> int:
729 """int: Number of asynchronous engines."""
730 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2vd
732 @property
733 def can_tex2d_gather(self) -> bool:
734 """bool: True if device supports 2D texture gather operations, False if not."""
735 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Bk
737 @property
738 def maximum_texture2d_gather_width(self) -> int:
739 """int: Maximum 2D texture gather width."""
740 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2Cd
742 @property
743 def maximum_texture2d_gather_height(self) -> int:
744 """int: Maximum 2D texture gather height."""
745 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2,k
747 @property
748 def stream_priorities_supported(self) -> bool:
749 """bool: True if device supports stream priorities, False if not."""
750 return bool( 2kk
751 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2kk
752 )
754 @property
755 def can_flush_remote_writes(self) -> bool:
756 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
757 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2zk
759 @property
760 def host_register_supported(self) -> bool:
761 """bool: Device supports host memory registration via cudaHostRegister."""
762 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2Qk
764 @property
765 def timeline_semaphore_interop_supported(self) -> bool:
766 """bool: External timeline semaphore interop is supported on the device."""
767 return bool( 2=c
768 self._get_cached_attribute( 2=c
769 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2=c
770 )
771 )
773 @property
774 def cluster_launch(self) -> bool:
775 """bool: Indicates device supports cluster launch."""
776 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2Ck
778 @property
779 def can_use_64_bit_stream_mem_ops(self) -> bool:
780 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
781 return bool( 2/j
782 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2/j
783 )
785 @property
786 def can_use_stream_wait_value_nor(self) -> bool:
787 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
788 return bool( 2|c
789 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2|c
790 )
792 @property
793 def dma_buf_supported(self) -> bool:
794 """bool: Device supports buffer sharing with dma_buf mechanism."""
795 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Hk
797 # Start of CUDA 12 device attributes
799 @property
800 def ipc_event_supported(self) -> bool:
801 """bool: Device supports IPC Events."""
802 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2Sk
804 @property
805 def mem_sync_domain_count(self) -> int:
806 """int: Number of memory domains the device supports."""
807 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2_k
809 @property
810 def tensor_map_access_supported(self) -> bool:
811 """bool: Device supports accessing memory using Tensor Map."""
812 return bool( 2lk
813 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2lk
814 )
816 @property
817 def handle_type_fabric_supported(self) -> bool:
818 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
819 return bool( 2=j
820 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2=j
821 )
823 @property
824 def unified_function_pointers(self) -> bool:
825 """bool: Device supports unified function pointers."""
826 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2ml
828 @property
829 def mps_enabled(self) -> bool:
830 """bool: Indicates if contexts created on this device will be shared via MPS."""
831 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2|k
833 @property
834 def host_numa_id(self) -> int:
835 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
836 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2Pk
838 @property
839 def d3d12_cig_supported(self) -> bool:
840 """bool: Device supports CIG with D3D12."""
841 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2xd
843 @property
844 def mem_decompress_algorithm_mask(self) -> int:
845 """int: The returned valued shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
846 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2]k
848 @property
849 def mem_decompress_maximum_length(self) -> int:
850 """int: The returned valued is the maximum length in bytes of a single decompress operation that is allowed."""
851 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2^k
853 @property
854 def vulkan_cig_supported(self) -> bool:
855 """bool: Device supports CIG with Vulkan."""
856 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2nl
858 @property
859 def gpu_pci_device_id(self) -> int:
860 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
862 Returns 0 if the driver does not support this query.
863 """
864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2Nk
866 @property
867 def gpu_pci_subsystem_id(self) -> int:
868 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
870 Returns 0 if the driver does not support this query.
871 """
872 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2Ok
874 @property
875 def host_numa_virtual_memory_management_supported(self) -> bool:
876 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
877 return bool( 2*j
878 self._get_cached_attribute( 2*j
879 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2*j
880 )
881 )
883 @property
884 def host_numa_memory_pools_supported(self) -> bool:
885 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
886 return bool( 2^j
887 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2^j
888 )
890 # Start of CUDA 13 device attributes
892 @property
893 def host_numa_multinode_ipc_supported(self) -> bool:
894 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
895 return bool( 2~c
896 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2~c
897 )
899 @property
900 def host_memory_pools_supported(self) -> bool:
901 """bool: Device suports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
902 return bool( 2igkglgkemgogJd}bsgugledcRjKd[jhe|e?c}e@c~e[caf]cbf^ccf_cdf`cef{cgfifjf?dh fc
903 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2igkglgkemgogJd}bsgugledcRjKd[jhe|e?c}e@c~e[caf]cbf^ccf_cdf`cef{cgfifjf?dh fc
904 )
906 @property
907 def host_virtual_memory_management_supported(self) -> bool:
908 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
909 return bool( 2+j
910 self._get_cached_attribute( 2+j
911 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2+j
912 )
913 )
915 @property
916 def host_alloc_dma_buf_supported(self) -> bool:
917 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
918 return bool( 2@j
919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2@j
920 )
922 @property
923 def only_partial_host_native_atomic_supported(self) -> bool:
924 """bool: Link between the device and the host supports only some native atomic operations."""
925 return bool( 2,j
926 self._get_cached_attribute( 2,j
927 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2,j
928 )
929 )
932class Device:
933 """Represent a GPU and act as an entry point for cuda.core features.
935 This is a singleton object that helps ensure interoperability
936 across multiple libraries imported in the process to both see
937 and use the same GPU device.
939 While acting as the entry point, many other CUDA resources can be
940 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
941 resource created through this device, will continue to refer to
942 this device's context.
944 Newly returned :obj:`~_device.Device` objects are thread-local singletons
945 for a specified device.
947 Note
948 ----
949 Will not initialize the GPU.
951 Parameters
952 ----------
953 device_id : int, optional
954 Device ordinal to return a :obj:`~_device.Device` object for.
955 Default value of `None` return the currently used device.
957 """
958 __slots__ = ("_device_id", "_memory_resource", "_has_inited", "_properties", "_uuid", "_context", "__weakref__")
960 def __new__(cls, device_id: Device | int | None = None):
961 if isinstance(device_id, Device): 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg@o?l[o@l]o[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGd7okeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIh8peg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB :oZjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
962 return device_id 2@o[o]oskrltkukvkslwkxkhgmmjgnmIdAfGd7o|bngpgqgrgtgvgtlulPjQjSjwgxgmnnnonpnqePd]dre8cse9cte!cue#cve$cwe%cxe'cye(c)cze8p~bac{b]m^m_m`m{m|m}m~manbncndnenfngnhnin:ojnkn
964 Device_ensure_cuda_initialized() 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
965 device_id = Device_resolve_device_id(device_id) 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
966 devices = Device_ensure_tls_devices(cls) 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
968 try: 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
969 return devices[device_id] 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
970 except IndexError: 22o3o
971 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 22o3o
973 def _check_context_initialized(self):
974 if not self._has_inited: 2RfdeXdunYdvnZdpeee@o[o]o{o|o}oskrltkukvkslwkxkplieql^o_o`o~naobo0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dMczm8o9o!o#o$o%o'o(o~o9p!pme6o!geotlul)l)owgxgmnnnonpnfogohoiojokoRdSdcolojen Lddo@drnmonooopoqorosotouovogeAmLc,lTd`dwmUd-lgdyg#p$pap%pbp'p(pcpdp)p*p+pep,pfpgphpipjpkplpmpnp-popppqprp.psptp/p:p;p=pup?pvp@p[pwpxp]p^p_pyp`pzpApBpCpDpEpFpGpHp{pIpJpKpLp|pMpNp}p~paqbqOpcqPpdqeqQpRpfqgqhqSpiqTpUpVpWpXpYpZp0p1pjq2p3p4p5pkq6p7plqmqPd=d]d^dhe|d?dhc;ohd$fYf'fid(fjd)fZf*fb kdc *co +fp ecMdHdNdNc/ei 0fj +cNf:eq ,fr ld-f1f.fd mde ,cs /ft -cOf;ePfOc=ek 2fl .cQf?eu :fv nd;f3f=fod?f4f@fpd[f5f]fqd^f6f_frd`f7f{fsd|f8f}ftd~f9fagudbg!fcgwo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoMo:nNoOo
975 raise CUDAError(
976 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
977 )
980 @classmethod
981 def get_all_devices(cls):
982 """
983 Query the available device instances.
985 Returns
986 -------
987 tuple of Device
988 A tuple containing instances of available devices.
989 """
990 from cuda.core import system 2QoRoSoCePoXfykUoVo]m^m_m`m{m|m}m~manbncndnenfngnhn
991 total = system.get_num_devices() 2QoRoSoCePoXfykUoVo]m^m_m`m{m|m}m~manbncndnenfngnhn
992 return tuple(cls(device_id) for device_id in range(total)) 2QoRoSoCePoXfykUoVo]m^m_m`m{m|m}m~manbncndnenfngnhn
994 def to_system_device(self) -> 'cuda.core.system.Device':
995 """
996 Get the corresponding :class:`cuda.core.system.Device` (which is used
997 for NVIDIA Machine Library (NVML) access) for this
998 :class:`cuda.core.Device` (which is used for CUDA access).
1000 The devices are mapped to one another by their UUID.
1002 Returns
1003 -------
1004 cuda.core.system.Device
1005 The corresponding system-level device instance used for NVML access.
1006 """
1007 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2%j
1009 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2%j
1010 raise RuntimeError(
1011 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+"
1012 )
1014 from cuda.core.system import Device as SystemDevice 2%j
1015 return SystemDevice(uuid=self.uuid) 2%j
1017 @property
1018 def device_id(self) -> int:
1019 """Return device ordinal."""
1020 return self._device_id 22j|n3j}n@o[o]o{o|o}oskrltkukvkslwkxkplieql^o_o`o~naoboSfhg*ommjgnmTfId+oAfGd7oMc|bQdngUfpg,o-oqg.oVfrg/ometg6o!gvgtlul)lPjumQjWfSjKdwgxgmnnnonpnPofgRdSdXf*lqn+lgdygbcqePdTo]d^dre8cse9cte!cue#cve$cwe%cxe'cye(c)cze8p_d~bac{bWoXohcljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCj]m^m_m`m{m|m}m~manbncndnenfngnhnin:ojnknhdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudBmoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcKc7ctm
1022 @property
1023 def pci_bus_id(self) -> str:
1024 """Return a PCI Bus Id string for this device."""
1025 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2Ceqn%j
1026 return bus_id[:12].decode() 2Ceqn%j
1028 def can_access_peer(self, peer: Device | int) -> bool:
1029 """Check if this device can access memory from the specified peer device.
1031 Queries whether peer-to-peer memory access is supported between this
1032 device and the specified peer device.
1034 Parameters
1035 ----------
1036 peer : Device | int
1037 The peer device to check accessibility to. Can be a Device object or device ID.
1038 """
1039 peer = Device(peer)
1040 cdef int d1 = <int> self.device_id
1041 cdef int d2 = <int> peer.device_id
1042 if d1 == d2:
1043 return True
1044 cdef int value = 0
1045 with nogil:
1046 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1047 return bool(value)
1049 @property
1050 def uuid(self) -> str:
1051 """Return a UUID for the device.
1053 Returns 16-octets identifying the device. If the device is in
1054 MIG mode, returns its MIG UUID which uniquely identifies the
1055 subscribed MIG compute instance.
1057 Note
1058 ----
1059 MIG UUID is only returned when device is in MIG mode and the
1060 driver is older than CUDA 11.4.
1062 The UUID is cached after first access to avoid repeated CUDA API calls.
1064 """
1065 cdef cydriver.CUuuid uuid
1066 cdef cydriver.CUdevice dev
1067 cdef bytes uuid_b
1068 cdef str uuid_hex
1070 if self._uuid is None: 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYjCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B Zj0j1j}decMdHdf ~dg NdbeceVdWd
1071 dev = self._device_id 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1072 with nogil: 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1073 IF CUDA_CORE_BUILD_MAJOR == 12:
1074 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1075 ELSE: # 13.0+
1076 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1077 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1078 uuid_hex = uuid_b.hex() 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1079 # 8-4-4-4-12
1080 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2Gdw KdCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B }decMdHdf ~dg NdbeceVdWd
1081 return self._uuid 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYjCeCmvmDmEm%j+l8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B Zj0j1j}decMdHdf ~dg NdbeceVdWd
1083 @property
1084 def name(self) -> str:
1085 """Return the device name."""
1086 # Use 256 characters to be consistent with CUDA Runtime
1087 cdef int LENGTH = 256 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1088 cdef bytes name = bytes(LENGTH) 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1089 cdef char* name_ptr = name 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1090 cdef cydriver.CUdevice this_dev = self._device_id 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1091 with nogil: 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1092 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1093 name = name.split(b"\0")[0] 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1094 return name.decode() 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{d*lae
1096 @property
1097 def properties(self) -> DeviceProperties:
1098 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1099 if self._properties is None: 2a neoeRfdeXdYdZdpeee?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhmimjmkm0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dhgigjgkgIdlgGdkeMc|bzmmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj#ffgDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zj0jlm1jZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1100 self._properties = DeviceProperties._init(self._device_id) 2a neoedeXdYdZdpeeedg0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dId|bJd}bw dcvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=cn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5j6j]e7j^e8j_e9j!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1102 return self._properties 2a neoeRfdeXdYdZdpeee?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhmimjmkm0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dhgigjgkgIdlgGdkeMc|bzmmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYj#ffgDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnloln geLc`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcbcqePd@e=d]d^dhere8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfifegjf?dh fc_d~bgcAeacBe{bcckf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB Zj0jlm1jZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1104 @property
1105 def compute_capability(self) -> ComputeCapability:
1106 """Return a named tuple with 2 fields: major and minor."""
1107 cdef DeviceProperties prop = self.properties 2a neoeRfdeXdYdZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dMczm#ffgn geLc`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjb(nkb)nlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGb*nHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1108 if "compute_capability" in prop._cache: 2a neoeRfdeXdYdZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dMczm#ffgn geLc`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjb(nkb)nlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGb*nHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1109 return prop._cache["compute_capability"] 2a Rfskrltkukvkslwkxkplieql[dMczm#fge`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOly PlQlRlSlTlz UlA snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjb(nkb)nlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGb*nHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1110 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a neoeRfdeXdYdZdpeeeie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d#ffgn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1111 prop._cache["compute_capability"] = cc 2a neoeRfdeXdYdZdpeeeie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d#ffgn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1112 return cc 2a neoeRfdeXdYdZdpeeeie0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d#ffgn geLcx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1114 @property
1115 def arch(self) -> str:
1116 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1117 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a skrltkukvkslwkxkplieql#fgewmsnG H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! kf# $ % ' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm
1119 @property
1120 def context(self) -> Context:
1121 """Return the :obj:`~_context.Context` associated with this device.
1123 Note
1124 ----
1125 Device must be initialized.
1127 """
1128 self._check_context_initialized() 2$f)f*co +fp Md/eNf-f,cs /ft Of=eQf;f?f[f^f`f|f~fbg
1129 return self._context 2$f)f*co +fp Md/eNf-f,cs /ft Of=eQf;f?f[f^f`f|f~fbg
1131 @property
1132 def memory_resource(self) -> MemoryResource:
1133 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1134 cdef int attr, device_id
1135 if self._memory_resource is None: 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cymtm
1136 # If the device is in TCC mode, or does not support memory pools for some other reason,
1137 # use the SynchronousMemoryResource which does not use memory pools.
1138 device_id = self._device_id 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7ctm
1139 with nogil: 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7ctm
1140 HANDLE_RETURN( 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7ctm
1141 cydriver.cuDeviceGetAttribute( 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7ctm
1142 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1143 )
1144 )
1145 if attr == 1: 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7ctm
1146 from cuda.core._memory import DeviceMemoryResource 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcyczcAcQcScBcCcTcUcDcEcFcGc0cHcIc4c5c6cJcKc7ctm
1147 self._memory_resource = DeviceMemoryResource(self._device_id) 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcyczcAcQcScBcCcTcUcDcEcFcGc0cHcIc4c5c6cJcKc7ctm
1148 else:
1149 from cuda.core._memory import _SynchronousMemoryResource 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcRcBcCcVcDcEcFcWcXcYcGcZc1cHc2cIc3cJcKctm
1150 self._memory_resource = _SynchronousMemoryResource(self._device_id) 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcRcBcCcVcDcEcFcWcXcYcGcZc1cHc2cIc3cJcKctm
1152 return self._memory_resource 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cymtm
1154 @memory_resource.setter
1155 def memory_resource(self, mr):
1156 from cuda.core._memory import MemoryResource
1157 assert_type(mr, MemoryResource)
1158 self._memory_resource = mr
1160 @property
1161 def default_stream(self) -> Stream:
1162 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1164 The type of default stream returned depends on if the environment
1165 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1167 If set, returns a per-thread default stream. Otherwise returns
1168 the legacy stream.
1170 """
1171 return default_stream() 2vlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A Yo
1173 def __int__(self):
1174 """Return device_id."""
1175 return self._device_id 2^o_o`oRdSd
1177 def __repr__(self):
1178 return f"<Device {self._device_id} ({self.name})>" 2Sf*ommnmTf+oAf7oMczm8o9o!o#o$o%o'o(oQdZoUf,o-o.oVf/ome6o!geotlul)l)oum=oWf?o{dae
1180 def __hash__(self) -> int:
1181 return hash(self.uuid) 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw PjdcQjRjSjKdTjUjVjWjXjYjCmvmDmEm8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B Zj0j1j}decMdHdf ~dg NdbeceVdWd
1183 def __eq__(self, other) -> bool:
1184 if not isinstance(other, Device): 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw TjUjVjWjXjYj0ovm1o4o8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B Zj0j1j%f-cOf;eC ggD PfVdWd:n
1185 return NotImplemented 24o%f-cOf;eC ggD Pf:n
1186 return self._device_id == other._device_id 2hgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjngogpgJdqg}brgsgtgugvgleOjw TjUjVjWjXjYj0ovm1o8c9c!c#c$c%c'c(c?c@c[c]c^c_c`c{c)ch B Zj0j1j%fVdWd
1188 def __reduce__(self):
1189 return Device, (self.device_id,) 2Sf*ommnmTf+oAf7oMcQdUf,o-o.oVf/ome6o!gtlul)lumWfwgxgmnnnonpn
1191 def set_current(self, ctx: Context = None) -> Context | None:
1192 """Set device to be used for GPU executions.
1194 Initializes CUDA and sets the calling thread to a valid CUDA
1195 context. By default the primary context is used, but optional `ctx`
1196 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1198 Providing a `ctx` causes the previous set context to be popped and returned.
1200 Parameters
1201 ----------
1202 ctx : :obj:`~_context.Context`, optional
1203 Optional context to push onto this device's current thread stack.
1205 Returns
1206 -------
1207 :obj:`~_context.Context`, optional
1208 Popped context.
1210 Examples
1211 --------
1212 Acts as an entry point of this object. Users always start a code by
1213 calling this method, e.g.
1215 >>> from cuda.core import Device
1216 >>> dev0 = Device(0)
1217 >>> dev0.set_current()
1218 >>> # ... do work on device 0 ...
1220 """
1221 cdef ContextHandle h_context
1222 cdef cydriver.CUcontext prev_ctx, curr_ctx
1224 if ctx is not None: 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1225 # TODO: revisit once Context is cythonized
1226 assert_type(ctx, Context)
1227 if ctx._device_id != self._device_id:
1228 raise RuntimeError(
1229 "the provided context was created on the device with"
1230 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1231 )
1232 # prev_ctx is the previous context
1233 curr_ctx = as_cu(ctx._h_context)
1234 prev_ctx = NULL
1235 with nogil:
1236 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx))
1237 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx))
1238 self._has_inited = True
1239 self._context = ctx # Store owning context reference
1240 if prev_ctx != NULL:
1241 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1242 else:
1243 # use primary ctx
1244 h_context = get_primary_context(self._device_id) 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1245 if h_context.get() == NULL: 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1246 raise ValueError("Cannot set NULL context as current")
1247 with nogil: 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1248 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1249 self._has_inited = True 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1250 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2tnBgCgDgEgFgGgHgIg?l@l[l]l^ldg_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9ghgigjgkgIdlgGdke|bmgDjEjFjGjHjIjJjKjLjMjNjQdngZoogpgJdqg}brgsgtgug!gvgeoleOjw PjdcQjRjSjKdTjUjVjWjXjYj#g$g%g'g(g)gRdSdwnxn*gynzn+gAnXfBnCn{dom,gEnjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`gAmLc,lTd`dGn{gInJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhNn@eOn=dPn]dQn^dchheRnreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn0nzg1n2n]emh3n^e4nnh_eoh5nAg6nph`eqhrh{e7n8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccKh# $ % ' Lh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbinB :oZjjn0j;olmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyilnziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiBmTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-i.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1252 def create_context(self, options: ContextOptions = None) -> Context:
1253 """Create a new :obj:`~_context.Context` object.
1255 Note
1256 ----
1257 The newly context will not be set as current.
1259 Parameters
1260 ----------
1261 options : :obj:`~_context.ContextOptions`, optional
1262 Customizable dataclass for context creation options.
1264 Returns
1265 -------
1266 :obj:`~_context.Context`
1267 Newly created context object.
1269 """
1270 raise NotImplementedError("WIP: https://github.com/NVIDIA/cuda-python/issues/189")
1272 def create_stream(self, obj: IsStreamT | None = None, options: StreamOptions | None = None) -> Stream:
1273 """Create a Stream object.
1275 New stream objects can be created in two different ways:
1277 1) Create a new CUDA stream with customizable ``options``.
1278 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1280 Option (2) internally holds a reference to the foreign object
1281 such that the lifetime is managed.
1283 Note
1284 ----
1285 Device must be initialized.
1287 Parameters
1288 ----------
1289 obj : :obj:`~_stream.IsStreamT`, optional
1290 Any object supporting the ``__cuda_stream__`` protocol.
1291 options : :obj:`~_stream.StreamOptions`, optional
1292 Customizable dataclass for stream creation options.
1294 Returns
1295 -------
1296 :obj:`~_stream.Stream`
1297 Newly created stream object.
1299 """
1300 self._check_context_initialized() 2RfdeXdunYdvnZdpeee@o[o]o{o|o}oskrltkukvkslwkxkplieql^o_o`o~naobo0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dMczm8o9o!o#o$o%o'o(o~o9p!pme6o!geotlul)l)owgxgmnnnonpnfogohoiojokolojen LdmonooopoqorosotouovogeAmLc,lTd`dwmUd-l#p$pap%pbp'p(pcpdp)p*p+pep,pfpgphpipjpkplpmpnp-popppqprp.psptp/p:p;p=pup?pvp@p[pwpxp]p^p_pyp`pzpApBpCpDpEpFpGpHp{pIpJpKpLp|pMpNp}p~paqbqOpcqPpdqeqQpRpfqgqhqSpiqTpUpVpWpXpYpZp0p1pjq2p3p4p5pkq6p7plqmqPd=d|d?dhc;o'f(f*fNd+cNf:eq ,fr .fPf.cQf?eu :fv =f@f]f_f{f}fagcgwo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoMo:nNoOo
1301 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2RfdeXdunYdvnZdpeee@o[o]o{o|o}oskrltkukvkslwkxkplieql^o_o`o~naobo0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dMczm8o9o!o#o$o%o'o(o~o9p!pme6o!geotlul)l)owgxgmnnnonpnfogohoiojokolojen LdmonooopoqorosotouovogeAmLc,lTd`dwmUd-l#p$pap%pbp'p(pcpdp)p*p+pep,pfpgphpipjpkplpmpnp-popppqprp.psptp/p:p;p=pup?pvp@p[pwpxp]p^p_pyp`pzpApBpCpDpEpFpGpHp{pIpJpKpLp|pMpNp}p~paqbqOpcqPpdqeqQpRpfqgqhqSpiqTpUpVpWpXpYpZp0p1pjq2p3p4p5pkq6p7plqmqPd=d|d?dhc;o'f(f*fNd+cNf:eq ,fr .fPf.cQf?eu :fv =f@f]f_f{f}fagcgwo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoMo:nNoOo
1303 def create_event(self, options: EventOptions | None = None) -> Event:
1304 """Create an Event object without recording it to a Stream.
1306 Note
1307 ----
1308 Device must be initialized.
1310 Parameters
1311 ----------
1312 options : :obj:`EventOptions`, optional
1313 Customizable dataclass for event creation options.
1315 Returns
1316 -------
1317 :obj:`~_event.Event`
1318 Newly created event object.
1320 """
1321 self._check_context_initialized() 2~ocoLddo@drnYfZfHdNc/ei 0fj :e1f;eOc=ek 2fl ?e3f4f5f6f7f8f9f!f
1322 cdef Context ctx = self._context 2~ocoLddo@drnYfZfHdNc/ei 0fj :e1f;eOc=ek 2fl ?e3f4f5f6f7f8f9f!f
1323 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2~ocoLddo@drnYfZfHdNc/ei 0fj :e1f;eOc=ek 2fl ?e3f4f5f6f7f8f9f!f
1325 def allocate(self, size, stream: Stream | GraphBuilder | None = None) -> Buffer:
1326 """Allocate device memory from a specified stream.
1328 Allocates device memory of `size` bytes on the specified `stream`
1329 using the memory resource currently associated with this Device.
1331 Parameter `stream` is optional, using a default stream by default.
1333 Note
1334 ----
1335 Device must be initialized.
1337 Parameters
1338 ----------
1339 size : int
1340 Number of bytes to allocate.
1341 stream : :obj:`~_stream.Stream`, optional
1342 The stream establishing the stream ordering semantic.
1343 Default value of `None` uses default stream.
1345 Returns
1346 -------
1347 :obj:`~_memory.Buffer`
1348 Newly created buffer object.
1350 """
1351 self._check_context_initialized() 2RdSdgdyghdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdud
1352 return self.memory_resource.allocate(size, stream) 2RdSdgdyghdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdud
1354 def sync(self):
1355 """Synchronize the device.
1357 Note
1358 ----
1359 Device must be initialized.
1361 """
1362 self._check_context_initialized() 2wgxgmnnnonpnRdSd,lTdUd-lapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7pPd=d]d^dhe?d
1363 handle_return(runtime.cudaDeviceSynchronize()) 2wgxgmnnnonpnRdSd,lTdUd-lapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7pPd=d]d^dhe?d
1365 def create_graph_builder(self) -> GraphBuilder:
1366 """Create a new :obj:`~_graph.GraphBuilder` object.
1368 Returns
1369 -------
1370 :obj:`~_graph.GraphBuilder`
1371 Newly created graph builder object.
1373 """
1374 self._check_context_initialized() 2RfdeXdunYdvnZdee@o[o]o{o|o}osktkukvkwkxkplieql^o_o`o~naobo0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d
1375 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2RfdeXdunYdvnZdee@o[o]o{o|o}osktkukvkwkxkplieql^o_o`o~naobo0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;d
1378cdef inline int Device_ensure_cuda_initialized() except? -1:
1379 """Initialize CUDA driver and check version compatibility (once per process)."""
1380 global _is_cuInit
1381 if _is_cuInit is False: 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1382 with _lock, nogil:
1383 HANDLE_RETURN(cydriver.cuInit(0))
1384 _is_cuInit = True
1385 try:
1386 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1387 except ImportError:
1388 pass
1389 else:
1390 warn_if_cuda_major_version_mismatch()
1391 return 0 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1394cdef inline int Device_resolve_device_id(device_id) except? -1:
1395 """Resolve device_id, defaulting to current device or 0."""
1396 cdef cydriver.CUdevice dev
1397 cdef cydriver.CUcontext ctx
1398 cdef cydriver.CUresult err
1399 if device_id is None: 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1400 with nogil: 2a 2j|nne3j}noeRfdeXdunYdvnZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dfogohoiojoko#ffgRdSdcoloDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Lddo@drnmonooopoqorosotouovoge4jLc,lTd`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEeImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdTo@e=d]d^dhe5ore8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfif[mMf|djf?dh fc_d~bgcAeacBe{bcckf# $ Wo% Xo' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm lnYowo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoBmMo:nNoOoxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym
1401 err = cydriver.cuCtxGetDevice(&dev) 2a 2j|nne3j}noeRfdeXdunYdvnZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dfogohoiojoko#ffgRdSdcoloDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Lddo@drnmonooopoqorosotouovoge4jLc,lTd`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEeImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdTo@e=d]d^dhe5ore8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfif[mMf|djf?dh fc_d~bgcAeacBe{bcckf# $ Wo% Xo' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm lnYowo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoBmMo:nNoOoxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym
1402 if err == cydriver.CUresult.CUDA_SUCCESS: 2a 2j|nne3j}noeRfdeXdunYdvnZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dfogohoiojoko#ffgRdSdcoloDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Lddo@drnmonooopoqorosotouovoge4jLc,lTd`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEeImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdTo@e=d]d^dhe5ore8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfif[mMf|djf?dh fc_d~bgcAeacBe{bcckf# $ Wo% Xo' hc( iclfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfjcxfyfkclcmcncocpcqczfrcsctcucm lnYowo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoBmMo:nNoOoxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym
1403 return int(dev) 2RfdeXdunYdvnZdpeeeskrltkukvkslwkxkplieql0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:dfe[d;dfogohoiojokocoloLddo@drnmonooopoqorosotouovoge4jLc,lTd`dFnHnwmvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOly PlQlRlSlTlz UlA snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmEeImFeGeHeIeJeJmKeKmLmLeMmMeNmNeOePeOmPmQmRmQeSm=lReSeTeUeVeTmUmVmWeXeWmXmYeZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5m6m7m8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mbcqePdTo@e=d]d^dhe5ore8cse9cte!cue#cve$cwe%cxe'cye(c[e5jzg6j]e7j^e8j_e9jAg!j`e#j{e$j|e?c}e@c~e[caf]cbf^ccf_cdf`cef{c)cffgfzehfif[m|djf?dh fc_d~bAeacBe{bcckf# $ Wo% Xo' hc( lfmfnfofpfqfrfsftfuf) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbZb0b1b2b3bb c o p f g i j 4b5b6bq r 7b8bd e s t C D k l 9b!b#bu v $b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bvfwfxfyfzfm lnYowo.nxoyozoAo/nBoCoDoEoFoGoHoIoJoKoLoBmMo:nNoOoPcQcpmRcScqmTcUcVcWcXcYcrmZc0csm1c2c3c4c5c6cxm7cym
1404 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1405 with nogil: 2a 2j|nne3j}noe#ffgRdSdDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Ld@d4jLcTdx E y z F A UdDeBfEeFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQe=lReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcMf|dh fc~bgcac{bccicjckclcmcncocpcqcrcsctcucm xcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c
1406 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a 2j|nne3j}noe#ffgRdSdDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Ld@d4jLcTdx E y z F A UdDeBfEeFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQe=lReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcMf|dh fc~bgcac{bccicjckclcmcncocpcqcrcsctcucm xcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c
1407 assert <void*>(ctx) == NULL 2a 2j|nne3j}noe#ffgRdSdDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Ld@d4jLcTdx E y z F A UdDeBfEeFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQe=lReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcMf|dh fc~bgcac{bccicjckclcmcncocpcqcrcsctcucm xcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c
1408 return 0 # cudart behavior 2a 2j|nne3j}noe#ffgRdSdDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlolom*lqn%j+ljen Ld@d4jLcTdx E y z F A UdDeBfEeFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQe=lReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcMf|dh fc~bgcac{bccicjckclcmcncocpcqcrcsctcucm xcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c
1409 else:
1410 HANDLE_RETURN(err)
1411 elif device_id < 0: 2tnBgXdCgDgYdEgFgZdGgHgIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6g7g8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePo#g$g%g'g(g)gRdSdwnxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCn{dEm,g4oEn-grn.g/g:g;g=g?g@g[g]g^g_g`gAm`dGn{gInJnG H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcgdyg|g}gLnMn~gahbcbhNnOnPnQnchRnSnTnUndhVnehWnfhghhhXnihjhkhlhYnZn0n1n2nmh3n4nnhoh5n6nphqhrh7n8nshthuh9nvhwh!n#nxhyhzh$nAhBhChDhEh%nFhGhHhIheg'nJh_dykUoVoKh# $ % ' hcLh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyiziAiBi.nCiDiEiFiGi/nHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1412 raise ValueError(f"device_id must be >= 0, got {device_id}")
1413 return device_id 2tnBgXdCgDgYdEgFgZdGgHgIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6g7g8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePo#g$g%g'g(g)gRdSdwnxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCn{dEm,g4oEn-grn.g/g:g;g=g?g@g[g]g^g_g`gAm`dGn{gInJnG H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcgdyg|g}gLnMn~gahbcbhNnOnPnQnchRnSnTnUndhVnehWnfhghhhXnihjhkhlhYnZn0n1n2nmh3n4nnhoh5n6nphqhrh7n8nshthuh9nvhwh!n#nxhyhzh$nAhBhChDhEh%nFhGhHhIheg'nJh_dykUoVoKh# $ % ' hcLh( MhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijiki+nlimini,noipiqirisitim uiviwixi-nyiziAiBi.nCiDiEiFiGi/nHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1416cdef inline list Device_ensure_tls_devices(cls):
1417 """Ensure thread-local Device singletons exist, creating if needed."""
1418 cdef int total
1419 try: 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1420 return _tls.devices 2a 2j|nne3j}noeRftndeBgXdCgunDgYdEgvnFgZdGgpeHgeeIg?l@l[l]l^ldgsk_lrl`ltk{luk|lvk}lsl~lwkamxkbmplcmiedmqlemfmgmhm~nimaojmbokm0dJg1dKg2dLg3dMg4dNg5dOg6dPg7dQg8dRg9dSg!dTg#dUg$dVg%dWg'dXg(dYg)dZg*d0g+d1g,d2g-d3g.d4g/d5g:d6gfe7g[d8g;d9gSfhgigmmjgnmkgTfIdlgAfGdkeMc|bmgDjEjFjGjHjIjJjKjLjMjNjQdngogUfpgJdqg}bVfrgsgmetgugQoRoSo!gvgletlOjulw )lPjdcumQjRjWfSjKdwgTjxgUjmnVjnnWjonXjpnYjCePofo#ggo$gho%gio'gjo(gko)g#ffgRdSdcownloxnCm*g0oynvmzn1o+gDmAnXf2oBn3oCnDnvdzkAkBk/j/c|c.lCkDkEk/l}cFkwdGkxd:c'jHkIk:jJkyd;jKk(jLkMkNkOk=j;c?j)j@j[j]jPk^j~c*jQk+jRkSk:lTkzdUkVkWkXkYkZk0k1k2k3kAd4k_j5k`j{j6k7k|j8k9k!kad}j#k$k%k'k(kbd~j)kakBd*kbk+k,kCdDdcdck-k.k/k:kdkek;k=kdd?kfk@kgkhkik[k]k^k_kOd`k{k|k}kEd~kalblcl,jdl-jelflgljked;lfdkkFdhllkiljl=cklllml.jnlol{domEm,g4oEn*lqn%j+ljen Lddo-g@drn.gmo/gno:goo;gpo=gqo?gro@gso[gto]guo^gvo_gge`g4jAmLc,lTd`dFnGn{gHnInwmJnvlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A snG H KnI J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcFmUd-lGmDeHmBfEegdyg|g}gLnMn~gahImFeGeHeIeJeJmKeKmCfLmLeMmMeNmDfEfFfNeOePeOmPmQmRmQeSm=lReSeTeGfUeVeTmUmHfVmWeXeWmXmYeIfZe0e1eYmZm0m1m2m3m4m2e3e4e5e6e5mJf6m7mKf8m9m!m#m$m%m'm(m)m7e8e9e!e*m+m#e,m$e-m%e.m'e/m(e:m;m)e=m*e?m+e,e-e.e@mLfbcqePdbhToNn@eOn=dPn]dQn^dchheRn5oreSn8cTnseUn9cdhteVn!cehueWn#cfhvegh$chhweXn%cihxejh'ckhyelh(cYn[eZn5j0nzg1n6j2n]emh7j3n^e4n8jnh_eoh9j5nAg6n!jph`eqh#jrh{e7n$j8n|esh?cth}euh@c9n~evh[cwhaf!n]c#nbfxh^cyhcfzh_c$ndfAh`cBhefCh{cDh)cEhff%ngfFhzeGhhfHhifIheg[mMf|djf'n?dJhh fc_d~bgcAeacBe{bccykUoVokfKh# $ Wo% Xo' hcLh( iclfMhmfNhnfOhofPhpfQhqfRhrfShsfThtfUhufVh) * + , - . / mk: nk; ok= pk? qk@ rk[ lj] mj^ nj_ oj` pj{ qj| rj} sj~ tjabujbbvjcbwjdbxjebyjfbzjgbAjhbBjibCjjb(nkb)nlbVlmbWlnbXlobYlpbZlqb0lrb1lsb2ltb3lub4lvb5lwb6lxb7lyb8lzb9lAb!lBb#lCb$lDb%lEb'lFb(lGb*nHb]mIb^mJb_mKb`mLb{mMb|mNb}mOb~mPbanQbbnRbcnSbdnTbenUbfnVbgnWbhnXbYbinB Zjjn0jlmkn1jhd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcgvf2hwf3hjcxf4hyf5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijiki+nlimini,noipiqimcncocpcqczfrircsctcucsitim uiviwixi-nyilnziYoAiwoBi.nCixoDiyoEizoFiAoGi/nHiBoIiCoJiDoKiEoLiFoMiGoNiHoOiIoPiJoQiKoRiLoSiBmTiMoUi:nViNoWiOoXiYiZi0i1i2i;n3i4i5i6i=n7i8i?n9i!i@n#i$i%i'i(i)i*i+ixcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cym,i[n-itm.i/i:i;i]n=i?i@i[i^n]i^i_i`i{i|i}i~iaj_n`nbjcj{ndjejfjgjhjijjjkj
1421 except AttributeError: 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1422 with nogil: 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1423 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1424 devices = _tls.devices = [] 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1425 for dev_id in range(total): 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1426 device = super(Device, cls).__new__(cls) 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1427 device._device_id = dev_id 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1428 device._memory_resource = None 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1429 device._has_inited = False 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1430 device._properties = None 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1431 device._uuid = None 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1432 device._context = None 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1433 devices.append(device) 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj
1434 return devices 2a 2j3jBgCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9gSfTfAfMc|bQdUf}bVfmew dcWfwgxgCe#g$g%g'g(g)g*g+gXfvd/c|c}cwdxd:cyd;c~czdAdadbdBdCdDdcdddOdEdedfdFd=c{d,gjen Ld-g@d.g/g:g;g=g?g@g[g]g^g_g`g4jTd{gx E y z F A G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! vcwcUdDeBfEegd|g}g~gahFeGeHeIeJeKeCfLeMeDfEfFfNeOePeQeReSeTeGfUeVeHfWeXeYeIfZe0e1e2e3e4e5e6eJfKf7e8e9e!e#e$e%e'e(e)e*e+e,e-e.eLfbcbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDhEhFhGhHhIhMf|dJhh fc~bgcac{bccykKh# $ % ' Lh( icMhNhOhPhQhRhShThUhVh) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbB hd$f%fYfZb0b'fid1b(fjd)f}dZf2b3b*fb kdc *co +fp ecMdHdf ~dg NdNc/ei 0fj 4b5b6b+cNf:eq ,fr ld-fWh1f7b8b.fd mde ,cs /ft -cOf;eC ggD PfOc=ek 2fl 9b!b#b.cQf?eu :fv nd;fae3f$b%b'bXh(b)bYh=fod?fZh4f*b+b@fpd[fbe5f,b-b]fqd^fce6f.b/b_frd`fVd7f:b;b{fsd|fWd8f=b?b}ftd~f0h9f@b[b]bagudbg1h!f^b_b`bcg2h3hjc4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieikclcfigihiiijikiliminioipiqimcncocpcqcrircsctcucsitim uiviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+ixcycPczcAcQcRcScBcCcTcUcVcDcEcFcWcXcYcGcZc0c1cHc2cIc3c4c5c6cJcKc7c,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkj