※ 対称密行列の固有値分解は特異値分解と共通点が多い

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

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 分解の精度について
時空間データからのオブジェクトベース知識発見
仮想マシンの並列処理性能に対するCPU割り当ての影響の評価
2. 共有メモリ型並列計算機での特異値分解の高速化
P,Q比が変更可能なScaLAPACKの コスト見積もり関数の開発
PCクラスタ上での 連立一次方程式の解の精度保証
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
半正定値計画問題に対する 行列補完理論の高速実装
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
応用数理工学特論 第5回 計算理工学専攻 張研究室 山本有作.
演算/メモリ性能バランスを考慮した マルチコア向けオンチップメモリ貸与法
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
正方行列向け特異値分解の CUDAによる高速化
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
非対称行列向けマルチシフトQR法の 性能予測方式
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
応用数理工学特論 第6回 計算理工学専攻 張研究室 山本有作.
高速剰余算アルゴリズムとそのハードウェア実装についての研究
Level-3 BLASに基づく二重対角化 アルゴリズムとその性能評価
AMR法フレームワークの様々なアーキテクチャへ向けた発展 研究背景と研究目的 Xeon Phi対応に向けた拡張
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
MPIとOpenMPを用いた Nクイーン問題の並列化
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
リモートホストの異常を検知するための GPUとの直接通信機構
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
仮想メモリを用いた VMマイグレーションの高速化
知能システム論I(13) 行列の演算と応用(Matrix) 2008.7.8.
導電性高分子材料の電子状態計算に現れる連立一次方程式に対する 並列直接解法の高性能化
変換されても変換されない頑固ベクトル どうしたら頑固になれるか 頑固なベクトルは何に使える?
プログラミング 4 整列アルゴリズム.
階層的境界ボリュームを用いた 陰関数曲面の高速なレイトレーシング法
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
VMMのソフトウェア若化を考慮した クラスタ性能の比較
目的:高速QR分解ルーチンのGPUクラスタ実装
高精細計算を実現するAMR法フレームワークの高度化 研究背景と研究目的 複数GPU間での袖領域の交換と効率化
全体ミーティング (5/23) 村田雅之.
原子核物理学 第7講 殻模型.
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(Nlog2N)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似
メモリ使用量の少ないGCR法の提案 東京大学理学部情報科学科 工藤 誠 東京大学情報基盤センター 黒田 久泰
MPIを用いた並列処理計算 情報論理工学研究室 金久 英之
密行列固有値解法の最近の発展 (I) - Multiple Relatively Robust Representation アルゴリズム - 2004年11月26日 名古屋大学 計算理工学専攻 山本有作 日立製作所の山本有作です。 「~」について発表いたします。
キャッシュマシン向け三重対角化 アルゴリズムの性能予測方式
長方行列向け特異値分解の 浮動小数点コプロセッサによる 高速化
密行列固有値解法の最近の発展(II) ー マルチシフトQR法 ー
目次 はじめに 収束性理論解析 数値実験 まとめ 特異値計算のための dqds 法 シフトによる収束の加速
分散メモリ型並列計算機上での行列演算の並列化
2008年 7月17日 応用数理工学特論 期末発表 鈴木綾華,程飛
Presentation transcript:

マルチコア・メニーコアプロセッサ向けの 行列計算アルゴリズム - 固有値・特異値計算を中心に - マルチコア・メニーコアプロセッサ向けの 行列計算アルゴリズム  - 固有値・特異値計算を中心に - 2009年 4月 22日 研究会「アルゴリズムによる計算科学の融合と発展」 筑波大学 計算科学研究センター 山本 有作 (名古屋大学)

※ 対称密行列の固有値分解は特異値分解と共通点が多い はじめに: 本研究で扱う問題 固有値分解 A = XLX–1 A: n×n 非対称密行列,L: 対角行列,X: 正則行列 応用分野 構造計算 量子化学 特異値分解 A = US VT A: n×n 密行列,S: 対角行列,U, V: 直交行列 統計計算,信号処理,画像処理 電子状態計算 (filter diagonalization 法) ※ 対称密行列の固有値分解は特異値分解と共通点が多い

本研究の目的 マルチコア/メニーコアプロセッサ上で高性能を達成できる固有値・特異値分解ソルバの開発 背景 問題の大規模化 マルチコア/メニーコア/GPGPUの普及 Quad Core Opteron ClearSpeed CSX600 NVIDIA GeForce8800 GTX

目次 はじめに マルチコアプロセッサでの特異値分解 GPUでの特異値分解 メニーコアプロセッサでの固有値分解 終わりに

