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

Cuda 监控NVENC硬件(活动或空闲),cuda,gpu,nvidia,video-encoding,kepler,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)

我们可以使用如下所示的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++;
        }
    }
}
cuResult=cuInit(0);
if(cuResult!=CUDA_SUCCESS)
{
printf(“>>getnumbercoders()-cuInit()失败错误:0x%x\n”,cuResult);
退出(退出失败);
}
检查CUDAErrors(cuDeviceGetCount(&deviceCount));
如果(deviceCount==0)
{
printf(“>>GetNumberCodes()-报告没有支持CUDA的可用设备\n”);
退出(退出失败);
}
其他的
{

printf(“>>GetNumberCodes()已检测到%d个支持CUDA的GPU设备,与此问题有关:

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

没有

NVENC和CUDA是正交的。访问和管理CUDA的API与访问和管理NVENC的API完全分离。您在这里展示的代码确定了系统中的GPU,并且碰巧使用CUDA API来实现这一点,但您的问题与CUDA无关。没有CUDA API函数可以允许您使用NVENC硬件执行任何操作


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

关于此问题:

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

没有

NVENC和CUDA是正交的。访问和管理CUDA的API与访问和管理NVENC的API完全分离。您在这里展示的代码确定了系统中的GPU,并且碰巧使用CUDA API来实现这一点,但您的问题与CUDA无关。没有CUDA API函数可以允许您使用NVENC硬件执行任何操作


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

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

nvidia-smi 

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

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

nvidia-smi 

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

亲爱的@Robert:我知道这些是独立的东西,我用过它们或它们之间的。确切地说,我想知道现在,以这种间接的方式,我可以使用cuda API检查特定的NVENC是否繁忙,因为当你想使用特定的NVENC时,你应该先创建一个cuda线程,这样也许通过检查GPU的状态,我们可以将其扩展到其NVENC硬件。那么,NVENC API呢,这个API有检查NVE状态的功能吗NC硬件?亲爱的@Robert:我知道这些是独立的东西,我使用过它们或它们之间的。确切地说,我想通过这样一种间接的方式知道我可以使用cuda API来检查特定的NVENC是否繁忙,因为当你想使用特定的NVENC时,你应该首先创建一个cuda线程,所以也许通过检查GPU的状态,我们可以扩展它这是我对我的问题的临时回答,我想帮助一些人解决我的问题!!!为什么你投票反对我,因为我说过这是间接的方式,现在我正在寻找在我的代码中使用这种方式!!!!(这不是你的错,你对使用NVENC一无所知)我使用这个方法+脚本为NVENC生成测试负载进行编码,通过这种方式我成功评估了使用8个NVENC硬件的方法,你让我失望了!!!!!希望暂时帮助某人:)这是我对我的问题的临时回答,我想帮助一些人解决我的问题!!!为什么你投票反对我,因为我说过这是间接的方式,现在我正在寻找在我的代码中使用这种方式!!!!(这不是你的错,你对使用NVENC一无所知)我用这个方法+脚本为NVENC编码生成测试负载,通过这种方式我成功评估了使用8个NVENC硬件的方法,你让我失望了!!!!!希望能暂时帮上忙:)