固有値計算のための三重対角化処理の並列化と キャッシュ向け最適化 2004年11月22日 名古屋大学 計算理工学専攻 山本有作 目次 1. 固有値計算の概要 2. 並列化とキャッシュ向け最適化の基本的技法 3. 三重対角化処理の並列化 4. 三重対角化処理のキャッシュ向け最適化 5. 今後の展開 1. 固有値計算の概要 • 固有値計算とその応用 • 固有値・固有ベクトル計算の流れ • 各部分の演算量 • 三重対角行列 T に対する固有値・固有ベクトル解法 固有値計算とその応用 • 対象とする問題 – 標準固有値問題 Ax = λx (A: 実対称またはエルミート行列) • 対象とする計算機 – 共有メモリ型並列計算機 – 分散メモリ型並列計算機 – SMPクラスタ • 固有値計算の応用分野 – 分子計算,統計計算,構造解析など 固有値・固有ベクトル計算の流れ 実対称行列 A 計算内容 計算手法 三重対角化 Q*AQ = T (Q: 直交行列) ハウスホルダー法 三重対角行列 T 三重対角行列の 固有値・固有ベクトル計算 Tyi =λi yi Tの固有値 {λi }, 固有ベクトル {yi } 逆変換 Aの固有ベクトル {xi } xi = Qyi QR法 DC法 二分法・逆反復法 Dhillon のアルゴリズム 逆変換 各部分の演算量 • N×N の実対称行列 A に対し,M 組の固有値・固有ベク トルを求める場合 – ハウスホルダー法による三重対角化: (4/3)N3 – 三重対角行列の固有値・固有ベクトルの計算: O(NM) ~ O(N3) (解法および固有値の分布により大きく異なる。) – 逆変換: 2N2 M M≪N の場合は,三重対角化の演算量が支配的 本報告ではこの部分に絞って並列化・最適化の手法を述べる。 三重対角行列 T に対する固有値・固有ベクトル解法 解法 概要 計算量 並列化 一部の固有値 ・固有ベクトル のみの計算 QR法 相似変換によりTを 対角行列に変換 O(N2) + O(N3) 容易 不可 DC法 (分割統治 法) Tを再帰的に半分の サイズの行列に分割 O(N2) ~ O(N3) 容易 不可 二分法・ 逆反復法 二分法で固有値,逆 反復法で固有ベクトル を計算 O(NM) 非自明 + O(NM2) Dhillon の アルゴリズム 逆反復法の改良 (dqds,RRR,twisted dqds = differential qd分解などの利用) with shift O(NM) + O(NM) 容易 RRR = Relatively Robust Representation; T をLLt の形で表現して計算を進める手法 可 可 2. 並列化とキャッシュ向け最適化の基本的技法 • 共有メモリ型並列計算機 • 分散メモリ型並列計算機 • キャッシュメモリの有効利用 • BLASの利用による高性能化 並列計算機のアーキテクチャ 共有メモリ型並列計算機(SMP) SMPクラスタ 地球シミュレータ Itaniumサーバ Power Mac G5 分散メモリ型並列計算機 日立 SR11000 日立 SR2201 PCクラスタ Power Mac G5 クラスタ 共有メモリ型並列計算機 • 構成 – 複数のプロセッサ(PU)がバスを キャッシュ PU0 通してメモリを共有 – PUはそれぞれキャッシュを持つ。 バス PU1 PU2 PU3 メモリ • 特徴 – メモリ空間が単一のためプログラミングが容易 – PUの数が多すぎる(>20個)と,アクセス競合により性能が低下 • PU間同期 – 他PUの計算結果を使って計算を 行う場合は,同期が必要 PU0 PU1 PU2 PU3 時間 DO IP = 0, 3 内積計算の例 DO I = 1, 25 S(IP) = S(IP) + A(IP*25+I)*B(IP*25+I) END DO PU間同期 END DO S = S(0)+S(1)+S(2)+S(3) 共有メモリ型並列計算機向けの高性能化手法 • PU間の負荷分散均等化 – 各PUの処理量が均等になるよう 処理を分割 – 密行列向けのアルゴリズムでは 比較的容易 キャッシュ PU0 PU1 PU2 PU3 バス メモリ • PU間同期の削減 – 同期には通常,数百サイクルの時間が必要 – 並列粒度の増大による同期回数の削減が性能向上の鍵 • キャッシュメモリの有効利用 – 演算順序の変更等により,キャッシュ中のデータの再利用性を向上 – PU間でのアクセス競合を防ぎ,アクセスを高速化 分散メモリ型並列計算機 • 構成 – 各々がメモリを持つ複数のPUを キャッシュ PU0 ネットワークで接続 メモリ – PUはそれぞれキャッシュを持つ。 • 特徴 PU1 PU2 ネットワーク – 数千~数万PU規模の並列が可能 – PU間へのデータ分散を意識したプログラミングが必要 • PU間でのデータ転送 – 他PUの計算結果,あるいは他PUの持つデータを使って計算を 行う場合は,PU間でのデータ転送が必要 PU3 分散メモリ型並列計算機向けの高性能化手法 • PU間の負荷分散均等化 – 共有メモリ型の場合と同様 • データ転送の削減 キャッシュ PU0 PU1 PU2 PU3 メモリ ネットワーク – 転送には通常,数千サイクルのセットアップ時間が必要 – データ1個の転送には,演算1回の数十倍の時間が必要 – アルゴリズムとデータ分散方法の工夫により,データ転送量・転送 回数を削減することが性能向上の鍵 • キャッシュメモリの有効利用 – 演算順序の変更等により,キャッシュ中のデータの再利用性を向上 – 相対的に遅い主メモリへのアクセスを削減し,計算を高速化 SMPクラスタ • 構成 – 複数の共有メモリ型並列計算機 (SMP)をネットワークで接続 • 特徴 PU0 PU1 PU2 メモリ PU3 PU0 PU1 PU2 メモリ PU3 PU0 PU1 PU2 メモリ ネットワーク – 各ノードの性能を高くできるため,比較的少ないノード数で高性能 を達成できる。 – プログラミングは,ノード内部の計算では共有メモリ型並列機とし て,ノードをまたがる計算では分散メモリ型並列機として行う。 • 高性能化手法 – ノード内部の計算では共有メモリ型並列機向けの手法を適用 – ノードをまたがる計算では分散メモリ型並列機向けの手法を適用 PU3 キャッシュ向け最適化の基礎 データ転送速度 非常に大 レジスタ 演算器 8~128 ワード データ転送速度大 キャッシュ 数100Kバイト ~ 数Mバイト データ転送速度小 主メモリ 数100Mバイト ~ 数Gバイト • 演算器と主メモリの速度差は,年々増大。 • キャッシュにデータがある間に演算をまとめて行う(データの再利用) ことにより,主メモリのデータ転送速度の遅さをカバーできる。 BLASの利用による高性能化 • BLASとは – Basic Linear Algebra Subprograms の略 – 個々のマシン向けにチューニングした基本行列演算のライブラリ • BLASの種類 – BLAS1: ベクトルとベクトルの演算 • 内積 c := x t y • AXPY演算 y: = ax + y など – BLAS2: 行列とベクトルの演算 • 行列ベクトル積 y := Ax • 行列のrank-1更新 A := A + xyt – BLAS3: 行列と行列の演算 • 行列乗算 C := AB など = A × A = A + × C = A × B BLASにおけるデータ再利用性と並列粒度 • BLAS1 – 演算量: O(N), データ量: O(N) – データ再利用性: なし – 並列粒度: O(N/p) (N: ベクトルの次元,p: プロセッサ台数) • BLAS2 – 演算量: O(N2), データ量: O(N2) – ベクトルデータのみ再利用性あり – 並列粒度: O(N2/p) = A × A = A + × • BLAS3 – 演算量: O(N3), データ量: O(N2) – O(N)回のデータ再利用が可能 – 並列粒度: O(N3/p) C = A × B 演算をできる限り BLAS2,3で行うことが高性能化のポイント 現在利用可能な最適化BLAS • プロセッサメーカーの提供するBLAS – Intel MKL,AMD ACML,IBM ESSL など – メーカーによっては共有メモリ向け並列化版もあり。 • ATLAS(Automatically Tuned Linear Algebra Subprograms) – 対象プロセッサに合わせて自動的に性能を最適化するBLAS – http://math-atlas.sourceforge.net/ より入手可能 – 共有メモリ向け並列化版もあり。 • GOTO BLAS – – – – テキサス大学オースチン校の後藤和茂氏によるBLAS http://www.cs.utexas.edu/users/flame/goto/ より入手可能 この3種のBLASの中では,多くの場合最高速 共有メモリ向け並列化版も(一部)あり。 3. 三重対角化処理の並列化 • ハウスホルダー法による三重対角化 • 共有メモリ向けの並列化 • サイクリック列分割による並列化 • Scattered Square 分割による並列化 • 性能評価 ハウスホルダー法による三重対角化 • 鏡像変換による列の消去 ベクトル – 鏡像変換 H = I – a uut • Hは対称な直交行列 • 与えられたベクトルの第1成分以外をゼロにする。 左からH を乗算 • 第 k ステップでの処理 0 0 0 0 0 左からH を乗算 0 右からH を乗算 k 非ゼロ要素 ゼロにしたい部分 影響を受ける部分 各ステップでの処理の詳細 •鏡像変換ベクトルの作成 0 σ= sqrt(d td) u = (d1 – sgn(d1)σ, d2, … , dN – k ) α= 2 /∥u∥2 0 C d •H による両側からの乗算 k HCH = (I – a uu t)C (I – a uu t) = C – a uu tC – aC uu t + a2 uu tC uu t = C – up t – pu t + (1/2) a uu tpu t + (1/2) a up tuu t ( p ≡ aC u ) = C – uq t – qu t ( q ≡ p – (1/2) a (p tu) u ) •実際には,C の対称性を利用し, HCH は下三角部分のみ計算する。 •p ≡ aC u の計算でも,C の上三角部分は下三角部分で代用する。 ハウスホルダー法のアルゴリズム [Step 1] k = 1からN –2まで以下の[Step 2] ~ [Step 8]を繰り返す。 [Step 2] 内積 σ(k) = sqrt(d (k)t d (k)) の計算 [Step 3] 鏡像変換ベクトル作成: u(k) = (d (k)1 – sgn(d (k)1)σ(k), d (k)2, … , d (k)N – k ) [Step 4] 規格化定数の計算: α(k) = 2 /∥u(k)∥2 [Step 5] 行列ベクトル積: p(k) =α(k)C (k)u(k) [Step 6] ベクトルの内積: β(k) =α(k) u(k)tp(k) /2 [Step 7] ベクトルの加算: q(k) = p(k) –β(k)u(k) [Step 8] 行列のrank-2更新: C (k) = C (k) – u(k)q(k)t – q(k)u(k)t 0 0 d (k )1 C (k ) d (k ) k ピボット列 ピボット行 ハウスホルダー法の特徴 • 演算量 – 行列サイズが N のときの演算量: 約 (4/3)N3 • 行列ベクトル積の演算量: 約 (2/3)N3 • rank-2更新の演算量: 約 (2/3)N3 • データの再利用性 – 演算はほとんどBLAS2のため,行列データの再利用性なし – キャッシュマシンでは高い性能が期待できない。 ブロック化など,アルゴリズム上の工夫が必要 • 並列粒度 – BLAS2のため O(N2/p) であり,比較的高い。 共有メモリ向けの並列化 • 基本方針 – 行列ベクトル積 および rank-2更新 の部分について,BLAS2レベ ルで並列化 – 並列BLASを使えば,並列化は極めて容易 • PU間でのアクセス競合の回避 – BLAS2はデータ再利用性がないため, バスを通した共有メモリへのアクセスが 頻発 – アクセス競合による性能低下を回避 するには,後に述べるキャッシュ向け 最適化技法が有効 キャッシュ PU0 PU1 PU2 バス メモリ PU3 分散メモリ向けの並列化 (1-1) • ブロックサイクリック列分割による並列化 (Dongarra et al., 1992) 0 0 – 行列を幅 b の列ブロックに分割し,ブロックを 周期的にプロセッサに割り当てる。 C (k ) 鏡像変換 ベクトル k • 各ステップの処理 (1) 鏡像変換ベクトル u(k) およびα(k) の作成 ・第 k 列を担当するPUが実行 ブロード キャスト (2) u(k) およびα(k) のブロードキャスト ・第 k 列を担当するPUが他の全PUに送信 ・二進木を使った場合,通信にかかる時間は O(N log p) (ベクトル u(k) の長さは平均 N/2) u (k ) 分散メモリ向けの並列化 (1-2) • 各ステップの処理(続き) (3) C (k) の下三角部分と u(k) との積 ・各PUは自分の行列要素を使って部分和ベクトルを計算 ・結果の集計/ブロードキャストの通信時間はO(N log p) (4) C (k) の上三角部分と u(k) との積 ・各PUは自分の行列要素を使って結果ベクトルの一部を計算 ・全対全通信により全PUに結果ベクトルの全要素を分配する 通信時間はO(N log p) (5) (3)と(4)の結果の集計,β(k) の計算,q(k) の計算 × = 部分和の集計 /ブロードキャスト × = 全対全通信により 結果ベクトルを分配 (6) rank-2更新 C (k) = C (k) – u(k)q(k)t – q(k)u(k)t ・各PUで独立に計算 以上より,ブロックサイクリック分割の通信時間は O(N log p) 分散メモリ向けの並列化 (2-1) • Scattered Square 分割による並列化 (Choi et al., 1995) 0 0 – 行列を b×b のブロックに分割し,ブロックに対して 大きさ √p× √ p のプロセッサテンプレートを周期的 に割り当てる。 鏡像変換 ベクトル C (k ) k • 各ステップの処理 (1) 鏡像変換ベクトル u(k) およびα(k) の作成 ・第 k 列を担当するPU群が(通信しながら)実行 (2) u(k) およびα(k) のブロードキャスト u (k ) ・第 k 列担当のPUが,まず横方向のPUにブロードキャスト ・次に,対角ブロックを担当するPUが縦方向のPUに ブロードキャスト ・通信にかかる時間は O(N log p /√p) ブロー ドキャス ト ブロード キャスト 分散メモリ向けの並列化 (2-2) • 各ステップの処理(続き) (3) C (k) の下三角部分と u(k) との積 × = ・各PUは自分の行列要素を使って部分和ベクトルを計算 ・横方向に集計し,対角PUに集める(O(N log p /√p) )。 部分和を横方向に集計し, 結果を対角PUに集める。 (4) C (k) の上三角部分と u(k) との積 ・各PUは自分の行列要素を使って部分和ベクトルを計算 ・縦方向に集計し,対角PUに集める(O(N log p /√p) )。 (5) (3)と(4)の結果の集計とブロードキャスト × = 部分和を縦方向に集計し, 結果を対角PUに集める。 ・対角PUにおいて,(3)と(4)の結果を集計 ・結果の部分ベクトルを,横方向のPUにブロードキャスト(O(N log p /√p) ) ・結果の部分ベクトルを,縦方向のPUにブロードキャスト(O(N log p /√p) ) 分散メモリ向けの並列化 (2-3) • 各ステップの処理(続き) (6) β(k) の計算,q(k) の計算 (7) rank-2更新 C (k) = C (k) – u(k)q(k)t – q(k)u(k)t ・各PUで独立に計算 • 両並列化方式の比較 – 各PUの計算時間 • 各ステップの計算時間は両方式ともO(N2 / p) (p に反比例して減少) – 通信時間 • ブロックサイクリック列分割は O(N log p) (pとともに増加) • ブロックScattered Square 分割は O(N log p /√p) (pとともに減少) PU台数が増えるほど, ブロックSS分割が有利 サイクリック列分割とSS分割の性能比較 10 5 性能予測モデルによる推定性能 SS分割 Mflops 10 4 サイクリック列分割 10 10 3 2 10 0 10 1 10 2 10 3 10 4 Num. of Proc. 超並列ではScattered Square分割が優位 SMPクラスタ上での性能評価 ブロックScattered Square 分割による並列化(MATRIX/MPP HZES1MDP使用) SR8000/F1(SMPクラスタ)の1~16ノードで評価。キャッシュ向け最適化あり。 N=2000 ~ 32000 のエルミート行列での性能 100 90 Gflops • • • 80 70 60 50 40 30 20 10 0 1000 1832[sec] 16-nodes 4-nodes 902[sec] 1-node 447[sec] 10000 Matrix size 100000 4. 三重対角化処理のキャッシュ向け最適化 • Dongarra のアルゴリズム • Bischof のアルゴリズム • Wu のアルゴリズム • 性能・精度評価 Dongarraのアルゴリズム • 原理(Dongarra et al., 1992) – 複数(L’ 本)のピボット列・行を溜めておき,後でまとめて更新 – rank-2更新の部分を行列乗算(BLAS3)にでき,キャッシュマシン で有効 – LAPACK,ScaLAPACK 等で採用され,広く使われる。 0 U(K*L’) 0 C(K*L’) = C((K– 1)*L’) d(k) d(k+1) d(k +2) d(k +3) – × Q(K*L’)t Q(K*L’) – U(K*L’)t × rank-2L’ 更新(BLAS3使用) Dongarra のアルゴリズム [Step 1] K = 1からN /L’ まで以下の[Step 2,3,12] を繰り返す。 [Step 2] U ((K–1)*L’) = φ,Q ((K–1)*L’) = φ(0行0列の行列) [Step 3] k = (K–1)*L’+1からK*L’ まで以下の[Step 3-1~8]を繰り返す。 [Step 3-1] 部分ハウスホルダ変換: d(k) := d(k) – U(k–1)(Q(k–1)t)k–(K–1)*L’ – Q(k–1)(U(k–1)t)k–(K–1)*L’ [Step 3-2] 内積 σ(k) = sqrt(d(k)t d(k))の計算 [Step 3-3] 鏡像変換ベクトル作成: u(k) = (d(k)1 – sgn(d(k)1)σ(k), d(k)2, … , d(k)N– k ) [Step 3-4] 規格化定数の計算: α(k) = 2 /∥u(k)∥2 [Step 3-5] 行列ベクトル積:p(k) =α(k) (C (k) – U(k–1)Q(k–1)t – Q(k–1)U(k–1)t) u(k) [Step 3-6] ベクトルの内積: β(k) =α(k) u(k)tp(k) /2 [Step 3-7] ベクトルの加算: q(k) = p(k) –β(k)u(k) [Step 3-8] U (k) = [U(k–1)| u(k) ],Q (k) = [Q(k–1)| q(k) ] [Step 12] 行列のrank-2L’ 更新: C (K*L’) = C ((K–1)*L’) – U (K*L’)Q (K*L’)t – Q (K*L’)U (K*L’)t BLAS-3使用 Dongarra のアルゴリズムの特徴と問題点 • データの再利用性 – 演算量の半分を占める rank-1 更新は BLAS3 (行列乗算)化 – しかし,残り半分を占める行列ベクトル積は そのまま 後者がネックとなり,キャッシュマシンではピークの10~25%程 度の性能しか達成できない場合が多い。 行列ベクトル積の部分も BLAS3に置き換えられるアルゴリズム が必要 • 計算精度 – 広く利用され,計算精度については十分な確認が行われている。 Bischof のアルゴリズム • 原理(Bishof et al., 1993, 1994) – 密行列 A をまず半帯幅Lの帯行列 B に変換し,次にこの帯行列 を三重対角行列 T に変換する。 次数 N 半帯幅 L 帯行列化 約 (4/3)N3 A 0 村田法 O(N2L) 0 B 0 0 T • 三重対角化を2段階で行うことの利点 – 帯行列への変換は,BLAS3のみを使って実行可能。 – 帯行列から三重対角行列への変換の演算量はO(N2L)であり, 前半部に比べてずっと小さい。 Bischof のアルゴリズム ブロックベクトル ブロック鏡像変換によるブロック列の消去 – ブロック鏡像変換 H = I – UαUt • Hは直交行列 • 与えられたブロックベクトルの 第1ブロックを上三角行列にし, それ以外をゼロにする。 左からH を乗算 第kステップでの処理 0 0 左からH を乗算 非ゼロ要素 0 0 0 ゼロにしたい部分 右からH を乗算 0 影響を受ける部分 Bischof のアルゴリズム [Step 1] K = 1からN /L–1まで以下の[Step 2] ~ [Step 6]を繰り返す。 [Step 2] D(K) を第1ブロックが上三角行列で第2ブロック以下が ゼロ行列であるブロックベクトルに変換するブロック鏡像変換 I – U(K) (K)U(K)tを求める。 [Step 3] 行列・ブロックベクトル積: P(K) = C (K)U(K)α(K) [Step 4] ブロックベクトルの内積: β(K) = α(K)tU(K)tP(K) / 2 [Step 5] ブロックベクトルの加算: Q(K) = P(K) –U(K)β(K) [Step 6] 行列のrank-2L更新: C (K) = C (K) – U(K)Q(K)t – Q(K)U(K)t すべてBLAS3(行列乗算) Bischof のアルゴリズムの特徴と問題点 • データの再利用性 – 演算のうち,O(N3) の部分はすべて BLAS3 化 – キャッシュサイズに応じて L を選ぶことで,データ再利用性を最 大化することが可能 • 計算精度 – 多様な例題を用いて体系的に評価した結果は,まだ報告されて いない。 • 演算量 – 後半部(村田法)の演算量は L に比例して増加 – 演算量を抑えようとすると,データ再利用性にとって最適な L を 選べない可能性あり Wu のアルゴリズム • 原理(Wu et al., 1996) – Bischofのアルゴリズムにおいて,複数のピボット列・行を溜めて おき,後でまとめて更新 – L’ 本溜めることで,rank-2L 更新の部分を rank-2LL’ 更新にでき, データ再利用性を更に向上可能 後半部(三重対角化)の演算量を増やさずに,前半部(帯行列 化)の性能を向上できる可能性あり 4. 性能・精度評価 • 性能評価 – テスト例題 • N = 480,960,1920,3840 のフランク行列の三重対角化 • Dongarra,Bischof,Wu の3つのアルゴリズムの性能を比較 – 評価マシン • Opteron (1.6GHz) • Alpha 21264A (750MHz) ・Xeon (2.0GHz) ・Ultra SPARC III (750MHz) – 評価方法 • 演算量を(4/3)N3 とし,三重対角化に要した時間より各アルゴ リズムのMFLOPS値を算出して比較 • 各アルゴリズムのブロックサイズ L,L’ は,性能が最大にな るよう決定 • BLASルーチンとしては,全マシンで ATLAS 3.6.0 を使用 Opteron (1.6GHz) 上での性能 1800 Performance (GFLOPS) 1600 1400 L=24, L’=4 Dongarra Bishof Wu L=48 1200 1000 800 L’=32 600 400 200 0 480 960 1920 3840 Matrix size Wu の方法は Dongarra の方法に比べて約2倍の性能を達成 N = 3840 のとき,Wu の方法はピークの50%以上の性能を達成 Xeon (2.0GHz) 上での性能 1400 Performance (GFLOPS) 1200 L=24, L’=4 Dongarra Bischof Wu L=48 1000 800 L’=32 600 400 200 0 480 960 1920 3840 Matrix size Wu の方法は Dongarra の方法に比べて2倍近い性能を達成 Alpha 21264A (750MHz) 上での性能 900 Performance (GFLOPS) 800 700 L=24, L’=4 Dongarra Bishof Wu L=48 600 500 400 L’=32 300 200 100 0 480 960 1920 3840 Matrix size Wu の方法は Dongarra の方法に比べて約2倍の性能を達成 N = 3840 のとき,Wu の方法はピークの50%以上の性能を達成 Ultra SPARC III (750MHz) 上での性能 500 Performance (GFLOPS) 450 400 L=24, L’=2 Dongarra Bishof Wu L=48 350 300 250 200 L’=32 150 100 50 0 480 960 1920 3840 Matrix size Wu の方法は Dongarra の方法に比べて2倍以上の性能を達成 精度評価 • テスト例題 – – – – フランク行列 aij = min(i, j) 2次元ラプラス方程式の5点差分により得られる行列 Harwell-Boeing Sparse Matrix Collection の行列 乱数行列 (要素が [0, 1] の一様乱数である対称行列) • 評価マシン – Opteron (1.6GHz) • 評価方法 – 各解法に対し,計算した固有値λi’の相対誤差の最大値 max 1≦i≦N |λi’ – λi| / |λi| を評価 – 比較対象の固有値λiとしては,解析解あるいはオリジナルのハウ スホルダー法により求めた固有値を使用 フランク行列に対する計算精度 Matrix size 1.00E-06 480 960 1920 3840 Maximum relative error 1.00E-07 1.00E-08 1.00E-09 Dongarra Bischof Wu 1.00E-10 1.00E-11 1.00E-12 Bischof 及び Wu の方法の誤差は,Dongarra の方法と同程度 2次元5点差分の行列に対する計算精度 Matrix size 1.00E-10 480 960 1920 3840 Maximum relative error 1.00E-11 1.00E-12 1.00E-13 Dongarra Bischof Wu 1.00E-14 1.00E-15 1.00E-16 Bischof / Wu の方法の誤差は Dongarra の方法に比べやや大きい。 しかし,増大の程度は1桁以内に収まっている。 Harwell-Boeing Collection の行列に対する計算精度 Matrix name 1.00E-03 BCSSTK8 BCSSTK12 BCSSTK13 BCSSTK23 BCSSTK24 Maximum relative error 1.00E-04 1.00E-05 1.00E-06 Dongarra Bischof Wu 1.00E-07 1.00E-08 1.00E-09 Bischof / Wu の方法の誤差は Dongarra の方法に比べやや大きい。 しかし,増大の程度は2~3倍以内に収まっている。 乱数行列に対する計算精度 Bischof / Wu の方法の誤差は Dongarra の方法に比べやや大きい。 しかし,増大の程度は1桁以内に収まっている。 キャッシュ向け最適化に関するまとめ • 性能・精度評価の結論 – キャッシュマシン向け三重対角化アルゴリズムとしては Wu のア ルゴリズムが最高速であり,大規模問題では Dongarraのアルゴ リズムの約2倍の性能が達成できる。 – 特に N = 3840の場合,Wu のアルゴリズムでは Opteron,Alpha 21264Aでピークの50%以上の性能が達成できる。 – Bischof / Wuのアルゴリズムによる固有値の相対誤差は, Dongarraのアルゴリズムに比べてやや大きい。しかし,増大の程 度は多くの場合2~3倍以内,最大でも1桁程度である。 より詳細なデータについては, http://www.na.cse.nagoya-u.ac.jp/~yamamoto/work.html を参照 5. 今後の展開 • より多様な例題での精度評価 • 固有ベクトル計算部分の実装と性能・精度評価 • 共有/分散メモリ型計算機上での並列化と性能評価 • 性能パラメータ L,L’ の自動最適化
© Copyright 2024 ExpyDoc