マルチコアプロセッサでの 特異値分解

標準的な特異値分解アルゴリズム 計算内容 計算手法 密行列 A U0TAV0 = B (U0, V0: 直交行列) ハウスホルダー法 二重対角化 二重対角行列 B 密行列Aをまず三重対角行列Tに相似変換してからTの固有値・固有ベクトルを求めるのが最も一般的な計算法。 三重対角化には,後に述べるハウスホルダー法を使う場合がほとんど。 三重対角行列の固有値・固有ベクトルの計算には,色々なアルゴリズムがある。 QR法 分割統治法 MR3アルゴリズム I-SVDアルゴリズム 二重対角行列の 特異値・特異ベクトル計算 Bvi =σi xi BTxi =σi yi Bの特異値 {σi },   特異ベクトル {xi }{yi } vi = V0 yi ui = U0 xi 逆変換 逆変換 Aの特異ベクトル {ui }, {vi }

各部分の演算量と実行時間 演算量 実行時間(全特異ベクトル) 密行列 A 二重対角化 (8/3) n3 二重対角行列の n = 2500,Quad Core Xeon ×2 LAPACK での実行時間(秒) 二重対角化 (8/3) n3 密行列Aをまず三重対角行列Tに相似変換してからTの固有値・固有ベクトルを求めるのが最も一般的な計算法。 三重対角化には,後に述べるハウスホルダー法を使う場合がほとんど。 三重対角行列の固有値・固有ベクトルの計算には,色々なアルゴリズムがある。 実行時間(秒) 二重対角行列の 特異値・特異ベクトル計算 O(n2) ~ O(n3) 逆変換 4mn2 (左右 m 本ずつの 特異ベクトル) コア数 ・二重対角化が実行時間の  大部分を占める Aの特異ベクトル {ui }, {vi } ・速度向上率が低い

二重対角化の性能が出ない原因 二重対角化の演算パターン 演算パターンに関する問題点 左右からのハウスホルダー変換による行・列の消去 A(k) := (I – aw wT ) A(k) = A(k) – aw (wTA(k)) 演算は level-2 BLAS(行列ベクトル積と rank-1 更新) 演算パターンに関する問題点 Level-2 BLAS はデータ再利用性が低い。     キャッシュの有効利用が困難であり,単体性能が出にくい。     プロセッサ間のアクセス競合により,並列性能向上も困難 行列ベクトル積 Rank-1更新 非ゼロ要素 ゼロにしたい部分 A(k) 右から の変換 左から の変換 影響を受ける部分 k

マルチコアプロセッサのメモリ階層 主メモリアクセスの場合,実効性能は実質的に転送速度で決まる データ転送速度 非常に大 レジスタ 8~128 ワード コア1 コア2 データ転送速度大 本当はキャッシュも複数階層からなるが,ここでは単純化 キャッシュ 数100Kバイト ~ 数Mバイト 帯域の 奪い合い データ転送速度小 主メモリ 数100Mバイト ~ 数Gバイト 主メモリアクセスの場合,実効性能は実質的に転送速度で決まる Byte/Flop値: 1演算を行う時間で転送できるバイト数 < 1 マルチコアでは複数のコアが帯域を奪い合うため,問題が更に深刻化 主メモリのデータ転送速度の遅さをカバーするには,キャッシュにデータがある間に演算をまとめて行う(データの再利用)ことが必要 ~

BLASの利用による高性能化 BLASとは BLASの種類 A A A C A B Basic Linear Algebra Subprograms の略 個々のマシン向けにチューニングした基本行列演算のライブラリ BLASの種類 Level-1 BLAS: ベクトルとベクトルの演算 内積 c := xT y AXPY演算 y: = ax + y など Level-2 BLAS: 行列とベクトルの演算 行列ベクトル積 y := Ax 行列のrank-1更新 A := A + xyT Level-3 BLAS: 行列と行列の演算 行列乗算 C := AB など A = × A A = + × C A B = ×

演算をできる限り level-3 BLAS で行うことが高性能化のポイント 演算量: O(N), データ量: O(N) データ再利用性: なし 並列粒度: O(N/p) (N: ベクトルの次元,p: プロセッサ台数) Level-2 BLAS 演算量: O(N2), データ量: O(N2) ベクトルデータのみ再利用性あり 並列粒度: O(N2/p) Level-3 BLAS 演算量: O(N3), データ量: O(N2) O(N)回のデータ再利用が可能 行列乗算のサイズを大きくするほど,再利用性が向上 Byte/Flop 値の小さいマシンでも性能を出せる。 並列粒度: O(N3/p) 演算をできる限り level-3 BLAS で行うことが高性能化のポイント = A × A = A + × C A B = ×

