Základní numerické knihovny Martin Mádĺık Matematický ústav Univerzity Karlovy v Praze Sokolovská 83, 186 75 Praha 8 18. října 2010 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 1 / 52
Obsah 1 BLAS 2 3 BLACS 4 PBLAS 5 Sca M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 2 / 52
Část I sdílená pamět 1 BLAS Level 1 Level 2 Level 3 BLAS další informace 2 Konvence Drivery Příklad M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 3 / 52
BLAS - Basic Linear Algebra Subprograms Historie 1979 - Lawson et al. - základní sada podprogramů pro lineární algebru velmi úspěšný projekt: čitelný, portovatelný, modulární Stal se de facto standartem pro vektorové operace. Základní frekventované operace v lineární algebře Jednotný přístupový interface Značně optimalizovaný kód Další výhody použití Robustnost Přenositelnost při zachování výkonu Čitelnost celkového kódu M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 4 / 52
Level 1 Level 1 BLAS Vektor - Vektor Originální BLAS implementoval low-level operace jako skalární součin, sčítání vektorů apod. Dnes se označují jako Level 1 BLAS. Standartizovaný interface k vektorovým operacím s mnemotechnickými pomůckami pojmenování funkcí. Příklad pojemnování SUBROUTINE AXPY (N, ALPHA, X, INCX, Y, INCY) Prefixy: S, D, C, Z y α x + y Význam prefixů S - REAL D - DOUBLE PRECISION C - COMPLEX Z - COMPLEX*16 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 5 / 52
Level 1 Level 1 BLAS - přehled funkcí rotace ROTG, ROTMG, ROT, ROTM SWAP x y SCAL x α x COPY y x AXPY y α x + y DOT dot x T y DOT dot α + x T y NRM2 nrm2 x 2 ASUM asum re( x) 1 + im( x) 1 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 6 / 52
Level 1 Level 1 BLAS - složitost, výkon Složitost Operace typicky vyžadují O(n) operací v řádové čárce a O(n) přesunů datových položek (nahraj/ulož) n je délka vektoru. Výkon Level 1 BLAS výkonný na skalárních počítačích. Poměr mezi počty operací v řádové čárce a datovými přesuny je příliš malý, aby byl rozumně využit efektivně na vektorových procesorech. I na skalárním stroji může být problém s operacemi pro příliš malé vektory (cena za časté volání funkcí). Na druhou stranu čitelnost kódu bude nezměrně vyšší (např. Násobení matice x vektor pomocí SAXPY). Násobení matice-vektor Lze rozepsat jako sérii volání SAXPY. ALE pomíjí možnost uložení výsledného vektoru y do vektorového registru. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 7 / 52
Level 1 Level 1 Blas příklad program copy_main real x(10), y(10) integer n, incx, incy, i n = 3 incx = 3 incy = 1 do i = 1, 10 x(i) = i end do call scopy (n, x, incx, y, incy) print*, Y =, (y(i), i = 1, n) end Výsledek: Y = 1.00000 4.00000 7.00000 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 8 / 52
Level 2 Level 2 BLAS Matice - Vektor S příchodem vektorových procesorů se ukázalo, že Level 1 BLAS nemá dostatečnou granularitu pro využití nových optimalizací: data reuse. Level 1 BLAS zastiňuje kompilátoru pohled na globální data (Matice-vektor jako n x vektor-vektor). Bylo přidáno několik málo dalších funkcí Level 2 BLAS - designováno pro matice-vektor operace, které se často vyskytují v algoritmech lineární algebry. Složitost Operace typicky vyžadují O(mn) skalárních operací, m a n jsou dimenze matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 9 / 52
Level 2 Level 2 BLAS - funkce 3 typy základních operací Násobení matice-vektor Rank-1 a rank-2 update Řešení trojúhelníkové soustavy M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 10 / 52
Level 2 Level 2 BLAS - funkce 3 typy základních operací Násobení matice-vektor A = αa x + β y A = αa T x + β y A = αāt x + β y α, β skaláry, x, y vektory, A matice x = T x x = T T x x = T T x x je vektor a T je horní nebo dolní trojúhelníková matice. Rank-1 a rank-2 update Řešení trojúhelníkové soustavy M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 10 / 52
Level 2 Level 2 BLAS - funkce 3 typy základních operací Násobení matice-vektor Rank-1 a rank-2 update A = α x y T + A A = α x y T + A H = α x x T + H H = α x y T + ᾱ y x T + H H je hermitovská matice. Řešení trojúhelníkové soustavy M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 10 / 52
Level 2 Level 2 BLAS - funkce 3 typy základních operací Násobení matice-vektor Rank-1 a rank-2 update Řešení trojúhelníkové soustavy x = T 1 x x = T T x x = T H x T je regulární horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 10 / 52
Level 2 Level 2 BLAS - jmenná konvence XXYY - známe S,D,C,Z XX - Typ matice GE, GB - general, general banded HE, HB, HP - Hermitovská, H. pásová, H. Packed SY, SB, SP - Symetrická, S. pásová, S. pakovaná TR, TB, TP - Trojúhelníková, T. pásová, T. pakovaná YY - operace S - Solve M - Matice V - Vektor R - rank-1 R2 - rank-2 RK - rank-k R2K - rank-2k M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 11 / 52
Level 2 Level 2 BLAS - přehled funkcí GEMV y αa x + β y GBMV, HEMV, HBMV, HPMV, SYMV, SBMV, SPMV TRMV x αa xy TBMV, TPMV, TRSV, TBSV, TPSV GER A α x y T + A, A m n GERU, GERC HER, HPR A α x x H + A, A m n HER2, HPR2 A α x y H + y(αx) H + A, A m n SYR, SPR A α x x T + A, A m n SYR2, SPR2 A α x y T + α( y x T + A, A m n M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 12 / 52
Level 2 Level 2 BLAS - výkon Výkon Velkou část běžně používaných algoritmů lineární algebry je možné napsat pomocí Level 2 BLAS volání. Efektivitu lze dosáhnout použitím implementací šitých na míru používanému hw. Na vektorových procesorech tato implementace používá co nejdelší vektory a všechny výsledné operace počítají s celým vektorem (řádek nebo sloupec) naráz. Při použití vektorových registerů lze zvýšit efektivitu znovupoužítím vektorů (bez ukládání do paměti). Nevhodnost Tento přístup není vhodný na strojích s hierarchickou pamětí (globální pamět, cache, nebo lokální pamět a vektorové registry) nebo na čistě paralelních strojích. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 13 / 52
Level 2 Blas příklad program ger_main real a(5,3), x(10), y(10), alpha integer m, n, incx, incy, i, j, lda m = 2 n = 3 lda = 5 incx = 2 incy = 1 alpha = 0.5 do i = 1, 10 x(i) = 1.0 y(i) = 1.0 end do
Level 2 Blas příklad do i = 1, m do j = 1, n a(i,j) = j end do end do call sger (m, n, alpha, x, incx, y, incy, a, lda) print*, Matrix A: do i = 1, m print*, (a(i,j), j = 1, n) end do end Matrix A: 1.50000 2.50000 3.50000 1.50000 2.50000 3.50000
Level 3 Level 3 BLAS Matice - Matice Nové HW platformy se sdílenou pamětí nebo RISC procesory (Cray, SGI) ukázaly nedostatky Level 2 BLAS: stále malý poměr mezi početními operacemi a datovými přesuny - nebylo možné dostatečně využít nových velkých cache nabo lokálních pamětí. Nutně vedlo na restrukturalizaci na BLOKY a operovat co nejdelší dobu s celými bloky operacemi Matice-Matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 16 / 52
Level 3 Level 3 BLAS Složitost a efektivita Plné využití lokálnách cache vede typicky na O(n 3 ) skalárních operací, ale pouze O(n 2 ) datových přesunů. Tento jev je nazýván surface-to-volume efekt. Navíc lze vhodně paralelizovat: Operace na různých blocích mohou být prováděny současně Operace na každém bloku (skalární i vektorové) mohou být prováděny paralelně M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 16 / 52
Level 3 Level 3 BLAS - funkce Přechod z Level 2 na Level 3 Nahrazením vektorů x, y maticemi B, C. Základní operace Násobení matice-matice Rank-k update pro symetrickou matici Násobení matice trojúhelníkovou maticí Řešení trojúhelníkové soustavy s více pravými stranami α, β jsou skaláry, A, B, C jsou čtvercové matice a T je horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 17 / 52
Level 3 Level 3 BLAS - funkce Základní operace Násobení matice-matice C = αab + βc C = αa T B + βcy C = αa T B T + βcy Rank-k update pro symetrickou matici Násobení matice trojúhelníkovou maticí Řešení trojúhelníkové soustavy s více pravými stranami α, β jsou skaláry, A, B, C jsou čtvercové matice a T je horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 17 / 52
Level 3 Level 3 BLAS - funkce Základní operace Násobení matice-matice Rank-k update pro symetrickou matici C = αaa T + βc C = αa T A + βc C = αa T B + αb T A + βc C = αab T + αba T + βc Násobení matice trojúhelníkovou maticí Řešení trojúhelníkové soustavy s více pravými stranami α, β jsou skaláry, A, B, C jsou čtvercové matice a T je horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 17 / 52
Level 3 Level 3 BLAS - funkce Základní operace Násobení matice-matice Rank-k update pro symetrickou matici Násobení matice trojúhelníkovou maticí B = αtb B = αt T B B = αbt B = αbt T Řešení trojúhelníkové soustavy s více pravými stranami α, β jsou skaláry, A, B, C jsou čtvercové matice a T je horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 17 / 52
Level 3 Level 3 BLAS - funkce Základní operace Násobení matice-matice Rank-k update pro symetrickou matici Násobení matice trojúhelníkovou maticí Řešení trojúhelníkové soustavy s více pravými stranami B = αt 1 B B = αt T1 B B = αbt 1 B B = αbt T B T je regulární horní nebo dolní trojúhelníková matice. α, β jsou skaláry, A, B, C jsou čtvercové matice a T je horní nebo dolní trojúhelníková matice. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 17 / 52
Level 3 Level 3 BLAS - přehled funkcí GEMM C αop(a)op(b) + βc, op(x) = X, X T, X H, C m n SYMM, HEMM SYRK C αaa H + βc, C n n HERK C αaa T + βc, C n n SYR2K C αab H + αba H + βc, C n n HER2K C ᾱab H + αba H + βc, C n n TRMM B αop(a)b, op(a) = A, A T, A H, C m n TRSM B αop(a 1 )B, op(a) = A, A T, A H, C m n M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 18 / 52
Level 3 Level 3 BLAS - výkon na CRAY Počet procesorů 1 2 4 8 16 Level2: y αax + βy 899 1780 3491 6783 11207 Level3: C αab + βc 900 1800 3600 7199 14282 Level2: x αux 852 1620 3063 5554 6953 Level3: B αub 900 1800 3574 7147 13281 Level2: x αu 1 x 802 1065 1452 1697 1558 Level3: B αu 1 B 896 1792 3578 7155 14009 Tabulka: Rychlost v MFlops/s Level 2 a Level 3 BLAS na CRAY C90, U - horní trojúhelníková, n = 1000 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 19 / 52
Level 3 Blas příklad program symm_main real a(3,3), b(3,2), c(3,3), alpha, beta integer m, n, lda, ldb, ldc, i, j character uplo, side uplo = u side = l m = 3 n = 2 lda = 3 ldb = 3 ldc = 3 alpha = 0.5 beta = 2.0 do i = 1, m do j = 1, m a(i,j) = 1.0 end do end do
Level 3 Blas příklad do i = 1, m do j = 1, n c(i,j) = 1.0 b(i,j) = 2.0 end do end do call ssymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) print*, Matrix C: do i = 1, m print*, (c(i,j), j = 1, n) end do end Matrix C: 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000
BLAS další informace Další BLAS informace Implementace Referenční implementace ke stažení na http://www.netlib.org/blas Existuje řada BLAS implementací (Fortran, asembler, C) ATLAS Automated Tuned Linear Algebra Source Po několik hodin zkouší Váš systém a vybírá optimální implementaci L1 cache reuse FP unit Memory fetch Register reuse Loop overhead M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 22 / 52
BLAS další informace BLAS rozšíření, literatura BLAS Technical Forum http://www.netlib.org/blas/blast-forum Fórum pro udržování a rozšiřování BLASu, udržování ve světle moderního softwaru, programovacích jazyků a výrobců hardwaru. Dense, Sparse, low-level výpočetní jádra a pod. Literatura C. Lawson, R. Hanson, D. Kincaid, and F. Krogh. Basic Linear Algebra Subprograms for Fortran usage. ACM Trans. Math. Softw., 5:308 239, 1979 D. Dodson and J.lewis. Issues relating to extension of Basic Linear Algebra Subprograms. ACM SIGNUM Newsletter, 20(1):2-18, 1985. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 23 / 52
- Linear Algebra Package Numerická knihovna napsaná ve Fortran 77. Základní nástroje pro řešení problémů lineární algebry efektivně na široké škále výpočetních strojů. lineární soustavy metoda nejmenších čtverců pro systémy rovnic problémy vlastních čísel faktorizace matice (LU, Cholesky, QR, SVD, Schur) odhady podmíněnosti, reorderings husté a pásové matice ne pro řídké reálné i komplexní M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 24 / 52
- vznik Historie Vznikla integrací LINPACK a EISENPACK do jednoho unifikovaného kódu. (Starší knihovny vesměs ignorovaly cenu datových přesunů v paměti). přestrukturoval pečlivě kód tak, aby se dalo využít data reusing. Přínos Vývojáři přepsali předešlé knihovny do séríı volání BLAS funkcí (ty lze optimalizovat pro danou architekturu). Přidali množství rozděl a panuj algoritmů pro problémy vlastních čísel. Nahrazují absolutní chybové odhady relativními umožňující lepší škálovatelnost. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 25 / 52
- použití Kde použít 1 i víceprocesorové stroje (méně než 100) vektorové procesory RISC procesory Všechny výkonné stroje CRAY T90, CRAY J90, Fujitsu VPP, Hitaschi, HP-Convex, IBM Power 2, SGI Poer Callenge, NEC SX-4 M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 26 / 52
Konvence - jmenné konvence, některé funkce?posv Výpočet řešení lineární soustavy (symetrická nebo Hermitovská, positivně definitní) s vícenásobnou pravou stranou. AX = B kde A je sym.pos.def, B pravé strany ve sloupcích, X řešení po sloupcích Matice B je přepsána řešením X. Podle parametru uplo se voĺı U horní trojúhelníková nebo L dolní trojúhelníková matice při Choleskyho rozkladu A = U T U nebo A = LL T M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 27 / 52
Konvence - jmenné konvence, některé funkce Konvence?yyzz,?yyzzz,? - typ dat s - float d - double c - complex (float, float) z - complex (double, double) Volání Fortran: call sposv(uplo, n, nrhs, a, lda, b, ldb, info) call dposv(uplo, n, nrhs, a, lda, b, ldb, info) call cposv(uplo, n, nrhs, a, lda, b, ldb, info) call zposv(uplo, n, nrhs, a, lda, b, ldb, info) Volání C:?posv(uplo, n, nrhs, a, lda, b, ldb, info); M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 28 / 52
Konvence - řešení lineárních soustav Konvence?yyzz,?yyzzz, yy - typ matice ge - general po - symetrická nebo Hermitovská positivně definitní sy - symetrická indefinitní he - Hermitovská indefinitní tr - triangular... Podle typu soustavy?gesv - čtvercová matice?posv - symetrická nebo Hermitovská pos. def. matice?sysv - reálná/komplexní symetrická matice?hesv - Hermitovská matice M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 29 / 52
Konvence - Konvence Konvence?yyzz,?yyzzz, zzz - požadovaná operace trf - trojúhelníková faktorizace trs - řešení soustavy s faktorizovanou maticí con - spočti odhad podmíněnosti matice rfs - zjemni řešení a spočti chybu rfsx - zjemni řešení a spočti chybu - extra-precise tri - spočti inverzi matice z faktorizace equ - equilibrate matrix Co dělá? sgetrf - Trojúhelníková faktorizace obecné matice v jednoduché přesnosti M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 30 / 52
Drivery - driver rutiny Driver kombinuje obvyklá volání dohromady. Konvence zzz -sv - simple (jednoduchý driver) -svx - expert -svxx - extra přesný iterativní expert Jeden driver nebo více volání?gesv - faktorizace a řešení?getrf - LU rozklad?getrs - Výpočet řešení?getrfs - zjemnění řešení, odhad chyby nebo zavolat?gesvx, který obhospodaří vše naráz. M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 31 / 52
Příklad Lapack příklad #include <stdlib.h> #include <stdio.h> /* prototyp DPOSV */ extern void dposv( char* uplo, int* n, int* nrhs, double* a, int* lda, double* b, int* ldb, int* info); /* Parametry, rozměry */ #define N 5 #define NRHS 3 #define LDA N #define LDB N M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 32 / 52
Příklad Lapack příklad /* Výpis matice (jen pro kontrolu) */ void print_matrix( char* desc, int m, int n, double* a, int lda ) { int i, j; printf( "\n %s\n", desc ); for( i = 0; i < m; i++ ) { for( j = 0; j < n; j++ ) printf( " %6.2f", a[i+j*lda] ); printf( "\n" ); } } M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 33 / 52
Příklad Lapack příklad /* Hlavní program */ int main() { /* Lokální proměnné */ int n = N, nrhs = NRHS, lda = LDA, ldb = LDB, info; /* Lokální pole - matice a */ double a[lda*n] = { 3.14, 0.00, 0.00, 0.00, 0.00, 0.17, 0.79, 0.00, 0.00, 0.00, -0.90, 0.83, 4.53, 0.00, 0.00, 1.65,-0.65, -3.70, 5.32, 0.00, -0.72, 0.28, 1.60,-1.37, 1.98 }; M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 34 / 52
Příklad Lapack příklad double b[ldb*nrhs] = { -7.29, 9.25, 5.99,-1.94, -8.30, 6.11, 2.90,-5.05, -3.80, 9.66, 0.59, 8.88, 7.57, 5.57,-1.67 }; /* Řešení soustavy A*X = B */ dposv( "Upper", &n, &nrhs, a, &lda, b, &ldb, &info ); /* Konstrola návratové hodnoty: positvní definitnost */ if( info > 0 ) { printf( "Hlavní minor řádu %i není positivně definitní.\n", info ); printf( "Řešení nelze spočítat.\n" ); exit(1); } M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 35 / 52
Příklad Lapack příklad /* Print solution */ print_matrix( "Řešení", n, nrhs, b, ldb ); /* Vypiš detail Choleskyho faktoriazce */ print_matrix( "Detail Choleskyho faktorizace", n, n, a, lda ); exit(0); } M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 36 / 52
BLACS PBLAS Sca Část II distribuovaná pamět 3 BLACS 4 PBLAS 5 Sca M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 37 / 52
BLACS PBLAS Sca BLACS - Basic Linear Algebra Communication Subroutines Komunikační platforma Standartizovaný interface (přes nejrůznější komunikátory MPI, PVM, CMMD,...) procesní sít (2D grid) Kontextové operace Komunikace 2D poĺı Komunikace bez ID Hlavní účel Komunikace submatic vhodné pro husté matice v algoritmech lineární algebry (např. Sca) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 38 / 52
BLACS PBLAS Sca BLACS - 2d grid, oblasti, kontexty Procesy jsou uspořádány do 2D gridu Každý proces je člen některého ze tří oblatí (Scope): All - Všechny procesy v gridu Row - Všechny procesy na stejné řádce Column - Všechny procesy na stejném sloupci BLACS komunikace je vázána na kontext - integer (srovnej s MPI komunikátorem) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 39 / 52
BLACS PBLAS Sca BLACS - komunikace submatice Jednotka BLACS komunikace je submatice specifikované velikosti a tvaru Submatice Obecná GE Lichoběžníková TR (zobecněná trojúhelníková) Komprimování, paketace je zcela schována před uživatelem Podporavané typy I - Integer S - Single precision D - Double precision C - Complex single precision Z - Complex double precision M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 40 / 52
BLACS PBLAS Sca BLACS - bod-bod komunikace Vysílání xgesd2d(ctxt, M, N, A, LDA, RDST, CDST) xtrsd2d(ctxt, UPLO, DIAG, M, N, A, LDA, RDST, CDST) Příjem xgerv2d(ctxt, M, N, A, LDA, RDST, CDST) xtrrv2d(ctxt, UPLO, DIAG, M, N, A, LDA, RDST, CDST) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 41 / 52
BLACS PBLAS Sca BLACS - souhrnná komunikace Broadcast - Vysílání xgebs2d(ctxt, SCOPE, TOP, M, N, A, LDA, RDST, CDST) xtrbs2d(ctxt, SCOPE, TOP, UPLO, DIAG, M, N, A, LDA, RDST, CDST) Broadcast - Příjem xgebr2d(ctxt, SCOPE, TOP, M, N, A, LDA, RDST, CDST) xtrbr2d(ctxt, SCOPE, TOP, UPLO, DIAG, M, N, A, LDA, RDST, CDST) Souhrnné operace (SUM, MAX, MIN) xgsum2d(ctxt, SCOPE, TOP, M, N, A, LDA, RDST, CDST) xgamx2d(ctxt, SCOPE, TOP, M, N, A, LDA, RA, CA, RCGLAG, RDST, CDST) xgamn2d(ctxt, SCOPE, TOP, M, N, A, LDA, RA, CA, RCGLAG, RDST, CDST) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 42 / 52
BLACS PBLAS Sca BLACS - souhrnná komunikace - topologie Topologie TOP specifikuje komunikační vzor I - Increasing ring D - Decreasing ring S - Split ring M - Multi ring 1-1-tree B - Bidirectional exchange - výchozí (třeba MPI BCAST) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 43 / 52
BLACS PBLAS Sca BLACS - start ve Frotranu Inicializace CALL BLACS PINFO(ME, NP) Inicializace kontextu CALL BLACS GET(0, 0, CTXT) CALL BLACS GRIDINIT(CTXT, Row, P, Q) CALL BLACS GRIDINFO(CTXT, P, Q, MYROW, MYCOL) Získej něčí rank ze souřadnic RANK = CALL BLACS PNUM(CTXT, ROW, COL) Získej něčí souřadnice z ranku CALL BLACS PCOORD(CTXT, RANK, ROW, COL) Ukončení CALL BLACS EXIT(0) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 44 / 52
BLACS PBLAS Sca PBLAS - Parallel BLAS Úvod Tak podobný BLAS jak jen je možné Přidána pouze jediná funkce Očekává se, že se stane podobným standartem jako BLAS Operuje nad 2D blokovým cyklickým uspořádáním Vyžaduje mnoho popisných parametrů Zavádí se array descriptor M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 45 / 52
BLACS PBLAS Sca PBLAS - Parallel BLAS Úvod Tak podobný BLAS jak jen je možné Přidána pouze jediná funkce (transpozice matice) Očekává se, že se stane podobným standartem jako BLAS Operuje nad 2D blokovým cyklickým uspořádáním Vyžaduje mnoho popisných parametrů Zavádí se array descriptor M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 45 / 52
BLACS PBLAS Sca PBLAS - array descriptor Popisovač obsahuje 1 DT A Typ deskriptoru 2 CTXT A BLACS kontext 3 M A Počet řádků v distribuované matici 4 N A Počet sloupců v distribuované matici 5 MB A Počet řádků v bloku 6 MB A Počet sloupců v bloku 7 RSRC A Řádek procesu kde je uložena první řádka matice 8 CSRC A Sloupec procesu kde je uložen první sloupec matice 9 LLD A Hlavní dimenze lokálního pole ukládající lokální bloky M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 46 / 52
BLACS PBLAS Sca PBLAS - 2D bloková cyklická distribuce 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 51 52 53 54 55 Tabulka: Matice 5x5, bloky 2x2 11 12 15 13 14 21 22 25 23 24 51 52 55 53 54 31 32 35 33 34 41 42 45 43 44 Tabulka: pohled procesů 2x2 grid M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 47 / 52
BLACS PBLAS Sca PBLAS - volání Srovnání BLAS x PBLAS C = βc + αop(a)op(b), kde A zaleží na TRANSA, B na TRANSB, op(a) je M x K, op(b) je K x N. CALL DGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A( IA, JA ), LDA, B( IB, JB ), LDB, BETA, C( IC, JC ), LDC ) CALL PDGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, IA, JA, DESC_A, B, IB, JB, DESC_B, BETA, C, IC, JC, DESC_C ) M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 48 / 52
BLACS PBLAS Sca Sca - Scalable Linear Algebra Package pro MIMD počítače - distribuovaná pamět Vetšina funkcí z u Bez podpory banded apacked formátů matic Bez pokročilých algoritmů SVD, QR vlastní čísla pro nesymetrický problém... M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 49 / 52
BLACS PBLAS Sca Sca - Konvence Podobnost Tak jako vychází z BLAS tak Scal vychází z PBLAS převzato z u (stačí předsadit p) Submatice musí být předávány explicitně x Sca A(I, J), LDA - přístup A, I, J, DESCA - Sca přístup M. Mádĺık (MFF UK) Numerické knihovny 18. října 2010 50 / 52
Paralelní LU rozklad DO 10 J = JA, JA+MIN(M, N)-1, DESCA(5) JB = MIN( MIN (M,N)-J+JA, DESCA(5)) I = IA + J - JA Faktorizuj diagonalni a poddiagonalni bloky Testuj singularitu CALL PDGETF2( M-J+JA, JB, A, I,J, DESCA, IPIV, IINFO) Oprav INFO a pivot IF ( INFO.EQ.0.AND. IIFNO.GT.0 ) INFO = IINFO + J - JA Aplikuj zmeny na sloupce JA:J-JA CALL PDLASWP( Forward, Rows, J-JA,, IA, JA, DESCA, J, $ J+JB-1, IPIV)
IF (J-JA+1JB+1.LE.N ) THEN Aplikuj zmeny na sloupce J+JB:JA+N-1. CALL PDTRSM( Left, Lower, No transpose, Unit, $ JB, N-J-JB+JA, ONE, A, I, J, DESCA, A, I, J+B, DESCA) IF (J-JA+JB+1.LE.M) THEN Udate zbyvajici submatice CALL PDGEMM( No transpose, No transpose, $ M-J-JB+JA, N-J-JB_JA, JB, -ONE, A, $ I+JB,J, DESCA, A, I, J+JB, DESCA, $ ONE, A, I+JB, J+JB, DESCA) END IF END IF 10 CONTINUE