1 / 36

山本 有作  (名古屋大学) 深谷 猛 (名古屋大学) 畝山 多加志 (京都大学) 中村 佳正  (京都大学)

正方行列向け特異値分解の CUDA による高速化. 2009 年 6 月 24 日 GPGPU 研究会  筑波大学 計算科学研究センター. 山本 有作  (名古屋大学) 深谷 猛 (名古屋大学) 畝山 多加志 (京都大学) 中村 佳正  (京都大学). 単純計算では CPU の数十倍の性能 CPU を上回る性能向上 開発環境の整備. NVIDIA GeForce8800 GTX. (単精度演算: 345.6GFLOPS ). CUDA の利用例:行列計算,重力多体計算,分子軌道計算,流体計算など. 2006 年に NVIDIA 社が発表

niran
Download Presentation

山本 有作  (名古屋大学) 深谷 猛 (名古屋大学) 畝山 多加志 (京都大学) 中村 佳正  (京都大学)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 正方行列向け特異値分解のCUDAによる高速化 2009年 6月 24日 GPGPU 研究会  筑波大学 計算科学研究センター 山本 有作  (名古屋大学) 深谷 猛 (名古屋大学) 畝山 多加志 (京都大学) 中村 佳正  (京都大学)

  2. 単純計算ではCPUの数十倍の性能 • CPUを上回る性能向上 • 開発環境の整備 NVIDIA GeForce8800 GTX (単精度演算:345.6GFLOPS) CUDAの利用例:行列計算,重力多体計算,分子軌道計算,流体計算など • 2006年にNVIDIA社が発表 • C/C++の拡張によりGPGPUのプログラミングが可能 • GPU向けにチューニング済みのライブラリ(BLAS,FFT) (Cf. http://www.nvidia.co.jp/object/cuda_home_jp.html) 研究背景 ◆ GPGPU (General Purpose GPU) 一般の科学技術計算へのGPUの利用 ◆ CUDA (Compute Unified Device Architecture) GPGPUのための統合開発環境

  3. A: n×n密行列 • U: n×n直交行列 • S: n×n対角行列 • V: n×n直交行列 研究目的 ◆ 正方行列の特異値分解 (応用分野:画像処理,情報検索,主成分分析など) ◆ 研究目的 CUDAによる正方行列の特異値分解計算の高速化 • 実装コストと汎用性の考慮 • GPUに適したアルゴリズムを選択 • 性能評価と課題の発見 • ※ GPUを使う部分の計算は単精度で行う

  4. 発表の流れ • 研究背景と目的 • 高速化の方針 • アルゴリズムの選択 • 実装の概要 • 性能評価 • 終わりに

  5. 高速化の方針

  6. ◆ CUBLASの利用 • CUDAで提供されているBLAS(Basic Linear Algebra Subprograms) • 標準のC言語のプログラム中で利用可能 (gccでコンパイル可能) • 限られた基本演算(行列ベクトル積,行列乗算など)のみ • GPU向けにチューニング済み 今回はできるだけCUBLASを使って高速化を行う CUDAによる行列計算の高速化 ◆ GPU向けにプログラムの移植 • 拡張されたC言語でコーディングして,nvccでコンパイル • 自由度の高いプログラミングが可能 • GPUの性能を十分に引き出すには様々なチューニングが必要 (スレッド数,条件分岐,メモリアクセスの連続性など)

  7. メインメモリ (1)Set Data PCI-Express (3)Get Data ◆ 性能 GPU用メモリ (2)SGEMM etc. (GFLOPS) ※転送時間は含んでいない SGEMV(行列ベクトル積) GPU × = グラフィックボード SGEMM(行列乗算) × = SGEMMの有効利用 (Size) GeForce8800 GTX & CUBLAS ver. 1.0 CUBLASの特徴 ◆ 仕様の特徴 • ユーザー自身がデータ転送を制御 • ボードのデータはプログラム終了まで保持 メモリ配置の工夫によるデータ転送コストの削減

  8. B A 特異値分解計算の特徴 ◆ 計算手順と特徴 (a) 二重対角化: • U1, V1:直交行列, B:下二重対角行列 • 大半がBLASルーチンにより計算可能 • 演算量:O(n3) (b) 二重対角行列の特異値分解: • 様々なアルゴリズム(QR法,分割統治法,MR3,I-SVDなど) • 丸め誤差の影響を受けやすい • 演算量: O(n2) ~ O(n3) (c) 逆変換: • 大半がBLASルーチンにより計算可能 • 演算量:O(n3)

  9. Core2 Duo (1.86GHz) & Intel MKL ver. 8.1 (n) ◆ GPUを使う効果とコスト • 二重対角化と逆変換 : 少ない実装コストで大きな効果が期待できる • 大半がBLASルーチンで計算可能 ⇒ CUBLASの利用が可能 • 計算時間全体に占める割合が大きい ⇒高速化の効果が高い • Bの特異値分解 : 実装コストは大きいが効果は小さい可能性が高い • 様々なアルゴリズムが存在 ⇒ 各々について検討が必要 • 複雑な演算パターン ⇒ プログラムの移植が必要 ⇒ チューニングコスト大 • 丸め誤差の影響を受けやすい ⇒ 単精度演算に適していない 特異値分解計算の特徴 ◆ 計算時間の内訳

  10. 高速化の方針 ◆ GPUの使い方 • できるだけCUBLASを使う • SGEMMをできるだけ利用する • メインメモリとGPU用メモリ間のデータ通信コストを抑える • GPU向けのプログラムの移植は最小限にする ◆ 特異値分解の計算 • 二重対角化と逆変換の計算にはGPUを利用する • Bの特異値分解の計算はCPUのみで行う

  11. アルゴリズムの選択(二重対角化・逆変換)

  12. I - ・・・ A B 鏡像変換 : ◆ 逆変換 に対して 従来法 ◆ 鏡像変換による二重対角化

  13. :行列ベクトル積 (SGEMV) :rank-1 更新 (SGER) 従来法の特徴 ◆ 二重対角化 • 計算の逐次性 • 鏡像変換の作成には直前のAの情報(ベクトル1本分)が必要 • 鏡像変換の作成のための通信コスト • 鏡像変換の作成はBLASルーチンのみで行えない(CPUで行う必要がある) • 鏡像変換の作用ごとに2回の通信(Aの情報の取得,鏡像変換の転送) • 通信するデータ量はベクトル1本分程度 • 鏡像変換の作用はSGEMVが中心 CUBLASによる高速化の効果があまり期待できないのでは・・・?

  14. C C B A Bischofの手法 ◆ 二段階の二重対角化 (a-1) 下三角帯行列化: • U11, V11:直交行列, C:半帯幅がLの下三角帯行列 • 大部分を行列乗算により計算可能 • 演算量: 8n3/ 3  (ただし n ≫ L ) (a-2) 村田法: • U12, V12:直交行列, B:下二重対角行列 • 演算量:8n2L (b) 二重対角行列の特異値分解: (c-1) 村田法の逆変換: • 演算量:4n3 (c-2) 帯行列化の逆変換: • 演算量:4n3

  15. ブロック鏡像変換 : ・・・ C A I - Bischofの手法 ◆ ブロック鏡像変換による下三角帯行列化

  16. C ・・・ ・・・ Bischofの手法 ◆ 村田法による帯行列の二重対角化 サイズの小さい鏡像変換によるbulge-chasing • 第1列の二重対角化 • 第2列の二重対角化 ・・・

  17. ◆ 逆変換 • 演算量が従来法の2倍に増加 逆変換のコストの増加の影響は・・・? Bischofの特徴 ◆ 二重対角化 • 二重対角化の大部分は帯行列化 • 帯行列化の演算はSGEMMが中心 • ブロック鏡像変換の作成のための通信コスト • 一回の通信量の増加(ベクトル→行列) • 通信回数の減少 (1/L) • 村田法にCUBLASを使っても効果が乏しい • 鏡像変換のサイズが小さい • 演算はSGEMVが中心 二重対角化全体としてはCUBLASを効果的に使えるのでは・・・?

  18. 段々とサイズを変化させてSGEMM,SGEMVを実行 ◆ 両手法の性能予測 各ステップの演算量と演算の種類から時間を予測 予測時間 (sec) • n = 5120 • L = 64 • SGEMV : 3.54 GFLOPS • SGEMM : 95.20 GFLOPS • 村田法はCPUでの実際の実行時間 演算量の合計 (FLOPS) 実行時間の合計 性能予測による比較 ◆ CUBLASの性能測定 (ブロック)鏡像変換の作用では,段々と行列のサイズが小さくなる Bischofの手法の方が効果が期待できる

  19. 実装の概要

  20. Bischofの手法の実装 ◆ GPUを利用する部分 (a-1) 下三角帯行列化 CPU CUBLAS (a-2) 村田法 GPU向けに移植 (nvcc) (b) 二重対角行列の特異値分解 CPU (c-1) 村田法の逆変換 CPU CUBLAS (c-2) 帯行列化の逆変換 CUBLAS

  21. = SGEMM 下三角帯行列化 CPU GPU

  22. SGEMM ※ Vも同様にして計算 帯行列化の逆変換 CPU GPU

  23. SGEMM SGEMM ・・・ ・・・ SGEMM SGEMMの性能が出るサイズに合成 ※ Vも同様にして計算 村田法の逆変換 CPU GPU

  24. 更新範囲が重ならない ・・・ ◆ GPU上での並列計算方法 (GeForce8800 GTX) ・・・ • 16個のMPでbulge-chasingをパイプライン式に並列実行 • MP内の8個のSPで鏡像変換の作用を並列計算(MP内の共有メモリを利用) GPUへの村田法の移植 ◆ bulge-chasingのパイプライン式並列化 • 第1列の二重対角化 • 第2列の二重対角化

  25. C C B B ブロック鏡像変換の作成 CUBLAS ブロック鏡像変換の作用 鏡像変換の作成・作用 特異値分解 鏡像変換の合成 合成結果の作用 CUBLAS U2 A A U2 V2 U V Q Q H V2 V’ V U U’ H ブロック鏡像変換の作用 CUBLAS 特異値分解計算の全体の様子 CPU GPU

  26. 性能評価

  27. 評価方法 ◆ 評価問題 • [-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

  28. 2.9倍の高速化 二重対角化と逆変換の評価 ◆ n=1280 実行時間 (sec) CPU(2コア) CPU(1コア) & GPU

  29. 1.9倍の高速化 特異分解計算全体の評価 ◆ n=1280 実行時間 (sec) CPU(2コア) CPU(1コア) & GPU

  30. 7.0倍の高速化 二重対角化と逆変換の評価 ◆ n=5120 実行時間 (sec) CPU(2コア) CPU(1コア) & GPU

  31. 4.2倍の高速化 特異分解計算全体の評価 ◆ n=5120 実行時間 (sec) CPU(2コア) CPU(1コア) & GPU

  32. Bischofの手法のステップごとの評価 ◆ L=64の場合 Speedup (n) Speedup = CPU (2コア)での実行時間 / CPU (1コア) & GPUでの実行時間

  33. 性能予測の評価 時間 (sec) n = 5120 , L = 64 村田法はCPU 予測 実際 • 予測性能は実際の性能の上限を見積もっている • 従来法の予測性能 < Bischofの手法の実際の性能 Bischofの手法の選択は適切であったと言える

  34. 精度評価 n n

  35. 終わりに

  36. ◆ 今後の課題 • CPUとGPUの仕事の分担のさらなる効率化 • 適切な半帯幅の決定方法 • 村田法の高速化 • 最新バージョンのCUDAや他のアクセラレータを用いた性能評価 • 対称行列の固有値計算への適用 まとめと今後の課題 ◆ まとめ • CUDAを用いた正方行列の特異値分解計算の高速化 • CUBLASのSGEMMの利用を中心とした高速化 • 性能予測により,Bischofの手法を二重対角化・逆変換の手法として選択 • メモリ配置の工夫によるデータ転送コストの削減 • CPU上での事前計算による,CUBLASのSGEMMの有効利用 • 数値実験による性能評価(特異値分解全体で最大4倍程度の高速化)

More Related