NVIDIA GPUDirect for Video#
該技術允許以低延遲將視訊影格有效率地傳輸到 NVIDIA GPU Memory 中。它讓你能完整控制以次影格傳輸時間將視訊串流至 GPU。
GPUDirect for Video 技術透過 Basler Framegrabber API 提供給使用 Windows 作業系統的主機 PC,並在
- OpenGL (Open Graphics Library),或
- CUDA (Compute Unified Device Architecture) 中運作,這是 NVIDIA 的平行程式設計框架。
NVIDIA GPUDirect for Video 專為使用 NVIDIA 圖形處理單元 (GPU) 的系統量身打造。該技術允許以低延遲將視訊影格有效率地傳輸到 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 或更高版本
- 主機電腦作業系統:Windows 10 (64-bit)
- 平行計算平台/API(請參閱 安裝):
- CUDA (Compute Unified Device Architecture) 11.6 版,或
- OpenGL (Open Graphics Library)
- 建議的 IDE:Visual Studio 15.x 或更高版本
資訊
您可能需要額外的 DLL 與標頭檔才能執行 GPUDirect for Video。如需詳細資訊,請聯絡 Basler 技術支援。
GPUDirect for Video 技術的支援已在 Windows 10 下進行過測試,且保證在此 Windows 版本上可用。
安裝#
先決條件#
- GPU 硬體:您的主機電腦已安裝支援 GPUDirect for Video 技術的 NVIDIA GPU。
- 平行運算平台/API:您的主機電腦已安裝以下其中一個套件:
- CUDA (Compute Unified Device Architecture),NVIDIA 推出的平行程式設計框架
- OpenGL (Open Graphics Library)
- 擷取卡硬體:您選擇的 Basler 擷取卡已連接至主機 PC。如需如何連接擷取卡的資訊,請參閱連接擷取卡。
- Framegrabber SDK:已安裝 Basler Framegrabber SDK 5.10.0 或更高版本。如需如何安裝執行階段軟體的資訊,請參閱安裝 Framegrabber SDK。
- Applet:您選擇的 Applet 已燒錄至您的擷取卡(僅適用於 marathon 擷取卡)並被選為作用中的 Applet。如需如何燒錄 marathon 擷取卡的資訊,請參閱燒錄。如需如何將 Applet 選為作用中 Applet 的資訊,請參閱變更作用中的 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 的功能。
函數參考#
您可以使用 CUDA 或 OpenGL 來透過 Framegrabber API 控制 GPUDirect for Video。
使用 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 子資料夾中。
可用功能#
透過 Framegrabber API 控制 GPUDirect for Video 技術的函式,在 CUDA 與 OpenGL 中是相同的。Framegrabber API 提供下列函式:
| 功能 | GDInitLib |
|---|---|
| 描述 | 全域初始化。在任何其他初始化函式之前呼叫此函式。 |
| 參數 |
|
| 功能 | GDCloseLib |
|---|---|
| 描述 | 當不再需要該程式庫的任何功能時,您必須呼叫此函式以清除來自 GDInitLib 函式呼叫。每次呼叫 GCCloseLib 的資源,且必須伴隨先前的呼叫 GDInitLib. |
| 參數 | 無 |
| 功能 | GDGetContextInfo |
|---|---|
| 描述 | 使用此函式來取得有關目前 Context 的資訊。 |
| 參數 |
|
| 功能 | GDRevokeBuffer |
|---|---|
| 描述 | 從擷取引擎中移除已宣告的 Buffer。此函式將釋放與此 Buffer 相關的所有內部配置資源。只有在 Buffer 未排入任何 Queue 中時,才能撤銷該 Buffer。 |
| 參數 | [in] BUFFER_HANDLE:指向該 Buffer 的 Handle。Buffer 本身已透過函式 GDAllocateSourceBuffer, GDAnnounceCUDAArray, GDAnnounceTextureGL或 GDAnnounceBufferGL. |
| 功能 | GDStartAcquisition |
|---|---|
| 描述 | 啟動擷取引擎。 |
| 參數 | 無 |
| 功能 | GDStartAcquisitionEx |
|---|---|
| 描述 | 啟動擷取引擎。 |
| 參數 |
|
| 功能 | GDStopAcquisition |
|---|---|
| 描述 | 停止擷取引擎。 |
| 參數 | 無 |
| 功能 | GDAllocateSourceBuffer |
|---|---|
| 描述 | 此函式會為單一來源 Buffer 配置 Memory、向擷取引擎宣告此 Buffer,並傳回參考該單一 Buffer 的 Buffer Handle。 |
| 參數 |
|
| 功能 | GDRegisterEvent |
|---|---|
| 描述 | 將事件物件註冊至特定的 iEventID. |
| 參數 |
|
| 功能 | GDEventGetData |
|---|---|
| 描述 | 從與事件控制代碼相關聯的事件資料佇列中擷取下一個事件資料項目。 |
| 參數 |
|
| 功能 | GDMemcpy |
|---|---|
| 描述 | 將畫面擷取卡傳送的下一幀畫面複製到 GPU 中。如果您想觸發複製程序,請使用此函數。結果會以 EVENT_NEW_BUFFER_DATA 類型。 |
| 參數 |
|
| 功能 | GDBufferUnblock |
|---|---|
| 描述 | 此函數會解除封鎖用於複製程序的緩衝區。您作為以下成員收到的每個緩衝區 EVENT_NEW_BUFFER_DATA 都需要透過此函數解除封鎖(例如,以便為新的複製程序準備緩衝區)。在解除封鎖緩衝區之前,請確保您對緩衝區內容的操作已完成。 |
| 參數 | [in] BUFFER_HANDLE phBuffer |
| 功能 | GDBufferGetDataPtr |
|---|---|
| 描述 | 此函數傳回指向緩衝區記憶體位置起始點的指標。該緩衝區必須已使用 GDAllocateSourceBuffer 函式搭配使用。 |
| 參數 |
|
| 功能 | GGDGetBufferInfo |
|---|---|
| 描述 | 使用此函數查詢與此緩衝區控制代碼相關聯的緩衝區模組的資訊。 |
| 參數 |
|
| 功能 | GDGetLastError |
|---|---|
| 描述 | 使用此函數查詢與發生的最後一個錯誤相關聯的訊息。 |
| 參數 |
|
| 功能 | GDAnnounceTextureGL |
|---|---|
| 描述 | 此函數將目標物件宣告為複製操作的目的地,並傳回參考該單一緩衝區的緩衝區控制代碼。 |
| 參數 |
|
| 功能 | GDAnnounceBufferGL |
|---|---|
| 描述 | 此函數將目標物件宣告為複製操作的目的地,並傳回參考該單一緩衝區的緩衝區控制代碼。 |
| 參數 |
|
| 功能 | GDAnnounceCUDAArray |
|---|---|
| 描述 | 此函數將目標物件宣告為複製操作的目的地,並傳回參考該單一緩衝區的緩衝區控制代碼。 |
| 參數 |
|
資料類型#
| STRUCT 名稱 | EVENT_NEW_BUFFER_DATA |
|---|---|
| 描述 | 事件已將來源緩衝區的內容複製到目標緩衝區中。 |
| 參數 |
|
Enumerations#
GD_CTX_LIST | |
|---|---|
GD_CTX_CUDA | CUDA context 名稱 |
GD_CTX_OPENGL | OpenGL context 的名稱 |
GD_CTX_D3D9 | 不支援 |
GD_CTX_D3D11 | 不支援 |
GD_CONTEXT_INFO_LIST | |
|---|---|
GD_CONTEXT_STRIDE_LENGTH | :Source: 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 範例,除了電腦上已安裝的程式庫之外,您只需要 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
-
-
使用 CMake 建立專案,並將 examples\gpudirect\cuda 或 examples\gpudregator\opengl 設為原始目錄。
- 執行範例。
執行範例時,系統會要求您選擇一個 Applet。請選擇灰階 Applet,例如針對 marathon frame grabber 的 Acq_SingleCXP6X4AreaGray.dll。名稱可能會被部分截斷,您只會看到結尾。
對於 marathon 採集卡:範例請使用灰階 Applet
Basler NVIDIA GPUDirect for Video 支援功能同時適用於 Color Format 與灰階格式。
不過,由於這兩個範例皆設計用於灰階 Applet,請務必選擇灰階 Applet 來執行範例,例如 Acq_SingleCXP6X4AreaGray.dll(僅適用於 marathon frame grabbers)。
: