Skip to content

Commit 40d1305

Browse files
committed
Use a new, faster enum implementation
1 parent 1d7c89e commit 40d1305

10 files changed

Lines changed: 11314 additions & 8472 deletions

File tree

cuda_bindings/cuda/bindings/_lib/utils.pxi.in

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
33

44
from cpython.buffer cimport PyObject_CheckBuffer, PyObject_GetBuffer, PyBuffer_Release, PyBUF_SIMPLE, PyBUF_ANY_CONTIGUOUS
55
from libc.stdlib cimport calloc, free
66
from libc.stdint cimport int32_t, uint32_t, int64_t, uint64_t
77
from libc.stddef cimport wchar_t
88
from libc.string cimport memcpy
9-
from enum import Enum as _Enum
9+
from cuda.bindings.utils._fast_enum import FastEnum as _FastEnum
1010
import ctypes as _ctypes
1111
cimport cuda.bindings.cydriver as cydriver
1212
cimport cuda.bindings._lib.param_packer as param_packer
@@ -73,7 +73,7 @@ cdef class _HelperKernelParams:
7373
self._ckernelParams[idx] = <void*><void_ptr>value.getPtr()
7474
elif isinstance(value, (_ctypes.Structure)):
7575
self._ckernelParams[idx] = <void*><void_ptr>_ctypes.addressof(value)
76-
elif isinstance(value, (_Enum)):
76+
elif isinstance(value, (_FastEnum)):
7777
self._ckernelParams[idx] = &(self._ckernelParamsData[data_idx])
7878
(<int*>self._ckernelParams[idx])[0] = value.value
7979
data_idx += sizeof(int)

cuda_bindings/cuda/bindings/cufile.pyx

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
#
33
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
44
#
@@ -8,7 +8,7 @@ cimport cython # NOQA
88
from libc cimport errno
99
from ._internal.utils cimport (get_buffer_pointer, get_nested_resource_ptr,
1010
nested_resource)
11-
from enum import IntEnum as _IntEnum
11+
from cuda.bindings.utils._fast_enum import FastEnum as _FastEnum
1212

1313
import cython
1414

@@ -2288,6 +2288,8 @@ cdef class StatsLevel2:
22882288
def read_size_kb_hist(self, val):
22892289
if self._readonly:
22902290
raise ValueError("This StatsLevel2 instance is read-only")
2291+
if len(val) != 32:
2292+
raise ValueError(f"Expected length { 32 } for field read_size_kb_hist, got {len(val)}")
22912293
cdef view.array arr = view.array(shape=(32,), itemsize=sizeof(uint64_t), format="Q", mode="c")
22922294
arr[:] = _numpy.asarray(val, dtype=_numpy.uint64)
22932295
memcpy(<void *>(&(self._ptr[0].read_size_kb_hist)), <void *>(arr.data), sizeof(uint64_t) * len(val))
@@ -2303,6 +2305,8 @@ cdef class StatsLevel2:
23032305
def write_size_kb_hist(self, val):
23042306
if self._readonly:
23052307
raise ValueError("This StatsLevel2 instance is read-only")
2308+
if len(val) != 32:
2309+
raise ValueError(f"Expected length { 32 } for field write_size_kb_hist, got {len(val)}")
23062310
cdef view.array arr = view.array(shape=(32,), itemsize=sizeof(uint64_t), format="Q", mode="c")
23072311
arr[:] = _numpy.asarray(val, dtype=_numpy.uint64)
23082312
memcpy(<void *>(&(self._ptr[0].write_size_kb_hist)), <void *>(arr.data), sizeof(uint64_t) * len(val))
@@ -2441,7 +2445,7 @@ cdef class StatsLevel3:
24412445
raise ValueError("This StatsLevel3 instance is read-only")
24422446
cdef PerGpuStats val_ = val
24432447
if len(val) != 16:
2444-
raise ValueError(f"Expected length 16 for field per_gpu_stats, got {len(val)}")
2448+
raise ValueError(f"Expected length { 16 } for field per_gpu_stats, got {len(val)}")
24452449
memcpy(<void *>&(self._ptr[0].per_gpu_stats), <void *>(val_._get_ptr()), sizeof(CUfilePerGpuStats_t) * 16)
24462450

