GPU上のコマンドプロセッサとそれらがパフォーマンスに与える影響

A GPU は実際には非常に複雑なタイプのプロセッサであり、一貫した結果を出すために調整する必要があるいくつかの異なるタイプのユニットで構成される異種システムです。 この記事では、このタスクを担当するGPUの一部であるコマンドプロセッサについて説明します。

すべてのGPUには、私たちが話しているアーキテクチャやブランドに関係なく、すべてのGPUに共通する中心的な部分が常にあります。それは、コマンドプロセッサであり、数十の異なる動作を自動的に管理するユニットです。存在するユニット。 GPUで。

GPU上のコマンドプロセッサ

コマンドプロセッサとは何ですか?

GPUのコマンドプロセッサは、によって生成された画面リストの読み取りを担当するマイクロコントローラです。 CPU、そうすることで、DMAユニットがGPU自体で機能し、VRAMではなくメインにアクセスできるようになります。 RAM これが保存されているシステムの。 コマンドリスト。 RAMで画面リストを見つけた後、それをマイクロコントローラの内部メモリにコピーします。

コマンドのリストには、2Dまたは3Dで画像をレンダリングするためにGPUのさまざまなユニットが実行する必要のあるすべての命令が含まれていますが、DirectX 11がPCに到着してから、いわゆる計算シェーダーが到着しました。グラフィカルパイプラインに関連付けられておらず、GPUを使用してCPUの効率が低いアルゴリズムを解決できるシェーダープログラムです。

今日、GPUはビデオゲームの印象的なグラフィックスをレンダリングするために使用されるだけでなく、他の多くの用途があり、いくつかの異なる市場で使用されていますが、これらの市場へのグラフィックスカードの進化は、コマンドプロセッサの進化と並行して進んでいます。その可能性。

非同期コンピューティングとはどういう意味ですか?

ASYNCコンピュート

まず、グラフィックパイプラインの場合、特に画像の後処理と前処理で、計算シェーダーも使用されることを明確にする必要があります。 たとえば、遅延レンダリングで照明を計算するために使用されます。 このような場合、Compute Shaderの実行は残りのグラフィカルパイプラインの実行に依存するため、同期されていると言えますが、GPUを使用することでメリットがあり、レンダリングの一部ではないタスクがあります。シーンの、したがって、それらは非同期で動作します。

Procesadores コマンド ASYNC コンピューティング

それをよりよく視覚化できるようにするには、XNUMXつの異なる状況を確認するだけで済みます。

  • 最初はパンを作っていますが、小麦粉が足りないので、誰かに食べに行かないように頼んでいます。つまり、小麦粉が届くのを待っている間は何もできません。
  • XNUMX番目の状況は最初の状況から来ています。パンを作ることができないので、皿を洗うことにしました。 私たちがいつでもできること、それはそれとは何の関係もありません。

さまざまなGPUの設計者は、すべてのGPUで、実行中にバブルが発生し、これらのGPUの一部が短時間で何も実行しなかったことに気づきました。 そのため、数年前、彼らは非同期コンピューティングを実装し、DirectX12やVulkanなどのこれらを利用するAPIの開発に協力することを決定しました。

コマンドリストとは何ですか?

プロセサドレス コマンドス ティポス

現在、CPU自体が、単一コアまたは複数コアを介してさまざまなコマンドリストを作成し、それらを並列に作成する役割を果たしています。 ビデオゲームでは、通常、コアがグラフィックのリストを作成するために割り当てられます。これは、他のゲームよりもはるかに複雑で、通常、単一のメモリリングから発生します。 計算用のコマンドのリストははるかに単純であり、シェーダーユニットが特定の問題を解決して解決策を提供することを求めています。

計算用のコマンドのリストの場合、これらは通常、いくつかの異なるリストで構成されており、画面リストに関して同時に解決することができます。 これは、非同期であるため、機能するために相互に依存しないためです。これにより、完全に独立し、非アクティブのために無駄になるGPUの部分を利用できるようになります。

他のタイプのコマンドは、システムのRAMまたはVRAMへのアクセスに関連するコマンドであり、これらのコマンドはコンピューティングとグラフィックスの両方で実行されます。 グラフィックスの場合、メモリ操作はVRAMでのみ排他的に実行されますが、コンピューティングモードでは、GPUがCPUからの計算要求に応答する場合があるため、データはRAMとVRAMの両方でインポートまたはエクスポートできます。

