我们可以使用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函数“或”CUDA驱动程序或API函数如何帮助我找出哪个GPU或NVENC硬件是空闲的?
注意:我知道CUDA和NVENC硬件是完全不同的,但是我正在寻找直接或间接(使用Cuda API来指定可用的NVENC硬件)检查特定NVENC状态的方法?
发布于 2013-08-17 00:57:28
可以使用以下命令间接监视NVENC硬件是否处于活动状态
nvidia-smi 要查看特定的NVENC硬件是繁忙的还是空闲的,因为当您想要使用特定的NVENC时,您应该首先在该GPU上创建一个cuda线程,并使用它的内存,因此通过检查GPU的状态,我们可以将它扩展到它的NVENC硬件。
发布于 2013-08-09 21:14:31
关于这一问题:
那具体的..。CUDA驱动程序或API函数帮助我找出哪一个..。NVENC硬件是闲置的吗?
根本就没有。
NVENC和CUDA是正交的。访问和管理CUDA的API与访问和管理NVENC的API完全不同。您在这里展示的代码标识了系统中的GPU,并且碰巧使用了CUDA API来实现这一点,但是您的问题与CUDA无关。没有任何CUDA API函数允许您使用NVENC硬件做任何事情。
最终,管理NVENC硬件是使用NVENC的客户端应用程序的责任。如果需要,此客户端应用程序可以很容易地使繁忙/非繁忙状态在上游提供给其他应用程序(因为它知道正在管理的硬件的各个状态。
https://stackoverflow.com/questions/18149580
复制相似问题