2017-02-01 1 views
1

비디오 프레임에서 여러 관심 영역을 처리하는 데 도움이되는 스트림을 이해하려고합니다. 스트림을 지원하는 NPP 함수를 사용하는 경우 ROI가있는 스트림만큼 스트림을 시작할 수 있습니까? 각 스트림에 대해 CPU 스레드를 만들 수도 있습니까? 또는 하나의 스트림을 사용하여 모든 ROI를 처리하고 CPU의 여러 스레드에서이 단일 스트림을 사용할 때 이점이 있습니까?CUDA 스트림의 장점

답변

3

CUDA에서 일반적으로 스트림을 사용하면 GPU를 두 가지 방식으로 효과적으로 활용하는 데 도움이됩니다. 첫째, 서로 다른 스트림에서 복사 및 실행이 발생하면 호스트와 장치 사이의 메모리 복사본이 커널 실행에 의해 겹쳐 질 수 있습니다. 둘째, GPU에 충분한 리소스가있는 경우 서로 다른 스트림에서 실행되는 개별 커널이 겹칠 수 있습니다.

또한 각 ROI에 대한 스레드를 만드는 것이 GPU 대 CPU (있는 경우)의 비교 여부에 달려 있습니다. CPU에 많은 처리가 있고 CPU가 GPU 계산을 보류하면 더 많은 스레드를 생성하면 도움이됩니다.

스트림에서 연산의 중복을 제한하는 자세한 내용 (CUDA의 실제 버전은 documentation 참조)이 있습니다. RAM의 메모리 소스 또는 대상이 페이지 잠김 인 경우에만 메모리 사본이 커널 실행과 겹칩니다. 또는 호스트 스레드가 기본 스트림에서 명령을 실행할 때 스트림 간의 동기화가 발생합니다. (CUDA 7 이후 각 스레드는 자체 기본 스트림을 가지고 있으므로 다른 스레드에서 ROI를 처리하면 다시 도움이됩니다.) ROI 처리가 다른 스트림에서 발생하는 경우 특정 조건을 충족 시키면 알고리즘 성능이 향상됩니다 (커널의 자원 소비, 메모리 사본 및 계산 비율 등에 따라 ...)

+0

감사합니다! 매우 도움이된다! – AeroClassics

+0

@AeroClassics, 그렇다면 답변 승인을 고려하십시오. – stuhlo