• 検索結果がありません。

BLAS :

ドキュメント内 PowerPoint プレゼンテーション (ページ 46-65)

BLAS とは

BLAS

は様々な人,企業が開発している

:

Reference BLAS

基準として作られた

BLAS(

無料

)

.速くない.

Intel MKL

Intel

社が開発

(

有料

)

CPU

毎に設計されて非常に速い.

OpenBLAS

後藤和茂先生が作成した

GotoBLAS

が 引き継がれた

BLAS

.速い

(

無料

)

ATLAS (Automatically Tuned Linear Algebra Software)

自動でチューニングする

BLAS

CPU

に依存しない.46

BLAS とは

BLAS :

関数名,サブルーチン名や引数,役割が同じで あるため,どの

BLAS

を使っても動作は同じ.

しかし,

BLAS

によって速度が変わる

!!

① 計算時間がかかるところを

BLAS

で作成

② 使用者が

BLAS

を選択し,実行する

コンピュータ毎に最適な選択し,高速に

!

47

BLAS とは

BLAS

は演算ごとにレベル分けされている

: Level 1:

ベクトル

-

ベクトルの演算

Level 2:

行列

-

ベクトルの演算

Level 3:

行列

-

行列の演算

48

Lapack とは

Lapack:

Linear Algebra PACKage

の略 線形代数ライブラリ.

連立一次方程式や固有値問題などが解ける.

例えば

dgesv(An,Bn,An,ipiv,b,bn,info)

連立一次方程式のサブルーチン

Ax = b

の解

x

b

に代入して出力される.

49

Lapack とは

Lapack:

Lapack

Fortran

で記述されており,内部で

BLAS

を用い ているため

BLAS

を差し替えることで

CPU

に依存した最 適化が可能

!

世界中で利用されており,信頼性も高い

!!

現在はバージョン

3.5.0 Lapack

のリファレンス

:

http://www.netlib.org/lapack/

50

Lapack とは

Lapack

は変数の型ごとに関数,サブルーチン名が変わる

:

ge :

一般行列

gb :

一般帯行列

tr :

三角行列 など

:

dgesv (

引き数

) dgesv, dgbsv

51

連立一次方程式

☆文法

?gesv(n, nrhs, A, lda, ipiv, b, ldb, info) n : integer

型.

A

の次元

(n × n), b

の行数.

nrhs : integer

型.

b

の列数.

A : ?

型の

n × n

配列.

lda : max(1,n)

b : ?

型の

n × nrhs

配列

ipiv : integer

型.

n

次元の配列.

info : integer

型.

info = 0

なら正常

info > 0

正則でない可能性

info < 0 info

番目の値が不正 52

Matlab

BLAS

Lapack

などのライブラリを使えば世界最高速の

ツールが使えるが

もっと手軽に世界最高のツールを利用したい

!!

Matlab を利用する !!

Matlab

Intel MKL

をはじめとした世界の

様々なライブラリを搭載したプログラミング言語.

そのため,世界最高峰の行列積や連立一次方程式 の近似解法が簡単に使用可能

!!

53

Matlab

端末上で

matlab

とコマンドをうつ.

Matlab

コマンドをうつ.

Matlab が起動

54

>> n = 5

>> A = ones(n,n);

>> B = ones(n,n);

>> C = A*B;

Matlab

端末上で

matlab

とコマンドをうつ.

Matlab が起動

55

>> n = 5

>> A = ones(n,n);

>> B = ones(n,n);

>> C = A*B;

n

5

を代入

全要素

1

n × n

行列

A

B

を作成 セミコロン

(;)

があ

ると非表示になる.

Matlab

端末上で

matlab

とコマンドをうつ.

Matlab が起動

56

>> n = 5

>> A = ones(n,n);

>> B = ones(n,n);

>> C = A*B;

A × B

の行列積を実行.

Intel MKL

BLAS

dgemm

が呼ばれる

!!

Matlab

57

>> n = 1000, A = ones(n,n); B = ones(n,n);

>> tic; C = A*B; toc

Matlab

58

>> n = 1000, A = ones(n,n); B = ones(n,n);

>> tic; C = A*B; toc

一行で書くことも可 表示する場合はカンマで区切る

実行時間の計測

自作行列積と実行時間を比べよう !

Matlab

59

>> n = 10, A = rand(n,n); b = A*ones(n,1);

>> tic; x = A¥b, toc

Matlab

60

>> n = 10, A = rand(n,n); b = A*ones(n,1);

>> tic; x = A¥b, toc

n × n

の乱数行列

A

を作成

A

と全要素

1

のベクトルの行列ベクトル積 連立一次方程式

Ax = b

を満たす

x

を求める.

Lapack

の連立一次方程式を求める関数が

呼び出される.

答えは

b = A*ones(n,1)

であるため,

大体

x=ones(n,1)

になる.

Matlab

61

>> n = 100, A = rand(n,n); A = A + A’;

>> tic; lambda = eig(A), toc

Matlab

62

>> n = 100, A = rand(n,n); A = A + A’;

>> tic; lambda = eig(A), toc

A’

A

の転置行列.

A+A’

は対称行列になる

行列

A

の固有値問題

A*x = lambda*x

を満た す固有値

lambda

を求める関数.

これも

Lapack

の固有値問題の関数が呼ばれ ている

(

対称行列用

)

A

が対称行列のため,固有値はすべて実数 になる.

おまけ : 精度保証付き数値計算

63

今まで利用してきた浮動小数点数とは簡単に言うと 超高速な近似計算である.そのため

を計算した場合,実に

10000000000

回以上の近似計算を 行う.このとき,正しい結果は得られているのであろうか

?

とみると大体

1

に近いためあっていることが推測される.

>> n = 3000, A = rand(n,n); b =A*ones(n,1);

>> tic; x = A¥b; toc

>> format long

>> x(1)

ドキュメント内 PowerPoint プレゼンテーション (ページ 46-65)

関連したドキュメント