對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

37
對對對對對對 Cholesky 對對 對 GPU 對對對對 對對對 對對對對對對對對對對對對對 [email protected]

description

對稱正定矩陣 Cholesky 分解 之 GPU 加速研究. 吳博雋 淡江大學資訊管理學系研究生 [email protected]. 大綱. 緒論 文獻探討 研究方法與目前作法分析 改進與測試 結論與未來發展. 緒論. 數值問題求解過程常需求共變異矩陣之反矩陣,共變異矩陣滿足對稱正定特性,適合用 Cholesky 分解,其速度比傳統 LU 分解還快 矩陣分解傳統有 LAPACK 函式庫可用,隨著硬體進步逐漸發展出多核多緒版本 , 如 MKL 、異質 訊息傳遞 版本,如 ScaLAPACK 、 GPU 版本,如 MAGMA. - PowerPoint PPT Presentation

Transcript of 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

Page 1: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

對稱正定矩陣 Cholesky 分解之 GPU 加速研究

吳博雋淡江大學資訊管理學系研究生[email protected]

Page 2: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

2

大綱 緒論 文獻探討 研究方法與目前作法分析 改進與測試 結論與未來發展

Page 3: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

3

緒論 數值問題求解過程常需求共變異矩陣之反矩陣,共變異矩陣滿足對稱正定特性,適合用 Cholesky 分解,其速度比傳統 LU 分解還快 矩陣分解傳統有 LAPACK 函式庫可用,隨著硬體進步逐漸發展出多核多緒版本,如

MKL 、 異 質 訊 息 傳 遞 版 本 , 如ScaLAPACK 、 GPU 版本,如 MAGMA

Page 4: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

4

緒論 ( 續 ) GPU 採 用 SIMD(Single Instruction Multiple

Data) 架構,可擁有數百核同時執行相同指令,比 CPU 之少數核更適合矩陣平行運算 本研究之研究目標及方法為,就現有之

GPU 版本 Cholesky 分解之公開程式,分析各版本程式演算法不同之處,評比其時間效能,並嘗試各種方法企圖增快運算速度以提昇效能。

Page 5: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

5

文獻探討 Cholesky 分解 BLAS 函式庫 LAPACK 函式庫 矩陣乘法之時間複雜度

Page 6: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

6

Cholesky 分解 適用於求解對稱正定矩陣之反矩陣,具有唯一性,複雜度為 n3/3+O(n2)

高斯消去法複雜度為 O(n3) , LU 分解複雜度為 2n3/3+O(n2)

Page 7: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

7

BLAS 函式庫 (Basic Linear Algebra Subprograms)

包含 3 類矩陣向量運算,本研究用到如下函式 GEMM(GEneral Matrix Multiplication)

C = op(A)op(B) + Cα β SYRK(SYmmetrix Rank K update)

C = op(A)op(A)α T + Cβ TRSM(TRiangular Solve Multiple rhs)

op(A)X = BαXop(A) = Bα

平行化版本: NVIDIA 公司推出使用 GPU CUDA架構之 CUBLAS

Page 8: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

8

LAPACK 函式庫 (Linear Algebra PACKage)

提供數值線性代數運算 包含各種聯立線性方程、平方差、特徵值問題求解函式 相關矩陣分解函式有 LU 分解、 QR 分解、 SVD 分解、 Cholesky 分解 本研究用到如下 Cholesky 分解函式

POTRF(POsitive-definite TRiangular Factorization)

spotrf(uplo, n, a, lda, info) 平行化版本

CPU 版 : Intel 公 司 推 出 之 MKL(Math Kernel Library) 函 式庫、 PLASMA(Parallel Linear Algebra Software for Multicore Architectures ) 、 ScaLAPACK(Scalable LAPACK)

GPU 版: MAGMA(Matrix Algebra on GPU and Multicore Architectures) 、CULA(CUda Linear Algebra)

本研究用到 MKL 與 MAGMA

Page 9: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

9

矩陣乘法之時間複雜度 一般矩陣乘法: O(n3) Strassen 演算法: O(n2.807) Coppersmith-Winograd 演算法: O(n2.3737)

Stothers : O(n2.3736) Williams : O(n2.3727)

Page 10: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

10

研究方法與目前作法分析 蒐集公開版本 GPU 求解 Cholesky 分解之原始碼

Bouckaert http://www.cs.waikato.ac.nz/~remco/

Volkov http://forums.nvidia.com/index.php?showtopic=89084

