右往左往しながらようやく本腰入れて検索しまくったりgeminiに聞いたりしながらようやく無駄な非同期タイミングのwait()を卒業することができました。
結果的に実装はそんなに大変ではなかったものの…効果は…微妙でした(笑)
利点としては、実行キューに溜まっている処理が一定以下に入るまでsleepさせて待つことができるのでCPU負荷が今まで100%となっていたところを40%とか20%とかまで低下させることができるところでしょうか。
正直なところ、無駄な同期待ちのためにGPUから見ると処理が途切れなくなることによって実行時間が短縮できたり、他のスレッドの影響で実行時間が変動するのを抑えられることを期待したのですが、目に見えるほど差はないようです。
それでも、幾分か実行時間のブレは減っているような気はします。
手持ちの環境のソースは数日前に不要そうなdcpt_inline指定を外したのですが、それが実は結構効果があった様で実行時間はちょっと伸び気味ですが、intel N150のflux2 klein 4B 512x512でこんな感じです。
| text encode | image | vae | total | |||
| taking | taking | taking | ||||
| 2.90s | 17.58s | 7.15s | 309.25s | 0.60s | 29.50s | 356.35s |
| 5.46s | 20.12s | 7.09s | 309.03s | 0.60s | 29.04s | 358.20s |
| 6.21s | 20.97s | 9.25s | 311.10s | 0.80s | 30.67s | 362.75s |
希望的なものではimageがもっと短くなるはずなんですけど、イマイチ時短に繋がっていません(涙
ただ、syclの実行自体はかなりいい感じで安定しているのでintel_gpu_topを見ていてとっても面白いのと、htopで見ていてCPUの使用率が下がって気持ち消費電力も下がったのがよかったかな…というかそこしか今のところ効果が出てないとも言う…orz
0 件のコメント:
コメントを投稿