グラフィックAPIとコマンドプロセッサ

DX11対DX12

元々、グラフィックリストと計算リストは一緒に管理されていましたが、これは完全に非効率的でした。 グラフィックスとコンピューティング用に別々のコマンドプロセッサを備え、相互に同期および非同期で動作する機能を備えたGPUが登場するまで、GPUはいくつかの異なるコマンドリストを並行して処理できませんでした。

コマンドリストはリングバッファとも呼ばれます。その理由は、各コマンドプロセッサにリスト内のXNUMXつ以上のメモリアドレスが割り当てられ、アクセス可能なメモリアドレスに到達すると、メモリが再び起動するためです。 もう一度ループします。 まるで円を描いて回っているようなものです。 そのため、英語ではリングバッファまたはリングバッファと呼んでいます。 そのため、上の図では小さなリングの形でそれらを表しています。

コマンドプロセッサの種類

AMD VRAM GPU

コマンドプロセッサにはさまざまな種類があり、それぞれに有用性があり、グラフィックカードが向けられている市場の種類によって異なります。コマンドプロセッサの種類は次のとおりです。

  • グラフィックのみ: 過去にはコマンドプロセッサがXNUMXつしかなく、グラフィック専用であったため、今日の時点では完全に使用されていません。
  • インテリジェントスケジューラを使用する場合: 特にコンピューティングのために、複数のコマンドリストを並行して管理する場合のXNUMXつは、さまざまなコマンドリストの実行を一般的に調整するのはシステム自体のCPUでなければならないということです。 インテリジェントスケジューラを備えたコマンドプロセッサは、CPUの介入なしに、コマンドリストをリアルタイムで並べ替えることができます。
  • 計算のみ: 科学的で高性能なコンピューティングで使用されるこれらのGPUは、グラフィックスコマンドプロセッサを備えていないか、アイドル状態であるため、グラフィックスを生成できません。 これは、AMDInstinct用のCDNAGPU、さまざまなNVIDIA Tesla、およびコンピューティング用のさまざまなグラフィックカードの場合です。
  • 仮想化: データセンター、特にクラウドコンピューティングで使用されます。 これらは、互いに独立したグラフィカルコマンドの複数のリストを同時に処理することを可能にします。 各リストは、異なるユーザーに対して異なるオペレーティングシステムをリモートで実行している仮想マシンに対応しています。

コマンドプロセッサとGPUの残りの部分との相互作用

Procesador de Comandos Unidad シェーダー

コマンドプロセッサはプログラムを処理しませんが、常に利用可能なさまざまなユニット間でタスクを分散する責任がある優れたオーガナイザーです。 グラフィックコマンドプロセッサについて言えば、GPUのシェーダーユニットだけでなく、固定機能ユニットにもアクセスできます。 一方、コンピューティングでは、シェーダーユニットにしかアクセスできず、コンピューティング用のコマンドプロセッサの操作方法が異なります。

異なるユニットはどのように相互に調整しますか? さて、各固定機能ユニットとシェーダーユニットには、XNUMXつの異なる方向でメッセージを送受信できる一種のメールボックスがあります。

  • データをエクスポートする場合、シェーダーユニットは、キャッシュの下位レベル、固定機能ユニット、別のシェーダーユニット、またはRAMまたはVRAMのタイプに割り当てられたRAMにエクスポートできます。
  • データのインポートに関しては、シェーダーユニットにデータを送信するのはコマンドプロセッサと送信ユニットです。 シェーダーユニットにはCPUのような命令をキャプチャする機能がないため、コマンドプロセッサは、各シェーダーユニットのデータキャッシュと命令キャッシュを実行する必要のあるタスクで埋めることがあります。

言うまでもなく、コマンドプロセッサが各ユニットに送信する命令とデータのリストには、計算が終了したらこのデータをどこにエクスポートするかを指示する最終コマンドがあります。 どのユニットが処理されるデータおよび/または命令のリストを受け取り、それらがどこに送信されるかは、コマンドプロセッサに任されています。コマンドプロセッサは、心配することなくタスクを実行します。