LAPACK ve BİM++ (Blok İteratif Metotlar)

advertisement
LAPACK ve BİM++ (Blok İteratif
Metotlar) Paketi
Ali Dinler
19 Mart 2008
Mühendislik Bilimleri Bölüm Semineri
1
Özet
Giriş
Blok Metotlar
Blok Krylov Metotları
LAPACK
ATLAS
BİM++
Gelecek…
2
Giriş
Fiziksel Problem
KTDD ya da
KTDD sistemi
Ayrıklaştırma
Ax=b ya da AX=B
Genellikle A büyük (dim(A)>10^4) ve seyrek (sparse)
3
Katsayı Matrisimiz
İlk sorulması gereken sorular:
 Simetrik mi?
 Tersi olan bir matris (nonsingular) mi?
 Pozitif tanımlı mı? : Her x vektörü için Transpose(x)Ax>0 (Bu ne
demek?)
 Matrisimizin boyutu ne?
 Durum numarsı ne (condition number) mu? (Bu ne demek,
Anlaması kolay mı?)
 Seyrek mi?
Bu soruların cevaplarına göre çözüm metodumuzu belirlemeliyiz!
4
Blok Matrisler
Blok algoritmalar performanslı, tek vektör yerine vektör
bloklarını kullanmak performanslı
 Seyrek (Sparse) Matris
 Üçlü Bant Sistem!



Sadece Köşegen, alt-köşegen ve üstköşegen elemanları kullanarak çözüm
Üç Boyutlu durumda?
Blok Üçlü Bant Sistem!
 Alt ve üst-köşegen bloklar
köşegen matris!
 Blok LU ayrışımı, ileri ve
geri yok etme

5
Blok Krylov
Krylov Metotları
i) Krylov metotları, en genel anlamda, matris-vektör çarpımları ile Ax=b
lineer sistemini çözen metotlardır
ii) Çözümü Krylov altuzayında arayan metotlardır






GMRES, CG, CGS, TFQMR, Bi-CGSTAB…
Çözüm Krylov altuzayında (arama uzayı ya da muhtemel çözümler
uzayı)
Teorem: nxn’lik tekil olmayan Ax=b lineer sisteminin çözümü m boyutlu
Krylov altuzayındadır. (m<=n)
Uygun problemler için ÇOK HIZLI çözüm.
GMRES (büyük lineer sis. en önemli iteratif yöntem)
6
Blok GMRES-I




GMRES Algoritması
 Krylov altuzayının m boyutlu ortonormal bazını bul (GS Arnoldi)
 Üst-Hessenberg (ekstra bir alt köşegene sahip üst üçgensel matrisi)
matisini oluştur (Arnoldi)
 En küçük kareler problemini çöz (QR)
Tek vektörle değil vektör blokları ile
Tek sağ taraflı sistem?
BGMRES
 Blok Arnoldi
 Ortogonal bloklar
7
Blok GMRES-II



Uygulamada:
BGMRES(m)
 Direk metotlardan üstün
 BGMRES’e göre daha kötü yakınsar
Ortogonalliğin kaybedilmesi
 Yuvarlama hataları
 Matris kötü huylu (Durum sayısı (condition number) büyük)
 Householder ortogonalleştirmesi
 Tekrar ortogonalleştirme
 Biz?
8
BİM++



Yardım edenler: Onur Dinçer, Ali Demirci
Simetrik ve simetrik olmayan blok lineer sistemleri çözen iteratif
metotlar paketi
Bu Sunumda anlatılanların ayrıntılarını
www2.itu.edu.tr/~dinlera/bimpp adresinde bulabilirsiniz
C/C++
C++
F77
9
PAKET?
 Yüksek başarımlı ve kolay kullanılabilir bir paket oluşturmaya
 Algoritmaları daha kısa ve daha anlaşılır şekilde programlamaya
 Kullanmak için olabildiğince az programlama bilgisi gerektiren bir
paket oluşturmaya
 Tekrar kullanılabilir, taşınabilir ve kolayca geliştirilebilir bir paket
olmasına
 Windows ortamında çalışabilir bir paket olmasına çalıştık.
 Bir dokümantasyonu var
 Bir web sitesi var
www2.itu.edu.tr/~dinlera/bimpp
10
LAPACK
 www.netlib.org/lapack
 Lineer sistem (Ax=b hatta AX=B)
 Lineer en küçük kareler
 Özdeğer-özvektör problemleri için F77 dilinde yazılmış açık
kaynak kodlu özgür bir kütüphane
 Yüksek başarımlı
 Blok matris işlemleri yapıyor (blok matris-matris çarpımı gibi)
 1000’nin üzerinde fonksiyon içeriyor
 Windows’a kurulabilir
 Çok parametreli fonksiyonlardan oluşuyor, örneğin matris-matris