24472451
@property
@@ -2496,7 +2500,7 @@ cdef class StatsLevel3:
24962500
# Enum
24972501
###############################################################################
24982502

2499-
class OpError(_IntEnum):
2503+
class OpError(_FastEnum):
25002504
"""See `CUfileOpError`."""
25012505
SUCCESS = CU_FILE_SUCCESS
25022506
DRIVER_NOT_INITIALIZED = CU_FILE_DRIVER_NOT_INITIALIZED
@@ -2548,48 +2552,48 @@ class OpError(_IntEnum):
25482552
BATCH_NOCOMPAT_ERROR = CU_FILE_BATCH_NOCOMPAT_ERROR
25492553
IO_MAX_ERROR = CU_FILE_IO_MAX_ERROR
25502554

2551-
class DriverStatusFlags(_IntEnum):
2555+
class DriverStatusFlags(_FastEnum):
25522556
"""See `CUfileDriverStatusFlags_t`."""
2553-
LUSTRE_SUPPORTED = CU_FILE_LUSTRE_SUPPORTED
2554-
WEKAFS_SUPPORTED = CU_FILE_WEKAFS_SUPPORTED
2555-
NFS_SUPPORTED = CU_FILE_NFS_SUPPORTED
2557+
LUSTRE_SUPPORTED = (CU_FILE_LUSTRE_SUPPORTED, 'Support for DDN LUSTRE')
2558+
WEKAFS_SUPPORTED = (CU_FILE_WEKAFS_SUPPORTED, 'Support for WEKAFS')
2559+
NFS_SUPPORTED = (CU_FILE_NFS_SUPPORTED, 'Support for NFS')
25562560
GPFS_SUPPORTED = CU_FILE_GPFS_SUPPORTED
2557-
NVME_SUPPORTED = CU_FILE_NVME_SUPPORTED
2558-
NVMEOF_SUPPORTED = CU_FILE_NVMEOF_SUPPORTED
2559-
SCSI_SUPPORTED = CU_FILE_SCSI_SUPPORTED
2560-
SCALEFLUX_CSD_SUPPORTED = CU_FILE_SCALEFLUX_CSD_SUPPORTED
2561-
NVMESH_SUPPORTED = CU_FILE_NVMESH_SUPPORTED
2562-
BEEGFS_SUPPORTED = CU_FILE_BEEGFS_SUPPORTED
2563-
NVME_P2P_SUPPORTED = CU_FILE_NVME_P2P_SUPPORTED
2564-
SCATEFS_SUPPORTED = CU_FILE_SCATEFS_SUPPORTED
2565-
VIRTIOFS_SUPPORTED = CU_FILE_VIRTIOFS_SUPPORTED
2566-
MAX_TARGET_TYPES = CU_FILE_MAX_TARGET_TYPES
2567-
2568-
class DriverControlFlags(_IntEnum):
2561+
NVME_SUPPORTED = (CU_FILE_NVME_SUPPORTED, '< Support for GPFS Support for NVMe')
2562+
NVMEOF_SUPPORTED = (CU_FILE_NVMEOF_SUPPORTED, 'Support for NVMeOF')
2563+
SCSI_SUPPORTED = (CU_FILE_SCSI_SUPPORTED, 'Support for SCSI')
2564+
SCALEFLUX_CSD_SUPPORTED = (CU_FILE_SCALEFLUX_CSD_SUPPORTED, 'Support for Scaleflux CSD')
2565+
NVMESH_SUPPORTED = (CU_FILE_NVMESH_SUPPORTED, 'Support for NVMesh Block Dev')
2566+
BEEGFS_SUPPORTED = (CU_FILE_BEEGFS_SUPPORTED, 'Support for BeeGFS')
2567+
NVME_P2P_SUPPORTED = (CU_FILE_NVME_P2P_SUPPORTED, 'Do not use this macro. This is deprecated now')
2568+
SCATEFS_SUPPORTED = (CU_FILE_SCATEFS_SUPPORTED, 'Support for ScateFS')
2569+
VIRTIOFS_SUPPORTED = (CU_FILE_VIRTIOFS_SUPPORTED, 'Support for VirtioFS')
2570+
MAX_TARGET_TYPES = (CU_FILE_MAX_TARGET_TYPES, 'Maximum FS supported')
2571+
2572+
class DriverControlFlags(_FastEnum):
25692573
"""See `CUfileDriverControlFlags_t`."""
2570-
USE_POLL_MODE = CU_FILE_USE_POLL_MODE
2571-
ALLOW_COMPAT_MODE = CU_FILE_ALLOW_COMPAT_MODE
2574+
USE_POLL_MODE = (CU_FILE_USE_POLL_MODE, 'use POLL mode. properties.use_poll_mode')
2575+
ALLOW_COMPAT_MODE = (CU_FILE_ALLOW_COMPAT_MODE, 'allow COMPATIBILITY mode. properties.allow_compat_mode')
25722576

