2017-05-16 9 views
2

NVidia의 NvDec CUVID 기능을 사용하여 비디오 디코더를 구현하고 있습니다. (비참하게 부적절한) 매뉴얼의 2 장에 따르면, 디코딩 제한은 GPU 아키텍처에 의해 지정됩니다. 즉, 최대 h265 수평 해상도는 GP10x에서 8192, GP100에서 4096 이하이며 GM206 미만의 아키텍처에서는 지원되지 않습니다.CUVID를위한 장치의 GPU 아키텍처를 얻는 방법?

CUDA를 사용하여 이러한 아키텍처를 검색하는 방법은 무엇입니까? 계산 기능이나 그로부터 추측할까요? 그리고 내가 그것을 추측해야한다면, 아키텍쳐 대 컴퓨팅 능력의 테이블이 있습니까?

+2

제 4 디코더의 능력을 검출하는 cuvidGetDecoderCaps '()'기능을 소개한다. – halfelf

+0

그것은합니까 ?? 도대체 내가 그것을 그리워 했어? 필자는 기능을 아는 아키텍처에 대해서만 알고 싶기 때문에 답변으로 의견을 게시하고 올바른 것으로 표시하겠습니다! – swestrup

+0

SDK의 v7에는 이러한 기능이 없었지만, 이전 버전과 호환 될 필요가 없으므로 8.0으로 업그레이드하고 기능을 사용했습니다. – swestrup

답변

3

GPU의 코드 이름을 반환하는 함수는 없지만 NVIDIA는 사용자가 기본 하드웨어 비디오 디코더의 기능을 쿼리 할 수 ​​있도록 cuvidGetDecoderCaps() API를 제공합니다.

cuvidGetDecoderCaps()의 상세한 예는 에서 다운로드 할 수 있으며, nvenc official site에서 다운로드 할 수 있습니다. 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);; 
}