ベンチマーキング · 2 min read · Dec 14, 2025

HPL (ハイパフォーマンスリンパック): Raspberry Piのベンチマーキング

ベンチマーキングは、システムによって達成される速度を評価するためにいくつかの標準プログラムを実行するプロセスです。標準的なベンチマーキングプログラムはいくつかあり、このチュートリアルでは、HPLと呼ばれるよく知られたプログラムを使用してLinuxシステムをベンチマークします。HPLはハイパフォーマンスリンパックとしても知られています。

はじめに

このチュートリアルでは、単一プロセッサシステムであるRaspberry Piのベンチマーキング方法を説明します。最初に単一ノードをベンチマークし、その後、各ノードがRaspberry Piを表す複数のノードをベンチマークします。ここで注意すべき点がいくつかあります。まず、単一ノードまたは複数ノードのベンチマーキングには、満たすべきいくつかの依存関係がありますが、これについてはこのチュートリアルで説明します。しかし、複数ノードの場合、HPLが機能するためにはMPI実装(MPICHやOpenMPIなど)が構築され、実行されている必要があります。したがって、複数ノードをベンチマークする場合は、ノードにMPICHがインストールされ、実行されていることを前提とします。

HPLとは?

HPLは、分散メモリコンピュータ上で倍精度(64ビット)算術の(ランダムな)密な線形システムを解くソフトウェアパッケージです。HPLパッケージは、得られた解の精度と計算にかかった時間を定量化するためのテストおよびタイミングプログラムを提供します。このソフトウェアがシステム上で達成できる最高のパフォーマンスは、多くの要因に依存します。この実装は、プロセッサごとのメモリ使用量に関して並列効率が一定に保たれるという意味でスケーラブルです。したがって、これを使用して単一プロセッサまたは一連の分散プロセッサを並列でベンチマークできます。それでは、HPLのインストールを始めましょう。

1 依存関係のインストール

HPLをインストールする前に満たす必要があるいくつかのソフトウェア依存関係があります。それらは次のとおりです:

  • gfortran - Fortranプログラムコンパイラ
  • MPICH2 - MPIの実装
  • mpich2-dev - 開発ツール
  • BLAS - 基本線形代数サブルーチン

ここでは、MPICH2がインストールされていると仮定します。他の依存関係とパッケージをインストールするには、次のコマンドを使用します:

sudo apt-get install libatlas-base-dev libmpich2-dev gfortran

このステップは、クラスター内の各ノード(Pi)で繰り返す必要があります。

2 HPLをダウンロードしてセットアップする

ここからHPLパッケージをダウンロードします。次に、tarファイルを抽出し、指定されたテンプレートに基づいてmakefileを作成します。ターミナルを開き、ダウンロードしたHPL tarファイルが保存されているディレクトリに移動します。次のコマンドを順番に実行します。

tar xf hpl-2.1.tar.gz  
 cd hpl-2.1/setup  
 sh make_generic  
 cd ..  
 cp setup/Make.UNKNOWN Make.rpi

最後のコマンドは、Make.UNKNOWNの内容をMake.rpiにコピーします。これは、makeファイルがシステム(Raspberry Pi)のすべての構成詳細や、mpich2、atlas/blasパッケージ、ホームディレクトリなどのさまざまなライブラリの詳細を含んでいるためです。次のステップでは、Make.rpiファイルに変更を加えます。

3 Make.rpiファイルの調整

これは重要なステップです。以下の変更は、システムによって異なります。ここでは、私のシステムに関して示します。以下の変更には、Make.rpiファイル全体に散在するパラメータが表示されていることに注意してください。したがって、各パラメータを見つけて変更を置き換えるか追加し、その後に次のパラメータに進むことをお勧めします。

テキストエディタを使用してMake.rpiファイルを開くには、次のコマンドを使用します:

nano Make.rpi

ファイルに次の変更を加えます。

ARCH         = rpi
TOPdir       = $(HOME)/hpl-2.1
MPdir        = /usr/local/mpich2
MPinc        = -I $(MPdir)/include
MPlib        = $(MPdir)/lib/libmpich.a
LAdir        = /usr/lib/atlas-base/
LAlib        = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a

4 HPLのコンパイル

Makeファイルが準備できたら、HPLのコンパイルを開始できます。”.xhpl”ファイルは、HPLフォルダ内の”bin/rpi”フォルダに存在します。次のコマンドを実行します:

makeh arch=rpi

5 HPL入力ファイルの作成

