Apple の「Scary Fast」イベント 中に、他のものとは異なる 1 つの機能が私の目を引きました。それは、ダイナミック キャッシングです。おそらくプレゼンテーションを見ていたほとんどの人と同じように、私も「メモリ割り当てによってどのようにパフォーマンスが向上するのでしょう?」という反応をしました。
Apple は 、新しい M3 チップのデビューの 基礎を、GPU のダイナミック キャッシュと呼ぶ「基礎」機能に基づいています。 Apple の簡略化された説明では、ダイナミック キャッシュが何を行うのか、ましてや M3 上の GPU のパフォーマンスをどのように向上させるのかは明確ではありません。
私は典型的な GPU アーキテクチャを深く掘り下げ、ダイナミック キャッシュとは正確には何なのかを知るためにいくつかの直接的な質問を送りました。 Apple がこれまでブランドに投入した機能のうち、間違いなく最も技術的に密度の高い機能が何であるかについて、私が最もよく理解しているのは次のとおりです。
動的キャッシュとは正確には何ですか?
ダイナミック キャッシュは、M3 チップが特定のタスクに必要な正確な量のメモリのみを使用できるようにする機能です。 Apple は公式プレスリリースで次のように説明しています。「ダイナミック キャッシュは、従来の GPU とは異なり、ハードウェアのローカル メモリの使用をリアルタイムで割り当てます。動的キャッシュを使用すると、各タスクに必要な正確な量のメモリのみが使用されます。これは業界初であり、開発者にとって透過的であり、新しい GPU アーキテクチャの基礎となります。 GPU の平均使用率が劇的に向上し、最も要求の厳しいプロ向けアプリやゲームのパフォーマンスが大幅に向上します。」
典型的な Apple のやり方では、結果に焦点を当てるために技術的側面の多くは意図的に隠されています。秘密のソースを漏らしたり、専門用語で聴衆を混乱させたりすることなく、要点を理解するのに十分な内容が記載されています。しかし、一般的なポイントは、ダイナミック キャッシュにより GPU がより効率的なメモリ割り当てを行えるようになるということのようです。十分シンプルですよね?まあ、メモリ割り当てがどのように「平均使用率を増加」させるか、あるいは「パフォーマンスを大幅に向上させる」かはまだ正確には明らかではありません。
ダイナミック キャッシュを理解しようとしても、一歩下がって GPU がどのように動作するかを調べる必要があります。 CPU とは異なり、GPU は大量のワークロードを並行して処理することに優れています。これらのワークロードはシェーダーと呼ばれ、GPU が実行するプログラムです。 GPU を効果的に利用するには、プログラムで 大量 のシェーダーを一度に実行する必要があります。利用可能なコアをできるだけ多く使い切りたいと考えています。
これは、 Nvidia が「テール」と呼ぶ 効果につながります。シェーダーの負荷が一度に実行され、その後、より多くのシェーダーがスレッド (より正確には GPU 上のスレッド ブロック) で実行されるために送信されるため、使用率が低下します。この効果は、GPU 使用率が底を打つ前に急上昇したため、Apple がダイナミック キャッシュについて説明したプレゼンテーションにも反映されました。
これは記憶にどのように影響するのでしょうか? GPU 上の関数はメモリから命令を読み取り、関数の出力をメモリに書き込みます。多くの関数は、実行中にメモリに複数回アクセスする必要があります。並列関数のレベルが低いため、 RAM とキャッシュによるメモリ レイテンシが非常に重要になる CPU とは異なり、GPU のメモリ レイテンシは隠すのが簡単です。これらは高度な並列プロセッサであるため、一部の関数がメモリ内を探索している場合、他の関数が実行される可能性があります。
すべてのシェーダーが簡単に実行できる場合にはこれで機能しますが、要求の厳しいワークロードでは非常に複雑なシェーダーが必要になります。これらのシェーダの実行がスケジュールされると、必要でない場合でも、実行に必要なメモリが割り当てられます。 GPU は、たとえそれらのリソースが無駄になるとしても、多くのリソースを 1 つの複雑なタスクに分割しています。ダイナミック キャッシュは、GPU で利用可能なリソースをより効果的に利用し、これらの複雑なタスクが必要なもの だけを確実 に実行できるようにする Apple の試みであるようです。
これにより、理論的には、より多くのタスクを一度に実行できるようになり、GPU で利用可能なすべてのリソースを消費する要求の厳しいタスクを少数で実行するのではなく、GPU の平均使用率が向上するはずです。 Apple の説明はまずメモリに焦点を当てており、あたかもメモリの割り当てだけでパフォーマンスが向上するかのように見えます。私の理解では、割り当てを効率的に行うことで、より多くのシェーダーを一度に実行できるようになり、使用率とパフォーマンスの向上につながるようです。
使用済みと割り当て済み
ダイナミック キャッシングの説明における私の試みを理解する上で重要な点の 1 つは、シェーダーがどのように分岐するかです。 GPU が実行するプログラムは常に静的であるとは限りません。それらはさまざまな条件に応じて変化する可能性があり、 レイ トレーシング に必要なシェーダのような大規模で複雑なシェーダでは特に当てはまります。これらの条件付きシェーダーは、考えられる最悪のシナリオに備えてリソースを割り当てる必要があります。これは、一部のリソースが無駄になる可能性があることを意味します。
Unity はドキュメントで動的分岐シェーダーについて次のように説明しています 。一方のブランチが他方のブランチよりはるかにコストが高い場合、これは GPU がレジスタ スペースを無駄にしていることを意味します。これにより、シェーダー プログラムの並行呼び出しが減り、パフォーマンスが低下する可能性があります。」
Apple はダイナミック キャッシュを使用してこのタイプの分岐をターゲットにしており、GPU がリソースを無駄にせずに必要なリソースのみを使用できるようにしているようです。この機能が他の場所に影響を与える可能性もありますが、GPU がタスクを実行しているときに動的キャッシュがどこでいつ開始されるかは明らかではありません。
まだまだブラックボックス
もちろん、これはすべて、GPU の従来の機能と Apple の公式発表を組み合わせた、私の理解にすぎないことに注意する必要があります。 Apple は最終的に、すべてがどのように機能するかについて詳細な情報を公開するかもしれませんが、最終的には、Apple が実際に GPU の使用率とパフォーマンスを改善できるかどうかに応じて、ダイナミック キャッシュの技術的な細部は問題ではありません。
結局のところ、ダイナミック キャッシュは、GPU のアーキテクチャの奥深くにある機能を表す市場用語です。 GPU を設計する人以外にそれを理解しようとすると、必然的に誤解や還元的な説明につながるでしょう。理論的には、Apple はブランディングを取り除き、アーキテクチャそのものに語らせることもできたはずです。
M3 の GPU でダイナミック キャッシュが何を実行できるのかをさらに詳しく知りたい場合は、考えられる説明が得られます。ただし、重要なのは最終製品がどのように動作するかであり、Apple の最初の M3 デバイスが一般に公開され、私たち全員がそれを知るまで長く待つ必要はありません。しかし、これまでに見たパフォーマンスの主張とデモに基づくと、確かに有望に見えます。

