問題タブ [spir-v]
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.
optimization - 生成された SPIR-V コードを最適化する必要がありますか?
私は現在、OpenGL/GLSL から Vulkan/SPIR-V にいくつかのコードを移植することを検討しています。そのコードの一部は実行時に GLSL を生成するため、代わりに SPIR-V を生成する必要があります。私が疑問に思っているのは、生成された SPIR-V の最適化にどのように関連付けるべきかということです。
特に、ドライバーのコンパイラーにどのような期待を持たなければならないかについての情報を実際に見つけることができません。独自に積極的な最適化を行い、SPIR-V コードをクリーンに保ち、コンパイラが参照できるようにできるだけ多くの「元の意図」を保持しようとする必要がありますか? それとも、かなり単純化したコード生成を行い、SPIR-V の生成時に可能な限り積極的な最適化を行うことを期待すべきでしょうか?
SPIR-V を生成するとき、特定の例として、これらの種類のどれを行う必要がありますか?
- ローカル変数の冗長なストア後ロードを排除しますか?
- ループのアンローリングまたはピーリング / 関数のインライン化?
- 一定の伝播/一般的な部分式の削除?
- ローカル変数へのロードとストアではなく、可能な限り SSA 形式を維持しますか?
私の非常に素朴な期待は、コンパイラがその最適化パスをハードウェアの詳細に適応させたいと考えているため、SPIR-V コードをクリーンでハイレベルに保つように努めるべきであり、ループ展開などによって情報が破壊され、ドライバーが独自の展開を決定しないようにしますが、実際の情報がなくても推測しているだけです。