Skip to content

Commit 1b76277

Browse files
rparolinclaude
andcommitted
cuda.core: rename CUDAArray -> OpaqueArray (and CUDAArrayHandle -> OpaqueArrayHandle)
Rename the public texture/surface backing-storage class CUDAArray to OpaqueArray, and the internal C++/Cython handle type CUDAArrayHandle to OpaqueArrayHandle so the handle keeps mirroring the class name (per the comment #1 rationale on #2095). Updates the class, error messages, docstrings, .pyi stubs, tests, and docs (api.rst). Driver types (CUarray, cuArray3DCreate) are unaffected. This supersedes #2188 decision 1 (which had settled on CUDAArray); the public type is now cuda.core.texture.OpaqueArray. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
1 parent 6df91a9 commit 1b76277

18 files changed

Lines changed: 157 additions & 157 deletions

‎cuda_core/cuda/core/_cpp/resource_handles.cpp‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,19 +1367,19 @@ struct TexObjectBox {
13671367
// Tagged so TexObjectHandle is a distinct C++ type from DevicePtrHandle /
13681368
// SurfObjectHandle (all wrap `unsigned long long`).
13691369
TexObjectValue resource;
1370-
// Type-erased backing dependency (CUDAArrayHandle / MipmappedArrayHandle /
1370+
// Type-erased backing dependency (OpaqueArrayHandle / MipmappedArrayHandle /
13711371
// DevicePtrHandle). The texture's resource is a union; we only need to keep
13721372
// whichever backing it was built from alive, never to dereference it.
13731373
std::shared_ptr<const void> h_backing;
13741374
};
13751375

13761376
struct SurfObjectBox {
13771377
SurfObjectValue resource;
1378-
CUDAArrayHandle h_array; // surfaces are always array-backed
1378+
OpaqueArrayHandle h_array; // surfaces are always array-backed
13791379
};
13801380
} // namespace
13811381

