Fortran Builder を使った数値計算

筑波大学 図書館情報メディア研究科
長谷川 秀彦あらすじ
z はじめに – 計算環境の特徴
z LAPACK とは
z Fortran Builder (learning Ed.) を使う* 新規作成* 自分のコードに LAPACK* 自分のコードを更新＆ LAPACK 使用* 数値実験ツールz まとめ
May 31, 2006

2

はじめに – 計算環境の特徴
z メインフレーム：

すべての機能が１社によって提供される
z UNIX サーバ：
管理者が存在し、ふつうは使うだけ
z Linux パソコン：
自分でインストール、自分で設定・管理
z Windows パソコン：
個性の強い多様なソフトウェアの寄せ集め
May 31, 20063

計算環境の変遷

山本、榊原、野寺、長谷川． これだけは知っておきたい数学ツール（インターネット時代の数学 1)、共立出版、1999

May 31, 2006

4

LAPACK とは
エルエーパック、レイパック
z Linear Algebra PACKagez

連立一次方程式、最小自乗法、固有値、特異値
z 密行列と帯行列（疎行列は含まず）
z Single, Double, Complex, Double Complex
z ブロック（行列-行列積ベースの）アルゴリズム
z 性能は Level 3 BLAS (Basic Linear AlgebraSubprograms) に依存
z USA の研究プロジェクトの成果
z Fortran77z

May 31, 20065

決まりごと DGESVX(1) Type:
C: Complex, D: Double, S: Single, Z: Double
Complex(2) Matrix Type:
GEneral, General Band, General Tridiagonal,
SYmmetric, Positive Defineite, Pos. def. Packed(3) Function:
SolVe, Least Square, EigenValue, Singular Value
Decompsition, Generalized eigenValue Decomposition,eXpert driver
May 31, 2006

6

LAPACK の歴史
z LINPACKz EISPACKz LAPACK Ver. 1
z LAPACK Ver. 2
z LAPACK Ver. 3

Feb. 1992
Sep. 1994
June 1999z LAPACK Ver. 4

May 31, 2006

7

LAPACK Familyz ScaLAPACK: 分散並列コンピュータ用（スケーラパック）

Fortran95 インターフェース
z CLAPACK:C インターフェース(f2c)z LAPACK++: C++ インターフェースz JLAPACK:Java インターフェースz LAPACK95:

May 31, 2006

8

SIAM: Society for Industrial and Applied Mathematics

LAPACK:Basic
May 31, 2006

Fortran95 Interface

ScaLAPACK:
Distributed Parallel
9LAPACK on Unixz www.netlib.org からダウンロード (free)z BLAS: ベンダ提供 or ソースコードからコンパイルz make で済むが、作業はたくさん
z LAPACK Ver. 3 のインストール方法：「数値計算ライブラリ」 in これだけは知っておきたい数学ツール、共立出版、 1999
phase.hpcc.jp/phase/lapack-j/LAPACK3.0/ lapack3.0_howto.html

May 31, 2006

10

LAPACK on Windows
z www.netlib.org にコンパイル済みライブラリがある（約 8MB)
z 圧縮を解除して使うだけ？
z 使い方？
z 自分に合ったコンパイル方法？

（経験がないので不明）

May 31, 200611

Fortran Builder には
z LAPACK の Double と Double Complex
z 基本的なドライバルーチンすべてを含む
z テストプログラムと 10×10 程度のテストデータ
z テストデータに関する簡単な文書

May 31, 2006

12

LAPACK Users’ Guide
Third Editionz SIAM 刊、$46.00
z 概念、仕様あり
z インターフェース、アルゴリ

ズムの理解に必要
z Web 版あり:
www.netlib.org/lapack/lug/z 日本語訳は Second Edition

May 31, 200613

LAPACK Users’ Guide の著者zzzzzzzzzzz

E. Anderson （University of Tennessee, Knoxville ）Z. Bai （University of Kentucky and University of California, Davis ）C. Bischof （Institute of Scientific Computing, Technical University
Aachen, Germany)
L. S. Blackford (formerly L. S. Ostrouchov) （University of Tennessee,Knoxville)
J. Demmel (University of California, Berkeley)
J. Dongarra (University of Tennessee, Knoxville and Oak Ridge
National Laboratory)
J. Du Croz (Numerical Algorithms Group Ltd. (retired) )A. Greenbaum (University of Washington )S. Hammarling (Numerical Algorithms Group Ltd. )A. McKenney
D. Sorensen (Rice University )May 31, 2006

