Metal Best Practicesは、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。
本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。
他の記事の一覧は、初回記事よりご覧下さい。
Pipelines (パイプライン)
ベストプラクティス:レンダーパイプラインと計算パイプラインを非同期で構築します。
render pipelineやcompute pipelineの構築は非同期に処理すれば並列性が高まりパフォーマンスが向上するという話です。
Metal Best Practiceでは、遅延読み込みを回避するために使いましょうという書き方がされていました。つまり、パイプラインの構築はコストがかかるので遅延読み込みを使いたくなるけれど、それをするぐらいなら事前に非同期に構築しておけば、初期化の際に処理をブロックしないし、必要なときには用意されているので並列性が上がりますよ、ということですね。
結論
今回は適切なサンプルが思い浮かばなかったので、コードの検証はしませんでした。大量にパイプラインを作る必要がある場合は、非同期にパイプラインを構築する手法を使えばパフォーマンスが向上しそうですね。
最後に
今回でMetal Best Practiceの解説は終わりです。
これまで読んでくださった皆さま、ありがとうございました😄
iOSを使った3D処理やAR、ML、音声処理などの作品やサンプル、技術情報を発信しています。
作品ができたらTwitterで発信していきますのでフォローをお願いします🙏
Twitterは作品や記事のリンクを貼っています。
https://twitter.com/jugemjugemjugem
Qiitaは、iOS開発、とくにARや機械学習、グラフィックス処理、音声処理について発信しています。
https://qiita.com/TokyoYoshida
Noteでは、連載記事を書いています。
https://note.com/tokyoyoshida
Zennは機械学習が多めです。
https://zenn.dev/tokyoyoshida