2017-02-03 14 views
2

CPUの世界では、メモリマップ経由で実行できます。 GPUでも同様のことができますか?は2つのGPU共有メモリを処理できますか? (CUDA)

2つのプロセスが同じCUDAコンテキストを共有できる場合は、GPUメモリポインタを周りに渡すだけで簡単だと思います。 2つのプロセス間で同じCUDAコンテキストを共有することは可能ですか?

もう1つの可能性は、デバイスメモリをメモリマップされたホストメモリにマップすることです。メモリマップされているので、2つのプロセス間で共有することができます。これは理にかなっていますか?それともオーバーヘッドはありますか?

+0

@RobertCrovella:これはおそらく誰もが提供できるほど良い答えでしょう。もしあなたがそれを追加したいのであれば、私はうれしくupvoteします。 – talonmies

答えて

2

CUDA MPSは、2つ以上のプロセスから発生するCUDAアクティビティがGPU上で同じコンテキストを共有することを効果的に許可します。しかし、これはあなたが求めているものを提供しません:

2つのプロセスが同じGPUメモリを共有できますか?

これを達成する1つの方法は、CUDA IPC(プロセス間通信)API経由です。

これにより、割り当てられたデバイスメモリ領域(つまり、cudaMallocによって割り当てられたメモリ領域)を複数のプロセス間で共有することができます。 This answerには、CUDA IPCについて学ぶための追加リソースが含まれています。

しかし私のテストによれば、複数のプロセス間でホスト固定メモリ領域(例えば、cudaHostAllocによって割り当てられた領域)を共有することはできません。メモリ領域自体は、あなたの特定のOSで利用可能な通常のIPCメカニズムを使用して共有することができますが、2つ以上のプロセスで "固定された"メモリとして表示することはできません。

+0

なぜcudaコンテキストの共有はデバイスメモリの共有を有効にしないのですか?それはcudaの文脈が同じでも、デバイスのメモリポインタの値はプロセスのBプロセスでは意味がないのでしょうか? –

+0

「私は、cudaコンテキストを共有してもデバイスメモリを共有できません」とは言いませんでした。私は言った* CUDA MPS *デバイスの共有メモリを有効にしません。あなたがcudaコンテキストを共有することがデバイスメモリを共有できるかどうかを知りたければ、より具体的にする必要があります。同じプロセス内の2つのスレッドの場合、同じコンテキストを共有できます。 CUDAは、同じコンテキストを共有する2つの別々のプロセスにAFAIKメソッドを提供していません。あなたが存在すると信じているならば、具体的にして、2つの別々のプロセスの間で同じcudaコンテキストを共有する方法を特定してください。 –

関連する問題