Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell."—  Präsentation transkript:

1 1 Blitz++ Stefan Kofler 99 30 502

2 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell

3 3 Unterstützte Compiler gcc GNU C++ compiler für Linux Unter Win Cyg-Win32. VS.NET 2003 KAI C++ für Win und Linux Metrowerks Codewarrior DEC cxx V6.0-010 or better Cray C++ 3.0, aber mit schlechter Performance SGI C++ 7.3

4 4 Arrays

5 5 2 Parameter: T_Numtype N_rank Bsp: Array Eindim. Integer Array Matrix aus doubles Array y(4,4) 4x4 Matrix

6 6 Arrays initialisieren Array y(4,4) y = 0; y = 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1;

7 7 Arten von Arrays Scalars user defined types TinyVector, TinyArray (fixe Größe) Nested Arrays Bsp: Array,1>

8 8 Bsp: #include using namespace blitz; int main() { Array A(3,3), B(3,3), C(3,3); A = 1, 0, 0, 2, 2, 2, 1, 0, 0; B = 0, 0, 7, 0, 8, 0, 9, 9, 9; C = A + B; cout << "A = " << A << endl << "B = " << B << endl << "C = " << C << endl; return 0; }

9 9 Bsp, Output A = 3 x 3 1 0 0 2 2 2 1 0 0 B = 3 x 3 0 0 7 0 8 0 9 9 9 C = 3 x 3 1 0 7 2 10 2 10 9 9

