【问题标题】:Monitoring NVENC hardware (Active or idle)监控 NVENC 硬件(活动或空闲)
【发布时间】:2013-08-09 14:51:40
【问题描述】:

我们可以像这样使用 nvenc 硬件查询可用的 GPU:

     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 个带有 NVENC 功能的 GPU:

我们如何检查特定的 NVENC 硬件现在是否正在运行或空闲。有什么方法可以监控 NVENC 硬件?

具体的 NVENC API 函数“OR”CUDA 驱动程序或 API 函数如何帮助我找出空闲的 GPU 或 NVENC 硬件?

注意:我知道 CUDA 和 NVENC 硬件是完全独立的东西,但我正在寻找直接或间接(使用 Cuda API,例如使用 Cuda 指定可用的 NVENC 硬件)检查特定 NVENC 状态的方法???

【问题讨论】:

    标签: cuda gpu nvidia video-encoding kepler


    【解决方案1】:

    您可以使用此命令以间接方式监控您的 NVENC 硬件是否处于活动状态

    nvidia-smi 
    

    查看特定的 NVENC 硬件是忙还是闲,因为当你想使用特定的 NVENC 时,你应该先在那个 GPU 上创建一个 cuda 线程,并使用它的内存,所以通过检查 GPU 的状态我们可以扩展它到它的 NVENC 硬件。

    【讨论】:

    • 这是我对我的问题的临时回答,我想帮助一些人解决我的问题!!!为什么你不给我投票,正如我所说,这是间接方式,现在我正在寻找在我的代码中使用这种方式!!!! (这不是你的错,你对使用 NVENC 一无所知)
    • 我用这个方法+脚本生成测试负载给NVENC编码,通过这个方法我成功评估了使用8个NVENC硬件的方法你打倒我!!!!!!
    • 希望能暂时帮助到某人:)
    【解决方案2】:

    关于这个问题:

    具体的... CUDA 驱动程序或 API 函数可以帮助我找出哪些... NVENC 硬件处于空闲状态?

    没有。

    NVENC 和 CUDA 是正交的。访问和管理 CUDA 的 API 与访问和管理 NVENC 的 API 完全分开。您在此处显示的代码标识了系统中的 GPU,并且恰好使用 CUDA API 来执行此操作,但您的问题与 CUDA 无关。没有 CUDA API 函数可以让您对 NVENC 硬件进行任何操作。

    归根结底,管理 NVENC 硬件是使用 NVENC API 的客户端应用程序的责任。如果需要,此客户端应用程序可以轻松地向上游其他应用程序提供忙碌/非忙碌状态(因为它知道它正在管理的硬件的各个状态。

    【讨论】:

    • 亲爱的@Robert:我知道这些是分开的,我在它们之间使用了 OR。正是我想以这样的间接方式知道我可以使用 cuda API 来检查特定的 NVENC 是否忙,因为当你想使用特定的 NVENC 时,你应该首先创建一个 cuda 线程,所以也许通过检查 GPU 的状态我们可以将其扩展到其 NVENC 硬件。那么 NVENC API 呢,这个 API 有没有检查 NVENC 硬件状态的功能?
    猜你喜欢
    • 2013-05-06
    • 2010-10-11
    • 2015-12-25
    • 2016-06-12
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多