Henry http://runtime.bordeaux.inria.fr/shenry/papers/HS_Cholesky.pdf

MAGMA http://icl.cs.utk.edu/magma/software

分析其 CPU 與 GPU 使用情形 差異性分析

Page 11: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

11

Bouckaert 與 Volkov 版本

Page 12: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

12

Bouckaert 與 Volkov 版本( 續 )

Page 13: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

13

Henry 版本

Page 14: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

14

MAGMA 版本

Page 15: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

15

MAGMA 版本 ( 續 )

Page 16: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

16

4 版本使用函式情形表

+ : CPU 使用 MKL 函式庫* : GPU 使用 CUBLAS 函式庫

Bouckaert Volkov Henry MAGMA

POTRF CPU CPU+ GPU CPU+

SYRK GPU* GPU*GPU

GPU*

GEMM GPU* GPU* GPU*

TRSM CPU CPU+ GPU GPU*

Page 17: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

17

差異性分析 Bouckaert 版本與 Volkov 版本

POTRF 與 TRSM Bouckaert 版本:自製 Volkov 版本: MKL 函式庫

MAGMA 版本與 Volkov 版本 TRSM

MAGMA 版本: GPU Volkov 版本: CPU

區塊大小不同

Page 18: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

18

改進與測試 測試平台 改進方案

MKL 函式庫之使用 區塊大小 最佳區塊大小

相關考量

Page 19: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

19

測試平台OS : CentOS 5.7 Kernel 2.6.18-274.12.1.el5 #1

SMP x86_64CPU : Intel Xeon E5620 (2.4GHz, 4 Cores) x 2 +

8GB RAMGPU : Nvidia C2050 (1.15GHz, 14

MultiProcessors, 448 Cores, 3GB GDDR3) x 2CUDA 版本: cudatoolkit_4.0.11_linux_64_rhel5.5MKL 版本: l_mkl_10.3.2.137MAGMA 版本: magma_1.1.0

Page 20: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

20

整合各版本程式後之原始加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.5

1

1.5

2

2.5

3

3.5

VolkovBouckaertHenryMAGMA

Page 21: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

21

Bouckaert 版本使用 MKL 函式庫後之Cholesky 分解加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.5

1

1.5

2

2.5

VolkovBouckaertBouckaert_MKL

Page 22: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

22

Bouckaert_MKL 版本之區塊大小修改為64 後之加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.5

1

1.5

2

2.5

Volkov

Bouckaert_MKL

Bouckaert_MKL_NB64

Page 23: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

23

區塊大小統一為 MAGMA 版本給法後之加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.5

1

1.5

2

2.5

3

3.5

4

VolkovVolkov_NBMAGMA

Page 24: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

24

Volkov 版本矩陣維度 1000 至 10000 時不同區塊之運算時間表 (ms) 維度區塊 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000

32 7.7 22.9 54.7 109.3 196.0 317.5 483.7 701.1 986.7 1331.2

64 7.2 19.3 45.3 91.5 164.2 262.7 403.8 577.6 810.8 1097.8

96 7.0 19.1 43.6 86.4 153.8 248.6 377.2 539.9 704.2 880.9

128 7.1 18.0 41.2 82.7 149.3 239.4 336.0 453.2 610.0 792.7

160 5.9 17.1 40.7 80.3 142.6 212.5 310.7 424.5 580.6 761.3

192 5.8 16.9 40.0 79.9 137.7 196.4 295.2 398.5 558.2 715.7

224 6.4 16.3 39.6 75.8 125.4 192.9 286.3 395.0 546.8 721.1

256 6.5 16.7 39.8 72.7 124.0 191.2 288.3 394.7 549.5 723.4

288 5.7 16.6 40.3 70.8 116.8 183.2 280.2 379.5 536.7 686.8

320 6.5 17.9 41.0 69.7 119.2 184.9 277.4 381.5 532.9 703.1

352 5.9 17.5 39.6 69.4 120.8 185.8 281.6 385.9 538.3 709.8

384 5.6 18.2 39.4 68.7 114.2 179.3 275.2 371.7 527.1 674.4

416 5.6 19.0 41.6 69.5 119.1 184.3 275.1 380.3 526.0 695.1

448 7.7 19.7 44.1 74.1 122.9 188.7 279.9 383.8 534.7 703.5

Page 25: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

25

使用適合本平台最佳區塊大小後之加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

0.5

1

1.5

2

2.5

3

3.5

4

