卒論発表資料(PowerPoint)

Download Report

Transcript 卒論発表資料(PowerPoint)

メモリ使用量の少ないGCR法の提案
理学部情報科学科
金田研究室
指導教官 金田 康正
工藤 誠
GCR法の特徴
連立一次方程式の反復解法(Krylov部分空間法)の一つ
[Eisenstat, 83]
Krylov部分空間法の分類
Approach
Method
The
Ritz-Galerkin
approach
The minimum
residual
approach
The
petrov-Galerkin
approach
The
minimum error
approach
CG
GMRES
MINRES
GCR
Bi-CG
QMR
CGS
Bi-CGSTAB
SYMMLQ
GMERR
広範囲の非対称問題が解ける
並列性が高い
GMRESR法[Vorst,91]の一部として使われている
GCR法の 問題点
計算量が大きい(O(k N)の計算が3回)
メモリ使用量が大きい(GMRESの約2倍)
2
for n  0,1,k until rn  tol do :
begin
 A pn ,rn 
 A pn , A pn 
xn1  xn   n pn
rn1  rn   n Apn
n

A p , A K1r
 n,i   iA p , A p n1  ,
i
i
pn1  K
n
rn1    n,i pi
1
Apn1  AK
end
in
i 0
n
rn1    n,i Api
1
i 0
計算量大!
メモリ使用量大!
過去の研究
計算量を減らすefficient GCR(eGCR)法が
考案された[Yang,95]
しかし、依然としてメモリ使用量が大きい
という問題は解決されていない!!
提案する2つのアルゴリズム
Memory efficient GCR(meGCR)法


計算量はeGCR法とほぼ同じ
メモリ使用量はeGCR法の約半分!
Unrolled GCR(uGCR)法

計算量、メモリ使用量とも、eGCR法より少ない
Efficient GCR法
Originalの
GCR法
^
ベクトルuは、
過去の分ま
各反復で解xを
で覚えておく
ループの外に
出した
for n  0,1,k until rn  tol do :
for n  0,1,k until rn  tol do :
begin
begin
begin  Ap
n , rn 

  Apn , rn 
n
  Ap
, Ap
Ap


n
n , rnn
Ap

n
n , Ap
n
 n   Ap
, Apn 
rn1  rn n
xn1  xn  n nAp
pnn
rn1 rAp
n1Ap
n i
, AK
rn 1n


,
rnˆn1,i  rn 

Ap
-1Ap
n
n
,
Ap

u n  K rni 1 i
   
in
 , i  n
  , n,ii pi n
i 0
Api , AK1r1n 1 n
1i , AK rn 1
pnn,ni1,i KAp
rin,Ap
Ap
1 i
 Api , Api
n

pの計算が
無くなった
nn
where
pA
K
r r 
pni ,ni ,Ap
 AK
A
np
p
1n
n,i

i Ap

n
11 AK r
i i
1
Efficient GCR
11
n 1 n n11
i 0 i i00
n
end
end
Apn1  AKk1rn1 1  n,i Api
xn1  x1  Uˆ k 1Bk 1i
xn1  xn  i pi 0k 1
repeat
end
i 0
repeat

ak  0,1,, k H
Uˆ  uˆ0 ,, uˆk 
 1 0,0   k 1,0 


1


k 1,1 
Bk  
  k 1,k 1 


1


Memory efficient GCR法
for n  0,1覚えておくベクトルはApのみでよい
,k until rn  tol do :
where
begin
n
 Apn ,rn 
 Apn , Apn 
 rn   n Apn
ak   0,1,, k H
 1  0,0   k 1,0 


1


k 1,1 
rn1
Bk  
  k 1,k 1 


Api , AK1rn 1
1 

メモリ使用量は既存のアルゴリズムの約半分!
,
i

n
n ,i 
Ap
,
Ap
 i i
1  1 
1 1


n
1








0
0
0 
Apn1  AK rn1 
 n,i Api
Ck  
1  1 
i 0


  

end

計算量はeGCR法と同程度
 k 1 
1
1





