Einführung in die Systemprogrammierung

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Systemprogrammierung"

Transkript

1 Einführung in die Systemprogrammierung Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 9. Juli 2015

2 Rationale Zahlen Wie können wir Rationale Zahlen im Rechner repräsentieren?

3 Rationale Zahlen Wie können wir Rationale Zahlen im Rechner repräsentieren? Festkommazahlen Brüche Fließkommazahlen

4 Festkommazahlen Idee: wir speichern die Zahl als Zweierkomplementzahl mit multiplikativem Bias Beispiel: Zwei Dezimal-Nachkommastellen: repr(n) = n 100 n repr(n) ,99 499

5 Festkommazahlen Idee: wir speichern die Zahl als Zweierkomplementzahl mit multiplikativem Bias Beispiel: Zwei Dezimal-Nachkommastellen: repr(n) = n 100 n repr(n) , Addition/Subtraktion: Wie bei Zweierkomplement

6 Festkommazahlen Idee: wir speichern die Zahl als Zweierkomplementzahl mit multiplikativem Bias Beispiel: Zwei Dezimal-Nachkommastellen: repr(n) = n 100 n repr(n) , Addition/Subtraktion: Wie bei Zweierkomplement Multiplikation: repr(repr(x) repr(y)) = x y 100

7 Division von Festkommazahlen Vorsicht bei der Division! ( ) repr(x) repr = x repr(y) y 100 0,4 0,3 :

8 Division von Festkommazahlen Vorsicht bei der Division! ( ) repr(x) repr = x repr(y) y 100 0,4 0,3 : Erst Division: 100 * (40 / 30) = 100 * 1 = 100 = repr(1)

9 Division von Festkommazahlen Vorsicht bei der Division! ( ) repr(x) repr = x repr(y) y 100 0,4 : 0,3 Erst Division: 100 * (40 / 30) = 100 * 1 = 100 = repr(1) Erst Multiplikation: (100 * 40) / 30 = 4000 / 30 = 133 = repr(1,33) Integer-Division schneidet Nachkommastellen ab!

10 Division von Festkommazahlen Vorsicht bei der Division! ( ) repr(x) repr = x repr(y) y 100 0,4 : 0,3 Erst Division: 100 * (40 / 30) = 100 * 1 = 100 = repr(1) Erst Multiplikation: (100 * 40) / 30 = 4000 / 30 = 133 = repr(1,33) Integer-Division schneidet Nachkommastellen ab! Schneller: Bit-Schiebeoperationen statt langsamer Division, aber nur für Binärnachkommastellen

11 Festkommazahlen: Eigenschaften Vorteile: Festkommazahlen sind exakt bei Addition, Subtraktion (modulo Überlauf) Festkommazahlen sind effizient bei Addition, Subtraktion Mit existierenden Mitteln einfach zu implementieren Nachteile: Festkommazahlen sind ungenau bei Multiplikation, Division Festkommazahlen arbeiten immer mit festem Multiplikator (100, in unserem Beispiel)

12 Festkommazahlen: Eigenschaften Vorteile: Festkommazahlen sind exakt bei Addition, Subtraktion (modulo Überlauf) Festkommazahlen sind effizient bei Addition, Subtraktion Mit existierenden Mitteln einfach zu implementieren Nachteile: Festkommazahlen sind ungenau bei Multiplikation, Division Festkommazahlen arbeiten immer mit festem Multiplikator (100, in unserem Beispiel) Fester Multiplikator ist für naturwissenschaftliche Zwecke nicht flexibel genug!

13 Fließkommazahlen: Die Idee Naturwissenschaftler: Wir brauchen Zahlen mit sehr unterschiedlichen Größenordnungen! flexibler multiplikativer Bias! Repräsentierungsbeispiel: 4, ,

14 Fließkommazahlen: Die Idee Naturwissenschaftler: Wir brauchen Zahlen mit sehr unterschiedlichen Größenordnungen! flexibler multiplikativer Bias! Repräsentierungsbeispiel: 4, als 420, 23 1, als 115, 8 Wir speichern den Exponenten der Zahl zusammen mit einer Annäherung der signifikanten Ziffern (Mantisse)

15 Fließkommazahlen: Die Idee Naturwissenschaftler: Wir brauchen Zahlen mit sehr unterschiedlichen Größenordnungen! flexibler multiplikativer Bias! Repräsentierungsbeispiel: 4, als 420, 23 1, als 115, 8 Wir speichern den Exponenten der Zahl zusammen mit einer Annäherung der signifikanten Ziffern (Mantisse) Im Rechner sind Zweierexponenten effizienter als Zehnerexponenten

16 Fließkommarepräsentierung Vorzeichen Exponent Mantisse Zahl getrennt in Vorzeichenbit, Exponent, Mantisse Exponent mit Bias gespeichert Falls die Zahl 0, muß Binärmantisse immer mit 1 beginnen, daher ist dieses Bit implizit. Beispiel: 8 Bits Exponent, Bias 127, Mantisse 23 Bits

17 Fließkommarepräsentierung: Beispiel Vorzeichen Exponent Mantisse Beispiel: 8 Bits Exponent, Bias=127, Mantisse 23 Bits

18 Fließkommarepräsentierung: Beispiel Vorzeichen Exponent Mantisse Beispiel: 8 Bits Exponent, Bias=127, Mantisse 23 Bits Vorzeichen v = 0

19 Fließkommarepräsentierung: Beispiel Vorzeichen Exponent Mantisse Beispiel: 8 Bits Exponent, Bias=127, Mantisse 23 Bits Vorzeichen v = 0 Exponent e = = 9

20 Fließkommarepräsentierung: Beispiel Vorzeichen Exponent Mantisse Beispiel: 8 Bits Exponent, Bias=127, Mantisse 23 Bits Vorzeichen v = 0 Exponent e = = 9 Mantisse m = 1, =

21 Fließkommarepräsentierung: Beispiel Vorzeichen Exponent Mantisse Beispiel: 8 Bits Exponent, Bias=127, Mantisse 23 Bits Vorzeichen v = 0 Exponent e = = 9 Mantisse m = 1, = v 2 e m = = 1000

22 IEEE 754: Fließkommazahlen Standardisierte Repräsentierung: IEEE-754 Format Exponent Bias (Exponent) Mantisse binary32 8 Bits Bits binary64 11 Bits Bits Unterstützt von handelsüblicher Hardware, z.b. dem MIPS-Coprozessor #1 binary32 auch als Fließkommazahl mit einfacher Präzision bezeichnet (C/C++/Java: float) binary64 auch als Fließkommazahl mit doppelter Präzision bezeichnet (C/C++/Java: double)

23 IEEE 754: Besondere Zahlen Bestimmte Bitmuster haben spezielle Bedeutungen. Hier für binary32: IEEE 754-Zahlen nehmen besondere Bedeutungen an, wenn der Exponent nur aus 0- oder 1-Bits besteht.

24 IEEE 754: Besondere Zahlen Bestimmte Bitmuster haben spezielle Bedeutungen. Hier für binary32: IEEE 754-Zahlen nehmen besondere Bedeutungen an, wenn der Exponent nur aus 0- oder 1-Bits besteht. Exponent = 0...0: 0x repräsentiert 0 0x repräsentiert 0 Allgemein: 1 v m (ohne 1,-Erweiterung)

25 IEEE 754: Besondere Zahlen Bestimmte Bitmuster haben spezielle Bedeutungen. Hier für binary32: IEEE 754-Zahlen nehmen besondere Bedeutungen an, wenn der Exponent nur aus 0- oder 1-Bits besteht. Exponent = 0...0: 0x repräsentiert 0 0x repräsentiert 0 Allgemein: 1 v m (ohne 1,-Erweiterung) Exponent = 1...1: 0x7f repräsentiert 0xff repräsentiert Andere Werte für NaN, not a number: Bei 0 0 Bei 1...

26 Fließkomma-Multiplikation xor Verschiebung (δ) Normalisierung Hier nur für normale Fließkommazahlen beschrieben Vorzeichen, Exponent: multiplizieren Mantisse: ( 1 ): mit fühender 1, erweitern, multiplizieren Normalisieren: um δ verschieben, bis genau eine 1, vor dem Komma δ auf Exponent addieren Auf Überlauf prüfen

27 Fließkomma-Addition 0 e 0 m e 1 m 1 Annahme: positiv, e 0 > e 1. Andere Fälle analog. m m 1 e 0 e 1 0 e 0 m c

28 Fließkomma-Addition 0 e 0 m e 1 m 1 Annahme: positiv, e 0 > e 1. Andere Fälle analog. m m 1 e 0 e 1 0 e 0 m c Exponent ist der größere (e 0 ) Hintere Bits von m 1 werden abgeschnitten, Resultat der Mantissenaddition nach m c Überlauf um 1 Bit möglich

29 Risiken bei Fließkommazahlenarithmetik Zahlenrepräsentierung notwendigerweise ungenau Addition/Subtraktion von Zahlen verschiedener Größenordnung verwirft Nachkommastellen Wenn Differenz zwischen Exponenten größer ist als Mantisse, ist Addition/Subtraktion komplett wirkungslos!