10 10 Konstruktoren Array(); Array(expression) Bsp: Array A(4,3), B(4,3); Array(Range r1, Range r2) Bsp: Array A(Range(10,20), Range(20,30)) Array(Array(T_numtype, N_rank>& array)

11 11 Indexing, Slicing, Subarrays

12 12 Range Array A(7); A = 0, 1, 2, 3, 4, 5, 6; cout << A(Range::all()) << endl // [ 0 1 2 3 4 5 6 ] << A(Range(3,5)) << endl // [ 3 4 5 ] << A(Range(3,toEnd)) << endl // [ 3 4 5 6 ] << A(Range(fromStart,3)) << endl // [ 0 1 2 3 ] << A(Range(1,5,2)) << endl // [ 1 3 5 ] << A(Range(5,1,-2)) << endl // [ 5 3 1 ] << A(Range(fromStart,toEnd,2)) << endl; // [ 0 2 4 6 ]

13 13 Indexing Wie bei Arrays üblich, nur runde Klammer Bsp: A(7,0,0) = 5; Wenn Array const: return type ist Value Wenn Array nicht const: return type Referenz

14 14 Subarrays Array B = A(Range(5,7), Range(5,7), Range(0,2)); B referenziert nun (5..7,5..7,0..2) von A. Return Type ist Array

15 15 Slicing Array F = A(Range::all(), 2, Range::all()); Array G = A(2, 7, Range::all());

16 16 Slicing

17 17 Index 0 vs. Index 1 Arrays in C/C++ starten mit 0 Arrays in Fortran mit 1 0tes Element für manche komisch Lösung const int firstDim = 0; const int secondDim = 1; usw.

18 18 Index 0 vs. Index 1 Index kann auch gesetzt werden auch für jede Dim verschieden Array A(Range(1,10), Range(0,9))

19 19 Input Output Format

20 20 Output Bsp #include using namespace blitz; int main() { Array A(4,5,FortranArray ()); firstIndex i; secondIndex j; A = 10*i + j; cout << "A = " << A << endl; Array B(20); B = exp(-i/100.); cout << "B = " << endl << B << endl; return 0; }

21 21 Output Bsp A = 4 x 5 [ 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 ] B = 20 [ 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765 0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358 0.860708 0.852144 0.843665 0.83527 0.826959 ]

22 22 Input von Array Array muss wie Output sein Größen und Dimensionsangeben [ für Start ] für Ende

23 23 Array Expressions

24 24 Einfachheit Array A, B, C, D; A = B + C + D; entspricht: for (int i=A.lbound(firstDim); i <= A.ubound(firstDim); ++i) A[i] = B[i] + C[i] + D[i];

25 25 Expression Operators + - * / % > = <= == != && || ^ & | Bsp für Bitweise XOR Array A, B, C; C = B ^ C;

26 26 Index Placeholder Array A(10); firstIndex i; A = i; entspricht for (int i=0; i < A.length(); ++i) A(i) = i; Auch möglich: Array A(16); firstIndex i; A = sin(2 * M_PI * i / 16.);

27 27 Index Placeholder Array F(64,64); float midpoint = (N-1)/2.; int cycles = 3; float omega = 2.0 * M_PI * cycles / double(N); float tau = - 10.0 / N; // Index placeholders firstIndex i; secondIndex j; // Fill the array F = cos(omega * sqrt(pow2(i-midpoint) + pow2(j-midpoint))) * exp(tau * sqrt(pow2(i-midpoint) + pow2(j-midpoint)));

28 28 Index Placeholder

29 29 Casten Int-Divisions Problem bei Scalar und Arrays Array A(4), B(4); Array C(4); A = 1, 2, 3, 5; B = 2, 2, 2, 7; C = A / B; // Result: [ 0 1 1 0 ] Lösung C = A / cast(B, float()); // Result: [ 0.5 1 1.5 0.714 ]

30 30 Tensor notation

31 31 Tensor notation Programmfragment: Array x(4), y(4); Array A(4,4); x = 1, 2, 3, 4; y = 1, 0, 0, 1; firstIndex i; secondIndex j; A = x(i) * y(j); cout << A << endl; return 0; Output: 4 x 4 1 0 0 1 2 0 0 2 3 0 0 3 4 0 0 4

32 32 Reduktionen Volle Reduktion sum(), product(), min(), max()... Teilweise Reduktion sum(A,j), product(A,j)...

33 33 Reduktion

34 34 Where Statement Führt Operation nur an gewissen Stellen aus where(array-expr1, array-expr2, array-expr3) Bsp: Nur positive Zahlen quadrieren, sonst 0 setzen & summieren double posSquareSum = sum(where(A > 0, pow2(A), 0));

35 35 Indirection = Möglichkeit, an bestimter Stelle im Array zuzugreifen 2 Möglichkeiten:

36 36 1. Liste von Arraypositionen Array A(5), B(5); A = 0; B = 1, 2, 3, 4, 5; vector I; I.push_back(2); I.push_back(4); I.push_back(1); A[I] = B; After this code, the array A contains [ 0 2 3 0 5 ].

37 37 Liste von Arraypositionen enspricht: for (int i = 0; i < I.length; i++) { int x = I[i]; A[x] = B[x]; }

38 38 2. Cartesisches Produkt Array A(6,6), B(6,6); firstIndex i; secondIndex j A = 0; B = 10*i + j; vector I, J; I.push_back(1); I.push_back(2); I.push_back(4); J.push_back(0); J.push_back(2); J.push_back(5); A[indexSet(I,J)] = B; After this code, the A array contains: 0 0 0 0 0 0 10 0 12 0 0 15 20 0 22 0 0 25 0 0 0 0 0 0 40 0 42 0 0 45 0 0 0 0 0 0

39 39 Tiny Vector

40 40 Was ist Tiny Vector Kleine, leichte Klasse für kl. Vectoren Größe zu Kompilezeit bekannt Schnell und effizient TinyVector T = Typ N = Größe

41 41 Geschwindigkeit

42 42 Parallel rechnen mit Bliz++

43 43 Parallel rechnen Nicht Hauptaugenmerk aber möglich POOMA besser geeignet

44 44 Random Number Generator

45 45 RNG Uniform [0,1) Normal: Normalverteilt, Mittelwert und Varianz Exponentiell: mit spezifischem Mittelwert Diskret: Integer innerhalb Range Beta, Gamma, und F verteilt

46 46 Zusammenfassung Blitz++ ist schnell bietet viele Funktionen spart Sourcecode ist nicht fertig (Version 0.8) Dokumentation teilweise Lückenhaft

47 47 Danke für die Aufmerksamkeit ~ENDE~


Herunterladen ppt "1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell."

Ähnliche Präsentationen


Google-Anzeigen