Мониторинг аппаратного обеспечения NVENC (активный или бездействующий)
Мы можем запросить доступный графический процессор с помощью оборудования nvenc следующим образом:
cuResult = cuInit(0);
if (cuResult != CUDA_SUCCESS)
{
printf(">> GetNumberEncoders() - cuInit() failed error:0x%x\n", cuResult);
exit(EXIT_FAILURE);
}
checkCudaErrors(cuDeviceGetCount(&deviceCount));
if (deviceCount == 0)
{
printf(">> GetNumberEncoders() - reports no devices available that support CUDA\n");
exit(EXIT_FAILURE);
}
else
{
printf(">> GetNumberEncoders() has detected %d CUDA capable GPU device(s) <<\n", deviceCount);
for (int currentDevice=0; currentDevice < deviceCount; currentDevice++)
{
checkCudaErrors(cuDeviceGet(&cuDevice, currentDevice));
checkCudaErrors(cuDeviceGetName(gpu_name, 100, cuDevice));
checkCudaErrors(cuDeviceComputeCapability(&SMmajor, &SMminor, currentDevice));
printf(" [ GPU #%d - < %s > has Compute SM %d.%d, NVENC %s ]\n",
currentDevice, gpu_name, SMmajor, SMminor,
(((SMmajor << 4) + SMminor) >= 0x30) ? "Available" : "Not Available");
if (((SMmajor << 4) + SMminor) >= 0x30)
{
encoderInfo[NVENC_devices].device = currentDevice;
strcpy(encoderInfo[NVENC_devices].gpu_name, gpu_name);
NVENC_devices++;
}
}
}
У меня есть 8 GPU с возможностью NVENC:
Как мы можем проверить, что конкретное оборудование NVENC сейчас работает или находится в режиме ожидания. Есть ли способ мониторинга оборудования NVENC?
Как насчет конкретной функции API-интерфейса NVENC "ИЛИ" драйвера CUDA или функций API, которые помогают мне определить, какое аппаратное обеспечение графического процессора или NVENC находится в режиме ожидания?
ПРИМЕЧАНИЕ: я знаю, что аппаратные средства CUDA и NVENC - это совершенно разные вещи, но я ищу прямой или косвенный (использующий Cuda API, например, Cuda для указания доступного аппаратного обеспечения NVENC) способ проверки статуса конкретного NVENC???
2 ответа
С помощью этой команды вы можете контролировать, активно ли ваше оборудование NVENC или нет.
nvidia-smi
чтобы увидеть, что конкретное оборудование NVENC занято или бездействует, потому что, когда вы хотите использовать конкретный NVENC, вы должны сначала создать поток cuda на этом графическом процессоре и также использовать его память, поэтому, проверяя состояние графического процессора, мы можем расширить его до его NVENC. аппаратное обеспечение.
По этому вопросу:
Как насчет конкретных... драйверов CUDA или функций API, которые помогают мне выяснить, какое... оборудование NVENC не используется?
Там нет ни одного.
NVENC и CUDA ортогональны. API для доступа и управления CUDA полностью отделены от API для доступа и управления NVENC. Код, который вы показали здесь, идентифицирует, какие графические процессоры находятся в системе, и для этого используется API CUDA, но в противном случае ваш вопрос не имеет ничего общего с CUDA. Нет никаких функций API CUDA, которые позволили бы вам делать что-либо с оборудованием NVENC.
В конечном счете, управление оборудованием NVENC является обязанностью клиентского приложения, использующего API-интерфейс NVENC. Это клиентское приложение может легко сделать состояние занятости / незанятости доступным для других приложений, если это необходимо (поскольку оно знает индивидуальное состояние оборудования, которым оно управляет).