aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrzej Janik <[email protected]>2024-11-19 05:09:40 +0000
committerAndrzej Janik <[email protected]>2024-11-19 05:09:40 +0000
commit79362757edf20ec0359de5e2f69a5bf2536540be (patch)
tree86a0049cba64d678129d0b61917a247dce839d90
parentaa6b61b414934e8b8f3ea1db02c0c6c0939a80ea (diff)
downloadZLUDA-79362757edf20ec0359de5e2f69a5bf2536540be.tar.gz
ZLUDA-79362757edf20ec0359de5e2f69a5bf2536540be.zip
Change CUDA functions macro to use zluda_bindgen
-rw-r--r--cuda_base/src/cuda.rs29013
-rw-r--r--cuda_base/src/lib.rs631
-rw-r--r--zluda_bindgen/src/main.rs107
-rw-r--r--zluda_dump/src/lib.rs8
-rw-r--r--zluda_dump/src/side_by_side.rs4
5 files changed, 20799 insertions, 8964 deletions
diff --git a/cuda_base/src/cuda.rs b/cuda_base/src/cuda.rs
index 447f6bd..2cc5a56 100644
--- a/cuda_base/src/cuda.rs
+++ b/cuda_base/src/cuda.rs
@@ -1,8585 +1,20852 @@
-/* automatically generated by rust-bindgen 0.70.1 */
-
-pub const CUDA_VERSION: u32 = 12040;
-pub const CU_IPC_HANDLE_SIZE: u32 = 64;
-pub const CU_COMPUTE_ACCELERATED_TARGET_BASE: u32 = 65536;
-pub const CU_GRAPH_COND_ASSIGN_DEFAULT: u32 = 1;
-pub const CU_GRAPH_KERNEL_NODE_PORT_DEFAULT: u32 = 0;
-pub const CU_GRAPH_KERNEL_NODE_PORT_PROGRAMMATIC: u32 = 1;
-pub const CU_GRAPH_KERNEL_NODE_PORT_LAUNCH_ORDER: u32 = 2;
-pub const CU_MEMHOSTALLOC_PORTABLE: u32 = 1;
-pub const CU_MEMHOSTALLOC_DEVICEMAP: u32 = 2;
-pub const CU_MEMHOSTALLOC_WRITECOMBINED: u32 = 4;
-pub const CU_MEMHOSTREGISTER_PORTABLE: u32 = 1;
-pub const CU_MEMHOSTREGISTER_DEVICEMAP: u32 = 2;
-pub const CU_MEMHOSTREGISTER_IOMEMORY: u32 = 4;
-pub const CU_MEMHOSTREGISTER_READ_ONLY: u32 = 8;
-pub const CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL: u32 = 1;
-pub const CU_TENSOR_MAP_NUM_QWORDS: u32 = 16;
-pub const CUDA_EXTERNAL_MEMORY_DEDICATED: u32 = 1;
-pub const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC: u32 = 1;
-pub const CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC: u32 = 2;
-pub const CUDA_NVSCISYNC_ATTR_SIGNAL: u32 = 1;
-pub const CUDA_NVSCISYNC_ATTR_WAIT: u32 = 2;
-pub const CU_MEM_CREATE_USAGE_TILE_POOL: u32 = 1;
-pub const CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC: u32 = 1;
-pub const CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC: u32 = 2;
-pub const CUDA_ARRAY3D_LAYERED: u32 = 1;
-pub const CUDA_ARRAY3D_2DARRAY: u32 = 1;
-pub const CUDA_ARRAY3D_SURFACE_LDST: u32 = 2;
-pub const CUDA_ARRAY3D_CUBEMAP: u32 = 4;
-pub const CUDA_ARRAY3D_TEXTURE_GATHER: u32 = 8;
-pub const CUDA_ARRAY3D_DEPTH_TEXTURE: u32 = 16;
-pub const CUDA_ARRAY3D_COLOR_ATTACHMENT: u32 = 32;
-pub const CUDA_ARRAY3D_SPARSE: u32 = 64;
-pub const CUDA_ARRAY3D_DEFERRED_MAPPING: u32 = 128;
-pub const CU_TRSA_OVERRIDE_FORMAT: u32 = 1;
-pub const CU_TRSF_READ_AS_INTEGER: u32 = 1;
-pub const CU_TRSF_NORMALIZED_COORDINATES: u32 = 2;
-pub const CU_TRSF_SRGB: u32 = 16;
-pub const CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION: u32 = 32;
-pub const CU_TRSF_SEAMLESS_CUBEMAP: u32 = 64;
-pub const CU_LAUNCH_PARAM_END_AS_INT: u32 = 0;
-pub const CU_LAUNCH_PARAM_BUFFER_POINTER_AS_INT: u32 = 1;
-pub const CU_LAUNCH_PARAM_BUFFER_SIZE_AS_INT: u32 = 2;
-pub const CU_PARAM_TR_DEFAULT: i32 = -1;
-pub const CUDA_EGL_INFINITE_TIMEOUT: u32 = 4294967295;
-pub type cuuint32_t = u32;
-pub type cuuint64_t = u64;
-#[repr(transparent)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUdeviceptr_v2(pub ::std::os::raw::c_ulonglong);
-pub type CUdeviceptr = CUdeviceptr_v2;
-#[repr(transparent)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUdevice_v1(pub ::std::os::raw::c_int);
-pub type CUdevice = CUdevice_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUctx_st {
- _unused: [u8; 0],
-}
-pub type CUcontext = *mut CUctx_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUmod_st {
- _unused: [u8; 0],
-}
-pub type CUmodule = *mut CUmod_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUfunc_st {
- _unused: [u8; 0],
-}
-pub type CUfunction = *mut CUfunc_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUlib_st {
- _unused: [u8; 0],
-}
-pub type CUlibrary = *mut CUlib_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUkern_st {
- _unused: [u8; 0],
-}
-pub type CUkernel = *mut CUkern_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUarray_st {
- _unused: [u8; 0],
-}
-pub type CUarray = *mut CUarray_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUmipmappedArray_st {
- _unused: [u8; 0],
-}
-pub type CUmipmappedArray = *mut CUmipmappedArray_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUtexref_st {
- _unused: [u8; 0],
-}
-pub type CUtexref = *mut CUtexref_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUsurfref_st {
- _unused: [u8; 0],
-}
-pub type CUsurfref = *mut CUsurfref_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUevent_st {
- _unused: [u8; 0],
-}
-pub type CUevent = *mut CUevent_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUstream_st {
- _unused: [u8; 0],
-}
-pub type CUstream = *mut CUstream_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraphicsResource_st {
- _unused: [u8; 0],
-}
-pub type CUgraphicsResource = *mut CUgraphicsResource_st;
-pub type CUtexObject_v1 = ::std::os::raw::c_ulonglong;
-pub type CUtexObject = CUtexObject_v1;
-pub type CUsurfObject_v1 = ::std::os::raw::c_ulonglong;
-pub type CUsurfObject = CUsurfObject_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUextMemory_st {
- _unused: [u8; 0],
-}
-pub type CUexternalMemory = *mut CUextMemory_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUextSemaphore_st {
- _unused: [u8; 0],
-}
-pub type CUexternalSemaphore = *mut CUextSemaphore_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraph_st {
- _unused: [u8; 0],
-}
-pub type CUgraph = *mut CUgraph_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraphNode_st {
- _unused: [u8; 0],
-}
-pub type CUgraphNode = *mut CUgraphNode_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraphExec_st {
- _unused: [u8; 0],
-}
-pub type CUgraphExec = *mut CUgraphExec_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUmemPoolHandle_st {
- _unused: [u8; 0],
-}
-pub type CUmemoryPool = *mut CUmemPoolHandle_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUuserObject_st {
- _unused: [u8; 0],
-}
-pub type CUuserObject = *mut CUuserObject_st;
-pub type CUgraphConditionalHandle = cuuint64_t;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraphDeviceUpdatableNode_st {
- _unused: [u8; 0],
-}
-pub type CUgraphDeviceNode = *mut CUgraphDeviceUpdatableNode_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUasyncCallbackEntry_st {
- _unused: [u8; 0],
-}
-pub type CUasyncCallbackHandle = *mut CUasyncCallbackEntry_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUuuid_st {
- pub bytes: [::std::os::raw::c_char; 16usize],
-}
-pub type CUuuid = CUuuid_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemFabricHandle_st {
- pub data: [::std::os::raw::c_uchar; 64usize],
-}
-pub type CUmemFabricHandle_v1 = CUmemFabricHandle_st;
-pub type CUmemFabricHandle = CUmemFabricHandle_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUipcEventHandle_st {
- pub reserved: [::std::os::raw::c_char; 64usize],
-}
-pub type CUipcEventHandle_v1 = CUipcEventHandle_st;
-pub type CUipcEventHandle = CUipcEventHandle_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUipcMemHandle_st {
- pub reserved: [::std::os::raw::c_char; 64usize],
-}
-pub type CUipcMemHandle_v1 = CUipcMemHandle_st;
-pub type CUipcMemHandle = CUipcMemHandle_v1;
-impl CUipcMem_flags_enum {
- pub const CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS: CUipcMem_flags_enum = CUipcMem_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUipcMem_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUipcMem_flags_enum as CUipcMem_flags;
-impl CUmemAttach_flags_enum {
- pub const CU_MEM_ATTACH_GLOBAL: CUmemAttach_flags_enum = CUmemAttach_flags_enum(1);
-}
-impl CUmemAttach_flags_enum {
- pub const CU_MEM_ATTACH_HOST: CUmemAttach_flags_enum = CUmemAttach_flags_enum(2);
-}
-impl CUmemAttach_flags_enum {
- pub const CU_MEM_ATTACH_SINGLE: CUmemAttach_flags_enum = CUmemAttach_flags_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAttach_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAttach_flags_enum as CUmemAttach_flags;
-impl CUctx_flags_enum {
- pub const CU_CTX_SCHED_AUTO: CUctx_flags_enum = CUctx_flags_enum(0);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_SCHED_SPIN: CUctx_flags_enum = CUctx_flags_enum(1);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_SCHED_YIELD: CUctx_flags_enum = CUctx_flags_enum(2);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_SCHED_BLOCKING_SYNC: CUctx_flags_enum = CUctx_flags_enum(4);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_BLOCKING_SYNC: CUctx_flags_enum = CUctx_flags_enum(4);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_SCHED_MASK: CUctx_flags_enum = CUctx_flags_enum(7);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_MAP_HOST: CUctx_flags_enum = CUctx_flags_enum(8);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_LMEM_RESIZE_TO_MAX: CUctx_flags_enum = CUctx_flags_enum(16);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_COREDUMP_ENABLE: CUctx_flags_enum = CUctx_flags_enum(32);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_USER_COREDUMP_ENABLE: CUctx_flags_enum = CUctx_flags_enum(64);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_SYNC_MEMOPS: CUctx_flags_enum = CUctx_flags_enum(128);
-}
-impl CUctx_flags_enum {
- pub const CU_CTX_FLAGS_MASK: CUctx_flags_enum = CUctx_flags_enum(255);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUctx_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUctx_flags_enum as CUctx_flags;
-impl CUevent_sched_flags_enum {
- pub const CU_EVENT_SCHED_AUTO: CUevent_sched_flags_enum = CUevent_sched_flags_enum(0);
-}
-impl CUevent_sched_flags_enum {
- pub const CU_EVENT_SCHED_SPIN: CUevent_sched_flags_enum = CUevent_sched_flags_enum(1);
-}
-impl CUevent_sched_flags_enum {
- pub const CU_EVENT_SCHED_YIELD: CUevent_sched_flags_enum = CUevent_sched_flags_enum(2);
-}
-impl CUevent_sched_flags_enum {
- pub const CU_EVENT_SCHED_BLOCKING_SYNC: CUevent_sched_flags_enum = CUevent_sched_flags_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUevent_sched_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUevent_sched_flags_enum as CUevent_sched_flags;
-impl CUstream_flags_enum {
- pub const CU_STREAM_DEFAULT: CUstream_flags_enum = CUstream_flags_enum(0);
-}
-impl CUstream_flags_enum {
- pub const CU_STREAM_NON_BLOCKING: CUstream_flags_enum = CUstream_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstream_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstream_flags_enum as CUstream_flags;
-impl CUevent_flags_enum {
- pub const CU_EVENT_DEFAULT: CUevent_flags_enum = CUevent_flags_enum(0);
-}
-impl CUevent_flags_enum {
- pub const CU_EVENT_BLOCKING_SYNC: CUevent_flags_enum = CUevent_flags_enum(1);
-}
-impl CUevent_flags_enum {
- pub const CU_EVENT_DISABLE_TIMING: CUevent_flags_enum = CUevent_flags_enum(2);
-}
-impl CUevent_flags_enum {
- pub const CU_EVENT_INTERPROCESS: CUevent_flags_enum = CUevent_flags_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUevent_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUevent_flags_enum as CUevent_flags;
-impl CUevent_record_flags_enum {
- pub const CU_EVENT_RECORD_DEFAULT: CUevent_record_flags_enum = CUevent_record_flags_enum(0);
-}
-impl CUevent_record_flags_enum {
- pub const CU_EVENT_RECORD_EXTERNAL: CUevent_record_flags_enum = CUevent_record_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUevent_record_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUevent_record_flags_enum as CUevent_record_flags;
-impl CUevent_wait_flags_enum {
- pub const CU_EVENT_WAIT_DEFAULT: CUevent_wait_flags_enum = CUevent_wait_flags_enum(0);
-}
-impl CUevent_wait_flags_enum {
- pub const CU_EVENT_WAIT_EXTERNAL: CUevent_wait_flags_enum = CUevent_wait_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUevent_wait_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUevent_wait_flags_enum as CUevent_wait_flags;
-impl CUstreamWaitValue_flags_enum {
- pub const CU_STREAM_WAIT_VALUE_GEQ: CUstreamWaitValue_flags_enum =
- CUstreamWaitValue_flags_enum(0);
-}
-impl CUstreamWaitValue_flags_enum {
- pub const CU_STREAM_WAIT_VALUE_EQ: CUstreamWaitValue_flags_enum =
- CUstreamWaitValue_flags_enum(1);
-}
-impl CUstreamWaitValue_flags_enum {
- pub const CU_STREAM_WAIT_VALUE_AND: CUstreamWaitValue_flags_enum =
- CUstreamWaitValue_flags_enum(2);
-}
-impl CUstreamWaitValue_flags_enum {
- pub const CU_STREAM_WAIT_VALUE_NOR: CUstreamWaitValue_flags_enum =
- CUstreamWaitValue_flags_enum(3);
-}
-impl CUstreamWaitValue_flags_enum {
- pub const CU_STREAM_WAIT_VALUE_FLUSH: CUstreamWaitValue_flags_enum =
- CUstreamWaitValue_flags_enum(1073741824);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamWaitValue_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamWaitValue_flags_enum as CUstreamWaitValue_flags;
-impl CUstreamWriteValue_flags_enum {
- pub const CU_STREAM_WRITE_VALUE_DEFAULT: CUstreamWriteValue_flags_enum =
- CUstreamWriteValue_flags_enum(0);
-}
-impl CUstreamWriteValue_flags_enum {
- pub const CU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER: CUstreamWriteValue_flags_enum =
- CUstreamWriteValue_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamWriteValue_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamWriteValue_flags_enum as CUstreamWriteValue_flags;
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_WAIT_VALUE_32: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(1);
-}
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_WRITE_VALUE_32: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(2);
-}
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_WAIT_VALUE_64: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(4);
-}
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_WRITE_VALUE_64: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(5);
-}
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_BARRIER: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(6);
-}
-impl CUstreamBatchMemOpType_enum {
- pub const CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES: CUstreamBatchMemOpType_enum =
- CUstreamBatchMemOpType_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamBatchMemOpType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamBatchMemOpType_enum as CUstreamBatchMemOpType;
-impl CUstreamMemoryBarrier_flags_enum {
- pub const CU_STREAM_MEMORY_BARRIER_TYPE_SYS: CUstreamMemoryBarrier_flags_enum =
- CUstreamMemoryBarrier_flags_enum(0);
-}
-impl CUstreamMemoryBarrier_flags_enum {
- pub const CU_STREAM_MEMORY_BARRIER_TYPE_GPU: CUstreamMemoryBarrier_flags_enum =
- CUstreamMemoryBarrier_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamMemoryBarrier_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamMemoryBarrier_flags_enum as CUstreamMemoryBarrier_flags;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUstreamBatchMemOpParams_union {
- pub operation: CUstreamBatchMemOpType,
- pub waitValue: CUstreamBatchMemOpParams_union_CUstreamMemOpWaitValueParams_st,
- pub writeValue: CUstreamBatchMemOpParams_union_CUstreamMemOpWriteValueParams_st,
- pub flushRemoteWrites: CUstreamBatchMemOpParams_union_CUstreamMemOpFlushRemoteWritesParams_st,
- pub memoryBarrier: CUstreamBatchMemOpParams_union_CUstreamMemOpMemoryBarrierParams_st,
- pub pad: [cuuint64_t; 6usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUstreamBatchMemOpParams_union_CUstreamMemOpWaitValueParams_st {
- pub operation: CUstreamBatchMemOpType,
- pub address: CUdeviceptr,
- pub __bindgen_anon_1:
- CUstreamBatchMemOpParams_union_CUstreamMemOpWaitValueParams_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
- pub alias: CUdeviceptr,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUstreamBatchMemOpParams_union_CUstreamMemOpWaitValueParams_st__bindgen_ty_1 {
- pub value: cuuint32_t,
- pub value64: cuuint64_t,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUstreamBatchMemOpParams_union_CUstreamMemOpWriteValueParams_st {
- pub operation: CUstreamBatchMemOpType,
- pub address: CUdeviceptr,
- pub __bindgen_anon_1:
- CUstreamBatchMemOpParams_union_CUstreamMemOpWriteValueParams_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
- pub alias: CUdeviceptr,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUstreamBatchMemOpParams_union_CUstreamMemOpWriteValueParams_st__bindgen_ty_1 {
- pub value: cuuint32_t,
- pub value64: cuuint64_t,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUstreamBatchMemOpParams_union_CUstreamMemOpFlushRemoteWritesParams_st {
- pub operation: CUstreamBatchMemOpType,
- pub flags: ::std::os::raw::c_uint,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUstreamBatchMemOpParams_union_CUstreamMemOpMemoryBarrierParams_st {
- pub operation: CUstreamBatchMemOpType,
- pub flags: ::std::os::raw::c_uint,
-}
-pub type CUstreamBatchMemOpParams_v1 = CUstreamBatchMemOpParams_union;
-pub type CUstreamBatchMemOpParams = CUstreamBatchMemOpParams_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_BATCH_MEM_OP_NODE_PARAMS_v1_st {
- pub ctx: CUcontext,
- pub count: ::std::os::raw::c_uint,
- pub paramArray: *mut CUstreamBatchMemOpParams,
- pub flags: ::std::os::raw::c_uint,
-}
-pub type CUDA_BATCH_MEM_OP_NODE_PARAMS_v1 = CUDA_BATCH_MEM_OP_NODE_PARAMS_v1_st;
-pub type CUDA_BATCH_MEM_OP_NODE_PARAMS = CUDA_BATCH_MEM_OP_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_BATCH_MEM_OP_NODE_PARAMS_v2_st {
- pub ctx: CUcontext,
- pub count: ::std::os::raw::c_uint,
- pub paramArray: *mut CUstreamBatchMemOpParams,
- pub flags: ::std::os::raw::c_uint,
-}
-pub type CUDA_BATCH_MEM_OP_NODE_PARAMS_v2 = CUDA_BATCH_MEM_OP_NODE_PARAMS_v2_st;
-impl CUoccupancy_flags_enum {
- pub const CU_OCCUPANCY_DEFAULT: CUoccupancy_flags_enum = CUoccupancy_flags_enum(0);
-}
-impl CUoccupancy_flags_enum {
- pub const CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE: CUoccupancy_flags_enum =
- CUoccupancy_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUoccupancy_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUoccupancy_flags_enum as CUoccupancy_flags;
-impl CUstreamUpdateCaptureDependencies_flags_enum {
- pub const CU_STREAM_ADD_CAPTURE_DEPENDENCIES: CUstreamUpdateCaptureDependencies_flags_enum =
- CUstreamUpdateCaptureDependencies_flags_enum(0);
-}
-impl CUstreamUpdateCaptureDependencies_flags_enum {
- pub const CU_STREAM_SET_CAPTURE_DEPENDENCIES: CUstreamUpdateCaptureDependencies_flags_enum =
- CUstreamUpdateCaptureDependencies_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamUpdateCaptureDependencies_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamUpdateCaptureDependencies_flags_enum as CUstreamUpdateCaptureDependencies_flags;
-impl CUasyncNotificationType_enum {
- pub const CU_ASYNC_NOTIFICATION_TYPE_OVER_BUDGET: CUasyncNotificationType_enum =
- CUasyncNotificationType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUasyncNotificationType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUasyncNotificationType_enum as CUasyncNotificationType;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUasyncNotificationInfo_st {
- pub type_: CUasyncNotificationType,
- pub info: CUasyncNotificationInfo_st__bindgen_ty_1,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUasyncNotificationInfo_st__bindgen_ty_1 {
- pub overBudget: CUasyncNotificationInfo_st__bindgen_ty_1__bindgen_ty_1,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUasyncNotificationInfo_st__bindgen_ty_1__bindgen_ty_1 {
- pub bytesOverBudget: ::std::os::raw::c_ulonglong,
-}
-pub type CUasyncNotificationInfo = CUasyncNotificationInfo_st;
-pub type CUasyncCallback = ::std::option::Option<
- unsafe extern "C" fn(
- info: *mut CUasyncNotificationInfo,
- userData: *mut ::std::os::raw::c_void,
- callback: CUasyncCallbackHandle,
- ),
->;
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNSIGNED_INT8: CUarray_format_enum = CUarray_format_enum(1);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNSIGNED_INT16: CUarray_format_enum = CUarray_format_enum(2);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNSIGNED_INT32: CUarray_format_enum = CUarray_format_enum(3);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SIGNED_INT8: CUarray_format_enum = CUarray_format_enum(8);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SIGNED_INT16: CUarray_format_enum = CUarray_format_enum(9);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SIGNED_INT32: CUarray_format_enum = CUarray_format_enum(10);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_HALF: CUarray_format_enum = CUarray_format_enum(16);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_FLOAT: CUarray_format_enum = CUarray_format_enum(32);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_NV12: CUarray_format_enum = CUarray_format_enum(176);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT8X1: CUarray_format_enum = CUarray_format_enum(192);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT8X2: CUarray_format_enum = CUarray_format_enum(193);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT8X4: CUarray_format_enum = CUarray_format_enum(194);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT16X1: CUarray_format_enum = CUarray_format_enum(195);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT16X2: CUarray_format_enum = CUarray_format_enum(196);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_UNORM_INT16X4: CUarray_format_enum = CUarray_format_enum(197);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT8X1: CUarray_format_enum = CUarray_format_enum(198);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT8X2: CUarray_format_enum = CUarray_format_enum(199);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT8X4: CUarray_format_enum = CUarray_format_enum(200);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT16X1: CUarray_format_enum = CUarray_format_enum(201);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT16X2: CUarray_format_enum = CUarray_format_enum(202);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_SNORM_INT16X4: CUarray_format_enum = CUarray_format_enum(203);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC1_UNORM: CUarray_format_enum = CUarray_format_enum(145);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC1_UNORM_SRGB: CUarray_format_enum = CUarray_format_enum(146);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC2_UNORM: CUarray_format_enum = CUarray_format_enum(147);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC2_UNORM_SRGB: CUarray_format_enum = CUarray_format_enum(148);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC3_UNORM: CUarray_format_enum = CUarray_format_enum(149);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC3_UNORM_SRGB: CUarray_format_enum = CUarray_format_enum(150);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC4_UNORM: CUarray_format_enum = CUarray_format_enum(151);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC4_SNORM: CUarray_format_enum = CUarray_format_enum(152);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC5_UNORM: CUarray_format_enum = CUarray_format_enum(153);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC5_SNORM: CUarray_format_enum = CUarray_format_enum(154);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC6H_UF16: CUarray_format_enum = CUarray_format_enum(155);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC6H_SF16: CUarray_format_enum = CUarray_format_enum(156);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC7_UNORM: CUarray_format_enum = CUarray_format_enum(157);
-}
-impl CUarray_format_enum {
- pub const CU_AD_FORMAT_BC7_UNORM_SRGB: CUarray_format_enum = CUarray_format_enum(158);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUarray_format_enum(pub ::std::os::raw::c_uint);
-pub use self::CUarray_format_enum as CUarray_format;
-impl CUaddress_mode_enum {
- pub const CU_TR_ADDRESS_MODE_WRAP: CUaddress_mode_enum = CUaddress_mode_enum(0);
-}
-impl CUaddress_mode_enum {
- pub const CU_TR_ADDRESS_MODE_CLAMP: CUaddress_mode_enum = CUaddress_mode_enum(1);
-}
-impl CUaddress_mode_enum {
- pub const CU_TR_ADDRESS_MODE_MIRROR: CUaddress_mode_enum = CUaddress_mode_enum(2);
-}
-impl CUaddress_mode_enum {
- pub const CU_TR_ADDRESS_MODE_BORDER: CUaddress_mode_enum = CUaddress_mode_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUaddress_mode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUaddress_mode_enum as CUaddress_mode;
-impl CUfilter_mode_enum {
- pub const CU_TR_FILTER_MODE_POINT: CUfilter_mode_enum = CUfilter_mode_enum(0);
-}
-impl CUfilter_mode_enum {
- pub const CU_TR_FILTER_MODE_LINEAR: CUfilter_mode_enum = CUfilter_mode_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUfilter_mode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUfilter_mode_enum as CUfilter_mode;
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(1);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X: CUdevice_attribute_enum =
- CUdevice_attribute_enum(2);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y: CUdevice_attribute_enum =
- CUdevice_attribute_enum(3);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z: CUdevice_attribute_enum =
- CUdevice_attribute_enum(4);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X: CUdevice_attribute_enum =
- CUdevice_attribute_enum(5);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y: CUdevice_attribute_enum =
- CUdevice_attribute_enum(6);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z: CUdevice_attribute_enum =
- CUdevice_attribute_enum(7);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(8);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(8);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY: CUdevice_attribute_enum =
- CUdevice_attribute_enum(9);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_WARP_SIZE: CUdevice_attribute_enum = CUdevice_attribute_enum(10);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_PITCH: CUdevice_attribute_enum = CUdevice_attribute_enum(11);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(12);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(12);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CLOCK_RATE: CUdevice_attribute_enum = CUdevice_attribute_enum(13);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(14);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GPU_OVERLAP: CUdevice_attribute_enum =
- CUdevice_attribute_enum(15);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(16);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(17);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_INTEGRATED: CUdevice_attribute_enum = CUdevice_attribute_enum(18);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY: CUdevice_attribute_enum =
- CUdevice_attribute_enum(19);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COMPUTE_MODE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(20);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(21);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(22);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(23);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(24);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(25);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(26);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(27);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(28);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(29);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(27);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(28);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES: CUdevice_attribute_enum =
- CUdevice_attribute_enum(29);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(30);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(31);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_ECC_ENABLED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(32);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_PCI_BUS_ID: CUdevice_attribute_enum = CUdevice_attribute_enum(33);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID: CUdevice_attribute_enum =
- CUdevice_attribute_enum(34);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TCC_DRIVER: CUdevice_attribute_enum = CUdevice_attribute_enum(35);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(36);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(37);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(38);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(39);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(40);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING: CUdevice_attribute_enum =
- CUdevice_attribute_enum(41);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(42);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(43);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER: CUdevice_attribute_enum =
- CUdevice_attribute_enum(44);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(45);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(46);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(47);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(48);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(49);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID: CUdevice_attribute_enum =
- CUdevice_attribute_enum(50);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(51);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(52);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(53);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(54);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(55);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(56);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(57);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(58);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(59);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(60);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(61);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(62);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(63);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(64);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(65);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(66);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(67);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(68);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(69);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(70);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(71);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(72);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(73);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(74);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(75);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(76);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(77);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(78);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(79);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(80);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(81);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(82);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY: CUdevice_attribute_enum =
- CUdevice_attribute_enum(83);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD: CUdevice_attribute_enum =
- CUdevice_attribute_enum(84);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID: CUdevice_attribute_enum =
- CUdevice_attribute_enum(85);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(86);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO: CUdevice_attribute_enum =
- CUdevice_attribute_enum(87);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(88);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(89);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(90);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM: CUdevice_attribute_enum =
- CUdevice_attribute_enum(91);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS_V1: CUdevice_attribute_enum =
- CUdevice_attribute_enum(92);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V1: CUdevice_attribute_enum =
- CUdevice_attribute_enum(93);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V1: CUdevice_attribute_enum =
- CUdevice_attribute_enum(94);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(95);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(96);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN: CUdevice_attribute_enum =
- CUdevice_attribute_enum(97);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES: CUdevice_attribute_enum =
- CUdevice_attribute_enum(98);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(99);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES:
- CUdevice_attribute_enum = CUdevice_attribute_enum(100);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST: CUdevice_attribute_enum =
- CUdevice_attribute_enum(101);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(102);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(102);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED:
- CUdevice_attribute_enum = CUdevice_attribute_enum(103);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(104);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(105);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(106);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(107);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(108);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE: CUdevice_attribute_enum =
- CUdevice_attribute_enum(109);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(110);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK: CUdevice_attribute_enum =
- CUdevice_attribute_enum(111);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(112);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(113);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(114);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(115);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(116);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(117);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING: CUdevice_attribute_enum =
- CUdevice_attribute_enum(118);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES: CUdevice_attribute_enum =
- CUdevice_attribute_enum(119);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH: CUdevice_attribute_enum =
- CUdevice_attribute_enum(120);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(121);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(122);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR: CUdevice_attribute_enum =
- CUdevice_attribute_enum(123);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(124);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(125);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT: CUdevice_attribute_enum =
- CUdevice_attribute_enum(126);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(127);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(128);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS: CUdevice_attribute_enum =
- CUdevice_attribute_enum(129);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_NUMA_CONFIG: CUdevice_attribute_enum =
- CUdevice_attribute_enum(130);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_NUMA_ID: CUdevice_attribute_enum = CUdevice_attribute_enum(131);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(132);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MPS_ENABLED: CUdevice_attribute_enum =
- CUdevice_attribute_enum(133);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID: CUdevice_attribute_enum =
- CUdevice_attribute_enum(134);
-}
-impl CUdevice_attribute_enum {
- pub const CU_DEVICE_ATTRIBUTE_MAX: CUdevice_attribute_enum = CUdevice_attribute_enum(135);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdevice_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUdevice_attribute_enum as CUdevice_attribute;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUdevprop_st {
- pub maxThreadsPerBlock: ::std::os::raw::c_int,
- pub maxThreadsDim: [::std::os::raw::c_int; 3usize],
- pub maxGridSize: [::std::os::raw::c_int; 3usize],
- pub sharedMemPerBlock: ::std::os::raw::c_int,
- pub totalConstantMemory: ::std::os::raw::c_int,
- pub SIMDWidth: ::std::os::raw::c_int,
- pub memPitch: ::std::os::raw::c_int,
- pub regsPerBlock: ::std::os::raw::c_int,
- pub clockRate: ::std::os::raw::c_int,
- pub textureAlign: ::std::os::raw::c_int,
-}
-pub type CUdevprop_v1 = CUdevprop_st;
-pub type CUdevprop = CUdevprop_v1;
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_CONTEXT: CUpointer_attribute_enum = CUpointer_attribute_enum(1);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MEMORY_TYPE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(2);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_DEVICE_POINTER: CUpointer_attribute_enum =
- CUpointer_attribute_enum(3);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_HOST_POINTER: CUpointer_attribute_enum =
- CUpointer_attribute_enum(4);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_P2P_TOKENS: CUpointer_attribute_enum =
- CUpointer_attribute_enum(5);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_SYNC_MEMOPS: CUpointer_attribute_enum =
- CUpointer_attribute_enum(6);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_BUFFER_ID: CUpointer_attribute_enum =
- CUpointer_attribute_enum(7);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_IS_MANAGED: CUpointer_attribute_enum =
- CUpointer_attribute_enum(8);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL: CUpointer_attribute_enum =
- CUpointer_attribute_enum(9);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(10);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_RANGE_START_ADDR: CUpointer_attribute_enum =
- CUpointer_attribute_enum(11);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_RANGE_SIZE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(12);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MAPPED: CUpointer_attribute_enum = CUpointer_attribute_enum(13);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES: CUpointer_attribute_enum =
- CUpointer_attribute_enum(14);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_IS_GPU_DIRECT_RDMA_CAPABLE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(15);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_ACCESS_FLAGS: CUpointer_attribute_enum =
- CUpointer_attribute_enum(16);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(17);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MAPPING_SIZE: CUpointer_attribute_enum =
- CUpointer_attribute_enum(18);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MAPPING_BASE_ADDR: CUpointer_attribute_enum =
- CUpointer_attribute_enum(19);
-}
-impl CUpointer_attribute_enum {
- pub const CU_POINTER_ATTRIBUTE_MEMORY_BLOCK_ID: CUpointer_attribute_enum =
- CUpointer_attribute_enum(20);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUpointer_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUpointer_attribute_enum as CUpointer_attribute;
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK: CUfunction_attribute_enum =
- CUfunction_attribute_enum(0);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES: CUfunction_attribute_enum =
- CUfunction_attribute_enum(1);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES: CUfunction_attribute_enum =
- CUfunction_attribute_enum(2);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES: CUfunction_attribute_enum =
- CUfunction_attribute_enum(3);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_NUM_REGS: CUfunction_attribute_enum = CUfunction_attribute_enum(4);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_PTX_VERSION: CUfunction_attribute_enum =
- CUfunction_attribute_enum(5);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_BINARY_VERSION: CUfunction_attribute_enum =
- CUfunction_attribute_enum(6);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_CACHE_MODE_CA: CUfunction_attribute_enum =
- CUfunction_attribute_enum(7);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: CUfunction_attribute_enum =
- CUfunction_attribute_enum(8);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: CUfunction_attribute_enum =
- CUfunction_attribute_enum(9);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET: CUfunction_attribute_enum =
- CUfunction_attribute_enum(10);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: CUfunction_attribute_enum =
- CUfunction_attribute_enum(11);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: CUfunction_attribute_enum =
- CUfunction_attribute_enum(12);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: CUfunction_attribute_enum =
- CUfunction_attribute_enum(13);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED: CUfunction_attribute_enum =
- CUfunction_attribute_enum(14);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: CUfunction_attribute_enum =
- CUfunction_attribute_enum(15);
-}
-impl CUfunction_attribute_enum {
- pub const CU_FUNC_ATTRIBUTE_MAX: CUfunction_attribute_enum = CUfunction_attribute_enum(16);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUfunction_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUfunction_attribute_enum as CUfunction_attribute;
-impl CUfunc_cache_enum {
- pub const CU_FUNC_CACHE_PREFER_NONE: CUfunc_cache_enum = CUfunc_cache_enum(0);
-}
-impl CUfunc_cache_enum {
- pub const CU_FUNC_CACHE_PREFER_SHARED: CUfunc_cache_enum = CUfunc_cache_enum(1);
-}
-impl CUfunc_cache_enum {
- pub const CU_FUNC_CACHE_PREFER_L1: CUfunc_cache_enum = CUfunc_cache_enum(2);
-}
-impl CUfunc_cache_enum {
- pub const CU_FUNC_CACHE_PREFER_EQUAL: CUfunc_cache_enum = CUfunc_cache_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUfunc_cache_enum(pub ::std::os::raw::c_uint);
-pub use self::CUfunc_cache_enum as CUfunc_cache;
-impl CUsharedconfig_enum {
- pub const CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: CUsharedconfig_enum = CUsharedconfig_enum(0);
-}
-impl CUsharedconfig_enum {
- pub const CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: CUsharedconfig_enum =
- CUsharedconfig_enum(1);
-}
-impl CUsharedconfig_enum {
- pub const CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: CUsharedconfig_enum =
- CUsharedconfig_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUsharedconfig_enum(pub ::std::os::raw::c_uint);
-pub use self::CUsharedconfig_enum as CUsharedconfig;
-impl CUshared_carveout_enum {
- pub const CU_SHAREDMEM_CARVEOUT_DEFAULT: CUshared_carveout_enum = CUshared_carveout_enum(-1);
-}
-impl CUshared_carveout_enum {
- pub const CU_SHAREDMEM_CARVEOUT_MAX_SHARED: CUshared_carveout_enum =
- CUshared_carveout_enum(100);
-}
-impl CUshared_carveout_enum {
- pub const CU_SHAREDMEM_CARVEOUT_MAX_L1: CUshared_carveout_enum = CUshared_carveout_enum(0);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUshared_carveout_enum(pub ::std::os::raw::c_int);
-pub use self::CUshared_carveout_enum as CUshared_carveout;
-impl CUmemorytype_enum {
- pub const CU_MEMORYTYPE_HOST: CUmemorytype_enum = CUmemorytype_enum(1);
-}
-impl CUmemorytype_enum {
- pub const CU_MEMORYTYPE_DEVICE: CUmemorytype_enum = CUmemorytype_enum(2);
-}
-impl CUmemorytype_enum {
- pub const CU_MEMORYTYPE_ARRAY: CUmemorytype_enum = CUmemorytype_enum(3);
-}
-impl CUmemorytype_enum {
- pub const CU_MEMORYTYPE_UNIFIED: CUmemorytype_enum = CUmemorytype_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemorytype_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemorytype_enum as CUmemorytype;
-impl CUcomputemode_enum {
- pub const CU_COMPUTEMODE_DEFAULT: CUcomputemode_enum = CUcomputemode_enum(0);
-}
-impl CUcomputemode_enum {
- pub const CU_COMPUTEMODE_PROHIBITED: CUcomputemode_enum = CUcomputemode_enum(2);
-}
-impl CUcomputemode_enum {
- pub const CU_COMPUTEMODE_EXCLUSIVE_PROCESS: CUcomputemode_enum = CUcomputemode_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUcomputemode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUcomputemode_enum as CUcomputemode;
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_SET_READ_MOSTLY: CUmem_advise_enum = CUmem_advise_enum(1);
-}
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_UNSET_READ_MOSTLY: CUmem_advise_enum = CUmem_advise_enum(2);
-}
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_SET_PREFERRED_LOCATION: CUmem_advise_enum = CUmem_advise_enum(3);
-}
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_UNSET_PREFERRED_LOCATION: CUmem_advise_enum = CUmem_advise_enum(4);
-}
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_SET_ACCESSED_BY: CUmem_advise_enum = CUmem_advise_enum(5);
-}
-impl CUmem_advise_enum {
- pub const CU_MEM_ADVISE_UNSET_ACCESSED_BY: CUmem_advise_enum = CUmem_advise_enum(6);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmem_advise_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmem_advise_enum as CUmem_advise;
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(1);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(2);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(3);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(4);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_TYPE: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(5);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_ID: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(6);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_TYPE: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(7);
-}
-impl CUmem_range_attribute_enum {
- pub const CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_ID: CUmem_range_attribute_enum =
- CUmem_range_attribute_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmem_range_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmem_range_attribute_enum as CUmem_range_attribute;
-impl CUjit_option_enum {
- pub const CU_JIT_MAX_REGISTERS: CUjit_option_enum = CUjit_option_enum(0);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_THREADS_PER_BLOCK: CUjit_option_enum = CUjit_option_enum(1);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_WALL_TIME: CUjit_option_enum = CUjit_option_enum(2);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_INFO_LOG_BUFFER: CUjit_option_enum = CUjit_option_enum(3);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES: CUjit_option_enum = CUjit_option_enum(4);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_ERROR_LOG_BUFFER: CUjit_option_enum = CUjit_option_enum(5);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES: CUjit_option_enum = CUjit_option_enum(6);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_OPTIMIZATION_LEVEL: CUjit_option_enum = CUjit_option_enum(7);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_TARGET_FROM_CUCONTEXT: CUjit_option_enum = CUjit_option_enum(8);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_TARGET: CUjit_option_enum = CUjit_option_enum(9);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_FALLBACK_STRATEGY: CUjit_option_enum = CUjit_option_enum(10);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_GENERATE_DEBUG_INFO: CUjit_option_enum = CUjit_option_enum(11);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_LOG_VERBOSE: CUjit_option_enum = CUjit_option_enum(12);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_GENERATE_LINE_INFO: CUjit_option_enum = CUjit_option_enum(13);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_CACHE_MODE: CUjit_option_enum = CUjit_option_enum(14);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_NEW_SM3X_OPT: CUjit_option_enum = CUjit_option_enum(15);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_FAST_COMPILE: CUjit_option_enum = CUjit_option_enum(16);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_GLOBAL_SYMBOL_NAMES: CUjit_option_enum = CUjit_option_enum(17);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_GLOBAL_SYMBOL_ADDRESSES: CUjit_option_enum = CUjit_option_enum(18);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_GLOBAL_SYMBOL_COUNT: CUjit_option_enum = CUjit_option_enum(19);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_LTO: CUjit_option_enum = CUjit_option_enum(20);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_FTZ: CUjit_option_enum = CUjit_option_enum(21);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_PREC_DIV: CUjit_option_enum = CUjit_option_enum(22);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_PREC_SQRT: CUjit_option_enum = CUjit_option_enum(23);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_FMA: CUjit_option_enum = CUjit_option_enum(24);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_REFERENCED_KERNEL_NAMES: CUjit_option_enum = CUjit_option_enum(25);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_REFERENCED_KERNEL_COUNT: CUjit_option_enum = CUjit_option_enum(26);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_REFERENCED_VARIABLE_NAMES: CUjit_option_enum = CUjit_option_enum(27);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_REFERENCED_VARIABLE_COUNT: CUjit_option_enum = CUjit_option_enum(28);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_OPTIMIZE_UNUSED_DEVICE_VARIABLES: CUjit_option_enum = CUjit_option_enum(29);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_POSITION_INDEPENDENT_CODE: CUjit_option_enum = CUjit_option_enum(30);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_MIN_CTA_PER_SM: CUjit_option_enum = CUjit_option_enum(31);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_MAX_THREADS_PER_BLOCK: CUjit_option_enum = CUjit_option_enum(32);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_OVERRIDE_DIRECTIVE_VALUES: CUjit_option_enum = CUjit_option_enum(33);
-}
-impl CUjit_option_enum {
- pub const CU_JIT_NUM_OPTIONS: CUjit_option_enum = CUjit_option_enum(34);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUjit_option_enum(pub ::std::os::raw::c_uint);
-pub use self::CUjit_option_enum as CUjit_option;
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_30: CUjit_target_enum = CUjit_target_enum(30);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_32: CUjit_target_enum = CUjit_target_enum(32);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_35: CUjit_target_enum = CUjit_target_enum(35);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_37: CUjit_target_enum = CUjit_target_enum(37);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_50: CUjit_target_enum = CUjit_target_enum(50);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_52: CUjit_target_enum = CUjit_target_enum(52);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_53: CUjit_target_enum = CUjit_target_enum(53);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_60: CUjit_target_enum = CUjit_target_enum(60);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_61: CUjit_target_enum = CUjit_target_enum(61);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_62: CUjit_target_enum = CUjit_target_enum(62);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_70: CUjit_target_enum = CUjit_target_enum(70);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_72: CUjit_target_enum = CUjit_target_enum(72);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_75: CUjit_target_enum = CUjit_target_enum(75);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_80: CUjit_target_enum = CUjit_target_enum(80);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_86: CUjit_target_enum = CUjit_target_enum(86);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_87: CUjit_target_enum = CUjit_target_enum(87);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_89: CUjit_target_enum = CUjit_target_enum(89);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_90: CUjit_target_enum = CUjit_target_enum(90);
-}
-impl CUjit_target_enum {
- pub const CU_TARGET_COMPUTE_90A: CUjit_target_enum = CUjit_target_enum(65626);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUjit_target_enum(pub ::std::os::raw::c_uint);
-pub use self::CUjit_target_enum as CUjit_target;
-impl CUjit_fallback_enum {
- pub const CU_PREFER_PTX: CUjit_fallback_enum = CUjit_fallback_enum(0);
-}
-impl CUjit_fallback_enum {
- pub const CU_PREFER_BINARY: CUjit_fallback_enum = CUjit_fallback_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUjit_fallback_enum(pub ::std::os::raw::c_uint);
-pub use self::CUjit_fallback_enum as CUjit_fallback;
-impl CUjit_cacheMode_enum {
- pub const CU_JIT_CACHE_OPTION_NONE: CUjit_cacheMode_enum = CUjit_cacheMode_enum(0);
-}
-impl CUjit_cacheMode_enum {
- pub const CU_JIT_CACHE_OPTION_CG: CUjit_cacheMode_enum = CUjit_cacheMode_enum(1);
-}
-impl CUjit_cacheMode_enum {
- pub const CU_JIT_CACHE_OPTION_CA: CUjit_cacheMode_enum = CUjit_cacheMode_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUjit_cacheMode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUjit_cacheMode_enum as CUjit_cacheMode;
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_CUBIN: CUjitInputType_enum = CUjitInputType_enum(0);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_PTX: CUjitInputType_enum = CUjitInputType_enum(1);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_FATBINARY: CUjitInputType_enum = CUjitInputType_enum(2);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_OBJECT: CUjitInputType_enum = CUjitInputType_enum(3);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_LIBRARY: CUjitInputType_enum = CUjitInputType_enum(4);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_INPUT_NVVM: CUjitInputType_enum = CUjitInputType_enum(5);
-}
-impl CUjitInputType_enum {
- pub const CU_JIT_NUM_INPUT_TYPES: CUjitInputType_enum = CUjitInputType_enum(6);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUjitInputType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUjitInputType_enum as CUjitInputType;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUlinkState_st {
- _unused: [u8; 0],
-}
-pub type CUlinkState = *mut CUlinkState_st;
-impl CUgraphicsRegisterFlags_enum {
- pub const CU_GRAPHICS_REGISTER_FLAGS_NONE: CUgraphicsRegisterFlags_enum =
- CUgraphicsRegisterFlags_enum(0);
-}
-impl CUgraphicsRegisterFlags_enum {
- pub const CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY: CUgraphicsRegisterFlags_enum =
- CUgraphicsRegisterFlags_enum(1);
-}
-impl CUgraphicsRegisterFlags_enum {
- pub const CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD: CUgraphicsRegisterFlags_enum =
- CUgraphicsRegisterFlags_enum(2);
-}
-impl CUgraphicsRegisterFlags_enum {
- pub const CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: CUgraphicsRegisterFlags_enum =
- CUgraphicsRegisterFlags_enum(4);
-}
-impl CUgraphicsRegisterFlags_enum {
- pub const CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: CUgraphicsRegisterFlags_enum =
- CUgraphicsRegisterFlags_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphicsRegisterFlags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphicsRegisterFlags_enum as CUgraphicsRegisterFlags;
-impl CUgraphicsMapResourceFlags_enum {
- pub const CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: CUgraphicsMapResourceFlags_enum =
- CUgraphicsMapResourceFlags_enum(0);
-}
-impl CUgraphicsMapResourceFlags_enum {
- pub const CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY: CUgraphicsMapResourceFlags_enum =
- CUgraphicsMapResourceFlags_enum(1);
-}
-impl CUgraphicsMapResourceFlags_enum {
- pub const CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD: CUgraphicsMapResourceFlags_enum =
- CUgraphicsMapResourceFlags_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphicsMapResourceFlags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphicsMapResourceFlags_enum as CUgraphicsMapResourceFlags;
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_POSITIVE_X: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(0);
-}
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_NEGATIVE_X: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(1);
-}
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_POSITIVE_Y: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(2);
-}
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_NEGATIVE_Y: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(3);
-}
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_POSITIVE_Z: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(4);
-}
-impl CUarray_cubemap_face_enum {
- pub const CU_CUBEMAP_FACE_NEGATIVE_Z: CUarray_cubemap_face_enum = CUarray_cubemap_face_enum(5);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUarray_cubemap_face_enum(pub ::std::os::raw::c_uint);
-pub use self::CUarray_cubemap_face_enum as CUarray_cubemap_face;
-impl CUlimit_enum {
- pub const CU_LIMIT_STACK_SIZE: CUlimit_enum = CUlimit_enum(0);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_PRINTF_FIFO_SIZE: CUlimit_enum = CUlimit_enum(1);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_MALLOC_HEAP_SIZE: CUlimit_enum = CUlimit_enum(2);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH: CUlimit_enum = CUlimit_enum(3);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT: CUlimit_enum = CUlimit_enum(4);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_MAX_L2_FETCH_GRANULARITY: CUlimit_enum = CUlimit_enum(5);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_PERSISTING_L2_CACHE_SIZE: CUlimit_enum = CUlimit_enum(6);
-}
-impl CUlimit_enum {
- pub const CU_LIMIT_MAX: CUlimit_enum = CUlimit_enum(7);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUlimit_enum(pub ::std::os::raw::c_uint);
-pub use self::CUlimit_enum as CUlimit;
-impl CUresourcetype_enum {
- pub const CU_RESOURCE_TYPE_ARRAY: CUresourcetype_enum = CUresourcetype_enum(0);
-}
-impl CUresourcetype_enum {
- pub const CU_RESOURCE_TYPE_MIPMAPPED_ARRAY: CUresourcetype_enum = CUresourcetype_enum(1);
-}
-impl CUresourcetype_enum {
- pub const CU_RESOURCE_TYPE_LINEAR: CUresourcetype_enum = CUresourcetype_enum(2);
-}
-impl CUresourcetype_enum {
- pub const CU_RESOURCE_TYPE_PITCH2D: CUresourcetype_enum = CUresourcetype_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUresourcetype_enum(pub ::std::os::raw::c_uint);
-pub use self::CUresourcetype_enum as CUresourcetype;
-pub type CUhostFn =
- ::std::option::Option<unsafe extern "C" fn(userData: *mut ::std::os::raw::c_void)>;
-impl CUaccessProperty_enum {
- pub const CU_ACCESS_PROPERTY_NORMAL: CUaccessProperty_enum = CUaccessProperty_enum(0);
-}
-impl CUaccessProperty_enum {
- pub const CU_ACCESS_PROPERTY_STREAMING: CUaccessProperty_enum = CUaccessProperty_enum(1);
-}
-impl CUaccessProperty_enum {
- pub const CU_ACCESS_PROPERTY_PERSISTING: CUaccessProperty_enum = CUaccessProperty_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUaccessProperty_enum(pub ::std::os::raw::c_uint);
-pub use self::CUaccessProperty_enum as CUaccessProperty;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq)]
-pub struct CUaccessPolicyWindow_st {
- pub base_ptr: *mut ::std::os::raw::c_void,
- pub num_bytes: usize,
- pub hitRatio: f32,
- pub hitProp: CUaccessProperty,
- pub missProp: CUaccessProperty,
-}
-pub type CUaccessPolicyWindow_v1 = CUaccessPolicyWindow_st;
-pub type CUaccessPolicyWindow = CUaccessPolicyWindow_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_KERNEL_NODE_PARAMS_st {
- pub func: CUfunction,
- pub gridDimX: ::std::os::raw::c_uint,
- pub gridDimY: ::std::os::raw::c_uint,
- pub gridDimZ: ::std::os::raw::c_uint,
- pub blockDimX: ::std::os::raw::c_uint,
- pub blockDimY: ::std::os::raw::c_uint,
- pub blockDimZ: ::std::os::raw::c_uint,
- pub sharedMemBytes: ::std::os::raw::c_uint,
- pub kernelParams: *mut *mut ::std::os::raw::c_void,
- pub extra: *mut *mut ::std::os::raw::c_void,
-}
-pub type CUDA_KERNEL_NODE_PARAMS_v1 = CUDA_KERNEL_NODE_PARAMS_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_KERNEL_NODE_PARAMS_v2_st {
- pub func: CUfunction,
- pub gridDimX: ::std::os::raw::c_uint,
- pub gridDimY: ::std::os::raw::c_uint,
- pub gridDimZ: ::std::os::raw::c_uint,
- pub blockDimX: ::std::os::raw::c_uint,
- pub blockDimY: ::std::os::raw::c_uint,
- pub blockDimZ: ::std::os::raw::c_uint,
- pub sharedMemBytes: ::std::os::raw::c_uint,
- pub kernelParams: *mut *mut ::std::os::raw::c_void,
- pub extra: *mut *mut ::std::os::raw::c_void,
- pub kern: CUkernel,
- pub ctx: CUcontext,
-}
-pub type CUDA_KERNEL_NODE_PARAMS_v2 = CUDA_KERNEL_NODE_PARAMS_v2_st;
-pub type CUDA_KERNEL_NODE_PARAMS = CUDA_KERNEL_NODE_PARAMS_v2;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_KERNEL_NODE_PARAMS_v3_st {
- pub func: CUfunction,
- pub gridDimX: ::std::os::raw::c_uint,
- pub gridDimY: ::std::os::raw::c_uint,
- pub gridDimZ: ::std::os::raw::c_uint,
- pub blockDimX: ::std::os::raw::c_uint,
- pub blockDimY: ::std::os::raw::c_uint,
- pub blockDimZ: ::std::os::raw::c_uint,
- pub sharedMemBytes: ::std::os::raw::c_uint,
- pub kernelParams: *mut *mut ::std::os::raw::c_void,
- pub extra: *mut *mut ::std::os::raw::c_void,
- pub kern: CUkernel,
- pub ctx: CUcontext,
-}
-pub type CUDA_KERNEL_NODE_PARAMS_v3 = CUDA_KERNEL_NODE_PARAMS_v3_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMSET_NODE_PARAMS_st {
- pub dst: CUdeviceptr,
- pub pitch: usize,
- pub value: ::std::os::raw::c_uint,
- pub elementSize: ::std::os::raw::c_uint,
- pub width: usize,
- pub height: usize,
-}
-pub type CUDA_MEMSET_NODE_PARAMS_v1 = CUDA_MEMSET_NODE_PARAMS_st;
-pub type CUDA_MEMSET_NODE_PARAMS = CUDA_MEMSET_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMSET_NODE_PARAMS_v2_st {
- pub dst: CUdeviceptr,
- pub pitch: usize,
- pub value: ::std::os::raw::c_uint,
- pub elementSize: ::std::os::raw::c_uint,
- pub width: usize,
- pub height: usize,
- pub ctx: CUcontext,
-}
-pub type CUDA_MEMSET_NODE_PARAMS_v2 = CUDA_MEMSET_NODE_PARAMS_v2_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_HOST_NODE_PARAMS_st {
- pub fn_: CUhostFn,
- pub userData: *mut ::std::os::raw::c_void,
-}
-pub type CUDA_HOST_NODE_PARAMS_v1 = CUDA_HOST_NODE_PARAMS_st;
-pub type CUDA_HOST_NODE_PARAMS = CUDA_HOST_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_HOST_NODE_PARAMS_v2_st {
- pub fn_: CUhostFn,
- pub userData: *mut ::std::os::raw::c_void,
-}
-pub type CUDA_HOST_NODE_PARAMS_v2 = CUDA_HOST_NODE_PARAMS_v2_st;
-impl CUgraphConditionalNodeType_enum {
- pub const CU_GRAPH_COND_TYPE_IF: CUgraphConditionalNodeType_enum =
- CUgraphConditionalNodeType_enum(0);
-}
-impl CUgraphConditionalNodeType_enum {
- pub const CU_GRAPH_COND_TYPE_WHILE: CUgraphConditionalNodeType_enum =
- CUgraphConditionalNodeType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphConditionalNodeType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphConditionalNodeType_enum as CUgraphConditionalNodeType;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_CONDITIONAL_NODE_PARAMS {
- pub handle: CUgraphConditionalHandle,
- pub type_: CUgraphConditionalNodeType,
- pub size: ::std::os::raw::c_uint,
- pub phGraph_out: *mut CUgraph,
- pub ctx: CUcontext,
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_KERNEL: CUgraphNodeType_enum = CUgraphNodeType_enum(0);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_MEMCPY: CUgraphNodeType_enum = CUgraphNodeType_enum(1);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_MEMSET: CUgraphNodeType_enum = CUgraphNodeType_enum(2);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_HOST: CUgraphNodeType_enum = CUgraphNodeType_enum(3);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_GRAPH: CUgraphNodeType_enum = CUgraphNodeType_enum(4);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_EMPTY: CUgraphNodeType_enum = CUgraphNodeType_enum(5);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_WAIT_EVENT: CUgraphNodeType_enum = CUgraphNodeType_enum(6);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_EVENT_RECORD: CUgraphNodeType_enum = CUgraphNodeType_enum(7);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_EXT_SEMAS_SIGNAL: CUgraphNodeType_enum = CUgraphNodeType_enum(8);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_EXT_SEMAS_WAIT: CUgraphNodeType_enum = CUgraphNodeType_enum(9);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_MEM_ALLOC: CUgraphNodeType_enum = CUgraphNodeType_enum(10);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_MEM_FREE: CUgraphNodeType_enum = CUgraphNodeType_enum(11);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_BATCH_MEM_OP: CUgraphNodeType_enum = CUgraphNodeType_enum(12);
-}
-impl CUgraphNodeType_enum {
- pub const CU_GRAPH_NODE_TYPE_CONDITIONAL: CUgraphNodeType_enum = CUgraphNodeType_enum(13);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphNodeType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphNodeType_enum as CUgraphNodeType;
-impl CUgraphDependencyType_enum {
- pub const CU_GRAPH_DEPENDENCY_TYPE_DEFAULT: CUgraphDependencyType_enum =
- CUgraphDependencyType_enum(0);
-}
-impl CUgraphDependencyType_enum {
- pub const CU_GRAPH_DEPENDENCY_TYPE_PROGRAMMATIC: CUgraphDependencyType_enum =
- CUgraphDependencyType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphDependencyType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphDependencyType_enum as CUgraphDependencyType;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUgraphEdgeData_st {
- pub from_port: ::std::os::raw::c_uchar,
- pub to_port: ::std::os::raw::c_uchar,
- pub type_: ::std::os::raw::c_uchar,
- pub reserved: [::std::os::raw::c_uchar; 5usize],
-}
-pub type CUgraphEdgeData = CUgraphEdgeData_st;
-impl CUgraphInstantiateResult_enum {
- pub const CUDA_GRAPH_INSTANTIATE_SUCCESS: CUgraphInstantiateResult_enum =
- CUgraphInstantiateResult_enum(0);
-}
-impl CUgraphInstantiateResult_enum {
- pub const CUDA_GRAPH_INSTANTIATE_ERROR: CUgraphInstantiateResult_enum =
- CUgraphInstantiateResult_enum(1);
-}
-impl CUgraphInstantiateResult_enum {
- pub const CUDA_GRAPH_INSTANTIATE_INVALID_STRUCTURE: CUgraphInstantiateResult_enum =
- CUgraphInstantiateResult_enum(2);
-}
-impl CUgraphInstantiateResult_enum {
- pub const CUDA_GRAPH_INSTANTIATE_NODE_OPERATION_NOT_SUPPORTED: CUgraphInstantiateResult_enum =
- CUgraphInstantiateResult_enum(3);
-}
-impl CUgraphInstantiateResult_enum {
- pub const CUDA_GRAPH_INSTANTIATE_MULTIPLE_CTXS_NOT_SUPPORTED: CUgraphInstantiateResult_enum =
- CUgraphInstantiateResult_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphInstantiateResult_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphInstantiateResult_enum as CUgraphInstantiateResult;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_GRAPH_INSTANTIATE_PARAMS_st {
- pub flags: cuuint64_t,
- pub hUploadStream: CUstream,
- pub hErrNode_out: CUgraphNode,
- pub result_out: CUgraphInstantiateResult,
-}
-pub type CUDA_GRAPH_INSTANTIATE_PARAMS = CUDA_GRAPH_INSTANTIATE_PARAMS_st;
-impl CUsynchronizationPolicy_enum {
- pub const CU_SYNC_POLICY_AUTO: CUsynchronizationPolicy_enum = CUsynchronizationPolicy_enum(1);
-}
-impl CUsynchronizationPolicy_enum {
- pub const CU_SYNC_POLICY_SPIN: CUsynchronizationPolicy_enum = CUsynchronizationPolicy_enum(2);
-}
-impl CUsynchronizationPolicy_enum {
- pub const CU_SYNC_POLICY_YIELD: CUsynchronizationPolicy_enum = CUsynchronizationPolicy_enum(3);
-}
-impl CUsynchronizationPolicy_enum {
- pub const CU_SYNC_POLICY_BLOCKING_SYNC: CUsynchronizationPolicy_enum =
- CUsynchronizationPolicy_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUsynchronizationPolicy_enum(pub ::std::os::raw::c_uint);
-pub use self::CUsynchronizationPolicy_enum as CUsynchronizationPolicy;
-impl CUclusterSchedulingPolicy_enum {
- pub const CU_CLUSTER_SCHEDULING_POLICY_DEFAULT: CUclusterSchedulingPolicy_enum =
- CUclusterSchedulingPolicy_enum(0);
-}
-impl CUclusterSchedulingPolicy_enum {
- pub const CU_CLUSTER_SCHEDULING_POLICY_SPREAD: CUclusterSchedulingPolicy_enum =
- CUclusterSchedulingPolicy_enum(1);
-}
-impl CUclusterSchedulingPolicy_enum {
- pub const CU_CLUSTER_SCHEDULING_POLICY_LOAD_BALANCING: CUclusterSchedulingPolicy_enum =
- CUclusterSchedulingPolicy_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUclusterSchedulingPolicy_enum(pub ::std::os::raw::c_uint);
-pub use self::CUclusterSchedulingPolicy_enum as CUclusterSchedulingPolicy;
-impl CUlaunchMemSyncDomain_enum {
- pub const CU_LAUNCH_MEM_SYNC_DOMAIN_DEFAULT: CUlaunchMemSyncDomain_enum =
- CUlaunchMemSyncDomain_enum(0);
-}
-impl CUlaunchMemSyncDomain_enum {
- pub const CU_LAUNCH_MEM_SYNC_DOMAIN_REMOTE: CUlaunchMemSyncDomain_enum =
- CUlaunchMemSyncDomain_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUlaunchMemSyncDomain_enum(pub ::std::os::raw::c_uint);
-pub use self::CUlaunchMemSyncDomain_enum as CUlaunchMemSyncDomain;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchMemSyncDomainMap_st {
- pub default_: ::std::os::raw::c_uchar,
- pub remote: ::std::os::raw::c_uchar,
-}
-pub type CUlaunchMemSyncDomainMap = CUlaunchMemSyncDomainMap_st;
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_IGNORE: CUlaunchAttributeID_enum = CUlaunchAttributeID_enum(0);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(1);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_COOPERATIVE: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(2);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(3);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(4);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(5);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(6);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(7);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_PRIORITY: CUlaunchAttributeID_enum = CUlaunchAttributeID_enum(8);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN_MAP: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(9);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(10);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_LAUNCH_COMPLETION_EVENT: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(12);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_DEVICE_UPDATABLE_KERNEL_NODE: CUlaunchAttributeID_enum =
- CUlaunchAttributeID_enum(13);
-}
-impl CUlaunchAttributeID_enum {
- pub const CU_LAUNCH_ATTRIBUTE_MAX: CUlaunchAttributeID_enum = CUlaunchAttributeID_enum(14);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUlaunchAttributeID_enum(pub ::std::os::raw::c_uint);
-pub use self::CUlaunchAttributeID_enum as CUlaunchAttributeID;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUlaunchAttributeValue_union {
- pub pad: [::std::os::raw::c_char; 64usize],
- pub accessPolicyWindow: CUaccessPolicyWindow,
- pub cooperative: ::std::os::raw::c_int,
- pub syncPolicy: CUsynchronizationPolicy,
- pub clusterDim: CUlaunchAttributeValue_union__bindgen_ty_1,
- pub clusterSchedulingPolicyPreference: CUclusterSchedulingPolicy,
- pub programmaticStreamSerializationAllowed: ::std::os::raw::c_int,
- pub programmaticEvent: CUlaunchAttributeValue_union__bindgen_ty_2,
- pub launchCompletionEvent: CUlaunchAttributeValue_union__bindgen_ty_3,
- pub priority: ::std::os::raw::c_int,
- pub memSyncDomainMap: CUlaunchMemSyncDomainMap,
- pub memSyncDomain: CUlaunchMemSyncDomain,
- pub deviceUpdatableKernelNode: CUlaunchAttributeValue_union__bindgen_ty_4,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchAttributeValue_union__bindgen_ty_1 {
- pub x: ::std::os::raw::c_uint,
- pub y: ::std::os::raw::c_uint,
- pub z: ::std::os::raw::c_uint,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchAttributeValue_union__bindgen_ty_2 {
- pub event: CUevent,
- pub flags: ::std::os::raw::c_int,
- pub triggerAtBlockStart: ::std::os::raw::c_int,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchAttributeValue_union__bindgen_ty_3 {
- pub event: CUevent,
- pub flags: ::std::os::raw::c_int,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchAttributeValue_union__bindgen_ty_4 {
- pub deviceUpdatable: ::std::os::raw::c_int,
- pub devNode: CUgraphDeviceNode,
-}
-pub type CUlaunchAttributeValue = CUlaunchAttributeValue_union;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUlaunchAttribute_st {
- pub id: CUlaunchAttributeID,
- pub pad: [::std::os::raw::c_char; 4usize],
- pub value: CUlaunchAttributeValue,
-}
-pub type CUlaunchAttribute = CUlaunchAttribute_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlaunchConfig_st {
- pub gridDimX: ::std::os::raw::c_uint,
- pub gridDimY: ::std::os::raw::c_uint,
- pub gridDimZ: ::std::os::raw::c_uint,
- pub blockDimX: ::std::os::raw::c_uint,
- pub blockDimY: ::std::os::raw::c_uint,
- pub blockDimZ: ::std::os::raw::c_uint,
- pub sharedMemBytes: ::std::os::raw::c_uint,
- pub hStream: CUstream,
- pub attrs: *mut CUlaunchAttribute,
- pub numAttrs: ::std::os::raw::c_uint,
-}
-pub type CUlaunchConfig = CUlaunchConfig_st;
-pub use self::CUlaunchAttributeID as CUkernelNodeAttrID;
-pub type CUkernelNodeAttrValue_v1 = CUlaunchAttributeValue;
-pub type CUkernelNodeAttrValue = CUkernelNodeAttrValue_v1;
-impl CUstreamCaptureStatus_enum {
- pub const CU_STREAM_CAPTURE_STATUS_NONE: CUstreamCaptureStatus_enum =
- CUstreamCaptureStatus_enum(0);
-}
-impl CUstreamCaptureStatus_enum {
- pub const CU_STREAM_CAPTURE_STATUS_ACTIVE: CUstreamCaptureStatus_enum =
- CUstreamCaptureStatus_enum(1);
-}
-impl CUstreamCaptureStatus_enum {
- pub const CU_STREAM_CAPTURE_STATUS_INVALIDATED: CUstreamCaptureStatus_enum =
- CUstreamCaptureStatus_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamCaptureStatus_enum(pub ::std::os::raw::c_uint);
-pub use self::CUstreamCaptureStatus_enum as CUstreamCaptureStatus;
-impl CUstreamCaptureMode_enum {
- pub const CU_STREAM_CAPTURE_MODE_GLOBAL: CUstreamCaptureMode_enum = CUstreamCaptureMode_enum(0);
-}
-impl CUstreamCaptureMode_enum {
- pub const CU_STREAM_CAPTURE_MODE_THREAD_LOCAL: CUstreamCaptureMode_enum =
- CUstreamCaptureMode_enum(1);
-}
-impl CUstreamCaptureMode_enum {
- pub const CU_STREAM_CAPTURE_MODE_RELAXED: CUstreamCaptureMode_enum =
- CUstreamCaptureMode_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUstreamCaptureMode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUlaunchAttributeID as CUstreamAttrID;
-pub use self::CUstreamCaptureMode_enum as CUstreamCaptureMode;
-pub type CUstreamAttrValue_v1 = CUlaunchAttributeValue;
-pub type CUstreamAttrValue = CUstreamAttrValue_v1;
-impl CUdriverProcAddress_flags_enum {
- pub const CU_GET_PROC_ADDRESS_DEFAULT: CUdriverProcAddress_flags_enum =
- CUdriverProcAddress_flags_enum(0);
-}
-impl CUdriverProcAddress_flags_enum {
- pub const CU_GET_PROC_ADDRESS_LEGACY_STREAM: CUdriverProcAddress_flags_enum =
- CUdriverProcAddress_flags_enum(1);
-}
-impl CUdriverProcAddress_flags_enum {
- pub const CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM: CUdriverProcAddress_flags_enum =
- CUdriverProcAddress_flags_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdriverProcAddress_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUdriverProcAddress_flags_enum as CUdriverProcAddress_flags;
-impl CUdriverProcAddressQueryResult_enum {
- pub const CU_GET_PROC_ADDRESS_SUCCESS: CUdriverProcAddressQueryResult_enum =
- CUdriverProcAddressQueryResult_enum(0);
-}
-impl CUdriverProcAddressQueryResult_enum {
- pub const CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND: CUdriverProcAddressQueryResult_enum =
- CUdriverProcAddressQueryResult_enum(1);
-}
-impl CUdriverProcAddressQueryResult_enum {
- pub const CU_GET_PROC_ADDRESS_VERSION_NOT_SUFFICIENT: CUdriverProcAddressQueryResult_enum =
- CUdriverProcAddressQueryResult_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdriverProcAddressQueryResult_enum(pub ::std::os::raw::c_uint);
-pub use self::CUdriverProcAddressQueryResult_enum as CUdriverProcAddressQueryResult;
-impl CUexecAffinityType_enum {
- pub const CU_EXEC_AFFINITY_TYPE_SM_COUNT: CUexecAffinityType_enum = CUexecAffinityType_enum(0);
-}
-impl CUexecAffinityType_enum {
- pub const CU_EXEC_AFFINITY_TYPE_MAX: CUexecAffinityType_enum = CUexecAffinityType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUexecAffinityType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUexecAffinityType_enum as CUexecAffinityType;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUexecAffinitySmCount_st {
- pub val: ::std::os::raw::c_uint,
-}
-pub type CUexecAffinitySmCount_v1 = CUexecAffinitySmCount_st;
-pub type CUexecAffinitySmCount = CUexecAffinitySmCount_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUexecAffinityParam_st {
- pub type_: CUexecAffinityType,
- pub param: CUexecAffinityParam_st__bindgen_ty_1,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUexecAffinityParam_st__bindgen_ty_1 {
- pub smCount: CUexecAffinitySmCount,
-}
-pub type CUexecAffinityParam_v1 = CUexecAffinityParam_st;
-pub type CUexecAffinityParam = CUexecAffinityParam_v1;
-impl CUlibraryOption_enum {
- pub const CU_LIBRARY_HOST_UNIVERSAL_FUNCTION_AND_DATA_TABLE: CUlibraryOption_enum =
- CUlibraryOption_enum(0);
-}
-impl CUlibraryOption_enum {
- pub const CU_LIBRARY_BINARY_IS_PRESERVED: CUlibraryOption_enum = CUlibraryOption_enum(1);
-}
-impl CUlibraryOption_enum {
- pub const CU_LIBRARY_NUM_OPTIONS: CUlibraryOption_enum = CUlibraryOption_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUlibraryOption_enum(pub ::std::os::raw::c_uint);
-pub use self::CUlibraryOption_enum as CUlibraryOption;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUlibraryHostUniversalFunctionAndDataTable_st {
- pub functionTable: *mut ::std::os::raw::c_void,
- pub functionWindowSize: usize,
- pub dataTable: *mut ::std::os::raw::c_void,
- pub dataWindowSize: usize,
-}
-pub type CUlibraryHostUniversalFunctionAndDataTable = CUlibraryHostUniversalFunctionAndDataTable_st;
-pub const cudaError_enum_CUDA_SUCCESS: cudaError_enum = 0;
-pub const cudaError_enum_CUDA_ERROR_INVALID_VALUE: cudaError_enum = 1;
-pub const cudaError_enum_CUDA_ERROR_OUT_OF_MEMORY: cudaError_enum = 2;
-pub const cudaError_enum_CUDA_ERROR_NOT_INITIALIZED: cudaError_enum = 3;
-pub const cudaError_enum_CUDA_ERROR_DEINITIALIZED: cudaError_enum = 4;
-pub const cudaError_enum_CUDA_ERROR_PROFILER_DISABLED: cudaError_enum = 5;
-pub const cudaError_enum_CUDA_ERROR_PROFILER_NOT_INITIALIZED: cudaError_enum = 6;
-pub const cudaError_enum_CUDA_ERROR_PROFILER_ALREADY_STARTED: cudaError_enum = 7;
-pub const cudaError_enum_CUDA_ERROR_PROFILER_ALREADY_STOPPED: cudaError_enum = 8;
-pub const cudaError_enum_CUDA_ERROR_STUB_LIBRARY: cudaError_enum = 34;
-pub const cudaError_enum_CUDA_ERROR_DEVICE_UNAVAILABLE: cudaError_enum = 46;
-pub const cudaError_enum_CUDA_ERROR_NO_DEVICE: cudaError_enum = 100;
-pub const cudaError_enum_CUDA_ERROR_INVALID_DEVICE: cudaError_enum = 101;
-pub const cudaError_enum_CUDA_ERROR_DEVICE_NOT_LICENSED: cudaError_enum = 102;
-pub const cudaError_enum_CUDA_ERROR_INVALID_IMAGE: cudaError_enum = 200;
-pub const cudaError_enum_CUDA_ERROR_INVALID_CONTEXT: cudaError_enum = 201;
-pub const cudaError_enum_CUDA_ERROR_CONTEXT_ALREADY_CURRENT: cudaError_enum = 202;
-pub const cudaError_enum_CUDA_ERROR_MAP_FAILED: cudaError_enum = 205;
-pub const cudaError_enum_CUDA_ERROR_UNMAP_FAILED: cudaError_enum = 206;
-pub const cudaError_enum_CUDA_ERROR_ARRAY_IS_MAPPED: cudaError_enum = 207;
-pub const cudaError_enum_CUDA_ERROR_ALREADY_MAPPED: cudaError_enum = 208;
-pub const cudaError_enum_CUDA_ERROR_NO_BINARY_FOR_GPU: cudaError_enum = 209;
-pub const cudaError_enum_CUDA_ERROR_ALREADY_ACQUIRED: cudaError_enum = 210;
-pub const cudaError_enum_CUDA_ERROR_NOT_MAPPED: cudaError_enum = 211;
-pub const cudaError_enum_CUDA_ERROR_NOT_MAPPED_AS_ARRAY: cudaError_enum = 212;
-pub const cudaError_enum_CUDA_ERROR_NOT_MAPPED_AS_POINTER: cudaError_enum = 213;
-pub const cudaError_enum_CUDA_ERROR_ECC_UNCORRECTABLE: cudaError_enum = 214;
-pub const cudaError_enum_CUDA_ERROR_UNSUPPORTED_LIMIT: cudaError_enum = 215;
-pub const cudaError_enum_CUDA_ERROR_CONTEXT_ALREADY_IN_USE: cudaError_enum = 216;
-pub const cudaError_enum_CUDA_ERROR_PEER_ACCESS_UNSUPPORTED: cudaError_enum = 217;
-pub const cudaError_enum_CUDA_ERROR_INVALID_PTX: cudaError_enum = 218;
-pub const cudaError_enum_CUDA_ERROR_INVALID_GRAPHICS_CONTEXT: cudaError_enum = 219;
-pub const cudaError_enum_CUDA_ERROR_NVLINK_UNCORRECTABLE: cudaError_enum = 220;
-pub const cudaError_enum_CUDA_ERROR_JIT_COMPILER_NOT_FOUND: cudaError_enum = 221;
-pub const cudaError_enum_CUDA_ERROR_UNSUPPORTED_PTX_VERSION: cudaError_enum = 222;
-pub const cudaError_enum_CUDA_ERROR_JIT_COMPILATION_DISABLED: cudaError_enum = 223;
-pub const cudaError_enum_CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY: cudaError_enum = 224;
-pub const cudaError_enum_CUDA_ERROR_UNSUPPORTED_DEVSIDE_SYNC: cudaError_enum = 225;
-pub const cudaError_enum_CUDA_ERROR_INVALID_SOURCE: cudaError_enum = 300;
-pub const cudaError_enum_CUDA_ERROR_FILE_NOT_FOUND: cudaError_enum = 301;
-pub const cudaError_enum_CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND: cudaError_enum = 302;
-pub const cudaError_enum_CUDA_ERROR_SHARED_OBJECT_INIT_FAILED: cudaError_enum = 303;
-pub const cudaError_enum_CUDA_ERROR_OPERATING_SYSTEM: cudaError_enum = 304;
-pub const cudaError_enum_CUDA_ERROR_INVALID_HANDLE: cudaError_enum = 400;
-pub const cudaError_enum_CUDA_ERROR_ILLEGAL_STATE: cudaError_enum = 401;
-pub const cudaError_enum_CUDA_ERROR_LOSSY_QUERY: cudaError_enum = 402;
-pub const cudaError_enum_CUDA_ERROR_NOT_FOUND: cudaError_enum = 500;
-pub const cudaError_enum_CUDA_ERROR_NOT_READY: cudaError_enum = 600;
-pub const cudaError_enum_CUDA_ERROR_ILLEGAL_ADDRESS: cudaError_enum = 700;
-pub const cudaError_enum_CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES: cudaError_enum = 701;
-pub const cudaError_enum_CUDA_ERROR_LAUNCH_TIMEOUT: cudaError_enum = 702;
-pub const cudaError_enum_CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING: cudaError_enum = 703;
-pub const cudaError_enum_CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED: cudaError_enum = 704;
-pub const cudaError_enum_CUDA_ERROR_PEER_ACCESS_NOT_ENABLED: cudaError_enum = 705;
-pub const cudaError_enum_CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE: cudaError_enum = 708;
-pub const cudaError_enum_CUDA_ERROR_CONTEXT_IS_DESTROYED: cudaError_enum = 709;
-pub const cudaError_enum_CUDA_ERROR_ASSERT: cudaError_enum = 710;
-pub const cudaError_enum_CUDA_ERROR_TOO_MANY_PEERS: cudaError_enum = 711;
-pub const cudaError_enum_CUDA_ERROR_HOST_MEMORY_ALREADY_REGISTERED: cudaError_enum = 712;
-pub const cudaError_enum_CUDA_ERROR_HOST_MEMORY_NOT_REGISTERED: cudaError_enum = 713;
-pub const cudaError_enum_CUDA_ERROR_HARDWARE_STACK_ERROR: cudaError_enum = 714;
-pub const cudaError_enum_CUDA_ERROR_ILLEGAL_INSTRUCTION: cudaError_enum = 715;
-pub const cudaError_enum_CUDA_ERROR_MISALIGNED_ADDRESS: cudaError_enum = 716;
-pub const cudaError_enum_CUDA_ERROR_INVALID_ADDRESS_SPACE: cudaError_enum = 717;
-pub const cudaError_enum_CUDA_ERROR_INVALID_PC: cudaError_enum = 718;
-pub const cudaError_enum_CUDA_ERROR_LAUNCH_FAILED: cudaError_enum = 719;
-pub const cudaError_enum_CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE: cudaError_enum = 720;
-pub const cudaError_enum_CUDA_ERROR_NOT_PERMITTED: cudaError_enum = 800;
-pub const cudaError_enum_CUDA_ERROR_NOT_SUPPORTED: cudaError_enum = 801;
-pub const cudaError_enum_CUDA_ERROR_SYSTEM_NOT_READY: cudaError_enum = 802;
-pub const cudaError_enum_CUDA_ERROR_SYSTEM_DRIVER_MISMATCH: cudaError_enum = 803;
-pub const cudaError_enum_CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE: cudaError_enum = 804;
-pub const cudaError_enum_CUDA_ERROR_MPS_CONNECTION_FAILED: cudaError_enum = 805;
-pub const cudaError_enum_CUDA_ERROR_MPS_RPC_FAILURE: cudaError_enum = 806;
-pub const cudaError_enum_CUDA_ERROR_MPS_SERVER_NOT_READY: cudaError_enum = 807;
-pub const cudaError_enum_CUDA_ERROR_MPS_MAX_CLIENTS_REACHED: cudaError_enum = 808;
-pub const cudaError_enum_CUDA_ERROR_MPS_MAX_CONNECTIONS_REACHED: cudaError_enum = 809;
-pub const cudaError_enum_CUDA_ERROR_MPS_CLIENT_TERMINATED: cudaError_enum = 810;
-pub const cudaError_enum_CUDA_ERROR_CDP_NOT_SUPPORTED: cudaError_enum = 811;
-pub const cudaError_enum_CUDA_ERROR_CDP_VERSION_MISMATCH: cudaError_enum = 812;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_UNSUPPORTED: cudaError_enum = 900;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_INVALIDATED: cudaError_enum = 901;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_MERGE: cudaError_enum = 902;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_UNMATCHED: cudaError_enum = 903;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_UNJOINED: cudaError_enum = 904;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_ISOLATION: cudaError_enum = 905;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_IMPLICIT: cudaError_enum = 906;
-pub const cudaError_enum_CUDA_ERROR_CAPTURED_EVENT: cudaError_enum = 907;
-pub const cudaError_enum_CUDA_ERROR_STREAM_CAPTURE_WRONG_THREAD: cudaError_enum = 908;
-pub const cudaError_enum_CUDA_ERROR_TIMEOUT: cudaError_enum = 909;
-pub const cudaError_enum_CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE: cudaError_enum = 910;
-pub const cudaError_enum_CUDA_ERROR_EXTERNAL_DEVICE: cudaError_enum = 911;
-pub const cudaError_enum_CUDA_ERROR_INVALID_CLUSTER_SIZE: cudaError_enum = 912;
-pub const cudaError_enum_CUDA_ERROR_FUNCTION_NOT_LOADED: cudaError_enum = 913;
-pub const cudaError_enum_CUDA_ERROR_INVALID_RESOURCE_TYPE: cudaError_enum = 914;
-pub const cudaError_enum_CUDA_ERROR_INVALID_RESOURCE_CONFIGURATION: cudaError_enum = 915;
-pub const cudaError_enum_CUDA_ERROR_UNKNOWN: cudaError_enum = 999;
-#[must_use]
-pub type cudaError_enum = ::std::os::raw::c_uint;
-pub use self::cudaError_enum as CUresult;
-impl CUdevice_P2PAttribute_enum {
- pub const CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: CUdevice_P2PAttribute_enum =
- CUdevice_P2PAttribute_enum(1);
-}
-impl CUdevice_P2PAttribute_enum {
- pub const CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED: CUdevice_P2PAttribute_enum =
- CUdevice_P2PAttribute_enum(2);
-}
-impl CUdevice_P2PAttribute_enum {
- pub const CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: CUdevice_P2PAttribute_enum =
- CUdevice_P2PAttribute_enum(3);
-}
-impl CUdevice_P2PAttribute_enum {
- pub const CU_DEVICE_P2P_ATTRIBUTE_ACCESS_ACCESS_SUPPORTED: CUdevice_P2PAttribute_enum =
- CUdevice_P2PAttribute_enum(4);
-}
-impl CUdevice_P2PAttribute_enum {
- pub const CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED: CUdevice_P2PAttribute_enum =
- CUdevice_P2PAttribute_enum(4);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdevice_P2PAttribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUdevice_P2PAttribute_enum as CUdevice_P2PAttribute;
-pub type CUstreamCallback = ::std::option::Option<
- unsafe extern "C" fn(
- hStream: CUstream,
- status: CUresult,
- userData: *mut ::std::os::raw::c_void,
- ),
->;
-pub type CUoccupancyB2DSize =
- ::std::option::Option<unsafe extern "C" fn(blockSize: ::std::os::raw::c_int) -> usize>;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY2D_st {
- pub srcXInBytes: usize,
- pub srcY: usize,
- pub srcMemoryType: CUmemorytype,
- pub srcHost: *const ::std::os::raw::c_void,
- pub srcDevice: CUdeviceptr,
- pub srcArray: CUarray,
- pub srcPitch: usize,
- pub dstXInBytes: usize,
- pub dstY: usize,
- pub dstMemoryType: CUmemorytype,
- pub dstHost: *mut ::std::os::raw::c_void,
- pub dstDevice: CUdeviceptr,
- pub dstArray: CUarray,
- pub dstPitch: usize,
- pub WidthInBytes: usize,
- pub Height: usize,
-}
-pub type CUDA_MEMCPY2D_v2 = CUDA_MEMCPY2D_st;
-pub type CUDA_MEMCPY2D = CUDA_MEMCPY2D_v2;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY3D_st {
- pub srcXInBytes: usize,
- pub srcY: usize,
- pub srcZ: usize,
- pub srcLOD: usize,
- pub srcMemoryType: CUmemorytype,
- pub srcHost: *const ::std::os::raw::c_void,
- pub srcDevice: CUdeviceptr,
- pub srcArray: CUarray,
- pub reserved0: *mut ::std::os::raw::c_void,
- pub srcPitch: usize,
- pub srcHeight: usize,
- pub dstXInBytes: usize,
- pub dstY: usize,
- pub dstZ: usize,
- pub dstLOD: usize,
- pub dstMemoryType: CUmemorytype,
- pub dstHost: *mut ::std::os::raw::c_void,
- pub dstDevice: CUdeviceptr,
- pub dstArray: CUarray,
- pub reserved1: *mut ::std::os::raw::c_void,
- pub dstPitch: usize,
- pub dstHeight: usize,
- pub WidthInBytes: usize,
- pub Height: usize,
- pub Depth: usize,
-}
-pub type CUDA_MEMCPY3D_v2 = CUDA_MEMCPY3D_st;
-pub type CUDA_MEMCPY3D = CUDA_MEMCPY3D_v2;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY3D_PEER_st {
- pub srcXInBytes: usize,
- pub srcY: usize,
- pub srcZ: usize,
- pub srcLOD: usize,
- pub srcMemoryType: CUmemorytype,
- pub srcHost: *const ::std::os::raw::c_void,
- pub srcDevice: CUdeviceptr,
- pub srcArray: CUarray,
- pub srcContext: CUcontext,
- pub srcPitch: usize,
- pub srcHeight: usize,
- pub dstXInBytes: usize,
- pub dstY: usize,
- pub dstZ: usize,
- pub dstLOD: usize,
- pub dstMemoryType: CUmemorytype,
- pub dstHost: *mut ::std::os::raw::c_void,
- pub dstDevice: CUdeviceptr,
- pub dstArray: CUarray,
- pub dstContext: CUcontext,
- pub dstPitch: usize,
- pub dstHeight: usize,
- pub WidthInBytes: usize,
- pub Height: usize,
- pub Depth: usize,
-}
-pub type CUDA_MEMCPY3D_PEER_v1 = CUDA_MEMCPY3D_PEER_st;
-pub type CUDA_MEMCPY3D_PEER = CUDA_MEMCPY3D_PEER_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY_NODE_PARAMS_st {
- pub flags: ::std::os::raw::c_int,
- pub reserved: ::std::os::raw::c_int,
- pub copyCtx: CUcontext,
- pub copyParams: CUDA_MEMCPY3D,
-}
-pub type CUDA_MEMCPY_NODE_PARAMS = CUDA_MEMCPY_NODE_PARAMS_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY_DESCRIPTOR_st {
- pub Width: usize,
- pub Height: usize,
- pub Format: CUarray_format,
- pub NumChannels: ::std::os::raw::c_uint,
-}
-pub type CUDA_ARRAY_DESCRIPTOR_v2 = CUDA_ARRAY_DESCRIPTOR_st;
-pub type CUDA_ARRAY_DESCRIPTOR = CUDA_ARRAY_DESCRIPTOR_v2;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY3D_DESCRIPTOR_st {
- pub Width: usize,
- pub Height: usize,
- pub Depth: usize,
- pub Format: CUarray_format,
- pub NumChannels: ::std::os::raw::c_uint,
- pub Flags: ::std::os::raw::c_uint,
-}
-pub type CUDA_ARRAY3D_DESCRIPTOR_v2 = CUDA_ARRAY3D_DESCRIPTOR_st;
-pub type CUDA_ARRAY3D_DESCRIPTOR = CUDA_ARRAY3D_DESCRIPTOR_v2;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY_SPARSE_PROPERTIES_st {
- pub tileExtent: CUDA_ARRAY_SPARSE_PROPERTIES_st__bindgen_ty_1,
- pub miptailFirstLevel: ::std::os::raw::c_uint,
- pub miptailSize: ::std::os::raw::c_ulonglong,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 4usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY_SPARSE_PROPERTIES_st__bindgen_ty_1 {
- pub width: ::std::os::raw::c_uint,
- pub height: ::std::os::raw::c_uint,
- pub depth: ::std::os::raw::c_uint,
-}
-pub type CUDA_ARRAY_SPARSE_PROPERTIES_v1 = CUDA_ARRAY_SPARSE_PROPERTIES_st;
-pub type CUDA_ARRAY_SPARSE_PROPERTIES = CUDA_ARRAY_SPARSE_PROPERTIES_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY_MEMORY_REQUIREMENTS_st {
- pub size: usize,
- pub alignment: usize,
- pub reserved: [::std::os::raw::c_uint; 4usize],
-}
-pub type CUDA_ARRAY_MEMORY_REQUIREMENTS_v1 = CUDA_ARRAY_MEMORY_REQUIREMENTS_st;
-pub type CUDA_ARRAY_MEMORY_REQUIREMENTS = CUDA_ARRAY_MEMORY_REQUIREMENTS_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_RESOURCE_DESC_st {
- pub resType: CUresourcetype,
- pub res: CUDA_RESOURCE_DESC_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUDA_RESOURCE_DESC_st__bindgen_ty_1 {
- pub array: CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_1,
- pub mipmap: CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_2,
- pub linear: CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_3,
- pub pitch2D: CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_4,
- pub reserved: CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_5,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_1 {
- pub hArray: CUarray,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_2 {
- pub hMipmappedArray: CUmipmappedArray,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_3 {
- pub devPtr: CUdeviceptr,
- pub format: CUarray_format,
- pub numChannels: ::std::os::raw::c_uint,
- pub sizeInBytes: usize,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_4 {
- pub devPtr: CUdeviceptr,
- pub format: CUarray_format,
- pub numChannels: ::std::os::raw::c_uint,
- pub width: usize,
- pub height: usize,
- pub pitchInBytes: usize,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_DESC_st__bindgen_ty_1__bindgen_ty_5 {
- pub reserved: [::std::os::raw::c_int; 32usize],
-}
-pub type CUDA_RESOURCE_DESC_v1 = CUDA_RESOURCE_DESC_st;
-pub type CUDA_RESOURCE_DESC = CUDA_RESOURCE_DESC_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq)]
-pub struct CUDA_TEXTURE_DESC_st {
- pub addressMode: [CUaddress_mode; 3usize],
- pub filterMode: CUfilter_mode,
- pub flags: ::std::os::raw::c_uint,
- pub maxAnisotropy: ::std::os::raw::c_uint,
- pub mipmapFilterMode: CUfilter_mode,
- pub mipmapLevelBias: f32,
- pub minMipmapLevelClamp: f32,
- pub maxMipmapLevelClamp: f32,
- pub borderColor: [f32; 4usize],
- pub reserved: [::std::os::raw::c_int; 12usize],
-}
-pub type CUDA_TEXTURE_DESC_v1 = CUDA_TEXTURE_DESC_st;
-pub type CUDA_TEXTURE_DESC = CUDA_TEXTURE_DESC_v1;
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_NONE: CUresourceViewFormat_enum = CUresourceViewFormat_enum(0);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_1X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(1);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_2X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(2);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_4X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(3);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_1X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(4);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_2X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(5);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_4X8: CUresourceViewFormat_enum = CUresourceViewFormat_enum(6);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_1X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(7);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_2X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(8);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_4X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(9);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_1X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(10);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_2X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(11);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_4X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(12);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_1X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(13);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_2X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(14);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UINT_4X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(15);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_1X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(16);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_2X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(17);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SINT_4X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(18);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_1X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(19);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_2X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(20);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_4X16: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(21);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_1X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(22);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_2X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(23);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_FLOAT_4X32: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(24);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC1: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(25);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC2: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(26);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC3: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(27);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC4: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(28);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SIGNED_BC4: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(29);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC5: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(30);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SIGNED_BC5: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(31);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC6H: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(32);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_SIGNED_BC6H: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(33);
-}
-impl CUresourceViewFormat_enum {
- pub const CU_RES_VIEW_FORMAT_UNSIGNED_BC7: CUresourceViewFormat_enum =
- CUresourceViewFormat_enum(34);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUresourceViewFormat_enum(pub ::std::os::raw::c_uint);
-pub use self::CUresourceViewFormat_enum as CUresourceViewFormat;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_RESOURCE_VIEW_DESC_st {
- pub format: CUresourceViewFormat,
- pub width: usize,
- pub height: usize,
- pub depth: usize,
- pub firstMipmapLevel: ::std::os::raw::c_uint,
- pub lastMipmapLevel: ::std::os::raw::c_uint,
- pub firstLayer: ::std::os::raw::c_uint,
- pub lastLayer: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-pub type CUDA_RESOURCE_VIEW_DESC_v1 = CUDA_RESOURCE_VIEW_DESC_st;
-pub type CUDA_RESOURCE_VIEW_DESC = CUDA_RESOURCE_VIEW_DESC_v1;
-#[repr(C)]
-#[repr(align(64))]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUtensorMap_st {
- pub opaque: [cuuint64_t; 16usize],
-}
-pub type CUtensorMap = CUtensorMap_st;
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_UINT8: CUtensorMapDataType_enum = CUtensorMapDataType_enum(0);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_UINT16: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(1);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_UINT32: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(2);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_INT32: CUtensorMapDataType_enum = CUtensorMapDataType_enum(3);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_UINT64: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(4);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_INT64: CUtensorMapDataType_enum = CUtensorMapDataType_enum(5);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_FLOAT16: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(6);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_FLOAT32: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(7);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_FLOAT64: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(8);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_BFLOAT16: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(9);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_FLOAT32_FTZ: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(10);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_TFLOAT32: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(11);
-}
-impl CUtensorMapDataType_enum {
- pub const CU_TENSOR_MAP_DATA_TYPE_TFLOAT32_FTZ: CUtensorMapDataType_enum =
- CUtensorMapDataType_enum(12);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUtensorMapDataType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUtensorMapDataType_enum as CUtensorMapDataType;
-impl CUtensorMapInterleave_enum {
- pub const CU_TENSOR_MAP_INTERLEAVE_NONE: CUtensorMapInterleave_enum =
- CUtensorMapInterleave_enum(0);
-}
-impl CUtensorMapInterleave_enum {
- pub const CU_TENSOR_MAP_INTERLEAVE_16B: CUtensorMapInterleave_enum =
- CUtensorMapInterleave_enum(1);
-}
-impl CUtensorMapInterleave_enum {
- pub const CU_TENSOR_MAP_INTERLEAVE_32B: CUtensorMapInterleave_enum =
- CUtensorMapInterleave_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUtensorMapInterleave_enum(pub ::std::os::raw::c_uint);
-pub use self::CUtensorMapInterleave_enum as CUtensorMapInterleave;
-impl CUtensorMapSwizzle_enum {
- pub const CU_TENSOR_MAP_SWIZZLE_NONE: CUtensorMapSwizzle_enum = CUtensorMapSwizzle_enum(0);
-}
-impl CUtensorMapSwizzle_enum {
- pub const CU_TENSOR_MAP_SWIZZLE_32B: CUtensorMapSwizzle_enum = CUtensorMapSwizzle_enum(1);
-}
-impl CUtensorMapSwizzle_enum {
- pub const CU_TENSOR_MAP_SWIZZLE_64B: CUtensorMapSwizzle_enum = CUtensorMapSwizzle_enum(2);
-}
-impl CUtensorMapSwizzle_enum {
- pub const CU_TENSOR_MAP_SWIZZLE_128B: CUtensorMapSwizzle_enum = CUtensorMapSwizzle_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUtensorMapSwizzle_enum(pub ::std::os::raw::c_uint);
-pub use self::CUtensorMapSwizzle_enum as CUtensorMapSwizzle;
-impl CUtensorMapL2promotion_enum {
- pub const CU_TENSOR_MAP_L2_PROMOTION_NONE: CUtensorMapL2promotion_enum =
- CUtensorMapL2promotion_enum(0);
-}
-impl CUtensorMapL2promotion_enum {
- pub const CU_TENSOR_MAP_L2_PROMOTION_L2_64B: CUtensorMapL2promotion_enum =
- CUtensorMapL2promotion_enum(1);
-}
-impl CUtensorMapL2promotion_enum {
- pub const CU_TENSOR_MAP_L2_PROMOTION_L2_128B: CUtensorMapL2promotion_enum =
- CUtensorMapL2promotion_enum(2);
-}
-impl CUtensorMapL2promotion_enum {
- pub const CU_TENSOR_MAP_L2_PROMOTION_L2_256B: CUtensorMapL2promotion_enum =
- CUtensorMapL2promotion_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUtensorMapL2promotion_enum(pub ::std::os::raw::c_uint);
-pub use self::CUtensorMapL2promotion_enum as CUtensorMapL2promotion;
-impl CUtensorMapFloatOOBfill_enum {
- pub const CU_TENSOR_MAP_FLOAT_OOB_FILL_NONE: CUtensorMapFloatOOBfill_enum =
- CUtensorMapFloatOOBfill_enum(0);
-}
-impl CUtensorMapFloatOOBfill_enum {
- pub const CU_TENSOR_MAP_FLOAT_OOB_FILL_NAN_REQUEST_ZERO_FMA: CUtensorMapFloatOOBfill_enum =
- CUtensorMapFloatOOBfill_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUtensorMapFloatOOBfill_enum(pub ::std::os::raw::c_uint);
-pub use self::CUtensorMapFloatOOBfill_enum as CUtensorMapFloatOOBfill;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_st {
- pub p2pToken: ::std::os::raw::c_ulonglong,
- pub vaSpaceToken: ::std::os::raw::c_uint,
-}
-pub type CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_v1 = CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_st;
-pub type CUDA_POINTER_ATTRIBUTE_P2P_TOKENS = CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_v1;
-impl CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum {
- pub const CU_POINTER_ATTRIBUTE_ACCESS_FLAG_NONE: CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum =
- CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum(0);
-}
-impl CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum {
- pub const CU_POINTER_ATTRIBUTE_ACCESS_FLAG_READ: CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum =
- CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum(1);
-}
-impl CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum {
- pub const CU_POINTER_ATTRIBUTE_ACCESS_FLAG_READWRITE: CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum =
- CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum(pub ::std::os::raw::c_uint);
-pub use self::CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum as CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_LAUNCH_PARAMS_st {
- pub function: CUfunction,
- pub gridDimX: ::std::os::raw::c_uint,
- pub gridDimY: ::std::os::raw::c_uint,
- pub gridDimZ: ::std::os::raw::c_uint,
- pub blockDimX: ::std::os::raw::c_uint,
- pub blockDimY: ::std::os::raw::c_uint,
- pub blockDimZ: ::std::os::raw::c_uint,
- pub sharedMemBytes: ::std::os::raw::c_uint,
- pub hStream: CUstream,
- pub kernelParams: *mut *mut ::std::os::raw::c_void,
-}
-pub type CUDA_LAUNCH_PARAMS_v1 = CUDA_LAUNCH_PARAMS_st;
-pub type CUDA_LAUNCH_PARAMS = CUDA_LAUNCH_PARAMS_v1;
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(1);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(2);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(3);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(4);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(5);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(6);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(7);
-}
-impl CUexternalMemoryHandleType_enum {
- pub const CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF: CUexternalMemoryHandleType_enum =
- CUexternalMemoryHandleType_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUexternalMemoryHandleType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUexternalMemoryHandleType_enum as CUexternalMemoryHandleType;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st {
- pub type_: CUexternalMemoryHandleType,
- pub handle: CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st__bindgen_ty_1,
- pub size: ::std::os::raw::c_ulonglong,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st__bindgen_ty_1 {
- pub fd: ::std::os::raw::c_int,
- pub win32: CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st__bindgen_ty_1__bindgen_ty_1,
- pub nvSciBufObject: *const ::std::os::raw::c_void,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st__bindgen_ty_1__bindgen_ty_1 {
- pub handle: *mut ::std::os::raw::c_void,
- pub name: *const ::std::os::raw::c_void,
-}
-pub type CUDA_EXTERNAL_MEMORY_HANDLE_DESC_v1 = CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st;
-pub type CUDA_EXTERNAL_MEMORY_HANDLE_DESC = CUDA_EXTERNAL_MEMORY_HANDLE_DESC_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_MEMORY_BUFFER_DESC_st {
- pub offset: ::std::os::raw::c_ulonglong,
- pub size: ::std::os::raw::c_ulonglong,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-pub type CUDA_EXTERNAL_MEMORY_BUFFER_DESC_v1 = CUDA_EXTERNAL_MEMORY_BUFFER_DESC_st;
-pub type CUDA_EXTERNAL_MEMORY_BUFFER_DESC = CUDA_EXTERNAL_MEMORY_BUFFER_DESC_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st {
- pub offset: ::std::os::raw::c_ulonglong,
- pub arrayDesc: CUDA_ARRAY3D_DESCRIPTOR,
- pub numLevels: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-pub type CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1 =
- CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st;
-pub type CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC = CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1;
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD: CUexternalSemaphoreHandleType_enum =
- CUexternalSemaphoreHandleType_enum(1);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32: CUexternalSemaphoreHandleType_enum =
- CUexternalSemaphoreHandleType_enum(2);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT:
- CUexternalSemaphoreHandleType_enum = CUexternalSemaphoreHandleType_enum(3);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE: CUexternalSemaphoreHandleType_enum =
- CUexternalSemaphoreHandleType_enum(4);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE: CUexternalSemaphoreHandleType_enum =
- CUexternalSemaphoreHandleType_enum(5);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC: CUexternalSemaphoreHandleType_enum =
- CUexternalSemaphoreHandleType_enum(6);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX:
- CUexternalSemaphoreHandleType_enum = CUexternalSemaphoreHandleType_enum(7);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT:
- CUexternalSemaphoreHandleType_enum = CUexternalSemaphoreHandleType_enum(8);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD:
- CUexternalSemaphoreHandleType_enum = CUexternalSemaphoreHandleType_enum(9);
-}
-impl CUexternalSemaphoreHandleType_enum {
- pub const CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32:
- CUexternalSemaphoreHandleType_enum = CUexternalSemaphoreHandleType_enum(10);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUexternalSemaphoreHandleType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUexternalSemaphoreHandleType_enum as CUexternalSemaphoreHandleType;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st {
- pub type_: CUexternalSemaphoreHandleType,
- pub handle: CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st__bindgen_ty_1 {
- pub fd: ::std::os::raw::c_int,
- pub win32: CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st__bindgen_ty_1__bindgen_ty_1,
- pub nvSciSyncObj: *const ::std::os::raw::c_void,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st__bindgen_ty_1__bindgen_ty_1 {
- pub handle: *mut ::std::os::raw::c_void,
- pub name: *const ::std::os::raw::c_void,
-}
-pub type CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1 = CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st;
-pub type CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC = CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st {
- pub params: CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1 {
- pub fence: CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_1,
- pub nvSciSync: CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_2,
- pub keyedMutex: CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_3,
- pub reserved: [::std::os::raw::c_uint; 12usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_1 {
- pub value: ::std::os::raw::c_ulonglong,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_2 {
- pub fence: *mut ::std::os::raw::c_void,
- pub reserved: ::std::os::raw::c_ulonglong,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st__bindgen_ty_1__bindgen_ty_3 {
- pub key: ::std::os::raw::c_ulonglong,
-}
-pub type CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1 = CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st;
-pub type CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS = CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st {
- pub params: CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 16usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1 {
- pub fence: CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_1,
- pub nvSciSync: CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_2,
- pub keyedMutex: CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_3,
- pub reserved: [::std::os::raw::c_uint; 10usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_1 {
- pub value: ::std::os::raw::c_ulonglong,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_2 {
- pub fence: *mut ::std::os::raw::c_void,
- pub reserved: ::std::os::raw::c_ulonglong,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st__bindgen_ty_1__bindgen_ty_3 {
- pub key: ::std::os::raw::c_ulonglong,
- pub timeoutMs: ::std::os::raw::c_uint,
-}
-pub type CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1 = CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st;
-pub type CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS = CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st {
- pub extSemArray: *mut CUexternalSemaphore,
- pub paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
- pub numExtSems: ::std::os::raw::c_uint,
-}
-pub type CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 = CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st;
-pub type CUDA_EXT_SEM_SIGNAL_NODE_PARAMS = CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st {
- pub extSemArray: *mut CUexternalSemaphore,
- pub paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
- pub numExtSems: ::std::os::raw::c_uint,
-}
-pub type CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2 = CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXT_SEM_WAIT_NODE_PARAMS_st {
- pub extSemArray: *mut CUexternalSemaphore,
- pub paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
- pub numExtSems: ::std::os::raw::c_uint,
-}
-pub type CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 = CUDA_EXT_SEM_WAIT_NODE_PARAMS_st;
-pub type CUDA_EXT_SEM_WAIT_NODE_PARAMS = CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st {
- pub extSemArray: *mut CUexternalSemaphore,
- pub paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
- pub numExtSems: ::std::os::raw::c_uint,
-}
-pub type CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2 = CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2_st;
-pub type CUmemGenericAllocationHandle_v1 = ::std::os::raw::c_ulonglong;
-pub type CUmemGenericAllocationHandle = CUmemGenericAllocationHandle_v1;
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_NONE: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(0);
-}
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(1);
-}
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_WIN32: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(2);
-}
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_WIN32_KMT: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(4);
-}
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_FABRIC: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(8);
-}
-impl CUmemAllocationHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_MAX: CUmemAllocationHandleType_enum =
- CUmemAllocationHandleType_enum(2147483647);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAllocationHandleType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAllocationHandleType_enum as CUmemAllocationHandleType;
-impl CUmemAccess_flags_enum {
- pub const CU_MEM_ACCESS_FLAGS_PROT_NONE: CUmemAccess_flags_enum = CUmemAccess_flags_enum(0);
-}
-impl CUmemAccess_flags_enum {
- pub const CU_MEM_ACCESS_FLAGS_PROT_READ: CUmemAccess_flags_enum = CUmemAccess_flags_enum(1);
-}
-impl CUmemAccess_flags_enum {
- pub const CU_MEM_ACCESS_FLAGS_PROT_READWRITE: CUmemAccess_flags_enum =
- CUmemAccess_flags_enum(3);
-}
-impl CUmemAccess_flags_enum {
- pub const CU_MEM_ACCESS_FLAGS_PROT_MAX: CUmemAccess_flags_enum =
- CUmemAccess_flags_enum(2147483647);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAccess_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAccess_flags_enum as CUmemAccess_flags;
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_INVALID: CUmemLocationType_enum = CUmemLocationType_enum(0);
-}
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_DEVICE: CUmemLocationType_enum = CUmemLocationType_enum(1);
-}
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_HOST: CUmemLocationType_enum = CUmemLocationType_enum(2);
-}
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_HOST_NUMA: CUmemLocationType_enum = CUmemLocationType_enum(3);
-}
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_HOST_NUMA_CURRENT: CUmemLocationType_enum =
- CUmemLocationType_enum(4);
-}
-impl CUmemLocationType_enum {
- pub const CU_MEM_LOCATION_TYPE_MAX: CUmemLocationType_enum = CUmemLocationType_enum(2147483647);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemLocationType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemLocationType_enum as CUmemLocationType;
-impl CUmemAllocationType_enum {
- pub const CU_MEM_ALLOCATION_TYPE_INVALID: CUmemAllocationType_enum =
- CUmemAllocationType_enum(0);
-}
-impl CUmemAllocationType_enum {
- pub const CU_MEM_ALLOCATION_TYPE_PINNED: CUmemAllocationType_enum = CUmemAllocationType_enum(1);
-}
-impl CUmemAllocationType_enum {
- pub const CU_MEM_ALLOCATION_TYPE_MAX: CUmemAllocationType_enum =
- CUmemAllocationType_enum(2147483647);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAllocationType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAllocationType_enum as CUmemAllocationType;
-impl CUmemAllocationGranularity_flags_enum {
- pub const CU_MEM_ALLOC_GRANULARITY_MINIMUM: CUmemAllocationGranularity_flags_enum =
- CUmemAllocationGranularity_flags_enum(0);
-}
-impl CUmemAllocationGranularity_flags_enum {
- pub const CU_MEM_ALLOC_GRANULARITY_RECOMMENDED: CUmemAllocationGranularity_flags_enum =
- CUmemAllocationGranularity_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAllocationGranularity_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAllocationGranularity_flags_enum as CUmemAllocationGranularity_flags;
-impl CUmemRangeHandleType_enum {
- pub const CU_MEM_RANGE_HANDLE_TYPE_DMA_BUF_FD: CUmemRangeHandleType_enum =
- CUmemRangeHandleType_enum(1);
-}
-impl CUmemRangeHandleType_enum {
- pub const CU_MEM_RANGE_HANDLE_TYPE_MAX: CUmemRangeHandleType_enum =
- CUmemRangeHandleType_enum(2147483647);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemRangeHandleType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemRangeHandleType_enum as CUmemRangeHandleType;
-impl CUarraySparseSubresourceType_enum {
- pub const CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL: CUarraySparseSubresourceType_enum =
- CUarraySparseSubresourceType_enum(0);
-}
-impl CUarraySparseSubresourceType_enum {
- pub const CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL: CUarraySparseSubresourceType_enum =
- CUarraySparseSubresourceType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUarraySparseSubresourceType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUarraySparseSubresourceType_enum as CUarraySparseSubresourceType;
-impl CUmemOperationType_enum {
- pub const CU_MEM_OPERATION_TYPE_MAP: CUmemOperationType_enum = CUmemOperationType_enum(1);
-}
-impl CUmemOperationType_enum {
- pub const CU_MEM_OPERATION_TYPE_UNMAP: CUmemOperationType_enum = CUmemOperationType_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemOperationType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemOperationType_enum as CUmemOperationType;
-impl CUmemHandleType_enum {
- pub const CU_MEM_HANDLE_TYPE_GENERIC: CUmemHandleType_enum = CUmemHandleType_enum(0);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemHandleType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemHandleType_enum as CUmemHandleType;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUarrayMapInfo_st {
- pub resourceType: CUresourcetype,
- pub resource: CUarrayMapInfo_st__bindgen_ty_1,
- pub subresourceType: CUarraySparseSubresourceType,
- pub subresource: CUarrayMapInfo_st__bindgen_ty_2,
- pub memOperationType: CUmemOperationType,
- pub memHandleType: CUmemHandleType,
- pub memHandle: CUarrayMapInfo_st__bindgen_ty_3,
- pub offset: ::std::os::raw::c_ulonglong,
- pub deviceBitMask: ::std::os::raw::c_uint,
- pub flags: ::std::os::raw::c_uint,
- pub reserved: [::std::os::raw::c_uint; 2usize],
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUarrayMapInfo_st__bindgen_ty_1 {
- pub mipmap: CUmipmappedArray,
- pub array: CUarray,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUarrayMapInfo_st__bindgen_ty_2 {
- pub sparseLevel: CUarrayMapInfo_st__bindgen_ty_2__bindgen_ty_1,
- pub miptail: CUarrayMapInfo_st__bindgen_ty_2__bindgen_ty_2,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUarrayMapInfo_st__bindgen_ty_2__bindgen_ty_1 {
- pub level: ::std::os::raw::c_uint,
- pub layer: ::std::os::raw::c_uint,
- pub offsetX: ::std::os::raw::c_uint,
- pub offsetY: ::std::os::raw::c_uint,
- pub offsetZ: ::std::os::raw::c_uint,
- pub extentWidth: ::std::os::raw::c_uint,
- pub extentHeight: ::std::os::raw::c_uint,
- pub extentDepth: ::std::os::raw::c_uint,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUarrayMapInfo_st__bindgen_ty_2__bindgen_ty_2 {
- pub layer: ::std::os::raw::c_uint,
- pub offset: ::std::os::raw::c_ulonglong,
- pub size: ::std::os::raw::c_ulonglong,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUarrayMapInfo_st__bindgen_ty_3 {
- pub memHandle: CUmemGenericAllocationHandle,
-}
-pub type CUarrayMapInfo_v1 = CUarrayMapInfo_st;
-pub type CUarrayMapInfo = CUarrayMapInfo_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemLocation_st {
- pub type_: CUmemLocationType,
- pub id: ::std::os::raw::c_int,
-}
-pub type CUmemLocation_v1 = CUmemLocation_st;
-pub type CUmemLocation = CUmemLocation_v1;
-impl CUmemAllocationCompType_enum {
- pub const CU_MEM_ALLOCATION_COMP_NONE: CUmemAllocationCompType_enum =
- CUmemAllocationCompType_enum(0);
-}
-impl CUmemAllocationCompType_enum {
- pub const CU_MEM_ALLOCATION_COMP_GENERIC: CUmemAllocationCompType_enum =
- CUmemAllocationCompType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemAllocationCompType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemAllocationCompType_enum as CUmemAllocationCompType;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemAllocationProp_st {
- pub type_: CUmemAllocationType,
- pub requestedHandleTypes: CUmemAllocationHandleType,
- pub location: CUmemLocation,
- pub win32HandleMetaData: *mut ::std::os::raw::c_void,
- pub allocFlags: CUmemAllocationProp_st__bindgen_ty_1,
-}
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemAllocationProp_st__bindgen_ty_1 {
- pub compressionType: ::std::os::raw::c_uchar,
- pub gpuDirectRDMACapable: ::std::os::raw::c_uchar,
- pub usage: ::std::os::raw::c_ushort,
- pub reserved: [::std::os::raw::c_uchar; 4usize],
-}
-pub type CUmemAllocationProp_v1 = CUmemAllocationProp_st;
-pub type CUmemAllocationProp = CUmemAllocationProp_v1;
-impl CUmulticastGranularity_flags_enum {
- pub const CU_MULTICAST_GRANULARITY_MINIMUM: CUmulticastGranularity_flags_enum =
- CUmulticastGranularity_flags_enum(0);
-}
-impl CUmulticastGranularity_flags_enum {
- pub const CU_MULTICAST_GRANULARITY_RECOMMENDED: CUmulticastGranularity_flags_enum =
- CUmulticastGranularity_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmulticastGranularity_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmulticastGranularity_flags_enum as CUmulticastGranularity_flags;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmulticastObjectProp_st {
- pub numDevices: ::std::os::raw::c_uint,
- pub size: usize,
- pub handleTypes: ::std::os::raw::c_ulonglong,
- pub flags: ::std::os::raw::c_ulonglong,
-}
-pub type CUmulticastObjectProp_v1 = CUmulticastObjectProp_st;
-pub type CUmulticastObjectProp = CUmulticastObjectProp_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemAccessDesc_st {
- pub location: CUmemLocation,
- pub flags: CUmemAccess_flags,
-}
-pub type CUmemAccessDesc_v1 = CUmemAccessDesc_st;
-pub type CUmemAccessDesc = CUmemAccessDesc_v1;
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_SUCCESS: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(0);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(1);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(2);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(3);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_FUNCTION_CHANGED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(4);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(5);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(6);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(7);
-}
-impl CUgraphExecUpdateResult_enum {
- pub const CU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED: CUgraphExecUpdateResult_enum =
- CUgraphExecUpdateResult_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphExecUpdateResult_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphExecUpdateResult_enum as CUgraphExecUpdateResult;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUgraphExecUpdateResultInfo_st {
- pub result: CUgraphExecUpdateResult,
- pub errorNode: CUgraphNode,
- pub errorFromNode: CUgraphNode,
-}
-pub type CUgraphExecUpdateResultInfo_v1 = CUgraphExecUpdateResultInfo_st;
-pub type CUgraphExecUpdateResultInfo = CUgraphExecUpdateResultInfo_v1;
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(1);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(2);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(3);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_RELEASE_THRESHOLD: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(4);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_RESERVED_MEM_CURRENT: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(5);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(6);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_USED_MEM_CURRENT: CUmemPool_attribute_enum =
- CUmemPool_attribute_enum(7);
-}
-impl CUmemPool_attribute_enum {
- pub const CU_MEMPOOL_ATTR_USED_MEM_HIGH: CUmemPool_attribute_enum = CUmemPool_attribute_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmemPool_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmemPool_attribute_enum as CUmemPool_attribute;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemPoolProps_st {
- pub allocType: CUmemAllocationType,
- pub handleTypes: CUmemAllocationHandleType,
- pub location: CUmemLocation,
- pub win32SecurityAttributes: *mut ::std::os::raw::c_void,
- pub maxSize: usize,
- pub reserved: [::std::os::raw::c_uchar; 56usize],
-}
-pub type CUmemPoolProps_v1 = CUmemPoolProps_st;
-pub type CUmemPoolProps = CUmemPoolProps_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUmemPoolPtrExportData_st {
- pub reserved: [::std::os::raw::c_uchar; 64usize],
-}
-pub type CUmemPoolPtrExportData_v1 = CUmemPoolPtrExportData_st;
-pub type CUmemPoolPtrExportData = CUmemPoolPtrExportData_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEM_ALLOC_NODE_PARAMS_v1_st {
- pub poolProps: CUmemPoolProps,
- pub accessDescs: *const CUmemAccessDesc,
- pub accessDescCount: usize,
- pub bytesize: usize,
- pub dptr: CUdeviceptr,
-}
-pub type CUDA_MEM_ALLOC_NODE_PARAMS_v1 = CUDA_MEM_ALLOC_NODE_PARAMS_v1_st;
-pub type CUDA_MEM_ALLOC_NODE_PARAMS = CUDA_MEM_ALLOC_NODE_PARAMS_v1;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEM_ALLOC_NODE_PARAMS_v2_st {
- pub poolProps: CUmemPoolProps,
- pub accessDescs: *const CUmemAccessDesc,
- pub accessDescCount: usize,
- pub bytesize: usize,
- pub dptr: CUdeviceptr,
-}
-pub type CUDA_MEM_ALLOC_NODE_PARAMS_v2 = CUDA_MEM_ALLOC_NODE_PARAMS_v2_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEM_FREE_NODE_PARAMS_st {
- pub dptr: CUdeviceptr,
-}
-pub type CUDA_MEM_FREE_NODE_PARAMS = CUDA_MEM_FREE_NODE_PARAMS_st;
-impl CUgraphMem_attribute_enum {
- pub const CU_GRAPH_MEM_ATTR_USED_MEM_CURRENT: CUgraphMem_attribute_enum =
- CUgraphMem_attribute_enum(0);
-}
-impl CUgraphMem_attribute_enum {
- pub const CU_GRAPH_MEM_ATTR_USED_MEM_HIGH: CUgraphMem_attribute_enum =
- CUgraphMem_attribute_enum(1);
-}
-impl CUgraphMem_attribute_enum {
- pub const CU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT: CUgraphMem_attribute_enum =
- CUgraphMem_attribute_enum(2);
-}
-impl CUgraphMem_attribute_enum {
- pub const CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH: CUgraphMem_attribute_enum =
- CUgraphMem_attribute_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphMem_attribute_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphMem_attribute_enum as CUgraphMem_attribute;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_CHILD_GRAPH_NODE_PARAMS_st {
- pub graph: CUgraph,
-}
-pub type CUDA_CHILD_GRAPH_NODE_PARAMS = CUDA_CHILD_GRAPH_NODE_PARAMS_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EVENT_RECORD_NODE_PARAMS_st {
- pub event: CUevent,
-}
-pub type CUDA_EVENT_RECORD_NODE_PARAMS = CUDA_EVENT_RECORD_NODE_PARAMS_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_EVENT_WAIT_NODE_PARAMS_st {
- pub event: CUevent,
-}
-pub type CUDA_EVENT_WAIT_NODE_PARAMS = CUDA_EVENT_WAIT_NODE_PARAMS_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgraphNodeParams_st {
- pub type_: CUgraphNodeType,
- pub reserved0: [::std::os::raw::c_int; 3usize],
- pub __bindgen_anon_1: CUgraphNodeParams_st__bindgen_ty_1,
- pub reserved2: ::std::os::raw::c_longlong,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUgraphNodeParams_st__bindgen_ty_1 {
- pub reserved1: [::std::os::raw::c_longlong; 29usize],
- pub kernel: CUDA_KERNEL_NODE_PARAMS_v3,
- pub memcpy: CUDA_MEMCPY_NODE_PARAMS,
- pub memset: CUDA_MEMSET_NODE_PARAMS_v2,
- pub host: CUDA_HOST_NODE_PARAMS_v2,
- pub graph: CUDA_CHILD_GRAPH_NODE_PARAMS,
- pub eventWait: CUDA_EVENT_WAIT_NODE_PARAMS,
- pub eventRecord: CUDA_EVENT_RECORD_NODE_PARAMS,
- pub extSemSignal: CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v2,
- pub extSemWait: CUDA_EXT_SEM_WAIT_NODE_PARAMS_v2,
- pub alloc: CUDA_MEM_ALLOC_NODE_PARAMS_v2,
- pub free: CUDA_MEM_FREE_NODE_PARAMS,
- pub memOp: CUDA_BATCH_MEM_OP_NODE_PARAMS_v2,
- pub conditional: CUDA_CONDITIONAL_NODE_PARAMS,
-}
-pub type CUgraphNodeParams = CUgraphNodeParams_st;
-impl CUflushGPUDirectRDMAWritesOptions_enum {
- pub const CU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_HOST: CUflushGPUDirectRDMAWritesOptions_enum =
- CUflushGPUDirectRDMAWritesOptions_enum(1);
-}
-impl CUflushGPUDirectRDMAWritesOptions_enum {
- pub const CU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_MEMOPS:
- CUflushGPUDirectRDMAWritesOptions_enum = CUflushGPUDirectRDMAWritesOptions_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUflushGPUDirectRDMAWritesOptions_enum(pub ::std::os::raw::c_uint);
-pub use self::CUflushGPUDirectRDMAWritesOptions_enum as CUflushGPUDirectRDMAWritesOptions;
-impl CUGPUDirectRDMAWritesOrdering_enum {
- pub const CU_GPU_DIRECT_RDMA_WRITES_ORDERING_NONE: CUGPUDirectRDMAWritesOrdering_enum =
- CUGPUDirectRDMAWritesOrdering_enum(0);
-}
-impl CUGPUDirectRDMAWritesOrdering_enum {
- pub const CU_GPU_DIRECT_RDMA_WRITES_ORDERING_OWNER: CUGPUDirectRDMAWritesOrdering_enum =
- CUGPUDirectRDMAWritesOrdering_enum(100);
-}
-impl CUGPUDirectRDMAWritesOrdering_enum {
- pub const CU_GPU_DIRECT_RDMA_WRITES_ORDERING_ALL_DEVICES: CUGPUDirectRDMAWritesOrdering_enum =
- CUGPUDirectRDMAWritesOrdering_enum(200);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUGPUDirectRDMAWritesOrdering_enum(pub ::std::os::raw::c_uint);
-pub use self::CUGPUDirectRDMAWritesOrdering_enum as CUGPUDirectRDMAWritesOrdering;
-impl CUflushGPUDirectRDMAWritesScope_enum {
- pub const CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_OWNER: CUflushGPUDirectRDMAWritesScope_enum =
- CUflushGPUDirectRDMAWritesScope_enum(100);
-}
-impl CUflushGPUDirectRDMAWritesScope_enum {
- pub const CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_ALL_DEVICES: CUflushGPUDirectRDMAWritesScope_enum =
- CUflushGPUDirectRDMAWritesScope_enum(200);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUflushGPUDirectRDMAWritesScope_enum(pub ::std::os::raw::c_uint);
-pub use self::CUflushGPUDirectRDMAWritesScope_enum as CUflushGPUDirectRDMAWritesScope;
-impl CUflushGPUDirectRDMAWritesTarget_enum {
- pub const CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TARGET_CURRENT_CTX:
- CUflushGPUDirectRDMAWritesTarget_enum = CUflushGPUDirectRDMAWritesTarget_enum(0);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUflushGPUDirectRDMAWritesTarget_enum(pub ::std::os::raw::c_uint);
-pub use self::CUflushGPUDirectRDMAWritesTarget_enum as CUflushGPUDirectRDMAWritesTarget;
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_VERBOSE: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(1);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_RUNTIME_TYPES: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(2);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(4);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_MEMCPY_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(8);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_MEMSET_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(16);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_HOST_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(32);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_EVENT_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(64);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_SIGNAL_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(128);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_WAIT_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(256);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_ATTRIBUTES: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(512);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_HANDLES: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(1024);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_MEM_ALLOC_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(2048);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_MEM_FREE_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(4096);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_BATCH_MEM_OP_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(8192);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_EXTRA_TOPO_INFO: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(16384);
-}
-impl CUgraphDebugDot_flags_enum {
- pub const CU_GRAPH_DEBUG_DOT_FLAGS_CONDITIONAL_NODE_PARAMS: CUgraphDebugDot_flags_enum =
- CUgraphDebugDot_flags_enum(32768);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphDebugDot_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphDebugDot_flags_enum as CUgraphDebugDot_flags;
-impl CUuserObject_flags_enum {
- pub const CU_USER_OBJECT_NO_DESTRUCTOR_SYNC: CUuserObject_flags_enum =
- CUuserObject_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUuserObject_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUuserObject_flags_enum as CUuserObject_flags;
-impl CUuserObjectRetain_flags_enum {
- pub const CU_GRAPH_USER_OBJECT_MOVE: CUuserObjectRetain_flags_enum =
- CUuserObjectRetain_flags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUuserObjectRetain_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUuserObjectRetain_flags_enum as CUuserObjectRetain_flags;
-impl CUgraphInstantiate_flags_enum {
- pub const CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH: CUgraphInstantiate_flags_enum =
- CUgraphInstantiate_flags_enum(1);
-}
-impl CUgraphInstantiate_flags_enum {
- pub const CUDA_GRAPH_INSTANTIATE_FLAG_UPLOAD: CUgraphInstantiate_flags_enum =
- CUgraphInstantiate_flags_enum(2);
-}
-impl CUgraphInstantiate_flags_enum {
- pub const CUDA_GRAPH_INSTANTIATE_FLAG_DEVICE_LAUNCH: CUgraphInstantiate_flags_enum =
- CUgraphInstantiate_flags_enum(4);
-}
-impl CUgraphInstantiate_flags_enum {
- pub const CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY: CUgraphInstantiate_flags_enum =
- CUgraphInstantiate_flags_enum(8);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgraphInstantiate_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUgraphInstantiate_flags_enum as CUgraphInstantiate_flags;
-impl CUdeviceNumaConfig_enum {
- pub const CU_DEVICE_NUMA_CONFIG_NONE: CUdeviceNumaConfig_enum = CUdeviceNumaConfig_enum(0);
-}
-impl CUdeviceNumaConfig_enum {
- pub const CU_DEVICE_NUMA_CONFIG_NUMA_NODE: CUdeviceNumaConfig_enum = CUdeviceNumaConfig_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdeviceNumaConfig_enum(pub ::std::os::raw::c_uint);
-pub use self::CUdeviceNumaConfig_enum as CUdeviceNumaConfig;
-extern "C" {
- pub fn cuGetErrorString(error: CUresult, pStr: *mut *const ::std::os::raw::c_char) -> CUresult;
-}
-extern "C" {
- pub fn cuGetErrorName(error: CUresult, pStr: *mut *const ::std::os::raw::c_char) -> CUresult;
-}
-extern "C" {
- pub fn cuInit(Flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuDriverGetVersion(driverVersion: *mut ::std::os::raw::c_int) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGet(device: *mut CUdevice, ordinal: ::std::os::raw::c_int) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetCount(count: *mut ::std::os::raw::c_int) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetName(
- name: *mut ::std::os::raw::c_char,
- len: ::std::os::raw::c_int,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetUuid(uuid: *mut CUuuid, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetUuid_v2(uuid: *mut CUuuid, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetLuid(
- luid: *mut ::std::os::raw::c_char,
- deviceNodeMask: *mut ::std::os::raw::c_uint,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceTotalMem_v2(bytes: *mut usize, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetTexture1DLinearMaxWidth(
+// Generated automatically by zluda_bindgen
+// DO NOT EDIT MANUALLY
+#![allow(warnings)]
+extern "system" {
+ /** \brief Gets the string description of an error code
+
+ Sets \p *pStr to the address of a NULL-terminated string description
+ of the error code \p error.
+ If the error code is not recognized, ::CUDA_ERROR_INVALID_VALUE
+ will be returned and \p *pStr will be set to the NULL address.
+
+ \param error - Error code to convert to string
+ \param pStr - Address of the string pointer.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::CUresult,
+ ::cudaGetErrorString*/
+ fn cuGetErrorString(
+ error: cuda_types::CUresult,
+ pStr: *mut *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the string representation of an error code enum name
+
+ Sets \p *pStr to the address of a NULL-terminated string representation
+ of the name of the enum error code \p error.
+ If the error code is not recognized, ::CUDA_ERROR_INVALID_VALUE
+ will be returned and \p *pStr will be set to the NULL address.
+
+ \param error - Error code to convert to string
+ \param pStr - Address of the string pointer.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::CUresult,
+ ::cudaGetErrorName*/
+ fn cuGetErrorName(
+ error: cuda_types::CUresult,
+ pStr: *mut *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Initialize the CUDA driver API
+ Initializes the driver API and must be called before any other function from
+ the driver API in the current process. Currently, the \p Flags parameter must be 0. If ::cuInit()
+ has not been called, any function from the driver API will return
+ ::CUDA_ERROR_NOT_INITIALIZED.
+
+ \param Flags - Initialization flag for CUDA.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_SYSTEM_DRIVER_MISMATCH,
+ ::CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE
+ \notefnerr*/
+ fn cuInit(Flags: ::core::ffi::c_uint) -> cuda_types::CUresult;
+ /** \brief Returns the latest CUDA version supported by driver
+
+ Returns in \p *driverVersion the version of CUDA supported by
+ the driver. The version is returned as
+ (1000 &times; major + 10 &times; minor). For example, CUDA 9.2
+ would be represented by 9020.
+
+ This function automatically returns ::CUDA_ERROR_INVALID_VALUE if
+ \p driverVersion is NULL.
+
+ \param driverVersion - Returns the CUDA driver version
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cudaDriverGetVersion,
+ ::cudaRuntimeGetVersion*/
+ fn cuDriverGetVersion(
+ driverVersion: *mut ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a handle to a compute device
+
+ Returns in \p *device a device handle given an ordinal in the range <b>[0,
+ ::cuDeviceGetCount()-1]</b>.
+
+ \param device - Returned device handle
+ \param ordinal - Device number to get handle for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGetLuid,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport*/
+ fn cuDeviceGet(
+ device: *mut cuda_types::CUdevice,
+ ordinal: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the number of compute-capable devices
+
+ Returns in \p *count the number of devices with compute capability greater
+ than or equal to 2.0 that are available for execution. If there is no such
+ device, ::cuDeviceGetCount() returns 0.
+
+ \param count - Returned number of compute-capable devices
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGetLuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaGetDeviceCount*/
+ fn cuDeviceGetCount(count: *mut ::core::ffi::c_int) -> cuda_types::CUresult;
+ /** \brief Returns an identifier string for the device
+
+ Returns an ASCII string identifying the device \p dev in the NULL-terminated
+ string pointed to by \p name. \p len specifies the maximum length of the
+ string that may be returned.
+
+ \param name - Returned identifier string for the device
+ \param len - Maximum length of string to store in \p name
+ \param dev - Device to get identifier string for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGetLuid,
+ ::cuDeviceGetCount,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaGetDeviceProperties*/
+ fn cuDeviceGetName(
+ name: *mut ::core::ffi::c_char,
+ len: ::core::ffi::c_int,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Return an UUID for the device
+
+ Note there is a later version of this API, ::cuDeviceGetUuid_v2. It will
+ supplant this version in 12.0, which is retained for minor version compatibility.
+
+ Returns 16-octets identifying the device \p dev in the structure
+ pointed by the \p uuid.
+
+ \param uuid - Returned UUID
+ \param dev - Device to get identifier string for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetUuid_v2
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetLuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaGetDeviceProperties*/
+ fn cuDeviceGetUuid(
+ uuid: *mut cuda_types::CUuuid,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Return an UUID for the device (11.4+)
+
+ Returns 16-octets identifying the device \p dev in the structure
+ pointed by the \p uuid. If the device is in MIG mode, returns its
+ MIG UUID which uniquely identifies the subscribed MIG compute instance.
+
+ \param uuid - Returned UUID
+ \param dev - Device to get identifier string for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetLuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cudaGetDeviceProperties*/
+ fn cuDeviceGetUuid_v2(
+ uuid: *mut cuda_types::CUuuid,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Return an LUID and device node mask for the device
+
+ Return identifying information (\p luid and \p deviceNodeMask) to allow
+ matching device with graphics APIs.
+
+ \param luid - Returned LUID
+ \param deviceNodeMask - Returned device node mask
+ \param dev - Device to get identifier string for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaGetDeviceProperties*/
+ fn cuDeviceGetLuid(
+ luid: *mut ::core::ffi::c_char,
+ deviceNodeMask: *mut ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the total amount of memory on the device
+
+ Returns in \p *bytes the total amount of memory available on the device
+ \p dev in bytes.
+
+ \param bytes - Returned memory available on device in bytes
+ \param dev - Device handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaMemGetInfo*/
+ fn cuDeviceTotalMem_v2(
+ bytes: *mut usize,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the maximum number of elements allocatable in a 1D linear texture for a given texture element size.
+
+ Returns in \p maxWidthInElements the maximum number of texture elements allocatable in a 1D linear texture
+ for given \p format and \p numChannels.
+
+ \param maxWidthInElements - Returned maximum number of texture elements allocatable for given \p format and \p numChannels.
+ \param format - Texture format.
+ \param numChannels - Number of channels per texture element.
+ \param dev - Device handle.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cudaMemGetInfo,
+ ::cuDeviceTotalMem*/
+ fn cuDeviceGetTexture1DLinearMaxWidth(
maxWidthInElements: *mut usize,
- format: CUarray_format,
- numChannels: ::std::os::raw::c_uint,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetAttribute(
- pi: *mut ::std::os::raw::c_int,
- attrib: CUdevice_attribute,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetNvSciSyncAttributes(
- nvSciSyncAttrList: *mut ::std::os::raw::c_void,
- dev: CUdevice,
- flags: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceSetMemPool(dev: CUdevice, pool: CUmemoryPool) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetMemPool(pool: *mut CUmemoryPool, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetDefaultMemPool(pool_out: *mut CUmemoryPool, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetExecAffinitySupport(
- pi: *mut ::std::os::raw::c_int,
- type_: CUexecAffinityType,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFlushGPUDirectRDMAWrites(
- target: CUflushGPUDirectRDMAWritesTarget,
- scope: CUflushGPUDirectRDMAWritesScope,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetProperties(prop: *mut CUdevprop, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceComputeCapability(
- major: *mut ::std::os::raw::c_int,
- minor: *mut ::std::os::raw::c_int,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxRetain(pctx: *mut CUcontext, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxRelease_v2(dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxSetFlags_v2(dev: CUdevice, flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxGetState(
- dev: CUdevice,
- flags: *mut ::std::os::raw::c_uint,
- active: *mut ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxReset_v2(dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxCreate_v2(
- pctx: *mut CUcontext,
- flags: ::std::os::raw::c_uint,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxCreate_v3(
- pctx: *mut CUcontext,
- paramsArray: *mut CUexecAffinityParam,
- numParams: ::std::os::raw::c_int,
- flags: ::std::os::raw::c_uint,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxDestroy_v2(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxPushCurrent_v2(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxPopCurrent_v2(pctx: *mut CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSetCurrent(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetCurrent(pctx: *mut CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetDevice(device: *mut CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetFlags(flags: *mut ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSetFlags(flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetId(ctx: CUcontext, ctxId: *mut ::std::os::raw::c_ulonglong) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSynchronize() -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSetLimit(limit: CUlimit, value: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetLimit(pvalue: *mut usize, limit: CUlimit) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetCacheConfig(pconfig: *mut CUfunc_cache) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSetCacheConfig(config: CUfunc_cache) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetApiVersion(ctx: CUcontext, version: *mut ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetStreamPriorityRange(
- leastPriority: *mut ::std::os::raw::c_int,
- greatestPriority: *mut ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxResetPersistingL2Cache() -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetExecAffinity(
- pExecAffinity: *mut CUexecAffinityParam,
- type_: CUexecAffinityType,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxAttach(pctx: *mut CUcontext, flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxDetach(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetSharedMemConfig(pConfig: *mut CUsharedconfig) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxSetSharedMemConfig(config: CUsharedconfig) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleLoad(module: *mut CUmodule, fname: *const ::std::os::raw::c_char) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleLoadData(
- module: *mut CUmodule,
- image: *const ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleLoadDataEx(
- module: *mut CUmodule,
- image: *const ::std::os::raw::c_void,
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleLoadFatBinary(
- module: *mut CUmodule,
- fatCubin: *const ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleUnload(hmod: CUmodule) -> CUresult;
-}
-impl CUmoduleLoadingMode_enum {
- pub const CU_MODULE_EAGER_LOADING: CUmoduleLoadingMode_enum = CUmoduleLoadingMode_enum(1);
-}
-impl CUmoduleLoadingMode_enum {
- pub const CU_MODULE_LAZY_LOADING: CUmoduleLoadingMode_enum = CUmoduleLoadingMode_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUmoduleLoadingMode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUmoduleLoadingMode_enum as CUmoduleLoadingMode;
-extern "C" {
- pub fn cuModuleGetLoadingMode(mode: *mut CUmoduleLoadingMode) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetFunction(
- hfunc: *mut CUfunction,
- hmod: CUmodule,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetFunctionCount(count: *mut ::std::os::raw::c_uint, mod_: CUmodule)
- -> CUresult;
-}
-extern "C" {
- pub fn cuModuleEnumerateFunctions(
- functions: *mut CUfunction,
- numFunctions: ::std::os::raw::c_uint,
- mod_: CUmodule,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetGlobal_v2(
- dptr: *mut CUdeviceptr,
+ format: cuda_types::CUarray_format,
+ numChannels: ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about the device
+
+ Returns in \p *pi the integer value of the attribute \p attrib on device
+ \p dev. The supported attributes are:
+ - ::CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK: Maximum number of threads per
+ block;
+ - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X: Maximum x-dimension of a block
+ - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y: Maximum y-dimension of a block
+ - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z: Maximum z-dimension of a block
+ - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X: Maximum x-dimension of a grid
+ - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y: Maximum y-dimension of a grid
+ - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z: Maximum z-dimension of a grid
+ - ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK: Maximum amount of
+ shared memory available to a thread block in bytes
+ - ::CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY: Memory available on device for
+ __constant__ variables in a CUDA C kernel in bytes
+ - ::CU_DEVICE_ATTRIBUTE_WARP_SIZE: Warp size in threads
+ - ::CU_DEVICE_ATTRIBUTE_MAX_PITCH: Maximum pitch in bytes allowed by the
+ memory copy functions that involve memory regions allocated through
+ ::cuMemAllocPitch()
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH: Maximum 1D
+ texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH: Maximum width
+ for a 1D texture bound to linear memory
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH: Maximum
+ mipmapped 1D texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH: Maximum 2D
+ texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT: Maximum 2D
+ texture height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH: Maximum width
+ for a 2D texture bound to linear memory
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT: Maximum height
+ for a 2D texture bound to linear memory
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH: Maximum pitch
+ in bytes for a 2D texture bound to linear memory
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH: Maximum
+ mipmapped 2D texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT: Maximum
+ mipmapped 2D texture height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH: Maximum 3D
+ texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT: Maximum 3D
+ texture height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH: Maximum 3D
+ texture depth
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE:
+ Alternate maximum 3D texture width, 0 if no alternate
+ maximum 3D texture size is supported
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE:
+ Alternate maximum 3D texture height, 0 if no alternate
+ maximum 3D texture size is supported
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE:
+ Alternate maximum 3D texture depth, 0 if no alternate
+ maximum 3D texture size is supported
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH:
+ Maximum cubemap texture width or height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH:
+ Maximum 1D layered texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS:
+ Maximum layers in a 1D layered texture
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH:
+ Maximum 2D layered texture width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT:
+ Maximum 2D layered texture height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS:
+ Maximum layers in a 2D layered texture
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH:
+ Maximum cubemap layered texture width or height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS:
+ Maximum layers in a cubemap layered texture
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH:
+ Maximum 1D surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH:
+ Maximum 2D surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT:
+ Maximum 2D surface height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH:
+ Maximum 3D surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT:
+ Maximum 3D surface height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH:
+ Maximum 3D surface depth
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH:
+ Maximum 1D layered surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS:
+ Maximum layers in a 1D layered surface
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH:
+ Maximum 2D layered surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT:
+ Maximum 2D layered surface height
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS:
+ Maximum layers in a 2D layered surface
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH:
+ Maximum cubemap surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH:
+ Maximum cubemap layered surface width
+ - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS:
+ Maximum layers in a cubemap layered surface
+ - ::CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK: Maximum number of 32-bit
+ registers available to a thread block
+ - ::CU_DEVICE_ATTRIBUTE_CLOCK_RATE: The typical clock frequency in kilohertz
+ - ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT: Alignment requirement; texture
+ base addresses aligned to ::textureAlign bytes do not need an offset
+ applied to texture fetches
+ - ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT: Pitch alignment requirement
+ for 2D texture references bound to pitched memory
+ - ::CU_DEVICE_ATTRIBUTE_GPU_OVERLAP: 1 if the device can concurrently copy
+ memory between host and device while executing a kernel, or 0 if not
+ - ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT: Number of multiprocessors on
+ the device
+ - ::CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT: 1 if there is a run time limit
+ for kernels executed on the device, or 0 if not
+ - ::CU_DEVICE_ATTRIBUTE_INTEGRATED: 1 if the device is integrated with the
+ memory subsystem, or 0 if not
+ - ::CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY: 1 if the device can map host
+ memory into the CUDA address space, or 0 if not
+ - ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE: Compute mode that device is currently
+ in. Available modes are as follows:
+ - ::CU_COMPUTEMODE_DEFAULT: Default mode - Device is not restricted and
+ can have multiple CUDA contexts present at a single time.
+ - ::CU_COMPUTEMODE_PROHIBITED: Compute-prohibited mode - Device is
+ prohibited from creating new CUDA contexts.
+ - ::CU_COMPUTEMODE_EXCLUSIVE_PROCESS: Compute-exclusive-process mode - Device
+ can have only one context used by a single process at a time.
+ - ::CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS: 1 if the device supports
+ executing multiple kernels within the same context simultaneously, or 0 if
+ not. It is not guaranteed that multiple kernels will be resident
+ on the device concurrently so this feature should not be relied upon for
+ correctness.
+ - ::CU_DEVICE_ATTRIBUTE_ECC_ENABLED: 1 if error correction is enabled on the
+ device, 0 if error correction is disabled or not supported by the device
+ - ::CU_DEVICE_ATTRIBUTE_PCI_BUS_ID: PCI bus identifier of the device
+ - ::CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID: PCI device (also known as slot) identifier
+ of the device
+ - ::CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID: PCI domain identifier of the device
+ - ::CU_DEVICE_ATTRIBUTE_TCC_DRIVER: 1 if the device is using a TCC driver. TCC
+ is only available on Tesla hardware running Windows Vista or later
+ - ::CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE: Peak memory clock frequency in kilohertz
+ - ::CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH: Global memory bus width in bits
+ - ::CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE: Size of L2 cache in bytes. 0 if the device doesn't have L2 cache
+ - ::CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR: Maximum resident threads per multiprocessor
+ - ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING: 1 if the device shares a unified address space with
+ the host, or 0 if not
+ - ::CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR: Major compute capability version number
+ - ::CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR: Minor compute capability version number
+ - ::CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED: 1 if device supports caching globals
+ in L1 cache, 0 if caching globals in L1 cache is not supported by the device
+ - ::CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED: 1 if device supports caching locals
+ in L1 cache, 0 if caching locals in L1 cache is not supported by the device
+ - ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR: Maximum amount of
+ shared memory available to a multiprocessor in bytes; this amount is shared
+ by all thread blocks simultaneously resident on a multiprocessor
+ - ::CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR: Maximum number of 32-bit
+ registers available to a multiprocessor; this number is shared by all thread
+ blocks simultaneously resident on a multiprocessor
+ - ::CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY: 1 if device supports allocating managed memory
+ on this system, 0 if allocating managed memory is not supported by the device on this system.
+ - ::CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD: 1 if device is on a multi-GPU board, 0 if not.
+ - ::CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID: Unique identifier for a group of devices
+ associated with the same board. Devices on the same multi-GPU board will share the same identifier.
+ - ::CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED: 1 if Link between the device and the host
+ supports native atomic operations.
+ - ::CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO: Ratio of single precision performance
+ (in floating-point operations per second) to double precision performance.
+ - ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS: Device supports coherently accessing
+ pageable memory without calling cudaHostRegister on it.
+ - ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS: Device can coherently access managed memory
+ concurrently with the CPU.
+ - ::CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED: Device supports Compute Preemption.
+ - ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM: Device can access host registered
+ memory at the same virtual address as the CPU.
+ - ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN: The maximum per block shared memory size
+ supported on this device. This is the maximum value that can be opted into when using the cuFuncSetAttribute() or cuKernelSetAttribute() call.
+ For more details see ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES
+ - ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES: Device accesses pageable memory via the host's
+ page tables.
+ - ::CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST: The host can directly access managed memory on the device without migration.
+ - ::CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED: Device supports virtual memory management APIs like ::cuMemAddressReserve, ::cuMemCreate, ::cuMemMap and related APIs
+ - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED: Device supports exporting memory to a posix file descriptor with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED: Device supports exporting memory to a Win32 NT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED: Device supports exporting memory to a Win32 KMT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR: Maximum number of thread blocks that can reside on a multiprocessor
+ - ::CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED: Device supports compressible memory allocation via ::cuMemCreate
+ - ::CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE: Maximum L2 persisting lines capacity setting in bytes
+ - ::CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE: Maximum value of CUaccessPolicyWindow::num_bytes
+ - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED: Device supports specifying the GPUDirect RDMA flag with ::cuMemCreate.
+ - ::CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK: Amount of shared memory per block reserved by CUDA driver in bytes
+ - ::CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.
+ - ::CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED: Device supports using the ::cuMemHostRegister flag ::CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU
+ - ::CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED: Device supports using the ::cuMemAllocAsync and ::cuMemPool family of APIs
+ - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)
+ - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the ::CUflushGPUDirectRDMAWritesOptions enum
+ - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING: 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.
+ - ::CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES: Bitmask of handle types supported with mempool based IPC
+ - ::CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.
+
+ \param pi - Returned device attribute value
+ \param attrib - Device attribute to query
+ \param dev - Device handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem,
+ ::cuDeviceGetExecAffinitySupport,
+ ::cudaDeviceGetAttribute,
+ ::cudaGetDeviceProperties*/
+ fn cuDeviceGetAttribute(
+ pi: *mut ::core::ffi::c_int,
+ attrib: cuda_types::CUdevice_attribute,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Return NvSciSync attributes that this device can support.
+
+ Returns in \p nvSciSyncAttrList, the properties of NvSciSync that
+ this CUDA device, \p dev can support. The returned \p nvSciSyncAttrList
+ can be used to create an NvSciSync object that matches this device's capabilities.
+
+ If NvSciSyncAttrKey_RequiredPerm field in \p nvSciSyncAttrList is
+ already set this API will return ::CUDA_ERROR_INVALID_VALUE.
+
+ The applications should set \p nvSciSyncAttrList to a valid
+ NvSciSyncAttrList failing which this API will return
+ ::CUDA_ERROR_INVALID_HANDLE.
+
+ The \p flags controls how applications intends to use
+ the NvSciSync created from the \p nvSciSyncAttrList. The valid flags are:
+ - ::CUDA_NVSCISYNC_ATTR_SIGNAL, specifies that the applications intends to
+ signal an NvSciSync on this CUDA device.
+ - ::CUDA_NVSCISYNC_ATTR_WAIT, specifies that the applications intends to
+ wait on an NvSciSync on this CUDA device.
+
+ At least one of these flags must be set, failing which the API
+ returns ::CUDA_ERROR_INVALID_VALUE. Both the flags are orthogonal
+ to one another: a developer may set both these flags that allows to
+ set both wait and signal specific attributes in the same \p nvSciSyncAttrList.
+
+ Note that this API updates the input \p nvSciSyncAttrList with values equivalent
+ to the following public attribute key-values:
+ NvSciSyncAttrKey_RequiredPerm is set to
+ - NvSciSyncAccessPerm_SignalOnly if ::CUDA_NVSCISYNC_ATTR_SIGNAL is set in \p flags.
+ - NvSciSyncAccessPerm_WaitOnly if ::CUDA_NVSCISYNC_ATTR_WAIT is set in \p flags.
+ - NvSciSyncAccessPerm_WaitSignal if both ::CUDA_NVSCISYNC_ATTR_WAIT and
+ ::CUDA_NVSCISYNC_ATTR_SIGNAL are set in \p flags.
+ NvSciSyncAttrKey_PrimitiveInfo is set to
+ - NvSciSyncAttrValPrimitiveType_SysmemSemaphore on any valid \p device.
+ - NvSciSyncAttrValPrimitiveType_Syncpoint if \p device is a Tegra device.
+ - NvSciSyncAttrValPrimitiveType_SysmemSemaphorePayload64b if \p device is GA10X+.
+ NvSciSyncAttrKey_GpuId is set to the same UUID that is returned for this
+ \p device from ::cuDeviceGetUuid.
+
+ \param nvSciSyncAttrList - Return NvSciSync attributes supported.
+ \param dev - Valid Cuda Device to get NvSciSync attributes for.
+ \param flags - flags describing NvSciSync usage.
+
+ \return
+
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa
+ ::cuImportExternalSemaphore,
+ ::cuDestroyExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuDeviceGetNvSciSyncAttributes(
+ nvSciSyncAttrList: *mut ::core::ffi::c_void,
+ dev: cuda_types::CUdevice,
+ flags: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the current memory pool of a device
+
+ The memory pool must be local to the specified device.
+ ::cuMemAllocAsync allocates from the current mempool of the provided stream's device.
+ By default, a device's current memory pool is its default memory pool.
+
+ \note Use ::cuMemAllocFromPoolAsync to specify asynchronous allocations from a device different
+ than the one the stream runs on.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate, ::cuMemPoolDestroy, ::cuMemAllocFromPoolAsync*/
+ fn cuDeviceSetMemPool(
+ dev: cuda_types::CUdevice,
+ pool: cuda_types::CUmemoryPool,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the current mempool for a device
+
+ Returns the last pool provided to ::cuDeviceSetMemPool for this device
+ or the device's default memory pool if ::cuDeviceSetMemPool has never been called.
+ By default the current mempool is the default mempool for a device.
+ Otherwise the returned pool must have been set with ::cuDeviceSetMemPool.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuDeviceGetDefaultMemPool, ::cuMemPoolCreate, ::cuDeviceSetMemPool*/
+ fn cuDeviceGetMemPool(
+ pool: *mut cuda_types::CUmemoryPool,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the default mempool of a device
+
+ The default mempool of a device contains device memory from that device.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuMemAllocAsync, ::cuMemPoolTrimTo, ::cuMemPoolGetAttribute, ::cuMemPoolSetAttribute, cuMemPoolSetAccess, ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuDeviceGetDefaultMemPool(
+ pool_out: *mut cuda_types::CUmemoryPool,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about the execution affinity support of the device.
+
+ Returns in \p *pi whether execution affinity type \p type is supported by device \p dev.
+ The supported types are:
+ - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT: 1 if context with limited SMs is supported by the device,
+ or 0 if not;
+
+ \param pi - 1 if the execution affinity type \p type is supported by the device, or 0 if not
+ \param type - Execution affinity type to query
+ \param dev - Device handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem*/
+ fn cuDeviceGetExecAffinitySupport(
+ pi: *mut ::core::ffi::c_int,
+ type_: cuda_types::CUexecAffinityType,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Blocks until remote writes are visible to the specified scope
+
+ Blocks until GPUDirect RDMA writes to the target context via mappings
+ created through APIs like nvidia_p2p_get_pages (see
+ https://docs.nvidia.com/cuda/gpudirect-rdma for more information), are
+ visible to the specified scope.
+
+ If the scope equals or lies within the scope indicated by
+ ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING, the call
+ will be a no-op and can be safely omitted for performance. This can be
+ determined by comparing the numerical values between the two enums, with
+ smaller scopes having smaller values.
+
+ Users may query support for this API via
+ ::CU_DEVICE_ATTRIBUTE_FLUSH_FLUSH_GPU_DIRECT_RDMA_OPTIONS.
+
+ \param target - The target of the operation, see ::CUflushGPUDirectRDMAWritesTarget
+ \param scope - The scope of the operation, see ::CUflushGPUDirectRDMAWritesScope
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+*/
+ fn cuFlushGPUDirectRDMAWrites(
+ target: cuda_types::CUflushGPUDirectRDMAWritesTarget,
+ scope: cuda_types::CUflushGPUDirectRDMAWritesScope,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns properties for a selected device
+
+ \deprecated
+
+ This function was deprecated as of CUDA 5.0 and replaced by ::cuDeviceGetAttribute().
+
+ Returns in \p *prop the properties of device \p dev. The ::CUdevprop
+ structure is defined as:
+
+ \code
+typedef struct CUdevprop_st {
+int maxThreadsPerBlock;
+int maxThreadsDim[3];
+int maxGridSize[3];
+int sharedMemPerBlock;
+int totalConstantMemory;
+int SIMDWidth;
+int memPitch;
+int regsPerBlock;
+int clockRate;
+int textureAlign
+} CUdevprop;
+ \endcode
+ where:
+
+ - ::maxThreadsPerBlock is the maximum number of threads per block;
+ - ::maxThreadsDim[3] is the maximum sizes of each dimension of a block;
+ - ::maxGridSize[3] is the maximum sizes of each dimension of a grid;
+ - ::sharedMemPerBlock is the total amount of shared memory available per
+ block in bytes;
+ - ::totalConstantMemory is the total amount of constant memory available on
+ the device in bytes;
+ - ::SIMDWidth is the warp size;
+ - ::memPitch is the maximum pitch allowed by the memory copy functions that
+ involve memory regions allocated through ::cuMemAllocPitch();
+ - ::regsPerBlock is the total number of registers available per block;
+ - ::clockRate is the clock frequency in kilohertz;
+ - ::textureAlign is the alignment requirement; texture base addresses that
+ are aligned to ::textureAlign bytes do not need an offset applied to
+ texture fetches.
+
+ \param prop - Returned properties of device
+ \param dev - Device to get properties for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem*/
+ fn cuDeviceGetProperties(
+ prop: *mut cuda_types::CUdevprop,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the compute capability of the device
+
+ \deprecated
+
+ This function was deprecated as of CUDA 5.0 and its functionality superseded
+ by ::cuDeviceGetAttribute().
+
+ Returns in \p *major and \p *minor the major and minor revision numbers that
+ define the compute capability of the device \p dev.
+
+ \param major - Major revision number
+ \param minor - Minor revision number
+ \param dev - Device handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetCount,
+ ::cuDeviceGetName,
+ ::cuDeviceGetUuid,
+ ::cuDeviceGet,
+ ::cuDeviceTotalMem*/
+ fn cuDeviceComputeCapability(
+ major: *mut ::core::ffi::c_int,
+ minor: *mut ::core::ffi::c_int,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Retain the primary context on the GPU
+
+ Retains the primary context on the device.
+ Once the user successfully retains the primary context, the primary context
+ will be active and available to the user until the user releases it
+ with ::cuDevicePrimaryCtxRelease() or resets it with ::cuDevicePrimaryCtxReset().
+ Unlike ::cuCtxCreate() the newly retained context is not pushed onto the stack.
+
+ Retaining the primary context for the first time will fail with ::CUDA_ERROR_UNKNOWN
+ if the compute mode of the device is ::CU_COMPUTEMODE_PROHIBITED. The function
+ ::cuDeviceGetAttribute() can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to
+ determine the compute mode of the device.
+ The <i>nvidia-smi</i> tool can be used to set the compute mode for
+ devices. Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ -h option to it.
+
+ Please note that the primary context always supports pinned allocations. Other
+ flags can be specified by ::cuDevicePrimaryCtxSetFlags().
+
+ \param pctx - Returned context handle of the new context
+ \param dev - Device for which primary context is requested
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuDevicePrimaryCtxRelease,
+ ::cuDevicePrimaryCtxSetFlags,
+ ::cuCtxCreate,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuDevicePrimaryCtxRetain(
+ pctx: *mut cuda_types::CUcontext,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Release the primary context on the GPU
+
+ Releases the primary context interop on the device.
+ A retained context should always be released once the user is done using
+ it. The context is automatically reset once the last reference to it is
+ released. This behavior is different when the primary context was retained
+ by the CUDA runtime from CUDA 4.0 and earlier. In this case, the primary
+ context remains always active.
+
+ Releasing a primary context that has not been previously retained will
+ fail with ::CUDA_ERROR_INVALID_CONTEXT.
+
+ Please note that unlike ::cuCtxDestroy() this method does not pop the context
+ from stack in any circumstances.
+
+ \param dev - Device which primary context is released
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuDevicePrimaryCtxRetain,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuDevicePrimaryCtxRelease_v2(dev: cuda_types::CUdevice) -> cuda_types::CUresult;
+ /** \brief Set flags for the primary context
+
+ Sets the flags for the primary context on the device overwriting perviously
+ set ones.
+
+ The three LSBs of the \p flags parameter can be used to control how the OS
+ thread, which owns the CUDA context at the time of an API call, interacts
+ with the OS scheduler when waiting for results from the GPU. Only one of
+ the scheduling flags can be set when creating a context.
+
+ - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ results from the GPU. This can decrease latency when waiting for the GPU,
+ but may lower the performance of CPU threads if they are performing work in
+ parallel with the CUDA thread.
+
+ - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ results from the GPU. This can increase latency when waiting for the GPU,
+ but can increase the performance of CPU threads performing work in parallel
+ with the GPU.
+
+ - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work.
+
+ - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work. <br>
+ <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+
+ - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ uses a heuristic based on the number of active CUDA contexts in the
+ process \e C and the number of logical processors in the system \e P. If
+ \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ for low-powered devices.
+
+ - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ after resizing local memory for a kernel. This can prevent thrashing by
+ local memory allocations when launching many kernels with high local
+ memory usage at the cost of potentially increased memory usage. <br>
+ <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ by this flag is now the default and cannot be disabled.
+
+ - ::CU_CTX_COREDUMP_ENABLE: If GPU coredumps have not been enabled globally
+ with ::cuCoredumpSetAttributeGlobal or environment variables, this flag can
+ be set during context creation to instruct CUDA to create a coredump if
+ this context raises an exception during execution. These environment variables
+ are described in the CUDA-GDB user guide under the "GPU core dump support"
+ section.
+ The initial settings will be taken from the global settings at the time of
+ context creation. The other settings that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+
+ - ::CU_CTX_USER_COREDUMP_ENABLE: If user-triggered GPU coredumps have not
+ been enabled globally with ::cuCoredumpSetAttributeGlobal or environment
+ variables, this flag can be set during context creation to instruct CUDA to
+ create a coredump if data is written to a certain pipe that is present in the
+ OS space. These environment variables are described in the CUDA-GDB user
+ guide under the "GPU core dump support" section.
+ It is important to note that the pipe name *must* be set with
+ ::cuCoredumpSetAttributeGlobal before creating the context if this flag is
+ used. Setting this flag implies that ::CU_CTX_COREDUMP_ENABLE is set.
+ The initial settings will be taken from the global settings at the time of
+ context creation. The other settings that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+
+ - ::CU_CTX_SYNC_MEMOPS: Ensures that synchronous memory operations initiated
+ on this context will always synchronize. See further documentation in the
+ section titled "API Synchronization behavior" to learn more about cases when
+ synchronous memory operations can exhibit asynchronous behavior.
+
+ \param dev - Device for which the primary context flags are set
+ \param flags - New flags for the device
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuDevicePrimaryCtxRetain,
+ ::cuDevicePrimaryCtxGetState,
+ ::cuCtxCreate,
+ ::cuCtxGetFlags,
+ ::cuCtxSetFlags,
+ ::cudaSetDeviceFlags*/
+ fn cuDevicePrimaryCtxSetFlags_v2(
+ dev: cuda_types::CUdevice,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Get the state of the primary context
+
+ Returns in \p *flags the flags for the primary context of \p dev, and in
+ \p *active whether it is active. See ::cuDevicePrimaryCtxSetFlags for flag
+ values.
+
+ \param dev - Device to get primary context flags for
+ \param flags - Pointer to store flags
+ \param active - Pointer to store context state; 0 = inactive, 1 = active
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa
+ ::cuDevicePrimaryCtxSetFlags,
+ ::cuCtxGetFlags,
+ ::cuCtxSetFlags,
+ ::cudaGetDeviceFlags*/
+ fn cuDevicePrimaryCtxGetState(
+ dev: cuda_types::CUdevice,
+ flags: *mut ::core::ffi::c_uint,
+ active: *mut ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroy all allocations and reset all state on the primary context
+
+ Explicitly destroys and cleans up all resources associated with the current
+ device in the current process.
+
+ Note that it is responsibility of the calling function to ensure that no
+ other module in the process is using the device any more. For that reason
+ it is recommended to use ::cuDevicePrimaryCtxRelease() in most cases.
+ However it is safe for other modules to call ::cuDevicePrimaryCtxRelease()
+ even after resetting the device.
+ Resetting the primary context does not release it, an application that has
+ retained the primary context should explicitly release its usage.
+
+ \param dev - Device for which primary context is destroyed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE
+ \notefnerr
+
+ \sa ::cuDevicePrimaryCtxRetain,
+ ::cuDevicePrimaryCtxRelease,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cudaDeviceReset*/
+ fn cuDevicePrimaryCtxReset_v2(dev: cuda_types::CUdevice) -> cuda_types::CUresult;
+ /** \brief Create a CUDA context
+
+ \note In most cases it is recommended to use ::cuDevicePrimaryCtxRetain.
+
+ Creates a new CUDA context and associates it with the calling thread. The
+ \p flags parameter is described below. The context is created with a usage
+ count of 1 and the caller of ::cuCtxCreate() must call ::cuCtxDestroy()
+ when done using the context. If a context is already current to the thread,
+ it is supplanted by the newly created context and may be restored by a subsequent
+ call to ::cuCtxPopCurrent().
+
+ The three LSBs of the \p flags parameter can be used to control how the OS
+ thread, which owns the CUDA context at the time of an API call, interacts
+ with the OS scheduler when waiting for results from the GPU. Only one of
+ the scheduling flags can be set when creating a context.
+
+ - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ results from the GPU. This can decrease latency when waiting for the GPU,
+ but may lower the performance of CPU threads if they are performing work in
+ parallel with the CUDA thread.
+
+ - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ results from the GPU. This can increase latency when waiting for the GPU,
+ but can increase the performance of CPU threads performing work in parallel
+ with the GPU.
+
+ - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work.
+
+ - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work. <br>
+ <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+
+ - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ uses a heuristic based on the number of active CUDA contexts in the
+ process \e C and the number of logical processors in the system \e P. If
+ \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ for low-powered devices.
+
+ - ::CU_CTX_MAP_HOST: Instruct CUDA to support mapped pinned allocations.
+ This flag must be set in order to allocate pinned host memory that is
+ accessible to the GPU.
+
+ - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ after resizing local memory for a kernel. This can prevent thrashing by
+ local memory allocations when launching many kernels with high local
+ memory usage at the cost of potentially increased memory usage. <br>
+ <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ by this flag is now the default and cannot be disabled.
+ Instead, the per-thread stack size can be controlled with ::cuCtxSetLimit().
+
+ - ::CU_CTX_COREDUMP_ENABLE: If GPU coredumps have not been enabled globally
+ with ::cuCoredumpSetAttributeGlobal or environment variables, this flag can
+ be set during context creation to instruct CUDA to create a coredump if
+ this context raises an exception during execution. These environment variables
+ are described in the CUDA-GDB user guide under the "GPU core dump support"
+ section.
+ The initial attributes will be taken from the global attributes at the time of
+ context creation. The other attributes that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+
+ - ::CU_CTX_USER_COREDUMP_ENABLE: If user-triggered GPU coredumps have not
+ been enabled globally with ::cuCoredumpSetAttributeGlobal or environment
+ variables, this flag can be set during context creation to instruct CUDA to
+ create a coredump if data is written to a certain pipe that is present in the
+ OS space. These environment variables are described in the CUDA-GDB user
+ guide under the "GPU core dump support" section.
+ It is important to note that the pipe name *must* be set with
+ ::cuCoredumpSetAttributeGlobal before creating the context if this flag is
+ used. Setting this flag implies that ::CU_CTX_COREDUMP_ENABLE is set.
+ The initial attributes will be taken from the global attributes at the time of
+ context creation. The other attributes that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+ Setting this flag on any context creation is equivalent to setting the
+ ::CU_COREDUMP_ENABLE_USER_TRIGGER attribute to \p true globally.
+
+ - ::CU_CTX_SYNC_MEMOPS: Ensures that synchronous memory operations initiated
+ on this context will always synchronize. See further documentation in the
+ section titled "API Synchronization behavior" to learn more about cases when
+ synchronous memory operations can exhibit asynchronous behavior.
+
+ Context creation will fail with ::CUDA_ERROR_UNKNOWN if the compute mode of
+ the device is ::CU_COMPUTEMODE_PROHIBITED. The function ::cuDeviceGetAttribute()
+ can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to determine the
+ compute mode of the device. The <i>nvidia-smi</i> tool can be used to set
+ the compute mode for * devices.
+ Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ -h option to it.
+
+ \param pctx - Returned context handle of the new context
+ \param flags - Context creation flags
+ \param dev - Device to create context on
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCoredumpSetAttributeGlobal,
+ ::cuCoredumpSetAttribute,
+ ::cuCtxSynchronize*/
+ fn cuCtxCreate_v2(
+ pctx: *mut cuda_types::CUcontext,
+ flags: ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a CUDA context with execution affinity
+
+ Creates a new CUDA context with execution affinity and associates it with
+ the calling thread. The \p paramsArray and \p flags parameter are described below.
+ The context is created with a usage count of 1 and the caller of ::cuCtxCreate() must
+ call ::cuCtxDestroy() when done using the context. If a context is already
+ current to the thread, it is supplanted by the newly created context and may
+ be restored by a subsequent call to ::cuCtxPopCurrent().
+
+ The type and the amount of execution resource the context can use is limited by \p paramsArray
+ and \p numParams. The \p paramsArray is an array of \p CUexecAffinityParam and the \p numParams
+ describes the size of the array. If two \p CUexecAffinityParam in the array have the same type,
+ the latter execution affinity parameter overrides the former execution affinity parameter.
+ The supported execution affinity types are:
+ - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT limits the portion of SMs that the context can use. The portion
+ of SMs is specified as the number of SMs via \p CUexecAffinitySmCount. This limit will be internally
+ rounded up to the next hardware-supported amount. Hence, it is imperative to query the actual execution
+ affinity of the context via \p cuCtxGetExecAffinity after context creation. Currently, this attribute
+ is only supported under Volta+ MPS.
+
+ The three LSBs of the \p flags parameter can be used to control how the OS
+ thread, which owns the CUDA context at the time of an API call, interacts
+ with the OS scheduler when waiting for results from the GPU. Only one of
+ the scheduling flags can be set when creating a context.
+
+ - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ results from the GPU. This can decrease latency when waiting for the GPU,
+ but may lower the performance of CPU threads if they are performing work in
+ parallel with the CUDA thread.
+
+ - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ results from the GPU. This can increase latency when waiting for the GPU,
+ but can increase the performance of CPU threads performing work in parallel
+ with the GPU.
+
+ - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work.
+
+ - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ synchronization primitive when waiting for the GPU to finish work. <br>
+ <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+
+ - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ uses a heuristic based on the number of active CUDA contexts in the
+ process \e C and the number of logical processors in the system \e P. If
+ \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ for low-powered devices.
+
+ - ::CU_CTX_MAP_HOST: Instruct CUDA to support mapped pinned allocations.
+ This flag must be set in order to allocate pinned host memory that is
+ accessible to the GPU.
+
+ - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ after resizing local memory for a kernel. This can prevent thrashing by
+ local memory allocations when launching many kernels with high local
+ memory usage at the cost of potentially increased memory usage. <br>
+ <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ by this flag is now the default and cannot be disabled.
+ Instead, the per-thread stack size can be controlled with ::cuCtxSetLimit().
+
+ - ::CU_CTX_COREDUMP_ENABLE: If GPU coredumps have not been enabled globally
+ with ::cuCoredumpSetAttributeGlobal or environment variables, this flag can
+ be set during context creation to instruct CUDA to create a coredump if
+ this context raises an exception during execution. These environment variables
+ are described in the CUDA-GDB user guide under the "GPU core dump support"
+ section.
+ The initial attributes will be taken from the global attributes at the time of
+ context creation. The other attributes that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+
+ - ::CU_CTX_USER_COREDUMP_ENABLE: If user-triggered GPU coredumps have not
+ been enabled globally with ::cuCoredumpSetAttributeGlobal or environment
+ variables, this flag can be set during context creation to instruct CUDA to
+ create a coredump if data is written to a certain pipe that is present in the
+ OS space. These environment variables are described in the CUDA-GDB user
+ guide under the "GPU core dump support" section.
+ It is important to note that the pipe name *must* be set with
+ ::cuCoredumpSetAttributeGlobal before creating the context if this flag is
+ used. Setting this flag implies that ::CU_CTX_COREDUMP_ENABLE is set.
+ The initial attributes will be taken from the global attributes at the time of
+ context creation. The other attributes that control coredump output can be
+ modified by calling ::cuCoredumpSetAttribute from the created context after
+ it becomes current.
+ Setting this flag on any context creation is equivalent to setting the
+ ::CU_COREDUMP_ENABLE_USER_TRIGGER attribute to \p true globally.
+
+ Context creation will fail with ::CUDA_ERROR_UNKNOWN if the compute mode of
+ the device is ::CU_COMPUTEMODE_PROHIBITED. The function ::cuDeviceGetAttribute()
+ can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to determine the
+ compute mode of the device. The <i>nvidia-smi</i> tool can be used to set
+ the compute mode for * devices.
+ Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ -h option to it.
+
+ \param pctx - Returned context handle of the new context
+ \param paramsArray - Execution affinity parameters
+ \param numParams - Number of execution affinity parameters
+ \param flags - Context creation flags
+ \param dev - Device to create context on
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cuCoredumpSetAttributeGlobal,
+ ::cuCoredumpSetAttribute,
+ ::CUexecAffinityParam*/
+ fn cuCtxCreate_v3(
+ pctx: *mut cuda_types::CUcontext,
+ paramsArray: *mut cuda_types::CUexecAffinityParam,
+ numParams: ::core::ffi::c_int,
+ flags: ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroy a CUDA context
+
+ Destroys the CUDA context specified by \p ctx. The context \p ctx will be
+ destroyed regardless of how many threads it is current to.
+ It is the responsibility of the calling function to ensure that no API
+ call issues using \p ctx while ::cuCtxDestroy() is executing.
+
+ Destroys and cleans up all resources associated with the context.
+ It is the caller's responsibility to ensure that the context or its resources
+ are not accessed or passed in subsequent API calls and doing so will result in undefined behavior.
+ These resources include CUDA types such as ::CUmodule, ::CUfunction, ::CUstream, ::CUevent,
+ ::CUarray, ::CUmipmappedArray, ::CUtexObject, ::CUsurfObject, ::CUtexref, ::CUsurfref,
+ ::CUgraphicsResource, ::CUlinkState, ::CUexternalMemory and ::CUexternalSemaphore.
+
+ If \p ctx is current to the calling thread then \p ctx will also be
+ popped from the current thread's context stack (as though ::cuCtxPopCurrent()
+ were called). If \p ctx is current to other threads, then \p ctx will
+ remain current to those threads, and attempting to access \p ctx from
+ those threads will result in the error ::CUDA_ERROR_CONTEXT_IS_DESTROYED.
+
+ \param ctx - Context to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxDestroy_v2(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Pushes a context on the current CPU thread
+
+ Pushes the given context \p ctx onto the CPU thread's stack of current
+ contexts. The specified context becomes the CPU thread's current context, so
+ all CUDA functions that operate on the current context are affected.
+
+ The previous current context may be made current again by calling
+ ::cuCtxDestroy() or ::cuCtxPopCurrent().
+
+ \param ctx - Context to push
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxPushCurrent_v2(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Pops the current CUDA context from the current CPU thread.
+
+ Pops the current CUDA context from the CPU thread and passes back the
+ old context handle in \p *pctx. That context may then be made current
+ to a different CPU thread by calling ::cuCtxPushCurrent().
+
+ If a context was current to the CPU thread before ::cuCtxCreate() or
+ ::cuCtxPushCurrent() was called, this function makes that context current to
+ the CPU thread again.
+
+ \param pctx - Returned popped context handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxPopCurrent_v2(pctx: *mut cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Binds the specified CUDA context to the calling CPU thread
+
+ Binds the specified CUDA context to the calling CPU thread.
+ If \p ctx is NULL then the CUDA context previously bound to the
+ calling CPU thread is unbound and ::CUDA_SUCCESS is returned.
+
+ If there exists a CUDA context stack on the calling CPU thread, this
+ will replace the top of that stack with \p ctx.
+ If \p ctx is NULL then this will be equivalent to popping the top
+ of the calling CPU thread's CUDA context stack (or a no-op if the
+ calling CPU thread's CUDA context stack is empty).
+
+ \param ctx - Context to bind to the calling CPU thread
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa
+ ::cuCtxGetCurrent,
+ ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cudaSetDevice*/
+ fn cuCtxSetCurrent(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Returns the CUDA context bound to the calling CPU thread.
+
+ Returns in \p *pctx the CUDA context bound to the calling CPU thread.
+ If no context is bound to the calling CPU thread then \p *pctx is
+ set to NULL and ::CUDA_SUCCESS is returned.
+
+ \param pctx - Returned context handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ \notefnerr
+
+ \sa
+ ::cuCtxSetCurrent,
+ ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cudaGetDevice*/
+ fn cuCtxGetCurrent(pctx: *mut cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Returns the device ID for the current context
+
+ Returns in \p *device the ordinal of the current context's device.
+
+ \param device - Returned device ID for the current context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cudaGetDevice*/
+ fn cuCtxGetDevice(device: *mut cuda_types::CUdevice) -> cuda_types::CUresult;
+ /** \brief Returns the flags for the current context
+
+ Returns in \p *flags the flags of the current context. See ::cuCtxCreate
+ for flag values.
+
+ \param flags - Pointer to store flags of current context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetCurrent,
+ ::cuCtxGetDevice,
+ ::cuCtxGetLimit,
+ ::cuCtxGetSharedMemConfig,
+ ::cuCtxGetStreamPriorityRange,
+ ::cuCtxSetFlags,
+ ::cudaGetDeviceFlags*/
+ fn cuCtxGetFlags(flags: *mut ::core::ffi::c_uint) -> cuda_types::CUresult;
+ /** \brief Sets the flags for the current context
+
+ Sets the flags for the current context overwriting previously set ones. See
+ ::cuDevicePrimaryCtxSetFlags for flag values.
+
+ \param flags - Flags to set on the current context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetCurrent,
+ ::cuCtxGetDevice,
+ ::cuCtxGetLimit,
+ ::cuCtxGetSharedMemConfig,
+ ::cuCtxGetStreamPriorityRange,
+ ::cuCtxGetFlags,
+ ::cudaGetDeviceFlags,
+ ::cuDevicePrimaryCtxSetFlags,*/
+ fn cuCtxSetFlags(flags: ::core::ffi::c_uint) -> cuda_types::CUresult;
+ /** \brief Returns the unique Id associated with the context supplied
+
+ Returns in \p ctxId the unique Id which is associated with a given context.
+ The Id is unique for the life of the program for this instance of CUDA.
+ If context is supplied as NULL and there is one current, the Id of the
+ current context is returned.
+
+ \param ctx - Context for which to obtain the Id
+ \param ctxId - Pointer to store the Id of the context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPushCurrent*/
+ fn cuCtxGetId(
+ ctx: cuda_types::CUcontext,
+ ctxId: *mut ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Block for a context's tasks to complete
+
+ Blocks until the device has completed all preceding requested tasks.
+ ::cuCtxSynchronize() returns an error if one of the preceding tasks failed.
+ If the context was created with the ::CU_CTX_SCHED_BLOCKING_SYNC flag, the
+ CPU thread will block until the GPU context has finished its work.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cudaDeviceSynchronize*/
+ fn cuCtxSynchronize() -> cuda_types::CUresult;
+ /** \brief Set resource limits
+
+ Setting \p limit to \p value is a request by the application to update
+ the current limit maintained by the context. The driver is free to
+ modify the requested value to meet h/w requirements (this could be
+ clamping to minimum or maximum values, rounding up to nearest element
+ size, etc). The application can use ::cuCtxGetLimit() to find out exactly
+ what the limit has been set to.
+
+ Setting each ::CUlimit has its own specific restrictions, so each is
+ discussed here.
+
+ - ::CU_LIMIT_STACK_SIZE controls the stack size in bytes of each GPU thread.
+ The driver automatically increases the per-thread stack size
+ for each kernel launch as needed. This size isn't reset back to the
+ original value after each launch. Setting this value will take effect
+ immediately, and if necessary, the device will block until all preceding
+ requested tasks are complete.
+
+ - ::CU_LIMIT_PRINTF_FIFO_SIZE controls the size in bytes of the FIFO used
+ by the ::printf() device system call. Setting ::CU_LIMIT_PRINTF_FIFO_SIZE
+ must be performed before launching any kernel that uses the ::printf()
+ device system call, otherwise ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ - ::CU_LIMIT_MALLOC_HEAP_SIZE controls the size in bytes of the heap used
+ by the ::malloc() and ::free() device system calls. Setting
+ ::CU_LIMIT_MALLOC_HEAP_SIZE must be performed before launching any kernel
+ that uses the ::malloc() or ::free() device system calls, otherwise
+ ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ - ::CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH controls the maximum nesting depth of
+ a grid at which a thread can safely call ::cudaDeviceSynchronize(). Setting
+ this limit must be performed before any launch of a kernel that uses the
+ device runtime and calls ::cudaDeviceSynchronize() above the default sync
+ depth, two levels of grids. Calls to ::cudaDeviceSynchronize() will fail
+ with error code ::cudaErrorSyncDepthExceeded if the limitation is
+ violated. This limit can be set smaller than the default or up the maximum
+ launch depth of 24. When setting this limit, keep in mind that additional
+ levels of sync depth require the driver to reserve large amounts of device
+ memory which can no longer be used for user allocations. If these
+ reservations of device memory fail, ::cuCtxSetLimit() will return
+ ::CUDA_ERROR_OUT_OF_MEMORY, and the limit can be reset to a lower value.
+ This limit is only applicable to devices of compute capability < 9.0.
+ Attempting to set this limit on devices of other compute capability
+ versions will result in the error ::CUDA_ERROR_UNSUPPORTED_LIMIT being
+ returned.
+
+ - ::CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT controls the maximum number of
+ outstanding device runtime launches that can be made from the current
+ context. A grid is outstanding from the point of launch up until the grid
+ is known to have been completed. Device runtime launches which violate
+ this limitation fail and return ::cudaErrorLaunchPendingCountExceeded when
+ ::cudaGetLastError() is called after launch. If more pending launches than
+ the default (2048 launches) are needed for a module using the device
+ runtime, this limit can be increased. Keep in mind that being able to
+ sustain additional pending launches will require the driver to reserve
+ larger amounts of device memory upfront which can no longer be used for
+ allocations. If these reservations fail, ::cuCtxSetLimit() will return
+ ::CUDA_ERROR_OUT_OF_MEMORY, and the limit can be reset to a lower value.
+ This limit is only applicable to devices of compute capability 3.5 and
+ higher. Attempting to set this limit on devices of compute capability less
+ than 3.5 will result in the error ::CUDA_ERROR_UNSUPPORTED_LIMIT being
+ returned.
+
+ - ::CU_LIMIT_MAX_L2_FETCH_GRANULARITY controls the L2 cache fetch granularity.
+ Values can range from 0B to 128B. This is purely a performance hint and
+ it can be ignored or clamped depending on the platform.
+
+ - ::CU_LIMIT_PERSISTING_L2_CACHE_SIZE controls size in bytes available for
+ persisting L2 cache. This is purely a performance hint and it can be
+ ignored or clamped depending on the platform.
+
+ \param limit - Limit to set
+ \param value - Size of limit
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNSUPPORTED_LIMIT,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSynchronize,
+ ::cudaDeviceSetLimit*/
+ fn cuCtxSetLimit(limit: cuda_types::CUlimit, value: usize) -> cuda_types::CUresult;
+ /** \brief Returns resource limits
+
+ Returns in \p *pvalue the current size of \p limit. The supported
+ ::CUlimit values are:
+ - ::CU_LIMIT_STACK_SIZE: stack size in bytes of each GPU thread.
+ - ::CU_LIMIT_PRINTF_FIFO_SIZE: size in bytes of the FIFO used by the
+ ::printf() device system call.
+ - ::CU_LIMIT_MALLOC_HEAP_SIZE: size in bytes of the heap used by the
+ ::malloc() and ::free() device system calls.
+ - ::CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH: maximum grid depth at which a thread
+ can issue the device runtime call ::cudaDeviceSynchronize() to wait on
+ child grid launches to complete.
+ - ::CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT: maximum number of outstanding
+ device runtime launches that can be made from this context.
+ - ::CU_LIMIT_MAX_L2_FETCH_GRANULARITY: L2 cache fetch granularity.
+ - ::CU_LIMIT_PERSISTING_L2_CACHE_SIZE: Persisting L2 cache size in bytes
+
+ \param limit - Limit to query
+ \param pvalue - Returned size of limit
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNSUPPORTED_LIMIT
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cudaDeviceGetLimit*/
+ fn cuCtxGetLimit(
+ pvalue: *mut usize,
+ limit: cuda_types::CUlimit,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the preferred cache configuration for the current context.
+
+ On devices where the L1 cache and shared memory use the same hardware
+ resources, this function returns through \p pconfig the preferred cache configuration
+ for the current context. This is only a preference. The driver will use
+ the requested configuration if possible, but it is free to choose a different
+ configuration if required to execute functions.
+
+ This will return a \p pconfig of ::CU_FUNC_CACHE_PREFER_NONE on devices
+ where the size of the L1 cache and shared memory are fixed.
+
+ The supported cache configurations are:
+ - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+
+ \param pconfig - Returned cache configuration
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cuFuncSetCacheConfig,
+ ::cudaDeviceGetCacheConfig*/
+ fn cuCtxGetCacheConfig(
+ pconfig: *mut cuda_types::CUfunc_cache,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the preferred cache configuration for the current context.
+
+ On devices where the L1 cache and shared memory use the same hardware
+ resources, this sets through \p config the preferred cache configuration for
+ the current context. This is only a preference. The driver will use
+ the requested configuration if possible, but it is free to choose a different
+ configuration if required to execute the function. Any function preference
+ set via ::cuFuncSetCacheConfig() or ::cuKernelSetCacheConfig() will be preferred over this context-wide
+ setting. Setting the context-wide cache configuration to
+ ::CU_FUNC_CACHE_PREFER_NONE will cause subsequent kernel launches to prefer
+ to not change the cache configuration unless required to launch the kernel.
+
+ This setting does nothing on devices where the size of the L1 cache and
+ shared memory are fixed.
+
+ Launching a kernel with a different preference than the most recent
+ preference setting may insert a device-side synchronization point.
+
+ The supported cache configurations are:
+ - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+
+ \param config - Requested cache configuration
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cuFuncSetCacheConfig,
+ ::cudaDeviceSetCacheConfig,
+ ::cuKernelSetCacheConfig*/
+ fn cuCtxSetCacheConfig(config: cuda_types::CUfunc_cache) -> cuda_types::CUresult;
+ /** \brief Gets the context's API version.
+
+ Returns a version number in \p version corresponding to the capabilities of
+ the context (e.g. 3010 or 3020), which library developers can use to direct
+ callers to a specific API version. If \p ctx is NULL, returns the API version
+ used to create the currently bound context.
+
+ Note that new API versions are only introduced when context capabilities are
+ changed that break binary compatibility, so the API version and driver version
+ may be different. For example, it is valid for the API version to be 3020 while
+ the driver version is 4020.
+
+ \param ctx - Context to check
+ \param version - Pointer to version
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxGetApiVersion(
+ ctx: cuda_types::CUcontext,
+ version: *mut ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns numerical values that correspond to the least and
+ greatest stream priorities.
+
+ Returns in \p *leastPriority and \p *greatestPriority the numerical values that correspond
+ to the least and greatest stream priorities respectively. Stream priorities
+ follow a convention where lower numbers imply greater priorities. The range of
+ meaningful stream priorities is given by [\p *greatestPriority, \p *leastPriority].
+ If the user attempts to create a stream with a priority value that is
+ outside the meaningful range as specified by this API, the priority is
+ automatically clamped down or up to either \p *leastPriority or \p *greatestPriority
+ respectively. See ::cuStreamCreateWithPriority for details on creating a
+ priority stream.
+ A NULL may be passed in for \p *leastPriority or \p *greatestPriority if the value
+ is not desired.
+
+ This function will return '0' in both \p *leastPriority and \p *greatestPriority if
+ the current context's device does not support stream priorities
+ (see ::cuDeviceGetAttribute).
+
+ \param leastPriority - Pointer to an int in which the numerical value for least
+ stream priority is returned
+ \param greatestPriority - Pointer to an int in which the numerical value for greatest
+ stream priority is returned
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuStreamCreateWithPriority,
+ ::cuStreamGetPriority,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cudaDeviceGetStreamPriorityRange*/
+ fn cuCtxGetStreamPriorityRange(
+ leastPriority: *mut ::core::ffi::c_int,
+ greatestPriority: *mut ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Resets all persisting lines in cache to normal status.
+
+ ::cuCtxResetPersistingL2Cache Resets all persisting lines in cache to normal
+ status. Takes effect on function return.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuCtxResetPersistingL2Cache() -> cuda_types::CUresult;
+ /** \brief Returns the execution affinity setting for the current context.
+
+ Returns in \p *pExecAffinity the current value of \p type. The supported
+ ::CUexecAffinityType values are:
+ - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT: number of SMs the context is limited to use.
+
+ \param type - Execution affinity type to query
+ \param pExecAffinity - Returned execution affinity
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY
+ \notefnerr
+
+ \sa
+ ::CUexecAffinityParam*/
+ fn cuCtxGetExecAffinity(
+ pExecAffinity: *mut cuda_types::CUexecAffinityParam,
+ type_: cuda_types::CUexecAffinityType,
+ ) -> cuda_types::CUresult;
+ /** \brief Increment a context's usage-count
+
+ \deprecated
+
+ Note that this function is deprecated and should not be used.
+
+ Increments the usage count of the context and passes back a context handle
+ in \p *pctx that must be passed to ::cuCtxDetach() when the application is
+ done with the context. ::cuCtxAttach() fails if there is no context current
+ to the thread.
+
+ Currently, the \p flags parameter must be 0.
+
+ \param pctx - Returned context handle of the current context
+ \param flags - Context attach flags (must be 0)
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxDetach,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxAttach(
+ pctx: *mut cuda_types::CUcontext,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Decrement a context's usage-count
+
+ \deprecated
+
+ Note that this function is deprecated and should not be used.
+
+ Decrements the usage count of the context \p ctx, and destroys the context
+ if the usage count goes to 0. The context must be a handle that was passed
+ back by ::cuCtxCreate() or ::cuCtxAttach(), and must be current to the
+ calling thread.
+
+ \param ctx - Context to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize*/
+ fn cuCtxDetach(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ /** \brief Returns the current shared memory configuration for the current context.
+
+ \deprecated
+
+ This function will return in \p pConfig the current size of shared memory banks
+ in the current context. On devices with configurable shared memory banks,
+ ::cuCtxSetSharedMemConfig can be used to change this setting, so that all
+ subsequent kernel launches will by default use the new bank size. When
+ ::cuCtxGetSharedMemConfig is called on devices without configurable shared
+ memory, it will return the fixed bank size of the hardware.
+
+ The returned bank configurations can be either:
+ - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: shared memory bank width is
+ four bytes.
+ - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: shared memory bank width will
+ eight bytes.
+
+ \param pConfig - returned shared memory configuration
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cuCtxGetSharedMemConfig,
+ ::cuFuncSetCacheConfig,
+ ::cudaDeviceGetSharedMemConfig*/
+ fn cuCtxGetSharedMemConfig(
+ pConfig: *mut cuda_types::CUsharedconfig,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the shared memory configuration for the current context.
+
+ \deprecated
+
+ On devices with configurable shared memory banks, this function will set
+ the context's shared memory bank size which is used for subsequent kernel
+ launches.
+
+ Changed the shared memory configuration between launches may insert a device
+ side synchronization point between those launches.
+
+ Changing the shared memory bank size will not increase shared memory usage
+ or affect occupancy of kernels, but may have major effects on performance.
+ Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ but will change what kinds of accesses to shared memory will result in bank
+ conflicts.
+
+ This function will do nothing on devices with fixed shared memory bank size.
+
+ The supported bank configurations are:
+ - ::CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: set bank width to the default initial
+ setting (currently, four bytes).
+ - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: set shared memory bank width to
+ be natively four bytes.
+ - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: set shared memory bank width to
+ be natively eight bytes.
+
+ \param config - requested shared memory configuration
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate,
+ ::cuCtxDestroy,
+ ::cuCtxGetApiVersion,
+ ::cuCtxGetCacheConfig,
+ ::cuCtxGetDevice,
+ ::cuCtxGetFlags,
+ ::cuCtxGetLimit,
+ ::cuCtxPopCurrent,
+ ::cuCtxPushCurrent,
+ ::cuCtxSetLimit,
+ ::cuCtxSynchronize,
+ ::cuCtxGetSharedMemConfig,
+ ::cuFuncSetCacheConfig,
+ ::cudaDeviceSetSharedMemConfig*/
+ fn cuCtxSetSharedMemConfig(
+ config: cuda_types::CUsharedconfig,
+ ) -> cuda_types::CUresult;
+ /** \brief Loads a compute module
+
+ Takes a filename \p fname and loads the corresponding module \p module into
+ the current context. The CUDA driver API does not attempt to lazily
+ allocate the resources needed by a module; if the memory for functions and
+ data (constant and global) needed by the module cannot be allocated,
+ ::cuModuleLoad() fails. The file should be a \e cubin file as output by
+ \b nvcc, or a \e PTX file either as output by \b nvcc or handwritten, or
+ a \e fatbin file as output by \b nvcc from toolchain 4.0 or later.
+
+ \param module - Returned module
+ \param fname - Filename of module to load
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_FILE_NOT_FOUND,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleLoad(
+ module: *mut cuda_types::CUmodule,
+ fname: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Load a module's data
+
+ Takes a pointer \p image and loads the corresponding module \p module into
+ the current context. The \p image may be a \e cubin or \e fatbin
+ as output by \b nvcc, or a NULL-terminated \e PTX, either as output by \b nvcc
+ or hand-written.
+
+ \param module - Returned module
+ \param image - Module data to load
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleLoadData(
+ module: *mut cuda_types::CUmodule,
+ image: *const ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Load a module's data with options
+
+ Takes a pointer \p image and loads the corresponding module \p module into
+ the current context. The \p image may be a \e cubin or \e fatbin
+ as output by \b nvcc, or a NULL-terminated \e PTX, either as output by \b nvcc
+ or hand-written.
+
+ \param module - Returned module
+ \param image - Module data to load
+ \param numOptions - Number of options
+ \param options - Options for JIT
+ \param optionValues - Option values for JIT
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleLoadDataEx(
+ module: *mut cuda_types::CUmodule,
+ image: *const ::core::ffi::c_void,
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Load a module's data
+
+ Takes a pointer \p fatCubin and loads the corresponding module \p module
+ into the current context. The pointer represents a <i>fat binary</i> object,
+ which is a collection of different \e cubin and/or \e PTX files, all
+ representing the same device code, but compiled and optimized for different
+ architectures.
+
+ Prior to CUDA 4.0, there was no documented API for constructing and using
+ fat binary objects by programmers. Starting with CUDA 4.0, fat binary
+ objects can be constructed by providing the <i>-fatbin option</i> to \b nvcc.
+ More information can be found in the \b nvcc document.
+
+ \param module - Returned module
+ \param fatCubin - Fat binary to load
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleUnload*/
+ fn cuModuleLoadFatBinary(
+ module: *mut cuda_types::CUmodule,
+ fatCubin: *const ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Unloads a module
+
+ Unloads a module \p hmod from the current context. Attempting to unload
+ a module which was obtained from the Library Management API such as
+ ::cuLibraryGetModule will return ::CUDA_ERROR_NOT_PERMITTED.
+
+ \param hmod - Module to unload
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_PERMITTED
+ \notefnerr
+ \note_destroy_ub
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary*/
+ fn cuModuleUnload(hmod: cuda_types::CUmodule) -> cuda_types::CUresult;
+ /** \brief Query lazy loading mode
+
+ Returns lazy loading mode
+ Module loading mode is controlled by CUDA_MODULE_LOADING env variable
+
+ \param mode - Returns the lazy loading mode
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa
+ ::cuModuleLoad,*/
+ fn cuModuleGetLoadingMode(
+ mode: *mut cuda_types::CUmoduleLoadingMode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a function handle
+
+ Returns in \p *hfunc the handle of the function of name \p name located in
+ module \p hmod. If no function of that name exists, ::cuModuleGetFunction()
+ returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param hfunc - Returned function handle
+ \param hmod - Module to retrieve function from
+ \param name - Name of function to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleGetFunction(
+ hfunc: *mut cuda_types::CUfunction,
+ hmod: cuda_types::CUmodule,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the number of functions within a module
+
+ Returns in \p count the number of functions in \p mod.
+
+ \param count - Number of functions found within the module
+ \param mod - Module to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE*/
+ fn cuModuleGetFunctionCount(
+ count: *mut ::core::ffi::c_uint,
+ mod_: cuda_types::CUmodule,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the function handles within a module.
+
+ Returns in \p functions a maximum number of \p numFunctions function handles within \p mod. When
+ function loading mode is set to LAZY the function retrieved may be partially loaded. The loading
+ state of a function can be queried using ::cuFunctionIsLoaded. CUDA APIs may load the function
+ automatically when called with partially loaded function handle which may incur additional
+ latency. Alternatively, ::cuFunctionLoad can be used to explicitly load a function. The returned
+ function handles become invalid when the module is unloaded.
+
+ \param functions - Buffer where the function handles are returned to
+ \param numFunctions - Maximum number of function handles may be returned to the buffer
+ \param mod - Module to query from
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetFunctionCount,
+ ::cuFuncIsLoaded,
+ ::cuFuncLoad*/
+ fn cuModuleEnumerateFunctions(
+ functions: *mut cuda_types::CUfunction,
+ numFunctions: ::core::ffi::c_uint,
+ mod_: cuda_types::CUmodule,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a global pointer from a module
+
+ Returns in \p *dptr and \p *bytes the base pointer and size of the
+ global of name \p name located in module \p hmod. If no variable of that name
+ exists, ::cuModuleGetGlobal() returns ::CUDA_ERROR_NOT_FOUND.
+ One of the parameters \p dptr or \p bytes (not both) can be NULL in which
+ case it is ignored.
+
+ \param dptr - Returned global device pointer
+ \param bytes - Returned global size in bytes
+ \param hmod - Module to retrieve global from
+ \param name - Name of global to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuModuleGetFunction,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload,
+ ::cudaGetSymbolAddress,
+ ::cudaGetSymbolSize*/
+ fn cuModuleGetGlobal_v2(
+ dptr: *mut cuda_types::CUdeviceptr,
bytes: *mut usize,
- hmod: CUmodule,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkCreate_v2(
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- stateOut: *mut CUlinkState,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkAddData_v2(
- state: CUlinkState,
- type_: CUjitInputType,
- data: *mut ::std::os::raw::c_void,
+ hmod: cuda_types::CUmodule,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a pending JIT linker invocation.
+
+ If the call is successful, the caller owns the returned CUlinkState, which
+ should eventually be destroyed with ::cuLinkDestroy. The
+ device code machine size (32 or 64 bit) will match the calling application.
+
+ Both linker and compiler options may be specified. Compiler options will
+ be applied to inputs to this linker action which must be compiled from PTX.
+ The options ::CU_JIT_WALL_TIME,
+ ::CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES, and ::CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES
+ will accumulate data until the CUlinkState is destroyed.
+
+ \p optionValues must remain valid for the life of the CUlinkState if output
+ options are used. No other references to inputs are maintained after this
+ call returns.
+
+ \note For LTO-IR input, only LTO-IR compiled with toolkits prior to CUDA 12.0 will be accepted
+
+ \param numOptions Size of options arrays
+ \param options Array of linker and compiler options
+ \param optionValues Array of option values, each cast to void *
+ \param stateOut On success, this will contain a CUlinkState to specify
+ and complete this action
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ \notefnerr
+
+ \sa ::cuLinkAddData,
+ ::cuLinkAddFile,
+ ::cuLinkComplete,
+ ::cuLinkDestroy*/
+ fn cuLinkCreate_v2(
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ stateOut: *mut cuda_types::CUlinkState,
+ ) -> cuda_types::CUresult;
+ /** \brief Add an input to a pending linker invocation
+
+ Ownership of \p data is retained by the caller. No reference is retained to any
+ inputs after this call returns.
+
+ This method accepts only compiler options, which are used if the data must
+ be compiled from PTX, and does not accept any of
+ ::CU_JIT_WALL_TIME, ::CU_JIT_INFO_LOG_BUFFER, ::CU_JIT_ERROR_LOG_BUFFER,
+ ::CU_JIT_TARGET_FROM_CUCONTEXT, or ::CU_JIT_TARGET.
+
+ \note For LTO-IR input, only LTO-IR compiled with toolkits prior to CUDA 12.0 will be accepted
+
+ \param state A pending linker action.
+ \param type The type of the input data.
+ \param data The input data. PTX must be NULL-terminated.
+ \param size The length of the input data.
+ \param name An optional name for this input in log messages.
+ \param numOptions Size of options.
+ \param options Options to be applied only for this input (overrides options from ::cuLinkCreate).
+ \param optionValues Array of option values, each cast to void *.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU
+
+ \sa ::cuLinkCreate,
+ ::cuLinkAddFile,
+ ::cuLinkComplete,
+ ::cuLinkDestroy*/
+ fn cuLinkAddData_v2(
+ state: cuda_types::CUlinkState,
+ type_: cuda_types::CUjitInputType,
+ data: *mut ::core::ffi::c_void,
size: usize,
- name: *const ::std::os::raw::c_char,
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkAddFile_v2(
- state: CUlinkState,
- type_: CUjitInputType,
- path: *const ::std::os::raw::c_char,
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkComplete(
- state: CUlinkState,
- cubinOut: *mut *mut ::std::os::raw::c_void,
+ name: *const ::core::ffi::c_char,
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Add a file input to a pending linker invocation
+
+ No reference is retained to any inputs after this call returns.
+
+ This method accepts only compiler options, which are used if the input
+ must be compiled from PTX, and does not accept any of
+ ::CU_JIT_WALL_TIME, ::CU_JIT_INFO_LOG_BUFFER, ::CU_JIT_ERROR_LOG_BUFFER,
+ ::CU_JIT_TARGET_FROM_CUCONTEXT, or ::CU_JIT_TARGET.
+
+ This method is equivalent to invoking ::cuLinkAddData on the contents
+ of the file.
+
+ \note For LTO-IR input, only LTO-IR compiled with toolkits prior to CUDA 12.0 will be accepted
+
+ \param state A pending linker action
+ \param type The type of the input data
+ \param path Path to the input file
+ \param numOptions Size of options
+ \param options Options to be applied only for this input (overrides options from ::cuLinkCreate)
+ \param optionValues Array of option values, each cast to void *
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_FILE_NOT_FOUND
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU
+
+ \sa ::cuLinkCreate,
+ ::cuLinkAddData,
+ ::cuLinkComplete,
+ ::cuLinkDestroy*/
+ fn cuLinkAddFile_v2(
+ state: cuda_types::CUlinkState,
+ type_: cuda_types::CUjitInputType,
+ path: *const ::core::ffi::c_char,
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Complete a pending linker invocation
+
+ Completes the pending linker action and returns the cubin image for the linked
+ device code, which can be used with ::cuModuleLoadData. The cubin is owned by
+ \p state, so it should be loaded before \p state is destroyed via ::cuLinkDestroy.
+ This call does not destroy \p state.
+
+ \param state A pending linker invocation
+ \param cubinOut On success, this will point to the output image
+ \param sizeOut Optional parameter to receive the size of the generated image
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuLinkCreate,
+ ::cuLinkAddData,
+ ::cuLinkAddFile,
+ ::cuLinkDestroy,
+ ::cuModuleLoadData*/
+ fn cuLinkComplete(
+ state: cuda_types::CUlinkState,
+ cubinOut: *mut *mut ::core::ffi::c_void,
sizeOut: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkDestroy(state: CUlinkState) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetTexRef(
- pTexRef: *mut CUtexref,
- hmod: CUmodule,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetSurfRef(
- pSurfRef: *mut CUsurfref,
- hmod: CUmodule,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryLoadData(
- library: *mut CUlibrary,
- code: *const ::std::os::raw::c_void,
- jitOptions: *mut CUjit_option,
- jitOptionsValues: *mut *mut ::std::os::raw::c_void,
- numJitOptions: ::std::os::raw::c_uint,
- libraryOptions: *mut CUlibraryOption,
- libraryOptionValues: *mut *mut ::std::os::raw::c_void,
- numLibraryOptions: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryLoadFromFile(
- library: *mut CUlibrary,
- fileName: *const ::std::os::raw::c_char,
- jitOptions: *mut CUjit_option,
- jitOptionsValues: *mut *mut ::std::os::raw::c_void,
- numJitOptions: ::std::os::raw::c_uint,
- libraryOptions: *mut CUlibraryOption,
- libraryOptionValues: *mut *mut ::std::os::raw::c_void,
- numLibraryOptions: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryUnload(library: CUlibrary) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetKernel(
- pKernel: *mut CUkernel,
- library: CUlibrary,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetKernelCount(count: *mut ::std::os::raw::c_uint, lib: CUlibrary) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryEnumerateKernels(
- kernels: *mut CUkernel,
- numKernels: ::std::os::raw::c_uint,
- lib: CUlibrary,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetModule(pMod: *mut CUmodule, library: CUlibrary) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelGetFunction(pFunc: *mut CUfunction, kernel: CUkernel) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetGlobal(
- dptr: *mut CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys state for a JIT linker invocation.
+
+ \param state State object for the linker invocation
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE
+
+ \sa ::cuLinkCreate*/
+ fn cuLinkDestroy(state: cuda_types::CUlinkState) -> cuda_types::CUresult;
+ /** \brief Returns a handle to a texture reference
+
+ \deprecated
+
+ Returns in \p *pTexRef the handle of the texture reference of name \p name
+ in the module \p hmod. If no texture reference of that name exists,
+ ::cuModuleGetTexRef() returns ::CUDA_ERROR_NOT_FOUND. This texture reference
+ handle should not be destroyed, since it will be destroyed when the module
+ is unloaded.
+
+ \param pTexRef - Returned texture reference
+ \param hmod - Module to retrieve texture reference from
+ \param name - Name of texture reference to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_FOUND
+ \notefnerr
+
+ \sa
+ ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetSurfRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleGetTexRef(
+ pTexRef: *mut cuda_types::CUtexref,
+ hmod: cuda_types::CUmodule,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a handle to a surface reference
+
+ \deprecated
+
+ Returns in \p *pSurfRef the handle of the surface reference of name \p name
+ in the module \p hmod. If no surface reference of that name exists,
+ ::cuModuleGetSurfRef() returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param pSurfRef - Returned surface reference
+ \param hmod - Module to retrieve surface reference from
+ \param name - Name of surface reference to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_FOUND
+ \notefnerr
+
+ \sa
+ ::cuModuleGetFunction,
+ ::cuModuleGetGlobal,
+ ::cuModuleGetTexRef,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx,
+ ::cuModuleLoadFatBinary,
+ ::cuModuleUnload*/
+ fn cuModuleGetSurfRef(
+ pSurfRef: *mut cuda_types::CUsurfref,
+ hmod: cuda_types::CUmodule,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Load a library with specified code and options
+
+ Takes a pointer \p code and loads the corresponding library \p library based on
+ the application defined library loading mode:
+ - If module loading is set to EAGER, via the environment variables described in "Module loading",
+ \p library is loaded eagerly into all contexts at the time of the call and future contexts
+ at the time of creation until the library is unloaded with ::cuLibraryUnload().
+ - If the environment variables are set to LAZY, \p library
+ is not immediately loaded onto all existent contexts and will only be
+ loaded when a function is needed for that context, such as a kernel launch.
+
+ These environment variables are described in the CUDA programming guide under the
+ "CUDA environment variables" section.
+
+ The \p code may be a \e cubin or \e fatbin as output by \b nvcc,
+ or a NULL-terminated \e PTX, either as output by \b nvcc or hand-written.
+
+ Options are passed as an array via \p jitOptions and any corresponding parameters are passed in
+ \p jitOptionsValues. The number of total JIT options is supplied via \p numJitOptions.
+ Any outputs will be returned via \p jitOptionsValues.
+
+ Library load options are passed as an array via \p libraryOptions and any corresponding parameters are passed in
+ \p libraryOptionValues. The number of total library load options is supplied via \p numLibraryOptions.
+
+ \param library - Returned library
+ \param code - Code to load
+ \param jitOptions - Options for JIT
+ \param jitOptionsValues - Option values for JIT
+ \param numJitOptions - Number of options
+ \param libraryOptions - Options for loading
+ \param libraryOptionValues - Option values for loading
+ \param numLibraryOptions - Number of options for loading
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+
+ \sa ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx*/
+ fn cuLibraryLoadData(
+ library: *mut cuda_types::CUlibrary,
+ code: *const ::core::ffi::c_void,
+ jitOptions: *mut cuda_types::CUjit_option,
+ jitOptionsValues: *mut *mut ::core::ffi::c_void,
+ numJitOptions: ::core::ffi::c_uint,
+ libraryOptions: *mut cuda_types::CUlibraryOption,
+ libraryOptionValues: *mut *mut ::core::ffi::c_void,
+ numLibraryOptions: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Load a library with specified file and options
+
+ Takes a pointer \p code and loads the corresponding library \p library based on
+ the application defined library loading mode:
+ - If module loading is set to EAGER, via the environment variables described in "Module loading",
+ \p library is loaded eagerly into all contexts at the time of the call and future contexts
+ at the time of creation until the library is unloaded with ::cuLibraryUnload().
+ - If the environment variables are set to LAZY, \p library
+ is not immediately loaded onto all existent contexts and will only be
+ loaded when a function is needed for that context, such as a kernel launch.
+
+ These environment variables are described in the CUDA programming guide under the
+ "CUDA environment variables" section.
+
+ The file should be a \e cubin file as output by \b nvcc, or a \e PTX file either
+ as output by \b nvcc or handwritten, or a \e fatbin file as output by \b nvcc.
+
+ Options are passed as an array via \p jitOptions and any corresponding parameters are
+ passed in \p jitOptionsValues. The number of total options is supplied via \p numJitOptions.
+ Any outputs will be returned via \p jitOptionsValues.
+
+ Library load options are passed as an array via \p libraryOptions and any corresponding parameters are passed in
+ \p libraryOptionValues. The number of total library load options is supplied via \p numLibraryOptions.
+
+ \param library - Returned library
+ \param fileName - File to load from
+ \param jitOptions - Options for JIT
+ \param jitOptionsValues - Option values for JIT
+ \param numJitOptions - Number of options
+ \param libraryOptions - Options for loading
+ \param libraryOptionValues - Option values for loading
+ \param numLibraryOptions - Number of options for loading
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_PTX,
+ ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryUnload,
+ ::cuModuleLoad,
+ ::cuModuleLoadData,
+ ::cuModuleLoadDataEx*/
+ fn cuLibraryLoadFromFile(
+ library: *mut cuda_types::CUlibrary,
+ fileName: *const ::core::ffi::c_char,
+ jitOptions: *mut cuda_types::CUjit_option,
+ jitOptionsValues: *mut *mut ::core::ffi::c_void,
+ numJitOptions: ::core::ffi::c_uint,
+ libraryOptions: *mut cuda_types::CUlibraryOption,
+ libraryOptionValues: *mut *mut ::core::ffi::c_void,
+ numLibraryOptions: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Unloads a library
+
+ Unloads the library specified with \p library
+
+ \param library - Library to unload
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuModuleUnload*/
+ fn cuLibraryUnload(library: cuda_types::CUlibrary) -> cuda_types::CUresult;
+ /** \brief Returns a kernel handle
+
+ Returns in \p pKernel the handle of the kernel with name \p name located in library \p library.
+ If kernel handle is not found, the call returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param pKernel - Returned kernel handle
+ \param library - Library to retrieve kernel from
+ \param name - Name of kernel to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuKernelGetFunction,
+ ::cuLibraryGetModule,
+ ::cuModuleGetFunction*/
+ fn cuLibraryGetKernel(
+ pKernel: *mut cuda_types::CUkernel,
+ library: cuda_types::CUlibrary,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the number of kernels within a library
+
+ Returns in \p count the number of kernels in \p lib.
+
+ \param count - Number of kernels found within the library
+ \param lib - Library to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE*/
+ fn cuLibraryGetKernelCount(
+ count: *mut ::core::ffi::c_uint,
+ lib: cuda_types::CUlibrary,
+ ) -> cuda_types::CUresult;
+ /** \brief Retrieve the kernel handles within a library.
+
+ Returns in \p kernels a maximum number of \p numKernels kernel handles within \p lib.
+ The returned kernel handle becomes invalid when the library is unloaded.
+
+ \param kernels - Buffer where the kernel handles are returned to
+ \param numKernels - Maximum number of kernel handles may be returned to the buffer
+ \param lib - Library to query from
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuLibraryGetKernelCount*/
+ fn cuLibraryEnumerateKernels(
+ kernels: *mut cuda_types::CUkernel,
+ numKernels: ::core::ffi::c_uint,
+ lib: cuda_types::CUlibrary,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a module handle
+
+ Returns in \p pMod the module handle associated with the current context located in
+ library \p library. If module handle is not found, the call returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param pMod - Returned module handle
+ \param library - Library to retrieve module from
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuModuleGetFunction*/
+ fn cuLibraryGetModule(
+ pMod: *mut cuda_types::CUmodule,
+ library: cuda_types::CUlibrary,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a function handle
+
+ Returns in \p pFunc the handle of the function for the requested kernel \p kernel and
+ the current context. If function handle is not found, the call returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param pFunc - Returned function handle
+ \param kernel - Kernel to retrieve function for the requested context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuLibraryGetKernel,
+ ::cuLibraryGetModule,
+ ::cuModuleGetFunction*/
+ fn cuKernelGetFunction(
+ pFunc: *mut cuda_types::CUfunction,
+ kernel: cuda_types::CUkernel,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a global device pointer
+
+ Returns in \p *dptr and \p *bytes the base pointer and size of the global with
+ name \p name for the requested library \p library and the current context.
+ If no global for the requested name \p name exists, the call returns ::CUDA_ERROR_NOT_FOUND.
+ One of the parameters \p dptr or \p bytes (not both) can be NULL in which
+ case it is ignored.
+
+ \param dptr - Returned global device pointer for the requested context
+ \param bytes - Returned global size in bytes
+ \param library - Library to retrieve global from
+ \param name - Name of global to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuLibraryGetModule,
+ cuModuleGetGlobal*/
+ fn cuLibraryGetGlobal(
+ dptr: *mut cuda_types::CUdeviceptr,
bytes: *mut usize,
- library: CUlibrary,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetManaged(
- dptr: *mut CUdeviceptr,
+ library: cuda_types::CUlibrary,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a pointer to managed memory
+
+ Returns in \p *dptr and \p *bytes the base pointer and size of the managed memory with
+ name \p name for the requested library \p library. If no managed memory with the
+ requested name \p name exists, the call returns ::CUDA_ERROR_NOT_FOUND. One of the parameters
+ \p dptr or \p bytes (not both) can be NULL in which case it is ignored.
+ Note that managed memory for library \p library is shared across devices and is registered
+ when the library is loaded into atleast one context.
+
+ \note The API requires a CUDA context to be present and initialized on at least one device.
+ If no context is present, the call returns ::CUDA_ERROR_NOT_FOUND.
+
+ \param dptr - Returned pointer to the managed memory
+ \param bytes - Returned memory size in bytes
+ \param library - Library to retrieve managed memory from
+ \param name - Name of managed memory to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload*/
+ fn cuLibraryGetManaged(
+ dptr: *mut cuda_types::CUdeviceptr,
bytes: *mut usize,
- library: CUlibrary,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLibraryGetUnifiedFunction(
- fptr: *mut *mut ::std::os::raw::c_void,
- library: CUlibrary,
- symbol: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelGetAttribute(
- pi: *mut ::std::os::raw::c_int,
- attrib: CUfunction_attribute,
- kernel: CUkernel,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelSetAttribute(
- attrib: CUfunction_attribute,
- val: ::std::os::raw::c_int,
- kernel: CUkernel,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelSetCacheConfig(
- kernel: CUkernel,
- config: CUfunc_cache,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelGetName(name: *mut *const ::std::os::raw::c_char, hfunc: CUkernel) -> CUresult;
-}
-extern "C" {
- pub fn cuKernelGetParamInfo(
- kernel: CUkernel,
+ library: cuda_types::CUlibrary,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a pointer to a unified function
+
+ Returns in \p *fptr the function pointer to a unified function denoted by \p symbol.
+ If no unified function with name \p symbol exists, the call returns ::CUDA_ERROR_NOT_FOUND.
+ If there is no device with attribute ::CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS present in the system,
+ the call may return ::CUDA_ERROR_NOT_FOUND.
+
+ \param fptr - Returned pointer to a unified function
+ \param library - Library to retrieve function pointer memory from
+ \param symbol - Name of function pointer to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_FOUND
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload*/
+ fn cuLibraryGetUnifiedFunction(
+ fptr: *mut *mut ::core::ffi::c_void,
+ library: cuda_types::CUlibrary,
+ symbol: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about a kernel
+
+ Returns in \p *pi the integer value of the attribute \p attrib for the kernel
+ \p kernel for the requested device \p dev. The supported attributes are:
+ - ::CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK: The maximum number of threads
+ per block, beyond which a launch of the kernel would fail. This number
+ depends on both the kernel and the requested device.
+ - ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES: The size in bytes of
+ statically-allocated shared memory per block required by this kernel.
+ This does not include dynamically-allocated shared memory requested by
+ the user at runtime.
+ - ::CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES: The size in bytes of user-allocated
+ constant memory required by this kernel.
+ - ::CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES: The size in bytes of local memory
+ used by each thread of this kernel.
+ - ::CU_FUNC_ATTRIBUTE_NUM_REGS: The number of registers used by each thread
+ of this kernel.
+ - ::CU_FUNC_ATTRIBUTE_PTX_VERSION: The PTX virtual architecture version for
+ which the kernel was compiled. This value is the major PTX version * 10
+ + the minor PTX version, so a PTX version 1.3 function would return the
+ value 13. Note that this may return the undefined value of 0 for cubins
+ compiled prior to CUDA 3.0.
+ - ::CU_FUNC_ATTRIBUTE_BINARY_VERSION: The binary architecture version for
+ which the kernel was compiled. This value is the major binary
+ version * 10 + the minor binary version, so a binary version 1.3 function
+ would return the value 13. Note that this will return a value of 10 for
+ legacy cubins that do not have a properly-encoded binary architecture
+ version.
+ - ::CU_FUNC_CACHE_MODE_CA: The attribute to indicate whether the kernel has
+ been compiled with user specified option "-Xptxas --dlcm=ca" set.
+ - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: The maximum size in bytes of
+ dynamically-allocated shared memory.
+ - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: Preferred shared memory-L1
+ cache split ratio in percent of total shared memory.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET: If this attribute is set, the
+ kernel must launch with a valid cluster size specified.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED: Indicates whether
+ the function can be launched with non-portable cluster size. 1 is allowed,
+ 0 is disallowed. A non-portable cluster size may only function on the
+ specific SKUs the program is tested on. The launch might fail if the
+ program is run on a different hardware platform. CUDA API provides
+ cudaOccupancyMaxActiveClusters to assist with checking whether the desired
+ size can be launched on the current device. A portable cluster size is
+ guaranteed to be functional on all compute capabilities higher than the
+ target compute capability. The portable cluster size for sm_90 is 8 blocks
+ per cluster. This value may increase for future compute capabilities. The
+ specific hardware unit may support higher cluster sizes that’s not
+ guaranteed to be portable.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+
+ \note If another thread is trying to set the same attribute on the same device using
+ ::cuKernelSetAttribute() simultaneously, the attribute query will give the old or new
+ value depending on the interleavings chosen by the OS scheduler and memory consistency.
+
+ \param pi - Returned attribute value
+ \param attrib - Attribute requested
+ \param kernel - Kernel to query attribute of
+ \param dev - Device to query attribute of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuKernelSetAttribute,
+ ::cuLibraryGetKernel,
+ ::cuLaunchKernel,
+ ::cuKernelGetFunction,
+ ::cuLibraryGetModule,
+ ::cuModuleGetFunction,
+ ::cuFuncGetAttribute*/
+ fn cuKernelGetAttribute(
+ pi: *mut ::core::ffi::c_int,
+ attrib: cuda_types::CUfunction_attribute,
+ kernel: cuda_types::CUkernel,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets information about a kernel
+
+ This call sets the value of a specified attribute \p attrib on the kernel \p kernel
+ for the requested device \p dev to an integer value specified by \p val.
+ This function returns CUDA_SUCCESS if the new value of the attribute could be
+ successfully set. If the set fails, this call will return an error.
+ Not all attributes can have values set. Attempting to set a value on a read-only
+ attribute will result in an error (CUDA_ERROR_INVALID_VALUE)
+
+ Note that attributes set using ::cuFuncSetAttribute() will override the attribute
+ set by this API irrespective of whether the call to ::cuFuncSetAttribute() is made
+ before or after this API call. However, ::cuKernelGetAttribute() will always
+ return the attribute value set by this API.
+
+ Supported attributes are:
+ - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: This is the maximum size in bytes of
+ dynamically-allocated shared memory. The value should contain the requested
+ maximum size of dynamically-allocated shared memory. The sum of this value and
+ the function attribute ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES cannot exceed the
+ device attribute ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN.
+ The maximal size of requestable dynamic shared memory may differ by GPU
+ architecture.
+ - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: On devices where the L1
+ cache and shared memory use the same hardware resources, this sets the shared memory
+ carveout preference, in percent of the total shared memory.
+ See ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR
+ This is only a hint, and the driver can choose a different ratio if required to execute the function.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+
+ \note The API has stricter locking requirements in comparison to its legacy counterpart
+ ::cuFuncSetAttribute() due to device-wide semantics. If multiple threads are trying to
+ set the same attribute on the same device simultaneously, the attribute setting will depend
+ on the interleavings chosen by the OS scheduler and memory consistency.
+
+ \param attrib - Attribute requested
+ \param val - Value to set
+ \param kernel - Kernel to set attribute of
+ \param dev - Device to set attribute of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuKernelGetAttribute,
+ ::cuLibraryGetKernel,
+ ::cuLaunchKernel,
+ ::cuKernelGetFunction,
+ ::cuLibraryGetModule,
+ ::cuModuleGetFunction,
+ ::cuFuncSetAttribute*/
+ fn cuKernelSetAttribute(
+ attrib: cuda_types::CUfunction_attribute,
+ val: ::core::ffi::c_int,
+ kernel: cuda_types::CUkernel,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the preferred cache configuration for a device kernel.
+
+ On devices where the L1 cache and shared memory use the same hardware
+ resources, this sets through \p config the preferred cache configuration for
+ the device kernel \p kernel on the requested device \p dev. This is only a preference.
+ The driver will use the requested configuration if possible, but it is free to choose a different
+ configuration if required to execute \p kernel. Any context-wide preference
+ set via ::cuCtxSetCacheConfig() will be overridden by this per-kernel
+ setting.
+
+ Note that attributes set using ::cuFuncSetCacheConfig() will override the attribute
+ set by this API irrespective of whether the call to ::cuFuncSetCacheConfig() is made
+ before or after this API call.
+
+ This setting does nothing on devices where the size of the L1 cache and
+ shared memory are fixed.
+
+ Launching a kernel with a different preference than the most recent
+ preference setting may insert a device-side synchronization point.
+
+
+ The supported cache configurations are:
+ - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+
+ \note The API has stricter locking requirements in comparison to its legacy counterpart
+ ::cuFuncSetCacheConfig() due to device-wide semantics. If multiple threads are trying to
+ set a config on the same device simultaneously, the cache config setting will depend
+ on the interleavings chosen by the OS scheduler and memory consistency.
+
+ \param kernel - Kernel to configure cache for
+ \param config - Requested cache configuration
+ \param dev - Device to set attribute of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuLibraryLoadData,
+ ::cuLibraryLoadFromFile,
+ ::cuLibraryUnload,
+ ::cuLibraryGetKernel,
+ ::cuKernelGetFunction,
+ ::cuLibraryGetModule,
+ ::cuModuleGetFunction,
+ ::cuFuncSetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuLaunchKernel*/
+ fn cuKernelSetCacheConfig(
+ kernel: cuda_types::CUkernel,
+ config: cuda_types::CUfunc_cache,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the function name for a ::CUkernel handle
+
+ Returns in \p **name the function name associated with the kernel handle \p hfunc .
+ The function name is returned as a null-terminated string. The returned name is only
+ valid when the kernel handle is valid. If the library is unloaded or reloaded, one
+ must call the API again to get the updated name. This API may return a mangled name if
+ the function is not declared as having C linkage. If either \p **name or \p hfunc
+ is NULL, ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \param name - The returned name of the function
+ \param hfunc - The function handle to retrieve the name for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+*/
+ fn cuKernelGetName(
+ name: *mut *const ::core::ffi::c_char,
+ hfunc: cuda_types::CUkernel,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the offset and size of a kernel parameter in the device-side parameter layout
+
+ Queries the kernel parameter at \p paramIndex into \p kernel's list of parameters, and returns
+ in \p paramOffset and \p paramSize the offset and size, respectively, where the parameter
+ will reside in the device-side parameter layout. This information can be used to update kernel
+ node parameters from the device via ::cudaGraphKernelNodeSetParam() and
+ ::cudaGraphKernelNodeUpdatesApply(). \p paramIndex must be less than the number of parameters
+ that \p kernel takes. \p paramSize can be set to NULL if only the parameter offset is desired.
+
+ \param kernel - The kernel to query
+ \param paramIndex - The parameter index to query
+ \param paramOffset - Returns the offset into the device-side parameter layout at which the parameter resides
+ \param paramSize - Optionally returns the size of the parameter in the device-side parameter layout
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuFuncGetParamInfo*/
+ fn cuKernelGetParamInfo(
+ kernel: cuda_types::CUkernel,
paramIndex: usize,
paramOffset: *mut usize,
paramSize: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetInfo_v2(free: *mut usize, total: *mut usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAlloc_v2(dptr: *mut CUdeviceptr, bytesize: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocPitch_v2(
- dptr: *mut CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets free and total memory
+
+ Returns in \p *total the total amount of memory available to the the current context.
+ Returns in \p *free the amount of memory on the device that is free according to the OS.
+ CUDA is not guaranteed to be able to allocate all of the memory that the OS reports as free.
+ In a multi-tenet situation, free estimate returned is prone to race condition where
+ a new allocation/free done by a different process or a different thread in the same
+ process between the time when free memory was estimated and reported, will result in
+ deviation in free value reported and actual free memory.
+
+ The integrated GPU on Tegra shares memory with CPU and other component
+ of the SoC. The free and total values returned by the API excludes
+ the SWAP memory space maintained by the OS on some platforms.
+ The OS may move some of the memory pages into swap area as the GPU or
+ CPU allocate or access memory. See Tegra app note on how to calculate
+ total and free memory on Tegra.
+
+ \param free - Returned free memory in bytes
+ \param total - Returned total memory in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemGetInfo*/
+ fn cuMemGetInfo_v2(free: *mut usize, total: *mut usize) -> cuda_types::CUresult;
+ /** \brief Allocates device memory
+
+ Allocates \p bytesize bytes of linear memory on the device and returns in
+ \p *dptr a pointer to the allocated memory. The allocated memory is suitably
+ aligned for any kind of variable. The memory is not cleared. If \p bytesize
+ is 0, ::cuMemAlloc() returns ::CUDA_ERROR_INVALID_VALUE.
+
+ \param dptr - Returned device pointer
+ \param bytesize - Requested allocation size in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMalloc*/
+ fn cuMemAlloc_v2(
+ dptr: *mut cuda_types::CUdeviceptr,
+ bytesize: usize,
+ ) -> cuda_types::CUresult;
+ /** \brief Allocates pitched device memory
+
+ Allocates at least \p WidthInBytes * \p Height bytes of linear memory on
+ the device and returns in \p *dptr a pointer to the allocated memory. The
+ function may pad the allocation to ensure that corresponding pointers in
+ any given row will continue to meet the alignment requirements for
+ coalescing as the address is updated from row to row. \p ElementSizeBytes
+ specifies the size of the largest reads and writes that will be performed
+ on the memory range. \p ElementSizeBytes may be 4, 8 or 16 (since coalesced
+ memory transactions are not possible on other data sizes). If
+ \p ElementSizeBytes is smaller than the actual read/write size of a kernel,
+ the kernel will run correctly, but possibly at reduced speed. The pitch
+ returned in \p *pPitch by ::cuMemAllocPitch() is the width in bytes of the
+ allocation. The intended usage of pitch is as a separate parameter of the
+ allocation, used to compute addresses within the 2D array. Given the row
+ and column of an array element of type \b T, the address is computed as:
+ \code
+T* pElement = (T*)((char*)BaseAddress + Row * Pitch) + Column;
+ \endcode
+
+ The pitch returned by ::cuMemAllocPitch() is guaranteed to work with
+ ::cuMemcpy2D() under all circumstances. For allocations of 2D arrays, it is
+ recommended that programmers consider performing pitch allocations using
+ ::cuMemAllocPitch(). Due to alignment restrictions in the hardware, this is
+ especially true if the application will be performing 2D memory copies
+ between different regions of device memory (whether linear memory or CUDA
+ arrays).
+
+ The byte alignment of the pitch returned by ::cuMemAllocPitch() is guaranteed
+ to match or exceed the alignment requirement for texture binding with
+ ::cuTexRefSetAddress2D().
+
+ \param dptr - Returned device pointer
+ \param pPitch - Returned pitch of allocation in bytes
+ \param WidthInBytes - Requested allocation width in bytes
+ \param Height - Requested allocation height in rows
+ \param ElementSizeBytes - Size of largest reads/writes for range
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMallocPitch*/
+ fn cuMemAllocPitch_v2(
+ dptr: *mut cuda_types::CUdeviceptr,
pPitch: *mut usize,
WidthInBytes: usize,
Height: usize,
- ElementSizeBytes: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemFree_v2(dptr: CUdeviceptr) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetAddressRange_v2(
- pbase: *mut CUdeviceptr,
+ ElementSizeBytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Frees device memory
+
+ Frees the memory space pointed to by \p dptr, which must have been returned
+ by a previous call to one of the following memory allocation APIs - ::cuMemAlloc(),
+ ::cuMemAllocPitch(), ::cuMemAllocManaged(), ::cuMemAllocAsync(), ::cuMemAllocFromPoolAsync()
+
+ Note - This API will not perform any implict synchronization when the pointer was allocated with
+ ::cuMemAllocAsync or ::cuMemAllocFromPoolAsync. Callers must ensure that all accesses to the
+ pointer have completed before invoking ::cuMemFree. For best performance and memory reuse, users
+ should use ::cuMemFreeAsync to free memory allocated via the stream ordered memory allocator.
+
+ \param dptr - Pointer to memory to free
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemAllocManaged, ::cuMemAllocAsync, ::cuMemAllocFromPoolAsync,
+ ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned, ::cuMemcpy3D, ::cuMemcpy3DAsync,
+ ::cuMemcpyAtoA, ::cuMemcpyAtoD, ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync, ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA,
+ ::cuMemcpyHtoAAsync, ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc, ::cuMemFreeAsync,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaFree*/
+ fn cuMemFree_v2(dptr: cuda_types::CUdeviceptr) -> cuda_types::CUresult;
+ /** \brief Get information on memory allocations
+
+ Returns the base address in \p *pbase and size in \p *psize of the
+ allocation by ::cuMemAlloc() or ::cuMemAllocPitch() that contains the input
+ pointer \p dptr. Both parameters \p pbase and \p psize are optional. If one
+ of them is NULL, it is ignored.
+
+ \param pbase - Returned base address
+ \param psize - Returned size of device memory allocation
+ \param dptr - Device pointer to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_NOT_FOUND,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32*/
+ fn cuMemGetAddressRange_v2(
+ pbase: *mut cuda_types::CUdeviceptr,
psize: *mut usize,
- dptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocHost_v2(pp: *mut *mut ::std::os::raw::c_void, bytesize: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemFreeHost(p: *mut ::std::os::raw::c_void) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostAlloc(
- pp: *mut *mut ::std::os::raw::c_void,
+ dptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Allocates page-locked host memory
+
+ Allocates \p bytesize bytes of host memory that is page-locked and
+ accessible to the device. The driver tracks the virtual memory ranges
+ allocated with this function and automatically accelerates calls to
+ functions such as ::cuMemcpy(). Since the memory can be accessed directly by
+ the device, it can be read or written with much higher bandwidth than
+ pageable memory obtained with functions such as ::malloc().
+
+ On systems where ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES
+ is true, ::cuMemAllocHost may not page-lock the allocated memory.
+
+ Page-locking excessive amounts of memory with ::cuMemAllocHost() may degrade system
+ performance, since it reduces the amount of memory available to the system
+ for paging. As a result, this function is best used sparingly to allocate
+ staging areas for data exchange between host and device.
+
+ Note all host memory allocated using ::cuMemAllocHost() will automatically
+ be immediately accessible to all contexts on all devices which support unified
+ addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING).
+ The device pointer that may be used to access this host memory from those
+ contexts is always equal to the returned host pointer \p *pp.
+ See \ref CUDA_UNIFIED for additional details.
+
+ \param pp - Returned pointer to host memory
+ \param bytesize - Requested allocation size in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMallocHost*/
+ fn cuMemAllocHost_v2(
+ pp: *mut *mut ::core::ffi::c_void,
bytesize: usize,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostGetDevicePointer_v2(
- pdptr: *mut CUdeviceptr,
- p: *mut ::std::os::raw::c_void,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostGetFlags(
- pFlags: *mut ::std::os::raw::c_uint,
- p: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocManaged(
- dptr: *mut CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Frees page-locked host memory
+
+ Frees the memory space pointed to by \p p, which must have been returned by
+ a previous call to ::cuMemAllocHost().
+
+ \param p - Pointer to memory to free
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaFreeHost*/
+ fn cuMemFreeHost(p: *mut ::core::ffi::c_void) -> cuda_types::CUresult;
+ /** \brief Allocates page-locked host memory
+
+ Allocates \p bytesize bytes of host memory that is page-locked and accessible
+ to the device. The driver tracks the virtual memory ranges allocated with
+ this function and automatically accelerates calls to functions such as
+ ::cuMemcpyHtoD(). Since the memory can be accessed directly by the device,
+ it can be read or written with much higher bandwidth than pageable memory
+ obtained with functions such as ::malloc().
+
+ On systems where ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES
+ is true, ::cuMemHostAlloc may not page-lock the allocated memory.
+
+ Page-locking excessive amounts of memory may degrade system performance,
+ since it reduces the amount of memory available to the system for paging.
+ As a result, this function is best used sparingly to allocate staging areas
+ for data exchange between host and device.
+
+ The \p Flags parameter enables different options to be specified that
+ affect the allocation, as follows.
+
+ - ::CU_MEMHOSTALLOC_PORTABLE: The memory returned by this call will be
+ considered as pinned memory by all CUDA contexts, not just the one that
+ performed the allocation.
+
+ - ::CU_MEMHOSTALLOC_DEVICEMAP: Maps the allocation into the CUDA address
+ space. The device pointer to the memory may be obtained by calling
+ ::cuMemHostGetDevicePointer().
+
+ - ::CU_MEMHOSTALLOC_WRITECOMBINED: Allocates the memory as write-combined
+ (WC). WC memory can be transferred across the PCI Express bus more
+ quickly on some system configurations, but cannot be read efficiently by
+ most CPUs. WC memory is a good option for buffers that will be written by
+ the CPU and read by the GPU via mapped pinned memory or host->device
+ transfers.
+
+ All of these flags are orthogonal to one another: a developer may allocate
+ memory that is portable, mapped and/or write-combined with no restrictions.
+
+ The ::CU_MEMHOSTALLOC_DEVICEMAP flag may be specified on CUDA contexts for
+ devices that do not support mapped pinned memory. The failure is deferred
+ to ::cuMemHostGetDevicePointer() because the memory may be mapped into
+ other CUDA contexts via the ::CU_MEMHOSTALLOC_PORTABLE flag.
+
+ The memory allocated by this function must be freed with ::cuMemFreeHost().
+
+ Note all host memory allocated using ::cuMemHostAlloc() will automatically
+ be immediately accessible to all contexts on all devices which support unified
+ addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING).
+ Unless the flag ::CU_MEMHOSTALLOC_WRITECOMBINED is specified, the device pointer
+ that may be used to access this host memory from those contexts is always equal
+ to the returned host pointer \p *pp. If the flag ::CU_MEMHOSTALLOC_WRITECOMBINED
+ is specified, then the function ::cuMemHostGetDevicePointer() must be used
+ to query the device pointer, even if the context supports unified addressing.
+ See \ref CUDA_UNIFIED for additional details.
+
+ \param pp - Returned pointer to host memory
+ \param bytesize - Requested allocation size in bytes
+ \param Flags - Flags for allocation request
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaHostAlloc*/
+ fn cuMemHostAlloc(
+ pp: *mut *mut ::core::ffi::c_void,
bytesize: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceRegisterAsyncNotification(
- device: CUdevice,
- callbackFunc: CUasyncCallback,
- userData: *mut ::std::os::raw::c_void,
- callback: *mut CUasyncCallbackHandle,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceUnregisterAsyncNotification(
- device: CUdevice,
- callback: CUasyncCallbackHandle,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetByPCIBusId(
- dev: *mut CUdevice,
- pciBusId: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetPCIBusId(
- pciBusId: *mut ::std::os::raw::c_char,
- len: ::std::os::raw::c_int,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcGetEventHandle(pHandle: *mut CUipcEventHandle, event: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcOpenEventHandle(phEvent: *mut CUevent, handle: CUipcEventHandle) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcGetMemHandle(pHandle: *mut CUipcMemHandle, dptr: CUdeviceptr) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcOpenMemHandle_v2(
- pdptr: *mut CUdeviceptr,
- handle: CUipcMemHandle,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcCloseMemHandle(dptr: CUdeviceptr) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostRegister_v2(
- p: *mut ::std::os::raw::c_void,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Passes back device pointer of mapped pinned memory
+
+ Passes back the device pointer \p pdptr corresponding to the mapped, pinned
+ host buffer \p p allocated by ::cuMemHostAlloc.
+
+ ::cuMemHostGetDevicePointer() will fail if the ::CU_MEMHOSTALLOC_DEVICEMAP
+ flag was not specified at the time the memory was allocated, or if the
+ function is called on a GPU that does not support mapped pinned memory.
+
+ For devices that have a non-zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM, the memory
+ can also be accessed from the device using the host pointer \p p.
+ The device pointer returned by ::cuMemHostGetDevicePointer() may or may not
+ match the original host pointer \p p and depends on the devices visible to the
+ application. If all devices visible to the application have a non-zero value for the
+ device attribute, the device pointer returned by ::cuMemHostGetDevicePointer()
+ will match the original pointer \p p. If any device visible to the application
+ has a zero value for the device attribute, the device pointer returned by
+ ::cuMemHostGetDevicePointer() will not match the original host pointer \p p,
+ but it will be suitable for use on all devices provided Unified Virtual Addressing
+ is enabled. In such systems, it is valid to access the memory using either pointer
+ on devices that have a non-zero value for the device attribute. Note however that
+ such devices should access the memory using only one of the two pointers and not both.
+
+ \p Flags provides for future releases. For now, it must be set to 0.
+
+ \param pdptr - Returned device pointer
+ \param p - Host pointer
+ \param Flags - Options (must be 0)
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaHostGetDevicePointer*/
+ fn cuMemHostGetDevicePointer_v2(
+ pdptr: *mut cuda_types::CUdeviceptr,
+ p: *mut ::core::ffi::c_void,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Passes back flags that were used for a pinned allocation
+
+ Passes back the flags \p pFlags that were specified when allocating
+ the pinned host buffer \p p allocated by ::cuMemHostAlloc.
+
+ ::cuMemHostGetFlags() will fail if the pointer does not reside in
+ an allocation performed by ::cuMemAllocHost() or ::cuMemHostAlloc().
+
+ \param pFlags - Returned flags word
+ \param p - Host pointer
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuMemAllocHost,
+ ::cuMemHostAlloc,
+ ::cudaHostGetFlags*/
+ fn cuMemHostGetFlags(
+ pFlags: *mut ::core::ffi::c_uint,
+ p: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Allocates memory that will be automatically managed by the Unified Memory system
+
+ Allocates \p bytesize bytes of managed memory on the device and returns in
+ \p *dptr a pointer to the allocated memory. If the device doesn't support
+ allocating managed memory, ::CUDA_ERROR_NOT_SUPPORTED is returned. Support
+ for managed memory can be queried using the device attribute
+ ::CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY. The allocated memory is suitably
+ aligned for any kind of variable. The memory is not cleared. If \p bytesize
+ is 0, ::cuMemAllocManaged returns ::CUDA_ERROR_INVALID_VALUE. The pointer
+ is valid on the CPU and on all GPUs in the system that support managed memory.
+ All accesses to this pointer must obey the Unified Memory programming model.
+
+ \p flags specifies the default stream association for this allocation.
+ \p flags must be one of ::CU_MEM_ATTACH_GLOBAL or ::CU_MEM_ATTACH_HOST. If
+ ::CU_MEM_ATTACH_GLOBAL is specified, then this memory is accessible from
+ any stream on any device. If ::CU_MEM_ATTACH_HOST is specified, then the
+ allocation should not be accessed from devices that have a zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS; an explicit call to
+ ::cuStreamAttachMemAsync will be required to enable access on such devices.
+
+ If the association is later changed via ::cuStreamAttachMemAsync to
+ a single stream, the default association as specified during ::cuMemAllocManaged
+ is restored when that stream is destroyed. For __managed__ variables, the
+ default association is always ::CU_MEM_ATTACH_GLOBAL. Note that destroying a
+ stream is an asynchronous operation, and as a result, the change to default
+ association won't happen until all work in the stream has completed.
+
+ Memory allocated with ::cuMemAllocManaged should be released with ::cuMemFree.
+
+ Device memory oversubscription is possible for GPUs that have a non-zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. Managed memory on
+ such GPUs may be evicted from device memory to host memory at any time by the Unified
+ Memory driver in order to make room for other allocations.
+
+ In a system where all GPUs have a non-zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS, managed memory may not be populated when this
+ API returns and instead may be populated on access. In such systems, managed memory can
+ migrate to any processor's memory at any time. The Unified Memory driver will employ heuristics to
+ maintain data locality and prevent excessive page faults to the extent possible. The application
+ can also guide the driver about memory usage patterns via ::cuMemAdvise. The application
+ can also explicitly migrate memory to a desired processor's memory via
+ ::cuMemPrefetchAsync.
+
+ In a multi-GPU system where all of the GPUs have a zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS and all the GPUs have peer-to-peer support
+ with each other, the physical storage for managed memory is created on the GPU which is active
+ at the time ::cuMemAllocManaged is called. All other GPUs will reference the data at reduced
+ bandwidth via peer mappings over the PCIe bus. The Unified Memory driver does not migrate
+ memory among such GPUs.
+
+ In a multi-GPU system where not all GPUs have peer-to-peer support with each other and
+ where the value of the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS
+ is zero for at least one of those GPUs, the location chosen for physical storage of managed
+ memory is system-dependent.
+ - On Linux, the location chosen will be device memory as long as the current set of active
+ contexts are on devices that either have peer-to-peer support with each other or have a
+ non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ If there is an active context on a GPU that does not have a non-zero value for that device
+ attribute and it does not have peer-to-peer support with the other devices that have active
+ contexts on them, then the location for physical storage will be 'zero-copy' or host memory.
+ Note that this means that managed memory that is located in device memory is migrated to
+ host memory if a new context is created on a GPU that doesn't have a non-zero value for
+ the device attribute and does not support peer-to-peer with at least one of the other devices
+ that has an active context. This in turn implies that context creation may fail if there is
+ insufficient host memory to migrate all managed allocations.
+ - On Windows, the physical storage is always created in 'zero-copy' or host memory.
+ All GPUs will reference the data at reduced bandwidth over the PCIe bus. In these
+ circumstances, use of the environment variable CUDA_VISIBLE_DEVICES is recommended to
+ restrict CUDA to only use those GPUs that have peer-to-peer support.
+ Alternatively, users can also set CUDA_MANAGED_FORCE_DEVICE_ALLOC to a
+ non-zero value to force the driver to always use device memory for physical storage.
+ When this environment variable is set to a non-zero value, all contexts created in
+ that process on devices that support managed memory have to be peer-to-peer compatible
+ with each other. Context creation will fail if a context is created on a device that
+ supports managed memory and is not peer-to-peer compatible with any of the other
+ managed memory supporting devices on which contexts were previously created, even if
+ those contexts have been destroyed. These environment variables are described
+ in the CUDA programming guide under the "CUDA environment variables" section.
+ - On ARM, managed memory is not available on discrete gpu with Drive PX-2.
+
+ \param dptr - Returned device pointer
+ \param bytesize - Requested allocation size in bytes
+ \param flags - Must be one of ::CU_MEM_ATTACH_GLOBAL or ::CU_MEM_ATTACH_HOST
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cuDeviceGetAttribute, ::cuStreamAttachMemAsync,
+ ::cudaMallocManaged*/
+ fn cuMemAllocManaged(
+ dptr: *mut cuda_types::CUdeviceptr,
bytesize: usize,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostUnregister(p: *mut ::std::os::raw::c_void) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy_ptds(dst: CUdeviceptr, src: CUdeviceptr, ByteCount: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyPeer_ptds(
- dstDevice: CUdeviceptr,
- dstContext: CUcontext,
- srcDevice: CUdeviceptr,
- srcContext: CUcontext,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Registers a callback function to receive async notifications
+
+ Registers \p callbackFunc to receive async notifications.
+
+ The \p userData parameter is passed to the callback function at async notification time.
+ Likewise, \p callback is also passed to the callback function to distinguish between
+ multiple registered callbacks.
+
+ The callback function being registered should be designed to return quickly (~10ms).
+ Any long running tasks should be queued for execution on an application thread.
+
+ Callbacks may not call cuDeviceRegisterAsyncNotification or cuDeviceUnregisterAsyncNotification.
+ Doing so will result in ::CUDA_ERROR_NOT_PERMITTED. Async notification callbacks execute
+ in an undefined order and may be serialized.
+
+ Returns in \p *callback a handle representing the registered callback instance.
+
+ \param device - The device on which to register the callback
+ \param callbackFunc - The function to register as a callback
+ \param userData - A generic pointer to user data. This is passed into the callback function.
+ \param callback - A handle representing the registered callback instance
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_NOT_SUPPORTED
+ ::CUDA_ERROR_INVALID_DEVICE
+ ::CUDA_ERROR_INVALID_VALUE
+ ::CUDA_ERROR_NOT_PERMITTED
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cuDeviceUnregisterAsyncNotification*/
+ fn cuDeviceRegisterAsyncNotification(
+ device: cuda_types::CUdevice,
+ callbackFunc: cuda_types::CUasyncCallback,
+ userData: *mut ::core::ffi::c_void,
+ callback: *mut cuda_types::CUasyncCallbackHandle,
+ ) -> cuda_types::CUresult;
+ /** \brief Unregisters an async notification callback
+
+ Unregisters \p callback so that the corresponding callback function will stop receiving
+ async notifications.
+
+ \param device - The device from which to remove \p callback.
+ \param callback - The callback instance to unregister from receiving async notifications.
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_NOT_SUPPORTED
+ ::CUDA_ERROR_INVALID_DEVICE
+ ::CUDA_ERROR_INVALID_VALUE
+ ::CUDA_ERROR_NOT_PERMITTED
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cuDeviceRegisterAsyncNotification*/
+ fn cuDeviceUnregisterAsyncNotification(
+ device: cuda_types::CUdevice,
+ callback: cuda_types::CUasyncCallbackHandle,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a handle to a compute device
+
+ Returns in \p *device a device handle given a PCI bus ID string.
+
+ \param dev - Returned device handle
+
+ \param pciBusId - String in one of the following forms:
+ [domain]:[bus]:[device].[function]
+ [domain]:[bus]:[device]
+ [bus]:[device].[function]
+ where \p domain, \p bus, \p device, and \p function are all hexadecimal values
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGet,
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetPCIBusId,
+ ::cudaDeviceGetByPCIBusId*/
+ fn cuDeviceGetByPCIBusId(
+ dev: *mut cuda_types::CUdevice,
+ pciBusId: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a PCI Bus Id string for the device
+
+ Returns an ASCII string identifying the device \p dev in the NULL-terminated
+ string pointed to by \p pciBusId. \p len specifies the maximum length of the
+ string that may be returned.
+
+ \param pciBusId - Returned identifier string for the device in the following format
+ [domain]:[bus]:[device].[function]
+ where \p domain, \p bus, \p device, and \p function are all hexadecimal values.
+ pciBusId should be large enough to store 13 characters including the NULL-terminator.
+
+ \param len - Maximum length of string to store in \p name
+
+ \param dev - Device to get identifier string for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuDeviceGet,
+ ::cuDeviceGetAttribute,
+ ::cuDeviceGetByPCIBusId,
+ ::cudaDeviceGetPCIBusId*/
+ fn cuDeviceGetPCIBusId(
+ pciBusId: *mut ::core::ffi::c_char,
+ len: ::core::ffi::c_int,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets an interprocess handle for a previously allocated event
+
+ Takes as input a previously allocated event. This event must have been
+ created with the ::CU_EVENT_INTERPROCESS and ::CU_EVENT_DISABLE_TIMING
+ flags set. This opaque handle may be copied into other processes and
+ opened with ::cuIpcOpenEventHandle to allow efficient hardware
+ synchronization between GPU work in different processes.
+
+ After the event has been opened in the importing process,
+ ::cuEventRecord, ::cuEventSynchronize, ::cuStreamWaitEvent and
+ ::cuEventQuery may be used in either process. Performing operations
+ on the imported event after the exported event has been freed
+ with ::cuEventDestroy will result in undefined behavior.
+
+ IPC functionality is restricted to devices with support for unified
+ addressing on Linux and Windows operating systems.
+ IPC functionality on Windows is restricted to GPUs in TCC mode
+ Users can test their device for IPC functionality by calling
+ ::cuapiDeviceGetAttribute with ::CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED
+
+ \param pHandle - Pointer to a user allocated CUipcEventHandle
+ in which to return the opaque event handle
+ \param event - Event allocated with ::CU_EVENT_INTERPROCESS and
+ ::CU_EVENT_DISABLE_TIMING flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_MAP_FAILED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuEventCreate,
+ ::cuEventDestroy,
+ ::cuEventSynchronize,
+ ::cuEventQuery,
+ ::cuStreamWaitEvent,
+ ::cuIpcOpenEventHandle,
+ ::cuIpcGetMemHandle,
+ ::cuIpcOpenMemHandle,
+ ::cuIpcCloseMemHandle,
+ ::cudaIpcGetEventHandle*/
+ fn cuIpcGetEventHandle(
+ pHandle: *mut cuda_types::CUipcEventHandle,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Opens an interprocess event handle for use in the current process
+
+ Opens an interprocess event handle exported from another process with
+ ::cuIpcGetEventHandle. This function returns a ::CUevent that behaves like
+ a locally created event with the ::CU_EVENT_DISABLE_TIMING flag specified.
+ This event must be freed with ::cuEventDestroy.
+
+ Performing operations on the imported event after the exported event has
+ been freed with ::cuEventDestroy will result in undefined behavior.
+
+ IPC functionality is restricted to devices with support for unified
+ addressing on Linux and Windows operating systems.
+ IPC functionality on Windows is restricted to GPUs in TCC mode
+ Users can test their device for IPC functionality by calling
+ ::cuapiDeviceGetAttribute with ::CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED
+
+ \param phEvent - Returns the imported event
+ \param handle - Interprocess handle to open
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_MAP_FAILED,
+ ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuEventCreate,
+ ::cuEventDestroy,
+ ::cuEventSynchronize,
+ ::cuEventQuery,
+ ::cuStreamWaitEvent,
+ ::cuIpcGetEventHandle,
+ ::cuIpcGetMemHandle,
+ ::cuIpcOpenMemHandle,
+ ::cuIpcCloseMemHandle,
+ ::cudaIpcOpenEventHandle*/
+ fn cuIpcOpenEventHandle(
+ phEvent: *mut cuda_types::CUevent,
+ handle: cuda_types::CUipcEventHandle,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets an interprocess memory handle for an existing device memory
+ allocation
+
+ Takes a pointer to the base of an existing device memory allocation created
+ with ::cuMemAlloc and exports it for use in another process. This is a
+ lightweight operation and may be called multiple times on an allocation
+ without adverse effects.
+
+ If a region of memory is freed with ::cuMemFree and a subsequent call
+ to ::cuMemAlloc returns memory with the same device address,
+ ::cuIpcGetMemHandle will return a unique handle for the
+ new memory.
+
+ IPC functionality is restricted to devices with support for unified
+ addressing on Linux and Windows operating systems.
+ IPC functionality on Windows is restricted to GPUs in TCC mode
+ Users can test their device for IPC functionality by calling
+ ::cuapiDeviceGetAttribute with ::CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED
+
+ \param pHandle - Pointer to user allocated ::CUipcMemHandle to return
+ the handle in.
+ \param dptr - Base pointer to previously allocated device memory
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_MAP_FAILED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuMemAlloc,
+ ::cuMemFree,
+ ::cuIpcGetEventHandle,
+ ::cuIpcOpenEventHandle,
+ ::cuIpcOpenMemHandle,
+ ::cuIpcCloseMemHandle,
+ ::cudaIpcGetMemHandle*/
+ fn cuIpcGetMemHandle(
+ pHandle: *mut cuda_types::CUipcMemHandle,
+ dptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Opens an interprocess memory handle exported from another process
+ and returns a device pointer usable in the local process.
+
+ Maps memory exported from another process with ::cuIpcGetMemHandle into
+ the current device address space. For contexts on different devices
+ ::cuIpcOpenMemHandle can attempt to enable peer access between the
+ devices as if the user called ::cuCtxEnablePeerAccess. This behavior is
+ controlled by the ::CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS flag.
+ ::cuDeviceCanAccessPeer can determine if a mapping is possible.
+
+ Contexts that may open ::CUipcMemHandles are restricted in the following way.
+ ::CUipcMemHandles from each ::CUdevice in a given process may only be opened
+ by one ::CUcontext per ::CUdevice per other process.
+
+ If the memory handle has already been opened by the current context, the
+ reference count on the handle is incremented by 1 and the existing device pointer
+ is returned.
+
+ Memory returned from ::cuIpcOpenMemHandle must be freed with
+ ::cuIpcCloseMemHandle.
+
+ Calling ::cuMemFree on an exported memory region before calling
+ ::cuIpcCloseMemHandle in the importing context will result in undefined
+ behavior.
+
+ IPC functionality is restricted to devices with support for unified
+ addressing on Linux and Windows operating systems.
+ IPC functionality on Windows is restricted to GPUs in TCC mode
+ Users can test their device for IPC functionality by calling
+ ::cuapiDeviceGetAttribute with ::CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED
+
+ \param pdptr - Returned device pointer
+ \param handle - ::CUipcMemHandle to open
+ \param Flags - Flags for this operation. Must be specified as ::CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_MAP_FAILED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_TOO_MANY_PEERS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \note No guarantees are made about the address returned in \p *pdptr.
+ In particular, multiple processes may not receive the same address for the same \p handle.
+
+ \sa
+ ::cuMemAlloc,
+ ::cuMemFree,
+ ::cuIpcGetEventHandle,
+ ::cuIpcOpenEventHandle,
+ ::cuIpcGetMemHandle,
+ ::cuIpcCloseMemHandle,
+ ::cuCtxEnablePeerAccess,
+ ::cuDeviceCanAccessPeer,
+ ::cudaIpcOpenMemHandle*/
+ fn cuIpcOpenMemHandle_v2(
+ pdptr: *mut cuda_types::CUdeviceptr,
+ handle: cuda_types::CUipcMemHandle,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Attempts to close memory mapped with ::cuIpcOpenMemHandle
+
+ Decrements the reference count of the memory returned by ::cuIpcOpenMemHandle by 1.
+ When the reference count reaches 0, this API unmaps the memory. The original allocation
+ in the exporting process as well as imported mappings in other processes
+ will be unaffected.
+
+ Any resources used to enable peer access will be freed if this is the
+ last mapping using them.
+
+ IPC functionality is restricted to devices with support for unified
+ addressing on Linux and Windows operating systems.
+ IPC functionality on Windows is restricted to GPUs in TCC mode
+ Users can test their device for IPC functionality by calling
+ ::cuapiDeviceGetAttribute with ::CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED
+
+ \param dptr - Device pointer returned by ::cuIpcOpenMemHandle
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_MAP_FAILED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \sa
+ ::cuMemAlloc,
+ ::cuMemFree,
+ ::cuIpcGetEventHandle,
+ ::cuIpcOpenEventHandle,
+ ::cuIpcGetMemHandle,
+ ::cuIpcOpenMemHandle,
+ ::cudaIpcCloseMemHandle*/
+ fn cuIpcCloseMemHandle(dptr: cuda_types::CUdeviceptr) -> cuda_types::CUresult;
+ /** \brief Registers an existing host memory range for use by CUDA
+
+ Page-locks the memory range specified by \p p and \p bytesize and maps it
+ for the device(s) as specified by \p Flags. This memory range also is added
+ to the same tracking mechanism as ::cuMemHostAlloc to automatically accelerate
+ calls to functions such as ::cuMemcpyHtoD(). Since the memory can be accessed
+ directly by the device, it can be read or written with much higher bandwidth
+ than pageable memory that has not been registered. Page-locking excessive
+ amounts of memory may degrade system performance, since it reduces the amount
+ of memory available to the system for paging. As a result, this function is
+ best used sparingly to register staging areas for data exchange between
+ host and device.
+
+ On systems where ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES
+ is true, ::cuMemHostRegister will not page-lock the memory range specified
+ by \p ptr but only populate unpopulated pages.
+
+ The \p Flags parameter enables different options to be specified that
+ affect the allocation, as follows.
+
+ - ::CU_MEMHOSTREGISTER_PORTABLE: The memory returned by this call will be
+ considered as pinned memory by all CUDA contexts, not just the one that
+ performed the allocation.
+
+ - ::CU_MEMHOSTREGISTER_DEVICEMAP: Maps the allocation into the CUDA address
+ space. The device pointer to the memory may be obtained by calling
+ ::cuMemHostGetDevicePointer().
+
+ - ::CU_MEMHOSTREGISTER_IOMEMORY: The pointer is treated as pointing to some
+ I/O memory space, e.g. the PCI Express resource of a 3rd party device.
+
+ - ::CU_MEMHOSTREGISTER_READ_ONLY: The pointer is treated as pointing to memory
+ that is considered read-only by the device. On platforms without
+ ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, this flag is
+ required in order to register memory mapped to the CPU as read-only. Support
+ for the use of this flag can be queried from the device attribute
+ ::CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED. Using this flag with
+ a current context associated with a device that does not have this attribute
+ set will cause ::cuMemHostRegister to error with CUDA_ERROR_NOT_SUPPORTED.
+
+ All of these flags are orthogonal to one another: a developer may page-lock
+ memory that is portable or mapped with no restrictions.
+
+ The ::CU_MEMHOSTREGISTER_DEVICEMAP flag may be specified on CUDA contexts for
+ devices that do not support mapped pinned memory. The failure is deferred
+ to ::cuMemHostGetDevicePointer() because the memory may be mapped into
+ other CUDA contexts via the ::CU_MEMHOSTREGISTER_PORTABLE flag.
+
+ For devices that have a non-zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM, the memory
+ can also be accessed from the device using the host pointer \p p.
+ The device pointer returned by ::cuMemHostGetDevicePointer() may or may not
+ match the original host pointer \p ptr and depends on the devices visible to the
+ application. If all devices visible to the application have a non-zero value for the
+ device attribute, the device pointer returned by ::cuMemHostGetDevicePointer()
+ will match the original pointer \p ptr. If any device visible to the application
+ has a zero value for the device attribute, the device pointer returned by
+ ::cuMemHostGetDevicePointer() will not match the original host pointer \p ptr,
+ but it will be suitable for use on all devices provided Unified Virtual Addressing
+ is enabled. In such systems, it is valid to access the memory using either pointer
+ on devices that have a non-zero value for the device attribute. Note however that
+ such devices should access the memory using only of the two pointers and not both.
+
+ The memory page-locked by this function must be unregistered with
+ ::cuMemHostUnregister().
+
+ \param p - Host pointer to memory to page-lock
+ \param bytesize - Size in bytes of the address range to page-lock
+ \param Flags - Flags for allocation request
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_HOST_MEMORY_ALREADY_REGISTERED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa
+ ::cuMemHostUnregister,
+ ::cuMemHostGetFlags,
+ ::cuMemHostGetDevicePointer,
+ ::cudaHostRegister*/
+ fn cuMemHostRegister_v2(
+ p: *mut ::core::ffi::c_void,
+ bytesize: usize,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Unregisters a memory range that was registered with cuMemHostRegister.
+
+ Unmaps the memory range whose base address is specified by \p p, and makes
+ it pageable again.
+
+ The base address must be the same one specified to ::cuMemHostRegister().
+
+ \param p - Host pointer to memory to unregister
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_HOST_MEMORY_NOT_REGISTERED,
+ \notefnerr
+
+ \sa
+ ::cuMemHostRegister,
+ ::cudaHostUnregister*/
+ fn cuMemHostUnregister(p: *mut ::core::ffi::c_void) -> cuda_types::CUresult;
+ /** \brief Copies memory
+
+ Copies data between two pointers.
+ \p dst and \p src are base pointers of the destination and source, respectively.
+ \p ByteCount specifies the number of bytes to copy.
+ Note that this function infers the type of the transfer (host to host, host to
+ device, device to device, or device to host) from the pointer values. This
+ function is only allowed in contexts which support unified addressing.
+
+ \param dst - Destination unified virtual address space pointer
+ \param src - Source unified virtual address space pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy,
+ ::cudaMemcpyToSymbol,
+ ::cudaMemcpyFromSymbol*/
+ fn cuMemcpy_ptds(
+ dst: cuda_types::CUdeviceptr,
+ src: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoD_v2_ptds(
- dstDevice: CUdeviceptr,
- srcHost: *const ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies device memory between two contexts
+
+ Copies from device memory in one context to device memory in another
+ context. \p dstDevice is the base device pointer of the destination memory
+ and \p dstContext is the destination context. \p srcDevice is the base
+ device pointer of the source memory and \p srcContext is the source pointer.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param dstContext - Destination context
+ \param srcDevice - Source device pointer
+ \param srcContext - Source context
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuMemcpyDtoD, ::cuMemcpy3DPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ ::cuMemcpy3DPeerAsync,
+ ::cudaMemcpyPeer*/
+ fn cuMemcpyPeer_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ dstContext: cuda_types::CUcontext,
+ srcDevice: cuda_types::CUdeviceptr,
+ srcContext: cuda_types::CUcontext,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoH_v2_ptds(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Host to Device
+
+ Copies from host memory to device memory. \p dstDevice and \p srcHost are
+ the base addresses of the destination and source, respectively. \p ByteCount
+ specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param srcHost - Source host pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy,
+ ::cudaMemcpyToSymbol*/
+ fn cuMemcpyHtoD_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoD_v2_ptds(
- dstDevice: CUdeviceptr,
- srcDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Device to Host
+
+ Copies from device to host memory. \p dstHost and \p srcDevice specify the
+ base pointers of the destination and source, respectively. \p ByteCount
+ specifies the number of bytes to copy.
+
+ \param dstHost - Destination host pointer
+ \param srcDevice - Source device pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy,
+ ::cudaMemcpyFromSymbol*/
+ fn cuMemcpyDtoH_v2_ptds(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoA_v2_ptds(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Device to Device
+
+ Copies from device memory to device memory. \p dstDevice and \p srcDevice
+ are the base pointers of the destination and source, respectively.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param srcDevice - Source device pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy,
+ ::cudaMemcpyToSymbol,
+ ::cudaMemcpyFromSymbol*/
+ fn cuMemcpyDtoD_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
+ ByteCount: usize,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Device to Array
+
+ Copies from device memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ specify the CUDA array handle and starting index of the destination data.
+ \p srcDevice specifies the base pointer of the source. \p ByteCount
+ specifies the number of bytes to copy.
+
+ \param dstArray - Destination array
+ \param dstOffset - Offset in bytes of destination array
+ \param srcDevice - Source device pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpyToArray*/
+ fn cuMemcpyDtoA_v2_ptds(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcDevice: CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoD_v2_ptds(
- dstDevice: CUdeviceptr,
- srcArray: CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Array to Device
+
+ Copies from one 1D CUDA array to device memory. \p dstDevice specifies the
+ base pointer of the destination and must be naturally aligned with the CUDA
+ array elements. \p srcArray and \p srcOffset specify the CUDA array handle
+ and the offset in bytes into the array where the copy is to begin.
+ \p ByteCount specifies the number of bytes to copy and must be evenly
+ divisible by the array element size.
+
+ \param dstDevice - Destination device pointer
+ \param srcArray - Source array
+ \param srcOffset - Offset in bytes of source array
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpyFromArray*/
+ fn cuMemcpyAtoD_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoA_v2_ptds(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Host to Array
+
+ Copies from host memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ specify the CUDA array handle and starting offset in bytes of the destination
+ data. \p pSrc specifies the base address of the source. \p ByteCount specifies
+ the number of bytes to copy.
+
+ \param dstArray - Destination array
+ \param dstOffset - Offset in bytes of destination array
+ \param srcHost - Source host pointer
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpyToArray*/
+ fn cuMemcpyHtoA_v2_ptds(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcHost: *const ::std::os::raw::c_void,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoH_v2_ptds(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Array to Host
+
+ Copies from one 1D CUDA array to host memory. \p dstHost specifies the base
+ pointer of the destination. \p srcArray and \p srcOffset specify the CUDA
+ array handle and starting offset in bytes of the source data.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstHost - Destination device pointer
+ \param srcArray - Source array
+ \param srcOffset - Offset in bytes of source array
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpyFromArray*/
+ fn cuMemcpyAtoH_v2_ptds(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoA_v2_ptds(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Array to Array
+
+ Copies from one 1D CUDA array to another. \p dstArray and \p srcArray
+ specify the handles of the destination and source CUDA arrays for the copy,
+ respectively. \p dstOffset and \p srcOffset specify the destination and
+ source offsets in bytes into the CUDA arrays. \p ByteCount is the number of
+ bytes to be copied. The size of the elements in the CUDA arrays need not be
+ the same format, but the elements must be the same size; and count must be
+ evenly divisible by that size.
+
+ \param dstArray - Destination array
+ \param dstOffset - Offset in bytes of destination array
+ \param srcArray - Source array
+ \param srcOffset - Offset in bytes of source array
+ \param ByteCount - Size of memory copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpyArrayToArray*/
+ fn cuMemcpyAtoA_v2_ptds(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcArray: CUarray,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2D_v2_ptds(pCopy: *const CUDA_MEMCPY2D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DUnaligned_v2_ptds(pCopy: *const CUDA_MEMCPY2D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3D_v2_ptds(pCopy: *const CUDA_MEMCPY3D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DPeer_ptds(pCopy: *const CUDA_MEMCPY3D_PEER) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAsync_ptsz(
- dst: CUdeviceptr,
- src: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory for 2D arrays
+
+ Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ The ::CUDA_MEMCPY2D structure is defined as:
+
+ \code
+typedef struct CUDA_MEMCPY2D_st {
+unsigned int srcXInBytes, srcY;
+CUmemorytype srcMemoryType;
+const void *srcHost;
+CUdeviceptr srcDevice;
+CUarray srcArray;
+unsigned int srcPitch;
+
+unsigned int dstXInBytes, dstY;
+CUmemorytype dstMemoryType;
+void *dstHost;
+CUdeviceptr dstDevice;
+CUarray dstArray;
+unsigned int dstPitch;
+
+unsigned int WidthInBytes;
+unsigned int Height;
+} CUDA_MEMCPY2D;
+ \endcode
+ where:
+ - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ source and destination, respectively; ::CUmemorytype_enum is defined as:
+
+ \code
+typedef enum CUmemorytype_enum {
+CU_MEMORYTYPE_HOST = 0x01,
+CU_MEMORYTYPE_DEVICE = 0x02,
+CU_MEMORYTYPE_ARRAY = 0x03,
+CU_MEMORYTYPE_UNIFIED = 0x04
+} CUmemorytype;
+ \endcode
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::srcArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ specify the (host) base address of the source data and the bytes per row to
+ apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ specify the (device) base address of the source data and the bytes per row
+ to apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ specify the (host) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::dstArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ specify the (device) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ ignored.
+
+ - ::srcXInBytes and ::srcY specify the base address of the source data for
+ the copy.
+
+ \par
+ For host pointers, the starting address is
+ \code
+void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::dstXInBytes and ::dstY specify the base address of the destination data
+ for the copy.
+
+ \par
+ For host pointers, the base address is
+ \code
+void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ the 2D copy being performed.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+
+ \par
+ ::cuMemcpy2D() returns an error if any pitch is greater than the maximum
+ allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ (device to device, CUDA array to device, CUDA array to CUDA array),
+ ::cuMemcpy2D() may fail for pitches not computed by ::cuMemAllocPitch().
+ ::cuMemcpy2DUnaligned() does not have this restriction, but may run
+ significantly slower in the cases where ::cuMemcpy2D() would have returned
+ an error code.
+
+ \param pCopy - Parameters for the memory copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy2D,
+ ::cudaMemcpy2DToArray,
+ ::cudaMemcpy2DFromArray*/
+ fn cuMemcpy2D_v2_ptds(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory for 2D arrays
+
+ Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ The ::CUDA_MEMCPY2D structure is defined as:
+
+ \code
+typedef struct CUDA_MEMCPY2D_st {
+unsigned int srcXInBytes, srcY;
+CUmemorytype srcMemoryType;
+const void *srcHost;
+CUdeviceptr srcDevice;
+CUarray srcArray;
+unsigned int srcPitch;
+unsigned int dstXInBytes, dstY;
+CUmemorytype dstMemoryType;
+void *dstHost;
+CUdeviceptr dstDevice;
+CUarray dstArray;
+unsigned int dstPitch;
+unsigned int WidthInBytes;
+unsigned int Height;
+} CUDA_MEMCPY2D;
+ \endcode
+ where:
+ - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ source and destination, respectively; ::CUmemorytype_enum is defined as:
+
+ \code
+typedef enum CUmemorytype_enum {
+CU_MEMORYTYPE_HOST = 0x01,
+CU_MEMORYTYPE_DEVICE = 0x02,
+CU_MEMORYTYPE_ARRAY = 0x03,
+CU_MEMORYTYPE_UNIFIED = 0x04
+} CUmemorytype;
+ \endcode
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::srcArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ specify the (host) base address of the source data and the bytes per row to
+ apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ specify the (device) base address of the source data and the bytes per row
+ to apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::dstArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ specify the (host) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ specify the (device) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ ignored.
+
+ - ::srcXInBytes and ::srcY specify the base address of the source data for
+ the copy.
+
+ \par
+ For host pointers, the starting address is
+ \code
+void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::dstXInBytes and ::dstY specify the base address of the destination data
+ for the copy.
+
+ \par
+ For host pointers, the base address is
+ \code
+void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ the 2D copy being performed.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+
+ \par
+ ::cuMemcpy2D() returns an error if any pitch is greater than the maximum
+ allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ (device to device, CUDA array to device, CUDA array to CUDA array),
+ ::cuMemcpy2D() may fail for pitches not computed by ::cuMemAllocPitch().
+ ::cuMemcpy2DUnaligned() does not have this restriction, but may run
+ significantly slower in the cases where ::cuMemcpy2D() would have returned
+ an error code.
+
+ \param pCopy - Parameters for the memory copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy2D,
+ ::cudaMemcpy2DToArray,
+ ::cudaMemcpy2DFromArray*/
+ fn cuMemcpy2DUnaligned_v2_ptds(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory for 3D arrays
+
+ Perform a 3D memory copy according to the parameters specified in
+ \p pCopy. The ::CUDA_MEMCPY3D structure is defined as:
+
+ \code
+typedef struct CUDA_MEMCPY3D_st {
+
+unsigned int srcXInBytes, srcY, srcZ;
+unsigned int srcLOD;
+CUmemorytype srcMemoryType;
+const void *srcHost;
+CUdeviceptr srcDevice;
+CUarray srcArray;
+unsigned int srcPitch; // ignored when src is array
+unsigned int srcHeight; // ignored when src is array; may be 0 if Depth==1
+
+unsigned int dstXInBytes, dstY, dstZ;
+unsigned int dstLOD;
+CUmemorytype dstMemoryType;
+void *dstHost;
+CUdeviceptr dstDevice;
+CUarray dstArray;
+unsigned int dstPitch; // ignored when dst is array
+unsigned int dstHeight; // ignored when dst is array; may be 0 if Depth==1
+
+unsigned int WidthInBytes;
+unsigned int Height;
+unsigned int Depth;
+} CUDA_MEMCPY3D;
+ \endcode
+ where:
+ - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ source and destination, respectively; ::CUmemorytype_enum is defined as:
+
+ \code
+typedef enum CUmemorytype_enum {
+CU_MEMORYTYPE_HOST = 0x01,
+CU_MEMORYTYPE_DEVICE = 0x02,
+CU_MEMORYTYPE_ARRAY = 0x03,
+CU_MEMORYTYPE_UNIFIED = 0x04
+} CUmemorytype;
+ \endcode
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::srcArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost, ::srcPitch and
+ ::srcHeight specify the (host) base address of the source data, the bytes
+ per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice, ::srcPitch and
+ ::srcHeight specify the (device) base address of the source data, the bytes
+ per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ handle of the source data. ::srcHost, ::srcDevice, ::srcPitch and
+ ::srcHeight are ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::dstArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ specify the (host) base address of the destination data, the bytes per row,
+ and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ specify the (device) base address of the destination data, the bytes per
+ row, and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ handle of the destination data. ::dstHost, ::dstDevice, ::dstPitch and
+ ::dstHeight are ignored.
+
+ - ::srcXInBytes, ::srcY and ::srcZ specify the base address of the source
+ data for the copy.
+
+ \par
+ For host pointers, the starting address is
+ \code
+void* Start = (void*)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ element size.
+
+ - dstXInBytes, ::dstY and ::dstZ specify the base address of the
+ destination data for the copy.
+
+ \par
+ For host pointers, the base address is
+ \code
+void* dstStart = (void*)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::WidthInBytes, ::Height and ::Depth specify the width (in bytes), height
+ and depth of the 3D copy being performed.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+ - If specified, ::srcHeight must be greater than or equal to ::Height +
+ ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+
+ \par
+ ::cuMemcpy3D() returns an error if any pitch is greater than the maximum
+ allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH).
+
+ The ::srcLOD and ::dstLOD members of the ::CUDA_MEMCPY3D structure must be
+ set to 0.
+
+ \param pCopy - Parameters for the memory copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMemcpy3D*/
+ fn cuMemcpy3D_v2_ptds(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory between contexts
+
+ Perform a 3D memory copy according to the parameters specified in
+ \p pCopy. See the definition of the ::CUDA_MEMCPY3D_PEER structure
+ for documentation of its parameters.
+
+ \param pCopy - Parameters for the memory copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_sync
+
+ \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ ::cuMemcpy3DPeerAsync,
+ ::cudaMemcpy3DPeer*/
+ fn cuMemcpy3DPeer_ptds(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D_PEER,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory asynchronously
+
+ Copies data between two pointers.
+ \p dst and \p src are base pointers of the destination and source, respectively.
+ \p ByteCount specifies the number of bytes to copy.
+ Note that this function infers the type of the transfer (host to host, host to
+ device, device to device, or device to host) from the pointer values. This
+ function is only allowed in contexts which support unified addressing.
+
+ \param dst - Destination unified virtual address space pointer
+ \param src - Source unified virtual address space pointer
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyAsync,
+ ::cudaMemcpyToSymbolAsync,
+ ::cudaMemcpyFromSymbolAsync*/
+ fn cuMemcpyAsync_ptsz(
+ dst: cuda_types::CUdeviceptr,
+ src: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyPeerAsync_ptsz(
- dstDevice: CUdeviceptr,
- dstContext: CUcontext,
- srcDevice: CUdeviceptr,
- srcContext: CUcontext,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies device memory between two contexts asynchronously.
+
+ Copies from device memory in one context to device memory in another
+ context. \p dstDevice is the base device pointer of the destination memory
+ and \p dstContext is the destination context. \p srcDevice is the base
+ device pointer of the source memory and \p srcContext is the source pointer.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param dstContext - Destination context
+ \param srcDevice - Source device pointer
+ \param srcContext - Source context
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpy3DPeer, ::cuMemcpyDtoDAsync,
+ ::cuMemcpy3DPeerAsync,
+ ::cudaMemcpyPeerAsync*/
+ fn cuMemcpyPeerAsync_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ dstContext: cuda_types::CUcontext,
+ srcDevice: cuda_types::CUdeviceptr,
+ srcContext: cuda_types::CUcontext,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoDAsync_v2_ptsz(
- dstDevice: CUdeviceptr,
- srcHost: *const ::std::os::raw::c_void,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Host to Device
+
+ Copies from host memory to device memory. \p dstDevice and \p srcHost are
+ the base addresses of the destination and source, respectively. \p ByteCount
+ specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param srcHost - Source host pointer
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyAsync,
+ ::cudaMemcpyToSymbolAsync*/
+ fn cuMemcpyHtoDAsync_v2_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoHAsync_v2_ptsz(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Device to Host
+
+ Copies from device to host memory. \p dstHost and \p srcDevice specify the
+ base pointers of the destination and source, respectively. \p ByteCount
+ specifies the number of bytes to copy.
+
+ \param dstHost - Destination host pointer
+ \param srcDevice - Source device pointer
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyAsync,
+ ::cudaMemcpyFromSymbolAsync*/
+ fn cuMemcpyDtoHAsync_v2_ptsz(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoDAsync_v2_ptsz(
- dstDevice: CUdeviceptr,
- srcDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Device to Device
+
+ Copies from device memory to device memory. \p dstDevice and \p srcDevice
+ are the base pointers of the destination and source, respectively.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstDevice - Destination device pointer
+ \param srcDevice - Source device pointer
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyAsync,
+ ::cudaMemcpyToSymbolAsync,
+ ::cudaMemcpyFromSymbolAsync*/
+ fn cuMemcpyDtoDAsync_v2_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoAAsync_v2_ptsz(
- dstArray: CUarray,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Host to Array
+
+ Copies from host memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ specify the CUDA array handle and starting offset in bytes of the
+ destination data. \p srcHost specifies the base address of the source.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstArray - Destination array
+ \param dstOffset - Offset in bytes of destination array
+ \param srcHost - Source host pointer
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyToArrayAsync*/
+ fn cuMemcpyHtoAAsync_v2_ptsz(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcHost: *const ::std::os::raw::c_void,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoHAsync_v2_ptsz(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory from Array to Host
+
+ Copies from one 1D CUDA array to host memory. \p dstHost specifies the base
+ pointer of the destination. \p srcArray and \p srcOffset specify the CUDA
+ array handle and starting offset in bytes of the source data.
+ \p ByteCount specifies the number of bytes to copy.
+
+ \param dstHost - Destination pointer
+ \param srcArray - Source array
+ \param srcOffset - Offset in bytes of source array
+ \param ByteCount - Size of memory copy in bytes
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+ \note_memcpy
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpyFromArrayAsync*/
+ fn cuMemcpyAtoHAsync_v2_ptsz(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DAsync_v2_ptsz(pCopy: *const CUDA_MEMCPY2D, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DAsync_v2_ptsz(pCopy: *const CUDA_MEMCPY3D, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DPeerAsync_ptsz(
- pCopy: *const CUDA_MEMCPY3D_PEER,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD8_v2_ptds(
- dstDevice: CUdeviceptr,
- uc: ::std::os::raw::c_uchar,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory for 2D arrays
+
+ Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ The ::CUDA_MEMCPY2D structure is defined as:
+
+ \code
+typedef struct CUDA_MEMCPY2D_st {
+unsigned int srcXInBytes, srcY;
+CUmemorytype srcMemoryType;
+const void *srcHost;
+CUdeviceptr srcDevice;
+CUarray srcArray;
+unsigned int srcPitch;
+unsigned int dstXInBytes, dstY;
+CUmemorytype dstMemoryType;
+void *dstHost;
+CUdeviceptr dstDevice;
+CUarray dstArray;
+unsigned int dstPitch;
+unsigned int WidthInBytes;
+unsigned int Height;
+} CUDA_MEMCPY2D;
+ \endcode
+ where:
+ - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ source and destination, respectively; ::CUmemorytype_enum is defined as:
+
+ \code
+typedef enum CUmemorytype_enum {
+CU_MEMORYTYPE_HOST = 0x01,
+CU_MEMORYTYPE_DEVICE = 0x02,
+CU_MEMORYTYPE_ARRAY = 0x03,
+CU_MEMORYTYPE_UNIFIED = 0x04
+} CUmemorytype;
+ \endcode
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ specify the (host) base address of the source data and the bytes per row to
+ apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::srcArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ specify the (device) base address of the source data and the bytes per row
+ to apply. ::srcArray is ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::dstArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ specify the (host) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ specify the (device) base address of the destination data and the bytes per
+ row to apply. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ ignored.
+
+ - ::srcXInBytes and ::srcY specify the base address of the source data for
+ the copy.
+
+ \par
+ For host pointers, the starting address is
+ \code
+void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::dstXInBytes and ::dstY specify the base address of the destination data
+ for the copy.
+
+ \par
+ For host pointers, the base address is
+ \code
+void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ the 2D copy being performed.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+ - If specified, ::srcHeight must be greater than or equal to ::Height +
+ ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+
+ \par
+ ::cuMemcpy2DAsync() returns an error if any pitch is greater than the maximum
+ allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ (device to device, CUDA array to device, CUDA array to CUDA array),
+ ::cuMemcpy2DAsync() may fail for pitches not computed by ::cuMemAllocPitch().
+
+ \param pCopy - Parameters for the memory copy
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpy2DAsync,
+ ::cudaMemcpy2DToArrayAsync,
+ ::cudaMemcpy2DFromArrayAsync*/
+ fn cuMemcpy2DAsync_v2_ptsz(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory for 3D arrays
+
+ Perform a 3D memory copy according to the parameters specified in
+ \p pCopy. The ::CUDA_MEMCPY3D structure is defined as:
+
+ \code
+typedef struct CUDA_MEMCPY3D_st {
+
+unsigned int srcXInBytes, srcY, srcZ;
+unsigned int srcLOD;
+CUmemorytype srcMemoryType;
+const void *srcHost;
+CUdeviceptr srcDevice;
+CUarray srcArray;
+unsigned int srcPitch; // ignored when src is array
+unsigned int srcHeight; // ignored when src is array; may be 0 if Depth==1
+
+unsigned int dstXInBytes, dstY, dstZ;
+unsigned int dstLOD;
+CUmemorytype dstMemoryType;
+void *dstHost;
+CUdeviceptr dstDevice;
+CUarray dstArray;
+unsigned int dstPitch; // ignored when dst is array
+unsigned int dstHeight; // ignored when dst is array; may be 0 if Depth==1
+
+unsigned int WidthInBytes;
+unsigned int Height;
+unsigned int Depth;
+} CUDA_MEMCPY3D;
+ \endcode
+ where:
+ - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ source and destination, respectively; ::CUmemorytype_enum is defined as:
+
+ \code
+typedef enum CUmemorytype_enum {
+CU_MEMORYTYPE_HOST = 0x01,
+CU_MEMORYTYPE_DEVICE = 0x02,
+CU_MEMORYTYPE_ARRAY = 0x03,
+CU_MEMORYTYPE_UNIFIED = 0x04
+} CUmemorytype;
+ \endcode
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::srcArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost, ::srcPitch and
+ ::srcHeight specify the (host) base address of the source data, the bytes
+ per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice, ::srcPitch and
+ ::srcHeight specify the (device) base address of the source data, the bytes
+ per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ ignored.
+
+ \par
+ If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ handle of the source data. ::srcHost, ::srcDevice, ::srcPitch and
+ ::srcHeight are ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ specify the (unified virtual address space) base address of the source data
+ and the bytes per row to apply. ::dstArray is ignored.
+ This value may be used only if unified addressing is supported in the calling
+ context.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ specify the (host) base address of the destination data, the bytes per row,
+ and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ specify the (device) base address of the destination data, the bytes per
+ row, and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+
+ \par
+ If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ handle of the destination data. ::dstHost, ::dstDevice, ::dstPitch and
+ ::dstHeight are ignored.
+
+ - ::srcXInBytes, ::srcY and ::srcZ specify the base address of the source
+ data for the copy.
+
+ \par
+ For host pointers, the starting address is
+ \code
+void* Start = (void*)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ element size.
+
+ - dstXInBytes, ::dstY and ::dstZ specify the base address of the
+ destination data for the copy.
+
+ \par
+ For host pointers, the base address is
+ \code
+void* dstStart = (void*)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);
+ \endcode
+
+ \par
+ For device pointers, the starting address is
+ \code
+CUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;
+ \endcode
+
+ \par
+ For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ element size.
+
+ - ::WidthInBytes, ::Height and ::Depth specify the width (in bytes), height
+ and depth of the 3D copy being performed.
+ - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ ::WidthInBytes + dstXInBytes.
+ - If specified, ::srcHeight must be greater than or equal to ::Height +
+ ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+
+ \par
+ ::cuMemcpy3DAsync() returns an error if any pitch is greater than the maximum
+ allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH).
+
+ The ::srcLOD and ::dstLOD members of the ::CUDA_MEMCPY3D structure must be
+ set to 0.
+
+ \param pCopy - Parameters for the memory copy
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemcpy3DAsync*/
+ fn cuMemcpy3DAsync_v2_ptsz(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies memory between contexts asynchronously.
+
+ Perform a 3D memory copy according to the parameters specified in
+ \p pCopy. See the definition of the ::CUDA_MEMCPY3D_PEER structure
+ for documentation of its parameters.
+
+ \param pCopy - Parameters for the memory copy
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ ::cuMemcpy3DPeerAsync,
+ ::cudaMemcpy3DPeerAsync*/
+ fn cuMemcpy3DPeerAsync_ptsz(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D_PEER,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the memory range of \p N 8-bit values to the specified value
+ \p uc.
+
+ \param dstDevice - Destination device pointer
+ \param uc - Value to set
+ \param N - Number of elements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset*/
+ fn cuMemsetD8_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ uc: ::core::ffi::c_uchar,
N: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD16_v2_ptds(
- dstDevice: CUdeviceptr,
- us: ::std::os::raw::c_ushort,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the memory range of \p N 16-bit values to the specified value
+ \p us. The \p dstDevice pointer must be two byte aligned.
+
+ \param dstDevice - Destination device pointer
+ \param us - Value to set
+ \param N - Number of elements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset*/
+ fn cuMemsetD16_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ us: ::core::ffi::c_ushort,
N: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD32_v2_ptds(
- dstDevice: CUdeviceptr,
- ui: ::std::os::raw::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the memory range of \p N 32-bit values to the specified value
+ \p ui. The \p dstDevice pointer must be four byte aligned.
+
+ \param dstDevice - Destination device pointer
+ \param ui - Value to set
+ \param N - Number of elements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32Async,
+ ::cudaMemset*/
+ fn cuMemsetD32_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
+ ui: ::core::ffi::c_uint,
N: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D8_v2_ptds(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the 2D memory range of \p Width 8-bit values to the specified value
+ \p uc. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param uc - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2D*/
+ fn cuMemsetD2D8_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- uc: ::std::os::raw::c_uchar,
+ uc: ::core::ffi::c_uchar,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D16_v2_ptds(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the 2D memory range of \p Width 16-bit values to the specified value
+ \p us. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. The \p dstDevice pointer
+ and \p dstPitch offset must be two byte aligned. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param us - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2D*/
+ fn cuMemsetD2D16_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- us: ::std::os::raw::c_ushort,
+ us: ::core::ffi::c_ushort,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D32_v2_ptds(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes device memory
+
+ Sets the 2D memory range of \p Width 32-bit values to the specified value
+ \p ui. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. The \p dstDevice pointer
+ and \p dstPitch offset must be four byte aligned. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param ui - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2D*/
+ fn cuMemsetD2D32_v2_ptds(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- ui: ::std::os::raw::c_uint,
+ ui: ::core::ffi::c_uint,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD8Async_ptsz(
- dstDevice: CUdeviceptr,
- uc: ::std::os::raw::c_uchar,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the memory range of \p N 8-bit values to the specified value
+ \p uc.
+
+ \param dstDevice - Destination device pointer
+ \param uc - Value to set
+ \param N - Number of elements
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemsetAsync*/
+ fn cuMemsetD8Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ uc: ::core::ffi::c_uchar,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD16Async_ptsz(
- dstDevice: CUdeviceptr,
- us: ::std::os::raw::c_ushort,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the memory range of \p N 16-bit values to the specified value
+ \p us. The \p dstDevice pointer must be two byte aligned.
+
+ \param dstDevice - Destination device pointer
+ \param us - Value to set
+ \param N - Number of elements
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemsetAsync*/
+ fn cuMemsetD16Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ us: ::core::ffi::c_ushort,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD32Async_ptsz(
- dstDevice: CUdeviceptr,
- ui: ::std::os::raw::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the memory range of \p N 32-bit values to the specified value
+ \p ui. The \p dstDevice pointer must be four byte aligned.
+
+ \param dstDevice - Destination device pointer
+ \param ui - Value to set
+ \param N - Number of elements
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async, ::cuMemsetD32,
+ ::cudaMemsetAsync*/
+ fn cuMemsetD32Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
+ ui: ::core::ffi::c_uint,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D8Async_ptsz(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the 2D memory range of \p Width 8-bit values to the specified value
+ \p uc. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param uc - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2DAsync*/
+ fn cuMemsetD2D8Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- uc: ::std::os::raw::c_uchar,
+ uc: ::core::ffi::c_uchar,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D16Async_ptsz(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the 2D memory range of \p Width 16-bit values to the specified value
+ \p us. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. The \p dstDevice pointer
+ and \p dstPitch offset must be two byte aligned. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param us - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2DAsync*/
+ fn cuMemsetD2D16Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- us: ::std::os::raw::c_ushort,
+ us: ::core::ffi::c_ushort,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D32Async_ptsz(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets device memory
+
+ Sets the 2D memory range of \p Width 32-bit values to the specified value
+ \p ui. \p Height specifies the number of rows to set, and \p dstPitch
+ specifies the number of bytes between each row. The \p dstDevice pointer
+ and \p dstPitch offset must be four byte aligned. This function performs
+ fastest when the pitch is one that has been passed back by
+ ::cuMemAllocPitch().
+
+ \param dstDevice - Destination device pointer
+ \param dstPitch - Pitch of destination device pointer(Unused if \p Height is 1)
+ \param ui - Value to set
+ \param Width - Width of row
+ \param Height - Number of rows
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+ \note_memset
+ \note_null_stream
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32,
+ ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ ::cuMemsetD32, ::cuMemsetD32Async,
+ ::cudaMemset2DAsync*/
+ fn cuMemsetD2D32Async_ptsz(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- ui: ::std::os::raw::c_uint,
+ ui: ::core::ffi::c_uint,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayCreate_v2(
- pHandle: *mut CUarray,
- pAllocateArray: *const CUDA_ARRAY_DESCRIPTOR,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayGetDescriptor_v2(
- pArrayDescriptor: *mut CUDA_ARRAY_DESCRIPTOR,
- hArray: CUarray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayGetSparseProperties(
- sparseProperties: *mut CUDA_ARRAY_SPARSE_PROPERTIES,
- array: CUarray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMipmappedArrayGetSparseProperties(
- sparseProperties: *mut CUDA_ARRAY_SPARSE_PROPERTIES,
- mipmap: CUmipmappedArray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayGetMemoryRequirements(
- memoryRequirements: *mut CUDA_ARRAY_MEMORY_REQUIREMENTS,
- array: CUarray,
- device: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMipmappedArrayGetMemoryRequirements(
- memoryRequirements: *mut CUDA_ARRAY_MEMORY_REQUIREMENTS,
- mipmap: CUmipmappedArray,
- device: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayGetPlane(
- pPlaneArray: *mut CUarray,
- hArray: CUarray,
- planeIdx: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayDestroy(hArray: CUarray) -> CUresult;
-}
-extern "C" {
- pub fn cuArray3DCreate_v2(
- pHandle: *mut CUarray,
- pAllocateArray: *const CUDA_ARRAY3D_DESCRIPTOR,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArray3DGetDescriptor_v2(
- pArrayDescriptor: *mut CUDA_ARRAY3D_DESCRIPTOR,
- hArray: CUarray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMipmappedArrayCreate(
- pHandle: *mut CUmipmappedArray,
- pMipmappedArrayDesc: *const CUDA_ARRAY3D_DESCRIPTOR,
- numMipmapLevels: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMipmappedArrayGetLevel(
- pLevelArray: *mut CUarray,
- hMipmappedArray: CUmipmappedArray,
- level: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMipmappedArrayDestroy(hMipmappedArray: CUmipmappedArray) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetHandleForAddressRange(
- handle: *mut ::std::os::raw::c_void,
- dptr: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a 1D or 2D CUDA array
+
+ Creates a CUDA array according to the ::CUDA_ARRAY_DESCRIPTOR structure
+ \p pAllocateArray and returns a handle to the new CUDA array in \p *pHandle.
+ The ::CUDA_ARRAY_DESCRIPTOR is defined as:
+
+ \code
+typedef struct {
+unsigned int Width;
+unsigned int Height;
+CUarray_format Format;
+unsigned int NumChannels;
+} CUDA_ARRAY_DESCRIPTOR;
+ \endcode
+ where:
+
+ - \p Width, and \p Height are the width, and height of the CUDA array (in
+ elements); the CUDA array is one-dimensional if height is 0, two-dimensional
+ otherwise;
+ - ::Format specifies the format of the elements; ::CUarray_format is
+ defined as:
+ \code
+typedef enum CUarray_format_enum {
+CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+CU_AD_FORMAT_HALF = 0x10,
+CU_AD_FORMAT_FLOAT = 0x20
+} CUarray_format;
+ \endcode
+ - \p NumChannels specifies the number of packed components per CUDA array
+ element; it may be 1, 2, or 4;
+
+ Here are examples of CUDA array descriptions:
+
+ Description for a CUDA array of 2048 floats:
+ \code
+CUDA_ARRAY_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_FLOAT;
+desc.NumChannels = 1;
+desc.Width = 2048;
+desc.Height = 1;
+ \endcode
+
+ Description for a 64 x 64 CUDA array of floats:
+ \code
+CUDA_ARRAY_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_FLOAT;
+desc.NumChannels = 1;
+desc.Width = 64;
+desc.Height = 64;
+ \endcode
+
+ Description for a \p width x \p height CUDA array of 64-bit, 4x16-bit
+ float16's:
+ \code
+CUDA_ARRAY_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_HALF;
+desc.NumChannels = 4;
+desc.Width = width;
+desc.Height = height;
+ \endcode
+
+ Description for a \p width x \p height CUDA array of 16-bit elements, each
+ of which is two 8-bit unsigned chars:
+ \code
+CUDA_ARRAY_DESCRIPTOR arrayDesc;
+desc.Format = CU_AD_FORMAT_UNSIGNED_INT8;
+desc.NumChannels = 2;
+desc.Width = width;
+desc.Height = height;
+ \endcode
+
+ \param pHandle - Returned array
+ \param pAllocateArray - Array descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMallocArray*/
+ fn cuArrayCreate_v2(
+ pHandle: *mut cuda_types::CUarray,
+ pAllocateArray: *const cuda_types::CUDA_ARRAY_DESCRIPTOR,
+ ) -> cuda_types::CUresult;
+ /** \brief Get a 1D or 2D CUDA array descriptor
+
+ Returns in \p *pArrayDescriptor a descriptor containing information on the
+ format and dimensions of the CUDA array \p hArray. It is useful for
+ subroutines that have been passed a CUDA array, but need to know the CUDA
+ array parameters for validation or other purposes.
+
+ \param pArrayDescriptor - Returned array descriptor
+ \param hArray - Array to get descriptor of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaArrayGetInfo*/
+ fn cuArrayGetDescriptor_v2(
+ pArrayDescriptor: *mut cuda_types::CUDA_ARRAY_DESCRIPTOR,
+ hArray: cuda_types::CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the layout properties of a sparse CUDA array
+
+ Returns the layout properties of a sparse CUDA array in \p sparseProperties
+ If the CUDA array is not allocated with flag ::CUDA_ARRAY3D_SPARSE
+ ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ If the returned value in ::CUDA_ARRAY_SPARSE_PROPERTIES::flags contains ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL,
+ then ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize represents the total size of the array. Otherwise, it will be zero.
+ Also, the returned value in ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailFirstLevel is always zero.
+ Note that the \p array must have been allocated using ::cuArrayCreate or ::cuArray3DCreate. For CUDA arrays obtained
+ using ::cuMipmappedArrayGetLevel, ::CUDA_ERROR_INVALID_VALUE will be returned. Instead, ::cuMipmappedArrayGetSparseProperties
+ must be used to obtain the sparse properties of the entire CUDA mipmapped array to which \p array belongs to.
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \param[out] sparseProperties - Pointer to ::CUDA_ARRAY_SPARSE_PROPERTIES
+ \param[in] array - CUDA array to get the sparse properties of
+ \sa ::cuMipmappedArrayGetSparseProperties, ::cuMemMapArrayAsync*/
+ fn cuArrayGetSparseProperties(
+ sparseProperties: *mut cuda_types::CUDA_ARRAY_SPARSE_PROPERTIES,
+ array: cuda_types::CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the layout properties of a sparse CUDA mipmapped array
+
+ Returns the sparse array layout properties in \p sparseProperties
+ If the CUDA mipmapped array is not allocated with flag ::CUDA_ARRAY3D_SPARSE
+ ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ For non-layered CUDA mipmapped arrays, ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize returns the
+ size of the mip tail region. The mip tail region includes all mip levels whose width, height or depth
+ is less than that of the tile.
+ For layered CUDA mipmapped arrays, if ::CUDA_ARRAY_SPARSE_PROPERTIES::flags contains ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL,
+ then ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize specifies the size of the mip tail of all layers combined.
+ Otherwise, ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize specifies mip tail size per layer.
+ The returned value of ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailFirstLevel is valid only if ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize is non-zero.
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \param[out] sparseProperties - Pointer to ::CUDA_ARRAY_SPARSE_PROPERTIES
+ \param[in] mipmap - CUDA mipmapped array to get the sparse properties of
+ \sa ::cuArrayGetSparseProperties, ::cuMemMapArrayAsync*/
+ fn cuMipmappedArrayGetSparseProperties(
+ sparseProperties: *mut cuda_types::CUDA_ARRAY_SPARSE_PROPERTIES,
+ mipmap: cuda_types::CUmipmappedArray,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the memory requirements of a CUDA array
+
+ Returns the memory requirements of a CUDA array in \p memoryRequirements
+ If the CUDA array is not allocated with flag ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::size
+ represents the total size of the CUDA array.
+ The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::alignment
+ represents the alignment necessary for mapping the CUDA array.
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \param[out] memoryRequirements - Pointer to ::CUDA_ARRAY_MEMORY_REQUIREMENTS
+ \param[in] array - CUDA array to get the memory requirements of
+ \param[in] device - Device to get the memory requirements for
+ \sa ::cuMipmappedArrayGetMemoryRequirements, ::cuMemMapArrayAsync*/
+ fn cuArrayGetMemoryRequirements(
+ memoryRequirements: *mut cuda_types::CUDA_ARRAY_MEMORY_REQUIREMENTS,
+ array: cuda_types::CUarray,
+ device: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the memory requirements of a CUDA mipmapped array
+
+ Returns the memory requirements of a CUDA mipmapped array in \p memoryRequirements
+ If the CUDA mipmapped array is not allocated with flag ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ ::CUDA_ERROR_INVALID_VALUE will be returned.
+
+ The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::size
+ represents the total size of the CUDA mipmapped array.
+ The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::alignment
+ represents the alignment necessary for mapping the CUDA mipmapped
+ array.
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \param[out] memoryRequirements - Pointer to ::CUDA_ARRAY_MEMORY_REQUIREMENTS
+ \param[in] mipmap - CUDA mipmapped array to get the memory requirements of
+ \param[in] device - Device to get the memory requirements for
+ \sa ::cuArrayGetMemoryRequirements, ::cuMemMapArrayAsync*/
+ fn cuMipmappedArrayGetMemoryRequirements(
+ memoryRequirements: *mut cuda_types::CUDA_ARRAY_MEMORY_REQUIREMENTS,
+ mipmap: cuda_types::CUmipmappedArray,
+ device: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets a CUDA array plane from a CUDA array
+
+ Returns in \p pPlaneArray a CUDA array that represents a single format plane
+ of the CUDA array \p hArray.
+
+ If \p planeIdx is greater than the maximum number of planes in this array or if the array does
+ not have a multi-planar format e.g: ::CU_AD_FORMAT_NV12, then ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ Note that if the \p hArray has format ::CU_AD_FORMAT_NV12, then passing in 0 for \p planeIdx returns
+ a CUDA array of the same size as \p hArray but with one channel and ::CU_AD_FORMAT_UNSIGNED_INT8 as its format.
+ If 1 is passed for \p planeIdx, then the returned CUDA array has half the height and width
+ of \p hArray with two channels and ::CU_AD_FORMAT_UNSIGNED_INT8 as its format.
+
+ \param pPlaneArray - Returned CUDA array referenced by the \p planeIdx
+ \param hArray - Multiplanar CUDA array
+ \param planeIdx - Plane index
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::cuArrayCreate,
+ ::cudaArrayGetPlane*/
+ fn cuArrayGetPlane(
+ pPlaneArray: *mut cuda_types::CUarray,
+ hArray: cuda_types::CUarray,
+ planeIdx: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys a CUDA array
+
+ Destroys the CUDA array \p hArray.
+
+ \param hArray - Array to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ARRAY_IS_MAPPED,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaFreeArray*/
+ fn cuArrayDestroy(hArray: cuda_types::CUarray) -> cuda_types::CUresult;
+ /** \brief Creates a 3D CUDA array
+
+ Creates a CUDA array according to the ::CUDA_ARRAY3D_DESCRIPTOR structure
+ \p pAllocateArray and returns a handle to the new CUDA array in \p *pHandle.
+ The ::CUDA_ARRAY3D_DESCRIPTOR is defined as:
+
+ \code
+typedef struct {
+unsigned int Width;
+unsigned int Height;
+unsigned int Depth;
+CUarray_format Format;
+unsigned int NumChannels;
+unsigned int Flags;
+} CUDA_ARRAY3D_DESCRIPTOR;
+ \endcode
+ where:
+
+ - \p Width, \p Height, and \p Depth are the width, height, and depth of the
+ CUDA array (in elements); the following types of CUDA arrays can be allocated:
+ - A 1D array is allocated if \p Height and \p Depth extents are both zero.
+ - A 2D array is allocated if only \p Depth extent is zero.
+ - A 3D array is allocated if all three extents are non-zero.
+ - A 1D layered CUDA array is allocated if only \p Height is zero and the
+ ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 1D array. The number
+ of layers is determined by the depth extent.
+ - A 2D layered CUDA array is allocated if all three extents are non-zero and
+ the ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 2D array. The number
+ of layers is determined by the depth extent.
+ - A cubemap CUDA array is allocated if all three extents are non-zero and the
+ ::CUDA_ARRAY3D_CUBEMAP flag is set. \p Width must be equal to \p Height, and
+ \p Depth must be six. A cubemap is a special type of 2D layered CUDA array,
+ where the six layers represent the six faces of a cube. The order of the six
+ layers in memory is the same as that listed in ::CUarray_cubemap_face.
+ - A cubemap layered CUDA array is allocated if all three extents are non-zero,
+ and both, ::CUDA_ARRAY3D_CUBEMAP and ::CUDA_ARRAY3D_LAYERED flags are set.
+ \p Width must be equal to \p Height, and \p Depth must be a multiple of six.
+ A cubemap layered CUDA array is a special type of 2D layered CUDA array that
+ consists of a collection of cubemaps. The first six layers represent the first
+ cubemap, the next six layers form the second cubemap, and so on.
+
+ - ::Format specifies the format of the elements; ::CUarray_format is
+ defined as:
+ \code
+typedef enum CUarray_format_enum {
+CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+CU_AD_FORMAT_HALF = 0x10,
+CU_AD_FORMAT_FLOAT = 0x20
+} CUarray_format;
+ \endcode
+
+ - \p NumChannels specifies the number of packed components per CUDA array
+ element; it may be 1, 2, or 4;
+
+ - ::Flags may be set to
+ - ::CUDA_ARRAY3D_LAYERED to enable creation of layered CUDA arrays. If this flag is set,
+ \p Depth specifies the number of layers, not the depth of a 3D array.
+ - ::CUDA_ARRAY3D_SURFACE_LDST to enable surface references to be bound to the CUDA array.
+ If this flag is not set, ::cuSurfRefSetArray will fail when attempting to bind the CUDA array
+ to a surface reference.
+ - ::CUDA_ARRAY3D_CUBEMAP to enable creation of cubemaps. If this flag is set, \p Width must be
+ equal to \p Height, and \p Depth must be six. If the ::CUDA_ARRAY3D_LAYERED flag is also set,
+ then \p Depth must be a multiple of six.
+ - ::CUDA_ARRAY3D_TEXTURE_GATHER to indicate that the CUDA array will be used for texture gather.
+ Texture gather can only be performed on 2D CUDA arrays.
+
+ \p Width, \p Height and \p Depth must meet certain size requirements as listed in the following table.
+ All values are specified in elements. Note that for brevity's sake, the full name of the device attribute
+ is not specified. For ex., TEXTURE1D_WIDTH refers to the device attribute
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH.
+
+ Note that 2D CUDA arrays have different size requirements if the ::CUDA_ARRAY3D_TEXTURE_GATHER flag
+ is set. \p Width and \p Height must not be greater than ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH
+ and ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT respectively, in that case.
+
+ <table>
+ <tr><td><b>CUDA array type</b></td>
+ <td><b>Valid extents that must always be met<br>{(width range in elements), (height range),
+ (depth range)}</b></td>
+ <td><b>Valid extents with CUDA_ARRAY3D_SURFACE_LDST set<br>
+ {(width range in elements), (height range), (depth range)}</b></td></tr>
+ <tr><td>1D</td>
+ <td><small>{ (1,TEXTURE1D_WIDTH), 0, 0 }</small></td>
+ <td><small>{ (1,SURFACE1D_WIDTH), 0, 0 }</small></td></tr>
+ <tr><td>2D</td>
+ <td><small>{ (1,TEXTURE2D_WIDTH), (1,TEXTURE2D_HEIGHT), 0 }</small></td>
+ <td><small>{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }</small></td></tr>
+ <tr><td>3D</td>
+ <td><small>{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) }
+ <br>OR<br>{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE),
+ (1,TEXTURE3D_DEPTH_ALTERNATE) }</small></td>
+ <td><small>{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT),
+ (1,SURFACE3D_DEPTH) }</small></td></tr>
+ <tr><td>1D Layered</td>
+ <td><small>{ (1,TEXTURE1D_LAYERED_WIDTH), 0,
+ (1,TEXTURE1D_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACE1D_LAYERED_WIDTH), 0,
+ (1,SURFACE1D_LAYERED_LAYERS) }</small></td></tr>
+ <tr><td>2D Layered</td>
+ <td><small>{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT),
+ (1,TEXTURE2D_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT),
+ (1,SURFACE2D_LAYERED_LAYERS) }</small></td></tr>
+ <tr><td>Cubemap</td>
+ <td><small>{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }</small></td>
+ <td><small>{ (1,SURFACECUBEMAP_WIDTH),
+ (1,SURFACECUBEMAP_WIDTH), 6 }</small></td></tr>
+ <tr><td>Cubemap Layered</td>
+ <td><small>{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH),
+ (1,TEXTURECUBEMAP_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH),
+ (1,SURFACECUBEMAP_LAYERED_LAYERS) }</small></td></tr>
+ </table>
+
+ Here are examples of CUDA array descriptions:
+
+ Description for a CUDA array of 2048 floats:
+ \code
+CUDA_ARRAY3D_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_FLOAT;
+desc.NumChannels = 1;
+desc.Width = 2048;
+desc.Height = 0;
+desc.Depth = 0;
+ \endcode
+
+ Description for a 64 x 64 CUDA array of floats:
+ \code
+CUDA_ARRAY3D_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_FLOAT;
+desc.NumChannels = 1;
+desc.Width = 64;
+desc.Height = 64;
+desc.Depth = 0;
+ \endcode
+
+ Description for a \p width x \p height x \p depth CUDA array of 64-bit,
+ 4x16-bit float16's:
+ \code
+CUDA_ARRAY3D_DESCRIPTOR desc;
+desc.Format = CU_AD_FORMAT_HALF;
+desc.NumChannels = 4;
+desc.Width = width;
+desc.Height = height;
+desc.Depth = depth;
+ \endcode
+
+ \param pHandle - Returned array
+ \param pAllocateArray - 3D array descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaMalloc3DArray*/
+ fn cuArray3DCreate_v2(
+ pHandle: *mut cuda_types::CUarray,
+ pAllocateArray: *const cuda_types::CUDA_ARRAY3D_DESCRIPTOR,
+ ) -> cuda_types::CUresult;
+ /** \brief Get a 3D CUDA array descriptor
+
+ Returns in \p *pArrayDescriptor a descriptor containing information on the
+ format and dimensions of the CUDA array \p hArray. It is useful for
+ subroutines that have been passed a CUDA array, but need to know the CUDA
+ array parameters for validation or other purposes.
+
+ This function may be called on 1D and 2D arrays, in which case the \p Height
+ and/or \p Depth members of the descriptor struct will be set to 0.
+
+ \param pArrayDescriptor - Returned 3D array descriptor
+ \param hArray - 3D array to get descriptor of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ \notefnerr
+
+ \sa ::cuArray3DCreate, ::cuArrayCreate,
+ ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ ::cudaArrayGetInfo*/
+ fn cuArray3DGetDescriptor_v2(
+ pArrayDescriptor: *mut cuda_types::CUDA_ARRAY3D_DESCRIPTOR,
+ hArray: cuda_types::CUarray,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a CUDA mipmapped array
+
+ Creates a CUDA mipmapped array according to the ::CUDA_ARRAY3D_DESCRIPTOR structure
+ \p pMipmappedArrayDesc and returns a handle to the new CUDA mipmapped array in \p *pHandle.
+ \p numMipmapLevels specifies the number of mipmap levels to be allocated. This value is
+ clamped to the range [1, 1 + floor(log2(max(width, height, depth)))].
+
+ The ::CUDA_ARRAY3D_DESCRIPTOR is defined as:
+
+ \code
+typedef struct {
+unsigned int Width;
+unsigned int Height;
+unsigned int Depth;
+CUarray_format Format;
+unsigned int NumChannels;
+unsigned int Flags;
+} CUDA_ARRAY3D_DESCRIPTOR;
+ \endcode
+ where:
+
+ - \p Width, \p Height, and \p Depth are the width, height, and depth of the
+ CUDA array (in elements); the following types of CUDA arrays can be allocated:
+ - A 1D mipmapped array is allocated if \p Height and \p Depth extents are both zero.
+ - A 2D mipmapped array is allocated if only \p Depth extent is zero.
+ - A 3D mipmapped array is allocated if all three extents are non-zero.
+ - A 1D layered CUDA mipmapped array is allocated if only \p Height is zero and the
+ ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 1D array. The number
+ of layers is determined by the depth extent.
+ - A 2D layered CUDA mipmapped array is allocated if all three extents are non-zero and
+ the ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 2D array. The number
+ of layers is determined by the depth extent.
+ - A cubemap CUDA mipmapped array is allocated if all three extents are non-zero and the
+ ::CUDA_ARRAY3D_CUBEMAP flag is set. \p Width must be equal to \p Height, and
+ \p Depth must be six. A cubemap is a special type of 2D layered CUDA array,
+ where the six layers represent the six faces of a cube. The order of the six
+ layers in memory is the same as that listed in ::CUarray_cubemap_face.
+ - A cubemap layered CUDA mipmapped array is allocated if all three extents are non-zero,
+ and both, ::CUDA_ARRAY3D_CUBEMAP and ::CUDA_ARRAY3D_LAYERED flags are set.
+ \p Width must be equal to \p Height, and \p Depth must be a multiple of six.
+ A cubemap layered CUDA array is a special type of 2D layered CUDA array that
+ consists of a collection of cubemaps. The first six layers represent the first
+ cubemap, the next six layers form the second cubemap, and so on.
+
+ - ::Format specifies the format of the elements; ::CUarray_format is
+ defined as:
+ \code
+typedef enum CUarray_format_enum {
+CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+CU_AD_FORMAT_HALF = 0x10,
+CU_AD_FORMAT_FLOAT = 0x20
+} CUarray_format;
+ \endcode
+
+ - \p NumChannels specifies the number of packed components per CUDA array
+ element; it may be 1, 2, or 4;
+
+ - ::Flags may be set to
+ - ::CUDA_ARRAY3D_LAYERED to enable creation of layered CUDA mipmapped arrays. If this flag is set,
+ \p Depth specifies the number of layers, not the depth of a 3D array.
+ - ::CUDA_ARRAY3D_SURFACE_LDST to enable surface references to be bound to individual mipmap levels of
+ the CUDA mipmapped array. If this flag is not set, ::cuSurfRefSetArray will fail when attempting to
+ bind a mipmap level of the CUDA mipmapped array to a surface reference.
+ - ::CUDA_ARRAY3D_CUBEMAP to enable creation of mipmapped cubemaps. If this flag is set, \p Width must be
+ equal to \p Height, and \p Depth must be six. If the ::CUDA_ARRAY3D_LAYERED flag is also set,
+ then \p Depth must be a multiple of six.
+ - ::CUDA_ARRAY3D_TEXTURE_GATHER to indicate that the CUDA mipmapped array will be used for texture gather.
+ Texture gather can only be performed on 2D CUDA mipmapped arrays.
+
+ \p Width, \p Height and \p Depth must meet certain size requirements as listed in the following table.
+ All values are specified in elements. Note that for brevity's sake, the full name of the device attribute
+ is not specified. For ex., TEXTURE1D_MIPMAPPED_WIDTH refers to the device attribute
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH.
+
+ <table>
+ <tr><td><b>CUDA array type</b></td>
+ <td><b>Valid extents that must always be met<br>{(width range in elements), (height range),
+ (depth range)}</b></td>
+ <td><b>Valid extents with CUDA_ARRAY3D_SURFACE_LDST set<br>
+ {(width range in elements), (height range), (depth range)}</b></td></tr>
+ <tr><td>1D</td>
+ <td><small>{ (1,TEXTURE1D_MIPMAPPED_WIDTH), 0, 0 }</small></td>
+ <td><small>{ (1,SURFACE1D_WIDTH), 0, 0 }</small></td></tr>
+ <tr><td>2D</td>
+ <td><small>{ (1,TEXTURE2D_MIPMAPPED_WIDTH), (1,TEXTURE2D_MIPMAPPED_HEIGHT), 0 }</small></td>
+ <td><small>{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }</small></td></tr>
+ <tr><td>3D</td>
+ <td><small>{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) }
+ <br>OR<br>{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE),
+ (1,TEXTURE3D_DEPTH_ALTERNATE) }</small></td>
+ <td><small>{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT),
+ (1,SURFACE3D_DEPTH) }</small></td></tr>
+ <tr><td>1D Layered</td>
+ <td><small>{ (1,TEXTURE1D_LAYERED_WIDTH), 0,
+ (1,TEXTURE1D_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACE1D_LAYERED_WIDTH), 0,
+ (1,SURFACE1D_LAYERED_LAYERS) }</small></td></tr>
+ <tr><td>2D Layered</td>
+ <td><small>{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT),
+ (1,TEXTURE2D_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT),
+ (1,SURFACE2D_LAYERED_LAYERS) }</small></td></tr>
+ <tr><td>Cubemap</td>
+ <td><small>{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }</small></td>
+ <td><small>{ (1,SURFACECUBEMAP_WIDTH),
+ (1,SURFACECUBEMAP_WIDTH), 6 }</small></td></tr>
+ <tr><td>Cubemap Layered</td>
+ <td><small>{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH),
+ (1,TEXTURECUBEMAP_LAYERED_LAYERS) }</small></td>
+ <td><small>{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH),
+ (1,SURFACECUBEMAP_LAYERED_LAYERS) }</small></td></tr>
+ </table>
+
+
+ \param pHandle - Returned mipmapped array
+ \param pMipmappedArrayDesc - mipmapped array descriptor
+ \param numMipmapLevels - Number of mipmap levels
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cuMipmappedArrayDestroy,
+ ::cuMipmappedArrayGetLevel,
+ ::cuArrayCreate,
+ ::cudaMallocMipmappedArray*/
+ fn cuMipmappedArrayCreate(
+ pHandle: *mut cuda_types::CUmipmappedArray,
+ pMipmappedArrayDesc: *const cuda_types::CUDA_ARRAY3D_DESCRIPTOR,
+ numMipmapLevels: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets a mipmap level of a CUDA mipmapped array
+
+ Returns in \p *pLevelArray a CUDA array that represents a single mipmap level
+ of the CUDA mipmapped array \p hMipmappedArray.
+
+ If \p level is greater than the maximum number of levels in this mipmapped array,
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \param pLevelArray - Returned mipmap level CUDA array
+ \param hMipmappedArray - CUDA mipmapped array
+ \param level - Mipmap level
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::cuMipmappedArrayCreate,
+ ::cuMipmappedArrayDestroy,
+ ::cuArrayCreate,
+ ::cudaGetMipmappedArrayLevel*/
+ fn cuMipmappedArrayGetLevel(
+ pLevelArray: *mut cuda_types::CUarray,
+ hMipmappedArray: cuda_types::CUmipmappedArray,
+ level: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys a CUDA mipmapped array
+
+ Destroys the CUDA mipmapped array \p hMipmappedArray.
+
+ \param hMipmappedArray - Mipmapped array to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ARRAY_IS_MAPPED,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ \notefnerr
+
+ \sa
+ ::cuMipmappedArrayCreate,
+ ::cuMipmappedArrayGetLevel,
+ ::cuArrayCreate,
+ ::cudaFreeMipmappedArray*/
+ fn cuMipmappedArrayDestroy(
+ hMipmappedArray: cuda_types::CUmipmappedArray,
+ ) -> cuda_types::CUresult;
+ /** \brief Retrieve handle for an address range
+
+ Get a handle of the specified type to an address range. The address range
+ must have been obtained by a prior call to either ::cuMemAlloc or ::cuMemAddressReserve.
+ If the address range was obtained via ::cuMemAddressReserve, it must also be fully mapped via ::cuMemMap.
+ The address range must have been obtained by a prior call to either ::cuMemAllocHost or
+ ::cuMemHostAlloc on Tegra.
+
+ Users must ensure the \p dptr and \p size are aligned to the host page size.
+
+ When requesting CUmemRangeHandleType::CU_MEM_RANGE_HANDLE_TYPE_DMA_BUF_FD,
+ users are expected to query for dma_buf support for the platform
+ by using ::CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED device attribute before calling
+ this API. The \p handle will be interpreted as a pointer to an integer to store the dma_buf file descriptor.
+ Users must ensure the entire address range is backed and mapped when
+ the address range is allocated by ::cuMemAddressReserve. All the physical
+ allocations backing the address range must be resident on the same device and
+ have identical allocation properties. Users are also expected to retrieve a
+ new handle every time the underlying physical allocation(s) corresponding
+ to a previously queried VA range are changed.
+
+ \param[out] handle - Pointer to the location where the returned handle will be stored.
+ \param[in] dptr - Pointer to a valid CUDA device allocation. Must be aligned to host page size.
+ \param[in] size - Length of the address range. Must be aligned to host page size.
+ \param[in] handleType - Type of handle requested (defines type and size of the \p handle output parameter)
+ \param[in] flags - Reserved, must be zero
+
+ \return
+ CUDA_SUCCESS
+ CUDA_ERROR_INVALID_VALUE
+ CUDA_ERROR_NOT_SUPPORTED*/
+ fn cuMemGetHandleForAddressRange(
+ handle: *mut ::core::ffi::c_void,
+ dptr: cuda_types::CUdeviceptr,
size: usize,
- handleType: CUmemRangeHandleType,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAddressReserve(
- ptr: *mut CUdeviceptr,
+ handleType: cuda_types::CUmemRangeHandleType,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Allocate an address range reservation.
+
+ Reserves a virtual address range based on the given parameters, giving
+ the starting address of the range in \p ptr. This API requires a system that
+ supports UVA. The size and address parameters must be a multiple of the
+ host page size and the alignment must be a power of two or zero for default
+ alignment.
+
+ \param[out] ptr - Resulting pointer to start of virtual address range allocated
+ \param[in] size - Size of the reserved virtual address range requested
+ \param[in] alignment - Alignment of the reserved virtual address range requested
+ \param[in] addr - Fixed starting address range requested
+ \param[in] flags - Currently unused, must be zero
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemAddressFree*/
+ fn cuMemAddressReserve(
+ ptr: *mut cuda_types::CUdeviceptr,
size: usize,
alignment: usize,
- addr: CUdeviceptr,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAddressFree(ptr: CUdeviceptr, size: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemCreate(
- handle: *mut CUmemGenericAllocationHandle,
+ addr: cuda_types::CUdeviceptr,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Free an address range reservation.
+
+ Frees a virtual address range reserved by cuMemAddressReserve. The size
+ must match what was given to memAddressReserve and the ptr given must
+ match what was returned from memAddressReserve.
+
+ \param[in] ptr - Starting address of the virtual address range to free
+ \param[in] size - Size of the virtual address region to free
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemAddressReserve*/
+ fn cuMemAddressFree(
+ ptr: cuda_types::CUdeviceptr,
size: usize,
- prop: *const CUmemAllocationProp,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemRelease(handle: CUmemGenericAllocationHandle) -> CUresult;
-}
-extern "C" {
- pub fn cuMemMap(
- ptr: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a CUDA memory handle representing a memory allocation of a given size described by the given properties
+
+ This creates a memory allocation on the target device specified through the
+ \p prop structure. The created allocation will not have any device or host
+ mappings. The generic memory \p handle for the allocation can be
+ mapped to the address space of calling process via ::cuMemMap. This handle
+ cannot be transmitted directly to other processes (see
+ ::cuMemExportToShareableHandle). On Windows, the caller must also pass
+ an LPSECURITYATTRIBUTE in \p prop to be associated with this handle which
+ limits or allows access to this handle for a recipient process (see
+ ::CUmemAllocationProp::win32HandleMetaData for more). The \p size of this
+ allocation must be a multiple of the the value given via
+ ::cuMemGetAllocationGranularity with the ::CU_MEM_ALLOC_GRANULARITY_MINIMUM
+ flag.
+ To create a CPU allocation targeting a specific host NUMA node, applications must
+ set ::CUmemAllocationProp::CUmemLocation::type to ::CU_MEM_LOCATION_TYPE_HOST_NUMA and
+ ::CUmemAllocationProp::CUmemLocation::id must specify the NUMA ID of the CPU.
+ On systems where NUMA is not available ::CUmemAllocationProp::CUmemLocation::id must be set to 0.
+
+ Applications can set ::CUmemAllocationProp::requestedHandleTypes to
+ ::CU_MEM_HANDLE_TYPE_FABRIC in order to create allocations suitable for sharing
+ within an IMEX domain. An IMEX domain is either an OS instance or a group of securely
+ connected OS instances using the NVIDIA IMEX daemon. An IMEX channel is a global resource
+ within the IMEX domain that represents a logical entity that aims to provide fine grained
+ accessibility control for the participating processes. When exporter and importer CUDA processes
+ have been granted access to the same IMEX channel, they can securely share memory.
+ If the allocating process does not have access setup for an IMEX channel, attempting to create
+ a ::CUmemGenericAllocationHandle with ::CU_MEM_HANDLE_TYPE_FABRIC will result in ::CUDA_ERROR_NOT_PERMITTED.
+ The nvidia-modprobe CLI provides more information regarding setting up of IMEX channels.
+
+ If ::CUmemAllocationProp::allocFlags::usage contains ::CU_MEM_CREATE_USAGE_TILE_POOL flag then
+ the memory allocation is intended only to be used as backing tile pool for sparse CUDA arrays
+ and sparse CUDA mipmapped arrays.
+ (see ::cuMemMapArrayAsync).
+
+ \param[out] handle - Value of handle returned. All operations on this allocation are to be performed using this handle.
+ \param[in] size - Size of the allocation requested
+ \param[in] prop - Properties of the allocation to create.
+ \param[in] flags - flags for future use, must be zero now.
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuMemRelease, ::cuMemExportToShareableHandle, ::cuMemImportFromShareableHandle*/
+ fn cuMemCreate(
+ handle: *mut cuda_types::CUmemGenericAllocationHandle,
+ size: usize,
+ prop: *const cuda_types::CUmemAllocationProp,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Release a memory handle representing a memory allocation which was previously allocated through cuMemCreate.
+
+ Frees the memory that was allocated on a device through cuMemCreate.
+
+ The memory allocation will be freed when all outstanding mappings to the memory
+ are unmapped and when all outstanding references to the handle (including it's
+ shareable counterparts) are also released. The generic memory handle can be
+ freed when there are still outstanding mappings made with this handle. Each
+ time a recipient process imports a shareable handle, it needs to pair it with
+ ::cuMemRelease for the handle to be freed. If \p handle is not a valid handle
+ the behavior is undefined.
+
+ \param[in] handle Value of handle which was returned previously by cuMemCreate.
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuMemCreate*/
+ fn cuMemRelease(
+ handle: cuda_types::CUmemGenericAllocationHandle,
+ ) -> cuda_types::CUresult;
+ /** \brief Maps an allocation handle to a reserved virtual address range.
+
+ Maps bytes of memory represented by \p handle starting from byte \p offset to
+ \p size to address range [\p addr, \p addr + \p size]. This range must be an
+ address reservation previously reserved with ::cuMemAddressReserve, and
+ \p offset + \p size must be less than the size of the memory allocation.
+ Both \p ptr, \p size, and \p offset must be a multiple of the value given via
+ ::cuMemGetAllocationGranularity with the ::CU_MEM_ALLOC_GRANULARITY_MINIMUM flag.
+ If \p handle represents a multicast object, \p ptr, \p size and \p offset must
+ be aligned to the value returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_MINIMUM_GRANULARITY. For best performance however, it is
+ recommended that \p ptr, \p size and \p offset be aligned to the value
+ returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_RECOMMENDED_GRANULARITY.
+
+ Please note calling ::cuMemMap does not make the address accessible,
+ the caller needs to update accessibility of a contiguous mapped VA
+ range by calling ::cuMemSetAccess.
+
+ Once a recipient process obtains a shareable memory handle
+ from ::cuMemImportFromShareableHandle, the process must
+ use ::cuMemMap to map the memory into its address ranges before
+ setting accessibility with ::cuMemSetAccess.
+
+ ::cuMemMap can only create mappings on VA range reservations
+ that are not currently mapped.
+
+ \param[in] ptr - Address where memory will be mapped.
+ \param[in] size - Size of the memory mapping.
+ \param[in] offset - Offset into the memory represented by
+ - \p handle from which to start mapping
+ - Note: currently must be zero.
+ \param[in] handle - Handle to a shareable memory
+ \param[in] flags - flags for future use, must be zero now.
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuMemUnmap, ::cuMemSetAccess, ::cuMemCreate, ::cuMemAddressReserve, ::cuMemImportFromShareableHandle*/
+ fn cuMemMap(
+ ptr: cuda_types::CUdeviceptr,
size: usize,
offset: usize,
- handle: CUmemGenericAllocationHandle,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemMapArrayAsync_ptsz(
- mapInfoList: *mut CUarrayMapInfo,
- count: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemUnmap(ptr: CUdeviceptr, size: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemSetAccess(
- ptr: CUdeviceptr,
+ handle: cuda_types::CUmemGenericAllocationHandle,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Maps or unmaps subregions of sparse CUDA arrays and sparse CUDA mipmapped arrays
+
+ Performs map or unmap operations on subregions of sparse CUDA arrays and sparse CUDA mipmapped arrays.
+ Each operation is specified by a ::CUarrayMapInfo entry in the \p mapInfoList array of size \p count.
+ The structure ::CUarrayMapInfo is defined as follow:
+\code
+typedef struct CUarrayMapInfo_st {
+CUresourcetype resourceType;
+union {
+CUmipmappedArray mipmap;
+CUarray array;
+} resource;
+
+CUarraySparseSubresourceType subresourceType;
+union {
+struct {
+unsigned int level;
+unsigned int layer;
+unsigned int offsetX;
+unsigned int offsetY;
+unsigned int offsetZ;
+unsigned int extentWidth;
+unsigned int extentHeight;
+unsigned int extentDepth;
+} sparseLevel;
+struct {
+unsigned int layer;
+unsigned long long offset;
+unsigned long long size;
+} miptail;
+} subresource;
+
+CUmemOperationType memOperationType;
+
+CUmemHandleType memHandleType;
+union {
+CUmemGenericAllocationHandle memHandle;
+} memHandle;
+
+unsigned long long offset;
+unsigned int deviceBitMask;
+unsigned int flags;
+unsigned int reserved[2];
+} CUarrayMapInfo;
+\endcode
+
+ where ::CUarrayMapInfo::resourceType specifies the type of resource to be operated on.
+ If ::CUarrayMapInfo::resourceType is set to ::CUresourcetype::CU_RESOURCE_TYPE_ARRAY then
+ ::CUarrayMapInfo::resource::array must be set to a valid sparse CUDA array handle.
+ The CUDA array must be either a 2D, 2D layered or 3D CUDA array and must have been allocated using
+ ::cuArrayCreate or ::cuArray3DCreate with the flag ::CUDA_ARRAY3D_SPARSE
+ or ::CUDA_ARRAY3D_DEFERRED_MAPPING.
+ For CUDA arrays obtained using ::cuMipmappedArrayGetLevel, ::CUDA_ERROR_INVALID_VALUE will be returned.
+ If ::CUarrayMapInfo::resourceType is set to ::CUresourcetype::CU_RESOURCE_TYPE_MIPMAPPED_ARRAY
+ then ::CUarrayMapInfo::resource::mipmap must be set to a valid sparse CUDA mipmapped array handle.
+ The CUDA mipmapped array must be either a 2D, 2D layered or 3D CUDA mipmapped array and must have been
+ allocated using ::cuMipmappedArrayCreate with the flag ::CUDA_ARRAY3D_SPARSE
+ or ::CUDA_ARRAY3D_DEFERRED_MAPPING.
+
+ ::CUarrayMapInfo::subresourceType specifies the type of subresource within the resource.
+ ::CUarraySparseSubresourceType_enum is defined as:
+\code
+typedef enum CUarraySparseSubresourceType_enum {
+CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL = 0,
+CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL = 1
+} CUarraySparseSubresourceType;
+\endcode
+
+ where ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL indicates a
+ sparse-miplevel which spans at least one tile in every dimension. The remaining miplevels which
+ are too small to span at least one tile in any dimension constitute the mip tail region as indicated by
+ ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL subresource type.
+
+ If ::CUarrayMapInfo::subresourceType is set to ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL
+ then ::CUarrayMapInfo::subresource::sparseLevel struct must contain valid array subregion offsets and extents.
+ The ::CUarrayMapInfo::subresource::sparseLevel::offsetX, ::CUarrayMapInfo::subresource::sparseLevel::offsetY
+ and ::CUarrayMapInfo::subresource::sparseLevel::offsetZ must specify valid X, Y and Z offsets respectively.
+ The ::CUarrayMapInfo::subresource::sparseLevel::extentWidth, ::CUarrayMapInfo::subresource::sparseLevel::extentHeight
+ and ::CUarrayMapInfo::subresource::sparseLevel::extentDepth must specify valid width, height and depth extents respectively.
+ These offsets and extents must be aligned to the corresponding tile dimension.
+ For CUDA mipmapped arrays ::CUarrayMapInfo::subresource::sparseLevel::level must specify a valid mip level index. Otherwise,
+ must be zero.
+ For layered CUDA arrays and layered CUDA mipmapped arrays ::CUarrayMapInfo::subresource::sparseLevel::layer must specify a valid layer index. Otherwise,
+ must be zero.
+ ::CUarrayMapInfo::subresource::sparseLevel::offsetZ must be zero and ::CUarrayMapInfo::subresource::sparseLevel::extentDepth
+ must be set to 1 for 2D and 2D layered CUDA arrays and CUDA mipmapped arrays.
+ Tile extents can be obtained by calling ::cuArrayGetSparseProperties and ::cuMipmappedArrayGetSparseProperties
+
+ If ::CUarrayMapInfo::subresourceType is set to ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL
+ then ::CUarrayMapInfo::subresource::miptail struct must contain valid mip tail offset in
+ ::CUarrayMapInfo::subresource::miptail::offset and size in ::CUarrayMapInfo::subresource::miptail::size.
+ Both, mip tail offset and mip tail size must be aligned to the tile size.
+ For layered CUDA mipmapped arrays which don't have the flag ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL set in ::CUDA_ARRAY_SPARSE_PROPERTIES::flags
+ as returned by ::cuMipmappedArrayGetSparseProperties, ::CUarrayMapInfo::subresource::miptail::layer must specify a valid layer index.
+ Otherwise, must be zero.
+
+ If ::CUarrayMapInfo::resource::array or ::CUarrayMapInfo::resource::mipmap was created with ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ flag set the ::CUarrayMapInfo::subresourceType and the contents of ::CUarrayMapInfo::subresource will be ignored.
+
+ ::CUarrayMapInfo::memOperationType specifies the type of operation. ::CUmemOperationType is defined as:
+\code
+typedef enum CUmemOperationType_enum {
+CU_MEM_OPERATION_TYPE_MAP = 1,
+CU_MEM_OPERATION_TYPE_UNMAP = 2
+} CUmemOperationType;
+\endcode
+ If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_MAP then the subresource
+ will be mapped onto the tile pool memory specified by ::CUarrayMapInfo::memHandle at offset ::CUarrayMapInfo::offset.
+ The tile pool allocation has to be created by specifying the ::CU_MEM_CREATE_USAGE_TILE_POOL flag when calling ::cuMemCreate. Also,
+ ::CUarrayMapInfo::memHandleType must be set to ::CUmemHandleType::CU_MEM_HANDLE_TYPE_GENERIC.
+
+ If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_UNMAP then an unmapping operation
+ is performed. ::CUarrayMapInfo::memHandle must be NULL.
+
+ ::CUarrayMapInfo::deviceBitMask specifies the list of devices that must map or unmap physical memory.
+ Currently, this mask must have exactly one bit set, and the corresponding device must match the device associated with the stream.
+ If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_MAP, the device must also match
+ the device associated with the tile pool memory allocation as specified by ::CUarrayMapInfo::memHandle.
+
+ ::CUarrayMapInfo::flags and ::CUarrayMapInfo::reserved[] are unused and must be set to zero.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+
+ \param[in] mapInfoList - List of ::CUarrayMapInfo
+ \param[in] count - Count of ::CUarrayMapInfo in \p mapInfoList
+ \param[in] hStream - Stream identifier for the stream to use for map or unmap operations
+
+ \sa ::cuMipmappedArrayCreate, ::cuArrayCreate, ::cuArray3DCreate, ::cuMemCreate, ::cuArrayGetSparseProperties, ::cuMipmappedArrayGetSparseProperties*/
+ fn cuMemMapArrayAsync_ptsz(
+ mapInfoList: *mut cuda_types::CUarrayMapInfo,
+ count: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Unmap the backing memory of a given address range.
+
+ The range must be the entire contiguous address range that was mapped to. In
+ other words, ::cuMemUnmap cannot unmap a sub-range of an address range mapped
+ by ::cuMemCreate / ::cuMemMap. Any backing memory allocations will be freed
+ if there are no existing mappings and there are no unreleased memory handles.
+
+ When ::cuMemUnmap returns successfully the address range is converted to an
+ address reservation and can be used for a future calls to ::cuMemMap. Any new
+ mapping to this virtual address will need to have access granted through
+ ::cuMemSetAccess, as all mappings start with no accessibility setup.
+
+ \param[in] ptr - Starting address for the virtual address range to unmap
+ \param[in] size - Size of the virtual address range to unmap
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+ \note_sync
+
+ \sa ::cuMemCreate, ::cuMemAddressReserve*/
+ fn cuMemUnmap(ptr: cuda_types::CUdeviceptr, size: usize) -> cuda_types::CUresult;
+ /** \brief Set the access flags for each location specified in \p desc for the given virtual address range
+
+ Given the virtual address range via \p ptr and \p size, and the locations
+ in the array given by \p desc and \p count, set the access flags for the
+ target locations. The range must be a fully mapped address range
+ containing all allocations created by ::cuMemMap / ::cuMemCreate.
+ Users cannot specify ::CU_MEM_LOCATION_TYPE_HOST_NUMA accessibility for allocations created on with other location types.
+ Note: When ::CUmemAccessDesc::CUmemLocation::type is ::CU_MEM_LOCATION_TYPE_HOST_NUMA, ::CUmemAccessDesc::CUmemLocation::id
+ is ignored.
+ When setting the access flags for a virtual address range mapping a multicast
+ object, \p ptr and \p size must be aligned to the value returned by
+ ::cuMulticastGetGranularity with the flag ::CU_MULTICAST_MINIMUM_GRANULARITY.
+ For best performance however, it is recommended that \p ptr and \p size be
+ aligned to the value returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_RECOMMENDED_GRANULARITY.
+
+ \param[in] ptr - Starting address for the virtual address range
+ \param[in] size - Length of the virtual address range
+ \param[in] desc - Array of ::CUmemAccessDesc that describe how to change the
+ - mapping for each location specified
+ \param[in] count - Number of ::CUmemAccessDesc in \p desc
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+ \note_sync
+
+ \sa ::cuMemSetAccess, ::cuMemCreate, :cuMemMap*/
+ fn cuMemSetAccess(
+ ptr: cuda_types::CUdeviceptr,
size: usize,
- desc: *const CUmemAccessDesc,
+ desc: *const cuda_types::CUmemAccessDesc,
count: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetAccess(
- flags: *mut ::std::os::raw::c_ulonglong,
- location: *const CUmemLocation,
- ptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemExportToShareableHandle(
- shareableHandle: *mut ::std::os::raw::c_void,
- handle: CUmemGenericAllocationHandle,
- handleType: CUmemAllocationHandleType,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemImportFromShareableHandle(
- handle: *mut CUmemGenericAllocationHandle,
- osHandle: *mut ::std::os::raw::c_void,
- shHandleType: CUmemAllocationHandleType,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetAllocationGranularity(
+ ) -> cuda_types::CUresult;
+ /** \brief Get the access \p flags set for the given \p location and \p ptr
+
+ \param[out] flags - Flags set for this location
+ \param[in] location - Location in which to check the flags for
+ \param[in] ptr - Address in which to check the access flags for
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemSetAccess*/
+ fn cuMemGetAccess(
+ flags: *mut ::core::ffi::c_ulonglong,
+ location: *const cuda_types::CUmemLocation,
+ ptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Exports an allocation to a requested shareable handle type
+
+ Given a CUDA memory handle, create a shareable memory
+ allocation handle that can be used to share the memory with other
+ processes. The recipient process can convert the shareable handle back into a
+ CUDA memory handle using ::cuMemImportFromShareableHandle and map
+ it with ::cuMemMap. The implementation of what this handle is and how it
+ can be transferred is defined by the requested handle type in \p handleType
+
+ Once all shareable handles are closed and the allocation is released, the allocated
+ memory referenced will be released back to the OS and uses of the CUDA handle afterward
+ will lead to undefined behavior.
+
+ This API can also be used in conjunction with other APIs (e.g. Vulkan, OpenGL)
+ that support importing memory from the shareable type
+
+ \param[out] shareableHandle - Pointer to the location in which to store the requested handle type
+ \param[in] handle - CUDA handle for the memory allocation
+ \param[in] handleType - Type of shareable handle requested (defines type and size of the \p shareableHandle output parameter)
+ \param[in] flags - Reserved, must be zero
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemImportFromShareableHandle*/
+ fn cuMemExportToShareableHandle(
+ shareableHandle: *mut ::core::ffi::c_void,
+ handle: cuda_types::CUmemGenericAllocationHandle,
+ handleType: cuda_types::CUmemAllocationHandleType,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Imports an allocation from a requested shareable handle type.
+
+ If the current process cannot support the memory described by this shareable
+ handle, this API will error as ::CUDA_ERROR_NOT_SUPPORTED.
+
+ If \p shHandleType is ::CU_MEM_HANDLE_TYPE_FABRIC and the importer process has not been
+ granted access to the same IMEX channel as the exporter process, this API will error
+ as ::CUDA_ERROR_NOT_PERMITTED.
+
+ \note Importing shareable handles exported from some graphics APIs(VUlkan, OpenGL, etc)
+ created on devices under an SLI group may not be supported, and thus this API will
+ return CUDA_ERROR_NOT_SUPPORTED.
+ There is no guarantee that the contents of \p handle will be the same CUDA memory handle
+ for the same given OS shareable handle, or the same underlying allocation.
+
+ \param[out] handle - CUDA Memory handle for the memory allocation.
+ \param[in] osHandle - Shareable Handle representing the memory allocation that is to be imported.
+ \param[in] shHandleType - handle type of the exported handle ::CUmemAllocationHandleType.
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemExportToShareableHandle, ::cuMemMap, ::cuMemRelease*/
+ fn cuMemImportFromShareableHandle(
+ handle: *mut cuda_types::CUmemGenericAllocationHandle,
+ osHandle: *mut ::core::ffi::c_void,
+ shHandleType: cuda_types::CUmemAllocationHandleType,
+ ) -> cuda_types::CUresult;
+ /** \brief Calculates either the minimal or recommended granularity
+
+ Calculates either the minimal or recommended granularity
+ for a given allocation specification and returns it in granularity. This
+ granularity can be used as a multiple for alignment, size, or address mapping.
+
+ \param[out] granularity Returned granularity.
+ \param[in] prop Property for which to determine the granularity for
+ \param[in] option Determines which granularity to return
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemCreate, ::cuMemMap*/
+ fn cuMemGetAllocationGranularity(
granularity: *mut usize,
- prop: *const CUmemAllocationProp,
- option: CUmemAllocationGranularity_flags,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetAllocationPropertiesFromHandle(
- prop: *mut CUmemAllocationProp,
- handle: CUmemGenericAllocationHandle,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemRetainAllocationHandle(
- handle: *mut CUmemGenericAllocationHandle,
- addr: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemFreeAsync_ptsz(dptr: CUdeviceptr, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocAsync_ptsz(
- dptr: *mut CUdeviceptr,
+ prop: *const cuda_types::CUmemAllocationProp,
+ option: cuda_types::CUmemAllocationGranularity_flags,
+ ) -> cuda_types::CUresult;
+ /** \brief Retrieve the contents of the property structure defining properties for this handle
+
+ \param[out] prop - Pointer to a properties structure which will hold the information about this handle
+ \param[in] handle - Handle which to perform the query on
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemCreate, ::cuMemImportFromShareableHandle*/
+ fn cuMemGetAllocationPropertiesFromHandle(
+ prop: *mut cuda_types::CUmemAllocationProp,
+ handle: cuda_types::CUmemGenericAllocationHandle,
+ ) -> cuda_types::CUresult;
+ /** \brief Given an address \p addr, returns the allocation handle of the backing memory allocation.
+
+ The handle is guaranteed to be the same handle value used to map the memory. If the address
+ requested is not mapped, the function will fail. The returned handle must be released with
+ corresponding number of calls to ::cuMemRelease.
+
+ \note The address \p addr, can be any address in a range previously mapped
+ by ::cuMemMap, and not necessarily the start address.
+
+ \param[out] handle CUDA Memory handle for the backing memory allocation.
+ \param[in] addr Memory address to query, that has been mapped previously.
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMemCreate, ::cuMemRelease, ::cuMemMap*/
+ fn cuMemRetainAllocationHandle(
+ handle: *mut cuda_types::CUmemGenericAllocationHandle,
+ addr: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Frees memory with stream ordered semantics
+
+ Inserts a free operation into \p hStream.
+ The allocation must not be accessed after stream execution reaches the free.
+ After this API returns, accessing the memory from any subsequent work launched on the GPU
+ or querying its pointer attributes results in undefined behavior.
+
+ \note During stream capture, this function results in the creation of a free node and
+ must therefore be passed the address of a graph allocation.
+
+ \param dptr - memory to free
+ \param hStream - The stream establishing the stream ordering contract.
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ ::CUDA_ERROR_NOT_SUPPORTED*/
+ fn cuMemFreeAsync_ptsz(
+ dptr: cuda_types::CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Allocates memory with stream ordered semantics
+
+ Inserts an allocation operation into \p hStream.
+ A pointer to the allocated memory is returned immediately in *dptr.
+ The allocation must not be accessed until the the allocation operation completes.
+ The allocation comes from the memory pool current to the stream's device.
+
+ \note The default memory pool of a device contains device memory from that device.
+ \note Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ operation completes before work submitted in a separate stream runs.
+ \note During stream capture, this function results in the creation of an allocation node. In this case,
+ the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ are used to set the node's creation parameters.
+
+ \param[out] dptr - Returned device pointer
+ \param[in] bytesize - Number of bytes to allocate
+ \param[in] hStream - The stream establishing the stream ordering contract and the memory pool to allocate from
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemAllocFromPoolAsync, ::cuMemFreeAsync, ::cuDeviceSetMemPool,
+ ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate,
+ ::cuMemPoolSetAccess, ::cuMemPoolSetAttribute*/
+ fn cuMemAllocAsync_ptsz(
+ dptr: *mut cuda_types::CUdeviceptr,
bytesize: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolTrimTo(pool: CUmemoryPool, minBytesToKeep: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolSetAttribute(
- pool: CUmemoryPool,
- attr: CUmemPool_attribute,
- value: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolGetAttribute(
- pool: CUmemoryPool,
- attr: CUmemPool_attribute,
- value: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolSetAccess(
- pool: CUmemoryPool,
- map: *const CUmemAccessDesc,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Tries to release memory back to the OS
+
+ Releases memory back to the OS until the pool contains fewer than minBytesToKeep
+ reserved bytes, or there is no more memory that the allocator can safely release.
+ The allocator cannot release OS allocations that back outstanding asynchronous allocations.
+ The OS allocations may happen at different granularity from the user allocations.
+
+ \note: Allocations that have not been freed count as outstanding.
+ \note: Allocations that have been asynchronously freed but whose completion has
+ not been observed on the host (eg. by a synchronize) can count as outstanding.
+
+ \param[in] pool - The memory pool to trim
+ \param[in] minBytesToKeep - If the pool has less than minBytesToKeep reserved,
+ the TrimTo operation is a no-op. Otherwise the pool will be guaranteed to have
+ at least minBytesToKeep bytes reserved after the operation.
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolTrimTo(
+ pool: cuda_types::CUmemoryPool,
+ minBytesToKeep: usize,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets attributes of a memory pool
+
+ Supported attributes are:
+ - ::CU_MEMPOOL_ATTR_RELEASE_THRESHOLD: (value type = cuuint64_t)
+ Amount of reserved memory in bytes to hold onto before trying
+ to release memory back to the OS. When more than the release
+ threshold bytes of memory are held by the memory pool, the
+ allocator will try to release memory back to the OS on the
+ next call to stream, event or context synchronize. (default 0)
+ - ::CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES: (value type = int)
+ Allow ::cuMemAllocAsync to use memory asynchronously freed
+ in another stream as long as a stream ordering dependency
+ of the allocating stream on the free action exists.
+ Cuda events and null stream interactions can create the required
+ stream ordered dependencies. (default enabled)
+ - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC: (value type = int)
+ Allow reuse of already completed frees when there is no dependency
+ between the free and allocation. (default enabled)
+ - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES: (value type = int)
+ Allow ::cuMemAllocAsync to insert new stream dependencies
+ in order to establish the stream ordering required to reuse
+ a piece of memory released by ::cuMemFreeAsync (default enabled).
+ - ::CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH: (value type = cuuint64_t)
+ Reset the high watermark that tracks the amount of backing memory that was
+ allocated for the memory pool. It is illegal to set this attribute to a non-zero value.
+ - ::CU_MEMPOOL_ATTR_USED_MEM_HIGH: (value type = cuuint64_t)
+ Reset the high watermark that tracks the amount of used memory that was
+ allocated for the memory pool.
+
+ \param[in] pool - The memory pool to modify
+ \param[in] attr - The attribute to modify
+ \param[in] value - Pointer to the value to assign
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolSetAttribute(
+ pool: cuda_types::CUmemoryPool,
+ attr: cuda_types::CUmemPool_attribute,
+ value: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets attributes of a memory pool
+
+ Supported attributes are:
+ - ::CU_MEMPOOL_ATTR_RELEASE_THRESHOLD: (value type = cuuint64_t)
+ Amount of reserved memory in bytes to hold onto before trying
+ to release memory back to the OS. When more than the release
+ threshold bytes of memory are held by the memory pool, the
+ allocator will try to release memory back to the OS on the
+ next call to stream, event or context synchronize. (default 0)
+ - ::CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES: (value type = int)
+ Allow ::cuMemAllocAsync to use memory asynchronously freed
+ in another stream as long as a stream ordering dependency
+ of the allocating stream on the free action exists.
+ Cuda events and null stream interactions can create the required
+ stream ordered dependencies. (default enabled)
+ - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC: (value type = int)
+ Allow reuse of already completed frees when there is no dependency
+ between the free and allocation. (default enabled)
+ - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES: (value type = int)
+ Allow ::cuMemAllocAsync to insert new stream dependencies
+ in order to establish the stream ordering required to reuse
+ a piece of memory released by ::cuMemFreeAsync (default enabled).
+ - ::CU_MEMPOOL_ATTR_RESERVED_MEM_CURRENT: (value type = cuuint64_t)
+ Amount of backing memory currently allocated for the mempool
+ - ::CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH: (value type = cuuint64_t)
+ High watermark of backing memory allocated for the mempool since the
+ last time it was reset.
+ - ::CU_MEMPOOL_ATTR_USED_MEM_CURRENT: (value type = cuuint64_t)
+ Amount of memory from the pool that is currently in use by the application.
+ - ::CU_MEMPOOL_ATTR_USED_MEM_HIGH: (value type = cuuint64_t)
+ High watermark of the amount of memory from the pool that was in use by the application.
+
+ \param[in] pool - The memory pool to get attributes of
+ \param[in] attr - The attribute to get
+ \param[out] value - Retrieved value
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolGetAttribute(
+ pool: cuda_types::CUmemoryPool,
+ attr: cuda_types::CUmemPool_attribute,
+ value: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Controls visibility of pools between devices
+
+ \param[in] pool - The pool being modified
+ \param[in] map - Array of access descriptors. Each descriptor instructs the access to enable for a single gpu.
+ \param[in] count - Number of descriptors in the map array.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolSetAccess(
+ pool: cuda_types::CUmemoryPool,
+ map: *const cuda_types::CUmemAccessDesc,
count: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolGetAccess(
- flags: *mut CUmemAccess_flags,
- memPool: CUmemoryPool,
- location: *mut CUmemLocation,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolCreate(pool: *mut CUmemoryPool, poolProps: *const CUmemPoolProps) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolDestroy(pool: CUmemoryPool) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocFromPoolAsync_ptsz(
- dptr: *mut CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the accessibility of a pool from a device
+
+ Returns the accessibility of the pool's memory from the specified location.
+
+ \param[out] flags - the accessibility of the pool from the specified location
+ \param[in] memPool - the pool being queried
+ \param[in] location - the location accessing the pool
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolGetAccess(
+ flags: *mut cuda_types::CUmemAccess_flags,
+ memPool: cuda_types::CUmemoryPool,
+ location: *mut cuda_types::CUmemLocation,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a memory pool
+
+ Creates a CUDA memory pool and returns the handle in \p pool. The \p poolProps determines
+ the properties of the pool such as the backing device and IPC capabilities.
+
+ To create a memory pool targeting a specific host NUMA node, applications must
+ set ::CUmemPoolProps::CUmemLocation::type to ::CU_MEM_LOCATION_TYPE_HOST_NUMA and
+ ::CUmemPoolProps::CUmemLocation::id must specify the NUMA ID of the host memory node.
+ By default, the pool's memory will be accessible from the device it is allocated on.
+ In the case of pools created with ::CU_MEM_LOCATION_TYPE_HOST_NUMA, their default accessibility
+ will be from the host CPU.
+ Applications can control the maximum size of the pool by specifying a non-zero value for ::CUmemPoolProps::maxSize.
+ If set to 0, the maximum size of the pool will default to a system dependent value.
+
+ Applications can set ::CUmemPoolProps::handleTypes to ::CU_MEM_HANDLE_TYPE_FABRIC
+ in order to create ::CUmemoryPool suitable for sharing within an IMEX domain.
+ An IMEX domain is either an OS instance or a group of securely connected OS instances
+ using the NVIDIA IMEX daemon. An IMEX channel is a global resource within the IMEX domain
+ that represents a logical entity that aims to provide fine grained accessibility control
+ for the participating processes. When exporter and importer CUDA processes have been
+ granted access to the same IMEX channel, they can securely share memory.
+ If the allocating process does not have access setup for an IMEX channel, attempting to export
+ a ::CUmemoryPool with ::CU_MEM_HANDLE_TYPE_FABRIC will result in ::CUDA_ERROR_NOT_PERMITTED.
+ The nvidia-modprobe CLI provides more information regarding setting up of IMEX channels.
+
+ \note Specifying CU_MEM_HANDLE_TYPE_NONE creates a memory pool that will not support IPC.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_NOT_PERMITTED
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuDeviceSetMemPool, ::cuDeviceGetMemPool, ::cuDeviceGetDefaultMemPool,
+ ::cuMemAllocFromPoolAsync, ::cuMemPoolExportToShareableHandle*/
+ fn cuMemPoolCreate(
+ pool: *mut cuda_types::CUmemoryPool,
+ poolProps: *const cuda_types::CUmemPoolProps,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys the specified memory pool
+
+ If any pointers obtained from this pool haven't been freed or
+ the pool has free operations that haven't completed
+ when ::cuMemPoolDestroy is invoked, the function will return immediately and the
+ resources associated with the pool will be released automatically
+ once there are no more outstanding allocations.
+
+ Destroying the current mempool of a device sets the default mempool of
+ that device as the current mempool for that device.
+
+ \note A device's default memory pool cannot be destroyed.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuMemFreeAsync, ::cuDeviceSetMemPool, ::cuDeviceGetMemPool,
+ ::cuDeviceGetDefaultMemPool, ::cuMemPoolCreate*/
+ fn cuMemPoolDestroy(pool: cuda_types::CUmemoryPool) -> cuda_types::CUresult;
+ /** \brief Allocates memory from a specified pool with stream ordered semantics.
+
+ Inserts an allocation operation into \p hStream.
+ A pointer to the allocated memory is returned immediately in *dptr.
+ The allocation must not be accessed until the the allocation operation completes.
+ The allocation comes from the specified memory pool.
+
+ \note
+ - The specified memory pool may be from a device different than that of the specified \p hStream.
+
+ - Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ operation completes before work submitted in a separate stream runs.
+
+ \note During stream capture, this function results in the creation of an allocation node. In this case,
+ the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ are used to set the node's creation parameters.
+
+ \param[out] dptr - Returned device pointer
+ \param[in] bytesize - Number of bytes to allocate
+ \param[in] pool - The pool to allocate from
+ \param[in] hStream - The stream establishing the stream ordering semantic
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ ::cuDeviceGetMemPool, ::cuMemPoolCreate, ::cuMemPoolSetAccess,
+ ::cuMemPoolSetAttribute*/
+ fn cuMemAllocFromPoolAsync_ptsz(
+ dptr: *mut cuda_types::CUdeviceptr,
bytesize: usize,
- pool: CUmemoryPool,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolExportToShareableHandle(
- handle_out: *mut ::std::os::raw::c_void,
- pool: CUmemoryPool,
- handleType: CUmemAllocationHandleType,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolImportFromShareableHandle(
- pool_out: *mut CUmemoryPool,
- handle: *mut ::std::os::raw::c_void,
- handleType: CUmemAllocationHandleType,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolExportPointer(
- shareData_out: *mut CUmemPoolPtrExportData,
- ptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPoolImportPointer(
- ptr_out: *mut CUdeviceptr,
- pool: CUmemoryPool,
- shareData: *mut CUmemPoolPtrExportData,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastCreate(
- mcHandle: *mut CUmemGenericAllocationHandle,
- prop: *const CUmulticastObjectProp,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastAddDevice(mcHandle: CUmemGenericAllocationHandle, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastBindMem(
- mcHandle: CUmemGenericAllocationHandle,
+ pool: cuda_types::CUmemoryPool,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Exports a memory pool to the requested handle type.
+
+ Given an IPC capable mempool, create an OS handle to share the pool with another process.
+ A recipient process can convert the shareable handle into a mempool with ::cuMemPoolImportFromShareableHandle.
+ Individual pointers can then be shared with the ::cuMemPoolExportPointer and ::cuMemPoolImportPointer APIs.
+ The implementation of what the shareable handle is and how it can be transferred is defined by the requested
+ handle type.
+
+ \note: To create an IPC capable mempool, create a mempool with a CUmemAllocationHandleType other than CU_MEM_HANDLE_TYPE_NONE.
+
+ \param[out] handle_out - Returned OS handle
+ \param[in] pool - pool to export
+ \param[in] handleType - the type of handle to create
+ \param[in] flags - must be 0
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemPoolImportFromShareableHandle, ::cuMemPoolExportPointer,
+ ::cuMemPoolImportPointer, ::cuMemAllocAsync, ::cuMemFreeAsync,
+ ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate,
+ ::cuMemPoolSetAccess, ::cuMemPoolSetAttribute*/
+ fn cuMemPoolExportToShareableHandle(
+ handle_out: *mut ::core::ffi::c_void,
+ pool: cuda_types::CUmemoryPool,
+ handleType: cuda_types::CUmemAllocationHandleType,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief imports a memory pool from a shared handle.
+
+ Specific allocations can be imported from the imported pool with cuMemPoolImportPointer.
+
+ If \p handleType is ::CU_MEM_HANDLE_TYPE_FABRIC and the importer process has not been
+ granted access to the same IMEX channel as the exporter process, this API will error
+ as ::CUDA_ERROR_NOT_PERMITTED.
+
+
+ \note Imported memory pools do not support creating new allocations.
+ As such imported memory pools may not be used in cuDeviceSetMemPool
+ or ::cuMemAllocFromPoolAsync calls.
+
+ \param[out] pool_out - Returned memory pool
+ \param[in] handle - OS handle of the pool to open
+ \param[in] handleType - The type of handle being imported
+ \param[in] flags - must be 0
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolExportPointer, ::cuMemPoolImportPointer*/
+ fn cuMemPoolImportFromShareableHandle(
+ pool_out: *mut cuda_types::CUmemoryPool,
+ handle: *mut ::core::ffi::c_void,
+ handleType: cuda_types::CUmemAllocationHandleType,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Export data to share a memory pool allocation between processes.
+
+ Constructs \p shareData_out for sharing a specific allocation from an already shared memory pool.
+ The recipient process can import the allocation with the ::cuMemPoolImportPointer api.
+ The data is not a handle and may be shared through any IPC mechanism.
+
+ \param[out] shareData_out - Returned export data
+ \param[in] ptr - pointer to memory being exported
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolImportFromShareableHandle, ::cuMemPoolImportPointer*/
+ fn cuMemPoolExportPointer(
+ shareData_out: *mut cuda_types::CUmemPoolPtrExportData,
+ ptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Import a memory pool allocation from another process.
+
+ Returns in \p ptr_out a pointer to the imported memory.
+ The imported memory must not be accessed before the allocation operation completes
+ in the exporting process. The imported memory must be freed from all importing processes before
+ being freed in the exporting process. The pointer may be freed with cuMemFree
+ or cuMemFreeAsync. If cuMemFreeAsync is used, the free must be completed
+ on the importing process before the free operation on the exporting process.
+
+ \note The cuMemFreeAsync api may be used in the exporting process before
+ the cuMemFreeAsync operation completes in its stream as long as the
+ cuMemFreeAsync in the exporting process specifies a stream with
+ a stream dependency on the importing process's cuMemFreeAsync.
+
+ \param[out] ptr_out - pointer to imported memory
+ \param[in] pool - pool from which to import
+ \param[in] shareData - data specifying the memory to import
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolImportFromShareableHandle, ::cuMemPoolExportPointer*/
+ fn cuMemPoolImportPointer(
+ ptr_out: *mut cuda_types::CUdeviceptr,
+ pool: cuda_types::CUmemoryPool,
+ shareData: *mut cuda_types::CUmemPoolPtrExportData,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a generic allocation handle representing a multicast object described by the given properties.
+
+ This creates a multicast object as described by \p prop. The number of
+ participating devices is specified by ::CUmulticastObjectProp::numDevices.
+ Devices can be added to the multicast object via ::cuMulticastAddDevice.
+ All participating devices must be added to the multicast object before memory
+ can be bound to it. Memory is bound to the multicast object via either
+ ::cuMulticastBindMem or ::cuMulticastBindAddr, and can be unbound via
+ ::cuMulticastUnbind. The total amount of memory that can be bound per device
+ is specified by :CUmulticastObjectProp::size. This size must be a multiple of
+ the value returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_GRANULARITY_MINIMUM. For best performance however, the size
+ should be aligned to the value returned by ::cuMulticastGetGranularity with
+ the flag ::CU_MULTICAST_GRANULARITY_RECOMMENDED.
+
+ After all participating devices have been added, multicast objects can also
+ be mapped to a device's virtual address space using the virtual memory
+ management APIs (see ::cuMemMap and ::cuMemSetAccess). Multicast objects can
+ also be shared with other processes by requesting a shareable handle via
+ ::cuMemExportToShareableHandle. Note that the desired types of shareable
+ handles must be specified in the bitmask ::CUmulticastObjectProp::handleTypes.
+ Multicast objects can be released using the virtual memory management API
+ ::cuMemRelease.
+
+ \param[out] mcHandle Value of handle returned.
+ \param[in] prop Properties of the multicast object to create.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMulticastAddDevice, ::cuMulticastBindMem, ::cuMulticastBindAddr, ::cuMulticastUnbind
+ \sa ::cuMemCreate, ::cuMemRelease, ::cuMemExportToShareableHandle, ::cuMemImportFromShareableHandle*/
+ fn cuMulticastCreate(
+ mcHandle: *mut cuda_types::CUmemGenericAllocationHandle,
+ prop: *const cuda_types::CUmulticastObjectProp,
+ ) -> cuda_types::CUresult;
+ /** \brief Associate a device to a multicast object.
+
+ Associates a device to a multicast object. The added device will be a part of
+ the multicast team of size specified by CUmulticastObjectProp::numDevices
+ during ::cuMulticastCreate.
+ The association of the device to the multicast object is permanent during
+ the life time of the multicast object.
+ All devices must be added to the multicast team before any memory can be
+ bound to any device in the team. Any calls to ::cuMulticastBindMem or
+ ::cuMulticastBindAddr will block until all devices have been added.
+ Similarly all devices must be added to the multicast team before a virtual
+ address range can be mapped to the multicast object. A call to ::cuMemMap
+ will block until all devices have been added.
+
+ \param[in] mcHandle Handle representing a multicast object.
+ \param[in] dev Device that will be associated to the multicast
+ object.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMulticastCreate, ::cuMulticastBindMem, ::cuMulticastBindAddr*/
+ fn cuMulticastAddDevice(
+ mcHandle: cuda_types::CUmemGenericAllocationHandle,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Bind a memory allocation represented by a handle to a multicast object.
+
+ Binds a memory allocation specified by \p memHandle and created via
+ ::cuMemCreate to a multicast object represented by \p mcHandle and created
+ via ::cuMulticastCreate. The intended \p size of the bind, the offset in the
+ multicast range \p mcOffset as well as the offset in the memory \p memOffset
+ must be a multiple of the value returned by ::cuMulticastGetGranularity with
+ the flag ::CU_MULTICAST_GRANULARITY_MINIMUM. For best performance however,
+ \p size, \p mcOffset and \p memOffset should be aligned to the granularity of
+ the memory allocation(see ::cuMemGetAllocationGranularity) or to the value
+ returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_GRANULARITY_RECOMMENDED.
+
+ The \p size + \p memOffset must be smaller than the size of the allocated
+ memory. Similarly the \p size + \p mcOffset must be smaller than the size
+ of the multicast object.
+ The memory allocation must have beeen created on one of the devices
+ that was added to the multicast team via ::cuMulticastAddDevice.
+ Externally shareable as well as imported multicast objects can be bound only
+ to externally shareable memory.
+ Note that this call will return CUDA_ERROR_OUT_OF_MEMORY if there are
+ insufficient resources required to perform the bind. This call may also
+ return CUDA_ERROR_SYSTEM_NOT_READY if the necessary system software is not
+ initialized or running.
+
+ \param[in] mcHandle Handle representing a multicast object.
+ \param[in] mcOffset Offset into the multicast object for attachment.
+ \param[in] memHandle Handle representing a memory allocation.
+ \param[in] memOffset Offset into the memory for attachment.
+ \param[in] size Size of the memory that will be bound to the
+ multicast object.
+ \param[in] flags Flags for future use, must be zero for now.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_SYSTEM_NOT_READY
+
+ \sa ::cuMulticastCreate, ::cuMulticastAddDevice, ::cuMemCreate*/
+ fn cuMulticastBindMem(
+ mcHandle: cuda_types::CUmemGenericAllocationHandle,
mcOffset: usize,
- memHandle: CUmemGenericAllocationHandle,
+ memHandle: cuda_types::CUmemGenericAllocationHandle,
memOffset: usize,
size: usize,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastBindAddr(
- mcHandle: CUmemGenericAllocationHandle,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Bind a memory allocation represented by a virtual address to a multicast object.
+
+ Binds a memory allocation specified by its mapped address \p memptr to a
+ multicast object represented by \p mcHandle.
+ The memory must have been allocated via ::cuMemCreate or ::cudaMallocAsync.
+ The intended \p size of the bind, the offset in the multicast range
+ \p mcOffset and \p memptr must be a multiple of the value returned by
+ ::cuMulticastGetGranularity with the flag ::CU_MULTICAST_GRANULARITY_MINIMUM.
+ For best performance however, \p size, \p mcOffset and \p memptr should be
+ aligned to the value returned by ::cuMulticastGetGranularity with the flag
+ ::CU_MULTICAST_GRANULARITY_RECOMMENDED.
+
+ The \p size must be smaller than the size of the allocated memory.
+ Similarly the \p size + \p mcOffset must be smaller than the total size
+ of the multicast object.
+ The memory allocation must have beeen created on one of the devices
+ that was added to the multicast team via ::cuMulticastAddDevice.
+ Externally shareable as well as imported multicast objects can be bound only
+ to externally shareable memory.
+ Note that this call will return CUDA_ERROR_OUT_OF_MEMORY if there are
+ insufficient resources required to perform the bind. This call may also
+ return CUDA_ERROR_SYSTEM_NOT_READY if the necessary system software is not
+ initialized or running.
+
+ \param[in] mcHandle Handle representing a multicast object.
+ \param[in] mcOffset Offset into multicast va range for attachment.
+ \param[in] memptr Virtual address of the memory allocation.
+ \param[in] size Size of memory that will be bound to the
+ multicast object.
+ \param[in] flags Flags for future use, must be zero now.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY,
+ ::CUDA_ERROR_SYSTEM_NOT_READY
+
+ \sa ::cuMulticastCreate, ::cuMulticastAddDevice, ::cuMemCreate*/
+ fn cuMulticastBindAddr(
+ mcHandle: cuda_types::CUmemGenericAllocationHandle,
mcOffset: usize,
- memptr: CUdeviceptr,
+ memptr: cuda_types::CUdeviceptr,
size: usize,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastUnbind(
- mcHandle: CUmemGenericAllocationHandle,
- dev: CUdevice,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Unbind any memory allocations bound to a multicast object at a given offset and upto a given size.
+
+ Unbinds any memory allocations hosted on \p dev and bound to a multicast
+ object at \p mcOffset and upto a given \p size.
+ The intended \p size of the unbind and the offset in the multicast range
+ ( \p mcOffset ) must be a multiple of the value returned by
+ ::cuMulticastGetGranularity flag ::CU_MULTICAST_GRANULARITY_MINIMUM.
+ The \p size + \p mcOffset must be smaller than the total size of the
+ multicast object.
+
+ \note
+ Warning:
+ The \p mcOffset and the \p size must match the corresponding values specified
+ during the bind call. Any other values may result in undefined behavior.
+
+ \param[in] mcHandle Handle representing a multicast object.
+ \param[in] dev Device that hosts the memory allocation.
+ \param[in] mcOffset Offset into the multicast object.
+ \param[in] size Desired size to unbind.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMulticastBindMem, ::cuMulticastBindAddr*/
+ fn cuMulticastUnbind(
+ mcHandle: cuda_types::CUmemGenericAllocationHandle,
+ dev: cuda_types::CUdevice,
mcOffset: usize,
size: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMulticastGetGranularity(
+ ) -> cuda_types::CUresult;
+ /** \brief Calculates either the minimal or recommended granularity for multicast object
+
+ Calculates either the minimal or recommended granularity for a given set of
+ multicast object properties and returns it in granularity. This granularity
+ can be used as a multiple for size, bind offsets and address mappings of the
+ multicast object.
+
+ \param[out] granularity Returned granularity.
+ \param[in] prop Properties of the multicast object.
+ \param[in] option Determines which granularity to return.
+
+ \returns
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa ::cuMulticastCreate, ::cuMulticastBindMem, ::cuMulticastBindAddr, ::cuMulticastUnbind*/
+ fn cuMulticastGetGranularity(
granularity: *mut usize,
- prop: *const CUmulticastObjectProp,
- option: CUmulticastGranularity_flags,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuPointerGetAttribute(
- data: *mut ::std::os::raw::c_void,
- attribute: CUpointer_attribute,
- ptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPrefetchAsync_ptsz(
- devPtr: CUdeviceptr,
+ prop: *const cuda_types::CUmulticastObjectProp,
+ option: cuda_types::CUmulticastGranularity_flags,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about a pointer
+
+ The supported attributes are:
+
+ - ::CU_POINTER_ATTRIBUTE_CONTEXT:
+
+ Returns in \p *data the ::CUcontext in which \p ptr was allocated or
+ registered.
+ The type of \p data must be ::CUcontext *.
+
+ If \p ptr was not allocated by, mapped by, or registered with
+ a ::CUcontext which uses unified virtual addressing then
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ - ::CU_POINTER_ATTRIBUTE_MEMORY_TYPE:
+
+ Returns in \p *data the physical memory type of the memory that
+ \p ptr addresses as a ::CUmemorytype enumerated value.
+ The type of \p data must be unsigned int.
+
+ If \p ptr addresses device memory then \p *data is set to
+ ::CU_MEMORYTYPE_DEVICE. The particular ::CUdevice on which the
+ memory resides is the ::CUdevice of the ::CUcontext returned by the
+ ::CU_POINTER_ATTRIBUTE_CONTEXT attribute of \p ptr.
+
+ If \p ptr addresses host memory then \p *data is set to
+ ::CU_MEMORYTYPE_HOST.
+
+ If \p ptr was not allocated by, mapped by, or registered with
+ a ::CUcontext which uses unified virtual addressing then
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ If the current ::CUcontext does not support unified virtual
+ addressing then ::CUDA_ERROR_INVALID_CONTEXT is returned.
+
+ - ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER:
+
+ Returns in \p *data the device pointer value through which
+ \p ptr may be accessed by kernels running in the current
+ ::CUcontext.
+ The type of \p data must be CUdeviceptr *.
+
+ If there exists no device pointer value through which
+ kernels running in the current ::CUcontext may access
+ \p ptr then ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ If there is no current ::CUcontext then
+ ::CUDA_ERROR_INVALID_CONTEXT is returned.
+
+ Except in the exceptional disjoint addressing cases discussed
+ below, the value returned in \p *data will equal the input
+ value \p ptr.
+
+ - ::CU_POINTER_ATTRIBUTE_HOST_POINTER:
+
+ Returns in \p *data the host pointer value through which
+ \p ptr may be accessed by by the host program.
+ The type of \p data must be void **.
+ If there exists no host pointer value through which
+ the host program may directly access \p ptr then
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ Except in the exceptional disjoint addressing cases discussed
+ below, the value returned in \p *data will equal the input
+ value \p ptr.
+
+ - ::CU_POINTER_ATTRIBUTE_P2P_TOKENS:
+
+ Returns in \p *data two tokens for use with the nv-p2p.h Linux
+ kernel interface. \p data must be a struct of type
+ CUDA_POINTER_ATTRIBUTE_P2P_TOKENS.
+
+ \p ptr must be a pointer to memory obtained from :cuMemAlloc().
+ Note that p2pToken and vaSpaceToken are only valid for the
+ lifetime of the source allocation. A subsequent allocation at
+ the same address may return completely different tokens.
+ Querying this attribute has a side effect of setting the attribute
+ ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS for the region of memory that
+ \p ptr points to.
+
+ - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS:
+
+ A boolean attribute which when set, ensures that synchronous memory operations
+ initiated on the region of memory that \p ptr points to will always synchronize.
+ See further documentation in the section titled "API synchronization behavior"
+ to learn more about cases when synchronous memory operations can
+ exhibit asynchronous behavior.
+
+ - ::CU_POINTER_ATTRIBUTE_BUFFER_ID:
+
+ Returns in \p *data a buffer ID which is guaranteed to be unique within the process.
+ \p data must point to an unsigned long long.
+
+ \p ptr must be a pointer to memory obtained from a CUDA memory allocation API.
+ Every memory allocation from any of the CUDA memory allocation APIs will
+ have a unique ID over a process lifetime. Subsequent allocations do not reuse IDs
+ from previous freed allocations. IDs are only unique within a single process.
+
+
+ - ::CU_POINTER_ATTRIBUTE_IS_MANAGED:
+
+ Returns in \p *data a boolean that indicates whether the pointer points to
+ managed memory or not.
+
+ If \p ptr is not a valid CUDA pointer then ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ - ::CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL:
+
+ Returns in \p *data an integer representing a device ordinal of a device against
+ which the memory was allocated or registered.
+
+ - ::CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE:
+
+ Returns in \p *data a boolean that indicates if this pointer maps to
+ an allocation that is suitable for ::cudaIpcGetMemHandle.
+
+ - ::CU_POINTER_ATTRIBUTE_RANGE_START_ADDR:
+
+ Returns in \p *data the starting address for the allocation referenced
+ by the device pointer \p ptr. Note that this is not necessarily the
+ address of the mapped region, but the address of the mappable address
+ range \p ptr references (e.g. from ::cuMemAddressReserve).
+
+ - ::CU_POINTER_ATTRIBUTE_RANGE_SIZE:
+
+ Returns in \p *data the size for the allocation referenced by the device
+ pointer \p ptr. Note that this is not necessarily the size of the mapped
+ region, but the size of the mappable address range \p ptr references
+ (e.g. from ::cuMemAddressReserve). To retrieve the size of the mapped
+ region, see ::cuMemGetAddressRange
+
+ - ::CU_POINTER_ATTRIBUTE_MAPPED:
+
+ Returns in \p *data a boolean that indicates if this pointer is in a
+ valid address range that is mapped to a backing allocation.
+
+ - ::CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES:
+
+ Returns a bitmask of the allowed handle types for an allocation that may
+ be passed to ::cuMemExportToShareableHandle.
+
+ - ::CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE:
+
+ Returns in \p *data the handle to the mempool that the allocation was obtained from.
+
+ \par
+
+ Note that for most allocations in the unified virtual address space
+ the host and device pointer for accessing the allocation will be the
+ same. The exceptions to this are
+ - user memory registered using ::cuMemHostRegister
+ - host memory allocated using ::cuMemHostAlloc with the
+ ::CU_MEMHOSTALLOC_WRITECOMBINED flag
+ For these types of allocation there will exist separate, disjoint host
+ and device addresses for accessing the allocation. In particular
+ - The host address will correspond to an invalid unmapped device address
+ (which will result in an exception if accessed from the device)
+ - The device address will correspond to an invalid unmapped host address
+ (which will result in an exception if accessed from the host).
+ For these types of allocations, querying ::CU_POINTER_ATTRIBUTE_HOST_POINTER
+ and ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER may be used to retrieve the host
+ and device addresses from either address.
+
+ \param data - Returned pointer attribute value
+ \param attribute - Pointer attribute to query
+ \param ptr - Pointer
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuPointerSetAttribute,
+ ::cuMemAlloc,
+ ::cuMemFree,
+ ::cuMemAllocHost,
+ ::cuMemFreeHost,
+ ::cuMemHostAlloc,
+ ::cuMemHostRegister,
+ ::cuMemHostUnregister,
+ ::cudaPointerGetAttributes*/
+ fn cuPointerGetAttribute(
+ data: *mut ::core::ffi::c_void,
+ attribute: cuda_types::CUpointer_attribute,
+ ptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Prefetches memory to the specified destination device
+
+ Note there is a later version of this API, ::cuMemPrefetchAsync_v2. It will
+ supplant this version in 13.0, which is retained for minor version compatibility.
+
+ Prefetches memory to the specified destination device. \p devPtr is the
+ base device pointer of the memory to be prefetched and \p dstDevice is the
+ destination device. \p count specifies the number of bytes to copy. \p hStream
+ is the stream in which the operation is enqueued. The memory range must refer
+ to managed memory allocated via ::cuMemAllocManaged or declared via __managed__ variables.
+
+ Passing in CU_DEVICE_CPU for \p dstDevice will prefetch the data to host memory. If
+ \p dstDevice is a GPU, then the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS
+ must be non-zero. Additionally, \p hStream must be associated with a device that has a
+ non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+
+ The start address and end address of the memory range will be rounded down and rounded up
+ respectively to be aligned to CPU page size before the prefetch operation is enqueued
+ in the stream.
+
+ If no physical memory has been allocated for this region, then this memory region
+ will be populated and mapped on the destination device. If there's insufficient
+ memory to prefetch the desired region, the Unified Memory driver may evict pages from other
+ ::cuMemAllocManaged allocations to host memory in order to make room. Device memory
+ allocated using ::cuMemAlloc or ::cuArrayCreate will not be evicted.
+
+ By default, any mappings to the previous location of the migrated pages are removed and
+ mappings for the new location are only setup on \p dstDevice. The exact behavior however
+ also depends on the settings applied to this memory range via ::cuMemAdvise as described
+ below:
+
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY was set on any subset of this memory range,
+ then that subset will create a read-only copy of the pages on \p dstDevice.
+
+ If ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION was called on any subset of this memory
+ range, then the pages will be migrated to \p dstDevice even if \p dstDevice is not the
+ preferred location of any pages in the memory range.
+
+ If ::CU_MEM_ADVISE_SET_ACCESSED_BY was called on any subset of this memory range,
+ then mappings to those pages from all the appropriate processors are updated to
+ refer to the new location if establishing such a mapping is possible. Otherwise,
+ those mappings are cleared.
+
+ Note that this API is not required for functionality and only serves to improve performance
+ by allowing the application to migrate data to a suitable location before it is accessed.
+ Memory accesses to this range are always coherent and are allowed even when the data is
+ actively being migrated.
+
+ Note that this function is asynchronous with respect to the host and all work
+ on other devices.
+
+ \param devPtr - Pointer to be prefetched
+ \param count - Size in bytes
+ \param dstDevice - Destination device to prefetch to
+ \param hStream - Stream to enqueue prefetch operation
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ ::cuMemcpy3DPeerAsync, ::cuMemAdvise, ::cuMemPrefetchAsync
+ ::cudaMemPrefetchAsync_v2*/
+ fn cuMemPrefetchAsync_ptsz(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- dstDevice: CUdevice,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPrefetchAsync_v2_ptsz(
- devPtr: CUdeviceptr,
+ dstDevice: cuda_types::CUdevice,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Prefetches memory to the specified destination location
+
+ Prefetches memory to the specified destination location. \p devPtr is the
+ base device pointer of the memory to be prefetched and \p location specifies the
+ destination location. \p count specifies the number of bytes to copy. \p hStream
+ is the stream in which the operation is enqueued. The memory range must refer
+ to managed memory allocated via ::cuMemAllocManaged or declared via __managed__ variables.
+
+ Specifying ::CU_MEM_LOCATION_TYPE_DEVICE for ::CUmemLocation::type will prefetch memory to GPU
+ specified by device ordinal ::CUmemLocation::id which must have non-zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. Additionally, \p hStream must be associated with a device
+ that has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ Specifying ::CU_MEM_LOCATION_TYPE_HOST as ::CUmemLocation::type will prefetch data to host memory.
+ Applications can request prefetching memory to a specific host NUMA node by specifying
+ ::CU_MEM_LOCATION_TYPE_HOST_NUMA for ::CUmemLocation::type and a valid host NUMA node id in ::CUmemLocation::id
+ Users can also request prefetching memory to the host NUMA node closest to the current thread's CPU by specifying
+ ::CU_MEM_LOCATION_TYPE_HOST_NUMA_CURRENT for ::CUmemLocation::type. Note when ::CUmemLocation::type is etiher
+ ::CU_MEM_LOCATION_TYPE_HOST OR ::CU_MEM_LOCATION_TYPE_HOST_NUMA_CURRENT, ::CUmemLocation::id will be ignored.
+
+ The start address and end address of the memory range will be rounded down and rounded up
+ respectively to be aligned to CPU page size before the prefetch operation is enqueued
+ in the stream.
+
+ If no physical memory has been allocated for this region, then this memory region
+ will be populated and mapped on the destination device. If there's insufficient
+ memory to prefetch the desired region, the Unified Memory driver may evict pages from other
+ ::cuMemAllocManaged allocations to host memory in order to make room. Device memory
+ allocated using ::cuMemAlloc or ::cuArrayCreate will not be evicted.
+
+ By default, any mappings to the previous location of the migrated pages are removed and
+ mappings for the new location are only setup on the destination location. The exact behavior however
+ also depends on the settings applied to this memory range via ::cuMemAdvise as described
+ below:
+
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY was set on any subset of this memory range,
+ then that subset will create a read-only copy of the pages on destination location.
+ If however the destination location is a host NUMA node, then any pages of that subset
+ that are already in another host NUMA node will be transferred to the destination.
+
+ If ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION was called on any subset of this memory
+ range, then the pages will be migrated to \p location even if \p location is not the
+ preferred location of any pages in the memory range.
+
+ If ::CU_MEM_ADVISE_SET_ACCESSED_BY was called on any subset of this memory range,
+ then mappings to those pages from all the appropriate processors are updated to
+ refer to the new location if establishing such a mapping is possible. Otherwise,
+ those mappings are cleared.
+
+ Note that this API is not required for functionality and only serves to improve performance
+ by allowing the application to migrate data to a suitable location before it is accessed.
+ Memory accesses to this range are always coherent and are allowed even when the data is
+ actively being migrated.
+
+ Note that this function is asynchronous with respect to the host and all work
+ on other devices.
+
+ \param devPtr - Pointer to be prefetched
+ \param count - Size in bytes
+ \param dstDevice - Destination device to prefetch to
+ \param flags - flags for future use, must be zero now.
+ \param hStream - Stream to enqueue prefetch operation
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ ::cuMemcpy3DPeerAsync, ::cuMemAdvise, ::cuMemPrefetchAsync
+ ::cudaMemPrefetchAsync_v2*/
+ fn cuMemPrefetchAsync_v2_ptsz(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- location: CUmemLocation,
- flags: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAdvise(
- devPtr: CUdeviceptr,
+ location: cuda_types::CUmemLocation,
+ flags: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Advise about the usage of a given memory range
+
+ Note there is a later version of this API, ::cuMemAdvise_v2. It will
+ supplant this version in 13.0, which is retained for minor version compatibility.
+
+ Advise the Unified Memory subsystem about the usage pattern for the memory range
+ starting at \p devPtr with a size of \p count bytes. The start address and end address of the memory
+ range will be rounded down and rounded up respectively to be aligned to CPU page size before the
+ advice is applied. The memory range must refer to managed memory allocated via ::cuMemAllocManaged
+ or declared via __managed__ variables. The memory range could also refer to system-allocated pageable
+ memory provided it represents a valid, host-accessible region of memory and all additional constraints
+ imposed by \p advice as outlined below are also satisfied. Specifying an invalid system-allocated pageable
+ memory range results in an error being returned.
+
+ The \p advice parameter can take the following values:
+ - ::CU_MEM_ADVISE_SET_READ_MOSTLY: This implies that the data is mostly going to be read
+ from and only occasionally written to. Any read accesses from any processor to this region will create a
+ read-only copy of at least the accessed pages in that processor's memory. Additionally, if ::cuMemPrefetchAsync
+ is called on this region, it will create a read-only copy of the data on the destination processor.
+ If any processor writes to this region, all copies of the corresponding page will be invalidated
+ except for the one where the write occurred. The \p device argument is ignored for this advice.
+ Note that for a page to be read-duplicated, the accessing processor must either be the CPU or a GPU
+ that has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ Also, if a context is created on a device that does not have the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS set, then read-duplication will not occur until
+ all such contexts are destroyed.
+ If the memory region refers to valid system-allocated pageable memory, then the accessing device must
+ have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS for a read-only
+ copy to be created on that device. Note however that if the accessing device also has a non-zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, then setting this advice
+ will not create a read-only copy when that device accesses this memory region.
+
+ - ::CU_MEM_ADVISE_UNSET_READ_MOSTLY: Undoes the effect of ::CU_MEM_ADVISE_SET_READ_MOSTLY and also prevents the
+ Unified Memory driver from attempting heuristic read-duplication on the memory range. Any read-duplicated
+ copies of the data will be collapsed into a single copy. The location for the collapsed
+ copy will be the preferred location if the page has a preferred location and one of the read-duplicated
+ copies was resident at that location. Otherwise, the location chosen is arbitrary.
+
+ - ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION: This advice sets the preferred location for the
+ data to be the memory belonging to \p device. Passing in CU_DEVICE_CPU for \p device sets the
+ preferred location as host memory. If \p device is a GPU, then it must have a non-zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. Setting the preferred location
+ does not cause data to migrate to that location immediately. Instead, it guides the migration policy
+ when a fault occurs on that memory region. If the data is already in its preferred location and the
+ faulting processor can establish a mapping without requiring the data to be migrated, then
+ data migration will be avoided. On the other hand, if the data is not in its preferred location
+ or if a direct mapping cannot be established, then it will be migrated to the processor accessing
+ it. It is important to note that setting the preferred location does not prevent data prefetching
+ done using ::cuMemPrefetchAsync.
+ Having a preferred location can override the page thrash detection and resolution logic in the Unified
+ Memory driver. Normally, if a page is detected to be constantly thrashing between for example host and device
+ memory, the page may eventually be pinned to host memory by the Unified Memory driver. But
+ if the preferred location is set as device memory, then the page will continue to thrash indefinitely.
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ policies associated with that advice will override the policies of this advice, unless read accesses from
+ \p device will not result in a read-only copy being created on that device as outlined in description for
+ the advice ::CU_MEM_ADVISE_SET_READ_MOSTLY.
+ If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+
+ - ::CU_MEM_ADVISE_UNSET_PREFERRED_LOCATION: Undoes the effect of ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION
+ and changes the preferred location to none.
+
+ - ::CU_MEM_ADVISE_SET_ACCESSED_BY: This advice implies that the data will be accessed by \p device.
+ Passing in ::CU_DEVICE_CPU for \p device will set the advice for the CPU. If \p device is a GPU, then
+ the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS must be non-zero.
+ This advice does not cause data migration and has no impact on the location of the data per se. Instead,
+ it causes the data to always be mapped in the specified processor's page tables, as long as the
+ location of the data permits a mapping to be established. If the data gets migrated for any reason,
+ the mappings are updated accordingly.
+ This advice is recommended in scenarios where data locality is not important, but avoiding faults is.
+ Consider for example a system containing multiple GPUs with peer-to-peer access enabled, where the
+ data located on one GPU is occasionally accessed by peer GPUs. In such scenarios, migrating data
+ over to the other GPUs is not as important because the accesses are infrequent and the overhead of
+ migration may be too high. But preventing faults can still help improve performance, and so having
+ a mapping set up in advance is useful. Note that on CPU access of this data, the data may be migrated
+ to host memory because the CPU typically cannot access device memory directly. Any GPU that had the
+ ::CU_MEM_ADVISE_SET_ACCESSED_BY flag set for this data will now have its mapping updated to point to the
+ page in host memory.
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ policies associated with that advice will override the policies of this advice. Additionally, if the
+ preferred location of this memory region or any subset of it is also \p device, then the policies
+ associated with ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION will override the policies of this advice.
+ If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS. Additionally, if \p device has
+ a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ then this call has no effect.
+
+ - ::CU_MEM_ADVISE_UNSET_ACCESSED_BY: Undoes the effect of ::CU_MEM_ADVISE_SET_ACCESSED_BY. Any mappings to
+ the data from \p device may be removed at any time causing accesses to result in non-fatal page faults.
+ If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS. Additionally, if \p device has
+ a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ then this call has no effect.
+
+ \param devPtr - Pointer to memory to set the advice for
+ \param count - Size in bytes of the memory range
+ \param advice - Advice to be applied for the specified memory range
+ \param device - Device to apply the advice for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ ::cuMemcpy3DPeerAsync, ::cuMemPrefetchAsync, ::cuMemAdvise_v2
+ ::cudaMemAdvise*/
+ fn cuMemAdvise(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- advice: CUmem_advise,
- device: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAdvise_v2(
- devPtr: CUdeviceptr,
+ advice: cuda_types::CUmem_advise,
+ device: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Advise about the usage of a given memory range
+
+ Advise the Unified Memory subsystem about the usage pattern for the memory range
+ starting at \p devPtr with a size of \p count bytes. The start address and end address of the memory
+ range will be rounded down and rounded up respectively to be aligned to CPU page size before the
+ advice is applied. The memory range must refer to managed memory allocated via ::cuMemAllocManaged
+ or declared via __managed__ variables. The memory range could also refer to system-allocated pageable
+ memory provided it represents a valid, host-accessible region of memory and all additional constraints
+ imposed by \p advice as outlined below are also satisfied. Specifying an invalid system-allocated pageable
+ memory range results in an error being returned.
+
+ The \p advice parameter can take the following values:
+ - ::CU_MEM_ADVISE_SET_READ_MOSTLY: This implies that the data is mostly going to be read
+ from and only occasionally written to. Any read accesses from any processor to this region will create a
+ read-only copy of at least the accessed pages in that processor's memory. Additionally, if ::cuMemPrefetchAsync
+ or ::cuMemPrefetchAsync_v2 is called on this region, it will create a read-only copy of the data on the destination processor.
+ If the target location for ::cuMemPrefetchAsync_v2 is a host NUMA node and a read-only copy already exists on
+ another host NUMA node, that copy will be migrated to the targeted host NUMA node.
+ If any processor writes to this region, all copies of the corresponding page will be invalidated
+ except for the one where the write occurred. If the writing processor is the CPU and the preferred location of
+ the page is a host NUMA node, then the page will also be migrated to that host NUMA node. The \p location argument is ignored for this advice.
+ Note that for a page to be read-duplicated, the accessing processor must either be the CPU or a GPU
+ that has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ Also, if a context is created on a device that does not have the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS set, then read-duplication will not occur until
+ all such contexts are destroyed.
+ If the memory region refers to valid system-allocated pageable memory, then the accessing device must
+ have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS for a read-only
+ copy to be created on that device. Note however that if the accessing device also has a non-zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, then setting this advice
+ will not create a read-only copy when that device accesses this memory region.
+
+ - ::CU_MEM_ADVISE_UNSET_READ_MOSTLY: Undoes the effect of ::CU_MEM_ADVISE_SET_READ_MOSTLY and also prevents the
+ Unified Memory driver from attempting heuristic read-duplication on the memory range. Any read-duplicated
+ copies of the data will be collapsed into a single copy. The location for the collapsed
+ copy will be the preferred location if the page has a preferred location and one of the read-duplicated
+ copies was resident at that location. Otherwise, the location chosen is arbitrary.
+ Note: The \p location argument is ignored for this advice.
+
+ - ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION: This advice sets the preferred location for the
+ data to be the memory belonging to \p location. When ::CUmemLocation::type is ::CU_MEM_LOCATION_TYPE_HOST,
+ ::CUmemLocation::id is ignored and the preferred location is set to be host memory. To set the preferred location
+ to a specific host NUMA node, applications must set ::CUmemLocation::type to ::CU_MEM_LOCATION_TYPE_HOST_NUMA and
+ ::CUmemLocation::id must specify the NUMA ID of the host NUMA node. If ::CUmemLocation::type is set to ::CU_MEM_LOCATION_TYPE_HOST_NUMA_CURRENT,
+ ::CUmemLocation::id will be ignored and the the host NUMA node closest to the calling thread's CPU will be used as the preferred location.
+ If ::CUmemLocation::type is a ::CU_MEM_LOCATION_TYPE_DEVICE, then ::CUmemLocation::id must be a valid device ordinal
+ and the device must have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ Setting the preferred location does not cause data to migrate to that location immediately. Instead, it guides the migration policy
+ when a fault occurs on that memory region. If the data is already in its preferred location and the
+ faulting processor can establish a mapping without requiring the data to be migrated, then
+ data migration will be avoided. On the other hand, if the data is not in its preferred location
+ or if a direct mapping cannot be established, then it will be migrated to the processor accessing
+ it. It is important to note that setting the preferred location does not prevent data prefetching
+ done using ::cuMemPrefetchAsync.
+ Having a preferred location can override the page thrash detection and resolution logic in the Unified
+ Memory driver. Normally, if a page is detected to be constantly thrashing between for example host and device
+ memory, the page may eventually be pinned to host memory by the Unified Memory driver. But
+ if the preferred location is set as device memory, then the page will continue to thrash indefinitely.
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ policies associated with that advice will override the policies of this advice, unless read accesses from
+ \p location will not result in a read-only copy being created on that procesor as outlined in description for
+ the advice ::CU_MEM_ADVISE_SET_READ_MOSTLY.
+ If the memory region refers to valid system-allocated pageable memory, and ::CUmemLocation::type is CU_MEM_LOCATION_TYPE_DEVICE
+ then ::CUmemLocation::id must be a valid device that has a non-zero alue for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+
+ - ::CU_MEM_ADVISE_UNSET_PREFERRED_LOCATION: Undoes the effect of ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION
+ and changes the preferred location to none. The \p location argument is ignored for this advice.
+
+ - ::CU_MEM_ADVISE_SET_ACCESSED_BY: This advice implies that the data will be accessed by processor \p location.
+ The ::CUmemLocation::type must be either ::CU_MEM_LOCATION_TYPE_DEVICE with ::CUmemLocation::id representing a valid device
+ ordinal or ::CU_MEM_LOCATION_TYPE_HOST and ::CUmemLocation::id will be ignored. All other location types are invalid.
+ If ::CUmemLocation::id is a GPU, then the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS must be non-zero.
+ This advice does not cause data migration and has no impact on the location of the data per se. Instead,
+ it causes the data to always be mapped in the specified processor's page tables, as long as the
+ location of the data permits a mapping to be established. If the data gets migrated for any reason,
+ the mappings are updated accordingly.
+ This advice is recommended in scenarios where data locality is not important, but avoiding faults is.
+ Consider for example a system containing multiple GPUs with peer-to-peer access enabled, where the
+ data located on one GPU is occasionally accessed by peer GPUs. In such scenarios, migrating data
+ over to the other GPUs is not as important because the accesses are infrequent and the overhead of
+ migration may be too high. But preventing faults can still help improve performance, and so having
+ a mapping set up in advance is useful. Note that on CPU access of this data, the data may be migrated
+ to host memory because the CPU typically cannot access device memory directly. Any GPU that had the
+ ::CU_MEM_ADVISE_SET_ACCESSED_BY flag set for this data will now have its mapping updated to point to the
+ page in host memory.
+ If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ policies associated with that advice will override the policies of this advice. Additionally, if the
+ preferred location of this memory region or any subset of it is also \p location, then the policies
+ associated with ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION will override the policies of this advice.
+ If the memory region refers to valid system-allocated pageable memory, and ::CUmemLocation::type is ::CU_MEM_LOCATION_TYPE_DEVICE
+ then device in ::CUmemLocation::id must have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+ Additionally, if ::CUmemLocation::id has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ then this call has no effect.
+
+ - ::CU_MEM_ADVISE_UNSET_ACCESSED_BY: Undoes the effect of ::CU_MEM_ADVISE_SET_ACCESSED_BY. Any mappings to
+ the data from \p location may be removed at any time causing accesses to result in non-fatal page faults.
+ If the memory region refers to valid system-allocated pageable memory, and ::CUmemLocation::type is ::CU_MEM_LOCATION_TYPE_DEVICE
+ then device in ::CUmemLocation::id must have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+ Additionally, if ::CUmemLocation::id has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ then this call has no effect.
+
+ \param devPtr - Pointer to memory to set the advice for
+ \param count - Size in bytes of the memory range
+ \param advice - Advice to be applied for the specified memory range
+ \param location - location to apply the advice for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ ::cuMemcpy3DPeerAsync, ::cuMemPrefetchAsync, ::cuMemAdvise
+ ::cudaMemAdvise*/
+ fn cuMemAdvise_v2(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- advice: CUmem_advise,
- location: CUmemLocation,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemRangeGetAttribute(
- data: *mut ::std::os::raw::c_void,
+ advice: cuda_types::CUmem_advise,
+ location: cuda_types::CUmemLocation,
+ ) -> cuda_types::CUresult;
+ /** \brief Query an attribute of a given memory range
+
+ Query an attribute about the memory range starting at \p devPtr with a size of \p count bytes. The
+ memory range must refer to managed memory allocated via ::cuMemAllocManaged or declared via
+ __managed__ variables.
+
+ The \p attribute parameter can take the following values:
+ - ::CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY: If this attribute is specified, \p data will be interpreted
+ as a 32-bit integer, and \p dataSize must be 4. The result returned will be 1 if all pages in the given
+ memory range have read-duplication enabled, or 0 otherwise.
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION: If this attribute is specified, \p data will be
+ interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be a GPU device
+ id if all pages in the memory range have that GPU as their preferred location, or it will be CU_DEVICE_CPU
+ if all pages in the memory range have the CPU as their preferred location, or it will be CU_DEVICE_INVALID
+ if either all the pages don't have the same preferred location or some of the pages don't have a
+ preferred location at all. Note that the actual location of the pages in the memory range at the time of
+ the query may be different from the preferred location.
+ - ::CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY: If this attribute is specified, \p data will be interpreted
+ as an array of 32-bit integers, and \p dataSize must be a non-zero multiple of 4. The result returned
+ will be a list of device ids that had ::CU_MEM_ADVISE_SET_ACCESSED_BY set for that entire memory range.
+ If any device does not have that advice set for the entire memory range, that device will not be included.
+ If \p data is larger than the number of devices that have that advice set for that memory range,
+ CU_DEVICE_INVALID will be returned in all the extra space provided. For ex., if \p dataSize is 12
+ (i.e. \p data has 3 elements) and only device 0 has the advice set, then the result returned will be
+ { 0, CU_DEVICE_INVALID, CU_DEVICE_INVALID }. If \p data is smaller than the number of devices that have
+ that advice set, then only as many devices will be returned as can fit in the array. There is no
+ guarantee on which specific devices will be returned, however.
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION: If this attribute is specified, \p data will be
+ interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be the last location
+ to which all pages in the memory range were prefetched explicitly via ::cuMemPrefetchAsync. This will either be
+ a GPU id or CU_DEVICE_CPU depending on whether the last location for prefetch was a GPU or the CPU
+ respectively. If any page in the memory range was never explicitly prefetched or if all pages were not
+ prefetched to the same location, CU_DEVICE_INVALID will be returned. Note that this simply returns the
+ last location that the application requested to prefetch the memory range to. It gives no indication as to
+ whether the prefetch operation to that location has completed or even begun.
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_TYPE: If this attribute is specified, \p data will be
+ interpreted as a ::CUmemLocationType, and \p dataSize must be sizeof(CUmemLocationType). The ::CUmemLocationType returned will be
+ ::CU_MEM_LOCATION_TYPE_DEVICE if all pages in the memory range have the same GPU as their preferred location, or ::CUmemLocationType
+ will be ::CU_MEM_LOCATION_TYPE_HOST if all pages in the memory range have the CPU as their preferred location, or it will be ::CU_MEM_LOCATION_TYPE_HOST_NUMA
+ if all the pages in the memory range have the same host NUMA node ID as their preferred location or it will be ::CU_MEM_LOCATION_TYPE_INVALID
+ if either all the pages don't have the same preferred location or some of the pages don't have a preferred location at all.
+ Note that the actual location type of the pages in the memory range at the time of the query may be different from the preferred location type.
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_ID: If this attribute is specified, \p data will be
+ interpreted as a 32-bit integer, and \p dataSize must be 4. If the ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_TYPE query for the same address range
+ returns ::CU_MEM_LOCATION_TYPE_DEVICE, it will be a valid device ordinal or if it returns ::CU_MEM_LOCATION_TYPE_HOST_NUMA, it will be a valid host NUMA node ID
+ or if it returns any other location type, the id should be ignored.
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_TYPE: If this attribute is specified, \p data will be
+ interpreted as a ::CUmemLocationType, and \p dataSize must be sizeof(CUmemLocationType). The result returned will be the last location
+ to which all pages in the memory range were prefetched explicitly via ::cuMemPrefetchAsync. The ::CUmemLocationType returned
+ will be ::CU_MEM_LOCATION_TYPE_DEVICE if the last prefetch location was a GPU or ::CU_MEM_LOCATION_TYPE_HOST if it was the CPU or ::CU_MEM_LOCATION_TYPE_HOST_NUMA if
+ the last prefetch location was a specific host NUMA node. If any page in the memory range was never explicitly prefetched or if all pages were not
+ prefetched to the same location, ::CUmemLocationType will be ::CU_MEM_LOCATION_TYPE_INVALID.
+ Note that this simply returns the last location type that the application requested to prefetch the memory range to. It gives no indication as to
+ whether the prefetch operation to that location has completed or even begun.
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_ID: If this attribute is specified, \p data will be
+ interpreted as a 32-bit integer, and \p dataSize must be 4. If the ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_TYPE query for the same address range
+ returns ::CU_MEM_LOCATION_TYPE_DEVICE, it will be a valid device ordinal or if it returns ::CU_MEM_LOCATION_TYPE_HOST_NUMA, it will be a valid host NUMA node ID
+ or if it returns any other location type, the id should be ignored.
+
+ \param data - A pointers to a memory location where the result
+ of each attribute query will be written to.
+ \param dataSize - Array containing the size of data
+ \param attribute - The attribute to query
+ \param devPtr - Start of the range to query
+ \param count - Size of the range to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+ \note_async
+ \note_null_stream
+
+ \sa ::cuMemRangeGetAttributes, ::cuMemPrefetchAsync,
+ ::cuMemAdvise,
+ ::cudaMemRangeGetAttribute*/
+ fn cuMemRangeGetAttribute(
+ data: *mut ::core::ffi::c_void,
dataSize: usize,
- attribute: CUmem_range_attribute,
- devPtr: CUdeviceptr,
+ attribute: cuda_types::CUmem_range_attribute,
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemRangeGetAttributes(
- data: *mut *mut ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Query attributes of a given memory range.
+
+ Query attributes of the memory range starting at \p devPtr with a size of \p count bytes. The
+ memory range must refer to managed memory allocated via ::cuMemAllocManaged or declared via
+ __managed__ variables. The \p attributes array will be interpreted to have \p numAttributes
+ entries. The \p dataSizes array will also be interpreted to have \p numAttributes entries.
+ The results of the query will be stored in \p data.
+
+ The list of supported attributes are given below. Please refer to ::cuMemRangeGetAttribute for
+ attribute descriptions and restrictions.
+
+ - ::CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION
+ - ::CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_TYPE
+ - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION_ID
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_TYPE
+ - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION_ID
+
+ \param data - A two-dimensional array containing pointers to memory
+ locations where the result of each attribute query will be written to.
+ \param dataSizes - Array containing the sizes of each result
+ \param attributes - An array of attributes to query
+ (numAttributes and the number of attributes in this array should match)
+ \param numAttributes - Number of attributes to query
+ \param devPtr - Start of the range to query
+ \param count - Size of the range to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa ::cuMemRangeGetAttribute, ::cuMemAdvise,
+ ::cuMemPrefetchAsync,
+ ::cudaMemRangeGetAttributes*/
+ fn cuMemRangeGetAttributes(
+ data: *mut *mut ::core::ffi::c_void,
dataSizes: *mut usize,
- attributes: *mut CUmem_range_attribute,
+ attributes: *mut cuda_types::CUmem_range_attribute,
numAttributes: usize,
- devPtr: CUdeviceptr,
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuPointerSetAttribute(
- value: *const ::std::os::raw::c_void,
- attribute: CUpointer_attribute,
- ptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuPointerGetAttributes(
- numAttributes: ::std::os::raw::c_uint,
- attributes: *mut CUpointer_attribute,
- data: *mut *mut ::std::os::raw::c_void,
- ptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamCreate(phStream: *mut CUstream, Flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamCreateWithPriority(
- phStream: *mut CUstream,
- flags: ::std::os::raw::c_uint,
- priority: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetPriority_ptsz(
- hStream: CUstream,
- priority: *mut ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetFlags_ptsz(hStream: CUstream, flags: *mut ::std::os::raw::c_uint)
- -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetId_ptsz(
- hStream: CUstream,
- streamId: *mut ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCtx_ptsz(hStream: CUstream, pctx: *mut CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitEvent_ptsz(
- hStream: CUstream,
- hEvent: CUevent,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamAddCallback_ptsz(
- hStream: CUstream,
- callback: CUstreamCallback,
- userData: *mut ::std::os::raw::c_void,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCapture_v2_ptsz(hStream: CUstream, mode: CUstreamCaptureMode) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCaptureToGraph_ptsz(
- hStream: CUstream,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
- dependencyData: *const CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Set attributes on a previously allocated memory region
+
+ The supported attributes are:
+
+ - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS:
+
+ A boolean attribute that can either be set (1) or unset (0). When set,
+ the region of memory that \p ptr points to is guaranteed to always synchronize
+ memory operations that are synchronous. If there are some previously initiated
+ synchronous memory operations that are pending when this attribute is set, the
+ function does not return until those memory operations are complete.
+ See further documentation in the section titled "API synchronization behavior"
+ to learn more about cases when synchronous memory operations can
+ exhibit asynchronous behavior.
+ \p value will be considered as a pointer to an unsigned integer to which this attribute is to be set.
+
+ \param value - Pointer to memory containing the value to be set
+ \param attribute - Pointer attribute to set
+ \param ptr - Pointer to a memory region allocated using CUDA memory allocation APIs
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa ::cuPointerGetAttribute,
+ ::cuPointerGetAttributes,
+ ::cuMemAlloc,
+ ::cuMemFree,
+ ::cuMemAllocHost,
+ ::cuMemFreeHost,
+ ::cuMemHostAlloc,
+ ::cuMemHostRegister,
+ ::cuMemHostUnregister*/
+ fn cuPointerSetAttribute(
+ value: *const ::core::ffi::c_void,
+ attribute: cuda_types::CUpointer_attribute,
+ ptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about a pointer.
+
+ The supported attributes are (refer to ::cuPointerGetAttribute for attribute descriptions and restrictions):
+
+ - ::CU_POINTER_ATTRIBUTE_CONTEXT
+ - ::CU_POINTER_ATTRIBUTE_MEMORY_TYPE
+ - ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER
+ - ::CU_POINTER_ATTRIBUTE_HOST_POINTER
+ - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS
+ - ::CU_POINTER_ATTRIBUTE_BUFFER_ID
+ - ::CU_POINTER_ATTRIBUTE_IS_MANAGED
+ - ::CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL
+ - ::CU_POINTER_ATTRIBUTE_RANGE_START_ADDR
+ - ::CU_POINTER_ATTRIBUTE_RANGE_SIZE
+ - ::CU_POINTER_ATTRIBUTE_MAPPED
+ - ::CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE
+ - ::CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
+ - ::CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE
+
+ \param numAttributes - Number of attributes to query
+ \param attributes - An array of attributes to query
+ (numAttributes and the number of attributes in this array should match)
+ \param data - A two-dimensional array containing pointers to memory
+ locations where the result of each attribute query will be written to.
+ \param ptr - Pointer to query
+
+ Unlike ::cuPointerGetAttribute, this function will not return an error when the \p ptr
+ encountered is not a valid CUDA pointer. Instead, the attributes are assigned default NULL values
+ and CUDA_SUCCESS is returned.
+
+ If \p ptr was not allocated by, mapped by, or registered with a ::CUcontext which uses UVA
+ (Unified Virtual Addressing), ::CUDA_ERROR_INVALID_CONTEXT is returned.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuPointerGetAttribute,
+ ::cuPointerSetAttribute,
+ ::cudaPointerGetAttributes*/
+ fn cuPointerGetAttributes(
+ numAttributes: ::core::ffi::c_uint,
+ attributes: *mut cuda_types::CUpointer_attribute,
+ data: *mut *mut ::core::ffi::c_void,
+ ptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a stream
+
+ Creates a stream and returns a handle in \p phStream. The \p Flags argument
+ determines behaviors of the stream.
+
+ Valid values for \p Flags are:
+ - ::CU_STREAM_DEFAULT: Default stream creation flag.
+ - ::CU_STREAM_NON_BLOCKING: Specifies that work running in the created
+ stream may run concurrently with work in stream 0 (the NULL stream), and that
+ the created stream should perform no implicit synchronization with stream 0.
+
+ \param phStream - Returned newly created stream
+ \param Flags - Parameters for stream creation
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreateWithPriority,
+ ::cuStreamGetPriority,
+ ::cuStreamGetFlags,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamCreate,
+ ::cudaStreamCreateWithFlags*/
+ fn cuStreamCreate(
+ phStream: *mut cuda_types::CUstream,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a stream with the given priority
+
+ Creates a stream with the specified priority and returns a handle in \p phStream.
+ This affects the scheduling priority of work in the stream. Priorities provide a
+ hint to preferentially run work with higher priority when possible, but do
+ not preempt already-running work or provide any other functional guarantee on
+ execution order.
+
+ \p priority follows a convention where lower numbers represent higher priorities.
+ '0' represents default priority. The range of meaningful numerical priorities can
+ be queried using ::cuCtxGetStreamPriorityRange. If the specified priority is
+ outside the numerical range returned by ::cuCtxGetStreamPriorityRange,
+ it will automatically be clamped to the lowest or the highest number in the range.
+
+ \param phStream - Returned newly created stream
+ \param flags - Flags for stream creation. See ::cuStreamCreate for a list of
+ valid flags
+ \param priority - Stream priority. Lower numbers represent higher priorities.
+ See ::cuCtxGetStreamPriorityRange for more information about
+ meaningful stream priorities that can be passed.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \note Stream priorities are supported only on GPUs
+ with compute capability 3.5 or higher.
+
+ \note In the current implementation, only compute kernels launched in
+ priority streams are affected by the stream's priority. Stream priorities have
+ no effect on host-to-device and device-to-host memory operations.
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreate,
+ ::cuStreamGetPriority,
+ ::cuCtxGetStreamPriorityRange,
+ ::cuStreamGetFlags,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamCreateWithPriority*/
+ fn cuStreamCreateWithPriority(
+ phStream: *mut cuda_types::CUstream,
+ flags: ::core::ffi::c_uint,
+ priority: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Query the priority of a given stream
+
+ Query the priority of a stream created using ::cuStreamCreate or ::cuStreamCreateWithPriority
+ and return the priority in \p priority. Note that if the stream was created with a
+ priority outside the numerical range returned by ::cuCtxGetStreamPriorityRange,
+ this function returns the clamped priority.
+ See ::cuStreamCreateWithPriority for details about priority clamping.
+
+ \param hStream - Handle to the stream to be queried
+ \param priority - Pointer to a signed integer in which the stream's priority is returned
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreate,
+ ::cuStreamCreateWithPriority,
+ ::cuCtxGetStreamPriorityRange,
+ ::cuStreamGetFlags,
+ ::cudaStreamGetPriority*/
+ fn cuStreamGetPriority_ptsz(
+ hStream: cuda_types::CUstream,
+ priority: *mut ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Query the flags of a given stream
+
+ Query the flags of a stream created using ::cuStreamCreate or ::cuStreamCreateWithPriority
+ and return the flags in \p flags.
+
+ \param hStream - Handle to the stream to be queried
+ \param flags - Pointer to an unsigned integer in which the stream's flags are returned
+ The value returned in \p flags is a logical 'OR' of all flags that
+ were used while creating this stream. See ::cuStreamCreate for the list
+ of valid flags
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreate,
+ ::cuStreamGetPriority,
+ ::cudaStreamGetFlags*/
+ fn cuStreamGetFlags_ptsz(
+ hStream: cuda_types::CUstream,
+ flags: *mut ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the unique Id associated with the stream handle supplied
+
+ Returns in \p streamId the unique Id which is associated with the given stream handle.
+ The Id is unique for the life of the program.
+
+ The stream handle \p hStream can refer to any of the following:
+ <ul>
+ <li>a stream created via any of the CUDA driver APIs such as ::cuStreamCreate
+ and ::cuStreamCreateWithPriority, or their runtime API equivalents such as
+ ::cudaStreamCreate, ::cudaStreamCreateWithFlags and ::cudaStreamCreateWithPriority.
+ Passing an invalid handle will result in undefined behavior.</li>
+ <li>any of the special streams such as the NULL stream, ::CU_STREAM_LEGACY and
+ ::CU_STREAM_PER_THREAD. The runtime API equivalents of these are also accepted,
+ which are NULL, ::cudaStreamLegacy and ::cudaStreamPerThread respectively.</li>
+ </ul>
+
+ \param hStream - Handle to the stream to be queried
+ \param streamId - Pointer to store the Id of the stream
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreate,
+ ::cuStreamGetPriority,
+ ::cudaStreamGetId*/
+ fn cuStreamGetId_ptsz(
+ hStream: cuda_types::CUstream,
+ streamId: *mut ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Query the context associated with a stream
+
+ Returns the CUDA context that the stream is associated with.
+
+ The stream handle \p hStream can refer to any of the following:
+ <ul>
+ <li>a stream created via any of the CUDA driver APIs such as ::cuStreamCreate
+ and ::cuStreamCreateWithPriority, or their runtime API equivalents such as
+ ::cudaStreamCreate, ::cudaStreamCreateWithFlags and ::cudaStreamCreateWithPriority.
+ The returned context is the context that was active in the calling thread when the
+ stream was created. Passing an invalid handle will result in undefined behavior.</li>
+ <li>any of the special streams such as the NULL stream, ::CU_STREAM_LEGACY and
+ ::CU_STREAM_PER_THREAD. The runtime API equivalents of these are also accepted,
+ which are NULL, ::cudaStreamLegacy and ::cudaStreamPerThread respectively.
+ Specifying any of the special handles will return the context current to the
+ calling thread. If no context is current to the calling thread,
+ ::CUDA_ERROR_INVALID_CONTEXT is returned.</li>
+ </ul>
+
+ \param hStream - Handle to the stream to be queried
+ \param pctx - Returned context associated with the stream
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreateWithPriority,
+ ::cuStreamGetPriority,
+ ::cuStreamGetFlags,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamCreate,
+ ::cudaStreamCreateWithFlags*/
+ fn cuStreamGetCtx_ptsz(
+ hStream: cuda_types::CUstream,
+ pctx: *mut cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Make a compute stream wait on an event
+
+ Makes all future work submitted to \p hStream wait for all work captured in
+ \p hEvent. See ::cuEventRecord() for details on what is captured by an event.
+ The synchronization will be performed efficiently on the device when applicable.
+ \p hEvent may be from a different context or device than \p hStream.
+
+ flags include:
+ - ::CU_EVENT_WAIT_DEFAULT: Default event creation flag.
+ - ::CU_EVENT_WAIT_EXTERNAL: Event is captured in the graph as an external
+ event node when performing stream capture. This flag is invalid outside
+ of stream capture.
+
+ \param hStream - Stream to wait
+ \param hEvent - Event to wait on (may not be NULL)
+ \param Flags - See ::CUevent_capture_flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuEventRecord,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cuStreamDestroy,
+ ::cudaStreamWaitEvent*/
+ fn cuStreamWaitEvent_ptsz(
+ hStream: cuda_types::CUstream,
+ hEvent: cuda_types::CUevent,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Add a callback to a compute stream
+
+ \note This function is slated for eventual deprecation and removal. If
+ you do not require the callback to execute in case of a device error,
+ consider using ::cuLaunchHostFunc. Additionally, this function is not
+ supported with ::cuStreamBeginCapture and ::cuStreamEndCapture, unlike
+ ::cuLaunchHostFunc.
+
+ Adds a callback to be called on the host after all currently enqueued
+ items in the stream have completed. For each
+ cuStreamAddCallback call, the callback will be executed exactly once.
+ The callback will block later work in the stream until it is finished.
+
+ The callback may be passed ::CUDA_SUCCESS or an error code. In the event
+ of a device error, all subsequently executed callbacks will receive an
+ appropriate ::CUresult.
+
+ Callbacks must not make any CUDA API calls. Attempting to use a CUDA API
+ will result in ::CUDA_ERROR_NOT_PERMITTED. Callbacks must not perform any
+ synchronization that may depend on outstanding device work or other callbacks
+ that are not mandated to run earlier. Callbacks without a mandated order
+ (in independent streams) execute in undefined order and may be serialized.
+
+ For the purposes of Unified Memory, callback execution makes a number of
+ guarantees:
+ <ul>
+ <li>The callback stream is considered idle for the duration of the
+ callback. Thus, for example, a callback may always use memory attached
+ to the callback stream.</li>
+ <li>The start of execution of a callback has the same effect as
+ synchronizing an event recorded in the same stream immediately prior to
+ the callback. It thus synchronizes streams which have been "joined"
+ prior to the callback.</li>
+ <li>Adding device work to any stream does not have the effect of making
+ the stream active until all preceding host functions and stream callbacks
+ have executed. Thus, for
+ example, a callback might use global attached memory even if work has
+ been added to another stream, if the work has been ordered behind the
+ callback with an event.</li>
+ <li>Completion of a callback does not cause a stream to become
+ active except as described above. The callback stream will remain idle
+ if no device work follows the callback, and will remain idle across
+ consecutive callbacks without device work in between. Thus, for example,
+ stream synchronization can be done by signaling from a callback at the
+ end of the stream.</li>
+ </ul>
+
+ \param hStream - Stream to add callback to
+ \param callback - The function to call once preceding stream operations are complete
+ \param userData - User specified data to be passed to the callback function
+ \param flags - Reserved for future use, must be 0
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamWaitEvent,
+ ::cuStreamDestroy,
+ ::cuMemAllocManaged,
+ ::cuStreamAttachMemAsync,
+ ::cuLaunchHostFunc,
+ ::cudaStreamAddCallback*/
+ fn cuStreamAddCallback_ptsz(
+ hStream: cuda_types::CUstream,
+ callback: cuda_types::CUstreamCallback,
+ userData: *mut ::core::ffi::c_void,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Begins graph capture on a stream
+
+ Begin graph capture on \p hStream. When a stream is in capture mode, all operations
+ pushed into the stream will not be executed, but will instead be captured into
+ a graph, which will be returned via ::cuStreamEndCapture. Capture may not be initiated
+ if \p stream is CU_STREAM_LEGACY. Capture must be ended on the same stream in which
+ it was initiated, and it may only be initiated if the stream is not already in capture
+ mode. The capture mode may be queried via ::cuStreamIsCapturing. A unique id
+ representing the capture sequence may be queried via ::cuStreamGetCaptureInfo.
+
+ If \p mode is not ::CU_STREAM_CAPTURE_MODE_RELAXED, ::cuStreamEndCapture must be
+ called on this stream from the same thread.
+
+ \param hStream - Stream in which to initiate capture
+ \param mode - Controls the interaction of this capture sequence with other API
+ calls that are potentially unsafe. For more details see
+ ::cuThreadExchangeStreamCaptureMode.
+
+ \note Kernels captured using this API must not use texture and surface references.
+ Reading or writing through any texture or surface reference is undefined
+ behavior. This restriction does not apply to texture and surface objects.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuStreamCreate,
+ ::cuStreamIsCapturing,
+ ::cuStreamEndCapture,
+ ::cuThreadExchangeStreamCaptureMode*/
+ fn cuStreamBeginCapture_v2_ptsz(
+ hStream: cuda_types::CUstream,
+ mode: cuda_types::CUstreamCaptureMode,
+ ) -> cuda_types::CUresult;
+ /** \brief Begins graph capture on a stream to an existing graph
+
+ Begin graph capture on \p hStream, placing new nodes into an existing graph. When a stream is
+ in capture mode, all operations pushed into the stream will not be executed, but will instead
+ be captured into \p hGraph. The graph will not be instantiable until the user calls
+ ::cuStreamEndCapture.
+
+ Capture may not be initiated if \p stream is CU_STREAM_LEGACY. Capture must be ended on the
+ same stream in which it was initiated, and it may only be initiated if the stream is not
+ already in capture mode. The capture mode may be queried via ::cuStreamIsCapturing. A unique id
+ representing the capture sequence may be queried via ::cuStreamGetCaptureInfo.
+
+ If \p mode is not ::CU_STREAM_CAPTURE_MODE_RELAXED, ::cuStreamEndCapture must be
+ called on this stream from the same thread.
+
+ \param hStream - Stream in which to initiate capture.
+ \param hGraph - Graph to capture into.
+ \param dependencies - Dependencies of the first node captured in the stream. Can be NULL if numDependencies is 0.
+ \param dependencyData - Optional array of data associated with each dependency.
+ \param numDependencies - Number of dependencies.
+ \param mode - Controls the interaction of this capture sequence with other API
+ calls that are potentially unsafe. For more details see
+ ::cuThreadExchangeStreamCaptureMode.
+
+ \note Kernels captured using this API must not use texture and surface references.
+ Reading or writing through any texture or surface reference is undefined
+ behavior. This restriction does not apply to texture and surface objects.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuStreamBeginCapture,
+ ::cuStreamCreate,
+ ::cuStreamIsCapturing,
+ ::cuStreamEndCapture,
+ ::cuThreadExchangeStreamCaptureMode,
+ ::cuGraphAddNode,*/
+ fn cuStreamBeginCaptureToGraph_ptsz(
+ hStream: cuda_types::CUstream,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
+ dependencyData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- mode: CUstreamCaptureMode,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuThreadExchangeStreamCaptureMode(mode: *mut CUstreamCaptureMode) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamEndCapture_ptsz(hStream: CUstream, phGraph: *mut CUgraph) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamIsCapturing_ptsz(
- hStream: CUstream,
- captureStatus: *mut CUstreamCaptureStatus,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo_v2_ptsz(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- graph_out: *mut CUgraph,
- dependencies_out: *mut *const CUgraphNode,
+ mode: cuda_types::CUstreamCaptureMode,
+ ) -> cuda_types::CUresult;
+ /** \brief Swaps the stream capture interaction mode for a thread
+
+ Sets the calling thread's stream capture interaction mode to the value contained
+ in \p *mode, and overwrites \p *mode with the previous mode for the thread. To
+ facilitate deterministic behavior across function or module boundaries, callers
+ are encouraged to use this API in a push-pop fashion: \code
+CUstreamCaptureMode mode = desiredMode;
+cuThreadExchangeStreamCaptureMode(&mode);
+...
+cuThreadExchangeStreamCaptureMode(&mode); // restore previous mode
+ \endcode
+
+ During stream capture (see ::cuStreamBeginCapture), some actions, such as a call
+ to ::cudaMalloc, may be unsafe. In the case of ::cudaMalloc, the operation is
+ not enqueued asynchronously to a stream, and is not observed by stream capture.
+ Therefore, if the sequence of operations captured via ::cuStreamBeginCapture
+ depended on the allocation being replayed whenever the graph is launched, the
+ captured graph would be invalid.
+
+ Therefore, stream capture places restrictions on API calls that can be made within
+ or concurrently to a ::cuStreamBeginCapture-::cuStreamEndCapture sequence. This
+ behavior can be controlled via this API and flags to ::cuStreamBeginCapture.
+
+ A thread's mode is one of the following:
+ - \p CU_STREAM_CAPTURE_MODE_GLOBAL: This is the default mode. If the local thread has
+ an ongoing capture sequence that was not initiated with
+ \p CU_STREAM_CAPTURE_MODE_RELAXED at \p cuStreamBeginCapture, or if any other thread
+ has a concurrent capture sequence initiated with \p CU_STREAM_CAPTURE_MODE_GLOBAL,
+ this thread is prohibited from potentially unsafe API calls.
+ - \p CU_STREAM_CAPTURE_MODE_THREAD_LOCAL: If the local thread has an ongoing capture
+ sequence not initiated with \p CU_STREAM_CAPTURE_MODE_RELAXED, it is prohibited
+ from potentially unsafe API calls. Concurrent capture sequences in other threads
+ are ignored.
+ - \p CU_STREAM_CAPTURE_MODE_RELAXED: The local thread is not prohibited from potentially
+ unsafe API calls. Note that the thread is still prohibited from API calls which
+ necessarily conflict with stream capture, for example, attempting ::cuEventQuery
+ on an event that was last recorded inside a capture sequence.
+
+ \param mode - Pointer to mode value to swap with the current mode
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuStreamBeginCapture*/
+ fn cuThreadExchangeStreamCaptureMode(
+ mode: *mut cuda_types::CUstreamCaptureMode,
+ ) -> cuda_types::CUresult;
+ /** \brief Ends capture on a stream, returning the captured graph
+
+ End capture on \p hStream, returning the captured graph via \p phGraph.
+ Capture must have been initiated on \p hStream via a call to ::cuStreamBeginCapture.
+ If capture was invalidated, due to a violation of the rules of stream capture, then
+ a NULL graph will be returned.
+
+ If the \p mode argument to ::cuStreamBeginCapture was not
+ ::CU_STREAM_CAPTURE_MODE_RELAXED, this call must be from the same thread as
+ ::cuStreamBeginCapture.
+
+ \param hStream - Stream to query
+ \param phGraph - The captured graph
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_STREAM_CAPTURE_WRONG_THREAD
+ \notefnerr
+
+ \sa
+ ::cuStreamCreate,
+ ::cuStreamBeginCapture,
+ ::cuStreamIsCapturing,
+ ::cuGraphDestroy*/
+ fn cuStreamEndCapture_ptsz(
+ hStream: cuda_types::CUstream,
+ phGraph: *mut cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a stream's capture status
+
+ Return the capture status of \p hStream via \p captureStatus. After a successful
+ call, \p *captureStatus will contain one of the following:
+ - ::CU_STREAM_CAPTURE_STATUS_NONE: The stream is not capturing.
+ - ::CU_STREAM_CAPTURE_STATUS_ACTIVE: The stream is capturing.
+ - ::CU_STREAM_CAPTURE_STATUS_INVALIDATED: The stream was capturing but an error
+ has invalidated the capture sequence. The capture sequence must be terminated
+ with ::cuStreamEndCapture on the stream where it was initiated in order to
+ continue using \p hStream.
+
+ Note that, if this is called on ::CU_STREAM_LEGACY (the "null stream") while
+ a blocking stream in the same context is capturing, it will return
+ ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT and \p *captureStatus is unspecified
+ after the call. The blocking stream capture is not invalidated.
+
+ When a blocking stream is capturing, the legacy stream is in an
+ unusable state until the blocking stream capture is terminated. The legacy
+ stream is not supported for stream capture, but attempted use would have an
+ implicit dependency on the capturing stream(s).
+
+ \param hStream - Stream to query
+ \param captureStatus - Returns the stream's capture status
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT
+ \notefnerr
+
+ \sa
+ ::cuStreamCreate,
+ ::cuStreamBeginCapture,
+ ::cuStreamEndCapture*/
+ fn cuStreamIsCapturing_ptsz(
+ hStream: cuda_types::CUstream,
+ captureStatus: *mut cuda_types::CUstreamCaptureStatus,
+ ) -> cuda_types::CUresult;
+ /** \brief Query a stream's capture state
+
+ Query stream state related to stream capture.
+
+ If called on ::CU_STREAM_LEGACY (the "null stream") while a stream not created
+ with ::CU_STREAM_NON_BLOCKING is capturing, returns ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT.
+
+ Valid data (other than capture status) is returned only if both of the following are true:
+ - the call returns CUDA_SUCCESS
+ - the returned capture status is ::CU_STREAM_CAPTURE_STATUS_ACTIVE
+
+ \param hStream - The stream to query
+ \param captureStatus_out - Location to return the capture status of the stream; required
+ \param id_out - Optional location to return an id for the capture sequence, which is
+ unique over the lifetime of the process
+ \param graph_out - Optional location to return the graph being captured into. All
+ operations other than destroy and node removal are permitted on the graph
+ while the capture sequence is in progress. This API does not transfer
+ ownership of the graph, which is transferred or destroyed at
+ ::cuStreamEndCapture. Note that the graph handle may be invalidated before
+ end of capture for certain errors. Nodes that are or become
+ unreachable from the original stream at ::cuStreamEndCapture due to direct
+ actions on the graph do not trigger ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED.
+ \param dependencies_out - Optional location to store a pointer to an array of nodes.
+ The next node to be captured in the stream will depend on this set of nodes,
+ absent operations such as event wait which modify this set. The array pointer
+ is valid until the next API call which operates on the stream or until the
+ capture is terminated. The node handles may be copied out and are valid until
+ they or the graph is destroyed. The driver-owned array may also be passed
+ directly to APIs that operate on the graph (not the stream) without copying.
+ \param numDependencies_out - Optional location to store the size of the array
+ returned in dependencies_out.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuStreamGetCaptureInfo_v3
+ ::cuStreamBeginCapture,
+ ::cuStreamIsCapturing,
+ ::cuStreamUpdateCaptureDependencies*/
+ fn cuStreamGetCaptureInfo_v2_ptsz(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ graph_out: *mut cuda_types::CUgraph,
+ dependencies_out: *mut *const cuda_types::CUgraphNode,
numDependencies_out: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo_v3_ptsz(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- graph_out: *mut CUgraph,
- dependencies_out: *mut *const CUgraphNode,
- edgeData_out: *mut *const CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Query a stream's capture state (12.3+)
+
+ Query stream state related to stream capture.
+
+ If called on ::CU_STREAM_LEGACY (the "null stream") while a stream not created
+ with ::CU_STREAM_NON_BLOCKING is capturing, returns ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT.
+
+ Valid data (other than capture status) is returned only if both of the following are true:
+ - the call returns CUDA_SUCCESS
+ - the returned capture status is ::CU_STREAM_CAPTURE_STATUS_ACTIVE
+
+ If \p edgeData_out is non-NULL then \p dependencies_out must be as well. If
+ \p dependencies_out is non-NULL and \p edgeData_out is NULL, but there is non-zero edge
+ data for one or more of the current stream dependencies, the call will return
+ ::CUDA_ERROR_LOSSY_QUERY.
+
+ \param hStream - The stream to query
+ \param captureStatus_out - Location to return the capture status of the stream; required
+ \param id_out - Optional location to return an id for the capture sequence, which is
+ unique over the lifetime of the process
+ \param graph_out - Optional location to return the graph being captured into. All
+ operations other than destroy and node removal are permitted on the graph
+ while the capture sequence is in progress. This API does not transfer
+ ownership of the graph, which is transferred or destroyed at
+ ::cuStreamEndCapture. Note that the graph handle may be invalidated before
+ end of capture for certain errors. Nodes that are or become
+ unreachable from the original stream at ::cuStreamEndCapture due to direct
+ actions on the graph do not trigger ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED.
+ \param dependencies_out - Optional location to store a pointer to an array of nodes.
+ The next node to be captured in the stream will depend on this set of nodes,
+ absent operations such as event wait which modify this set. The array pointer
+ is valid until the next API call which operates on the stream or until the
+ capture is terminated. The node handles may be copied out and are valid until
+ they or the graph is destroyed. The driver-owned array may also be passed
+ directly to APIs that operate on the graph (not the stream) without copying.
+ \param edgeData_out - Optional location to store a pointer to an array of graph edge
+ data. This array parallels \c dependencies_out; the next node to be added
+ has an edge to \c dependencies_out[i] with annotation \c edgeData_out[i] for
+ each \c i. The array pointer is valid until the next API call which operates
+ on the stream or until the capture is terminated.
+ \param numDependencies_out - Optional location to store the size of the array
+ returned in dependencies_out.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT,
+ ::CUDA_ERROR_LOSSY_QUERY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuStreamGetCaptureInfo
+ ::cuStreamBeginCapture,
+ ::cuStreamIsCapturing,
+ ::cuStreamUpdateCaptureDependencies*/
+ fn cuStreamGetCaptureInfo_v3_ptsz(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ graph_out: *mut cuda_types::CUgraph,
+ dependencies_out: *mut *const cuda_types::CUgraphNode,
+ edgeData_out: *mut *const cuda_types::CUgraphEdgeData,
numDependencies_out: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamUpdateCaptureDependencies_ptsz(
- hStream: CUstream,
- dependencies: *mut CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Update the set of dependencies in a capturing stream (11.3+)
+
+ Modifies the dependency set of a capturing stream. The dependency set is the set
+ of nodes that the next captured node in the stream will depend on.
+
+ Valid flags are ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES and
+ ::CU_STREAM_SET_CAPTURE_DEPENDENCIES. These control whether the set passed to
+ the API is added to the existing set or replaces it. A flags value of 0 defaults
+ to ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES.
+
+ Nodes that are removed from the dependency set via this API do not result in
+ ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED if they are unreachable from the stream at
+ ::cuStreamEndCapture.
+
+ Returns ::CUDA_ERROR_ILLEGAL_STATE if the stream is not capturing.
+
+ This API is new in CUDA 11.3. Developers requiring compatibility across minor
+ versions to CUDA 11.0 should not use this API or provide a fallback.
+
+ \param hStream - The stream to update
+ \param dependencies - The set of dependencies to add
+ \param numDependencies - The size of the dependencies array
+ \param flags - See above
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_ILLEGAL_STATE
+
+ \sa
+ ::cuStreamBeginCapture,
+ ::cuStreamGetCaptureInfo,*/
+ fn cuStreamUpdateCaptureDependencies_ptsz(
+ hStream: cuda_types::CUstream,
+ dependencies: *mut cuda_types::CUgraphNode,
numDependencies: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamUpdateCaptureDependencies_v2_ptsz(
- hStream: CUstream,
- dependencies: *mut CUgraphNode,
- dependencyData: *const CUgraphEdgeData,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Update the set of dependencies in a capturing stream (12.3+)
+
+ Modifies the dependency set of a capturing stream. The dependency set is the set
+ of nodes that the next captured node in the stream will depend on along with the
+ edge data for those dependencies.
+
+ Valid flags are ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES and
+ ::CU_STREAM_SET_CAPTURE_DEPENDENCIES. These control whether the set passed to
+ the API is added to the existing set or replaces it. A flags value of 0 defaults
+ to ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES.
+
+ Nodes that are removed from the dependency set via this API do not result in
+ ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED if they are unreachable from the stream at
+ ::cuStreamEndCapture.
+
+ Returns ::CUDA_ERROR_ILLEGAL_STATE if the stream is not capturing.
+
+ \param hStream - The stream to update
+ \param dependencies - The set of dependencies to add
+ \param dependencyData - Optional array of data associated with each dependency.
+ \param numDependencies - The size of the dependencies array
+ \param flags - See above
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_ILLEGAL_STATE
+
+ \sa
+ ::cuStreamBeginCapture,
+ ::cuStreamGetCaptureInfo,*/
+ fn cuStreamUpdateCaptureDependencies_v2_ptsz(
+ hStream: cuda_types::CUstream,
+ dependencies: *mut cuda_types::CUgraphNode,
+ dependencyData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamAttachMemAsync_ptsz(
- hStream: CUstream,
- dptr: CUdeviceptr,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Attach memory to a stream asynchronously
+
+ Enqueues an operation in \p hStream to specify stream association of
+ \p length bytes of memory starting from \p dptr. This function is a
+ stream-ordered operation, meaning that it is dependent on, and will
+ only take effect when, previous work in stream has completed. Any
+ previous association is automatically replaced.
+
+ \p dptr must point to one of the following types of memories:
+ - managed memory declared using the __managed__ keyword or allocated with
+ ::cuMemAllocManaged.
+ - a valid host-accessible region of system-allocated pageable memory. This
+ type of memory may only be specified if the device associated with the
+ stream reports a non-zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+
+ For managed allocations, \p length must be either zero or the entire
+ allocation's size. Both indicate that the entire allocation's stream
+ association is being changed. Currently, it is not possible to change stream
+ association for a portion of a managed allocation.
+
+ For pageable host allocations, \p length must be non-zero.
+
+ The stream association is specified using \p flags which must be
+ one of ::CUmemAttach_flags.
+ If the ::CU_MEM_ATTACH_GLOBAL flag is specified, the memory can be accessed
+ by any stream on any device.
+ If the ::CU_MEM_ATTACH_HOST flag is specified, the program makes a guarantee
+ that it won't access the memory on the device from any stream on a device that
+ has a zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ If the ::CU_MEM_ATTACH_SINGLE flag is specified and \p hStream is associated with
+ a device that has a zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS,
+ the program makes a guarantee that it will only access the memory on the device
+ from \p hStream. It is illegal to attach singly to the NULL stream, because the
+ NULL stream is a virtual global stream and not a specific stream. An error will
+ be returned in this case.
+
+ When memory is associated with a single stream, the Unified Memory system will
+ allow CPU access to this memory region so long as all operations in \p hStream
+ have completed, regardless of whether other streams are active. In effect,
+ this constrains exclusive ownership of the managed memory region by
+ an active GPU to per-stream activity instead of whole-GPU activity.
+
+ Accessing memory on the device from streams that are not associated with
+ it will produce undefined results. No error checking is performed by the
+ Unified Memory system to ensure that kernels launched into other streams
+ do not access this region.
+
+ It is a program's responsibility to order calls to ::cuStreamAttachMemAsync
+ via events, synchronization or other means to ensure legal access to memory
+ at all times. Data visibility and coherency will be changed appropriately
+ for all kernels which follow a stream-association change.
+
+ If \p hStream is destroyed while data is associated with it, the association is
+ removed and the association reverts to the default visibility of the allocation
+ as specified at ::cuMemAllocManaged. For __managed__ variables, the default
+ association is always ::CU_MEM_ATTACH_GLOBAL. Note that destroying a stream is an
+ asynchronous operation, and as a result, the change to default association won't
+ happen until all work in the stream has completed.
+
+ \param hStream - Stream in which to enqueue the attach operation
+ \param dptr - Pointer to memory (must be a pointer to managed memory or
+ to a valid host-accessible region of system-allocated
+ pageable memory)
+ \param length - Length of memory
+ \param flags - Must be one of ::CUmemAttach_flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamWaitEvent,
+ ::cuStreamDestroy,
+ ::cuMemAllocManaged,
+ ::cudaStreamAttachMemAsync*/
+ fn cuStreamAttachMemAsync_ptsz(
+ hStream: cuda_types::CUstream,
+ dptr: cuda_types::CUdeviceptr,
length: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamQuery_ptsz(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamSynchronize_ptsz(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamDestroy_v2(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamCopyAttributes_ptsz(dst: CUstream, src: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetAttribute_ptsz(
- hStream: CUstream,
- attr: CUstreamAttrID,
- value_out: *mut CUstreamAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamSetAttribute_ptsz(
- hStream: CUstream,
- attr: CUstreamAttrID,
- value: *const CUstreamAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEventCreate(phEvent: *mut CUevent, Flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuEventRecord_ptsz(hEvent: CUevent, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuEventRecordWithFlags_ptsz(
- hEvent: CUevent,
- hStream: CUstream,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEventQuery(hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuEventSynchronize(hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuEventDestroy_v2(hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuEventElapsedTime(pMilliseconds: *mut f32, hStart: CUevent, hEnd: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuImportExternalMemory(
- extMem_out: *mut CUexternalMemory,
- memHandleDesc: *const CUDA_EXTERNAL_MEMORY_HANDLE_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuExternalMemoryGetMappedBuffer(
- devPtr: *mut CUdeviceptr,
- extMem: CUexternalMemory,
- bufferDesc: *const CUDA_EXTERNAL_MEMORY_BUFFER_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuExternalMemoryGetMappedMipmappedArray(
- mipmap: *mut CUmipmappedArray,
- extMem: CUexternalMemory,
- mipmapDesc: *const CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDestroyExternalMemory(extMem: CUexternalMemory) -> CUresult;
-}
-extern "C" {
- pub fn cuImportExternalSemaphore(
- extSem_out: *mut CUexternalSemaphore,
- semHandleDesc: *const CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuSignalExternalSemaphoresAsync_ptsz(
- extSemArray: *const CUexternalSemaphore,
- paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
- numExtSems: ::std::os::raw::c_uint,
- stream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuWaitExternalSemaphoresAsync_ptsz(
- extSemArray: *const CUexternalSemaphore,
- paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
- numExtSems: ::std::os::raw::c_uint,
- stream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDestroyExternalSemaphore(extSem: CUexternalSemaphore) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue32_v2_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue64_v2_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue32_v2_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue64_v2_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBatchMemOp_v2_ptsz(
- stream: CUstream,
- count: ::std::os::raw::c_uint,
- paramArray: *mut CUstreamBatchMemOpParams,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncGetAttribute(
- pi: *mut ::std::os::raw::c_int,
- attrib: CUfunction_attribute,
- hfunc: CUfunction,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncSetAttribute(
- hfunc: CUfunction,
- attrib: CUfunction_attribute,
- value: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncSetCacheConfig(hfunc: CUfunction, config: CUfunc_cache) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncGetModule(hmod: *mut CUmodule, hfunc: CUfunction) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncGetName(name: *mut *const ::std::os::raw::c_char, hfunc: CUfunction) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncGetParamInfo(
- func: CUfunction,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Determine status of a compute stream
+
+ Returns ::CUDA_SUCCESS if all operations in the stream specified by
+ \p hStream have completed, or ::CUDA_ERROR_NOT_READY if not.
+
+ For the purposes of Unified Memory, a return value of ::CUDA_SUCCESS
+ is equivalent to having called ::cuStreamSynchronize().
+
+ \param hStream - Stream to query status of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_READY
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamWaitEvent,
+ ::cuStreamDestroy,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamQuery*/
+ fn cuStreamQuery_ptsz(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ /** \brief Wait until a stream's tasks are completed
+
+ Waits until the device has completed all operations in the stream specified
+ by \p hStream. If the context was created with the
+ ::CU_CTX_SCHED_BLOCKING_SYNC flag, the CPU thread will block until the
+ stream is finished with all of its tasks.
+
+ \param hStream - Stream to wait for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE
+
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamDestroy,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamAddCallback,
+ ::cudaStreamSynchronize*/
+ fn cuStreamSynchronize_ptsz(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ /** \brief Destroys a stream
+
+ Destroys the stream specified by \p hStream.
+
+ In case the device is still doing work in the stream \p hStream
+ when ::cuStreamDestroy() is called, the function will return immediately
+ and the resources associated with \p hStream will be released automatically
+ once the device has completed all work in \p hStream.
+
+ \param hStream - Stream to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamDestroy*/
+ fn cuStreamDestroy_v2(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ /** \brief Copies attributes from source stream to destination stream.
+
+ Copies attributes from source stream \p src to destination stream \p dst.
+ Both streams must have the same context.
+
+ \param[out] dst Destination stream
+ \param[in] src Source stream
+ For list of attributes see ::CUstreamAttrID
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuStreamCopyAttributes_ptsz(
+ dst: cuda_types::CUstream,
+ src: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Queries stream attribute.
+
+ Queries attribute \p attr from \p hStream and stores it in corresponding
+ member of \p value_out.
+
+ \param[in] hStream
+ \param[in] attr
+ \param[out] value_out
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuStreamGetAttribute_ptsz(
+ hStream: cuda_types::CUstream,
+ attr: cuda_types::CUstreamAttrID,
+ value_out: *mut cuda_types::CUstreamAttrValue,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets stream attribute.
+
+ Sets attribute \p attr on \p hStream from corresponding attribute of
+ \p value. The updated attribute will be applied to subsequent work
+ submitted to the stream. It will not affect previously submitted work.
+
+ \param[out] hStream
+ \param[in] attr
+ \param[in] value
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuStreamSetAttribute_ptsz(
+ hStream: cuda_types::CUstream,
+ attr: cuda_types::CUstreamAttrID,
+ value: *const cuda_types::CUstreamAttrValue,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an event
+
+ Creates an event *phEvent for the current context with the flags specified via
+ \p Flags. Valid flags include:
+ - ::CU_EVENT_DEFAULT: Default event creation flag.
+ - ::CU_EVENT_BLOCKING_SYNC: Specifies that the created event should use blocking
+ synchronization. A CPU thread that uses ::cuEventSynchronize() to wait on
+ an event created with this flag will block until the event has actually
+ been recorded.
+ - ::CU_EVENT_DISABLE_TIMING: Specifies that the created event does not need
+ to record timing data. Events created with this flag specified and
+ the ::CU_EVENT_BLOCKING_SYNC flag not specified will provide the best
+ performance when used with ::cuStreamWaitEvent() and ::cuEventQuery().
+ - ::CU_EVENT_INTERPROCESS: Specifies that the created event may be used as an
+ interprocess event by ::cuIpcGetEventHandle(). ::CU_EVENT_INTERPROCESS must
+ be specified along with ::CU_EVENT_DISABLE_TIMING.
+
+ \param phEvent - Returns newly created event
+ \param Flags - Event creation flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa
+ ::cuEventRecord,
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuEventDestroy,
+ ::cuEventElapsedTime,
+ ::cudaEventCreate,
+ ::cudaEventCreateWithFlags*/
+ fn cuEventCreate(
+ phEvent: *mut cuda_types::CUevent,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Records an event
+
+ Captures in \p hEvent the contents of \p hStream at the time of this call.
+ \p hEvent and \p hStream must be from the same context.
+ Calls such as ::cuEventQuery() or ::cuStreamWaitEvent() will then
+ examine or wait for completion of the work that was captured. Uses of
+ \p hStream after this call do not modify \p hEvent. See note on default
+ stream behavior for what is captured in the default case.
+
+ ::cuEventRecord() can be called multiple times on the same event and
+ will overwrite the previously captured state. Other APIs such as
+ ::cuStreamWaitEvent() use the most recently captured state at the time
+ of the API call, and are not affected by later calls to
+ ::cuEventRecord(). Before the first call to ::cuEventRecord(), an
+ event represents an empty set of work, so for example ::cuEventQuery()
+ would return ::CUDA_SUCCESS.
+
+ \param hEvent - Event to record
+ \param hStream - Stream to record event for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuStreamWaitEvent,
+ ::cuEventDestroy,
+ ::cuEventElapsedTime,
+ ::cudaEventRecord,
+ ::cuEventRecordWithFlags*/
+ fn cuEventRecord_ptsz(
+ hEvent: cuda_types::CUevent,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Records an event
+
+ Captures in \p hEvent the contents of \p hStream at the time of this call.
+ \p hEvent and \p hStream must be from the same context.
+ Calls such as ::cuEventQuery() or ::cuStreamWaitEvent() will then
+ examine or wait for completion of the work that was captured. Uses of
+ \p hStream after this call do not modify \p hEvent. See note on default
+ stream behavior for what is captured in the default case.
+
+ ::cuEventRecordWithFlags() can be called multiple times on the same event and
+ will overwrite the previously captured state. Other APIs such as
+ ::cuStreamWaitEvent() use the most recently captured state at the time
+ of the API call, and are not affected by later calls to
+ ::cuEventRecordWithFlags(). Before the first call to ::cuEventRecordWithFlags(), an
+ event represents an empty set of work, so for example ::cuEventQuery()
+ would return ::CUDA_SUCCESS.
+
+ flags include:
+ - ::CU_EVENT_RECORD_DEFAULT: Default event creation flag.
+ - ::CU_EVENT_RECORD_EXTERNAL: Event is captured in the graph as an external
+ event node when performing stream capture. This flag is invalid outside
+ of stream capture.
+
+ \param hEvent - Event to record
+ \param hStream - Stream to record event for
+ \param flags - See ::CUevent_capture_flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuStreamWaitEvent,
+ ::cuEventDestroy,
+ ::cuEventElapsedTime,
+ ::cuEventRecord,
+ ::cudaEventRecord*/
+ fn cuEventRecordWithFlags_ptsz(
+ hEvent: cuda_types::CUevent,
+ hStream: cuda_types::CUstream,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Queries an event's status
+
+ Queries the status of all work currently captured by \p hEvent. See
+ ::cuEventRecord() for details on what is captured by an event.
+
+ Returns ::CUDA_SUCCESS if all captured work has been completed, or
+ ::CUDA_ERROR_NOT_READY if any captured work is incomplete.
+
+ For the purposes of Unified Memory, a return value of ::CUDA_SUCCESS
+ is equivalent to having called ::cuEventSynchronize().
+
+ \param hEvent - Event to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_READY
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventRecord,
+ ::cuEventSynchronize,
+ ::cuEventDestroy,
+ ::cuEventElapsedTime,
+ ::cudaEventQuery*/
+ fn cuEventQuery(hEvent: cuda_types::CUevent) -> cuda_types::CUresult;
+ /** \brief Waits for an event to complete
+
+ Waits until the completion of all work currently captured in \p hEvent.
+ See ::cuEventRecord() for details on what is captured by an event.
+
+ Waiting for an event that was created with the ::CU_EVENT_BLOCKING_SYNC
+ flag will cause the calling CPU thread to block until the event has
+ been completed by the device. If the ::CU_EVENT_BLOCKING_SYNC flag has
+ not been set, then the CPU thread will busy-wait until the event has
+ been completed by the device.
+
+ \param hEvent - Event to wait for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventRecord,
+ ::cuEventQuery,
+ ::cuEventDestroy,
+ ::cuEventElapsedTime,
+ ::cudaEventSynchronize*/
+ fn cuEventSynchronize(hEvent: cuda_types::CUevent) -> cuda_types::CUresult;
+ /** \brief Destroys an event
+
+ Destroys the event specified by \p hEvent.
+
+ An event may be destroyed before it is complete (i.e., while
+ ::cuEventQuery() would return ::CUDA_ERROR_NOT_READY). In this case, the
+ call does not block on completion of the event, and any associated
+ resources will automatically be released asynchronously at completion.
+
+ \param hEvent - Event to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventRecord,
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuEventElapsedTime,
+ ::cudaEventDestroy*/
+ fn cuEventDestroy_v2(hEvent: cuda_types::CUevent) -> cuda_types::CUresult;
+ /** \brief Computes the elapsed time between two events
+
+ Computes the elapsed time between two events (in milliseconds with a
+ resolution of around 0.5 microseconds).
+
+ If either event was last recorded in a non-NULL stream, the resulting time
+ may be greater than expected (even if both used the same stream handle). This
+ happens because the ::cuEventRecord() operation takes place asynchronously
+ and there is no guarantee that the measured latency is actually just between
+ the two events. Any number of other different stream operations could execute
+ in between the two measured events, thus altering the timing in a significant
+ way.
+
+ If ::cuEventRecord() has not been called on either event then
+ ::CUDA_ERROR_INVALID_HANDLE is returned. If ::cuEventRecord() has been called
+ on both events but one or both of them has not yet been completed (that is,
+ ::cuEventQuery() would return ::CUDA_ERROR_NOT_READY on at least one of the
+ events), ::CUDA_ERROR_NOT_READY is returned. If either event was created with
+ the ::CU_EVENT_DISABLE_TIMING flag, then this function will return
+ ::CUDA_ERROR_INVALID_HANDLE.
+
+ \param pMilliseconds - Time between \p hStart and \p hEnd in ms
+ \param hStart - Starting event
+ \param hEnd - Ending event
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_READY,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuEventCreate,
+ ::cuEventRecord,
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuEventDestroy,
+ ::cudaEventElapsedTime*/
+ fn cuEventElapsedTime(
+ pMilliseconds: *mut f32,
+ hStart: cuda_types::CUevent,
+ hEnd: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Imports an external memory object
+
+ Imports an externally allocated memory object and returns
+ a handle to that in \p extMem_out.
+
+ The properties of the handle being imported must be described in
+ \p memHandleDesc. The ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC structure
+ is defined as follows:
+
+ \code
+typedef struct CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st {
+CUexternalMemoryHandleType type;
+union {
+int fd;
+struct {
+void *handle;
+const void *name;
+} win32;
+const void *nvSciBufObject;
+} handle;
+unsigned long long size;
+unsigned int flags;
+} CUDA_EXTERNAL_MEMORY_HANDLE_DESC;
+ \endcode
+
+ where ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type specifies the type
+ of handle being imported. ::CUexternalMemoryHandleType is
+ defined as:
+
+ \code
+typedef enum CUexternalMemoryHandleType_enum {
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD = 1,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32 = 2,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT = 3,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP = 4,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE = 5,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE = 6,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT = 7,
+CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF = 8
+} CUexternalMemoryHandleType;
+ \endcode
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD, then
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::fd must be a valid
+ file descriptor referencing a memory object. Ownership of
+ the file descriptor is transferred to the CUDA driver when the
+ handle is imported successfully. Performing any operations on the
+ file descriptor after it is imported results in undefined behavior.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32, then exactly one
+ of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ references a memory object. Ownership of this handle is
+ not transferred to CUDA after the import operation, so the
+ application must release the handle using the appropriate system
+ call. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must point to a NULL-terminated array of
+ UTF-16 characters that refers to a memory object.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT, then
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ be non-NULL and
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ must be NULL. The handle specified must be a globally shared KMT
+ handle. This handle does not hold a reference to the underlying
+ object, and thus will be invalid when all references to the
+ memory object are destroyed.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP, then exactly one
+ of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ is returned by ID3D12Device::CreateSharedHandle when referring to a
+ ID3D12Heap object. This handle holds a reference to the underlying
+ object. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must point to a NULL-terminated array of
+ UTF-16 characters that refers to a ID3D12Heap object.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE, then exactly one
+ of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ is returned by ID3D12Device::CreateSharedHandle when referring to a
+ ID3D12Resource object. This handle holds a reference to the
+ underlying object. If
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must point to a NULL-terminated array of
+ UTF-16 characters that refers to a ID3D12Resource object.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE, then
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ represent a valid shared NT handle that is returned by
+ IDXGIResource1::CreateSharedHandle when referring to a
+ ID3D11Resource object. If
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must point to a NULL-terminated array of
+ UTF-16 characters that refers to a ID3D11Resource object.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT, then
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ represent a valid shared KMT handle that is returned by
+ IDXGIResource::GetSharedHandle when referring to a
+ ID3D11Resource object and
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ must be NULL.
+
+ If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF, then
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::nvSciBufObject must be non-NULL
+ and reference a valid NvSciBuf object.
+ If the NvSciBuf object imported into CUDA is also mapped by other drivers, then the
+ application must use ::cuWaitExternalSemaphoresAsync or ::cuSignalExternalSemaphoresAsync
+ as appropriate barriers to maintain coherence between CUDA and the other drivers.
+ See ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC and ::CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC
+ for memory synchronization.
+
+
+ The size of the memory object must be specified in
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::size.
+
+ Specifying the flag ::CUDA_EXTERNAL_MEMORY_DEDICATED in
+ ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::flags indicates that the
+ resource is a dedicated resource. The definition of what a
+ dedicated resource is outside the scope of this extension.
+ This flag must be set if ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type
+ is one of the following:
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
+
+ \param extMem_out - Returned handle to an external memory object
+ \param memHandleDesc - Memory import handle descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OPERATING_SYSTEM
+ \notefnerr
+
+ \note If the Vulkan memory imported into CUDA is mapped on the CPU then the
+ application must use vkInvalidateMappedMemoryRanges/vkFlushMappedMemoryRanges
+ as well as appropriate Vulkan pipeline barriers to maintain coherence between
+ CPU and GPU. For more information on these APIs, please refer to "Synchronization
+ and Cache Control" chapter from Vulkan specification.
+
+ \sa ::cuDestroyExternalMemory,
+ ::cuExternalMemoryGetMappedBuffer,
+ ::cuExternalMemoryGetMappedMipmappedArray*/
+ fn cuImportExternalMemory(
+ extMem_out: *mut cuda_types::CUexternalMemory,
+ memHandleDesc: *const cuda_types::CUDA_EXTERNAL_MEMORY_HANDLE_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Maps a buffer onto an imported memory object
+
+ Maps a buffer onto an imported memory object and returns a device
+ pointer in \p devPtr.
+
+ The properties of the buffer being mapped must be described in
+ \p bufferDesc. The ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC structure is
+ defined as follows:
+
+ \code
+typedef struct CUDA_EXTERNAL_MEMORY_BUFFER_DESC_st {
+unsigned long long offset;
+unsigned long long size;
+unsigned int flags;
+} CUDA_EXTERNAL_MEMORY_BUFFER_DESC;
+ \endcode
+
+ where ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::offset is the offset in
+ the memory object where the buffer's base address is.
+ ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::size is the size of the buffer.
+ ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::flags must be zero.
+
+ The offset and size have to be suitably aligned to match the
+ requirements of the external API. Mapping two buffers whose ranges
+ overlap may or may not result in the same virtual address being
+ returned for the overlapped portion. In such cases, the application
+ must ensure that all accesses to that region from the GPU are
+ volatile. Otherwise writes made via one address are not guaranteed
+ to be visible via the other address, even if they're issued by the
+ same thread. It is recommended that applications map the combined
+ range instead of mapping separate buffers and then apply the
+ appropriate offsets to the returned pointer to derive the
+ individual buffers.
+
+ The returned pointer \p devPtr must be freed using ::cuMemFree.
+
+ \param devPtr - Returned device pointer to buffer
+ \param extMem - Handle to external memory object
+ \param bufferDesc - Buffer descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuImportExternalMemory,
+ ::cuDestroyExternalMemory,
+ ::cuExternalMemoryGetMappedMipmappedArray*/
+ fn cuExternalMemoryGetMappedBuffer(
+ devPtr: *mut cuda_types::CUdeviceptr,
+ extMem: cuda_types::CUexternalMemory,
+ bufferDesc: *const cuda_types::CUDA_EXTERNAL_MEMORY_BUFFER_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Maps a CUDA mipmapped array onto an external memory object
+
+ Maps a CUDA mipmapped array onto an external object and returns a
+ handle to it in \p mipmap.
+
+ The properties of the CUDA mipmapped array being mapped must be
+ described in \p mipmapDesc. The structure
+ ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC is defined as follows:
+
+ \code
+typedef struct CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st {
+unsigned long long offset;
+CUDA_ARRAY3D_DESCRIPTOR arrayDesc;
+unsigned int numLevels;
+} CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC;
+ \endcode
+
+ where ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::offset is the
+ offset in the memory object where the base level of the mipmap
+ chain is.
+ ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::arrayDesc describes
+ the format, dimensions and type of the base level of the mipmap
+ chain. For further details on these parameters, please refer to the
+ documentation for ::cuMipmappedArrayCreate. Note that if the mipmapped
+ array is bound as a color target in the graphics API, then the flag
+ ::CUDA_ARRAY3D_COLOR_ATTACHMENT must be specified in
+ ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::arrayDesc::Flags.
+ ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::numLevels specifies
+ the total number of levels in the mipmap chain.
+
+ If \p extMem was imported from a handle of type ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF, then
+ ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::numLevels must be equal to 1.
+
+ The returned CUDA mipmapped array must be freed using ::cuMipmappedArrayDestroy.
+
+ \param mipmap - Returned CUDA mipmapped array
+ \param extMem - Handle to external memory object
+ \param mipmapDesc - CUDA array descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuImportExternalMemory,
+ ::cuDestroyExternalMemory,
+ ::cuExternalMemoryGetMappedBuffer*/
+ fn cuExternalMemoryGetMappedMipmappedArray(
+ mipmap: *mut cuda_types::CUmipmappedArray,
+ extMem: cuda_types::CUexternalMemory,
+ mipmapDesc: *const cuda_types::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys an external memory object.
+
+ Destroys the specified external memory object. Any existing buffers
+ and CUDA mipmapped arrays mapped onto this object must no longer be
+ used and must be explicitly freed using ::cuMemFree and
+ ::cuMipmappedArrayDestroy respectively.
+
+ \param extMem - External memory object to be destroyed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuImportExternalMemory,
+ ::cuExternalMemoryGetMappedBuffer,
+ ::cuExternalMemoryGetMappedMipmappedArray*/
+ fn cuDestroyExternalMemory(
+ extMem: cuda_types::CUexternalMemory,
+ ) -> cuda_types::CUresult;
+ /** \brief Imports an external semaphore
+
+ Imports an externally allocated synchronization object and returns
+ a handle to that in \p extSem_out.
+
+ The properties of the handle being imported must be described in
+ \p semHandleDesc. The ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC is
+ defined as follows:
+
+ \code
+typedef struct CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st {
+CUexternalSemaphoreHandleType type;
+union {
+int fd;
+struct {
+void *handle;
+const void *name;
+} win32;
+const void* NvSciSyncObj;
+} handle;
+unsigned int flags;
+} CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC;
+ \endcode
+
+ where ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type specifies the type of
+ handle being imported. ::CUexternalSemaphoreHandleType is defined
+ as:
+
+ \code
+typedef enum CUexternalSemaphoreHandleType_enum {
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD = 1,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32 = 2,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT = 3,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE = 4,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE = 5,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC = 6,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX = 7,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT = 8,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD = 9,
+CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 = 10
+} CUexternalSemaphoreHandleType;
+ \endcode
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd must be a valid
+ file descriptor referencing a synchronization object. Ownership of
+ the file descriptor is transferred to the CUDA driver when the
+ handle is imported successfully. Performing any operations on the
+ file descriptor after it is imported results in undefined behavior.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32, then exactly one
+ of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ NULL. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ references a synchronization object. Ownership of this handle is
+ not transferred to CUDA after the import operation, so the
+ application must release the handle using the appropriate system
+ call. If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must name a valid synchronization object.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle must
+ be non-NULL and
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ must be NULL. The handle specified must be a globally shared KMT
+ handle. This handle does not hold a reference to the underlying
+ object, and thus will be invalid when all references to the
+ synchronization object are destroyed.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE, then exactly one
+ of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ NULL. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ is returned by ID3D12Device::CreateSharedHandle when referring to a
+ ID3D12Fence object. This handle holds a reference to the underlying
+ object. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must name a valid synchronization object that
+ refers to a valid ID3D12Fence object.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ represents a valid shared NT handle that is returned by
+ ID3D11Fence::CreateSharedHandle. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must name a valid synchronization object that
+ refers to a valid ID3D11Fence object.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::nvSciSyncObj
+ represents a valid NvSciSyncObj.
+
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ represents a valid shared NT handle that
+ is returned by IDXGIResource1::CreateSharedHandle when referring to
+ a IDXGIKeyedMutex object. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must name a valid synchronization object that
+ refers to a valid IDXGIKeyedMutex object.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ represents a valid shared KMT handle that
+ is returned by IDXGIResource::GetSharedHandle when referring to
+ a IDXGIKeyedMutex object and
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must be NULL.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD, then
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd must be a valid
+ file descriptor referencing a synchronization object. Ownership of
+ the file descriptor is transferred to the CUDA driver when the
+ handle is imported successfully. Performing any operations on the
+ file descriptor after it is imported results in undefined behavior.
+
+ If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32, then exactly one
+ of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ NULL. If
+ ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ is not NULL, then it must represent a valid shared NT handle that
+ references a synchronization object. Ownership of this handle is
+ not transferred to CUDA after the import operation, so the
+ application must release the handle using the appropriate system
+ call. If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ is not NULL, then it must name a valid synchronization object.
+
+ \param extSem_out - Returned handle to an external semaphore
+ \param semHandleDesc - Semaphore import handle descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OPERATING_SYSTEM
+ \notefnerr
+
+ \sa ::cuDestroyExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuImportExternalSemaphore(
+ extSem_out: *mut cuda_types::CUexternalSemaphore,
+ semHandleDesc: *const cuda_types::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Signals a set of external semaphore objects
+
+ Enqueues a signal operation on a set of externally allocated
+ semaphore object in the specified stream. The operations will be
+ executed when all prior operations in the stream complete.
+
+ The exact semantics of signaling a semaphore depends on the type of
+ the object.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+ then signaling the semaphore will set it to the signaled state.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32
+ then the semaphore will be set to the value specified in
+ ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::fence::value.
+
+ If the semaphore object is of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC
+ this API sets ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence
+ to a value that can be used by subsequent waiters of the same NvSciSync object
+ to order operations with those currently submitted in \p stream. Such an update
+ will overwrite previous contents of
+ ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence. By default,
+ signaling such an external semaphore object causes appropriate memory synchronization
+ operations to be performed over all external memory objects that are imported as
+ ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF. This ensures that any subsequent accesses
+ made by other importers of the same set of NvSciBuf memory object(s) are coherent.
+ These operations can be skipped by specifying the flag
+ ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC, which can be used as a
+ performance optimization when data coherency is not required. But specifying this
+ flag in scenarios where data coherency is required results in undefined behavior.
+ Also, for semaphore object of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC,
+ if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ ::cuDeviceGetNvSciSyncAttributes to CUDA_NVSCISYNC_ATTR_SIGNAL, this API will return
+ CUDA_ERROR_NOT_SUPPORTED.
+ NvSciSyncFence associated with semaphore object of the type
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC can be deterministic. For this the
+ NvSciSyncAttrList used to create the semaphore object must have value of
+ NvSciSyncAttrKey_RequireDeterministicFences key set to true. Deterministic fences
+ allow users to enqueue a wait over the semaphore object even before corresponding
+ signal is enqueued. For such a semaphore object, CUDA guarantees that each signal
+ operation will increment the fence value by '1'. Users are expected to track count
+ of signals enqueued on the semaphore object and insert waits accordingly. When such
+ a semaphore object is signaled from multiple streams, due to concurrent stream
+ execution, it is possible that the order in which the semaphore gets signaled is
+ indeterministic. This could lead to waiters of the semaphore getting unblocked
+ incorrectly. Users are expected to handle such situations, either by not using the
+ same semaphore object with deterministic fence support enabled in different streams
+ or by adding explicit dependency amongst such streams so that the semaphore is
+ signaled in order.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT
+ then the keyed mutex will be released with the key specified in
+ ::CUDA_EXTERNAL_SEMAPHORE_PARAMS::params::keyedmutex::key.
+
+ \param extSemArray - Set of external semaphores to be signaled
+ \param paramsArray - Array of semaphore parameters
+ \param numExtSems - Number of semaphores to signal
+ \param stream - Stream to enqueue the signal operations in
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuImportExternalSemaphore,
+ ::cuDestroyExternalSemaphore,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuSignalExternalSemaphoresAsync_ptsz(
+ extSemArray: *const cuda_types::CUexternalSemaphore,
+ paramsArray: *const cuda_types::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
+ numExtSems: ::core::ffi::c_uint,
+ stream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Waits on a set of external semaphore objects
+
+ Enqueues a wait operation on a set of externally allocated
+ semaphore object in the specified stream. The operations will be
+ executed when all prior operations in the stream complete.
+
+ The exact semantics of waiting on a semaphore depends on the type
+ of the object.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+ then waiting on the semaphore will wait until the semaphore reaches
+ the signaled state. The semaphore will then be reset to the
+ unsignaled state. Therefore for every signal operation, there can
+ only be one wait operation.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32
+ then waiting on the semaphore will wait until the value of the
+ semaphore is greater than or equal to
+ ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::fence::value.
+
+ If the semaphore object is of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC
+ then, waiting on the semaphore will wait until the
+ ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence is signaled by the
+ signaler of the NvSciSyncObj that was associated with this semaphore object.
+ By default, waiting on such an external semaphore object causes appropriate
+ memory synchronization operations to be performed over all external memory objects
+ that are imported as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF. This ensures that
+ any subsequent accesses made by other importers of the same set of NvSciBuf memory
+ object(s) are coherent. These operations can be skipped by specifying the flag
+ ::CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC, which can be used as a
+ performance optimization when data coherency is not required. But specifying this
+ flag in scenarios where data coherency is required results in undefined behavior.
+ Also, for semaphore object of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC,
+ if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ ::cuDeviceGetNvSciSyncAttributes to CUDA_NVSCISYNC_ATTR_WAIT, this API will return
+ CUDA_ERROR_NOT_SUPPORTED.
+
+ If the semaphore object is any one of the following types:
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,
+ ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT
+ then the keyed mutex will be acquired when it is released with the key
+ specified in ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::key
+ or until the timeout specified by
+ ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::timeoutMs
+ has lapsed. The timeout interval can either be a finite value
+ specified in milliseconds or an infinite value. In case an infinite
+ value is specified the timeout never elapses. The windows INFINITE
+ macro must be used to specify infinite timeout.
+
+ \param extSemArray - External semaphores to be waited on
+ \param paramsArray - Array of semaphore parameters
+ \param numExtSems - Number of semaphores to wait on
+ \param stream - Stream to enqueue the wait operations in
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_TIMEOUT
+ \notefnerr
+
+ \sa ::cuImportExternalSemaphore,
+ ::cuDestroyExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync*/
+ fn cuWaitExternalSemaphoresAsync_ptsz(
+ extSemArray: *const cuda_types::CUexternalSemaphore,
+ paramsArray: *const cuda_types::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
+ numExtSems: ::core::ffi::c_uint,
+ stream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys an external semaphore
+
+ Destroys an external semaphore object and releases any references
+ to the underlying resource. Any outstanding signals or waits must
+ have completed before the semaphore is destroyed.
+
+ \param extSem - External semaphore to be destroyed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa ::cuImportExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuDestroyExternalSemaphore(
+ extSem: cuda_types::CUexternalSemaphore,
+ ) -> cuda_types::CUresult;
+ /** \brief Wait on a memory location
+
+ Enqueues a synchronization of the stream on the given memory location. Work
+ ordered after the operation will block until the given condition on the
+ memory is satisfied. By default, the condition is to wait for
+ (int32_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ Other condition types can be specified via \p flags.
+
+ If the memory was registered via ::cuMemHostRegister(), the device pointer
+ should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ be used with managed memory (::cuMemAllocManaged).
+
+ Support for CU_STREAM_WAIT_VALUE_NOR can be queried with ::cuDeviceGetAttribute() and
+ ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V2.
+
+ \note
+ Warning:
+ Improper use of this API may deadlock the application. Synchronization
+ ordering established through this API is not visible to CUDA. CUDA tasks
+ that are (even indirectly) ordered by this API should also have that order
+ expressed with CUDA-visible dependencies such as events. This ensures that
+ the scheduler does not serialize them in an improper order.
+
+ \param stream The stream to synchronize on the memory location.
+ \param addr The memory location to wait on.
+ \param value The value to compare with the memory location.
+ \param flags See ::CUstreamWaitValue_flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuStreamWaitValue64,
+ ::cuStreamWriteValue32,
+ ::cuStreamWriteValue64,
+ ::cuStreamBatchMemOp,
+ ::cuMemHostRegister,
+ ::cuStreamWaitEvent*/
+ fn cuStreamWaitValue32_v2_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Wait on a memory location
+
+ Enqueues a synchronization of the stream on the given memory location. Work
+ ordered after the operation will block until the given condition on the
+ memory is satisfied. By default, the condition is to wait for
+ (int64_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ Other condition types can be specified via \p flags.
+
+ If the memory was registered via ::cuMemHostRegister(), the device pointer
+ should be obtained with ::cuMemHostGetDevicePointer().
+
+ Support for this can be queried with ::cuDeviceGetAttribute() and
+ ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS.
+
+ \note
+ Warning:
+ Improper use of this API may deadlock the application. Synchronization
+ ordering established through this API is not visible to CUDA. CUDA tasks
+ that are (even indirectly) ordered by this API should also have that order
+ expressed with CUDA-visible dependencies such as events. This ensures that
+ the scheduler does not serialize them in an improper order.
+
+ \param stream The stream to synchronize on the memory location.
+ \param addr The memory location to wait on.
+ \param value The value to compare with the memory location.
+ \param flags See ::CUstreamWaitValue_flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuStreamWaitValue32,
+ ::cuStreamWriteValue32,
+ ::cuStreamWriteValue64,
+ ::cuStreamBatchMemOp,
+ ::cuMemHostRegister,
+ ::cuStreamWaitEvent*/
+ fn cuStreamWaitValue64_v2_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Write a value to memory
+
+ Write a value to memory.
+
+ If the memory was registered via ::cuMemHostRegister(), the device pointer
+ should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ be used with managed memory (::cuMemAllocManaged).
+
+ \param stream The stream to do the write in.
+ \param addr The device address to write to.
+ \param value The value to write.
+ \param flags See ::CUstreamWriteValue_flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuStreamWriteValue64,
+ ::cuStreamWaitValue32,
+ ::cuStreamWaitValue64,
+ ::cuStreamBatchMemOp,
+ ::cuMemHostRegister,
+ ::cuEventRecord*/
+ fn cuStreamWriteValue32_v2_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Write a value to memory
+
+ Write a value to memory.
+
+ If the memory was registered via ::cuMemHostRegister(), the device pointer
+ should be obtained with ::cuMemHostGetDevicePointer().
+
+ Support for this can be queried with ::cuDeviceGetAttribute() and
+ ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS.
+
+ \param stream The stream to do the write in.
+ \param addr The device address to write to.
+ \param value The value to write.
+ \param flags See ::CUstreamWriteValue_flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuStreamWriteValue32,
+ ::cuStreamWaitValue32,
+ ::cuStreamWaitValue64,
+ ::cuStreamBatchMemOp,
+ ::cuMemHostRegister,
+ ::cuEventRecord*/
+ fn cuStreamWriteValue64_v2_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Batch operations to synchronize the stream via memory operations
+
+ This is a batch version of ::cuStreamWaitValue32() and ::cuStreamWriteValue32().
+ Batching operations may avoid some performance overhead in both the API call
+ and the device execution versus adding them to the stream in separate API
+ calls. The operations are enqueued in the order they appear in the array.
+
+ See ::CUstreamBatchMemOpType for the full set of supported operations, and
+ ::cuStreamWaitValue32(), ::cuStreamWaitValue64(), ::cuStreamWriteValue32(),
+ and ::cuStreamWriteValue64() for details of specific operations.
+
+ See related APIs for details on querying support for specific operations.
+
+ \note
+ Warning:
+ Improper use of this API may deadlock the application. Synchronization
+ ordering established through this API is not visible to CUDA. CUDA tasks
+ that are (even indirectly) ordered by this API should also have that order
+ expressed with CUDA-visible dependencies such as events. This ensures that
+ the scheduler does not serialize them in an improper order. For more
+ information, see the Stream Memory Operations section in the programming
+ guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+
+ \param stream The stream to enqueue the operations in.
+ \param count The number of operations in the array. Must be less than 256.
+ \param paramArray The types and parameters of the individual operations.
+ \param flags Reserved for future expansion; must be 0.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa ::cuStreamWaitValue32,
+ ::cuStreamWaitValue64,
+ ::cuStreamWriteValue32,
+ ::cuStreamWriteValue64,
+ ::cuMemHostRegister*/
+ fn cuStreamBatchMemOp_v2_ptsz(
+ stream: cuda_types::CUstream,
+ count: ::core::ffi::c_uint,
+ paramArray: *mut cuda_types::CUstreamBatchMemOpParams,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns information about a function
+
+ Returns in \p *pi the integer value of the attribute \p attrib on the kernel
+ given by \p hfunc. The supported attributes are:
+ - ::CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK: The maximum number of threads
+ per block, beyond which a launch of the function would fail. This number
+ depends on both the function and the device on which the function is
+ currently loaded.
+ - ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES: The size in bytes of
+ statically-allocated shared memory per block required by this function.
+ This does not include dynamically-allocated shared memory requested by
+ the user at runtime.
+ - ::CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES: The size in bytes of user-allocated
+ constant memory required by this function.
+ - ::CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES: The size in bytes of local memory
+ used by each thread of this function.
+ - ::CU_FUNC_ATTRIBUTE_NUM_REGS: The number of registers used by each thread
+ of this function.
+ - ::CU_FUNC_ATTRIBUTE_PTX_VERSION: The PTX virtual architecture version for
+ which the function was compiled. This value is the major PTX version * 10
+ + the minor PTX version, so a PTX version 1.3 function would return the
+ value 13. Note that this may return the undefined value of 0 for cubins
+ compiled prior to CUDA 3.0.
+ - ::CU_FUNC_ATTRIBUTE_BINARY_VERSION: The binary architecture version for
+ which the function was compiled. This value is the major binary
+ version * 10 + the minor binary version, so a binary version 1.3 function
+ would return the value 13. Note that this will return a value of 10 for
+ legacy cubins that do not have a properly-encoded binary architecture
+ version.
+ - ::CU_FUNC_CACHE_MODE_CA: The attribute to indicate whether the function has
+ been compiled with user specified option "-Xptxas --dlcm=ca" set .
+ - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: The maximum size in bytes of
+ dynamically-allocated shared memory.
+ - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: Preferred shared memory-L1
+ cache split ratio in percent of total shared memory.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET: If this attribute is set, the
+ kernel must launch with a valid cluster size specified.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ blocks.
+ - ::CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED: Indicates whether
+ the function can be launched with non-portable cluster size. 1 is allowed,
+ 0 is disallowed. A non-portable cluster size may only function on the
+ specific SKUs the program is tested on. The launch might fail if the
+ program is run on a different hardware platform. CUDA API provides
+ cudaOccupancyMaxActiveClusters to assist with checking whether the desired
+ size can be launched on the current device. A portable cluster size is
+ guaranteed to be functional on all compute capabilities higher than the
+ target compute capability. The portable cluster size for sm_90 is 8 blocks
+ per cluster. This value may increase for future compute capabilities. The
+ specific hardware unit may support higher cluster sizes that’s not
+ guaranteed to be portable.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+
+ With a few execeptions, function attributes may also be queried on unloaded
+ function handles returned from ::cuModuleEnumerateFunctions.
+ ::CUDA_ERROR_FUNCTION_NOT_LOADED is returned if the attribute requires a fully
+ loaded function but the function is not loaded. The loading state of a function
+ may be queried using ::cuFuncIsloaded. ::cuFuncLoad may be called to explicitly
+ load a function before querying the following attributes that require the function
+ to be loaded:
+ - ::CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK
+ - ::CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES
+ - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES
+
+ \param pi - Returned attribute value
+ \param attrib - Attribute requested
+ \param hfunc - Function to query attribute of
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_FUNCTION_NOT_LOADED
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuLaunchKernel,
+ ::cudaFuncGetAttributes,
+ ::cudaFuncSetAttribute,
+ ::cuFuncIsLoaded,
+ ::cuFuncLoad,
+ ::cuKernelGetAttribute*/
+ fn cuFuncGetAttribute(
+ pi: *mut ::core::ffi::c_int,
+ attrib: cuda_types::CUfunction_attribute,
+ hfunc: cuda_types::CUfunction,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets information about a function
+
+ This call sets the value of a specified attribute \p attrib on the kernel given
+ by \p hfunc to an integer value specified by \p val
+ This function returns CUDA_SUCCESS if the new value of the attribute could be
+ successfully set. If the set fails, this call will return an error.
+ Not all attributes can have values set. Attempting to set a value on a read-only
+ attribute will result in an error (CUDA_ERROR_INVALID_VALUE)
+
+ Supported attributes for the cuFuncSetAttribute call are:
+ - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: This maximum size in bytes of
+ dynamically-allocated shared memory. The value should contain the requested
+ maximum size of dynamically-allocated shared memory. The sum of this value and
+ the function attribute ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES cannot exceed the
+ device attribute ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN.
+ The maximal size of requestable dynamic shared memory may differ by GPU
+ architecture.
+ - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: On devices where the L1
+ cache and shared memory use the same hardware resources, this sets the shared memory
+ carveout preference, in percent of the total shared memory.
+ See ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR
+ This is only a hint, and the driver can choose a different ratio if required to execute the function.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ blocks. The width, height, and depth values must either all be 0 or all be
+ positive. The validity of the cluster dimensions is checked at launch time.
+ If the value is set during compile time, it cannot be set at runtime.
+ Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+
+ \param hfunc - Function to query attribute of
+ \param attrib - Attribute requested
+ \param value - The value to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuLaunchKernel,
+ ::cudaFuncGetAttributes,
+ ::cudaFuncSetAttribute,
+ ::cuKernelSetAttribute*/
+ fn cuFuncSetAttribute(
+ hfunc: cuda_types::CUfunction,
+ attrib: cuda_types::CUfunction_attribute,
+ value: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the preferred cache configuration for a device function
+
+ On devices where the L1 cache and shared memory use the same hardware
+ resources, this sets through \p config the preferred cache configuration for
+ the device function \p hfunc. This is only a preference. The driver will use
+ the requested configuration if possible, but it is free to choose a different
+ configuration if required to execute \p hfunc. Any context-wide preference
+ set via ::cuCtxSetCacheConfig() will be overridden by this per-function
+ setting unless the per-function setting is ::CU_FUNC_CACHE_PREFER_NONE. In
+ that case, the current context-wide setting will be used.
+
+ This setting does nothing on devices where the size of the L1 cache and
+ shared memory are fixed.
+
+ Launching a kernel with a different preference than the most recent
+ preference setting may insert a device-side synchronization point.
+
+
+ The supported cache configurations are:
+ - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+
+ \param hfunc - Kernel to configure cache for
+ \param config - Requested cache configuration
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cuLaunchKernel,
+ ::cudaFuncSetCacheConfig,
+ ::cuKernelSetCacheConfig*/
+ fn cuFuncSetCacheConfig(
+ hfunc: cuda_types::CUfunction,
+ config: cuda_types::CUfunc_cache,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a module handle
+
+ Returns in \p *hmod the handle of the module that function \p hfunc
+ is located in. The lifetime of the module corresponds to the lifetime of
+ the context it was loaded in or until the module is explicitly unloaded.
+
+ The CUDA runtime manages its own modules loaded into the primary context.
+ If the handle returned by this API refers to a module loaded by the CUDA runtime,
+ calling ::cuModuleUnload() on that module will result in undefined behavior.
+
+ \param hmod - Returned module handle
+ \param hfunc - Function to retrieve module for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_FOUND
+ \notefnerr
+*/
+ fn cuFuncGetModule(
+ hmod: *mut cuda_types::CUmodule,
+ hfunc: cuda_types::CUfunction,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the function name for a ::CUfunction handle
+
+ Returns in \p **name the function name associated with the function handle \p hfunc .
+ The function name is returned as a null-terminated string. The returned name is only
+ valid when the function handle is valid. If the module is unloaded or reloaded, one
+ must call the API again to get the updated name. This API may return a mangled name if
+ the function is not declared as having C linkage. If either \p **name or \p hfunc
+ is NULL, ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \param name - The returned name of the function
+ \param hfunc - The function handle to retrieve the name for
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+*/
+ fn cuFuncGetName(
+ name: *mut *const ::core::ffi::c_char,
+ hfunc: cuda_types::CUfunction,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the offset and size of a kernel parameter in the device-side parameter layout
+
+ Queries the kernel parameter at \p paramIndex into \p func's list of parameters, and returns
+ in \p paramOffset and \p paramSize the offset and size, respectively, where the parameter
+ will reside in the device-side parameter layout. This information can be used to update kernel
+ node parameters from the device via ::cudaGraphKernelNodeSetParam() and
+ ::cudaGraphKernelNodeUpdatesApply(). \p paramIndex must be less than the number of parameters
+ that \p func takes. \p paramSize can be set to NULL if only the parameter offset is desired.
+
+ \param func - The function to query
+ \param paramIndex - The parameter index to query
+ \param paramOffset - Returns the offset into the device-side parameter layout at which the parameter resides
+ \param paramSize - Optionally returns the size of the parameter in the device-side parameter layout
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \notefnerr
+
+ \sa ::cuKernelGetParamInfo*/
+ fn cuFuncGetParamInfo(
+ func: cuda_types::CUfunction,
paramIndex: usize,
paramOffset: *mut usize,
paramSize: *mut usize,
- ) -> CUresult;
-}
-impl CUfunctionLoadingState_enum {
- pub const CU_FUNCTION_LOADING_STATE_UNLOADED: CUfunctionLoadingState_enum =
- CUfunctionLoadingState_enum(0);
-}
-impl CUfunctionLoadingState_enum {
- pub const CU_FUNCTION_LOADING_STATE_LOADED: CUfunctionLoadingState_enum =
- CUfunctionLoadingState_enum(1);
-}
-impl CUfunctionLoadingState_enum {
- pub const CU_FUNCTION_LOADING_STATE_MAX: CUfunctionLoadingState_enum =
- CUfunctionLoadingState_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUfunctionLoadingState_enum(pub ::std::os::raw::c_uint);
-pub use self::CUfunctionLoadingState_enum as CUfunctionLoadingState;
-extern "C" {
- pub fn cuFuncIsLoaded(state: *mut CUfunctionLoadingState, function: CUfunction) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncLoad(function: CUfunction) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchKernel_ptsz(
- f: CUfunction,
- gridDimX: ::std::os::raw::c_uint,
- gridDimY: ::std::os::raw::c_uint,
- gridDimZ: ::std::os::raw::c_uint,
- blockDimX: ::std::os::raw::c_uint,
- blockDimY: ::std::os::raw::c_uint,
- blockDimZ: ::std::os::raw::c_uint,
- sharedMemBytes: ::std::os::raw::c_uint,
- hStream: CUstream,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- extra: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchKernelEx_ptsz(
- config: *const CUlaunchConfig,
- f: CUfunction,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- extra: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchCooperativeKernel_ptsz(
- f: CUfunction,
- gridDimX: ::std::os::raw::c_uint,
- gridDimY: ::std::os::raw::c_uint,
- gridDimZ: ::std::os::raw::c_uint,
- blockDimX: ::std::os::raw::c_uint,
- blockDimY: ::std::os::raw::c_uint,
- blockDimZ: ::std::os::raw::c_uint,
- sharedMemBytes: ::std::os::raw::c_uint,
- hStream: CUstream,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchCooperativeKernelMultiDevice(
- launchParamsList: *mut CUDA_LAUNCH_PARAMS,
- numDevices: ::std::os::raw::c_uint,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchHostFunc_ptsz(
- hStream: CUstream,
- fn_: CUhostFn,
- userData: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncSetBlockShape(
- hfunc: CUfunction,
- x: ::std::os::raw::c_int,
- y: ::std::os::raw::c_int,
- z: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncSetSharedSize(hfunc: CUfunction, bytes: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuParamSetSize(hfunc: CUfunction, numbytes: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuParamSeti(
- hfunc: CUfunction,
- offset: ::std::os::raw::c_int,
- value: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuParamSetf(hfunc: CUfunction, offset: ::std::os::raw::c_int, value: f32) -> CUresult;
-}
-extern "C" {
- pub fn cuParamSetv(
- hfunc: CUfunction,
- offset: ::std::os::raw::c_int,
- ptr: *mut ::std::os::raw::c_void,
- numbytes: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunch(f: CUfunction) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchGrid(
- f: CUfunction,
- grid_width: ::std::os::raw::c_int,
- grid_height: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchGridAsync(
- f: CUfunction,
- grid_width: ::std::os::raw::c_int,
- grid_height: ::std::os::raw::c_int,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuParamSetTexRef(
- hfunc: CUfunction,
- texunit: ::std::os::raw::c_int,
- hTexRef: CUtexref,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuFuncSetSharedMemConfig(hfunc: CUfunction, config: CUsharedconfig) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphCreate(phGraph: *mut CUgraph, flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddKernelNode_v2(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns if the function is loaded
+
+ Returns in \p state the loading state of \p function.
+
+ \param state - returned loading state
+ \param function - the function to check
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuFuncLoad,
+ ::cuModuleEnumerateFunctions*/
+ fn cuFuncIsLoaded(
+ state: *mut cuda_types::CUfunctionLoadingState,
+ function: cuda_types::CUfunction,
+ ) -> cuda_types::CUresult;
+ /** \brief Loads a function
+
+ Finalizes function loading for \p function. Calling this API with a
+ fully loaded function has no effect.
+
+ \param function - the function to load
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuModuleEnumerateFunctions,
+ ::cuFuncIsLoaded*/
+ fn cuFuncLoad(function: cuda_types::CUfunction) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function ::CUfunction or a CUDA kernel ::CUkernel
+
+ Invokes the function ::CUfunction or the kernel ::CUkernel \p f
+ on a \p gridDimX x \p gridDimY x \p gridDimZ grid of blocks.
+ Each block contains \p blockDimX x \p blockDimY x
+ \p blockDimZ threads.
+
+ \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ available to each thread block.
+
+ Kernel parameters to \p f can be specified in one of two ways:
+
+ 1) Kernel parameters can be specified via \p kernelParams. If \p f
+ has N parameters, then \p kernelParams needs to be an array of N
+ pointers. Each of \p kernelParams[0] through \p kernelParams[N-1]
+ must point to a region of memory from which the actual kernel
+ parameter will be copied. The number of kernel parameters and their
+ offsets and sizes do not need to be specified as that information is
+ retrieved directly from the kernel's image.
+
+ 2) Kernel parameters can also be packaged by the application into
+ a single buffer that is passed in via the \p extra parameter.
+ This places the burden on the application of knowing each kernel
+ parameter's size and alignment/padding within the buffer. Here is
+ an example of using the \p extra parameter in this manner:
+ \code
+size_t argBufferSize;
+char argBuffer[256];
+
+// populate argBuffer and argBufferSize
+
+void *config[] = {
+CU_LAUNCH_PARAM_BUFFER_POINTER, argBuffer,
+CU_LAUNCH_PARAM_BUFFER_SIZE, &argBufferSize,
+CU_LAUNCH_PARAM_END
+};
+status = cuLaunchKernel(f, gx, gy, gz, bx, by, bz, sh, s, NULL, config);
+ \endcode
+
+ The \p extra parameter exists to allow ::cuLaunchKernel to take
+ additional less commonly used arguments. \p extra specifies a list of
+ names of extra settings and their corresponding values. Each extra
+ setting name is immediately followed by the corresponding value. The
+ list must be terminated with either NULL or ::CU_LAUNCH_PARAM_END.
+
+ - ::CU_LAUNCH_PARAM_END, which indicates the end of the \p extra
+ array;
+ - ::CU_LAUNCH_PARAM_BUFFER_POINTER, which specifies that the next
+ value in \p extra will be a pointer to a buffer containing all
+ the kernel parameters for launching kernel \p f;
+ - ::CU_LAUNCH_PARAM_BUFFER_SIZE, which specifies that the next
+ value in \p extra will be a pointer to a size_t containing the
+ size of the buffer specified with ::CU_LAUNCH_PARAM_BUFFER_POINTER;
+
+ The error ::CUDA_ERROR_INVALID_VALUE will be returned if kernel
+ parameters are specified with both \p kernelParams and \p extra
+ (i.e. both \p kernelParams and \p extra are non-NULL).
+
+ Calling ::cuLaunchKernel() invalidates the persistent function state
+ set through the following deprecated APIs:
+ ::cuFuncSetBlockShape(),
+ ::cuFuncSetSharedSize(),
+ ::cuParamSetSize(),
+ ::cuParamSeti(),
+ ::cuParamSetf(),
+ ::cuParamSetv().
+
+ Note that to use ::cuLaunchKernel(), the kernel \p f must either have
+ been compiled with toolchain version 3.2 or later so that it will
+ contain kernel parameter information, or have no kernel parameters.
+ If either of these conditions is not met, then ::cuLaunchKernel() will
+ return ::CUDA_ERROR_INVALID_IMAGE.
+
+ Note that the API can also be used to launch context-less kernel ::CUkernel
+ by querying the handle using ::cuLibraryGetKernel() and then passing it
+ to the API by casting to ::CUfunction. Here, the context to launch
+ the kernel on will either be taken from the specified stream \p hStream
+ or the current context in case of NULL stream.
+
+ \param f - Function ::CUfunction or Kernel ::CUkernel to launch
+ \param gridDimX - Width of grid in blocks
+ \param gridDimY - Height of grid in blocks
+ \param gridDimZ - Depth of grid in blocks
+ \param blockDimX - X dimension of each thread block
+ \param blockDimY - Y dimension of each thread block
+ \param blockDimZ - Z dimension of each thread block
+ \param sharedMemBytes - Dynamic shared-memory size per thread block in bytes
+ \param hStream - Stream identifier
+ \param kernelParams - Array of pointers to kernel parameters
+ \param extra - Extra options
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_NOT_FOUND
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cudaLaunchKernel,
+ ::cuLibraryGetKernel,
+ ::cuKernelSetCacheConfig,
+ ::cuKernelGetAttribute,
+ ::cuKernelSetAttribute*/
+ fn cuLaunchKernel_ptsz(
+ f: cuda_types::CUfunction,
+ gridDimX: ::core::ffi::c_uint,
+ gridDimY: ::core::ffi::c_uint,
+ gridDimZ: ::core::ffi::c_uint,
+ blockDimX: ::core::ffi::c_uint,
+ blockDimY: ::core::ffi::c_uint,
+ blockDimZ: ::core::ffi::c_uint,
+ sharedMemBytes: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ extra: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function ::CUfunction or a CUDA kernel ::CUkernel with launch-time configuration
+
+ Invokes the function ::CUfunction or the kernel ::CUkernel \p f with the specified launch-time configuration
+ \p config.
+
+ The ::CUlaunchConfig structure is defined as:
+
+ \code
+ typedef struct CUlaunchConfig_st {
+ unsigned int gridDimX;
+ unsigned int gridDimY;
+ unsigned int gridDimZ;
+ unsigned int blockDimX;
+ unsigned int blockDimY;
+ unsigned int blockDimZ;
+ unsigned int sharedMemBytes;
+ CUstream hStream;
+ CUlaunchAttribute *attrs;
+ unsigned int numAttrs;
+ } CUlaunchConfig;
+ \endcode
+
+ where:
+ - ::CUlaunchConfig::gridDimX is the width of the grid in blocks.
+ - ::CUlaunchConfig::gridDimY is the height of the grid in blocks.
+ - ::CUlaunchConfig::gridDimZ is the depth of the grid in blocks.
+ - ::CUlaunchConfig::blockDimX is the X dimension of each thread block.
+ - ::CUlaunchConfig::blockDimX is the Y dimension of each thread block.
+ - ::CUlaunchConfig::blockDimZ is the Z dimension of each thread block.
+ - ::CUlaunchConfig::sharedMemBytes is the dynamic shared-memory size per
+ thread block in bytes.
+ - ::CUlaunchConfig::hStream is the handle to the stream to perform the launch
+ in. The CUDA context associated with this stream must match that associated
+ with function f.
+ - ::CUlaunchConfig::attrs is an array of ::CUlaunchConfig::numAttrs
+ continguous ::CUlaunchAttribute elements. The value of this pointer is not
+ considered if ::CUlaunchConfig::numAttrs is zero. However, in that case, it
+ is recommended to set the pointer to NULL.
+ - ::CUlaunchConfig::numAttrs is the number of attributes populating the
+ first ::CUlaunchConfig::numAttrs positions of the ::CUlaunchConfig::attrs
+ array.
+
+ Launch-time configuration is specified by adding entries to
+ ::CUlaunchConfig::attrs. Each entry is an attribute ID and a corresponding
+ attribute value.
+
+ The ::CUlaunchAttribute structure is defined as:
+ \code
+ typedef struct CUlaunchAttribute_st {
+ CUlaunchAttributeID id;
+ CUlaunchAttributeValue value;
+ } CUlaunchAttribute;
+ \endcode
+ where:
+ - ::CUlaunchAttribute::id is a unique enum identifying the attribute.
+ - ::CUlaunchAttribute::value is a union that hold the attribute value.
+
+ An example of using the \p config parameter:
+ \code
+ CUlaunchAttribute coopAttr = {.id = CU_LAUNCH_ATTRIBUTE_COOPERATIVE,
+ .value = 1};
+ CUlaunchConfig config = {... // set block and grid dimensions
+ .attrs = &coopAttr,
+ .numAttrs = 1};
+
+ cuLaunchKernelEx(&config, kernel, NULL, NULL);
+ \endcode
+
+ The ::CUlaunchAttributeID enum is defined as:
+ \code
+ typedef enum CUlaunchAttributeID_enum {
+ CU_LAUNCH_ATTRIBUTE_IGNORE = 0,
+ CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW = 1,
+ CU_LAUNCH_ATTRIBUTE_COOPERATIVE = 2,
+ CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY = 3,
+ CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION = 4,
+ CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 5,
+ CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION = 6,
+ CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT = 7,
+ CU_LAUNCH_ATTRIBUTE_PRIORITY = 8,
+ CU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN_MAP = 9,
+ CU_LAUNCH_ATTRIBUTE_MEM_SYNC_DOMAIN = 10,
+ CU_LAUNCH_ATTRIBUTE_LAUNCH_COMPLETION_EVENT = 12,
+ CU_LAUNCH_ATTRIBUTE_DEVICE_UPDATABLE_KERNEL_NODE = 13,
+ } CUlaunchAttributeID;
+ \endcode
+
+ and the corresponding ::CUlaunchAttributeValue union as :
+ \code
+ typedef union CUlaunchAttributeValue_union {
+ CUaccessPolicyWindow accessPolicyWindow;
+ int cooperative;
+ CUsynchronizationPolicy syncPolicy;
+ struct {
+ unsigned int x;
+ unsigned int y;
+ unsigned int z;
+ } clusterDim;
+ CUclusterSchedulingPolicy clusterSchedulingPolicyPreference;
+ int programmaticStreamSerializationAllowed;
+ struct {
+ CUevent event;
+ int flags;
+ int triggerAtBlockStart;
+ } programmaticEvent;
+ int priority;
+ CUlaunchMemSyncDomainMap memSyncDomainMap;
+ CUlaunchMemSyncDomain memSyncDomain;
+ struct {
+ CUevent event;
+ int flags;
+ } launchCompletionEvent;
+ struct {
+ int deviceUpdatable;
+ CUgraphDeviceNode devNode;
+ } deviceUpdatableKernelNode;
+ } CUlaunchAttributeValue;
+ \endcode
+
+ Setting ::CU_LAUNCH_ATTRIBUTE_COOPERATIVE to a non-zero value causes the
+ kernel launch to be a cooperative launch, with exactly the same usage and
+ semantics of ::cuLaunchCooperativeKernel.
+
+ Setting ::CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION to a non-zero
+ values causes the kernel to use programmatic means to resolve its stream
+ dependency -- enabling the CUDA runtime to opportunistically allow the grid's
+ execution to overlap with the previous kernel in the stream, if that kernel
+ requests the overlap.
+
+ ::CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT records an event along with the
+ kernel launch. Event recorded through this launch attribute is guaranteed to
+ only trigger after all block in the associated kernel trigger the event. A
+ block can trigger the event through PTX launchdep.release or CUDA builtin
+ function cudaTriggerProgrammaticLaunchCompletion(). A trigger can also be
+ inserted at the beginning of each block's execution if triggerAtBlockStart is
+ set to non-0. Note that dependents (including the CPU thread calling
+ cuEventSynchronize()) are not guaranteed to observe the release precisely
+ when it is released. For example, cuEventSynchronize() may only observe the
+ event trigger long after the associated kernel has completed. This recording
+ type is primarily meant for establishing programmatic dependency between
+ device tasks. The event supplied must not be an interprocess or interop
+ event. The event must disable timing (i.e. created with
+ ::CU_EVENT_DISABLE_TIMING flag set).
+
+ ::CU_LAUNCH_ATTRIBUTE_LAUNCH_COMPLETION_EVENT records an event along with
+ the kernel launch. Nominally, the event is triggered once all blocks of the
+ kernel have begun execution. Currently this is a best effort. If a kernel B
+ has a launch completion dependency on a kernel A, B may wait until A is
+ complete. Alternatively, blocks of B may begin before all blocks of A have
+ begun, for example:
+
+ - If B can claim execution resources unavaiable to A, for example if they
+ run on different GPUs.
+ - If B is a higher priority than A.
+
+ Exercise caution if such an ordering inversion could lead to deadlock. The
+ event supplied must not be an interprocess or interop event. The event must
+ disable timing (i.e. must be created with the ::CU_EVENT_DISABLE_TIMING flag
+ set).
+
+ Setting ::CU_LAUNCH_ATTRIBUTE_DEVICE_UPDATABLE_KERNEL_NODE to 1
+ on a captured launch causes the resulting kernel node to be device-updatable.
+ This attribute is specific to graphs, and passing it to a launch in a
+ non-capturing stream results in an error. Passing a value other than 0 or 1 is
+ not allowed.
+
+ On success, a handle will be returned via
+ ::CUlaunchAttributeValue::deviceUpdatableKernelNode::devNode which can be passed
+ to the various device-side update functions to update the node's kernel parameters
+ from within another kernel. For more information on the types of device updates
+ that can be made, as well as the relevant limitations thereof, see
+ ::cudaGraphKernelNodeUpdatesApply.
+
+ Kernel nodes which are device-updatable have additional restrictions compared to regular
+ kernel nodes. Firstly, device-updatable nodes cannot be removed from their graph via
+ ::cuGraphDestroyNode. Additionally, once opted-in to this functionality, a node cannot
+ opt out, and any attempt to set the attribute to 0 will result in an error. Graphs
+ containing one or more device-updatable node also do not allow multiple instantiation.
+
+
+ The effect of other attributes is consistent with their effect when set via
+ persistent APIs.
+
+ See ::cuStreamSetAttribute for
+ - ::CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW
+ - ::CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY
+
+ See ::cuFuncSetAttribute for
+ - ::CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION
+ - ::CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE
+
+ Kernel parameters to \p f can be specified in the same ways that they can be
+ using ::cuLaunchKernel.
+
+ Note that the API can also be used to launch context-less kernel ::CUkernel
+ by querying the handle using ::cuLibraryGetKernel() and then passing it
+ to the API by casting to ::CUfunction. Here, the context to launch
+ the kernel on will either be taken from the specified stream ::CUlaunchConfig::hStream
+ or the current context in case of NULL stream.
+
+ \param config - Config to launch
+ \param f - Function ::CUfunction or Kernel ::CUkernel to launch
+ \param kernelParams - Array of pointers to kernel parameters
+ \param extra - Extra options
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_NOT_FOUND
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cudaLaunchKernel,
+ ::cudaLaunchKernelEx,
+ ::cuLibraryGetKernel,
+ ::cuKernelSetCacheConfig,
+ ::cuKernelGetAttribute,
+ ::cuKernelSetAttribute*/
+ fn cuLaunchKernelEx_ptsz(
+ config: *const cuda_types::CUlaunchConfig,
+ f: cuda_types::CUfunction,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ extra: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function ::CUfunction or a CUDA kernel ::CUkernel where thread blocks
+ can cooperate and synchronize as they execute
+
+ Invokes the function ::CUfunction or the kernel ::CUkernel \p f on a \p gridDimX x \p gridDimY x \p gridDimZ
+ grid of blocks. Each block contains \p blockDimX x \p blockDimY x
+ \p blockDimZ threads.
+
+ Note that the API can also be used to launch context-less kernel ::CUkernel
+ by querying the handle using ::cuLibraryGetKernel() and then passing it
+ to the API by casting to ::CUfunction. Here, the context to launch
+ the kernel on will either be taken from the specified stream \p hStream
+ or the current context in case of NULL stream.
+
+ \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ available to each thread block.
+
+ The device on which this kernel is invoked must have a non-zero value for
+ the device attribute ::CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH.
+
+ The total number of blocks launched cannot exceed the maximum number of blocks per
+ multiprocessor as returned by ::cuOccupancyMaxActiveBlocksPerMultiprocessor (or
+ ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ as specified by the device attribute ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT.
+
+ The kernel cannot make use of CUDA dynamic parallelism.
+
+ Kernel parameters must be specified via \p kernelParams. If \p f
+ has N parameters, then \p kernelParams needs to be an array of N
+ pointers. Each of \p kernelParams[0] through \p kernelParams[N-1]
+ must point to a region of memory from which the actual kernel
+ parameter will be copied. The number of kernel parameters and their
+ offsets and sizes do not need to be specified as that information is
+ retrieved directly from the kernel's image.
+
+ Calling ::cuLaunchCooperativeKernel() sets persistent function state that is
+ the same as function state set through ::cuLaunchKernel API
+
+ When the kernel \p f is launched via ::cuLaunchCooperativeKernel(), the previous
+ block shape, shared size and parameter info associated with \p f
+ is overwritten.
+
+ Note that to use ::cuLaunchCooperativeKernel(), the kernel \p f must either have
+ been compiled with toolchain version 3.2 or later so that it will
+ contain kernel parameter information, or have no kernel parameters.
+ If either of these conditions is not met, then ::cuLaunchCooperativeKernel() will
+ return ::CUDA_ERROR_INVALID_IMAGE.
+
+ Note that the API can also be used to launch context-less kernel ::CUkernel
+ by querying the handle using ::cuLibraryGetKernel() and then passing it
+ to the API by casting to ::CUfunction. Here, the context to launch
+ the kernel on will either be taken from the specified stream \p hStream
+ or the current context in case of NULL stream.
+
+ \param f - Function ::CUfunction or Kernel ::CUkernel to launch
+ \param gridDimX - Width of grid in blocks
+ \param gridDimY - Height of grid in blocks
+ \param gridDimZ - Depth of grid in blocks
+ \param blockDimX - X dimension of each thread block
+ \param blockDimY - Y dimension of each thread block
+ \param blockDimZ - Z dimension of each thread block
+ \param sharedMemBytes - Dynamic shared-memory size per thread block in bytes
+ \param hStream - Stream identifier
+ \param kernelParams - Array of pointers to kernel parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ ::CUDA_ERROR_NOT_FOUND
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cuLaunchCooperativeKernelMultiDevice,
+ ::cudaLaunchCooperativeKernel,
+ ::cuLibraryGetKernel,
+ ::cuKernelSetCacheConfig,
+ ::cuKernelGetAttribute,
+ ::cuKernelSetAttribute*/
+ fn cuLaunchCooperativeKernel_ptsz(
+ f: cuda_types::CUfunction,
+ gridDimX: ::core::ffi::c_uint,
+ gridDimY: ::core::ffi::c_uint,
+ gridDimZ: ::core::ffi::c_uint,
+ blockDimX: ::core::ffi::c_uint,
+ blockDimY: ::core::ffi::c_uint,
+ blockDimZ: ::core::ffi::c_uint,
+ sharedMemBytes: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches CUDA functions on multiple devices where thread blocks can cooperate and synchronize as they execute
+
+ \deprecated This function is deprecated as of CUDA 11.3.
+
+ Invokes kernels as specified in the \p launchParamsList array where each element
+ of the array specifies all the parameters required to perform a single kernel launch.
+ These kernels can cooperate and synchronize as they execute. The size of the array is
+ specified by \p numDevices.
+
+ No two kernels can be launched on the same device. All the devices targeted by this
+ multi-device launch must be identical. All devices must have a non-zero value for the
+ device attribute ::CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH.
+
+ All kernels launched must be identical with respect to the compiled code. Note that
+ any __device__, __constant__ or __managed__ variables present in the module that owns
+ the kernel launched on each device, are independently instantiated on every device.
+ It is the application's responsibility to ensure these variables are initialized and
+ used appropriately.
+
+ The size of the grids as specified in blocks, the size of the blocks themselves
+ and the amount of shared memory used by each thread block must also match across
+ all launched kernels.
+
+ The streams used to launch these kernels must have been created via either ::cuStreamCreate
+ or ::cuStreamCreateWithPriority. The NULL stream or ::CU_STREAM_LEGACY or ::CU_STREAM_PER_THREAD
+ cannot be used.
+
+ The total number of blocks launched per kernel cannot exceed the maximum number of blocks
+ per multiprocessor as returned by ::cuOccupancyMaxActiveBlocksPerMultiprocessor (or
+ ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ as specified by the device attribute ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT. Since the
+ total number of blocks launched per device has to match across all devices, the maximum
+ number of blocks that can be launched per device will be limited by the device with the
+ least number of multiprocessors.
+
+ The kernels cannot make use of CUDA dynamic parallelism.
+
+ The ::CUDA_LAUNCH_PARAMS structure is defined as:
+ \code
+typedef struct CUDA_LAUNCH_PARAMS_st
+{
+CUfunction function;
+unsigned int gridDimX;
+unsigned int gridDimY;
+unsigned int gridDimZ;
+unsigned int blockDimX;
+unsigned int blockDimY;
+unsigned int blockDimZ;
+unsigned int sharedMemBytes;
+CUstream hStream;
+void **kernelParams;
+} CUDA_LAUNCH_PARAMS;
+ \endcode
+ where:
+ - ::CUDA_LAUNCH_PARAMS::function specifies the kernel to be launched. All functions must
+ be identical with respect to the compiled code.
+ Note that you can also specify context-less kernel ::CUkernel by querying the handle
+ using ::cuLibraryGetKernel() and then casting to ::CUfunction. In this case, the context to
+ launch the kernel on be taken from the specified stream ::CUDA_LAUNCH_PARAMS::hStream.
+ - ::CUDA_LAUNCH_PARAMS::gridDimX is the width of the grid in blocks. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::gridDimY is the height of the grid in blocks. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::gridDimZ is the depth of the grid in blocks. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::blockDimX is the X dimension of each thread block. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::blockDimX is the Y dimension of each thread block. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::blockDimZ is the Z dimension of each thread block. This must match across
+ all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::sharedMemBytes is the dynamic shared-memory size per thread block in bytes.
+ This must match across all kernels launched.
+ - ::CUDA_LAUNCH_PARAMS::hStream is the handle to the stream to perform the launch in. This cannot
+ be the NULL stream or ::CU_STREAM_LEGACY or ::CU_STREAM_PER_THREAD. The CUDA context associated
+ with this stream must match that associated with ::CUDA_LAUNCH_PARAMS::function.
+ - ::CUDA_LAUNCH_PARAMS::kernelParams is an array of pointers to kernel parameters. If
+ ::CUDA_LAUNCH_PARAMS::function has N parameters, then ::CUDA_LAUNCH_PARAMS::kernelParams
+ needs to be an array of N pointers. Each of ::CUDA_LAUNCH_PARAMS::kernelParams[0] through
+ ::CUDA_LAUNCH_PARAMS::kernelParams[N-1] must point to a region of memory from which the actual
+ kernel parameter will be copied. The number of kernel parameters and their offsets and sizes
+ do not need to be specified as that information is retrieved directly from the kernel's image.
+
+ By default, the kernel won't begin execution on any GPU until all prior work in all the specified
+ streams has completed. This behavior can be overridden by specifying the flag
+ ::CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC. When this flag is specified, each kernel
+ will only wait for prior work in the stream corresponding to that GPU to complete before it begins
+ execution.
+
+ Similarly, by default, any subsequent work pushed in any of the specified streams will not begin
+ execution until the kernels on all GPUs have completed. This behavior can be overridden by specifying
+ the flag ::CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC. When this flag is specified,
+ any subsequent work pushed in any of the specified streams will only wait for the kernel launched
+ on the GPU corresponding to that stream to complete before it begins execution.
+
+ Calling ::cuLaunchCooperativeKernelMultiDevice() sets persistent function state that is
+ the same as function state set through ::cuLaunchKernel API when called individually for each
+ element in \p launchParamsList.
+
+ When kernels are launched via ::cuLaunchCooperativeKernelMultiDevice(), the previous
+ block shape, shared size and parameter info associated with each ::CUDA_LAUNCH_PARAMS::function
+ in \p launchParamsList is overwritten.
+
+ Note that to use ::cuLaunchCooperativeKernelMultiDevice(), the kernels must either have
+ been compiled with toolchain version 3.2 or later so that it will
+ contain kernel parameter information, or have no kernel parameters.
+ If either of these conditions is not met, then ::cuLaunchCooperativeKernelMultiDevice() will
+ return ::CUDA_ERROR_INVALID_IMAGE.
+
+ \param launchParamsList - List of launch parameters, one per device
+ \param numDevices - Size of the \p launchParamsList array
+ \param flags - Flags to control launch behavior
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_IMAGE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cuLaunchCooperativeKernel,
+ ::cudaLaunchCooperativeKernelMultiDevice*/
+ fn cuLaunchCooperativeKernelMultiDevice(
+ launchParamsList: *mut cuda_types::CUDA_LAUNCH_PARAMS,
+ numDevices: ::core::ffi::c_uint,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Enqueues a host function call in a stream
+
+ Enqueues a host function to run in a stream. The function will be called
+ after currently enqueued work and will block work added after it.
+
+ The host function must not make any CUDA API calls. Attempting to use a
+ CUDA API may result in ::CUDA_ERROR_NOT_PERMITTED, but this is not required.
+ The host function must not perform any synchronization that may depend on
+ outstanding CUDA work not mandated to run earlier. Host functions without a
+ mandated order (such as in independent streams) execute in undefined order
+ and may be serialized.
+
+ For the purposes of Unified Memory, execution makes a number of guarantees:
+ <ul>
+ <li>The stream is considered idle for the duration of the function's
+ execution. Thus, for example, the function may always use memory attached
+ to the stream it was enqueued in.</li>
+ <li>The start of execution of the function has the same effect as
+ synchronizing an event recorded in the same stream immediately prior to
+ the function. It thus synchronizes streams which have been "joined"
+ prior to the function.</li>
+ <li>Adding device work to any stream does not have the effect of making
+ the stream active until all preceding host functions and stream callbacks
+ have executed. Thus, for
+ example, a function might use global attached memory even if work has
+ been added to another stream, if the work has been ordered behind the
+ function call with an event.</li>
+ <li>Completion of the function does not cause a stream to become
+ active except as described above. The stream will remain idle
+ if no device work follows the function, and will remain idle across
+ consecutive host functions or stream callbacks without device work in
+ between. Thus, for example,
+ stream synchronization can be done by signaling from a host function at the
+ end of the stream.</li>
+ </ul>
+
+ Note that, in contrast to ::cuStreamAddCallback, the function will not be
+ called in the event of an error in the CUDA context.
+
+ \param hStream - Stream to enqueue function call in
+ \param fn - The function to call once preceding stream operations are complete
+ \param userData - User-specified data to be passed to the function
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuStreamCreate,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamWaitEvent,
+ ::cuStreamDestroy,
+ ::cuMemAllocManaged,
+ ::cuStreamAttachMemAsync,
+ ::cuStreamAddCallback*/
+ fn cuLaunchHostFunc_ptsz(
+ hStream: cuda_types::CUstream,
+ fn_: cuda_types::CUhostFn,
+ userData: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the block-dimensions for the function
+
+ \deprecated
+
+ Specifies the \p x, \p y, and \p z dimensions of the thread blocks that are
+ created when the kernel given by \p hfunc is launched.
+
+ \param hfunc - Kernel to specify dimensions of
+ \param x - X dimension
+ \param y - Y dimension
+ \param z - Z dimension
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetSharedSize,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSeti,
+ ::cuParamSetf,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuFuncSetBlockShape(
+ hfunc: cuda_types::CUfunction,
+ x: ::core::ffi::c_int,
+ y: ::core::ffi::c_int,
+ z: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the dynamic shared-memory size for the function
+
+ \deprecated
+
+ Sets through \p bytes the amount of dynamic shared memory that will be
+ available to each thread block when the kernel given by \p hfunc is launched.
+
+ \param hfunc - Kernel to specify dynamic shared-memory size for
+ \param bytes - Dynamic shared-memory size per thread in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetCacheConfig,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSeti,
+ ::cuParamSetf,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuFuncSetSharedSize(
+ hfunc: cuda_types::CUfunction,
+ bytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameter size for the function
+
+ \deprecated
+
+ Sets through \p numbytes the total size in bytes needed by the function
+ parameters of the kernel corresponding to \p hfunc.
+
+ \param hfunc - Kernel to set parameter size for
+ \param numbytes - Size of parameter list in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetf,
+ ::cuParamSeti,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuParamSetSize(
+ hfunc: cuda_types::CUfunction,
+ numbytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds an integer parameter to the function's argument list
+
+ \deprecated
+
+ Sets an integer parameter that will be specified the next time the
+ kernel corresponding to \p hfunc will be invoked. \p offset is a byte offset.
+
+ \param hfunc - Kernel to add parameter to
+ \param offset - Offset to add parameter to argument list
+ \param value - Value of parameter
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSetf,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuParamSeti(
+ hfunc: cuda_types::CUfunction,
+ offset: ::core::ffi::c_int,
+ value: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds a floating-point parameter to the function's argument list
+
+ \deprecated
+
+ Sets a floating-point parameter that will be specified the next time the
+ kernel corresponding to \p hfunc will be invoked. \p offset is a byte offset.
+
+ \param hfunc - Kernel to add parameter to
+ \param offset - Offset to add parameter to argument list
+ \param value - Value of parameter
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSeti,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuParamSetf(
+ hfunc: cuda_types::CUfunction,
+ offset: ::core::ffi::c_int,
+ value: f32,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds arbitrary data to the function's argument list
+
+ \deprecated
+
+ Copies an arbitrary amount of data (specified in \p numbytes) from \p ptr
+ into the parameter space of the kernel corresponding to \p hfunc. \p offset
+ is a byte offset.
+
+ \param hfunc - Kernel to add data to
+ \param offset - Offset to add data to argument list
+ \param ptr - Pointer to arbitrary data
+ \param numbytes - Size of data to copy in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSetf,
+ ::cuParamSeti,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuParamSetv(
+ hfunc: cuda_types::CUfunction,
+ offset: ::core::ffi::c_int,
+ ptr: *mut ::core::ffi::c_void,
+ numbytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function
+
+ \deprecated
+
+ Invokes the kernel \p f on a 1 x 1 x 1 grid of blocks. The block
+ contains the number of threads specified by a previous call to
+ ::cuFuncSetBlockShape().
+
+ The block shape, dynamic shared memory size, and parameter information
+ must be set using
+ ::cuFuncSetBlockShape(),
+ ::cuFuncSetSharedSize(),
+ ::cuParamSetSize(),
+ ::cuParamSeti(),
+ ::cuParamSetf(), and
+ ::cuParamSetv()
+ prior to calling this function.
+
+ Launching a function via ::cuLaunchKernel() invalidates the function's
+ block shape, dynamic shared memory size, and parameter information. After
+ launching via cuLaunchKernel, this state must be re-initialized prior to
+ calling this function. Failure to do so results in undefined behavior.
+
+ \param f - Kernel to launch
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSetf,
+ ::cuParamSeti,
+ ::cuParamSetv,
+ ::cuLaunchGrid,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuLaunch(f: cuda_types::CUfunction) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function
+
+ \deprecated
+
+ Invokes the kernel \p f on a \p grid_width x \p grid_height grid of
+ blocks. Each block contains the number of threads specified by a previous
+ call to ::cuFuncSetBlockShape().
+
+ The block shape, dynamic shared memory size, and parameter information
+ must be set using
+ ::cuFuncSetBlockShape(),
+ ::cuFuncSetSharedSize(),
+ ::cuParamSetSize(),
+ ::cuParamSeti(),
+ ::cuParamSetf(), and
+ ::cuParamSetv()
+ prior to calling this function.
+
+ Launching a function via ::cuLaunchKernel() invalidates the function's
+ block shape, dynamic shared memory size, and parameter information. After
+ launching via cuLaunchKernel, this state must be re-initialized prior to
+ calling this function. Failure to do so results in undefined behavior.
+
+ \param f - Kernel to launch
+ \param grid_width - Width of grid in blocks
+ \param grid_height - Height of grid in blocks
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSetf,
+ ::cuParamSeti,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGridAsync,
+ ::cuLaunchKernel*/
+ fn cuLaunchGrid(
+ f: cuda_types::CUfunction,
+ grid_width: ::core::ffi::c_int,
+ grid_height: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches a CUDA function
+
+ \deprecated
+
+ Invokes the kernel \p f on a \p grid_width x \p grid_height grid of
+ blocks. Each block contains the number of threads specified by a previous
+ call to ::cuFuncSetBlockShape().
+
+ The block shape, dynamic shared memory size, and parameter information
+ must be set using
+ ::cuFuncSetBlockShape(),
+ ::cuFuncSetSharedSize(),
+ ::cuParamSetSize(),
+ ::cuParamSeti(),
+ ::cuParamSetf(), and
+ ::cuParamSetv()
+ prior to calling this function.
+
+ Launching a function via ::cuLaunchKernel() invalidates the function's
+ block shape, dynamic shared memory size, and parameter information. After
+ launching via cuLaunchKernel, this state must be re-initialized prior to
+ calling this function. Failure to do so results in undefined behavior.
+
+ \param f - Kernel to launch
+ \param grid_width - Width of grid in blocks
+ \param grid_height - Height of grid in blocks
+ \param hStream - Stream identifier
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_LAUNCH_FAILED,
+ ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+
+ \note In certain cases where cubins are created with no ABI (i.e., using \p ptxas \p --abi-compile \p no),
+ this function may serialize kernel launches. The CUDA driver retains asynchronous behavior by
+ growing the per-thread stack as needed per launch and not shrinking it afterwards.
+
+ \note_null_stream
+ \notefnerr
+
+ \sa ::cuFuncSetBlockShape,
+ ::cuFuncSetSharedSize,
+ ::cuFuncGetAttribute,
+ ::cuParamSetSize,
+ ::cuParamSetf,
+ ::cuParamSeti,
+ ::cuParamSetv,
+ ::cuLaunch,
+ ::cuLaunchGrid,
+ ::cuLaunchKernel*/
+ fn cuLaunchGridAsync(
+ f: cuda_types::CUfunction,
+ grid_width: ::core::ffi::c_int,
+ grid_height: ::core::ffi::c_int,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds a texture-reference to the function's argument list
+
+ \deprecated
+
+ Makes the CUDA array or linear memory bound to the texture reference
+ \p hTexRef available to a device program as a texture. In this version of
+ CUDA, the texture-reference must be obtained via ::cuModuleGetTexRef() and
+ the \p texunit parameter must be set to ::CU_PARAM_TR_DEFAULT.
+
+ \param hfunc - Kernel to add texture-reference to
+ \param texunit - Texture unit (must be ::CU_PARAM_TR_DEFAULT)
+ \param hTexRef - Texture-reference to add to argument list
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr*/
+ fn cuParamSetTexRef(
+ hfunc: cuda_types::CUfunction,
+ texunit: ::core::ffi::c_int,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the shared memory configuration for a device function.
+
+ \deprecated
+
+ On devices with configurable shared memory banks, this function will
+ force all subsequent launches of the specified device function to have
+ the given shared memory bank size configuration. On any given launch of the
+ function, the shared memory configuration of the device will be temporarily
+ changed if needed to suit the function's preferred configuration. Changes in
+ shared memory configuration between subsequent launches of functions,
+ may introduce a device side synchronization point.
+
+ Any per-function setting of shared memory bank size set via
+ ::cuFuncSetSharedMemConfig will override the context wide setting set with
+ ::cuCtxSetSharedMemConfig.
+
+ Changing the shared memory bank size will not increase shared memory usage
+ or affect occupancy of kernels, but may have major effects on performance.
+ Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ but will change what kinds of accesses to shared memory will result in bank
+ conflicts.
+
+ This function will do nothing on devices with fixed shared memory bank size.
+
+ The supported bank configurations are:
+ - ::CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: use the context's shared memory
+ configuration when launching this function.
+ - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: set shared memory bank width to
+ be natively four bytes when launching this function.
+ - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: set shared memory bank width to
+ be natively eight bytes when launching this function.
+
+ \param hfunc - kernel to be given a shared memory config
+ \param config - requested shared memory configuration
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa ::cuCtxGetCacheConfig,
+ ::cuCtxSetCacheConfig,
+ ::cuCtxGetSharedMemConfig,
+ ::cuCtxSetSharedMemConfig,
+ ::cuFuncGetAttribute,
+ ::cuLaunchKernel,
+ ::cudaFuncSetSharedMemConfig*/
+ fn cuFuncSetSharedMemConfig(
+ hfunc: cuda_types::CUfunction,
+ config: cuda_types::CUsharedconfig,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a graph
+
+ Creates an empty graph, which is returned via \p phGraph.
+
+ \param phGraph - Returns newly created graph
+ \param flags - Graph creation flags, must be 0
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode,
+ ::cuGraphInstantiate,
+ ::cuGraphDestroy,
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphClone*/
+ fn cuGraphCreate(
+ phGraph: *mut cuda_types::CUgraph,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a kernel execution node and adds it to a graph
+
+ Creates a new kernel execution node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ The CUDA_KERNEL_NODE_PARAMS structure is defined as:
+
+ \code
+ typedef struct CUDA_KERNEL_NODE_PARAMS_st {
+ CUfunction func;
+ unsigned int gridDimX;
+ unsigned int gridDimY;
+ unsigned int gridDimZ;
+ unsigned int blockDimX;
+ unsigned int blockDimY;
+ unsigned int blockDimZ;
+ unsigned int sharedMemBytes;
+ void **kernelParams;
+ void **extra;
+ CUkernel kern;
+ CUcontext ctx;
+ } CUDA_KERNEL_NODE_PARAMS;
+ \endcode
+
+ When the graph is launched, the node will invoke kernel \p func on a (\p gridDimX x
+ \p gridDimY x \p gridDimZ) grid of blocks. Each block contains
+ (\p blockDimX x \p blockDimY x \p blockDimZ) threads.
+
+ \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ available to each thread block.
+
+ Kernel parameters to \p func can be specified in one of two ways:
+
+ 1) Kernel parameters can be specified via \p kernelParams. If the kernel has N
+ parameters, then \p kernelParams needs to be an array of N pointers. Each pointer,
+ from \p kernelParams[0] to \p kernelParams[N-1], points to the region of memory from which the actual
+ parameter will be copied. The number of kernel parameters and their offsets and sizes do not need
+ to be specified as that information is retrieved directly from the kernel's image.
+
+ 2) Kernel parameters for non-cooperative kernels can also be packaged by the application into a single
+ buffer that is passed in via \p extra. This places the burden on the application of knowing each
+ kernel parameter's size and alignment/padding within the buffer. The \p extra parameter exists
+ to allow this function to take additional less commonly used arguments. \p extra specifies
+ a list of names of extra settings and their corresponding values. Each extra setting name is
+ immediately followed by the corresponding value. The list must be terminated with either NULL or
+ CU_LAUNCH_PARAM_END.
+
+ - ::CU_LAUNCH_PARAM_END, which indicates the end of the \p extra
+ array;
+ - ::CU_LAUNCH_PARAM_BUFFER_POINTER, which specifies that the next
+ value in \p extra will be a pointer to a buffer
+ containing all the kernel parameters for launching kernel
+ \p func;
+ - ::CU_LAUNCH_PARAM_BUFFER_SIZE, which specifies that the next
+ value in \p extra will be a pointer to a size_t
+ containing the size of the buffer specified with
+ ::CU_LAUNCH_PARAM_BUFFER_POINTER;
+
+ The error ::CUDA_ERROR_INVALID_VALUE will be returned if kernel parameters are specified with both
+ \p kernelParams and \p extra (i.e. both \p kernelParams and \p extra are non-NULL).
+ ::CUDA_ERROR_INVALID_VALUE will be returned if \p extra is used for a cooperative kernel.
+
+ The \p kernelParams or \p extra array, as well as the argument values it points to,
+ are copied during this call.
+
+ \note Kernels launched using graphs must not use texture and surface references. Reading or
+ writing through any texture or surface reference is undefined behavior.
+ This restriction does not apply to texture and surface objects.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the GPU execution node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuLaunchKernel,
+ ::cuLaunchCooperativeKernel,
+ ::cuGraphKernelNodeGetParams,
+ ::cuGraphKernelNodeSetParams,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddKernelNode_v2(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeGetParams_v2(
- hNode: CUgraphNode,
- nodeParams: *mut CUDA_KERNEL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeSetParams_v2(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddMemcpyNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a kernel node's parameters
+
+ Returns the parameters of kernel node \p hNode in \p nodeParams.
+ The \p kernelParams or \p extra array returned in \p nodeParams,
+ as well as the argument values it points to, are owned by the node.
+ This memory remains valid until the node is destroyed or its
+ parameters are modified, and should not be modified
+ directly. Use ::cuGraphKernelNodeSetParams to update the
+ parameters of this node.
+
+ The params will contain either \p kernelParams or \p extra,
+ according to which of these was most recently set on the node.
+
+ \param hNode - Node to get the parameters for
+ \param nodeParams - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuLaunchKernel,
+ ::cuGraphAddKernelNode,
+ ::cuGraphKernelNodeSetParams*/
+ fn cuGraphKernelNodeGetParams_v2(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_KERNEL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets a kernel node's parameters
+
+ Sets the parameters of kernel node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuLaunchKernel,
+ ::cuGraphAddKernelNode,
+ ::cuGraphKernelNodeGetParams*/
+ fn cuGraphKernelNodeSetParams_v2(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a memcpy node and adds it to a graph
+
+ Creates a new memcpy node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ When the graph is launched, the node will perform the memcpy described by \p copyParams.
+ See ::cuMemcpy3D() for a description of the structure and its restrictions.
+
+ Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ system contains at least one device which has a zero value for the device attribute
+ ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. If one or more of the operands refer
+ to managed memory, then using the memory type ::CU_MEMORYTYPE_UNIFIED is disallowed
+ for those operand(s). The managed memory will be treated as residing on either the
+ host or the device, depending on which memory type is specified.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param copyParams - Parameters for the memory copy
+ \param ctx - Context on which to run the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuMemcpy3D,
+ ::cuGraphMemcpyNodeGetParams,
+ ::cuGraphMemcpyNodeSetParams,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddMemcpyNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- copyParams: *const CUDA_MEMCPY3D,
- ctx: CUcontext,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemcpyNodeGetParams(
- hNode: CUgraphNode,
- nodeParams: *mut CUDA_MEMCPY3D,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemcpyNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_MEMCPY3D,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddMemsetNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ copyParams: *const cuda_types::CUDA_MEMCPY3D,
+ ctx: cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a memcpy node's parameters
+
+ Returns the parameters of memcpy node \p hNode in \p nodeParams.
+
+ \param hNode - Node to get the parameters for
+ \param nodeParams - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuMemcpy3D,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphMemcpyNodeSetParams*/
+ fn cuGraphMemcpyNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_MEMCPY3D,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets a memcpy node's parameters
+
+ Sets the parameters of memcpy node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuMemcpy3D,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphMemcpyNodeGetParams*/
+ fn cuGraphMemcpyNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_MEMCPY3D,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a memset node and adds it to a graph
+
+ Creates a new memset node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ The element size must be 1, 2, or 4 bytes.
+ When the graph is launched, the node will perform the memset described by \p memsetParams.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param memsetParams - Parameters for the memory set
+ \param ctx - Context on which to run the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuMemsetD2D32,
+ ::cuGraphMemsetNodeGetParams,
+ ::cuGraphMemsetNodeSetParams,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode*/
+ fn cuGraphAddMemsetNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- memsetParams: *const CUDA_MEMSET_NODE_PARAMS,
- ctx: CUcontext,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemsetNodeGetParams(
- hNode: CUgraphNode,
- nodeParams: *mut CUDA_MEMSET_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemsetNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_MEMSET_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddHostNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ memsetParams: *const cuda_types::CUDA_MEMSET_NODE_PARAMS,
+ ctx: cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a memset node's parameters
+
+ Returns the parameters of memset node \p hNode in \p nodeParams.
+
+ \param hNode - Node to get the parameters for
+ \param nodeParams - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuMemsetD2D32,
+ ::cuGraphAddMemsetNode,
+ ::cuGraphMemsetNodeSetParams*/
+ fn cuGraphMemsetNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_MEMSET_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets a memset node's parameters
+
+ Sets the parameters of memset node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuMemsetD2D32,
+ ::cuGraphAddMemsetNode,
+ ::cuGraphMemsetNodeGetParams*/
+ fn cuGraphMemsetNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_MEMSET_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a host execution node and adds it to a graph
+
+ Creates a new CPU execution node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ When the graph is launched, the node will invoke the specified CPU function.
+ Host nodes are not supported under MPS with pre-Volta GPUs.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the host node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuLaunchHostFunc,
+ ::cuGraphHostNodeGetParams,
+ ::cuGraphHostNodeSetParams,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddHostNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_HOST_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphHostNodeGetParams(
- hNode: CUgraphNode,
- nodeParams: *mut CUDA_HOST_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphHostNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_HOST_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddChildGraphNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_HOST_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a host node's parameters
+
+ Returns the parameters of host node \p hNode in \p nodeParams.
+
+ \param hNode - Node to get the parameters for
+ \param nodeParams - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuLaunchHostFunc,
+ ::cuGraphAddHostNode,
+ ::cuGraphHostNodeSetParams*/
+ fn cuGraphHostNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_HOST_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets a host node's parameters
+
+ Sets the parameters of host node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuLaunchHostFunc,
+ ::cuGraphAddHostNode,
+ ::cuGraphHostNodeGetParams*/
+ fn cuGraphHostNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_HOST_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a child graph node and adds it to a graph
+
+ Creates a new node which executes an embedded graph, and adds it to \p hGraph with
+ \p numDependencies dependencies specified via \p dependencies.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ If \p hGraph contains allocation or free nodes, this call will return an error.
+
+ The node executes an embedded child graph. The child graph is cloned in this call.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param childGraph - The graph to clone into this node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphChildGraphNodeGetGraph,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode,
+ ::cuGraphClone*/
+ fn cuGraphAddChildGraphNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- childGraph: CUgraph,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphChildGraphNodeGetGraph(hNode: CUgraphNode, phGraph: *mut CUgraph) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddEmptyNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ childGraph: cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets a handle to the embedded graph of a child graph node
+
+ Gets a handle to the embedded graph in a child graph node. This call
+ does not clone the graph. Changes to the graph will be reflected in
+ the node, and the node retains ownership of the graph.
+
+ Allocation and free nodes cannot be added to the returned graph.
+ Attempting to do so will return an error.
+
+ \param hNode - Node to get the embedded graph for
+ \param phGraph - Location to store a handle to the graph
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphNodeFindInClone*/
+ fn cuGraphChildGraphNodeGetGraph(
+ hNode: cuda_types::CUgraphNode,
+ phGraph: *mut cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an empty node and adds it to a graph
+
+ Creates a new node which performs no operation, and adds it to \p hGraph with
+ \p numDependencies dependencies specified via \p dependencies.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ An empty node performs no operation during execution, but can be used for
+ transitive ordering. For example, a phased execution graph with 2 groups of n
+ nodes with a barrier between them can be represented using an empty node and
+ 2*n dependency edges, rather than no empty node and n^2 dependency edges.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddEmptyNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddEventRecordNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an event record node and adds it to a graph
+
+ Creates a new event record node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and event specified in \p event.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ Each launch of the graph will record \p event to capture execution of the
+ node's dependencies.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param event - Event for the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphAddEventWaitNode,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddEventRecordNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- event: CUevent,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphEventRecordNodeGetEvent(hNode: CUgraphNode, event_out: *mut CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphEventRecordNodeSetEvent(hNode: CUgraphNode, event: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddEventWaitNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the event associated with an event record node
+
+ Returns the event of event record node \p hNode in \p event_out.
+
+ \param hNode - Node to get the event for
+ \param event_out - Pointer to return the event
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphEventRecordNodeSetEvent,
+ ::cuGraphEventWaitNodeGetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent*/
+ fn cuGraphEventRecordNodeGetEvent(
+ hNode: cuda_types::CUgraphNode,
+ event_out: *mut cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets an event record node's event
+
+ Sets the event of event record node \p hNode to \p event.
+
+ \param hNode - Node to set the event for
+ \param event - Event to use
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphEventRecordNodeGetEvent,
+ ::cuGraphEventWaitNodeSetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent*/
+ fn cuGraphEventRecordNodeSetEvent(
+ hNode: cuda_types::CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an event wait node and adds it to a graph
+
+ Creates a new event wait node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and event specified in \p event.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ The graph node will wait for all work captured in \p event. See ::cuEventRecord()
+ for details on what is captured by an event. \p event may be from a different context
+ or device than the launch stream.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param event - Event for the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphAddEventRecordNode,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddEventWaitNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- event: CUevent,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphEventWaitNodeGetEvent(hNode: CUgraphNode, event_out: *mut CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphEventWaitNodeSetEvent(hNode: CUgraphNode, event: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddExternalSemaphoresSignalNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the event associated with an event wait node
+
+ Returns the event of event wait node \p hNode in \p event_out.
+
+ \param hNode - Node to get the event for
+ \param event_out - Pointer to return the event
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphEventWaitNodeSetEvent,
+ ::cuGraphEventRecordNodeGetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent*/
+ fn cuGraphEventWaitNodeGetEvent(
+ hNode: cuda_types::CUgraphNode,
+ event_out: *mut cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets an event wait node's event
+
+ Sets the event of event wait node \p hNode to \p event.
+
+ \param hNode - Node to set the event for
+ \param event - Event to use
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphEventWaitNodeGetEvent,
+ ::cuGraphEventRecordNodeSetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent*/
+ fn cuGraphEventWaitNodeSetEvent(
+ hNode: cuda_types::CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an external semaphore signal node and adds it to a graph
+
+ Creates a new external semaphore signal node and adds it to \p hGraph with \p
+ numDependencies dependencies specified via \p dependencies and arguments specified
+ in \p nodeParams. It is possible for \p numDependencies to be 0, in which case the
+ node will be placed at the root of the graph. \p dependencies may not have any
+ duplicate entries. A handle to the new node will be returned in \p phGraphNode.
+
+ Performs a signal operation on a set of externally allocated semaphore objects
+ when the node is launched. The operation(s) will occur after all of the node's
+ dependencies have completed.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphExternalSemaphoresSignalNodeGetParams,
+ ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuImportExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddExternalSemaphoresSignalNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExternalSemaphoresSignalNodeGetParams(
- hNode: CUgraphNode,
- params_out: *mut CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExternalSemaphoresSignalNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddExternalSemaphoresWaitNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns an external semaphore signal node's parameters
+
+ Returns the parameters of an external semaphore signal node \p hNode in \p params_out.
+ The \p extSemArray and \p paramsArray returned in \p params_out,
+ are owned by the node. This memory remains valid until the node is destroyed or its
+ parameters are modified, and should not be modified
+ directly. Use ::cuGraphExternalSemaphoresSignalNodeSetParams to update the
+ parameters of this node.
+
+ \param hNode - Node to get the parameters for
+ \param params_out - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuLaunchKernel,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuGraphExternalSemaphoresSignalNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ params_out: *mut cuda_types::CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets an external semaphore signal node's parameters
+
+ Sets the parameters of an external semaphore signal node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuGraphExternalSemaphoresSignalNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an external semaphore wait node and adds it to a graph
+
+ Creates a new external semaphore wait node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ to the new node will be returned in \p phGraphNode.
+
+ Performs a wait operation on a set of externally allocated semaphore objects
+ when the node is launched. The node's dependencies will not be launched until
+ the wait operation has completed.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphExternalSemaphoresWaitNodeGetParams,
+ ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuImportExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddExternalSemaphoresWaitNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_EXT_SEM_WAIT_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExternalSemaphoresWaitNodeGetParams(
- hNode: CUgraphNode,
- params_out: *mut CUDA_EXT_SEM_WAIT_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExternalSemaphoresWaitNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_EXT_SEM_WAIT_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddBatchMemOpNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_WAIT_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns an external semaphore wait node's parameters
+
+ Returns the parameters of an external semaphore wait node \p hNode in \p params_out.
+ The \p extSemArray and \p paramsArray returned in \p params_out,
+ are owned by the node. This memory remains valid until the node is destroyed or its
+ parameters are modified, and should not be modified
+ directly. Use ::cuGraphExternalSemaphoresSignalNodeSetParams to update the
+ parameters of this node.
+
+ \param hNode - Node to get the parameters for
+ \param params_out - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuLaunchKernel,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuGraphExternalSemaphoresWaitNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ params_out: *mut cuda_types::CUDA_EXT_SEM_WAIT_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets an external semaphore wait node's parameters
+
+ Sets the parameters of an external semaphore wait node \p hNode to \p nodeParams.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync*/
+ fn cuGraphExternalSemaphoresWaitNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_WAIT_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a batch memory operation node and adds it to a graph
+
+ Creates a new batch memory operation node and adds it to \p hGraph with \p
+ numDependencies dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries.
+ A handle to the new node will be returned in \p phGraphNode.
+
+ When the node is added, the paramArray inside \p nodeParams is copied and therefore it can be
+ freed after the call returns.
+
+ \note
+ Warning:
+ Improper use of this API may deadlock the application. Synchronization
+ ordering established through this API is not visible to CUDA. CUDA tasks
+ that are (even indirectly) ordered by this API should also have that order
+ expressed with CUDA-visible dependencies such as events. This ensures that
+ the scheduler does not serialize them in an improper order. For more
+ information, see the Stream Memory Operations section in the programming
+ guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuStreamBatchMemOp,
+ ::cuStreamWaitValue32,
+ ::cuStreamWriteValue32,
+ ::cuStreamWaitValue64,
+ ::cuStreamWriteValue64,
+ ::cuGraphBatchMemOpNodeGetParams,
+ ::cuGraphBatchMemOpNodeSetParams,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddBatchMemOpNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_BATCH_MEM_OP_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphBatchMemOpNodeGetParams(
- hNode: CUgraphNode,
- nodeParams_out: *mut CUDA_BATCH_MEM_OP_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphBatchMemOpNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_BATCH_MEM_OP_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecBatchMemOpNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_BATCH_MEM_OP_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddMemAllocNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_BATCH_MEM_OP_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a batch mem op node's parameters
+
+ Returns the parameters of batch mem op node \p hNode in \p nodeParams_out.
+ The \p paramArray returned in \p nodeParams_out is owned by the node.
+ This memory remains valid until the node is destroyed or its
+ parameters are modified, and should not be modified
+ directly. Use ::cuGraphBatchMemOpNodeSetParams to update the
+ parameters of this node.
+
+ \param hNode - Node to get the parameters for
+ \param nodeParams_out - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuStreamBatchMemOp,
+ ::cuGraphAddBatchMemOpNode,
+ ::cuGraphBatchMemOpNodeSetParams*/
+ fn cuGraphBatchMemOpNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams_out: *mut cuda_types::CUDA_BATCH_MEM_OP_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets a batch mem op node's parameters
+
+ Sets the parameters of batch mem op node \p hNode to \p nodeParams.
+
+ The paramArray inside \p nodeParams is copied and therefore it can be
+ freed after the call returns.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetParams,
+ ::cuStreamBatchMemOp,
+ ::cuGraphAddBatchMemOpNode,
+ ::cuGraphBatchMemOpNodeGetParams*/
+ fn cuGraphBatchMemOpNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_BATCH_MEM_OP_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for a batch mem op node in the given graphExec
+
+ Sets the parameters of a batch mem op node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ The following fields on operations may be modified on an executable graph:
+
+ op.waitValue.address
+ op.waitValue.value[64]
+ op.waitValue.flags bits corresponding to wait type (i.e. CU_STREAM_WAIT_VALUE_FLUSH bit cannot be modified)
+ op.writeValue.address
+ op.writeValue.value[64]
+
+ Other fields, such as the context, count or type of operations, and other types of operations such as membars,
+ may not be modified.
+
+ \p hNode must not have been removed from the original graph.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ The paramArray inside \p nodeParams is copied and therefore it can be
+ freed after the call returns.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Batch mem op node from the graph from which graphExec was instantiated
+ \param nodeParams - Updated Parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuStreamBatchMemOp,
+ ::cuGraphAddBatchMemOpNode,
+ ::cuGraphBatchMemOpNodeGetParams,
+ ::cuGraphBatchMemOpNodeSetParams,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecBatchMemOpNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_BATCH_MEM_OP_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an allocation node and adds it to a graph
+
+ Creates a new allocation node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ to the new node will be returned in \p phGraphNode.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Parameters for the node
+
+ When ::cuGraphAddMemAllocNode creates an allocation node, it returns the address of the allocation in
+ \p nodeParams.dptr. The allocation's address remains fixed across instantiations and launches.
+
+ If the allocation is freed in the same graph, by creating a free node using ::cuGraphAddMemFreeNode,
+ the allocation can be accessed by nodes ordered after the allocation node but before the free node.
+ These allocations cannot be freed outside the owning graph, and they can only be freed once in the
+ owning graph.
+
+ If the allocation is not freed in the same graph, then it can be accessed not only by nodes in the
+ graph which are ordered after the allocation node, but also by stream operations ordered after the
+ graph's execution but before the allocation is freed.
+
+ Allocations which are not freed in the same graph can be freed by:
+ - passing the allocation to ::cuMemFreeAsync or ::cuMemFree;
+ - launching a graph with a free node for that allocation; or
+ - specifying ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH during instantiation, which makes
+ each launch behave as though it called ::cuMemFreeAsync for every unfreed allocation.
+
+ It is not possible to free an allocation in both the owning graph and another graph. If the allocation
+ is freed in the same graph, a free node cannot be added to another graph. If the allocation is freed
+ in another graph, a free node can no longer be added to the owning graph.
+
+ The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ - Nodes and edges of the graph cannot be deleted.
+ - The graph cannot be used in a child node.
+ - Only one instantiation of the graph may exist at any point in time.
+ - The graph cannot be cloned.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphAddMemFreeNode,
+ ::cuGraphMemAllocNodeGetParams,
+ ::cuDeviceGraphMemTrim,
+ ::cuDeviceGetGraphMemAttribute,
+ ::cuDeviceSetGraphMemAttribute,
+ ::cuMemAllocAsync,
+ ::cuMemFreeAsync,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddMemAllocNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *mut CUDA_MEM_ALLOC_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemAllocNodeGetParams(
- hNode: CUgraphNode,
- params_out: *mut CUDA_MEM_ALLOC_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddMemFreeNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_MEM_ALLOC_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a memory alloc node's parameters
+
+ Returns the parameters of a memory alloc node \p hNode in \p params_out.
+ The \p poolProps and \p accessDescs returned in \p params_out, are owned by the
+ node. This memory remains valid until the node is destroyed. The returned
+ parameters must not be modified.
+
+ \param hNode - Node to get the parameters for
+ \param params_out - Pointer to return the parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddMemAllocNode,
+ ::cuGraphMemFreeNodeGetParams*/
+ fn cuGraphMemAllocNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ params_out: *mut cuda_types::CUDA_MEM_ALLOC_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a memory free node and adds it to a graph
+
+ Creates a new memory free node and adds it to \p hGraph with \p numDependencies
+ dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ It is possible for \p numDependencies to be 0, in which case the node will be placed
+ at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ to the new node will be returned in \p phGraphNode.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param dptr - Address of memory to free
+
+ ::cuGraphAddMemFreeNode will return ::CUDA_ERROR_INVALID_VALUE if the user attempts to free:
+ - an allocation twice in the same graph.
+ - an address that was not returned by an allocation node.
+ - an invalid address.
+
+ The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ - Nodes and edges of the graph cannot be deleted.
+ - The graph cannot be used in a child node.
+ - Only one instantiation of the graph may exist at any point in time.
+ - The graph cannot be cloned.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphAddMemAllocNode,
+ ::cuGraphMemFreeNodeGetParams,
+ ::cuDeviceGraphMemTrim,
+ ::cuDeviceGetGraphMemAttribute,
+ ::cuDeviceSetGraphMemAttribute,
+ ::cuMemAllocAsync,
+ ::cuMemFreeAsync,
+ ::cuGraphCreate,
+ ::cuGraphDestroyNode,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphAddMemFreeNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- dptr: CUdeviceptr,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphMemFreeNodeGetParams(hNode: CUgraphNode, dptr_out: *mut CUdeviceptr) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGraphMemTrim(device: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetGraphMemAttribute(
- device: CUdevice,
- attr: CUgraphMem_attribute,
- value: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceSetGraphMemAttribute(
- device: CUdevice,
- attr: CUgraphMem_attribute,
- value: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphClone(phGraphClone: *mut CUgraph, originalGraph: CUgraph) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeFindInClone(
- phNode: *mut CUgraphNode,
- hOriginalNode: CUgraphNode,
- hClonedGraph: CUgraph,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetType(hNode: CUgraphNode, type_: *mut CUgraphNodeType) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphGetNodes(
- hGraph: CUgraph,
- nodes: *mut CUgraphNode,
+ dptr: cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a memory free node's parameters
+
+ Returns the address of a memory free node \p hNode in \p dptr_out.
+
+ \param hNode - Node to get the parameters for
+ \param dptr_out - Pointer to return the device address
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddMemFreeNode,
+ ::cuGraphMemAllocNodeGetParams*/
+ fn cuGraphMemFreeNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ dptr_out: *mut cuda_types::CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Free unused memory that was cached on the specified device for use with graphs back to the OS.
+
+ Blocks which are not in use by a graph that is either currently executing or scheduled to execute are
+ freed back to the operating system.
+
+ \param device - The device for which cached memory should be freed.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_DEVICE
+
+ \sa
+ ::cuGraphAddMemAllocNode,
+ ::cuGraphAddMemFreeNode,
+ ::cuDeviceSetGraphMemAttribute,
+ ::cuDeviceGetGraphMemAttribute*/
+ fn cuDeviceGraphMemTrim(device: cuda_types::CUdevice) -> cuda_types::CUresult;
+ /** \brief Query asynchronous allocation attributes related to graphs
+
+ Valid attributes are:
+
+ - ::CU_GRAPH_MEM_ATTR_USED_MEM_CURRENT: Amount of memory, in bytes, currently associated with graphs
+ - ::CU_GRAPH_MEM_ATTR_USED_MEM_HIGH: High watermark of memory, in bytes, associated with graphs since the
+ last time it was reset. High watermark can only be reset to zero.
+ - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT: Amount of memory, in bytes, currently allocated for use by
+ the CUDA graphs asynchronous allocator.
+ - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH: High watermark of memory, in bytes, currently allocated for use by
+ the CUDA graphs asynchronous allocator.
+
+ \param device - Specifies the scope of the query
+ \param attr - attribute to get
+ \param value - retrieved value
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_DEVICE
+
+ \sa
+ ::cuDeviceSetGraphMemAttribute,
+ ::cuGraphAddMemAllocNode,
+ ::cuGraphAddMemFreeNode*/
+ fn cuDeviceGetGraphMemAttribute(
+ device: cuda_types::CUdevice,
+ attr: cuda_types::CUgraphMem_attribute,
+ value: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Set asynchronous allocation attributes related to graphs
+
+ Valid attributes are:
+
+ - ::CU_GRAPH_MEM_ATTR_USED_MEM_HIGH: High watermark of memory, in bytes, associated with graphs since the
+ last time it was reset. High watermark can only be reset to zero.
+ - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH: High watermark of memory, in bytes, currently allocated for use by
+ the CUDA graphs asynchronous allocator.
+
+ \param device - Specifies the scope of the query
+ \param attr - attribute to get
+ \param value - pointer to value to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_DEVICE
+
+ \sa
+ ::cuDeviceGetGraphMemAttribute,
+ ::cuGraphAddMemAllocNode,
+ ::cuGraphAddMemFreeNode*/
+ fn cuDeviceSetGraphMemAttribute(
+ device: cuda_types::CUdevice,
+ attr: cuda_types::CUgraphMem_attribute,
+ value: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Clones a graph
+
+ This function creates a copy of \p originalGraph and returns it in \p phGraphClone.
+ All parameters are copied into the cloned graph. The original graph may be modified
+ after this call without affecting the clone.
+
+ Child graph nodes in the original graph are recursively copied into the clone.
+
+ \param phGraphClone - Returns newly created cloned graph
+ \param originalGraph - Graph to clone
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphNodeFindInClone*/
+ fn cuGraphClone(
+ phGraphClone: *mut cuda_types::CUgraph,
+ originalGraph: cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Finds a cloned version of a node
+
+ This function returns the node in \p hClonedGraph corresponding to \p hOriginalNode
+ in the original graph.
+
+ \p hClonedGraph must have been cloned from \p hOriginalGraph via ::cuGraphClone.
+ \p hOriginalNode must have been in \p hOriginalGraph at the time of the call to
+ ::cuGraphClone, and the corresponding cloned node in \p hClonedGraph must not have
+ been removed. The cloned node is then returned via \p phClonedNode.
+
+ \param phNode - Returns handle to the cloned node
+ \param hOriginalNode - Handle to the original node
+ \param hClonedGraph - Cloned graph to query
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphClone*/
+ fn cuGraphNodeFindInClone(
+ phNode: *mut cuda_types::CUgraphNode,
+ hOriginalNode: cuda_types::CUgraphNode,
+ hClonedGraph: cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a node's type
+
+ Returns the node type of \p hNode in \p type.
+
+ \param hNode - Node to query
+ \param type - Pointer to return the node type
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphChildGraphNodeGetGraph,
+ ::cuGraphKernelNodeGetParams,
+ ::cuGraphKernelNodeSetParams,
+ ::cuGraphHostNodeGetParams,
+ ::cuGraphHostNodeSetParams,
+ ::cuGraphMemcpyNodeGetParams,
+ ::cuGraphMemcpyNodeSetParams,
+ ::cuGraphMemsetNodeGetParams,
+ ::cuGraphMemsetNodeSetParams*/
+ fn cuGraphNodeGetType(
+ hNode: cuda_types::CUgraphNode,
+ type_: *mut cuda_types::CUgraphNodeType,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a graph's nodes
+
+ Returns a list of \p hGraph's nodes. \p nodes may be NULL, in which case this
+ function will return the number of nodes in \p numNodes. Otherwise,
+ \p numNodes entries will be filled in. If \p numNodes is higher than the actual
+ number of nodes, the remaining entries in \p nodes will be set to NULL, and the
+ number of nodes actually obtained will be returned in \p numNodes.
+
+ \param hGraph - Graph to query
+ \param nodes - Pointer to return the nodes
+ \param numNodes - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetType,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphGetNodes(
+ hGraph: cuda_types::CUgraph,
+ nodes: *mut cuda_types::CUgraphNode,
numNodes: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphGetRootNodes(
- hGraph: CUgraph,
- rootNodes: *mut CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a graph's root nodes
+
+ Returns a list of \p hGraph's root nodes. \p rootNodes may be NULL, in which case this
+ function will return the number of root nodes in \p numRootNodes. Otherwise,
+ \p numRootNodes entries will be filled in. If \p numRootNodes is higher than the actual
+ number of root nodes, the remaining entries in \p rootNodes will be set to NULL, and the
+ number of nodes actually obtained will be returned in \p numRootNodes.
+
+ \param hGraph - Graph to query
+ \param rootNodes - Pointer to return the root nodes
+ \param numRootNodes - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphGetNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetType,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphGetRootNodes(
+ hGraph: cuda_types::CUgraph,
+ rootNodes: *mut cuda_types::CUgraphNode,
numRootNodes: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphGetEdges(
- hGraph: CUgraph,
- from: *mut CUgraphNode,
- to: *mut CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a graph's dependency edges
+
+ Returns a list of \p hGraph's dependency edges. Edges are returned via corresponding
+ indices in \p from and \p to; that is, the node in \p to[i] has a dependency on the
+ node in \p from[i]. \p from and \p to may both be NULL, in which
+ case this function only returns the number of edges in \p numEdges. Otherwise,
+ \p numEdges entries will be filled in. If \p numEdges is higher than the actual
+ number of edges, the remaining entries in \p from and \p to will be set to NULL, and
+ the number of edges actually returned will be written to \p numEdges.
+
+ \param hGraph - Graph to get the edges from
+ \param from - Location to return edge endpoints
+ \param to - Location to return edge endpoints
+ \param numEdges - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphGetEdges(
+ hGraph: cuda_types::CUgraph,
+ from: *mut cuda_types::CUgraphNode,
+ to: *mut cuda_types::CUgraphNode,
numEdges: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphGetEdges_v2(
- hGraph: CUgraph,
- from: *mut CUgraphNode,
- to: *mut CUgraphNode,
- edgeData: *mut CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a graph's dependency edges (12.3+)
+
+ Returns a list of \p hGraph's dependency edges. Edges are returned via corresponding
+ indices in \p from, \p to and \p edgeData; that is, the node in \p to[i] has a
+ dependency on the node in \p from[i] with data \p edgeData[i]. \p from and \p to may
+ both be NULL, in which case this function only returns the number of edges in
+ \p numEdges. Otherwise, \p numEdges entries will be filled in. If \p numEdges is higher
+ than the actual number of edges, the remaining entries in \p from and \p to will be
+ set to NULL, and the number of edges actually returned will be written to \p numEdges.
+ \p edgeData may alone be NULL, in which case the edges must all have default (zeroed)
+ edge data. Attempting a lossy query via NULL \p edgeData will result in
+ ::CUDA_ERROR_LOSSY_QUERY. If \p edgeData is non-NULL then \p from and \p to must be
+ as well.
+
+ \param hGraph - Graph to get the edges from
+ \param from - Location to return edge endpoints
+ \param to - Location to return edge endpoints
+ \param edgeData - Optional location to return edge data
+ \param numEdges - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_LOSSY_QUERY,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphGetEdges_v2(
+ hGraph: cuda_types::CUgraph,
+ from: *mut cuda_types::CUgraphNode,
+ to: *mut cuda_types::CUgraphNode,
+ edgeData: *mut cuda_types::CUgraphEdgeData,
numEdges: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetDependencies(
- hNode: CUgraphNode,
- dependencies: *mut CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a node's dependencies
+
+ Returns a list of \p node's dependencies. \p dependencies may be NULL, in which case this
+ function will return the number of dependencies in \p numDependencies. Otherwise,
+ \p numDependencies entries will be filled in. If \p numDependencies is higher than the actual
+ number of dependencies, the remaining entries in \p dependencies will be set to NULL, and the
+ number of nodes actually obtained will be returned in \p numDependencies.
+
+ \param hNode - Node to query
+ \param dependencies - Pointer to return the dependencies
+ \param numDependencies - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeGetDependentNodes,
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies*/
+ fn cuGraphNodeGetDependencies(
+ hNode: cuda_types::CUgraphNode,
+ dependencies: *mut cuda_types::CUgraphNode,
numDependencies: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetDependencies_v2(
- hNode: CUgraphNode,
- dependencies: *mut CUgraphNode,
- edgeData: *mut CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a node's dependencies (12.3+)
+
+ Returns a list of \p node's dependencies. \p dependencies may be NULL, in which case this
+ function will return the number of dependencies in \p numDependencies. Otherwise,
+ \p numDependencies entries will be filled in. If \p numDependencies is higher than the actual
+ number of dependencies, the remaining entries in \p dependencies will be set to NULL, and the
+ number of nodes actually obtained will be returned in \p numDependencies.
+
+ Note that if an edge has non-zero (non-default) edge data and \p edgeData is NULL,
+ this API will return ::CUDA_ERROR_LOSSY_QUERY. If \p edgeData is non-NULL, then
+ \p dependencies must be as well.
+
+ \param hNode - Node to query
+ \param dependencies - Pointer to return the dependencies
+ \param edgeData - Optional array to return edge data for each dependency
+ \param numDependencies - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_LOSSY_QUERY,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeGetDependentNodes,
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies*/
+ fn cuGraphNodeGetDependencies_v2(
+ hNode: cuda_types::CUgraphNode,
+ dependencies: *mut cuda_types::CUgraphNode,
+ edgeData: *mut cuda_types::CUgraphEdgeData,
numDependencies: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetDependentNodes(
- hNode: CUgraphNode,
- dependentNodes: *mut CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a node's dependent nodes
+
+ Returns a list of \p node's dependent nodes. \p dependentNodes may be NULL, in which
+ case this function will return the number of dependent nodes in \p numDependentNodes.
+ Otherwise, \p numDependentNodes entries will be filled in. If \p numDependentNodes is
+ higher than the actual number of dependent nodes, the remaining entries in
+ \p dependentNodes will be set to NULL, and the number of nodes actually obtained will
+ be returned in \p numDependentNodes.
+
+ \param hNode - Node to query
+ \param dependentNodes - Pointer to return the dependent nodes
+ \param numDependentNodes - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies*/
+ fn cuGraphNodeGetDependentNodes(
+ hNode: cuda_types::CUgraphNode,
+ dependentNodes: *mut cuda_types::CUgraphNode,
numDependentNodes: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetDependentNodes_v2(
- hNode: CUgraphNode,
- dependentNodes: *mut CUgraphNode,
- edgeData: *mut CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a node's dependent nodes (12.3+)
+
+ Returns a list of \p node's dependent nodes. \p dependentNodes may be NULL, in which
+ case this function will return the number of dependent nodes in \p numDependentNodes.
+ Otherwise, \p numDependentNodes entries will be filled in. If \p numDependentNodes is
+ higher than the actual number of dependent nodes, the remaining entries in
+ \p dependentNodes will be set to NULL, and the number of nodes actually obtained will
+ be returned in \p numDependentNodes.
+
+ Note that if an edge has non-zero (non-default) edge data and \p edgeData is NULL,
+ this API will return ::CUDA_ERROR_LOSSY_QUERY. If \p edgeData is non-NULL, then
+ \p dependentNodes must be as well.
+
+ \param hNode - Node to query
+ \param dependentNodes - Pointer to return the dependent nodes
+ \param edgeData - Optional pointer to return edge data for dependent nodes
+ \param numDependentNodes - See description
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_LOSSY_QUERY,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphGetNodes,
+ ::cuGraphGetRootNodes,
+ ::cuGraphGetEdges,
+ ::cuGraphAddDependencies,
+ ::cuGraphRemoveDependencies*/
+ fn cuGraphNodeGetDependentNodes_v2(
+ hNode: cuda_types::CUgraphNode,
+ dependentNodes: *mut cuda_types::CUgraphNode,
+ edgeData: *mut cuda_types::CUgraphEdgeData,
numDependentNodes: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddDependencies(
- hGraph: CUgraph,
- from: *const CUgraphNode,
- to: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds dependency edges to a graph
+
+ The number of dependencies to be added is defined by \p numDependencies
+ Elements in \p from and \p to at corresponding indices define a dependency.
+ Each node in \p from and \p to must belong to \p hGraph.
+
+ If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ Specifying an existing dependency will return an error.
+
+ \param hGraph - Graph to which dependencies are added
+ \param from - Array of nodes that provide the dependencies
+ \param to - Array of dependent nodes
+ \param numDependencies - Number of dependencies to be added
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphRemoveDependencies,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphAddDependencies(
+ hGraph: cuda_types::CUgraph,
+ from: *const cuda_types::CUgraphNode,
+ to: *const cuda_types::CUgraphNode,
numDependencies: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddDependencies_v2(
- hGraph: CUgraph,
- from: *const CUgraphNode,
- to: *const CUgraphNode,
- edgeData: *const CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds dependency edges to a graph (12.3+)
+
+ The number of dependencies to be added is defined by \p numDependencies
+ Elements in \p from and \p to at corresponding indices define a dependency.
+ Each node in \p from and \p to must belong to \p hGraph.
+
+ If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ Specifying an existing dependency will return an error.
+
+ \param hGraph - Graph to which dependencies are added
+ \param from - Array of nodes that provide the dependencies
+ \param to - Array of dependent nodes
+ \param edgeData - Optional array of edge data. If NULL, default (zeroed) edge data is assumed.
+ \param numDependencies - Number of dependencies to be added
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphRemoveDependencies,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphAddDependencies_v2(
+ hGraph: cuda_types::CUgraph,
+ from: *const cuda_types::CUgraphNode,
+ to: *const cuda_types::CUgraphNode,
+ edgeData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphRemoveDependencies(
- hGraph: CUgraph,
- from: *const CUgraphNode,
- to: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Removes dependency edges from a graph
+
+ The number of \p dependencies to be removed is defined by \p numDependencies.
+ Elements in \p from and \p to at corresponding indices define a dependency.
+ Each node in \p from and \p to must belong to \p hGraph.
+
+ If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ Specifying a non-existing dependency will return an error.
+
+ Dependencies cannot be removed from graphs which contain allocation or free nodes.
+ Any attempt to do so will return an error.
+
+ \param hGraph - Graph from which to remove dependencies
+ \param from - Array of nodes that provide the dependencies
+ \param to - Array of dependent nodes
+ \param numDependencies - Number of dependencies to be removed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddDependencies,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphRemoveDependencies(
+ hGraph: cuda_types::CUgraph,
+ from: *const cuda_types::CUgraphNode,
+ to: *const cuda_types::CUgraphNode,
numDependencies: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphRemoveDependencies_v2(
- hGraph: CUgraph,
- from: *const CUgraphNode,
- to: *const CUgraphNode,
- edgeData: *const CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ /** \brief Removes dependency edges from a graph (12.3+)
+
+ The number of \p dependencies to be removed is defined by \p numDependencies.
+ Elements in \p from and \p to at corresponding indices define a dependency.
+ Each node in \p from and \p to must belong to \p hGraph.
+
+ If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ Specifying an edge that does not exist in the graph, with data matching
+ \p edgeData, results in an error. \p edgeData is nullable, which is equivalent
+ to passing default (zeroed) data for each edge.
+
+ Dependencies cannot be removed from graphs which contain allocation or free nodes.
+ Any attempt to do so will return an error.
+
+ \param hGraph - Graph from which to remove dependencies
+ \param from - Array of nodes that provide the dependencies
+ \param to - Array of dependent nodes
+ \param edgeData - Optional array of edge data. If NULL, edge data is assumed to
+ be default (zeroed).
+ \param numDependencies - Number of dependencies to be removed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddDependencies,
+ ::cuGraphGetEdges,
+ ::cuGraphNodeGetDependencies,
+ ::cuGraphNodeGetDependentNodes*/
+ fn cuGraphRemoveDependencies_v2(
+ hGraph: cuda_types::CUgraph,
+ from: *const cuda_types::CUgraphNode,
+ to: *const cuda_types::CUgraphNode,
+ edgeData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphDestroyNode(hNode: CUgraphNode) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphInstantiateWithFlags(
- phGraphExec: *mut CUgraphExec,
- hGraph: CUgraph,
- flags: ::std::os::raw::c_ulonglong,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphInstantiateWithParams_ptsz(
- phGraphExec: *mut CUgraphExec,
- hGraph: CUgraph,
- instantiateParams: *mut CUDA_GRAPH_INSTANTIATE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecGetFlags(hGraphExec: CUgraphExec, flags: *mut cuuint64_t) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecKernelNodeSetParams_v2(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecMemcpyNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- copyParams: *const CUDA_MEMCPY3D,
- ctx: CUcontext,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecMemsetNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- memsetParams: *const CUDA_MEMSET_NODE_PARAMS,
- ctx: CUcontext,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecHostNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_HOST_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecChildGraphNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- childGraph: CUgraph,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecEventRecordNodeSetEvent(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- event: CUevent,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecEventWaitNodeSetEvent(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- event: CUevent,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecExternalSemaphoresSignalNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecExternalSemaphoresWaitNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_EXT_SEM_WAIT_NODE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeSetEnabled(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- isEnabled: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeGetEnabled(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- isEnabled: *mut ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphUpload_ptsz(hGraphExec: CUgraphExec, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphLaunch_ptsz(hGraphExec: CUgraphExec, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecDestroy(hGraphExec: CUgraphExec) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphDestroy(hGraph: CUgraph) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecUpdate_v2(
- hGraphExec: CUgraphExec,
- hGraph: CUgraph,
- resultInfo: *mut CUgraphExecUpdateResultInfo,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeCopyAttributes(dst: CUgraphNode, src: CUgraphNode) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeGetAttribute(
- hNode: CUgraphNode,
- attr: CUkernelNodeAttrID,
- value_out: *mut CUkernelNodeAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeSetAttribute(
- hNode: CUgraphNode,
- attr: CUkernelNodeAttrID,
- value: *const CUkernelNodeAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphDebugDotPrint(
- hGraph: CUgraph,
- path: *const ::std::os::raw::c_char,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuUserObjectCreate(
- object_out: *mut CUuserObject,
- ptr: *mut ::std::os::raw::c_void,
- destroy: CUhostFn,
- initialRefcount: ::std::os::raw::c_uint,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuUserObjectRetain(object: CUuserObject, count: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuUserObjectRelease(object: CUuserObject, count: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphRetainUserObject(
- graph: CUgraph,
- object: CUuserObject,
- count: ::std::os::raw::c_uint,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphReleaseUserObject(
- graph: CUgraph,
- object: CUuserObject,
- count: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Remove a node from the graph
+
+ Removes \p hNode from its graph. This operation also severs any dependencies of other nodes
+ on \p hNode and vice versa.
+
+ Nodes which belong to a graph which contains allocation or free nodes cannot be destroyed.
+ Any attempt to do so will return an error.
+
+ \param hNode - Node to remove
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphAddEmptyNode,
+ ::cuGraphAddKernelNode,
+ ::cuGraphAddHostNode,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphAddMemsetNode*/
+ fn cuGraphDestroyNode(hNode: cuda_types::CUgraphNode) -> cuda_types::CUresult;
+ /** \brief Creates an executable graph from a graph
+
+ Instantiates \p hGraph as an executable graph. The graph is validated for any
+ structural constraints or intra-node constraints which were not previously
+ validated. If instantiation is successful, a handle to the instantiated graph
+ is returned in \p phGraphExec.
+
+ The \p flags parameter controls the behavior of instantiation and subsequent
+ graph launches. Valid flags are:
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH, which configures a
+ graph containing memory allocation nodes to automatically free any
+ unfreed memory allocations before the graph is relaunched.
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_DEVICE_LAUNCH, which configures the graph for launch
+ from the device. If this flag is passed, the executable graph handle returned can be
+ used to launch the graph from both the host and device. This flag can only be used
+ on platforms which support unified addressing. This flag cannot be used in
+ conjunction with ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH.
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, which causes the graph
+ to use the priorities from the per-node attributes rather than the priority
+ of the launch stream during execution. Note that priorities are only available
+ on kernel nodes, and are copied from stream priority during stream capture.
+
+ If \p hGraph contains any allocation or free nodes, there can be at most one
+ executable graph in existence for that graph at a time. An attempt to instantiate
+ a second executable graph before destroying the first with ::cuGraphExecDestroy
+ will result in an error.
+ The same also applies if \p hGraph contains any device-updatable kernel nodes.
+
+ If \p hGraph contains kernels which call device-side cudaGraphLaunch() from multiple
+ contexts, this will result in an error.
+
+ Graphs instantiated for launch on the device have additional restrictions which do not
+ apply to host graphs:
+
+ - The graph's nodes must reside on a single context.
+ - The graph can only contain kernel nodes, memcpy nodes, memset nodes, and child graph nodes.
+ - The graph cannot be empty and must contain at least one kernel, memcpy, or memset node.
+ Operation-specific restrictions are outlined below.
+ - Kernel nodes:
+ - Use of CUDA Dynamic Parallelism is not permitted.
+ - Cooperative launches are permitted as long as MPS is not in use.
+ - Memcpy nodes:
+ - Only copies involving device memory and/or pinned device-mapped host memory are permitted.
+ - Copies involving CUDA arrays are not permitted.
+ - Both operands must be accessible from the current context, and the current context must
+ match the context of other nodes in the graph.
+
+ \param phGraphExec - Returns instantiated graph
+ \param hGraph - Graph to instantiate
+ \param flags - Flags to control instantiation. See ::CUgraphInstantiate_flags.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate,
+ ::cuGraphCreate,
+ ::cuGraphUpload,
+ ::cuGraphLaunch,
+ ::cuGraphExecDestroy*/
+ fn cuGraphInstantiateWithFlags(
+ phGraphExec: *mut cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ flags: ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an executable graph from a graph
+
+ Instantiates \p hGraph as an executable graph according to the \p instantiateParams structure.
+ The graph is validated for any structural constraints or intra-node constraints
+ which were not previously validated. If instantiation is successful, a handle to
+ the instantiated graph is returned in \p phGraphExec.
+
+ \p instantiateParams controls the behavior of instantiation and subsequent
+ graph launches, as well as returning more detailed information in the event of an error.
+ ::CUDA_GRAPH_INSTANTIATE_PARAMS is defined as:
+
+ \code
+typedef struct {
+cuuint64_t flags;
+CUstream hUploadStream;
+CUgraphNode hErrNode_out;
+CUgraphInstantiateResult result_out;
+} CUDA_GRAPH_INSTANTIATE_PARAMS;
+ \endcode
+
+ The \p flags field controls the behavior of instantiation and subsequent
+ graph launches. Valid flags are:
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH, which configures a
+ graph containing memory allocation nodes to automatically free any
+ unfreed memory allocations before the graph is relaunched.
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_UPLOAD, which will perform an upload of the graph
+ into \p hUploadStream once the graph has been instantiated.
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_DEVICE_LAUNCH, which configures the graph for launch
+ from the device. If this flag is passed, the executable graph handle returned can be
+ used to launch the graph from both the host and device. This flag can only be used
+ on platforms which support unified addressing. This flag cannot be used in
+ conjunction with ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH.
+
+ - ::CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, which causes the graph
+ to use the priorities from the per-node attributes rather than the priority
+ of the launch stream during execution. Note that priorities are only available
+ on kernel nodes, and are copied from stream priority during stream capture.
+
+ If \p hGraph contains any allocation or free nodes, there can be at most one
+ executable graph in existence for that graph at a time. An attempt to instantiate a
+ second executable graph before destroying the first with ::cuGraphExecDestroy will
+ result in an error.
+ The same also applies if \p hGraph contains any device-updatable kernel nodes.
+
+ If \p hGraph contains kernels which call device-side cudaGraphLaunch() from multiple
+ contexts, this will result in an error.
+
+ Graphs instantiated for launch on the device have additional restrictions which do not
+ apply to host graphs:
+
+ - The graph's nodes must reside on a single context.
+ - The graph can only contain kernel nodes, memcpy nodes, memset nodes, and child graph nodes.
+ - The graph cannot be empty and must contain at least one kernel, memcpy, or memset node.
+ Operation-specific restrictions are outlined below.
+ - Kernel nodes:
+ - Use of CUDA Dynamic Parallelism is not permitted.
+ - Cooperative launches are permitted as long as MPS is not in use.
+ - Memcpy nodes:
+ - Only copies involving device memory and/or pinned device-mapped host memory are permitted.
+ - Copies involving CUDA arrays are not permitted.
+ - Both operands must be accessible from the current context, and the current context must
+ match the context of other nodes in the graph.
+
+ In the event of an error, the \p result_out and \p hErrNode_out fields will contain more
+ information about the nature of the error. Possible error reporting includes:
+
+ - ::CUDA_GRAPH_INSTANTIATE_ERROR, if passed an invalid value or if an unexpected error occurred
+ which is described by the return value of the function. \p hErrNode_out will be set to NULL.
+ - ::CUDA_GRAPH_INSTANTIATE_INVALID_STRUCTURE, if the graph structure is invalid. \p hErrNode_out
+ will be set to one of the offending nodes.
+ - ::CUDA_GRAPH_INSTANTIATE_NODE_OPERATION_NOT_SUPPORTED, if the graph is instantiated for device
+ launch but contains a node of an unsupported node type, or a node which performs unsupported
+ operations, such as use of CUDA dynamic parallelism within a kernel node. \p hErrNode_out will
+ be set to this node.
+ - ::CUDA_GRAPH_INSTANTIATE_MULTIPLE_CTXS_NOT_SUPPORTED, if the graph is instantiated for device
+ launch but a node’s context differs from that of another node. This error can also be returned
+ if a graph is not instantiated for device launch and it contains kernels which call device-side
+ cudaGraphLaunch() from multiple contexts. \p hErrNode_out will be set to this node.
+
+ If instantiation is successful, \p result_out will be set to ::CUDA_GRAPH_INSTANTIATE_SUCCESS,
+ and \p hErrNode_out will be set to NULL.
+
+ \param phGraphExec - Returns instantiated graph
+ \param hGraph - Graph to instantiate
+ \param instantiateParams - Instantiation parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphInstantiate,
+ ::cuGraphExecDestroy*/
+ fn cuGraphInstantiateWithParams_ptsz(
+ phGraphExec: *mut cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ instantiateParams: *mut cuda_types::CUDA_GRAPH_INSTANTIATE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Query the instantiation flags of an executable graph
+
+ Returns the flags that were passed to instantiation for the given executable graph.
+ ::CUDA_GRAPH_INSTANTIATE_FLAG_UPLOAD will not be returned by this API as it does
+ not affect the resulting executable graph.
+
+ \param hGraphExec - The executable graph to query
+ \param flags - Returns the instantiation flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate,
+ ::cuGraphInstantiateWithParams*/
+ fn cuGraphExecGetFlags(
+ hGraphExec: cuda_types::CUgraphExec,
+ flags: *mut cuda_types::cuuint64_t,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for a kernel node in the given graphExec
+
+ Sets the parameters of a kernel node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ \p hNode must not have been removed from the original graph. All \p nodeParams
+ fields may change, but the following restrictions apply to \p func updates:
+
+ - The owning context of the function cannot change.
+ - A node whose function originally did not use CUDA dynamic parallelism cannot be updated
+ to a function which uses CDP
+ - A node whose function originally did not make device-side update calls cannot be updated
+ to a function which makes device-side update calls.
+ - If \p hGraphExec was not instantiated for device launch, a node whose function originally
+ did not use device-side cudaGraphLaunch() cannot be updated to a function which uses
+ device-side cudaGraphLaunch() unless the node resides on the same context as nodes which
+ contained such calls at instantiate-time. If no such calls were present at instantiation,
+ these updates cannot be performed at all.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ If \p hNode is a device-updatable kernel node, the next upload/launch of \p hGraphExec
+ will overwrite any previous device-side updates. Additionally, applying host updates to a
+ device-updatable kernel node while it is being updated from the device will result in
+ undefined behavior.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - kernel node from the graph from which graphExec was instantiated
+ \param nodeParams - Updated Parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddKernelNode,
+ ::cuGraphKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecKernelNodeSetParams_v2(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for a memcpy node in the given graphExec.
+
+ Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had
+ contained \p copyParams at instantiation. hNode must remain in the graph which was
+ used to instantiate \p hGraphExec. Changed edges to and from hNode are ignored.
+
+ The source and destination memory in \p copyParams must be allocated from the same
+ contexts as the original source and destination memory. Both the instantiation-time
+ memory operands and the memory operands in \p copyParams must be 1-dimensional.
+ Zero-length operations are not supported.
+
+ The modifications only affect future launches of \p hGraphExec. Already enqueued
+ or running launches of \p hGraphExec are not affected by this call. hNode is also
+ not modified by this call.
+
+ Returns CUDA_ERROR_INVALID_VALUE if the memory operands' mappings changed or
+ either the original or new memory operands are multidimensional.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Memcpy node from the graph which was used to instantiate graphExec
+ \param copyParams - The updated parameters to set
+ \param ctx - Context on which to run the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddMemcpyNode,
+ ::cuGraphMemcpyNodeSetParams,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecMemcpyNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ copyParams: *const cuda_types::CUDA_MEMCPY3D,
+ ctx: cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for a memset node in the given graphExec.
+
+ Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had
+ contained \p memsetParams at instantiation. hNode must remain in the graph which was
+ used to instantiate \p hGraphExec. Changed edges to and from hNode are ignored.
+
+ The destination memory in \p memsetParams must be allocated from the same
+ contexts as the original destination memory. Both the instantiation-time
+ memory operand and the memory operand in \p memsetParams must be 1-dimensional.
+ Zero-length operations are not supported.
+
+ The modifications only affect future launches of \p hGraphExec. Already enqueued
+ or running launches of \p hGraphExec are not affected by this call. hNode is also
+ not modified by this call.
+
+ Returns CUDA_ERROR_INVALID_VALUE if the memory operand's mappings changed or
+ either the original or new memory operand are multidimensional.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Memset node from the graph which was used to instantiate graphExec
+ \param memsetParams - The updated parameters to set
+ \param ctx - Context on which to run the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddMemsetNode,
+ ::cuGraphMemsetNodeSetParams,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecMemsetNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ memsetParams: *const cuda_types::CUDA_MEMSET_NODE_PARAMS,
+ ctx: cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for a host node in the given graphExec.
+
+ Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had
+ contained \p nodeParams at instantiation. hNode must remain in the graph which was
+ used to instantiate \p hGraphExec. Changed edges to and from hNode are ignored.
+
+ The modifications only affect future launches of \p hGraphExec. Already enqueued
+ or running launches of \p hGraphExec are not affected by this call. hNode is also
+ not modified by this call.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Host node from the graph which was used to instantiate graphExec
+ \param nodeParams - The updated parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddHostNode,
+ ::cuGraphHostNodeSetParams,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecHostNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_HOST_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Updates node parameters in the child graph node in the given graphExec.
+
+ Updates the work represented by \p hNode in \p hGraphExec as though the nodes contained
+ in \p hNode's graph had the parameters contained in \p childGraph's nodes at instantiation.
+ \p hNode must remain in the graph which was used to instantiate \p hGraphExec.
+ Changed edges to and from \p hNode are ignored.
+
+ The modifications only affect future launches of \p hGraphExec. Already enqueued
+ or running launches of \p hGraphExec are not affected by this call. \p hNode is also
+ not modified by this call.
+
+ The topology of \p childGraph, as well as the node insertion order, must match that
+ of the graph contained in \p hNode. See ::cuGraphExecUpdate() for a list of restrictions
+ on what can be updated in an instantiated graph. The update is recursive, so child graph
+ nodes contained within the top level child graph will also be updated.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Host node from the graph which was used to instantiate graphExec
+ \param childGraph - The graph supplying the updated parameters
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddChildGraphNode,
+ ::cuGraphChildGraphNodeGetGraph,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecChildGraphNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ childGraph: cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the event for an event record node in the given graphExec
+
+ Sets the event of an event record node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - event record node from the graph from which graphExec was instantiated
+ \param event - Updated event to use
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddEventRecordNode,
+ ::cuGraphEventRecordNodeGetEvent,
+ ::cuGraphEventWaitNodeSetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecEventRecordNodeSetEvent(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the event for an event wait node in the given graphExec
+
+ Sets the event of an event wait node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - event wait node from the graph from which graphExec was instantiated
+ \param event - Updated event to use
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddEventWaitNode,
+ ::cuGraphEventWaitNodeGetEvent,
+ ::cuGraphEventRecordNodeSetEvent,
+ ::cuEventRecordWithFlags,
+ ::cuStreamWaitEvent,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecEventWaitNodeSetEvent(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ event: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for an external semaphore signal node in the given graphExec
+
+ Sets the parameters of an external semaphore signal node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ \p hNode must not have been removed from the original graph.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ Changing \p nodeParams->numExtSems is not supported.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - semaphore signal node from the graph from which graphExec was instantiated
+ \param nodeParams - Updated Parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddExternalSemaphoresSignalNode,
+ ::cuImportExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecExternalSemaphoresSignalNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_SIGNAL_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the parameters for an external semaphore wait node in the given graphExec
+
+ Sets the parameters of an external semaphore wait node in an executable graph \p hGraphExec.
+ The node is identified by the corresponding node \p hNode in the
+ non-executable graph, from which the executable graph was instantiated.
+
+ \p hNode must not have been removed from the original graph.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ Changing \p nodeParams->numExtSems is not supported.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - semaphore wait node from the graph from which graphExec was instantiated
+ \param nodeParams - Updated Parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphExecNodeSetParams,
+ ::cuGraphAddExternalSemaphoresWaitNode,
+ ::cuImportExternalSemaphore,
+ ::cuSignalExternalSemaphoresAsync,
+ ::cuWaitExternalSemaphoresAsync,
+ ::cuGraphExecKernelNodeSetParams,
+ ::cuGraphExecMemcpyNodeSetParams,
+ ::cuGraphExecMemsetNodeSetParams,
+ ::cuGraphExecHostNodeSetParams,
+ ::cuGraphExecChildGraphNodeSetParams,
+ ::cuGraphExecEventRecordNodeSetEvent,
+ ::cuGraphExecEventWaitNodeSetEvent,
+ ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecExternalSemaphoresWaitNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_EXT_SEM_WAIT_NODE_PARAMS,
+ ) -> cuda_types::CUresult;
+ /** \brief Enables or disables the specified node in the given graphExec
+
+ Sets \p hNode to be either enabled or disabled. Disabled nodes are functionally equivalent
+ to empty nodes until they are reenabled. Existing node parameters are not affected by
+ disabling/enabling the node.
+
+ The node is identified by the corresponding node \p hNode in the non-executable
+ graph, from which the executable graph was instantiated.
+
+ \p hNode must not have been removed from the original graph.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ If \p hNode is a device-updatable kernel node, the next upload/launch of \p hGraphExec
+ will overwrite any previous device-side updates. Additionally, applying host updates to a
+ device-updatable kernel node while it is being updated from the device will result in
+ undefined behavior.
+
+ \note Currently only kernel, memset and memcpy nodes are supported.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Node from the graph from which graphExec was instantiated
+ \param isEnabled - Node is enabled if != 0, otherwise the node is disabled
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeGetEnabled,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate
+ ::cuGraphLaunch*/
+ fn cuGraphNodeSetEnabled(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ isEnabled: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Query whether a node in the given graphExec is enabled
+
+ Sets isEnabled to 1 if \p hNode is enabled, or 0 if \p hNode is disabled.
+
+ The node is identified by the corresponding node \p hNode in the non-executable
+ graph, from which the executable graph was instantiated.
+
+ \p hNode must not have been removed from the original graph.
+
+ \note Currently only kernel, memset and memcpy nodes are supported.
+ \note This function will not reflect device-side updates for device-updatable kernel nodes.
+
+ \param hGraphExec - The executable graph in which to set the specified node
+ \param hNode - Node from the graph from which graphExec was instantiated
+ \param isEnabled - Location to return the enabled status of the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphNodeSetEnabled,
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate
+ ::cuGraphLaunch*/
+ fn cuGraphNodeGetEnabled(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ isEnabled: *mut ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Uploads an executable graph in a stream
+
+ Uploads \p hGraphExec to the device in \p hStream without executing it. Uploads of
+ the same \p hGraphExec will be serialized. Each upload is ordered behind both any
+ previous work in \p hStream and any previous launches of \p hGraphExec.
+ Uses memory cached by \p stream to back the allocations owned by \p hGraphExec.
+
+ \param hGraphExec - Executable graph to upload
+ \param hStream - Stream in which to upload the graph
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate,
+ ::cuGraphLaunch,
+ ::cuGraphExecDestroy*/
+ fn cuGraphUpload_ptsz(
+ hGraphExec: cuda_types::CUgraphExec,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Launches an executable graph in a stream
+
+ Executes \p hGraphExec in \p hStream. Only one instance of \p hGraphExec may be executing
+ at a time. Each launch is ordered behind both any previous work in \p hStream
+ and any previous launches of \p hGraphExec. To execute a graph concurrently, it must be
+ instantiated multiple times into multiple executable graphs.
+
+ If any allocations created by \p hGraphExec remain unfreed (from a previous launch) and
+ \p hGraphExec was not instantiated with ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH,
+ the launch will fail with ::CUDA_ERROR_INVALID_VALUE.
+
+ \param hGraphExec - Executable graph to launch
+ \param hStream - Stream in which to launch the graph
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate,
+ ::cuGraphUpload,
+ ::cuGraphExecDestroy*/
+ fn cuGraphLaunch_ptsz(
+ hGraphExec: cuda_types::CUgraphExec,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys an executable graph
+
+ Destroys the executable graph specified by \p hGraphExec, as well
+ as all of its executable nodes. If the executable graph is
+ in-flight, it will not be terminated, but rather freed
+ asynchronously on completion.
+
+ \param hGraphExec - Executable graph to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate,
+ ::cuGraphUpload,
+ ::cuGraphLaunch*/
+ fn cuGraphExecDestroy(hGraphExec: cuda_types::CUgraphExec) -> cuda_types::CUresult;
+ /** \brief Destroys a graph
+
+ Destroys the graph specified by \p hGraph, as well as all of its nodes.
+
+ \param hGraph - Graph to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate*/
+ fn cuGraphDestroy(hGraph: cuda_types::CUgraph) -> cuda_types::CUresult;
+ /** \brief Check whether an executable graph can be updated with a graph and perform the update if possible
+
+ Updates the node parameters in the instantiated graph specified by \p hGraphExec with the
+ node parameters in a topologically identical graph specified by \p hGraph.
+
+ Limitations:
+
+ - Kernel nodes:
+ - The owning context of the function cannot change.
+ - A node whose function originally did not use CUDA dynamic parallelism cannot be updated
+ to a function which uses CDP.
+ - A node whose function originally did not make device-side update calls cannot be updated
+ to a function which makes device-side update calls.
+ - A cooperative node cannot be updated to a non-cooperative node, and vice-versa.
+ - If the graph was instantiated with CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, the
+ priority attribute cannot change. Equality is checked on the originally requested
+ priority values, before they are clamped to the device's supported range.
+ - If \p hGraphExec was not instantiated for device launch, a node whose function originally
+ did not use device-side cudaGraphLaunch() cannot be updated to a function which uses
+ device-side cudaGraphLaunch() unless the node resides on the same context as nodes which
+ contained such calls at instantiate-time. If no such calls were present at instantiation,
+ these updates cannot be performed at all.
+ - Neither \p hGraph nor \p hGraphExec may contain device-updatable kernel nodes.
+ - Memset and memcpy nodes:
+ - The CUDA device(s) to which the operand(s) was allocated/mapped cannot change.
+ - The source/destination memory must be allocated from the same contexts as the original
+ source/destination memory.
+ - Only 1D memsets can be changed.
+ - Additional memcpy node restrictions:
+ - Changing either the source or destination memory type(i.e. CU_MEMORYTYPE_DEVICE,
+ CU_MEMORYTYPE_ARRAY, etc.) is not supported.
+ - External semaphore wait nodes and record nodes:
+ - Changing the number of semaphores is not supported.
+ - Conditional nodes:
+ - Changing node parameters is not supported.
+ - Changeing parameters of nodes within the conditional body graph is subject to the rules above.
+ - Conditional handle flags and default values are updated as part of the graph update.
+
+ Note: The API may add further restrictions in future releases. The return code should always be checked.
+
+ cuGraphExecUpdate sets the result member of \p resultInfo to CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED
+ under the following conditions:
+ - The count of nodes directly in \p hGraphExec and \p hGraph differ, in which case resultInfo->errorNode
+ is set to NULL.
+ - \p hGraph has more exit nodes than \p hGraph, in which case resultInfo->errorNode is set to one of
+ the exit nodes in hGraph.
+ - A node in \p hGraph has a different number of dependencies than the node from \p hGraphExec it is paired with,
+ in which case resultInfo->errorNode is set to the node from \p hGraph.
+ - A node in \p hGraph has a dependency that does not match with the corresponding dependency of the paired node
+ from \p hGraphExec. resultInfo->errorNode will be set to the node from \p hGraph. resultInfo->errorFromNode
+ will be set to the mismatched dependency. The dependencies are paired based on edge order and a dependency
+ does not match when the nodes are already paired based on other edges examined in the graph.
+
+ cuGraphExecUpdate sets the result member of \p resultInfo to:
+ - CU_GRAPH_EXEC_UPDATE_ERROR if passed an invalid value.
+ - CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED if the graph topology changed
+ - CU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED if the type of a node changed, in which case
+ \p hErrorNode_out is set to the node from \p hGraph.
+ - CU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE if the function changed in an unsupported
+ way(see note above), in which case \p hErrorNode_out is set to the node from \p hGraph
+ - CU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED if any parameters to a node changed in a way
+ that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph.
+ - CU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED if any attributes of a node changed in a way
+ that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph.
+ - CU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED if something about a node is unsupported, like
+ the node's type or configuration, in which case \p hErrorNode_out is set to the node from \p hGraph
+
+ If the update fails for a reason not listed above, the result member of \p resultInfo will be set
+ to CU_GRAPH_EXEC_UPDATE_ERROR. If the update succeeds, the result member will be set to CU_GRAPH_EXEC_UPDATE_SUCCESS.
+
+ cuGraphExecUpdate returns CUDA_SUCCESS when the updated was performed successfully. It returns
+ CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE if the graph update was not performed because it included
+ changes which violated constraints specific to instantiated graph update.
+
+ \param hGraphExec The instantiated graph to be updated
+ \param hGraph The graph containing the updated parameters
+ \param resultInfo the error info structure
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE,
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphInstantiate*/
+ fn cuGraphExecUpdate_v2(
+ hGraphExec: cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ resultInfo: *mut cuda_types::CUgraphExecUpdateResultInfo,
+ ) -> cuda_types::CUresult;
+ /** \brief Copies attributes from source node to destination node.
+
+ Copies attributes from source node \p src to destination node \p dst.
+ Both node must have the same context.
+
+ \param[out] dst Destination node
+ \param[in] src Source node
+ For list of attributes see ::CUkernelNodeAttrID
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuGraphKernelNodeCopyAttributes(
+ dst: cuda_types::CUgraphNode,
+ src: cuda_types::CUgraphNode,
+ ) -> cuda_types::CUresult;
+ /** \brief Queries node attribute.
+
+ Queries attribute \p attr from node \p hNode and stores it in corresponding
+ member of \p value_out.
+
+ \param[in] hNode
+ \param[in] attr
+ \param[out] value_out
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuGraphKernelNodeGetAttribute(
+ hNode: cuda_types::CUgraphNode,
+ attr: cuda_types::CUkernelNodeAttrID,
+ value_out: *mut cuda_types::CUkernelNodeAttrValue,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets node attribute.
+
+ Sets attribute \p attr on node \p hNode from corresponding attribute of
+ \p value.
+
+ \param[out] hNode
+ \param[in] attr
+ \param[out] value
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE
+ \notefnerr
+
+ \sa
+ ::CUaccessPolicyWindow*/
+ fn cuGraphKernelNodeSetAttribute(
+ hNode: cuda_types::CUgraphNode,
+ attr: cuda_types::CUkernelNodeAttrID,
+ value: *const cuda_types::CUkernelNodeAttrValue,
+ ) -> cuda_types::CUresult;
+ /** \brief Write a DOT file describing graph structure
+
+ Using the provided \p hGraph, write to \p path a DOT formatted description of the graph.
+ By default this includes the graph topology, node types, node id, kernel names and memcpy direction.
+ \p flags can be specified to write more detailed information about each node type such as
+ parameter values, kernel attributes, node and function handles.
+
+ \param hGraph - The graph to create a DOT file from
+ \param path - The path to write the DOT file to
+ \param flags - Flags from CUgraphDebugDot_flags for specifying which additional node information to write
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OPERATING_SYSTEM*/
+ fn cuGraphDebugDotPrint(
+ hGraph: cuda_types::CUgraph,
+ path: *const ::core::ffi::c_char,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a user object
+
+ Create a user object with the specified destructor callback and initial reference count. The
+ initial references are owned by the caller.
+
+ Destructor callbacks cannot make CUDA API calls and should avoid blocking behavior, as they
+ are executed by a shared internal thread. Another thread may be signaled to perform such
+ actions, if it does not block forward progress of tasks scheduled through CUDA.
+
+ See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+
+ \param object_out - Location to return the user object handle
+ \param ptr - The pointer to pass to the destroy function
+ \param destroy - Callback to free the user object when it is no longer in use
+ \param initialRefcount - The initial refcount to create the object with, typically 1. The
+ initial references are owned by the calling thread.
+ \param flags - Currently it is required to pass ::CU_USER_OBJECT_NO_DESTRUCTOR_SYNC,
+ which is the only defined flag. This indicates that the destroy
+ callback cannot be waited on by any CUDA API. Users requiring
+ synchronization of the callback should signal its completion
+ manually.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuUserObjectRetain,
+ ::cuUserObjectRelease,
+ ::cuGraphRetainUserObject,
+ ::cuGraphReleaseUserObject,
+ ::cuGraphCreate*/
+ fn cuUserObjectCreate(
+ object_out: *mut cuda_types::CUuserObject,
+ ptr: *mut ::core::ffi::c_void,
+ destroy: cuda_types::CUhostFn,
+ initialRefcount: ::core::ffi::c_uint,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Retain a reference to a user object
+
+ Retains new references to a user object. The new references are owned by the caller.
+
+ See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+
+ \param object - The object to retain
+ \param count - The number of references to retain, typically 1. Must be nonzero
+ and not larger than INT_MAX.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuUserObjectCreate,
+ ::cuUserObjectRelease,
+ ::cuGraphRetainUserObject,
+ ::cuGraphReleaseUserObject,
+ ::cuGraphCreate*/
+ fn cuUserObjectRetain(
+ object: cuda_types::CUuserObject,
+ count: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Release a reference to a user object
+
+ Releases user object references owned by the caller. The object's destructor is invoked if
+ the reference count reaches zero.
+
+ It is undefined behavior to release references not owned by the caller, or to use a user
+ object handle after all references are released.
+
+ See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+
+ \param object - The object to release
+ \param count - The number of references to release, typically 1. Must be nonzero
+ and not larger than INT_MAX.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuUserObjectCreate,
+ ::cuUserObjectRetain,
+ ::cuGraphRetainUserObject,
+ ::cuGraphReleaseUserObject,
+ ::cuGraphCreate*/
+ fn cuUserObjectRelease(
+ object: cuda_types::CUuserObject,
+ count: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Retain a reference to a user object from a graph
+
+ Creates or moves user object references that will be owned by a CUDA graph.
+
+ See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+
+ \param graph - The graph to associate the reference with
+ \param object - The user object to retain a reference for
+ \param count - The number of references to add to the graph, typically 1. Must be
+ nonzero and not larger than INT_MAX.
+ \param flags - The optional flag ::CU_GRAPH_USER_OBJECT_MOVE transfers references
+ from the calling thread, rather than create new references. Pass 0
+ to create new references.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuUserObjectCreate,
+ ::cuUserObjectRetain,
+ ::cuUserObjectRelease,
+ ::cuGraphReleaseUserObject,
+ ::cuGraphCreate*/
+ fn cuGraphRetainUserObject(
+ graph: cuda_types::CUgraph,
+ object: cuda_types::CUuserObject,
+ count: ::core::ffi::c_uint,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Release a user object reference from a graph
+
+ Releases user object references owned by a graph.
+
+ See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+
+ \param graph - The graph that will release the reference
+ \param object - The user object to release a reference for
+ \param count - The number of references to release, typically 1. Must be nonzero
+ and not larger than INT_MAX.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuUserObjectCreate,
+ ::cuUserObjectRetain,
+ ::cuUserObjectRelease,
+ ::cuGraphRetainUserObject,
+ ::cuGraphCreate*/
+ fn cuGraphReleaseUserObject(
+ graph: cuda_types::CUgraph,
+ object: cuda_types::CUuserObject,
+ count: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds a node of arbitrary type to a graph
+
+ Creates a new node in \p hGraph described by \p nodeParams with \p numDependencies
+ dependencies specified via \p dependencies. \p numDependencies may be 0.
+ \p dependencies may be null if \p numDependencies is 0. \p dependencies may not have
+ any duplicate entries.
+
+ \p nodeParams is a tagged union. The node type should be specified in the \p type field,
+ and type-specific parameters in the corresponding union member. All unused bytes - that
+ is, \p reserved0 and all bytes past the utilized union member - must be set to zero.
+ It is recommended to use brace initialization or memset to ensure all bytes are
+ initialized.
+
+ Note that for some node types, \p nodeParams may contain "out parameters" which are
+ modified during the call, such as \p nodeParams->alloc.dptr.
+
+ A handle to the new node will be returned in \p phGraphNode.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Specification of the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphNodeSetParams,
+ ::cuGraphExecNodeSetParams*/
+ fn cuGraphAddNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *mut CUgraphNodeParams,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddNode_v2(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
- dependencyData: *const CUgraphEdgeData,
+ nodeParams: *mut cuda_types::CUgraphNodeParams,
+ ) -> cuda_types::CUresult;
+ /** \brief Adds a node of arbitrary type to a graph (12.3+)
+
+ Creates a new node in \p hGraph described by \p nodeParams with \p numDependencies
+ dependencies specified via \p dependencies. \p numDependencies may be 0.
+ \p dependencies may be null if \p numDependencies is 0. \p dependencies may not have
+ any duplicate entries.
+
+ \p nodeParams is a tagged union. The node type should be specified in the \p type field,
+ and type-specific parameters in the corresponding union member. All unused bytes - that
+ is, \p reserved0 and all bytes past the utilized union member - must be set to zero.
+ It is recommended to use brace initialization or memset to ensure all bytes are
+ initialized.
+
+ Note that for some node types, \p nodeParams may contain "out parameters" which are
+ modified during the call, such as \p nodeParams->alloc.dptr.
+
+ A handle to the new node will be returned in \p phGraphNode.
+
+ \param phGraphNode - Returns newly created node
+ \param hGraph - Graph to which to add the node
+ \param dependencies - Dependencies of the node
+ \param dependencyData - Optional edge data for the dependencies. If NULL, the data is
+ assumed to be default (zeroed) for all dependencies.
+ \param numDependencies - Number of dependencies
+ \param nodeParams - Specification of the node
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphCreate,
+ ::cuGraphNodeSetParams,
+ ::cuGraphExecNodeSetParams*/
+ fn cuGraphAddNode_v2(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
+ dependencyData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- nodeParams: *mut CUgraphNodeParams,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphNodeSetParams(hNode: CUgraphNode, nodeParams: *mut CUgraphNodeParams)
- -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *mut CUgraphNodeParams,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphConditionalHandleCreate(
- pHandle_out: *mut CUgraphConditionalHandle,
- hGraph: CUgraph,
- ctx: CUcontext,
- defaultLaunchValue: ::std::os::raw::c_uint,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxActiveBlocksPerMultiprocessor(
- numBlocks: *mut ::std::os::raw::c_int,
- func: CUfunction,
- blockSize: ::std::os::raw::c_int,
+ nodeParams: *mut cuda_types::CUgraphNodeParams,
+ ) -> cuda_types::CUresult;
+ /** \brief Update's a graph node's parameters
+
+ Sets the parameters of graph node \p hNode to \p nodeParams. The node type specified by
+ \p nodeParams->type must match the type of \p hNode. \p nodeParams must be fully
+ initialized and all unused bytes (reserved, padding) zeroed.
+
+ Modifying parameters is not supported for node types CU_GRAPH_NODE_TYPE_MEM_ALLOC and
+ CU_GRAPH_NODE_TYPE_MEM_FREE.
+
+ \param hNode - Node to set the parameters for
+ \param nodeParams - Parameters to copy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphExecNodeSetParams*/
+ fn cuGraphNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUgraphNodeParams,
+ ) -> cuda_types::CUresult;
+ /** \brief Update's a graph node's parameters in an instantiated graph
+
+ Sets the parameters of a node in an executable graph \p hGraphExec. The node is identified
+ by the corresponding node \p hNode in the non-executable graph from which the executable
+ graph was instantiated. \p hNode must not have been removed from the original graph.
+
+ The modifications only affect future launches of \p hGraphExec. Already
+ enqueued or running launches of \p hGraphExec are not affected by this call.
+ \p hNode is also not modified by this call.
+
+ Allowed changes to parameters on executable graphs are as follows:
+ <table>
+ <tr><th>Node type<th>Allowed changes
+ <tr><td>kernel<td>See ::cuGraphExecKernelNodeSetParams
+ <tr><td>memcpy<td>Addresses for 1-dimensional copies if allocated in same context; see ::cuGraphExecMemcpyNodeSetParams
+ <tr><td>memset<td>Addresses for 1-dimensional memsets if allocated in same context; see ::cuGraphExecMemsetNodeSetParams
+ <tr><td>host<td>Unrestricted
+ <tr><td>child graph<td>Topology must match and restrictions apply recursively; see ::cuGraphExecUpdate
+ <tr><td>event wait<td>Unrestricted
+ <tr><td>event record<td>Unrestricted
+ <tr><td>external semaphore signal<td>Number of semaphore operations cannot change
+ <tr><td>external semaphore wait<td>Number of semaphore operations cannot change
+ <tr><td>memory allocation<td>API unsupported
+ <tr><td>memory free<td>API unsupported
+ <tr><td>batch memops<td>Addresses, values, and operation type for wait operations; see ::cuGraphExecBatchMemOpNodeSetParams
+ </table>
+
+ \param hGraphExec - The executable graph in which to update the specified node
+ \param hNode - Corresponding node from the graph from which graphExec was instantiated
+ \param nodeParams - Updated Parameters to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode,
+ ::cuGraphNodeSetParams
+ ::cuGraphExecUpdate,
+ ::cuGraphInstantiate*/
+ fn cuGraphExecNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUgraphNodeParams,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a conditional handle
+
+ Creates a conditional handle associated with \p hGraph.
+
+ The conditional handle must be associated with a conditional node in this graph or one of its children.
+
+ Handles not associated with a conditional node may cause graph instantiation to fail.
+
+ Handles can only be set from the context with which they are associated.
+
+ \param pHandle_out - Pointer used to return the handle to the caller.
+ \param hGraph - Graph which will contain the conditional node using this handle.
+ \param ctx - Context for the handle and associated conditional node.
+ \param defaultLaunchValue - Optional initial value for the conditional variable.
+ \param flags - Currently must be CU_GRAPH_COND_ASSIGN_DEFAULT or 0.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_graph_thread_safety
+ \notefnerr
+
+ \sa
+ ::cuGraphAddNode*/
+ fn cuGraphConditionalHandleCreate(
+ pHandle_out: *mut cuda_types::CUgraphConditionalHandle,
+ hGraph: cuda_types::CUgraph,
+ ctx: cuda_types::CUcontext,
+ defaultLaunchValue: ::core::ffi::c_uint,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns occupancy of a function
+
+ Returns in \p *numBlocks the number of the maximum active blocks per
+ streaming multiprocessor.
+
+ \param numBlocks - Returned occupancy
+ \param func - Kernel for which occupancy is calculated
+ \param blockSize - Block size the kernel is intended to be launched with
+ \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaOccupancyMaxActiveBlocksPerMultiprocessor*/
+ fn cuOccupancyMaxActiveBlocksPerMultiprocessor(
+ numBlocks: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ blockSize: ::core::ffi::c_int,
dynamicSMemSize: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(
- numBlocks: *mut ::std::os::raw::c_int,
- func: CUfunction,
- blockSize: ::std::os::raw::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns occupancy of a function
+
+ Returns in \p *numBlocks the number of the maximum active blocks per
+ streaming multiprocessor.
+
+ The \p Flags parameter controls how special cases are handled. The
+ valid flags are:
+
+ - ::CU_OCCUPANCY_DEFAULT, which maintains the default behavior as
+ ::cuOccupancyMaxActiveBlocksPerMultiprocessor;
+
+ - ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE, which suppresses the
+ default behavior on platform where global caching affects
+ occupancy. On such platforms, if caching is enabled, but
+ per-block SM resource usage would result in zero occupancy, the
+ occupancy calculator will calculate the occupancy as if caching
+ is disabled. Setting ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE makes
+ the occupancy calculator to return 0 in such cases. More information
+ can be found about this feature in the "Unified L1/Texture Cache"
+ section of the Maxwell tuning guide.
+
+ \param numBlocks - Returned occupancy
+ \param func - Kernel for which occupancy is calculated
+ \param blockSize - Block size the kernel is intended to be launched with
+ \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ \param flags - Requested behavior for the occupancy calculator
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags*/
+ fn cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(
+ numBlocks: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ blockSize: ::core::ffi::c_int,
dynamicSMemSize: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxPotentialBlockSize(
- minGridSize: *mut ::std::os::raw::c_int,
- blockSize: *mut ::std::os::raw::c_int,
- func: CUfunction,
- blockSizeToDynamicSMemSize: CUoccupancyB2DSize,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Suggest a launch configuration with reasonable occupancy
+
+ Returns in \p *blockSize a reasonable block size that can achieve
+ the maximum occupancy (or, the maximum number of active warps with
+ the fewest blocks per multiprocessor), and in \p *minGridSize the
+ minimum grid size to achieve the maximum occupancy.
+
+ If \p blockSizeLimit is 0, the configurator will use the maximum
+ block size permitted by the device / function instead.
+
+ If per-block dynamic shared memory allocation is not needed, the
+ user should leave both \p blockSizeToDynamicSMemSize and \p
+ dynamicSMemSize as 0.
+
+ If per-block dynamic shared memory allocation is needed, then if
+ the dynamic shared memory size is constant regardless of block
+ size, the size should be passed through \p dynamicSMemSize, and \p
+ blockSizeToDynamicSMemSize should be NULL.
+
+ Otherwise, if the per-block dynamic shared memory size varies with
+ different block sizes, the user needs to provide a unary function
+ through \p blockSizeToDynamicSMemSize that computes the dynamic
+ shared memory needed by \p func for any given block size. \p
+ dynamicSMemSize is ignored. An example signature is:
+
+ \code
+ // Take block size, returns dynamic shared memory needed
+ size_t blockToSmem(int blockSize);
+ \endcode
+
+ \param minGridSize - Returned minimum grid size needed to achieve the maximum occupancy
+ \param blockSize - Returned maximum block size that can achieve the maximum occupancy
+ \param func - Kernel for which launch configuration is calculated
+ \param blockSizeToDynamicSMemSize - A function that calculates how much per-block dynamic shared memory \p func uses based on the block size
+ \param dynamicSMemSize - Dynamic shared memory usage intended, in bytes
+ \param blockSizeLimit - The maximum block size \p func is designed to handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaOccupancyMaxPotentialBlockSize*/
+ fn cuOccupancyMaxPotentialBlockSize(
+ minGridSize: *mut ::core::ffi::c_int,
+ blockSize: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ blockSizeToDynamicSMemSize: cuda_types::CUoccupancyB2DSize,
dynamicSMemSize: usize,
- blockSizeLimit: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxPotentialBlockSizeWithFlags(
- minGridSize: *mut ::std::os::raw::c_int,
- blockSize: *mut ::std::os::raw::c_int,
- func: CUfunction,
- blockSizeToDynamicSMemSize: CUoccupancyB2DSize,
+ blockSizeLimit: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Suggest a launch configuration with reasonable occupancy
+
+ An extended version of ::cuOccupancyMaxPotentialBlockSize. In
+ addition to arguments passed to ::cuOccupancyMaxPotentialBlockSize,
+ ::cuOccupancyMaxPotentialBlockSizeWithFlags also takes a \p Flags
+ parameter.
+
+ The \p Flags parameter controls how special cases are handled. The
+ valid flags are:
+
+ - ::CU_OCCUPANCY_DEFAULT, which maintains the default behavior as
+ ::cuOccupancyMaxPotentialBlockSize;
+
+ - ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE, which suppresses the
+ default behavior on platform where global caching affects
+ occupancy. On such platforms, the launch configurations that
+ produces maximal occupancy might not support global
+ caching. Setting ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE
+ guarantees that the the produced launch configuration is global
+ caching compatible at a potential cost of occupancy. More information
+ can be found about this feature in the "Unified L1/Texture Cache"
+ section of the Maxwell tuning guide.
+
+ \param minGridSize - Returned minimum grid size needed to achieve the maximum occupancy
+ \param blockSize - Returned maximum block size that can achieve the maximum occupancy
+ \param func - Kernel for which launch configuration is calculated
+ \param blockSizeToDynamicSMemSize - A function that calculates how much per-block dynamic shared memory \p func uses based on the block size
+ \param dynamicSMemSize - Dynamic shared memory usage intended, in bytes
+ \param blockSizeLimit - The maximum block size \p func is designed to handle
+ \param flags - Options
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaOccupancyMaxPotentialBlockSizeWithFlags*/
+ fn cuOccupancyMaxPotentialBlockSizeWithFlags(
+ minGridSize: *mut ::core::ffi::c_int,
+ blockSize: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ blockSizeToDynamicSMemSize: cuda_types::CUoccupancyB2DSize,
dynamicSMemSize: usize,
- blockSizeLimit: ::std::os::raw::c_int,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyAvailableDynamicSMemPerBlock(
+ blockSizeLimit: ::core::ffi::c_int,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns dynamic shared memory available per block when launching \p numBlocks blocks on SM
+
+ Returns in \p *dynamicSmemSize the maximum size of dynamic shared memory to allow \p numBlocks blocks per SM.
+
+ \param dynamicSmemSize - Returned maximum dynamic shared memory
+ \param func - Kernel function for which occupancy is calculated
+ \param numBlocks - Number of blocks to fit on SM
+ \param blockSize - Size of the blocks
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr*/
+ fn cuOccupancyAvailableDynamicSMemPerBlock(
dynamicSmemSize: *mut usize,
- func: CUfunction,
- numBlocks: ::std::os::raw::c_int,
- blockSize: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxPotentialClusterSize(
- clusterSize: *mut ::std::os::raw::c_int,
- func: CUfunction,
- config: *const CUlaunchConfig,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuOccupancyMaxActiveClusters(
- numClusters: *mut ::std::os::raw::c_int,
- func: CUfunction,
- config: *const CUlaunchConfig,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetArray(
- hTexRef: CUtexref,
- hArray: CUarray,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetMipmappedArray(
- hTexRef: CUtexref,
- hMipmappedArray: CUmipmappedArray,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddress_v2(
+ func: cuda_types::CUfunction,
+ numBlocks: ::core::ffi::c_int,
+ blockSize: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Given the kernel function (\p func) and launch configuration
+ (\p config), return the maximum cluster size in \p *clusterSize.
+
+ The cluster dimensions in \p config are ignored. If func has a required
+ cluster size set (see ::cudaFuncGetAttributes / ::cuFuncGetAttribute),\p
+ *clusterSize will reflect the required cluster size.
+
+ By default this function will always return a value that's portable on
+ future hardware. A higher value may be returned if the kernel function
+ allows non-portable cluster sizes.
+
+ This function will respect the compile time launch bounds.
+
+ \param clusterSize - Returned maximum cluster size that can be launched
+ for the given kernel function and launch configuration
+ \param func - Kernel function for which maximum cluster
+ size is calculated
+ \param config - Launch configuration for the given kernel function
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaFuncGetAttributes,
+ ::cuFuncGetAttribute*/
+ fn cuOccupancyMaxPotentialClusterSize(
+ clusterSize: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ config: *const cuda_types::CUlaunchConfig,
+ ) -> cuda_types::CUresult;
+ /** \brief Given the kernel function (\p func) and launch configuration
+ (\p config), return the maximum number of clusters that could co-exist
+ on the target device in \p *numClusters.
+
+ If the function has required cluster size already set (see
+ ::cudaFuncGetAttributes / ::cuFuncGetAttribute), the cluster size
+ from config must either be unspecified or match the required size.
+ Without required sizes, the cluster size must be specified in config,
+ else the function will return an error.
+
+ Note that various attributes of the kernel function may affect occupancy
+ calculation. Runtime environment may affect how the hardware schedules
+ the clusters, so the calculated occupancy is not guaranteed to be achievable.
+
+ \param numClusters - Returned maximum number of clusters that
+ could co-exist on the target device
+ \param func - Kernel function for which maximum number
+ of clusters are calculated
+ \param config - Launch configuration for the given kernel function
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CLUSTER_SIZE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cudaFuncGetAttributes,
+ ::cuFuncGetAttribute*/
+ fn cuOccupancyMaxActiveClusters(
+ numClusters: *mut ::core::ffi::c_int,
+ func: cuda_types::CUfunction,
+ config: *const cuda_types::CUlaunchConfig,
+ ) -> cuda_types::CUresult;
+ /** \brief Binds an array as a texture reference
+
+ \deprecated
+
+ Binds the CUDA array \p hArray to the texture reference \p hTexRef. Any
+ previous address or CUDA array state associated with the texture reference
+ is superseded by this function. \p Flags must be set to
+ ::CU_TRSA_OVERRIDE_FORMAT. Any CUDA array previously bound to \p hTexRef is
+ unbound.
+
+ \param hTexRef - Texture reference to bind
+ \param hArray - Array to bind
+ \param Flags - Options (must be ::CU_TRSA_OVERRIDE_FORMAT)
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetArray(
+ hTexRef: cuda_types::CUtexref,
+ hArray: cuda_types::CUarray,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Binds a mipmapped array to a texture reference
+
+ \deprecated
+
+ Binds the CUDA mipmapped array \p hMipmappedArray to the texture reference \p hTexRef.
+ Any previous address or CUDA array state associated with the texture reference
+ is superseded by this function. \p Flags must be set to ::CU_TRSA_OVERRIDE_FORMAT.
+ Any CUDA array previously bound to \p hTexRef is unbound.
+
+ \param hTexRef - Texture reference to bind
+ \param hMipmappedArray - Mipmapped array to bind
+ \param Flags - Options (must be ::CU_TRSA_OVERRIDE_FORMAT)
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetMipmappedArray(
+ hTexRef: cuda_types::CUtexref,
+ hMipmappedArray: cuda_types::CUmipmappedArray,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Binds an address as a texture reference
+
+ \deprecated
+
+ Binds a linear address range to the texture reference \p hTexRef. Any
+ previous address or CUDA array state associated with the texture reference
+ is superseded by this function. Any memory previously bound to \p hTexRef
+ is unbound.
+
+ Since the hardware enforces an alignment requirement on texture base
+ addresses, ::cuTexRefSetAddress() passes back a byte offset in
+ \p *ByteOffset that must be applied to texture fetches in order to read from
+ the desired memory. This offset must be divided by the texel size and
+ passed to kernels that read from the texture so they can be applied to the
+ ::tex1Dfetch() function.
+
+ If the device memory pointer was returned from ::cuMemAlloc(), the offset
+ is guaranteed to be 0 and NULL may be passed as the \p ByteOffset parameter.
+
+ The total number of elements (or texels) in the linear address range
+ cannot exceed ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH.
+ The number of elements is computed as (\p bytes / bytesPerElement),
+ where bytesPerElement is determined from the data format and number of
+ components set using ::cuTexRefSetFormat().
+
+ \param ByteOffset - Returned byte offset
+ \param hTexRef - Texture reference to bind
+ \param dptr - Device pointer to bind
+ \param bytes - Size of memory to bind in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetAddress_v2(
ByteOffset: *mut usize,
- hTexRef: CUtexref,
- dptr: CUdeviceptr,
+ hTexRef: cuda_types::CUtexref,
+ dptr: cuda_types::CUdeviceptr,
bytes: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddress2D_v3(
- hTexRef: CUtexref,
- desc: *const CUDA_ARRAY_DESCRIPTOR,
- dptr: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ /** \brief Binds an address as a 2D texture reference
+
+ \deprecated
+
+ Binds a linear address range to the texture reference \p hTexRef. Any
+ previous address or CUDA array state associated with the texture reference
+ is superseded by this function. Any memory previously bound to \p hTexRef
+ is unbound.
+
+ Using a ::tex2D() function inside a kernel requires a call to either
+ ::cuTexRefSetArray() to bind the corresponding texture reference to an
+ array, or ::cuTexRefSetAddress2D() to bind the texture reference to linear
+ memory.
+
+ Function calls to ::cuTexRefSetFormat() cannot follow calls to
+ ::cuTexRefSetAddress2D() for the same texture reference.
+
+ It is required that \p dptr be aligned to the appropriate hardware-specific
+ texture alignment. You can query this value using the device attribute
+ ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT. If an unaligned \p dptr is
+ supplied, ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \p Pitch has to be aligned to the hardware-specific texture pitch alignment.
+ This value can be queried using the device attribute
+ ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT. If an unaligned \p Pitch is
+ supplied, ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ Width and Height, which are specified in elements (or texels), cannot exceed
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH and
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT respectively.
+ \p Pitch, which is specified in bytes, cannot exceed
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH.
+
+ \param hTexRef - Texture reference to bind
+ \param desc - Descriptor of CUDA array
+ \param dptr - Device pointer to bind
+ \param Pitch - Line pitch in bytes
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetAddress2D_v3(
+ hTexRef: cuda_types::CUtexref,
+ desc: *const cuda_types::CUDA_ARRAY_DESCRIPTOR,
+ dptr: cuda_types::CUdeviceptr,
Pitch: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetFormat(
- hTexRef: CUtexref,
- fmt: CUarray_format,
- NumPackedComponents: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddressMode(
- hTexRef: CUtexref,
- dim: ::std::os::raw::c_int,
- am: CUaddress_mode,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetFilterMode(hTexRef: CUtexref, fm: CUfilter_mode) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetMipmapFilterMode(hTexRef: CUtexref, fm: CUfilter_mode) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetMipmapLevelBias(hTexRef: CUtexref, bias: f32) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetMipmapLevelClamp(
- hTexRef: CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the format for a texture reference
+
+ \deprecated
+
+ Specifies the format of the data to be read by the texture reference
+ \p hTexRef. \p fmt and \p NumPackedComponents are exactly analogous to the
+ ::Format and ::NumChannels members of the ::CUDA_ARRAY_DESCRIPTOR structure:
+ They specify the format of each component and the number of components per
+ array element.
+
+ \param hTexRef - Texture reference
+ \param fmt - Format to set
+ \param NumPackedComponents - Number of components per array element
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ ::cudaCreateChannelDesc*/
+ fn cuTexRefSetFormat(
+ hTexRef: cuda_types::CUtexref,
+ fmt: cuda_types::CUarray_format,
+ NumPackedComponents: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the addressing mode for a texture reference
+
+ \deprecated
+
+ Specifies the addressing mode \p am for the given dimension \p dim of the
+ texture reference \p hTexRef. If \p dim is zero, the addressing mode is
+ applied to the first parameter of the functions used to fetch from the
+ texture; if \p dim is 1, the second, and so on. ::CUaddress_mode is defined
+ as:
+ \code
+typedef enum CUaddress_mode_enum {
+CU_TR_ADDRESS_MODE_WRAP = 0,
+CU_TR_ADDRESS_MODE_CLAMP = 1,
+CU_TR_ADDRESS_MODE_MIRROR = 2,
+CU_TR_ADDRESS_MODE_BORDER = 3
+} CUaddress_mode;
+ \endcode
+
+ Note that this call has no effect if \p hTexRef is bound to linear memory.
+ Also, if the flag, ::CU_TRSF_NORMALIZED_COORDINATES, is not set, the only
+ supported address mode is ::CU_TR_ADDRESS_MODE_CLAMP.
+
+ \param hTexRef - Texture reference
+ \param dim - Dimension
+ \param am - Addressing mode to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetAddressMode(
+ hTexRef: cuda_types::CUtexref,
+ dim: ::core::ffi::c_int,
+ am: cuda_types::CUaddress_mode,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the filtering mode for a texture reference
+
+ \deprecated
+
+ Specifies the filtering mode \p fm to be used when reading memory through
+ the texture reference \p hTexRef. ::CUfilter_mode_enum is defined as:
+
+ \code
+typedef enum CUfilter_mode_enum {
+CU_TR_FILTER_MODE_POINT = 0,
+CU_TR_FILTER_MODE_LINEAR = 1
+} CUfilter_mode;
+ \endcode
+
+ Note that this call has no effect if \p hTexRef is bound to linear memory.
+
+ \param hTexRef - Texture reference
+ \param fm - Filtering mode to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetFilterMode(
+ hTexRef: cuda_types::CUtexref,
+ fm: cuda_types::CUfilter_mode,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the mipmap filtering mode for a texture reference
+
+ \deprecated
+
+ Specifies the mipmap filtering mode \p fm to be used when reading memory through
+ the texture reference \p hTexRef. ::CUfilter_mode_enum is defined as:
+
+ \code
+typedef enum CUfilter_mode_enum {
+CU_TR_FILTER_MODE_POINT = 0,
+CU_TR_FILTER_MODE_LINEAR = 1
+} CUfilter_mode;
+ \endcode
+
+ Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+
+ \param hTexRef - Texture reference
+ \param fm - Filtering mode to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetMipmapFilterMode(
+ hTexRef: cuda_types::CUtexref,
+ fm: cuda_types::CUfilter_mode,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the mipmap level bias for a texture reference
+
+ \deprecated
+
+ Specifies the mipmap level bias \p bias to be added to the specified mipmap level when
+ reading memory through the texture reference \p hTexRef.
+
+ Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+
+ \param hTexRef - Texture reference
+ \param bias - Mipmap level bias
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetMipmapLevelBias(
+ hTexRef: cuda_types::CUtexref,
+ bias: f32,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the mipmap min/max mipmap level clamps for a texture reference
+
+ \deprecated
+
+ Specifies the min/max mipmap level clamps, \p minMipmapLevelClamp and \p maxMipmapLevelClamp
+ respectively, to be used when reading memory through the texture reference
+ \p hTexRef.
+
+ Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+
+ \param hTexRef - Texture reference
+ \param minMipmapLevelClamp - Mipmap min level clamp
+ \param maxMipmapLevelClamp - Mipmap max level clamp
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetMipmapLevelClamp(
+ hTexRef: cuda_types::CUtexref,
minMipmapLevelClamp: f32,
maxMipmapLevelClamp: f32,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetMaxAnisotropy(
- hTexRef: CUtexref,
- maxAniso: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetBorderColor(hTexRef: CUtexref, pBorderColor: *mut f32) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetFlags(hTexRef: CUtexref, Flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetAddress_v2(pdptr: *mut CUdeviceptr, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetArray(phArray: *mut CUarray, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetMipmappedArray(
- phMipmappedArray: *mut CUmipmappedArray,
- hTexRef: CUtexref,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetAddressMode(
- pam: *mut CUaddress_mode,
- hTexRef: CUtexref,
- dim: ::std::os::raw::c_int,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetFilterMode(pfm: *mut CUfilter_mode, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetFormat(
- pFormat: *mut CUarray_format,
- pNumChannels: *mut ::std::os::raw::c_int,
- hTexRef: CUtexref,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetMipmapFilterMode(pfm: *mut CUfilter_mode, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetMipmapLevelBias(pbias: *mut f32, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetMipmapLevelClamp(
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the maximum anisotropy for a texture reference
+
+ \deprecated
+
+ Specifies the maximum anisotropy \p maxAniso to be used when reading memory through
+ the texture reference \p hTexRef.
+
+ Note that this call has no effect if \p hTexRef is bound to linear memory.
+
+ \param hTexRef - Texture reference
+ \param maxAniso - Maximum anisotropy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetMaxAnisotropy(
+ hTexRef: cuda_types::CUtexref,
+ maxAniso: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the border color for a texture reference
+
+ \deprecated
+
+ Specifies the value of the RGBA color via the \p pBorderColor to the texture reference
+ \p hTexRef. The color value supports only float type and holds color components in
+ the following sequence:
+ pBorderColor[0] holds 'R' component
+ pBorderColor[1] holds 'G' component
+ pBorderColor[2] holds 'B' component
+ pBorderColor[3] holds 'A' component
+
+ Note that the color values can be set only when the Address mode is set to
+ CU_TR_ADDRESS_MODE_BORDER using ::cuTexRefSetAddressMode.
+ Applications using integer border color values have to "reinterpret_cast" their values to float.
+
+ \param hTexRef - Texture reference
+ \param pBorderColor - RGBA color
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddressMode,
+ ::cuTexRefGetAddressMode, ::cuTexRefGetBorderColor*/
+ fn cuTexRefSetBorderColor(
+ hTexRef: cuda_types::CUtexref,
+ pBorderColor: *mut f32,
+ ) -> cuda_types::CUresult;
+ /** \brief Sets the flags for a texture reference
+
+ \deprecated
+
+ Specifies optional flags via \p Flags to specify the behavior of data
+ returned through the texture reference \p hTexRef. The valid flags are:
+
+ - ::CU_TRSF_READ_AS_INTEGER, which suppresses the default behavior of
+ having the texture promote integer data to floating point data in the
+ range [0, 1]. Note that texture with 32-bit integer format
+ would not be promoted, regardless of whether or not this
+ flag is specified;
+ - ::CU_TRSF_NORMALIZED_COORDINATES, which suppresses the
+ default behavior of having the texture coordinates range
+ from [0, Dim) where Dim is the width or height of the CUDA
+ array. Instead, the texture coordinates [0, 1.0) reference
+ the entire breadth of the array dimension;
+ - ::CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION, which disables any trilinear
+ filtering optimizations. Trilinear optimizations improve texture filtering
+ performance by allowing bilinear filtering on textures in scenarios where
+ it can closely approximate the expected results.
+
+ \param hTexRef - Texture reference
+ \param Flags - Optional flags to set
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefSetFlags(
+ hTexRef: cuda_types::CUtexref,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the address associated with a texture reference
+
+ \deprecated
+
+ Returns in \p *pdptr the base address bound to the texture reference
+ \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ is not bound to any device memory range.
+
+ \param pdptr - Returned device address
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetAddress_v2(
+ pdptr: *mut cuda_types::CUdeviceptr,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the array bound to a texture reference
+
+ \deprecated
+
+ Returns in \p *phArray the CUDA array bound to the texture reference
+ \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ is not bound to any CUDA array.
+
+ \param phArray - Returned array
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetArray(
+ phArray: *mut cuda_types::CUarray,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the mipmapped array bound to a texture reference
+
+ \deprecated
+
+ Returns in \p *phMipmappedArray the CUDA mipmapped array bound to the texture
+ reference \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ is not bound to any CUDA mipmapped array.
+
+ \param phMipmappedArray - Returned mipmapped array
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetMipmappedArray(
+ phMipmappedArray: *mut cuda_types::CUmipmappedArray,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the addressing mode used by a texture reference
+
+ \deprecated
+
+ Returns in \p *pam the addressing mode corresponding to the
+ dimension \p dim of the texture reference \p hTexRef. Currently, the only
+ valid value for \p dim are 0 and 1.
+
+ \param pam - Returned addressing mode
+ \param hTexRef - Texture reference
+ \param dim - Dimension
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetAddressMode(
+ pam: *mut cuda_types::CUaddress_mode,
+ hTexRef: cuda_types::CUtexref,
+ dim: ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the filter-mode used by a texture reference
+
+ \deprecated
+
+ Returns in \p *pfm the filtering mode of the texture reference
+ \p hTexRef.
+
+ \param pfm - Returned filtering mode
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetFilterMode(
+ pfm: *mut cuda_types::CUfilter_mode,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the format used by a texture reference
+
+ \deprecated
+
+ Returns in \p *pFormat and \p *pNumChannels the format and number
+ of components of the CUDA array bound to the texture reference \p hTexRef.
+ If \p pFormat or \p pNumChannels is NULL, it will be ignored.
+
+ \param pFormat - Returned format
+ \param pNumChannels - Returned number of components
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags*/
+ fn cuTexRefGetFormat(
+ pFormat: *mut cuda_types::CUarray_format,
+ pNumChannels: *mut ::core::ffi::c_int,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the mipmap filtering mode for a texture reference
+
+ \deprecated
+
+ Returns the mipmap filtering mode in \p pfm that's used when reading memory through
+ the texture reference \p hTexRef.
+
+ \param pfm - Returned mipmap filtering mode
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetMipmapFilterMode(
+ pfm: *mut cuda_types::CUfilter_mode,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the mipmap level bias for a texture reference
+
+ \deprecated
+
+ Returns the mipmap level bias in \p pBias that's added to the specified mipmap
+ level when reading memory through the texture reference \p hTexRef.
+
+ \param pbias - Returned mipmap level bias
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetMipmapLevelBias(
+ pbias: *mut f32,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the min/max mipmap level clamps for a texture reference
+
+ \deprecated
+
+ Returns the min/max mipmap level clamps in \p pminMipmapLevelClamp and \p pmaxMipmapLevelClamp
+ that's used when reading memory through the texture reference \p hTexRef.
+
+ \param pminMipmapLevelClamp - Returned mipmap min level clamp
+ \param pmaxMipmapLevelClamp - Returned mipmap max level clamp
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetMipmapLevelClamp(
pminMipmapLevelClamp: *mut f32,
pmaxMipmapLevelClamp: *mut f32,
- hTexRef: CUtexref,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetMaxAnisotropy(
- pmaxAniso: *mut ::std::os::raw::c_int,
- hTexRef: CUtexref,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetBorderColor(pBorderColor: *mut f32, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetFlags(pFlags: *mut ::std::os::raw::c_uint, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefCreate(pTexRef: *mut CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefDestroy(hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuSurfRefSetArray(
- hSurfRef: CUsurfref,
- hArray: CUarray,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuSurfRefGetArray(phArray: *mut CUarray, hSurfRef: CUsurfref) -> CUresult;
-}
-extern "C" {
- pub fn cuTexObjectCreate(
- pTexObject: *mut CUtexObject,
- pResDesc: *const CUDA_RESOURCE_DESC,
- pTexDesc: *const CUDA_TEXTURE_DESC,
- pResViewDesc: *const CUDA_RESOURCE_VIEW_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexObjectDestroy(texObject: CUtexObject) -> CUresult;
-}
-extern "C" {
- pub fn cuTexObjectGetResourceDesc(
- pResDesc: *mut CUDA_RESOURCE_DESC,
- texObject: CUtexObject,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexObjectGetTextureDesc(
- pTexDesc: *mut CUDA_TEXTURE_DESC,
- texObject: CUtexObject,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexObjectGetResourceViewDesc(
- pResViewDesc: *mut CUDA_RESOURCE_VIEW_DESC,
- texObject: CUtexObject,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuSurfObjectCreate(
- pSurfObject: *mut CUsurfObject,
- pResDesc: *const CUDA_RESOURCE_DESC,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuSurfObjectDestroy(surfObject: CUsurfObject) -> CUresult;
-}
-extern "C" {
- pub fn cuSurfObjectGetResourceDesc(
- pResDesc: *mut CUDA_RESOURCE_DESC,
- surfObject: CUsurfObject,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTensorMapEncodeTiled(
- tensorMap: *mut CUtensorMap,
- tensorDataType: CUtensorMapDataType,
- tensorRank: cuuint32_t,
- globalAddress: *mut ::std::os::raw::c_void,
- globalDim: *const cuuint64_t,
- globalStrides: *const cuuint64_t,
- boxDim: *const cuuint32_t,
- elementStrides: *const cuuint32_t,
- interleave: CUtensorMapInterleave,
- swizzle: CUtensorMapSwizzle,
- l2Promotion: CUtensorMapL2promotion,
- oobFill: CUtensorMapFloatOOBfill,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTensorMapEncodeIm2col(
- tensorMap: *mut CUtensorMap,
- tensorDataType: CUtensorMapDataType,
- tensorRank: cuuint32_t,
- globalAddress: *mut ::std::os::raw::c_void,
- globalDim: *const cuuint64_t,
- globalStrides: *const cuuint64_t,
- pixelBoxLowerCorner: *const ::std::os::raw::c_int,
- pixelBoxUpperCorner: *const ::std::os::raw::c_int,
- channelsPerPixel: cuuint32_t,
- pixelsPerColumn: cuuint32_t,
- elementStrides: *const cuuint32_t,
- interleave: CUtensorMapInterleave,
- swizzle: CUtensorMapSwizzle,
- l2Promotion: CUtensorMapL2promotion,
- oobFill: CUtensorMapFloatOOBfill,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTensorMapReplaceAddress(
- tensorMap: *mut CUtensorMap,
- globalAddress: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceCanAccessPeer(
- canAccessPeer: *mut ::std::os::raw::c_int,
- dev: CUdevice,
- peerDev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxEnablePeerAccess(peerContext: CUcontext, Flags: ::std::os::raw::c_uint)
- -> CUresult;
-}
-extern "C" {
- pub fn cuCtxDisablePeerAccess(peerContext: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetP2PAttribute(
- value: *mut ::std::os::raw::c_int,
- attrib: CUdevice_P2PAttribute,
- srcDevice: CUdevice,
- dstDevice: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsUnregisterResource(resource: CUgraphicsResource) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsSubResourceGetMappedArray(
- pArray: *mut CUarray,
- resource: CUgraphicsResource,
- arrayIndex: ::std::os::raw::c_uint,
- mipLevel: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceGetMappedMipmappedArray(
- pMipmappedArray: *mut CUmipmappedArray,
- resource: CUgraphicsResource,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceGetMappedPointer_v2(
- pDevPtr: *mut CUdeviceptr,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the maximum anisotropy for a texture reference
+
+ \deprecated
+
+ Returns the maximum anisotropy in \p pmaxAniso that's used when reading memory through
+ the texture reference \p hTexRef.
+
+ \param pmaxAniso - Returned maximum anisotropy
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat*/
+ fn cuTexRefGetMaxAnisotropy(
+ pmaxAniso: *mut ::core::ffi::c_int,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the border color used by a texture reference
+
+ \deprecated
+
+ Returns in \p pBorderColor, values of the RGBA color used by
+ the texture reference \p hTexRef.
+ The color value is of type float and holds color components in
+ the following sequence:
+ pBorderColor[0] holds 'R' component
+ pBorderColor[1] holds 'G' component
+ pBorderColor[2] holds 'B' component
+ pBorderColor[3] holds 'A' component
+
+ \param hTexRef - Texture reference
+ \param pBorderColor - Returned Type and Value of RGBA color
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddressMode,
+ ::cuTexRefSetAddressMode, ::cuTexRefSetBorderColor*/
+ fn cuTexRefGetBorderColor(
+ pBorderColor: *mut f32,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the flags used by a texture reference
+
+ \deprecated
+
+ Returns in \p *pFlags the flags of the texture reference \p hTexRef.
+
+ \param pFlags - Returned flags
+ \param hTexRef - Texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefSetAddress,
+ ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ ::cuTexRefGetFilterMode, ::cuTexRefGetFormat*/
+ fn cuTexRefGetFlags(
+ pFlags: *mut ::core::ffi::c_uint,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a texture reference
+
+ \deprecated
+
+ Creates a texture reference and returns its handle in \p *pTexRef. Once
+ created, the application must call ::cuTexRefSetArray() or
+ ::cuTexRefSetAddress() to associate the reference with allocated memory.
+ Other texture reference functions are used to specify the format and
+ interpretation (addressing, filtering, etc.) to be used when the memory is
+ read through this texture reference.
+
+ \param pTexRef - Returned texture reference
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefDestroy*/
+ fn cuTexRefCreate(pTexRef: *mut cuda_types::CUtexref) -> cuda_types::CUresult;
+ /** \brief Destroys a texture reference
+
+ \deprecated
+
+ Destroys the texture reference specified by \p hTexRef.
+
+ \param hTexRef - Texture reference to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuTexRefCreate*/
+ fn cuTexRefDestroy(hTexRef: cuda_types::CUtexref) -> cuda_types::CUresult;
+ /** \brief Sets the CUDA array for a surface reference.
+
+ \deprecated
+
+ Sets the CUDA array \p hArray to be read and written by the surface reference
+ \p hSurfRef. Any previous CUDA array state associated with the surface
+ reference is superseded by this function. \p Flags must be set to 0.
+ The ::CUDA_ARRAY3D_SURFACE_LDST flag must have been set for the CUDA array.
+ Any CUDA array previously bound to \p hSurfRef is unbound.
+
+ \param hSurfRef - Surface reference handle
+ \param hArray - CUDA array handle
+ \param Flags - set to 0
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuModuleGetSurfRef,
+ ::cuSurfRefGetArray*/
+ fn cuSurfRefSetArray(
+ hSurfRef: cuda_types::CUsurfref,
+ hArray: cuda_types::CUarray,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Passes back the CUDA array bound to a surface reference.
+
+ \deprecated
+
+ Returns in \p *phArray the CUDA array bound to the surface reference
+ \p hSurfRef, or returns ::CUDA_ERROR_INVALID_VALUE if the surface reference
+ is not bound to any CUDA array.
+
+ \param phArray - Surface reference handle
+ \param hSurfRef - Surface reference handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa ::cuModuleGetSurfRef, ::cuSurfRefSetArray*/
+ fn cuSurfRefGetArray(
+ phArray: *mut cuda_types::CUarray,
+ hSurfRef: cuda_types::CUsurfref,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a texture object
+
+ Creates a texture object and returns it in \p pTexObject. \p pResDesc describes
+ the data to texture from. \p pTexDesc describes how the data should be sampled.
+ \p pResViewDesc is an optional argument that specifies an alternate format for
+ the data described by \p pResDesc, and also describes the subresource region
+ to restrict access to when texturing. \p pResViewDesc can only be specified if
+ the type of resource is a CUDA array or a CUDA mipmapped array.
+
+ Texture objects are only supported on devices of compute capability 3.0 or higher.
+ Additionally, a texture object is an opaque value, and, as such, should only be
+ accessed through CUDA API calls.
+
+ The ::CUDA_RESOURCE_DESC structure is defined as:
+ \code
+typedef struct CUDA_RESOURCE_DESC_st
+{
+CUresourcetype resType;
+
+union {
+struct {
+CUarray hArray;
+} array;
+struct {
+CUmipmappedArray hMipmappedArray;
+} mipmap;
+struct {
+CUdeviceptr devPtr;
+CUarray_format format;
+unsigned int numChannels;
+size_t sizeInBytes;
+} linear;
+struct {
+CUdeviceptr devPtr;
+CUarray_format format;
+unsigned int numChannels;
+size_t width;
+size_t height;
+size_t pitchInBytes;
+} pitch2D;
+} res;
+
+unsigned int flags;
+} CUDA_RESOURCE_DESC;
+
+ \endcode
+ where:
+ - ::CUDA_RESOURCE_DESC::resType specifies the type of resource to texture from.
+ CUresourceType is defined as:
+ \code
+typedef enum CUresourcetype_enum {
+CU_RESOURCE_TYPE_ARRAY = 0x00,
+CU_RESOURCE_TYPE_MIPMAPPED_ARRAY = 0x01,
+CU_RESOURCE_TYPE_LINEAR = 0x02,
+CU_RESOURCE_TYPE_PITCH2D = 0x03
+} CUresourcetype;
+ \endcode
+
+ \par
+ If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_ARRAY, ::CUDA_RESOURCE_DESC::res::array::hArray
+ must be set to a valid CUDA array handle.
+
+ \par
+ If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_MIPMAPPED_ARRAY, ::CUDA_RESOURCE_DESC::res::mipmap::hMipmappedArray
+ must be set to a valid CUDA mipmapped array handle.
+
+ \par
+ If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_LINEAR, ::CUDA_RESOURCE_DESC::res::linear::devPtr
+ must be set to a valid device pointer, that is aligned to ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT.
+ ::CUDA_RESOURCE_DESC::res::linear::format and ::CUDA_RESOURCE_DESC::res::linear::numChannels
+ describe the format of each component and the number of components per array element. ::CUDA_RESOURCE_DESC::res::linear::sizeInBytes
+ specifies the size of the array in bytes. The total number of elements in the linear address range cannot exceed
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH. The number of elements is computed as (sizeInBytes / (sizeof(format) * numChannels)).
+
+ \par
+ If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_PITCH2D, ::CUDA_RESOURCE_DESC::res::pitch2D::devPtr
+ must be set to a valid device pointer, that is aligned to ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT.
+ ::CUDA_RESOURCE_DESC::res::pitch2D::format and ::CUDA_RESOURCE_DESC::res::pitch2D::numChannels
+ describe the format of each component and the number of components per array element. ::CUDA_RESOURCE_DESC::res::pitch2D::width
+ and ::CUDA_RESOURCE_DESC::res::pitch2D::height specify the width and height of the array in elements, and cannot exceed
+ ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH and ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT respectively.
+ ::CUDA_RESOURCE_DESC::res::pitch2D::pitchInBytes specifies the pitch between two rows in bytes and has to be aligned to
+ ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT. Pitch cannot exceed ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH.
+
+ - ::flags must be set to zero.
+
+
+ The ::CUDA_TEXTURE_DESC struct is defined as
+ \code
+typedef struct CUDA_TEXTURE_DESC_st {
+CUaddress_mode addressMode[3];
+CUfilter_mode filterMode;
+unsigned int flags;
+unsigned int maxAnisotropy;
+CUfilter_mode mipmapFilterMode;
+float mipmapLevelBias;
+float minMipmapLevelClamp;
+float maxMipmapLevelClamp;
+} CUDA_TEXTURE_DESC;
+ \endcode
+ where
+ - ::CUDA_TEXTURE_DESC::addressMode specifies the addressing mode for each dimension of the texture data. ::CUaddress_mode is defined as:
+ \code
+typedef enum CUaddress_mode_enum {
+CU_TR_ADDRESS_MODE_WRAP = 0,
+CU_TR_ADDRESS_MODE_CLAMP = 1,
+CU_TR_ADDRESS_MODE_MIRROR = 2,
+CU_TR_ADDRESS_MODE_BORDER = 3
+} CUaddress_mode;
+ \endcode
+ This is ignored if ::CUDA_RESOURCE_DESC::resType is ::CU_RESOURCE_TYPE_LINEAR. Also, if the flag, ::CU_TRSF_NORMALIZED_COORDINATES
+ is not set, the only supported address mode is ::CU_TR_ADDRESS_MODE_CLAMP.
+
+ - ::CUDA_TEXTURE_DESC::filterMode specifies the filtering mode to be used when fetching from the texture. CUfilter_mode is defined as:
+ \code
+typedef enum CUfilter_mode_enum {
+CU_TR_FILTER_MODE_POINT = 0,
+CU_TR_FILTER_MODE_LINEAR = 1
+} CUfilter_mode;
+ \endcode
+ This is ignored if ::CUDA_RESOURCE_DESC::resType is ::CU_RESOURCE_TYPE_LINEAR.
+
+ - ::CUDA_TEXTURE_DESC::flags can be any combination of the following:
+ - ::CU_TRSF_READ_AS_INTEGER, which suppresses the default behavior of
+ having the texture promote integer data to floating point data in the
+ range [0, 1]. Note that texture with 32-bit integer format would not be
+ promoted, regardless of whether or not this flag is specified.
+ - ::CU_TRSF_NORMALIZED_COORDINATES, which suppresses the default behavior
+ of having the texture coordinates range from [0, Dim) where Dim is the
+ width or height of the CUDA array. Instead, the texture coordinates
+ [0, 1.0) reference the entire breadth of the array dimension; Note that
+ for CUDA mipmapped arrays, this flag has to be set.
+ - ::CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION, which disables any trilinear
+ filtering optimizations. Trilinear optimizations improve texture filtering
+ performance by allowing bilinear filtering on textures in scenarios where
+ it can closely approximate the expected results.
+ - ::CU_TRSF_SEAMLESS_CUBEMAP, which enables seamless cube map filtering.
+ This flag can only be specified if the underlying resource is a CUDA array
+ or a CUDA mipmapped array that was created with the flag ::CUDA_ARRAY3D_CUBEMAP.
+ When seamless cube map filtering is enabled, texture address modes specified
+ by ::CUDA_TEXTURE_DESC::addressMode are ignored. Instead, if the ::CUDA_TEXTURE_DESC::filterMode
+ is set to ::CU_TR_FILTER_MODE_POINT the address mode ::CU_TR_ADDRESS_MODE_CLAMP
+ will be applied for all dimensions. If the ::CUDA_TEXTURE_DESC::filterMode is
+ set to ::CU_TR_FILTER_MODE_LINEAR seamless cube map filtering will be performed
+ when sampling along the cube face borders.
+
+ - ::CUDA_TEXTURE_DESC::maxAnisotropy specifies the maximum anisotropy ratio to be used when doing anisotropic filtering. This value will be
+ clamped to the range [1,16].
+
+ - ::CUDA_TEXTURE_DESC::mipmapFilterMode specifies the filter mode when the calculated mipmap level lies between two defined mipmap levels.
+
+ - ::CUDA_TEXTURE_DESC::mipmapLevelBias specifies the offset to be applied to the calculated mipmap level.
+
+ - ::CUDA_TEXTURE_DESC::minMipmapLevelClamp specifies the lower end of the mipmap level range to clamp access to.
+
+ - ::CUDA_TEXTURE_DESC::maxMipmapLevelClamp specifies the upper end of the mipmap level range to clamp access to.
+
+
+ The ::CUDA_RESOURCE_VIEW_DESC struct is defined as
+ \code
+typedef struct CUDA_RESOURCE_VIEW_DESC_st
+{
+CUresourceViewFormat format;
+size_t width;
+size_t height;
+size_t depth;
+unsigned int firstMipmapLevel;
+unsigned int lastMipmapLevel;
+unsigned int firstLayer;
+unsigned int lastLayer;
+} CUDA_RESOURCE_VIEW_DESC;
+ \endcode
+ where:
+ - ::CUDA_RESOURCE_VIEW_DESC::format specifies how the data contained in the CUDA array or CUDA mipmapped array should
+ be interpreted. Note that this can incur a change in size of the texture data. If the resource view format is a block
+ compressed format, then the underlying CUDA array or CUDA mipmapped array has to have a base of format ::CU_AD_FORMAT_UNSIGNED_INT32.
+ with 2 or 4 channels, depending on the block compressed format. For ex., BC1 and BC4 require the underlying CUDA array to have
+ a format of ::CU_AD_FORMAT_UNSIGNED_INT32 with 2 channels. The other BC formats require the underlying resource to have the same base
+ format but with 4 channels.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::width specifies the new width of the texture data. If the resource view format is a block
+ compressed format, this value has to be 4 times the original width of the resource. For non block compressed formats,
+ this value has to be equal to that of the original resource.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::height specifies the new height of the texture data. If the resource view format is a block
+ compressed format, this value has to be 4 times the original height of the resource. For non block compressed formats,
+ this value has to be equal to that of the original resource.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::depth specifies the new depth of the texture data. This value has to be equal to that of the
+ original resource.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::firstMipmapLevel specifies the most detailed mipmap level. This will be the new mipmap level zero.
+ For non-mipmapped resources, this value has to be zero.::CUDA_TEXTURE_DESC::minMipmapLevelClamp and ::CUDA_TEXTURE_DESC::maxMipmapLevelClamp
+ will be relative to this value. For ex., if the firstMipmapLevel is set to 2, and a minMipmapLevelClamp of 1.2 is specified,
+ then the actual minimum mipmap level clamp will be 3.2.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::lastMipmapLevel specifies the least detailed mipmap level. For non-mipmapped resources, this value
+ has to be zero.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::firstLayer specifies the first layer index for layered textures. This will be the new layer zero.
+ For non-layered resources, this value has to be zero.
+
+ - ::CUDA_RESOURCE_VIEW_DESC::lastLayer specifies the last layer index for layered textures. For non-layered resources,
+ this value has to be zero.
+
+
+ \param pTexObject - Texture object to create
+ \param pResDesc - Resource descriptor
+ \param pTexDesc - Texture descriptor
+ \param pResViewDesc - Resource view descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexObjectDestroy,
+ ::cudaCreateTextureObject*/
+ fn cuTexObjectCreate(
+ pTexObject: *mut cuda_types::CUtexObject,
+ pResDesc: *const cuda_types::CUDA_RESOURCE_DESC,
+ pTexDesc: *const cuda_types::CUDA_TEXTURE_DESC,
+ pResViewDesc: *const cuda_types::CUDA_RESOURCE_VIEW_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys a texture object
+
+ Destroys the texture object specified by \p texObject.
+
+ \param texObject - Texture object to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexObjectCreate,
+ ::cudaDestroyTextureObject*/
+ fn cuTexObjectDestroy(texObject: cuda_types::CUtexObject) -> cuda_types::CUresult;
+ /** \brief Returns a texture object's resource descriptor
+
+ Returns the resource descriptor for the texture object specified by \p texObject.
+
+ \param pResDesc - Resource descriptor
+ \param texObject - Texture object
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexObjectCreate,
+ ::cudaGetTextureObjectResourceDesc,*/
+ fn cuTexObjectGetResourceDesc(
+ pResDesc: *mut cuda_types::CUDA_RESOURCE_DESC,
+ texObject: cuda_types::CUtexObject,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a texture object's texture descriptor
+
+ Returns the texture descriptor for the texture object specified by \p texObject.
+
+ \param pTexDesc - Texture descriptor
+ \param texObject - Texture object
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexObjectCreate,
+ ::cudaGetTextureObjectTextureDesc*/
+ fn cuTexObjectGetTextureDesc(
+ pTexDesc: *mut cuda_types::CUDA_TEXTURE_DESC,
+ texObject: cuda_types::CUtexObject,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns a texture object's resource view descriptor
+
+ Returns the resource view descriptor for the texture object specified by \p texObject.
+ If no resource view was set for \p texObject, the ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \param pResViewDesc - Resource view descriptor
+ \param texObject - Texture object
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTexObjectCreate,
+ ::cudaGetTextureObjectResourceViewDesc*/
+ fn cuTexObjectGetResourceViewDesc(
+ pResViewDesc: *mut cuda_types::CUDA_RESOURCE_VIEW_DESC,
+ texObject: cuda_types::CUtexObject,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a surface object
+
+ Creates a surface object and returns it in \p pSurfObject. \p pResDesc describes
+ the data to perform surface load/stores on. ::CUDA_RESOURCE_DESC::resType must be
+ ::CU_RESOURCE_TYPE_ARRAY and ::CUDA_RESOURCE_DESC::res::array::hArray
+ must be set to a valid CUDA array handle. ::CUDA_RESOURCE_DESC::flags must be set to zero.
+
+ Surface objects are only supported on devices of compute capability 3.0 or higher.
+ Additionally, a surface object is an opaque value, and, as such, should only be
+ accessed through CUDA API calls.
+
+ \param pSurfObject - Surface object to create
+ \param pResDesc - Resource descriptor
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuSurfObjectDestroy,
+ ::cudaCreateSurfaceObject*/
+ fn cuSurfObjectCreate(
+ pSurfObject: *mut cuda_types::CUsurfObject,
+ pResDesc: *const cuda_types::CUDA_RESOURCE_DESC,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys a surface object
+
+ Destroys the surface object specified by \p surfObject.
+
+ \param surfObject - Surface object to destroy
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuSurfObjectCreate,
+ ::cudaDestroySurfaceObject*/
+ fn cuSurfObjectDestroy(surfObject: cuda_types::CUsurfObject) -> cuda_types::CUresult;
+ /** \brief Returns a surface object's resource descriptor
+
+ Returns the resource descriptor for the surface object specified by \p surfObject.
+
+ \param pResDesc - Resource descriptor
+ \param surfObject - Surface object
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuSurfObjectCreate,
+ ::cudaGetSurfaceObjectResourceDesc*/
+ fn cuSurfObjectGetResourceDesc(
+ pResDesc: *mut cuda_types::CUDA_RESOURCE_DESC,
+ surfObject: cuda_types::CUsurfObject,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a tensor map descriptor object representing tiled memory region
+
+ Creates a descriptor for Tensor Memory Access (TMA) object specified
+ by the parameters describing a tiled region and returns it in \p tensorMap.
+
+ Tensor map objects are only supported on devices of compute capability 9.0 or higher.
+ Additionally, a tensor map object is an opaque value, and, as such, should only be
+ accessed through CUDA API calls.
+
+ The parameters passed are bound to the following requirements:
+
+ - \p tensorMap address must be aligned to 64 bytes.
+
+ - \p tensorDataType has to be an enum from ::CUtensorMapDataType which is defined as:
+ \code
+typedef enum CUtensorMapDataType_enum {
+CU_TENSOR_MAP_DATA_TYPE_UINT8 = 0, // 1 byte
+CU_TENSOR_MAP_DATA_TYPE_UINT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_UINT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_INT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_UINT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_INT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_BFLOAT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT32_FTZ, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_TFLOAT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_TFLOAT32_FTZ // 4 bytes
+} CUtensorMapDataType;
+ \endcode
+
+ - \p tensorRank must be non-zero and less than or equal to the maximum supported dimensionality of 5. If \p interleave is not
+ ::CU_TENSOR_MAP_INTERLEAVE_NONE, then \p tensorRank must additionally be greater than or equal to 3.
+
+ - \p globalAddress, which specifies the starting address of the memory region described, must be 32 byte aligned when \p interleave is
+ ::CU_TENSOR_MAP_INTERLEAVE_32B and 16 byte aligned otherwise.
+
+ - \p globalDim array, which specifies tensor size of each of the \p tensorRank dimensions, must be non-zero and less than or
+ equal to 2^32.
+
+ - \p globalStrides array, which specifies tensor stride of each of the lower \p tensorRank - 1 dimensions in bytes, must be a
+ multiple of 16 and less than 2^40. Additionally, the stride must be a multiple of 32 when \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_32B.
+ Each following dimension specified includes previous dimension stride:
+ \code
+globalStrides[0] = globalDim[0] * elementSizeInBytes(tensorDataType) + padding[0];
+for (i = 1; i < tensorRank - 1; i++)
+globalStrides[i] = globalStrides[i – 1] * (globalDim[i] + padding[i]);
+assert(globalStrides[i] >= globalDim[i]);
+ \endcode
+
+ - \p boxDim array, which specifies number of elements to be traversed along each of the \p tensorRank dimensions, must be non-zero
+ and less than or equal to 256.
+ When \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_NONE, { \p boxDim[0] * elementSizeInBytes( \p tensorDataType ) } must be a multiple
+ of 16 bytes.
+
+ - \p elementStrides array, which specifies the iteration step along each of the \p tensorRank dimensions, must be non-zero and less
+ than or equal to 8. Note that when \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_NONE, the first element of this array is ignored since
+ TMA doesn’t support the stride for dimension zero.
+ When all elements of \p elementStrides array is one, \p boxDim specifies the number of elements to load. However, if the \p elementStrides[i]
+ is not equal to one, then TMA loads ceil( \p boxDim[i] / \p elementStrides[i]) number of elements along i-th dimension. To load N elements along
+ i-th dimension, \p boxDim[i] must be set to N * \p elementStrides[i].
+
+ - \p interleave specifies the interleaved layout of type ::CUtensorMapInterleave, which is defined as:
+ \code
+typedef enum CUtensorMapInterleave_enum {
+CU_TENSOR_MAP_INTERLEAVE_NONE = 0,
+CU_TENSOR_MAP_INTERLEAVE_16B,
+CU_TENSOR_MAP_INTERLEAVE_32B
+} CUtensorMapInterleave;
+ \endcode
+ TMA supports interleaved layouts like NC/8HWC8 where C8 utilizes 16 bytes in memory assuming 2 byte per channel or NC/16HWC16 where C16
+ uses 32 bytes.
+ When \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_NONE and \p swizzle is not ::CU_TENSOR_MAP_SWIZZLE_NONE, the bounding box inner dimension
+ (computed as \p boxDim[0] multiplied by element size derived from \p tensorDataType) must be less than or equal to the swizzle size.
+ - CU_TENSOR_MAP_SWIZZLE_32B implies the bounding box inner dimension will be <= 32.
+ - CU_TENSOR_MAP_SWIZZLE_64B implies the bounding box inner dimension will be <= 64.
+ - CU_TENSOR_MAP_SWIZZLE_128B implies the bounding box inner dimension will be <= 128.
+
+ - \p swizzle, which specifies the shared memory bank swizzling pattern, has to be of type ::CUtensorMapSwizzle which is defined as:
+ \code
+typedef enum CUtensorMapSwizzle_enum {
+CU_TENSOR_MAP_SWIZZLE_NONE = 0,
+CU_TENSOR_MAP_SWIZZLE_32B,
+CU_TENSOR_MAP_SWIZZLE_64B,
+CU_TENSOR_MAP_SWIZZLE_128B
+} CUtensorMapSwizzle;
+ \endcode
+ Data are organized in a specific order in global memory; however, this may not match the order in which the application accesses data
+ in shared memory. This difference in data organization may cause bank conflicts when shared memory is accessed. In order to avoid this
+ problem, data can be loaded to shared memory with shuffling across shared memory banks.
+ When \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_32B, \p swizzle must be ::CU_TENSOR_MAP_SWIZZLE_32B.
+ Other interleave modes can have any swizzling pattern.
+
+ - \p l2Promotion specifies L2 fetch size which indicates the byte granurality at which L2 requests is filled from DRAM. It must be of
+ type ::CUtensorMapL2promotion, which is defined as:
+ \code
+typedef enum CUtensorMapL2promotion_enum {
+CU_TENSOR_MAP_L2_PROMOTION_NONE = 0,
+CU_TENSOR_MAP_L2_PROMOTION_L2_64B,
+CU_TENSOR_MAP_L2_PROMOTION_L2_128B,
+CU_TENSOR_MAP_L2_PROMOTION_L2_256B
+} CUtensorMapL2promotion;
+ \endcode
+
+ - \p oobFill, which indicates whether zero or a special NaN constant should be used to fill out-of-bound elements, must be of type
+ ::CUtensorMapFloatOOBfill which is defined as:
+ \code
+typedef enum CUtensorMapFloatOOBfill_enum {
+CU_TENSOR_MAP_FLOAT_OOB_FILL_NONE = 0,
+CU_TENSOR_MAP_FLOAT_OOB_FILL_NAN_REQUEST_ZERO_FMA
+} CUtensorMapFloatOOBfill;
+ \endcode
+ Note that ::CU_TENSOR_MAP_FLOAT_OOB_FILL_NAN_REQUEST_ZERO_FMA can only be used when \p tensorDataType represents a floating-point data type.
+
+ \param tensorMap - Tensor map object to create
+ \param tensorDataType - Tensor data type
+ \param tensorRank - Dimensionality of tensor
+ \param globalAddress - Starting address of memory region described by tensor
+ \param globalDim - Array containing tensor size (number of elements) along each of the \p tensorRank dimensions
+ \param globalStrides - Array containing stride size (in bytes) along each of the \p tensorRank - 1 dimensions
+ \param boxDim - Array containing traversal box size (number of elments) along each of the \p tensorRank dimensions. Specifies how many elements to be traversed along each tensor dimension.
+ \param elementStrides - Array containing traversal stride in each of the \p tensorRank dimensions
+ \param interleave - Type of interleaved layout the tensor addresses
+ \param swizzle - Bank swizzling pattern inside shared memory
+ \param l2Promotion - L2 promotion size
+ \param oobFill - Indicate whether zero or special NaN constant must be used to fill out-of-bound elements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTensorMapEncodeIm2col,
+ ::cuTensorMapReplaceAddress*/
+ fn cuTensorMapEncodeTiled(
+ tensorMap: *mut cuda_types::CUtensorMap,
+ tensorDataType: cuda_types::CUtensorMapDataType,
+ tensorRank: cuda_types::cuuint32_t,
+ globalAddress: *mut ::core::ffi::c_void,
+ globalDim: *const cuda_types::cuuint64_t,
+ globalStrides: *const cuda_types::cuuint64_t,
+ boxDim: *const cuda_types::cuuint32_t,
+ elementStrides: *const cuda_types::cuuint32_t,
+ interleave: cuda_types::CUtensorMapInterleave,
+ swizzle: cuda_types::CUtensorMapSwizzle,
+ l2Promotion: cuda_types::CUtensorMapL2promotion,
+ oobFill: cuda_types::CUtensorMapFloatOOBfill,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a tensor map descriptor object representing im2col memory region
+
+ Creates a descriptor for Tensor Memory Access (TMA) object specified
+ by the parameters describing a im2col memory layout and returns it in \p tensorMap.
+
+ Tensor map objects are only supported on devices of compute capability 9.0 or higher.
+ Additionally, a tensor map object is an opaque value, and, as such, should only be
+ accessed through CUDA API calls.
+
+ The parameters passed are bound to the following requirements:
+
+ - \p tensorMap address must be aligned to 64 bytes.
+
+ - \p tensorDataType has to be an enum from ::CUtensorMapDataType which is defined as:
+ \code
+typedef enum CUtensorMapDataType_enum {
+CU_TENSOR_MAP_DATA_TYPE_UINT8 = 0, // 1 byte
+CU_TENSOR_MAP_DATA_TYPE_UINT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_UINT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_INT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_UINT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_INT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT64, // 8 bytes
+CU_TENSOR_MAP_DATA_TYPE_BFLOAT16, // 2 bytes
+CU_TENSOR_MAP_DATA_TYPE_FLOAT32_FTZ, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_TFLOAT32, // 4 bytes
+CU_TENSOR_MAP_DATA_TYPE_TFLOAT32_FTZ // 4 bytes
+} CUtensorMapDataType;
+ \endcode
+
+ - \p tensorRank, which specifies the number of tensor dimensions, must be 3, 4, or 5.
+
+ - \p globalAddress, which specifies the starting address of the memory region described, must be 32 byte aligned when \p interleave is
+ ::CU_TENSOR_MAP_INTERLEAVE_32B and 16 byte aligned otherwise.
+
+ - \p globalDim array, which specifies tensor size of each of the \p tensorRank dimensions, must be non-zero and less than or
+ equal to 2^32.
+
+ - \p globalStrides array, which specifies tensor stride of each of the lower \p tensorRank - 1 dimensions in bytes, must be a
+ multiple of 16 and less than 2^40. Additionally, the stride must be a multiple of 32 when \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_32B.
+ Each following dimension specified includes previous dimension stride:
+ \code
+globalStrides[0] = globalDim[0] * elementSizeInBytes(tensorDataType) + padding[0];
+for (i = 1; i < tensorRank - 1; i++)
+globalStrides[i] = globalStrides[i – 1] * (globalDim[i] + padding[i]);
+assert(globalStrides[i] >= globalDim[i]);
+ \endcode
+
+ - \p pixelBoxLowerCorner array specifies the coordinate offsets {D, H, W} of the bounding box from top/left/front corner. The number of
+ offsets and their precision depend on the tensor dimensionality:
+ - When \p tensorRank is 3, one signed offset within range [-32768, 32767] is supported.
+ - When \p tensorRank is 4, two signed offsets each within range [-128, 127] are supported.
+ - When \p tensorRank is 5, three offsets each within range [-16, 15] are supported.
+
+ - \p pixelBoxUpperCorner array specifies the coordinate offsets {D, H, W} of the bounding box from bottom/right/back corner. The number of
+ offsets and their precision depend on the tensor dimensionality:
+ - When \p tensorRank is 3, one signed offset within range [-32768, 32767] is supported.
+ - When \p tensorRank is 4, two signed offsets each within range [-128, 127] are supported.
+ - When \p tensorRank is 5, three offsets each within range [-16, 15] are supported.
+ The bounding box specified by \p pixelBoxLowerCorner and \p pixelBoxUpperCorner must have non-zero area.
+
+ - \p channelsPerPixel, which specifies the number of elements which must be accessed along C dimension, must be less than or equal to 256.
+
+ - \p pixelsPerColumn, which specifies the number of elements that must be accessed along the {N, D, H, W} dimensions, must be less than or
+ equal to 1024.
+
+ - \p elementStrides array, which specifies the iteration step along each of the \p tensorRank dimensions, must be non-zero and less
+ than or equal to 8. Note that when \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_NONE, the first element of this array is ignored since
+ TMA doesn’t support the stride for dimension zero.
+ When all elements of the \p elementStrides array are one, \p boxDim specifies the number of elements to load. However, if \p elementStrides[i]
+ is not equal to one for some \p i, then TMA loads ceil( \p boxDim[i] / \p elementStrides[i]) number of elements along i-th dimension.
+ To load N elements along i-th dimension, \p boxDim[i] must be set to N * \p elementStrides[i].
+
+ - \p interleave specifies the interleaved layout of type ::CUtensorMapInterleave, which is defined as:
+ \code
+typedef enum CUtensorMapInterleave_enum {
+CU_TENSOR_MAP_INTERLEAVE_NONE = 0,
+CU_TENSOR_MAP_INTERLEAVE_16B,
+CU_TENSOR_MAP_INTERLEAVE_32B
+} CUtensorMapInterleave;
+ \endcode
+ TMA supports interleaved layouts like NC/8HWC8 where C8 utilizes 16 bytes in memory assuming 2 byte per channel or NC/16HWC16 where C16
+ uses 32 bytes.
+ When \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_NONE and \p swizzle is not ::CU_TENSOR_MAP_SWIZZLE_NONE, the bounding box inner dimension
+ (computed as \p boxDim[0] multiplied by element size derived from \p tensorDataType) must be less than or equal to the swizzle size.
+ - CU_TENSOR_MAP_SWIZZLE_32B implies the bounding box inner dimension will be <= 32.
+ - CU_TENSOR_MAP_SWIZZLE_64B implies the bounding box inner dimension will be <= 64.
+ - CU_TENSOR_MAP_SWIZZLE_128B implies the bounding box inner dimension will be <= 128.
+
+ - \p swizzle, which specifies the shared memory bank swizzling pattern, has to be of type ::CUtensorMapSwizzle which is defined as:
+ \code
+typedef enum CUtensorMapSwizzle_enum {
+CU_TENSOR_MAP_SWIZZLE_NONE = 0,
+CU_TENSOR_MAP_SWIZZLE_32B,
+CU_TENSOR_MAP_SWIZZLE_64B,
+CU_TENSOR_MAP_SWIZZLE_128B
+} CUtensorMapSwizzle;
+ \endcode
+ Data are organized in a specific order in global memory; however, this may not match the order in which the application accesses data
+ in shared memory. This difference in data organization may cause bank conflicts when shared memory is accessed. In order to avoid this
+ problem, data can be loaded to shared memory with shuffling across shared memory banks.
+ When \p interleave is ::CU_TENSOR_MAP_INTERLEAVE_32B, \p swizzle must be ::CU_TENSOR_MAP_SWIZZLE_32B.
+ Other interleave modes can have any swizzling pattern.
+
+ - \p l2Promotion specifies L2 fetch size which indicates the byte granularity at which L2 requests are filled from DRAM. It must be of
+ type ::CUtensorMapL2promotion, which is defined as:
+ \code
+typedef enum CUtensorMapL2promotion_enum {
+CU_TENSOR_MAP_L2_PROMOTION_NONE = 0,
+CU_TENSOR_MAP_L2_PROMOTION_L2_64B,
+CU_TENSOR_MAP_L2_PROMOTION_L2_128B,
+CU_TENSOR_MAP_L2_PROMOTION_L2_256B
+} CUtensorMapL2promotion;
+ \endcode
+
+ - \p oobFill, which indicates whether zero or a special NaN constant should be used to fill out-of-bound elements, must be of type
+ ::CUtensorMapFloatOOBfill which is defined as:
+ \code
+typedef enum CUtensorMapFloatOOBfill_enum {
+CU_TENSOR_MAP_FLOAT_OOB_FILL_NONE = 0,
+CU_TENSOR_MAP_FLOAT_OOB_FILL_NAN_REQUEST_ZERO_FMA
+} CUtensorMapFloatOOBfill;
+ \endcode
+ Note that ::CU_TENSOR_MAP_FLOAT_OOB_FILL_NAN_REQUEST_ZERO_FMA can only be used when \p tensorDataType represents a floating-point data type.
+
+ \param tensorMap - Tensor map object to create
+ \param tensorDataType - Tensor data type
+ \param tensorRank - Dimensionality of tensor; must be at least 3
+ \param globalAddress - Starting address of memory region described by tensor
+ \param globalDim - Array containing tensor size (number of elements) along each of the \p tensorRank dimensions
+ \param globalStrides - Array containing stride size (in bytes) along each of the \p tensorRank - 1 dimensions
+ \param pixelBoxLowerCorner - Array containing DHW dimensions of lower box corner
+ \param pixelBoxUpperCorner - Array containing DHW dimensions of upper box corner
+ \param channelsPerPixel - Number of channels per pixel
+ \param pixelsPerColumn - Number of pixels per column
+ \param elementStrides - Array containing traversal stride in each of the \p tensorRank dimensions
+ \param interleave - Type of interleaved layout the tensor addresses
+ \param swizzle - Bank swizzling pattern inside shared memory
+ \param l2Promotion - L2 promotion size
+ \param oobFill - Indicate whether zero or special NaN constant will be used to fill out-of-bound elements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTensorMapEncodeTiled,
+ ::cuTensorMapReplaceAddress*/
+ fn cuTensorMapEncodeIm2col(
+ tensorMap: *mut cuda_types::CUtensorMap,
+ tensorDataType: cuda_types::CUtensorMapDataType,
+ tensorRank: cuda_types::cuuint32_t,
+ globalAddress: *mut ::core::ffi::c_void,
+ globalDim: *const cuda_types::cuuint64_t,
+ globalStrides: *const cuda_types::cuuint64_t,
+ pixelBoxLowerCorner: *const ::core::ffi::c_int,
+ pixelBoxUpperCorner: *const ::core::ffi::c_int,
+ channelsPerPixel: cuda_types::cuuint32_t,
+ pixelsPerColumn: cuda_types::cuuint32_t,
+ elementStrides: *const cuda_types::cuuint32_t,
+ interleave: cuda_types::CUtensorMapInterleave,
+ swizzle: cuda_types::CUtensorMapSwizzle,
+ l2Promotion: cuda_types::CUtensorMapL2promotion,
+ oobFill: cuda_types::CUtensorMapFloatOOBfill,
+ ) -> cuda_types::CUresult;
+ /** \brief Modify an existing tensor map descriptor with an updated global address
+
+ Modifies the descriptor for Tensor Memory Access (TMA) object passed in \p tensorMap with
+ an updated \p globalAddress.
+
+ Tensor map objects are only supported on devices of compute capability 9.0 or higher.
+ Additionally, a tensor map object is an opaque value, and, as such, should only be
+ accessed through CUDA API calls.
+
+ \param tensorMap - Tensor map object to modify
+ \param globalAddress - Starting address of memory region described by tensor, must follow previous alignment requirements
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuTensorMapEncodeTiled,
+ ::cuTensorMapEncodeIm2col*/
+ fn cuTensorMapReplaceAddress(
+ tensorMap: *mut cuda_types::CUtensorMap,
+ globalAddress: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Queries if a device may directly access a peer device's memory.
+
+ Returns in \p *canAccessPeer a value of 1 if contexts on \p dev are capable of
+ directly accessing memory from contexts on \p peerDev and 0 otherwise.
+ If direct access of \p peerDev from \p dev is possible, then access may be
+ enabled on two specific contexts by calling ::cuCtxEnablePeerAccess().
+
+ \param canAccessPeer - Returned access capability
+ \param dev - Device from which allocations on \p peerDev are to
+ be directly accessed.
+ \param peerDev - Device on which the allocations to be directly accessed
+ by \p dev reside.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE
+ \notefnerr
+
+ \sa
+ ::cuCtxEnablePeerAccess,
+ ::cuCtxDisablePeerAccess,
+ ::cudaDeviceCanAccessPeer*/
+ fn cuDeviceCanAccessPeer(
+ canAccessPeer: *mut ::core::ffi::c_int,
+ dev: cuda_types::CUdevice,
+ peerDev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Enables direct access to memory allocations in a peer context.
+
+ If both the current context and \p peerContext are on devices which support unified
+ addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING) and same
+ major compute capability, then on success all allocations from \p peerContext will
+ immediately be accessible by the current context. See \ref CUDA_UNIFIED for additional
+ details.
+
+ Note that access granted by this call is unidirectional and that in order to access
+ memory from the current context in \p peerContext, a separate symmetric call
+ to ::cuCtxEnablePeerAccess() is required.
+
+ Note that there are both device-wide and system-wide limitations per system
+ configuration, as noted in the CUDA Programming Guide under the section
+ "Peer-to-Peer Memory Access".
+
+ Returns ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED if ::cuDeviceCanAccessPeer() indicates
+ that the ::CUdevice of the current context cannot directly access memory
+ from the ::CUdevice of \p peerContext.
+
+ Returns ::CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED if direct access of
+ \p peerContext from the current context has already been enabled.
+
+ Returns ::CUDA_ERROR_TOO_MANY_PEERS if direct peer access is not possible
+ because hardware resources required for peer access have been exhausted.
+
+ Returns ::CUDA_ERROR_INVALID_CONTEXT if there is no current context, \p peerContext
+ is not a valid context, or if the current context is \p peerContext.
+
+ Returns ::CUDA_ERROR_INVALID_VALUE if \p Flags is not 0.
+
+ \param peerContext - Peer context to enable direct access to from the current context
+ \param Flags - Reserved for future use and must be set to 0
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED,
+ ::CUDA_ERROR_TOO_MANY_PEERS,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuDeviceCanAccessPeer,
+ ::cuCtxDisablePeerAccess,
+ ::cudaDeviceEnablePeerAccess*/
+ fn cuCtxEnablePeerAccess(
+ peerContext: cuda_types::CUcontext,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Disables direct access to memory allocations in a peer context and
+ unregisters any registered allocations.
+
+Returns ::CUDA_ERROR_PEER_ACCESS_NOT_ENABLED if direct peer access has
+ not yet been enabled from \p peerContext to the current context.
+
+ Returns ::CUDA_ERROR_INVALID_CONTEXT if there is no current context, or if
+ \p peerContext is not a valid context.
+
+ \param peerContext - Peer context to disable direct access to
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_PEER_ACCESS_NOT_ENABLED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ \notefnerr
+
+ \sa
+ ::cuDeviceCanAccessPeer,
+ ::cuCtxEnablePeerAccess,
+ ::cudaDeviceDisablePeerAccess*/
+ fn cuCtxDisablePeerAccess(
+ peerContext: cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ /** \brief Queries attributes of the link between two devices.
+
+ Returns in \p *value the value of the requested attribute \p attrib of the
+ link between \p srcDevice and \p dstDevice. The supported attributes are:
+ - ::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: A relative value indicating the
+ performance of the link between two devices.
+ - ::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P: 1 if P2P Access is enable.
+ - ::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1 if Atomic operations over
+ the link are supported.
+ - ::CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED: 1 if cudaArray can
+ be accessed over the link.
+
+ Returns ::CUDA_ERROR_INVALID_DEVICE if \p srcDevice or \p dstDevice are not valid
+ or if they represent the same device.
+
+ Returns ::CUDA_ERROR_INVALID_VALUE if \p attrib is not valid or if \p value is
+ a null pointer.
+
+ \param value - Returned value of the requested attribute
+ \param attrib - The requested attribute of the link between \p srcDevice and \p dstDevice.
+ \param srcDevice - The source device of the target link.
+ \param dstDevice - The destination device of the target link.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa
+ ::cuCtxEnablePeerAccess,
+ ::cuCtxDisablePeerAccess,
+ ::cuDeviceCanAccessPeer,
+ ::cudaDeviceGetP2PAttribute*/
+ fn cuDeviceGetP2PAttribute(
+ value: *mut ::core::ffi::c_int,
+ attrib: cuda_types::CUdevice_P2PAttribute,
+ srcDevice: cuda_types::CUdevice,
+ dstDevice: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Unregisters a graphics resource for access by CUDA
+
+ Unregisters the graphics resource \p resource so it is not accessible by
+ CUDA unless registered again.
+
+ If \p resource is invalid then ::CUDA_ERROR_INVALID_HANDLE is
+ returned.
+
+ \param resource - Resource to unregister
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa
+ ::cuGraphicsD3D9RegisterResource,
+ ::cuGraphicsD3D10RegisterResource,
+ ::cuGraphicsD3D11RegisterResource,
+ ::cuGraphicsGLRegisterBuffer,
+ ::cuGraphicsGLRegisterImage,
+ ::cudaGraphicsUnregisterResource*/
+ fn cuGraphicsUnregisterResource(
+ resource: cuda_types::CUgraphicsResource,
+ ) -> cuda_types::CUresult;
+ /** \brief Get an array through which to access a subresource of a mapped graphics resource.
+
+ Returns in \p *pArray an array through which the subresource of the mapped
+ graphics resource \p resource which corresponds to array index \p arrayIndex
+ and mipmap level \p mipLevel may be accessed. The value set in \p *pArray may
+ change every time that \p resource is mapped.
+
+ If \p resource is not a texture then it cannot be accessed via an array and
+ ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY is returned.
+ If \p arrayIndex is not a valid array index for \p resource then
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+ If \p mipLevel is not a valid mipmap level for \p resource then
+ ::CUDA_ERROR_INVALID_VALUE is returned.
+ If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+
+ \param pArray - Returned array through which a subresource of \p resource may be accessed
+ \param resource - Mapped resource to access
+ \param arrayIndex - Array index for array textures or cubemap face
+ index as defined by ::CUarray_cubemap_face for
+ cubemap textures for the subresource to access
+ \param mipLevel - Mipmap level for the subresource to access
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_MAPPED,
+ ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY
+ \notefnerr
+
+ \sa
+ ::cuGraphicsResourceGetMappedPointer,
+ ::cudaGraphicsSubResourceGetMappedArray*/
+ fn cuGraphicsSubResourceGetMappedArray(
+ pArray: *mut cuda_types::CUarray,
+ resource: cuda_types::CUgraphicsResource,
+ arrayIndex: ::core::ffi::c_uint,
+ mipLevel: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Get a mipmapped array through which to access a mapped graphics resource.
+
+ Returns in \p *pMipmappedArray a mipmapped array through which the mapped graphics
+ resource \p resource. The value set in \p *pMipmappedArray may change every time
+ that \p resource is mapped.
+
+ If \p resource is not a texture then it cannot be accessed via a mipmapped array and
+ ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY is returned.
+ If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+
+ \param pMipmappedArray - Returned mipmapped array through which \p resource may be accessed
+ \param resource - Mapped resource to access
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_MAPPED,
+ ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY
+ \notefnerr
+
+ \sa
+ ::cuGraphicsResourceGetMappedPointer,
+ ::cudaGraphicsResourceGetMappedMipmappedArray*/
+ fn cuGraphicsResourceGetMappedMipmappedArray(
+ pMipmappedArray: *mut cuda_types::CUmipmappedArray,
+ resource: cuda_types::CUgraphicsResource,
+ ) -> cuda_types::CUresult;
+ /** \brief Get a device pointer through which to access a mapped graphics resource.
+
+ Returns in \p *pDevPtr a pointer through which the mapped graphics resource
+ \p resource may be accessed.
+ Returns in \p pSize the size of the memory in bytes which may be accessed from that pointer.
+ The value set in \p pPointer may change every time that \p resource is mapped.
+
+ If \p resource is not a buffer then it cannot be accessed via a pointer and
+ ::CUDA_ERROR_NOT_MAPPED_AS_POINTER is returned.
+ If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ \param pDevPtr - Returned pointer through which \p resource may be accessed
+ \param pSize - Returned size of the buffer accessible starting at \p *pPointer
+ \param resource - Mapped resource to access
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_MAPPED,
+ ::CUDA_ERROR_NOT_MAPPED_AS_POINTER
+ \notefnerr
+
+ \sa
+ ::cuGraphicsMapResources,
+ ::cuGraphicsSubResourceGetMappedArray,
+ ::cudaGraphicsResourceGetMappedPointer*/
+ fn cuGraphicsResourceGetMappedPointer_v2(
+ pDevPtr: *mut cuda_types::CUdeviceptr,
pSize: *mut usize,
- resource: CUgraphicsResource,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceSetMapFlags_v2(
- resource: CUgraphicsResource,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsMapResources_ptsz(
- count: ::std::os::raw::c_uint,
- resources: *mut CUgraphicsResource,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsUnmapResources_ptsz(
- count: ::std::os::raw::c_uint,
- resources: *mut CUgraphicsResource,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGetProcAddress_v2(
- symbol: *const ::std::os::raw::c_char,
- pfn: *mut *mut ::std::os::raw::c_void,
- cudaVersion: ::std::os::raw::c_int,
- flags: cuuint64_t,
- symbolStatus: *mut CUdriverProcAddressQueryResult,
- ) -> CUresult;
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_ENABLE_ON_EXCEPTION: CUcoredumpSettings_enum = CUcoredumpSettings_enum(1);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_TRIGGER_HOST: CUcoredumpSettings_enum = CUcoredumpSettings_enum(2);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_LIGHTWEIGHT: CUcoredumpSettings_enum = CUcoredumpSettings_enum(3);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_ENABLE_USER_TRIGGER: CUcoredumpSettings_enum = CUcoredumpSettings_enum(4);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_FILE: CUcoredumpSettings_enum = CUcoredumpSettings_enum(5);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_PIPE: CUcoredumpSettings_enum = CUcoredumpSettings_enum(6);
-}
-impl CUcoredumpSettings_enum {
- pub const CU_COREDUMP_MAX: CUcoredumpSettings_enum = CUcoredumpSettings_enum(7);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUcoredumpSettings_enum(pub ::std::os::raw::c_uint);
-pub use self::CUcoredumpSettings_enum as CUcoredumpSettings;
-extern "C" {
- pub fn cuCoredumpGetAttribute(
- attrib: CUcoredumpSettings,
- value: *mut ::std::os::raw::c_void,
+ resource: cuda_types::CUgraphicsResource,
+ ) -> cuda_types::CUresult;
+ /** \brief Set usage flags for mapping a graphics resource
+
+ Set \p flags for mapping the graphics resource \p resource.
+
+ Changes to \p flags will take effect the next time \p resource is mapped.
+ The \p flags argument may be any of the following:
+
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA kernels. This is the default value.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_READONLY: Specifies that CUDA kernels which
+ access this resource will not write to this resource.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITEDISCARD: Specifies that CUDA kernels
+ which access this resource will not read from this resource and will
+ write over the entire contents of the resource, so none of the data
+ previously stored in the resource will be preserved.
+
+ If \p resource is presently mapped for access by CUDA then
+ ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ If \p flags is not one of the above values then ::CUDA_ERROR_INVALID_VALUE is returned.
+
+ \param resource - Registered resource to set flags for
+ \param flags - Parameters for resource mapping
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED
+ \notefnerr
+
+ \sa
+ ::cuGraphicsMapResources,
+ ::cudaGraphicsResourceSetMapFlags*/
+ fn cuGraphicsResourceSetMapFlags_v2(
+ resource: cuda_types::CUgraphicsResource,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Map graphics resources for access by CUDA
+
+ Maps the \p count graphics resources in \p resources for access by CUDA.
+
+ The resources in \p resources may be accessed by CUDA until they
+ are unmapped. The graphics API from which \p resources were registered
+ should not access any resources while they are mapped by CUDA. If an
+ application does so, the results are undefined.
+
+ This function provides the synchronization guarantee that any graphics calls
+ issued before ::cuGraphicsMapResources() will complete before any subsequent CUDA
+ work issued in \p stream begins.
+
+ If \p resources includes any duplicate entries then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ If any of \p resources are presently mapped for access by CUDA then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+
+ \param count - Number of resources to map
+ \param resources - Resources to map for CUDA usage
+ \param hStream - Stream with which to synchronize
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_UNKNOWN
+ \note_null_stream
+ \notefnerr
+
+ \sa
+ ::cuGraphicsResourceGetMappedPointer,
+ ::cuGraphicsSubResourceGetMappedArray,
+ ::cuGraphicsUnmapResources,
+ ::cudaGraphicsMapResources*/
+ fn cuGraphicsMapResources_ptsz(
+ count: ::core::ffi::c_uint,
+ resources: *mut cuda_types::CUgraphicsResource,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Unmap graphics resources.
+
+ Unmaps the \p count graphics resources in \p resources.
+
+ Once unmapped, the resources in \p resources may not be accessed by CUDA
+ until they are mapped again.
+
+ This function provides the synchronization guarantee that any CUDA work issued
+ in \p stream before ::cuGraphicsUnmapResources() will complete before any
+ subsequently issued graphics work begins.
+
+
+ If \p resources includes any duplicate entries then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ If any of \p resources are not presently mapped for access by CUDA then ::CUDA_ERROR_NOT_MAPPED is returned.
+
+ \param count - Number of resources to unmap
+ \param resources - Resources to unmap
+ \param hStream - Stream with which to synchronize
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_MAPPED,
+ ::CUDA_ERROR_UNKNOWN
+ \note_null_stream
+ \notefnerr
+
+ \sa
+ ::cuGraphicsMapResources,
+ ::cudaGraphicsUnmapResources*/
+ fn cuGraphicsUnmapResources_ptsz(
+ count: ::core::ffi::c_uint,
+ resources: *mut cuda_types::CUgraphicsResource,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Returns the requested driver API function pointer
+
+ Returns in \p **pfn the address of the CUDA driver function for the requested
+ CUDA version and flags.
+
+ The CUDA version is specified as (1000 * major + 10 * minor), so CUDA 11.2
+ should be specified as 11020. For a requested driver symbol, if the specified
+ CUDA version is greater than or equal to the CUDA version in which the driver symbol
+ was introduced, this API will return the function pointer to the corresponding
+ versioned function.
+
+ The pointer returned by the API should be cast to a function pointer matching the
+ requested driver function's definition in the API header file. The function pointer
+ typedef can be picked up from the corresponding typedefs header file. For example,
+ cudaTypedefs.h consists of function pointer typedefs for driver APIs defined in cuda.h.
+
+ The API will return ::CUDA_SUCCESS and set the returned \p pfn to NULL if the
+ requested driver function is not supported on the platform, no ABI
+ compatible driver function exists for the specified \p cudaVersion or if the
+ driver symbol is invalid.
+
+ It will also set the optional \p symbolStatus to one of the values in
+ ::CUdriverProcAddressQueryResult with the following meanings:
+ - ::CU_GET_PROC_ADDRESS_SUCCESS - The requested symbol was succesfully found based
+ on input arguments and \p pfn is valid
+ - ::CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND - The requested symbol was not found
+ - ::CU_GET_PROC_ADDRESS_VERSION_NOT_SUFFICIENT - The requested symbol was found but is
+ not supported by cudaVersion specified
+
+ The requested flags can be:
+ - ::CU_GET_PROC_ADDRESS_DEFAULT: This is the default mode. This is equivalent to
+ ::CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM if the code is compiled with
+ --default-stream per-thread compilation flag or the macro CUDA_API_PER_THREAD_DEFAULT_STREAM
+ is defined; ::CU_GET_PROC_ADDRESS_LEGACY_STREAM otherwise.
+ - ::CU_GET_PROC_ADDRESS_LEGACY_STREAM: This will enable the search for all driver symbols
+ that match the requested driver symbol name except the corresponding per-thread versions.
+ - ::CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM: This will enable the search for all
+ driver symbols that match the requested driver symbol name including the per-thread
+ versions. If a per-thread version is not found, the API will return the legacy version
+ of the driver function.
+
+ \param symbol - The base name of the driver API function to look for. As an example,
+ for the driver API ::cuMemAlloc_v2, \p symbol would be cuMemAlloc and
+ \p cudaVersion would be the ABI compatible CUDA version for the _v2 variant.
+ \param pfn - Location to return the function pointer to the requested driver function
+ \param cudaVersion - The CUDA version to look for the requested driver symbol
+ \param flags - Flags to specify search options.
+ \param symbolStatus - Optional location to store the status of the search for
+ \p symbol based on \p cudaVersion. See ::CUdriverProcAddressQueryResult
+ for possible values.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \note_version_mixing
+
+ \sa
+ ::cudaGetDriverEntryPoint*/
+ fn cuGetProcAddress_v2(
+ symbol: *const ::core::ffi::c_char,
+ pfn: *mut *mut ::core::ffi::c_void,
+ cudaVersion: ::core::ffi::c_int,
+ flags: cuda_types::cuuint64_t,
+ symbolStatus: *mut cuda_types::CUdriverProcAddressQueryResult,
+ ) -> cuda_types::CUresult;
+ /** \brief Allows caller to fetch a coredump attribute value for the current context
+
+ Returns in \p *value the requested value specified by \p attrib. It is up to the caller
+ to ensure that the data type and size of \p *value matches the request.
+
+ If the caller calls this function with \p *value equal to NULL, the size of the memory
+ region (in bytes) expected for \p attrib will be placed in \p size.
+
+ The supported attributes are:
+ - ::CU_COREDUMP_ENABLE_ON_EXCEPTION: Bool where ::true means that GPU exceptions from
+ this context will create a coredump at the location specified by ::CU_COREDUMP_FILE.
+ The default value is ::false unless set to ::true globally or locally, or the
+ CU_CTX_USER_COREDUMP_ENABLE flag was set during context creation.
+ - ::CU_COREDUMP_TRIGGER_HOST: Bool where ::true means that the host CPU will
+ also create a coredump. The default value is ::true unless set to ::false globally or
+ or locally.
+ - ::CU_COREDUMP_LIGHTWEIGHT: Bool where ::true means that any resulting coredumps
+ will not have a dump of GPU memory or non-reloc ELF images. The default value is
+ ::false unless set to ::true globally or locally.
+ - ::CU_COREDUMP_ENABLE_USER_TRIGGER: Bool where ::true means that a coredump can be
+ created by writing to the system pipe specified by ::CU_COREDUMP_PIPE. The default
+ value is ::false unless set to ::true globally or locally.
+ - ::CU_COREDUMP_FILE: String of up to 1023 characters that defines the location where
+ any coredumps generated by this context will be written. The default value is
+ ::core.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA applications and ::PID is the process ID of the CUDA application.
+ - ::CU_COREDUMP_PIPE: String of up to 1023 characters that defines the name of the pipe
+ that will be monitored if user-triggered coredumps are enabled. The default value is
+ ::corepipe.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA application and ::PID is the process ID of the CUDA application.
+
+ \param attrib - The enum defining which value to fetch.
+ \param value - void* containing the requested data.
+ \param size - The size of the memory region \p value points to.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+
+ \sa
+ ::cuCoredumpGetAttributeGlobal,
+ ::cuCoredumpSetAttribute,
+ ::cuCoredumpSetAttributeGlobal*/
+ fn cuCoredumpGetAttribute(
+ attrib: cuda_types::CUcoredumpSettings,
+ value: *mut ::core::ffi::c_void,
size: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCoredumpGetAttributeGlobal(
- attrib: CUcoredumpSettings,
- value: *mut ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Allows caller to fetch a coredump attribute value for the entire application
+
+ Returns in \p *value the requested value specified by \p attrib. It is up to the caller
+ to ensure that the data type and size of \p *value matches the request.
+
+ If the caller calls this function with \p *value equal to NULL, the size of the memory
+ region (in bytes) expected for \p attrib will be placed in \p size.
+
+ The supported attributes are:
+ - ::CU_COREDUMP_ENABLE_ON_EXCEPTION: Bool where ::true means that GPU exceptions from
+ this context will create a coredump at the location specified by ::CU_COREDUMP_FILE.
+ The default value is ::false.
+ - ::CU_COREDUMP_TRIGGER_HOST: Bool where ::true means that the host CPU will
+ also create a coredump. The default value is ::true.
+ - ::CU_COREDUMP_LIGHTWEIGHT: Bool where ::true means that any resulting coredumps
+ will not have a dump of GPU memory or non-reloc ELF images. The default value is
+ ::false.
+ - ::CU_COREDUMP_ENABLE_USER_TRIGGER: Bool where ::true means that a coredump can be
+ created by writing to the system pipe specified by ::CU_COREDUMP_PIPE. The default
+ value is ::false.
+ - ::CU_COREDUMP_FILE: String of up to 1023 characters that defines the location where
+ any coredumps generated by this context will be written. The default value is
+ ::core.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA applications and ::PID is the process ID of the CUDA application.
+ - ::CU_COREDUMP_PIPE: String of up to 1023 characters that defines the name of the pipe
+ that will be monitored if user-triggered coredumps are enabled. The default value is
+ ::corepipe.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA application and ::PID is the process ID of the CUDA application.
+
+ \param attrib - The enum defining which value to fetch.
+ \param value - void* containing the requested data.
+ \param size - The size of the memory region \p value points to.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuCoredumpGetAttribute,
+ ::cuCoredumpSetAttribute,
+ ::cuCoredumpSetAttributeGlobal*/
+ fn cuCoredumpGetAttributeGlobal(
+ attrib: cuda_types::CUcoredumpSettings,
+ value: *mut ::core::ffi::c_void,
size: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCoredumpSetAttribute(
- attrib: CUcoredumpSettings,
- value: *mut ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Allows caller to set a coredump attribute value for the current context
+
+ This function should be considered an alternate interface to the CUDA-GDB environment
+ variables defined in this document: https://docs.nvidia.com/cuda/cuda-gdb/index.html#gpu-coredump
+
+ An important design decision to note is that any coredump environment variable values
+ set before CUDA initializes will take permanent precedence over any values set with this
+ this function. This decision was made to ensure no change in behavior for any users that
+ may be currently using these variables to get coredumps.
+
+ \p *value shall contain the requested value specified by \p set. It is up to the caller
+ to ensure that the data type and size of \p *value matches the request.
+
+ If the caller calls this function with \p *value equal to NULL, the size of the memory
+ region (in bytes) expected for \p set will be placed in \p size.
+
+ /note This function will return ::CUDA_ERROR_NOT_SUPPORTED if the caller attempts to set
+ ::CU_COREDUMP_ENABLE_ON_EXCEPTION on a GPU of with Compute Capability < 6.0. ::cuCoredumpSetAttributeGlobal
+ works on those platforms as an alternative.
+
+ /note ::CU_COREDUMP_ENABLE_USER_TRIGGER and ::CU_COREDUMP_PIPE cannot be set on a per-context basis.
+
+ The supported attributes are:
+ - ::CU_COREDUMP_ENABLE_ON_EXCEPTION: Bool where ::true means that GPU exceptions from
+ this context will create a coredump at the location specified by ::CU_COREDUMP_FILE.
+ The default value is ::false.
+ - ::CU_COREDUMP_TRIGGER_HOST: Bool where ::true means that the host CPU will
+ also create a coredump. The default value is ::true.
+ - ::CU_COREDUMP_LIGHTWEIGHT: Bool where ::true means that any resulting coredumps
+ will not have a dump of GPU memory or non-reloc ELF images. The default value is
+ ::false.
+ - ::CU_COREDUMP_FILE: String of up to 1023 characters that defines the location where
+ any coredumps generated by this context will be written. The default value is
+ ::core.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA applications and ::PID is the process ID of the CUDA application.
+
+ \param attrib - The enum defining which value to set.
+ \param value - void* containing the requested data.
+ \param size - The size of the memory region \p value points to.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_PERMITTED,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED,
+ ::CUDA_ERROR_NOT_SUPPORTED
+
+ \sa
+ ::cuCoredumpGetAttributeGlobal,
+ ::cuCoredumpGetAttribute,
+ ::cuCoredumpSetAttributeGlobal*/
+ fn cuCoredumpSetAttribute(
+ attrib: cuda_types::CUcoredumpSettings,
+ value: *mut ::core::ffi::c_void,
size: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCoredumpSetAttributeGlobal(
- attrib: CUcoredumpSettings,
- value: *mut ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /** \brief Allows caller to set a coredump attribute value globally
+
+ This function should be considered an alternate interface to the CUDA-GDB environment
+ variables defined in this document: https://docs.nvidia.com/cuda/cuda-gdb/index.html#gpu-coredump
+
+ An important design decision to note is that any coredump environment variable values
+ set before CUDA initializes will take permanent precedence over any values set with this
+ this function. This decision was made to ensure no change in behavior for any users that
+ may be currently using these variables to get coredumps.
+
+ \p *value shall contain the requested value specified by \p set. It is up to the caller
+ to ensure that the data type and size of \p *value matches the request.
+
+ If the caller calls this function with \p *value equal to NULL, the size of the memory
+ region (in bytes) expected for \p set will be placed in \p size.
+
+ The supported attributes are:
+ - ::CU_COREDUMP_ENABLE_ON_EXCEPTION: Bool where ::true means that GPU exceptions from
+ this context will create a coredump at the location specified by ::CU_COREDUMP_FILE.
+ The default value is ::false.
+ - ::CU_COREDUMP_TRIGGER_HOST: Bool where ::true means that the host CPU will
+ also create a coredump. The default value is ::true.
+ - ::CU_COREDUMP_LIGHTWEIGHT: Bool where ::true means that any resulting coredumps
+ will not have a dump of GPU memory or non-reloc ELF images. The default value is
+ ::false.
+ - ::CU_COREDUMP_ENABLE_USER_TRIGGER: Bool where ::true means that a coredump can be
+ created by writing to the system pipe specified by ::CU_COREDUMP_PIPE. The default
+ value is ::false.
+ - ::CU_COREDUMP_FILE: String of up to 1023 characters that defines the location where
+ any coredumps generated by this context will be written. The default value is
+ ::core.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine running
+ the CUDA applications and ::PID is the process ID of the CUDA application.
+ - ::CU_COREDUMP_PIPE: String of up to 1023 characters that defines the name of the pipe
+ that will be monitored if user-triggered coredumps are enabled. This value may not be
+ changed after ::CU_COREDUMP_ENABLE_USER_TRIGGER is set to ::true. The default
+ value is ::corepipe.cuda.HOSTNAME.PID where ::HOSTNAME is the host name of the machine
+ running the CUDA application and ::PID is the process ID of the CUDA application.
+
+ \param attrib - The enum defining which value to set.
+ \param value - void* containing the requested data.
+ \param size - The size of the memory region \p value points to.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_PERMITTED
+
+ \sa
+ ::cuCoredumpGetAttribute,
+ ::cuCoredumpGetAttributeGlobal,
+ ::cuCoredumpSetAttribute*/
+ fn cuCoredumpSetAttributeGlobal(
+ attrib: cuda_types::CUcoredumpSettings,
+ value: *mut ::core::ffi::c_void,
size: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGetExportTable(
- ppExportTable: *mut *const ::std::os::raw::c_void,
- pExportTableId: *const CUuuid,
- ) -> CUresult;
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUgreenCtx_st {
- _unused: [u8; 0],
-}
-pub type CUgreenCtx = *mut CUgreenCtx_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUdevResourceDesc_st {
- _unused: [u8; 0],
-}
-pub type CUdevResourceDesc = *mut CUdevResourceDesc_st;
-impl CUgreenCtxCreate_flags {
- pub const CU_GREEN_CTX_DEFAULT_STREAM: CUgreenCtxCreate_flags = CUgreenCtxCreate_flags(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUgreenCtxCreate_flags(pub ::std::os::raw::c_uint);
-impl CUdevResourceType {
- pub const CU_DEV_RESOURCE_TYPE_INVALID: CUdevResourceType = CUdevResourceType(0);
-}
-impl CUdevResourceType {
- pub const CU_DEV_RESOURCE_TYPE_SM: CUdevResourceType = CUdevResourceType(1);
-}
-impl CUdevResourceType {
- pub const CU_DEV_RESOURCE_TYPE_MAX: CUdevResourceType = CUdevResourceType(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUdevResourceType(pub ::std::os::raw::c_uint);
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUdevSmResource_st {
- pub smCount: ::std::os::raw::c_uint,
-}
-pub type CUdevSmResource = CUdevSmResource_st;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUdevResource_st {
- pub type_: CUdevResourceType,
- pub _internal_padding: [::std::os::raw::c_uchar; 92usize],
- pub __bindgen_anon_1: CUdevResource_st__bindgen_ty_1,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUdevResource_st__bindgen_ty_1 {
- pub sm: CUdevSmResource,
- pub _oversize: [::std::os::raw::c_uchar; 48usize],
-}
-pub type CUdevResource_v1 = CUdevResource_st;
-pub type CUdevResource = CUdevResource_v1;
-extern "C" {
- pub fn cuGreenCtxCreate(
- phCtx: *mut CUgreenCtx,
- desc: CUdevResourceDesc,
- dev: CUdevice,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGreenCtxDestroy(hCtx: CUgreenCtx) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxFromGreenCtx(pContext: *mut CUcontext, hCtx: CUgreenCtx) -> CUresult;
-}
-extern "C" {
- pub fn cuDeviceGetDevResource(
- device: CUdevice,
- resource: *mut CUdevResource,
- type_: CUdevResourceType,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxGetDevResource(
- hCtx: CUcontext,
- resource: *mut CUdevResource,
- type_: CUdevResourceType,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGreenCtxGetDevResource(
- hCtx: CUgreenCtx,
- resource: *mut CUdevResource,
- type_: CUdevResourceType,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDevSmResourceSplitByCount(
- result: *mut CUdevResource,
- nbGroups: *mut ::std::os::raw::c_uint,
- input: *const CUdevResource,
- remaining: *mut CUdevResource,
- useFlags: ::std::os::raw::c_uint,
- minCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuDevResourceGenerateDesc(
- phDesc: *mut CUdevResourceDesc,
- resources: *mut CUdevResource,
- nbResources: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGreenCtxRecordEvent(hCtx: CUgreenCtx, hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuGreenCtxWaitEvent(hCtx: CUgreenCtx, hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetGreenCtx(hStream: CUstream, phCtx: *mut CUgreenCtx) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostRegister(
- p: *mut ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ /// @}
+ fn cuGetExportTable(
+ ppExportTable: *mut *const ::core::ffi::c_void,
+ pExportTableId: *const cuda_types::CUuuid,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates a green context with a specified set of resources.
+
+ This API creates a green context with the resources specified in the descriptor \p desc and
+ returns it in the handle represented by \p phCtx. This API will retain the primary context on device \p dev,
+ which will is released when the green context is destroyed. It is advised to have the primary context active
+ before calling this API to avoid the heavy cost of triggering primary context initialization and
+ deinitialization multiple times.
+
+ The API does not set the green context current. In order to set it current, you need to explicitly set it current
+ by first converting the green context to a CUcontext using ::cuCtxFromGreenCtx and subsequently calling
+ ::cuCtxSetCurrent / ::cuCtxPushCurrent. It should be noted that a green context can be current to only one
+ thread at a time. There is no internal synchronization to make API calls accessing the same green context
+ from multiple threads work.
+
+ Note: The API is not supported on 32-bit platforms.
+
+ \param phCtx - Pointer for the output handle to the green context
+ \param desc - Descriptor generated via ::cuDevResourceGenerateDesc which contains the set of resources to be used
+ \param dev - Device on which to create the green context.
+ \param flags - One of the supported green context creation flags. \p CU_GREEN_CTX_DEFAULT_STREAM is required.
+
+ The supported flags are:
+ - \p CU_GREEN_CTX_DEFAULT_STREAM : Creates a default stream to use inside the green context. Required.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_NOT_SUPPORTED,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa
+ ::cuGreenCtxDestroy,
+ ::cuCtxFromGreenCtx,
+ ::cuCtxSetCurrent,
+ ::cuCtxPushCurrent,
+ ::cuDevResourceGenerateDesc,
+ ::cuDevicePrimaryCtxRetain,
+ ::cuCtxCreate,
+ ::cuCtxCreate_v3*/
+ fn cuGreenCtxCreate(
+ phCtx: *mut cuda_types::CUgreenCtx,
+ desc: cuda_types::CUdevResourceDesc,
+ dev: cuda_types::CUdevice,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Destroys a green context
+
+ Destroys the green context, releasing the primary context of the device that this green context was created for.
+ Any resources provisioned for this green context (that were initially available via the resource descriptor)
+ are released as well.
+ \param hCtx - Green context to be destroyed
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+
+ \sa
+ ::cuGreenCtxCreate,
+ ::cuCtxDestroy*/
+ fn cuGreenCtxDestroy(hCtx: cuda_types::CUgreenCtx) -> cuda_types::CUresult;
+ /** \brief Converts a green context into the primary context
+
+ The API converts a green context into the primary context returned in \p pContext. It is important
+ to note that the converted context \p pContext is a normal primary context but with
+ the resources of the specified green context \p hCtx. Once converted, it can then
+ be used to set the context current with ::cuCtxSetCurrent or with any of the CUDA APIs
+ that accept a CUcontext parameter.
+
+ Users are expected to call this API before calling any CUDA APIs that accept a
+ CUcontext. Failing to do so will result in the APIs returning ::CUDA_ERROR_INVALID_CONTEXT.
+
+ \param pContext Returned primary context with green context resources
+ \param hCtx Green context to convert
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuGreenCtxCreate*/
+ fn cuCtxFromGreenCtx(
+ pContext: *mut cuda_types::CUcontext,
+ hCtx: cuda_types::CUgreenCtx,
+ ) -> cuda_types::CUresult;
+ /** \brief Get device resources
+
+ Get the \p type resources available to the \p device.
+ This may often be the starting point for further partitioning or configuring of resources.
+
+ Note: The API is not supported on 32-bit platforms.
+
+ \param device - Device to get resource for
+ \param resource - Output pointer to a CUdevResource structure
+ \param type - Type of resource to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_RESOURCE_TYPE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_DEVICE
+
+ \sa
+ ::cuDevResourceGenerateDesc*/
+ fn cuDeviceGetDevResource(
+ device: cuda_types::CUdevice,
+ resource: *mut cuda_types::CUdevResource,
+ type_: cuda_types::CUdevResourceType,
+ ) -> cuda_types::CUresult;
+ /** \brief Get context resources
+
+ Get the \p type resources available to the context represented by \p hCtx
+ \param hCtx - Context to get resource for
+
+ Note: The API is not supported on 32-bit platforms.
+
+ \param resource - Output pointer to a CUdevResource structure
+ \param type - Type of resource to retrieve
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_RESOURCE_TYPE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CONTEXT
+
+ \sa
+ ::cuDevResourceGenerateDesc*/
+ fn cuCtxGetDevResource(
+ hCtx: cuda_types::CUcontext,
+ resource: *mut cuda_types::CUdevResource,
+ type_: cuda_types::CUdevResourceType,
+ ) -> cuda_types::CUresult;
+ /** \brief Get green context resources
+
+ Get the \p type resources available to the green context represented by \p hCtx
+ \param hCtx - Green context to get resource for
+ \param resource - Output pointer to a CUdevResource structure
+ \param type - Type of resource to retrieve
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_RESOURCE_TYPE,
+ ::CUDA_ERROR_INVALID_VALUE
+
+ \sa
+ ::cuDevResourceGenerateDesc*/
+ fn cuGreenCtxGetDevResource(
+ hCtx: cuda_types::CUgreenCtx,
+ resource: *mut cuda_types::CUdevResource,
+ type_: cuda_types::CUdevResourceType,
+ ) -> cuda_types::CUresult;
+ /** \brief Splits \p CU_DEV_RESOURCE_TYPE_SM resources.
+
+ Splits \p CU_DEV_RESOURCE_TYPE_SM resources into \p nbGroups, adhering to the minimum SM count specified in \p minCount
+ and the usage flags in \p useFlags. If \p result is NULL, the API simulates a split and provides the amount of groups that
+ would be created in \p nbGroups. Otherwise, \p nbGroups must point to the amount of elements in \p result and on return,
+ the API will overwrite \p nbGroups with the amount actually created. The groups are written to the array in \p result.
+ \p nbGroups can be less than the total amount if a smaller number of groups is needed.
+
+ This API is used to spatially partition the input resource. The input resource needs to come from one of
+ ::cuDeviceGetDevResource, ::cuCtxGetDevResource, or ::cuGreenCtxGetDevResource.
+ A limitation of the API is that the output results cannot be split again without
+ first creating a descriptor and a green context with that descriptor.
+
+ When creating the groups, the API will take into account the performance and functional characteristics of the
+ input resource, and guarantee a split that will create a disjoint set of symmetrical partitions. This may lead to less groups created
+ than purely dividing the total SM count by the \p minCount due to cluster requirements or
+ alignment and granularity requirements for the minCount.
+
+ The \p remainder set, might not have the same functional or performance guarantees as the groups in \p result.
+ Its use should be carefully planned and future partitions of the \p remainder set are discouraged.
+
+ A successful API call must either have:
+ - A valid array of \p result pointers of size passed in \p nbGroups, with \p Input of type \p CU_DEV_RESOURCE_TYPE_SM.
+ Value of \p minCount must be between 0 and the SM count specified in \p input. \p remaining and \p useFlags are optional.
+ - NULL passed in for \p result, with a valid integer pointer in \p nbGroups and \p Input of type \p CU_DEV_RESOURCE_TYPE_SM.
+ Value of \p minCount must be between 0 and the SM count specified in \p input.
+ This queries the number of groups that would be created by the API.
+
+ Note: The API is not supported on 32-bit platforms.
+
+ \param result - Output array of \p CUdevResource resources. Can be NULL to query the number of groups.
+ \param nbGroups - This is a pointer, specifying the number of groups that would be or should be created as described below.
+ \param input - Input SM resource to be split. Must be a valid \p CU_DEV_RESOURCE_TYPE_SM resource.
+ \param remaining - If the input resource cannot be cleanly split among \p nbGroups, the remaining is placed in here.
+ Can be ommitted (NULL) if the user does not need the remaining set.
+ \param useFlags - Flags specifying how these partitions are used or which constraints to abide by when splitting the input.
+ \param minCount - Minimum number of SMs required
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_RESOURCE_TYPE,
+ ::CUDA_ERROR_INVALID_RESOURCE_CONFIGURATION
+
+ \sa
+ ::cuGreenCtxGetDevResource,
+ ::cuCtxGetDevResource,
+ ::cuDeviceGetDevResource*/
+ fn cuDevSmResourceSplitByCount(
+ result: *mut cuda_types::CUdevResource,
+ nbGroups: *mut ::core::ffi::c_uint,
+ input: *const cuda_types::CUdevResource,
+ remaining: *mut cuda_types::CUdevResource,
+ useFlags: ::core::ffi::c_uint,
+ minCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Generate a resource descriptor
+
+ Generates a resource descriptor with the set of resources specified in \p resources.
+ The generated resource descriptor is necessary for the creation of green contexts via the ::cuGreenCtxCreate API.
+ The API expects \p nbResources == 1, as there is only one type of resource and merging the same
+ types of resource is currently not supported.
+
+ Note: The API is not supported on 32-bit platforms.
+
+ \param phDesc - Output descriptor
+ \param resources - Array of resources to be included in the descriptor
+ \param nbResources - Number of resources passed in \p resources
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_RESOURCE_TYPE,
+ ::CUDA_ERROR_INVALID_RESOURCE_CONFIGURATION
+
+ \sa
+ ::cuDevSmResourceSplitByCount*/
+ fn cuDevResourceGenerateDesc(
+ phDesc: *mut cuda_types::CUdevResourceDesc,
+ resources: *mut cuda_types::CUdevResource,
+ nbResources: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Records an event.
+
+ Captures in \phEvent all the activities of the green context of \phCtx
+ at the time of this call. \phEvent and \phCtx must be from the same
+ CUDA context. Calls such as ::cuEventQuery() or ::cuGreenCtxWaitEvent() will
+ then examine or wait for completion of the work that was captured. Uses of
+ \p hCtx after this call do not modify \p hEvent.
+
+ \note The API will return an error if the specified green context \p hCtx
+ has a stream in the capture mode. In such a case, the call will invalidate
+ all the conflicting captures.
+
+ \param hCtx - Green context to record event for
+ \param hEvent - Event to record
+
+ \return
+ ::CUDA_SUCCESS
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE
+
+ \sa
+ ::cuGreenCtxWaitEvent,
+ ::cuEventRecord*/
+ fn cuGreenCtxRecordEvent(
+ hCtx: cuda_types::CUgreenCtx,
+ hEvent: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Make a green context wait on an event
+
+ Makes all future work submitted to green context \phCtx wait for all work
+ captured in \phEvent. The synchronization will be performed on the device
+ and will not block the calling CPU thread. See ::cuGreenCtxRecordEvent()
+ for details on what is captured by an event.
+
+ \note The API will return an error and invalidate the capture if the specified
+ event \p hEvent is part of an ongoing capture sequence.
+
+ \param hCtx - Green context to wait
+ \param hEvent - Event to wait on (may not be NULL)
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE
+
+ \sa
+ ::cuGreenCtxRecordEvent,
+ ::cuStreamWaitEvent*/
+ fn cuGreenCtxWaitEvent(
+ hCtx: cuda_types::CUgreenCtx,
+ hEvent: cuda_types::CUevent,
+ ) -> cuda_types::CUresult;
+ /** \brief Query the green context associated with a stream
+
+ Returns the CUDA green context that the stream is associated with, or NULL if the stream
+ is not associated with any green context.
+
+ The stream handle \p hStream can refer to any of the following:
+ <ul>
+ <li>
+ a stream created via any of the CUDA driver APIs such as ::cuStreamCreate.
+ If during stream creation the context that was active in the calling thread was obtained
+ with cuCtxFromGreenCtx, that green context is returned in \p phCtx.
+ Otherwise, \p *phCtx is set to NULL instead.
+ </li>
+ <li>
+ special stream such as the NULL stream or ::CU_STREAM_LEGACY.
+ In that case if context that is active in the calling thread was obtained
+ with cuCtxFromGreenCtx, that green context is returned.
+ Otherwise, \p *phCtx is set to NULL instead.
+ </li>
+ </ul>
+ Passing an invalid handle will result in undefined behavior.
+
+ \param hStream - Handle to the stream to be queried
+ \param phCtx - Returned green context associated with the stream
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ \notefnerr
+
+ \sa ::cuStreamDestroy,
+ ::cuStreamCreateWithPriority,
+ ::cuStreamGetPriority,
+ ::cuStreamGetFlags,
+ ::cuStreamWaitEvent,
+ ::cuStreamQuery,
+ ::cuStreamSynchronize,
+ ::cuStreamAddCallback,
+ ::cudaStreamCreate,
+ ::cudaStreamCreateWithFlags*/
+ fn cuStreamGetGreenCtx(
+ hStream: cuda_types::CUstream,
+ phCtx: *mut cuda_types::CUgreenCtx,
+ ) -> cuda_types::CUresult;
+ fn cuMemHostRegister(
+ p: *mut ::core::ffi::c_void,
bytesize: usize,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceSetMapFlags(
- resource: CUgraphicsResource,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkCreate(
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- stateOut: *mut CUlinkState,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkAddData(
- state: CUlinkState,
- type_: CUjitInputType,
- data: *mut ::std::os::raw::c_void,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuGraphicsResourceSetMapFlags(
+ resource: cuda_types::CUgraphicsResource,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuLinkCreate(
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ stateOut: *mut cuda_types::CUlinkState,
+ ) -> cuda_types::CUresult;
+ fn cuLinkAddData(
+ state: cuda_types::CUlinkState,
+ type_: cuda_types::CUjitInputType,
+ data: *mut ::core::ffi::c_void,
size: usize,
- name: *const ::std::os::raw::c_char,
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLinkAddFile(
- state: CUlinkState,
- type_: CUjitInputType,
- path: *const ::std::os::raw::c_char,
- numOptions: ::std::os::raw::c_uint,
- options: *mut CUjit_option,
- optionValues: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddress2D_v2(
- hTexRef: CUtexref,
- desc: *const CUDA_ARRAY_DESCRIPTOR,
- dptr: CUdeviceptr,
+ name: *const ::core::ffi::c_char,
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuLinkAddFile(
+ state: cuda_types::CUlinkState,
+ type_: cuda_types::CUjitInputType,
+ path: *const ::core::ffi::c_char,
+ numOptions: ::core::ffi::c_uint,
+ options: *mut cuda_types::CUjit_option,
+ optionValues: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuTexRefSetAddress2D_v2(
+ hTexRef: cuda_types::CUtexref,
+ desc: *const cuda_types::CUDA_ARRAY_DESCRIPTOR,
+ dptr: cuda_types::CUdeviceptr,
Pitch: usize,
- ) -> CUresult;
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUdeviceptr_v1(pub ::std::os::raw::c_uint);
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY2D_v1_st {
- pub srcXInBytes: ::std::os::raw::c_uint,
- pub srcY: ::std::os::raw::c_uint,
- pub srcMemoryType: CUmemorytype,
- pub srcHost: *const ::std::os::raw::c_void,
- pub srcDevice: CUdeviceptr_v1,
- pub srcArray: CUarray,
- pub srcPitch: ::std::os::raw::c_uint,
- pub dstXInBytes: ::std::os::raw::c_uint,
- pub dstY: ::std::os::raw::c_uint,
- pub dstMemoryType: CUmemorytype,
- pub dstHost: *mut ::std::os::raw::c_void,
- pub dstDevice: CUdeviceptr_v1,
- pub dstArray: CUarray,
- pub dstPitch: ::std::os::raw::c_uint,
- pub WidthInBytes: ::std::os::raw::c_uint,
- pub Height: ::std::os::raw::c_uint,
-}
-pub type CUDA_MEMCPY2D_v1 = CUDA_MEMCPY2D_v1_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_MEMCPY3D_v1_st {
- pub srcXInBytes: ::std::os::raw::c_uint,
- pub srcY: ::std::os::raw::c_uint,
- pub srcZ: ::std::os::raw::c_uint,
- pub srcLOD: ::std::os::raw::c_uint,
- pub srcMemoryType: CUmemorytype,
- pub srcHost: *const ::std::os::raw::c_void,
- pub srcDevice: CUdeviceptr_v1,
- pub srcArray: CUarray,
- pub reserved0: *mut ::std::os::raw::c_void,
- pub srcPitch: ::std::os::raw::c_uint,
- pub srcHeight: ::std::os::raw::c_uint,
- pub dstXInBytes: ::std::os::raw::c_uint,
- pub dstY: ::std::os::raw::c_uint,
- pub dstZ: ::std::os::raw::c_uint,
- pub dstLOD: ::std::os::raw::c_uint,
- pub dstMemoryType: CUmemorytype,
- pub dstHost: *mut ::std::os::raw::c_void,
- pub dstDevice: CUdeviceptr_v1,
- pub dstArray: CUarray,
- pub reserved1: *mut ::std::os::raw::c_void,
- pub dstPitch: ::std::os::raw::c_uint,
- pub dstHeight: ::std::os::raw::c_uint,
- pub WidthInBytes: ::std::os::raw::c_uint,
- pub Height: ::std::os::raw::c_uint,
- pub Depth: ::std::os::raw::c_uint,
-}
-pub type CUDA_MEMCPY3D_v1 = CUDA_MEMCPY3D_v1_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY_DESCRIPTOR_v1_st {
- pub Width: ::std::os::raw::c_uint,
- pub Height: ::std::os::raw::c_uint,
- pub Format: CUarray_format,
- pub NumChannels: ::std::os::raw::c_uint,
-}
-pub type CUDA_ARRAY_DESCRIPTOR_v1 = CUDA_ARRAY_DESCRIPTOR_v1_st;
-#[repr(C)]
-#[derive(Copy, Clone, PartialEq, Eq)]
-pub struct CUDA_ARRAY3D_DESCRIPTOR_v1_st {
- pub Width: ::std::os::raw::c_uint,
- pub Height: ::std::os::raw::c_uint,
- pub Depth: ::std::os::raw::c_uint,
- pub Format: CUarray_format,
- pub NumChannels: ::std::os::raw::c_uint,
- pub Flags: ::std::os::raw::c_uint,
-}
-pub type CUDA_ARRAY3D_DESCRIPTOR_v1 = CUDA_ARRAY3D_DESCRIPTOR_v1_st;
-extern "C" {
- pub fn cuDeviceTotalMem(bytes: *mut ::std::os::raw::c_uint, dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxCreate(
- pctx: *mut CUcontext,
- flags: ::std::os::raw::c_uint,
- dev: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuModuleGetGlobal(
- dptr: *mut CUdeviceptr_v1,
- bytes: *mut ::std::os::raw::c_uint,
- hmod: CUmodule,
- name: *const ::std::os::raw::c_char,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetInfo(
- free: *mut ::std::os::raw::c_uint,
- total: *mut ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAlloc(dptr: *mut CUdeviceptr_v1, bytesize: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocPitch(
- dptr: *mut CUdeviceptr_v1,
- pPitch: *mut ::std::os::raw::c_uint,
- WidthInBytes: ::std::os::raw::c_uint,
- Height: ::std::os::raw::c_uint,
- ElementSizeBytes: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemFree(dptr: CUdeviceptr_v1) -> CUresult;
-}
-extern "C" {
- pub fn cuMemGetAddressRange(
- pbase: *mut CUdeviceptr_v1,
- psize: *mut ::std::os::raw::c_uint,
- dptr: CUdeviceptr_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocHost(
- pp: *mut *mut ::std::os::raw::c_void,
- bytesize: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemHostGetDevicePointer(
- pdptr: *mut CUdeviceptr_v1,
- p: *mut ::std::os::raw::c_void,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoD(
- dstDevice: CUdeviceptr_v1,
- srcHost: *const ::std::os::raw::c_void,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoH(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr_v1,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoD(
- dstDevice: CUdeviceptr_v1,
- srcDevice: CUdeviceptr_v1,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoA(
- dstArray: CUarray,
- dstOffset: ::std::os::raw::c_uint,
- srcDevice: CUdeviceptr_v1,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoD(
- dstDevice: CUdeviceptr_v1,
- srcArray: CUarray,
- srcOffset: ::std::os::raw::c_uint,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoA(
- dstArray: CUarray,
- dstOffset: ::std::os::raw::c_uint,
- srcHost: *const ::std::os::raw::c_void,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoH(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
- srcOffset: ::std::os::raw::c_uint,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoA(
- dstArray: CUarray,
- dstOffset: ::std::os::raw::c_uint,
- srcArray: CUarray,
- srcOffset: ::std::os::raw::c_uint,
- ByteCount: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoAAsync(
- dstArray: CUarray,
- dstOffset: ::std::os::raw::c_uint,
- srcHost: *const ::std::os::raw::c_void,
- ByteCount: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoHAsync(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
- srcOffset: ::std::os::raw::c_uint,
- ByteCount: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2D(pCopy: *const CUDA_MEMCPY2D_v1) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DUnaligned(pCopy: *const CUDA_MEMCPY2D_v1) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3D(pCopy: *const CUDA_MEMCPY3D_v1) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoDAsync(
- dstDevice: CUdeviceptr_v1,
- srcHost: *const ::std::os::raw::c_void,
- ByteCount: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoHAsync(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr_v1,
- ByteCount: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoDAsync(
- dstDevice: CUdeviceptr_v1,
- srcDevice: CUdeviceptr_v1,
- ByteCount: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DAsync(pCopy: *const CUDA_MEMCPY2D_v1, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DAsync(pCopy: *const CUDA_MEMCPY3D_v1, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD8(
- dstDevice: CUdeviceptr_v1,
- uc: ::std::os::raw::c_uchar,
- N: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD16(
- dstDevice: CUdeviceptr_v1,
- us: ::std::os::raw::c_ushort,
- N: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD32(
- dstDevice: CUdeviceptr_v1,
- ui: ::std::os::raw::c_uint,
- N: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D8(
- dstDevice: CUdeviceptr_v1,
- dstPitch: ::std::os::raw::c_uint,
- uc: ::std::os::raw::c_uchar,
- Width: ::std::os::raw::c_uint,
- Height: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D16(
- dstDevice: CUdeviceptr_v1,
- dstPitch: ::std::os::raw::c_uint,
- us: ::std::os::raw::c_ushort,
- Width: ::std::os::raw::c_uint,
- Height: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D32(
- dstDevice: CUdeviceptr_v1,
- dstPitch: ::std::os::raw::c_uint,
- ui: ::std::os::raw::c_uint,
- Width: ::std::os::raw::c_uint,
- Height: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayCreate(
- pHandle: *mut CUarray,
- pAllocateArray: *const CUDA_ARRAY_DESCRIPTOR_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArrayGetDescriptor(
- pArrayDescriptor: *mut CUDA_ARRAY_DESCRIPTOR_v1,
- hArray: CUarray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArray3DCreate(
- pHandle: *mut CUarray,
- pAllocateArray: *const CUDA_ARRAY3D_DESCRIPTOR_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuArray3DGetDescriptor(
- pArrayDescriptor: *mut CUDA_ARRAY3D_DESCRIPTOR_v1,
- hArray: CUarray,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddress(
- ByteOffset: *mut ::std::os::raw::c_uint,
- hTexRef: CUtexref,
- dptr: CUdeviceptr_v1,
- bytes: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefSetAddress2D(
- hTexRef: CUtexref,
- desc: *const CUDA_ARRAY_DESCRIPTOR_v1,
- dptr: CUdeviceptr_v1,
- Pitch: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuTexRefGetAddress(pdptr: *mut CUdeviceptr_v1, hTexRef: CUtexref) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceGetMappedPointer(
- pDevPtr: *mut CUdeviceptr_v1,
- pSize: *mut ::std::os::raw::c_uint,
- resource: CUgraphicsResource,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxDestroy(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxPopCurrent(pctx: *mut CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuCtxPushCurrent(ctx: CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamDestroy(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuEventDestroy(hEvent: CUevent) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxRelease(dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxReset(dev: CUdevice) -> CUresult;
-}
-extern "C" {
- pub fn cuDevicePrimaryCtxSetFlags(dev: CUdevice, flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoD_v2(
- dstDevice: CUdeviceptr,
- srcHost: *const ::std::os::raw::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuDeviceTotalMem(
+ bytes: *mut ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ fn cuCtxCreate(
+ pctx: *mut cuda_types::CUcontext,
+ flags: ::core::ffi::c_uint,
+ dev: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ fn cuModuleGetGlobal(
+ dptr: *mut cuda_types::CUdeviceptr_v1,
+ bytes: *mut ::core::ffi::c_uint,
+ hmod: cuda_types::CUmodule,
+ name: *const ::core::ffi::c_char,
+ ) -> cuda_types::CUresult;
+ fn cuMemGetInfo(
+ free: *mut ::core::ffi::c_uint,
+ total: *mut ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemAlloc(
+ dptr: *mut cuda_types::CUdeviceptr_v1,
+ bytesize: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemAllocPitch(
+ dptr: *mut cuda_types::CUdeviceptr_v1,
+ pPitch: *mut ::core::ffi::c_uint,
+ WidthInBytes: ::core::ffi::c_uint,
+ Height: ::core::ffi::c_uint,
+ ElementSizeBytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemFree(dptr: cuda_types::CUdeviceptr_v1) -> cuda_types::CUresult;
+ fn cuMemGetAddressRange(
+ pbase: *mut cuda_types::CUdeviceptr_v1,
+ psize: *mut ::core::ffi::c_uint,
+ dptr: cuda_types::CUdeviceptr_v1,
+ ) -> cuda_types::CUresult;
+ fn cuMemAllocHost(
+ pp: *mut *mut ::core::ffi::c_void,
+ bytesize: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemHostGetDevicePointer(
+ pdptr: *mut cuda_types::CUdeviceptr_v1,
+ p: *mut ::core::ffi::c_void,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoD(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ srcHost: *const ::core::ffi::c_void,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoH(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr_v1,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoD(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ srcDevice: cuda_types::CUdeviceptr_v1,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoA(
+ dstArray: cuda_types::CUarray,
+ dstOffset: ::core::ffi::c_uint,
+ srcDevice: cuda_types::CUdeviceptr_v1,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoD(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ srcArray: cuda_types::CUarray,
+ srcOffset: ::core::ffi::c_uint,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoA(
+ dstArray: cuda_types::CUarray,
+ dstOffset: ::core::ffi::c_uint,
+ srcHost: *const ::core::ffi::c_void,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoH(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
+ srcOffset: ::core::ffi::c_uint,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoA(
+ dstArray: cuda_types::CUarray,
+ dstOffset: ::core::ffi::c_uint,
+ srcArray: cuda_types::CUarray,
+ srcOffset: ::core::ffi::c_uint,
+ ByteCount: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoAAsync(
+ dstArray: cuda_types::CUarray,
+ dstOffset: ::core::ffi::c_uint,
+ srcHost: *const ::core::ffi::c_void,
+ ByteCount: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoHAsync(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
+ srcOffset: ::core::ffi::c_uint,
+ ByteCount: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy2D(pCopy: *const cuda_types::CUDA_MEMCPY2D_v1) -> cuda_types::CUresult;
+ fn cuMemcpy2DUnaligned(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D_v1,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3D(pCopy: *const cuda_types::CUDA_MEMCPY3D_v1) -> cuda_types::CUresult;
+ fn cuMemcpyHtoDAsync(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ srcHost: *const ::core::ffi::c_void,
+ ByteCount: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoHAsync(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr_v1,
+ ByteCount: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoDAsync(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ srcDevice: cuda_types::CUdeviceptr_v1,
+ ByteCount: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy2DAsync(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D_v1,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3DAsync(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D_v1,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD8(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ uc: ::core::ffi::c_uchar,
+ N: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD16(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ us: ::core::ffi::c_ushort,
+ N: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD32(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ ui: ::core::ffi::c_uint,
+ N: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D8(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ dstPitch: ::core::ffi::c_uint,
+ uc: ::core::ffi::c_uchar,
+ Width: ::core::ffi::c_uint,
+ Height: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D16(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ dstPitch: ::core::ffi::c_uint,
+ us: ::core::ffi::c_ushort,
+ Width: ::core::ffi::c_uint,
+ Height: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D32(
+ dstDevice: cuda_types::CUdeviceptr_v1,
+ dstPitch: ::core::ffi::c_uint,
+ ui: ::core::ffi::c_uint,
+ Width: ::core::ffi::c_uint,
+ Height: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuArrayCreate(
+ pHandle: *mut cuda_types::CUarray,
+ pAllocateArray: *const cuda_types::CUDA_ARRAY_DESCRIPTOR_v1,
+ ) -> cuda_types::CUresult;
+ fn cuArrayGetDescriptor(
+ pArrayDescriptor: *mut cuda_types::CUDA_ARRAY_DESCRIPTOR_v1,
+ hArray: cuda_types::CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuArray3DCreate(
+ pHandle: *mut cuda_types::CUarray,
+ pAllocateArray: *const cuda_types::CUDA_ARRAY3D_DESCRIPTOR_v1,
+ ) -> cuda_types::CUresult;
+ fn cuArray3DGetDescriptor(
+ pArrayDescriptor: *mut cuda_types::CUDA_ARRAY3D_DESCRIPTOR_v1,
+ hArray: cuda_types::CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuTexRefSetAddress(
+ ByteOffset: *mut ::core::ffi::c_uint,
+ hTexRef: cuda_types::CUtexref,
+ dptr: cuda_types::CUdeviceptr_v1,
+ bytes: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuTexRefSetAddress2D(
+ hTexRef: cuda_types::CUtexref,
+ desc: *const cuda_types::CUDA_ARRAY_DESCRIPTOR_v1,
+ dptr: cuda_types::CUdeviceptr_v1,
+ Pitch: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuTexRefGetAddress(
+ pdptr: *mut cuda_types::CUdeviceptr_v1,
+ hTexRef: cuda_types::CUtexref,
+ ) -> cuda_types::CUresult;
+ fn cuGraphicsResourceGetMappedPointer(
+ pDevPtr: *mut cuda_types::CUdeviceptr_v1,
+ pSize: *mut ::core::ffi::c_uint,
+ resource: cuda_types::CUgraphicsResource,
+ ) -> cuda_types::CUresult;
+ fn cuCtxDestroy(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ fn cuCtxPopCurrent(pctx: *mut cuda_types::CUcontext) -> cuda_types::CUresult;
+ fn cuCtxPushCurrent(ctx: cuda_types::CUcontext) -> cuda_types::CUresult;
+ fn cuStreamDestroy(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ fn cuEventDestroy(hEvent: cuda_types::CUevent) -> cuda_types::CUresult;
+ fn cuDevicePrimaryCtxRelease(dev: cuda_types::CUdevice) -> cuda_types::CUresult;
+ fn cuDevicePrimaryCtxReset(dev: cuda_types::CUdevice) -> cuda_types::CUresult;
+ fn cuDevicePrimaryCtxSetFlags(
+ dev: cuda_types::CUdevice,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoD_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoH_v2(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoH_v2(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoD_v2(
- dstDevice: CUdeviceptr,
- srcDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoD_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoA_v2(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoA_v2(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcDevice: CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoD_v2(
- dstDevice: CUdeviceptr,
- srcArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoD_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoA_v2(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoA_v2(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcHost: *const ::std::os::raw::c_void,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoH_v2(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoH_v2(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoA_v2(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoA_v2(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcArray: CUarray,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoAAsync_v2(
- dstArray: CUarray,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyHtoAAsync_v2(
+ dstArray: cuda_types::CUarray,
dstOffset: usize,
- srcHost: *const ::std::os::raw::c_void,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAtoHAsync_v2(
- dstHost: *mut ::std::os::raw::c_void,
- srcArray: CUarray,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAtoHAsync_v2(
+ dstHost: *mut ::core::ffi::c_void,
+ srcArray: cuda_types::CUarray,
srcOffset: usize,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2D_v2(pCopy: *const CUDA_MEMCPY2D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DUnaligned_v2(pCopy: *const CUDA_MEMCPY2D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3D_v2(pCopy: *const CUDA_MEMCPY3D) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyHtoDAsync_v2(
- dstDevice: CUdeviceptr,
- srcHost: *const ::std::os::raw::c_void,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy2D_v2(pCopy: *const cuda_types::CUDA_MEMCPY2D) -> cuda_types::CUresult;
+ fn cuMemcpy2DUnaligned_v2(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3D_v2(pCopy: *const cuda_types::CUDA_MEMCPY3D) -> cuda_types::CUresult;
+ fn cuMemcpyHtoDAsync_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcHost: *const ::core::ffi::c_void,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoHAsync_v2(
- dstHost: *mut ::std::os::raw::c_void,
- srcDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoHAsync_v2(
+ dstHost: *mut ::core::ffi::c_void,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyDtoDAsync_v2(
- dstDevice: CUdeviceptr,
- srcDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyDtoDAsync_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ srcDevice: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy2DAsync_v2(pCopy: *const CUDA_MEMCPY2D, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DAsync_v2(pCopy: *const CUDA_MEMCPY3D, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD8_v2(dstDevice: CUdeviceptr, uc: ::std::os::raw::c_uchar, N: usize)
- -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD16_v2(
- dstDevice: CUdeviceptr,
- us: ::std::os::raw::c_ushort,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy2DAsync_v2(
+ pCopy: *const cuda_types::CUDA_MEMCPY2D,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3DAsync_v2(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD8_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ uc: ::core::ffi::c_uchar,
N: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD32_v2(dstDevice: CUdeviceptr, ui: ::std::os::raw::c_uint, N: usize)
- -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D8_v2(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD16_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ us: ::core::ffi::c_ushort,
+ N: usize,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD32_v2(
+ dstDevice: cuda_types::CUdeviceptr,
+ ui: ::core::ffi::c_uint,
+ N: usize,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D8_v2(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- uc: ::std::os::raw::c_uchar,
+ uc: ::core::ffi::c_uchar,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D16_v2(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D16_v2(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- us: ::std::os::raw::c_ushort,
+ us: ::core::ffi::c_ushort,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D32_v2(
- dstDevice: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D32_v2(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- ui: ::std::os::raw::c_uint,
+ ui: ::core::ffi::c_uint,
Width: usize,
Height: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy(dst: CUdeviceptr, src: CUdeviceptr, ByteCount: usize) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyAsync(
- dst: CUdeviceptr,
- src: CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy(
+ dst: cuda_types::CUdeviceptr,
+ src: cuda_types::CUdeviceptr,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyPeer(
- dstDevice: CUdeviceptr,
- dstContext: CUcontext,
- srcDevice: CUdeviceptr,
- srcContext: CUcontext,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyAsync(
+ dst: cuda_types::CUdeviceptr,
+ src: cuda_types::CUdeviceptr,
ByteCount: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpyPeerAsync(
- dstDevice: CUdeviceptr,
- dstContext: CUcontext,
- srcDevice: CUdeviceptr,
- srcContext: CUcontext,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyPeer(
+ dstDevice: cuda_types::CUdeviceptr,
+ dstContext: cuda_types::CUcontext,
+ srcDevice: cuda_types::CUdeviceptr,
+ srcContext: cuda_types::CUcontext,
ByteCount: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DPeer(pCopy: *const CUDA_MEMCPY3D_PEER) -> CUresult;
-}
-extern "C" {
- pub fn cuMemcpy3DPeerAsync(pCopy: *const CUDA_MEMCPY3D_PEER, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD8Async(
- dstDevice: CUdeviceptr,
- uc: ::std::os::raw::c_uchar,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpyPeerAsync(
+ dstDevice: cuda_types::CUdeviceptr,
+ dstContext: cuda_types::CUcontext,
+ srcDevice: cuda_types::CUdeviceptr,
+ srcContext: cuda_types::CUcontext,
+ ByteCount: usize,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3DPeer(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D_PEER,
+ ) -> cuda_types::CUresult;
+ fn cuMemcpy3DPeerAsync(
+ pCopy: *const cuda_types::CUDA_MEMCPY3D_PEER,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD8Async(
+ dstDevice: cuda_types::CUdeviceptr,
+ uc: ::core::ffi::c_uchar,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD16Async(
- dstDevice: CUdeviceptr,
- us: ::std::os::raw::c_ushort,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD16Async(
+ dstDevice: cuda_types::CUdeviceptr,
+ us: ::core::ffi::c_ushort,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD32Async(
- dstDevice: CUdeviceptr,
- ui: ::std::os::raw::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD32Async(
+ dstDevice: cuda_types::CUdeviceptr,
+ ui: ::core::ffi::c_uint,
N: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D8Async(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D8Async(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- uc: ::std::os::raw::c_uchar,
+ uc: ::core::ffi::c_uchar,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D16Async(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D16Async(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- us: ::std::os::raw::c_ushort,
+ us: ::core::ffi::c_ushort,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemsetD2D32Async(
- dstDevice: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemsetD2D32Async(
+ dstDevice: cuda_types::CUdeviceptr,
dstPitch: usize,
- ui: ::std::os::raw::c_uint,
+ ui: ::core::ffi::c_uint,
Width: usize,
Height: usize,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetPriority(hStream: CUstream, priority: *mut ::std::os::raw::c_int)
- -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetId(hStream: CUstream, streamId: *mut ::std::os::raw::c_ulonglong)
- -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetFlags(hStream: CUstream, flags: *mut ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCtx(hStream: CUstream, pctx: *mut CUcontext) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitEvent(
- hStream: CUstream,
- hEvent: CUevent,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamAddCallback(
- hStream: CUstream,
- callback: CUstreamCallback,
- userData: *mut ::std::os::raw::c_void,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamAttachMemAsync(
- hStream: CUstream,
- dptr: CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetPriority(
+ hStream: cuda_types::CUstream,
+ priority: *mut ::core::ffi::c_int,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetId(
+ hStream: cuda_types::CUstream,
+ streamId: *mut ::core::ffi::c_ulonglong,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetFlags(
+ hStream: cuda_types::CUstream,
+ flags: *mut ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetCtx(
+ hStream: cuda_types::CUstream,
+ pctx: *mut cuda_types::CUcontext,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitEvent(
+ hStream: cuda_types::CUstream,
+ hEvent: cuda_types::CUevent,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamAddCallback(
+ hStream: cuda_types::CUstream,
+ callback: cuda_types::CUstreamCallback,
+ userData: *mut ::core::ffi::c_void,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamAttachMemAsync(
+ hStream: cuda_types::CUstream,
+ dptr: cuda_types::CUdeviceptr,
length: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamQuery(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamSynchronize(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuEventRecord(hEvent: CUevent, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuEventRecordWithFlags(
- hEvent: CUevent,
- hStream: CUstream,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchKernel(
- f: CUfunction,
- gridDimX: ::std::os::raw::c_uint,
- gridDimY: ::std::os::raw::c_uint,
- gridDimZ: ::std::os::raw::c_uint,
- blockDimX: ::std::os::raw::c_uint,
- blockDimY: ::std::os::raw::c_uint,
- blockDimZ: ::std::os::raw::c_uint,
- sharedMemBytes: ::std::os::raw::c_uint,
- hStream: CUstream,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- extra: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchKernelEx(
- config: *const CUlaunchConfig,
- f: CUfunction,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- extra: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchHostFunc(
- hStream: CUstream,
- fn_: CUhostFn,
- userData: *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsMapResources(
- count: ::std::os::raw::c_uint,
- resources: *mut CUgraphicsResource,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsUnmapResources(
- count: ::std::os::raw::c_uint,
- resources: *mut CUgraphicsResource,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue32(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue32(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue64(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue64(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBatchMemOp(
- stream: CUstream,
- count: ::std::os::raw::c_uint,
- paramArray: *mut CUstreamBatchMemOpParams,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue32_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue32_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue64_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue64_ptsz(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBatchMemOp_ptsz(
- stream: CUstream,
- count: ::std::os::raw::c_uint,
- paramArray: *mut CUstreamBatchMemOpParams,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue32_v2(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue32_v2(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint32_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWriteValue64_v2(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamWaitValue64_v2(
- stream: CUstream,
- addr: CUdeviceptr,
- value: cuuint64_t,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBatchMemOp_v2(
- stream: CUstream,
- count: ::std::os::raw::c_uint,
- paramArray: *mut CUstreamBatchMemOpParams,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPrefetchAsync(
- devPtr: CUdeviceptr,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamQuery(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ fn cuStreamSynchronize(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ fn cuEventRecord(
+ hEvent: cuda_types::CUevent,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuEventRecordWithFlags(
+ hEvent: cuda_types::CUevent,
+ hStream: cuda_types::CUstream,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuLaunchKernel(
+ f: cuda_types::CUfunction,
+ gridDimX: ::core::ffi::c_uint,
+ gridDimY: ::core::ffi::c_uint,
+ gridDimZ: ::core::ffi::c_uint,
+ blockDimX: ::core::ffi::c_uint,
+ blockDimY: ::core::ffi::c_uint,
+ blockDimZ: ::core::ffi::c_uint,
+ sharedMemBytes: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ extra: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuLaunchKernelEx(
+ config: *const cuda_types::CUlaunchConfig,
+ f: cuda_types::CUfunction,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ extra: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuLaunchHostFunc(
+ hStream: cuda_types::CUstream,
+ fn_: cuda_types::CUhostFn,
+ userData: *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuGraphicsMapResources(
+ count: ::core::ffi::c_uint,
+ resources: *mut cuda_types::CUgraphicsResource,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuGraphicsUnmapResources(
+ count: ::core::ffi::c_uint,
+ resources: *mut cuda_types::CUgraphicsResource,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue32(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue32(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue64(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue64(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamBatchMemOp(
+ stream: cuda_types::CUstream,
+ count: ::core::ffi::c_uint,
+ paramArray: *mut cuda_types::CUstreamBatchMemOpParams,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue32_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue32_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue64_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue64_ptsz(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamBatchMemOp_ptsz(
+ stream: cuda_types::CUstream,
+ count: ::core::ffi::c_uint,
+ paramArray: *mut cuda_types::CUstreamBatchMemOpParams,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue32_v2(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue32_v2(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint32_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWriteValue64_v2(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamWaitValue64_v2(
+ stream: cuda_types::CUstream,
+ addr: cuda_types::CUdeviceptr,
+ value: cuda_types::cuuint64_t,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamBatchMemOp_v2(
+ stream: cuda_types::CUstream,
+ count: ::core::ffi::c_uint,
+ paramArray: *mut cuda_types::CUstreamBatchMemOpParams,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuMemPrefetchAsync(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- dstDevice: CUdevice,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemPrefetchAsync_v2(
- devPtr: CUdeviceptr,
+ dstDevice: cuda_types::CUdevice,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemPrefetchAsync_v2(
+ devPtr: cuda_types::CUdeviceptr,
count: usize,
- location: CUmemLocation,
- flags: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuLaunchCooperativeKernel(
- f: CUfunction,
- gridDimX: ::std::os::raw::c_uint,
- gridDimY: ::std::os::raw::c_uint,
- gridDimZ: ::std::os::raw::c_uint,
- blockDimX: ::std::os::raw::c_uint,
- blockDimY: ::std::os::raw::c_uint,
- blockDimZ: ::std::os::raw::c_uint,
- sharedMemBytes: ::std::os::raw::c_uint,
- hStream: CUstream,
- kernelParams: *mut *mut ::std::os::raw::c_void,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuSignalExternalSemaphoresAsync(
- extSemArray: *const CUexternalSemaphore,
- paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
- numExtSems: ::std::os::raw::c_uint,
- stream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuWaitExternalSemaphoresAsync(
- extSemArray: *const CUexternalSemaphore,
- paramsArray: *const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
- numExtSems: ::std::os::raw::c_uint,
- stream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCapture(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCapture_ptsz(hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCapture_v2(hStream: CUstream, mode: CUstreamCaptureMode) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamBeginCaptureToGraph(
- hStream: CUstream,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
- dependencyData: *const CUgraphEdgeData,
+ location: cuda_types::CUmemLocation,
+ flags: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuLaunchCooperativeKernel(
+ f: cuda_types::CUfunction,
+ gridDimX: ::core::ffi::c_uint,
+ gridDimY: ::core::ffi::c_uint,
+ gridDimZ: ::core::ffi::c_uint,
+ blockDimX: ::core::ffi::c_uint,
+ blockDimY: ::core::ffi::c_uint,
+ blockDimZ: ::core::ffi::c_uint,
+ sharedMemBytes: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ kernelParams: *mut *mut ::core::ffi::c_void,
+ ) -> cuda_types::CUresult;
+ fn cuSignalExternalSemaphoresAsync(
+ extSemArray: *const cuda_types::CUexternalSemaphore,
+ paramsArray: *const cuda_types::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS,
+ numExtSems: ::core::ffi::c_uint,
+ stream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuWaitExternalSemaphoresAsync(
+ extSemArray: *const cuda_types::CUexternalSemaphore,
+ paramsArray: *const cuda_types::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS,
+ numExtSems: ::core::ffi::c_uint,
+ stream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamBeginCapture(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ fn cuStreamBeginCapture_ptsz(hStream: cuda_types::CUstream) -> cuda_types::CUresult;
+ fn cuStreamBeginCapture_v2(
+ hStream: cuda_types::CUstream,
+ mode: cuda_types::CUstreamCaptureMode,
+ ) -> cuda_types::CUresult;
+ fn cuStreamBeginCaptureToGraph(
+ hStream: cuda_types::CUstream,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
+ dependencyData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- mode: CUstreamCaptureMode,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamEndCapture(hStream: CUstream, phGraph: *mut CUgraph) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamIsCapturing(
- hStream: CUstream,
- captureStatus: *mut CUstreamCaptureStatus,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo_ptsz(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo_v2(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- graph_out: *mut CUgraph,
- dependencies_out: *mut *const CUgraphNode,
+ mode: cuda_types::CUstreamCaptureMode,
+ ) -> cuda_types::CUresult;
+ fn cuStreamEndCapture(
+ hStream: cuda_types::CUstream,
+ phGraph: *mut cuda_types::CUgraph,
+ ) -> cuda_types::CUresult;
+ fn cuStreamIsCapturing(
+ hStream: cuda_types::CUstream,
+ captureStatus: *mut cuda_types::CUstreamCaptureStatus,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetCaptureInfo(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetCaptureInfo_ptsz(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetCaptureInfo_v2(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ graph_out: *mut cuda_types::CUgraph,
+ dependencies_out: *mut *const cuda_types::CUgraphNode,
numDependencies_out: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetCaptureInfo_v3(
- hStream: CUstream,
- captureStatus_out: *mut CUstreamCaptureStatus,
- id_out: *mut cuuint64_t,
- graph_out: *mut CUgraph,
- dependencies_out: *mut *const CUgraphNode,
- edgeData_out: *mut *const CUgraphEdgeData,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetCaptureInfo_v3(
+ hStream: cuda_types::CUstream,
+ captureStatus_out: *mut cuda_types::CUstreamCaptureStatus,
+ id_out: *mut cuda_types::cuuint64_t,
+ graph_out: *mut cuda_types::CUgraph,
+ dependencies_out: *mut *const cuda_types::CUgraphNode,
+ edgeData_out: *mut *const cuda_types::CUgraphEdgeData,
numDependencies_out: *mut usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphAddKernelNode(
- phGraphNode: *mut CUgraphNode,
- hGraph: CUgraph,
- dependencies: *const CUgraphNode,
+ ) -> cuda_types::CUresult;
+ fn cuGraphAddKernelNode(
+ phGraphNode: *mut cuda_types::CUgraphNode,
+ hGraph: cuda_types::CUgraph,
+ dependencies: *const cuda_types::CUgraphNode,
numDependencies: usize,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeGetParams(
- hNode: CUgraphNode,
- nodeParams: *mut CUDA_KERNEL_NODE_PARAMS_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphKernelNodeSetParams(
- hNode: CUgraphNode,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecKernelNodeSetParams(
- hGraphExec: CUgraphExec,
- hNode: CUgraphNode,
- nodeParams: *const CUDA_KERNEL_NODE_PARAMS_v1,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphInstantiateWithParams(
- phGraphExec: *mut CUgraphExec,
- hGraph: CUgraph,
- instantiateParams: *mut CUDA_GRAPH_INSTANTIATE_PARAMS,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphExecUpdate(
- hGraphExec: CUgraphExec,
- hGraph: CUgraph,
- hErrorNode_out: *mut CUgraphNode,
- updateResult_out: *mut CUgraphExecUpdateResult,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphUpload(hGraph: CUgraphExec, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphLaunch(hGraph: CUgraphExec, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamCopyAttributes(dstStream: CUstream, srcStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamGetAttribute(
- hStream: CUstream,
- attr: CUstreamAttrID,
- value: *mut CUstreamAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamSetAttribute(
- hStream: CUstream,
- attr: CUstreamAttrID,
- param: *const CUstreamAttrValue,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuIpcOpenMemHandle(
- pdptr: *mut CUdeviceptr,
- handle: CUipcMemHandle,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphInstantiate(
- phGraphExec: *mut CUgraphExec,
- hGraph: CUgraph,
- phErrorNode: *mut CUgraphNode,
- logBuffer: *mut ::std::os::raw::c_char,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS_v1,
+ ) -> cuda_types::CUresult;
+ fn cuGraphKernelNodeGetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *mut cuda_types::CUDA_KERNEL_NODE_PARAMS_v1,
+ ) -> cuda_types::CUresult;
+ fn cuGraphKernelNodeSetParams(
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS_v1,
+ ) -> cuda_types::CUresult;
+ fn cuGraphExecKernelNodeSetParams(
+ hGraphExec: cuda_types::CUgraphExec,
+ hNode: cuda_types::CUgraphNode,
+ nodeParams: *const cuda_types::CUDA_KERNEL_NODE_PARAMS_v1,
+ ) -> cuda_types::CUresult;
+ fn cuGraphInstantiateWithParams(
+ phGraphExec: *mut cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ instantiateParams: *mut cuda_types::CUDA_GRAPH_INSTANTIATE_PARAMS,
+ ) -> cuda_types::CUresult;
+ fn cuGraphExecUpdate(
+ hGraphExec: cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ hErrorNode_out: *mut cuda_types::CUgraphNode,
+ updateResult_out: *mut cuda_types::CUgraphExecUpdateResult,
+ ) -> cuda_types::CUresult;
+ fn cuGraphUpload(
+ hGraph: cuda_types::CUgraphExec,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuGraphLaunch(
+ hGraph: cuda_types::CUgraphExec,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamCopyAttributes(
+ dstStream: cuda_types::CUstream,
+ srcStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamGetAttribute(
+ hStream: cuda_types::CUstream,
+ attr: cuda_types::CUstreamAttrID,
+ value: *mut cuda_types::CUstreamAttrValue,
+ ) -> cuda_types::CUresult;
+ fn cuStreamSetAttribute(
+ hStream: cuda_types::CUstream,
+ attr: cuda_types::CUstreamAttrID,
+ param: *const cuda_types::CUstreamAttrValue,
+ ) -> cuda_types::CUresult;
+ fn cuIpcOpenMemHandle(
+ pdptr: *mut cuda_types::CUdeviceptr,
+ handle: cuda_types::CUipcMemHandle,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuGraphInstantiate(
+ phGraphExec: *mut cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ phErrorNode: *mut cuda_types::CUgraphNode,
+ logBuffer: *mut ::core::ffi::c_char,
bufferSize: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphInstantiate_v2(
- phGraphExec: *mut CUgraphExec,
- hGraph: CUgraph,
- phErrorNode: *mut CUgraphNode,
- logBuffer: *mut ::std::os::raw::c_char,
+ ) -> cuda_types::CUresult;
+ fn cuGraphInstantiate_v2(
+ phGraphExec: *mut cuda_types::CUgraphExec,
+ hGraph: cuda_types::CUgraph,
+ phErrorNode: *mut cuda_types::CUgraphNode,
+ logBuffer: *mut ::core::ffi::c_char,
bufferSize: usize,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemMapArrayAsync(
- mapInfoList: *mut CUarrayMapInfo,
- count: ::std::os::raw::c_uint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuMemFreeAsync(dptr: CUdeviceptr, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocAsync(dptr: *mut CUdeviceptr, bytesize: usize, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuMemAllocFromPoolAsync(
- dptr: *mut CUdeviceptr,
+ ) -> cuda_types::CUresult;
+ fn cuMemMapArrayAsync(
+ mapInfoList: *mut cuda_types::CUarrayMapInfo,
+ count: ::core::ffi::c_uint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemFreeAsync(
+ dptr: cuda_types::CUdeviceptr,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemAllocAsync(
+ dptr: *mut cuda_types::CUdeviceptr,
bytesize: usize,
- pool: CUmemoryPool,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamUpdateCaptureDependencies(
- hStream: CUstream,
- dependencies: *mut CUgraphNode,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuMemAllocFromPoolAsync(
+ dptr: *mut cuda_types::CUdeviceptr,
+ bytesize: usize,
+ pool: cuda_types::CUmemoryPool,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuStreamUpdateCaptureDependencies(
+ hStream: cuda_types::CUstream,
+ dependencies: *mut cuda_types::CUgraphNode,
numDependencies: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuStreamUpdateCaptureDependencies_v2(
- hStream: CUstream,
- dependencies: *mut CUgraphNode,
- dependencyData: *const CUgraphEdgeData,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuStreamUpdateCaptureDependencies_v2(
+ hStream: cuda_types::CUstream,
+ dependencies: *mut cuda_types::CUgraphNode,
+ dependencyData: *const cuda_types::CUgraphEdgeData,
numDependencies: usize,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGetProcAddress(
- symbol: *const ::std::os::raw::c_char,
- pfn: *mut *mut ::std::os::raw::c_void,
- cudaVersion: ::std::os::raw::c_int,
- flags: cuuint64_t,
- ) -> CUresult;
-}
-impl CUoutput_mode_enum {
- pub const CU_OUT_KEY_VALUE_PAIR: CUoutput_mode_enum = CUoutput_mode_enum(0);
-}
-impl CUoutput_mode_enum {
- pub const CU_OUT_CSV: CUoutput_mode_enum = CUoutput_mode_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUoutput_mode_enum(pub ::std::os::raw::c_uint);
-pub use self::CUoutput_mode_enum as CUoutput_mode;
-extern "C" {
- pub fn cuProfilerInitialize(
- configFile: *const ::std::os::raw::c_char,
- outputFile: *const ::std::os::raw::c_char,
- outputMode: CUoutput_mode,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuProfilerStart() -> CUresult;
-}
-extern "C" {
- pub fn cuProfilerStop() -> CUresult;
-}
-pub type GLenum = ::std::os::raw::c_uint;
-pub type GLuint = ::std::os::raw::c_uint;
-pub type khronos_int32_t = i32;
-extern "C" {
- pub fn cuGraphicsGLRegisterBuffer(
- pCudaResource: *mut CUgraphicsResource,
- buffer: GLuint,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsGLRegisterImage(
- pCudaResource: *mut CUgraphicsResource,
- image: GLuint,
- target: GLenum,
- Flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-impl CUGLDeviceList_enum {
- pub const CU_GL_DEVICE_LIST_ALL: CUGLDeviceList_enum = CUGLDeviceList_enum(1);
-}
-impl CUGLDeviceList_enum {
- pub const CU_GL_DEVICE_LIST_CURRENT_FRAME: CUGLDeviceList_enum = CUGLDeviceList_enum(2);
-}
-impl CUGLDeviceList_enum {
- pub const CU_GL_DEVICE_LIST_NEXT_FRAME: CUGLDeviceList_enum = CUGLDeviceList_enum(3);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUGLDeviceList_enum(pub ::std::os::raw::c_uint);
-pub use self::CUGLDeviceList_enum as CUGLDeviceList;
-extern "C" {
- pub fn cuGLGetDevices_v2(
- pCudaDeviceCount: *mut ::std::os::raw::c_uint,
- pCudaDevices: *mut CUdevice,
- cudaDeviceCount: ::std::os::raw::c_uint,
- deviceList: CUGLDeviceList,
- ) -> CUresult;
-}
-impl CUGLmap_flags_enum {
- pub const CU_GL_MAP_RESOURCE_FLAGS_NONE: CUGLmap_flags_enum = CUGLmap_flags_enum(0);
-}
-impl CUGLmap_flags_enum {
- pub const CU_GL_MAP_RESOURCE_FLAGS_READ_ONLY: CUGLmap_flags_enum = CUGLmap_flags_enum(1);
-}
-impl CUGLmap_flags_enum {
- pub const CU_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD: CUGLmap_flags_enum = CUGLmap_flags_enum(2);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUGLmap_flags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUGLmap_flags_enum as CUGLmap_flags;
-extern "C" {
- pub fn cuGLCtxCreate_v2(
- pCtx: *mut CUcontext,
- Flags: ::std::os::raw::c_uint,
- device: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLInit() -> CUresult;
-}
-extern "C" {
- pub fn cuGLRegisterBufferObject(buffer: GLuint) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObject_v2_ptds(
- dptr: *mut CUdeviceptr,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuGetProcAddress(
+ symbol: *const ::core::ffi::c_char,
+ pfn: *mut *mut ::core::ffi::c_void,
+ cudaVersion: ::core::ffi::c_int,
+ flags: cuda_types::cuuint64_t,
+ ) -> cuda_types::CUresult;
+ /** \brief Initialize the profiling.
+
+ \deprecated
+
+ Note that this function is deprecated and should not be used.
+ Starting with CUDA 12.0, it always returns error code ::CUDA_ERROR_NOT_SUPPORTED.
+
+ Using this API user can initialize the CUDA profiler by specifying
+ the configuration file, output file and output file format. This
+ API is generally used to profile different set of counters by
+ looping the kernel launch. The \p configFile parameter can be used
+ to select profiling options including profiler counters. Refer to
+ the "Compute Command Line Profiler User Guide" for supported
+ profiler options and counters.
+
+ Limitation: The CUDA profiler cannot be initialized with this API
+ if another profiling tool is already active, as indicated by the
+ ::CUDA_ERROR_PROFILER_DISABLED return code.
+
+ Typical usage of the profiling APIs is as follows:
+
+ for each set of counters/options\n
+ {\n
+ cuProfilerInitialize(); //Initialize profiling, set the counters or options in the config file \n
+ ...\n
+ cuProfilerStart(); \n
+ // code to be profiled \n
+ cuProfilerStop(); \n
+ ...\n
+ cuProfilerStart(); \n
+ // code to be profiled \n
+ cuProfilerStop(); \n
+ ...\n
+ }\n
+
+ \param configFile - Name of the config file that lists the counters/options
+ for profiling.
+ \param outputFile - Name of the outputFile where the profiling results will
+ be stored.
+ \param outputMode - outputMode, can be ::CU_OUT_KEY_VALUE_PAIR or ::CU_OUT_CSV.
+
+ \return
+ ::CUDA_ERROR_NOT_SUPPORTED
+ \notefnerr
+
+ \sa
+ ::cuProfilerStart,
+ ::cuProfilerStop,*/
+ fn cuProfilerInitialize(
+ configFile: *const ::core::ffi::c_char,
+ outputFile: *const ::core::ffi::c_char,
+ outputMode: cuda_types::CUoutput_mode,
+ ) -> cuda_types::CUresult;
+ /** \brief Enable profiling.
+
+ Enables profile collection by the active profiling tool for the
+ current context. If profiling is already enabled, then
+ cuProfilerStart() has no effect.
+
+ cuProfilerStart and cuProfilerStop APIs are used to
+ programmatically control the profiling granularity by allowing
+ profiling to be done only on selective pieces of code.
+
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa
+ ::cuProfilerInitialize,
+ ::cuProfilerStop,
+ ::cudaProfilerStart*/
+ fn cuProfilerStart() -> cuda_types::CUresult;
+ /** \brief Disable profiling.
+
+ Disables profile collection by the active profiling tool for the
+ current context. If profiling is already disabled, then
+ cuProfilerStop() has no effect.
+
+ cuProfilerStart and cuProfilerStop APIs are used to
+ programmatically control the profiling granularity by allowing
+ profiling to be done only on selective pieces of code.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_CONTEXT
+ \notefnerr
+
+ \sa
+ ::cuProfilerInitialize,
+ ::cuProfilerStart,
+ ::cudaProfilerStop*/
+ fn cuProfilerStop() -> cuda_types::CUresult;
+ /** \brief Registers an OpenGL buffer object
+
+ Registers the buffer object specified by \p buffer for access by
+ CUDA. A handle to the registered object is returned as \p
+ pCudaResource. The register flags \p Flags specify the intended usage,
+ as follows:
+
+ - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA. This is the default value.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY: Specifies that CUDA
+ will not write to this resource.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD: Specifies that
+ CUDA will not read from this resource and will write over the
+ entire contents of the resource, so none of the data previously
+ stored in the resource will be preserved.
+
+ \param pCudaResource - Pointer to the returned object handle
+ \param buffer - name of buffer object to be registered
+ \param Flags - Register flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_OPERATING_SYSTEM
+ \notefnerr
+
+ \sa
+ ::cuGraphicsUnregisterResource,
+ ::cuGraphicsMapResources,
+ ::cuGraphicsResourceGetMappedPointer,
+ ::cudaGraphicsGLRegisterBuffer*/
+ fn cuGraphicsGLRegisterBuffer(
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ buffer: cuda_types::GLuint,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Register an OpenGL texture or renderbuffer object
+
+ Registers the texture or renderbuffer object specified by \p image for access by CUDA.
+ A handle to the registered object is returned as \p pCudaResource.
+
+ \p target must match the type of the object, and must be one of ::GL_TEXTURE_2D,
+ ::GL_TEXTURE_RECTANGLE, ::GL_TEXTURE_CUBE_MAP, ::GL_TEXTURE_3D, ::GL_TEXTURE_2D_ARRAY,
+ or ::GL_RENDERBUFFER.
+
+ The register flags \p Flags specify the intended usage, as follows:
+
+ - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA. This is the default value.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY: Specifies that CUDA
+ will not write to this resource.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD: Specifies that
+ CUDA will not read from this resource and will write over the
+ entire contents of the resource, so none of the data previously
+ stored in the resource will be preserved.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: Specifies that CUDA will
+ bind this resource to a surface reference.
+ - ::CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: Specifies that CUDA will perform
+ texture gather operations on this resource.
+
+ The following image formats are supported. For brevity's sake, the list is abbreviated.
+ For ex., {GL_R, GL_RG} X {8, 16} would expand to the following 4 formats
+ {GL_R8, GL_R16, GL_RG8, GL_RG16} :
+ - GL_RED, GL_RG, GL_RGBA, GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY
+ - {GL_R, GL_RG, GL_RGBA} X {8, 16, 16F, 32F, 8UI, 16UI, 32UI, 8I, 16I, 32I}
+ - {GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY} X
+ {8, 16, 16F_ARB, 32F_ARB, 8UI_EXT, 16UI_EXT, 32UI_EXT, 8I_EXT, 16I_EXT, 32I_EXT}
+
+ The following image classes are currently disallowed:
+ - Textures with borders
+ - Multisampled renderbuffers
+
+ \param pCudaResource - Pointer to the returned object handle
+ \param image - name of texture or renderbuffer object to be registered
+ \param target - Identifies the type of object specified by \p image
+ \param Flags - Register flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_OPERATING_SYSTEM
+ \notefnerr
+
+ \sa
+ ::cuGraphicsUnregisterResource,
+ ::cuGraphicsMapResources,
+ ::cuGraphicsSubResourceGetMappedArray,
+ ::cudaGraphicsGLRegisterImage*/
+ fn cuGraphicsGLRegisterImage(
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ image: cuda_types::GLuint,
+ target: cuda_types::GLenum,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the CUDA devices associated with the current OpenGL context
+
+ Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices
+ corresponding to the current OpenGL context. Also returns in \p *pCudaDevices
+ at most cudaDeviceCount of the CUDA-compatible devices corresponding to
+ the current OpenGL context. If any of the GPUs being used by the current OpenGL
+ context are not CUDA capable then the call will return CUDA_ERROR_NO_DEVICE.
+
+ The \p deviceList argument may be any of the following:
+ - ::CU_GL_DEVICE_LIST_ALL: Query all devices used by the current OpenGL context.
+ - ::CU_GL_DEVICE_LIST_CURRENT_FRAME: Query the devices used by the current OpenGL context to
+ render the current frame (in SLI).
+ - ::CU_GL_DEVICE_LIST_NEXT_FRAME: Query the devices used by the current OpenGL context to
+ render the next frame (in SLI). Note that this is a prediction, it can't be guaranteed that
+ this is correct in all cases.
+
+ \param pCudaDeviceCount - Returned number of CUDA devices.
+ \param pCudaDevices - Returned CUDA devices.
+ \param cudaDeviceCount - The size of the output device array pCudaDevices.
+ \param deviceList - The set of devices to return.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NO_DEVICE,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_GRAPHICS_CONTEXT,
+ ::CUDA_ERROR_OPERATING_SYSTEM
+
+ \notefnerr
+
+ \sa
+ ::cuWGLGetDevice,
+ ::cudaGLGetDevices*/
+ fn cuGLGetDevices_v2(
+ pCudaDeviceCount: *mut ::core::ffi::c_uint,
+ pCudaDevices: *mut cuda_types::CUdevice,
+ cudaDeviceCount: ::core::ffi::c_uint,
+ deviceList: cuda_types::CUGLDeviceList,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a CUDA context for interoperability with OpenGL
+
+ \deprecated This function is deprecated as of Cuda 5.0.
+
+ This function is deprecated and should no longer be used. It is
+ no longer necessary to associate a CUDA context with an OpenGL
+ context in order to achieve maximum interoperability performance.
+
+ \param pCtx - Returned CUDA context
+ \param Flags - Options for CUDA context creation
+ \param device - Device on which to create the context
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuCtxCreate, ::cuGLInit, ::cuGLMapBufferObject,
+ ::cuGLRegisterBufferObject, ::cuGLUnmapBufferObject,
+ ::cuGLUnregisterBufferObject, ::cuGLMapBufferObjectAsync,
+ ::cuGLUnmapBufferObjectAsync, ::cuGLSetBufferObjectMapFlags,
+ ::cuWGLGetDevice*/
+ fn cuGLCtxCreate_v2(
+ pCtx: *mut cuda_types::CUcontext,
+ Flags: ::core::ffi::c_uint,
+ device: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ /** \brief Initializes OpenGL interoperability
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Initializes OpenGL interoperability. This function is deprecated
+ and calling it is no longer required. It may fail if the needed
+ OpenGL driver facilities are not available.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_UNKNOWN
+ \notefnerr
+
+ \sa ::cuGLMapBufferObject,
+ ::cuGLRegisterBufferObject, ::cuGLUnmapBufferObject,
+ ::cuGLUnregisterBufferObject, ::cuGLMapBufferObjectAsync,
+ ::cuGLUnmapBufferObjectAsync, ::cuGLSetBufferObjectMapFlags,
+ ::cuWGLGetDevice*/
+ fn cuGLInit() -> cuda_types::CUresult;
+ /** \brief Registers an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Registers the buffer object specified by \p buffer for access by
+ CUDA. This function must be called before CUDA can map the buffer
+ object. There must be a valid OpenGL context bound to the current
+ thread when this function is called, and the buffer name is
+ resolved by that context.
+
+ \param buffer - The name of the buffer object to register.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_ALREADY_MAPPED
+ \notefnerr
+
+ \sa ::cuGraphicsGLRegisterBuffer*/
+ fn cuGLRegisterBufferObject(buffer: cuda_types::GLuint) -> cuda_types::CUresult;
+ /** \brief Maps an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Maps the buffer object specified by \p buffer into the address space of the
+ current CUDA context and returns in \p *dptr and \p *size the base pointer
+ and size of the resulting mapping.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ All streams in the current CUDA context are synchronized with the
+ current GL context.
+
+ \param dptr - Returned mapped base pointer
+ \param size - Returned size of mapping
+ \param buffer - The name of the buffer object to map
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_MAP_FAILED
+ \notefnerr
+
+ \sa ::cuGraphicsMapResources*/
+ fn cuGLMapBufferObject_v2_ptds(
+ dptr: *mut cuda_types::CUdeviceptr,
size: *mut usize,
- buffer: GLuint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLUnmapBufferObject(buffer: GLuint) -> CUresult;
-}
-extern "C" {
- pub fn cuGLUnregisterBufferObject(buffer: GLuint) -> CUresult;
-}
-extern "C" {
- pub fn cuGLSetBufferObjectMapFlags(buffer: GLuint, Flags: ::std::os::raw::c_uint) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObjectAsync_v2_ptsz(
- dptr: *mut CUdeviceptr,
+ buffer: cuda_types::GLuint,
+ ) -> cuda_types::CUresult;
+ /** \brief Unmaps an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Unmaps the buffer object specified by \p buffer for access by CUDA.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ All streams in the current CUDA context are synchronized with the
+ current GL context.
+
+ \param buffer - Buffer object to unmap
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuGraphicsUnmapResources*/
+ fn cuGLUnmapBufferObject(buffer: cuda_types::GLuint) -> cuda_types::CUresult;
+ /** \brief Unregister an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Unregisters the buffer object specified by \p buffer. This
+ releases any resources associated with the registered buffer.
+ After this call, the buffer may no longer be mapped for access by
+ CUDA.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ \param buffer - Name of the buffer object to unregister
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuGraphicsUnregisterResource*/
+ fn cuGLUnregisterBufferObject(buffer: cuda_types::GLuint) -> cuda_types::CUresult;
+ /** \brief Set the map flags for an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Sets the map flags for the buffer object specified by \p buffer.
+
+ Changes to \p Flags will take effect the next time \p buffer is mapped.
+ The \p Flags argument may be any of the following:
+ - ::CU_GL_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA kernels. This is the default value.
+ - ::CU_GL_MAP_RESOURCE_FLAGS_READ_ONLY: Specifies that CUDA kernels which
+ access this resource will not write to this resource.
+ - ::CU_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD: Specifies that CUDA kernels
+ which access this resource will not read from this resource and will
+ write over the entire contents of the resource, so none of the data
+ previously stored in the resource will be preserved.
+
+ If \p buffer has not been registered for use with CUDA, then
+ ::CUDA_ERROR_INVALID_HANDLE is returned. If \p buffer is presently
+ mapped for access by CUDA, then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ \param buffer - Buffer object to unmap
+ \param Flags - Map flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ \notefnerr
+
+ \sa ::cuGraphicsResourceSetMapFlags*/
+ fn cuGLSetBufferObjectMapFlags(
+ buffer: cuda_types::GLuint,
+ Flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Maps an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Maps the buffer object specified by \p buffer into the address space of the
+ current CUDA context and returns in \p *dptr and \p *size the base pointer
+ and size of the resulting mapping.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ Stream \p hStream in the current CUDA context is synchronized with
+ the current GL context.
+
+ \param dptr - Returned mapped base pointer
+ \param size - Returned size of mapping
+ \param buffer - The name of the buffer object to map
+ \param hStream - Stream to synchronize
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_MAP_FAILED
+ \notefnerr
+
+ \sa ::cuGraphicsMapResources*/
+ fn cuGLMapBufferObjectAsync_v2_ptsz(
+ dptr: *mut cuda_types::CUdeviceptr,
size: *mut usize,
- buffer: GLuint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLUnmapBufferObjectAsync(buffer: GLuint, hStream: CUstream) -> CUresult;
-}
-extern "C" {
- pub fn cuGLGetDevices(
- pCudaDeviceCount: *mut ::std::os::raw::c_uint,
- pCudaDevices: *mut CUdevice,
- cudaDeviceCount: ::std::os::raw::c_uint,
- deviceList: CUGLDeviceList,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObject_v2(
- dptr: *mut CUdeviceptr,
+ buffer: cuda_types::GLuint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Unmaps an OpenGL buffer object
+
+ \deprecated This function is deprecated as of Cuda 3.0.
+
+ Unmaps the buffer object specified by \p buffer for access by CUDA.
+
+ There must be a valid OpenGL context bound to the current thread
+ when this function is called. This must be the same context, or a
+ member of the same shareGroup, as the context that was bound when
+ the buffer was registered.
+
+ Stream \p hStream in the current CUDA context is synchronized with
+ the current GL context.
+
+ \param buffer - Name of the buffer object to unmap
+ \param hStream - Stream to synchronize
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuGraphicsUnmapResources*/
+ fn cuGLUnmapBufferObjectAsync(
+ buffer: cuda_types::GLuint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuGLGetDevices(
+ pCudaDeviceCount: *mut ::core::ffi::c_uint,
+ pCudaDevices: *mut cuda_types::CUdevice,
+ cudaDeviceCount: ::core::ffi::c_uint,
+ deviceList: cuda_types::CUGLDeviceList,
+ ) -> cuda_types::CUresult;
+ fn cuGLMapBufferObject_v2(
+ dptr: *mut cuda_types::CUdeviceptr,
size: *mut usize,
- buffer: GLuint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObjectAsync_v2(
- dptr: *mut CUdeviceptr,
+ buffer: cuda_types::GLuint,
+ ) -> cuda_types::CUresult;
+ fn cuGLMapBufferObjectAsync_v2(
+ dptr: *mut cuda_types::CUdeviceptr,
size: *mut usize,
- buffer: GLuint,
- hStream: CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLCtxCreate(
- pCtx: *mut CUcontext,
- Flags: ::std::os::raw::c_uint,
- device: CUdevice,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObject(
- dptr: *mut CUdeviceptr_v1,
- size: *mut ::std::os::raw::c_uint,
- buffer: GLuint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGLMapBufferObjectAsync(
- dptr: *mut CUdeviceptr_v1,
- size: *mut ::std::os::raw::c_uint,
- buffer: GLuint,
- hStream: CUstream,
- ) -> CUresult;
-}
-pub type EGLint = khronos_int32_t;
-pub type EGLSyncKHR = *mut ::std::os::raw::c_void;
-pub type EGLImageKHR = *mut ::std::os::raw::c_void;
-pub type EGLStreamKHR = *mut ::std::os::raw::c_void;
-impl CUeglFrameType_enum {
- pub const CU_EGL_FRAME_TYPE_ARRAY: CUeglFrameType_enum = CUeglFrameType_enum(0);
-}
-impl CUeglFrameType_enum {
- pub const CU_EGL_FRAME_TYPE_PITCH: CUeglFrameType_enum = CUeglFrameType_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUeglFrameType_enum(pub ::std::os::raw::c_uint);
-pub use self::CUeglFrameType_enum as CUeglFrameType;
-impl CUeglResourceLocationFlags_enum {
- pub const CU_EGL_RESOURCE_LOCATION_SYSMEM: CUeglResourceLocationFlags_enum =
- CUeglResourceLocationFlags_enum(0);
-}
-impl CUeglResourceLocationFlags_enum {
- pub const CU_EGL_RESOURCE_LOCATION_VIDMEM: CUeglResourceLocationFlags_enum =
- CUeglResourceLocationFlags_enum(1);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUeglResourceLocationFlags_enum(pub ::std::os::raw::c_uint);
-pub use self::CUeglResourceLocationFlags_enum as CUeglResourceLocationFlags;
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(0);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(1);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV422_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(2);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV422_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(3);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_RGB: CUeglColorFormat_enum = CUeglColorFormat_enum(4);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BGR: CUeglColorFormat_enum = CUeglColorFormat_enum(5);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_ARGB: CUeglColorFormat_enum = CUeglColorFormat_enum(6);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_RGBA: CUeglColorFormat_enum = CUeglColorFormat_enum(7);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_L: CUeglColorFormat_enum = CUeglColorFormat_enum(8);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_R: CUeglColorFormat_enum = CUeglColorFormat_enum(9);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV444_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(10);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV444_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(11);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUYV_422: CUeglColorFormat_enum = CUeglColorFormat_enum(12);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_UYVY_422: CUeglColorFormat_enum = CUeglColorFormat_enum(13);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_ABGR: CUeglColorFormat_enum = CUeglColorFormat_enum(14);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BGRA: CUeglColorFormat_enum = CUeglColorFormat_enum(15);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_A: CUeglColorFormat_enum = CUeglColorFormat_enum(16);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_RG: CUeglColorFormat_enum = CUeglColorFormat_enum(17);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_AYUV: CUeglColorFormat_enum = CUeglColorFormat_enum(18);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU444_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(19);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU422_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(20);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(21);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_444_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(22);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_420_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(23);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_444_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(24);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_420_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(25);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_VYUY_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(26);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_UYVY_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(27);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUYV_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(28);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVYU_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(29);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(30);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUVA_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(31);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_AYUV_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(32);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV444_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(33);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV422_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(34);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(35);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV444_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(36);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV422_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(37);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(38);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU444_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(39);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU422_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(40);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_PLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(41);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU444_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(42);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU422_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(43);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(44);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(45);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(46);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(47);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(48);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER10_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(49);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER10_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(50);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER10_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(51);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER10_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(52);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(53);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(54);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(55);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(56);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER14_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(57);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER14_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(58);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER14_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(59);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER14_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(60);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER20_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(61);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER20_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(62);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER20_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(63);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER20_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(64);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU444_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(65);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU422_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(66);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_PLANAR: CUeglColorFormat_enum = CUeglColorFormat_enum(67);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_ISP_RGGB: CUeglColorFormat_enum = CUeglColorFormat_enum(68);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_ISP_BGGR: CUeglColorFormat_enum = CUeglColorFormat_enum(69);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_ISP_GRBG: CUeglColorFormat_enum = CUeglColorFormat_enum(70);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_ISP_GBRG: CUeglColorFormat_enum = CUeglColorFormat_enum(71);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_BCCR: CUeglColorFormat_enum = CUeglColorFormat_enum(72);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_RCCB: CUeglColorFormat_enum = CUeglColorFormat_enum(73);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_CRBC: CUeglColorFormat_enum = CUeglColorFormat_enum(74);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER_CBRC: CUeglColorFormat_enum = CUeglColorFormat_enum(75);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER10_CCCC: CUeglColorFormat_enum = CUeglColorFormat_enum(76);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_BCCR: CUeglColorFormat_enum = CUeglColorFormat_enum(77);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_RCCB: CUeglColorFormat_enum = CUeglColorFormat_enum(78);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_CRBC: CUeglColorFormat_enum = CUeglColorFormat_enum(79);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_CBRC: CUeglColorFormat_enum = CUeglColorFormat_enum(80);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_BAYER12_CCCC: CUeglColorFormat_enum = CUeglColorFormat_enum(81);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y: CUeglColorFormat_enum = CUeglColorFormat_enum(82);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_SEMIPLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(83);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_SEMIPLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(84);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_PLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(85);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_PLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(86);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_SEMIPLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(87);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_SEMIPLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(88);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV420_PLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(89);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVU420_PLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(90);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_420_SEMIPLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(91);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_420_SEMIPLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(92);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_422_SEMIPLANAR_2020: CUeglColorFormat_enum =
- CUeglColorFormat_enum(93);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_422_SEMIPLANAR: CUeglColorFormat_enum =
- CUeglColorFormat_enum(94);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_422_SEMIPLANAR_709: CUeglColorFormat_enum =
- CUeglColorFormat_enum(95);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(96);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y_709_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(97);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(98);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10_709_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(99);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(100);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12_709_ER: CUeglColorFormat_enum = CUeglColorFormat_enum(101);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUVA: CUeglColorFormat_enum = CUeglColorFormat_enum(102);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YUV: CUeglColorFormat_enum = CUeglColorFormat_enum(103);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_YVYU: CUeglColorFormat_enum = CUeglColorFormat_enum(104);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_VYUY: CUeglColorFormat_enum = CUeglColorFormat_enum(105);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_420_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(106);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_420_SEMIPLANAR_709_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(107);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_444_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(108);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y10V10U10_444_SEMIPLANAR_709_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(109);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_420_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(110);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_420_SEMIPLANAR_709_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(111);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_444_SEMIPLANAR_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(112);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_Y12V12U12_444_SEMIPLANAR_709_ER: CUeglColorFormat_enum =
- CUeglColorFormat_enum(113);
-}
-impl CUeglColorFormat_enum {
- pub const CU_EGL_COLOR_FORMAT_MAX: CUeglColorFormat_enum = CUeglColorFormat_enum(114);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct CUeglColorFormat_enum(pub ::std::os::raw::c_uint);
-pub use self::CUeglColorFormat_enum as CUeglColorFormat;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUeglFrame_st {
- pub frame: CUeglFrame_st__bindgen_ty_1,
- pub width: ::std::os::raw::c_uint,
- pub height: ::std::os::raw::c_uint,
- pub depth: ::std::os::raw::c_uint,
- pub pitch: ::std::os::raw::c_uint,
- pub planeCount: ::std::os::raw::c_uint,
- pub numChannels: ::std::os::raw::c_uint,
- pub frameType: CUeglFrameType,
- pub eglColorFormat: CUeglColorFormat,
- pub cuFormat: CUarray_format,
-}
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub union CUeglFrame_st__bindgen_ty_1 {
- pub pArray: [CUarray; 3usize],
- pub pPitch: [*mut ::std::os::raw::c_void; 3usize],
-}
-pub type CUeglFrame_v1 = CUeglFrame_st;
-pub type CUeglFrame = CUeglFrame_v1;
-#[repr(C)]
-#[derive(Copy, Clone)]
-pub struct CUeglStreamConnection_st {
- _unused: [u8; 0],
-}
-pub type CUeglStreamConnection = *mut CUeglStreamConnection_st;
-extern "C" {
- pub fn cuGraphicsEGLRegisterImage(
- pCudaResource: *mut CUgraphicsResource,
- image: EGLImageKHR,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamConsumerConnect(
- conn: *mut CUeglStreamConnection,
- stream: EGLStreamKHR,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamConsumerConnectWithFlags(
- conn: *mut CUeglStreamConnection,
- stream: EGLStreamKHR,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamConsumerDisconnect(conn: *mut CUeglStreamConnection) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamConsumerAcquireFrame(
- conn: *mut CUeglStreamConnection,
- pCudaResource: *mut CUgraphicsResource,
- pStream: *mut CUstream,
- timeout: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamConsumerReleaseFrame(
- conn: *mut CUeglStreamConnection,
- pCudaResource: CUgraphicsResource,
- pStream: *mut CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamProducerConnect(
- conn: *mut CUeglStreamConnection,
- stream: EGLStreamKHR,
- width: EGLint,
- height: EGLint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamProducerDisconnect(conn: *mut CUeglStreamConnection) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamProducerPresentFrame(
- conn: *mut CUeglStreamConnection,
- eglframe: CUeglFrame,
- pStream: *mut CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEGLStreamProducerReturnFrame(
- conn: *mut CUeglStreamConnection,
- eglframe: *mut CUeglFrame,
- pStream: *mut CUstream,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsResourceGetMappedEglFrame(
- eglFrame: *mut CUeglFrame,
- resource: CUgraphicsResource,
- index: ::std::os::raw::c_uint,
- mipLevel: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuEventCreateFromEGLSync(
- phEvent: *mut CUevent,
- eglSync: EGLSyncKHR,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-impl VdpStatus {
- pub const VDP_STATUS_OK: VdpStatus = VdpStatus(0);
-}
-impl VdpStatus {
- pub const VDP_STATUS_NO_IMPLEMENTATION: VdpStatus = VdpStatus(1);
-}
-impl VdpStatus {
- pub const VDP_STATUS_DISPLAY_PREEMPTED: VdpStatus = VdpStatus(2);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_HANDLE: VdpStatus = VdpStatus(3);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_POINTER: VdpStatus = VdpStatus(4);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_CHROMA_TYPE: VdpStatus = VdpStatus(5);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_Y_CB_CR_FORMAT: VdpStatus = VdpStatus(6);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_RGBA_FORMAT: VdpStatus = VdpStatus(7);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_INDEXED_FORMAT: VdpStatus = VdpStatus(8);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_COLOR_STANDARD: VdpStatus = VdpStatus(9);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_COLOR_TABLE_FORMAT: VdpStatus = VdpStatus(10);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_BLEND_FACTOR: VdpStatus = VdpStatus(11);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_BLEND_EQUATION: VdpStatus = VdpStatus(12);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_FLAG: VdpStatus = VdpStatus(13);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_DECODER_PROFILE: VdpStatus = VdpStatus(14);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_VIDEO_MIXER_FEATURE: VdpStatus = VdpStatus(15);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_VIDEO_MIXER_PARAMETER: VdpStatus = VdpStatus(16);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE: VdpStatus = VdpStatus(17);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_VIDEO_MIXER_PICTURE_STRUCTURE: VdpStatus = VdpStatus(18);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_FUNC_ID: VdpStatus = VdpStatus(19);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_SIZE: VdpStatus = VdpStatus(20);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_VALUE: VdpStatus = VdpStatus(21);
-}
-impl VdpStatus {
- pub const VDP_STATUS_INVALID_STRUCT_VERSION: VdpStatus = VdpStatus(22);
-}
-impl VdpStatus {
- pub const VDP_STATUS_RESOURCES: VdpStatus = VdpStatus(23);
-}
-impl VdpStatus {
- pub const VDP_STATUS_HANDLE_DEVICE_MISMATCH: VdpStatus = VdpStatus(24);
-}
-impl VdpStatus {
- pub const VDP_STATUS_ERROR: VdpStatus = VdpStatus(25);
-}
-#[repr(transparent)]
-#[derive(Copy, Clone, Hash, PartialEq, Eq)]
-pub struct VdpStatus(pub ::std::os::raw::c_uint);
-pub type VdpDevice = u32;
-pub type VdpVideoSurface = u32;
-pub type VdpOutputSurface = u32;
-pub type VdpFuncId = u32;
-pub type VdpGetProcAddress = ::std::option::Option<
- unsafe extern "C" fn(
- device: VdpDevice,
- function_id: VdpFuncId,
- function_pointer: *mut *mut ::std::os::raw::c_void,
- ) -> VdpStatus,
->;
-extern "C" {
- pub fn cuVDPAUGetDevice(
- pDevice: *mut CUdevice,
- vdpDevice: VdpDevice,
- vdpGetProcAddress: VdpGetProcAddress,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuVDPAUCtxCreate_v2(
- pCtx: *mut CUcontext,
- flags: ::std::os::raw::c_uint,
- device: CUdevice,
- vdpDevice: VdpDevice,
- vdpGetProcAddress: VdpGetProcAddress,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsVDPAURegisterVideoSurface(
- pCudaResource: *mut CUgraphicsResource,
- vdpSurface: VdpVideoSurface,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuGraphicsVDPAURegisterOutputSurface(
- pCudaResource: *mut CUgraphicsResource,
- vdpSurface: VdpOutputSurface,
- flags: ::std::os::raw::c_uint,
- ) -> CUresult;
-}
-extern "C" {
- pub fn cuVDPAUCtxCreate(
- pCtx: *mut CUcontext,
- flags: ::std::os::raw::c_uint,
- device: CUdevice,
- vdpDevice: VdpDevice,
- vdpGetProcAddress: VdpGetProcAddress,
- ) -> CUresult;
+ buffer: cuda_types::GLuint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ fn cuGLCtxCreate(
+ pCtx: *mut cuda_types::CUcontext,
+ Flags: ::core::ffi::c_uint,
+ device: cuda_types::CUdevice,
+ ) -> cuda_types::CUresult;
+ fn cuGLMapBufferObject(
+ dptr: *mut cuda_types::CUdeviceptr_v1,
+ size: *mut ::core::ffi::c_uint,
+ buffer: cuda_types::GLuint,
+ ) -> cuda_types::CUresult;
+ fn cuGLMapBufferObjectAsync(
+ dptr: *mut cuda_types::CUdeviceptr_v1,
+ size: *mut ::core::ffi::c_uint,
+ buffer: cuda_types::GLuint,
+ hStream: cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Registers an EGL image
+
+ Registers the EGLImageKHR specified by \p image for access by
+ CUDA. A handle to the registered object is returned as \p pCudaResource.
+ Additional Mapping/Unmapping is not required for the registered resource and
+ ::cuGraphicsResourceGetMappedEglFrame can be directly called on the \p pCudaResource.
+
+ The application will be responsible for synchronizing access to shared objects.
+ The application must ensure that any pending operation which access the objects have completed
+ before passing control to CUDA. This may be accomplished by issuing and waiting for
+ glFinish command on all GLcontexts (for OpenGL and likewise for other APIs).
+ The application will be also responsible for ensuring that any pending operation on the
+ registered CUDA resource has completed prior to executing subsequent commands in other APIs
+ accesing the same memory objects.
+ This can be accomplished by calling cuCtxSynchronize or cuEventSynchronize (preferably).
+
+ The surface's intended usage is specified using \p flags, as follows:
+
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA. This is the default value.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY: Specifies that CUDA
+ will not write to this resource.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD: Specifies that
+ CUDA will not read from this resource and will write over the
+ entire contents of the resource, so none of the data previously
+ stored in the resource will be preserved.
+
+ The EGLImageKHR is an object which can be used to create EGLImage target resource. It is defined as a void pointer.
+ typedef void* EGLImageKHR
+
+ \param pCudaResource - Pointer to the returned object handle
+ \param image - An EGLImageKHR image which can be used to create target resource.
+ \param flags - Map flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuGraphicsEGLRegisterImage, ::cuGraphicsUnregisterResource,
+ ::cuGraphicsResourceSetMapFlags, ::cuGraphicsMapResources,
+ ::cuGraphicsUnmapResources,
+ ::cudaGraphicsEGLRegisterImage*/
+ fn cuGraphicsEGLRegisterImage(
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ image: cuda_types::EGLImageKHR,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Connect CUDA to EGLStream as a consumer.
+
+ Connect CUDA as a consumer to EGLStreamKHR specified by \p stream.
+
+ The EGLStreamKHR is an EGL object that transfers a sequence of image frames from one
+ API to another.
+
+ \param conn - Pointer to the returned connection handle
+ \param stream - EGLStreamKHR handle
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuEGLStreamConsumerConnect, ::cuEGLStreamConsumerDisconnect,
+ ::cuEGLStreamConsumerAcquireFrame, ::cuEGLStreamConsumerReleaseFrame,
+ ::cudaEGLStreamConsumerConnect*/
+ fn cuEGLStreamConsumerConnect(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ stream: cuda_types::EGLStreamKHR,
+ ) -> cuda_types::CUresult;
+ /** \brief Connect CUDA to EGLStream as a consumer with given flags.
+
+ Connect CUDA as a consumer to EGLStreamKHR specified by \p stream with specified \p flags defined by CUeglResourceLocationFlags.
+
+ The flags specify whether the consumer wants to access frames from system memory or video memory.
+ Default is ::CU_EGL_RESOURCE_LOCATION_VIDMEM.
+
+ \param conn - Pointer to the returned connection handle
+ \param stream - EGLStreamKHR handle
+ \param flags - Flags denote intended location - system or video.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuEGLStreamConsumerConnect, ::cuEGLStreamConsumerDisconnect,
+ ::cuEGLStreamConsumerAcquireFrame, ::cuEGLStreamConsumerReleaseFrame,
+ ::cudaEGLStreamConsumerConnectWithFlags*/
+ fn cuEGLStreamConsumerConnectWithFlags(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ stream: cuda_types::EGLStreamKHR,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Disconnect CUDA as a consumer to EGLStream .
+
+ Disconnect CUDA as a consumer to EGLStreamKHR.
+
+ \param conn - Conection to disconnect.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuEGLStreamConsumerConnect, ::cuEGLStreamConsumerDisconnect,
+ ::cuEGLStreamConsumerAcquireFrame, ::cuEGLStreamConsumerReleaseFrame,
+ ::cudaEGLStreamConsumerDisconnect*/
+ fn cuEGLStreamConsumerDisconnect(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ ) -> cuda_types::CUresult;
+ /** \brief Acquire an image frame from the EGLStream with CUDA as a consumer.
+
+ Acquire an image frame from EGLStreamKHR. This API can also acquire an old frame presented
+ by the producer unless explicitly disabled by setting EGL_SUPPORT_REUSE_NV flag to EGL_FALSE
+ during stream initialization. By default, EGLStream is created with this flag set to EGL_TRUE.
+ ::cuGraphicsResourceGetMappedEglFrame can be called on \p pCudaResource to get
+ ::CUeglFrame.
+
+ \param conn - Connection on which to acquire
+ \param pCudaResource - CUDA resource on which the stream frame will be mapped for use.
+ \param pStream - CUDA stream for synchronization and any data migrations
+ implied by ::CUeglResourceLocationFlags.
+ \param timeout - Desired timeout in usec for a new frame to be acquired.
+ If set as ::CUDA_EGL_INFINITE_TIMEOUT, acquire waits infinitely.
+ After timeout occurs CUDA consumer tries to acquire an old frame
+ if available and EGL_SUPPORT_REUSE_NV flag is set.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT,
+
+ \sa ::cuEGLStreamConsumerConnect, ::cuEGLStreamConsumerDisconnect,
+ ::cuEGLStreamConsumerAcquireFrame, ::cuEGLStreamConsumerReleaseFrame,
+ ::cudaEGLStreamConsumerAcquireFrame*/
+ fn cuEGLStreamConsumerAcquireFrame(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ pStream: *mut cuda_types::CUstream,
+ timeout: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Releases the last frame acquired from the EGLStream.
+
+ Release the acquired image frame specified by \p pCudaResource to EGLStreamKHR.
+ If EGL_SUPPORT_REUSE_NV flag is set to EGL_TRUE, at the time of EGL creation
+ this API doesn't release the last frame acquired on the EGLStream.
+ By default, EGLStream is created with this flag set to EGL_TRUE.
+
+ \param conn - Connection on which to release
+ \param pCudaResource - CUDA resource whose corresponding frame is to be released
+ \param pStream - CUDA stream on which release will be done.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+
+ \sa ::cuEGLStreamConsumerConnect, ::cuEGLStreamConsumerDisconnect,
+ ::cuEGLStreamConsumerAcquireFrame, ::cuEGLStreamConsumerReleaseFrame,
+ ::cudaEGLStreamConsumerReleaseFrame*/
+ fn cuEGLStreamConsumerReleaseFrame(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ pCudaResource: cuda_types::CUgraphicsResource,
+ pStream: *mut cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Connect CUDA to EGLStream as a producer.
+
+ Connect CUDA as a producer to EGLStreamKHR specified by \p stream.
+
+ The EGLStreamKHR is an EGL object that transfers a sequence of image frames from one
+ API to another.
+
+ \param conn - Pointer to the returned connection handle
+ \param stream - EGLStreamKHR handle
+ \param width - width of the image to be submitted to the stream
+ \param height - height of the image to be submitted to the stream
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuEGLStreamProducerConnect, ::cuEGLStreamProducerDisconnect,
+ ::cuEGLStreamProducerPresentFrame,
+ ::cudaEGLStreamProducerConnect*/
+ fn cuEGLStreamProducerConnect(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ stream: cuda_types::EGLStreamKHR,
+ width: cuda_types::EGLint,
+ height: cuda_types::EGLint,
+ ) -> cuda_types::CUresult;
+ /** \brief Disconnect CUDA as a producer to EGLStream .
+
+ Disconnect CUDA as a producer to EGLStreamKHR.
+
+ \param conn - Conection to disconnect.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+
+ \sa ::cuEGLStreamProducerConnect, ::cuEGLStreamProducerDisconnect,
+ ::cuEGLStreamProducerPresentFrame,
+ ::cudaEGLStreamProducerDisconnect*/
+ fn cuEGLStreamProducerDisconnect(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ ) -> cuda_types::CUresult;
+ /** \brief Present a CUDA eglFrame to the EGLStream with CUDA as a producer.
+
+ When a frame is presented by the producer, it gets associated with the EGLStream
+ and thus it is illegal to free the frame before the producer is disconnected.
+ If a frame is freed and reused it may lead to undefined behavior.
+
+ If producer and consumer are on different GPUs (iGPU and dGPU) then frametype
+ ::CU_EGL_FRAME_TYPE_ARRAY is not supported. ::CU_EGL_FRAME_TYPE_PITCH can be used for
+ such cross-device applications.
+
+ The ::CUeglFrame is defined as:
+ \code
+ typedef struct CUeglFrame_st {
+ union {
+ CUarray pArray[MAX_PLANES];
+ void* pPitch[MAX_PLANES];
+ } frame;
+ unsigned int width;
+ unsigned int height;
+ unsigned int depth;
+ unsigned int pitch;
+ unsigned int planeCount;
+ unsigned int numChannels;
+ CUeglFrameType frameType;
+ CUeglColorFormat eglColorFormat;
+ CUarray_format cuFormat;
+ } CUeglFrame;
+ \endcode
+
+ For ::CUeglFrame of type ::CU_EGL_FRAME_TYPE_PITCH, the application may present sub-region of a memory
+ allocation. In that case, the pitched pointer will specify the start address of the sub-region in
+ the allocation and corresponding ::CUeglFrame fields will specify the dimensions of the sub-region.
+
+ \param conn - Connection on which to present the CUDA array
+ \param eglframe - CUDA Eglstream Proucer Frame handle to be sent to the consumer over EglStream.
+ \param pStream - CUDA stream on which to present the frame.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+
+ \sa ::cuEGLStreamProducerConnect, ::cuEGLStreamProducerDisconnect,
+ ::cuEGLStreamProducerReturnFrame,
+ ::cudaEGLStreamProducerPresentFrame*/
+ fn cuEGLStreamProducerPresentFrame(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ eglframe: cuda_types::CUeglFrame,
+ pStream: *mut cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Return the CUDA eglFrame to the EGLStream released by the consumer.
+
+ This API can potentially return CUDA_ERROR_LAUNCH_TIMEOUT if the consumer has not
+ returned a frame to EGL stream. If timeout is returned the application can retry.
+
+ \param conn - Connection on which to return
+ \param eglframe - CUDA Eglstream Proucer Frame handle returned from the consumer over EglStream.
+ \param pStream - CUDA stream on which to return the frame.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_LAUNCH_TIMEOUT
+
+ \sa ::cuEGLStreamProducerConnect, ::cuEGLStreamProducerDisconnect,
+ ::cuEGLStreamProducerPresentFrame,
+ ::cudaEGLStreamProducerReturnFrame*/
+ fn cuEGLStreamProducerReturnFrame(
+ conn: *mut cuda_types::CUeglStreamConnection,
+ eglframe: *mut cuda_types::CUeglFrame,
+ pStream: *mut cuda_types::CUstream,
+ ) -> cuda_types::CUresult;
+ /** \brief Get an eglFrame through which to access a registered EGL graphics resource.
+
+ Returns in \p *eglFrame an eglFrame pointer through which the registered graphics resource
+ \p resource may be accessed.
+ This API can only be called for registered EGL graphics resources.
+
+ The ::CUeglFrame is defined as:
+ \code
+ typedef struct CUeglFrame_st {
+ union {
+ CUarray pArray[MAX_PLANES];
+ void* pPitch[MAX_PLANES];
+ } frame;
+ unsigned int width;
+ unsigned int height;
+ unsigned int depth;
+ unsigned int pitch;
+ unsigned int planeCount;
+ unsigned int numChannels;
+ CUeglFrameType frameType;
+ CUeglColorFormat eglColorFormat;
+ CUarray_format cuFormat;
+ } CUeglFrame;
+ \endcode
+
+ If \p resource is not registered then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ \param eglFrame - Returned eglFrame.
+ \param resource - Registered resource to access.
+ \param index - Index for cubemap surfaces.
+ \param mipLevel - Mipmap level for the subresource to access.
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_NOT_MAPPED
+
+ \sa
+ ::cuGraphicsMapResources,
+ ::cuGraphicsSubResourceGetMappedArray,
+ ::cuGraphicsResourceGetMappedPointer,
+ ::cudaGraphicsResourceGetMappedEglFrame*/
+ fn cuGraphicsResourceGetMappedEglFrame(
+ eglFrame: *mut cuda_types::CUeglFrame,
+ resource: cuda_types::CUgraphicsResource,
+ index: ::core::ffi::c_uint,
+ mipLevel: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Creates an event from EGLSync object
+
+ Creates an event *phEvent from an EGLSyncKHR eglSync with the flags specified
+ via \p flags. Valid flags include:
+ - ::CU_EVENT_DEFAULT: Default event creation flag.
+ - ::CU_EVENT_BLOCKING_SYNC: Specifies that the created event should use blocking
+ synchronization. A CPU thread that uses ::cuEventSynchronize() to wait on
+ an event created with this flag will block until the event has actually
+ been completed.
+
+ Once the \p eglSync gets destroyed, ::cuEventDestroy is the only API
+ that can be invoked on the event.
+
+ ::cuEventRecord and TimingData are not supported for events created from EGLSync.
+
+ The EGLSyncKHR is an opaque handle to an EGL sync object.
+ typedef void* EGLSyncKHR
+
+ \param phEvent - Returns newly created event
+ \param eglSync - Opaque handle to EGLSync object
+ \param flags - Event creation flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+
+ \sa
+ ::cuEventQuery,
+ ::cuEventSynchronize,
+ ::cuEventDestroy*/
+ fn cuEventCreateFromEGLSync(
+ phEvent: *mut cuda_types::CUevent,
+ eglSync: cuda_types::EGLSyncKHR,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Gets the CUDA device associated with a VDPAU device
+
+ Returns in \p *pDevice the CUDA device associated with a \p vdpDevice, if
+ applicable.
+
+ \param pDevice - Device associated with vdpDevice
+ \param vdpDevice - A VdpDevice handle
+ \param vdpGetProcAddress - VDPAU's VdpGetProcAddress function pointer
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE
+ \notefnerr
+
+ \sa ::cuCtxCreate, ::cuVDPAUCtxCreate, ::cuGraphicsVDPAURegisterVideoSurface,
+ ::cuGraphicsVDPAURegisterOutputSurface, ::cuGraphicsUnregisterResource,
+ ::cuGraphicsResourceSetMapFlags, ::cuGraphicsMapResources,
+ ::cuGraphicsUnmapResources, ::cuGraphicsSubResourceGetMappedArray,
+ ::cudaVDPAUGetDevice*/
+ fn cuVDPAUGetDevice(
+ pDevice: *mut cuda_types::CUdevice,
+ vdpDevice: cuda_types::VdpDevice,
+ vdpGetProcAddress: cuda_types::VdpGetProcAddress,
+ ) -> cuda_types::CUresult;
+ /** \brief Create a CUDA context for interoperability with VDPAU
+
+ Creates a new CUDA context, initializes VDPAU interoperability, and
+ associates the CUDA context with the calling thread. It must be called
+ before performing any other VDPAU interoperability operations. It may fail
+ if the needed VDPAU driver facilities are not available. For usage of the
+ \p flags parameter, see ::cuCtxCreate().
+
+ \param pCtx - Returned CUDA context
+ \param flags - Options for CUDA context creation
+ \param device - Device on which to create the context
+ \param vdpDevice - The VdpDevice to interop with
+ \param vdpGetProcAddress - VDPAU's VdpGetProcAddress function pointer
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_DEINITIALIZED,
+ ::CUDA_ERROR_NOT_INITIALIZED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ ::CUDA_ERROR_INVALID_VALUE,
+ ::CUDA_ERROR_OUT_OF_MEMORY
+ \notefnerr
+
+ \sa ::cuCtxCreate, ::cuGraphicsVDPAURegisterVideoSurface,
+ ::cuGraphicsVDPAURegisterOutputSurface, ::cuGraphicsUnregisterResource,
+ ::cuGraphicsResourceSetMapFlags, ::cuGraphicsMapResources,
+ ::cuGraphicsUnmapResources, ::cuGraphicsSubResourceGetMappedArray,
+ ::cuVDPAUGetDevice*/
+ fn cuVDPAUCtxCreate_v2(
+ pCtx: *mut cuda_types::CUcontext,
+ flags: ::core::ffi::c_uint,
+ device: cuda_types::CUdevice,
+ vdpDevice: cuda_types::VdpDevice,
+ vdpGetProcAddress: cuda_types::VdpGetProcAddress,
+ ) -> cuda_types::CUresult;
+ /** \brief Registers a VDPAU VdpVideoSurface object
+
+ Registers the VdpVideoSurface specified by \p vdpSurface for access by
+ CUDA. A handle to the registered object is returned as \p pCudaResource.
+ The surface's intended usage is specified using \p flags, as follows:
+
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA. This is the default value.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY: Specifies that CUDA
+ will not write to this resource.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD: Specifies that
+ CUDA will not read from this resource and will write over the
+ entire contents of the resource, so none of the data previously
+ stored in the resource will be preserved.
+
+ The VdpVideoSurface is presented as an array of subresources that may be
+ accessed using pointers returned by ::cuGraphicsSubResourceGetMappedArray.
+ The exact number of valid \p arrayIndex values depends on the VDPAU surface
+ format. The mapping is shown in the table below. \p mipLevel must be 0.
+
+ \htmlonly
+ <table>
+ <tr><th>VdpChromaType </th><th>arrayIndex</th><th>Size </th><th>Format</th><th>Content </th></tr>
+ <tr><td rowspan="4" valign="top">VDP_CHROMA_TYPE_420</td><td>0 </td><td>w x h/2</td><td>R8 </td><td>Top-field luma </td></tr>
+ <tr> <td>1 </td><td>w x h/2</td><td>R8 </td><td>Bottom-field luma </td></tr>
+ <tr> <td>2 </td><td>w/2 x h/4</td><td>R8G8 </td><td>Top-field chroma </td></tr>
+ <tr> <td>3 </td><td>w/2 x h/4</td><td>R8G8 </td><td>Bottom-field chroma</td></tr>
+ <tr><td rowspan="4" valign="top">VDP_CHROMA_TYPE_422</td><td>0 </td><td>w x h/2</td><td>R8 </td><td>Top-field luma </td></tr>
+ <tr> <td>1 </td><td>w x h/2</td><td>R8 </td><td>Bottom-field luma </td></tr>
+ <tr> <td>2 </td><td>w/2 x h/2</td><td>R8G8 </td><td>Top-field chroma </td></tr>
+ <tr> <td>3 </td><td>w/2 x h/2</td><td>R8G8 </td><td>Bottom-field chroma</td></tr>
+ </table>
+ \endhtmlonly
+
+ \latexonly
+ \begin{tabular}{|l|l|l|l|l|}
+ \hline
+ VdpChromaType & arrayIndex & Size & Format & Content \\
+ \hline
+ VDP\_CHROMA\_TYPE\_420 & 0 & w x h/2 & R8 & Top-field luma \\
+ & 1 & w x h/2 & R8 & Bottom-field luma \\
+ & 2 & w/2 x h/4 & R8G8 & Top-field chroma \\
+ & 3 & w/2 x h/4 & R8G8 & Bottom-field chroma \\
+ \hline
+ VDP\_CHROMA\_TYPE\_422 & 0 & w x h/2 & R8 & Top-field luma \\
+ & 1 & w x h/2 & R8 & Bottom-field luma \\
+ & 2 & w/2 x h/2 & R8G8 & Top-field chroma \\
+ & 3 & w/2 x h/2 & R8G8 & Bottom-field chroma \\
+ \hline
+ \end{tabular}
+ \endlatexonly
+
+ \param pCudaResource - Pointer to the returned object handle
+ \param vdpSurface - The VdpVideoSurface to be registered
+ \param flags - Map flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ \notefnerr
+
+ \sa ::cuCtxCreate, ::cuVDPAUCtxCreate,
+ ::cuGraphicsVDPAURegisterOutputSurface, ::cuGraphicsUnregisterResource,
+ ::cuGraphicsResourceSetMapFlags, ::cuGraphicsMapResources,
+ ::cuGraphicsUnmapResources, ::cuGraphicsSubResourceGetMappedArray,
+ ::cuVDPAUGetDevice,
+ ::cudaGraphicsVDPAURegisterVideoSurface*/
+ fn cuGraphicsVDPAURegisterVideoSurface(
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ vdpSurface: cuda_types::VdpVideoSurface,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ /** \brief Registers a VDPAU VdpOutputSurface object
+
+ Registers the VdpOutputSurface specified by \p vdpSurface for access by
+ CUDA. A handle to the registered object is returned as \p pCudaResource.
+ The surface's intended usage is specified using \p flags, as follows:
+
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ resource will be used. It is therefore assumed that this resource will be
+ read from and written to by CUDA. This is the default value.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY: Specifies that CUDA
+ will not write to this resource.
+ - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD: Specifies that
+ CUDA will not read from this resource and will write over the
+ entire contents of the resource, so none of the data previously
+ stored in the resource will be preserved.
+
+ The VdpOutputSurface is presented as an array of subresources that may be
+ accessed using pointers returned by ::cuGraphicsSubResourceGetMappedArray.
+ The exact number of valid \p arrayIndex values depends on the VDPAU surface
+ format. The mapping is shown in the table below. \p mipLevel must be 0.
+
+ \htmlonly
+ <table>
+ <tr><th>VdpRGBAFormat </th><th>arrayIndex</th><th>Size </th><th>Format </th><th>Content </th></tr>
+ <tr><td>VDP_RGBA_FORMAT_B8G8R8A8 </td><td>0 </td><td>w x h</td><td>ARGB8 </td><td>Entire surface</td></tr>
+ <tr><td>VDP_RGBA_FORMAT_R10G10B10A2</td><td>0 </td><td>w x h</td><td>A2BGR10</td><td>Entire surface</td></tr>
+ </table>
+ \endhtmlonly
+
+ \latexonly
+ \begin{tabular}{|l|l|l|l|l|}
+ \hline
+ VdpRGBAFormat & arrayIndex & Size & Format & Content \\
+ \hline
+ VDP\_RGBA\_FORMAT\_B8G8R8A8 & 0 & w x h & ARGB8 & Entire surface \\
+ VDP\_RGBA\_FORMAT\_R10G10B10A2 & 0 & w x h & A2BGR10 & Entire surface \\
+ \hline
+ \end{tabular}
+ \endlatexonly
+
+ \param pCudaResource - Pointer to the returned object handle
+ \param vdpSurface - The VdpOutputSurface to be registered
+ \param flags - Map flags
+
+ \return
+ ::CUDA_SUCCESS,
+ ::CUDA_ERROR_INVALID_HANDLE,
+ ::CUDA_ERROR_ALREADY_MAPPED,
+ ::CUDA_ERROR_INVALID_CONTEXT,
+ \notefnerr
+
+ \sa ::cuCtxCreate, ::cuVDPAUCtxCreate,
+ ::cuGraphicsVDPAURegisterVideoSurface, ::cuGraphicsUnregisterResource,
+ ::cuGraphicsResourceSetMapFlags, ::cuGraphicsMapResources,
+ ::cuGraphicsUnmapResources, ::cuGraphicsSubResourceGetMappedArray,
+ ::cuVDPAUGetDevice,
+ ::cudaGraphicsVDPAURegisterOutputSurface*/
+ fn cuGraphicsVDPAURegisterOutputSurface(
+ pCudaResource: *mut cuda_types::CUgraphicsResource,
+ vdpSurface: cuda_types::VdpOutputSurface,
+ flags: ::core::ffi::c_uint,
+ ) -> cuda_types::CUresult;
+ fn cuVDPAUCtxCreate(
+ pCtx: *mut cuda_types::CUcontext,
+ flags: ::core::ffi::c_uint,
+ device: cuda_types::CUdevice,
+ vdpDevice: cuda_types::VdpDevice,
+ vdpGetProcAddress: cuda_types::VdpGetProcAddress,
+ ) -> cuda_types::CUresult;
}
diff --git a/cuda_base/src/lib.rs b/cuda_base/src/lib.rs
index 79484fb..64e33ef 100644
--- a/cuda_base/src/lib.rs
+++ b/cuda_base/src/lib.rs
@@ -1,165 +1,24 @@
extern crate proc_macro;
-use std::collections::hash_map;
-use std::iter;
-
use proc_macro::TokenStream;
-use proc_macro2::Span;
-use quote::{format_ident, quote, ToTokens};
-use rustc_hash::{FxHashMap, FxHashSet};
+use quote::{quote, ToTokens};
+use rustc_hash::FxHashMap;
+use std::iter;
use syn::parse::{Parse, ParseStream};
use syn::punctuated::Punctuated;
use syn::visit_mut::VisitMut;
use syn::{
- bracketed, parse_macro_input, parse_quote, Abi, Fields, File, FnArg, ForeignItem,
- ForeignItemFn, Ident, Item, ItemConst, ItemForeignMod, LitStr, PatType, Path, PathArguments,
- PathSegment, ReturnType, Signature, Token, Type, TypeArray, TypePath, TypePtr, UseTree,
+ bracketed, parse_macro_input, File, ForeignItem, ForeignItemFn, Ident, Item, Path, Signature,
+ Token,
};
const CUDA_RS: &'static str = include_str! {"cuda.rs"};
-// This macro copies cuda.rs as-is with some changes:
-// * All function declarations are filtered out
-// * CUdeviceptr_v2 is redefined from `unsigned long long` to `*void`
-// * `extern "C"` gets replaced by `extern "system"`
-// * CUuuid_st is redefined to use uchar instead of char
-#[proc_macro]
-pub fn cuda_type_declarations(_: TokenStream) -> TokenStream {
- let mut cuda_module = syn::parse_str::<File>(CUDA_RS).unwrap();
- let mut curesult_constants = Vec::new();
- cuda_module.items = cuda_module
- .items
- .into_iter()
- .filter_map(|item| match item {
- Item::ForeignMod(_) => None,
- Item::Struct(mut struct_) => {
- let ident_string = struct_.ident.to_string();
- match &*ident_string {
- "CUdeviceptr_v2" => match &mut struct_.fields {
- Fields::Unnamed(ref mut fields) => {
- fields.unnamed[0].ty =
- absolute_path_to_mut_ptr(&["std", "os", "raw", "c_void"])
- }
- _ => unreachable!(),
- },
- "CUuuid_st" => match &mut struct_.fields {
- Fields::Named(ref mut fields) => match fields.named[0].ty {
- Type::Array(TypeArray { ref mut elem, .. }) => {
- *elem = Box::new(Type::Path(TypePath {
- qself: None,
- path: segments_to_path(&["std", "os", "raw", "c_uchar"]),
- }))
- }
- _ => unreachable!(),
- },
- _ => panic!(),
- },
- _ => {}
- }
- Some(Item::Struct(struct_))
- }
- Item::Const(const_) => {
- let name = const_.ident.to_string();
- if name.starts_with("cudaError_enum_CUDA_") {
- curesult_constants.push(const_);
- }
- None
- }
- Item::Use(use_) => {
- if let UseTree::Path(ref path) = use_.tree {
- if let UseTree::Rename(ref rename) = &*path.tree {
- if rename.rename == "CUresult" {
- return None;
- }
- }
- }
- Some(Item::Use(use_))
- }
- i => Some(i),
- })
- .collect::<Vec<_>>();
- append_curesult(curesult_constants, &mut cuda_module.items);
- syn::visit_mut::visit_file_mut(&mut FixAbi, &mut cuda_module);
- cuda_module.into_token_stream().into()
-}
-
-fn append_curesult(curesult_constants: Vec<syn::ItemConst>, items: &mut Vec<Item>) {
- let curesult_constants = curesult_constants.iter().map(|const_| {
- let ident = const_.ident.to_string();
- let expr = &const_.expr;
- if ident.ends_with("CUDA_SUCCESS") {
- quote! {
- const SUCCESS: CUresult = CUresult::Ok(());
- }
- } else {
- let prefix = "cudaError_enum_CUDA_";
- let ident = format_ident!("{}", ident[prefix.len()..]);
- quote! {
- const #ident: CUresult = CUresult::Err(unsafe { ::core::num::NonZeroU32::new_unchecked(#expr) });
- }
- }
- });
- items.push(parse_quote! {
- pub trait CUresultConsts {
- #(#curesult_constants)*
- }
- });
- items.push(parse_quote! {
- impl CUresultConsts for CUresult {}
- });
- items.push(parse_quote! {
- #[must_use]
- pub type CUresult = ::core::result::Result<(), ::core::num::NonZeroU32>;
- });
- items.push(parse_quote! {
- const _: fn() = || {
- let _ = std::mem::transmute::<CUresult, u32>;
- };
- });
-}
-
-fn segments_to_path(path: &[&'static str]) -> Path {
- let mut segments = Punctuated::new();
- for ident in path {
- let ident = PathSegment {
- ident: Ident::new(ident, Span::call_site()),
- arguments: PathArguments::None,
- };
- segments.push(ident);
- }
- Path {
- leading_colon: Some(Token![::](Span::call_site())),
- segments,
- }
-}
-
-fn absolute_path_to_mut_ptr(path: &[&'static str]) -> Type {
- Type::Ptr(TypePtr {
- star_token: Token![*](Span::call_site()),
- const_token: None,
- mutability: Some(Token![mut](Span::call_site())),
- elem: Box::new(Type::Path(TypePath {
- qself: None,
- path: segments_to_path(path),
- })),
- })
-}
-
-struct FixAbi;
-
-impl VisitMut for FixAbi {
- fn visit_abi_mut(&mut self, i: &mut Abi) {
- if let Some(ref mut name) = i.name {
- *name = LitStr::new("system", Span::call_site());
- }
- }
-}
-
// This macro accepts following arguments:
-// * `type_path`: path to the module with type definitions (in the module tree)
// * `normal_macro`: ident for a normal macro
-// * `override_macro`: ident for an override macro
-// * `override_fns`: list of override functions
+// * zero or more:
+// * `override_macro`: ident for an override macro
+// * `override_fns`: list of override functions
// Then macro goes through every function in rust.rs, and for every fn `foo`:
// * if `foo` is contained in `override_fns` then pass it into `override_macro`
// * if `foo` is not contained in `override_fns` pass it to `normal_macro`
@@ -172,430 +31,120 @@ impl VisitMut for FixAbi {
#[proc_macro]
pub fn cuda_function_declarations(tokens: TokenStream) -> TokenStream {
let input = parse_macro_input!(tokens as FnDeclInput);
- let cuda_module = syn::parse_str::<File>(CUDA_RS).unwrap();
- let override_fns = input
- .override_fns
- .iter()
- .map(ToString::to_string)
- .collect::<FxHashSet<_>>();
- let (normal_macro_args, override_macro_args): (Vec<_>, Vec<_>) = cuda_module
- .items
- .into_iter()
- .filter_map(|item| match item {
- Item::ForeignMod(ItemForeignMod { mut items, .. }) => match items.pop().unwrap() {
- ForeignItem::Fn(ForeignItemFn {
- sig:
- Signature {
- ident,
- inputs,
- output,
- ..
- },
- ..
- }) => {
- let use_normal_macro = !override_fns.contains(&ident.to_string());
- let inputs = inputs
- .into_iter()
- .map(|fn_arg| match fn_arg {
- FnArg::Typed(mut pat_type) => {
- pat_type.ty =
- prepend_cuda_path_to_type(&input.type_path, pat_type.ty);
- FnArg::Typed(pat_type)
- }
- _ => unreachable!(),
- })
- .collect::<Punctuated<_, Token![,]>>();
- let output = match output {
- ReturnType::Type(_, type_) => type_,
- ReturnType::Default => unreachable!(),
- };
- let type_path = input.type_path.clone();
- Some((
- quote! {
- "system" fn #ident(#inputs) -> #type_path :: #output
- },
- use_normal_macro,
- ))
- }
- _ => unreachable!(),
- },
- _ => None,
- })
- .partition(|(_, use_normal_macro)| *use_normal_macro);
- let mut result = proc_macro2::TokenStream::new();
- if !normal_macro_args.is_empty() {
- let punctuated_normal_macro_args = to_punctuated::<Token![;]>(normal_macro_args);
- let macro_ = &input.normal_macro;
- result.extend(iter::once(quote! {
- #macro_ ! (#punctuated_normal_macro_args);
- }));
- }
- if !override_macro_args.is_empty() {
- let punctuated_override_macro_args = to_punctuated::<Token![;]>(override_macro_args);
- let macro_ = &input.override_macro;
- result.extend(iter::once(quote! {
- #macro_ ! (#punctuated_override_macro_args);
- }));
- }
- result.into()
-}
-
-fn to_punctuated<P: ToTokens + Default>(
- elms: Vec<(proc_macro2::TokenStream, bool)>,
-) -> proc_macro2::TokenStream {
- let mut collection = Punctuated::<proc_macro2::TokenStream, P>::new();
- collection.extend(elms.into_iter().map(|(token_stream, _)| token_stream));
- collection.into_token_stream()
-}
-
-fn prepend_cuda_path_to_type(base_path: &Path, type_: Box<Type>) -> Box<Type> {
- match *type_ {
- Type::Path(mut type_path) => {
- type_path.path = prepend_cuda_path_to_path(base_path, type_path.path);
- Box::new(Type::Path(type_path))
- }
- Type::Ptr(mut type_ptr) => {
- type_ptr.elem = prepend_cuda_path_to_type(base_path, type_ptr.elem);
- Box::new(Type::Ptr(type_ptr))
+ let mut choose_macro = ChooseMacro::new(input);
+ let mut cuda_module = syn::parse_str::<File>(CUDA_RS).unwrap();
+ syn::visit_mut::visit_file_mut(&mut FixFnSignatures, &mut cuda_module);
+ let extern_ = if let Item::ForeignMod(extern_) = cuda_module.items.pop().unwrap() {
+ extern_
+ } else {
+ unreachable!()
+ };
+ let abi = extern_.abi.name;
+ for mut item in extern_.items {
+ if let ForeignItem::Fn(ForeignItemFn {
+ sig: Signature { ref ident, .. },
+ ref mut attrs,
+ ..
+ }) = item
+ {
+ *attrs = Vec::new();
+ choose_macro.add(ident, quote! { #abi #item });
+ } else {
+ unreachable!()
}
- _ => unreachable!(),
- }
-}
-
-fn prepend_cuda_path_to_path(base_path: &Path, path: Path) -> Path {
- if path.leading_colon.is_some() {
- return path;
}
- if path.segments.len() == 1 {
- let ident = path.segments[0].ident.to_string();
- if ident.starts_with("CU")
- || ident.starts_with("cu")
- || ident.starts_with("GL")
- || ident.starts_with("EGL")
- || ident.starts_with("Vdp")
- || ident == "HGPUNV"
- {
- let mut base_path = base_path.clone();
- base_path.segments.extend(path.segments);
- return base_path;
+ let mut result = proc_macro2::TokenStream::new();
+ for (path, items) in
+ iter::once(choose_macro.default).chain(choose_macro.override_sets.into_iter())
+ {
+ if items.is_empty() {
+ continue;
+ }
+ quote! {
+ #path ! { #(#items)* }
}
+ .to_tokens(&mut result);
}
- path
+ result.into()
}
-
struct FnDeclInput {
- type_path: Path,
normal_macro: Path,
- override_macro: Path,
- override_fns: Punctuated<Ident, Token![,]>,
+ overrides: Punctuated<OverrideMacro, Token![,]>,
}
impl Parse for FnDeclInput {
fn parse(input: ParseStream) -> syn::Result<Self> {
- let type_path = input.parse::<Path>()?;
- input.parse::<Token![,]>()?;
let normal_macro = input.parse::<Path>()?;
- input.parse::<Token![,]>()?;
- let override_macro = input.parse::<Path>()?;
- input.parse::<Token![,]>()?;
- let override_fns_content;
- bracketed!(override_fns_content in input);
- let override_fns = override_fns_content.parse_terminated(Ident::parse, Token![,])?;
+ let overrides = if input.is_empty() {
+ Punctuated::new()
+ } else {
+ input.parse::<Token![,]>()?;
+ input.parse_terminated(OverrideMacro::parse, Token![,])?
+ };
Ok(Self {
- type_path,
normal_macro,
- override_macro,
- override_fns,
+ overrides,
})
}
}
-
-// This trait accepts following parameters:
-// * `type_path`: path to the module with type definitions (in the module tree)
-// * `trait_`: name of the trait to be derived
-// * `ignore_types`: bracketed list of types to ignore
-// * `ignore_fns`: bracketed list of fns to ignore
-#[proc_macro]
-pub fn cuda_derive_display_trait(tokens: TokenStream) -> TokenStream {
- let input = parse_macro_input!(tokens as DeriveDisplayInput);
- let cuda_module = syn::parse_str::<File>(CUDA_RS).unwrap();
- let mut derive_state = DeriveDisplayState::new(input);
- let mut main_body: proc_macro2::TokenStream = cuda_module
- .items
- .into_iter()
- .filter_map(|i| cuda_derive_display_trait_for_item(&mut derive_state, i))
- .collect::<proc_macro2::TokenStream>();
- main_body.extend(curesult_display_trait(&derive_state));
- main_body.into()
-}
-
-fn curesult_display_trait(derive_state: &DeriveDisplayState) -> proc_macro2::TokenStream {
- let path_prefix = &derive_state.type_path;
- let trait_ = &derive_state.trait_;
- let errors = derive_state.result_variants.iter().filter_map(|const_| {
- let prefix = "cudaError_enum_";
- let text = &const_.ident.to_string()[prefix.len()..];
- if text == "CUDA_SUCCESS" {
- return None;
- }
- let expr = &const_.expr;
- Some(quote! {
- #expr => writer.write_all(#text.as_bytes()),
- })
- });
- quote! {
- impl #trait_ for #path_prefix :: CUresult {
- fn write(&self, _fn_name: &'static str, _index: usize, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- match self {
- Ok(()) => writer.write_all(b"CUDA_SUCCESS"),
- Err(err) => {
- match err.get() {
- #(#errors)*
- err => write!(writer, "{}", err)
- }
- }
- }
- }
- }
- }
+struct OverrideMacro {
+ macro_: Path,
+ functions: Punctuated<Ident, Token![,]>,
}
-fn cuda_derive_display_trait_for_item(
- state: &mut DeriveDisplayState,
- item: Item,
-) -> Option<proc_macro2::TokenStream> {
- let path_prefix = &state.type_path;
- let path_prefix_iter = iter::repeat(&path_prefix);
- let trait_ = &state.trait_;
- let trait_iter = iter::repeat(&state.trait_);
- match item {
- Item::Const(const_) => {
- if const_.ty.to_token_stream().to_string() == "cudaError_enum" {
- state.result_variants.push(const_);
- }
- None
- }
- Item::ForeignMod(ItemForeignMod { mut items, .. }) => match items.pop().unwrap() {
- ForeignItem::Fn(ForeignItemFn {
- sig: Signature { ident, inputs, .. },
- ..
- }) => {
- if state.ignore_fns.contains(&ident) {
- return None;
- }
- let inputs = inputs
- .into_iter()
- .map(|fn_arg| match fn_arg {
- FnArg::Typed(mut pat_type) => {
- pat_type.ty = prepend_cuda_path_to_type(path_prefix, pat_type.ty);
- FnArg::Typed(pat_type)
- }
- _ => unreachable!(),
- })
- .collect::<Vec<_>>();
- let inputs_iter = inputs.iter();
- let mut arg_name_iter = inputs.iter().map(|fn_arg| match fn_arg {
- FnArg::Typed(PatType { pat, .. }) => pat,
- _ => unreachable!(),
- });
- let fn_name = format_ident!("write_{}", ident);
- let original_fn_name = ident.to_string();
- Some(match arg_name_iter.next() {
- Some(first_arg_name) => quote! {
- pub fn #fn_name(writer: &mut (impl std::io::Write + ?Sized), #(#inputs_iter,)*) -> std::io::Result<()> {
- writer.write_all(concat!("(", stringify!(#first_arg_name), ": ").as_bytes())?;
- let mut arg_idx = 0usize;
- CudaDisplay::write(&#first_arg_name, #original_fn_name, arg_idx, writer)?;
- #(
- writer.write_all(b", ")?;
- writer.write_all(concat!(stringify!(#arg_name_iter), ": ").as_bytes())?;
- CudaDisplay::write(&#arg_name_iter, #original_fn_name, arg_idx, writer)?;
- arg_idx += 1;
- )*
- writer.write_all(b")")
- }
- },
- None => quote! {
- pub fn #fn_name(writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- writer.write_all(b"()")
- }
- },
- })
- }
- _ => unreachable!(),
- },
- Item::Impl(mut item_impl) => {
- let enum_ = match *(item_impl.self_ty) {
- Type::Path(mut path) => path.path.segments.pop().unwrap().into_value().ident,
- _ => unreachable!(),
- };
- let variant_ = match item_impl.items.pop().unwrap() {
- syn::ImplItem::Const(item_const) => item_const.ident,
- _ => unreachable!(),
- };
- state.record_enum_variant(enum_, variant_);
- None
- }
- Item::Struct(item_struct) => {
- if state.ignore_types.contains(&item_struct.ident) {
- return None;
- }
- if state.enums.contains_key(&item_struct.ident) {
- let enum_ = &item_struct.ident;
- let enum_iter = iter::repeat(&item_struct.ident);
- let variants = state.enums.get(&item_struct.ident).unwrap().iter();
- Some(quote! {
- impl #trait_ for #path_prefix :: #enum_ {
- fn write(&self, _fn_name: &'static str, _index: usize, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- match self {
- #(& #path_prefix_iter :: #enum_iter :: #variants => writer.write_all(stringify!(#variants).as_bytes()),)*
- _ => write!(writer, "{}", self.0)
- }
- }
- }
- })
- } else {
- let struct_ = &item_struct.ident;
- let (first_field, rest_of_fields) = match item_struct.fields {
- Fields::Named(fields) => {
- let mut all_idents = fields.named.into_iter().filter_map(|f| {
- let f_ident = f.ident.unwrap();
- let name = f_ident.to_string();
- if name.starts_with("reserved") || name == "_unused" {
- None
- } else {
- Some(f_ident)
- }
- });
- let first = match all_idents.next() {
- Some(f) => f,
- None => return None,
- };
- (first, all_idents)
- }
- _ => return None,
- };
- Some(quote! {
- impl #trait_ for #path_prefix :: #struct_ {
- fn write(&self, _fn_name: &'static str, _index: usize, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- writer.write_all(concat!("{ ", stringify!(#first_field), ": ").as_bytes())?;
- #trait_::write(&self.#first_field, "", 0, writer)?;
- #(
- writer.write_all(concat!(", ", stringify!(#rest_of_fields), ": ").as_bytes())?;
- #trait_iter::write(&self.#rest_of_fields, "", 0, writer)?;
- )*
- writer.write_all(b" }")
- }
- }
- })
- }
- }
- Item::Type(item_type) => {
- if state.ignore_types.contains(&item_type.ident) {
- return None;
- };
- match *(item_type.ty) {
- Type::Ptr(_) => {
- let type_ = item_type.ident;
- Some(quote! {
- impl #trait_ for #path_prefix :: #type_ {
- fn write(&self, _fn_name: &'static str, _index: usize, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- write!(writer, "{:p}", *self)
- }
- }
- })
- }
- Type::Path(type_path) => {
- if type_path.path.leading_colon.is_some() {
- let option_seg = type_path.path.segments.last().unwrap();
- if option_seg.ident == "Option" {
- match &option_seg.arguments {
- PathArguments::AngleBracketed(generic) => match generic.args[0] {
- syn::GenericArgument::Type(Type::BareFn(_)) => {
- let type_ = &item_type.ident;
- return Some(quote! {
- impl #trait_ for #path_prefix :: #type_ {
- fn write(&self, _fn_name: &'static str, _index: usize, writer: &mut (impl std::io::Write + ?Sized)) -> std::io::Result<()> {
- write!(writer, "{:p}", unsafe { std::mem::transmute::<#path_prefix :: #type_, *mut ::std::ffi::c_void>(*self) })
- }
- }
- });
- }
- _ => unreachable!(),
- },
- _ => unreachable!(),
- }
- }
- }
- None
- }
- _ => unreachable!(),
- }
- }
- Item::Union(_) => None,
- Item::Use(_) => None,
- _ => unreachable!(),
+impl Parse for OverrideMacro {
+ fn parse(input: ParseStream) -> syn::Result<Self> {
+ let macro_ = input.parse::<Path>()?;
+ input.parse::<Token![<=]>()?;
+ let functions_content;
+ bracketed!(functions_content in input);
+ let functions = functions_content.parse_terminated(Ident::parse, Token![,])?;
+ Ok(Self { macro_, functions })
}
}
-struct DeriveDisplayState {
- type_path: Path,
- trait_: Path,
- ignore_types: FxHashSet<Ident>,
- ignore_fns: FxHashSet<Ident>,
- enums: FxHashMap<Ident, Vec<Ident>>,
- result_variants: Vec<ItemConst>,
+struct ChooseMacro {
+ default: (Path, Vec<proc_macro2::TokenStream>),
+ override_lookup: FxHashMap<Ident, Path>,
+ override_sets: FxHashMap<Path, Vec<proc_macro2::TokenStream>>,
}
-impl DeriveDisplayState {
- fn new(input: DeriveDisplayInput) -> Self {
- DeriveDisplayState {
- type_path: input.type_path,
- trait_: input.trait_,
- ignore_types: input.ignore_types.into_iter().collect(),
- ignore_fns: input.ignore_fns.into_iter().collect(),
- enums: Default::default(),
- result_variants: Vec::new(),
+impl ChooseMacro {
+ fn new(input: FnDeclInput) -> Self {
+ let mut override_lookup = FxHashMap::default();
+ let mut override_sets = FxHashMap::default();
+ for OverrideMacro { macro_, functions } in input.overrides {
+ for ident in functions {
+ override_lookup.insert(ident, macro_.clone());
+ override_sets.insert(macro_.clone(), Vec::new());
+ }
+ }
+ Self {
+ default: (input.normal_macro, Vec::new()),
+ override_lookup,
+ override_sets,
}
}
- fn record_enum_variant(&mut self, enum_: Ident, variant: Ident) {
- match self.enums.entry(enum_) {
- hash_map::Entry::Occupied(mut entry) => {
- entry.get_mut().push(variant);
- }
- hash_map::Entry::Vacant(entry) => {
- entry.insert(vec![variant]);
+ fn add(&mut self, ident: &Ident, tokens: proc_macro2::TokenStream) {
+ match self.override_lookup.get(ident) {
+ Some(override_macro) => {
+ self.override_sets
+ .get_mut(override_macro)
+ .unwrap()
+ .push(tokens);
}
+ None => self.default.1.push(tokens),
}
}
}
-struct DeriveDisplayInput {
- type_path: Path,
- trait_: Path,
- ignore_types: Punctuated<Ident, Token![,]>,
- ignore_fns: Punctuated<Ident, Token![,]>,
-}
+// For some reason prettyplease will append trailing comma *only*
+// if there are two or more arguments
+struct FixFnSignatures;
-impl Parse for DeriveDisplayInput {
- fn parse(input: ParseStream) -> syn::Result<Self> {
- let type_path = input.parse::<Path>()?;
- input.parse::<Token![,]>()?;
- let trait_ = input.parse::<Path>()?;
- input.parse::<Token![,]>()?;
- let ignore_types_buffer;
- bracketed!(ignore_types_buffer in input);
- let ignore_types = ignore_types_buffer.parse_terminated(Ident::parse, Token![,])?;
- input.parse::<Token![,]>()?;
- let ignore_fns_buffer;
- bracketed!(ignore_fns_buffer in input);
- let ignore_fns = ignore_fns_buffer.parse_terminated(Ident::parse, Token![,])?;
- Ok(Self {
- type_path,
- trait_,
- ignore_types,
- ignore_fns,
- })
+impl VisitMut for FixFnSignatures {
+ fn visit_signature_mut(&mut self, s: &mut syn::Signature) {
+ s.inputs.pop_punct();
}
}
diff --git a/zluda_bindgen/src/main.rs b/zluda_bindgen/src/main.rs
index 5e3de53..ebb357c 100644
--- a/zluda_bindgen/src/main.rs
+++ b/zluda_bindgen/src/main.rs
@@ -5,7 +5,7 @@ use std::{collections::hash_map, fs::File, io::Write, iter, path::PathBuf, str::
use syn::{
parse_quote, punctuated::Punctuated, visit_mut::VisitMut, Abi, Fields, FnArg, ForeignItem,
ForeignItemFn, Ident, Item, ItemConst, ItemForeignMod, ItemUse, LitStr, Path, PathArguments,
- Signature, Type, UseTree,
+ Signature, Type, TypePath, UseTree,
};
fn main() {
@@ -32,6 +32,11 @@ fn main() {
.unwrap()
.to_string();
let module: syn::File = syn::parse_str(&cuda_header).unwrap();
+ generate_functions(
+ &crate_root,
+ &["..", "cuda_base", "src", "cuda.rs"],
+ &module,
+ );
generate_types(&crate_root, &["..", "cuda_types", "src", "lib.rs"], &module);
generate_display(
&crate_root,
@@ -41,6 +46,27 @@ fn main() {
)
}
+fn generate_functions(output: &PathBuf, path: &[&str], module: &syn::File) {
+ let fns_ = module.items.iter().filter_map(|item| match item {
+ Item::ForeignMod(extern_) => match &*extern_.items {
+ [ForeignItem::Fn(fn_)] => Some(fn_),
+ _ => unreachable!(),
+ },
+ _ => None,
+ });
+ let mut module: syn::File = parse_quote! {
+ extern "system" {
+ #(#fns_)*
+ }
+ };
+ syn::visit_mut::visit_file_mut(&mut PrependCudaPath, &mut module);
+ syn::visit_mut::visit_file_mut(&mut RemoveVisibility, &mut module);
+ syn::visit_mut::visit_file_mut(&mut ExplicitReturnType, &mut module);
+ let mut output = output.clone();
+ output.extend(path);
+ write_rust_to_file(output, &prettyplease::unparse(&module))
+}
+
fn generate_types(output: &PathBuf, path: &[&str], module: &syn::File) {
let mut module = module.clone();
let mut converter = ConvertIntoRustResult {
@@ -181,6 +207,39 @@ impl VisitMut for FixAbi {
}
}
+struct PrependCudaPath;
+
+impl VisitMut for PrependCudaPath {
+ fn visit_type_path_mut(&mut self, type_: &mut TypePath) {
+ if type_.path.segments.len() == 1 {
+ match &*type_.path.segments[0].ident.to_string() {
+ "usize" | "f64" | "f32" => {}
+ _ => {
+ *type_ = parse_quote! { cuda_types :: #type_ };
+ }
+ }
+ }
+ }
+}
+
+struct RemoveVisibility;
+
+impl VisitMut for RemoveVisibility {
+ fn visit_visibility_mut(&mut self, i: &mut syn::Visibility) {
+ *i = syn::Visibility::Inherited;
+ }
+}
+
+struct ExplicitReturnType;
+
+impl VisitMut for ExplicitReturnType {
+ fn visit_return_type_mut(&mut self, i: &mut syn::ReturnType) {
+ if let syn::ReturnType::Default = i {
+ *i = parse_quote! { -> {} };
+ }
+ }
+}
+
fn generate_display(
output: &PathBuf,
path: &[&str],
@@ -320,13 +379,10 @@ fn cuda_derive_display_trait_for_item<'a>(
}
let inputs = inputs
.iter()
- .map(|fn_arg| match fn_arg {
- FnArg::Typed(ref pat_type) => {
- let mut pat_type = pat_type.clone();
- pat_type.ty = prepend_cuda_path_to_type(&path_prefix, pat_type.ty);
- FnArg::Typed(pat_type)
- }
- _ => unreachable!(),
+ .map(|fn_arg| {
+ let mut fn_arg = fn_arg.clone();
+ syn::visit_mut::visit_fn_arg_mut(&mut PrependCudaPath, &mut fn_arg);
+ fn_arg
})
.collect::<Vec<_>>();
let inputs_iter = inputs.iter();
@@ -500,41 +556,6 @@ fn fn_arg_name(fn_arg: &FnArg) -> &Box<syn::Pat> {
name
}
-fn prepend_cuda_path_to_type(base_path: &Path, type_: Box<Type>) -> Box<Type> {
- match *type_ {
- Type::Path(mut type_path) => {
- type_path.path = prepend_cuda_path_to_path(base_path, type_path.path);
- Box::new(Type::Path(type_path))
- }
- Type::Ptr(mut type_ptr) => {
- type_ptr.elem = prepend_cuda_path_to_type(base_path, type_ptr.elem);
- Box::new(Type::Ptr(type_ptr))
- }
- _ => unreachable!(),
- }
-}
-
-fn prepend_cuda_path_to_path(base_path: &Path, path: Path) -> Path {
- if path.leading_colon.is_some() {
- return path;
- }
- if path.segments.len() == 1 {
- let ident = path.segments[0].ident.to_string();
- if ident.starts_with("CU")
- || ident.starts_with("cu")
- || ident.starts_with("GL")
- || ident.starts_with("EGL")
- || ident.starts_with("Vdp")
- || ident == "HGPUNV"
- {
- let mut base_path = base_path.clone();
- base_path.segments.extend(path.segments);
- return base_path;
- }
- }
- path
-}
-
fn curesult_display_trait(derive_state: &DeriveDisplayState) -> syn::Item {
let errors = derive_state.result_variants.iter().filter_map(|const_| {
let prefix = "cudaError_enum_";
diff --git a/zluda_dump/src/lib.rs b/zluda_dump/src/lib.rs
index 28344f5..c2dff42 100644
--- a/zluda_dump/src/lib.rs
+++ b/zluda_dump/src/lib.rs
@@ -9,7 +9,7 @@ extern crate lazy_static;
extern crate cuda_types;
macro_rules! extern_redirect {
- ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path);*) => {
+ ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path;)*) => {
$(
#[no_mangle]
#[allow(improper_ctypes_definitions)]
@@ -30,7 +30,7 @@ macro_rules! extern_redirect {
}
macro_rules! extern_redirect_with_post {
- ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path);*) => {
+ ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path;)*) => {
$(
#[no_mangle]
#[allow(improper_ctypes_definitions)]
@@ -57,10 +57,8 @@ macro_rules! extern_redirect_with_post {
use cuda_base::cuda_function_declarations;
cuda_function_declarations!(
- cuda_types,
extern_redirect,
- extern_redirect_with_post,
- [
+ extern_redirect_with_post <= [
cuModuleLoad,
cuModuleLoadData,
cuModuleLoadDataEx,
diff --git a/zluda_dump/src/side_by_side.rs b/zluda_dump/src/side_by_side.rs
index 076dc68..11789ca 100644
--- a/zluda_dump/src/side_by_side.rs
+++ b/zluda_dump/src/side_by_side.rs
@@ -56,7 +56,7 @@ impl CudaDynamicFns {
}
macro_rules! emit_cuda_fn_table {
- ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path);*) => {
+ ($($abi:literal fn $fn_name:ident( $($arg_id:ident : $arg_type:ty),* ) -> $ret_type:path;)*) => {
#[derive(Default)]
#[allow(improper_ctypes)]
#[allow(improper_ctypes_definitions)]
@@ -76,4 +76,4 @@ macro_rules! emit_cuda_fn_table {
};
}
-cuda_function_declarations!(cuda_types, emit_cuda_fn_table, emit_cuda_fn_table, []);
+cuda_function_declarations!(emit_cuda_fn_table);