10. Numeryczna algebra liniowa wprowadzenie. Marian Bubak Department of Computer Science AGH University of Science and Technology Krakow, Poland bubak@agh.edu.pl dice.cyfronet.pl Contributors Magdalena Nowak Paweł Taborowski Rafał Stachura
Plan wykładu 1 Zastosowania numerycznej algebry liniowej 2 Macierze testowe 3 Dlaczego algorytmy równoległe? 4 5 Biblioteki 6 Bibliografia
Zastosowania numerycznej algebry liniowej Zastosowania numerycznej algebry liniowej Fizyka: CFD, lattice-gauge, atomic spectra,... Chemia: chemia kwantowa, inżynieria chemiczna, Mechanika: obliczenia z wykorzystaniem FEM, FD,... Elektrotechnika, elektronika: systemy energetyczne, symulacja obwodów, symulacja urządzeń,... Geodezja, Ekonomia: modelowanie systemów ekonomicznych, Demografia: migracja, Psychologia: grupy, powiązania, Badania operacyjne: programowanie liniowe, Polityka...
Macierze testowe Macierze testowe Standardowy zbiór macierzy rzadkich Harwel - Boeing Sparse Matrix Collection [HARWELL-BOEING]
Dlaczego algorytmy równoległe? Dlaczego algorytmy równoległe? Przykład przewidywanie pogody (globalnie): rozwiązywanie równania Naviera-Stokesa na siatce 3D wokół Ziemi Zmienne: temperatura ciśnienie równanie Naviera-Stokesa (6 zmiennych) wilgotność prędkość wiatru Obliczenia: elementarna komórka 1 km 10 warstw 5 109 komórek w każdej komórce: 6 8 Bytes 2 10 11 Bytes = 200 Gbytes, w każdej komórce 100 operacji fp, obliczenia 1 kroku czasowego 1 min 100 5 109 60 = 8 GFLOPS
Dot product Dot product c = x T y; x, y R n (vectors) 1 3 f u n c t i o n : c = dot ( x, y ) c = 0 5 n = l e n g t h ( x ) f o r i = 1 : n 7 c = c + x ( i ) y ( i ) 9 11 dot
saxpy saxpy z = α x + y == (saxpy = scalar alpha x plus y) α scalar 2 f u n c t i o n : z = saxpy (α, x, y ) 4 n = l e n g t h ( x ) f o r i = 1 : n 6 8 10 12 z ( i ) = α x(i) + y(i) saxpy
The colon notation The colon notation A R m n k-th row of A: k-th column of A: A(k, :) = [a k1, a k2,..., a kn ] A(:, k) = a 1k a 2k. a nk
Matrix-Vector multiplication Matrix-Vector multiplication z = A x; z i = n i=1 a ij x j a) row version m = rows(a); z(1 : m) = 0 n = cols(a) 1 f u n c t i o n : z = matvec. i j (A, x ) f o r i = 1 :m 3 f o r j = 1 : n z ( i ) = z ( i ) + A( i, j ) x ( j ) 5 7 matvec. i j
Matrix-Vector multiplication : in colon notation f o r i = 1 :m 2 z ( i ) = A( i, : ) x with dot f o r i = 1 :m 2 z ( i ) = dot (A( i, : ), x ) Ważne Dostęp do macierzy A wierszami
Matrix-Vector multiplication b) column version 1 2 ( 7 3 4 8 5 6 ) = 1 7 + 2 8 3 7 + 4 8 5 7 + 6 8 = 7 1 3 5 +8 2 4 6 m = rows(a); n = cols(a) z(1 : m) = 0 f u n c t i o n : z = matrec. i j (A, x ) 2 f o r j = 1 : n f o r i = 1 :m 4 z ( i ) = z ( i ) + A( i, j ) x ( j ) 6 matrec. i j
Matrix-Vector multiplication : in colon notation z ( 1 :m) = 0 2 f o r j = 1 : n z = z + x ( j ) A ( :, i ) 4 with dot 1 z ( 1 :m) = 0 f o r j = 1 : n 3 z = saxpy ( x ( j ), A ( :, i ), z ) Ważne Dostęp do macierzy A kolumnami
The gaxpy computation The gaxpy computation z = y + A x; x R n ; y R n ; A R n n ; (gaxpy = general A x plus y) 1 f u n c t i o n : z = gaxpy (A, x, y ) 3 n = c o l s ( a ) ; z = y f o r j = 1 : n 5 z = z + x ( j ) A ( :, j ) 7
Outer product updates Outer product updates A A + x y T ; a ij = a ij + x i y j, i = 1 : m, j = 1 : n ij version: 1 f o r i = 1 :m A( i, : ) = A( i, : ) + x ( i ) y T 3 A wierszami ji version: f o r j = 1 : n 2 A ( :, j ) = A ( :, j ) + y ( j ) x A kolumnami (obie saxpy - based )
Matrix matrix multiplication Matrix matrix multiplication C = A m r B r n c ij = a) dot version r a ik x kj k=1 function : C= matmat. ijk (A,B) 2 m= rows (A); r= cols (A); n= cols (B); C (1:m,1: n)=0 for i =1: m 4 for j =1: n for k =1: r 6 C(i,j)=C(i,j)+A(i,k) B(k,j) inner loop 8 10 matmat. ijk middle loop
Matrix multiplication: loop ordering and properties Matrix multiplication: loop ordering and properties ijk 3! = 6 sposobów loop Inner loop Middle loop Inner loop data access order ijk dot vector x matrix A by row, B by column jik dot matrix x vector A by row, B by column ikj saxpy row gaxpy B by row jki saxpy column gaxpy A by column kij saxpy row outer product B by row kji saxpy column outer product A by column Operations dot, saxpy, modes of access. Wybór zależy od architektury komputera.
Biblioteki Biblioteki dla algebry liniowej BLAS - Basic Linear Algebra Subprograms http://www.netlib.org/blas/ https://www.gnu.org/software/gsl/doc/html/blas. html?highlight=blas#c.gsl_blas_ddot LAPACK - Linear Algebra Package http://www.netlib.org/lapack/ JAMA - Java Matrix Package https://math.nist.gov/javanumerics/jama/ GNU Octave https://www.gnu.org/software/octave/about.html Uwaga: Więcej o bibliotekach numerycznych w prezentacji 13.
Bibliografia Bibliografia Matrix Market The Harwell-Boeing Sparse Matrix Collection http://math.nist.gov/matrixmarket/data/harwell-boeing/