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

1# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8from libc.stdint cimport uintptr_t 

9  

10from cuda.bindings cimport cydriver 

11from cuda.core._utils.cuda_utils cimport HANDLE_RETURN 

12  

13import threading 

14  

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) 

25  

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 

37  

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 

43  

44  

45cdef class DeviceProperties: 

46 """ 

47 A class to query various attributes of a CUDA device. 

48  

49 Attributes are read-only and provide information about the device. 

50 """ 

51 cdef: 

52 int _handle 

53 dict _cache 

54  

55 def __init__(self, *args, **kwargs): 

56 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2nq

57  

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

64  

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

75  

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

81  

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

86  

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

91  

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

96  

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

101  

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

106  

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

111  

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

116  

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

121  

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

126  

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

131  

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

136  

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

141  

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

146  

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 ) 

153  

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

158  

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

163  

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

168  

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

173  

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

178  

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 ) 

185  

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 ) 

192  

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

197  

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

202  

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

207  

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 ) 

214  

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 ) 

221  

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 ) 

228  

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

233  

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

238  

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 ) 

245  

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

250  

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 ) 

257  

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 ) 

264  

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 ) 

271  

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 ) 

278  

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

283  

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

288  

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

293  

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

298  

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

303  

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

308  

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

313  

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 ) 

320  

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

325  

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 ) 

332  

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 ) 

339  

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

344  

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 ) 

351  

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 ) 

358  

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

363  

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

368  

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

373  

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

378  

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

383  

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

388  

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

393  

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

398  

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

403  

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

408  

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

413  

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

418  

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

423  

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

428  

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

433  

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

438  

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

443  

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

448  

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

453  

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

458  

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

463  

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

468  

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

473  

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

478  

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

483  

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 ) 

490  

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 ) 

497  

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

502  

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

507  

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

512  

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 ) 

519  

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

524  

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

529  

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

534  

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 ) 

541  

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 ) 

550  

551 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

552  

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

557  

558 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

559  

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 ) 

566  

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 ) 

575  

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 ) 

584  

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 ) 

593  

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 ) 

602  

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 ) 

609  

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 ) 

618  

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

623  

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 ) 

630  

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

635  

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

640  

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 ) 

649  

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 ) 

656  

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 ) 

663  

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 ) 

670  

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

675  

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

680  

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 ) 

687  

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

692  

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

697  

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 ) 

706  

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

711  

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

716  

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

721  

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

726  

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

731  

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

736  

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

741  

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

746  

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 ) 

753  

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

758  

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

763  

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 ) 

772  

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

777  

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 ) 

784  

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 ) 

791  

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

796  

797 # Start of CUDA 12 device attributes 

798  

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

803  

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

808  

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 ) 

815  

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 ) 

822  

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

827  

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

832  

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

837  

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

842  

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

847  

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

852  

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

857  

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. 

861  

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

865  

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. 

869  

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

873  

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 ) 

882  

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 ) 

889  

890 # Start of CUDA 13 device attributes 

891  

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 ) 

898  

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 ) 

905  

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 ) 

914  

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 ) 

921  

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 ) 

930  

931  

932class Device: 

933 """Represent a GPU and act as an entry point for cuda.core features. 

934  

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. 

938  

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. 

943  

944 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

945 for a specified device. 

946  

947 Note 

948 ---- 

949 Will not initialize the GPU. 

950  

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. 

956  

957 """ 

958 __slots__ = ("_device_id", "_memory_resource", "_has_inited", "_properties", "_uuid", "_context", "__weakref__") 

959  

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

963  

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

967  

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

972  

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 ) 

978  

979  

980 @classmethod 

981 def get_all_devices(cls): 

982 """ 

983 Query the available device instances. 

984  

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

993  

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). 

999  

1000 The devices are mapped to one another by their UUID. 

1001  

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

1008  

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 ) 

1013  

1014 from cuda.core.system import Device as SystemDevice 2%j

1015 return SystemDevice(uuid=self.uuid) 2%j

1016  

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

1021  

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

1027  

1028 def can_access_peer(self, peer: Device | int) -> bool: 

1029 """Check if this device can access memory from the specified peer device. 

1030  

1031 Queries whether peer-to-peer memory access is supported between this 

1032 device and the specified peer device. 

1033  

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) 

1048  

1049 @property 

1050 def uuid(self) -> str: 

1051 """Return a UUID for the device. 

1052  

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. 

1056  

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. 

1061  

1062 The UUID is cached after first access to avoid repeated CUDA API calls. 

1063  

1064 """ 

1065 cdef cydriver.CUuuid uuid 

1066 cdef cydriver.CUdevice dev 

1067 cdef bytes uuid_b 

1068 cdef str uuid_hex 

1069  

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

1082  

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

1095  

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

1101  

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

1103  

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

1113  

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

1118  

1119 @property 

1120 def context(self) -> Context: 

