NVIDIA GPUDirect for Video#
이 기술을 사용하면 짧은 대기 시간으로 비디오 프레임을 NVIDIA GPU memory로 효율적으로 전송할 수 있습니다. 서브프레임 전송 시간으로 비디오를 GPU에 스트리밍할 수 있는 완전한 제어 권한을 제공합니다.
Windows OS를 사용하는 호스트 PC에서 Basler Framegrabber API를 통해 GPUDirect for Video 기술을 사용할 수 있습니다.
- OpenGL(Open Graphics Library) 또는
- CUDA(Compute Unified Device Architecture)는 NVIDIA의 병렬 프로그래밍 프레임워크입니다.
NVIDIA GPUDirect for Video는 NVIDIA GPU(graphics processing unit)를 사용하는 시스템에 적합합니다. 이 기술을 사용하면 짧은 대기 시간으로 비디오 프레임을 NVIDIA GPU memory로 효율적으로 전송할 수 있습니다. 서브프레임 전송 시간으로 비디오를 GPU에 스트리밍할 수 있는 완전한 제어 권한을 제공합니다.
자세한 내용은 제조사 사이트의 NVIDIA GPUDirect for Video technology 및 GPUDirect Technology Overview 섹션을 참조하십시오.
요구 사항#
Basler 프레임 그래버와 함께 GPUDirect for Video 기술을 사용하려면 시스템이 다음 요구 사항을 충족해야 합니다:
하드웨어#
지원되는 NVIDIA GPU 최신 목록은 여기에서 확인하십시오.
원하는 Basler 프레임 그래버.
소프트웨어#
- Basler Framegrabber SDK: 버전 5.10.0 이상
- 호스트 PC 운영 체제: Windows 10(64비트)
- Parallel Computing Platform/API (참조: 설치):
- CUDA(Compute Unified Device Architecture) 버전 11.6 또는
- OpenGL(Open Graphics Library)
- 권장 IDE: Visual Studio 15.x 이상
정보
GPUDirect for Video를 실행하려면 추가 DLL 및 헤더 파일이 필요할 수 있습니다. 자세한 내용은 Basler Technical Support에 문의하십시오.
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에 연결되어 있습니다. 프레임 그래버 연결 방법에 대한 자세한 내용은 Connecting the Frame Grabber를 참조하십시오.
- Framegrabber SDK: Basler Framegrabber SDK 5.10.0 이상이 설치되어 있습니다. 런타임 소프트웨어 설치 방법에 대한 자세한 내용은 Installing the Framegrabber SDK를 참조하십시오.
- Applet: 선택한 앱릿이 프레임 그래버에 플래시되었으며(marathon 프레임 그래버 전용) 활성 앱릿으로 선택되었습니다. marathon 프레임 그래버 플래시 방법에 대한 자세한 내용은 Flashing을 참조하십시오. 앱릿을 활성 앱릿으로 선택하는 방법에 대한 자세한 내용은 Changing the Active Applet을 참조하십시오.
- GPUDirect for Video 지원 파일: 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 | 없음 |
| 기능 | GDGetContextInfo |
|---|---|
| 설명 | 현재 컨텍스트에 대한 정보를 얻으려면 이 함수를 사용하십시오. |
| Parameters |
|
| 기능 | GDRevokeBuffer |
|---|---|
| 설명 | 어퀴지션 엔진에서 등록된 버퍼를 제거합니다. 이 함수는 이 버퍼와 연결된 내부적으로 할당된 모든 리소스를 해제합니다. 버퍼는 어떤 큐에도 대기 중이지 않은 경우에만 해제할 수 있습니다. |
| Parameters | [in] BUFFER_HANDLE:버퍼를 참조하는 핸들입니다. 버퍼 자체는 다음 함수를 통해 등록되었습니다. GDAllocateSourceBuffer, GDAnnounceCUDAArray, GDAnnounceTextureGL, 또는 GDAnnounceBufferGL. |
| 기능 | GDStartAcquisition |
|---|---|
| 설명 | 어퀴지션 엔진을 시작합니다. |
| Parameters | 없음 |
| 기능 | GDStartAcquisitionEx |
|---|---|
| 설명 | 어퀴지션 엔진을 시작합니다. |
| Parameters |
|
| 기능 | GDStopAcquisition |
|---|---|
| 설명 | 어퀴지션 엔진을 중지합니다. |
| Parameters | 없음 |
| 기능 | GDAllocateSourceBuffer |
|---|---|
| 설명 | 이 함수는 단일 소스 버퍼용 Memory를 할당하고, 이 버퍼를 어퀴지션 엔진에 등록한 후, 해당 단일 버퍼를 참조하는 버퍼 핸들을 반환합니다. |
| Parameters |
|
| 기능 | GDRegisterEvent |
|---|---|
| 설명 | 이벤트 객체를 특정 위치에 등록합니다. iEventID. |
| Parameters |
|
| 기능 | GDEventGetData |
|---|---|
| 설명 | 이벤트 핸들과 연결된 이벤트 데이터 큐에서 다음 이벤트 데이터 항목을 검색합니다. |
| Parameters |
|
| 기능 | GDMemcpy |
|---|---|
| 설명 | 프레임 그래버가 전송한 다음 프레임을 GPU로 복사합니다. 복사 프로세스를 트리거하려면 이 함수를 사용하십시오. 결과는 다음과 같이 전달됩니다. EVENT_NEW_BUFFER_DATA 유형. |
| Parameters |
|
| 기능 | GDBufferUnblock |
|---|---|
| 설명 | 이 함수는 복사 프로세스를 위해 버퍼의 차단을 해제합니다. 의 멤버로 수신한 각 버퍼는 EVENT_NEW_BUFFER_DATA 이 함수를 통해 차단을 해제해야 합니다(예: 새로운 복사 프로세스를 위한 버퍼를 확보하기 위해). 버퍼 차단을 해제하기 전에 버퍼 콘텐츠에 대한 작업이 완료되었는지 확인하십시오. |
| Parameters | [in] BUFFER_HANDLE phBuffer |
| 기능 | GDBufferGetDataPtr |
|---|---|
| 설명 | 이 함수는 버퍼의 Memory 위치 시작점에 대한 포인터를 반환합니다. 버퍼는 다음으로 생성되어야 합니다. 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 | 새로 채워진 버퍼에 대한 알림. 이벤트 데이터는 다음 위치에 저장됩니다. 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를 찾을 수 있어야 합니다. 그러나 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로 프로젝트를 생성합니다.
- 예제를 실행합니다.
예제를 실행하는 동안 앱릿을 선택하라는 메시지가 표시됩니다. marathon 프레임 그래버의 경우, 예를 들어 Acq_SingleCXP6X4AreaGray.dll과 같은 그레이스케일 앱릿을 선택하세요. 이름이 일부 잘려서 끝부분만 보일 수 있습니다.
marathon Frame Grabbers의 경우: 예제에 Grayscale Applet 사용
Basler NVIDIA GPUDirect for Video 지원은 흑백 포맷뿐만 아니라 컬러 포맷에서도 작동합니다.
하지만 두 예제 모두 그레이스케일 앱릿용으로 설계되었으므로, 예제 사용 시 (marathon 프레임 그래버 전용인) Acq_SingleCXP6X4AreaGray.dll 같은 그레이스케일 앱릿을 선택해야 합니다.
: