はじめに
「PCとスーパーコンピュータ(以下、スパコン)ってどのくらい性能が違うのだろう」と思ったことはないでしょうか。
TOP500という名で知られているスパコンの世界ランキングが、1年に2回、6月に開かれる国際会議International Supercomputer Conference(通称ISC)と、11月に開かれる国際会議International Conference for High Performance Computing, Networking, Storage and Analysis(通称Supercomputing Conference, SC)で発表されています(結果はTOP500 Supercomputing Sitesで閲覧できます)。
スパコンのTOP500を決めるのに使われるベンチマーク・プログラムは、Linpack Benchmarkと呼ばれるもので、大きな密行列で表される連立方程式を解く時間を計ります。大規模連立方程式は、スパコンで最も頻繁に扱われる問題の一つのため、この性能をスパコンを比較する際の第1の指標とすることは理にかなっています。しかし、この結果だけをもって性能を評価するのはやはり問題があるので、最近ではHPC Challenge(HPCC)という、より総合的なベンチマークも普及してきています(HPCCはLinpack Benchmarkの実装であるHigh Performance Linpack, HPLも含んでいます)。
一方、PCの世界にもさまざまなベンチマークがあります。筆者がよく目にするのは、一般的なタスクの性能を測るPCMarkやグラフィック処理の性能を測る3DMark、円周率を計算するSuper Piなどです。
複数の計算機の性能を比較する最善の方法は、自分のプログラムを実行して、その実行時間を比べることです。しかし、実際にたくさんの計算機上で自分のプログラムを試してみるというのは現実的ではありません。また、「私の」プログラムの実行時間というのはあまり客観的な指標にはなりません。
そこで、計算機の性能を比較するためのベンチマーク・プログラムが利用されることになります。ベンチマークの結果が良いからといって、実際に自分が動かしたいプログラムも高速に動くことが保証されるわけではありません。使う場面に応じてベンチマークを使い分けるのは正しいことです。スパコンとPCは使い方がまったく違うため、性能比較に用いるベンチマークは当然異なります。そのため、両者を直接比較するということはふつうはしません。
とはいえ、スパコンとPCに明確な違いがあるわけではありません。その時代の一般的な計算機と比べて非常に高速なものがスパコンと呼ばれるのが普通です。この「非常に高速」というのはどの程度のものなのでしょうか。本稿では、スパコン用のベンチマークであるHPCCをPCで動かし、両者を同じ土俵にのせることでこの疑問に答えます。
対象読者
- 計算機の性能評価に興味がある方
- 数値計算ライブラリに興味がある方
- Unixの基本的なコマンド操作ができる方
HPCCの構成
HPCCは次の7つのベンチマークで構成されます。
- HPL: 大規模連立一次方程式(TOP500で用いられるものと同じ)
- DGEMM: 行列の掛け算
- STREAM: メモリへの連続アクセスの際のバンド幅
- PTRANS: 行列の転置
- RandomAccess: メモリへのランダムアクセス
- FFT: 高速フーリエ変換
- Communication bandwidth and latency: 通信のバンド幅とレイテンシ
HPLとRandomAccess、STREAM、FFTは特に注目され、個別に表彰されています。2007年の結果では、TOP500の第1位であるIBMのBlueGene/Lが、FFTではCray XT3に負けています(他の3つではBlueGene/Lが1位です)。
ベンチマーク・プログラムはHPCCのサイトからダウンロードできますが、それだけではベンチマークを走らせることはできません。BLAS(行列演算)とMPI(メッセージ通信)の実装を別に用意しなければならないのです。
このBLASとMPIを広く普及した一般的なもので間に合わせるのが「base run」です。Base runにおいて、ユーザーはベンチマークへの入力パラメータ以外を変更することはできません。もう少し自由度の高いのが「optimized run」ですが、本稿では扱いません。
PC用のBLASとしては、次のものが広く普及しています。本稿では、GNU/Linux(Fedora)上ですべて試してみます(ATLASだけはCygwinとKNOPPIX/MATH上でも試します)。
本題から離れますが、ここで挙げたような行列計算のライブラリは、高速な数値計算のためには必須のものです。行列の計算というのは非常に伝統のある分野で、C言語などでふつうに書いてコンパイルした程度のプログラムでは到底達成できないようなパフォーマンスを発揮するライブラリが開発されています。行列計算と同様に、高速フーリエ変換(FFT)も高速ライブラリが開発されています(上で挙げたMKLに含まれているものや、FFTWなどが有名です)。HPCCのFFTでこれらのライブラリを利用することもできるはずなのですが、筆者の環境ではうまく動作しませんでした。