2016年4月5日火曜日

ハイスペックPCやWS構成のサイジングについて

はじめに

今回の話題はいつもに増して難易度が高めです。
前回の記事を読んでいることを前提に進めます。

要点

システム各部の負荷の比率を読み解かないと

無駄が多い環境になる。


①計算種別の基本

CPUGPU等の計算機は、
直列的に計算を実行するスカラ演算
並列的に計算を実行するベクトル演算
の2つが存在します。

スカラ演算は、CPUが得意
(並列度が高い)ベクトル演算は、GPUが得意[GPGPU/CUDA/OpenCL]
(並列度が低い)ベクトル演算は、CPUが得意[MMX/SSE/AVX]

そして、GPUのプログラミングは難易度が高く、普及しているソフトウェアは
ゲームばメインで他のソフトウェア対応は発展途上です。


②実環境で計算時間とI/O待ち時間の比率を読み解く

最初に必要な情報収集は、
どのプログラムが
どのファイルにアクセスしていて
具体的にどの位のリソースを消費しているか

 ということです。

簡易的に確認するには、リソースモニターで確認できます。

同じWindowsバンドルツールのタスクマネージャーより詳細に確認する
ことが出来ます。


GPUのリソース状況はNVIDIA系なら”ELSA System Graph”あたりが良いでしょう。



リソースモニターより詳細に情報を確認する場合は、SystemExplorer
が良いです。


③計算の複雑性、並列度、I/O待ち時間の比率を分析する

ここまでで、

CPUでは、『少コアで高負荷なのか』、『多コアで高負荷なのか』が判別出来
 ているはずです。

また、

GPUでも、『周波数の動き』や、『メモリの使用量』、『GPU全体の使用率』を
比較することが出来ているはずです。

全ての情報が揃うと、

『 CPUコア数 × CPU周波数 ≒ 処理速度 』

という理想値に近い値を出すために必要なハードウェア構成が予測できます。




④最後の落とし穴 メインメモリのI/O

SSDやメモリの搭載量が重要であることは当然なので省略します。

上記が満たされているにもかかわらず、多コア構成では想定通りの性能が
出ないことがあります。

それが、メインメモリのI/O上限です。

例えば、データベースの用途でメモリに128GBキャッシュが必要だけど、
計算でよく使うのは32GB程度。
という状況であれば、メインメモリのI/Oに気を配る必要がなく、
コア数の多いCPUが有利です。

一方、動画編集用途ではキャッシュしているデータは全てCPUで消費して、
計算が終わり次第、次のシーンのデータを読み込む。
という事はよくあります。

これが、多コアのCPUでソフトウェアも並列性が高いにもかかわらず想定した
性能が出ない現象に陥りやすいものなのです。


一般的なPC(i3~i7)で使われているメモリの帯域は
DDR3の場合、25.6GB/s
DDR4の場合、34.0GB/s
となっています。

i7 の場合、4つの物理コアで論理的に8つ論理コアを実装しているため、
完全に並列化された処理では1論理コアあたり 4GB/s 前後の帯域が見込めます。

i7 Extreme 5960x の場合、DDR4 クアッドチャネル対応でメモリの帯域は
68.0GB/s あります。

そして、8つの物理コアで16の論理コアを実装しているため、
1論理コアあたりの帯域は 4.25 GB/s の帯域が見込めます。

では、Xeonで更に上位のモデルはどうでしょう。

Intel® Core™ i7-5960X Processor Extreme Edition (6コア 20M Cache, 3.00 GHz)
Intel® Xeon® Processor E5-2667 v4 (8コア, 25M Cache, 3.20 GHz)
Intel® Xeon® Processor E5-2687W v4 (12コア, 30M Cache, 3.00 GHz)

E5-2667の場合、4.25GB/s
 E5-2687の場合、2.83GB/s

 Xeonは、処理能力に加えて信頼性と、高いメモリ上限あるため価格差も大きいです。
i7 5960xが12万円程度であるのに対し、Xeon上位モデルは20万円を超える金額に
 なるので金額を超えるメリットが望めるかをよく検討して購入しましょう。