30 Risiken bei Fließkommazahlenarithmetik Zahlenrepräsentierung notwendigerweise ungenau Addition/Subtraktion von Zahlen verschiedener Größenordnung verwirft Nachkommastellen Wenn Differenz zwischen Exponenten größer ist als Mantisse, ist Addition/Subtraktion komplett wirkungslos! Vorsicht beim Aggregieren von Zahlen!

31 Fließkommaregister auf MIPS binary32: $f0 $f1... $f30 $f31 binary64: $f0... $f30 MIPS: Fließkommazahlen in Coprozessor #1 32 binary32-fließkommaregister $f0 bis $f31 Je zwei konsekutive Register $fx,$fx+1 können als binary64-register zusammengeschaltet werden Erstes Register muß geradezahlig sein $f0, $f2,... binary64-register hat gleichen Namen wie erstes Register

32 Fließkommaarithmetik auf MIPS Befehl Bedeutung Register add.s $z, $x, $y binary32 $z := $x + $y add.d $z, $x, $y binary64 sub.s $z, $x, $y binary32 $z := $x $y sub.d $z, $x, $y binary64 mul.s $z, $x, $y binary32 $z := $x $y mul.d $z, $x, $y binary64 div.s $z, $x, $y $z := $x binary32 div.d $z, $x, $y $y binary64 sqrt.s $z, $x $z := binary32 $x sqrt.d $z, $x binary64 Alle Grundrechenoperationen und die Quadratwurzel als binary32 (.s) oder binary64 (.d)

33 MIPS-Fließkommas: Kopieren, Konvertieren Konvertierungen: cvt.s.d $z, $x: Konvertiere binary64 nach binary32 cvt.s.w $z, $x: Konvertiere Zweierkomplementzahl nach binary32 cvt.d.w,s: Konvertiere nach binary64 cvt.w.s,d: Konvertiere nach Zweierkomplement Kopieren zwischen Hauptprozessor und Koprozessor #1: mtc1 $z, $x: CPU Koprozessor z.b.: mtc1 $f0, $v0 mfc1 $z, $x: Koprozessor CPU z.b.: mfc1 $v0, $f0

34 MIPS-Fließkommas: Kopieren, Konvertieren Konvertierungen: cvt.s.d $z, $x: Konvertiere binary64 nach binary32 cvt.s.w $z, $x: Konvertiere Zweierkomplementzahl nach binary32 cvt.d.w,s: Konvertiere nach binary64 cvt.w.s,d: Konvertiere nach Zweierkomplement Kopieren zwischen Hauptprozessor und Koprozessor #1: mtc1 $z, $x: CPU Koprozessor z.b.: mtc1 $f0, $v0 mfc1 $z, $x: Koprozessor CPU z.b.: mfc1 $v0, $f0 Weitere Operationen: Vergleich, Runden,...

35 Zusammenfassung: Fließkommazahlen v e m Vorzeichen Exponent Mantisse Fließkommazahl besteht aus Vorzeichen v, Exponent e, Mantisse m Wert: meist 1 v 2 e 1,m Sonderwerte wenn alle Bits im Exponenten 0 oder 1 sind Ermöglichen effizientes Arbeiten mit Zahlen in unterschiedlichen Größenordnungen Vorsicht: Addition/Subtraktion impräzise bei ungleichen Exponenten

36 Zusammenfassung: Rationale Zahlen Repräsentierung per Fixkommazahlen: Fester multiplikativer Bias Einfach zu implementieren (keine Zusatzhardware nötig) Verwendet Standardregister Repräsentierung per Bruchzahlen (per Softwarebibliothek) Repräsentierung per Fließkommazahlen Multiplikativer Bias je nach Zahl unterschiedlich Benötigt Zusatzhardware, aber auf fast allen modernen Prozessoren verfügbar Verwendet meist Zusatzregister

37 Parallele Ausführung 1000 Transistoren MHz SPECint-Performanz

38 Parallele Ausführung 1000 Transistoren MHz SPECint-Performanz Seit 2001 Performanzsteigerung durch parallele Ausführung

39 Parallele Ausführung vor Multicore Wir haben schon zwei Arten von paralleler Ausführung kennengelernt: Pipeline-Parallelismus Superskalare Ausführung

40 Parallele Ausführung vor Multicore Wir haben schon zwei Arten von paralleler Ausführung kennengelernt: Pipeline-Parallelismus Superskalare Ausführung Parallele Ausführung hat viele Formen

41 Die Flynn-Taxonomie Singuläres Datum Mehrere Daten Singuläre Instruktion SISD SIMD Vektoroperationen Graphikprozessoren (GPUs) Mehrere Instruktion MISD (Spezialechner) MIMD Superskalarrechner Mehrere Kerne Mehrere Prozessoren Mehrere Systeme

42 Formen der parallelen Ausführung Parallele Instruktionen (instruction-level parallelism, ILP) Hardware-Pipelining Superskalare Ausführung (Spekulative Ausführung) (Befehlsumordnung (out-of-order execution))

43 Formen der parallelen Ausführung Parallele Instruktionen (instruction-level parallelism, ILP) Hardware-Pipelining Superskalare Ausführung (Spekulative Ausführung) (Befehlsumordnung (out-of-order execution)) Parallele Datenbearbeitung (data-level parallelism)

44 Formen der parallelen Ausführung Parallele Instruktionen (instruction-level parallelism, ILP) Hardware-Pipelining Superskalare Ausführung (Spekulative Ausführung) (Befehlsumordnung (out-of-order execution)) Parallele Datenbearbeitung (data-level parallelism) Parallele Aufgabenbearbeitung (task-level parallelism)

45 Parallele Datenvearbeitung Vektoroperationen Trivial-parallele Bearbeitung (embarrassingly parallel programs) Fork-Join-Bearbeitung Parallelisierungsarchitekturen, z.b. Map-Reduce

46 Parallele Datenvearbeitung Vektoroperationen Trivial-parallele Bearbeitung (embarrassingly parallel programs) Fork-Join-Bearbeitung Parallelisierungsarchitekturen, z.b. Map-Reduce Grundidee: Unabhängige Berechnungen

47 Vektoroperationen: Beispiel (C) #include<stdbool.h>... bool a[32]; bool b[32]; bool c[32]; for (int i=0; i<32; i++) { c[i] = a[i] b[i]; }

48 Vektoroperationen: Beispiel (C) #include<stdbool.h>... bool a[32]; bool b[32]; bool c[32]; for (int i=0; i<32; i++) { c[i] = a[i] b[i]; } Idee: Kodiere a[i] als ites Bit von av Nutze Parallelismus des Bitweise-Oder-Operators av = bv = cv =

49 Vektoroperationen: Beispiel (C) #include<stdbool.h>... bool a[32]; bool b[32]; bool c[32]; for (int i=0; i<32; i++) { c[i] = a[i] b[i]; }... unsigned int av; unsigned int bv; unsigned int cv; // Alle Bits gleichzeitig: cv = av bv; Idee: Kodiere a[i] als ites Bit von av Nutze Parallelismus des Bitweise-Oder-Operators av = bv = cv =

50 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 mul $t3, $t2, $t4

51 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 li $t4, 0x13 $t4= mul $t3, $t2, $t4

52 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 Kodierung li $t4, 0x13 sll $t2, $t0, 16 $t4= or $t2, $t2, $t1 mul $t3, $t2, $t4 $t2= $t0[15:0] $t1[15:0]

53 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 Dekodierung Kodierung li or $t4, 0x13 $t2, $t2, $t1 sll mul $t2, $t0, 16 $t3, $t2, $t4 $t4= 0000 $t2= $t0[15:0] 0013 $t1[15:0] srl $t0, $t3, 16 andi $t1, $t3, 0xffff

54 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 Dekodierung Kodierung li $t4, 0x13 sll $t2, $t0, 16 or $t2, $t2, $t1 mul $t3, $t2, $t4 srl $t0, $t3, 16 andi $t1, $t3, 0xffff $t4= $t2= $t0[15:0] Beispiel: $t1[15:0] $t0 = 0003 $t1 = 0002 $t2 =

55 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 Dekodierung Kodierung li $t4, 0x13 sll $t2, $t0, 16 or $t2, $t2, $t1 mul $t3, $t2, $t4 srl $t0, $t3, 16 andi $t1, $t3, 0xffff $t4= $t2= $t0[15:0] Beispiel: $t1[15:0] $t0 = 0003 $t1 = 0002 $t2 = $t3 =

56 Vektoroperationen: Beispiel (MIPS) Beispiel: Multiplikation der 16-Bit-Zahlen in $t0, $t1 mit 0x13 Dekodierung Kodierung li $t4, 0x13 sll $t2, $t0, 16 or $t2, $t2, $t1 mul $t3, $t2, $t4 srl $t0, $t3, 16 andi $t1, $t3, 0xffff $t4= $t2= $t0[15:0] Beispiel: $t1[15:0] $t0 = 0003 $t1 = 0002 $t2 = $t3 = (De)kodierungsoperationen, um eine Multiplikation zu sparen

57 Vektoroperationen: Ökonomie Vektorberechnung: Kodierung Vektor-Operation Dekodierung

