OpenCV453
公開型 | 公開メンバ関数 | 静的公開メンバ関数 | フレンド | 全メンバ一覧

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

#include <cuda.hpp>

公開型

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

公開メンバ関数

CV_WRAP Stream ()
 creates a new asynchronous stream
 
CV_WRAP Stream (const Ptr< GpuMat::Allocator > &allocator)
 creates a new asynchronous stream with custom allocator
 
CV_WRAP Stream (const size_t cudaFlags)
 creates a new Stream using the cudaFlags argument to determine the behaviors of the stream [詳解]
 
CV_WRAP bool queryIfComplete () const
 Returns true if the current stream queue is finished. Otherwise, it returns false.
 
CV_WRAP void waitForCompletion ()
 Blocks the current CPU thread until all operations in the stream are complete.
 
CV_WRAP void waitEvent (const Event &event)
 Makes a compute stream wait on an event.
 
void enqueueHostCallback (StreamCallback callback, void *userData)
 Adds a callback to be called on the host after all currently enqueued items in the stream have completed. [詳解]
 
 operator bool_type () const
 returns true if stream object is not default (!= 0)
 
CV_WRAP void * cudaPtr () const
 return Pointer to CUDA stream
 

静的公開メンバ関数

static CV_WRAP StreamNull ()
 return Stream object for default CUDA stream
 

フレンド

struct StreamAccessor
 
class BufferPool
 
class DefaultDeviceInitializer
 

詳解

This class encapsulates a queue of asynchronous calls.

覚え書き
Currently, you may face problems if an operation is enqueued twice with different data. Some functions use the constant GPU memory, and next call may update the memory before the previous one has been finished. But calling different operations asynchronously is safe because each operation has its own constant buffer. Memory copy/upload/download/set operations to the buffers you hold are also safe.
The Stream class is not thread-safe. Please use different Stream objects for different CPU threads.
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
覚え書き
By default all CUDA routines are launched in Stream::Null() object, if the stream is not specified by user. In multi-threading environment the stream objects must be passed explicitly (see previous note).

構築子と解体子

◆ Stream()

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

creates a new Stream using the cudaFlags argument to determine the behaviors of the stream

覚え書き
The cudaFlags parameter is passed to the underlying api cudaStreamCreateWithFlags() and supports the same parameter values.
// 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 
)

Adds a callback to be called on the host after all currently enqueued items in the stream have completed.

覚え書き
Callbacks must not make any CUDA API calls. Callbacks must not perform any synchronization that may depend on outstanding device work or other callbacks that are not mandated to run earlier. Callbacks without a mandated order (in independent streams) execute in undefined order and may be serialized.

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