在 Python 中访问 GPU 硬件规范?

Posted

技术标签:

【中文标题】在 Python 中访问 GPU 硬件规范?【英文标题】:Access GPU hardware specifications in Python? 【发布时间】:2020-10-08 22:24:38 【问题描述】:

我想使用 Numba 或类似的 Python CUDA pacakge 访问各种 NVidia GPU 规范。可用设备内存、二级缓存大小、内存时钟频率等信息。

通过阅读this question,我了解到我可以通过 Numba 的 CUDA 设备接口访问部分信息(但不是全部)。

from numba import cuda

device = cuda.get_current_device()
attribs = [s for s in dir(device) if s.isupper()]
for attr in attribs:
    print(attr, '=', getattr(device, attr))

在测试机器上的输出:

ASYNC_ENGINE_COUNT = 4
CAN_MAP_HOST_MEMORY = 1
COMPUTE_CAPABILITY = (5, 0)
MAX_BLOCK_DIM_X = 1024
MAX_BLOCK_DIM_Y = 1024
MAX_BLOCK_DIM_Z = 64
MAX_GRID_DIM_X = 2147483647
MAX_GRID_DIM_Y = 65535
MAX_GRID_DIM_Z = 65535
MAX_SHARED_MEMORY_PER_BLOCK = 49152
MAX_THREADS_PER_BLOCK = 1024
MULTIPROCESSOR_COUNT = 3
PCI_BUS_ID = 1
PCI_DEVICE_ID = 0
UNIFIED_ADDRESSING = 1
WARP_SIZE = 32

如您所见,我缺少here 列出的许多字段,例如TOTAL_CONSTANT_MEMORYMAX_SHARED_MEMORY_PER_BLOCKMEMORY_CLOCK_RATEMAX_THREADS_PER_MULTI_PROCESSOR

如何在 Python 中查看这些值?

【问题讨论】:

【参考方案1】:

所有这些值都通过__getattr__method 延迟设置为设备对象。您可以通过this method 中的类似方式访问它们。您需要 dir 不是设备,而是枚举自身:

from numba.cuda.cudadrv import enums
from numba import cuda

device = cuda.get_current_device()
attribs= [name.replace("CU_DEVICE_ATTRIBUTE_", "") for name in dir(enums) if name.startswith("CU_DEVICE_ATTRIBUTE_")]
for attr in attribs:
    print(attr, '=', getattr(device, attr))

【讨论】:

以上是关于在 Python 中访问 GPU 硬件规范?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 nVidia GPU 中使用硬件编码器 NVEN 压缩 8 个 FullHD 30fps 视频流吗?

Android硬件抽象层模块编写规范

GPU硬件基础知识

基于FFmpeg+VAAPI的硬件加速渲染技术

深度学习装机指南:从GPU到显示器,全套硬件推荐

银行冲突是不是发生在非 GPU 硬件上?