Volkov_NBVolkov_BestNB

Page 26: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

26

相關考量 誤差值 MAGMA 版本特定矩陣維度較佳原因 CPU 緒數影響 不同平台改進方案有效性

Page 27: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

27

誤差值 ( 單精度 )N Volkov Bouckaert Henry MAGMA MKL

1000 6.26E-14 5.39E-14 8.81E-14 3.25E-14 6.62E-14

2000 1.49E-13 1.39E-13 2.16E-13 6.16E-14 1.66E-13

3000 1.16E-13 1.27E-13 1.90E-13 4.11E-14 1.00E-13

4000 1.06E-13 1.31E-13 1.96E-13 3.59E-14 9.41E-13

5000 3.05E-13 3.96E-13 6.21E-13 1.00E-13 2.75E-13

6000 2.95E-13 3.99E-13 6.06E-13 8.53E-14 2.57E-13

7000 2.80E-13 3.90E-13 6.04E-13 7.66E-14 2.45E-13

8000 2.78E-13 3.93E-13 6.08E-13 6.79E-14 2.49E-13

9000 2.73E-13 3.92E-13 5.89E-13 5.87E-14 2.38E-13

10000 2.71E-13 4.02E-13 6.16E-13 5.42E-14 2.43E-13

Page 28: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

28

誤差值 ( 雙精度 )N Volkov Bouckaert Henry MAGMA MKL

1000 2.33E-31 1.89E-31 3.54E-14 9.06E-32 2.43E-31

2000 5.10E-31 4.78E-31 5.89E-14 1.93E-31 5.82E-31

3000 3.99E-31 4.54E-31 4.40E-14 1.36E-31 3.51E-31

4000 3.66E-31 4.36E-31 4.19E-14 1.03E-31 3.17E-31

5000 1.08E-30 1.40E-30 5.35E-14 3.41E-31 9.66E-31

6000 1.03E-30 1.39E-30 4.12E-14 2.87E-31 8.58E-31

7000 9.60E-31 1.39E-30 3.93E-14 2.52E-31 8.60E-31

8000 9.72E-31 1.39E-30 4.48E-14 2.24E-31 8.58E-31

9000 9.10E-31 1.37E-32 4.28E-14 2.05E-31 8.44E-31

10000 9.14E-31 1.42E-30 3.88E-14 1.93E-31 8.21E-31

Page 29: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

29

MAGMA 版本矩陣維度 4000 較佳原因N 區塊 SYRK MEMCPY

CPU→GPUGEMM POTRF MEMCPY

GPU→CPUTRSM SUM

3000

128* 4.67 0.39 34.60 13.15 0.61 16.54 70.16

224 4.32 0.42 29.01 7.79 0.70 13.64 56.09

288 6.21 0.47 26.20 10.83 0.81 13.77 58.52

4000

128 7.99 0.58 75.18 16.18 0.83 23.39 124.34

224* 11.22 0.63 50.68 10.23 0.94 18.48 92.37

288 13.64 0.70 36.53 14.25 1.09 20.03 86.45

5000

128 12.21 0.77 157.11 20.65 1.03 32.70 224.68

224 27.51 0.82 138.47 12.97 1.19 27.72 208.90

288* 20.15 0.92 131.60 17.81 1.36 31.24 203.34

Page 30: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

30

MAGMA 版本矩陣維度 8000 較佳原因N 區塊 SYRK MEMCPY

CPU→GPUGEMM POTRF MEMCPY

GPU→CPUTRSM SUM

7000

128 54.61 1.34 410.51 28.56 1.43 51.53 547.97

224 67.75 1.44 381.21 17.97 1.66 44.87 514.90

288* 41.27 1.62 366.80 24.89 1.91 54.67 491.17

8000

128 97.40 1.52 507.47 32.68 1.65 61.11 701.83

224 94.73 1.63 384.81 20.50 1.89 52.66 556.21

288* 57.20 1.84 272.62 28.36 2.18 64.48 426.69

9000

128 146.48 1.71 876.37 37.06 1.85 74.14 1137.61

224 121.37 1.86 819.71 23.18 2.13 65.79 1034.04

288* 69.52 2.09 796.71 32.03 2.47 83.95 986.77

Page 31: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

31

MAGMA 版本矩陣維度 8000 較佳原因( 續 )N SYRK

MEMCPYCPU→GPU

GEMM POTRFMEMCPY

GPU→CPUTRSM SUM

7000 41.27 1.62 367.33 26.84 1.90 54.58 493.55

