NVIDIA GPUDirect for Video#
此技術能夠以低延遲高效將視訊影格傳輸至 NVIDIA GPU 記憶體中。它可讓您完全掌控以子影格傳輸時間將視訊串流傳輸至 GPU。
GPUDirect for Video 技術透過執行 Windows 作業系統且位於主機 PC 上的 Basler Framegrabber API 提供,適用於
- OpenGL (Open Graphics Library),或
- CUDA (Compute Unified Device Architecture)(NVIDIA 推出的平行程式設計架構)。
NVIDIA GPUDirect for Video 專為使用 NVIDIA 圖形處理器 (GPU) 的系統而設計。此技術能夠以低延遲高效將視訊影格傳輸至 NVIDIA GPU 記憶體中。它可讓您完全掌控以子影格傳輸時間將視訊串流傳輸至 GPU。
如需詳細資料,請參閱製造商網站的 NVIDIA GPUDirect for Video technology 與 GPUDirect Technology Overview> 章節。
Requirements#
若要將 GPUDirect for Video 技術與 Basler 擷取卡搭配使用,您的系統必須符合下列要求:
硬體#
如需支援的 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 或更高版本
資訊
您可能需要額外的 DLL 和標頭檔才能執行 GPUDirect for Video。如需詳細資訊,請聯絡 Basler Technical Support。
GPUDirect for Video 技術支援已在 Windows 10 下經過測試,並且可保證在此 Windows 版本上運行。
安裝與設定#
先決條件#
- GPU 硬體:主機 PC 上已插上支援 GPUDirect for Video 技術的 NVIDIA GPU。
- 平行運算平台/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:您所選的 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。
將檔案複製到安裝目錄中所述的子資料夾後,即可透過 Framegrabber API 使用 GPUDirect for Video 的函數。
函式參考#
您可以透過 Framegrabber API 使用 CUDA 或 OpenGL 來控制 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 |
|---|---|
| 描述 | 全域初始化。在進行任何其他初始化函數呼叫之前,請先呼叫此函數。 |
| Parameters |
|
| 功能 | GDCloseLib |
|---|---|
| 描述 | 當不再需要該函式的任何功能時,您必須呼叫此函式以清除來自 GDInitLib 函式呼叫的資源。每一個 GCCloseLib 的呼叫都必須伴隨一個前置的 GDInitLib. |
| Parameters | 無 |
| 功能 | GDGetContextInfo |
|---|---|
| 描述 | 呼叫。 |
| Parameters |
|
| 功能 | GDRevokeBuffer |
|---|---|
| 描述 | 從擷取引擎移除已宣告的緩衝區。此函式將釋放與此緩衝區相關聯的所有內部配置資源。只有在緩衝區未排隊於任何佇列中時,才能撤銷該緩衝區。 |
| Parameters | [in] BUFFER_HANDLE:參照至緩衝區的 Handle。緩衝區本身已透過 GDAllocateSourceBuffer, GDAnnounceCUDAArray, GDAnnounceTextureGL,或 GDAnnounceBufferGL. |
| 功能 | GDStartAcquisition |
|---|---|
| 描述 | 函式進行宣告。 |
| Parameters | 無 |
| 功能 | GDStartAcquisitionEx |
|---|---|
| 描述 | 函式進行宣告。 |
| Parameters |
|
| 功能 | GDStopAcquisition |
|---|---|
| 描述 | 停止擷取引擎。 |
| Parameters | 無 |
| 功能 | GDAllocateSourceBuffer |
|---|---|
| 描述 | 此函數會為單一來源緩衝區配置記憶體,將此緩衝區宣告給擷取引擎,並傳回一個參照該單一緩衝區的緩衝區代碼 (handle)。 |
| 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 context 的名稱 |
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 的 buffer 的通知。事件資料儲存在 EVENT_NEW_BUFFER_DATA. |
GD_BUFFER_INFO_LIST | |
|---|---|
GD_BUFFER_TIMESTAMP | buffer 中上次變更的時間戳記 |
GD_BUFFER_TIMESTAMP_FREQUENCY | 時間戳記的頻率 |
GD_BUFFER_PICNUMBER | buffer 內容的索引 |
GD_BUFFER_DATA_PTR | 指向由 buffer 管理的原始資料的指標 |
範例#
先決條件#
- 您已備妥從 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
-
-
使用 CMake 建立專案,並將 examples\gpudirect\cuda 或 examples\gpudirect\opengl 設為來源目錄。
- 執行範例。
執行範例時,系統會要求您選取一個 applet。請選取一個灰階 applet,例如適用於 marathon frame grabber 的 Acq_SingleCXP6X4AreaGray.dll。名稱可能會被截斷,您只會看到結尾。
針對 marathon Frame Grabbers:在範例中使用灰階 Applet
Basler NVIDIA GPUDirect for Video 支援功能同時適用於 Color Format 與灰階格式。
不過,由於這兩個範例皆設計用於灰階 applet,因此請務必選取灰階 applet 來執行範例,例如 Acq_SingleCXP6X4AreaGray.dll(僅適用於 marathon frame grabbers)。
: