9

複数のプロセス間で単一の GPU を共有したいアプリケーションがあります。つまり、これらの各プロセスは、同じ GPU を対象とする独自の CUDA または OpenCL コンテキストを作成します。Fermi のホワイト ペーパー [1] によると、アプリケーション レベルのコンテキスト切り替えは 25 マイクロ秒未満ですが、起動は GPU での起動時に効果的にシリアル化されるため、Fermi はこれにはうまく機能しません。Kepler のホワイト ペーパー [2] によると、複数の CUDA ストリーム、MPI プロセス、またはプロセス内のスレッドから最大 32 の同時接続を可能にする Hyper-Q と呼ばれるものがあります。

私の質問: 誰かがこれを Kepler GPU で試し、そのカーネルが個別のプロセスからスケジュールされたときに同時に実行されることを確認しましたか? これは単なる CUDA 機能ですか、それとも Nvidia GPU の OpenCL でも使用できますか? AMD の GPU は同様のものをサポートしていますか?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

4

2 に答える 2

7

最初の質問への回答として、NVIDIA はハイパー Q の結果をブログで公開しています。ブログは、CP2K を移植していた開発者がより迅速に高速化された結果を得ることができたと指摘しています。これは、hyper-Q により、アプリケーションの MPI 構造を多かれ少なかれそのまま使用し、単一の GPU で複数のランクを実行して、そうすることで、より効果的な GPU 使用率を高めることができます。コメントで述べたように、この (hyper-Q) 機能は、GK110 GPU に依存しているため、現在 K20 プロセッサでのみ使用できます。

于 2012-10-05T13:51:40.303 に答える
-1

私は Fermi アーキテクチャーからカーネルを同時に実行しましたが、これは素晴らしく機能し、実際、多くの場合、ハードウェアから高い占有率を得る唯一の方法です。私は OpenCL を使用しましたが、これを行うには、別の CPU スレッドから別のコマンド キューを実行する必要があります。Hyper-Q は、別のカーネル内から新しいデータ並列カーネルをディスパッチする機能です。これはケプラーのみです。

于 2013-05-29T08:24:18.877 に答える