NVIDIA GPUDirect for Video#
이 기술을 사용하면 낮은 지연 시간으로 비디오 프레임을 NVIDIA GPU memory로 효율적으로 전송할 수 있습니다. 서브프레임 전송 시간 내에 GPU로 비디오를 스트리밍할 수 있도록 완벽한 제어 기능을 제공합니다.
GPUDirect for Video 기술은 다음 환경에서 Windows OS를 사용하는 호스트 PC의 Basler Framegrabber API를 통해 사용할 수 있습니다.
- OpenGL(Open Graphics Library), 또는
- NVIDIA의 병렬 프로그래밍 프레임워크인 CUDA(Compute Unified Device Architecture).
NVIDIA GPUDirect for Video는 NVIDIA GPU(graphics processing unit)를 사용하는 시스템에 최적화되어 있습니다. 이 기술을 사용하면 낮은 지연 시간으로 비디오 프레임을 NVIDIA GPU memory로 효율적으로 전송할 수 있습니다. 서브프레임 전송 시간 내에 GPU로 비디오를 스트리밍할 수 있도록 완벽한 제어 기능을 제공합니다.
자세한 내용은 제조업체 사이트의 NVIDIA GPUDirect for Video 기술 및 GPUDirect 기술 개요 섹션을 참조하십시오.
Requirements#
Basler 프레임 그래버와 함께 GPUDirect for Video 기술을 사용하려면 시스템이 다음 요구 사항을 충족해야 합니다.
하드웨어#
지원되는 최신 NVIDIA GPU 목록은 여기에서 확인하십시오.
원하는 Basler 프레임 그래버.
소프트웨어#
- Basler Framegrabber SDK: 버전 5.10.0 이상
- 호스트 PC 운영 체제: Windows 10(64비트)
- 병렬 컴퓨팅 플랫폼/API(참조: 설치):
- CUDA(Compute Unified Device Architecture) 버전 11.6, 또는
- OpenGL(Open Graphics Library)
- 권장 IDE: Visual Studio 15.x 이상
정보
GPUDirect for Video를 실행하려면 추가 DLL 및 헤더 파일이 필요할 수 있습니다. 자세한 내용은 Basler 기술 지원팀에 문의하십시오.
GPUDirect for Video 기술 지원은 Windows 10 환경에서 테스트되었으며 해당 Windows 버전에서 보장됩니다.
설치#
전제 조건#
- GPU 하드웨어: GPUDirect for Video 기술을 지원하는 NVIDIA GPU가 호스트 PC에 장착되어 있어야 합니다.
- Parallel Computing Platform/API: 다음 패키지 중 하나가 호스트 PC에 설치되어 있어야 합니다.
- CUDA(Compute Unified Device Architecture): NVIDIA의 병렬 프로그래밍 프레임워크
- OpenGL(Open Graphics Library)
- 프레임 그래버 하드웨어: 선택한 Basler 프레임 그래버가 호스트 PC에 연결되어 있습니다. 프레임 그래버 연결 방법에 대한 자세한 내용은 프레임 그래버 연결을 참조하십시오.
- Framegrabber SDK: Basler Framegrabber SDK 5.10.0 이상이 설치되어 있습니다. 런타임 소프트웨어 설치 방법에 대한 자세한 내용은 Framegrabber SDK 설치를 참조하십시오.
- Applet: 선택한 앱릿이 프레임 그래버에 플래싱되어 있으며(marathon 프레임 그래버에만 해당) 활성 앱릿으로 선택되어 있습니다. marathon 프레임 그래버 플래싱 방법에 대한 자세한 내용은 플래싱을 참조하십시오. 앱릿을 활성 앱릿으로 선택하는 방법에 대한 자세한 내용은 활성 앱릿 변경을 참조하십시오.
- GPUDirect for Video Support Files: Basler에서 제공하는 파일:
- siso_gpudirect.dll: 라이브러리 파일
- siso_gpudirect.h: 항상 필요한 일반 함수를 포함하는 헤더 파일
- siso_gpudirect_cuda.h: CUDA 작업에 필요한 헤더 파일
- siso_gpudirect_gl.h: OpenGL 작업에 필요한 헤더 파일
GPUDirect for Video 지원 설치#
호스트 PC에 GPUDirect for Video 지원을 설치하려면:
- 라이브러리 파일 siso_gpudirect.dll을 Basler Framegrabber SDK 설치 디렉터리의 하위 폴더인 bin(C:\Program Files\Basler\FramegrabberSDK_5.XX.X\bin 등)에 복사합니다.
- 헤더 파일을 Basler Framegrabber SDK 설치 디렉터리의 하위 폴더인 include(C:\Program Files\Basler\FramegrabberSDK_5.XX.X\include 등)에 복사합니다.
설치 폴더의 언급된 하위 폴더에 파일을 복사한 후, Basler Framegrabber API를 통해 GPUDirect for Video 기능을 사용할 수 있습니다.
함수 레퍼런스#
Basler Framegrabber API를 통해 GPUDirect for Video를 제어하려면 CUDA 또는 OpenGL을 사용합니다.
CUDA 사용을 위한 사전 요구 사항#
- 라이브러리 파일 siso_gpudirect.dll이 Framegrabber SDK 설치의 bin 하위 폴더로 복사되었습니다.
- 헤더 파일 siso_gpudirect.h 및 siso_gpudirect_cuda.h가 Framegrabber SDK 설치의 include 하위 폴더로 복사되었습니다.
OpenGL 사용을 위한 사전 요구 사항#
- 라이브러리 파일 siso_gpudirect.dll이 Framegrabber SDK 설치의 bin 하위 폴더로 복사되었습니다.
- 헤더 파일 siso_gpudirect.h 및 siso_gpudirect_gl.h가 Framegrabber SDK 설치의 include 하위 폴더로 복사되었습니다.
사용 가능한 함수#
Basler Framegrabber API를 통해 GPUDirect for Video 기술을 제어하기 위한 함수는 CUDA와 OpenGL 모두 동일합니다. Basler Framegrabber API는 다음과 같은 함수를 제공합니다.
| 기능 | GDInitLib |
|---|---|
| 설명 | 전역 초기화입니다. 초기화를 위해 다른 함수보다 먼저 이 함수를 호출하십시오. |
| Parameters |
|
| 기능 | GDCloseLib |
|---|---|
| 설명 | 라이브러리의 어떠한 함수도 더 이상 필요하지 않은 경우, 이 함수를 호출하여 다음에서 리소스를 해제해야 합니다. GDInitLib 함수 호출. 각 호출은 다음 함수에 대응해야 합니다. GCCloseLib 다음 함수 호출이 선행되어야 합니다. GDInitLib. |
| Parameters | None |
| 기능 | GDGetContextInfo |
|---|---|
| 설명 | 현재 컨텍스트에 대한 정보를 가져오려면 이 함수를 사용하십시오. |
| Parameters |
|
| 기능 | GDRevokeBuffer |
|---|---|
| 설명 | 수집 엔진(acquisition engine)에서 등록된 버퍼를 제거합니다. 이 함수는 이 버퍼와 연결된 내부적으로 할당된 모든 리소스를 해제합니다. 버퍼는 어떤 큐에도 대기 중이지 않은 경우에만 취소할 수 있습니다. |
| Parameters | [in] BUFFER_HANDLE:버퍼를 참조하는 핸들입니다. 버퍼 자체는 다음 함수를 통해 등록되었습니다. GDAllocateSourceBuffer, GDAnnounceCUDAArray, GDAnnounceTextureGL, 또는 GDAnnounceBufferGL. |
| 기능 | GDStartAcquisition |
|---|---|
| 설명 | 수집 엔진을 시작합니다. |
| Parameters | None |
| 기능 | GDStartAcquisitionEx |
|---|---|
| 설명 | 수집 엔진을 시작합니다. |
| Parameters |
|
| 기능 | GDStopAcquisition |
|---|---|
| 설명 | 수집 엔진을 중지합니다. |
| Parameters | None |
| 기능 | GDAllocateSourceBuffer |
|---|---|
| 설명 | 이 함수는 단일 소스 버퍼용 메모리를 할당하고, 이 버퍼를 수집 엔진에 등록한 후, 해당 단일 버퍼를 참조하는 버퍼 핸들을 반환합니다. |
| Parameters |
|
| 기능 | GDRegisterEvent |
|---|---|
| 설명 | 이벤트 객체를 특정 iEventID. |
| Parameters |
|
| 기능 | GDEventGetData |
|---|---|
| 설명 | 이벤트 핸들과 연결된 이벤트 데이터 큐에서 다음 이벤트 데이터 항목을 가져옵니다. |
| Parameters |
|
| 기능 | GDMemcpy |
|---|---|
| 설명 | 프레임 그래버가 전달한 다음 프레임을 GPU로 복사합니다. 복사 프로세스를 트리거하려면 이 함수를 사용하십시오. 결과는 다음과 같이 전달됩니다. EVENT_NEW_BUFFER_DATA 유형입니다. |
| Parameters |
|
| 기능 | GDBufferUnblock |
|---|---|
| 설명 | 이 함수는 복사 프로세스를 위해 버퍼의 차단을 해제합니다. 의 멤버로 수신한 각 버퍼는 EVENT_NEW_BUFFER_DATA 이 함수를 통해 차단 해제해야 합니다(예: 새로운 복사 프로세스를 위한 버퍼를 확보하기 위함). 버퍼의 차단을 해제하기 전에 버퍼 콘텐츠에 대한 작업이 완료되었는지 확인하십시오. |
| Parameters | [in] BUFFER_HANDLE phBuffer |
| 기능 | GDBufferGetDataPtr |
|---|---|
| 설명 | 이 함수는 버퍼의 메모리 위치 시작점에 대한 포인터를 반환합니다. 버퍼는 다음을 사용하여 생성되어야 합니다. GDAllocateSourceBuffer 함수와 함께 직접 사용할 수 있습니다. |
| Parameters |
|
| 기능 | GGDGetBufferInfo |
|---|---|
| 설명 | 이 버퍼 핸들과 연결된 버퍼 모듈에 대한 정보를 조회하려면 이 함수를 사용하십시오. |
| Parameters |
|
| 기능 | GDGetLastError |
|---|---|
| 설명 | 발생한 마지막 오류와 연결된 메시지를 조회하려면 이 함수를 사용하십시오. |
| Parameters |
|
| 기능 | GDAnnounceTextureGL |
|---|---|
| 설명 | 이 함수는 대상 객체를 복사 작업의 목적지로 등록하고 단일 버퍼를 참조하는 버퍼 핸들을 반환합니다. |
| Parameters |
|
| 기능 | GDAnnounceBufferGL |
|---|---|
| 설명 | 이 함수는 대상 객체를 복사 작업의 목적지로 등록하고 단일 버퍼를 참조하는 버퍼 핸들을 반환합니다. |
| Parameters |
|
| 기능 | GDAnnounceCUDAArray |
|---|---|
| 설명 | 이 함수는 대상 객체를 복사 작업의 목적지로 등록하고 단일 버퍼를 참조하는 버퍼 핸들을 반환합니다. |
| Parameters |
|
데이터 형식#
| STRUCT의 이름 | EVENT_NEW_BUFFER_DATA |
|---|---|
| 설명 | 이벤트가 소스 버퍼의 콘텐츠를 타겟 버퍼로 복사했습니다. |
| Parameters |
|
Enumerations#
GD_CTX_LIST | |
|---|---|
GD_CTX_CUDA | CUDA 컨텍스트의 이름 |
GD_CTX_OPENGL | OpenGL 컨텍스트의 이름 |
GD_CTX_D3D9 | 지원되지 않음 |
GD_CTX_D3D11 | 지원되지 않음 |
GD_CONTEXT_INFO_LIST | |
|---|---|
GD_CONTEXT_STRIDE_LENGTH | :소스: https://msdn.microsoft.com/en-us/library/windows/desktop/aa473780(v=vs.85).aspx |
GDBufferTypes |
|---|
GD_UNSIGNED_BYTE |
GD_BYTE |
GD_UNSIGNED_SHORT |
GD_SHORT |
GD_UNSIGNED_INT |
GD_INT |
GD_FLOAT |
GD_HALF_FLOAT |
GD_UNSIGNED_BYTE_3_3_2 |
GD_UNSIGNED_BYTE_2_3_3_REV |
GD_UNSIGNED_SHORT_5_6_5 |
GD_UNSIGNED_SHORT_5_6_5_REV |
GD_UNSIGNED_SHORT_4_4_4_4 |
GD_UNSIGNED_SHORT_4_4_4_4_REV |
GD_UNSIGNED_SHORT_5_5_5_1 |
GD_UNSIGNED_SHORT_1_5_5_5_REV |
GD_UNSIGNED_INT_8_8_8_8 |
GD_UNSIGNED_INT_8_8_8_8_REV |
GD_UNSIGNED_INT_10_10_10_2 |
GD_UNSIGNED_INT_2_10_10_10_REV |
EVENT_TYPE_LIST | |
|---|---|
EVENT_ERROR | 모듈 오류에 대한 알림. |
EVENT_COPY_FINISHED | 새로 Fill된 버퍼에 대한 알림. 이벤트 데이터는 다음 항목에 저장됩니다. EVENT_NEW_BUFFER_DATA. |
GD_BUFFER_INFO_LIST | |
|---|---|
GD_BUFFER_TIMESTAMP | 버퍼 내 타임스탬프 최종 변경 |
GD_BUFFER_TIMESTAMP_FREQUENCY | 타임스탬프 주파수 |
GD_BUFFER_PICNUMBER | 버퍼 콘텐츠 인덱스 |
GD_BUFFER_DATA_PTR | 버퍼에 의해 관리되는 원시 데이터에 대한 포인터 |
예제#
전제 조건#
- Basler로부터 받은 예제 폴더를 사용할 수 있습니다.
- PC에 Visual Studio 15.x 이상이 설치되어 있습니다.
- PC에 CMake가 설치되어 있습니다.
- 해당 라이브러리가 PC에 설치되어 있습니다.
예제 사용 방법#
Basler가 제공하는 예제를 사용하려면:
-
Basler로부터 받은 예제 폴더를 호스트 PC의 하드 드라이브로 복사합니다.
CUDA 예제
CUDA 예제의 경우, PC에 이미 설치된 라이브러리 외에 cuda.lib와 cudart.lib만 필요합니다.
OpenGL 예제: CMake에서 glew를 찾을 수 있어야 합니다.
CMake가 glew를 찾을 수 있는지 확인하십시오. 그렇지 않으면 프로젝트가 올바르게 빌드되지 않습니다.
CMake는 사용자 상호 작용 없이도 glew를 찾을 수 있어야 합니다. 그러나 찾지 못하는 경우:
-
해당 환경 변수를 설정합니다:
GLUT_ROOT_PATH예를 들어 D:\libs\freeglut-2.8.1\win32GLEW_ROOT_PATH예를 들어 D:\libs\glew-1.13.0\glew-1.13.0\Win32 -
CMake에서 여전히 GLEW를 찾지 못하는 경우, CMake 프로젝트 변수를 수동으로 설정하십시오.
GLEW_INCLUDE_DIR예를 들어 D:/libs/glew-1.13.0/glew-1.13.0/x64/includeGLEW_LIBRARY예를 들어 D:/libs/glew-1.13.0/glew-1.13.0/x64/lib/glew32.libOPENGL_gl_LIBRARY예를 들어 opengl32OPENGL_glu_LIBRARY예를 들어 glu32
-
-
examples\gpudirect\cuda 또는 examples\gpudirect\opengl을 소스 디렉토리로 사용하여 CMake로 프로젝트를 생성합니다.
- 예제를 실행합니다.
예제를 실행하는 동안 applet을 선택하라는 메시지가 표시됩니다. 예를 들어 marathon frame grabber의 경우 Acq_SingleCXP6X4AreaGray.dll과 같은 흑백 applet을 선택하십시오. 이름이 일부 잘려서 끝부분만 보입니다.
marathon Frame Grabbers용: 예제에 Grayscale Applet 사용
Basler NVIDIA GPUDirect for Video 지원은 컬러 포맷뿐만 아니라 그레이스케일 포맷에서도 작동합니다.
그러나 두 예제 모두 흑백 applet과 함께 사용하도록 설계되었으므로 예제를 사용할 때 흑백 applet(예: marathon frame grabber 전용 Acq_SingleCXP6X4AreaGray.dll)을 선택해야 합니다.
: