• Tidak ada hasil yang ditemukan

keisanki kozo o ikasu kosokuka suchi keisan arugorizumu no puroguramingu giho no kenkyu

N/A
N/A
Protected

Academic year: 2021

Membagikan "keisanki kozo o ikasu kosokuka suchi keisan arugorizumu no puroguramingu giho no kenkyu"

Copied!
100
0
0

Teks penuh

(1)

芒.・-y肺r-=g・穴c一唇色`・j .ミミミ .__ ・ .ミ.- -I ごー − ¥ 〃

プノノゴンズムこプっプラ

廼7雰冶

Lぶこ乞t-λΞバ£・乙刄yノ’ク;べ.yこj.Jzン:ぺβ-ぶ.ら?

 J皿      ㎜ −I皿 ㎜| 2.ロ !一 '‘ひ.'こ ・.I ・i/ こ Z こ. マ t − ? − ㎜ ■ ■ − / ` K ・ 。 ・ 。 ’

ミンク言言腿万万紀

−〃 -/

(2)
(3)

-W

概要

l  三角分解をはじめとする数値計算アルゴリズムのなかで,計算に高速性が求められるもの の多くは,行列(2次元配列)に対して,3重以トのルーブ構造を特つ.これらの多くは,行 と列の添宇のほかに綿紡添宇がループ添字に加わり,1つの行列要素は複数圓アクセスされる 特徴をもっている.70年代の汎用計算機ではこれらのアルゴリズムは,数学的な定式化をト レースするようにプログラミングされた.  科学技術計算用の計算機の性能は非常に優れたものになった.しかしこの高速性は新しい計 算機アーキテクチャの導入を伴ったので,高速性を得るためには,その計算機に特有のプログ ラミング技法が用いられた.プログラミング技法が複雑な場合,数式とプログラムの関係は分 かりにくいものになる.  長期的なハードウェアテクノロジの進歩は,論理回路の微細化によって計算そのものを非常 に高速化したので,計算機内部でデータを移動する性能はとり残されたかのように見える.こ の長期的な動向に照らすと,計算機ごとに独立に開発されたプログラミング技法に,2つの性 能のバランスの変化を克服する技法の流れを読むことかできる.高速化にデータ移動が関与 することは,初期の計算機で用いられた演算だけに注目するプログラミング技法が,(計算機 のハードウェア性能を十分に引き出す目的では)役立だなくなったことを意味する.  ベクトル計算機やRISC型のスーパースカラー計算機で用いられる高速化プログラミング技 法は,計算を並行処理し(パイプライン演算器を休みなく稼動させる),計算機内部でのデー タ移動を削減する目的で,3重のループを再構成する.これらの計算機は主記憶装置と演算器 の間に,ベクトル計算機はベクトルレジスタ,RISC計算機ではレジスタファイルとキャッシュ を備えている.これらの構成要素にデータを溜め込み,再利用することではじめてデータ移動 量を削減し,パイプライン演算器の性能を十分に引き出すことが可能になるのである.ところ が初期の計算機モデルである状態遷移マシンでは,演算を追跡することはできても,データ移 動を追跡することはできない.  そこで著者は,これらの計算機でのデータ移動を把握するために,「主記憶装置と演算谷間 にある容量の作業域を持つ」計算機モデルを考案した.このモデルの上でデータ移動を制御す る問題を,「主記憶装置と作業域間のデータ移動を少なくする計算順序を探す問題」として捉 えることで,特定の計算機に対するプログラミング技法を一般化する視点を確立した.  このモデルの上での計算順序の問題は数学的であり,計算機構造の属性は捨象できる1.こ の視点から,ベクトル計算機とRISC計算機に共通する高速化のための計算順序を生成する プログラミング規範を,「外側ループストリップマイニング」に絞ることができた.そしてこ の規範の変形である「外側ループアンローリング」を加えることで,ベクトルレジスタ,レジ スタファイル,キャッシュを有効利用するプログラミング技法を統一して捉えることに成功し た.すなわち「元のアルゴリズムの3重にネストしたループに,縮紡添字を軸とするループ 変換を施すことでデータ移動を制御できるルーブ構成を作り,性能評価式を用いてハードウェ アの特性に適したブロックサイズを求め,コンパイラの機能に適したプログラミングを行う」 のである.  さらにこの規範が,アルゴリズムのもつ性質(計算順序の制約)に照らして適用可能な条件 1本論文では、計算機アーキテクチャとハードウェア実装をまとめて計算機構造と呼ぶことにする.

(4)

I I I I を明らかにした.この条件は「ループ交換可能」である.  ニの方法で変換されたブログラムの計算順序をあらためて代数学的に眺めると,小行列単位 の定式化ができる.この定式化は外郎ファイルに行列を,小行列を1レコードとして置くブ ロック化アルゴリズムと類似している.レジスタやキャッシュのためのブロック化にもこの定 式化を用いることで,数式とブログラムの関係も分かりやすく整理できる.  ルーブ交換可能なアルゴリズム(これを本論文ではレベル3性能のアルゴリズムと呼ぶ)は, 計算機の演算性能を十分に引き出すプログラムとして実現できる.行列に対して3重のルー プ構造を持つアルゴリズムであっても,「ループ交換不能」なアルゴリズムは,行列要素のア クセスに対し1回か2回程度の乗算を施す計算密度の低いループ計算を繰り返すプログラム としてしか実現できず,その性能は計算機のデータ移動性能を越えることはできない.計算機 の演算性能とデータ移動性能のバランスは,よりデータ移動性能に厳しい方向シフトするこ とが予想されるので,著者の提唱するプログラミング規範の重要性は増すだろう.  著者の方法はループ交換可能性を判定するだけでループ変換を機械的に適用することがで きるので,種々のアルゴリズムに応用が容易である.具体的には行列行列積や三角分解はルー プ交換可能であり,ハウスホルダー変換はループ交換不能である.三角分解も完全軸選択では ルーブ交換不能になる.またハウスホルダー変換も定式化をWY表現によるものに変更する とループ交換可能になる.  本論文の構成は5つの章からなる.第1章では£じ分解のループ交換可能性を,線形代数学 による解析とアルゴリズムに対する依存性解析の両面から確かめる.ループ交換可能性の問 題を,この両面から比較して論じたのは著者が最初であろう.特に後者についての反復空間で の依存性グラフ(図1)は類例を見ないものであり,著者の業績である.  第2章では大規模な行列の三角分解に関する古典的なアプローチについてまとめる.レジス タやキャッシュに対するブロック化アルゴリズムは,計算機の専門家でなければ理解し難い面 をもっている.著者はこの方法が,70年代から外部ファイルに対して行われて一般的に行わ れた方法と,線形代数学的には等価なことを示すことで,数値解析ユーザのレジスタ/キャッ シュブロック化の理解を助けた.  第3章ではベクトル計算機上での方法を述べる.ベクトルレジスタ型ベクトル計算機の登 場による急激な計算能力の向上は,計算機内部でのデータ移動を険路とした.この険路を解消 するための外側ルーブストリップマイニングについて述べ,次にこの技術のキャッシュブロッ ク化への展開について述べる.ペクトルレジスタはアーキテクチャから見えるか,キャッシュ は透過という違いかあるが,著者は両者が計算順序の問題としては等価であることを示して きた.この観点が,階層型記憶方式のベクトル計算機に対するF記憶階層にすなおなプログラ ム構成Jを導く.すなわちキャッシュ容量やベクトルレジスタ長の違いを吸収する柔軟なプロ グラミング技法の考案に繋がるのである.著者はこの技法の普及に貢献した.またコンパイラ の機能を補うために著者が考案した「ペクトルレジスタ配列」について触れる.  第4章ではRISC計算機での方法を述べる.RISCプロセッサはレジスタファイルとキャッ シュを持つので,階層型記憶方式のベクトル計算機用ブログラムは比較的簡単にRISC計算機 用に書き直すことができる.具体的には,ベクトルレジスタのためのループ構成を,スカラー レジスタを効果的に使用するループ構成に変更する(縮約添宇のループ構成での位置を変え る).さらに内側ループの特性を,計算量,データ移動量,依存性の3つを数量化して表し, またRISCプロセッサの特性を「性能評価式」で表し,前者を後者の変数に代入することで対 象RISCプロセッサ上でのループ性能を見積もる方法を開発した.これによりそれまで職人 的,試行錯誤的に行われていたチューニング作業を単純化し,作業時間を大幅に滅らすことに 成功した.  第5章では分散メモリ型並列計算機での方法を述べる.ここでも計算機モデルからスター トし,現実の計算機の属性を捨象するアプローチを採ることができる.ここでは配列の分害I』 方式とデータ移l]量(通信量)の関係を述べる.またグローノリレの視野での計算法の記述と, それに対するループ変換によー⊃てSPMD化を達成できる.はじめに£び分解を含むいくつか の例を述べ,これらを踏まえて,FEMを対象とする疎行列の三角分解の新しい計算法である 7多重スカイライン法」について述べる.これは著者の考案であり,これが有効であれば,計 算力学をはじめとする広い分野の研究者/FEMューザヘの多大な貢献に繋がる.  本論文は三角分解を例としたものであるが,高速性を必要とする数値計算アルゴリズムが, 対象となる計算機の上でどのような姿のプログラムに仕立てられるか,またその時考慮しな くてはならない須山ま何かという問題に触れたものである.計算機構造の複雑化によって,プ ログラムが複雑になることはできるかぎり食い止めなければならない.ハードウェア性能を引 き出すために,ハードウェア特性を直接プログラミングすることは,プログラムの保守性と可 搬性にはマイナスである.いったん特定のハードウェアから離れて,計算機モデル上での計算 順序の問題としてその解を得られれば,プログラムの一般性を保てるのである.

(5)
(6)

I -   . . ・ 5 分散メモリ型並列計算機と三角分解   5,1 分散メモリ型並列計算機CSP2)‥ 5.1.1 相互結合網 .. 5.1.2 HPSのトポロジ 5.2.4 MPLと相互結合網 5,4 1r分解‥ 5.4.5 目 次 vii    105 ‥,IC5 ‥バ(16 ‥.1n8 ‥.110 ‥.111 ‥.111 ‥.112 ‥,114 .‥115 ‥.116 ‥.119 ‥.121 ‥.124 ‥.124 ‥.126 ‥.127 ‥.128 ‥.129 ‥.134 ‥.134 ‥.135 ‥.141 ‥.144 152 155 161 161 vi 目  次 2.4.4 部分構造法‥ 2.5まとめ. 3 ベクトル計算機と三角分解   3.1 ベクトル計算機‥・・・・・・・・・・・・・・・・・・・・・ 3,1.1 算術パイプラインとベクトル化可能性 ‥・・・・・・・・・・・・・・・・ 3.1.2 ベクトルレジスタ型スーパーコンピュータ‥・・・・・・・・・・・・・・ 3.1.3 ペクトルレジスタとプログラミング‥.‥ 3.2 ベクトル計算機の発達‥・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 7︶¥ C¥MI9f f9 44 45 48 50   3.2.1 計算性能の強化・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・. 50   3.2.2 データ移動性能・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・. 52 3.3 普及型のベクトル計算機‥・・・・・・・・・・・・・・・・・・・・・・・・・・・. 54   3.3.1 仮想記憶方式のベクトル計算機‥・・・・・・・・・・・・・・・・・・・. 55 3.3.2 階層型記憶システムとプログ・ラミング ‥‥. 4 RISC計算機と三角分解 4.1 RISC計算機‥ 56 60 737374 76 iQ r’‘ C5 f g︶cx︶cx︶Q 96 96 99 5.2 メッセージ交換ライブラリ・・・・・・   5.2.1 控夕I」環境の初期化など‥‥ 5.3.1 ブロックサイクリック分割・・・・・・ 5.3.3 行タI』行列積の計算法 ・・・・・・

5.2.2 単一ノード問の通信(point.-to-poillt,conlnllュ 「。t.io11) 5.2.3 複数ノード間の通信(colle 殼e cnmmullicationト‥

5.3 分散メモリ型並夕I」計算機でのプログラミング.‥‥‥ 5,3.2 メッセージ交換型プログラムとその計算法の表記 5.4.1 1次元配列分霊II‥. 5.4.2 性能の予測と評価‥・・・・・・・・・・・・・・・ 5.4.3 分離通信による通信と計算のオーバーラップ‥ 5,4.4 測定値・・・・・・・・・・・ 5.5 疎行列の三角分解‥・・・・・・・   5.5.1 白動分割・・・・・・・・・・   5.5.2 解剖法順序による計算量.   5.5.3 多重スカイライン法 ‥.  5.6 まとめ・・・・・・・・・・・・・・・ 6 おわりに A関連プログラム A.1第1章のプログラム ‥. A.2第2章のプログラム ‥. 3.4 ベクトル計算機と£び分解・・・・・・・・・・・・・・・・・・・・・・・・・・・・・   3,4.1 スパコン向きの計算法・・・・・・・・・・・・・・・・・・・・・・・・・・. 60   3.4.2 プログラミングスタイル・・・・・・・・・・・・・・・・・・・・・・・・・. 62   3.4.3 階層型記憶システムのための計算法・・・・・・・・・・・・・・・・・・・. 64 3.5 ベクトル計算機の課題・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・. 67   3.5.1 Fortranと外側ループストリップマイニング‥・・・・・・・・・・・・. 67   3.5.2 主記憶装置の容量の限界・・・・・・・・・・・・・・・・・・・・・・・・・. 69 3.6 ベクトル計算機のまとめ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・. 71 2次元配列分割による£17分解‥. 5.5.4 多重スカイライン法の並列化 ・・・・・・・・・ 4.1.1 アーキテクチャ‥・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 4.1.2 スカラーパイプラ・イン・・・・・・・・・・・・・・・・・・・・    4.1.3 スーパースカラー計算方式・・・・・・・・・・・・・・・・・・・・・・・・. 79    4.1.4 パイプラインの並列化・・・・・・・・・・・・・・・・・・・・・・・・・・. 81    4.1.5  RS/6000のキャッシュの実装‥・・・・・・・・・・・・・・・・・・・・. 83 4,2 RISCプロセッサとプログラミング‥・・・・・・・・・・・・・・・・・・・・・. 85 4.2.1 性能評価式・・・・・・ 4.2.3 キヤッシュブロ .‥163 .‥164 ‥.169 ‥.173 A.3第3章のプログラム .‥‥ A.4第4章のプログラム ‥・・・・・・・・ A.5第5章のプログラム ‥‥ 4.2.2 レジスタブロック化 ・・・・・・・・・ 4.2.4 アルゴリズム・プリフヱッチ ・・・・・・・・・・ 4.3 RISC計算機と£17分解・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・   4.3.1 記憶階層にすなおなプログラム・・・・・・・・・・・・・・・・・・・・・・ 4.3.2 BLAS-3を用いたブロック化 ‥・・・・・・ 4.3.3 帯行列の£17分解のブロック化 ・・・・・・・・・・・・・・・・・・・・・.100 4、3.4 スカイライン行列の三角分解のブロック化 ‥.100 4.4 RISC計算機の位置付け ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・.103

(7)
(8)

一 I II − 1】 ノ ン 換口丿能性 3 I 0 4 1 1   α こ ぷ) ご (1.4) j 〔15〕 2 第1章 計算順序と乙じ分解の定式化 般的には次式が導かれる.ただしここでは軸選択は無視している. 11リ 一 一 Z. 一 一 a. 1 -%j ぐ Σ だ=1 aリ ̄ 1仙毬吻 J-l Σ た= liぴkj ) いぎjl (j・>j・1 (1.1)  この式に従って.Uの1行め,£の1列め,17の2行め,…と行と列を交互に計算する 方法をクラウト法という.なお,計算結果£と17は通常,領域節約の目的からメ1が置かれて いた配列に上書きされる. ガウス消去法(掃き出し法)では次のように計算順序を変更する. rla 1=1、71−1  dQ i =1+1.n   a2 ̄1)←べ: ̄11  enddQ  d6j・゜1+1.71   doi =1+1、n    ぐ=ぐ1’   enddQ  s7lddg enddQ こ い

j べ 防幻 j α ︲ 1 必λ ぐα  ここではaS7)はjの要素である.  ここで右上に括弧つきで示した添字1は,その要素の1回めの更新値である.式(1.1)と の関係は,上三角の要素(i≦j)についてヽj=心 ̄大下三角の要素(i>引について Z り 一 一 ぐ1) /・jjである.