1121 """Return the :obj:`~_context.Context` associated with this device. 

1122  

1123 Note 

1124 ---- 

1125 Device must be initialized. 

1126  

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

1130  

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

1151  

1152 return self._memory_resource 2RdSdgdyghchdidjdb kdc *cecNc+cldd mde ,c-cOc.cndodpdqdrdsdtdudxcycPczcAcQcpmRcScBcCcqmTcUcVcDcEcFcWcXcYcGcrmZc0csm1cHc2cIc3c4c5c6cJcxmKc7cymtm

1153  

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 

1159  

1160 @property 

1161 def default_stream(self) -> Stream: 

1162 """Return default CUDA :obj:`~_stream.Stream` associated with this device. 

1163  

1164 The type of default stream returned depends on if the environment 

1165 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1166  

1167 If set, returns a per-thread default stream. Otherwise returns 

1168 the legacy stream. 

1169  

1170 """ 

1171 return default_stream() 2vlwlxlylzlAlBlClDlElx FlGlHlIlJlKlLlMlNlOlE y PlQlRlSlTlz UlF A Yo

1172  

1173 def __int__(self): 

1174 """Return device_id.""" 

1175 return self._device_id 2^o_o`oRdSd

1176  

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

1179  

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

1182  

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

1187  

1188 def __reduce__(self): 

1189 return Device, (self.device_id,) 2Sf*ommnmTf+oAf7oMcQdUf,o-o.oVf/ome6o!gtlul)lumWfwgxgmnnnonpn

1190  

1191 def set_current(self, ctx: Context = None) -> Context | None: 

1192 """Set device to be used for GPU executions. 

1193  

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. 

1197  

1198 Providing a `ctx` causes the previous set context to be popped and returned. 

1199  

1200 Parameters 

1201 ---------- 

1202 ctx : :obj:`~_context.Context`, optional 

1203 Optional context to push onto this device's current thread stack. 

1204  

1205 Returns 

1206 ------- 

1207 :obj:`~_context.Context`, optional 

1208 Popped context. 

1209  

1210 Examples 

1211 -------- 

1212 Acts as an entry point of this object. Users always start a code by 

1213 calling this method, e.g. 

1214  

1215 >>> from cuda.core import Device 

1216 >>> dev0 = Device(0) 

1217 >>> dev0.set_current() 

1218 >>> # ... do work on device 0 ... 

1219  

1220 """ 

1221 cdef ContextHandle h_context 

1222 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1223  

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

1251  

1252 def create_context(self, options: ContextOptions = None) -> Context: 

1253 """Create a new :obj:`~_context.Context` object. 

1254  

1255 Note 

1256 ---- 

1257 The newly context will not be set as current. 

1258  

1259 Parameters 

1260 ---------- 

1261 options : :obj:`~_context.ContextOptions`, optional 

1262 Customizable dataclass for context creation options. 

1263  

1264 Returns 

1265 ------- 

1266 :obj:`~_context.Context` 

1267 Newly created context object. 

1268  

1269 """ 

1270 raise NotImplementedError("WIP: https://github.com/NVIDIA/cuda-python/issues/189") 

1271  

1272 def create_stream(self, obj: IsStreamT | None = None, options: StreamOptions | None = None) -> Stream: 

1273 """Create a Stream object. 

1274  

1275 New stream objects can be created in two different ways: 

1276  

1277 1) Create a new CUDA stream with customizable ``options``. 

1278 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1279  

1280 Option (2) internally holds a reference to the foreign object 

1281 such that the lifetime is managed. 

1282  

1283 Note 

1284 ---- 

1285 Device must be initialized. 

1286  

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. 

1293  

1294 Returns 

1295 ------- 

1296 :obj:`~_stream.Stream` 

1297 Newly created stream object. 

1298  

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

1302  

1303 def create_event(self, options: EventOptions | None = None) -> Event: 

1304 """Create an Event object without recording it to a Stream. 

1305  

1306 Note 

1307 ---- 

1308 Device must be initialized. 

1309  

1310 Parameters 

1311 ---------- 

1312 options : :obj:`EventOptions`, optional 

1313 Customizable dataclass for event creation options. 

1314  

1315 Returns 

1316 ------- 

1317 :obj:`~_event.Event` 

1318 Newly created event object. 

1319  

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

1324  

1325 def allocate(self, size, stream: Stream | GraphBuilder | None = None) -> Buffer: 

1326 """Allocate device memory from a specified stream. 

1327  

1328 Allocates device memory of `size` bytes on the specified `stream` 

1329 using the memory resource currently associated with this Device. 

1330  

1331 Parameter `stream` is optional, using a default stream by default. 

1332  

1333 Note 

1334 ---- 

1335 Device must be initialized. 

1336  

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. 

1344  

1345 Returns 

1346 ------- 

1347 :obj:`~_memory.Buffer` 

1348 Newly created buffer object. 

1349  

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

1353  

1354 def sync(self): 

1355 """Synchronize the device. 

1356  

1357 Note 

1358 ---- 

1359 Device must be initialized. 

1360  

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

1364  

1365 def create_graph_builder(self) -> GraphBuilder: 

1366 """Create a new :obj:`~_graph.GraphBuilder` object. 

1367  

1368 Returns 

1369 ------- 

1370 :obj:`~_graph.GraphBuilder` 

1371 Newly created graph builder object. 

1372  

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

1376  

1377  

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

1392  

1393  

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

1414  

1415  

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