|
|
@@ -10,8 +10,8 @@
|
|
10
|
10
|
- [-s Flag](#s-flag)
|
|
11
|
11
|
- [-w Flag](#w-flag)
|
|
12
|
12
|
- [Weitere Options](#weitere-options)
|
|
13
|
|
- - [-help Ausgabe](#help-ausgabe)
|
|
14
|
|
- - [Command timings](#command-timings)
|
|
|
13
|
+ - [`-help` Ausgabe](#help-ausgabe)
|
|
|
14
|
+ - [Command `timings`](#command-timings)
|
|
15
|
15
|
- [Tests](#tests)
|
|
16
|
16
|
- [Laufzeit Messungen (im --release Mode)](#laufzeit-messungen-im---release-mode)
|
|
17
|
17
|
|
|
|
@@ -19,38 +19,38 @@
|
|
19
|
19
|
|
|
20
|
20
|
Transformieren Sie Ihr Binary Projekt in ein Library Projekt, wobei zusätzlich
|
|
21
|
21
|
ein CLI Programm bereit gestellt wird. Dieses hat seinen Ursprung in `main.rs`.
|
|
22
|
|
-Nach der Transformation soll **cargo run** die Funktionalität Ihres hw7/task1
|
|
|
22
|
+Nach der Transformation soll **cargo run** die Funktionalität Ihres `hw7/task1`
|
|
23
|
23
|
Programms aufzeigen, und **cargo test** durchläuft die Unit Tests der Library.
|
|
24
|
24
|
Erstellen Sie auf Basis der bisherigen "unit_test" Datei eine `tests/task1.rs`
|
|
25
|
|
-Datei, die die pub Funktionen der Library testet.
|
|
|
25
|
+Datei, die die `pub` Funktionen der Library testet.
|
|
26
|
26
|
|
|
27
|
27
|
### Idiomatischer Code
|
|
28
|
28
|
|
|
29
|
|
-In dieser Aufgabe sollte Sie besonderen Wert auf Idiomatischen Rust Code legen.
|
|
|
29
|
+In dieser Aufgabe sollten Sie besonderen Wert auf Idiomatischen Rust Code legen.
|
|
30
|
30
|
Auch sollte Ihre `main.rs` Funktion möglichst übersichtlich bleiben. Lagern Sie
|
|
31
|
31
|
somit Funktionen in Module Ihrer Library oder für Ihr Binary aus. In den
|
|
32
|
|
-vorherigen Homeworks haben Sie dazu alle nötigen Kniffe kennen gelernt, die Sie
|
|
|
32
|
+vorherigen Homeworks haben Sie dazu alle nötigen Kniffe kennengelernt, die Sie
|
|
33
|
33
|
nun in Ihrer Lösung verwenden.
|
|
34
|
34
|
|
|
35
|
35
|
### `ANSWERS.md`
|
|
36
|
36
|
|
|
37
|
37
|
In den Aufgaben werden immer wieder Fragen gestellt. Geben Sie die Antworten
|
|
38
|
|
-dazu in der Datei `ANSWERS.md`. Eine kurze aber nachvollziehbare Erklärung (eigene
|
|
39
|
|
-Worte, kein Code) ist ausreichend. Aufbau und Struktur Ihrer `ANSWERS.md` ist
|
|
40
|
|
-Ihnen überlassen. Überzeugen Sie uns Tutoren mit einer klaren und verständlichen
|
|
41
|
|
-Struktur (und korrekter Formatierung).
|
|
|
38
|
+dazu in der Datei `ANSWERS.md`. Eine kurze aber nachvollziehbare Erklärung
|
|
|
39
|
+(eigene Worte, kein Code) ist ausreichend. Aufbau und Struktur Ihrer
|
|
|
40
|
+`ANSWERS.md` ist Ihnen überlassen. Überzeugen Sie uns Tutoren mit einer klaren
|
|
|
41
|
+und verständlichen Struktur (und korrekter Formatierung).
|
|
42
|
42
|
|
|
43
|
43
|
Kommentieren Sie Ihren Code. Beschreiben Sie in eigenen Worten (kein Copy/Paste
|
|
44
|
44
|
von Code oder Code Kommentaren) in `ANSWERS.md`, welche Arten der
|
|
45
|
|
-Synchronisation und Kommunikation (ausser MPSC) Sie einsetzen und wie Sie die
|
|
|
45
|
+Synchronisation und Kommunikation (außer MPSC) Sie einsetzen und wie Sie die
|
|
46
|
46
|
maximale Performance erreichen. Wichtig: Kommentare gehören in den Code,
|
|
47
|
47
|
Erklärungen in die `ANSWERS.md`.
|
|
48
|
48
|
|
|
49
|
|
-Ihre Erklärung muss nachvollziehbar sein, ohne weitere eigenen Recherchen. Zum
|
|
50
|
|
-Beispiel die Antwort: "In der Implementierung wird die Systemfunktion
|
|
51
|
|
-_dummy_bla_blub()_ benutzt" ist NICHT ausreichend. Ausreichend wäre: "In der
|
|
52
|
|
-Implementierung wird die Systemfunktion _dummy_bla_blub()_ benutzt, die die
|
|
53
|
|
-Uhrzeit seit Einschalten des Rechners als UTF String liefert."
|
|
|
49
|
+Ihre Erklärung muss nachvollziehbar sein, ohne dass wir Tutoren Recherchen
|
|
|
50
|
+starten müssen. Zum Beispiel die Antwort: "In der Implementierung wird die
|
|
|
51
|
+Systemfunktion _dummy_bla_blub()_ benutzt" ist NICHT ausreichend. Ausreichend
|
|
|
52
|
+wäre: "In der Implementierung wird die Systemfunktion _dummy_bla_blub()_
|
|
|
53
|
+benutzt, die die Uhrzeit seit Einschalten des Rechners als UTF String liefert."
|
|
54
|
54
|
|
|
55
|
55
|
Messungen müssen auf Ihrem Container durchgeführt werden.
|
|
56
|
56
|
|
|
|
@@ -65,7 +65,7 @@ Erweitern Sie das CLI Programm mit einem weiteren **OPTIONALEN** Parameter:
|
|
65
|
65
|
System und ermittelt die Anzahl der vorhandenen CPUs für 'threads'. Geben Sie
|
|
66
|
66
|
den Parameter an, können Sie diesen Wert somit 'überschreiben'.
|
|
67
|
67
|
|
|
68
|
|
-Benutzen Sie dafür die externe [Crate sys-info](<>). Was ist der Unterschied
|
|
|
68
|
+Benutzen Sie dafür die externe [Crate sys-info](). Was ist der Unterschied
|
|
69
|
69
|
zwischen einer logischen und einer physikalischen CPU?
|
|
70
|
70
|
|
|
71
|
71
|
```text
|
|
|
@@ -92,8 +92,8 @@ SUBCOMMANDS:
|
|
92
|
92
|
|
|
93
|
93
|
### Flag _verbose_
|
|
94
|
94
|
|
|
95
|
|
-Mit dem Parameter _-v_, _-vv_ oder _-vvv_ usw. lassen sich unterschiedliche
|
|
96
|
|
-viele Zusatzinformationen ausgeben.
|
|
|
95
|
+Mit dem Parameter _-v_, _-vv_ oder _-vvv_ usw. lassen sich unterschiedlich viele
|
|
|
96
|
+Zusatzinformationen ausgeben.
|
|
97
|
97
|
|
|
98
|
98
|
Ohne die Angabe von verbose reduzieren Sie bitte die Ausgaben auf:
|
|
99
|
99
|
|
|
|
@@ -130,12 +130,12 @@ Consumer" Lösung an. Viele Producer suchen nach dem Hash. Die zu untersuchende
|
|
130
|
130
|
'Menge' an Zahlen muss dazu geeignet auf alle Threads verteilt werden. Der
|
|
131
|
131
|
Producer, der ihn findet, sendet den Hash an den Consumer.
|
|
132
|
132
|
|
|
133
|
|
-Die Rust Standardbibliothek bietet dafür die [MPSC](<>) Synchronisationsprimitive
|
|
134
|
|
-an. Einen ähnlichen Mechanismus haben Sie bereits mit der Pipe kennen gelernt.
|
|
|
133
|
+Die Rust Standardbibliothek bietet dafür die [MPSC]() Synchronisationsprimitive
|
|
|
134
|
+an. Einen ähnlichen Mechanismus haben Sie bereits mit der Pipe kennengelernt.
|
|
135
|
135
|
|
|
136
|
|
-Findet einer der Producer das Ergebnis, so sender er dies dan den Consumer. Der
|
|
|
136
|
+Findet einer der Producer das Ergebnis, so sendet er dies an den Consumer. Der
|
|
137
|
137
|
Consumer hat dann die ruhmreiche Aufgabe, den Hash ausgeben zu dürfen und
|
|
138
|
|
-beendet dann das Programm.
|
|
|
138
|
+beendet das Programm.
|
|
139
|
139
|
|
|
140
|
140
|
#### -s Flag
|
|
141
|
141
|
|
|
|
@@ -212,7 +212,7 @@ Number: 567621 --> hash: b6bea2a40ed1bd6d9999b2232072092f3df0e02c4b507aa3ad94736
|
|
212
|
212
|
Wird das Flag '-v' mit angegeben, so summiert der Consumer Thread die einzelnen
|
|
213
|
213
|
Suchzeiten der Producer Threads, sowie die insgesamt durchgeführten Loops zur
|
|
214
|
214
|
Suche. Überlegen Sie sich dazu, wie Sie die nötigen Informationen im Consumer
|
|
215
|
|
-von den Producern erfahren. Eine Ausgabe der Ergebnis könnte folgendermassen
|
|
|
215
|
+von den Producern erfahren. Eine Ausgabe der Ergebnis könnte folgendermaßen
|
|
216
|
216
|
aussehen:
|
|
217
|
217
|
|
|
218
|
218
|
```text
|
|
|
@@ -240,19 +240,20 @@ Suche anhand einzelner Ergebnisse. Welche (ungefähre) Abhängigkeit der Laufzei
|
|
240
|
240
|
von der Anzahl der Threads können Sie im --release Mode bestimmen?
|
|
241
|
241
|
|
|
242
|
242
|
Nutzen Sie das Unix Tool **time**, um zusätzliche Ausgaben über die Laufzeit
|
|
243
|
|
-Ihres Programms zu erhalten (Antworten in die Datei `ANSWERS.md`). Von Interesse
|
|
244
|
|
-sind nur Ihre --release Zeiten:
|
|
|
243
|
+Ihres Programms zu erhalten. Von Interesse sind nur Ihre `--release` Zeiten:
|
|
245
|
244
|
|
|
|
245
|
+Die folgenden Fragen sollen Ihnen als Beispiel Ihrer Diskussion dienen, erheben
|
|
|
246
|
+aber keinen Anspruch auf Vollständigkeit:
|
|
246
|
247
|
- Wie ist die Ausgabe von **time** zu interpretieren, wenn mehrere Threads
|
|
247
|
248
|
laufen?
|
|
248
|
|
-- Welche unterschiedlichen Ergebnisse erhalten Sie bei der Option timings? Wie
|
|
249
|
|
- stehen diese im Zusammenhang mit den Ergebnissen von **time**.
|
|
250
|
|
-- Welche Quantitative Auswirkungen hat die Synchronisierung (Warum)?
|
|
251
|
|
-- Wie verhält sich die Performance, wenn die von Ihnen zusätzlichen Parameter
|
|
252
|
|
- (falls vorhanden) zur Optimierung der Performance variiert werden?
|
|
253
|
|
-
|
|
254
|
|
-[Crate clap]: https://docs.rs/clap/
|
|
255
|
|
-[Crate sha2]: https://docs.rs/sha2/
|
|
256
|
|
-[Crate time]: https://docs.rs/time/
|
|
257
|
|
-[Crate sys-info]: https://docs.rs/sys-info/
|
|
|
249
|
+- Welche unterschiedlichen Ergebnisse erhalten Sie bei der Option `timings`?
|
|
|
250
|
+ Wie stehen diese im Zusammenhang mit den Ergebnissen von **time**?
|
|
|
251
|
+- Welche quantitativen Auswirkungen hat die Synchronisierung (Warum)? Welche
|
|
|
252
|
+ Auswirkungen haben Ihre zusätzlichen Parameter?
|
|
|
253
|
+- Wie variieren `-s` und `-w` die Messungen?
|
|
|
254
|
+
|
|
|
255
|
+[Crate clap]: https://docs.rs/clap/
|
|
|
256
|
+[Crate sha2]: https://docs.rs/sha2/
|
|
|
257
|
+[Crate time]: https://docs.rs/time/
|
|
|
258
|
+[Crate sys-info]: https://docs.rs/sys-info/
|
|
258
|
259
|
[MPSC]: https://doc.rust-lang.org/std/sync/mpsc/
|