OpenCV 4.13.0
開源計算機視覺庫 (Open Source Computer Vision)
正在載入...
正在搜尋...
未找到匹配項
cv::cuda::Stream 類參考

此類封裝了一個非同步呼叫佇列。更多...

#include <opencv2/core/cuda.hpp>

cv::cuda::Stream 的協作圖

公開型別

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

公開成員函式

 流 (Stream) ()
 建立一個新的非同步流
 
 Stream (const Ptr< GpuMat::Allocator > &allocator)
 使用自定義分配器建立一個新的非同步流
 
 Stream (const size_t cudaFlags)
 建立一個新的Stream,使用 cudaFlags 引數來確定流的行為
 
void * cudaPtr () const
 返回 CUDA 流的指標
 
void enqueueHostCallback (StreamCallback callback, void *userData)
 新增一個回撥函式,該函式將在流中所有當前已入隊的項完成之後在主機上呼叫。
 
 operator bool_type () const
 如果流物件不是預設的 (!= 0),則返回 true
 
bool queryIfComplete () const
 如果當前流佇列已完成,則返回 true。否則,返回 false。
 
void waitEvent (const Event &event)
 使一個計算流等待一個事件。
 
void waitForCompletion ()
 阻止當前 CPU 執行緒,直到流中的所有操作都完成。
 

靜態公開成員函式

static StreamNull ()
 返回預設 CUDA 流的Stream物件
 

友元

class BufferPool
 
class DefaultDeviceInitializer
 
struct StreamAccessor
 

詳細說明

此類封裝了一個非同步呼叫佇列。

注意
當前,如果您將一個操作多次入隊不同的資料,可能會遇到問題。某些函式使用常量 GPU 記憶體,並且下一個呼叫可能會在前一個呼叫完成之前更新該記憶體。但是,非同步呼叫不同的操作是安全的,因為每個操作都有自己的常量緩衝區。對您持有的緩衝區的記憶體複製/上傳/下載/設定操作也是安全的。
Stream 類不是執行緒安全的。請為不同的 CPU 執行緒使用不同的Stream物件。
void thread1()
{
cv::cuda::func1(..., stream1);
}
void thread2()
{
cv::cuda::func2(..., stream2);
}
此類封裝了一個非同步呼叫佇列。
定義 cuda.hpp:917
注意
預設情況下,所有 CUDA 例程都在Stream::Null()物件中啟動,如果使用者未指定流。在多執行緒環境中,必須顯式傳遞流物件(請參閱前面的說明)。

成員型別定義說明

◆ StreamCallback

void(*) cv::cuda::Stream::StreamCallback(int status, void *userData)

建構函式與解構函式說明

◆ Stream() [1/3]

cv::cuda::Stream::Stream ( )
Python
cv.cuda.Stream() -> <cuda_Stream object>
cv.cuda.Stream(allocator) -> <cuda_Stream object>
cv.cuda.Stream(cudaFlags) -> <cuda_Stream object>

建立一個新的非同步流

◆ Stream() [2/3]

cv::cuda::Stream::Stream ( const Ptr< GpuMat::Allocator > & allocator)
Python
cv.cuda.Stream() -> <cuda_Stream object>
cv.cuda.Stream(allocator) -> <cuda_Stream object>
cv.cuda.Stream(cudaFlags) -> <cuda_Stream object>

使用自定義分配器建立一個新的非同步流

◆ Stream() [3/3]

cv::cuda::Stream::Stream ( const size_t cudaFlags)
Python
cv.cuda.Stream() -> <cuda_Stream object>
cv.cuda.Stream(allocator) -> <cuda_Stream object>
cv.cuda.Stream(cudaFlags) -> <cuda_Stream object>

建立一個新的Stream,使用 cudaFlags 引數來確定流的行為

注意
cudaFlags 引數將傳遞給底層 API cudaStreamCreateWithFlags(),並支援相同的引數值。
// 建立一個 OpenCV cuda::Stream,它管理一個非同步、非阻塞、
// 非預設的 CUDA 流
cv::cuda::Stream cvStream(cudaStreamNonBlocking);

成員函式說明

◆ cudaPtr()

void * cv::cuda::Stream::cudaPtr ( ) const
Python
cv.cuda.Stream.cudaPtr() -> retval

返回 CUDA 流的指標

◆ enqueueHostCallback()

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

新增一個回撥函式,該函式將在流中所有當前已入隊的項完成之後在主機上呼叫。

注意
回撥函式不得呼叫任何 CUDA API。回撥函式不得執行任何可能依賴於未完成的裝置工作或其他未被強制要求提前執行的回撥函式的同步操作。在獨立流中具有無強制順序的回撥函式將按未定義順序執行,並可能被序列化。

◆ Null()

static Stream & cv::cuda::Stream::Null ( )
static (靜態)
Python
cv.cuda.Stream.Null() -> retval
cv.cuda.Stream_Null() -> retval

返回預設 CUDA 流的Stream物件

◆ operator bool_type()

cv::cuda::Stream::operator bool_type ( ) const

如果流物件不是預設的 (!= 0),則返回 true

◆ queryIfComplete()

bool cv::cuda::Stream::queryIfComplete ( ) const
Python
cv.cuda.Stream.queryIfComplete() -> retval

如果當前流佇列已完成,則返回 true。否則,返回 false。

◆ waitEvent()

void cv::cuda::Stream::waitEvent ( const Event & 事件)
Python
cv.cuda.Stream.waitEvent(事件) -> None

使一個計算流等待一個事件。

◆ waitForCompletion()

void cv::cuda::Stream::waitForCompletion ( )
Python
cv.cuda.Stream.waitForCompletion() -> None

阻止當前 CPU 執行緒,直到流中的所有操作都完成。

友元及相關符號文件

◆ BufferPool

friend class BufferPool
友元

◆ DefaultDeviceInitializer

friend class DefaultDeviceInitializer
友元

◆ StreamAccessor

friend struct StreamAccessor
友元

該類的文件由以下檔案生成: