物理演算処理ユニット(PPU )は、特にビデオゲームの物理エンジンにおいて、物理演算を処理するために設計された専用マイクロプロセッサです。これはハードウェアアクセラレーションの一例です。
PPUを用いた計算の例としては、剛体動力学、軟体動力学、衝突検出、流体動力学、毛髪や衣服のシミュレーション、有限要素解析、物体の破壊などが挙げられる。
このアイデアは、 GPUがメインCPUの代わりにグラフィックス処理を行うのと同様に、時間のかかるタスクを専用プロセッサにオフロードさせるというものです。この用語は、 Ageia社が自社のPhysXチップを説明するために考案しました。CPUとGPUを組み合わせた技術には、これと共通する特徴を持つものが他にもいくつかありますが、Ageia社の製品は、PPUとして設計、販売、サポート、そしてシステムへの搭載まで全てを完結させた唯一の製品でした。
初期の学術的なPPU研究プロジェクト[ 1 ] [ 2 ]であるSPARTA(Simulation of Physics on A Real-Time Architecture)は、ペンシルベニア州立大学[ 3 ]とジョージア大学で実施されました。これは、2次元に限定されたシンプルなFPGAベースのPPUでした。このプロジェクトは、HELLASと呼ばれる、かなり高度なASICベースのシステムに拡張されました。
2006年2月、 Ageia (後にNvidiaに統合)から初の専用PPU PhysXがリリースされました。このユニットは粒子システムの高速化に最も効果的で、剛体物理ではわずかなパフォーマンス向上しか測定されていません。[ 4 ] Ageia PPUは、米国特許出願番号20050075849に詳細に記載されています。[ 5 ] Nvidia/Ageiaはもはや物理処理用のPPUとハードウェアアクセラレーションを製造していませんが、一部のグラフィックス処理ユニットを通じてサポートされています。
PPUとして宣伝された最初のプロセッサは、 AGEIAというファブレス半導体企業によって発表されたPhysXチップでした。PhysX PPUを活用したいゲームは、AGEIAのPhysX SDK(以前はNovodeX SDKとして知られていました)を使用する必要があります。
これは、汎用RISCコアが、ローカルバンクメモリ内で動作するカスタムSIMD浮動小数点VLIWプロセッサのアレイを制御し、スイッチファブリックがそれらの間のデータ転送を管理する構成になっています。CPUやGPUのようなキャッシュ階層は存在しません。
PhysXは、ビデオカードの製造方法と同様に、3つの企業から入手可能でした。ASUS 、 BFG Technologies [ 6 ] 、およびELSA Technologiesが主な製造元でした。カードが既にインストールされたPCは、 Alienware、Dell、Falcon Northwestなどのシステムビルダーから入手可能でした。[ 7 ]
2008 年 2 月、Nvidia がAgeia Technologies を買収し、最終的に ATi/AMD GPU がアクティブなシステムで AGEIA PPU および NVIDIA GPU での PhysX の処理機能を遮断した後、PhysX は完全に Nvidia のものになったように見えました。しかし、2008 年 3 月、Nvidia は PhysX を誰でも利用できるオープン スタンダードにすると発表しました[ 8 ]。これにより、主要なグラフィック プロセッサメーカーは次世代グラフィック カードで PhysX のサポートを受けることになります。Nvidia は、新しいドライバをダウンロードするだけで、リリース済みのグラフィック カードの一部でも PhysX が利用可能になるとも発表しました。
学術研究PPUプロジェクトに関する議論については、物理学エンジンを参照してください。
ASUSとBFG Technologiesは、AGEIAのPPUであるPhysX P1(128MB GDDR3搭載)の別バージョンを製造するためのライセンスを取得した。
Havok SDKはPhysX SDKの主要な競合製品であり、 Half-Life 2、Halo 3、Dead Risingなどの主要タイトルを含む150以上のゲームで使用されています。[ 12 ]
PhysX PPUに対抗するため、 Havok FXと呼ばれるエディションでは、既存のカードを使用して特定の物理計算を高速化するために、 ATI(AMD CrossFire)とNVIDIA(SLI )のマルチGPUテクノロジーを活用する予定だった。[ 13 ]
Havokは物理シミュレーションをエフェクト物理とゲームプレイ物理に分割し、エフェクト物理は(可能であれば)Shader Model 3.0命令としてGPUにオフロードされ、ゲームプレイ物理は通常通りCPUで処理されます。この2つの重要な違いは、エフェクト物理はゲームプレイに影響を与えない(爆発による粉塵や小さな破片など)ということです。物理演算の大部分は依然としてソフトウェアで実行されます。このアプローチは、PhysXカードが搭載されている場合はすべての計算をPhysXカードに移動するPhysX SDKとは大きく異なります。
GPGPUへの取り組みにより、GPUはPPUとしての役割により適したものになりました。DX10では、整数データ型、統一シェーダーアーキテクチャ、ジオメトリシェーダーステージが追加され、より幅広いアルゴリズムの実装が可能になりました。最新のGPUは、インデックス付き空間上で実行され、グラフィックリソースを必要とせず、汎用データバッファのみを必要とするコンピュートシェーダーをサポートしています。NVIDIA CUDAは、スレッド間の通信と、スレッドに関連付けられたスクラッチパッドスタイルのワークスペースに関して、さらに高度な機能を提供します。
しかしながら、GPUはより多くのスレッドを基盤として構築されており、レイテンシが長く、処理速度が遅く、テクスチャやフレームバッファのデータパスを中心に設計され、分岐処理のパフォーマンスも劣っています。この点が、GPUをPPUやCellと区別する特徴であり、ゲーム世界のシミュレーションタスクを引き受けるには最適化が不十分であることを示しています。
Codeplay SieveコンパイラはPPUをサポートしており、AgeiaのphysXチップがGPGPUタイプのタスクに適していることを示唆している。しかし、Ageiaがこの市場に参入する可能性は低いようだ。
PhysXとは大きく異なるものの、PlayStation 2のVU0は、初期の限定的なPPU実装であると言えるかもしれない。逆に、PS2プログラマーにとってPPUとは、VU0を進化させた代替品であると説明することもできるだろう。その機能セットとシステム内での配置は、物理演算やAIを含むゲーム更新タスクの高速化を目的としており、CPUが他の処理を行っている間に、独自の命令ストリームでこれらの計算をオフロードできる。しかし、DSPであるため、ゲームエンジンで有用な処理を行うにはCPUへの依存度が高く、完全な物理APIを実装することはできないため、PPUとは分類できない。また、VU0は追加の頂点処理能力を提供できるが、これはユニット自体というよりは、システム内の経路の特性である。
この利用方法は、Havok FXやGPU物理演算と同様に、補助ユニットの汎用浮動小数点演算能力を利用して、グラフィックスまたは物理演算のいずれかの役割においてCPUを補完するものです。