【Xbox360】 XNA Game Studio その3 【C#】at GAMEDEV
【Xbox360】 XNA Game Studio その3 【C#】 - 暇つぶし2ch557:499 ◆gJulfOQblk
07/09/09 06:55:36 0UB6SgLv
・ XNA - パフォーマンス (X3)
 ・ XNA の動作する構造
  ・ Xbox シリーズのプログラムはカーネルモードで動く (360 にはその上にハイパバイザがあり、署名されていないコードは動かないようになっている。)
  ・ ただし、それを XNA にも適用すると動けないので、本来使われていない ユーザモード (JITおよびユーティリティコード) を使うことで非署名コードが動くように。
  ・ つまり、カーネルモードへの呼び出し (本来必要がない) が入るため、原理的には少し遅くなる。 (1システムコール == 約4us)
 ・ というわけで、必要な最適化のひとつは、システムコールの回数の削減。
  ・ Graphics コールは可能な限りバッチ化される
  ・ バッチできない API については若干数が多いので省略 (オリジナルの Gamefest の動画を参照w)
 ・ Effect.Clone をしてパラメータを変更しないようにすると速い (SetValue や Apply は BasicEffect の場合 20ms ほど時間がかかる)
 ・ SaveStateMode.SaveState を使わない (StateBlock の呼び出しに 34.5ms もかかるという…)
 ・ 数学演算は可能な限り参照にし、(Vector3 の madd で 1.6倍程度の差)もっと可能な場合はインラインにする (通常演算子の3.8倍)
  ・ 現在 SIMD をサポートしていない上、Vector3 の演算メソッド/演算子は、.NET の仕様でインライン化される条件を満たしていない (>>499注釈)
  ・ まぁ下手に SIMD にするのはマズい。(SSE と違ってパイプラインがものすごく深いため、機械的に置換すると遅すぎる)
 ・ Thread は、複数のコアへの分配をサポートしない (明示的に指定されない場合、コア0のスレッド1で開始される)
 ・ ThreadPool は、最適化されていない (ため、遅い?)
 ・ フレームワークとスレッドセーフ
  ・ オーディオとネットワーク(2.0以降) はスレッドセーフ
  ・ GraphicsDevice は、少しだけスレッドセーフ
   ・ リソースの作成と SetData (もちろん今現在使われていないモノだけね。) は非同期で行える
  ・ ContentManager はスレッドセーフではない
  ・ 入力は「スレッド化できない」 (メインスレッド上で読み取ること)
 ・ Windows でチューニングしろって言ってたけど…>>499個人的にはどれだけ効果があるか微妙

# 2048文字に収めるのが大変w


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch