問題タブ [cuda-streams]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - Streams を使用した CUDA でのカーネル呼び出しの遅延
CUDA のスキャン アルゴリズムをゼロから作成し、それを 80,000 バイト未満の小さなデータ量に使用しようとしました。
2 つの別個のインスタンスが作成されました。1 つは可能な限りストリームを使用してカーネルを実行し、もう 1 つはデフォルト ストリームでのみ実行します。
私が観察したことは、この範囲のデータ サイズの場合、ストリームを使用して実行すると、他の方法と比較してタスクを完了するのに時間がかかることです。
nvprofiler を使用して分析すると、少量のデータ サイズの場合、ストリームで実行しても個別のカーネルに並列処理が提供されないことが観察されました。
しかし、データサイズが増加すると、ある種の並列処理が得られる可能性があります
私の問題は、このカーネル呼び出しの時間遅延を減らすための追加のパラメーターがあるか、またはストリームの使用が不利な小さなデータサイズでこの種の動作をするのが普通かということです
アップデート :
答えを明確にするために、ランタイム API 呼び出しのタイムラインも含めました。
concurrency - 複数の CUBLAS API (例: cublasDgemm) を複数の cudaStream で実際に同時に実行する方法
2 つの CUBLAS API (例: cublasDgemm) を 2 つの cudaStream で実際に同時に実行したいと考えています。
私たちが知っているように、CUBLAS API は非同期であり、cublasDgemm のようなレベル 3 ルーチンはホストをブロックしません。つまり、次のコード (デフォルトの cudaStream 内) が同時に実行されます。
しかし、「NVIDIA Visual Profiler」でプログラムをプロファイリングすると、それらが正常に実行されていることがわかります。
次に、それらを異なる cudaStreams にバインドさせようとします。疑似コードは次のとおりです。
batch_count=5 の場合、「NVIDIA Visual Profiler」で表示される結果は次のとおりです。
マルチストリームでのマルチ CublasDegmm ルーチンの実行結果
結果は、それらがまだ正常に実行されていることを示しています。次のように、複数の cublas api を複数の cudaStreams で実際に同時に実行する方法:
マルチストリームによるマルチカーネル実行結果、それらは実際に同時に実行されます
誰にもアイデアはありますか?ありがとう。