OpenCV 4.5.3(日本語機械翻訳)
公開型 | 公開メンバ関数 | 静的公開メンバ関数 | フレンド | 全メンバ一覧

This class encapsulates a queue of asynchronous calls. [詳解]

#include <cuda.hpp>

公開型

typedef void(* StreamCallback) (int status, void *userData)

公開メンバ関数

CV_WRAP Stream ()
新しい非同期ストリームの作成
CV_WRAP Stream (const Ptr< GpuMat::Allocator > &allocator)
カスタムアロケータを持つ新しい非同期ストリームを作成します。
CV_WRAP Stream (const size_t cudaFlags)
新しい行列を作成します。Streamストリームの動作を決定するために cudaFlags 引数を使用します。[【詳解】(英語]
CV_WRAP bool queryIfComplete () const
現在のストリームキューが終了した場合はtrueを返します。それ以外の場合は false を返します。
CV_WRAP void waitForCompletion ()
ストリーム内のすべての操作が完了するまで、現在のCPUスレッドをブロックします。
CV_WRAP void waitEvent (const Event &event)
計算ストリームをイベントで待機させます。
void enqueueHostCallback (StreamCallback callback, void *userData)
ストリーム内で現在エンキューされているすべてのアイテムが完了した後に、ホスト上で呼び出されるコールバックを追加します。[【詳解】(英語]
operator bool_type () const
ストリームオブジェクトがデフォルトでない場合 (!=0) に真を返します。
CV_WRAP void * cudaPtr () const
return CUDA ストリームへのポインター

静的公開メンバ関数

static CV_WRAP Stream & Null ()
リターンStreamデフォルトのCUDAストリームのオブジェクト

フレンド

struct StreamAccessor
class BufferPool
class DefaultDeviceInitializer

詳解

このクラスは、非同期呼び出しのキューをカプセル化します。

覚え書き
現在のところ、1つの操作が異なるデータで2回キューに入れられると問題が発生する可能性があります。一部の関数は定数のGPUメモリを使用しており、前の呼び出しが終了する前に次の呼び出しがメモリを更新する可能性があります。しかし、異なる操作を非同期に呼び出すことは、各操作が独自の定数バッファを持っているので安全です。保持しているバッファへのメモリコピー/アップロード/ダウンロード/セット操作も安全です。
のクラスはスレッドセーフではありません。Streamクラスはスレッドセーフではありません。スレッドセーフではありません。Streamクラスはスレッドセーフではありませんので、異なるCPUスレッドには異なるオブジェクトを使用してください。
void thread1()
{
cv::cuda::func1(..., stream1);
}
void thread2()
{
cv::cuda::func2(..., stream2);
}
This class encapsulates a queue of asynchronous calls.
Definition: core/cuda.hpp:849
覚え書き
デフォルトでは、すべての CUDA ルーチンは以下のオブジェクトで起動されます。Stream::Null()ストリームがユーザによって指定されていない場合、デフォルトではすべての CUDA ルーチンは マルチスレッド環境では、ストリームオブジェクトは明示的に渡されなければなりません(前のメモを参照)。

構築子と解体子

Stream()

CV_WRAP cv::cuda::Stream::Stream ( const size_t cudaFlags )

新しい行列を作成します。Streamストリームの動作を決定するために cudaFlags 引数を使用します。

覚え書き
cudaFlagsパラメータは、基礎となるapi cudaStreamCreateWithFlags()に渡され、同じパラメータ値をサポートします。
// creates an OpenCV cuda::Stream that manages an asynchronous, non-blocking,
// non-default CUDA stream
cv::cuda::Stream cvStream(cudaStreamNonBlocking);

関数詳解

enqueueHostCallback()

void cv::cuda::Stream::enqueueHostCallback ( StreamCallback callback,
void * userData
)

ストリーム内で現在エンキューされているすべてのアイテムが完了した後に、ホスト上で呼び出されるコールバックを追加します。

覚え書き
コールバックは、CUDA APIの呼び出しを行ってはいけません。コールバックは、未処理のデバイスワークや、先に実行することが義務付けられていない他のコールバックに依存する可能性のある同期を実行してはなりません。義務化されていないコールバック(独立したストリーム)は未定義の順序で実行され、シリアル化される可能性があります。

このクラス詳解は次のファイルから抽出されました: