(2013/01/18)

スパコンの性能評価にも使われているらしい Linpack ベンチマークソフトの HPL (High-Performance Linpack benchmark) で性能評価してみた。

クラスタシステムにも対応していて、MPI を使って並列化してくれるらしいけど、そんな大層なものなんて持っていないので、 単一 PC 上でコア数分だけ並列化して実行する。

結果は倍精度浮動小数点の演算性能 (FLOPS) を出してくれる。

前提

性能評価を行うシステム上で MPI および [BLAS または VSIPL] (演算に用いるライブラリ) の二つが使えることが必要。

MPI は著名なフリー実装である Open MPI を用いた。

また BLAS として Intel Math Kernel Library (MKL) に含まれている実装を用いた。 ちなみに非商用であれば無料で使える

コンパイラも Intel のもの (icc) を用いた。

以上のソフトウェアを予めインストールし、設定しておく。

インストールと設定

公式サイトから最新版のソースコードを落として解凍する。 ちなみに執筆時点では 2012/10/26 更新の 2.1 が最新だった。

Intel MKL に Intel 製品を用いてビルドするための Makefile が含まれているので、まずはそれをコピーする。

$ cp /opt/intel/mkl/benchmarks/mp_linpack/Make.intel64 .

32bit CPU を使っているならば替りに Make.ia32 を使う (んだと思う)。

Make.intel64 をちょっと修正。

--- Make.intel64.orig   2013-01-18 22:48:39.840161900 +0900
+++ Make.intel64        2013-01-18 23:00:46.944179303 +0900
@@ -97,7 +97,7 @@
 #
 # Set TOPdir to the location of where this is being built
 ifndef  TOPdir
-TOPdir = `pwd`
+TOPdir = $(shell pwd)
 endif
 INCdir       = $(TOPdir)/include
 BINdir       = $(TOPdir)/bin/$(ARCH)
@@ -135,7 +135,7 @@
 # used. The variable LAdir is only used for defining LAinc and  LAlib.
 #
 ifndef  LAdir
-LAdir        = $(TOPdir)/../../..
+LAdir        = /opt/intel
 endif
 ifndef  LAinc
 LAinc        = $(LAdir)/mkl/include
@@ -245,7 +245,7 @@
 # CC      = mpicc
 # CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall
 # Next nine lines should be commented in case of using GNU compilers:
-  CC      = mpiicc
+  CC      = mpicc
 ifeq "$(version)" "hybrid"
 ifndef MKLINCDIR
        MKLINCDIR = -I"$(TOPdir)/../../include"

コンパイルする。

$ make arch=intel64 OMPI_CC=icc

これで ./bin/intel64 以下に xhpl という名前のバイナリと、HPL.dat という名前の設定ファイルができたはず。

実行。

$ mpirun -n 4 xhpl

GFLOPS 単位でベンチマーク結果がずらっと表示される。

FLOPS が大きくなるように HPL.dat に書かれている値を調整していくらしい。 N, NB, P, Q の値を変えればいいらしいけど、よくわからない。

ともかく、満足できる結果が出たら終了。

測定結果

自分のマシン (chizuru) でのスコアは 37.81 GFLOPS。

パラメータは以下のよう。

N

20000

NB

64

P

1

Q

4

CPU は Intel Core i5 760 (2.80GHz; Turbo Boost 時 3.33GHz) なので、理論的な倍精度浮動小数点の最大演算能力は、

らしい。 最後に 4 をかけているのは、SSE で二つ同時に計算できるのと、積和演算が一サイクルでできるかららしい (要確認)。

なのでピーク比 (実測値/理論値) は Turbo Boost 時の最大周波数が出ているとすると、

という結果に。

最適化されたコードを単一ノードで実行したときの値として、いいものなのか、それとも悪いものなのか、 よく知らないけれど、ともかくこんな感じで評価できた。

ソフトウェア/HPL (last edited 2013-01-18 15:45:34 by epii)