Доступ к аппаратным характеристикам графического процессора в Python? - PullRequest
1 голос
/ 18 июня 2020

Я хочу получить доступ к различным спецификациям графического процессора NVidia, используя Numba или аналогичный Python CUDA pacakge. Информация, такая как доступная память устройства, размер кэша L2, тактовая частота памяти и т. Д. c.

Прочитав этот вопрос , я узнал, что могу получить доступ к некоторой информации (но не ко всей ) через интерфейс устройства CUDA Numba.

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

Как видите, мне не хватает многих полей в списке здесь например TOTAL_CONSTANT_MEMORY, MAX_SHARED_MEMORY_PER_BLOCK, MEMORY_CLOCK_RATE и MAX_THREADS_PER_MULTI_PROCESSOR.

Как просмотреть эти значения в Python?

1 Ответ

1 голос
/ 19 июня 2020

Все эти значения лениво устанавливаются для объекта устройства с помощью __getattr__ метода . Вы можете получить к ним доступ аналогично, как в , этот метод . Вам нужно управлять не устройством, а перечислить себя:

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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...