スライド 0

マルチコア・メニーコアプロセッサ向けの
行列計算アルゴリズム
- 固有値・特異値計算を中心に -
2009年 4月 22日
研究会「アルゴリズムによる計算科学の融合と発
展」
筑波大学 計算科学研究センター
山本 有作 (名古屋大学)
はじめに: 本研究で扱う問題
• 固有値分解 A = XLX–1
– A: n×n 非対称密行列,L: 対角行列,X: 正則行列
– 応用分野
• 構造計算
• 量子化学
• 特異値分解 A = US VT
– A: n×n 密行列,S: 対角行列,U, V: 直交行列
– 応用分野
• 統計計算,信号処理,画像処理
• 電子状態計算 (filter diagonalization 法)
※ 対称密行列の固有値分解は特異値分解と共通点が多い
(1/48)
本研究の目的
• マルチコア/メニーコアプロセッサ上で高性能を達
成できる固有値・特異値分解ソルバの開発
• 背景
– 問題の大規模化
– マルチコア/メニーコア/GPGPUの普及
Quad Core Opteron
ClearSpeed CSX600
NVIDIA GeForce8800 GTX
(2/48)
目次
1. はじめに
2. マルチコアプロセッサでの特異値分解
3. GPUでの特異値分解
4. メニーコアプロセッサでの固有値分解
5. 終わりに
(3/48)
マルチコアプロセッサでの
特異値分解
(4/48)
標準的な特異値分解アルゴリズム
密行列 A
計算内容
計算手法
二重対角化
U0TAV0 = B
ハウスホルダー法
(U0, V0: 直交行列)
二重対角行列 B
二重対角行列の
特異値・特異ベクトル計算
Bvi =σi xi
BTxi =σi yi
Bの特異値 {σi },
特異ベクトル {xi }{yi }
vi = V0 yi
逆変換
ui = U 0 x i
QR法
分割統治法
MR3アルゴリズム
I-SVDアルゴリズム
逆変換
Aの特異ベクトル {ui }, {vi }
(5/48)
各部分の演算量と実行時間
演算量
密行列 A
実行時間(全特異ベクトル)
n = 2500,Quad Core Xeon ×2
LAPACK での実行時間(秒)
(8/3) n3
二重対角化
二重対角行列の
特異値・特異ベクトル計算
逆変換
O(n2)
~ O(n3)
実
行
時
間
(
秒
)
4mn2
(左右 m 本ずつの
特異ベクトル)
Aの特異ベクトル {ui }, {vi }
コア数
・二重対角化が実行時間の
大部分を占める
・速度向上率が低い
(6/48)
二重対角化の性能が出ない原因
• 二重対角化の演算パターン
– 左右からのハウスホルダー変換による行・列の消去
• A(k) := (I – aw wT ) A(k) = A(k) – aw (wTA(k))
行列ベクトル積
Rank-1更新
• 演算は level-2 BLAS(行列ベクトル積と rank-1 更新)
0
0
A(k)
0
右から
の変換
0
0
左から
の変換
0
非ゼロ要素
ゼロにしたい部分
影響を受ける部分
k
• 演算パターンに関する問題点
– Level-2 BLAS はデータ再利用性が低い。
キャッシュの有効利用が困難であり,単体性能が出にくい。
プロセッサ間のアクセス競合により,並列性能向上も困難
(7/48)
マルチコアプロセッサのメモリ階層
データ転送速度
非常に大
レジスタ
8~128 ワード
コア1
コア2
データ転送速度大
本当はキャッシュも
複数階層からなるが,
ここでは単純化
キャッシュ
数100Kバイト ~ 数Mバイト
帯域の
奪い合い
主メモリ
データ転送速度小
数100Mバイト ~ 数Gバイト
• 主メモリアクセスの場合,実効性能は実質的に転送速度で決まる
• Byte/Flop値: 1演算を行う時間で転送できるバイト数 ~
<1
• マルチコアでは複数のコアが帯域を奪い合うため,問題が更に深刻化
• 主メモリのデータ転送速度の遅さをカバーするには,キャッシュにデータ
がある間に演算をまとめて行う(データの再利用)ことが必要
(8/48)
BLASの利用による高性能化
• BLASとは
– Basic Linear Algebra Subprograms の略
– 個々のマシン向けにチューニングした基本行列演算のライブラリ
• BLASの種類
– Level-1 BLAS: ベクトルとベクトルの演算
• 内積 c := xT y
• AXPY演算 y: = ax + y など
– Level-2 BLAS: 行列とベクトルの演算
• 行列ベクトル積 y := Ax
• 行列のrank-1更新 A := A + xyT
– Level-3 BLAS: 行列と行列の演算
• 行列乗算 C := AB など
= A ×
A = A
+
×
C = A × B
(9/48)
BLASにおけるデータ再利用性と並列粒度
• Level-1 BLAS
– 演算量: O(N), データ量: O(N)
– データ再利用性: なし
– 並列粒度: O(N/p) (N: ベクトルの次元,p: プロセッサ台数)
• Level-2 BLAS
– 演算量: O(N2), データ量: O(N2)
– ベクトルデータのみ再利用性あり
– 並列粒度: O(N2/p)
=
A ×
A = A
+
×
• Level-3 BLAS
– 演算量: O(N3), データ量: O(N2)
– O(N)回のデータ再利用が可能
C = A × B
• 行列乗算のサイズを大きくするほど,再利用性が向上
• Byte/Flop 値の小さいマシンでも性能を出せる。
– 並列粒度: O(N3/p)
演算をできる限り level-3 BLAS で行うことが高性能化のポイント
(10/48)
Level-3 BLAS に基づく特異値分解アルゴリズム
• 2段階の二重対角化アルゴリズム(Bischof et al., ’93)
– 密行列 A をまず帯幅 L の下三角帯行列 C に変換
– 次にこの帯行列を下二重対角行列 B に変換
次数 n
下三角
帯行列化
(8/3)n3
0
8n2L
0
A
村田法
C 帯幅 L
0
0
B
• 二重対角化を2段階で行うことの利点
– 前半の変換は,level-3 BLAS (行列乗算)のみを使って実行可能
キャッシュの有効利用が可能
– 後半の変換は level-2 BLAS が中心だが,演算量は O(n2L)
• 前半部に比べてずっと小さい。
(11/48)
下三角帯行列化のアルゴリズム
ブロック鏡像変換によるブロック列の消去
– ブロック鏡像変換 H = I – WaWT
ブロックベクトル
• H は直交行列
行列
• 与えられたブロックベクトルを上三角
行列(正確には右上三角部分のみ
非零でそれ以外が零の行列)に変形
第 K ステップでの処理
0
0
0
0
右からHKR
を乗算
非ゼロ要素
左からH
を乗算
0
左からHKL
を乗算
ゼロにしたい部分
・ 消去演算は行列乗算のみで行える
・ 行列乗算のサイズ ~ L
0
影響を受ける部分
(12/48)
Level-3 BLAS に基づく特異値分解アルゴリズム
• 特異ベクトル計算を含めたアルゴリズムの全体像
n
0
L
(8/3)n3
A
A の特異ベクトル
{ui }{vi }
0
8n2L
0
C
4mn2
C の特異ベクトル
{zi }{wi }
0
B
4mn2
B の特異ベクトル
{xi }{yi }
特異値
{σi }
QR法
DC法
MR3
I-SVD
• 長所
– O(n3) の演算量を持つ部分はすべて level-3 BLAS で実行可能
• 短所
– 逆変換の演算量が 8mn2 (従来法の2倍)。ただし level-3 化可能
(13/48)
性能評価
• 評価条件
–
–
–
–
–
問題サイズ n : 250, 5000, 7500
帯幅 L
: 25, 50, 100
コア数
: 1, 2, 4, 8
Level-3 BLAS に基づく手法は Fortran で作成
従来法はLAPACKのルーチンを使用
• 計算機環境
–
–
–
–
Xeon X5355 (2.66GHz) Quad-core ×2ソケット
Red Hat Enterprise WS release 4
Intel Math Kernel Library
Intel Fortran Compiler 9
(14/48)
実験結果
• Xeon での実行時間
n=2500
n=5000
n=7500
実
行
時
間
(
秒
)
コア数
◆ LAPACK ■ Level-3 帯幅25 ▲ Level-3 帯幅50 × Level-3 帯幅100
• 結果(LAPACK(1CPU)に対する高速化率)
– LAPACK
– Level-3 BLAS
:8コアで最大 1.38倍
:8コアで最大 5.06倍
• 帯幅 L による性能差
– L = 100 が最も性能が良い
(15/48)
実験結果
• LAPACKとLevel-3 BLASの比較1
n = 2500,帯幅 L = 100
実
行
時
間
(
秒
)
1.38倍
4.01倍
コア数
LAPACK
Level-3 BLAS
• 結果(コア数による高速化率)
– LAPACK
– Level-3 BLAS
: 8コアで1.38倍
: 8コアで4.01倍
(16/48)
実験結果
• LAPACKとLevel-3 BLASの比較2
n = 7500,帯幅 L = 100
実
行
時
間
(
秒
)
1.31倍
4.36倍
コア数
LAPACK
Level-3 BLAS
• 実効時間の内訳
– 村田法(帯行列の二重対角化)の時間は L = 100 でも十分小さい
– 村田法の逆変換の実行時間が大きい
今後改良要
(17/48)
実験結果
• 対称行列の固有値分解の結果
n = 9000,帯幅 L = 100
1200
1200
帯化の逆変換
村田法の逆変換
分割統治法
村田法
帯行列化
三重対角化の逆変換
実
行
時
間
(
秒
)
1000
1000
分割統治法
三重対角化
800
800
600
600
400
400
200
200
0
0
コア数
1
2
4
8
LAPACK
1
2
4
8
Level-3 BLAS
• 結果
– 特異値分解とほぼ同じ傾向が見られる。
(18/48)
まとめ
• 特異値分解の標準的なアルゴリズムでは,二重対角化の部
分で level-2 BLAS を多用するため,マルチコアプロセッサ
で十分な性能を得られない。
• Level-3 BLAS を用いたアルゴリズムでは,演算量は増加す
るが,キャッシュの利用効率向上,アクセス競合の回避によ
り,従来法より高い性能が得られる。
• 対称行列の固有値分解についても,level-3 BLAS を用いた
アルゴリズムは効果的。
(19/48)
GPUでの特異値分解
(20/48)
研究背景
◆ GPGPU (General Purpose GPU)
一般の科学技術計算へのGPUの利用
• 単精度計算ではCPUの10倍以上の性能
• CPUを上回る性能向上ペース
• 開発環境の整備
NVIDIA GeForce8800 GTX
(単精度演算:345.6GFLOPS)
◆ CUDA (Compute Unified Device Architecture)
GPGPUのための統合開発環境
• 2006年にNVIDIA社が発表
• C/C++の拡張によりGPGPUのプログラミングが可能
• GPU向けにチューニング済みのライブラリ(BLAS,FFT)
CUDAの利用例:行列計算,重力多体計算,分子軌道計算,流体計算など
(Cf. http://www.nvidia.co.jp/object/cuda_home_jp.html)
(21/48)
CUDAによる行列計算の高速化
◆ GPU向けにプログラムの移植
• 拡張されたC言語でコーディングして,nvccでコンパイル
• 自由度の高いプログラミングが可能
• GPUの性能を十分に引き出すには様々なチューニングが必要
(スレッド数,条件分岐,メモリアクセスの連続性など)
◆ CUBLASの利用
• CUDAで提供されているBLAS(Basic Linear Algebra Subprograms)
• 標準のC言語のプログラム中で利用可能 (gccでコンパイル可能)
• 限られた基本演算(行列ベクトル積,行列乗算など)のみ
• GPU向けにチューニング済み
今回はできるだけCUBLASを使って高速化を行う
(22/48)
CUBLASの特徴
◆ 仕様の特徴
メインメモリ
• ユーザー自身がデータ転送を制御
PCI-Express
• ボードのデータはプログラム終了まで保持
(1)Set Data
(3)Get Data
GPU用メモリ
(2)SGEMM etc.
メモリ配置の工夫によるデータ転送コストの削減
GPU
グラフィックボード
◆ 性能
(GFLOPS)
※転送時間は含んでいない
140
120
100
80
60
40
20
0
SGEMV(行列ベクトル積,level-2 BLAS)
× =
SGEMM(行列乗算,level-3 BLAS)
×
0
1000
2000
3000
4000
GeForce8800 GTX & CUBLAS ver. 1.0
5000 (Size)
=
Level-2 と 3 の性能差が
CPU以上に大きい
Level-3 BLAS活用の必要性
(23/48)
特異値分解の計算手順と特徴
(a) 二重対角化:
• U1, V1:直交行列, B:下二重対角行列
A
• 大半がBLASルーチンにより計算可能
• 演算量:O(n3)
B
(b) 二重対角行列の特異値分解:
• 様々なアルゴリズム(QR法,分割統治法,MR3,I-SVDなど)
• 丸め誤差の影響を受けやすい
• 演算量: O(n2) ~ O(n3)
(c) 逆変換:
• 大半がBLASルーチンにより計算可能
• 演算量:O(n3)
◆ 計算時間の内訳
100%
逆変換
Bの特異値分解(I-SVD)
二重対角化
80%
60%
40%
Core2 Duo (1.86GHz)
& Intel MKL ver. 8.1
20%
0%
1280
2560
3840
5120
(n)
(24/48)
高速化の方針
◆ GPUの使い方
• できるだけCUBLASを使う
 行列乗算をできるだけ利用する
Bischof のアルゴリズムの利用
 メインメモリとGPU用メモリ間のデータ通信コストを抑える
行列データは基本的にGPUに置き,必要な部分のみCPUに転送
• GPU向けのプログラムの移植は最小限にする
◆ 特異値分解の計算
• 二重対角化と逆変換の計算にはGPUを利用する
 直交変換が中心のため,丸め誤差に強い
 単精度計算でも安定性の問題がない
• Bの特異値分解の計算はCPUのみで行う
 非線形方程式の求解あるいは漸化式の計算
 安定性の面から倍精度計算が望ましい
(25/48)
Bischofのアルゴリズム(再掲)
◆ 二段階の二重対角化
(a-1) 下三角帯行列化:
• U11, V11:直交行列, C:半帯幅がLの下三角帯行列
• 大部分を行列乗算により計算可能
• 演算量: 8n3/ 3 (ただし n ≫ L )
A
C
C
B
(a-2) 村田法:
• U12, V12:直交行列, B:下二重対角行列
• 演算量: 8n2L
• サイズの小さい level-2 BLAS のコールが多数発生
(b) 二重対角行列の特異値分解:
(c-1) 村田法の逆変換:
• 行列乗算により実行可能
• 演算量: 4n3
(c-2) 帯行列化の逆変換:
• 行列乗算により実行可能
• 演算量: 4n3
(26/48)
下三角帯行列化の実装法
CPU
GPU
=
=
行列乗算
ブロック鏡像変換の作成
(BLASのみでは実行不可)
(27/48)
GPUでの村田法の実装法
◆ 実装方針
• サイズの小さい BLAS2 のコールが多数発生
CUBLASでなくCUDAで実装
◆ 消去演算のパイプライン式並列化
• 第1列の二重対角化
・・・
• 第2列の二重対角化
更新範囲が重ならない
・・・
◆ GPU上での並列計算方法 (GeForce8800 GTX)
• 16個のMPで消去演算をパイプライン式に並列実行
• MP内の8個のSPで鏡像変換の作用を並列計算(MP内の共有メモリを利用)
(28/48)
特異値分解計算の全体の様子
CPU
GPU
A
A
ブロック鏡像変換の作成
ブロック鏡像変換の作用
C
C
CUBLAS
鏡像変換の作成・作用
B
H
B
H
特異値分解
U2
V2
U2
鏡像変換の合成
Q
V2
合成結果の作用
Q
U’
V’
ブロック鏡像変換の作用
U
V
U
CUBLAS
CUBLAS
V
(29/48)
性能評価
◆ 評価問題
• [-0.5 , 0.5]の乱数を要素とするn×nの正方行列の特異値分解
• n = 1280, 2560, 3840, 5120
◆ 手法
• 二重対角行列の特異値分解は全てI-SVDの倍精度計算で行う
• 二重対角化と逆変換の計算法は以下の通り(全て単精度で行う)
従来法(LAPACKのルーチン)をCPUのみで実行
Bischofの手法(自作プログラム)をCPUのみで実行
Bischofの手法(自作プログラム)をCPUとGPUで実行
※ Bischofの手法における半帯幅Lは32, 64, 128
◆ 実行環境
• CPU : Intel Core2 Duo (1.86GHz), Intel MKL ver. 8.1, gcc オプション -O3
• GPU : NVIDIA GeForce8800 GTX, CUBLAS ver. 1.0, nvcc ver. 1.0
(30/48)
二重対角化と逆変換の評価
◆ n=1280
実行時間 (sec)
10.00
逆変換(帯行列化)
逆変換(村田法)
逆変換
村田法
9.00
8.00
7.00
6.00
帯行列化
二重対角化
5.00
4.00
3.00
2.9倍の高速化
2.00
1.00
0.00
従来法
Bischof(32) Bischof(64) Bischof(128) Bischof(32) Bischof(64) Bischof(128)
CPU(2コア)
CPU(1コア) & GPU
(31/48)
特異分解計算全体の評価
◆ n=1280
実行時間 (sec)
10.00
逆変換(帯行列化)
逆変換(村田法)
逆変換
I-SVD
村田法
帯行列化
二重対角化
9.00
8.00
7.00
6.00
5.00
1.9倍の高速化
4.00
3.00
2.00
1.00
0.00
従来法
Bischof(32) Bischof(64) Bischof(128) Bischof(32) Bischof(64) Bischof(128)
CPU(2コア)
CPU(1コア) & GPU
(32/48)
二重対角化と逆変換の評価
◆ n=5120
実行時間 (sec)
400
逆変換(帯行列化)
逆変換(村田法)
逆変換
村田法
350
300
250
帯行列化
二重対角化
200
150
100
7.0倍の高速化
50
0
従来法
Bischof(32)
Bischof(64) Bischof(128) Bischof(32)
CPU(2コア)
Bischof(64) Bischof(128)
CPU(1コア) & GPU
(33/48)
特異分解計算全体の評価
◆ n=5120
実行時間 (sec)
400
逆変換(帯行列化)
逆変換(村田法)
逆変換
I-SVD
村田法
帯行列化
二重対角化
350
300
250
200
150
4.2倍の高速化
100
50
0
従来法
Bischof(32)
Bischof(64) Bischof(128) Bischof(32)
CPU(2コア)
Bischof(64) Bischof(128)
CPU(1コア) & GPU
(34/48)
Bischofの手法のステップごとの評価
◆ L=64の場合
Speedup
25.0
帯行列化
村田法
逆変換(村田法)
逆変換(帯行列化)
20.0
15.0
10.0
5.0
0.0
1280
2560
3840
5120
(n)
Speedup = CPU (2コア)での実行時間 / CPU (1コア) & GPUでの実行時間
(35/48)
精度評価
1.0E+00
CPU_LAPACK (double)
CPU_LAPACK (single)
CPU_Bischof (single)
CPU & GPU_Bischof (single)
1.0E-01
1.0E-02
1.0E-03
1.0E+00
1.0E-01
1.0E-02
1.0E-03
1.0E-04
1.0E-04
1.0E-05
1.0E-05
1.0E-06
1.0E-06
1.0E-07
1.0E-07
1.0E-08
1.0E-08
1.0E-09
1.0E-09
1.0E-10
1.0E-10
1.0E-11
1.0E-11
1.0E-12
1280
3840
2560
n
5120
1280
3840
2560
5120
n
(36/48)
まとめと今後の課題
• 本研究のまとめ
– CUBLAS/CUDAを用いて正方行列の特異値分解をGPU上で実装
– Bischof のアルゴリズムに基づき,演算量の大部分を行列乗算の形
で実行することで,高速な CUBLAS の SGEMM ルーチンを活用
– 行列を GPU メモリに置くことで,データ転送量を削減
– 特異値分解全体でデュアルコアCPUに比べ4倍程度の高速化を実現
• 今後の課題
– CPU と GPU の仕事の分担のさらなる効率化
– 新たな性能ネック部分の高速化
• 村田法(帯行列から二重対角行列への変換)
• 二重対角行列の特異値分解
– 最新の GPU や他のアクセラレータを用いた性能評価
(37/48)
メニーコアプロセッサでの
固有値分解
(38/48)
非対称行列の固有値計算
• ヘッセンベルグQR法
– 非対称行列を直交変換によりヘッセンベルグ行列に変換
– ヘッセンベルグ行列の固有値を QR 法により求める
高速化対象
対角成分 = 固有値
有限回演算
密行列
0
反復計算
ヘッセンベルグ行列
ハウスホルダー法
演算量 : (10/3)n3
0
右上三角行列
QR 法
演算量 : 10 n3 (経験値)
– 演算量の大部分を占める QR 法の高速化が必要
(39/48)
QR 法の高速化
• 在来研究
– マルチシフト QR 法 (K. Braman et al., 2002)
• 複数のシフトを導入
• 演算の大部分が行列乗算(Level-3 BLAS が利用可能)
– キャッシュの有効利用
– 並列性の向上
• 本研究
– 演算の大部分を占める行列乗算を高速化
• 浮動小数点アクセラレータの利用
– ClearSpeed社 CSX600
– 1 チップに96個の演算コアを集積
– 最適化された行列乗算ライブラリ
(40/48)
マルチシフトQR法をそのまま使った場合
12000
その他
行列乗算
実行時間(秒)
10000
8000
6000
• 乱数行列 (n = 6000)
• マルチシフト QR 法により
すべての固有値を計算
• 計算機環境
4000
– Xeon 3.2 GHz, Memory 8 GB
– ClearSpeed advance board
• CSX600 × 2
2000
0
CSX600 (無) / (有)
シフト数(ブロックサイズ)増加
• 問題点
– 実行時間の大部分を占める行列乗算(O(n3))は,CSX600 により高速化
– ただし,CSX600 の性能を引き出すには,シフト数を大きく取る必要あり
• Byte/Flop が 0.011(通常のCPUの1/10以下)と極端に小さい
• そのため,性能を出すには行列乗算のサイズが最低 1500 程度必要
– その場合,行列乗算以外の部分(O(n2))の演算量が増加してしまう
(41/48)
マルチシフトQR法の演算パターン
• バルジ追跡型の演算
– 直交変換により,(m/2)個のバルジ(出っ張り)
を対角線に沿って k 行移動させる
• 最初に 対角ブロック内でバルジを移動
– それに伴い,対角ブロック内部を更新
– 更新に用いた直交変換を1 個の行列に累積
BLAS 3
• 最後に 非対角ブロックを まとめて更新
– 累積した行列 と 非対角ブロックの行列乗算
k
0
バルジ(3×3)
逐次的に更新
まとめて更新
(BLAS 3 利用)
• シフト数 m が増えることの効果
– 行列乗算のサイズが増加
– 対角ブロック内部の更新の演算量増大
行列乗算部の性能向上
他の部分の実行時間増加
(42/48)
アルゴリズムの改良(1)
再帰型アルゴリズムへの変換
k/q
k
0
0
逐次的に更新
逐次的に更新
まとめて更新(BLAS 3 利用)
(例:再帰段数 d = 1)
(m / 2) / q 個の bulge を
k / q 行 chasing
まとめて更新(BLAS 3 利用)
Level-3 BLASの利用可能部分の増大
(43/48)
アルゴリズムの改良(2)
• 収束に伴う行列の分離
– 右下
小行列が分離 (
)
• 分離した小行列の固有値計算
– ダブルシフト QR 法を適用
– シフト数 m 増加により,小行列の次元増加
• 更新処理の分割
0
ブロック化
– 対角ブロックの更新 (右上三角化するまで)
• 更新に用いたハウスホルダー変換を
1 個の行列に累積
– 非対角ブロックの更新 (最後に 1 度だけ)
0
逐次的に更新
まとめて更新
(BLAS 3 利用)
• 累積した行列 と 非対角ブロックの行列乗算
・ Level-3 BLASの利用可能部分の増大
・ 演算量削減
(44/48)
数値実験
• テスト問題
– [0, 1] の成分を持つ
乱数行列
• ハウスホルダー法によりヘッセンベルグ化
– すべての固有値と固有ベクトルを計算
• 解法
– 従来のマルチシフトQR法
– 改良型のマルチシフトQR法
• 計算機環境
– Xeon 3.2 GHz , Memory 8 GB
– Fortran 77 倍精度演算
– ClearSpeed advance board
• CSX600 × 2
– Level-3 BLAS(行列乗算)
• CSXL Library (CSX600)
• Intel Math Kernel Library (CPU)
(45/48)
性能評価:アルゴリズムの効果
5000
実行時間(秒)
4000
3000
従来法,提案法ともに CSX600 を利用
その他
小行列の固有値計算
対角ブロックの更新
非対角ブロックの更新
2000
1000
0
従来法
提案法
従来法
提案法
(n = 3000, m = 160, q = 4) (n = 6000, m = 200, q = 5)
• 従来法に比べ,提案法は 約 1.4 倍高速
– 対角ブロックの更新:約 1.5 倍高速化(level-3 BLAS化)
– 小行列の固有値計算:10 倍以上高速化(演算量削減)
(46/48)
性能評価:CSX600 の効果
100000
実行時間(秒)
80000
60000
その他
小行列の固有値計算
対角ブロックの更新
非対角ブロックの更新
40000
n = 12000
20000
n = 6000
0
(無)
(有)
(有)
(無)
(有)
(有)
m = 100
q=5
m = 200
q=5
m = 100
q=5
m = 240
q=6
• CSX600 (+ 提案法) により
– n = 6000 のとき,約 3.5 倍高速化
– n = 12000 のとき,約 3.8 倍高速化
(47/48)
まとめと今後の課題
• 本研究のまとめ
– メニーコア型の浮動小数点アクセラレータ CSX600 を用いて非対称固有値
計算のためのマルチシフトQR法を実装
– アクセラレータの性能を引き出すには,ブロックサイズを大きく取る必要あり
– しかしその結果,level-3 BLAS 以外の(O(n2)の部分の)計算時間が増大
– 再帰型アルゴリズムへの変換などの手法を用いることで,O(n2)の部分につ
いても level-3 BLAS 化を行い,全体を高速化
• 今後の課題
– CPU とアクセラレータの仕事の分担のさらなる効率化
– 他のアクセラレータを用いた性能評価
(48/48)