58 Vektoroperationen: Ökonomie Vektorberechnung: Kodierung Vektor-Operation Dekodierung (De)kodierung kann in Sonderfällen übersprungen werden: C-Beispiel (Bit- ): av etc. dauerhaft kodiert Preis: Zugriff auf Einzelbits benötigt Bitoperationen (billig, aber nicht kostenlos)

59 Vektoroperationen: Ökonomie Vektorberechnung: Kodierung Vektor-Operation Dekodierung (De)kodierung kann in Sonderfällen übersprungen werden: C-Beispiel (Bit- ): av etc. dauerhaft kodiert Preis: Zugriff auf Einzelbits benötigt Bitoperationen (billig, aber nicht kostenlos) Herausforderung: Überlauf =

60 Vektoroperationen: Beispiel (MIPS MDMX) MDMX: Teil von MIPS64 (64-Bit-Register) Arithmetik auf: 4 16 Bit-Vektoren 8 8 Bit-Vektoren z.b. add.ob $t0, $t1, 1 # 8 Ein-Byte-Inkrementierungen Fängt Überläufe ab, klammert auf Maximum/Minimum ( kein Überlauf) Shuffle -Befehl zur Umsortierung von Bytes Operationstypen: für alle i: v1 [i] v 2 [i] für alle i: v1 [i] v 2 [k] (k konstant) für alle i: v1 [i] k (k konstant) (wobei {+,,,...})

61 Vektoroperationen und Schleifenabwicklung unsigned short a[len];... for (int i = 0; i < len; i++) { a[i]++; }

62 Vektoroperationen und Schleifenabwicklung unsigned short a[len];... for (int i = 0; i < len; i++) { a[i]++; } li $s0, len la $t0, a L:bgt $t0, $s0, Z lh $t1, 0($t0) lh $t2, 2($t0) lh $t3, 4($t0) lh $t4, 6($t0) addi $t1, $t1, 1 addi $t2, $t2, 1 addi $t3, $t3, 1 addi $t4, $t4, 1 sh $t1, 0($t0) sh $t2, 2($t0) sh $t3, 4($t0) sh $t4, 6($t0) addi $t0, $t0, 8 b L Z:...

63 Vektoroperationen und Schleifenabwicklung unsigned short a[len];... for (int i = 0; i < len; i++) { a[i]++; } li $s0, len la $t0, a L:bgt $t0, $s0, Z lh $t1, 0($t0) lh $t2, 2($t0) lh $t3, 4($t0) lh $t4, 6($t0) addi $t1, $t1, 1 addi $t2, $t2, 1 addi $t3, $t3, 1 addi $t4, $t4, 1 sh $t1, 0($t0) sh $t2, 2($t0) sh $t3, 4($t0) sh $t4, 6($t0) addi $t0, $t0, 8 b L Z:... li $s0, len la $t0, a L:bgt $t0, $s0, Z ld $t1, 0($t0) # ld: 64-Bit-Ladebefehl add.qh $t1, $t1, 1 # 4 Halbwort- # Inkrementierungen sd $t1, 0($t0) # sd: 64 Bits zurückschreiben addi $t0, $t0, 8 b L Z:... Partielle Schleifenabwicklung ermöglicht Vektorbefehle

64 Vektoroperationen auf x86_64 Entwicklung von Vektoroperationen auf der x86-architektur: Zwei-Operanden-Befehle (a := a + b): MMX: 8 64-Bit-Register, Integer-Operationen (ähnlich MDMX) Später auf 16 Register erweitert (AMD) SSE: Bit-Register, Integer und Fließkomma Später auf 16 Register erweitert (AMD) Drei-Operanden-Befehle (a := b + c): AVX: Bit-Register Speicherbandbreite auf zwei 256-Bit-Ladeoperationen pro Zyklus erweitert

65 Zusammenfassung: Vektoroperationen SIMD: Eine Instruktion löst Berechnungen auf mehreren Datensätzen aus Einige Formen von Vektoroperationen (bitweise-und, bitweise-oder) weit verbreitet Andere Formen benötigen spezielle Hardware-Vektoroperationen: MDMX MMX SSE AVX Übersetzer verwendet (unter Anderem) Schleifenabwicklung, um automatisch zu vektorisieren

66 Nebenläufigkeit vs. Parallelität Vorgänge sind nebenläufig gdw sie unabhängig voneinander bearbeitet werden können. Vorgänge sind parallel gdw 1. Die Vorgange nebenläufig sind 2. Die Vorgänge gleichzeitig ablaufen können.

67 Nebenläufigkeit vs. Parallelität Vorgänge sind nebenläufig gdw sie unabhängig voneinander bearbeitet werden können. Vorgänge sind parallel gdw 1. Die Vorgange nebenläufig sind 2. Die Vorgänge gleichzeitig ablaufen können. Nebenläufige Ausführung: Wir erlauben dem System, Vorgänge in beliebiger Reihenfolge auszuführen (insbesondere auch gleichzeitig). Parallele Ausführung: Wir führen parallele Vorgänge gleichzeitig aus.

68 Nebenläufigkeit in C Threads: Nebenläufige Ausführung mit gleicher Seitentabelle (Adreßraum) Parallele Ausführung erlaubt, aber nicht garantiert Thread-Schnittstellen: C11-Threads POSIX threads (pthreads) (UNIX) Windows Threads

69 Nebenläufigkeit in C Threads: Nebenläufige Ausführung mit gleicher Seitentabelle (Adreßraum) Parallele Ausführung erlaubt, aber nicht garantiert Thread-Schnittstellen: C11-Threads POSIX threads (pthreads) (UNIX) Windows Threads

70 POSIX threads pthread_t t; int d =...; Haupt-Thread pthread_create(&t, NULL, f, &d); Kind-Thread void * f(void * arg){ int a = *((int *)arg); void *ergebnis pthread_join(t, &ergebnis) } return (void *) ergebnis;

71 POSIX threads pthread_t t; int d =...; Haupt-Thread pthread_create(&t, NULL, f, &d); Kind-Thread void * f(void * arg){ int a = *((int *)arg); void *ergebnis pthread_join(t, &ergebnis) } return (void *) ergebnis;

72 POSIX threads pthread_t t; int d =...; Haupt-Thread pthread_create(&t, NULL, f, &d); Kind-Thread void * f(void * arg){ int a = *((int *)arg); void *ergebnis pthread_join(t, &ergebnis) } return (void *) ergebnis;

73 Thread-Konfiguration pthread_create(&t, NULL, f, konf); Funktionszeiger (f) Daten (konf) Konfiguration mit mehreren Threads: pthread_create(&t, NULL, f, konf[0]); pthread_create(&t, NULL, f, konf[1]); pthread_create(&t, NULL, f, konf[2]); pthread_create(&t, NULL, f, konf[3]);

74 Thread-Konfiguration pthread_create(&t, NULL, f, konf); Funktionszeiger (f) Daten (konf) Konfiguration mit mehreren Threads: pthread_create(&t, NULL, f, konf[0]); pthread_create(&t, NULL, f, konf[1]); pthread_create(&t, NULL, f, konf[2]); pthread_create(&t, NULL, f, konf[3]); Gleiche Funktion mit unterschiedlichen Konfigurationen

75 Thread-Implementierung Stapel Threads teilen sich: statischen Speicher Ablagespeicher Programmspeicher Jeder Thread hat eigenen Stapelspeicher Im Voraus mit fester Größe alloziert Virtueller Adreßraum Datei Ablage.data.bss.text

76 Thread-Implementierung Stapel Threads teilen sich: statischen Speicher Ablagespeicher Programmspeicher Jeder Thread hat eigenen Stapelspeicher Im Voraus mit fester Größe alloziert Virtueller Adreßraum Stapel 1 Stapel 2 Datei Ablage.data.bss.text

77 Threads vs. Prozesse Threads P0 Prozesse fork()

78 Threads vs. Prozesse Threads Prozesse P0 fork() Elternprozeß P1 Kindprozeß

79 Threads vs. Prozesse Threads P0 Prozesse fork() P1 Stapel Datei Ablage.data.bss.text

80 Threads vs. Prozesse Threads P0 Prozesse fork() P1 Stapel Stapel Datei Kopie Datei Ablage.data.bss.text Ablage.data.bss.text

81 Threads vs. Prozesse Threads T0 T1 T2 P0 Prozesse fork() P1 Stapel Stapel Datei Datei Ablage.data.bss.text Ablage.data.bss.text

82 Threads vs. Prozesse Threads T0 T1 T2 P0 Prozesse fork() P1 Stapel Stapel 1 Stapel 2 Datei Stapel Datei Stapel Datei Ablage.data.bss.text Ablage.data.bss.text Ablage.data.bss.text

83 Threads vs. Prozesse Threads T0 T1 T2 P0 Prozesse fork() P1 Stapel Stapel 1 Stapel 2 Datei Stapel Datei Stapel Datei Ablage.data.bss.text Ablage.data.bss.text Ablage.data.bss.text

