我想使用 Numba 或类似的 Python CUDA 包访问各种 NVidia GPU 规范。可用设备内存、二级缓存大小、内存时钟频率等信息。
来自阅读这个问题 https://stackoverflow.com/questions/48654403/how-do-i-know-the-maximum-number-of-threads-per-block-in-python-code-with-either,我了解到我可以通过 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 https://github.com/numba/numba/blob/master/numba/cuda/cudadrv/enums.py#L299例如TOTAL_CONSTANT_MEMORY
, MAX_SHARED_MEMORY_PER_BLOCK
, MEMORY_CLOCK_RATE
, and MAX_THREADS_PER_MULTI_PROCESSOR
.
如何在 Python 中查看这些值?
所有这些值都通过延迟设置为设备对象__getattr__
method https://github.com/numba/numba/blob/b3d09ff64367e3b002c606789496b82023de59e9/numba/cuda/cudadrv/driver.py#L264。您可以使用类似的方式访问它们这个方法 https://github.com/numba/numba/blob/b3d09ff64367e3b002c606789496b82023de59e9/numba/cuda/cudadrv/driver.py#L172。您需要的不是设备,而是枚举本身:
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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)