7100 45.88 1.64 381.33 25.28 1.94 55.59 511.66

7200 43.65 1.65 189.07 25.90 1.96 52.61 314.84

7300 44.87 1.68 421.15 26.13 1.99 58.22 554.05

7400 48.94 1.70 436.59 26.36 2.02 59.26 574.88

7500 48.09 1.73 455.44 26.95 2.06 60.98 595.25

7600 52.75 1.73 474.63 27.30 2.07 60.14 618.61

7700 53.37 1.78 492.56 27.43 2.11 63.61 640.85

7800 52.29 1.79 512.31 27.97 2.13 65.58 662.07

7900 57.45 1.82 532.32 28.45 2.14 60.55 682.74

8000 57.23 1.84 272.71 30.28 2.17 64.47 428.72

8100 56.58 1.88 583.30 29.03 2.25 69.98 743.03

8200 61.64 1.91 599.20 29.21 2.26 70.87 765.09

8300 62.02 1.95 643.05 30.24 2.30 72.71 812.28

8400 60.65 1.96 644.48 30.75 2.32 72.00 812.16

8500 66.23 1.99 668.08 30.31 2.34 75.78 844.73

8600 66.59 2.01 688.13 30.87 2.39 77.18 867.16

8700 65.15 2.04 716.88 31.23 2.41 79.05 896.75

8800 70.23 2.05 372.16 31.46 2.42 76.38 554.71

8900 71.37 2.10 769.83 31.99 2.46 82.30 960.04

9000 69.52 2.09 797.40 33.83 2.46 83.87 989.18

Page 32: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

32

各版本於維度 10000 時不同 CPU 緒數之Cholesky 分解時間表 (ms)

緒數 Volkov_NB MAGMA MKL

1 1168.64 1286.05 19457.86

2 771.14 1285.62 9637.81

3 715.46 1286.74 6430.87

4 698.17 1286.67 4888.04

5 693.67 1285.03 3921.19

6 693.92 1285.39 3354.44

7 697.94 1286.87 2898.38

8 696.40 1286.07 2653.25

Page 33: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

33

不同平台改進方案有效性OS : CentOS 6.2 Kernel 2.6.32-220.4.1.el6.x86_54

#1 SMPCPU : Intel Core i7 970 (3.20GHz, 6 Cores) +

24GB RAMGPU : Nvidia Geforce GTX 590 (1.22GHz, 16

MultiProcessors, 512 Cores, 1.5GB GDDR3) x 4CUDA 版本: cudatoolkit_4.1.11_linux_64_rhel5.5MKL 版本: l_mkl_10.3.2.137MAGMA 版本: magma_1.1.0

Page 34: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

34

於另一 GPU 平台實驗最後結果之加速比

1000 2000 3000 4000 5000 6000 7000 8000 9000 100000

1

2

3

4

5

6

VolkovVolkov_NBMAGMA

Page 35: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

35

結論 蒐集四種公開版本使用 GPU 作 Cholesky 分解程式,將各版本程式整合測試後,發現 Cholesky 分解 運 算 速 度 之 快 慢 順 序 分 別 為

Volkov 、 MAGMA 、 Bouckaert 、 MKL 、 Henry Bouckaert 版本於矩陣維度 6000 以下時, CPU端運算若有使用 MKL 函式庫則效能較佳;矩陣維度 6000 以上時,使用 MKL 函式庫與自製函式無太大差別。故使用 MKL 函式庫雖然為較好之選擇,但仍會受其他參數影響而無法明顯提升效能

Page 36: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

36

結論 ( 續 ) 區塊大小對運算速度有重要影響, Volkov 版本將區塊大小由固定 64 改為與 MAGMA 版本同為隨矩陣維度變動方式時,效能明顯提升,尤其在矩陣維度 10000 時,加速比達到 3.5 倍以上 適用不同矩陣維度之最佳區塊大小也隨平台硬體而不同,本文針對 C2050 硬體平台,以排班單位 warp 大小之倍數,窮舉找出適合此平台之矩陣維度 1000 至 10000 ,及其最佳區塊大小之關係

Page 37: 對稱正定矩陣 Cholesky 分解 之 GPU 加速研究

37

未來發展 由於 MAGMA 也有提供多 GPU 分解原始碼,期待也能透過類似技術提升分解效能 目前已有利用 GPU 實現特殊矩陣乘法之文獻,期待此技術可取代 GEMM 以更加提升效能