2573-
class FeatureFlags(_IntEnum):
2577+
class FeatureFlags(_FastEnum):
25742578
"""See `CUfileFeatureFlags_t`."""
2575-
DYN_ROUTING_SUPPORTED = CU_FILE_DYN_ROUTING_SUPPORTED
2576-
BATCH_IO_SUPPORTED = CU_FILE_BATCH_IO_SUPPORTED
2577-
STREAMS_SUPPORTED = CU_FILE_STREAMS_SUPPORTED
2578-
PARALLEL_IO_SUPPORTED = CU_FILE_PARALLEL_IO_SUPPORTED
2579-
P2P_SUPPORTED = CU_FILE_P2P_SUPPORTED
2579+
DYN_ROUTING_SUPPORTED = (CU_FILE_DYN_ROUTING_SUPPORTED, 'Support for Dynamic routing to handle devices across the PCIe bridges')
2580+
BATCH_IO_SUPPORTED = (CU_FILE_BATCH_IO_SUPPORTED, 'Supported')
2581+
STREAMS_SUPPORTED = (CU_FILE_STREAMS_SUPPORTED, 'Supported')
2582+
PARALLEL_IO_SUPPORTED = (CU_FILE_PARALLEL_IO_SUPPORTED, 'Supported')
2583+
P2P_SUPPORTED = (CU_FILE_P2P_SUPPORTED, 'Support for PCI P2PDMA')
25802584

2581-
class FileHandleType(_IntEnum):
2585+
class FileHandleType(_FastEnum):
25822586
"""See `CUfileFileHandleType`."""
2583-
OPAQUE_FD = CU_FILE_HANDLE_TYPE_OPAQUE_FD
2584-
OPAQUE_WIN32 = CU_FILE_HANDLE_TYPE_OPAQUE_WIN32
2587+
OPAQUE_FD = (CU_FILE_HANDLE_TYPE_OPAQUE_FD, 'Linux based fd')
2588+
OPAQUE_WIN32 = (CU_FILE_HANDLE_TYPE_OPAQUE_WIN32, 'Windows based handle (unsupported)')
25852589
USERSPACE_FS = CU_FILE_HANDLE_TYPE_USERSPACE_FS
25862590

2587-
class Opcode(_IntEnum):
2591+
class Opcode(_FastEnum):
25882592
"""See `CUfileOpcode_t`."""
25892593
READ = CUFILE_READ
25902594
WRITE = CUFILE_WRITE
25912595

2592-
class Status(_IntEnum):
2596+
class Status(_FastEnum):
25932597
"""See `CUfileStatus_t`."""
25942598
WAITING = CUFILE_WAITING
25952599
PENDING = CUFILE_PENDING
@@ -2599,11 +2603,11 @@ class Status(_IntEnum):
25992603
TIMEOUT = CUFILE_TIMEOUT
26002604
FAILED = CUFILE_FAILED
26012605

