监控NVENC硬件(活动或空闲)

时间:2013-08-09 14:51:40

标签: cuda gpu nvidia video-encoding kepler

我们可以使用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个GPU whit NVENC功能:

我们如何检查特定的NVENC硬件现在正在运行还是空闲。有没有办法监控NVENC硬件?

具体的NVENC API功能“OR”CUDA驱动程序或API函数如何帮助我找出哪些GPU或NVENC硬件处于空闲状态?

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

2 个答案:

答案 0 :(得分:2)

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

nvidia-smi 

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

答案 1 :(得分:1)

关于这个问题:

  

CUDA驱动程序或API函数如何帮助我找出哪些...... NVENC硬件是空闲的?

没有。

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

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