2012-09-06 9 views
8

私のCUDA開発では、16コアのマシンと16個のSMを持つGTX 580 GPUを使用しています。私が行っている作業のために、私は16のホストスレッド(各コアに1つ)と1つのスレッドごとに1つのカーネルを起動し、それぞれ1つのブロックと1024のスレッドを持つことを計画しています。私の目標は、16個のSM上で16個のカーネルを並行して実行することです。これは実現可能か実行可能なのか?個々のCUDAカーネルを起動する複数のホストスレッド

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

すべての16のホストスレッドのすべてのデータを1つの巨大な構造体に読み込み、それをGPUに渡して1つのカーネルを起動できます。ただし、コピーが大きすぎるとアプリケーションが遅くなります。

+0

複数のコンテキストで同時に1つのGPUを使用することはできません。したがって、これは機能しません。 – talonmies

+0

ありがとうございます。私はそれを受け入れることができるように答えとして上記を入れてくださいできますか? – gmemon

+0

@gmemon CUDA 5.5で複数のコンテキストを作成して実行するには、下記の私のコメントを参照してください。 16SMで16のカーネルを正常に実行しましたか?あなたの解決策は何でしたか? – Tariq

答えて

4

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

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

+0

私はCUDA 5.5を使用しています。 1つのGPUで複数のCUDAコンテキストを同時に実行することをサポートしていますか? – Tariq

+0

私はホスト上に2つの独立したスレッドを作成し、ドライバAPIを使用してCUDAコンテキストを作成しています。これらのコンテキストは、CUDA 5.5で同時に実行されます。 – Tariq

6

GPUには一度に1つのコンテキストしか設定できません。あなたが必要とする並列処理を実現する1つの方法は、CUDAストリームを使用することです。コンテキスト内に16ストリームを作成し、Memcopiesとカーネルを名前でストリームに起動することができます。ストリームの使用に関するウェブセミナーの詳細は、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にあります。

関連する問題