如何获取 CUVID 设备的 GPU 架构?

How to get the GPU Architecture of a Device for CUVID?

我正在使用 NVidia 的 NvDec CUVID 功能实现视频解码器。 根据(严重不足)手册的第 2 章,解码限制由 GPU 架构指定。即,最大 h265 水平分辨率在 GP10x 上为 8192,在 GP100 或更低版本上为 4096,并且在低于 GM206 的任何架构上均不受支持。

如何使用 CUDA 检测此类架构?我应该从计算能力或什么来推断它吗?如果我要推断的话,是否存在 table 体系结构与计算能力的关系?

虽然没有returnsGPU代号的功能,但NVIDIA提供了cuvidGetDecoderCaps()API让用户查询底层硬件视频解码器的能力。

cuvidGetDecoderCaps() 的详细示例可以在从 nvenc official site 下载的 Video_Codec_SDK_x.x.x 中找到。 Samples/NvDecodeD3D11/NvDecodeD3D11.cpp中的一个示例:

CUVIDEOFORMAT videoFormat = g_pVideoSource->format();
CUVIDDECODECAPS videoDecodeCaps = {};
videoDecodeCaps.eCodecType = videoFormat.codec;
videoDecodeCaps.eChromaFormat = videoFormat.chroma_format;
videoDecodeCaps.nBitDepthMinus8 = videoFormat.bit_depth_luma_minus8;
if (cuvidGetDecoderCaps(&videoDecodeCaps) != CUDA_SUCCESS)
{
    printf("cuvidGetDecoderCaps failed: %d\n", result);
    return;
}
if (!videoDecodeCaps.bIsSupported) {
    printf("Error: This video format isn't supported on the selected GPU.");
    exit(1);;
}