以下は、”HPL.dat”ファイルの例です。これは、HPLを実行する際の入力ファイルです。このファイルに提供された値は、問題を生成し計算するために使用されます。このファイルを直接使用して単一ノードのテストを実行できます。”bin/rpi”フォルダ内にファイルを作成し、”HPL.dat”という名前を付けます。以下の内容をそのファイルにコピーします。

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
5040         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
1            Ps
1            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

このファイルの内容は、満足のいく出力が得られるまで試行錯誤によって変える必要があります。各パラメータについての詳細や変更方法については、こちらの文書を参照してください。要点を飛ばすには、その文書の6ページから読み始めてください。

6 単一ノードでのHPLの実行

HPL.datファイルが準備できたら、HPLを実行できます。上記のHPL.datファイルは、単一ノードまたはプロセッサ用です。上記のファイルのPQの値の積は、HPLがテストされるプロセッサの数を示します。したがって、上記のファイルからP=1およびQ=1、11=1であるため、これは単一プロセッサ用です。実行するには、次のコマンドを使用します:

cd bin/rpi  
./xhpl

出力は、以下に示すようなものになります:

================================================================================
HPLinpack 2.1  --  ハイパフォーマンスリンパックベンチマーク  --   2012年10月26日
Innovative Computing Laboratory, UTKによって作成されました。
A. PetitetおよびR. Clint Whaleyによって書かれました。
Piotr Luszczekによって修正されました。
Innovative Computing Laboratory, UTK
Julien Langouによって修正されました。
デンバー大学
================================================================================

入力/出力パラメータの説明は以下の通りです:
T/V    : 壁時間 / エンコードされたバリアント。
N      : 係数行列Aの順序。
NB     : パーティショニングブロッキングファクター。
P      : プロセス行の数。
Q      : プロセス列の数。
Time   : 線形システムを解くのにかかる時間(秒)。
Gflops : 線形システムを解くための実行速度。

以下のパラメータ値が使用されます:

N      :   5040 
NB     :     128 
PMAP   : 行優先プロセスマッピング
P      :       1 
Q      :       1 
PFACT  :   右
NBMIN  :       4 
NDIV   :       2 
RFACT  :   クルート
BCAST  :  1リングM 
DEPTH  :       1 
SWAP   : ミックス(しきい値 = 64)
L1     : 転置形式
U      : 転置形式
EQUIL  : はい
ALIGN  : 8倍精度ワード

--------------------------------------------------------------------------------

- 行列Aは、各テストのためにランダムに生成されます。
- 次のスケールされた残差チェックが計算されます:
      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- 相対機械精度(eps)は               1.110223e-16と見なされます。
- 計算テストは、スケールされた残差が                16.0未満である場合に合格します。

また、最終結果にも注目する必要があります。ターミナルに表示される最終出力は、以下のようになります。最後の値は速度を示し、その前の値は提供されたさまざまなパラメータを示します。以下の内容では、速度はGflopsで示され、その値は約1.21e-01 Gflopsで、変換すると121メガFLOPS(MFLOPS)になります。

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4       21400   128     3    11              537.10              1.210e-01
HPL_pdgesv() 開始時間 Mon Jun 23 17:29:42 2014

HPL_pdgesv() 終了時間   Mon Jun 23 17:55:19 2014

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0020152 ...... 合格
================================================================================

Raspberry Piによっては、速度や所要時間が大きく異なる場合があります。したがって、これらの結果をノードやクラスターの比較に使用しないでください。

7 複数ノードでのHPLの実行

複数ノードでHPLを実行したい場合は、HPL.datファイルを変更する必要があります。ここでは、32ノードがあると仮定します。したがって、PQの積は32である必要があります。私はP=4、Q=8を選択しました。したがって、48=32です。この変更に加えて、Nの値も変更する必要があります。試行錯誤の結果、N=17400で最大速度が得られました。最終的なファイル内容は以下のようになります。これに応じて”HPL.dat”ファイルに変更を加えてください。

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
17400         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
4            Ps
8            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

これが完了したら、再度HPLを実行する必要があります。次のコマンドを使用します。以下のコマンドのパスを、システム内のマシンファイルのパスを表すように変更することを忘れないでください。

cd bin/rpi  
mpiexec -f ~/mpi_testing/machinefile -n 32 ./xhpl

この結果は、単一ノードのものと似ていますが、確実に速度が高くなります。

この種の変更は、システム内のノードまたはプロセッサの数に応じて行うことができ、ベンチマーク結果を見つけることができます。そして、前述のように、HPL.datファイルの値を設定する方法について詳しく知りたい場合は、こちらの文書を参照してお読みください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。