9

私のCUDA開発では、16コアのマシンと、16SMの1GTX580GPUを使用しています。私が行っている作業では、16個のホストスレッド(各コアに1個)を起動し、スレッドごとに1個のカーネルを起動します。それぞれに1つのブロックと1024個のスレッドがあります。私の目標は、16個のSMで16個のカーネルを並行して実行することです。これは可能/実行可能ですか?

私は独立した文脈について可能な限り読み込もうとしましたが、入手できる情報はあまり多くないようです。私が理解しているように、各ホストスレッドは独自のGPUコンテキストを持つことができます。しかし、独立したコンテキストを使用した場合、カーネルが並行して実行されるかどうかはわかりません。

16個のホストスレッドすべてからすべてのデータを1つの巨大な構造に読み取り、それをGPUに渡して1つのカーネルを起動できます。ただし、コピーが多すぎてアプリケーションの速度が低下します。

4

2 に答える 2

6

GPU で一度に使用できるコンテキストは 1 つだけです。必要な種類の並列処理を実現する 1 つの方法は、CUDA ストリームを使用することです。コンテキスト内に 16 個のストリームを作成し、memcopy とカーネルを名前でストリームに起動できます。ストリームの使用に関する簡単なウェビナー ( http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf ) で詳細を読むことができます。完全な API リファレンスは、CUDA ツールキットのマニュアルにあります。CUDA 4.2 マニュアルはhttp://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdfで入手できます。

于 2012-09-06T18:45:32.583 に答える
4

マルチスレッド アプリケーションは同じ GPU で複数の CUDA コンテキストを同時に保持できますが、これらのコンテキストは操作を同時に実行できません。アクティブな場合、各コンテキストは GPU のみを使用し、別のコンテキスト (レンダリング API またはディスプレイ マネージャーを使用した操作を含む可能性があります) が GPU にアクセスできるようになる前に譲らなければなりません。

つまり、この戦略は現在の CUDA バージョンやハードウェアでは機能しません。

于 2012-09-06T20:18:53.943 に答える