1382-
CUDAArrayHandle create_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc) {
1382+
OpaqueArrayHandle create_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc) {
13831383
GILReleaseGuard gil;
13841384
CUarray arr;
13851385
if (CUDA_SUCCESS != (err = p_cuArray3DCreate(&arr, &desc))) {
@@ -1391,15 +1391,15 @@ CUDAArrayHandle create_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc) {
13911391
return create_array_handle_owning(arr);
13921392
}
13931393

1394-
CUDAArrayHandle create_array_handle_ref(CUarray arr) {
1394+
OpaqueArrayHandle create_array_handle_ref(CUarray arr) {
13951395
if (!arr) {
13961396
return {};
13971397
}
13981398
auto box = std::make_shared<const ArrayBox>(ArrayBox{arr, {}});
1399-
return CUDAArrayHandle(box, &box->resource);
1399+
return OpaqueArrayHandle(box, &box->resource);
14001400
}
14011401

1402-
CUDAArrayHandle create_array_handle_owning(CUarray arr) {
1402+
OpaqueArrayHandle create_array_handle_owning(CUarray arr) {
14031403
if (!arr) {
14041404
return {};
14051405
}
@@ -1411,10 +1411,10 @@ CUDAArrayHandle create_array_handle_owning(CUarray arr) {
14111411
delete b;
14121412
}
14131413
);
1414-
return CUDAArrayHandle(box, &box->resource);
1414+
return OpaqueArrayHandle(box, &box->resource);
14151415
}
14161416

1417-
CUDAArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level) {
1417+
OpaqueArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level) {
14181418
GILReleaseGuard gil;
14191419
CUarray arr;
14201420
if (CUDA_SUCCESS != (err = p_cuMipmappedArrayGetLevel(&arr, as_cu(h_mip), level))) {
@@ -1426,7 +1426,7 @@ CUDAArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, uns
14261426
new ArrayBox{arr, h_mip},
14271427
[](const ArrayBox* b) { delete b; }
14281428
);
1429-
return CUDAArrayHandle(box, &box->resource);
1429+
return OpaqueArrayHandle(box, &box->resource);
14301430
}
14311431

14321432
MipmappedArrayHandle create_mipmapped_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc,
@@ -1470,7 +1470,7 @@ TexObjectHandle make_tex_object_handle(const CUDA_RESOURCE_DESC& res,
14701470

14711471
TexObjectHandle create_tex_object_handle_array(const CUDA_RESOURCE_DESC& res,
14721472
const CUDA_TEXTURE_DESC& tex,
1473-
const CUDAArrayHandle& h_backing) {
1473+
const OpaqueArrayHandle& h_backing) {
14741474
return make_tex_object_handle(res, tex, h_backing);
14751475
}
14761476

@@ -1487,7 +1487,7 @@ TexObjectHandle create_tex_object_handle_linear(const CUDA_RESOURCE_DESC& res,
14871487
}
14881488

14891489
SurfObjectHandle create_surf_object_handle(const CUDA_RESOURCE_DESC& res,
1490-
const CUDAArrayHandle& h_backing) {
1490+
const OpaqueArrayHandle& h_backing) {
14911491
GILReleaseGuard gil;
14921492
CUsurfObject obj;
14931493
if (CUDA_SUCCESS != (err = p_cuSurfObjectCreate(&obj, &res))) {

‎cuda_core/cuda/core/_cpp/resource_handles.hpp‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ using NvvmProgramHandle = std::shared_ptr<const NvvmProgramValue>;
190190
using NvJitLinkHandle = std::shared_ptr<const NvJitLinkValue>;
191191
using CuLinkHandle = std::shared_ptr<const CUlinkState>;
192192
using FileDescriptorHandle = std::shared_ptr<const int>;
193-
using CUDAArrayHandle = std::shared_ptr<const CUarray>;
193+
using OpaqueArrayHandle = std::shared_ptr<const CUarray>;
194194
using MipmappedArrayHandle = std::shared_ptr<const CUmipmappedArray>;
195195
using TexObjectHandle = std::shared_ptr<const TexObjectValue>;
196196
using SurfObjectHandle = std::shared_ptr<const SurfObjectValue>;
@@ -566,21 +566,21 @@ FileDescriptorHandle create_fd_handle_ref(int fd);
566566
// Create an owning CUDA array via cuArray3DCreate.
567567
// When the last reference is released, cuArrayDestroy is called automatically.
568568
// Returns empty handle on error (caller must check).
569-
CUDAArrayHandle create_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc);
569+
OpaqueArrayHandle create_array_handle(const CUDA_ARRAY3D_DESCRIPTOR& desc);
570570

571571
// Create a non-owning array handle (references an existing CUarray).
572572
// Use for arrays owned elsewhere (e.g. graphics interop). Never destroyed here.
573-
CUDAArrayHandle create_array_handle_ref(CUarray arr);
573+
OpaqueArrayHandle create_array_handle_ref(CUarray arr);
574574

575575
// Create an owning array handle adopting an existing CUarray.
576576
// When the last reference is released, cuArrayDestroy is called automatically.
577-
CUDAArrayHandle create_array_handle_owning(CUarray arr);
577+
OpaqueArrayHandle create_array_handle_owning(CUarray arr);
578578

579579
// Create a non-owning handle to a mipmap level via cuMipmappedArrayGetLevel.
580580
// The level CUarray is owned by the mipmap; the parent MipmappedArrayHandle is
581581
// embedded in the box so it outlives the level view. No destroy in the deleter.
582582
// Returns empty handle on error (caller must check).
583-
CUDAArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level);
583+
OpaqueArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level);
584584

585585
// Create an owning mipmapped array via cuMipmappedArrayCreate.
586586
// When the last reference is released, cuMipmappedArrayDestroy is called.
@@ -594,7 +594,7 @@ MipmappedArrayHandle create_mipmapped_array_handle(const CUDA_ARRAY3D_DESCRIPTOR
594594
// deleter. Returns empty handle on error (caller must check).
595595
TexObjectHandle create_tex_object_handle_array(const CUDA_RESOURCE_DESC& res,
596596
const CUDA_TEXTURE_DESC& tex,
597-
const CUDAArrayHandle& h_backing);
597+
const OpaqueArrayHandle& h_backing);
598598
TexObjectHandle create_tex_object_handle_mipmap(const CUDA_RESOURCE_DESC& res,
599599
const CUDA_TEXTURE_DESC& tex,
600600
const MipmappedArrayHandle& h_backing);
@@ -606,7 +606,7 @@ TexObjectHandle create_tex_object_handle_linear(const CUDA_RESOURCE_DESC& res,
606606
// array handle so it outlives the surface. cuSurfObjectDestroy runs in the
607607
// deleter. Returns empty handle on error (caller must check).
608608
SurfObjectHandle create_surf_object_handle(const CUDA_RESOURCE_DESC& res,
609-
const CUDAArrayHandle& h_backing);
609+
const OpaqueArrayHandle& h_backing);
610610

611611
// ============================================================================
612612
// Overloaded helper functions to extract raw resources from handles
@@ -673,7 +673,7 @@ inline CUlinkState as_cu(const CuLinkHandle& h) noexcept {
673673
return h ? *h : nullptr;
674674
}
675675

676-
inline CUarray as_cu(const CUDAArrayHandle& h) noexcept {
676+
inline CUarray as_cu(const OpaqueArrayHandle& h) noexcept {
677677
return h ? *h : nullptr;
678678
}
679679

@@ -757,7 +757,7 @@ inline std::intptr_t as_intptr(const FileDescriptorHandle& h) noexcept {
757757
return h ? static_cast<std::intptr_t>(*h) : -1;
758758
}
759759

760-
inline std::intptr_t as_intptr(const CUDAArrayHandle& h) noexcept {
760+
inline std::intptr_t as_intptr(const OpaqueArrayHandle& h) noexcept {
761761
return reinterpret_cast<std::intptr_t>(as_cu(h));
762762
}
763763

@@ -888,7 +888,7 @@ inline PyObject* as_py(const FileDescriptorHandle& h) noexcept {
888888
return PyLong_FromSsize_t(as_intptr(h));
889889
}
890890

891-
inline PyObject* as_py(const CUDAArrayHandle& h) noexcept {
891+
inline PyObject* as_py(const OpaqueArrayHandle& h) noexcept {
892892
return detail::make_py("cuda.bindings.driver", "CUarray", as_intptr(h));
893893
}
894894

‎cuda_core/cuda/core/_resource_handles.pxd‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ cdef extern from "_cpp/resource_handles.hpp" namespace "cuda_core":
4343

4444
ctypedef shared_ptr[const cydriver.CUlinkState] CuLinkHandle
4545
ctypedef shared_ptr[const int] FileDescriptorHandle
46-
ctypedef shared_ptr[const cydriver.CUarray] CUDAArrayHandle
46+
ctypedef shared_ptr[const cydriver.CUarray] OpaqueArrayHandle
4747
ctypedef shared_ptr[const cydriver.CUmipmappedArray] MipmappedArrayHandle
4848

4949
# CUtexObject / CUsurfObject are both `unsigned long long` (as is CUdeviceptr),
@@ -72,7 +72,7 @@ cdef extern from "_cpp/resource_handles.hpp" namespace "cuda_core":
7272
cynvvm.nvvmProgram as_cu(NvvmProgramHandle h) noexcept nogil
7373
cynvjitlink.nvJitLinkHandle as_cu(NvJitLinkHandle h) noexcept nogil
7474
cydriver.CUlinkState as_cu(CuLinkHandle h) noexcept nogil
75-
cydriver.CUarray as_cu(CUDAArrayHandle h) noexcept nogil
75+
cydriver.CUarray as_cu(OpaqueArrayHandle h) noexcept nogil
7676
cydriver.CUmipmappedArray as_cu(MipmappedArrayHandle h) noexcept nogil
7777
cydriver.CUtexObject as_cu(TexObjectHandle h) noexcept nogil
7878
cydriver.CUsurfObject as_cu(SurfObjectHandle h) noexcept nogil
@@ -94,7 +94,7 @@ cdef extern from "_cpp/resource_handles.hpp" namespace "cuda_core":
9494
intptr_t as_intptr(NvJitLinkHandle h) noexcept nogil
9595
intptr_t as_intptr(CuLinkHandle h) noexcept nogil
9696
intptr_t as_intptr(FileDescriptorHandle h) noexcept nogil
97-
intptr_t as_intptr(CUDAArrayHandle h) noexcept nogil
97+
intptr_t as_intptr(OpaqueArrayHandle h) noexcept nogil
9898
intptr_t as_intptr(MipmappedArrayHandle h) noexcept nogil
9999
intptr_t as_intptr(TexObjectHandle h) noexcept nogil
100100
intptr_t as_intptr(SurfObjectHandle h) noexcept nogil
@@ -116,7 +116,7 @@ cdef extern from "_cpp/resource_handles.hpp" namespace "cuda_core":
116116
object as_py(NvJitLinkHandle h)
117117
object as_py(CuLinkHandle h)
118118
object as_py(FileDescriptorHandle h)
119-
object as_py(CUDAArrayHandle h)
119+
object as_py(OpaqueArrayHandle h)
120120
object as_py(MipmappedArrayHandle h)
121121
object as_py(TexObjectHandle h)
122122
object as_py(SurfObjectHandle h)
@@ -249,23 +249,23 @@ cdef FileDescriptorHandle create_fd_handle(int fd) except+ nogil
249249
cdef FileDescriptorHandle create_fd_handle_ref(int fd) except+ nogil
250250

251251
# Array / mipmapped-array / texture / surface handles (PR #467)
252-
cdef CUDAArrayHandle create_array_handle(const cydriver.CUDA_ARRAY3D_DESCRIPTOR& desc) except+ nogil
253-
cdef CUDAArrayHandle create_array_handle_ref(cydriver.CUarray arr) except+ nogil
254-
cdef CUDAArrayHandle create_array_handle_owning(cydriver.CUarray arr) except+ nogil
255-
cdef CUDAArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level) except+ nogil
252+
cdef OpaqueArrayHandle create_array_handle(const cydriver.CUDA_ARRAY3D_DESCRIPTOR& desc) except+ nogil
253+
cdef OpaqueArrayHandle create_array_handle_ref(cydriver.CUarray arr) except+ nogil
254+
cdef OpaqueArrayHandle create_array_handle_owning(cydriver.CUarray arr) except+ nogil
255+
cdef OpaqueArrayHandle create_array_level_handle(const MipmappedArrayHandle& h_mip, unsigned int level) except+ nogil
256256
cdef MipmappedArrayHandle create_mipmapped_array_handle(
257257
const cydriver.CUDA_ARRAY3D_DESCRIPTOR& desc, unsigned int num_levels) except+ nogil
258258
cdef TexObjectHandle create_tex_object_handle_array(
259259
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
260-
const CUDAArrayHandle& h_backing) except+ nogil
260+
const OpaqueArrayHandle& h_backing) except+ nogil
261261
cdef TexObjectHandle create_tex_object_handle_mipmap(
262262
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
263263
const MipmappedArrayHandle& h_backing) except+ nogil
264264
cdef TexObjectHandle create_tex_object_handle_linear(
265265
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
266266
const DevicePtrHandle& h_backing) except+ nogil
267267
cdef SurfObjectHandle create_surf_object_handle(
268-
const cydriver.CUDA_RESOURCE_DESC& res, const CUDAArrayHandle& h_backing) except+ nogil
268+
const cydriver.CUDA_RESOURCE_DESC& res, const OpaqueArrayHandle& h_backing) except+ nogil
269269

270270
# SM resource split (13.1+ — calls through function pointer, safe on older bindings)
271271
# groupParams is void* here to avoid referencing CU_DEV_SM_RESOURCE_GROUP_PARAMS

‎cuda_core/cuda/core/_resource_handles.pyi‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ NvvmProgramHandle = shared_ptr
2020
NvJitLinkHandle = shared_ptr
2121
CuLinkHandle = shared_ptr
2222
FileDescriptorHandle = shared_ptr
23-
CUDAArrayHandle = shared_ptr
23+
OpaqueArrayHandle = shared_ptr
2424
MipmappedArrayHandle = shared_ptr
2525
TexObjectHandle = shared_ptr
2626
SurfObjectHandle = shared_ptr

‎cuda_core/cuda/core/_resource_handles.pyx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,27 +203,27 @@ cdef extern from "_cpp/resource_handles.hpp" namespace "cuda_core":
203203
bint has_sm_resource_split "cuda_core::has_sm_resource_split" () noexcept nogil
204204

205205
# Array / mipmapped-array / texture / surface handles (PR #467)
206-
CUDAArrayHandle create_array_handle "cuda_core::create_array_handle" (
206+
OpaqueArrayHandle create_array_handle "cuda_core::create_array_handle" (
207207
const cydriver.CUDA_ARRAY3D_DESCRIPTOR& desc) except+ nogil
208-
CUDAArrayHandle create_array_handle_ref "cuda_core::create_array_handle_ref" (
208+
OpaqueArrayHandle create_array_handle_ref "cuda_core::create_array_handle_ref" (
209209
cydriver.CUarray arr) except+ nogil
210-
CUDAArrayHandle create_array_handle_owning "cuda_core::create_array_handle_owning" (
210+
OpaqueArrayHandle create_array_handle_owning "cuda_core::create_array_handle_owning" (
211211
cydriver.CUarray arr) except+ nogil
212-
CUDAArrayHandle create_array_level_handle "cuda_core::create_array_level_handle" (
212+
OpaqueArrayHandle create_array_level_handle "cuda_core::create_array_level_handle" (
213213
const MipmappedArrayHandle& h_mip, unsigned int level) except+ nogil
214214
MipmappedArrayHandle create_mipmapped_array_handle "cuda_core::create_mipmapped_array_handle" (
215215
const cydriver.CUDA_ARRAY3D_DESCRIPTOR& desc, unsigned int num_levels) except+ nogil
216216
TexObjectHandle create_tex_object_handle_array "cuda_core::create_tex_object_handle_array" (
217217
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
218-
const CUDAArrayHandle& h_backing) except+ nogil
218+
const OpaqueArrayHandle& h_backing) except+ nogil
219219
TexObjectHandle create_tex_object_handle_mipmap "cuda_core::create_tex_object_handle_mipmap" (
220220
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
221221
const MipmappedArrayHandle& h_backing) except+ nogil
222222
TexObjectHandle create_tex_object_handle_linear "cuda_core::create_tex_object_handle_linear" (
223223
const cydriver.CUDA_RESOURCE_DESC& res, const cydriver.CUDA_TEXTURE_DESC& tex,
224224
const DevicePtrHandle& h_backing) except+ nogil
225225
SurfObjectHandle create_surf_object_handle "cuda_core::create_surf_object_handle" (
226-
const cydriver.CUDA_RESOURCE_DESC& res, const CUDAArrayHandle& h_backing) except+ nogil
226+
const cydriver.CUDA_RESOURCE_DESC& res, const OpaqueArrayHandle& h_backing) except+ nogil
227227

228228

229229
# =============================================================================

‎cuda_core/cuda/core/texture/__init__.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
1111
Import these types from here, e.g.::
1212
13-
from cuda.core.texture import CUDAArray, TextureObject, TextureDescriptor
13+
from cuda.core.texture import OpaqueArray, TextureObject, TextureDescriptor
1414
"""
1515

16-
from cuda.core.texture._array import ArrayFormat, CUDAArray
16+
from cuda.core.texture._array import ArrayFormat, OpaqueArray
1717
from cuda.core.texture._mipmapped_array import MipmappedArray
1818
from cuda.core.texture._surface import SurfaceObject
1919
from cuda.core.texture._texture import (
@@ -28,7 +28,7 @@
2828
__all__ = [
2929
"AddressMode",
3030
"ArrayFormat",
31-
"CUDAArray",
31+
"OpaqueArray",
3232
"FilterMode",
3333
"MipmappedArray",
3434
"ReadMode",

‎cuda_core/cuda/core/texture/_array.pxd‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55
from cuda.bindings cimport cydriver
6-
from cuda.core._resource_handles cimport CUDAArrayHandle
6+
from cuda.core._resource_handles cimport OpaqueArrayHandle
77

88

9-
cdef class CUDAArray:
9+
cdef class OpaqueArray:
1010

1111
cdef:
1212
# Owning/non-owning + any parent (mipmap) dependency are encoded
1313
# structurally in the C++ box behind this handle, not in Python state.
14-
CUDAArrayHandle _handle
14+
OpaqueArrayHandle _handle
1515
tuple _shape # (w,), (w, h), or (w, h, d)
1616
cydriver.CUarray_format _format
1717
unsigned int _num_channels # 1, 2, or 4
@@ -21,7 +21,7 @@ cdef class CUDAArray:
2121
cpdef close(self)
2222

2323

24-
# Wrap an existing CUDAArrayHandle as a CUDAArray, querying the driver for the
24+
# Wrap an existing OpaqueArrayHandle as a OpaqueArray, querying the driver for the
2525
# array's shape/format/channels/surface-flag metadata. Used by get_level and
2626
# the graphics-interop _from_handle path.
27-
cdef CUDAArray _array_from_handle(CUDAArrayHandle h, int device_id)
27+
cdef OpaqueArray _array_from_handle(OpaqueArrayHandle h, int device_id)

‎cuda_core/cuda/core/texture/_array.pyi‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ from cuda.bindings import cydriver
88

99

1010
class ArrayFormat(IntEnum):
11-
"""Element format for a :class:`CUDAArray` allocation.
11+
"""Element format for a :class:`OpaqueArray` allocation.
1212
1313
Mirrors ``CUarray_format`` from the CUDA driver API.
1414
"""
@@ -21,7 +21,7 @@ class ArrayFormat(IntEnum):
2121
FLOAT16 = cydriver.CU_AD_FORMAT_HALF
2222
FLOAT32 = cydriver.CU_AD_FORMAT_FLOAT
2323

24-
class CUDAArray:
24+
class OpaqueArray:
2525
"""An opaque, hardware-laid-out GPU allocation for texture/surface access.
2626
2727
Distinct from :class:`Buffer`: a ``CUarray`` has no exposed device pointer
@@ -30,7 +30,7 @@ class CUDAArray:
3030
spatial locality.
3131
3232
**Copy-only interop.** Because the layout is opaque and there is no linear
33-
device pointer, a ``CUDAArray`` cannot expose ``__cuda_array_interface__`` /
33+
device pointer, a ``OpaqueArray`` cannot expose ``__cuda_array_interface__`` /
3434
DLPack and cannot be shared zero-copy with NumPy, CuPy, numba-cuda, or
3535
PyTorch. Moving data in or out is therefore always a copy: use
3636
:meth:`copy_from` / :meth:`copy_to` against a linear :class:`Buffer` or a
@@ -75,7 +75,7 @@ class CUDAArray:
7575
7676
Returns
7777
-------
78-
CUDAArray
78+
OpaqueArray
7979
"""
8080

8181
@classmethod

0 commit comments

Comments
 (0)