2
  1. 「CUDA C プログラミング ガイド」の CUDA の「データ転送とカーネル実行のオーバーラップ」セクションを読んだ後、質問があります。データ転送とは正確には何を指すのでしょうか? cudaMemsetAsynccudaMemcpyAsynccudaMemset、が含まれていますかcudaMemcpy。もちろん、memcpy に割り当てられたメモリは固定されます。

  2. 暗黙の同期 (ストリーム) セクションでは、本は「デバイス メモリ セット」がストリームをシリアル化する可​​能性があると述べています。cudaMemsetAsyncそれで、それはcudaMemcpyAsync、、、、cudaMemcpyを指しcudaMemcpyますか?私はわかりません。

4

1 に答える 1

2

最後にを持つ関数呼び出しにAsyncは、ストリーム パラメーターがあります。さらに、CUDA ツールキットによって提供される一部のライブラリには、ストリームを設定するオプションもあります。これを使用すると、複数のストリームを同時に実行できます。

つまり、特にストリームを作成して設定しない限り、デフォルトのストリームを使用することになります。たとえば、デフォルトdata transferkernel executionストリームはありません。2 つ (またはそれ以上) のストリームを作成し、選択したタスクを割り当てる必要があります。

一般的な使用例は、プログラミング ガイドに記載されているように 2 つのストリームを使用することです。これは、複数のカーネルを起動している場合にのみ役立つことに注意してください。現在のカーネルの結果を計算しながら、次の (独立した) カーネルまたは現在のカーネルの次の反復に必要なデータを取得できます。これにより、計算能力と帯域幅能力の両方を最大化できます。

あなたが言及した関数呼び出しについては、cudaMemcpyデータcudaMemcpyAsync転送を実行する唯一の関数です。cudaMemsetデータ転送とcudaMemsetAsyncは呼べないと思います。

cudaMempyAsyncとは両方ともcudaMemsetAsyncストリームで使用できますが、cudaMemsetcudaMemcpyはストリームを使用しない呼び出しをブロックしています。

于 2012-12-30T04:59:10.080 に答える