私は大きな配列でカーネルを実行しています。 clEnqueueNDRangeコマンドをプロファイルすると、実行時間(end-start)は.001 msですが、送信と開始(start-submit)の間の時間は入力データのサイズによって異なります。コマンドの実行が開始されるまで、コマンドが実行されるとどうなりますか。この大きな時間を得ることは合理的ですか?OpenCLでのコマンドの送信から開始までの時間が長い
0
A
答えて
0
OpenCLは非同期で動作します。つまり、作業を行うように求めるときは、その時点では発生しない可能性があります。それは将来のある時に起こります。これはちょっと変だけど、特にプロファイリングを始めるときにはそうですが、CPUがOpenGLデバイスのためにたくさんの作業をキューに入れることができるように動作します。例えば
:
ここclEnqueueWriteBuffer(blah);
clEnqueueNDRange(blah);
clEnqueueReadBuffer(blah, but blocking_read = CL_TRUE);
、ライトバッファおよびNDRangeは、おそらく時間の非常に少量を取るように見えます。彼らがすることは、何をする必要があるのかを記録することだけです。ブロックされたreadBufferは、読み込みの結果を待たなければならないため、長い時間がかかります。読み込みが完了する前に、読み込みが開始される前に、書き込みとカーネルの実行が完了している必要があります。
読み込みは非常に小さいかもしれませんが、読み込みが完了する前にすべてを待っているため、取り込まれるように見えるのはその前のコマンドの作業量に依存します。
私はあなたの質問からあなたが何を測定しているのかよく分かりませんが、あなたが見ているのはこの効果です。以前の仕事が終わるのを待たなければならないので、仕事のための時間は他の機能に課されています。
高性能コードの作成に関して、どの機能がCPUをGPUで待機させるかを知ることは、大きなトリックの1つです。このような待ち時間を導入すると、CPUは何らかの有用な作業をやめ、CPUが次の作業を準備している間にGPUがアイドルになる可能性が高くなります。時には、代替手段がなく、あなたはただ待たなければなりません。
関連する問題
- 1. ウィンドウレスコマンドラインプロセスへのコマンドの送信(C#アプリケーションから開始)
- 2. 長時間のバックグラウンドタスクを開始
- 3. ClickOnceのスタートメニューリンクからの開始時間
- 4. タッチが開始されてからタッチが終了するまでの時間
- 5. Objective Cでのゲーム開始からの経過時間表示
- 6. SignalRが開始時にWebリクエストを送信しない
- 7. Webサービスコールで長時間実行ジョブを開始
- 8. レンダリング時間の変更JavaScriptで開始
- 9. その時点でデバッグを開始するVBAコマンドがありますか?
- 10. HTTPWebRequestが長い時間返送されても、HTTPWebRespnseに時間がかかるのはなぜですか?
- 11. Windows 7でOpenCLを開始する
- 12. 開始時間の前に許可されている時間
- 13. バッチファイルから最初のコマンドが実行されている間に2番目のコマンドを開始する
- 14. iPhoneからAndroidへのコマンドの送信
- 15. 開始日から終了日までの時間を計算する
- 16. のOpenGL-OpenCLの相互運用転送時間
- 17. MVVMLightからコマンドを送信
- 18. 半時間で始まる間隔でMysqlの時間平均
- 19. 同じサーバー内のWCF Webサービスの通信時間が長い
- 20. ブロードキャスト受信者クラスからのPATICULAR SMS受信時のアクティビティの開始方法
- 21. アプリケーション開始からの経過時間を取得する
- 22. FullCalendar開始時間/終了時間を表示できますか?
- 23. Symfonyフォームの開始時間と終了時間のウィジェット
- 24. Web開発プロジェクトを開始する前にどのくらいの時間を費やすのですか?
- 25. 正確に時間の開始時にサービスを開始し、その後1時間ごとに繰り返す
- 26. 一定の開始時刻からの異なる時点での経過時間の計算
- 27. printkコマンドの実行時間はどれくらいですか?
- 28. 更新された静的ファイルの配信開始までにどれくらいの時間がかかりますか?
- 29. 送信時にフォームでthis.valのみを送信しますか?
- 30. 「電話で開く」をクリックすると、Android Wearからどのようなコマンドが送信されますか?
clEnqueueNDRangeコールの後にカーネルの結果が必要なものがありますか?たとえば、カーネルの後ろにclEnqueueMapBufferがブロックされていますか?そうでない場合、実装はカーネルの実行を遅らせることを決定しているかもしれない。 – boiler96
はい私は結果を読み取るために2つのclEnqueueReadBufferを持っていますが、非ブロッキング呼び出しで結果を読み取ることができません。また、clEnqueueMapBufferには私に間違った結果をもたらすいくつかの問題があるようです。とにかく非ブロッキングコールでデータを読み取ることは可能ですか? – Damoon