本: https://techbookfest.org/organization/5465190594248704
丼 : @[email protected]
X: @fadis_
み2: @fadis
発表 : https://speakerdeck.com/fadis
動画 : https://www.youtube.com/@fadis_
芋: https://www.amazon.co.jp/hz/wishlist/ls/2H9VDVP96XBXV/
発表の大部分はSCX-LAVDを複数のCCXに沢山のCPUがぶら下がっている大規模なサーバで動かす際に生じたボトルネックとその対策についてで、そもそも何でそんなスケジューラを選んだのかについてはあまり触れられていないが、その答えが発表資料の補足スライドに書かれている
lpc.events/event/19/con...
発表の大部分はSCX-LAVDを複数のCCXに沢山のCPUがぶら下がっている大規模なサーバで動かす際に生じたボトルネックとその対策についてで、そもそも何でそんなスケジューラを選んだのかについてはあまり触れられていないが、その答えが発表資料の補足スライドに書かれている
lpc.events/event/19/con...
latency criticalityの高いタスクは期限が短くなり、結果他のタスクより優先してCPUが与えられ、実行までのレイテンシが小さくなる。タスクBは実際には既にタスクAにCPUが与えられるまでの時間分待機しているので、これによってバケツリレーのタスクが過剰に待たされる問題が緩和される
latency criticalityの高いタスクは期限が短くなり、結果他のタスクより優先してCPUが与えられ、実行までのレイテンシが小さくなる。タスクBは実際には既にタスクAにCPUが与えられるまでの時間分待機しているので、これによってバケツリレーのタスクが過剰に待たされる問題が緩和される
ゲームのタスクにおけるバケツリレーの待つ側、待たせる側は毎フレームほぼ変化せず、その実行時間も安定している
ゲームのタスクにおけるバケツリレーの待つ側、待たせる側は毎フレームほぼ変化せず、その実行時間も安定している
従って沢山のタスクがデータをバケツリレーしている場合、最初のタスクにデータが与えられてから最後のタスクから結果が出てくるまでの間にこのタスクのセットは何度もスケジューラでCPUを与えられるのを待つ事になる
従って沢山のタスクがデータをバケツリレーしている場合、最初のタスクにデータが与えられてから最後のタスクから結果が出てくるまでの間にこのタスクのセットは何度もスケジューラでCPUを与えられるのを待つ事になる
これは、沢山のタスクが他のタスクの出力を受け取って、それに対して何らかの軽い処理をして次のタスクに結果を渡すというバケツリレーをしている事、それが1フレームのレンダリングを行う度に繰り返し行われている事を示唆していた
これは、沢山のタスクが他のタスクの出力を受け取って、それに対して何らかの軽い処理をして次のタスクに結果を渡すというバケツリレーをしている事、それが1フレームのレンダリングを行う度に繰り返し行われている事を示唆していた
www.phoronix.com/news/LAVD-Sc...
このDomain specificなスケジューラを開発する為にIgaliaは多くのビデオゲームに共通するワークロードの傾向を調べた
www.phoronix.com/news/LAVD-Sc...
このDomain specificなスケジューラを開発する為にIgaliaは多くのビデオゲームに共通するワークロードの傾向を調べた
www.youtube.com/watch?v=H6tn...
www.youtube.com/watch?v=H6tn...
最後にほぼほぼそれっぽい状態になったヘアカードに対して、髪の毛が根本以外の部分で頭にめり込んでいるようなおかしな状態を修正する為にテクスチャの値とカードの位置、向き双方をパラメータとした微分可能レンダリングを行う
最後にほぼほぼそれっぽい状態になったヘアカードに対して、髪の毛が根本以外の部分で頭にめり込んでいるようなおかしな状態を修正する為にテクスチャの値とカードの位置、向き双方をパラメータとした微分可能レンダリングを行う
そこでこの手法ではテクスチャに書く値を直接最適化の対象にするのではなく、Strand Basedの髪の毛を一旦カードの表面に投影し、テクスチャに書く予定の深度等のパラメータに基づいて投影した髪の毛を変化させた結果をStrand Basedでレンダリングする。パラメータは髪の毛の頂点に持たせる
そこでこの手法ではテクスチャに書く値を直接最適化の対象にするのではなく、Strand Basedの髪の毛を一旦カードの表面に投影し、テクスチャに書く予定の深度等のパラメータに基づいて投影した髪の毛を変化させた結果をStrand Basedでレンダリングする。パラメータは髪の毛の頂点に持たせる
この過程は微分可能ではないが探索空間は小さいので力技で最適化を行う。ヘアカードの位置と向きが決まったらカードに貼り付けるテクスチャのパラメータを決める。これはStrand Basedのレンダリング結果とヘアカードのレンダリング結果が近くなるように微分可能レンダリングを使って求める
この過程は微分可能ではないが探索空間は小さいので力技で最適化を行う。ヘアカードの位置と向きが決まったらカードに貼り付けるテクスチャのパラメータを決める。これはStrand Basedのレンダリング結果とヘアカードのレンダリング結果が近くなるように微分可能レンダリングを使って求める
dl.acm.org/doi/10.1145/...
dl.acm.org/doi/10.1145/...
dl.acm.org/doi/10.1145/...
dl.acm.org/doi/10.1145/...
ヘアカードを使って描く髪がStrand Basedに近い見た目になるかどうかは、効果的な位置に効果的な向きでヘアカードを生やしているかにかかっていて、従来それは熟練の職人の手で行われていた。論文はこれを何とかして自動化しようぜ、という物
ヘアカードを使って描く髪がStrand Basedに近い見た目になるかどうかは、効果的な位置に効果的な向きでヘアカードを生やしているかにかかっていて、従来それは熟練の職人の手で行われていた。論文はこれを何とかして自動化しようぜ、という物
今日のハイエンドなGPUの性能をもってすればリアルタイムレンダリングでStrand Basedな髪の描き方はできないこともない、というくらいのコストになる。ただビデオゲームでは多くの場合沢山のキャラクターを描きたいのでこのようなGPUの性能の無駄遣いはあまり好まれない
今日のハイエンドなGPUの性能をもってすればリアルタイムレンダリングでStrand Basedな髪の描き方はできないこともない、というくらいのコストになる。ただビデオゲームでは多くの場合沢山のキャラクターを描きたいのでこのようなGPUの性能の無駄遣いはあまり好まれない
docs.vulkan.org/guide/latest...
VK_EXT_custom_resolveはこのRenderPassからVK_KHR_dynamic_rendering_local_readへの移行の動きに合わせて、Dynamic Renderingでも同様の指定を行えるようになっている
docs.vulkan.org/guide/latest...
VK_EXT_custom_resolveはこのRenderPassからVK_KHR_dynamic_rendering_local_readへの移行の動きに合わせて、Dynamic Renderingでも同様の指定を行えるようになっている
docs.vulkan.org/refpages/lat...
docs.vulkan.org/refpages/lat...
VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXTが付いたsubpassでは頂点シェーダはスクリーン全体を覆う四角以外のものを描いてはいけない、このsubpassはrenderpassの最後のsubpassでなければならないという制約が課せられる
VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXTが付いたsubpassでは頂点シェーダはスクリーン全体を覆う四角以外のものを描いてはいけない、このsubpassはrenderpassの最後のsubpassでなければならないという制約が課せられる