応用数理工学特論 第 10 回
description
Transcript of 応用数理工学特論 第 10 回
応用数理工学特論 第 10 回
2008 年 7 月 3 日
計算理工学専攻山本有作
2
目次
1 . はじめに
2 . 共有メモリ型並列計算機での特異値分解の高
速化
~ 正方行列の特異値分解 ~
3 . SIMD 超並列プロセッサでの特異値分解の高
速化
~ 長方行列の特異値分解 ~
3
1 . はじめに
4
特異値分解とは
: n×n :::U : n×n 直交行列V : n×n 直交行列 : n×n ::::= × ×n
n n
n
• 任意の実正方行列 A は,直交行列 U ,対角行列 ,直交行列 VT の積に分解できる。
• 参考• A が実対称行列の場合, A=UDUT
• A が任意の実行列の場合, A=SDS–1
• A が任意の実行列の場合, A=URUT
5
特異値と特異ベクトル
• A=UV T において,– V の各列 vi を右特異ベクトル
– U の各列 ui を左特異ベクトル
– の要素 i を特異値,と呼ぶ。
• 特異ベクトルの性質– AV=U より, Avi = i ui
– UTA= V T より, uiTA = i vi
T
6
固有値分解(対角化)との関係
• A=UV T より, ATA= VUTUV T = VV T
よって, V は ATA を対角化する直交行列 A の右特異ベクトル = ATA の固有ベクトル
• A の特異値 = ATA の固有値の平方根
• 一方, AAT= UV TVU T = UU T
よって, V は ATA を対角化する直交行列 A の左特異ベクトル = AAT の固有ベクトル
7
特異値分解を求めるアルゴリズム
• 二重対角行列への変換
• 二重対角行列の特異値分解
• A の特異値分解の計算
よって, U= U0U1 , V= V0V1 とおくと(逆変換),
U0TAV0 = B (U0, V0: 直交行列 )
U1TBV1 = (U1, V1: 直交行列 )
U1TU0
TAV0V1 =
A = UV T
8
特異値分解の応用
• 信号処理• 画像処理• 電子状態計算
– Filter Diagonalization Method
• 文書検索– Latent Semantic Indexing
• 各種統計計算– 主成分分析– 独立成分分析– 最小二乗法
9
対象とする計算機
10
共有メモリ型並列計算機
• アーキテクチャ– 複数のプロセッサ( PU )がバスを 通してメモリを共有– PU はそれぞれキャッシュを持つ
• 例1: マルチコアプロセッサ– Intel 社 デュアルコア Xeon– 1 チップに 2 個のプロセッサを共有メモリ型で集積
• 例2: 共有メモリ型のスーパーコンピュータ– 富士通 PrimePower HPC2500– 最大 128 個の PU を共有メモリで結合
PU0 PU1 PU2 PU3
メモリ
キャッシュ
バス
デュアルコア Xeon PrimePower HPC2500
11
SIMD 超並列プロセッサ
• 1 チップに 100 個単位のプロセッサを搭載• 全プロセッサが別々のデータに対して同じ命令を実行する
SIMD ( Single Instruction Multiple Data )型の並列計算機– 線形計算に最適
• 汎用プロセッサの 10 ~ 100 倍の性能– ClearSpeed 社 CSX600: 96 プロセッサ, 48GFLOPS (倍精度)– 東大 GRAPE-DR: 512 プロセッサ, 256GFLOPS (倍精度)
• 演算性能は極めて高いが,データ転送速度は汎用プロセッサと同程度
• データ再利用性の向上が,共有メモリ型並列計算機以上に重要
12
512 コアプロセッサ( GRAPE-DR )
13
グラフィックスプロセッサ( GPU )
• GPU ( Graphics Processing Unit )の高速化– CPU を大きく上回るペースで演算性能が向上– グラフィックスメモリも大容量化・高速化
nVIDIA 社 GeForce8800GTX・ 240 個の演算プロセッサ・ 演算性能: 933GFLOPS (単精度) 90GFLOPS(倍精度)・ メモリ: 1GBGPU を汎用の数値計算に使う GPGPU ( General-Purpose
GPU )が注目を集める– 計算機としてのアーキテクチャは SIMD 超並列型
14
2 . 共有メモリ型並列計算機での特異値分解の高速化
~ 正方行列の特異値分解 ~
15
正方行列の特異値分解
: n×n :::U : n×n 直交行列V : n×n 直交行列 : n×n ::::
<応用>– 各種統計計算– より応用の多い長方行列の特異値分解は,正方行列の特異値分解
に帰着される。
= × ×n
n n
n
16
従来の特異値分解アルゴリズムとその問題点
U0TAV0 = B
(U0, V0: 直交行列 )
Bvi =σi xi
BTxi =σi yi
vi = V0 yi
ui = U0 xi
二重対角化
二重対角行列の特異値・特異 計算ベクトル
逆変換
二重対角行列 B
B の特異値 {σi } , 特異ベクトル {xi }{yi }
A の特異ベクトル {ui }, {vi
}
密行列 A 計算内容 計算手法
ハウスホルダー法
QR 法分割統治法MR3 アルゴリズムI-SVD アルゴリズム
逆変換
17
各部分の演算量と実行時間
(8/3) n3
O(n2)~ O(n3)
4mn2
二重対角化
二重対角行列の特異値・特異 計算ベクトル
逆変換
A の特異ベクトル {ui }, {vi
}
密行列 A 演算量
・二重対角化が実行時間の 大部分を占める・速度向上率が低い
(左右 m 本ずつの特異ベクトル)
実行時間(全特異 )ベクトル
0
100
200
300
400
500
600
1 2 4
逆変換分割統治法二重対角化
n = 5000 , Xeon 2.8GHz ( 1 ~ 4PU )LAPACK での実行時間(秒)
18
• ハウスホルダー法による二重対角化– 鏡像変換 H = I – wwT による列の消去
• H は対称な直交行列• 与えられたベクトルの第1成分以外をゼロにする• HA(k) = A(k) – u (utA(k))
• 第 k ステップでの処理
特異値分解アルゴリズムの高速化
左から H
を乗算
ベクトル
k
0
0
0
0
0
0
ゼロにしたい部分 影響を受ける部分非ゼロ要素
右から HkR
を乗算
左から HkL
を乗算
A(k)
行列ベクトル積rank-1更新
19
ハウスホルダー法の特徴と問題点
• 特徴– 全演算量のほとんどが, BLAS2 である行列ベクトル積と
行列の rank-1更新で占められる。• 全演算量: 約 (8/3)n3
• 行列ベクトル積の演算量: 約 (4/3)n3
• rank-1更新の演算量: 約 (4/3)n3
• 問題点– BLAS2 のため,行列データの再利用性なし
• キャッシュミス,メモリ競合の影響大
– 共有メモリ型並列計算機上で高性能が出ない理由
20
• 基本的なアイディア– 密行列 A をまず帯幅 L の下三角帯行列 C に変換– 次にこの帯行列を下二重対角行列 B に変換
• 二重対角化を2段階で行うことの利点– 下三角帯行列への変換は, BLAS3 のみを使って実行可能 キャッシュの有効利用が可能– 下三角帯行列から二重対角行列への変換の演算量は O(n2L)
• 前半部に比べてずっと小さい。
BLAS3 に基づく二重対角化アルゴリズム
0
0
A B
次数 n
約 (8/3)n3 O(n2L)
下三角帯行列化 村田法0
0
帯幅 LC
21
下三角帯行列化のアルゴリズム
ブロック鏡像変換によるブロック列の消去– ブロック鏡像変換 H = I – WαWT
• H は直交行列• 与えられたブロックベクトルを上三角
行列(正確には右上三角部分のみ非零でそれ以外が零の行列)に変形
• HA(k) = A(k) – WαWTA(k)
第 K ステップでの処理
ゼロにしたい部分 影響を受ける部分非ゼロ要素
左から H
を乗算
ブロックベクトル
0
0
0
0
0
0
右から HKR
を乗算
左から HKL
を乗算
行列積 = BLAS3
A(k)
22
帯行列の二重対角化(村田法)
左側からの直交変換で更新された要素
左側からの直交変換で更新された要素
・演算量は 8n2L
・並列化も可能
23
本アルゴリズムの長所と短所
• 長所– BLAS3 の利用により,二重対角化の性能を向上可能
• 同様のアイディアに基づく三重対角化アルゴリズムでは,高い単体性能・並列性能を確認済み
• 短所– 特異ベクトル計算のための計算量・記憶領域が増大
• 2段階の逆変換が必要• 詳しくは次のスライドで説明
– 二重対角化の高速化効果が大きければ,計算量増大を考慮しても全体としては高速化できると予想
– 特に,求める特異ベクトルが少ない場合は効果が大きいはず。
24
特異ベクトルの計算手法
• 二重対角行列の特異ベクトルを計算して2回逆変換
• 長所– 二重対角行列の特異値・特異ベクトルを求める任意の手法が適用可能
• 短所– 逆変換の演算量が 8mn2 (従来法の 2 倍)。ただし BLAS3 で実行可
能– 村田法の変換をすべて記憶するため, n2 の記憶領域が余計に必要
0
0
A B
n
4mn2 4mn2
0
0C
B の特異ベクトル{xi }{yi }
特異値{σi }
L
C の特異ベクトル{zi }{wi }
A の特異ベクトル{ui }{vi }
QR 法DC 法MR3
I-SVD
25
性能評価
26
性能評価
• 評価環境– Xeon (2.8GHz), 1 ~ 4PU
• Linux + Intel Fortran ver. 8.1• BLAS: Intel Math Kernel Library• LAPACK: Intel Math Kernel Library• ピーク性能: 5.6GFLOPS/CPU
– 富士通 PrimePower HPC2500 (2.0GHz), 1 ~ 32PU• 富士通 Fortran• BLAS: 富士通並列化版 BLAS• LAPACK: 富士通並列化版 LAPACK• ピーク性能: 8GFLOPS/CPU
• 評価対象・条件– BLAS3 に基づくアルゴリズムと LAPACK の性能を比較– n = 1200 ~ 20000 の乱数行列の特異値分解(全特異ベクトルを計
算)• BLAS3 アルゴリズムにとっては一番不利な条件
– BLAS3 アルゴリズムの L (半帯幅)は各 n ごとに最適値を使用
27
Xeon での実行時間
• プロセッサ数を変えたときの実行時間
• 結果– BLAS3 アルゴリズムでは PU 数に応じて実行時間が順調に減少
• 4PU での加速率は 3 ~ 3.2 倍– 4PU の場合は BLAS3 アルゴリズムが従来法より高速
0
2
4
6
8
10
12
14
16
1 2 4
level-3LAPACK
0
20
40
60
80
100
120
1 2 4
level-3LAPACK
0
100
200
300
400
500
600
700
800
1 2 4
level-3LAPACK
n = 1200 n = 2500 n = 5000
実行時間
(
秒
)
PU 数
28
HPC2500 での実行時間
• プロセッサ数を変えたときの実行時間
• 結果– BLAS3 アルゴリズムは従来法に比べて最大 3.5 倍高速– プロセッサ数が多いとき加速率が鈍るのは,非並列化部分
(ブロック鏡像変換の作成など)の影響と思われる。
0
100
200
300
400
500
600
700
800
1 2 4 8 16 32
level-3LAPACK
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
1 2 4 8 16 32
level-3LAPACK
0
2000
4000
6000
8000
10000
12000
14000
1 2 4 8 16 32
level-3LAPACK
n = 5000 n = 10000 n = 20000
実行時間
(
秒
)
PU 数
3.5 倍
29
• Xeon , n=5000 の場合
• 考察– BLAS3 アルゴリズムでは,どの部分の実行時間も順調に減少
– 逆変換 1 (村田法の逆変換)の占める時間が大きい。 この部分について,さらに高速化が必要– 必要な特異ベクトルの本数が少ない場合, BLAS3 アルゴリ
ズムはさらに有利
0
100
200
300
400
500
600
700
800
1 2 4
2逆変換1逆変換
分割統治法村田法帯行列化
両手法の実行時間の内訳
0
100
200
300
400
500
600
1 2 4
逆変換分割統治法二重対角化
30
• HPC2500 , n=10,000 の場合
• 考察– BLAS3 アルゴリズムでは,どの部分の実行時間も順調に減少
– 従来法は,二重対角化の部分の加速が鈍い。• ただし, 32PU で 6 倍程度は加速• メモリバンド幅が大きいためと思われる。
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
1 2 4 8 16 32
2逆変換1逆変換
分割統治法村田法帯行列化
両手法の実行時間の内訳
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
1 2 4 8 16 32
逆変換分割統治法二重対角化
31
まとめと今後の課題
33
3 . SIMD 超並列プロセッサによる特異値分解の高速化
~ 長方行列の特異値分解 ~
34
長方行列の特異値分解
= × ×m
nn
n
: m×n :::U : m×n 列直交行列V : n×n 直交行列 : n×n ::::
<応用>– 画像処理– 電子状態計算 ( Filter Diagonalization Method )– 文書検索 ( Latent Semantic Indexing )– 各種統計計算 (主成分分析,最小二乗法)
10万
5 千
(例)
35
• GRAPE-DR– 512 個の演算コア– 512GFLOPS (単精度)– 256GFLOPS (倍精度)
• ClearSpeed CSX600– 1 個の汎用コア + 96 個の演算コア– 48GFLOPS (倍精度)
高い演算能力を持つ SIMD 超並列プロセッサ
•多数の演算装置の集積により極めて高い FLOPS 値•メモリアクセス性能の相対的な低下によるメモリネック
• GeForce GTX280 ( GPU )– 240 個の演算コア– 933GFLOPS (単精度)– 90GFLOPS (倍精度)
36
• 行列積 C:=C+AB
– 演算量に比べ,データ量は O(1/N)
– キャッシュをうまく使うことで,メモリネックを軽減可能
行列積を効率的に使えれば,一般のアルゴリズムも高速化可能
Level-3 BLAS (行列積)の利用
= ×+C A BCデータ量: O(N 2)演算量: O(N 3)
※ 行列ベクトル積( y := y + Ax )では,データ量・演算量ともにO(N 2)
37
本章の目的
• 長方行列の特異値分解アルゴリズムを CSX600 を利用して高速化する
• 既存のアルゴリズムをそのまま使用せず,行列積をなるべく効率的に使う形で CSX600 向けに最適化する
• 性能評価を行い,更なる高速化に向けての課題を明らかにする
38
ClearSpeed CSX600について
39
CSX600 のアーキテクチャと性能
• CSX600 チップ– 1 個の主プロセッサ– 96 個の演算専用プロセッサ
• 64ビット• 倍精度 2 演算 / サイクル• 128B レジスタファイル• 6KB SRAM
– 250MHz で動作– ピーク性能: 48GFLOPS
• ClearSpeed Advance ボード– 2 個の CSX600 プロセッサ– 1GB DRAM– PCI-X バスにより PC 本体と接続
– ピーク性能: 96GFLOPS
40
• Software Development Kit– コンパイラ: Cn 言語によるチップ内並列プログラミング– デバッガ– シミュレータ
• CSXL ライブラリ– ClearSpeed Advance ボード用の BLAS– 行列データを PC の主メモリ上に置いてコール– PC ⇔ ボード間の転送はライブラリ内で実行– 公称性能: DGEMM (行列乗算)で 50GFLOPS
• CSFFT ライブラリ
CSX600 の利用環境
今回はこれを利用
41
CSXL の DGEMM の性能
0
10000
20000
30000
40000
50000
1000 2000 3000 4000 5000 6000
A,B:非転置A B:非転置, :転置
m = k = 450 1000 ≦ n 6000≦
0
10000
20000
30000
40000
50000
1000 2000 3000 4000 5000 6000
k = 450 1000 ≦ m = n 6000≦
性能
(M
FL
OP
S)
A B×C +=
n k
m
kn
BA ×C +=m
性能を引き出すにはサイズパラメータのうち少なくとも2個を大きい値にとる必要がある
n n,m
42
CSX600 向けの 高速化手法
43
長方行列の特異値分解の手順
QR 分解 A = QR
二重対角化 R = U1 B V1T
特異値分解 B = U2 V2T
逆変換 R = U’ V T
V = V1 V2
U’ = U1 U2
Q の乗算
A = U V TU = QU’
Am
n
Qm
n
R
n
n
B
n
n
44
長方行列の特異値分解の手順
QR 分解 A = QR
二重対角化 R = U1 B V1T
特異値分解 B = U2 V2T
逆変換 R = U’ V T
V = V1 V2
U’ = U1 U2
Q の乗算
A = U V TU = QU’
2mn2
(8/3)n3
O(n2) ~ O(n3)
2n3 ~ 4n3
4mn2
実行時間の大部分を占める
m ≫ n (例: m =100000, n =5000 )の場合 計算量
45
高速化の方針
QR 分解 A = QR
二重対角化 R = U1 B V1T
特異値分解 B = U2 V2T
逆変換 R = U’ V T
V = V1 V2
U’ = U1 U2
Q の乗算
A = U V TU = QU’
§CSX600 を利用する部分
§CSX600 を利用しない( CPU のみで実行する)部分
LAPACK の DGEBRD
LAPACK の DORMBR
I-SVD ( IDBDSLV )
行列乗算のみ高速化可能
行列乗算中心のアルゴリズム
46
ハウスホルダー変換による QR 分解
ハウスホルダー変換による列の消去
上三角化と QR 分解
H1 A = ( I – t1 y1 y1T ) A
= A(1)
A(1)A
Hn ・・・ H2 H1 A = A(n)
・・・
A(2) A(n) = R
A = H1 H2 ・・・ Hn A(n) = QR
level-2 BLAS
CSXL を使えない
47
複数のハウスホルダー変換の合成
Compact WY representation
Hn ・・・ H2 H1 = ( I – tn yn ynT ) ・・・ ( I – t2 y2 y2
T )( I – t1 y1 y1T )
= I – Yn Tn YnT
ただし, Yn = [ y1 | y2 | ・・・ | yn] ( m×n 行列)
Tn : n×n 下三角行列
× ×I – × ×I –・・・ × ×I –=
複数のハウスホルダー変換の作用を,行列乗算としてまとめて実行可能
48
ハウスホルダー変換のブロック化
( I – Y T
YT ) =
=( I – Y T
YT )
複数のハウスホルダー変換の合成
=( I – Y T
YT )
行列乗算としてまとめて作用
CSX 600で高速化
=HL ・・・ H1
49
(Ⅰ)ブロック QR 分解( LAPACK で使用)
H1 H2 H3
H3H2H1= I – Y1T1Y1T
I – Y1T1Y1T I – Y2T2Y2
T I – Y3T3Y3T
分解 分解 分解更新 更新
•ブロックの分解( )は行列・ベクトル積•演算量: L ( ブロック幅 ) << n のとき 2mn2
•CSX600 を使うには L 450 ≧ ⇒行列・ベクトル積の演算量の増加
L
・・・行列乗算
50
(Ⅱ)再帰的 QR 分解
(I – Y1T1Y1T)
×(I – Y2T2Y2T)
= I – Y T YT
I – Y2T2Y2TI – Y1T1Y1
T
分解 更新 分解 合成
I – Y11T11Y11T
•ほぼ全ての演算が行列乗算•演算量: 3mn2
•Q の乗算の効率が良い
I – Y1T1Y1T
・・・行列乗算
51
(Ⅲ)再帰的 QR 分解の拡張
I – Y1T1Y1T I – Y2T2Y2
T I – Y3T3Y3T
分解 分解 分解更新 更新
•ほぼ全ての演算が行列乗算•演算量:Ⅰ (2mn2) とⅡ (3mn2) の中間•ブロック幅 L を適切に選ぶことで,他の2方法より高速になる可能性がある
I – Y1T1Y1T
L
・・・行列乗算
52
Q の乗算
(Ⅰ)ブロック QR 分解・(Ⅲ)再帰的 QR 分解の拡張の場合
Q = ( I – Yn/L Tn/L Yn/LT ) ・・・ (I – Y1 T1 Y1
T )
× ×I – ・・・
•行列サイズの大きいⅡの方が CSXL の性能を引き出せる•Ⅰ ・Ⅲの方が使用するメモリの量が少ない
× ×I –L
(Ⅱ)再帰的 QR 分解の場合Q = I – Y T YT
× ×I –n
53
性能評価
54
評価内容
• Xeon 3.2GHz ,メモリ 8GB• Intel Fortran -O3 + Intel Math Kernel Library• ClearSpeed Advance ボード
評価環境
• [-0.5,0.5] の一様乱数を要素とする m×n 乱数行列の特異値分解• 10000 ≦ m 100000≦ , 1000 ≦ n 4000≦
評価例題
• ClearSpeed ボードでの 3 種の QR 分解法の性能比較• 特異値分解全体の ClearSpeed ボードによる高速化効果• 精度評価
評価項目
55
CSX600 使用時の各手法の性能比較(1)
0
200
400
600
800
1000
1200
1400
1600
1800
2000
500 1000 1500 2000
Qの乗算
QR分解
m =100000 n =4000
実行時間
(秒)
Ⅰ .ブロック QR 分解
Ⅱ .再帰的 QR
分解 Ⅲ .再帰的 QR 分解の拡張(数字はブロック幅)
56
CSX600 使用時の各手法の性能比較(2)
0
20
40
60
80
100
120
140
160
500 1000 1500 2000
Qの乗算
QR分解
m =10000 n =4000
実行時間
(秒)
Ⅰ .ブロック QR 分解
Ⅱ .再帰的 QR
分解Ⅲ .再帰的 QR 分解の拡張(数字はブロッ
ク幅)
57
0
5
10
15
20
25
PC PC+CSX PC PC+CSX
全体Qの乗算Rの特異値分解QR分解
0
500
1000
1500
2000
2500
3000
PC PC+CSX PC PC+CSXLAPACK の DGESDD
再帰的 QR 分解を利用 LAPACK の DGESDD
再帰的 QR 分解を利用
実行時間
(秒)
m = 10000 n=1000 (m:n = 10:1)
CSX600 による特異値分解全体の高速化
m = 100000 n=4000 (m:n = 25:1)
1.2 倍
1.8 倍
1.3 倍
3.1 倍
58
行列サイズ による高速化率の変化(1)
0
1
2
3
4
5
4000 3000 2000 1000
10000
50000
100000
§ 再帰的 QR 分解を用いた場合
高速化率
m
n
高速化率= PC 単体での実行時間/ PC + CSX600 での実行時間
59
各部分の高速化率の変化
0
1
2
3
4
5
6
7
8
9
10
1000 2000 3000 4000
QR分解
Qの乗算
高速化率
n
m = 50000
0
1
2
3
4
5
6
7
8
9
10
1000 2000 3000 4000
m = 100000
n
60
行列サイズ による高速化率の変化(2)
0
1
2
3
4
5
4000 3000 2000 1000
10000
50000
100000
高速化率
m
n
§LAPACK の DGESDD を用いた場合
高速化率= PC 単体での実行時間/ PC + CSX600 での実行時間
61
精度評価
1.00E-13
1.00E-12
1.00E-11
1.00E-10
10000 20000 30000 40000 10000 20000 30000 40000 10000 20000 30000
MKL
CS
∥U
VT –
A∥ F
∥UTU
– I∥
F
1.00E-13
1.00E-12
1.00E-11
1.00E-10
10000 20000 30000 40000 10000 20000 30000 40000 10000 20000 30000
左特異ベクトルの直交性 残差
m :n
:1000 2000 3000
m :n
:1000 2000 3000
62
まとめと今後の課題
63
まとめと今後の課題
§ まとめ
§ 今後の課題
• CSX 600による長方行列特異値分解の高速化を行った
• CSX 600に適した QR 分解アルゴリズムの選択を行った
• 適切な QR 分解のアルゴリズムを選ぶことで,最大で3倍程度の高速化ができた
• より CSX600 に適したQR分解アルゴリズムの開発
•CSX600 による R の特異値分解の高速化
•他の行列計算への CSX600の適用