Level-3 BLAS に基づく特異値分解アルゴリズム 2段階の二重対角化アルゴリズム(Bischof et al., ’93) 密行列 A をまず帯幅 L の下三角帯行列 C に変換 次にこの帯行列を下二重対角行列 B に変換 二重対角化を2段階で行うことの利点 前半の変換は,level-3 BLAS (行列乗算)のみを使って実行可能   キャッシュの有効利用が可能 後半の変換は level-2 BLAS が中心だが,演算量は O(n2L) 前半部に比べてずっと小さい。 次数 n 下三角 帯行列化 村田法 (8/3)n3 8n2L A C B 帯幅 L

下三角帯行列化のアルゴリズム ブロック鏡像変換によるブロック列の消去 ブロック鏡像変換 H = I – WaWT 第 K ステップでの処理 与えられたブロックベクトルを上三角 行列(正確には右上三角部分のみ 非零でそれ以外が零の行列)に変形 ブロックベクトル 行列 左からH を乗算 第 K ステップでの処理 右からHKR を乗算 左からHKL を乗算 非ゼロ要素 ゼロにしたい部分 影響を受ける部分 ・ 消去演算は行列乗算のみで行える ・ 行列乗算のサイズ ~ L

Level-3 BLAS に基づく特異値分解アルゴリズム 特異ベクトル計算を含めたアルゴリズムの全体像 長所 O(n3) の演算量を持つ部分はすべて level-3 BLAS で実行可能 短所 逆変換の演算量が 8mn2 (従来法の2倍)。ただし level-3 化可能 n L 特異値 {σi } (8/3)n3 8n2L QR法 DC法 MR3 I-SVD A C B 4mn2 4mn2 A の特異ベクトル {ui }{vi } C の特異ベクトル {zi }{wi } B の特異ベクトル {xi }{yi }

性能評価 評価条件 計算機環境 問題サイズ n : 250, 5000, 7500 帯幅 L : 25, 50, 100 コア数 : 1, 2, 4, 8 Level-3 BLAS に基づく手法は Fortran で作成 従来法はLAPACKのルーチンを使用 計算機環境 Xeon X5355 (2.66GHz) Quad-core ×2ソケット Red Hat Enterprise WS release 4 Intel Math Kernel Library Intel Fortran Compiler 9 14

実験結果 Xeon での実行時間 n=2500 n=5000 n=7500 実行時間(秒) 結果(LAPACK(1CPU)に対する高速化率) コア数 ◆ LAPACK ■ Level-3 帯幅25 ▲ Level-3 帯幅50 × Level-3 帯幅100 結果(LAPACK(1CPU)に対する高速化率) LAPACK :8コアで最大 1.38倍 Level-3 BLAS :8コアで最大 5.06倍 帯幅 L による性能差 L = 100 が最も性能が良い 15

実験結果 1.38倍 4.01倍 LAPACKとLevel-3 BLASの比較1 結果(コア数による高速化率) n = 2500,帯幅 L = 100 実行時間(秒) 1.38倍 4.01倍 コア数 LAPACK Level-3 BLAS 16

実験結果 1.31倍 4.36倍 LAPACKとLevel-3 BLASの比較2 実効時間の内訳 n = 7500,帯幅 L = 100 村田法の逆変換の実行時間が大きい    今後改良要 n = 7500,帯幅 L = 100 1.31倍 実行時間(秒) 4.36倍 コア数 LAPACK Level-3 BLAS 17

実験結果 対称行列の固有値分解の結果 結果 特異値分解とほぼ同じ傾向が見られる。 n = 9000,帯幅 L = 100 実行時間(秒) コア数 LAPACK Level-3 BLAS 18

まとめ 特異値分解の標準的なアルゴリズムでは,二重対角化の部分で level-2 BLAS を多用するため,マルチコアプロセッサで十分な性能を得られない。 Level-3 BLAS を用いたアルゴリズムでは,演算量は増加するが,キャッシュの利用効率向上,アクセス競合の回避により,従来法より高い性能が得られる。 対称行列の固有値分解についても,level-3 BLAS を用いたアルゴリズムは効果的。

GPUでの特異値分解

