In den nachfolgenden Aufgaben wird der zweite Teil der letzten Übung fortgesetzt. Es soll 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.
- Parallelisieren Sie das Jacobi-Verfahren (und nicht die Bestimmung des Euklidischen Abstands) durch die Verwendung von POSIX-Threads. Gehen Sie dabei zur Vereinfachung davon aus, dass
n
durch die Anzahl der Threads ohne Rest teilbar ist. - Verbessern Sie Ihre Lösung, indem Sie SSE-Instruktionen zur Bestimmung des Euklidischen Abstands verwenden. Gehen Sie zur Vereinfachung davon aus, dass
n
eine gerade Zahl ist. - Verbessern Sie Ihre zuvor entwickelte Lösung des Jacobi-Verfahrens, in dem Sie neben den POSIX-Threads nun auch SSE-Instruktionen verwenden. Nutzen Sie dabei die beiden in den vorherigen Aufgabenteilen genannten Vereinfachungen.
- Welchen Geschwindigkeitszuwachs erzielen Sie gegenüber der ursprünglichen, nicht parallelisierten Version aus der vorherigen Übung?