正方行列向け特異値分解の CUDAによる高速化

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
HBSP モデル上での 行列積を求めるアルゴリ ム 情報論理工学 吉岡健太.
大規模な三角 Toeplitz 線形方 程式の高速解法とその応用 ○ 安村 修一(法政大学 4 年) 李 磊(法政大学) 日本応用数理学会「行列・固有値の解法とその応用」研究部会 第6回研究会.
Level-3 BLASに基づく特異値分解 アルゴリズムのSMP上での性能
CPU/GPUを協調利用する ソフトウェア開発環境
在庫管理問題の動的計画法による 解法とCUDA を用いた高速化
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
※ 対称密行列の固有値分解は特異値分解と共通点が多い
Intel AVX命令を用いた並列FFTの実現と評価
Fill-in LevelつきIC分解による 前処理について
点対応の外れ値除去の最適化によるカメラの動的校正手法の精度向上
A Q R QR分解とは? → × ◆QR分解 QTQ = I (単位行列) ◆応用例 ◆主な計算方法 n m 今回はこの方法に注目
ラベル付き区間グラフを列挙するBDDとその応用
三重対角化アルゴリズムの性能評価 早戸拓也・廣田悠輔.
全体ミーティング (4/25) 村田雅之.
研究集会 「超大規模行列の数理的諸問題とその高速解法」 2007 年 3 月 7 日 完全パイプライン化シフト QR 法による 実対称三重対角行列の 固有値並列計算 宮田 考史  山本 有作  張 紹良   名古屋大学 大学院工学研究科 計算理工学専攻.
Finger patternのブロック化による 陰的wavelet近似逆行列前処理の 高速化
対角マトリックスを用いた3次元剛塑性有限要素法の並列計算 対角マトリックスを用いた剛塑性有限要素法
AllReduce アルゴリズムによる QR 分解の精度について
「データ学習アルゴリズム」 第3章 複雑な学習モデル 3.1 関数近似モデル ….. … 3層パーセプトロン
時空間データからのオブジェクトベース知識発見
はじめてのCUDA 〜CUDA事始め〜 はるにゃん Lv1くまー.
2. 共有メモリ型並列計算機での特異値分解の高速化
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
PCクラスタ上での 連立一次方程式の解の精度保証
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
京都大学大学院医学研究科 画像応用治療学・放射線腫瘍学 石原 佳知
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
非対称行列向けマルチシフトQR法の 性能予測方式
高速剰余算アルゴリズムとそのハードウェア実装についての研究
Level-3 BLASに基づく二重対角化 アルゴリズムとその性能評価
PGIコンパイラーによる ディレクティブベースのGPGPU
AMR法フレームワークの様々なアーキテクチャへ向けた発展 研究背景と研究目的 Xeon Phi対応に向けた拡張
はじめてのCUDA 〜CUDA事始め〜 はるにゃん Lv1くまー.
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
リモートホストの異常を検知するための GPUとの直接通信機構
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
「R入門」  5.7 行列に対する諸機能  10月23日 (木) 発表者 大城亜里沙.
知能システム論I(13) 行列の演算と応用(Matrix) 2008.7.8.
通信機構合わせた最適化をおこなう並列化ンパイラ
導電性高分子材料の電子状態計算に現れる連立一次方程式に対する 並列直接解法の高性能化
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
GPGPUによる 飽和高価値 アイテム集合マイニング
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
目的:高速QR分解ルーチンのGPUクラスタ実装
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
「ICAによる顔画像特徴量抽出とSVMを用いた表情認識」
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
全体ミーティング (5/23) 村田雅之.
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
制約付き非負行列因子分解を用いた 音声特徴抽出の検討
密行列固有値解法の最近の発展 (I) - Multiple Relatively Robust Representation アルゴリズム - 2004年11月26日 名古屋大学 計算理工学専攻 山本有作 日立製作所の山本有作です。 「~」について発表いたします。
キャッシュマシン向け三重対角化 アルゴリズムの性能予測方式
長方行列向け特異値分解の 浮動小数点コプロセッサによる 高速化
密行列固有値解法の最近の発展(II) ー マルチシフトQR法 ー
目次 はじめに 収束性理論解析 数値実験 まとめ 特異値計算のための dqds 法 シフトによる収束の加速
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
分散メモリ型並列計算機上での行列演算の並列化
2008年 7月17日 応用数理工学特論 期末発表 鈴木綾華,程飛
プログラミング論 バイナリーサーチ 1.
Presentation transcript:

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

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

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

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

高速化の方針

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

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

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

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

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

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

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

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

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

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

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

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

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

実装の概要

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

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

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

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

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

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

性能評価

評価方法 ◆ 評価問題 ◆ 手法 ◆ 実行環境 [-0.5 , 0.5]の乱数を要素とするn×nの正方行列の特異値分解 二重対角行列の特異値分解は全て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

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

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

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

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

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

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

精度評価 n n

終わりに

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