çarpımı:
call SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
11
LAPACK
LINPACK
EISPACK
LAPACK
12
Windows
www2.itu.edu.tr/~dinlera/bimpp
1. http://www.cygwin.com adresinden cygwin setup.exe
programını indirin.setup.exe programını çalıştırın.
2. İleri ileri diyerek “paket seçin” penceresine gelin Math
seçiminin altından LAPACK’i, Devel altından make’i ve g77’yi
işaretleyin.
make? g77?
13
LAPACK Kullanımı
Lineer sistem çözen LAPACK örneği
Program LinearEquations
c solving the matrix equation A*x=b using LAPACK
external sdot
c declarations, notice single precision
Real*4 A(3,3), b(3), res
integer i, j, pivot(3), ok
c define matrix A
c define vector b
c find the solution using the LAPACK routine SGESV
call SGESV(3, 1, A, 3, pivot, b, 3, ok)
c print the vector x
do i=1, 3
write(*,*) b(i)
end do
end
Eğer b Matris ise
yani aynı katsayı
matrisi ile birden
fazla sistem
çözmek
istiyorsak
SGESV metodu
kullanılabilir.
14
ATLAS (Automatically Tuned Linear Algebra
Software)
LAPACK (hepsi değil) ve BLAS uygulaması
ÇOK ÇOK hızlı
“Automatically Tuned” ne demek, gerekli mi?
ATLAS’ı kullananlardan bazıları
Matematik Programları:
MAPLE (v7 and higher)
MATLAB (v6.0 and higher)
Mathematica (forthcoming)
MAPLE (v7 and higher)
Octave
İşletim Sistemleri:
Debian Linux
FreeBSD
Mac OS 10
Scyld Beowulf
SuSE Linux
Bunlara Ek olarak birçok serbest yazılım ve kütüphaneler,
örneğin BİM++
15
Windows ATLAS Kurulumu
1. ATLAS kaynak kodunu indirin ve C:/cygwin/home dizini içine
kopyalayın. INSTALL dosyasını okuyun!
2. Cygwin’i açın ve cygwin’de, ATLAS dizini içinde bir dizin oluşturun
ve içine
cd [benim_dizin]
diyerek girin
3. Aşağıdaki komutu çalıştırın
$ ../configure -b 32 -D c -DPentiumCPS=1600 -prefix=/home/atlas_lib --with-netlib-lapack=/lib/liblapack.a
50 dakika kadar bekleyin 
16
Performans
3000 ’lik matris-vektör çarpımı:
MATLAB 7.01
LAPACK
0.18 sn
0.17 sn
benim çarpımım
0.22 sn
benim blok çarpımım(bs=1500)
0.19 sn
ATLAS
0.14 sn
500x500 ’lük iki matris çarpımı:
MATLAB
0.17 sn
benim çarpımım
1.8 sn
ATLAS
0.12 sn
BİM++ performansı?
17
CPP Arayüzü ile LAPACK kullanımı I
BİM++'ın daha kolay kullanılması için CPPLAPACK’e eklemeler yaptık
CoV Sütun Vektör
RoV Satır Vektör
CroV Kompleks Satır Vektör
CgeM Kompleks Genel Matris
GeM Genel Matris
SyM Simetrik Matris
BaM Bant Matris
SpM Seyrek (Sparse) Matris
CheM Kompleks Hermityan Matris
CbaM Kompleks Bant Matris
CspM Kompleks Seyrek (Sparse)
Matris
CcoV Kompleks Sütun Vektör
tr()
Matrisin izini bulur
qqr()
QR ayrışımı yapar ve Q matrisini verir
rqr()
QR ayrışımı yapar ve R matrisini verir
qr()
QR ayrışımı yapar ve Q ve R matrisini verir
18
Arayüz ile LAPACK Kullanımı II
Lineer sistem çözelim
include "KEYcpplapack.h“
int main(int argc, char** argv)
{
int N=3;
GeM A(N,N);
CoV b(N);
c A matrisini oluştur. Dosyadan da kolayca okutulabilir
c b vektörünü oluştur
A.dgesv(b); // b nin üzerine yazıyor!
cout << “cozum=\n" << b << endl;
Return 0;
}
19
Arayüz ile LAPACK Kullanımı III
C++ teknolojisi?
Algoritma
*, t(), i(), +=,
işlemlerine
dikkat!
20
BİM++ Kurulum
1. http://www.cygwin.com adresinden cygwin setup.exe
programını indirin.setup.exe programını çalıştırın.
2. İleri ileri diyerek “paket seçin” penceresine gelin Math seçiminin
altından LAPACK’i, Devel altından make’i ve g77’yi işaretleyin.
3. www2.itu.edu.tr/~dinlera/bimpp adresinden BİM++ ‘ı indirin ve doğru
yere kopyalayın
21
Algoritmalar
BİM++, en az programlama bilgisi ile hatta hiç C++ bilgisi
gerektirmeden kullanılabilir yüksek başarımlı bir paket
Bcg
Bbcg
Blok Conjugate Gradient Metot
Blok Bi-Conjugate Gradient Metot
Bbicgstab
Bgmres
Blok Bi-Conjugate Gradient Stabilized Metot
Blok Generalized Minimal Residual
Bgmres(m)
Blok Generalized Minimal Residual restarted
Ayrıntılar için dokümantasyona bakınız.
22
BİM++ Kullanımı
GeM A, B;
Bcg(A,B,eps,kmax);
Bbcg(A,B,B,eps,kmax);
Bbicgstab(A,B,B,eps,kmax);
Bgmres(A,B);
Başlangıç vektörü sıfır vektör alındı
B matrisinin üzerine sonucu yazar
Blok Krylov Metotları her matris için çalışmaz.
Yakınsar
Yakınsaklık Problemi!
Yavaş Yakınsar
Yakınsamaz
23
1. BİM++’ı Windows'ta kullanabilir miyiz?
Evet
2. Sorun olursa?
[email protected]
3. BİM++’ı kullanmak için C++ bilmek gerekiyor mu?
Hayır. Her C kodu bir C++ kodudur. C’yi kullanın!
4. ATLAS (Automatically Tuned Linear Algebra Software)’ı kullanabilir
miyiz?
Evet
5. Kendimize ait bir kütüphane?
Evet Bizim.
24
Gelecek
 Önkoşullandırıcılar (preconditioners)
 Çok çekirdekli (Multi-core) sistemler için BİM++
 Paralel BİM++ (PBİM++)?
25
Teşekkürler
26
Download