xn1  x0  K Dk 1Ck 1Bk 1 k 1
repeat
^
ベクトルuを
使用しない
Dk  r0 , Ap0 , Ap1,, Apk 1 
Unrolled GCR法
ループ内で使われている値は、
i
すべてA r0を使って表すことができる
i
A r0はdominantな固有ベクトルの
i
ループの前で、A
r0を計算しておく
方向を向いてくるので、
i
j
ループ内の計算で必要な(A
精度の低下が予想される r0, A r0)も
計算しておく
密行列積(BLAS3)
の演算となり、
効率的
ループ内はスカラー
計算のみとなる
メモリ使用量は
meGCRと同じ
計算量の比較
1リスタート周期の計算量
計算要素
dmv
dp
daxpy
smv
prec
bin
kmv Dmm
2k 2
2k 2 n
計算量
2kn
2n
2n
*
*
1
k (k  1)(k  1)
3
GCR
3(k1)
2k
2k-1
k
k
0
0
0
eGCR
2k-1
2k
k
k
k
1
1
0
meGCR
2k-1
2k
k
k
k+1
1
2
0
uGCR
0
0
0
k
k+1
1
4k
1
k = リスタート周期(数十~数百)
n = 問題サイズ (数万~数百万)
注 *は、問題や前処理の
方法によって変わってくる
メモリ使用量の比較
Vector of length n
Buffer of size k 2
GCR
2k+3
0
eGCR
2k+3
2
meGCR
k+3
uGCR
k+2
既存の手法の
約半分!
k = リスタート周期(数十~数百)
n = 問題サイズ (数万~数百万)
2
5
実験環境
計算機: HITACHI SR2201
(東京大学情報基盤センター)



CPU: 300MFlops × 1024PE
Main memory: 256MB/PE
Communication: 300MB/s
通信ライブラリ:MPI
(Message Passing Interface)
Problems
Problem 1

Toeplitz行列
Problem 2

2

0


0


0

1
2
0
0
1
2
 0
 
0 





 0
0
0
1
2

0

0
0

0
 
2
 1.0


楕円型偏微分方程式の境界値問題(2次元)
 ux x  u yy  Rux  g( x, y)
u( x, y)   1  xy
Problem3

R  1.0
楕円型偏微分方程式の境界値問題(3次元)
 ux x  u yy  uzz  Rux  g( x, y, z )
u( x, y)   0.0
R  1.0
meGCR法の実験結果(逐次)
実行時間(秒) リスタート周期32
問題
前処理無し
前処理有り
(B-ILU(0))
Problem 1 Problem 2 Problem 3
サイズ
400,000
160,000
64,000
GCR
22.8
4860
37.8
eGCR
18.3
3440
27.7
meGCR
17.9
3450
28.7
GCR
21.2
938
21.9
eGCR
19.8
812
19.9
meGCR
20.1
825
20.1
meGCR法の実験結果(並列、前処理なし)
25
600
20
500
15
10
400
300
200
5
100
0
0
8
16
32
Number of PE
64
Problem 3 ( n=512,000 )
160
140
Time(sec)
Problem 2 ( n=160,000 )
Time(sec)
Time(sec)
Problem 1 ( n=4,000,000 )
8
16
32
Number of PE
64
GCR
120
100
80
60
eGCR
meGCR
40
20
0
8
16
32
Number of PE
64
リスタート周期はすべて32
meGCR法の実験結果(並列、B-ILU(0)前処理)
Problem 2 ( n=160,000 )
30
120
25
100
20
80
Time(sec)
Time(sec)
Problem 1 ( n=4,000,000 )
15
10
60
40
5
20
0
0
8
16
32
Number of PE
64
Problem 3 ( n=512,000 )
70
8
16
32
Number of PE
64
GCR
60
eGCR
Time(sec)
50
40
meGCR
30
20
10
0
8
16
32
Number of PE
64
リスタート周期はすべて32
uGCR法の実験結果
リスタート周期 8
前処理無し
B-ILU(0)前処理
Iteration
Time
Iteration
Time
GCR
46
18.5
17
20.3
eGCR
46
15.4
17
18.2
46
15.4
17
19.5
uGCR
55
13.5
25
26.7
GCR
1096
64.8
150
30.6
Problem 3
eGCR
1096
53.6
150
29.6
(n=64,000)
meGCR
1096
55.7
150
31.7
uGCR
1053
43.0
150
30.1
Problem 1
(n=400,000
meGCR
)
まとめと考察
より大きな問題が解ける
リスタート周期を大きく
取れるので、収束の悪い
GCR法の2つのアルゴリズムを提案した
問題が解ける

Memory efficient GCR法
 計算量は、既存の方法とほぼ同じ
収束性に問題がなく、実用的!
 メモリ使用量は、既存の方法の約半分

Unrolled GCR法
精度の問題があるので、今後の研究が必要
計算量、メモリ使用量とも既存の方法より少ない