Upload
shona
View
39
Download
0
Embed Size (px)
DESCRIPTION
長方行列向け特異値分解の 浮動小数点コプロセッサによる 高速化. 2007 年 1 月 18 日 HPCS2007. 深谷 猛,山本 有作 (名古屋大学) 畝山 多加志 (京都大学) 堀 玄,梅野 健 (理化学研究所). 概要. 背景と目的 CSX600 のアーキテクチャと性能 長方行列の特異値分解アルゴリズム CSX600 向けの高速化手法 性能評価 まとめと今後の課題. 1 . 背景と目的. 長方行列の特異値分解 応用 画像処理 電子状態計算 ( Filter Diagonalization Method ) - PowerPoint PPT Presentation
Citation preview
長方行列向け特異値分解の浮動小数点コプロセッサによ
る高速化
2007 年 1 月 18 日 HPCS2007
深谷 猛,山本 有作 (名古屋大学)畝山 多加志 (京都大学)
堀 玄,梅野 健 (理化学研究所)
2
概要
• 背景と目的• CSX600 のアーキテクチャと性能• 長方行列の特異値分解アルゴリズム• CSX600 向けの高速化手法• 性能評価• まとめと今後の課題
3
1 . 背景と目的
: m×n :::U : m×n 列直交行列V : n×n 直交行列 : n×n ::::
= × ×
• 長方行列の特異値分解
• 応用– 画像処理– 電子状態計算 ( Filter Diagonalization Method )– 文書検索 ( Latent Semantic Indexing )– 各種統計計算 (主成分分析,最小二乗法)
数万 × 数千以上の行列の特異値分解 高速化が必要
4
• Cell– 1 個の汎用 CPU コア + 8 個の専用コア– 256GFLOPS (単精度)
• GRAPE-DR– 512 個の演算コア– 512GFLOPS (単精度)– 384GFLOPS (倍精度)
• ClearSpeed CSX600– 1 個の汎用コア + 96 個の演算コア– 48GFLOPS (倍精度)
高い浮動小数点能力を持つ専用プロセッサの登場
5
専用プロセッサの特徴
• 多数の浮動小数点演算器– 極めて高い GFLOPS 値
• メモリアクセス性能は相対的に低下– バンド幅はあまり大きくなっていない– PCI バス経由でコプロセッサとして使う場合は,特に顕著
メモリネックを軽減できるアルゴリズムが性能向上の鍵
6
• 行列乗算 C:=C+AB
– 演算量に比べ,データ量は O(1/N)
– キャッシュをうまく使うことで,メモリネックを軽減可能
行列乗算を効率的に使えれば,一般のアルゴリズムも高速化可能( LAPACK の基本的な考え方)
Level-3 BLAS の利用
= ×+C A BCデータ量: O(N 2)演算量: O(N 3)
※行列ベクトル積( y := y + Ax)では,データ量・演算量ともにO(N 2)
7
本研究の目的
• 長方行列の特異値分解アルゴリズムを CSX600 を利用して高速化する
• 既存のアルゴリズムをそのまま使用せず,行列乗算をなるべく効率的に使う形で CSX600 向けに最適化する
• 性能評価を行い,更なる高速化に向けての課題を明らかにする
8
2 . CSX600 のアーキテクチャと性能
• CSX600 チップ– 1 個の主プロセッサ– 96 個の演算専用プロセッサ
• 64 ビット• 倍精度 2 演算 / サイクル• 128B レジスタファイル• 6KB SRAM
– 250MHz で動作– ピーク性能: 48GFLOPS
• ClearSpeed Advance ボード– 2 個の CSX600 プロセッサ– 1GB DRAM– PCI-X バスにより PC 本体と接続– ピーク性能: 96GFLOPS
9
• Software Development Kit– コンパイラ: Cn 言語によるチップ内並列プログラミング– デバッガ– シミュレータ
• CSXL ライブラリ– ClearSpeed Advance ボード用の BLAS– 行列データを PC の主メモリ上に置いてコール– PC ⇔ ボード間の転送はライブラリ内で実行– 公称性能: DGEMM (行列乗算)で sustained 50GFLOPS– 現状では非常に制約が多い
• 使用可能なルーチンは DGEMM と DGETRF のみ• DGEMM では, M , N , K 448 ≧ でないと動かない
• CSFFT ライブラリ
CSX600 の利用環境
今回はこれを利用
10
CSXL DGEMM の性能 (1)
• サイズパラメータのうち 2 個が 450 の場合
– 性能は最大でも 11GFLOPS 程度– 他の 2 個が 450 の場合でも,ほぼ同じ結果
0
10000
20000
30000
40000
50000
1000 2000 3000 4000 5000 6000
A, B 非転置A B 非転置, 転置
性能
(M
FL
OP
S)
+= ×AC BM
N K
・ M = K = 450
・ 1000 ≦ N 6000≦
CSX600 の性能が活かせない
N
11
CSXL DGEMM の性能 (2)
• サイズパラメータのうち 1 個のみが 450 の場合
– M = N が大きい場合,性能は 40GFLOPS 以上– 他の 2 個が大きい場合でも,ほぼ類似の性能
0
10000
20000
30000
40000
50000
1000 2000 3000 4000 5000 6000
A, B 非転置A B 非転置, 転置
性能
(M
FL
OP
S)
+= ×AC B
M
N K
・ K = 450
・ 1000 ≦ M = N 6000≦
性能を引き出すには,サイズパラメータのうち少なくとも 2 個を大きい値にとる必要あり
N
12
3 . 長方行列の特異値分解アルゴリズム
n×n 上三角行列 R
二重対角行列 B
B の特異値・特異ベクトル( B と R の特異値は同
じ)
R の左特異ベクトル
二重対角化 (8/3)n3
特異値分解 O(n2) ~ O(n3)
逆変換 2n3 ~ 4n3
m×n 密行列 A
R の右特異ベクトル
A の左特異ベクトル
A の右特異ベクトル
QR 分解 A=QR 2mn2
= Q の乗算 4mn2
13
M >> N の場合の実行時間
• M = 40000 の場合
0
50
100
150
200
250
N=1000 N=2000
Qの乗算逆変換特異値分解
二重対角化QR分解
実行時間
(秒)
環境・ Xeon 3.2GHz
・ g77 -O3 + Intel MKL
各部分のアルゴリズム(詳細は後述)・ QR 分解: ブロック化 + 再帰的 QR
・ 二重対角化: Bischof + 村田法・ 特異値分解: 分割統治法
QR 分解と Q の乗算の時間が支配的
14
4 . CSX600 向けの高速化手法
• QR 分解と Q の乗算– 行列乗算を効率的に利用できるようアルゴリズムを変更– CSXL で実行
• 二重対角化および逆変換– 二重対角化は Bischof のアルゴリズムと村田法を利用– CSXL は利用しない( CPU のみで実行)
• 二重対角行列の特異値分解– 行列乗算中心のアルゴリズムである分割統治法を利用– LAPACK の DBDSDC を利用( CSXL が使える部分は使う)
高速化の方針
15
ハウスホルダー変換による 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 を使えない
16
複数のハウスホルダー変換の合成
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 –=
複数のハウスホルダー変換の作用を,行列乗算としてまとめて実行可能
17
QR 分解における行列乗算の利用法 Ⅰ単純なブロック化( LAPACK で使用)
H1 H2 H3
H3H2H1= I – Y1T1Y1T
I – Y1T1Y1T I – Y2T2Y2
T I – Y3T3Y3T
分解 分解 分解更新 更新
•ブロックの QR 分解は level-2 BLAS
•演算量: L ( ブロック幅 ) << n のとき 2mn2
•CSXL を使うには L 450 ≧ ⇒ level-2 BLAS の演算量の増加
L
18
QR 分解における行列乗算の利用法 Ⅱ再帰的 QR 分解
(I – YL TL YLT )
×(I – YR TR YRT )
= I – Y T YT
I – YR TR YRTI – YL TL YL
T
分解 更新 分解 合成
I – Y’L T’L Y’LT
I – YL TL YLT
•ほぼ全ての演算が行列乗算•演算量: 3mn2
19
QR 分解における行列乗算の利用法 Ⅲ本研究で採用した方法
I – Y1T1Y1T I – Y2T2Y2
T I – Y3T3Y3T
分解 分解 分解更新 更新
•ほぼ全ての演算が行列乗算•演算量:Ⅰ (2mn2) とⅡ (3mn2) の中間•ブロック幅 L を適切に選ぶことで,他の2方法より高速になる可能性がある
I – Y1 T1 Y1T
L
20
Q の乗算
Ⅰ (単純なブロック化)・Ⅲ(本研究で採用した方法)の場合
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
21
5 . 性能評価
• Xeon 3.2GHz ,メモリ 2GB• g77 -O3 + Intel Math Kernel Library• ClearSpeed Advance ボード
評価環境
• [-0.5,0.5] の一様乱数を要素とする m×n 乱数行列の特異値分解• 10000 ≦ m 40000≦ , 1000 ≦ n 3000≦
評価例題
• ClearSpeed ボードでの 3 種の QR 分解法の性能比較• 特異値分解全体の ClearSpeed ボードによる高速化効果• 精度評価
評価項目
22
ClearSpeed ボードでの 3 種の QR 分解法の性能比較
実行時間
(秒)
0
10
20
30
40
50
60
70
80
90
100
110
120
130
140
I II III III
Qの乗算
QR分解
L=500 L=500 L=1000
m = 10000 , n = 3000
0
20
40
60
80
100
120
140
160
180
200
220
240
260
280
I II III IIIL=500 L=500 L=1000
m = 20000 , n = 3000
•方法Ⅰは QR 分解が極めて遅い•方法Ⅱは Q の乗算が最高速•方法Ⅲは L を適切に選ぶことで,全体として最高速になる
23
特異値分解全体の ClearSpeed ボードによる高速化効果
0
10
20
30
40
50
60
70
80
90
MKL CS MKL CS
Qの乗算
逆変換
特異値分解
二重対角化
QR ( Ⅲ )分解 方法
実行時間
(秒)
m = 10000
n = 1000 n = 2000
0
50
100
150
200
250
MKL CS MKL CS
m = 40000
n = 1000 n = 2000
•QR 分解は最大で 2倍程度高速化•Q の乗算は最大で 5倍程度高速化•特異値分解全体としては最大で 2.3倍高速化
24
m , n による加速率の変化
10000
20000
3000040000
10002000
30000
0.5
1
1.5
2
2.5
加速率
m
n 0
5000
10000
15000
20000
25000
30000
35000
40000
1000 2000 3000
QR分解Qの乗算
n
性能
(M
FLO
PS
)
特異値分解全体の加速率 n による性能変化( m=30000 )
加速率は m, n が大きくなるほど増大する•m / n の増加: 特異値分解全体に対して CSXL を使える部分の割合が増加•n の増加 : QR 分解・ Q の乗算の部分における CSXL の性能が向上
ただし, CSXL を使わない部分( R の特異値分解)の演算量も増加
25
精度評価
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
•左特異ベクトルの直交性,残差とも CS の方が精度が悪い•悪化の程度は一桁以下
26
6 . まとめと今後の課題
• ClearSpeed Advance ボードと CSXL を用いて,長方行列向け特異値分解の高速化を行った
• QR 分解のアルゴリズムを行列乗算を効果的に使う形に改良することで, ボードによる高速化の効果を高めた
• 特異値分解全体では, 40000×2000 程度の行列においてボードを使うことで 2.3 倍の高速化が得られた
• 行列の規模が大きくなるほど高速化が期待できる
本研究のまとめ
今後の課題• より大規模な行列で性能評価• SDK の使用による高速化• 他の行列計算アルゴリズムへの CSX600 の適用