14

NAG 関係者zzzzzz

E. Anderson （University of Tennessee, Knoxville ）Z. Bai （University of Kentucky and University of California, Davis ）C. Bischof （Institute of Scientific Computing, Technical University
Aachen, Germany)
L. S. Blackford (formerly L. S. Ostrouchov) （University of Tennessee,Knoxville)
J. Demmel (University of California, Berkeley)
J. Dongarra (University of Tennessee, Knoxville and Oak Ridge
National Laboratory)z

J. Du Croz (Numerical Algorithms Group Ltd. (retired) )z

A. Greenbaum (University of Washington )zS. Hammarling (Numerical Algorithms Group Ltd. )z

A. McKenney
D. Sorensen (Rice University )zMay 31, 200615

Fortran Builder (learning Ed.) をどう使う
z 性能・サイズにこだわらない！
z 開発環境ソフトウェアのテスト・デバッグに用いる完成したソースコードを別の環境で使う（大規模問題、高速なマシン、実データ）
z 開発・実行環境
パソコンを充実した研究・開発ツールに

May 31, 2006

16

LAPACK on Fortran Builder
A. 新規作成
B. 自分のコードに LAPACK を
C. 自分のコードを更新＆ LAPACK 使用
D. 数値実験ツール

May 31, 2006

17

A. 新規作成
z サンプル＆データを試してみればよい
z 問題に合うルーチンの認識が必要

Æ それには LAPACK Users’ Guidez 例：「特異値分解 A = UDV;(U, V : 直交行列, D: 対角行列) 」を求める

May 31, 2006

18

LAPACK を用いたプロジェクトの指定

May 31, 2006

19

ヘルプ(H) で機能のヘルプへ

May 31, 2006

20

DGESVD を選択

May 31, 200621

ビルド（終わったとは表示されないが）May 31, 2006

22

DOS 窓に結果が（動いた！）

May 31, 2006

23

MATLAB と比較すると

May 31, 200624

説明はヘルプの
LAPACK利用ガイドから

May 31, 200625

こんな例題May 31, 2006

26

サンプルデータの結果（正解）May 31, 2006

27

LAPACK は簡単に使えた
z 所要時間 10 分？
z テストプログラム、テストデータ、模範解答
z ノート PC でもあっという間z DGESDD, DGESVD とはどこが違う？

×関数についてのヘルプはないの？
×どこをどのように直せばいいの？
LAPACK Users’ Guide が必要！
・ DOS 窓の表示は見にくくない？
May 31, 200628

コードを修正するためにz 関数の仕様 (LAPACK Users’ Guide)z ソースプログラムはどこ？
z テストプログラム＆テストデータ
z ユーザにはどんな修正が許されているか？

May 31, 200629

どんなファイルから構成されているか

May 31, 200630

d: テストデータ

May 31, 200631

d: テストデータ（変換後）

May 31, 200632

fif: 呼び出している関数のリスト？

May 31, 200633

makefile 前半

May 31, 200634

makefile: 後半

May 31, 200635

fbp: コンパイラオプション（前半）？

May 31, 200636

fbp: コンパイラオプション（後半）？

May 31, 200637

修正の方針z テストプログラムとテストデータを読む
z 必要ならばコピーを作成
z Fortran Builder で修正

or 修正して Fortran Builder に持ち込み
z 実行環境は Fortran Builder を！
z

データまわり（入力データ、出力）が少し不便

May 31, 2006

38

DGESVD と DGESDDz DGESVD

一般的な方法による特異値分解
信頼できるアルゴリズム
z DGESDD

Divide and Conquer (分割統治法）による高速万能かどうかはわからない（Aggressive)

May 31, 200639

B. 自分のコードに LAPACK を
z 性能メリットz 互換性

別の計算環境将来
z テストプログラムをラッパーとして利用する
オーバーヘッドより生産性を！
z ただし、自分の問題の認識は必要
Æ LAPACK Users’ Guide
May 31, 2006

40

