Skip to content

Commit 4404b43

Browse files
mdboomCopilot
andauthored
cuda.core.system: More device-related APIs (#1465)
* cuda.core.system: More device-related APIs * Fix line wrapping * Hide handle as an implementation detail * Update cuda_core/cuda/core/system/_device.pyx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address comments from Copilot * Working on tests * Fix tests * Fix creating new device * Fix iterator * Fix affinity test * Fix nearest GPUs --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 3e2bba7 commit 4404b43

6 files changed

Lines changed: 663 additions & 28 deletions

File tree

cuda_bindings/cuda/bindings/_nvml.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ cpdef str device_get_inforom_version(intptr_t device, int object)
173173
cpdef str device_get_inforom_image_version(intptr_t device)
174174
cpdef unsigned int device_get_inforom_configuration_checksum(intptr_t device) except? 0
175175
cpdef device_validate_inforom(intptr_t device)
176-
cpdef unsigned long device_get_last_bbx_flush_time(intptr_t device, intptr_t timestamp) except? 0
176+
cpdef tuple device_get_last_bbx_flush_time(intptr_t device)
177177
cpdef int device_get_display_mode(intptr_t device) except? -1
178178
cpdef int device_get_display_active(intptr_t device) except? -1
179179
cpdef int device_get_persistence_mode(intptr_t device) except? -1

cuda_bindings/cuda/bindings/_nvml.pyx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22228,23 +22228,26 @@ cpdef device_validate_inforom(intptr_t device):
2222822228
check_status(__status__)
2222922229

2223022230

22231-
cpdef unsigned long device_get_last_bbx_flush_time(intptr_t device, intptr_t timestamp) except? 0:
22231+
cpdef tuple device_get_last_bbx_flush_time(intptr_t device):
2223222232
"""Retrieves the timestamp and the duration of the last flush of the BBX (blackbox) infoROM object during the current run.
2223322233

2223422234
Args:
2223522235
device (intptr_t): The identifier of the target device.
22236-
timestamp (intptr_t): The start timestamp of the last BBX Flush.
2223722236

2223822237
Returns:
22239-
unsigned long: The duration (us) of the last BBX Flush.
22238+
A 2-tuple containing:
22239+
22240+
- unsigned long long: The start timestamp of the last BBX Flush.
22241+
- unsigned long: The duration (us) of the last BBX Flush.
2224022242

2224122243
.. seealso:: `nvmlDeviceGetLastBBXFlushTime`
2224222244
"""
22245+
cdef unsigned long long timestamp
2224322246
cdef unsigned long duration_us
2224422247
with nogil:
22245-
__status__ = nvmlDeviceGetLastBBXFlushTime(<Device>device, <unsigned long long*>timestamp, &duration_us)
22248+
__status__ = nvmlDeviceGetLastBBXFlushTime(<Device>device, &timestamp, &duration_us)
2224622249
check_status(__status__)
22247-
return duration_us
22250+
return (timestamp, duration_us)
2224822251

2224922252

2225022253
cpdef int device_get_display_mode(intptr_t device) except? -1:
@@ -27101,8 +27104,8 @@ cpdef object system_get_topology_gpu_set(unsigned int cpuNumber):
2710127104
__status__ = nvmlSystemGetTopologyGpuSet(cpuNumber, <unsigned int*>count, NULL)
2710227105
check_status_size(__status__)
2710327106
if count[0] == 0:
27104-
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="i", mode="c")[:0]
27105-
cdef view.array deviceArray = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="i", mode="c")
27107+
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="P", mode="c")[:0]
27108+
cdef view.array deviceArray = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="P", mode="c")
2710627109
with nogil:
2710727110
__status__ = nvmlSystemGetTopologyGpuSet(cpuNumber, <unsigned int*>count, <nvmlDevice_t *>deviceArray.data)
2710827111
check_status(__status__)
@@ -27141,8 +27144,8 @@ cpdef object unit_get_devices(intptr_t unit):
2714127144
__status__ = nvmlUnitGetDevices(<nvmlUnit_t *>unit, <unsigned int*>deviceCount, NULL)
2714227145
check_status_size(__status__)
2714327146
if deviceCount[0] == 0:
27144-
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="i", mode="c")[:0]
27145-
cdef view.array deviceArray = view.array(shape=(deviceCount[0],), itemsize=sizeof(intptr_t), format="i", mode="c")
27147+
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="P", mode="c")[:0]
27148+
cdef view.array deviceArray = view.array(shape=(deviceCount[0],), itemsize=sizeof(intptr_t), format="P", mode="c")
2714627149
with nogil:
2714727150
__status__ = nvmlUnitGetDevices(<nvmlUnit_t *>unit, <unsigned int*>deviceCount, <nvmlDevice_t *>deviceArray.data)
2714827151
check_status(__status__)
@@ -27169,8 +27172,8 @@ cpdef object device_get_topology_nearest_gpus(intptr_t device, unsigned int leve
2716927172
)
2717027173
check_status_size(__status__)
2717127174
if count[0] == 0:
27172-
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="i", mode="c")[:0]
27173-
cdef view.array deviceArray = view.array(shape=(deviceCount[0],), itemsize=sizeof(intptr_t), format="i", mode="c")
27175+
return view.array(shape=(1,), itemsize=sizeof(intptr_t), format="P", mode="c")[:0]
27176+
cdef view.array deviceArray = view.array(shape=(deviceCount[0],), itemsize=sizeof(intptr_t), format="P", mode="c")
2717427177
with nogil:
2717527178
__status__ = nvmlDeviceGetTopologyNearestGpus(
2717627179
<Device>device,
@@ -27834,9 +27837,9 @@ cpdef object device_get_gpu_instances(intptr_t device, unsigned int profile_id):
2783427837
check_status_size(__status__)
2783527838

2783627839
if count[0] == 0:
27837-
view.array(shape=(1,), itemsize=sizeof(intptr_t), format="i", mode="c")[:0]
27840+
view.array(shape=(1,), itemsize=sizeof(intptr_t), format="P", mode="c")[:0]
2783827841

27839-
cdef view.array gpuInstances = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="i", mode="c")
27842+
cdef view.array gpuInstances = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="P", mode="c")
2784027843
with nogil:
2784127844
__status__ = nvmlDeviceGetGpuInstances(<Device>device, profile_id, <nvmlGpuInstance_t *>gpuInstances.data, count)
2784227845
check_status(__status__)
@@ -27860,9 +27863,9 @@ cpdef object gpu_instance_get_compute_instances(intptr_t gpu_instance, unsigned
2786027863
check_status_size(__status__)
2786127864

2786227865
if count[0] == 0:
27863-
view.array(shape=(1,), itemsize=sizeof(intptr_t), format="i", mode="c")[:0]
27866+
view.array(shape=(1,), itemsize=sizeof(intptr_t), format="P", mode="c")[:0]
2786427867

27865-
cdef view.array computeInstances = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="i", mode="c")
27868+
cdef view.array computeInstances = view.array(shape=(count[0],), itemsize=sizeof(intptr_t), format="P", mode="c")
2786627869
with nogil:
2786727870
__status__ = nvmlGpuInstanceGetComputeInstances(<GpuInstance>gpu_instance, profile_id, <nvmlComputeInstance_t *>computeInstances.data, count)
2786827871
check_status(__status__)

0 commit comments

Comments
 (0)