1.2 定式化とループ交換可能性

 クラウト法とガウス消去法は,式やプログラムを比べても両者が全く同じ計算結果を与え ることが容易に判定できないほど,異なった計算法になっている.両者が同-・であることは, ぐ ̄1)=叫,岨 ̄1)/(こ ̄U)=敲なので,ガウス消去法のだのループを内側に移動(ルー プ交換)できれば証明できる. 1.2.1 基本変換行il」  ガウス消去法のアルゴリズムを,基本変換行列瓦を用いて示す.ただしz1【゜】=.4とする. dQ た=1,n−1  。4ぼl=j71Jゐ−ll (1.2) 1 . 2 定式¶Iヒ,りレーブ j瓦は対角項が1で,非対角項が第だ列の対角頓より'ドの要素以外は万口の行列である 凡 一 一 工  1 111+I,1 1 ら訣 1 r沃゜− ぼ | 起 立 陳 { t k k  柘.4朗により、.4出の第1列の下三角の要素がゼロになろ.いったん導入されたゼ『2要素 は、後続の変換でもゼロのままなので、瓦によ・て下三角の2夕I』目までゼロが導入される1. この操作を繰り返して、J'`-11は上三角行列17となる.       .4‘’1 ̄1J=j?.-lj?.-9…角角j7ぃ4回【=ひ】      (1,31  ガウス消去法はこの式の積を右から左へ,添字たの昇順に計算する.行列ji1は,行列 .4【&-1】=沢1-1‥・角j?1.4圓から決定される,という依存性があるので,添字たを内側に回 す計算順序はこの式から直接は導けない. 1.2.2 ループ交換可能性  まず1のループとJのループを入れ換えることを検討する.ガウス消去法のjねは.4(1-1)の 第1列のみから決定され,またJZ1を左から掛ける操作は列ごとに行えるので,RIから・j_1 が既知であるとして,次のよう・に列ごとの式を書ける. ぐlj 一 一 馬 jち_2・‥刃1ぺ.o】  例えばλの4列目の要素a12〕について.消去の計算は3列目までで止めておき(第l jl)目 から第3列目の要素はすべてrまたは£の要素に変換された状態を考え)、J71、J?2.j?3が確定 した後でこれらをまとめて作用させれば、aS°Jを直接a71に更新できる.次にこの2重ルー プの計算で、たとjを交換できるかどうかを検討する. 基本変換行列のよる分解計算 i=1.….4について,角角j71a7を具体的に記述すると,次 式となる.ただしj73応召1は次数4の主小行列の部分のみを記述する. ︱ 1 1 4 ? Z 2 4 1 £ 3 4 ? £ 4 4

︱j

 1 /・43 ︱ ︱ j  l  1 r32 1 7'42 ︱ j  1 r21 1 r31 r41 3つの行列の積凡凡瓦を明示的に求めれば肺=拓瓦瓦), で計算できる  1 (宍 1

行列ベクトル積uj=say

(行列ベクトル積はループ交換可能なので、たを内側に置くループ構成が叫能で う a00 ぐ う a00 ぐ う

(9)

I 皿 け湖 4 第1章 計算順序と 1r分解の定式化 ある).しかしこの積Sを求めると計算量が増加するので, る必要があるほI』えぱ,この行列の第4行3列目の要素は, なる〕. 瓦からんについて昇順に計算す r43(7'3ジ21十r31)十r42r21十r41と 基本変換行列R1の性質 基本変換行夕│Jji1の持つ2つの性質により,連続的にR1行列をか ける(階数1更新)操作が,(計算量を増やすことなく)前進代入に変更できる.  u.1こ角角J71a?’の両辺に.〔aJ・J1〕-1を掛ける. (j?μ?Jlj ̄1 ︱ a 1 4 逞 2 4 1 t 3 4 M 4 4 j Jjjj 国14印24印34国44 a a α a l  一一 j (1.6)  (J73角角)の逆行列2は,瓦の逆行列を瓦とすると,以は瓦の非対角項の符号を反転する だけで得られる(性質1).  ︱ I 2131  11 ぐ  一一  r£

 1 −r21 1 −r31 j 一 一

瓦の添字1の小さいものを左から掛けた積1=£1£2…j1._1の個々の要素には,積も和も 現れない(性質2)3. £=£112‥・£n ︱  1 らl に 1 1心 j (17) 前進代入による分解計算 この2つの性質により,式(1.5)は次の前進代入の式(1.8)に変換 できる. ︱ 4 4 44 1りIQJ4 22 3S

kLユ2L3) ̄ ︱ j jjjj φ14 印 24呻糾印44 αa α a l これは式(1.1)の上の式にほかならな jC.4月r〕 ̄1= l£々 C 】j 1

ぐう

l,4 ︱ り 加

し 1 jy ly︸ う  1 ら1 ln1 1 ln2 j 回 心 辺) 岨) j (1.8) j T J 図1.1 反復空間と依存性 行列ベクトル積のよる分解計算 zj14,・z24.ug.恥lが或まると。・ クトル積差で計算できる。

迂を心

j j  j I54 ・ ・・り心 a  a l j 副4  剣4 ‘剣.:く‰ ︱ ︱ 削 Z52 Z53 仙1 Zn2 以3 すなわちu44で割れば,1,4が得られる. 一 一 ぐ ー 1,3 依存性と反復9lj・11 5 5 U 1 4 1 Z 2 4 1 3 4 L ・,については行タI」べ う これが式(1.1)の下の式である 以上でガウス消去法が式臣1)を計算することが証明された.

1.3 依存性と反復空間

 1£'分解アルゴリズムはこのような式の変形が可能であり,種々の劃・算法が実現できる.し かL行列行列積のように,全く任意にループ構成できるわけではない.これは£び分解アルゴ リズムが依存性をもっているからであるが,ここでこの依存性を,数学的な知識を用いること なく ガウス消去法のプログラムを(コンパイラの立場から)解析Lてみたい. 依存性 依存性は式の両辺に同じ変数が,異なる添字で用いられる場合に存在する.すなわ ち,ループの異なる反復で,代入(定義)された値を参照すると,代入/参照の順序関係を変 えられない.これがここで問題とするデータ依存性である.  式(1.1)では両辺に同じ変数が異なる添宇で用いられ,右辺の1,1と14jがループの先行す る反復で作られることから生じている. 反復空間 £じ分解のアルゴリズムは,配列j(7,測を底面に,Kを高さ方向にとると,底面 が一辺.−1の正方形で,高さ,l−1のスキューしたピラミッド型の反復空間励に対応づけ られる(図1.1に示したように,(i.J・)=(・l−1.n−1)の上に高さn−1のピラミッドの頂点 がくる).この空間内部の点SMj・j・.刎はalr=ペク ̄11−jlJijの計算を表す.またピラミッ ドの2つの傾いた側面のうち.JK面と向かい合った面をJK側面,IK面と向かい合った面を IK側面と呼ぶことにする.  上こ角り≦j・)の要素鮪は,匈(ら・, 01からj−1回登-⊃て,jK側面にjl)達すると咄 ̄l】 すなわち.りになる.下.三角(j>j)の要素恥・は.励(o・.0)からj−1回登って,IK側面 にil』達するとjj・ ̄ljになり,これを,りjで害I』ると1りになる.

(10)

・ 〃 6 第1章 計算順序と£じ分解の定式化 図1.2 依存関係の行列での位置 依存性の反復空間での表現 反復空間内の点心(り,りの計算aにIJ − j。.,.が実行可能な 条件は「1.,とtl,.が計算済み」ということである.これらが「計算済み」ということを,反 復空間で表現するとrSp(r.s,nをJ軸に平行に移動してnり貝I)面に交わる点心(r,ulの直 下の計算心(7j,1哺と,I軸に平行に移動してJK側面に交わる点心(り,りの直下の計算 Sp(1,s,1:1)が完了していなければいけない」といえる.図1.1の左に・印で点心(7・,sj) と,太癩で心(rj.1図とSp(U.1:巾とを示した.  この直接的な依存関係を太纏で示したSp〔r,に:0とSjポ,s,1:t〕に対して繰り返し適 用すると「心(1:・,1ぱI:0の小さなピラミッドと.下三角のS齢・,1:t,1:0,上三角 のSp(1:1.s,1:幻の2枚の直角三角形)が得られる.これらを図1.1の右に示した.なお, 5p(r,s.・)が計算可能なら,その下のみ(r,s.1:りも計算可能なので,図ではこの部分にも太 線を入れた.  反復空間を配列に戻すと図1.2になる.口印はa。,.の位置を示すが,この要素を更新する 計算Σj,1u1,のうちで,1=iの計寥Sp〔r,sj〕に直接用いられる1.,と・,を・印で表し た(左図).さらにj。,とu,.が作られるためには,中図にハッチングした要素の計算が完了 していなければならない.  以上はある計算に先立って実行されなければならない計算を(完了した計算の結果を参照す る立場で)調べたが,逆にある計算の完了によって,実行可能となる計算を先に計算すること もできる.これは図の右に示したように,主小行夕│』の分解が完了した時点で,上三角部分は第 1十1からn夕・」目の任意の列の第1行目までの要素が計算でき,下三角部分は第t+1からn 行目の任意の行の第1列目までが計算できる.なおこれらの列や行の計算は独立しているの で,並列に計算できる.  これらの列と行の計算が完了すると,右図に示したように,列の延長と行の延長の交点に位 置する要素が,1=1:'まで計算可能になるΣL1 1・z.  £じ分解アルゴリズムには依存性があるものの,ある計算の実行のために最低限完了してい なければならない計算と,その計算の完了によ・って実行可能になる計算との間にかなりの開き がある.この開きが計算順序の任意性を生む.

1.4 ループ構成

 依存性に抵触しない範囲でルーブ構成は自由に選ぶことができる.ガウス消去法は反復空間 を底面に平行な面で,下から上へと計算してゆく.クラウト法は上三角部分をJK面に平行な K/型 /K 型 J/ツ /T型 図1.3 ループ構成 1/型 /J型 1,4 j'.‥一ブ嶋J,£ 〔底面に垂直な〕面で,下三角部分をIK面に平行な面で交互に計算Lてゆく.どちらも主小 行列の計算を完了させてから,この主小行列部分を参照する計算を行い,また各添字に関して は昇順に計算するので,前節に迷べた依存性の条件を満たしている.

1.4.1 9種類のループ構成

 反復空間をIJ(底)面に平行な断面で下から上へ進む計算法ではKが最外側,JK面に平行 な断面ではIが最外側,IK面に平行な断面ではJが最外側のループ構成になる.反復空間を ガウス消去法のように1つの断面で進む計算法(ループ構成)は3通りあり,いずれも依存性 の条件を満たす.これらの計算法をここでは,K型(ガウス消去法),I型(クラウト法のド リトル変形),J型(後方参照型)と呼ぶことにする.  しかしクラウト法のように,上三角と下三角を異なる面で交互に進む計算法の中には依存 性の条件を満たさないものがある.ここでは上三角のループ構成で叢外側に用いられる添宇 をスラッシュの前に,下三角のルーブ構成で最外側に用いられる添字をスラッシュの後に書く ニとにする(例えばクラウト法はI/J型となる).上ドが異なるループ構成は,3乃=6通り (K几K/J.I/K,I/LJ/Kj/I型)作れるので,合計9通りを検討することにする.後述するよ うにこの中でK/I型とJ/K型は依存性の条件を満たさないので,正しく計算できない.

1.4.2 3種類のカーネル

 これらの計算で,内側2重ループで更新する部分(斜攘/縦線)と参照される部分〔点〕を 示した(図1.3),この内側2重ループの操作によ・って計算のタイプを分類する.

(11)

│ 〃 一 一 レ一ア構,戎 9 8 第1章 計算順序とZT分解の定式化 J I J 図1.4 反復空間での更新型、K/型と/K型 I 階数更新型 Kを最外側に用いると,£の第た夕│』目の列ベクトルを11,じの第だ行の行ベク トルを砥と書くと.内側2重ループの計算は瓦t21..61.=砥7;72,61.−1114のように なる.     d。&=1,n−1       メが幻.AC1-】l_liiuij, i=_,‥・.n,にー,・・’1・n  K型(ガウス消去法)では,Kを上下どちらも最外側に用しヽ,内側のi,jのループ添字の 始媚にはどちらも1十1が入る.この場合内側2重ループは階数1更新になる.この型は最外 側のループ添字の進行に対して,消去が最も進んだ(R1が決定した時点で,それを用いる計 算をす・ヽとて完了する)形である(図1.4). 前進弐入型 上三角にJを最外側に用いると(J/型),内側2重ループの計算はびの第j・列 を,£の次数J・−1の主小行列£lj_1,1j-1を用いて前進代入する計算tzj=ぢTj-1,1=j-la7 になる(式(1.8匡        d。j=2,n         u・j=心にΣこいat11J, i=2,…j  下三角にIを最外側に用いると〔/I型〕,内側2重ループの計算は£の第丿行を,じの次数i-1 の主小行列C'1。_I,1,i_lを参照して求める前進代入になる ・,j=〔1/りj-〕(心しΣ仁い,1W・)・ 代入計算なので,参照される領域と更新される領域が重なる.  λの第i行目の行gクトルをaSとすると.1:=〔a?〕)りyこ,し1,1。-1の,転置された前進代入 (サイドR,Rは右佃)の意)になる(両辺を転置すると(1‘)‘=(at-`) ̄‘は転置行列による 前進代入!=17-‘aとなる).前進代人型は最外側のループ添字の進行に対して,消去計算が 最も遅れた形である(図1.5). 行列ベクトル積型 下三角にJを最外側に用いると(/J型),内側2重ループの計算は長 方形行列£j+1=,,1=j-1と'`゛クトルtljの積差ay ̄1)=aS°j一石.1.,1j-1ujになる(式(1.9), ぺj ̄1】をlりjで害11るとljが得られる). 面ソニ2  aヤ1)= ‥.n. ごー

Σ

1二い,1uij,l=J・+1 n J I , T 図1.5 反復空間での前進代入型,J/型と/I型 14 1  上三角にIを最外側に用いると(I/型),内側2重ループの計算は,jSの第丿行目の行ベクト ル1:に行列こ'h_1。,。を右から掛ける行列ベクトル積差になる〔u? ̄1〕)'=(al°ツー以'h-u。 (図1.6)。 1.4.3 計算順序の制約  9種類のループ構成は,自分個(口上三角の計算で上三角の要素を参照する場合)は計算」│廊字 の制約は満たされるが,反対側(上三角の計算で下三角の要素を参照する場合とその逆の場 合)は満たされないケースがでる.これは更新型と前進代入型を組み合わせた場合で,例えば 図1.4の左と,図1.5の右を重ねて考えると理解しやすい(更新型の計算で参照する下三角行 列の要素がまだjaにな,ていない).このようにjlr分解を2つの三角行列の計算の組合せと 見ると,2つのループ構成が相互に影響しあう.これは単一の不完全ネストループよりもさら に依存性が込み入っている.これを軸選択とそれに伴う行要素交換が追討ちするので,£r7分 解の依存性解析は複雑な問題となっている. 「ビット単位に同−」な結果を与えるプログラム 鏝外側ループに着目した9通りのループ構 成の内,7通りが正しい解を与える.これらはルーブ順序の変更だけから得られるので,α汀の 1つの項に対する計算順序は,ガウス消去法と同じにプログラミングできる(「ビット単位に 同大の範囲のループ変換」.  付録にガウス消去法(K型,サブルーチン勾に詞,クラウト法(I/J型,サブルーチン J I J 図1.6 反復空間での行列ベクトル稽型,1/型と/J型 I

(12)

-u〕第1章 計算順序とn’分解の定式化 冶・7・,ぶ),上そ角を前進代入型,下三角を行4jl」ベクトル積型で計算する,l型,[サプルーチン ふ・・]・7jpO)4について,軸選択を含めてjビット単位に同一」の結果を与えるプログラム例を 示す.  クラウト法は内積ループが最内側になるので‥s=Σj,1uijを高精度で求めてから.これ をペツから引く順序で計算することができる(例えば,係数行タ│)も解も単精度だが,内積計 算のsのみを倍精度にする).このような順序では全計算を同じ精度で行っても,計算順序 ぐj=…((心しIJlj)−li2u2j卜…が 心】=心し(1,1・哨・+ji2a2j十…Dこ変更され ているので,「ビット単位に同一」な結果は得られない.  またベクトル計算機でも内積計算は各ベクトル計算機に固有の順序で計算されるので「ビッ ト単位に同一」な結果は得られない.なおクラウト法で軸選択を行う場合は,対角項zl。の計 算は式(1.1)に忠実には行わず,下三角の要素を更新するループに含めるのが普通である.

1.5 軸選択と行要素の交換

 瓦'分解では.部分軸選択(partiaj pivoting)と完全軸選択(complete pivoting)が用いられ

る.軸選択によってとりうるループ構成の組合せが減る.また軸選択に伴う行要素の交換法も 1通りではない.分解された三角行il」を用いる代入計算も,この行要素の交換法に対応させな くてはならない. 1.5.1 軸選択  1じ分解には対角項で割る操作があるので,ゼロまたは非常に絶対値の小さな対角項を避け る必要がある.これは行列の伏態(条件数)が悪い場合と,行列の状態とは無関係な場合とが ある5.  部分軸選択は,第た段の消去で中間結果の第だ列の要素ぐユ)の中から絶対値最大の要素 (aぱ ̄1)とする)を選び,行要素交換(だ行とz行を交換)し,これを対角項とする6.  完全軸選択は,第ん段の消去で中間結果の右下の小行列の要素亡八1ムダ=nの要素の中から 絶対値最大の要素を選び,行要素交換と列要素交換を行って,これを対角項とする. 軸選択の適用 部分軸選択では解か得られないような条件の悪い問題に対して,完全軸選択 を用いると解か得られるということは稀である.条件の悪い行列に対して,Wilkinsonの教科 書(pm3)にに松柏力句やjに関して単調な行列では,2つの方法にほとんど差異がないと 記述されている[2].また条件の悪い問題に対しては,精度のよくない解を反復修正する方法 が実用的なので,必ずしも完全軸選択にたよる必要はない.  一方完全軸選択にすることのデメリットは,同教科書には,圃記憶域が2階層の(主記池 袋置と外部ファイルを用いるような)計算機ではプログラミングが困難になる,(2)ゼロ要素  4日本ではこれを内種型と呼ぶことがあるが,これは繍形計幽法での稽形式に由来しているl】│.演算はKが内側 にないので内種にはならない.  .`(? 乙)のような行タI』の状態は単位行列と同Lニで悳くないが,軸還択しなけれぱゼロ割り(hre辿down)が 生じて計算できない.  sna ̄1】の絶対値がある闇値以下になった場合だけ行交換する方法もある. た ? 1.5 軸選択と行要素月交換 n        FCS:全列交換     PCS:舘分列交換       図1.7 全列交換と知分タI』交換 が特定のパターンで存在する(裕行夕I)などの〕疎行列での,ゼロ要素のパターンを破壊する, という2点をあげて剖分軸選択を推薦している.  このような事情から,通常は部分軸選択が用いられている. 軸選択とループ構成 部分軸選択の第1段では心j)が比較されるので,下三角行タ│」の計算 を・jを最外佳に用いたループ構成(/I型)では,比較される要素が心’のままなので,選択で きない.下三角がI型は,正しく1+算される7通りのうち2つ存在する.  完全軸選択の第UIでは心政.が比較されるので,上三角,下三角ともに1を最外側に 用いた階数更新型でなければならない.このように9通りのループ構成の候補のうち,計算順 序の制約を満たす組合せは7通り,舶分軸選択では5通り,完全軸選択では1通りである.  本論文では部分軸選択について述べる.  なお,BLAS-1のインターフェース(倍精度)では,絶対値量大の要素の探索は・’dayyzα2・, 行要素交換はdsal7,ルーチンで行われる(これらのルーチンは付録に示した). 1.5.2 行要素交換 行交換のための基本変換行il』行要素を交換するための基本変換行列を&とする.第た段の 消去で第一I』の要素〔aSyl〕,i=1,・‥.司中,絶対値最大の要素を1行目(1≧厠とすると, 行列八は,1行と1行,および1列と1列以外は単位行列で,この部分は次の要素である. たOI   ぐ Z た! う 10 なお、た=Zの場合ハ=7である.また瓦フ 一 一 八である.        '‘"‥− −`'¨‘゜`爽`-り  ̄りulj‘・j・  右辺ベクトルの前進消去を1ひ分解と同時に行わないプログラムでは,この軸選択の情報は 1次元配列に保存され.IE7分解後の前進代入で参照される. 全列交換と部分列交換 軸選択の後,交換すべき行の全列要素を交換する方式を.本論文で は全列交換(FCS : Fun Column Swapj と呼ぶ.1夕I)以降のみを交換する方式を部分列交換 [PCS : Partij Co]umn Swap)と呼ぶ.両者の違いを図1.7に示した.PCSはFCSに比べる

