NVIDIA GPUDirect for Video#
このテクノロジーにより、ビデオフレームを低レイテンシでNVIDIA GPUメモリに効率的に転送できます。サブフレームの転送時間でビデオをGPUにストリーミングするための完全な制御が可能になります。
GPUDirect for Videoテクノロジーは、Windows OSを使用するホストPC上のBasler Framegrabber APIを通じて利用できます。
- OpenGL(Open Graphics Library)、または
- CUDA(NVIDIAによる並列プログラミングフレームワークであるCompute Unified Device Architecture)。
NVIDIA GPUDirect for Videoは、NVIDIAグラフィックス処理ユニット(GPU)を使用するシステム向けに調整されています。このテクノロジーにより、ビデオフレームを低レイテンシでNVIDIA GPUメモリに効率的に転送できます。サブフレームの転送時間でビデオを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(64bit)
- 並列コンピューティングプラットフォーム/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のインストールを参照してください。
- アップレット:お好みのアップレットがフレームグラバーにフラッシュされ(marathonフレームグラバーのみ)、アクティブアップレットとして選択されていること。marathonフレームグラバーのフラッシュ方法については、フラッシングを参照してください。アップレットをアクティブアップレットとして選択する方法については、アクティブアップレットの変更を参照してください。
- 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の機能を使用できます。
Function Reference#
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 |
|---|---|
| 説明 | グローバル初期化。初期化のために他のどの関数よりも先にこの関数を呼び出します。 |
| パラメーター |
|
| 機能 | GDCloseLib |
|---|---|
| 説明 | ライブラリのどの関数も不要になったら、この関数を呼び出して次のリソースを解放する必要があります。 GDInitLib 関数呼び出し。の各呼び出しには、 GCCloseLib 先行する呼び出しが伴う必要があります。 GDInitLib. |
| パラメーター | None |
| 機能 | GDGetContextInfo |
|---|---|
| 説明 | 現在のコンテキストに関する情報を取得するには、この関数を使用します。 |
| パラメーター |
|
| 機能 | GDRevokeBuffer |
|---|---|
| 説明 | 取得エンジンからアナウンス済みバッファを削除します。この関数は、このバッファに関連付けられている内部で割り当てられたすべてのリソースを解放します。バッファがどのキューにも登録されていない場合にのみ、取り消すことができます。 |
| パラメーター | [in] BUFFER_HANDLE:バッファを参照するためのハンドル。バッファ自体は次の関数を介してアナウンスされています。 GDAllocateSourceBuffer, GDAnnounceCUDAArray, GDAnnounceTextureGL、または GDAnnounceBufferGL. |
| 機能 | GDStartAcquisition |
|---|---|
| 説明 | 取得エンジンを開始します。 |
| パラメーター | None |
| 機能 | GDStartAcquisitionEx |
|---|---|
| 説明 | 取得エンジンを開始します。 |
| パラメーター |
|
| 機能 | GDStopAcquisition |
|---|---|
| 説明 | 取得エンジンを停止します。 |
| パラメーター | None |
| 機能 | GDAllocateSourceBuffer |
|---|---|
| 説明 | この関数は、単一のソースバッファ用のメモリを割り当て、このバッファを取得エンジンにアナウンスし、その単一のバッファを参照するバッファハンドルを返します。 |
| パラメーター |
|
| 機能 | 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 |
|---|---|
| 説明 | イベントにより、ソースバッファのコンテンツがターゲットバッファにコピーされました。 |
| パラメーター |
|
列挙#
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から提供されたサンプルフォルダーを利用できます。
- Visual Studio 15.x以降がPCにインストールされていること。
- CMakeがPCにインストールされていること。
- 対応するライブラリが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フレームグラバーの場合: サンプルにはグレースケールアプレットを使用する
Basler NVIDIA GPUDirect for Videoサポートは、カラーフォーマットおよびグレースケールフォーマットの両方で機能します。
ただし、両方のサンプルともグレースケールアプレットでの使用を想定して設計されているため、サンプルを使用する際は必ずグレースケールアプレット(marathon フレームグラバー用の Acq_SingleCXP6X4AreaGray.dll など)を選択してください。
: