0

次のケースを考えます。

//thread 0 on device 0:
cudaMemcpyAsync(Dst0, Src0, ..., stream0);//stream0 is on Device 0;

...
//thread 1 on device 1:
cudaMemcpyAsync(Dst1, Src1, ..., stream1);//stream1 is on Device 1;

2 つの memcpy 操作を同時に実行して、ホスト デバイスの帯域幅を 2 ​​倍にすることはできますか (ホストのメモリ帯域幅が十分である限り)。答えが「はい」の場合、そのような同時実行の上限はありますか?

単一のコンピューティング ノードで多数 (6 ~ 8 個) の GPU 用のプログラムを作成する予定です。これは、パフォーマンスにとって非常に重要です。

4

1 に答える 1

3

cudaMemcpyPCIE リンクを介して、方向ごとに任意の時点で実際にデータを転送できる操作は1 つだけです。もちろん、他の操作をキューに入れることができますが、実際にリンクを使用できるのは 1 つだけです。

CUDA GPU には、DMA エンジンが 1 つあるものと 2 つあるものがあります。2 つあるものは、両方向に同時にデータを転送できます。これがデータ転送の同時実行の制限です: 方向ごとに 1 つです (デュアル コピー エンジンを想定)。

データ転送がそれほど小さくないと仮定すると、各転送の間、PCIE バスは (その方向で) 完全に利用されます。

于 2013-11-23T03:30:49.007 に答える