2602-
class BatchMode(_IntEnum):
2606+
class BatchMode(_FastEnum):
26032607
"""See `CUfileBatchMode_t`."""
26042608
BATCH = CUFILE_BATCH
26052609

2606-
class SizeTConfigParameter(_IntEnum):
2610+
class SizeTConfigParameter(_FastEnum):
26072611
"""See `CUFileSizeTConfigParameter_t`."""
26082612
PROFILE_STATS = CUFILE_PARAM_PROFILE_STATS
26092613
EXECUTION_MAX_IO_QUEUE_DEPTH = CUFILE_PARAM_EXECUTION_MAX_IO_QUEUE_DEPTH
@@ -2618,7 +2622,7 @@ class SizeTConfigParameter(_IntEnum):
26182622
POLLTHRESHOLD_SIZE_KB = CUFILE_PARAM_POLLTHRESHOLD_SIZE_KB
26192623
PROPERTIES_BATCH_IO_TIMEOUT_MS = CUFILE_PARAM_PROPERTIES_BATCH_IO_TIMEOUT_MS
26202624

2621-
class BoolConfigParameter(_IntEnum):
2625+
class BoolConfigParameter(_FastEnum):
26222626
"""See `CUFileBoolConfigParameter_t`."""
26232627
PROPERTIES_USE_POLL_MODE = CUFILE_PARAM_PROPERTIES_USE_POLL_MODE
26242628
PROPERTIES_ALLOW_COMPAT_MODE = CUFILE_PARAM_PROPERTIES_ALLOW_COMPAT_MODE
@@ -2633,24 +2637,24 @@ class BoolConfigParameter(_IntEnum):
26332637
SKIP_TOPOLOGY_DETECTION = CUFILE_PARAM_SKIP_TOPOLOGY_DETECTION
26342638
STREAM_MEMOPS_BYPASS = CUFILE_PARAM_STREAM_MEMOPS_BYPASS
26352639

2636-
class StringConfigParameter(_IntEnum):
2640+
class StringConfigParameter(_FastEnum):
26372641
"""See `CUFileStringConfigParameter_t`."""
26382642
LOGGING_LEVEL = CUFILE_PARAM_LOGGING_LEVEL
26392643
ENV_LOGFILE_PATH = CUFILE_PARAM_ENV_LOGFILE_PATH
26402644
LOG_DIR = CUFILE_PARAM_LOG_DIR
26412645

2642-
class ArrayConfigParameter(_IntEnum):
2646+
class ArrayConfigParameter(_FastEnum):
26432647
"""See `CUFileArrayConfigParameter_t`."""
26442648
POSIX_POOL_SLAB_SIZE_KB = CUFILE_PARAM_POSIX_POOL_SLAB_SIZE_KB
26452649
POSIX_POOL_SLAB_COUNT = CUFILE_PARAM_POSIX_POOL_SLAB_COUNT
26462650

2647-
class P2PFlags(_IntEnum):
2651+
class P2PFlags(_FastEnum):
26482652
"""See `CUfileP2PFlags_t`."""
2649-
P2PDMA = CUFILE_P2PDMA
2650-
NVFS = CUFILE_NVFS
2651-
DMABUF = CUFILE_DMABUF
2652-
C2C = CUFILE_C2C
2653-
NVIDIA_PEERMEM = CUFILE_NVIDIA_PEERMEM
2653+
P2PDMA = (CUFILE_P2PDMA, 'Support for PCI P2PDMA')
2654+
NVFS = (CUFILE_NVFS, 'Support for nvidia-fs')
2655+
DMABUF = (CUFILE_DMABUF, 'Support for DMA Buffer')
2656+
C2C = (CUFILE_C2C, 'Support for Chip-to-Chip (Grace-based systems)')
2657+
NVIDIA_PEERMEM = (CUFILE_NVIDIA_PEERMEM, 'Only for IBM Spectrum Scale and WekaFS')
26542658

26552659

26562660
###############################################################################

0 commit comments

Comments
 (0)