HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

理論ピーク性能

巷では、ゴミ箱呼ばわりされたり、スパコンに該当するとか言われてなんか話題になっていたMAC Proが発売されてたようです。
発表直後に話題になってた、政府調達手続におけるスパコンの定義はなにかというと

http://www.kantei.go.jp/jp/kanbou/24tyoutatu/index.html

の下の方にある、「スーパーコンピューター導入手続」の一部改正(平成17年4月25日)という資料に記載されているとおり
「理論ピーク性能が1.5TFlops以上のもの」
です。


じゃ、理論ピーク性能って何よってのをざっくりとまとめてみようかと思います。

そもそも理論ピーク性能の定義は?

もの凄くざっくり言うと、「コンピュータに付いているありとあらゆる演算器が1クロック毎にフルに演算を行なった時の性能」と言えます。
でもって、単位のFlops(FLoating OPerations per Second)が示すように、ここでは浮動小数演算の性能のみを対象にしています。
例えば、加算器を一個だけ持ってて1GHzで動作するCPUを1つ搭載した計算機が存在したとすると、このマシンは1クロックあたり最大1演算しか行えず、1クロックあたりの時間は周波数の逆数なので


1 * 1 = 1GFlops


となり、理論ピーク性能が1GFlopsのマシンと言えます。*1

理論ピーク性能に影響する要素

さっきは加算器が一個だけなんていう、ありえないマシンを例に出したので、非常に単純な計算でしたが、最近のCPUだとマルチコア化されていて、複数のコアが同時に演算をしていたり、さらにそのコア内にSIMD演算器がついてて1演算で複数要素の演算を同時に実行できたりするので、1クロックあたりの演算数は非常に大きくなっています。

例えば、wikipediaのFLOPSの項を見ると、Haswell世代のIntel CPUでは16 FLOPS/Clockとなってます。*2
これの内訳がどうなっているかというと、

  1. FMA演算器を採用することで、1クロック中に加算と乗算を同時に実行 x2
  2. 2つのFMA演算器に対して1クロックあたり同時に命令を発行 x2
  3. 256bit幅のSIMD演算により、倍精度浮動小数を同時に4ワード計算 x4

で、掛け合わせると1クロックあたり16演算となるわけです。
これが、SandyBridge世代以前だと、FMA演算器じゃなくて、加算器と乗算器が各1個づつ乗っているので1/2になります。
ということは、ひたすら加算だけしてて乗算をしないような処理があったとすると、SandyBridgeでは1クロックあたり1命令しか処理できなかったのが、Haswellになると1クロックあたり2命令処理できるので、単純にこれだけで2倍の性能向上(実際にはSIMD幅が2倍になっているので、SIMD演算できるパターンなら4倍になる)という皮算用ができるわけです。*3

ちなみに、2命令同時発行ってのは実はcoreマイクロアーキテクチャになって以降ずっと変わってなくて、Intelの最適化リファレンスガイドの過去の版をとかを見ると*4、ずっとport 0が浮動小数の乗算でport1が浮動小数の加算になってるはずです。
でもってNet Burst世代まで遡れば1クロック1命令になります。*5

話題のMAC Proは?

MAC Proに、オプションで色々つけると、こんな構成にできるようです(メモリとかは関係無いので省略)

2.7GHz 12コア、30MB L3キャッシュ
デュアルAMD FirePro D700 GPU(1基につき6GB GDDR5 VRAMを搭載)

CPUはXeon-E5としか書かれてないので、2.7GHz, 12コア, L3 30MBってのをキーにIntelのウェブページから探すと
http://ark.intel.com/ja/products/75283/Intel-Xeon-Processor-E5-2697-v2-30M-Cache-2_70-GHz
でしょうかね?

Ivy Bridge世代でクロック2.7GHzの12コアマシンなので倍精度演算であれば


4 * 2 * 2.7 * 12 = 259.2GFlops


続いてGPU側ですが、これまたD700なんて機種はAMDのウェブページには載ってません・・・
が、ぐぐったらW9000だと言ってるページが見つかりました。
http://architosh.com/2013/10/the-mac-pro-so-whats-a-d300-d500-and-d700-anyway-we-have-answers/

AMDGPUはまったく詳しくないので、ここの記述を鵜呑みにすることとして
2048個のstream processorを900MHzで駆動してるんじゃないのということでした。
AMDのstream processorは単精度のFMAで、2個合わせて倍精度1演算なので、


2 * 2048 / 2 * 0.9 * 2 = 3686GFlops*6


合計すると、約3.9TFlopsの理論ピーク性能を誇るゴミ箱となるわけです。
しかも、今なら64GBのメモリと1TBのフラッシュストレージもつけて、お値段なんと103万1399円!
って誰が買うじゃこんな高いもんwww

*1:時間で割る変わりに周波数をかけることで、時間あたりの演算数を求めてるんだけど説明しづらいですねorz

*2:Flops/clockって単位がおかしいな・・・Flop/cycleだろうそこは

*3:実際のところ、こういう演算内容が局所的に偏るってのはたまに起きるので、インオーダー実行な某スパコンだとループ内で計算する順番を入れかえるとかして処理順を変えたりするわけですが、そもそもOut of order実行なCPU勝手にハードウェア側でやってくれてるんじゃなかろうか?

*4:PC watchの後藤氏の過去記事を見る方が分かりやすいけど。

*5:woodcrestからwestmereまでは演算コアの外側の強化が主体だったから当たり前っちゃ当たり前だけど・・・

*6:appleのwebだと3.5TFlopsとなってるので、もうちょっとクロックが低いのかも?