2011-07-29 56 views
1

我有一些CUDA內核我想在單獨的pthreads中運行。將cuda上下文傳遞給worker pthreads

我基本上必須讓每個pthread執行,例如3個cuda內核,並且它們必須按順序執行。

我想我會嘗試傳遞每個pthread對流的引用,因此這3個cuda內核中的每一個都將在相同的流中按順序執行。

我可以使用pthread的不同上下文來工作,然後它會像平常一樣執行內核,但這似乎需要很多開銷。

那麼如何讓每個pthread在同一個環境中工作,與其他pthreads同時工作呢?

感謝

回答

2

CUDA 4.0之前,順便去訪問不同的CPU線程特定情況下是使用cuCtxPopCurrent()/ cuCtxPushCurrent()。上下文一次只能對一個CPU線程通用。

在CUDA 4.0中,您可以在每個pthread中調用cudaSetDevice(),並且它一次可以是多個線程。

內核調用將按接收的順序由上下文序列化,但您可能必須執行CPU線程同步以確保工作按所需順序提交。