「CUDA C プログラミング ガイド」の CUDA の「データ転送とカーネル実行のオーバーラップ」セクションを読んだ後、質問があります。データ転送とは正確には何を指すのでしょうか?
cudaMemsetAsync、cudaMemcpyAsync、cudaMemset、が含まれていますかcudaMemcpy。もちろん、memcpy に割り当てられたメモリは固定されます。暗黙の同期 (ストリーム) セクションでは、本は「デバイス メモリ セット」がストリームをシリアル化する可能性があると述べています。
cudaMemsetAsyncそれで、それはcudaMemcpyAsync、、、、cudaMemcpyを指しcudaMemcpyますか?私はわかりません。
1 に答える
最後にを持つ関数呼び出しにAsyncは、ストリーム パラメーターがあります。さらに、CUDA ツールキットによって提供される一部のライブラリには、ストリームを設定するオプションもあります。これを使用すると、複数のストリームを同時に実行できます。
つまり、特にストリームを作成して設定しない限り、デフォルトのストリームを使用することになります。たとえば、デフォルトdata transferとkernel executionストリームはありません。2 つ (またはそれ以上) のストリームを作成し、選択したタスクを割り当てる必要があります。
一般的な使用例は、プログラミング ガイドに記載されているように 2 つのストリームを使用することです。これは、複数のカーネルを起動している場合にのみ役立つことに注意してください。現在のカーネルの結果を計算しながら、次の (独立した) カーネルまたは現在のカーネルの次の反復に必要なデータを取得できます。これにより、計算能力と帯域幅能力の両方を最大化できます。
あなたが言及した関数呼び出しについては、cudaMemcpyデータcudaMemcpyAsync転送を実行する唯一の関数です。cudaMemsetデータ転送とcudaMemsetAsyncは呼べないと思います。
cudaMempyAsyncとは両方ともcudaMemsetAsyncストリームで使用できますが、cudaMemsetとcudaMemcpyはストリームを使用しない呼び出しをブロックしています。