研究背景 ◆ GPGPU (General Purpose GPU) NVIDIA GeForce8800 GTX (単精度演算:345.6GFLOPS) 一般の科学技術計算へのGPUの利用 単精度計算ではCPUの10倍以上の性能 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)

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 ユーザー自身がデータ転送を制御 ボードのデータはプログラム終了まで保持 メモリ配置の工夫によるデータ転送コストの削減 ◆ 性能 (GFLOPS) (Size) GeForce8800 GTX & CUBLAS ver. 1.0 ※転送時間は含んでいない × = SGEMM(行列乗算,level-3 BLAS) SGEMV(行列ベクトル積,level-2 BLAS) Level-2 と 3 の性能差が CPU以上に大きい Level-3 BLAS活用の必要性

特異値分解の計算手順と特徴 A B (a) 二重対角化: (b) 二重対角行列の特異値分解: (c) 逆変換: ◆ 計算時間の内訳 (n) 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)

行列データは基本的にGPUに置き,必要な部分のみCPUに転送 高速化の方針 ◆ GPUの使い方 できるだけCUBLASを使う 行列乗算をできるだけ利用する  Bischof のアルゴリズムの利用 メインメモリとGPU用メモリ間のデータ通信コストを抑える 行列データは基本的にGPUに置き,必要な部分のみCPUに転送 GPU向けのプログラムの移植は最小限にする ◆ 特異値分解の計算 二重対角化と逆変換の計算にはGPUを利用する Bの特異値分解の計算はCPUのみで行う 直交変換が中心のため,丸め誤差に強い 単精度計算でも安定性の問題がない 非線形方程式の求解あるいは漸化式の計算 安定性の面から倍精度計算が望ましい

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 サイズの小さい level-2 BLAS のコールが多数発生 (b) 二重対角行列の特異値分解: (c-1) 村田法の逆変換: 行列乗算により実行可能 演算量: 4n3 (c-2) 帯行列化の逆変換: 行列乗算により実行可能 演算量: 4n3

下三角帯行列化の実装法 CPU GPU = 行列乗算 = ブロック鏡像変換の作成 (BLASのみでは実行不可)

GPUでの村田法の実装法 ◆ 実装方針 ◆ 消去演算のパイプライン式並列化 ◆ GPU上での並列計算方法 (GeForce8800 GTX) サイズの小さい BLAS2 のコールが多数発生   CUBLASでなくCUDAで実装 ◆ 消去演算のパイプライン式並列化 第1列の二重対角化 更新範囲が重ならない ・・・ 第2列の二重対角化 ・・・ ◆ GPU上での並列計算方法 (GeForce8800 GTX) 16個のMPで消去演算をパイプライン式に並列実行 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での実行時間

精度評価 n n

まとめと今後の課題 本研究のまとめ 今後の課題 CUBLAS/CUDAを用いて正方行列の特異値分解をGPU上で実装 Bischof のアルゴリズムに基づき,演算量の大部分を行列乗算の形で実行することで,高速な CUBLAS の SGEMM ルーチンを活用 行列を GPU メモリに置くことで,データ転送量を削減 特異値分解全体でデュアルコアCPUに比べ4倍程度の高速化を実現 今後の課題 CPU と GPU の仕事の分担のさらなる効率化 新たな性能ネック部分の高速化 村田法(帯行列から二重対角行列への変換) 二重対角行列の特異値分解 最新の GPU や他のアクセラレータを用いた性能評価

メニーコアプロセッサでの 固有値分解

非対称行列の固有値計算 高速化対象 ヘッセンベルグQR法 対角成分 = 固有値 有限回演算 反復計算 密行列 ヘッセンベルグ行列 非対称行列を直交変換によりヘッセンベルグ行列に変換 ヘッセンベルグ行列の固有値を QR 法により求める 演算量の大部分を占める QR 法の高速化が必要 高速化対象 対角成分 = 固有値 有限回演算 反復計算 密行列 ヘッセンベルグ行列 右上三角行列 ハウスホルダー法 演算量 : (10/3)n3 QR 法 演算量 : 10 n3 (経験値)

QR 法の高速化 在来研究 本研究 マルチシフト QR 法 (K. Braman et al., 2002) 複数のシフトを導入 演算の大部分が行列乗算(Level-3 BLAS が利用可能) キャッシュの有効利用 並列性の向上 本研究 演算の大部分を占める行列乗算を高速化 浮動小数点アクセラレータの利用 ClearSpeed社 CSX600 1 チップに96個の演算コアを集積 最適化された行列乗算ライブラリ

