Commit c4fac584 authored by Steffen Vogel's avatar Steffen Vogel 🎅🏼

fix reference to L2P

parent 5294c591
......@@ -6,7 +6,7 @@ CXX = g++
# flags for debugging
CFLAGS = -Wall -O0 -g -pthread
CXXFLAGS = $(CFLAGS)
LDFLAGS = -no-pie
LDFLAGS = -static
RM = rm -rf
ASM = nasm
ASMFLAGS = -f elf64 -O0 -g -F dwarf
......@@ -46,7 +46,4 @@ clean:
depend:
$(CC) -MM $(CFLAGS) $(C_source) $(CPP_source) > Makefile.dep
-include Makefile.dep
# DO NOT DELETE
-include Makefile.dep
\ No newline at end of file
# Übung 6: Funktionen und parallele Programmierung I
## Funktionen mit Assembler
Schreiben Sie eine 64Bit Assemblerfunktion, welche eine 64 Bit breite nichtnegative Ganzzahl als Parameter übergeben bekommt und einen Zeiger auf die nachfolgend dargestellte C-Datenstruktur zurückgibt. Die Datenstruktur enthält die jeweilige Darstellung der Ganzzahl als C-Zeichenkette in hexadezimaler und in dezimaler Schreibweise.
Schreiben Sie eine 64Bit Assemblerfunktion, welche eine 64 Bit breite nichtnegative Ganzzahl als Parameter übergeben bekommt und einen Zeiger auf die nachfolgend dargestellte C-Datenstruktur zurückgibt. Die Datenstruktur enthält die jeweilige Darstellung der Ganzzahl als C-Zeichenkette in hexadezimaler und in dezimaler Schreibweise.
```c
struct Darstellung {
......@@ -10,10 +10,10 @@ struct Darstellung {
};
```
**Hinweise:** Die Instruktion `div` teilt den Wert aus `rdx:rax durch` das Argument und speichert das Ergebnis in `rax`. Der Rest der Division wird in `rdx` gespeichert. Laut der ASCII- Tabelle entspricht das Zeichen `0` dem Wert `0x30`, während der Buchstabe `A` dem Wert `0x41` entspricht. Sie können Speicher mit der C-Funktion `void* malloc( size_t size );` anfordern.
**Hinweise:** Die Instruktion `div` teilt den Wert aus `rdx:rax durch` das Argument und speichert das Ergebnis in `rax`. Der Rest der Division wird in `rdx` gespeichert. Laut der ASCII- Tabelle entspricht das Zeichen `0` dem Wert `0x30`, während der Buchstabe `A` dem Wert `0x41` entspricht. Sie können Speicher mit der C-Funktion `void* malloc( size_t size );` anfordern.
## Parallele Programmierung I
In dieser und in der nächsten Übung wird die näherungsweise Lösung des linearen Gleichungssystems
In dieser und in der nächsten Übung wird die näherungsweise Lösung des linearen Gleichungssystems
Ax=b, A=a<sub>i,j</sub> &isin; &real;<sup>n x n</sup> und b,x &isin; &real;
......@@ -21,14 +21,14 @@ also
&sum; a<sub>i,j</sub> x<sub>j</sub> = b<sub>i</sub>, i &isin; {1,...,n}
ermittelt. Dabei soll das Jacobi-Verfahren verwendet werden, welches die *i*-te Gleichung nach x<sub>i</sub> auflöst. Hieraus ergibt sich folgende Iterationsvorschrift für den *m+1*-ten Iterationsschritt:
ermittelt. Dabei soll das Jacobi-Verfahren verwendet werden, welches die *i*-te Gleichung nach x<sub>i</sub> auflöst. Hieraus ergibt sich folgende Iterationsvorschrift für den *m+1*-ten Iterationsschritt:
x<sub>i</sub><sup>m+1</sup> = 1 / a<sub>i,i</sub> (b<sub>i</sub> - &sum; a<sub>i,j</sub><sup>m</sup>)
Um zu erkennen, ob das Iterationsverfahren die Lösung gefunden hat, soll der Euklidische Abstand zwischen x<sup>m</sup> und x<sup>m+1</sup> verwendet werden. Ist dieser sehr klein (bei uns kleiner als &radic; (n 􏰄􏰂0.0000001 · n)), wurde der Lösungsvektor gefunden und das Iterationsverfahren kann abgebrochen werden. Der Abstand wird wie folgt bestimmt: &radic; (&sum; (x<sub>i</sub><sup>m</sup> - x<sub>i</sub><sup>m+1</sup>)<sup>2</sup>)
Um zu erkennen, ob das Iterationsverfahren die Lösung gefunden hat, soll der Euklidische Abstand zwischen x<sup>m</sup> und x<sup>m+1</sup> verwendet werden. Ist dieser sehr klein (bei uns kleiner als &radic; (n 􏰄􏰂0.0000001 · n)), wurde der Lösungsvektor gefunden und das Iterationsverfahren kann abgebrochen werden. Der Abstand wird wie folgt bestimmt: &radic; (&sum; (x<sub>i</sub><sup>m</sup> - x<sub>i</sub><sup>m+1</sup>)<sup>2</sup>)
**Hinweis:** Im L2P finden Sie eine äquivalentes PDF-Dokument, welches die Formeln *schöner* und eventuell *lesbarer* darstellt.
**Hinweis:** In Moodle finden Sie eine äquivalentes PDF-Dokument, welches die Formeln *schöner* und eventuell *lesbarer* darstellt.
1. Dieses git-Repository enthält ein C-Programm, das die Matrizen für diese Aufgabe initialisiert. Analysieren Sie die Datei `main.c` und vollziehen Sie den Code nach!
2. Lösen Sie das lineare Gleichungssystem, welches das gegebene Programm selbst erzeugt, sequentiell mit dem Jacobi-Verfahren. Verwenden Sie den Euklidischen Abstand, um zu bestimmen, ob das Iterationsverfahren abzubrechen ist. Tragen Sie in der Datei `main.c` Ihre Lösung an der Stelle ein, die durch den Kommentar *TODO* gekennzeichnet ist.
3. In der nächsten Übung wird der obige Gleichungslöser mit Hilfe von Threads und SSE-Instruktionen parallelisiert. Überlegen Sie sich, wie Sie dies realisieren wollen und skizzieren Sie Ihre Strategie.
1. Dieses git-Repository enthält ein C-Programm, das die Matrizen für diese Aufgabe initialisiert. Analysieren Sie die Datei `main.c` und vollziehen Sie den Code nach!
2. Lösen Sie das lineare Gleichungssystem, welches das gegebene Programm selbst erzeugt, sequentiell mit dem Jacobi-Verfahren. Verwenden Sie den Euklidischen Abstand, um zu bestimmen, ob das Iterationsverfahren abzubrechen ist. Tragen Sie in der Datei `main.c` Ihre Lösung an der Stelle ein, die durch den Kommentar *TODO* gekennzeichnet ist.
3. In der nächsten Übung wird der obige Gleichungslöser mit Hilfe von Threads und SSE-Instruktionen parallelisiert. Überlegen Sie sich, wie Sie dies realisieren wollen und skizzieren Sie Ihre Strategie.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment