• 検索結果がありません。

カーネルベンチマークコード 開発の目的 エクサスケール規模のシミュレーションの核となる数値計算アルゴリズムの中で 特に重要なものについて 数値計算ライブラリ等を用いてそのコストを推定するためにカーネルベンチマークを作成し 評価に使用する 対象計算アルゴリズム 固有値計算 ( 実数密行列 標準固有値計

N/A
N/A
Protected

Academic year: 2021

シェア "カーネルベンチマークコード 開発の目的 エクサスケール規模のシミュレーションの核となる数値計算アルゴリズムの中で 特に重要なものについて 数値計算ライブラリ等を用いてそのコストを推定するためにカーネルベンチマークを作成し 評価に使用する 対象計算アルゴリズム 固有値計算 ( 実数密行列 標準固有値計"

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)

カーネルベンチマークコードの開発について

 

EigenExaについて  

EigenExaベンチマークコードについて  

ベンチマーク結果に基づく性能推定について

 

 

2/24/2014  理化学研究所 三上和徳  

(2)

カーネルベンチマークコード

•  開発の目的

– エクサスケール規模のシミュレーションの核となる数値計算アルゴリズム

の中で、特に重要なものについて、数値計算ライブラリ等を用いてそのコ

ストを推定するためにカーネルベンチマークを作成し、評価に使用する。

•  対象計算アルゴリズム

– 固有値計算(実数密行列、標準固有値計算)

– 3次元FFT

– 乱数生成器

•  公開計画

– 表

カーネル ベンチマークコード 固有値計算(実対称密・標準) 公開中 3次元FFT   4月公開見込み 乱数生成 3月公開見込み

(3)

固有値計算

•  実数対称密行列の標準固有値計算

• 

AICSで開発中のEigenExaをもとにベンチマークコードを作成

(公開版version  2.1a)  

• 

h;p://www.aics.riken.jp/labs/lpnctrt/EigenExa.html  

• 

10種類のテスト行列(+利用者指定固有値)

•  プロセスグループ形状の指定

•  固有値のみ、固有値+固有ベクトル、など(ただし全モード

計算)

(4)

3D-FFT

 

• 

FFTW向けに紹介されている代表的な3DFFTの測定コードを

もとに、各種

FFT実装や分割方法による性能を推定する。  

• 

AICSで開発中のKMATH_FFTからベンチマークを作成中(3

月末完成)。

• 

3D-­‐FFTの主要なライブラリ、FFTE,  FFTWをカーネルとして開

発中

• 

3次元空間の1軸、2軸、3軸分割の選択

(5)

乱数生成器

•  メルセンヌツイスター乱数生成器を利用した乱数生成部分

の性能評価ベンチマークコード

• 

MPIのグループでできるだけ重複のない乱数列を管理し、

内部状態管理の

I/O処理も含む

• 

AICSで開発中のKMATH_RANDOMのベンチマークコードを

現在改良し、カーネルベンチ提供用に調整中

(6)

EigenExaについて

•  理化学研究所ホームページ

2013年12月5日

60

秒でわかるプレスリリース

」より

•  「京」を使い世界最高速の固有値計算に成功  

•  行列の固有値計算では行列を簡単な形式(形状)に変換し、それを中間形式と

して取り扱います。理研の研究チームは、帯行列(ゼロでない要素が対角線上

に帯状に分布する行列)を中間形式に採用することによって、前処理の時間の

削減を図った新しい計算アルゴリズムを考案し、それを基にした数学ソフト

EigenExa(アイゲンエクサ)」を開発しました。「京」の全プロセッサを用いて計算

した結果、世界最大規模の

100万×100万の行列の固有値計算が1時間以内で

可能なこと確認しました。これまでの地球シミュレーターの記録(

40万×40万の

行列で

3時間半)を大幅に上回りました。「京」の高い計算能力とEigenExaの利

用により、数十万から

100万程度の固有値を求める問題は1時間以内にできる

ことが立証されました。今後、シミュレーションの規模を大幅に拡大することが可

能になります。なお、

EigenExaはオープンソフトウエアとして公開され、理研計算

