我们可以使用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的状态???
答案 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的客户端应用程序的责任。如果需要,此客户端应用程序可以轻松地向其他应用程序上游提供忙/非忙状态(因为它知道它正在管理的硬件的个别状态。