2011-07-29 11 views
1

私は個々のpthreadで実行したいいくつかのCUDAカーネルを持っています。作業者pthreadにcudaコンテキストを渡す

私は基本的に各pthreadに3つのcudaカーネルを実行させなければならず、それらは順番に実行されなければなりません。

私は、ストリームへの参照を各pthreadに渡そうと思っていたので、これらの3つのcudaカーネルはすべて同じストリームで順番に実行されます。

これは、pthreadとは別のコンテキストで動作することができます。これは普通のようにカーネルを実行しますが、オーバーヘッドがかかるようです。

他のpスレッドと同時に、同じコンテキストで各pthreadを動作させるにはどうすればよいですか?

おかげCUDA 4.0前

答えて

2

、異なるCPUのスレッドから指定されたコンテキストにアクセスする方法は、cuCtxPopCurrent()/ cuCtxPushCurrent()を使用することでした。コンテキストは、一度に1つのCPUスレッドに対してのみ現在の状態になります。

CUDA 4.0では、各pthreadにcudaSetDevice()を呼び出すことができ、同時に複数のスレッドにカレントにすることができます。

カーネルの呼び出しは、受信した順序でコンテキストによってシリアル化されますが、CPUスレッドの同期化を実行して、要求された順序で作業が実行されるようにする必要があります。

関連する問題