84 Zusammenfassung Nebenläufige Ausführung: Mehrere Vorgänge können in beliebiger Reihenfolge (oder auch gleichzeitig) ausgeführt werden Parallele Ausführung: Mehrere Vorgänge werden gleichzeitig ausgeführt Nebenläufigkeit im Betriebssystem: Prozesse Kindprozesse (per fork()) mit eigener Seitentabelle Threads (z.b. C11-Threads, POSIX Threads, Win32-Threads) Mehrete Threads teilen sich Seitentabelle Unabhängige Stapel im geteilten Adreßbereich

85 Trivial-Parallele Bearbeitung Trivial-parallele (embarrassingly parallel) Probleme: Zu bearbeitende Daten haben keine Daten- oder Kontrollflußabhängigkeiten Daten können einfach partitioniert werden Thread 0 Thread 1

86 Trivial-Parallele Bearbeitung Trivial-parallele (embarrassingly parallel) Probleme: Zu bearbeitende Daten haben keine Daten- oder Kontrollflußabhängigkeiten Daten können einfach partitioniert werden Thread 0 Thread 1

87 Trivial-Parallele Bearbeitung Trivial-parallele (embarrassingly parallel) Probleme: Zu bearbeitende Daten haben keine Daten- oder Kontrollflußabhängigkeiten Daten können einfach partitioniert werden Thread 0 Thread 1

88 Trivial-Parallele Bearbeitung Trivial-parallele (embarrassingly parallel) Probleme: Zu bearbeitende Daten haben keine Daten- oder Kontrollflußabhängigkeiten Daten können einfach partitioniert werden Thread 0 Thread 1

89 Trivial-Parallele Bearbeitung Trivial-parallele (embarrassingly parallel) Probleme: Zu bearbeitende Daten haben keine Daten- oder Kontrollflußabhängigkeiten Daten können einfach partitioniert werden Thread 0 Thread 1

90 Trivial-parallele Programme: Beispiel typedef struct { int start, stop; } konf_t; int proc(void *arg) { konf_t k = *((konf_t *)arg); for (int i = k.start; i < k.stop; i++) daten[i] += 1; return 0; }

91 Trivial-parallele Programme: Beispiel konf_t konf[4]; pthread_t t[4]; int pos = 0; int schritt = GROESSE / 4; for (int i = 0; i < 4; i++){ konf[i].start = pos; pos += schritt; konf[i].stop = pos; if (i == 3) konf[i].stop = GROESSE; pthread_create(t + i, NULL, proc, konf + i); } for (int i = 0; i < 4; i++) pthread_join(t[i], NULL); typedef struct { int start, stop; } konf_t; int proc(void *arg) { konf_t k = *((konf_t *)arg); for (int i = k.start; i < k.stop; i++) daten[i] += 1; return 0; }

92 Zusammenfassung Trivial-Parallele Abarbeitung: Anwendbar wenn: Daten leicht partitionierbar (Array, Hash-Abbildung,... ) Keine Abhängigkeit zwischen Daten-Partitionen Vorgehen: Bestimme Anzahl der Arbeiter-Threads Teile Daten in Partitionen Gib jedem Arbeiter-Thread eine Partition Warte, bis alle Threads fertig sind

93 Fork-Join Bearbeitung Algorithmen der Klasse Teile-und-Herrsche (divide-and-conquer) sind oft nicht trivial-parallel Algorithmus teilt Problem in kleinere Unterprobleme: Rekursion löst Unterprobleme Beispiel: Quicksort Idee: Rekursion in Threads (fork) Warten, bis alle Rekursions-Threads fertig sind (join)

94 Fork-Join Bearbeitung: Beispiel Quicksort 4 Threads

95 Fork-Join Bearbeitung: Beispiel Quicksort 4 Threads

96 Fork-Join Bearbeitung: Beispiel Quicksort 4 Threads

97 Fork-Join Bearbeitung: Beispiel Quicksort 4 Threads

98 Fork-Join Bearbeitung: Beispiel Quicksort qsort() qsort() qsort() qsort() 4 Threads

99 Zusammenfassung Fork-Join-Abarbeitung: Anwendbar wenn: Algorithmus verwendet Teile-und-Herrsche -Strategie Vorgehen: Ersetze Rekursion durch Thread-Erzeugung und Thread-join Beschränke ggf. Thread-Erzeugung auf feste Tiefe

100 Unregelmäßige Daten Nicht alle parallelen Probleme sind einfach strukturiert Alternative Strategie: Arbeitsqueue Strategie: Thread ist fertig: Thread nimmt nächstes Stück Arbeit von Queue Neues Stück Arbeit fällt an: Neue Arbeit auf Queue

101 Unregelmäßige Daten typedef struct aufgabe aufgabe_t; void berechne(aufgabe_t *a);

102 Unregelmäßige Daten typedef struct aufgabe aufgabe_t; void berechne(aufgabe_t *a); struct knoten { aufgabe_t *aufgabe; struct knoten *naechste; } *arbeitsqueue, **arbeitsqueue_ende;

103 Unregelmäßige Daten typedef struct aufgabe aufgabe_t; void berechne(aufgabe_t *a); struct knoten { aufgabe_t *aufgabe; struct knoten *naechste; } *arbeitsqueue, **arbeitsqueue_ende; aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

104 Wettlaufsituationen (1) NULL arbeitsqueue a0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

105 Wettlaufsituationen (1) NULL arbeitsqueue a0 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

106 Wettlaufsituationen (1) NULL arbeitsqueue a0 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

107 Wettlaufsituationen (1) NULL Kontextwechsel: T0 T1 arbeitsqueue a0 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

108 Wettlaufsituationen (1) NULL arbeitsqueue a0 T1 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

109 Wettlaufsituationen (1) NULL arbeitsqueue a0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; T1 T0 struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

110 Wettlaufsituationen (1) NULL arbeitsqueue a0 T1:a T1 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

111 Wettlaufsituationen (1) NULL arbeitsqueue a0 T1:a T1 T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

112 Wettlaufsituationen (1) NULL Kontextwechsel: T1 T0 arbeitsqueue a0 T1:a T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

113 Wettlaufsituationen (1) NULL arbeitsqueue T1:a a0 T0:a T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

114 Wettlaufsituationen (1) NULL Dereferenzierung eines NULL-Zeigers arbeitsqueue T1:a a0 T0:a T0 aufgabe_t *naechste_aufgabe() { if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; return a->aufgabe; }

115 Wettlaufsituationen (2) aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

116 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

117 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

118 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

119 Wettlaufsituationen (2) NULL Kontextwechsel: T0 T1 arbeitsqueue a0 a1 T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

120 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

121 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

122 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; T1 T0 arbeitsqueue = a->naechste; return a->aufgabe; }

123 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

124 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

125 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

126 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; T1 T0 arbeitsqueue = a->naechste; return a->aufgabe; }

127 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T1 T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

128 Wettlaufsituationen (2) NULL Kontextwechsel: T1 T0 arbeitsqueue a0 a1 T1:a T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

129 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 T1:a T0:a T0 aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

130 Wettlaufsituationen (2) NULL arbeitsqueue a0 a1 Gleiche Aufgabe mehrfach zurückgeliefert T1:a T0:a aufgabe_t *naechste_aufgabe() { struct knoten *a = arbeitsqueue; if (a == NULL) return NULL; arbeitsqueue = a->naechste; return a->aufgabe; }

131 Wettlaufsituationen (Bzw. kritischer Wettlauf, race condition) Ausführungsgeschwindigkeit/-Reihenfolge zweier Threads beeinflußt Programmergebnis

132 Wettlaufsituationen (Bzw. kritischer Wettlauf, race condition) Ausführungsgeschwindigkeit/-Reihenfolge zweier Threads beeinflußt Programmergebnis Möglich bei Threads (geteilter Adreßraum) Möglich bei externer Kommunikation (zwei Programme und eine Datei) Kann auch ohne parallele Ausführung auftreten, Nebenläufigkeit ist ausreichend Die bisherigen Probleme können alle schon auf single-core-prozessoren auftreten

133 Wettlaufsituationen (Bzw. kritischer Wettlauf, race condition) Ausführungsgeschwindigkeit/-Reihenfolge zweier Threads beeinflußt Programmergebnis Möglich bei Threads (geteilter Adreßraum) Möglich bei externer Kommunikation (zwei Programme und eine Datei) Kann auch ohne parallele Ausführung auftreten, Nebenläufigkeit ist ausreichend Die bisherigen Probleme können alle schon auf single-core-prozessoren auftreten Wettlaufsituation zwischen Threads T1, T2 gdw: T1 und T2 verwenden beide die Ressource v (lesend/schreibend/ausführend) T1 oder T2 modifiziert v

134 Kritische Sektionen Kritische Sektion: Code, der nur von einem Ausführungspfad gleichzeitig ausgeführt werden darf

135 Kritische Sektionen Kritische Sektion: Code, der nur von einem Ausführungspfad gleichzeitig ausgeführt werden darf Nicht-nebenläufige Ausführung muß erzwungen werden Typischerweise durch Lock-Mechanismus: lock: Wartet, bis Lock-Variable frei ist Belegt Lock-Variable unlock: Gibt Lock-Variable wieder frei... lock(); // kritische Sektion unlock();...

