「2014/01/10-02」の編集履歴(バックアップ)一覧はこちら
「2014/01/10-02」(2014/01/10 (金) 22:32:19) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
**ロード時間あれこれ (5)
このお題、元々は下記のお問い合わせ回答をそのまま記載する予定だったのですが、
色々と調べているうちに話が広がってしまったので分割してあれこれ記載致します。
----
[[前回>>http://www45.atwiki.jp/goodgames/pages/1138.html]]はHDDをSSDに変更してマップロード時間がどの程度短縮されるかを探りました。
初回ロード時は大幅な時間短縮が実現したものの、
同一マップが続くようなケースではHDDとSSDの差が大幅に縮小しました。
これはOSの機能であるディスクキャッシュの効果により、
ストレージからのデータ読み込み量が減ったことが原因と考えて間違い無いでしょう。
----
SSDへの変更により既に充分高速化されていますが、
さらにロード時間を短縮するために試行錯誤してみた結果がこのページです。
----
***前回までの環境構成
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : GeForce GTX 560 Ti
OS : Windows7 SP1
GameMode : Conquest Large
Graphics Quality : High (日本語版では「高」に該当すると思います)
----
***マップと測定方法について
マップはLancang Damを使用しています。
ゲームモードはコンクエストラージのみ。
測定は10回実施し、最早と最遅を除く8回の平均値を採用しています。
----
***試行錯誤.1 GPUをGeForce GTX660に変更
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti}
: &b()&color(red){{GeForce GTX 660}}
ストレージから読み込まれたポリゴンやテクスチャなどのデータは圧縮及び暗号化されているため、
メインメモリ上で復号及び圧縮展開処理が行われます。
展開処理が完了するとすぐにGPU(正確にはVRAM)への転送が開始されますので、
ロード時間の一部はメインメモリからVRAMへのリソース転送時間となります。
従って、高性能なGPU及びVRAMに変更することにより、
ロード時間短縮が期待出来ます。
&b(){■結果(初回ロード時間)}
-GeForce GTX 560 Ti (VRAM 1GB) 52秒}
-GeForce GTX 660 (VRAM 2GB) 56秒}
&b(){■所見}
上の結果欄には敢えてVRAM容量を記載いたしました。
今回の試験では画質「高」を使用しているため、環境にもよりますが1.5GB程度のVRAMを使用します。
そのため、VRAM2GBのGTX660までマップロード時に全てのリソースをVRAMへ転送可能ですが、
GTX560TiではVRAM容量が不足するため1GBまでしかリソースを転送出来ません。
従って、プレイ中の画面描画性能はGTX660の方が高性能ですが、
マップロード時間についてはVRAMが多い分だけロード時間も長くなるようです。
----
***試行錯誤.2 GPUをGeForce GTX7700に変更
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
さらに、高性能なGPU及びVRAMに変更してみました。
VRAMは4GB搭載していますが、2GB程度しか使用しないため、
この点がアドバンテージになることは無いでしょう。
&b(){■結果(初回ロード時間)}
-GeForce GTX 660 (VRAM 2GB) 56秒}
-GeForce GTX 770 (VRAM 4GB) 51秒}
&b(){■所見}
GTX660とGTX770ではどちらも十分なVRAM容量が確保されているため、
全てのリソースをマップロード時にVRAMへ転送可能です。
そのため、GPUそのものの性能やVRAMの速度、またGPU-VRAM間のバス幅などの差により、
高速化されたと理解して良いでしょう。
VRAM容量の少ない(つまり、VRAMへ転送するリソースの少ない)GTX 560Tiと比較しても高速なのは、
転送するリソースが増えても、それを上回る性能差があると考えられます。
----
***試行錯誤.3 CPUをIntel Core i7-4770Kに変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
マップロード中はCPU負荷の高い状況となっており、
ピーク時は100%に達していることもありました。
そのため、高性能なCPUを使用することでロード時間の短縮を図ります。
&b(){■結果(初回ロード時間)}
-Intel Core i5-3470 51秒}
-Intel Core i7-4770K 49秒}
&b(){■所見}
ロード時間短縮は妥当な結果ですが、思った程の短縮にはなりませんでした。
処理性能的にはクロック周波数の差程度でしかなく、
またCPU負荷の低いタイミングではCPU性能がアドバンテージになることはないため、
あまり影響が大きくなかったと考えられます。
----
***&color(red){ここから下は番外編になります}
----
***試行錯誤.4 メインメモリをDDR3-800に変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : &s(){DDR3-1600 8GB}
: &b(){&color(red){DDR3-800 8GB}}
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
メモリ性能がどのくらいマップロードに影響を与えるかを測定するため、
敢えてメインメモリの動作クロックを低下させてみました。
単純に考えると、ディスクキャッシュを多用する連続読み込み時に大きな影響が出そうですが...
&b(){■結果(初回ロード時間)}
-MEMORY DDR3-1600 8GB (49秒)
-MEMORY DDR3-800 8GB (49秒)
&b(){■結果(連続ロード時間)}
-MEMORY DDR3-1600 8GB (45秒)
-MEMORY DDR3-800 8GB (46秒)
&b(){■所見}
初回読み込み時には全く影響なし。
ディスクキャッシュの影響が大きいはずの連続読み込み時ですら
僅かな差にしかなりませんでした。
CPUのLevel3キャッシュが8MBも搭載されているため、
先読み転送によりそれほどはメインメモリの性能による影響が出ないのかもしれません。
今回の試験は見送りましたが、Level3キャッシュの容量が少ないCore i5-3470を使うと、
メインメモリの性能差がマップロード時間に与える影響度が大きくなった可能性があります。
でも誤差程度だろうな...
----
***試行錯誤.5 メインメモリをDDR3-1600 &color(red){16GB}に変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : &s(){DDR3-1600 8GB}
: &s(){DDR3-800 8GB}
: &b(){&color(red){DDR3-1600 16GB}}
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
これまで、メインメモリを8GBしか搭載していないマシンで試験を行ってきました。
ここでメインメモリを16GBに変更し、ディスクキャッシュのヒット率向上による、
ロード時間短縮の効果を探ります。
しかし、連続読み込み時にはSSDとHDDの差があまり無い状況ですので、
それほどの効果が期待出来ないことは容易に想像できますが...
&b(){■結果(連続ロード時間)}
-MEMORY DDR3-1600 8GB (45秒)
-MEMORY DDR3-1600 16GB (&color(red){53}秒)
&b(){■所見}
なんだこりゃ...
納得出来ずに一度8GBに戻して再測定。
やはり8GBの方が速い。
もう一度16GBにして再測定。
16GBは何度測っても遅い...
ストレージアクセスの詳細なタイミングや1回の読み込みに関するブロック数の推移、
またメインメモリの使用量などまで詳細なデータを取得していないため、
この点に関する原因の究明は困難な状況です。
一つ考えられることは、メインメモリの実装量が大きいほど、
マップロード時のデータ読み込み量が増加する可能性があります。
各種データ群はマップロード時に全て読み込みが完了しているわけではなく、
ゲームの進行に伴い、体感的な問題にならない程度の負荷の範囲で、
バックグラウンドでデータロードが行われています。
このバックグラウンドのデータロードを出来るだけ回避するため、
メインメモリの容量に余裕がある環境では、マップロード時に出来るだけ読み込みを完了させるような
仕様になっていることが考えられます。
でもすっきりしませんね...
----
***最後にグラフにしてみました
&image(MapLoadDuration_20140110.png)
----
ここ数ヶ月ほどDRAMの値段が高騰しているため、
あまりメモリは多く買わない方が良いみたいです。
(&Counter())
**ロード時間あれこれ (5)
このお題、元々は下記のお問い合わせ回答をそのまま記載する予定だったのですが、
色々と調べているうちに話が広がってしまったので分割してあれこれ記載致します。
----
[[前回>>http://www45.atwiki.jp/goodgames/pages/1138.html]]はHDDをSSDに変更してマップロード時間がどの程度短縮されるかを探りました。
初回ロード時は大幅な時間短縮が実現したものの、
同一マップが続くようなケースではHDDとSSDの差が大幅に縮小しました。
これはOSの機能であるディスクキャッシュの効果により、
ストレージからのデータ読み込み量が減ったことが原因と考えて間違い無いでしょう。
----
SSDへの変更により既に充分高速化されていますが、
さらにロード時間を短縮するために試行錯誤してみた結果がこのページです。
----
***前回までの環境構成
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : GeForce GTX 560 Ti
OS : Windows7 SP1
GameMode : Conquest Large
Graphics Quality : High (日本語版では「高」に該当すると思います)
----
***マップと測定方法について
マップはLancang Damを使用しています。
ゲームモードはコンクエストラージのみ。
測定は10回実施し、最早と最遅を除く8回の平均値を採用しています。
----
***試行錯誤.1 GPUをGeForce GTX660に変更
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti}
: &b()&color(red){{GeForce GTX 660}}
ストレージから読み込まれたポリゴンやテクスチャなどのデータは圧縮及び暗号化されているため、
メインメモリ上で復号及び圧縮展開処理が行われます。
展開処理が完了するとすぐにGPU(正確にはVRAM)への転送が開始されますので、
ロード時間の一部はメインメモリからVRAMへのリソース転送時間となります。
従って、高性能なGPU及びVRAMに変更することにより、
ロード時間短縮が期待出来ます。
&b(){■結果(初回ロード時間)}
-GeForce GTX 560 Ti (VRAM 1GB) 52秒}
-GeForce GTX 660 (VRAM 2GB) 56秒}
&b(){■所見}
上の結果欄には敢えてVRAM容量を記載いたしました。
今回の試験では画質「高」を使用しているため、環境にもよりますが1.5GB程度のVRAMを使用します。
そのため、VRAM2GBのGTX660までマップロード時に全てのリソースをVRAMへ転送可能ですが、
GTX560TiではVRAM容量が不足するため1GBまでしかリソースを転送出来ません。
従って、プレイ中の画面描画性能はGTX660の方が高性能ですが、
マップロード時間についてはVRAMが多い分だけロード時間も長くなるようです。
----
***試行錯誤.2 GPUをGeForce GTX7700に変更
CPU : Intel Core i5-3470
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
さらに、高性能なGPU及びVRAMに変更してみました。
VRAMは4GB搭載していますが、2GB程度しか使用しないため、
この点がアドバンテージになることは無いでしょう。
&b(){■結果(初回ロード時間)}
-GeForce GTX 660 (VRAM 2GB) 56秒}
-GeForce GTX 770 (VRAM 4GB) 51秒}
&b(){■所見}
GTX660とGTX770ではどちらも十分なVRAM容量が確保されているため、
全てのリソースをマップロード時にVRAMへ転送可能です。
そのため、GPUそのものの性能やVRAMの速度、またGPU-VRAM間のバス幅などの差により、
高速化されたと理解して良いでしょう。
VRAM容量の少ない(つまり、VRAMへ転送するリソースの少ない)GTX 560Tiと比較しても高速なのは、
転送するリソースが増えても、それを上回る性能差があると考えられます。
----
***試行錯誤.3 CPUをIntel Core i7-4770Kに変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : DDR3-1600 8GB
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
マップロード中はCPU負荷の高い状況となっており、
ピーク時は100%に達していることもありました。
そのため、高性能なCPUを使用することでロード時間の短縮を図ります。
&b(){■結果(初回ロード時間)}
-Intel Core i5-3470 51秒}
-Intel Core i7-4770K 49秒}
&b(){■所見}
ロード時間短縮は妥当な結果ですが、思った程の短縮にはなりませんでした。
処理性能的にはクロック周波数の差程度でしかなく、
またCPU負荷の低いタイミングではCPU性能がアドバンテージになることはないため、
あまり影響が大きくなかったと考えられます。
----
***&color(red){ここから下は番外編になります}
----
***試行錯誤.4 メインメモリをDDR3-800に変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : &s(){DDR3-1600 8GB}
: &b(){&color(red){DDR3-800 8GB}}
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
メモリ性能がどのくらいマップロードに影響を与えるかを測定するため、
敢えてメインメモリの動作クロックを低下させてみました。
単純に考えると、ディスクキャッシュを多用する連続読み込み時に大きな影響が出そうですが...
&b(){■結果(初回ロード時間)}
-MEMORY DDR3-1600 8GB (49秒)
-MEMORY DDR3-800 8GB (49秒)
&b(){■結果(連続ロード時間)}
-MEMORY DDR3-1600 8GB (45秒)
-MEMORY DDR3-800 8GB (46秒)
&b(){■所見}
初回読み込み時には全く影響なし。
ディスクキャッシュの影響が大きいはずの連続読み込み時ですら
僅かな差にしかなりませんでした。
CPUのLevel3キャッシュが8MBも搭載されているため、
先読み転送によりそれほどはメインメモリの性能による影響が出ないのかもしれません。
今回の試験は見送りましたが、Level3キャッシュの容量が少ないCore i5-3470を使うと、
メインメモリの性能差がマップロード時間に与える影響度が大きくなった可能性があります。
でも誤差程度だろうな...
----
***試行錯誤.5 メインメモリをDDR3-1600 &color(red){16GB}に変更
CPU : &s(){Intel Core i5-3470}
: &b(){&color(red){Intel Core i7-4770K}}
MEMORY : &s(){DDR3-1600 8GB}
: &s(){DDR3-800 8GB}
: &b(){&color(red){DDR3-1600 16GB}}
Storage : &s(){Seagate Barracuda ST2000DM001 (2TB HDD)}
: &b(){&color(red){Intel SSDSC2BW240A4K5 (SSD 530 Series 240GB)}}
Video : &s(){GeForce GTX 560 Ti (VRAM 1GB)}
: &b(){GeForce GTX 660 (VRAM 2GB}
: &b(){&color(red){GeForce GTX 770 (VRAM 4GB}}
これまで、メインメモリを8GBしか搭載していないマシンで試験を行ってきました。
ここでメインメモリを16GBに変更し、ディスクキャッシュのヒット率向上による、
ロード時間短縮の効果を探ります。
しかし、連続読み込み時にはSSDとHDDの差があまり無い状況ですので、
それほどの効果が期待出来ないことは容易に想像できますが...
&b(){■結果(連続ロード時間)}
-MEMORY DDR3-1600 8GB (45秒)
-MEMORY DDR3-1600 16GB (&color(red){53}秒)
&b(){■所見}
なんだこりゃ...
納得出来ずに一度8GBに戻して再測定。
やはり8GBの方が速い。
もう一度16GBにして再測定。
16GBは何度測っても遅い...
4枚挿しにした結果、シングルチャネル動作になってしまったことも考えましたが、
この場合DDR3-800と同等の性能になりますので、
先程の試験結果と同じようなロード時間になるはずです。
ストレージアクセスの詳細なタイミングや1回の読み込みに関するブロック数の推移、
またメインメモリの使用量などまで詳細なデータを取得していないため、
この点に関する原因の究明は困難な状況です。
一つ考えられることは、メインメモリの実装量が大きいほど、
マップロード時のデータ読み込み量が増加する可能性があります。
各種データ群はマップロード時に全て読み込みが完了しているわけではなく、
ゲームの進行に伴い、体感的な問題にならない程度の負荷の範囲で、
バックグラウンドでデータロードが行われています。
このバックグラウンドのデータロードを出来るだけ回避するため、
メインメモリの容量に余裕がある環境では、マップロード時に出来るだけ読み込みを完了させるような
仕様になっていることが考えられます。
でもすっきりしませんね...
----
***最後にグラフにしてみました
&image(MapLoadDuration_20140110.png)
----
ここ数ヶ月ほどDRAMの値段が高騰しているため、
あまりメモリは多く買わない方が良いみたいです。
(&Counter())
表示オプション
横に並べて表示:
変化行の前後のみ表示: