2012-02-08 3 views
0

CUDAを使用してマルチGPUアプリケーションをプログラミングすることに興味があります。複数のカードにまたがる1つのカーネルを使用したマルチGPUアプリケーションのプログラミング/

私が知る限り、複数のGPUを使って2つ以上のカーネルを同時に並列実行することができます。各カーネルのデータは、実行中のGPUに格納されています。

しかし、データとカーネルの操作を複数のカードにまたがるようにするにはどうすればよいでしょうか。どのようにこれを行うのですか?

CUDA SDKのsimpleMultiGPUの例は、基本的に複数のGPUで同じカーネルを起動するので、私が望むものではありません。私が関心を持っているGPU間通信はありません。

+1

同じカーネルで動作しているブロック間でイントラgpu通信をしていないこともあります。私は質問を得るのか分からない。あなたが望むものを明確にすることができるかもしれません。 –

+1

@Pavan、同じカーネル上のブロックは、(例えば、原子メモリ操作を介して)通信することができます。彼らはちょうど同期することはできません。 – harrism

+1

@harrism、悪いです。私は正直言って、並列プロセス間の通信を同期以外のものに使用したことはありません。 –

答えて

2

あなたはUnified Virtual Addressing(UVA)とP2P通信に興味があるようです。 http://developer.download.nvidia.com/CUDA/training/cuda_webinars_GPUDirect_uva.pdfにご相談ください。とにかく別のCUDAブロック間で通信するべきではありませんが、私が言及しているテクニックでは、少なくともデータを読み込んで複数のGPUにデータを書き込み、より柔軟な方法でデータにアクセスできるようにしてください。

+0

私が上でコメントしたように、ブロック間の通信はアトミックを使用しても問題ありません。イントラブロック_同期_はあなたが避けたいものです。 – harrism

+0

@harrism公正な批判:同期がない限り、通信は正常です。一般的に言えば、私はこの種のコミュニケーションがどのくらいの頻度で発生しているのか、興味があります。 – Patrick87

+1

アトミックスは最初の実装が遅かったですが、はるかに高速化されており、したがってはるかに有用です。したがって、たとえば、すべてのブロックを増やすことができるグローバルカウンタを維持することができます。もっと複雑な/現実的な例は、各ブロック全体に必要なプール割り当てサイズを決定するブロック単位のスキャンを実行することです(アロケーションの位置の順序は問題ではないため、グローバル順序付けされたスキャン原子がより効率的であるように、必要ではない)。それらはちょうど私の頭の上にあります。 – harrism

関連する問題