と,行要素交換を半分にできる.n=4の場合にりいて式〔1.3〕は次のように変わる.

(13)

F -(1.1n) 即円 19 第1章 計算順序と£び分解の定式化 両辺に(角八角乃瓦乃)-1を掛ける.        P】£1乃7L2乃£3じ=メ1 この式のとおりに計算すると瓦に後続の行交換(八4-1など)が掛けられるので,これを瓦と 表す.上式は       J4==乃(乃乃乃乃μ1八(乃乃μ2乃Zぷ       六←犬       £1    £,2        .4=乃乃乃jlljlμμ7 と変形できる.ね=Fn-1・・‘八41£1八+1…j?n-1は玩の第1夕│』の要素を後続のF糾1…八-1 によって行交換した行列である.FCSではjl=ZIZ2‥・Z。_μn_1が得られ,PCSではZ= £1£r‥Z。-2£.-1が得られる.付録のガウス消去法のプログラム例はFCSであるが,これを PCSに変更するにはサブルーチンda・卯の引数を次のように変更する(下線剖が変更個所).         call dst叩(7i−1慟_いz(1,&),lda,a(1,k).ld匈  なお7117分解のループ構成をj型にした場合は,第j・列の消去の直前に尽から乃-lを ajにかけることがあるが,この方法もPCSになる. 1.5.3 代入計算 FCSに対応する代入計算 連立1次方程式Az=&を解く場合,FCSではÅ=乃乃乃Z17 より次の式になる.        j:びz=乃乃?lb すなわち,ZI=IL'z,6=乃乃P115とすれば次の式になる.        句=1  最初にまとめて右辺ベクトルの行要素交換を済ませられるので,前進代入のループ計算の中 では行交換は現れない.このgを用いて後進代入17z=11を計算する. PCSに対応する代入計算 PCSでは,£の第1列は後続の行交換を受けていないので,瓦 を用いる代入は八から八までを適用し,八41から瓦は適用しない状態のベクトルに対して 計算する.これは117分解と前進消去を同時に処理する場合を考えると分りやすい.n=4の 場合を記述すると   ・ 瓦F1.4(゜4=jilP16の左辺を11cl),乃&=が1)とおいてg田=j?16(1)なので前進代    入が1〕=IF16tl】を計算する.以下   ・ Rj2乃ぶ1)z=瓦乃illの左辺を11G2〕,乃l山=1・c2jとおいて11121=£ilb(2)を   ・ 瓦乃J24=j?3乃g(21の左辺をが31.乃1一j=ゐ‘3jとおいてが3)=£ilゐ閲を解く. 1113】がFCSの場合の11に一致する.したがって,右辺ベクトルの行交換(八の操作)と三 角行列の1列分の代入(瓦の操作)を交互に行わなければならない. !ノ閲=6 I.G ソコIック化の定式化 13   心 jcニ1刀.−1    £d一J=ハ1一 ̄1J 対応するプログラム例を付録に示す.  FCS対応の前進代入プログラムは完全ネストループで諮くことができる7.これに対L PCS 対応は不完全ネストループになり.しかも行要素の交換のために間接指標変数を用いるので, コンパイラの自動的なループ構成やプロック化の最適化を困難にする.

1.6 ブロック化の定式化

 次数71の連立1次方程式λz=6において,係数行タ│」λを‥411の次数が2以上n−1以 下の任意のサイズmの正方行列として4分割する.   ︱︱ 山痢 ぐ  lりi 4 ︲C ぐ う  19£ ZZ ぐ う 1222 λλ  この式からz1を消去するには,上の式の左かし稲1をかけて得られるJ1=石11(61一八12J2) を下の式に代入する. (.412 −λ2lj4nlj412)z2=♭2−Å21jFI隋  実瀕の計算は‥411一Z11こ711とjぶ分解して,右側前進代入によりjl21=.421rlマ,前進 代入によりly12=£F11j412を求め,階数m更新42=.422 −121び12と代入/行列ベクトル 積ll;=62 − 41.4r;1ゐ1によって問題を函2z2=&いこ縮小する8.また縮小された問題に対 して,あらためて分害I』/縮小できるので,再帰的なブロック化の定式化(recurrsive farm1・la) が導かれる. 1.6.1 ブロック化の計算法  次数r1の正方行列y1をあらかじめ,主小行列の次数がm以下になるような小行列,4むに 分割しておくと,計算法は次のように記述できる(「n/ml=Nとするl.ただしここでは軸選 択は行わないものとする.  &瓦=1.,¥   jj`IJI)→LKKUKI(    dQ 7z瓦+1.N     ljg=潟l. ̄1)〔QX〕-1    f71d&    &J=A'+1.X      ・   -1{λ‘-1}     こ・£j=ぢ,.K.4A.J      do j=ゑ'+1..V       (剔  ほー)〕  ,       ・4jJ z.4jJ − Ln,│・UKj  フネストしたノしープが.内借』のループ本体とループ文だけから構成されるループを完全ホストループという.  s-421j4711.412 °(-421ry)(£r11.4191である..471jを腸に計算こないので,.4jlがバンド‘行列の場合にも.そ の性質を保存できる.

(14)

-14 第1章 計算順序と£じ分解の定式化       →-た 1 7 n - 4 −

図1.8 ブロックPCS      en,ddo    enddo en(tdo  ループ内の1行目は主小行列の分解,次の7のループは前進代人,後半のJのループは前 進代入と階数m更新になる.このアルゴリズムはブロックサイズm=1のとき,ガウス消去 法になる.なお,行列または小行夕│」は大文字で,行列要素は小文字で表すことにする.  あるいは次の式で記述できる.       j-1         jZ ̄ll °.4W−Σ17917A・7,j4Syl〕→ZμQj       A'=1       j-1          Qj=ぢjl ( んj−Σ£Γμ'gJ y 〔7くJ〕       A'=1 LrJ  り  Å ぐ  = j−1 Σ K=1 LIKUKJ

(7>j) (1.12)  この式は大文字(/)ヽ行列)を小文字〔行列要素〕に読み換えれば式(1,1)と基本的に同じで ある.したが,て1行めの小行列び1,2.,1列めの小行列12.,l,‥・と行と列が交互に分解 できる.式(1.1)は知=心 ̄1)であるが,1。=1なのでこれを前進代入咄・=j回心 ̄1)と 見れば,プロックサイズmを1にすると(1要素を1×1の小行夕I)と考えると)式(1.12)に 含めて考えられる.したがって前節で求めた行列要素単位の計算順序の制約に関する規則が, 小行il」単位に適用できることを意味する. 1.6.2 軸選択と行要素の交換  軸選択を行う場合,ブロック内部ではFCSで行交換する£ヽ要がある.PCSでは式陽12)の 前進代入で,句zの1列分の代入計算と行要素交換が交互に現れ,代入計算のブロック化を不 能にする.また£gを用いる行列行列積差も同様にブロック化できなくなる.  通常ブロックLU分解では,ブロック単位に見るとPCSでもかまわないが,少なくともブ ロック内部ではFCSとする必要がある.これは図1.8に示すように,第だ段の消去でた行と ドサを交換する場合,第た列を含むブロックの最初の列要素から交換する.ここではこの方 法をブロックPCSと呼ぶ.ブロックPCSではじめの2つのブロックを参照する消去計算は, 玖からP。までを適用した伏態でm列までのブロックを参照する計算を行い,次に?.十1か ら乃,.を適用して,m十1列から2m列までのブロックを参照する計算を行う.  Q・、g+1=js'=£応.4応JIU 四d& 1 . 6 ブロック化ソ)定式化 15 コンバイラによるブロック化とPCS PCSのままではプロック化できないということは,PCS で書かれたプログラムをコンパイラがブロック化するためには,FCSかブロックPCSへの変 更の必要性を意味している.しかしこの変更は,£がサプルーチンの出力にな.ているので, コンパイラには手が出せない(インターフェースの変更になる).右辺ベクトルを前進消去と 同時に行い,££’分解後は1をスクラッチしてもよい場合で,j乙をサブルーチンの内部の配列 にとる場合にのみ,コンパイラは£の格納形式を変更できる. 1.6.3 計算法のループ構成  ブロック化のループ構成でよく用いられるものを3つ示す.軸選択はピボットブロックの分 解,4一£17に入れられる. 再帰型 次数をmずつ縮小してゆく方法で,ループ構成はK型である.,・ight-looking£こ’    分解,あるいはブロックガウス消去法,階数m更新型と呼ばれることもある(図1.9    の左). doK= Å A ゛ 1.X 】、 λ ' : . V , j i ‘ →IX,.v,友.乙1A, E」'A',1'+l=js'=£iい1S乙ばh,,  j㎜-■      ・  Åフヅ 1,y,A'十Ly゛ G 「da jSj7;11 ,g+1:N ̄li'十l:7v,jdL'瓦,x+l,N 後方参照型 丿型のループ構成でleft-】・・king£じ分解と呼ばれる.内側ループの計算は,上    三角の要素は複数列の前進代入,下三角の要素は,行夕I』行列積差になる(図1.9の左か    ら2番め). &J=1.j¥  附J-1.J °ぢyl,u_Iぜl.

心切=河沁

£7.N,1.j ・4穴j-→な・、j、QJ ,J じ1,j_1,j    四d& プロッククラウト型 I/J型のループ構成で,内側ループの計算は,.E三角の要素も,下三角    の要素も行列行列積差になる.式(1.12)に対応するが.対角位置の小行列は軸選択の    関係で,下三角位置の小行列と一緒に分解されるλ次;j2・一μ=x.x,r,a・〔図1.9の    右の2つ〕.    &瓦=1.Ⅳ λ1 ゛4j‰M.→zx、s。λ・.rji・x AI ほ'−11 A':.N.K 1瓦−11 £,.S,jV ほ'−1】 ゜‘4ilji'+1=・v ̄LK.1:x−1171,x_1,1・+1:.N・ 一 一 j4SSへ'.x−IA-,A・,1,R・_ llyA,_1.λ-£,瓦+I:AI −

(15)

I 皿 16 第1章 計算順序と1じ分解の定式化 ・ I S ・ j ぐ ・ £ ・ K . , K V 、 K UKK l ・ 1 ・ ●£ ・ 1 : J− j : , り . l J − I K

≒Q・ ≒ ● . ≒ ・

ロ び 1 : g _ 1 , g ●1 ・ j C , , j . 1 , A ・ _ 1 図1.9 ブロック化瓦・分解のループ構成 K

Gyこ、沁 ●・ ● ●

毎示

・1 λ - . 1 , g _ 】 l : N  図1.9では主要なカーネルルーチンが更新する部分をハッチングし,参照する部分に網掛け した.後方参照型は両者に重なりがあるが,これは前進代入17=£-14のj4とじの重なり である. ブロック化の目的「係数行列か格納される記憶域と演算器との間に,ある容量の作業域を 持つ計算機」を想定したとき,£び分解を「ブロック化された順序で行うと,記憶域と作業域 間のデータの移動を削減する」ことができる.これかブロック化の目的である.  例えばブロック化されたガウス消去法で,係数行列をmxmの小行列に分割して,1レコー ドを1小行列としてファイル(記憶域)に置き,小行列のいくつかを主記憶装置(作業域)に読 み込んで(軸選択なしで)£び分解することを考える.行列行列積差y1汀)=Åソドn−LIKUKJ はAlyLrK,UKJの3つの小行列が主記憶装置に入れば計算できるので,内側のfのループ か回ると,添字7をもつ2つの小行列が読み込まれ,ルjが書き込まれる.  Hソ分解全体ではX3/3回の行列行列積差が計算されるので,入出力する小行列の数がや になる.これをデータ移動量に直すと(n/m)3× 「= 「/mになる.ブロック化しなければ 「なので,ブロック化によりデータ移動量はブロックサイズ分の1になる.  次章で扱う汎用計算機では,係数行列が格納される記憶域は外部ディスク,作業域は主記憶 装置である.第4章と第5章で扱うベクトル計算機やRISC計算機では,格納場所は主記憶装 置で,作業域はレジスタやキャッシュである.これらの作業域は演算器のクロック周期と同程 度のアクセス時間で作動するが,主記憶装置のアクセス時間はひと桁遅い.第6章で扱う分散 メモリー型の並列計算機では,格納場所は他のプロセッサが管理する主記憶装置で,作業域は 自分のプロセッサが管理する主記憶装置である.

1.7 対称行列の三角分解の定式化

HJZl1分解 行夕・」Åが対称の場合,式(1.1いこよって得られる上三角行夕I)の要素哨jと,下 三角行列の要素1・jの間では,lji=り/・l。の関係がある.この関係を行列によって表すと, j4=H)£‘となる(刀は対角行列で,じ=jっ£'である).ここでは哨・=lj,として£‘の要素を 表す.式〔1.1〕は次の式になる α 一 一 り R 汀 ̄Σ晦ぶ幻、 &=1 1 O・≦ソ) 対称行タ・I」の三角分解の定式化 1       Gj=暫,(i<j)       dj=・'りJ・      〔113〕 コレスキー分解 行列,tが正定値(positive denni副の場合は,式(1.131のdj・はすべて正 になり,メ1=C‘Cのコレスキー分解が可能になる.コレスキー分解と1刀が分解の関係は, c'=jL5で表される.ここで,sは対角行列sj=y石である.なおjLZ]£‘分解を修正コレス キー分解と呼ぶ場合もある. むり ぐ  土ら   ﹁一 白j ̄ aリ ̄ . j I-1 Σ 1・1 (ljj Σ だz1 qlckj ) ckJckj 〔・・<j〕 (1.14)  式(1.14)は£r分解の式との対応では後方参照型,またはクラウト型といえるが,ガウス 消去法(更新)型も可能である.この場合計算された三角行列要素が,後続の計算に波及する 影響を先に計算する形のループ構成になる. 面だ=1,η, Ckk二 Q、1+1=.=4tゴL/Q1  &j・1+1、72 面  a J=l,n ゆ) リ -ぐ1) CkiCtj ブロックコレスキー分解 この計算法をブロック化すると次のように記述できる. &瓦=0.y−1  jSjな ̄l】→ckが7xx  Ci・、jGlj5一一1=C芯ぴ4714?1J−l   &7zl’+1、j¥一1   da Jzj.x−1       4所) 眠 ̄1) 1       ぺJニ痢J −CklCIJ 正定値でない行列のコレスキー分解 正定値ではない行列のコレスキー分解は,三角行列を複素 数にするが,プログラム上は実数型の配列だけで計算できる.これはLSSLt分解で,£)=S5 とするとりは実数ヅ石か,実部がゼロの虚数ヅ回声になるが(iを虚数単位とする),妁が 虚のときj列が虚句=≒慰,びはその転置なのでj‘行が虚になる.すなわち行列Cは実数 か虚数の要素のみで構成され(実郎も虚部も非ゼロの複素数はない),しかも実数か虚数かは 対角項が実数か虚数かで判定可能だからである.

(16)

-18 第1章 計算順序と£じ分解の定式化  したがってりが実数か虚数かを何らかの方法で判定できれば,プログラムでは実数型の変 数だけで計算できる.例えば対角項の符号ビットを使用すれば,独立した記憶域を設けるこ となしでプログラミングできる.この方法は対角項印・が虚のときcjj=rがを−rjjとして, その列の要素Gj=rjを-r,jと符号反転して格納する(式(1・哺の平方根を計算する直前 の値咄−Σにいおが負になると,対角項rjjと,この対角項で割られるこの行の要素Q-も虚になる〕.後続の消去でこの行要素は,常にこの行の要素同士の積の形Q,・cijで参照され るので実数に戻る.  付録に示すプログラム例では通常のコレスキー分解と異なるステートメントは3つだけで ある. 対応する代入計算 前進代入!y,=(ゐ,−Σ瓦石id1)/c。ではc。が虚のとき,y1 , ci1も虚な ので(〔実−Σ虚虚〕/虚なので)l,も虚になるh,=z,iとする)。これを μ 1   ゐ ー− Σにいぷこj r n ` 1 _611 − Σ旨(一rJ4 − と計算するので,プログラム上は除算を絶対値で行う.  riliZ 前進代入によって得られたベクトル は,虚数の項の符号を反転しておく咄・=zjを−z,とする)。  後進代入z・=〔μ,−ΣL。41ご1・μ1〕/ci,ではc。・が虚のとき,l,・,Qも虚なので, £1’ ̄  ・  n   J zllz ̄Σ1zl・÷】riilz1__そ玉        −      ・riil

Σレ]-り)4

と計算するので,プログラム上はやはり除算を絶対値で行う.対応するプログラム例を付録に 示す.  前進/後進代入で通常のコレスキー分解と異なるステートメントは3つだけである.この プログラムでげ文が内側のループに入らないようするループ構成組み合わせは,通常のコレ スキー分解の場合よりも少ない. 1.7.1 定式化のまとめ  本章では種々の計算機の上で三角分解を高速化するためのプログラミング技法の基礎になる 式をまとめた.三角分解の主役は計算であるが,本論文で述べる多くの問題では,脇役である データ移動のほうが,(高速化のためのプログラミング的な努力をしないと)計算そのものよ りも多くの処理時間を必要とする.データ移動は,ありてほしくないものなので,はじめから ブロック化によりこれを少なくする定式化を採用したほうが有利であることが直観的にも理解 されよう.  本論文では,各種の計算機の特性(係数行列を格納する場所と演算器と同程度のアクセス時 間で作動する作業域の特性口こ合わせたブロック化のプログラミング技法を述べる.格納場所 と作業域は,Fortraロコンパイラやプログラマからはさまざまな形で見えるので,プログラミ ング技法は計算機に独特のものになる.しかしプロック化されたアルゴリズムを計算順序の問 題として眺めると,非常に多くの点で共通性がある.プログラミング技法は,元のプログラム に対して(例えばコンパイラの最適化機能として埋め込めるような)規則的なループ変換であ ることが望ましい.この変換が妥当(正しい計算結果を与える)かどうかは,元のプログラム の持つ依存性の関係と照らし合わせることで検証されるので,この点についてもまとめた. 1.7 対称行夕│」の三角分解の定式化 19  なお正定値でない行列のコレスキー分解は,本論文では使用しないが,正定値でない行夕I」を コレスキー分解すると複素数計算を哭行しなくてはならないというような理解が一一般的と思 われるので付け加えた9.  本論文ではこれらの種々の1じ分解の定式化を三角分解と総称する. 9例えば文剔3]のp,289を参照されたい.

(17)

・ 皿 一 一 一 一 一 一 一 一 20 第1章 計算順序とLU分解の定式化

第2章

汎用

- -㎜ ■

-十算機と大規模行列の三角分解

 ブロック化アルゴリズムは,規模の大きな問題で,外部ファイルを対象に実用化された.本 章の前半ではおもに,有限要素法(FEM)構造解析で解かれる対称行列を例に,1970年代か ら汎用計算機上で開発された三角分解プログラムの例を,ブロック化とデータ移動量の観点 から述ぺるが,ここでのデータ移動は外部ファイルとの入出力として明示的にプログラミン グされる(縦型ブロックガウス消去法,プロックコレスキー分解,プロックスカイライン法な ど,計算法の名称にもプロックの名がある).本論文の主題である,最新の計算機での種々の ブロック化された計算法は,データ移動は明示的にはプログラミングされないが,計算順序の 問題としては,両者は等価である.このことを指摘したのは,筆者の業績の1つである.  また疎行列の三角分解は,行と列の入れ替えによって計算量が変化する.FEM構造解析で はこれは節点の番号付けの最適化の開題になる.解剖法など,行列の全域に非ゼロ要素を散在 させる番号付けでは,カーネルの計算速度が遅くなるので,かなり計算量の肖I』減幅が大きくな いと,計算時間の短縮につながらない.そのため,70年代の汎用計算機で扱う問題の規模で はこの効果は少なく,計算時間の短縮の目的ではあまり実用化されなかった(部分構造解析の 形で用いられた).本論文の最後に述べる並列化の問題では,非常に規模の大きな問題を解く ことができるので,解剖法による番号付けの効果が現れる.本章の後半ではこれらの点につい てまとめる.

2.1 外部ファイルを用いた縦型ブロックガウス法

 係数行列が主記憶装置に入りきらない場合は、これを外部ファイルに置いてその一部を読み 込みつつ計算を進める方法がとられる.ここで軸選択を行う場合は縦型ブロックガウス法が用 いられる.図2.1にブロック数が4の場合を示した. ピボットブロックの分解 まずブロック1の長方形の部分よ1,1を上三角と下三角の要素 £t41jy11に分解する.この計算はLU分解のプログラムを修正して得られる.後方参照型 (J型)のプログラム面・mPOを変更してこの処理を行う面Qm列を付録に示した. ルーブ構成 ピボットブロックの分解が完了すると、これを参照する計算が可能になる(図で はブロック3がブロック1を参照する計算を示した).ブロック1の分解後、ブロック1をピ        21

(18)

-22 第2章 汎用計算機と大規模行列の三角分解

       1 2 3 4    1        一 一

do K=1,N

call read (b1Qck K of A) call dcomp1 (‥.)

 doJ=K+IIN

 call read (b1・ckJofA)

 call permut (block J by P(K))  call dfudsm (‥.)

 ca11血pysb(.‥)

  call grita (block J of A)  endd口

 call write (block K of L,U) exlddo ,4S?一£11rll .4S?−・£M λa】−・£31 .41?一£41

斤oN□

13=μ11.4W Z s Z s 句 3 ∼ . f l u a M ∼ a g t   t   t 一 一 ,4a】−£2jじ13 Å回−£11£r13 =Åヅー乙4ユ'13 do J=1,N

 call read (block j of A)  do K=1,J−1

  call read (block K ofL)   call permut (b1・ckJbyP(K))   call dfids(‥.)

  call dllpysb(.‥)  enddo

 call dcompl (‥.)

 call grite (block j of L,U) enddo        図2.1 縦型ブロックガウス法 ポットとして,これを参照するすべての計算(ブロック2,3.4の更新)を行うループ構成と,反 対に,更新されるブロックをピボットとして,過去にさかのぼって分解結果を参照するループ 構成が可能でる.本論文では前者をKJ型,後者をJK型と呼ぶ.これはKJ型では式(1.12) の£匹の列添字瓦か外側ループに,JK型では£リの列添宇jが外側ループに用いられるか らである,  図のブログラムで,煩 ・smは前進代入(G3=£ご尚ツ)を,dmp!lsbは行列行列積差 (尚も)=尚ツー£21じ13)を計算する.またFTmutは列要素の交換を行う(第Kブロック分 解時の軸選択に伴う行要素交換を,第Jブロックに適用する).計算量は,ピボットプロック の分解は0( 「)であるが,更新計算(前進代入と行列行列積差)は内側のループの中にある のでo回)になる. ファイル形式と入出力量 サブルーチンTeadは指定されたブロックを読み込み,tΓ社則ま書 き込みを行う.三角行列は入力ファイルとは別の形式とすることで,代入時に上三角/下三角 行列を独立して扱えるようにするのが普通である(JK型では上三角行列をこの分解ルーチン でも読む).  KJ型では,中間結果Å汀)を書き込まなくてはならない(右辺ベクトルを£び分解と同時に 前進消去できる場合は,下三角行列を出力する必,要がない).JK型ではこの書き込みはない ので,入出力データ量はJK型の方が少なくなる.  縦型ブロックガウス法は,縦型の小行列が2つ入る領域があれば計算できる.主記憶装置の 容量に余裕があるときは,小行列のサイズを拡げられる(mを大きくとれる)が,ブロックを 大きくするより,複数のレコードを連続した領域に読み込んで,ピボットブロックの小行列を まとめた方が,人出力量を少なくできる(ピボットブロックのみを2m列とか3m列にする). 4反ずm4 4−6t.→6j −-1:(1.たj 2:〔1十ゐ1,1〕 3:(1+ゐ1,1+ゐ11+哨 4:(1.た+611十哨 5:(ゐ.1−m十月 6:(1+61,1−m÷1) 図2.2 裕行夕│』の瓦゛分解 22 帯付タ」去 23 ”¬   ‘ 6j      !     61j 4  大規模な密行列を対象とする数値解析として境界要素法(BEM)をあげることができるが, BEMが一般的に使用されるようになったのは80年代になってからである.したがって縦型 ブロックガウス法もその後になって一般的になった. 2.2

帯行列法

 帯行列(band matrix)は,非ゼロ要素が対角項の周辺の一定範囲内にしか存在しない行il』を, 最大帯幅の内側をすべて非ゼロ要素として扱うものである.具体的には行列を(帯幅jx(次数) の長方形の配列に格納したり,ファイル上に置いて一部分だけを読み込んで分解計算を行う. 帯行列を配列上に置いた計算法 帯行列の格納形式は,全非ゼコ要素を含む書幅と次数から なる2次元配列とする.図2.2に論理的な行列とプログラム上の配列を示した.ここでは対角 項を含まない帯幅を,上三角行列でh,下三角行列でゐjとした.論理的にa,jの要素はこの 配列上ではa(h+i−jぶにスキューされて置かれる.  計算式は式(1.11や式(1.13)では,総和の範囲が書幅の内偵I』に狭められる.例えば式(1.13) ではΣにい1,1zりが1=Trla・│(1,i−6an&1・d砺からの総和に変わる.  軸選択を行わない対称行列の分解計算ではこの変更で済むが,軸遭択を行う場合は,行要素 交換で書幅が広がるという問題がある.以下,部分軸選択に・っいて述べる. 軸選択と帯の拡張 第た段のステップで叫りa(図2.2の2)が対角項として選ばれると,た 行とた十ゐ7行が交換されるので,その行の右端の非ゼロ要素であるaG6りい師h(図2.2の4) はた行目(図2.2の3)に上がる.この移動によって上三角行列の帯幅はh十Mに広がる.こ の上三角行列の帯幅の拡張に対しては,入力行列をあらかじめ拡張して(ゼロ要素を埋め込ん で)おく.  行要素の交換をPCSで行った場合はこの拡張だけですむが,ブロック化ではブロックPCS とするので,下三角行列の帯幅も広がる.すなわちた行とた十M行の交換によって,第だ行 目の要素αり_mf1(図2.2の5)がた十61行目(図2,2の6)へ下がる.この移動によって下 三角行列の帯幅は&1十m−1に広がる1.ただしこれは,I型(後方参照型)のループ構成にし た場合で,K型(更新型)では階数m更新で参照するy三角行列を,大きさが&jx(m−1) の作業域に移すことで避けられる. 1この帯椙の拡大で計算量は増加する

Referensi

Dokumen terkait

Dalam Bulan Impor dan Pembayaran Utang Luar Negeri

Hasil surfaktan metil ester dan gliserol dari minyak/lemak limbah industri krimer dipengaruhi oleh suhu pemanasan, konsentrasi katalis, sedangkan lama pemanasan tidak

Berdasarkan uraian diatas maka perlu dilakukan analisis vegetasi gulma untuk mengetahui jenis-jenis gulma yang tumbuh di bawah tegakan kelapa sawit, sehingga dapat

8. Kegiatan Pembelajaran adalah proses berlangsungnya interaksi Peserta didik, guru, dan sumber belajar pada jam tatap muka baik di dalam maupun di luar kelas. Waktu

Dalam pelaksanaan Praktek di bengkel maintenance and repair Politeknik Negeri Padang, khususnya perbaikan sistem bahan bakar pada Engine Trainer Diesel Hyundai HD

Jikalau setiap dari kejahatan-kejahatan yang disebutkan dalam pasal 1 dilakukan, maka ketentuan-ketentuan dalam Konvensi ini akan berlaku pada perwakilan-perwakilan

Menurut Schwalbe (2006), “Manajemen proyek merupakan aplikasi dari ilmu pengetahuan, kemampuan, peralatan, dan teknik dalam suatu kegiatan proyek untuk

Mahasiswa mampu menjelaskan penyakit jaringan keras gigi (karies) dan kelainan jaringan keras gigi serta perawatannya baik pada gigi sulung/desidui maupun gigi