136 Arbeitsqueue mit Locks Locks verhindern die Probleme unserer Queue: aufgabe_t *naechste_aufgabe() { lock(); // Kritische Sektion beginnt if (arbeitsqueue == NULL) return NULL; struct knoten *a = arbeitsqueue; arbeitsqueue = a->naechste; unlock(); // Kritische Sektion endet return a->aufgabe; }

137 Zusammenfassung: Locks Zugriff auf Daten bei nebenläufiger Bearbeitung führt oft zu Wettlaufsituationen: Programmergebnis hängt von Ausführungsreihenfolge ab Subtile, schwer zu findende Bugs Vermeidung durch: Identifizierung der kritischen Sektionen Kritische Sektionen von Locks umgeben

138 POSIX-Spinlocks #include<pthread.h> Spinlock: Wartet in Schleife, bis Lock verfügbar int pthread_spin_init(pthread_spinlock_t *lock, int); Initialisiert Lock vor Verwendung (kann Speicher allozieren) int pthread_spin_destroy(pthread_spinlock_t *lock); Deinitialisiert Lock nach allen Verwendungen int pthread_spin_lock(pthread_spinlock_t *lock); Belegt Lock int pthread_spin_unlock(pthread_spinlock_t *lock); Gibt Lock frei int pthread_spin_trylock(pthread_spinlock_t *lock); Versucht, Lock zu nehmen, gibt durch Rückgabewert an ob erfolgreich

139 POSIX-Mutexes #include<pthread.h> Mutex: Wenn Lock nicht verfügbar, ruft Scheduler auf und blockiert Analoge Befehle zu spinlocks: int pthread_mutex_init(pthread_mutex_t *lock, NULL); int pthread_mutex_destroy(pthread_mutex_t *lock); int pthread_mutex_lock(pthread_mutex_t *lock); int pthread_mutex_unlock(pthread_mutex_t *lock); int pthread_mutex_trylock(pthread_mutex_t *lock);

140 Spinlock vs. Mutex Vergleich der beiden Lock-Mechanismen: Spinlock Mutex Verwendet syscall nein ja Lock schon belegt? Versuche erneut (Schleife) Scheduler: blockiert bis Mutex frei Zeit bis zum nächsten Versuch minimal beliebig lange Latenz minimal beliebig hoch Rechenzeit mit Warten verbraucht beliebig hoch minimal

141 Zusammenfassung Wettlaufsituationen: Zwei Threads verwenden gleiche Variable/Ressource v Mindestens ein Thread schreibt auf v Schutz: Kritische Sektionen von Locks umgeben(spinlocks, mutexes) spinlocks verbrauchen Rechenzeit; besser für parallele Threads mutexes rufen Betriebssystem auf; besser für große kritische Sektionen / single-core Locks nichttrivial zu implementieren: Benötigen Spezialbefehle

142 Die Speisenden Philosophen (1) Dining Philosophers Problem 5 Philosophen, 5 Reisschüsseln, 5 Eßstäbchen Philosophen wechseln ab zwischen Philosophieren und Essen

143 Die Speisenden Philosophen (1) Dining Philosophers Problem 5 Philosophen, 5 Reisschüsseln, 5 Eßstäbchen Philosophen wechseln ab zwischen Philosophieren und Essen Zum Essen braucht ein Philosoph beide Eßstäbchen

144 Die Speisenden Philosophen (1) Dining Philosophers Problem 5 Philosophen, 5 Reisschüsseln, 5 Eßstäbchen Philosophen wechseln ab zwischen Philosophieren und Essen Zum Essen braucht ein Philosoph beide Eßstäbchen Eßstäbchen verhalten sich wie Locks

145 Die Speisenden Philosophen (1) Dining Philosophers Problem 5 Philosophen, 5 Reisschüsseln, 5 Eßstäbchen Philosophen wechseln ab zwischen Philosophieren und Essen Zum Essen braucht ein Philosoph beide Eßstäbchen Eßstäbchen verhalten sich wie Locks

146 Die Speisenden Philosophen (2) Beispielalgorithmus: nimm links nimm rechts iss lege rechts ab lege links ab philosophiere

147 Die Speisenden Philosophen (2) Beispielalgorithmus: nimm links nimm rechts iss lege rechts ab lege links ab philosophiere

148 Die Speisenden Philosophen (2) Beispielalgorithmus: nimm links nimm rechts iss lege rechts ab lege links ab philosophiere

149 Die Speisenden Philosophen (2) Beispielalgorithmus: nimm links nimm rechts iss lege rechts ab lege links ab philosophiere nimm rechts blockiert: Kein Philosoph kann weitermachen Deadlock

150 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

151 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

152 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

153 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

154 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

155 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

156 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

157 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

158 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

159 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

160 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere

161 Die Speisenden Philosophen (3) Beispielalgorithmus 2: solange ich rechts nicht habe: nimm links ist rechts frei? nimm rechts sonst lege links ab iss lege rechts ab lege links ab philosophiere Muster wiederholt sich: Kein Philosoph kann weitermachen Livelock

162 Die Speisenden Philosophen (4) Oder zwei Philosophen setzen sich über die anderen hinweg: nimm links nimm rechts wiederhole: iss philosophiere

163 Die Speisenden Philosophen (4) Oder zwei Philosophen setzen sich über die anderen hinweg: nimm links nimm rechts wiederhole: iss philosophiere Unfaire Ressourcenverwendung: Verhungern (starvation)

164 Zusammenfassung Wettlaufsituationen Schutz: Kritische Sektionen von Locks umgeben(spinlocks, mutexes) Risiken bei mehreren Locks: Deadlock: Zwei (oder mehr) Threads warten auf Locks in zirkulärer Abhängigkeit Livelock: Zwei (oder mehr) Threads bewegen sich, um Deadlock zu vermeiden, machen aber keinen echten Fortschritt Starvation: Eine echte Teilmenge der Threads beansprucht alle Ressourcen, andere Threads verhungern

Einführung in die Systemprogrammierung

Einführung in die Systemprogrammierung Einführung in die Systemprogrammierung Repräsentierung Rationaler Zahlen Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 19. Juni 2015 Rationale Zahlen Wie können wir Rationale

Mehr

Einführung in die Systemprogrammierung 09

Einführung in die Systemprogrammierung 09 Einführung in die Systemprogrammierung 09 Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 17. Juni 2014 Rationale Zahlen Wie können wir Rationale Zahlen im Rechner repräsentieren?

Mehr

Einführung in die Systemprogrammierung 0A

Einführung in die Systemprogrammierung 0A Einführung in die Systemprogrammierung 0A Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 25. Juni 2013 Wiederholung: Prozesse Jedes laufende Programm besteht aus einem oder mehreren

Mehr

Einführung in die Systemprogrammierung 03

Einführung in die Systemprogrammierung 03 Einführung in die Systemprogrammierung 03 Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 24. Mai 2013 Übungen Übung 3 (Freitag, 12:00) findet nicht mehr statt WebSPIM wird nach

Mehr

Einführung in die Systemprogrammierung 03

Einführung in die Systemprogrammierung 03 Einführung in die Systemprogrammierung 03 Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 24. Mai 2013 Übungen Übung 3 (Freitag, 12:00) findet nicht mehr statt WebSPIM wird nach

Mehr

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung Grundlagen der Technischen Informatik 4. Übung Christian Knell Keine Garantie für Korrekt-/Vollständigkeit 4. Übungsblatt Themen Aufgabe 1: Aufgabe 2: Aufgabe 3: Aufgabe 4: IEEE Format Zahlenumwandlung

Mehr

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung Grundlagen der Technischen Informatik 4. Übung Christian Knell Keine Garantie für Korrekt-/Vollständigkeit 4. Übungsblatt Themen Aufgabe 1: Aufgabe 2: Aufgabe 3: Aufgabe 4: IEEE Format Zahlenumwandlung

Mehr

Der Zahlenformatstandard IEEE 754

Der Zahlenformatstandard IEEE 754 Der Zahlenformatstandard IEEE 754 Single Precision Double Precision Insgesamt 32 Bits s exponent fraction 1 Bit 8 Bits 23 Bits Insgesamt 64 Bits s exponent fraction 1 Bit 11 Bits 52 Bits Bit Aufteilungen

Mehr

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung Grundlagen der Technischen Informatik 4. Übung Christian Knell Keine Garantie für Korrekt-/Vollständigkeit 4. Übungsblatt Themen Aufgabe 1: Aufgabe 2: Aufgabe 3: Aufgabe 4: Aufgabe 5: Aufgabe 6: +/-/*

Mehr

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung Grundlagen der Technischen Informatik 4. Übung Christian Knell Keine Garantie für Korrekt-/Vollständigkeit 4. Übungsblatt Themen Aufgabe 1: Aufgabe 2: Aufgabe 3: Aufgabe 4: Aufgabe 5: Aufgabe 6: +/-/*

Mehr

N Bit Darstellung von Gleitkommazahlen

N Bit Darstellung von Gleitkommazahlen N Bit Darstellung von Gleitkommazahlen Normalisierte, wissenschaftliche Darstellung zur Basis 2. Beispiel: Allgemein: Sign and Magnitude Darstellung für beispielsweise 32 Bits: (s=0 für + und s=1 für )

Mehr

Grundlagen der Technischen Informatik. 4. Übung

Grundlagen der Technischen Informatik. 4. Übung Grundlagen der Technischen Informatik 4. Übung Christian Knell Keine Garantie für Korrekt-/Vollständigkeit 4. Übungsblatt Themen Aufgabe 1: Aufgabe 2: Aufgabe 3: Aufgabe 4: IEEE Format Zahlenumwandlung

Mehr

Wertebereiche, Overflow und Underflow

Wertebereiche, Overflow und Underflow Wertebereiche, Overflow und Underflow s exponent fraction 1 Bit 8 Bits 23 Bits Kleinste darstellbare nicht negative Zahl annähernd 2,0 * 10 38 Größte darstellbare Zahl annähernd 2,0 * 10 38 Was, wenn die

Mehr

bei Unterlauf wird stattdessen Hälfte des Divisors addiert Ersparnisse einer Addition bzw. Subtraktion

bei Unterlauf wird stattdessen Hälfte des Divisors addiert Ersparnisse einer Addition bzw. Subtraktion 6.2 Non-Restoring Division Restoring Division Divisor wird subtrahiert falls Unterlauf (Ergebnis negativ) Divisor wird wieder addiert im nächsten Durchlauf wird die Hälfte des Divisor subtrahiert (Linksshift

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung 5. Vorlesung 06.11.2018 1 Zahlendarstellungen 2 Speicherinhalte: Bits Hardware Spannung Ladung Magnetisierung Codierung 0V ungeladen unmagnetisiert 0 5V geladen magnetisiert

Mehr

Rechnernetze und Organisation

Rechnernetze und Organisation Arithmetic Logic Unit ALU Professor Dr. Johannes Horst Wolkerstorfer Cerjak, 9.2.25 RNO VO4_alu Übersicht Motivation ALU Addition Subtraktion De Morgan Shift Multiplikation Gleitkommazahlen Professor Dr.

Mehr

Binäre Division. Binäre Division (Forts.)

Binäre Division. Binäre Division (Forts.) Binäre Division Umkehrung der Multiplikation: Berechnung von q = a/b durch wiederholte bedingte Subtraktionen und Schiebeoperationen in jedem Schritt wird Divisor b testweise vom Dividenden a subtrahiert:

Mehr

5 Zahlenformate und deren Grenzen

5 Zahlenformate und deren Grenzen 1 5 Zahlenformate und deren Grenzen 5.1 Erinnerung B-adische Zahlendarstellung Stellenwertsystem: Jede Ziffer hat ihren Wert, und die Stelle der Ziffer in der Zahl modifiziert den Wert. 745 = 7 100 + 4

Mehr

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen

Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen Darstellung ganzer Zahlen 3 Zahlendarstellung - Zahlensysteme - b-adische Darstellung natürlicher Zahlen - Komplementbildung - Darstellung ganzer und reeller Zahlen Inhaltsangabe 3.1 Zahlensysteme und Darstellung natürlicher Zahlen......

Mehr

CS-Zusammenfassung für Prüfung 2 vom

CS-Zusammenfassung für Prüfung 2 vom CS-Zusammenfassung für Prüfung 2 vom 15. 4. 2002 Instruction Level Parallelism (ILP) Von intel und HP entwickelt. Bei einem out of order processor ist der Abschluss von Befehlen in einer Reihenfolge, die

Mehr

Das Verfahren in Hardware

Das Verfahren in Hardware Das Verfahren in Hardware Links Shift 8 Bit Multiplikand Demonstration mit 1001 * 0110 = 110110 2.Links Shift 8 Bit ALU Rechts Shift 4 Bit Multiplikator 3.Rechts Shift 8 Bit Produkt 1. Produkt = Produkt

Mehr

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen Inhalt Motivation 2 Integer- und Festkomma-Arithmetik Zahlendarstellungen Algorithmen für Integer-Operationen Integer-Rechenwerke Rechnen bei eingeschränkter Präzision 3 Gleitkomma-Arithmetik Zahlendarstellungen

Mehr

IEEE 754 Encoding. Wie stellt man im IEEE 754 Format eigentlich die 0 dar!? Double Precision (Bias=1023)

IEEE 754 Encoding. Wie stellt man im IEEE 754 Format eigentlich die 0 dar!? Double Precision (Bias=1023) IEEE 754 Encoding Wie stellt man im IEEE 754 Format eigentlich die 0 dar!? ( 1) S * (1 + Fraction) * 2 (Exponent Bias) Single Precision (Bias=127) Double Precision (Bias=1023) Dargestelltes Objekt Exponent

Mehr

4. Zahlendarstellungen

4. Zahlendarstellungen 121 4. Zahlendarstellungen Wertebereich der Typen int, float und double Gemischte Ausdrücke und Konversionen; Löcher im Wertebereich; Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik;

Mehr

Was machen wir heute? Betriebssysteme Tutorium 3. Organisatorisches. Prozesskontrollblock (PCB) Programmieraufgaben. Frage 3.1.a

Was machen wir heute? Betriebssysteme Tutorium 3. Organisatorisches. Prozesskontrollblock (PCB) Programmieraufgaben. Frage 3.1.a Was machen wir heute? Betriebssysteme Tutorium 3 Philipp Kirchhofer philipp.kirchhofer@student.kit.edu http://www.stud.uni-karlsruhe.de/~uxbtt/ Lehrstuhl Systemarchitektur Universität Karlsruhe (TH) 1

Mehr

4. Zahlendarstellungen

4. Zahlendarstellungen Bin are Zahlendarstellungen Binäre Darstellung ("Bits" aus {0, 1) 4. Zahlendarstellungen bn bn 1... b1 b0 entspricht der Zahl bn 2n + + b1 2 + b0 Wertebereich der Typen int, float und double Gemischte

Mehr

Multiplizierer. Beispiel komplexer arithmetischer Schaltung. Langsamer als Addition, braucht mehr Platz. Sequentielle Multiplikation

Multiplizierer. Beispiel komplexer arithmetischer Schaltung. Langsamer als Addition, braucht mehr Platz. Sequentielle Multiplikation Multiplizierer 1 Beispiel komplexer arithmetischer Schaltung Langsamer als Addition, braucht mehr Platz Sequentielle Multiplikation Kompakte kombinatorische Variante mit Carry-Save-Adders (CSA) Vorzeichenbehaftete

Mehr

HaDePrak WS 05/ Versuch

HaDePrak WS 05/ Versuch HaDePrak WS 05/06 10. Versuch 1 Das IEEE-Format Das Ziel dieser letzten Übung ist es, ein Fließkommapaket für die DLXzu implementieren. Der Einfachheit halber vernachlässigen wir hier im Praktikum jeglichen

Mehr

Algorithmen zur Division

Algorithmen zur Division Algorithmen zur Division Umkehrung der Multiplikation: Berechnung von q = a / b durch wiederholte bedingte Subtraktionen und Schiebeoperationen in jedem Schritt wird Divisor b testweise vom aktuellen Rest

Mehr

RO-Tutorien 3 / 6 / 12

RO-Tutorien 3 / 6 / 12 RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 3 AM 13./14.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

Mehr

2.1.2 Gleitkommazahlen

2.1.2 Gleitkommazahlen .1. Gleitkommazahlen Überblick: Gleitkommazahlen Gleitkommadarstellung Arithmetische Operationen auf Gleitkommazahlen mit fester Anzahl von Mantissen- und Exponentenbits Insbesondere Rundungsproblematik:

Mehr

Computerarithmetik (6a)

Computerarithmetik (6a) Computerarithmetik (6a) Weitere Nachteile: erfordert separates Subtrahierwerk erfordert zusätzliche Logik, um zu entscheiden, welches Vorzeichen das Ergebnis der Operation hat 2. Die Komplement - Darstellung

Mehr

Übung Praktische Informatik II

Übung Praktische Informatik II Übung Praktische Informatik II FSS 2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 06.03.09 2-1 Heutige große Übung Allgemeines

Mehr

Programmieren 1 C Überblick

Programmieren 1 C Überblick Programmieren C Überblick. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 U9-2 Motivation von Threads U9-2 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Darstellung von Zahlen Natürliche Zahlen: Darstellungsvarianten Darstellung als Text Üblich, wenn keine Berechnung stattfinden soll z.b. Die Regionalbahn 28023 fährt

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Das Rechnen in Zahlensystemen zur Basis b=2, 8, 10 und 16 Prof. Dr. Nikolaus Wulff Zahlensysteme Neben dem üblichen dezimalen Zahlensystem zur Basis 10 sind in der Informatik

Mehr

POSIX-Threads. Aufgabe 9 SP - Ü U10.1

POSIX-Threads. Aufgabe 9 SP - Ü U10.1 U10 10. Übung U10 10. Übung POSIX-Threads Aufgabe 9 U10.1 U10-1 Motivation von Threads U10-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)

Mehr

Multiplikation. Grundlagen der Rechnerarchitektur Logik und Arithmetik 79

Multiplikation. Grundlagen der Rechnerarchitektur Logik und Arithmetik 79 Multiplikation Grundlagen der Rechnerarchitektur Logik und Arithmetik 79 Multiplikation nach der Schulmethode Gegeben seien die Binärzahlen A und B. Was ist a * b? Beispiel: Multiplikand A: 1 1 0 1 0 Multiplikator

Mehr

Threads Einführung. Zustände von Threads

Threads Einführung. Zustände von Threads Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)

Mehr

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik

Mehr

Technische Informatik I - HS 18

Technische Informatik I - HS 18 Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik I - HS 18 Musterlösung zu Übung 3 Datum : 25.-26. Oktober 2018 Aufgabe 1: Wurzelverfahren nach Heron Das

Mehr

1.5 Einführung und Zahlensysteme/Darstellung gebrochener Zahlen

1.5 Einführung und Zahlensysteme/Darstellung gebrochener Zahlen 1.5 Einführung und Zahlensysteme/Darstellung gebrochener Zahlen 1.5.1 Situation Manchmal möchte man in Programmen mit Kommazahlen rechnen. In der Mathematik Im der Wirtschaft, im kaufmännischen Bereich

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Zahlendarstellung Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/pfisterer Agenda Zahlendarstellung Oder: wie rechnen

Mehr

B: Basis des Zahlensystems 0 a i < B a i є N 0 B є (N > 1) Z = a 0 B 0 + a 1 B 1 + a 2 B a n-1 B n-1

B: Basis des Zahlensystems 0 a i < B a i є N 0 B є (N > 1) Z = a 0 B 0 + a 1 B 1 + a 2 B a n-1 B n-1 Polyadisches Zahlensystem B: Basis des Zahlensystems 0 a i < B a i є N 0 B є (N > 1) Ganze Zahlen: n-1 Z= a i B i i=0 Z = a 0 B 0 + a 1 B 1 + a 2 B 2 +... + a n-1 B n-1 Rationale Zahlen: n-1 Z= a i B i

Mehr

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1

I 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1 I 7. Übung I 7. Übung I-1 Überblick Besprechung Aufgabe 5 (mysh) Online-Evaluation Posix Threads I.1 I-2 Evaluation I-2 Evaluation Online-Evaluation von Vorlesung und Übung SOS zwei TANs, zwei Fragebogen

Mehr

Darstellung von Instruktionen. Grundlagen der Rechnerarchitektur Assembler 21

Darstellung von Instruktionen. Grundlagen der Rechnerarchitektur Assembler 21 Darstellung von Instruktionen Grundlagen der Rechnerarchitektur Assembler 21 Übersetzung aus Assembler in Maschinensprache Assembler Instruktion add $t0, $s1, $s2 0 17 18 8 0 32 6 Bit Opcode Maschinen

Mehr

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit Primitive Datentypen Fließkommazahlen float: Fließkommazahl nach IEEE 754 Standard mit 32 bit Vorzeichen Exponent 8 bit Mantisse 23 bit double: Fließkommazahl nach IEEE 754 Standard mit 64 bit Vorzeichen

Mehr

Gleitkommazahlen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 74

Gleitkommazahlen. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 74 Gleitkommazahlen Research and teaching network Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 74 Die Typen float und double Variablen float x, y; double z; // 32 Bit groß // 64 Bit

Mehr

1. Grundlegende Konzepte der Informatik

1. Grundlegende Konzepte der Informatik 1. Grundlegende Konzepte der Informatik Inhalt Algorithmen Darstellung von Algorithmen mit Programmablaufplänen Beispiele für Algorithmen Aussagenlogik Zahlensysteme Kodierung Peter Sobe 1 Zahlensysteme

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard Systeme I: Betriebssysteme Kapitel 4 Prozesse Wolfram Burgard Version 18.11.2015 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen

Mehr

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts Kapitel 6: Arithmetik in JavaCard Problem: Keine Integers in JavaCard ToDo: Rechnen mit Bytes und Shorts Java SmartCards, Kap. 6 (1/20) Hex-Notation 1 Byte = 8 Bit, b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 0101

Mehr

Informationsmenge. Maßeinheit: 1 Bit. 1 Byte. Umrechnungen: Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit

Informationsmenge. Maßeinheit: 1 Bit. 1 Byte. Umrechnungen: Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit Informationsmenge Maßeinheit: 1 Bit Informationsmenge zur Beantwortung einer Binärfrage kleinstmögliche Informationseinheit 1 Byte Zusammenfassung von 8 Bit, kleinste Speichereinheit im Computer, liefert

Mehr

Die Sandy-Bridge Architektur

Die Sandy-Bridge Architektur Fakultät Informatik - Institut für Technische Informatik - Professur für VLSI-Entwurfssysteme, Diagnostik und Architektur Die Sandy-Bridge Architektur René Arnold Dresden, 12. Juli 2011 0. Gliederung 1.

Mehr

Aufruf des Compilers in der Kommandozeile und Ausführung des Programms:

Aufruf des Compilers in der Kommandozeile und Ausführung des Programms: PGdP Zusammenfassung Ludwig Stecher Blatt 1 Aufruf des Compilers in der Kommandozeile und Ausführung des Programms: javac Program.java java Program Der erste Schritt (das Kompilieren) wandelt den Java-Code

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

Kapitel 1 Parallele Modelle Wie rechnet man parallel?

Kapitel 1 Parallele Modelle Wie rechnet man parallel? PRAM- PRAM- DAG- R UND R Coles und Kapitel 1 Wie rechnet man parallel? Vorlesung Theorie Paralleler und Verteilter Systeme vom 11. April 2008 der Das DAG- Das PRAM- Das werkmodell Institut für Theoretische

Mehr

Rechnerstrukturen, Teil 1. Vorlesung 4 SWS WS 15/16

Rechnerstrukturen, Teil 1. Vorlesung 4 SWS WS 15/16 Rechnerstrukturen, Teil 1 Vorlesung 4 SWS WS 15/16 Prof. Dr Jian-Jia Chen Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-.de http://ls1-www.cs.tu-.de Übersicht

Mehr

Binäre Gleitkommazahlen

Binäre Gleitkommazahlen Binäre Gleitkommazahlen Was ist die wissenschaftliche, normalisierte Darstellung der binären Gleitkommazahl zur dezimalen Gleitkommazahl 0,625? Grundlagen der Rechnerarchitektur Logik und Arithmetik 72

Mehr

6.2 Kodierung von Zahlen

6.2 Kodierung von Zahlen 6.2 Kodierung von Zahlen Neue Begriffe é Festkommadarstellungen é Zahlendarstellung durch Betrag und Vorzeichen é Einer-/Zweierkomplement-Darstellung é Gleitkommadarstellung é IEEE-754 Format BB TI I 6.2/1

Mehr

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben Zwischenklausur Informatik, WS 206/7 4.2.206 Lösungen zu den Aufgaben. Gegeben sind folgende Dualzahlen in Zweierkomplementdarstellung. Geben Sie den jeweils zugehörigen Dezimalwert an! a) entspricht der

Mehr

Rechnerarchitektur SS TU Dortmund

Rechnerarchitektur SS TU Dortmund Rechnerarchitektur SS 2016 Exercises: Scoreboarding and Tomasulo s Algorithm Jian-Jia Chen TU Dortmund to be discussed on June, 14, 2016 Jian-Jia Chen (TU Dortmund) 1 / 8 Scoreboardings Im nächste Folien

Mehr

3/4/2009. Schalter: Ein vs. Aus Lochkarten: Loch vs. Kein Loch Boolean/Wahrheitswerte: true vs. false

3/4/2009. Schalter: Ein vs. Aus Lochkarten: Loch vs. Kein Loch Boolean/Wahrheitswerte: true vs. false Ablauf Informatik I (D-MAVT) Übungsstunde 2, 4.3.2009 simonmayer@student.ethz.ch ETH Zürich Besprechung/Vertiefung der Vorlesung [26.2.2009] Vorbesprechung Übung 2 Variablen + Scopes Zahlensysteme Bits&Bytes

Mehr

U8 POSIX-Threads U8 POSIX-Threads

U8 POSIX-Threads U8 POSIX-Threads U8 POSIX-Threads U8 POSIX-Threads Motivation Thread-Konzepte pthread-api pthread-koordinierung U8.1 U8-1 Motivation von Threads U8-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung

Mehr

Informatik I Übung, Woche 41

Informatik I Übung, Woche 41 Giuseppe Accaputo 8. Oktober, 2015 Plan für heute 1. Fragen & Nachbesprechung Übung 3 2. Zusammenfassung der bisherigen Vorlesungsslides 3. Tipps zur Übung 4 Informatik 1 (D-BAUG) Giuseppe Accaputo 2 Nachbesprechung

Mehr

3. Operatoren und Ausdrücke

3. Operatoren und Ausdrücke 3. Operatoren und Ausdrücke Ausdruck (expression) Verarbeitungsvorschrift zur Ermittlung eines Wertes besteht aus Operanden und Operatoren wichtigste Ausdrücke: arithmetische und logische (boole'sche)

Mehr

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 User-Level Threads: Federgewichtige Prozesse Realisierung von Threads auf Anwendungsebene innerhalb eines Prozesses

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Computerarithmetik (15b)

Computerarithmetik (15b) Computerarithmetik (15b) Dazugehöriges Beispiel: Schleife Schritt Multiplikator Multiplikand Produkt 0 Anfangswerte 0011 0000 0010 0000 0000 1 1a: 1 -> Prod. = Prod. + Mcand 0011 0000 0010 0000 0010 2:

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

C-Programmierung: Ausdrücke und Operatoren#Division.2F

C-Programmierung: Ausdrücke und Operatoren#Division.2F C-Programmierung: Ausdrücke und Operatoren#Division.2F http://de.wikibooks.org/wiki/c-programmierung:_ausdrücke_und_operatoren#division_.2f This Book Is Generated By Wb2PDF using RenderX XEP, XML to PDF

Mehr

Rechnerstrukturen WS 2012/13

Rechnerstrukturen WS 2012/13 Rechnerstrukturen WS 2012/13 Boolesche Funktionen und Schaltnetze Rechner-Arithmetik Addition (Wiederholung) Multiplikation Wallace-Tree Subtraktion Addition negativer Zahlen Gleitkommazahlen-Arithmetik

Mehr

3. Operatoren und Ausdrücke

3. Operatoren und Ausdrücke 3. Operatoren und Ausdrücke Ausdruck (expression) Verarbeitungsvorschrift zur Ermittlung eines Wertes besteht aus Operanden und Operatoren wichtigste Ausdrücke: arithmetische und logische (boole'sche)

Mehr

Rechnerarithmetik. Vorlesung im Sommersemester Eberhard Zehendner. FSU Jena. Thema: Implementierung von Gleitkomma-Operationen

Rechnerarithmetik. Vorlesung im Sommersemester Eberhard Zehendner. FSU Jena. Thema: Implementierung von Gleitkomma-Operationen Rechnerarithmetik Vorlesung im Sommersemester 2008 Eberhard Zehendner FSU Jena Thema: Implementierung von Gleitkomma-Operationen Eberhard Zehendner (FSU Jena) Rechnerarithmetik Gleitkomma-Operationen 1

Mehr

3 Rechnen und Schaltnetze

3 Rechnen und Schaltnetze 3 Rechnen und Schaltnetze Arithmetik, Logik, Register Taschenrechner rste Prozessoren (z.b. Intel 4004) waren für reine Rechenaufgaben ausgelegt 4 4-Bit Register 4-Bit Datenbus 4 Kbyte Speicher 60000 Befehle/s

Mehr

1. TÜ-Zusammenfassung zum Modul Computersysteme

1. TÜ-Zusammenfassung zum Modul Computersysteme 1. TÜ-Zusammenfassung zum Modul Computersysteme Kurzzusammenfassung 1. Kapitel Netzteil: Aufbau: Bereitgestellte Spannungen: 12V, -12V, 5V, -5V und 3.3V Leistung: Da bei Transformatoren die übertragbare

Mehr

Zum Nachdenken. Wenn die Zahl (123) hat, was könnte dann (123,45) 10

Zum Nachdenken. Wenn die Zahl (123) hat, was könnte dann (123,45) 10 TECHNISCHE HOCHSCHULE NÜRNBERG GEORG SIMON OHM Zum Nachdenken Wenn die Zahl (123) 10 den Wert 1. 10 2 +2. 10 1 +3. 10 0 hat, was könnte dann (123,45) 10 bedeuten? Wenn Sie beliebige reelle Zahlenwerte

Mehr

Control Beispiel. Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Control

Control Beispiel. Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Control Control Beispiel Store R1 4 Bit Register R1 SUB 4 Bit Register R2 Store R2 R2 Bit 0 Control wird als kombinatorische Schaltung realisiert. Hierzu die Wahrheitstabelle: Eingabe R2 Bit 0 Zero 0 0 Ausgabe

Mehr

Rechnerstrukturen. Michael Engel und Peter Marwedel. Sommer TU Dortmund, Fakultät für Informatik

Rechnerstrukturen. Michael Engel und Peter Marwedel. Sommer TU Dortmund, Fakultät für Informatik Rechnerstrukturen Michael Engel und Peter Marwedel TU Dortmund, Fakultät für Informatik Sommer 2014 Folien a. d. Basis von Materialien von Gernot Fink und Thomas Jansen 10. April 2014 1/37 1 Repräsentation

Mehr

Technische Informatik 1 - HS 2017

Technische Informatik 1 - HS 2017 Institut für Technische Informatik und Kommunikationsnetze Prof. L. Thiele Technische Informatik 1 - HS 2017 Übung 8 Datum: 30. 11. 1. 12. 2017 In dieser Übung soll mit Hilfe des Simulators WinMIPS64 die

Mehr

Computergrundlagen Zahlensysteme

Computergrundlagen Zahlensysteme Computergrundlagen Zahlensysteme Institut für Computerphysik Universität Stuttgart Wintersemester 2012/13 Wie rechnet ein Computer? Ein Mikroprozessor ist ein Netz von Transistoren, Widerständen und Kondensatoren

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) Informatik I (D-MAVT) Übungsstunde 2 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Besprechung der Vorlesung Vorbesprechung Übung 2 Variablen + Scopes Zahlensysteme Bits&Bytes Datentypen

Mehr

CPU, GPU und FPGA. CPU, GPU und FPGA Maximilian Bandle, Bianca Forkel 21. November 2017

CPU, GPU und FPGA. CPU, GPU und FPGA Maximilian Bandle, Bianca Forkel 21. November 2017 CPU, GPU und FPGA, Bianca Forkel 21. November 2017 CPU, GPU und FPGA Inhalt CPU: Central Processing Unit GPU: Graphical Processing Unit FPGA: Field Programmable Gate Array 2 CPU Central Processing Unit

Mehr

2.1 Fundamentale Typen

2.1 Fundamentale Typen 2. Elementare Typen 2.1 Fundamentale Typen C++ stellt die wichtigsten Datentypen mit passender Form der Abspeicherung und zugehörigen Rechenoperationen zur Verfügung : Boolscher Datentyp (bool) für logische

Mehr

Rechnerstrukturen. Michael Engel und Peter Marwedel SS TU Dortmund, Fakultät für Informatik

Rechnerstrukturen. Michael Engel und Peter Marwedel SS TU Dortmund, Fakultät für Informatik Rechnerstrukturen Michael Engel und Peter Marwedel TU Dortmund, Fakultät für Informatik SS 2013 Hinweis: Folien a. d. Basis von Materialien von Gernot Fink und Thomas Jansen 25. April 2013 1 Boolesche

Mehr

Rechnerstrukturen. Michael Engel und Peter Marwedel WS 2013/14. TU Dortmund, Fakultät für Informatik

Rechnerstrukturen. Michael Engel und Peter Marwedel WS 2013/14. TU Dortmund, Fakultät für Informatik Rechnerstrukturen Michael Engel und Peter Marwedel TU Dortmund, Fakultät für Informatik WS 2013/14 Folien a. d. Basis von Materialien von Gernot Fink und Thomas Jansen 30. Oktober 2013 1/35 1 Boolesche

Mehr

Rechnergrundlagen SS Vorlesung

Rechnergrundlagen SS Vorlesung Rechnergrundlagen SS 2007 8. Vorlesung Inhalt Gleitkomma-Darstellung Normalisierte Darstellung Denormalisierte Darstellung Rechnerarchitekturen Von Neumann-Architektur Harvard-Architektur Rechenwerk (ALU)

Mehr

Rückblick. Addition in der b-adischen Darstellung wie gewohnt. Informatik 1 / Kapitel 2: Grundlagen

Rückblick. Addition in der b-adischen Darstellung wie gewohnt. Informatik 1 / Kapitel 2: Grundlagen Rückblick Addition in der b-adischen Darstellung wie gewohnt 5 0 C E + D 4 2 D = 44 Rückblick Multiplikation in der b-adischen Darstellung wie gewohnt 1 0 1 0 1 0 1 = 45 Rückblick Darstellung negativer

Mehr

Teil 2: Rechnerorganisation

Teil 2: Rechnerorganisation Teil 2: Rechnerorganisation Inhalt: Zahlendarstellungen Rechnerarithmetik Mikroprogrammierung schrittweiser Entwurf eines hypothetischen Prozessors mit Daten-, Adreß- und Kontrollpfad Speicherorganisation

Mehr

Teil 2: Rechnerorganisation

Teil 2: Rechnerorganisation Teil 2: Rechnerorganisation Inhalt: Zahlendarstellungen Rechnerarithmetik Mikroprogrammierung schrittweiser Entwurf eines hypothetischen Prozessors mit Daten-, Adreß- und Kontrollpfad Speicherorganisation

Mehr

WH: Arithmetik: Floating Point

WH: Arithmetik: Floating Point WH: Arithmetik: Floating Point Elmar Langetepe University of Bonn Robuste Implementierungen Floating Point Arithmetik Bonn 06 1 Real RAM Robuste Implementierungen Floating Point Arithmetik Bonn 06 2 Real

Mehr

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr