Skip to content

maxfrie/gi4_uebung06

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Übung 6: Funktionen und parallele Programmierung I

Funktionen mit Assembler

Schreiben Sie eine 32Bit Assemblerfunktion, welche eine 32Bit 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.

struct Darstellung {
	char hex[9];
	char dezimal[11];
};

Hinweise: Die Instruktion div teilt den Wert aus edx:eax durch das Argument und speichert das Ergebnis in eax. Der Rest der Division wird in edx 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 int malloc(int anzahl_bytes); anfordern.

Parallele Programmierung I

In dieser und in der nächsten Übung wird die näherungsweise Lösung des linearen Gleichungssystems

Ax=b, A=ai,j ∈ ℜn x n und b,x ∈ ℜ

also

∑ ai,j xj = bi, i ∈ {1,...,n}

ermittelt. Dabei soll das Jacobi-Verfahren verwendet werden, welches die i-te Gleichung nach xi auflöst. Hieraus ergibt sich folgende Iterationsvorschrift für den m+1-ten Iterati- onsschritt:

xim+1 = 1 / ai,i (bi - ∑ ai,jm)

Um zu erkennen, ob das Iterationsverfahren die Lösung gefunden hat, soll der Euklidische Abstand zwischen xm und xm+1 verwendet werden. Ist dieser sehr klein (bei uns kleiner als √ (n 􏰄􏰂0.0000001 · n)), wurde der Lösungsvektor gefunden und das Iterationsverfahren kann abgebrochen werden. Der Abstand wird wie folgt bestimmt: √ (∑ (xim - xim+1)2)

Hinweis: Im L2P 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.

About

GI4 - Übung 6

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published