科学研究機構研究部門のホームページからダウンロードできます。

 

(7)

固有値計算 - 密行列解法の位置づけ

固有値計算

疎行列解法

・超大規模問題

 

・少数固有モード

 

・特定区間モード

 

・最小・最大モード

密行列解法

・全固有値

 

・全固有対

 

・全体の数分の1のモード

•  行列の全要素(NxN)をゼロと考えずに扱う

•  直接的解法

•  メモリ使用量O(N^2),演算量O(N^3)

•  ゼロ要素を落とし,大規模問題での使用メモリ量・演算量を削減

•  反復法が基本

•  疎行列ベクトル積(spMV)が性能を左右

疎行列解法の内部解法に

密行列解法を使用

高性能・高品質な密行列向けソルバの必要性

(8)

EigenExa - 世界の競争相手

Eigen-­‐Exa  

•  新1stepスキーム採用 •  京において2^16コアまでの動作確認・通信コストの認識 •  動作&通信モデル構築 •  階層化アルゴリズム、自動チューニングの取り込み •  GPU版も準備へ

ELPA  

•  1step vs 2stepの議論:1stepが高速の場合が多い •  三重対角 ⇒ 帯の変換部分は未だよい実装できず ・・・実装レベルでは困難か? •  B/Qでアセンブラチューニングの方向&GPU化へ

ScaLAPACK  ver  2.0.2  

•  枠組みに大きな変化なし •  MPIがBLACSの標準に •  ルーチンの強化: ü 非対称行列ソルバー(PDHSEQR) ü 新ルーチンMRRR(PDSYEVR)

DPLASMA  

•  PLASMA, MAGMAでの2stepスキーム •  1nodeはスケーラブルに動作 •  DAGタスクスケジューリング

(9)

ScaLAPACK/DPLASMA

•  テネシー大学

ICL    h;p://icl.cs.utk.edu/dplasma/index.html  

• 

ScaLAPACK  :   Scalable  Linear  Algebra  PACKage  

– 

a  library  of  high-­‐performance  linear  algebra  rou^nes  for  parallel  distributed  

memory  machines.  ScaLAPACK  solves  dense  and  banded  linear  systems,  least  

squares,  eigenvalue,  and  singular  value  problems.  The  key  ideas  includes  

• 

a  block  cyclic  data  distribu^on  for  dense  matrices  and  a  block  data  

distribu^on  for  banded  matrices  

• 

block-­‐par^^oned  algorithms  to  ensure  high  levels  of  data  reuse  

• 

well-­‐designed  low-­‐level  modular  components  

• 

DPLASMA  :  Distributed  Parallel  Linear  Algebra  So`ware  for  Mul^core  Arch.  

– 

DPLASMA    is  the  leading  implementa^on  of  a  dense  linear  algebra  package  for  

distributed  heterogeneous  systems.  It  is  designed  to  deliver  sustained  

performance  for  distributed  systems  where  each  node  featuring  mul^ple  

sockets  of  mul^core  processors,  and  if  available,  accelerators  like  GPUs  or  

Intel  Xeon  Phi.  DPLASMA  achieves  this  objec^ve  through  the  state  of  the  art  

PaRSEC  run^me,  por^ng  the  Parallel  Linear  Algebra  So`ware  for  Mul^core  

Architectures  (PLASMA)  algorithms  to  the  distributed  memory  realm.  

(10)

ELPA

•  マックス・プランク研究所

 h;p://elpa-­‐lib.di-­‐berlin.mpg.de/wiki  

• 

ELPA  :  Eigenvalue  soLvers  for  Petaflop  Applica^ons  Library  

–  ELPA  is  a  Fortran-­‐based  high-­‐performance  computa^onal  library  for  the  (massively)  parallel   solu^on  of  symmetric  or  Hermi^an,  standard  or  generalized  eigenvalue  problems.  

 

–  Once  compiled,  ELPA  library  rou^nes  can  be  linked  to  from  C,  C++,  Fortran  etc.  code  alike.

 

• 

ELPA  works  as  a  "drop-­‐in  enhancement"  for  Scalapack-­‐based  infrastructures  

