1

個々のpthreadで実行したいCUDAカーネルがいくつかあります。

基本的に、各pthread、たとえば3つのcudaカーネルを実行する必要があり、それらは順番に実行する必要があります。

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

これをpthreadの別のコンテキストで機能させることができます。これにより、カーネルが通常どおり実行されますが、これには多くのオーバーヘッドがかかるようです。

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

ありがとう

4

1 に答える 1

2

CUDA 4.0 より前では、異なる CPU スレッドから特定のコンテキストにアクセスする方法は、cuCtxPopCurrent()/cuCtxPushCurrent()を使用することでした。コンテキストは、一度に 1 つの CPU スレッドに対してのみ最新であることができました。

CUDA 4.0 では、各 pthread でcudaSetDevice()を呼び出すことができ、一度に複数のスレッドに対して現在の状態にすることができます。

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

于 2011-07-30T10:14:16.123 に答える