問題タブ [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 - 非同期cudaストリーム実行中のビジーウェイトを取り除きます
私は休眠中のコードでホストスレッドでビジーウェイトを取り除く方法を探しています(そのコードをコピーしないでください、それは私の問題のアイデアを示すだけで、多くの基本的なバグがあります):
}
ホストスレッドをアイドル状態にして、何らかのストリームが終了するのを待ってから、別のストリームを準備して実行する方法はありますか?
編集:ビジーウェイトを強調するために、コードにwhile(true)を追加しました。ここで、すべてのストリームを実行し、そのうちのどれが別の新しいストリームの実行を終了したかを確認します。cudaStreamSynchronize
特定のストリームが終了するのを待ちますが、最初にジョブを終了したストリームのいずれかを待ちたいです。
EDIT2:私は忙しいのをやめました-休眠の方法で待っています:
ただし、ホストスレッドでビジーウェイトを使用しているバージョンよりも少し遅いようです。これは、現在、ストリームにジョブを静的に分散しているためだと思います。そのため、1つのストリームが作業を終了すると、各ストリームが作業を終了するまでアイドル状態になります。以前のバージョンでは、作業が最初のアイドルストリームに動的に分散されたため、より効率的でしたが、ホストスレッドでビジーウェイトが発生していました。
cuda - CUDA 4.0 RC - 1 つの GPU あたり多数のホスト スレッド - cudaStreamQuery および cudaStreamSynchronize の動作
1 つの GPU で多くのホスト (OpenMP) スレッドを使用するコードを作成しました。各スレッドには、要求を順序付けるための独自の CUDA ストリームがあります。以下のコードに非常によく似ています。
そして、私が多くの小さな仕事を得るまで、すべてが良かった. その場合、cudaStreamQuery はときどき cudaErrorNotReady を返します。これは、私が cudaStreamSynchronize を使用しているため、予期しないことです。今までは、cudaStreamSynchronize の後に呼び出された場合、cudaStreamQuery は常に cudaSuccess を返すと考えていました。残念ながら、cudaStreamQuery がまだ cudaErrorNotReady を返している場合でも、cudaStreamSynchronize が終了する可能性があるようです。
コードを次のように変更すると、すべてが正しく機能します。
だから私の質問は....それはバグですか、それとも機能ですか?
編集:JAVAに似ています
cuda - CUDAストリームが重複していない
私はコードに非常に似たものを持っています:
'h_ptr_in'および'h_ptr_out'は、cudaMallocHost(フラグなし)で割り当てられたポインターの配列です。
問題は、ストリームがオーバーラップしないことです。ビジュアルプロファイラーでは、最初のストリームからのカーネル実行が2番目のストリームからのコピー(H2D)とオーバーラップしているのを確認できますが、他には何もオーバーラップしていません。
2つのカーネルを実行するためのリソースがないかもしれませんが(私はそう思います)、少なくともカーネルの実行とコピーは重複しているはずですよね?そして、3つすべて(H2Dのコピー、カーネルの実行、D2Hのコピー)を同じforループ内に配置すると、それらのいずれも重複しません...
助けてください、これを引き起こしている可能性がありますか?
私は実行しています:
Ubuntu 10.04 x64
デバイス:「GeForceGTX460」(CUDAドライバーバージョン:3.20、CUDAランタイムバージョン:3.20、CUDA機能メジャー/マイナーバージョン番号:2.1、同時コピーおよび実行:はい、同時カーネル実行:はい)
concurrency - CUDA 同期のレイテンシ / 遅延を減らす方法
この質問は、cuda ストリームを使用して多くのカーネルを実行することに関連しています
CUDA には、多くの同期コマンド cudaStreamSynchronize、CudaDeviceSynchronize、cudaThreadSynchronize、およびストリームが空かどうかを確認するための cudaStreamQuery があります。
プロファイラーを使用しているときに、これらの同期コマンドがプログラムに大きな遅延をもたらすことに気付きました。もちろん、できるだけ少ない同期コマンドを使用する以外に、このレイテンシを短縮する方法を誰かが知っているかどうか疑問に思っていました.
また、最も効率的な同期方法を判断する数値はありますか。つまり、アプリケーションで 3 つのストリームが使用されていると見なされ、2 つの cudaStreamSync または 1 つの cudaDeviceSync のみを使用して 4 番目のストリームを起動するには、そのうちの 2 つを完了する必要があります。
parallel-processing - Cuda さん、なぜ複数のストリーミング プロセッサを使用できないのですか?
Cuda で RNS モンゴメリべき乗を実装しました。
すべてがうまくいっている。1 つの SM で実行されます。
しかし、これまでのところ、単一の exp の並列化に焦点を当てています。私が今やりたいことは、いくつかの exp をその場でテストすることです。つまり、i 番目の次の exp が空いている SM に割り当てられるようにします。
私が試したところ、最後の時間は常に直線的に増加していました。つまり、すべての経験値が同じ SM に割り当てられていました。
その後、ストリームに切り替えましたが、何も変わりませんでした。
しかし、私はそれらを使用したことがないので、何か間違ったことをしているのかもしれません..
これはコードです:
Ubuntu 11.04 64b、Cuda 5 RC、560 Ti (8 SM)
cuda - GTX680は同時データ転送が可能ですか
GTX 680(GPUの最新バージョンの1つ)が同時データ転送(双方向の同時データ転送)が可能であると期待していました。しかし、cuda SDK「DeviceQuery」を実行すると、「同時コピーと実行」という用語のテスト結果は「1コピーエンジンではい」であり、GPUが同時データ転送を実行できないことを意味します。
私のテスト結果もあなたに起こるのだろうか?また、同時データ転送が可能なデバイスを教えていただけますか?
ありがとう!
cuda - 個々のCUDAカーネルを起動する複数のホストスレッド
私のCUDA開発では、16コアのマシンと、16SMの1GTX580GPUを使用しています。私が行っている作業では、16個のホストスレッド(各コアに1個)を起動し、スレッドごとに1個のカーネルを起動します。それぞれに1つのブロックと1024個のスレッドがあります。私の目標は、16個のSMで16個のカーネルを並行して実行することです。これは可能/実行可能ですか?
私は独立した文脈について可能な限り読み込もうとしましたが、入手できる情報はあまり多くないようです。私が理解しているように、各ホストスレッドは独自のGPUコンテキストを持つことができます。しかし、独立したコンテキストを使用した場合、カーネルが並行して実行されるかどうかはわかりません。
16個のホストスレッドすべてからすべてのデータを1つの巨大な構造に読み取り、それをGPUに渡して1つのカーネルを起動できます。ただし、コピーが多すぎてアプリケーションの速度が低下します。
cuda - Cudaストリームのデータの独立性
誰かが同時Cudaストリームのデータ独立性要件を説明できますか?次のカーネルを8つの同時ストリームで実行したいとします
すべてのストリームが同じ*readOnlyInputを読み取り、異なる*出力配列に書き込むことができますか?
または、同時実行性を実現するために、異なるメモリ位置からもデータを読み取る必要がありますか?
上記の擬似コードスニペットは同時に実行されますか、それとも同時実行性を確保するために* readOnlyInput + i * sizeが必要ですか?
cuda - 並行:ショートコピー、ロングカーネル
コピーとカーネルの同時操作を実行する
場合:dataCopy操作の2倍の長さのカーネルrunTimeがある場合、カーネルの実行ごとに2つのコピーを取得しますか?
私が見ているストリームの例は、1:1の関係を示しています。(コピー時間=カーネル実行時間)何か違うものがあるとどうなるのかしら。カーネルの起動ごとに常に1つのコピー操作(最大)がありますか?または、コピー操作はカーネルの起動とは無関係に実行されますか?つまり、実行時間とコピー時間がそのように機能すれば、カーネルの起動ごとに5つのコピー操作を完了することができます。
(カーネルを起動する前にキューに入れるコピー操作の数を把握しようとしています。)
1対1:(コピーする時間=カーネル実行時間)
<-stream1Copy-><-stream2Copy->
......................。 ....... <-stream1Kernel->
2対1:(コピーまでの時間=カーネル実行時間の1/2)
<-stream1Copy-> <-stream2Copy-> <-stream3Copy->
................... ......... <---------- stream1Kernel ------------>
performance - CUDA stream is slower than usual kernel
I am trying to understand CUDA streams and I have made my first program with streams, but It is slower than usual kernel function...
why is this code slower
than:
I thounght that it should run faster ... value of variable count is 6 500 000 (maximum) ... first source code takes 14 millisecconds and second source code takes 11 milliseconds.
Can anybody explain it to me, please?