Мониторинг аппаратного обеспечения 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. Это клиентское приложение может легко сделать состояние занятости / незанятости доступным для других приложений, если это необходимо (поскольку оно знает индивидуальное состояние оборудования, которым оно управляет).

Другие вопросы по тегам