マルチシフトQR法をそのまま使った場合 乱数行列 (n = 6000) マルチシフト QR 法により すべての固有値を計算 計算機環境 Xeon 3.2 GHz, Memory 8 GB ClearSpeed advance board CSX600 × 2 実行時間(秒) CSX600 (無) / (有) シフト数(ブロックサイズ)増加 問題点 実行時間の大部分を占める行列乗算(O(n3))は,CSX600 により高速化 ただし,CSX600 の性能を引き出すには,シフト数を大きく取る必要あり Byte/Flop が 0.011(通常のCPUの1/10以下)と極端に小さい そのため,性能を出すには行列乗算のサイズが最低 1500 程度必要 その場合,行列乗算以外の部分(O(n2))の演算量が増加してしまう

マルチシフトQR法の演算パターン k バルジ追跡型の演算 シフト数 m が増えることの効果 直交変換により,(m / 2)個のバルジ(出っ張り)を対角線に沿って k 行移動させる 最初に 対角ブロック内でバルジを移動 それに伴い,対角ブロック内部を更新 更新に用いた直交変換を1 個の行列に累積 最後に 非対角ブロックを まとめて更新 累積した行列 と 非対角ブロックの行列乗算 シフト数 m が増えることの効果 行列乗算のサイズが増加 対角ブロック内部の更新の演算量増大 k ボトルネック BLAS 3 バルジ(3×3) 逐次的に更新 まとめて更新 (BLAS 3 利用) 行列乗算部の性能向上 他の部分の実行時間増加

Level-3 BLASの利用可能部分の増大 アルゴリズムの改良(1) 再帰型アルゴリズムへの変換 k k / q 逐次的に更新 まとめて更新(BLAS 3 利用) (例:再帰段数 d = 1) (m / 2) / q 個の bulge を k / q 行 chasing Level-3 BLASの利用可能部分の増大

アルゴリズムの改良(2) 収束に伴う行列の分離 分離した小行列の固有値計算 更新処理の分割 ブロック化 右下       小行列が分離 (      ) 分離した小行列の固有値計算 ダブルシフト QR 法を適用 シフト数 m 増加により,小行列の次元増加 更新処理の分割 対角ブロックの更新 (右上三角化するまで) 更新に用いたハウスホルダー変換を 1 個の行列に累積 非対角ブロックの更新 (最後に 1 度だけ) 累積した行列 と 非対角ブロックの行列乗算 ボトルネック ブロック化 逐次的に更新 まとめて更新 (BLAS 3 利用) ・ Level-3 BLASの利用可能部分の増大 ・ 演算量削減

数値実験 テスト問題 解法 計算機環境 [0, 1] の成分を持つ 乱数行列 すべての固有値と固有ベクトルを計算 従来のマルチシフトQR法 [0, 1] の成分を持つ     乱数行列 ハウスホルダー法によりヘッセンベルグ化 すべての固有値と固有ベクトルを計算 解法 従来のマルチシフトQR法 改良型のマルチシフトQR法 計算機環境 Xeon 3.2 GHz , Memory 8 GB Fortran 77 倍精度演算 ClearSpeed advance board CSX600 × 2 Level-3 BLAS(行列乗算) CSXL Library (CSX600) Intel Math Kernel Library (CPU)

性能評価:アルゴリズムの効果 従来法,提案法ともに CSX600 を利用 実行時間(秒) 従来法に比べ,提案法は 約 1.4 倍高速 提案法 (n = 3000, m = 160, q = 4) (n = 6000, m = 200, q = 5) 従来法に比べ,提案法は 約 1.4 倍高速 対角ブロックの更新:約 1.5 倍高速化(level-3 BLAS化) 小行列の固有値計算:10 倍以上高速化(演算量削減)

性能評価:CSX600 の効果 実行時間(秒) CSX600 (+ 提案法) により n = 12000 n = 6000 (有) (有) m = 100 q = 5 m = 200 q = 5 m = 100 q = 5 m = 240 q = 6 CSX600 (+ 提案法) により n = 6000 のとき,約 3.5 倍高速化 n = 12000 のとき,約 3.8 倍高速化

まとめと今後の課題 本研究のまとめ 今後の課題 メニーコア型の浮動小数点アクセラレータ CSX600 を用いて非対称固有値計算のためのマルチシフトQR法を実装 アクセラレータの性能を引き出すには,ブロックサイズを大きく取る必要あり しかしその結果,level-3 BLAS 以外の(O(n2)の部分の)計算時間が増大 再帰型アルゴリズムへの変換などの手法を用いることで,O(n2)の部分についても level-3 BLAS 化を行い,全体を高速化 今後の課題 CPU とアクセラレータの仕事の分担のさらなる効率化 他のアクセラレータを用いた性能評価