Welcome to my blog

    かっちゃん(KATH-TOR)のモノローグ

    KATH-TOR's ONLINE

    29
    2011  22:44:09

    なんでプリウスこんなに重いん?

    プリウスって、画面綺麗なんだけど、同じくらい綺麗な他ゲームにくらべても、重いし落ちやすいですね。

    なんでこんなに重いんだろう、という原因を分析して、対処方法の指針となればいいな、という記事です。

    プリウスフォルダのファイルを見てみる
    プリウスのインストールフォルダの中にあるファイルのうち、気になる部分をぴーくあっぷ!

    vcomp.dll
    VisualC++用のマルチスレッドライブラリ。
    コレがあると言うことは、プリウスオンラインがマルチスレッド向けに作られてる証拠。
    マルチスレッド向けCPU(2コア以上、あるいはハイパースレッディング対応など)で、物理コア数やスレッド本数次第で性能が上がると言うこと。

    ただし、並列処理は、キチンとしたお作法にしたがってないと、割とメモリリークやバグを引き起こしやすいです。
    そのあたり、プリウスはぁゃιぃ

    Licenses.txt
    プリウスのプログラムが利用してる、オープンソースライブラリのライセンス文書がまとめて書かれてます。
    ・OGG:プリウスの音源がOGG形式の音声ファイルであることを意味する
    ・Free Type 2:フォント関係ライブラリ。フォントの表示、アンチエイリアス、拡大など。
    ・Lua:スクリプト言語。主にゲーム用汎用エンジンなどで利用されることが多い。Luaでプログラムされたことを意味する。
    ZLib:flate形式圧縮ライブラリ。GZipなどが代表的。ゲームアーカイブがこの形式で圧縮されてることを意味する。

    prius.datとprius.idx
    ZLibを用いてることが分かれば、この2つのファイルの意味が分かります。
    prius.datのほうが、実際のファイル群をまとめて圧縮したアーカイブファイルで、idxが、dat内部の個々のファイルのインデックス情報を持っています。

    つまり、flate形式でランダムアクセスさせてるわけです。
    これは、ある意味、ゲーム独自にファイルシステムを用意したと同じ意味です。
    (1)OS側のファイルキャッシュは利用不可。
    (2)1つのファイルをランダムにシークするので、インストールドライブのランダムリード性能に依存。
    (3)ランダムリードしたチャンク(データの断片)をdeflate(解凍)していくので、読み込みごとにデコード処理が発生する。CPUの処理能力を要求する。

    この時点で、プリウスが、CPUのマルチスレッド性能、インストールドライブのランダムリード性能の両方を求めているわけです。
    ZLibは、マルチスレッド使用時には多少制約があったと思うので、その当たりちゃんと対応しているか不安が…

    ただ、Zlibの性能の指標としては、次の記事が参考になります。
    http://www.4gamer.net/games/098/G009883/20110102001/
    記事中段あたりの、AIDA64テストの項で、Zlibのスコアが紹介されています。
    整数演算系のテストと同様とのことで、Core i7 2600K HTTオンのモノがトップで、i7 875K@3.46GHz HTTオンを上回っています。
    コアの整数演算能力とマルチスレッド性能が、プリウスでも効いてくると思われます。

    ○ディスクのランダムリード性能について
    ディスクのランダムリード性能を上げるには、最低限、SATA2でありNCQが使える必要があります。
    つまり、AHCIで利用しないと効果出ません。

    さらに、Zlibでランダムアクセスすることから、prius.datが断片化してると、てきめんに遅くなるはずです。
    そして、個別ファイルで存在しないため、OSのファイルキャッシュは利用不可能。となると、ディスクドライブ側キャッシュが大きい方が効果出ます。

    一番良いのは、SATA3(6Gbps)のSSDで、ディスクキャッシュが多く、ランダムリード性能が高いもの。
    Crusial系が一番良いかと思います。時点でインテルX25-Mか510シリーズ。
    ただ、SandForce系コントローラのSSDは、コントローラ側で圧縮かけようとするので、既に圧縮状態にあるprius.datの構成を考えると、色々処理に無駄があって、パフォーマンスに影響しそうな気がします。
    (とはいえ、HDDと比べたら、全然SSDのほうが良いと思いますが。)

    HDDでRAID0というのは、シーケンシャルリードは上昇しますが、ランダムリードは微々たるものです。チャンクサイズ設定次第では、返って遅くなるかも知れません。プリウスに限っては。



    ビデオ設定について
    ビデオカードは、高性能なものほどリニアに性能出ると思います。
    予算ゆるせば高性能ビデオカードが良いでしょう。

    ただし、個人的に気になる点がありました。
    ゲームオプションのビデオ設定で、「シェーダー」の項目。
    最高にすると、ピクセルシェーディングでマルチ光源処理(環境光の反射など)とサーフェース処理が行われます。
    これを最高にすると、光源がスキルの発光(敵含む)、さらには敵ダメージ時のエフェクトなどの光が、すべて光源として扱われて反射処理が実行されます。
    範囲狩りなどしてると、極端にパフォーマンスに影響します。

    で、うちの場合、ビデオカードを色々比較したところ、高性能ビデオカードにしても、シェーダーの性能に余り変化が見られない気がしました。
    うちは最近のRadeonしか使ってないので分かりませんが、プリウスのプログラムが2008年8月ごろ作成されたことを考えると、
    ○シェーダープログラムが、当時主流のNVIDIA Geforce8800系に最適化されている
    ○Radeon HD4850発売は2008年6月なので、微妙に間に合ってない。
    ということで、Geforceの方が向いてるのかなぁ?とか思ったり。

    ただ、うちで利用しているHD4850、HD5850やHD6950はDX9のピクセルシェーダ得意なはずなので、ひょっとするとCPUシェーダー利用なのかも。



    結局、どーすりゃいいの?
    CPUもビデオカードも良いのを買え!じゃ、あんまりですね。
    個人的優先事項を。

    (1)CPUを4スレッド以上同時に処理出来るCPU.出来ればインテル系で。(整数演算強い)
    (2)ディスクコントローラをSATA2以上、AHCIで利用。
    (3)ディスクキャッシュの多いHDD、大プラッタサイズのもの。最近の2TBのHDDなど。
    (4)ランダムリードの優秀なSSD。Crusialオススメ。
    (5)ビデオカード。解像度1920x1080なら各社ハイエンド系のものを。それ以下なら1600x900や1440x900などの20インチ、19インチサイズあたりが無難。
    (6)メモリ4GB未満なら32bit版Windows7、4GB以上なら64bit版Windows7を利用。

    個人的には、Windows7とAHCIの相性の良さがあるので、SSD利用ならWindows7と同時が良いと思います。

    あくまで個人的見解なので、異論あっても当然だと思います。
    最近PCパーツ買ってないので、特にインテル系CPUとNVIDIAビデオカードについては、ネットで情報収集した程度の知識しかありません。
    実体験したいんですが、お金が-!
    スポンサーサイト

     PRIUS ONLINE プリウス資料

    良い記事だね!って思えたら、クリックお願いしますm(_ _)m

    0 Comments

    Leave a comment