C. 自分のコードを更新＆ LAPACK 使用
z 新しい言語機能を活用
z 性能メリット・互換性
z f77 Æ f95 変換機能を利用（どれくらいうまくいくか？微修正可能？）z テストプログラムをラッパとして利用
z 例：「帯行列を係数とする連立一次方程式
A x = b, A: 帯行列 」を解く
小国力他．行列計算ソフトウェア, 丸善, 1991
May 31, 2006

41

どんなファイルから構成されているかMay 31, 200642

f95 に変換するためコピー

May 31, 2006

43

変換設定

May 31, 2006

44

残念!

この問題点に関しましては、下記ウェブページのQ&Aにて対応しておりますので、ご参照ください。
http://www.nag-j.co.jp/fbrelease.htm
日本ニューメリカルアルゴリズムズグループ株式会社

May 31, 200645

f95 ソースファイルがある！

May 31, 200646

f95 ソースファイル（前半）May 31, 200647

f95 ソースファイル（後半）May 31, 200648

f77 ソースファイル（前半）May 31, 200649

f77 ソースファイル（後半）May 31, 200650

f95 ソースをコンパイル

May 31, 200651

修正の方針z f77 ソースプログラムを f95 へ変換
z 変換がうまくいくように f77 ソースを修正
z Fortran Builder で修正
z 実行環境は Fortran Builder を！
z f95/f77, LAPACK の共存が可能z

多少の労力 & 忍耐は必要

May 31, 200652

D. 数値実験ツール
プログラム作成から、プログラムの活用にz ほぼ完成版のプログラムが存在
z データを変えて実行
z プログラムを拡張（理論を検証）

May 31, 200653

Fortran Builder (learning Ed.) のよいところ
z (Almost of ) All in One
z 安価（コンパイラ、ツール、サンプル）z 教育的
z ヘルプ （そこそこ？）z USB ライセンスキーz 社会人の使える Student Edition

May 31, 2006

54

たとえばこんな使い方は？
目標： 自宅の PC でプログラムを作成させる
案１）学生に購入させる
案２）履修者に USB キーを貸与＊成果物（ソースコード）はどこでも使用可能＊成果物は将来に渡って使用可能＊安価な開発環境としても有用
May 31, 200655

私の疑問（昔のプログラマの思いこみ）
z データを見るためのツールは？
z Windows ふうの環境での動作の仕組みは？
z Fortran95 へのコンバージョンは容易？
z 出力はどうする？ (DOS 窓は不便では？)

May 31, 200656

Fortran Builder (learning Ed.) の制約
z マニュアル・チュートリアル（ヘルプはあるが、体系的な説明は。。。）
z 紙に出力して読む必要性は？
（PDF のマニュアルでもあれば。。。）
z Size 10MB (1000 lines)
密行列 1000*1000 はOK
帯行列 N=5300, 帯半幅=51 は OK

May 31, 200657

Fortran Builder まとめz (Compiler, LAPACK, 開発環境）は手軽なツール

Simple and Easyz ヘルプ、教育コンテンツも有用 Educationalz 一通りのことができる All in one
z 個人環境向けの新しいツール Anywherez スムース Less trouble, less stressz 体系的マニュアル、アルゴリズムについての理解が必要 Knowledge are recommended
May 31, 2006

58

参考文献
Web ページ： google で！
・ www.netlib.org
・ phase.hpcc.jp文献：・Andersen, E. et. al. LAPACK Users’ Guide, SIAM, 1999
・山本、榊原、野寺、長谷川．これだけは知っておきたい数学ツール（インターネット時代の数学 1)、共立出版、1999
http://www.slis.tsukuba.ac.jp/~hasegawa/MathTool/
・大石進一． Linux 数値計算ツール、コロナ社、2000
・小国力他．行列計算ソフトウェア, 丸善, 1991
May 31, 200659

蛇足用語集z LINPACK: Top500 というコンピュータの性能競争に使われているが、本来は Gaussの消去法による連立一次方程式の解法
z BLAS: DGEMM (ZGEMM) さえ高速ならLAPACK は高速になる。その意味で
LAPACK はマシン独立である
z NAG, IMSL: 著名な数学ライブラリ。内部でLAPACK を使っていることがある
May 31, 2006

60