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? dinlera@itu.edu.tr 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