Capture time with NVIDIA GPU on Windows is unstable

Problem

Windows에서 NVIDIA GPU를 사용하여 캡처할 경우 캡처 시간이 불안정하거나 변동이 심합니다. 특히, 캡처 사이에 긴 멈춤 간격을 두는 캡처는 짧은 멈춤 간격을 두는 캡처보다 느립니다.

Cause

GPU 드라이버에는 GPU가 실제로 사용되지 않을 때 GPU 클럭과 메모리 주파수를 낮추는 절전 기능이 있습니다.

Solution

nvidia-smi 를 사용하여 GPU 클럭 및 메모리 주파수를 상수 값이나 범위로 고정하면 일관된 처리 시간을 유지할 수 있습니다. 사용 가능한 클럭 주파수를 읽어오려면 다음을 수행합니다.

nvidia-smi --query-supported-clocks=graphics --format=csv
nvidia-smi --query-supported-clocks=mem --format=csv

이렇게 하면 지원되는 여러 주파수가 나열되며, 주파수가 높을수록 성능이 향상됩니다. 그런 다음 클럭 주파수를 잠급니다.

nvidia-smi --lock-gpu-clocks="<minGpuClock>, <maxGpuClock>"
nvidia-smi --lock-memory-clocks="<minMemClock>, <maxMemClock>"

여기서 <minGpuClock><maxGpuClock> 은 원하는 최소 및 최대 GPU 클럭 주파수이고, <minMemClock><maxMemClock> 은 원하는 최소 및 최대 메모리 클럭 주파수입니다. 주파수를 일정한 값으로 고정하려면 최소값과 최대값에 동일한 값을 사용하세요.

참고

모든 NVIDIA GPU가 --lock-gpu-clocks 및/또는 --lock-memory-clocks 옵션을 지원하는 것은 아닙니다. 해당 옵션을 사용할 수 없는 경우 GPU 드라이버를 최신 버전으로 업데이트해 보세요.

클록 주파수를 기본값으로 재설정하려면 다음을 사용하세요.

nvidia-smi --reset-gpu-clocks
nvidia-smi --reset-memory-clocks