(arguably  the  de  facto  standard  for  high-­‐performance  parallel  linear  algebra).  

Thus,  ELPA  is  not  independent  of  this  infrastructure,  but  rather  builds  on  it.  

Necessary  prerequisite  libraries  for  ELPA  (o`en  already  provided  by  HPC  

vendors)  include:  

–  Basic  linear  algebra  subrou^nes  (BLAS)   –  Lapack  

–  Basic  linear  algebra  communica^on  subrou^nes  (BLACS)   –  Scalapack  

(11)

EigenExa - 国際競争力のある新規計算スキームの採用

dense

band

tridiagonal

eigenpairs

eigenpairs

eigenpairs

    

ScaLAPACK

1step  Scheme

    

ELPA

    

DPLASMA

2step  Scheme

Byte/Flop

が低い)

    

Eigen-­‐Exa

1step  Scheme

高性能実装が困難 全固有ベクトルを求める 場合は1stepと大差ない という報告多数

状況によっては逆変換(三重対角 ⇒ 帯)の高性

能実装も視野にいれつつ,良好なものを選択

(12)

固有値の計算パターン

• 

Ax  =  λx  

•  行列のサイズが大きい場合  

– 方針:Aの固有値は相似変換A  -­‐>  P

-­‐1

APをしても不変。簡単なP(回転行列

など)で変換を多数回行い対角行列に収束させる

– より簡単な行列形式に中継的に変換して計算時間の短縮をはかる  

• 

(1)係数行列をより帯域の狭い中間行列に変換して  

• 

(2)中間行列の固有値を求め  

• 

(3)本来の係数行列の固有ベクトルを求め直す

– 

(1)の中間行列のパターン毎に手法がある  

• 

EigenExaの標準版、ScaLAPACK  :三重対角行列:Householder(鏡像)

• 

EigenExaの高速版:帯行列(narrow-­‐band法)    

“Development  of  a  High-­‐Performance  Eigensolver  on  a  Peta-­‐Scale  Next-­‐

Genera^on  Supercomputer  System”,  Imamura  etal,  Progress  in  NUCLEAR  

SCIENCE  and  TECHNOLOGY,  Vol.  2,  pp.643-­‐650  (2011)  

•  商用ソフトウエアでは

Lanczos法:三重対角がよく利用される  

(13)

EigenExa - Parallel performance: strong scalability

N=10K

N=20K

N=50K

N=130K

[sec] [cores] 2   20   200   2000   Eigen-­‐K(N=10K)   ELPA2-­‐dev(N=10K)   ScaLAPACK(N=10K)   Eigen-­‐K   ELPA2-­‐development   ScaLAPACK  2.0.2

Fas

te

r

K  computer@RIKEN  AICS  

 

 

OpenMP+MPI  hybrid  

8thread/1proc/1node

Part  of  the  results  is  obtained   by  using  the  K  computer  at   the  RIKEN  Advanced  Ins^tute   for  Computa^onal  Science   (Proposal  number  hp12017).

(14)

EigenExaベンチマークコードについて

• 

Fortranで書かれた主プログラム  

– 実行プログラム名

eigenexa_benchmark  

•  京(

FX10)・X86  Intel・X86  GNU・BlueGeneQ用のMakefile有り  

– 

make  

 

 

 

 # libEigenExa.aのみ生成される  

– 

make    eigenexa_benchmark

 #  ベンチマークコードを生成

 

• 

mpirunコマンドなどで起動  

– 実行オプションをコマンドライン引数と入力ファイルで指定

– テスト用の係数行列を自動生成  

– 複数の行列(タイプ・サイズ)を連続実行可能  

– 

EigenExaの求解ルーチンeigen_sx()又は eigen_s  ()  を呼び出して実行

– 固有値計算に必要な計算資源を出力表示(テキスト)  

(15)

EigenExaベンチマークコードについて

•  実行プログラム名 eigenexa_benchmark  

•  実行時のオプション(

X86  Linux  Intel環境での例)  

$ ./eigenexa_benchmark -help eigenexa_benchmark [options] options:

-h displays this help and exit -f input_file uses input_file

default is ./IN

-g mode sets the process grid as follows R, r MPI_COMM_WORLD row-major mode C, c MPI_COMM_WORLD column-major mode

A, a MPI_COMM_SELF (embarrasingly parallel) 1, 2,... 9 splitted MPI_COMM_WORLD

with the color=MOD(RANK,{number}) -x dimX dimY sets the cartecian shape (dimX, dimY) dimX <= dimY must be hold.

(16)

EigenExaベンチマークコードについて

•  行列や求解モードはinput_fileで指定する  

• 

input_fileのレコードフォーマットは以下  

!

! Input file format !

! N bx by mode matrix solver !

! N : matrix dimension

! bx : block width for the forward transformation ! by : block width for the backward transformation ! mode : solver mode { 0 : only eigenvalues }

! { 1 : eigenvalues and corresponding eigenvectors} ! { 2 : mode 1 + accuracy improvement for eigenvalues} ! matrix : test matrix { 11 types, 0 ... 10 }

! solver : { 0 : eigen_sx, new algorithm, faster on the K } ! { 1 : eigen_s, conventional algorithm }

!

! if a line starts from '!', the line is treated as a comment !

(17)

EigenExaベンチマークコードについて

•  テスト用の係数行列  

• 

matrixパラメタ(0-­‐9):行列要素を自動生成。  

– 以下の10種類の行列タイプから選択  

• 

matrixパラメタ(10):行列要素をユーザが指定。  

– 外部ファイルW.datから読み込む

•  ベンチマークはinput_fileで複数の行列(タイプ・サイズ)を指定して

連続実行可能

Matrix type = 0 (Frank matrix) Matrix type = 1 (Toeplitz matrix) Matrix type = 2 (Random matrix) Matrix type = 3 (Frank matrix 2) Matrix type = 4 (W: 0, 1, ..., n-1)

Matrix type = 5 (W: sin(PAI*5*i/(n-1)+EPS^1/4)^3) Matrix type = 6 (W: MOD(i,5)+MOD(i,2))

Matrix type = 7 (W: same as Frank matrix)

Matrix type = 8 (W: Uniform Distribution, [0,1)) Matrix type = 9 (W: Gauss Distribution, m=0,s=1) Matrix type = 10 (W: Read from the data file 'W.dat')

(18)

EigenExaベンチマークコードについて

•  テスト結果出力例(X86  Linux  Intel環境での例)  

$ export OMP_NUM_THREADS=8 $ export I_MPI_FABRICS=shm:ofa $ mpirun -np 16 ${bin_path}/EigenExa-2.1/eigenexa_benchmark -x 4 4 INPUT FILE=IN ====================================================== Solver = eigen_sx / via penta-diagonal format

Block width = 48 / 128

NUM.OF.PROCESS= 16 ( 4 4 ) NUM.OF.THREADS= 8

Matrix dimension = 20000

Matrix type = 0 (Frank matrix)

Internally required memory = 809378576 [Byte] mode 'X' :: mode 'A' + accuracy improvement

Elapsed time = 72.6625800132751 [sec] FLOP = 41809663584490.7

Performance = 575.394702154152 [GFLOPS] --- 続く

(19)

EigenExaベンチマークコードについて

•  テスト結果出力例(X86  Linux  Intel環境での例続き)  

---

max|w(i)-w(i).true|/|w.true|= 1.066005805307593E-008 162121999.707086 *** Eigenvalue Relative Error *** : PASSED

max|w(i)-w(i).true| = 1.72822991013527 162121999.707086 *** Eigenvalue Absolute Error *** : FAILED

Do not mind it. Relative error is small enough. --- |A|_{1}= 200010000.000000

epsilon= 2.220446049250313E-016

max|Ax-wx|_{1}/Ne|A|_{1}= 3.267477534449350E-002 50 *** Residual Error Test *** : PASSED

|ZZ-I|_{F}= 1.498340806171751E-012 *** Orthogonality Test *** : PASSED

(20)

EigenExaベンチマークコードについて

•  テスト結果出力例(X86  Linux  Intel環境プロセスpinステートも表示)  

$ export I_MPI_DEBUG=5

$ export I_MPI_FABRICS=shm:ofa

$ mpirun -np 16 ${bin_path}/EigenExa-2.1/eigenexa_benchmark -x 4 4 [0] MPI startup(): Rank Pid Node name Pin cpu

[0] MPI startup(): 0 16562 vsp25 {0,1,2,3,4,5,6,7} [0] MPI startup(): 1 16563 vsp25 {8,9,10,11,12,13,14,15} [0] MPI startup(): 2 9634 vsp27 {0,1,2,3,4,5,6,7} [0] MPI startup(): 3 9635 vsp27 {8,9,10,11,12,13,14,15} [0] MPI startup(): 4 10120 vsp29 {0,1,2,3,4,5,6,7} [0] MPI startup(): 5 10121 vsp29 {8,9,10,11,12,13,14,15} [0] MPI startup(): 6 16952 vsp10 {0,1,2,3,4,5,6,7} [0] MPI startup(): 7 16953 vsp10 {8,9,10,11,12,13,14,15} [0] MPI startup(): 8 18491 vsp11 {0,1,2,3,4,5,6,7} [0] MPI startup(): 9 18492 vsp11 {8,9,10,11,12,13,14,15} [0] MPI startup(): 10 19442 vsp12 {0,1,2,3,4,5,6,7} [0] MPI startup(): 11 19443 vsp12 {8,9,10,11,12,13,14,15} [0] MPI startup(): 12 19454 vsp16 {0,1,2,3,4,5,6,7} [0] MPI startup(): 13 19455 vsp16 {8,9,10,11,12,13,14,15} [0] MPI startup(): 14 17532 vsp17 {0,1,2,3,4,5,6,7} [0] MPI startup(): 15 17533 vsp17 {8,9,10,11,12,13,14,15}

(21)

EigenExaベンチマークコードについて

•  計算各フェイズでの通信待ち等さらに細かな情報を得たい場合は、

Makefile  中で以下のマクロを 1

に設定して

makeするとよい  

– 

DEBUGFLAG  =  $(MACRO_D_PREFIX)TIMER_PRINT=

0  

•  実行時stdoutの例  

calc (u,beta) 0.660794019699097 mat-vec (Au) 2.37120127677917 281.151445554300 2update (A-uv-vu) 0.451921701431274 1475.18179488897 calc v 0.000000000000000E+000 v=v-(UV+VU)u 0.455217599868774

UV post reduction 5.616807937622070E-002 COMM_STAT BCAST :: 0.337308168411255 REDUCE :: 1.66761779785156 REDIST :: 0.000000000000000E+000 GATHER :: 8.748936653137207E-002 TRD-BLK 10000 4.13007497787476 322.835139912989 GFLOPS TRD-BLK-INFO 10000 48 … …

(22)

EigenExaベンチマークコードについて

•  テスト結果出力例(京コンピュータでの例)  

$ export OMP_NUM_THREADS=8 $ mpiexec -n 16 ./eigenexa_benchmark -x 4 4 INPUT FILE=IN ====================================================== Solver = eigen_sx / via penta-diagonal format

Block width = 48 / 128 NUM.OF.PROCESS= 16 ( 4 4 ) NUM.OF.THREADS= 8

Matrix dimension = 20000

Matrix type = 0 (Frank matrix)

Internally required memory = 809378576 [Byte] mode 'X' :: mode 'A' + accuracy improvement Elapsed time = 53.00329535175115 [sec] FLOP = 41803090435242.67

Performance = 788.6885175312324 [GFLOPS]

---

max|w(i)-w(i).true|/|w.true|= 1.066005768542290E-08 162121999.7070863 *** Eigenvalue Relative Error *** : PASSED

max|w(i)-w(i).true| = 1.728229850530624 162121999.7070863 *** Eigenvalue Absolute Error *** : FAILED

(23)

EigenExaベンチマークコードについて

•  ベンダー統計ツールとの数値比較  

– 京コンピュータの場合(fipp)  行列要素生成処理も含んだ表示  

Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --- 56.6477 773401.5044 37.7637 332690.4151 32.4893 Application --- 56.6477 48266.1621 37.7079 20797.4704 32.4960 Process 10 54.7928 49989.9193 39.0546 21502.4550 33.5976 Process 9 54.7822 49874.1968 38.9642 21430.2796 33.4848 Process 13 54.7787 50252.3960 39.2597 21643.9902 33.8187 Process 1 54.7602 50124.2821 39.1596 21575.6756 33.7120 Process 5 ... similar 16 procs

Mem throughput Mem throughput

Elapsed(s) _chip(GB/S) /PEAK(%) SIMD(%) --- 56.6477 195.4106 19.0831 75.1494 Application --- 56.6477 12.2135 19.0836 75.0269 Process 10 54.7928 12.6243 19.7254 75.1301 Process 9 54.7822 12.6181 19.7158 75.2976 Process 13 54.7787 12.6283 19.7317 74.9276 Process 1 54.7602 12.6464 19.7599 75.0345 Process 5

(24)

ベンチマーク結果表示値に基づく性能推定について

•  演算量  

– 

FLOP  :  EngenExa  eigen_sx()の浮動小数点演算量  ~=  C

f  

x  N

3    

 

– 

Matrix  dimension  =                N  

•  メモリ量

– 

Internally  required  memory  :MPIプロセスあたりの合計配列サイズ~=  C

m  

x  N

2    

   

–  (次ページ注参照)

   

•  計算時間  

– 

Elapsed  ^me  :  演算・通信等の合計経過時間

•  実効ピーク性能比  

– 

Performance  [GFLOPS]:固有値計算の性能(全プロセス合計値)  

–  プロセス当たりの性能はデータレイアウト・プロセスマッピングでほぼ決まる

 

•  テスト結果を用いて推定(同じプラットフォームで外挿)できること

–  より大規模な行列を計算する場合の浮動小数点演算量、メモリ量、演算時間

–  より多数のノード数を利用する場合の演算時間

–  通信の待ち時間は実行条件への依存が大きく、推定方法は一様ではない

(25)

利用上の留意点

•  必要メモリ量の表示

–  ベンチマークコードによるメモリ量の算出(

Internally  required  memory  )  

• 

MPIプロセスあたりの最大メモリ量(ソースプログラムで静的に読める値)    

–  ジョブが実際に必要とするメモリ量はより多い  

•  テキスト・ライブラリ・

MPIバッファなどのセグメントは入っていない  

• 

OpenMPスレッド並列の場合はスレッドprivateな変数領域が相当量必要  

•  計算結果  

–  計算の結果a(n,n)は対角化されるが  a(1,1)成分はFLOP値(浮動小数点演算回

数)、

a(2,1)成分は経過時間の値で各々上書きされて返ってくるので注意  

ベンチマークコードによるメモリ量の表示

 

Internally  required  memory  =        809378576    [Byte]  

OSによる統計出力メモリ量(京コンピュータfipp表示の例)    

 スレッド数

 MAX  MEMORY  SIZE  (USE)  

 1

 

 1346.4  MiB  (1.4GB)  

(26)

ダウンロードページ

 

h;p://www.aics.riken.jp/labs/lpnctrt/EigenExa.html  

参照

関連したドキュメント

事業セグメントごとの資本コスト(WACC)を算定するためには、BS を作成後、まず株

 「時価の算定に関する会計基準」(企業会計基準第30号

トリガーを 1%とする、デジタル・オプションの価格設定を算出している。具体的には、クー ポン 1.00%の固定利付債の価格 94 円 83.5 銭に合わせて、パー発行になるように、オプション

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計

、肩 かた 深 ふかさ を掛け合わせて、ある定数で 割り、積石数を算出する近似計算法が 使われるようになりました。この定数は船

このアプリケーションノートは、降圧スイッチングレギュレータ IC 回路に必要なインダクタの選択と値の計算について説明し

企業会計審議会による「固定資産の減損に係る会計基準」の対象となる。減損の兆 候が認められる場合は、

(注)本報告書に掲載している数値は端数を四捨五入しているため、表中の数値の合計が表に示されている合計