私は大きな配列でカーネルを実行しています。 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. WampSharpで接続開始時にコマンドを送信する方法
- 3. 長時間のバックグラウンドタスクを開始
- 4. ClickOnceのスタートメニューリンクからの開始時間
- 5. ページの送信時に非常に長い時間のページロード
- 6. フラグメントからの開始時間ピッカーフラグメント
- 7. ユニットテストWCFサービス(開始時間が長い場合)
- 8. Objective Cでのゲーム開始からの経過時間表示
- 9. タッチが開始されてからタッチが終了するまでの時間
- 10. SignalRが開始時にWebリクエストを送信しない
- 11. Webサービスコールで長時間実行ジョブを開始
- 12. レンダリング時間の変更JavaScriptで開始
- 13. 開始時間と所要時間を指定すると、分単位で開始されてからの表示時間が表示されます。
- 14. 開始/一時停止トグルボタンでタイマーが始まらない
- 15. Node.jsで現在のプロセスが開始されてからの時間の取得
- 16. 開始時間と終了時間の間の計算時間
- 17. bashスクリプトで長いコマンドを送信できないExpect
- 18. シェフクライアントの実行時間を開始するナイフSSHコマンド
- 19. Windows 7でOpenCLを開始する
- 20. Hadoopで長時間実行されているジョブの監視、送信方法
- 21. その時点でデバッグを開始するVBAコマンドがありますか?
- 22. SQL開始時間で注文する時間時間
- 23. HTTPWebRequestが長い時間返送されても、HTTPWebRespnseに時間がかかるのはなぜですか?
- 24. トポロジの開始時にチックタプルを送信する方法は?
- 25. 開始時間と終了時間を1つの開始時間と終了時間に分割する
- 26. 現在の時間から送信された時間を引いた
- 27. AWS:既に開始したインスタンスに開始コマンドを送信するとどうなりますか?
- 28. 開始日から終了日までの時間を計算する
- 29. 開始時間の前に許可されている時間
- 30. 外出時間から開始時間を差し引いた時間をCで計算するには
clEnqueueNDRangeコールの後にカーネルの結果が必要なものがありますか?たとえば、カーネルの後ろにclEnqueueMapBufferがブロックされていますか?そうでない場合、実装はカーネルの実行を遅らせることを決定しているかもしれない。 – boiler96
はい私は結果を読み取るために2つのclEnqueueReadBufferを持っていますが、非ブロッキング呼び出しで結果を読み取ることができません。また、clEnqueueMapBufferには私に間違った結果をもたらすいくつかの問題があるようです。とにかく非ブロッキングコールでデータを読み取ることは可能ですか? – Damoon