XNA のパフォーマンスは思ったより厳しいものがあります。計測していないのですが、 ManagedDirectX より速度面では厳しいような気がしてなりません。最大の魅力である XBOX360 上の実行では更にパフォーマンスが厳しくなるようで、スレッドや GPU へのオフロードをきちんと考えないとちょっとした処理速度が確保できません。これは XBOX360 の CPU パワーを、最近の PC と比較すればどうしてもそうなりますが……
昨年9月の Microsoft Gamefest Japan 2007 の XNA セッションでは、 XNA の最適化に関する問題点と対策など興味深い TIPS が紹介されてました(米国資料は公開あり)。クラスの計算における手動インライン展開や、ループの展開で速度が上がるなど、 C の黎明期のような話が飛び出てきてかなり驚きもありました。まさに XC の世界です。(^^;;;
このイベントに関しては西川善司の3Dゲームファンのための「XNA Game Studio 2.0」講座に詳しいのですが、現在の JIT コンパイラの最適化はまだまだ未完成のようで、 Microsoft 側も改良を急いでいるという状況のようです。これは決して XNA 単体の問題ではありません。リアルタイム系における JIT の限界のようなものを感じました。
その記事にあるように、 Microsoft は XNA の将来像として、まずC# とインライン C/C++という開発スタイルを提案する段階に至りたいと考えているようです。もともとフルアセンブリで作られていたプログラムが、 C/C++ とインラインアセンブリの組み合わせという段階を経て、最終的にアセンブリがなくなって次の開発言語に移ったという経緯を引き合いに出していました。
ただ、最近のプログラムからアセンブリが消えた理由は、生産性の問題ではないと思います。 PLAYSTATION3 や XBOX360 アーキテクチャにおける CPU パイプラインの長さの関係で、アセンブリでの最適化が人間レベルでは限界になってしまったので、 C で書いてオプティマイザを弄らざるを得なくなってしまった……というのが実情だと思います。これを単純に、アセンブリが消えたのでCも消えるのだ、というふうに考えることはできないでしょう。
現状は、分岐に弱く(弱いどころかペナルティ付き)、 virtual ひとつとっても慎重にならざるをえない状況下では、多態性の活用も結構制限がかかります。ある種、 C++ すら持て余しているような状況な訳で、 C/C++ から次のステップというのは何らかのハードウェア側の技術革新がなければ恐らく進まないでしょう。
C# によるリテール版開発は、 Microsoft 自身が XNA 環境では XBOX360 コンテンツに課す要求クオリティレベルをクリアできないだろうと発言しています。時代はまだまだ、そういう段階というのが実情か……
sunday-labの日本語訳版です。英語版のXOOPS Cube関連記事を翻訳作業中...
0 件のコメント:
コメントを投稿