Está en la página 1de 20

Kapitel 2

Grundlagen
Kapitel 2.1 fasst Basisvokabular zusammen, das aus Einfhrungsveranstaltungen in die Numerik bzw.
aus der Funktionalanalysis bekannt sein sollte. Kapitel 2.2 behandelt das Poissonproblem, ein zentrales
Modellproblem fr die Verfahren die in dieser Vorlesung vorgestellt werden, und seine Diskretisierung
exemplarisch mittels Finiter Differenzen. Fr Details verweisen wir auf die einschlge und vielfltige
Literatur zum Thema, insbesondere auf die an der Fakultt verwendeten Vorlesungsskripte zur Numerik
I. Abschlieend stellen wir in Kapitel 2.3 verschiedene Speicherformate fr dnn besetzte Matrizen
vor und diskutieren darauf zugeschnittene Algorithmen zur Matrix-Vektor-Multiplikation in Bezug auf
Flexibilitt, Efzienz und Parallelisierbarkeit. Dabei fhren wir auch in fr uns wichtige Aspekte der
Computerarchitektur ein.
7
8 KAPITEL 2. GRUNDLAGEN
2.1 Elementare Grundlagen und Begriffe
In diesem Abschnitt stellen wir die wichtigsten Grundlagen aus der Numerik I und Funktionalanalysis
ohne Beweis zusammen. Viele der folgenden Aussagen gelten auch im C
N
(modulo geeigneter Konju-
gation), wir konzentrieren uns jedoch auf den R
N
als (fr uns) praxisrelevanten Fall.
2.1.1 Standardvokabular
Skalarprodukte und Normen Fr N-dimensionale Vektoren
a = (a
1
, . . . , a
N
)
T
, b = (b
1
, . . . , b
N
)
T
R
N
werden das bliche euklidische Skalarprodukt und die induzierte euklidische Norm wie folgt bezeichnet:
(a, b)
2
:= a b := a
T
b :=
N

i=1
a
i
b
i
a
2
:=

a a
Die Betragssummennorm, alle p-Normen und die Maximumsnorm sind wie folgt deniert:
a
1
:=
N

i=1
|a
i
|
a
p
:=
_
N

i=1
|a
i
|
p
_
1
p
a

:= max {|a
1
|, |a
2
|, . . . , |a
N
|}
Alle Normen auf dem R
N
sind quivalent:
c, C > 0 : cx
a
x
b
Cx
a
x R
N
, a, b N
Matrix-Eigenschaften Eine Matrix A R
NN
heit
symmetrisch : A
T
= A
orthogonal : A
1
= A
T
(Av)
T
(Aw) = v
T
w v, w R
N
positiv semidenit : x
T
Ax 0 x R
N
positiv denit : x
T
Ax > 0 x R
N
\ {0}.
Negative (Semi-) Denititheit wird analog deniert.
Irreduzibilitt Wir nennen eine Matrix A R
NN
reduzibel (zerlegbar), wenn eine Permutations-
matrix P R
NN
existiert, so dass
PAP
T
=
_

A
11

A
12
0

A
22
_
mit

A
ii
R
n
i
n
i
, i = 1, 2 und n
1
+n
2
= N. Andernfalls heit Airreduzibel. Die Reduzibilitt stellt im
Wesentlichen eine graphentheoretische Eigenschaft dar, da sie ausschlielich von der Besetzungsstruktur
der Matrix und nicht von den konkreten Werten der Matrixkoefzienten abhngt. Anschaulich bedeutet
die Reduzibilitt, dass wir eine Folge von quivalenzumformungen (Zeilen- und Spaltentausch) nden
knnen, die die Matrix in eine Block-Dreiecksmatrix-Struktur mit separierten Hauptdiagonalblcken
bersetzt.
2.1. ELEMENTARE GRUNDLAGEN UND BEGRIFFE 9
Matrixnormen Jede (Vektor-) Norm
p
: R
N
R, p N induziert eine natrliche Matrixnorm:
A
p
:= sup
x
p
=1
Ax
p
und alle diese Normen sind aufgrund der endlichen Dimension des betrachteten R
N
beschrnkt, d.h. die
Suprema werden angenommen. Matrixnormen
p
auf R
NN
sind vertrglich mit den Vektornormen

p
auf R
N
von denen sie induziert werden, und sie sind submultiplikativ:
Ax
p
A
p
x
p
und AB
p
A
p
B
p
Fr die Betragssummen- und Maximums-Vektornormen kann man die induzierten Matrixnormen direkt
aus den Matrixeintrgen berechnen:
A
1
= max
j=1,...,N
N

i=1
|a
ij
| (Spaltensummennorm)
A

= max
i=1,...,N
N

j=1
|a
ij
| (Zeilensummennorm)
Fr die 2-Norm ist dies nicht aus dem Stand mglich, man kann ohne weitere Hilfsmittel nur die folgende
obere Schranke zeigen, die i.A. nicht scharf ist:
A
2

_
_
N

i,j=1
|a
ij
|
2
_
_
1
2
Eine bessere Charakterisierung der 2-Norm liefert der folgende Abschnitt, wir halten noch ugs die
folgende Konvention fest: Wenn eine Vektor- oder Matrixnorm nicht explizit qualiziert ist, beziehen
sich Aussagen in dieser Vorlesung wegen der Normquivalenz auf eine beliebige Norm (und das kann
auch alles so bewiesen werden).
2.1.2 Spektralradius einer Matrix
Die nichtnegative Zahl
(A) := max{ || : Eigenwert von A}
heit Spektralradius oder kurz Spektrum der Matrix A. Man kann nun folgendes zeigen: Fr jede Ma-
trixnorm und jede Matrix gilt
(A) A
und fr symmetrische Matrizen sogar
A
2
= (A).
Man kann also basierend auf der letzten Aussage das Spektrum einer symmetrischen Matrix nach oben
abschtzen, wenn man geeignete Verfahren zur Abschtzung des betragsmig maximalen Eigenwerts
zur Verfgung hat. Andererseits existiert zu jedem > 0 eine Matrixnorm

, so dass
A

(A) + ,
Die Kombination dieser Aussagen ergibt einen wichtigen Zusammenhang, der fr die Analyse von Kon-
vergenzkriterien von groer Bedeutung ist und deshalb in einem Satz formuliert wird:
10 KAPITEL 2. GRUNDLAGEN
Satz 2.1 (Zusammenhang Spektralradius und Matrixnorm). Fr den Zusammenhang zwischen Spek-
tralradius und Matrixnorm gilt:
(A) A

(A) + A R
NN
, > 0
Dieser Satz erlaubt es, Aussagen die auf Normen von Matrizen basieren (aber von der konkreten Wahl
der Norm unabhngig sind) direkt auf den Spektralradius der Matrix zu bertragen.
2.1.3 Kondition von Matrizen
Fr eine regulre Matrix Aheit die nichtnegative Zahl
cond
a
(A) := A
a
A
1

a
die Konditionszahl oder kurz Kondition von A bzgl. der Norm
a
. Wie immer vereinfachen wir die
Notation, falls die konkrete zugrundeliegende Norm wegen der Normquivalenz irrelevant ist. Es gilt:
cond(A) 1
Der sehr wichtige Strungssatz (auch bekannt als Stabilittsabschtzung) verknpft den Begriff der Kon-
dition mit der Lsung linearer Gleichungssysteme:
Satz 2.2 (Strungssatz). Fr ein lineares Gleichungssystem Ax = b mit regulrer Koefzientenmatrix
A R
NN
, Lsung x R
N
und rechter Seite b R
N
gilt bei gestrter rechter Seite b + b und
gestrter Matrix A+Afr die Lsung x+x des gestrten Systems (A+A)(x+x) = b+b
x
x

cond(A)
1 cond(A)A/A
_
b
b
+
A
A
_
unter der Voraussetzung, dass A < A
1

1
.
Diese Aussage lt sich anschaulich so interpretieren: Die Konditionszahl liefert eine obere Schranke fr
den Faktor, um den sich (relative) Strungen in den Daten (der Eingabe) bei der Lsung eines linearen
Gleichungssystems verstrken.
Fr eine symmetrische positiv denite Matrix kann die Konditionszahl mit Hilfe des grten und kleins-
ten Eigenwerts (die unter diesen Voraussetzungen alle reell und positiv sind) ausgedrckt werden, man
spricht von der Spektralkondition:
cond
2
(A) =

max

min
Dies folgt aus A
1

2
= 1/
min
. Ist nur Symmetrie gefordert, so gilt diese Aussage fr die betragsmig
grten und kleinsten Eigenwerte. Wir nennen eine Matrix schlecht konditioniert, wenn ihre Kondition
gro ist.
Konsequenzen des Strungssatzes in der Praxis Computer rechnen in Gleitkomma-Arithmetik, al-
so in einem endlich genauen Format. Aufgrund von Darstellungsfehlern und Rundungs- sowie Ausl-
schungsfehlern sind alle Matrizen und rechten Seiten, deren Eintrge nicht a priori bekannt sind sondern
die bspw. ber einen Assemblierungsprozess berechnet werden, mit einem unvermeidbaren relativen
Fehler in den Eingabedaten behaftet. Dieser ist in erster Nherung mindestens von der Ordnung 10
8
bis 10
7
bei Verwendung des gngigen einfach genauen Gleitkomma-Formats, und analog acht Gr-
enordnungen besser (genauer, kleiner) in doppelter Genauigkeit. Der Strungssatz sagt nun aus, dass
wenn die Strung in der Matrix nicht zu gro ist, sich diese Fehler um einen zur Kondition proportiona-
len Faktor verstrken, konkret um mindestens log
10
cond(A) viele Dezimalstellen. Eine (sehr) schlecht
konditionierte Koefzientenmatrix Akann also einen (relativen) Datenfehler so sehr verstrken, dass das
berechnete Ergebnis unbrauchbar ist.
2.1. ELEMENTARE GRUNDLAGEN UND BEGRIFFE 11
2.1.4 Der Banachsche Fixpunktsatz
Der Banachsche Fixpunktsatz ist ein fundamentales Hilfsmittel bei der Analyse von iterativen Verfah-
ren. Wir formulieren ihn direkt fr den Spezialfall linearer Operatoren, da dies fr die Analyse von
Iterationsverfahren fr lineare Gleichungssysteme bentigt wird. Dazu erinnern wir an die Denition ei-
nes Banach-Raums als normierter vollstndiger Raum, d.h., dass jede Cauchy-Folge im Raum gegen ein
Element des Raumes konvergiert. Fr den allgemeinen Fall nichtlinearer Operatoren verweisen wir auf
die gngige Literatur, bspw. Vorlesungsskripte zur Numerik.
Satz 2.3 (Banachscher Fixpunktsatz). Sei B : X X ein beschrnkter linearer Operator im
Banach-Raum X mit B < 1. Dann ist der Operator I B mit dem Einheitsoperator I invertierbar,
d.h. die Gleichung
x Bx = y
hat fr jeden Wert y X genau eine Lsung x X. Der inverse Operator (I B)
1
ist beschrnkt mit
(I B)
1

1
1 B
.
Das Verfahren der sukzessiven Approximation
x
(k+1)
:= Bx
(k)
+ y, k = 0, 1, 2, . . .
konvergiert bei beliebigem Startelement x
(0)
X gegen die Lsung x. Ferner hat man fr beliebige
Iterierte k N
0
die a posteriori und a priori Fehlerabschtzungen:
x x
(k)

B
1 B
x
(k)
x
(k1)
x x
(k)

B
k
1 B
x
(1)
x
(0)

Wir nennen B auch die Kontraktionszahl des Operators B. Die hinreichenden Bedingungen werden
im endlich-dimensionalen Fall sogar notwendig:
Das Verfahren der sukzessiven Approximation fr B R
NN
,
x
(k+1)
:= Bx
(k)
+y, k = 0, 1, 2, . . .
konvergiert fr beliebige Startwerte x
(0)
R
N
und jedes y R
N
genau dann, wenn (B) < 1.
Anschaulich bedeuten die Fehlerschranken, dass in jeder Iteration der Fehler gegen die exakte Lsung
um den Faktor
B
1B
reduziert wird, was im endlich-dimensionalen Fall und bei sehr schlecht konditio-
niertem Kontraktionsoperator eine sehr schlechte Konvergenzrate (s.u.) nach sich zieht. Die Spezialisie-
rungen fr den endlich-dimensionalen Fall ergeben sich als Konsequenz von Satz 2.1.
2.1.5 Begrifichkeiten bei iterativen Verfahren
Konsistenz Wir nennen ein Iterationsverfahren konsistent zur Matrix A, wenn fr jede rechte Seite b
die Lsung x = A
1
b des linearen Gleichungssystems Ax = b ein Fixpunkt des Iterationsverfahrens
ist. Diese Bedingung ist notwendig zur Konvergenz (und wird ab jetzt stillschweigend vorausgesetzt),
aber nicht hinreichend. Praktisch bedeutet der Konsistenzbegriff, dass ein Iterationsverfahren einfach
funktioniert, bei einem nicht-konsistenten Verfahren msste die Iteration an einer geeigneten Stelle
abgebrochen werden, da nicht sichergestellt werden kann, dass die Iteration tatschlich im Fixpunkt
(d.h. mit der Lsung) terminiert.
12 KAPITEL 2. GRUNDLAGEN
Abbruchkriterium Wir werden uns in dieser Vorlesung nur mit Residuen- bzw. (Defekt-) basierten
Abbruchkriterien befassen, d.h. mit Kriterien, die auf der Basis vorhandener Daten berechnet werden
knnen. Eine gngige, praxisrelevante Wahl ist das folgende relative Abbruchkriterium,
b Ax
(k)

rel
b Ax
(0)
,
was aussagt, dass eine Iteration so lange fortgefhrt wird, bis der initiale Defekt um den Faktor
rel
reduziert wurde. blicherweise wird man
rel
so whlen, dass der Lser Stellen (= Genauigkeit im Resi-
duum/Defekt bspw. in der euklidischen Norm) gewinnt.
Konvergenzrate Wir bezeichnen die Konvergenzrate mit :
:=
_
b Ax
(k)

2
b Ax
(0)

2
_
1/k
Die Konvergenzrate dient der Geschwindigkeitsmessung von iterativen Verfahren, denn man kann zei-
gen, dass sich die Konvergenzrate aymptotisch an die Kontraktionszahl aus dem Banachschen Fixpunkt-
satz annhert. Man beachte, dass die Iterationszahl exponentiell eingeht, eine (sehr gute) Konvergenzrate
von bspw. 0.1 entspricht also einer Stelle Gewinn pro Iteration, whrend eine Konvergenzrate von 0.9
knapp 22 Iterationen pro Stelle Gewinn entspricht.
Totale Efzienz Mit totaler arithmetischer Efzienz bzw. totaler Laufzeitefzienz bezeichnen wir die
folgende Gren:
E
arith
:=
#FLOPs
N k log
10
()
E
runtime
:=
T
N k log
10
()
Dabei bezeichnet die Konvergenzrate in der k-ten Iteration, N die Problemgre (Zahl der Unbekann-
ten), T und #FLOPs die zur Lsung bentigte Zeit in Sekunden bzw. die zur Lsung durchgefhrten
arithmetischen Operationen. Diese Metriken messen also die Operationen und die Zeit, die ein iteratives
Verfahren bentigt, um das Residuum um eine Stelle zu reduzieren. Sie reduzieren jeden Lser fr jedes
Problem auf eine einzige Zahl, die typischerweise sehr aussagekrftig ist und vielfltige Vergleiche der
Lserleistung, verschiedener Implementierungen und der Hardware-Efzienz von Implementierungen
erlaubt.
2.2. DAS POISSONPROBLEM DISKRETISIERUNG MIT FINITEN DIFFERENZEN 13
2.2 Das Poissonproblem Diskretisierung mit Finiten Differenzen
Wie bereits in der ersten Vorlesung motiviert, nden sich Poisson-artige Probleme als Teilkomponenten
in vielen wichtigen Anwendungsfllen. Auerdem hat das Poisson-Problem wichtigen Modellcharakter
fr alle elliptischen partiellen Differentialgleichungen. In diesem Abschnitt soll es um die Diskretisie-
rung mit Finiten Differenzen gehen, sowie um eine Technik zur Konstruktion von analytischen Refe-
renzlsungen, die in der Praxis zur Validierung von Implementierungen von unschtzbarem Wert ist,
nicht nur fr Lserimplementierungen, sondern z.B. auch zum Test verschiedener Diskretisierungs- und
Stabilisierungsverfahren.
2.2.1 Notationen
Funktionen treten entweder skalarwertig oder vektorwertig auf:
u = u(x) u =
_
_
_
u
1
(x)
.
.
.
u
d
(x)
_
_
_
auf. Partielle Ableitungen, d.h. Ableitungen nach einer der vorkommenden Variablen, werden wie folgt
geschrieben,
u
x
i
:=
i
u :=
u
x
i
,
und
p
i
u =
i,...,i
u bezeichnet die p-te Ableitung nach der i-ten Variable. Mit dem Nabla-Operator
werden der Gradient (Vektor aller partiellen Ableitungen) einer skalaren sowie die Divergenz einer
Vektorfunktion (Summe aller partiellen Ableitungen) geschrieben als
u := grad u := := (
1
u, . . . ,
d
u)
T
u := div u :=
1
u
1
+ +
d
u
d
.
Die Kombination von Divergenz- und Gradientenoperator ergibt den Laplace-Operator:
u := (u) =
2
1
u + +
2
d
u
2.2.2 Diskretisierung mit Finiten Differenzen
Der Prozess der Diskretisierung beschreibt den Vorgang, ein kontinuierliches Problem in eine diskre-
te, endliche, vom Computer handhabbare Form zu bertragen. Wir verdeutlichen die Vorgehensweise
anhand des Poisson-Problems mit homogenen Dirichlet-Randbedingungen
u = f in mit Nullrandbedingungen (2.1)
fr ein Gebiet R
2
und eine zweimal stetig differenzierbare Funktion u : R. Das Rechengebiet
ist zur Vereinfachung das Einheitsquadrat, = [0, 1] [0, 1].
Die einfachste Diskretisierung dieses Problems ist die Verwendung eines Gitters mit der quidistanten
Schrittweite h = 1/(M + 1) fr ein M N, d.h. wir betrachten die Gitterpunkte
x
ij
= (ih, jh), i, j = 0, . . . , M + 1.
Die Ableitungen im Differentialoperator approximieren wir in diesen Gitterpunkten ebenfalls so einfach
wie mglich, und zwar mittels zentraler Differenzenquotienten zweiter Ordnung:

xx
u(x
ij
)
1
h
2
(u(x
i+1,j
) 2u(x
i,j
) + u(x
i1,j
))

yy
u(x
ij
)
1
h
2
(u(x
i,j1
) 2u(x
i,j
) + u(x
i,j+1
))
14 KAPITEL 2. GRUNDLAGEN
Damit ergibt sich:
(u)(x
ij
)
1
h
2
(u(x
i+1,j
) + u(x
i1,j
) + u(x
i,j1
) + u(x
i,j+1
) 4u(x
i,j
))
Anschaulich spricht man auch vom Differenzenstern bzw. diesem Fall vom sog. 5-Punkte-Stern:
1
1 4 1
1
Fr die inneren Knotenpunkte x
ij
, i, j = 1, . . . , M werden nun aus dem linearen Gleichungssystem
u
i1,j
u
i+1,j
+ 4u
i,j
u
i,j1
u
i,j+1
= h
2
f(x
ij
), i, j = 1, . . . , M
Nherungswerte u
i,j
fr die gesuchten Funktionswerte u(x
ij
) bestimmt, hinzu kommen die Randbedin-
gungen
u
0,j
= u
M+1,j
= 0, u
i,0
= u
i,M+1
= 0, j = 0, . . . , M + 1 i = 1, . . . , M (2.2)
fr Knotenpunkte auf dem Rand des Gebiets. Die folgende Abbildung fasst dies zusammen, die
M M inneren Knotenwerte sind rot hinterlegt.
}
}
M=3
}
N=5x5
h=1/4
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
Bei zeilenweiser (lexikographischer) Nummerierung (vgl. Skizze) aller gesuchten Werte u
ij
fr die in-
neren Punkte und die Randpunkte lt sich das N N lineare Gleichungssystem kompakt schreiben
als
Au = b
Die Struktur der Matrix ergibt sich aus der folgenden Abbildung, man sieht, dass fr die Randpunkte
Einheitszeilen vorgesehen sind. Der Vektor u R
N
enthlt die gesuchten Knotenwerte, und der Vektor
der rechten Seite enthlt die vorgegebenen Randwerte in den mit den Randpunkten korrespondierenden
Eintrgen, und die entsprechenden Komponenten von f
i
skaliert mit h
2
sonst. In unserem Fall schrei-
ben wir Nullrandbedingungen vor, im Fall allgemeiner Dirichlet-Randbedingungen werden so beliebige
Werte vorgeschrieben:
u = (u
0
, . . . , u
N1
)
T
, b = h
2
(0, 0, 0, 0, 0
. .
M+2
, 0, f
6
, f
7
, f
8
, 0, 0, f
11
, . . .)
T
2.2. DAS POISSONPROBLEM DISKRETISIERUNG MIT FINITEN DIFFERENZEN 15
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
0 1
1 1
2 1
3 1
4 1
5 0 1 0
6 -1 -1 4 -1 -1
7 -1 -1 4 -1 -1
8 -1 -1 4 1 -1
9 0 1 0
10 0 1 0
11 -1 -1 4 -1 -1
12 -1 -1 4 -1 -1
13 -1 -1 4 -1 -1
14 0 1 0
15 0 1 0
16 -1 -1 4 -1 -1
17 -1 -1 4 -1 -1
18 -1 -1 4 -1 -1
19 0 1 0
20 1
21 1
22 1
23 1
24 1
Alternative Assemblierung Da die Randwerte vorgegeben sind, kann der Berechnungsaufwand durch
einige Modikationen reduziert werden. Die Idee ist hier, das Gleichungssystem nur fr die tatsch-
lich unbekannten Lsungskomponenten aufzustellen, also fr alle inneren Punkte des Rechengitters. Im
Beispiel aus der obigen Abbildung sind die bekannten Komponenten der Lsung gerade
u
0
, u
1
, u
2
, u
3
, u
4
, u
5
, u
9
, u
10
, u
14
, u
15
, u
19
, u
20
, u
21
, u
22
, u
23
und u
24
.
Fr die Koefzientenmatrix ergibt sich die folgende Struktur:
0 1 2 3 4 5 6 7 8
0 4 -1 -1
1 -1 4 -1 -1
2 -1 4 -1
3 -1 4 -1 -1
4 -1 -1 4 -1 -1
5 -1 -1 4 -1
6 -1 4 -1
7 -1 -1 4 -1
8 -1 -1 4
Der Koefzientenvektor besteht aus den unbekannten Lsungskomponenten. Wie man sich leicht ber-
legt, ist das sich so ergebende Gleichungssystem nicht quivalent zu dem oben hergeleiteten System fr
das vollstndige Rechengebiet: Es feht die Kopplung der echten Randwerte mit den Unbekannten im In-
neren, bspw. die Koppung der Unbekannten u
11
mit der Unbekannten u
10
, wie in der Matrix die mit dem
vollstndigen Gitter korrespondiert durch den Eintrag a
11,10
realisiert. Bei Dirichlet-Randwerten kann
dies durch eine Modikation der rechten Seite des Gleichungssystems korrigiert werden. Insgesamt er-
16 KAPITEL 2. GRUNDLAGEN
gibt sich das folgende zu lsende System:
A
_
_
_
_
_
_
_
_
_
_
_
_
_
_
u
6
u
7
u
8
u
11
u
12
u
13
u
16
u
17
u
18
_
_
_
_
_
_
_
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
_
_
_
_
_
_
_
f
6
+ u
1
+ u
5
f
7
+ u
2
f
8
+ u
3
+ u
9
f
11
+ u
10
f
12
f
13
+ u
14
f
16
+ u
15
+ u
21
f
17
+ u
22
f
18
+ u
19
+ u
23
_
_
_
_
_
_
_
_
_
_
_
_
_
_
Fr Nullrandbedingungen ist offenbar keine Korrektur ntig. Nach der Lsung des Systems fr die in-
neren Lsungskomponenten ergibt sich die Lsung des ursprnglichen Systems, indem die berechneten
Lsungskomponenten zusammen mit den bekannten Randwerten in einen Vektor geschrieben werden.
Andere Diskretisierungen Fr andere Diskretisierungen (bspw. mit Finiten Differenzen hherer Ord-
nung) ergeben sich mehr Nicht-Null-Bnder, und beim Wechsel der zugrundeliegenden Nummerierung
der Gitterpunkte sogar eine vollkommen andere Besetzungsstruktur: Im Allgemeinen geht die Band-
struktur verloren. Dies soll exemplarisch in den bungen untersucht werden. Bei ortsabhngig nicht
konstanten Koefzienten sind nicht mehr alle Eintrge der Matrix weitestgehend identisch. Auch die
Integration anderer Randbedingungen, bspw. vom Neumann- oder Robin-Typ, kann bei Finiten Diffe-
renzen die Besetzungsstruktur verndern. Wir verweisen auf die Literatur, bzw. je nach Dozent auf die
Vorlesungen Numerik II+III.
Zusammenfassung Zur einfacheren Referenz fassen wir die Denition des Modellproblems und eini-
ge wichtige Eigenschaften wie folgt zusammen:
Denition und Satz 2.4 (Modellproblem und grundlegende Eigenschaften). Als das Modellproblem
bezeichnen wir das Poisson-Problem auf dem Einheitsquadrat mit homogenen Dirichlet-Randbedingun-
gen fr eine hinreichend glatte Funktion u. Zur Diskretisierung seien zentrale Finite Differenzen zweiter
Ordnung verwendet, die Gitterweite ist h.
Dann gilt:
Die Diskretisierung hat die Approximationsordnung h
2
, mit anderen Worten, eine Halbierung der
Gitterweite h in jede Richtung reduziert den Diskretisierungsfehler um den Faktor vier, vorausge-
setzt, das entsprechende Gleichungssystem wurde genau genug gelst.
Aist offensichtlich sehr dnn besetzt, mit 5N Nicht-Null-Eintrgen.
Aist regulr, damit ist das Gleichungssystem Au = b eindeutig lsbar.
Aist symmetrisch (nach Konstruktion) und positiv denit (kann man nachrechnen).
Aist schwach diagonaldominant (sieht man) und irreduzibel (sieht man auch, muss man aber eher
aufwndig zeigen).
Die Eigenwerte und Eigenvektoren lassen sich explizit angeben, und fr i, j = 1, . . . , M gilt:

ij
= 4 2(cos(ih) + cos(jh))
w
ij
= (sin(ikh) sin(jlh))
k,l=1....,M
2.2. DAS POISSONPROBLEM DISKRETISIERUNG MIT FINITEN DIFFERENZEN 17
Damit ist fr h 1

max
= 4 4 cos((1 h)) 8

min
= 4 4 cos(h) = 4 4(1

2
h
2
+ O(h
4
)) 2
2
h
2
cond
2
(A)
4

2
h
2
Beweis. Beispielsweise in den Vorlesungen Numerik I-III, Partielle Differentialgleichungen I.
2.2.3 Konstruktion analytischer Referenzlsungen
Eine eigentlich triviale Technik, um numerische Techniken und ihre Implementierungen zu berpr-
fen, ist die Konstruktion analytisch bekannter Referenzlsungen mit vorgegebenen Eigenschaften. Diese
Technik ist mit angemessenen Modikationen fast generell anwendbar und in der praktisch orientierten
Forschung von unschtzbarem Wert.
Wir betrachten das Modellproblem (Satz und Denition 2.4), d.h. wir sind an Approximationen der
Lsung des Modellproblems in den Gitterpunkten x
ij
= (ih, jh), i, j = 0, . . . , M + 1 in zeilenweiser
Nummerierung interessiert. Wenn wir nun eine hinreichend glatte Funktion u
0
hernehmen, sie analytisch
differenzieren und in den Gitterpunkten auswerten, liefert uns dies eine diskrete Funktion
v
h
(ih, jh) :=
xx
u
0
(ih, jh) +
yy
u
0
(ih, jh) in
h
.
Wir bezeichnen mit
h
die Menge der Gitterpunkte, mit
h
die Anwendung der Finite-Differenzen-
Diskretisierung des Laplace-Operators, und mit u
h
= u die diskrete Lsung, gegeben durch den L-
sungsvektor in den Gitterpunkten. Wenn wir nun das resultierende diskrete Problem

h
u
h
= v
h
in
h
lsen, kennen wir die analytische Lsung in den Gitterpunkten. Wir knnen den Fehler der diskreten, be-
rechneten Lsung gegen die kontinuierliche Lsung (ausgewertet in den Gitterpunkten, d.h. u
0
(ih, jh))
also bspw. in der Maximumsnorm berechnen:
e
h
:= u
0
u
h
e
h

= max
ij

u
0
(ih, jh) u
h
(i(M + 1) + j)

Wahl der Funktion Eine typische Falle besteht darin, eine Funktion zu verwenden, die durch die
verwendete Diskretisierung exakt darstellbar ist. Ein konkretes schlechtes Beispiel fr zentrale Finite
Differenzen zweiter Ordnung ist bspw. eine biquadratische Funktion wie u
0
(x, y) = 16x(1x)y(1y),
deren zweite Ableitungen gegeben sind durch
xx
u
0
= 32y(y 1) und
yy
u
0
= 32x(x 1).
In der Praxis verwendet man daher lieber nichtpolynomielle aber immer noch beliebig glatte Funktionen,
blicherweise trigonometrische Funktionen. Standardbeispiele fr den symmetrischen und unsymmetri-
schen Fall sind:
u(x, y) := (sin(x), sin(y)) u(x, y) := (sin(x), sin(ky)), k N
Diskussion Diese Technik erlaubt es uns beispielsweise, die folgenden potentiellen Fehlerquellen von-
einander zu trennen:
Fr eine hinreichend glatte Funktion sollte der Diskretisierungsfehler dominieren. Wenn wir das
lineare Gleichungssystem also exakt lsen, dann sollte in jedem Verfeinerungsschritt h h/2
der Fehler um den Faktor 4 reduziert werden. Ist dies nicht der Fall, so zeigt uns der Verlust der
theoretisch zu erwartenden Fehlerreduktion, dass wir vermutlich Implementierungsfehler in der
Assemblierung der Koefzientenmatrix suchen mssen.
18 KAPITEL 2. GRUNDLAGEN
In der Praxis werden wir nie exakte Verfahren und erst Recht keine exakte Arithmetik anwen-
den, sondern stattdessen iterative Verfahren mit einem selbstgewhlten Abbruchkriterium und ei-
ner maschinenuntersttzten Gleitkomma-Arithmetik wie bspw. float oder double verwenden.
Wir sehen uns im Wesentlichen mit zwei Mglichkeiten konfrontiert, deren Unterscheidung ei-
ne gehrige Portion Erfahrung bzw. theoretisches Wissen ber Konditionierung, Konsistenz und
Stabilitt erfordert:
Iterative Verfahren werden in den seltensten Fllen bis zur Konvergenz zur Maschinengenau-
igkeit ausiteriert. Im einfachsten Fall lsen wir nicht genau genug und knnen die theore-
tische Fehlerreduktion (bei gegebenem h) restaurieren, indem wir das Abbruchkriterium des
iterativen Lsers modizieren, d.h. indem wir bei blichen Defekt-basierten Abbruchkrite-
rien mehr Stellen gewinnen.
Hilft dies nichts, mssen wir den Konvergenzverlauf unseres Lsers im Detail betrachten.
Wenn unser Lser zunchst gut konvergiert aber ab einer bestimmten Norm des Defekts
stagniert oder gar beginnt zu divergieren, so ist die verwendete Gleitkomma-Genauigkeit oft
unzureichend und wir mssen auf ein genaueres Gleitkomma-Format umschalten.
Beispiel Ein Beispiel fr den zweiten Fall ndet sich in der Dissertation des Dozenten [9, Kapitel 4],
dessen Wiedergabe wir uns in diesem Aufschrieb sparen. Hier wurde eine Diskretisierung mit bilinearen
Finiten Elementen gewhlt, die (fr den betrachteten Testfall) dieselbe asymptotische Fehlerreduktions-
rate aufweisen wie die in dieser Vorlesung verwendeten Finiten Differenzen. Nichtsdestotrotz sieht man
sehr schn, dass bei Verwendung einfach genauer Gleitkomma-Arithmetik die theoretische Fehlerreduk-
tion nicht erzielt wird, und dass doppelt genaue Gleitkomma-Arithmetik erforderlich ist.
2.3. DNN BESETZTE MATRIZEN 19
2.3 Dnn besetzte Matrizen
Wir wir bereits in Kapitel 1 gesehen haben, bentigen wir fr eine efziente Implementierung sowohl
Datenstrukturen, die fr dnn besetzte Matrizen (im Wesentlichen) nur die von Null verschiedenen Ein-
trge abspeichern, als auch Algorithmen der numerischen linearen Algebra, die auf solche dnn besetzte
Matrizen zugeschnitten sind. An dieser Stelle interessiert uns zunchst die Basisoperation SpMV (engl.
sparse matrix vector multiplication), d.h. die Operation y = Ax fr A R
NN
und x, y R
N
.
In der Literatur nden sich Unmengen verschiedener Speicherformate, die fr verschiedene Anwen-
dungsflle und Besetzungsstrukturen zugeschnitten sind. Wir betrachten exemplarisch zwei Formate fr
beliebige Besetzungsstrukturen, und als Spezialfall ein Format zur Speicherung von Bandmatrizen. Mit
NNZ bezeichnen wir die Anzahl der Nicht-Null-Eintrge einer Matrix. Um die verschiedenen Forma-
te und die zugehrigen SpMV-Operationen im Bezug auf Efzienz und Parallelisierbarkeit untersuchen
und beurteilen zu knnen, bentigen wir vorab einen kleinen Exkurs in die Computerarchitektur von
Speicherzugriffen, vgl. Abschnitt 2.3.1.
2.3.1 Exkurs: Computerarchitektur von Speicherzugriffen
Arithmetische Intensitt Die arithmetische Intensitt einer Operation ist deniert als die Anzahl der
Gleitkommaoperationen (engl. FLOP, oating point operations) dividiert durch die Anzahl der Spei-
cherzugriffe. In der Literatur ndet man auch oftmals eine Normierung nicht auf die absolute Anzahl an
Speicherzugriffen, sondern auf die Zahl der bertragenen Byte.
Wir betrachten als Beispiel die Addition zweier Vektoren aus dem R
N
, c = a + b. Offensichtlich
fhrt diese Operation N Additionen, 2N Lesezugriffe und N Speicherzugriffe aus. Die arithmetische
Intensitt betrgt somit 1/3
FLOP
#read+#write
. In doppelter Gleitkomma-Genauigkeit (ein Wert belegt 8 Byte)
entspricht dies einer Intensitt von 1/24
FLOP
Byte
.
Ob eine bestimmte Operation in ihrer Ausfhrungsgeschwindigkeit limitiert ist durch die Speicherzu-
griffsgeschwindigkeit oder durch die Rechengeschwindigkeit ist stark abhngig vom Computer, auf dem
wir sie ausfhren. Wir nennen eine Operation im ersten Fall speicherlimitiert (engl. memory bound) und
im zweiten Fall rechenlimitiert (engl. compute bound). Als Daumenregel auf modernen PC-Systemen
mit Intel- oder AMD-Prozessoren sind Operationen mit einer arithmetischen Intensitt von weniger als
24
FLOP
#read+#write
speicherlimitiert. A priori Wissen dieser Art ist essentiell bei der Optimierung von Imple-
mentierungen, da fr speicherlimitierte Operationen gnzlich andere Techniken zum Tragen kommen als
im rechenlimitierten Fall.
Latenz und Bandbreite Bevor wir verstehen knnen wie Speicherzugriffe unter der Haube ablau-
fen, bentigen wir zwei weitere zentrale Begriffe. Mit Latenz (engl. latency) bezeichnen wir die Zeit
zwischen der Anforderung eines Speicherzugriffs und dem Beginn der tatschlichen Datenbertragung.
Die Bandbreite (engl. bandwidth) ist die Geschwindigkeit der Datenbertragung, d.h. wie viele Daten
tatschlich in einer Sekunde bertragen werden knnen. Beide Begriffe sind wichtig, da typische Rech-
nerarchitekturen (s.u.) die Latenz auf mehrere zu bertragende Daten verteilen. In einem einfachen
linearen Modell erhalten wir fr die Gesamtzeit t zur bertragung von k Byte t = l +
k
b
mit der Latenz
l und der Bandbreite b.
Anatomie eines Speicherzugriffs Wir beschrnken uns im Folgenden auf Lesezugriffe auf den Haupt-
speicher, Schreibzugriffe erfolgen analog. Ein Speicherzugriff luft nun befreit von allen elektrotech-
nischen Details in den folgenden Schritten ab.
1. Der Prozessor erreicht eine Stelle im Programmcode mit einem Speicherzugriff, bspw. den Zugriff
auf ein Array-Element.
2. Der Prozessor sendet die logische Speicheradresse an den Hauptspeicher.
20 KAPITEL 2. GRUNDLAGEN
3. Der Hauptspeicher bestimmt die physikalische Speicheradresse. Die Gesamtzeit bis zu dieser Stel-
le wird als Latenz zusammengefasst.
4. Der Hauptspeicher sendet das angeforderte Datum zum Prozessor, konkret in ein sogenanntes
Register.
5. Der Prozessor kann whrend der Rechnung in Nullzeit auf das Datum zugreifen, solange es in
einem Register gespeichert ist.
Caches Die Herausforderung besteht nun darin, dass es verglichen mit der Kapazitt des Hauptspei-
chers nur sehr wenige Register gibt. Aus diesem Grund verwenden moderne Computersysteme soge-
nannte Zwischenspeicher (Cache-Speicher). Alle Speicherzugriffe verlaufen durch den Cache und alle
Daten werden dort zwischengespeichert. Caches sind relativ klein verglichen mit dem Hauptspeicher
(aber relativ gro verglichen mit den Registern), blich ist ein Unterschied von einem Faktor 1000, d.h.
aktuell wenige Byte verglichen mit wenigen MByte verglichen mit wenigen GByte. Dafr sind Latenz
und Bandbreite von Caches zwei bis drei Grenordnungen schneller als die des Hauptspeichers. Caches
dienen gleichermaen der Vermeidung von teuren Speicherzugriffen, wenn ein bentigtes Datum sich
bereits im Cache bendet, und der Beschleunigung von Speicherzugriffen. Caches werden genauso wie
Register vollstndig transparent vom Nutzer verwendet, wobei es bei Programmierung in Maschinen-
sprache durchaus Eingriffsmglichkeiten gibt. Insbesondere entscheidet ein Cache selbststndig, welche
Daten berschrieben werden, wenn seine Kapazitt erschpft ist und neue Daten aus dem Hauptspei-
cher zwischengespeichert werden mssen. Echte Systeme verwenden Hierarchien von Cache-Speichern
zunehmender Gre und Latenz und abnehmender Bandbreite mit zunehmender Entfernung vom Pro-
zessor, aber fr unser Verstndnis knnen wir dieses Detail ausblenden.
Anatomie eines Speicherzugriffs mit Cache
1. Der Prozessor erreicht eine Stelle im Programmcode mit einem Speicherzugriff, bspw. den Zugriff
auf ein Array-Element.
2. Der Prozessor sendet die logische Speicheradresse an den Cache.
3. Der Cache berprft, ob er das angeforderte Datum enthlt. Falls ja, wird es in ein Register gesen-
det, und der Speicherzugriff ist abgeschlossen.
4. Falls der Cache das Datum nicht enthlt, sendet er die logische Speicheradresse an den Hauptspei-
cher.
5. Der Hauptspeicher bestimmt die physikalische Speicheradresse und sendet das angeforderte Da-
tum zum Cache.
6. Der Cache sendet das angeforderte Datum in ein Prozessor-Register.
7. Der Prozessor kann whrend der Rechnung in Nullzeit auf das Datum zugreifen, solange es in
einem Register gespeichert ist.
Cachezeilen In unserem bisherigen Modell von Caches sehen wir eine deutliche Beschleunigung der
Speicherzugriffsgeschwindigkeit genau dann, wenn ein bentigtes Datum innerhalb der Zeit noch einmal
angefordert wird, in der es sich noch im Cache bendet. Wir haben aber noch keinerlei Beschleunigung
des Speicherzugriffs auf nicht gecachete Daten erzielt. Um dies zu erreichen, basieren Caches zustzlich
auf der folgenden Annahme: Wenn ein Datum an Speicheradresse i angefordert wird, ist die Wahr-
scheinlichkeit hoch, dass in naher Zukunft auch das Datum an Speicheradresse i + 1 bentigt wird. Der
Beschleunigungseffekt liegt nun darin, dass bei der Umsetzung dieser Idee durch Caches nicht fr beide
Speicherzugriffe die Latenz anfllt: Daten werden zwischen Hauptspeicher und Cache grundstzlich in
(kleinen) kontinuierlich angeordneten Datenblcken bertragen, diese Blcke nennt man Cachezeilen.
Eine typische Gre einer Cachezeile sind 64 Byte auf aktuellen Intel- und AMD-Prozessoren.
2.3. DNN BESETZTE MATRIZEN 21
In beiden Fllen (wiederholter Zugriff auf bereits benutzte Daten und Zugriff auf benachbarte Daten)
sprechen wir von Lokalitt des Speicherzugriffs, einmal imimtemporalen und einmal imrtlichen Sinne.
Eine wesentliche Optimierungstechnik fr speicherlimitierte Operationen ist die Erhhung der Lokalitt,
was beispielsweise durch eine nderung der Indizierung oder durch die nderung einer Datenstruktur
erfolgen kann. In den nchsten Abschnitten lernen wir anhand der Speicherung dnn besetzter Matrizen
Beispiele dazu kennen.
Durch das Konzept von Cachezeilen kann der Fall auftreten, dass mehr Daten bertragen werden, als
tatschlich bentigt werden. Dies kann durch eine Erhhung der Lokalitt vermieden werden.
Anatomie eines Speicherzugriffs mit Cachezeilen
1. Der Prozessor erreicht eine Stelle im Programmcode mit einem Speicherzugriff, bspw. den Zugriff
auf ein Array-Element.
2. Der Prozessor sendet die logische Speicheradresse an den Cache.
3. Der Cache berprft, ob er das angeforderte Datum enthlt. Falls ja, wird es in ein Register gesen-
det, und der Speicherzugriff ist abgeschlossen.
4. Falls der Cache das Datum nicht enthlt, sendet er die logische Speicheradresse an den Hauptspei-
cher.
5. Der Hauptspeicher bestimmt die physikalische Speicheradresse und das Segment in dem das Da-
tum liegt, und sendet die gesamte Cachezeile zum Cache. Ein Segment ist dabei ein kontinuierli-
cher Speicherbereich von der Gre der Cachezeile.
6. Der Cache bestimmt, welche Cachezeile gelscht werden muss um Platz zu schaffen fr die neue
Cachezeile, und speichert die gesamte Zeile.
7. Der Cache sendet das angeforderte Datum aus der Zeile in ein Prozessor-Register.
8. Der Prozessor kann whrend der Rechnung in Nullzeit auf das Datum zugreifen, solange es in
einem Register gespeichert ist.
2.3.2 Das COO-Format
Nach der Bereitstellung notwendiger Hardwaredetails im vorherigen Abschnitt knnen wir uns Daten-
strukturen und Algorithmen zuwenden. Das COO-Format (engl. coordinate format) ist das universellste
Speicherformat fr dnn besetzte Matrizen. Es verwendet drei Arrays der Lnge NNZ, ein Array speichert
die Nicht-Null-Eintrge der Matrix, und zwei weitere Arrays speichern jeweils die zugehrigen Zeilen-
und Spaltenindices. Alle drei Arrays werden identisch indiziert. Die Reihenfolge der Nicht-Null-Eintrge
ist beliebig.
Wir verdeutlichen das Format an einem Beispiel, die Indizierung der Arrays erfolgt dabei Null-basiert
wie in den Programmiersprachen C bzw. C++:
_
_
_
_
1 7 0 0
0 2 8 0
5 0 3 9
0 6 0 4
_
_
_
_
data = [1, 7, 2, 8, 5, 3, 9, 6, 4]
row = [0, 0, 1, 1, 2, 2, 2, 3, 3]
col = [0, 1, 1, 2, 0, 2, 3, 1, 3]
Die Matrix-Assemblierung in diesem Format ist sehr einfach, insbesondere wenn dynamische Arrays zur
Verfgung stehen oder wenn die Zahl der Nicht-Null-Eintrge a priori bekannt ist: Es mssen lediglich
Tripel von Zeilen- und Spaltenindices sowie die entsprechenden Werte in die drei Arrays eingefgt wer-
den. Der Assemblierungsalgorithmus unterscheidet sich also im Bezug auf die Indexberechnung nicht
vom Fall dicht besetzter Matrizen.
22 KAPITEL 2. GRUNDLAGEN
Die Durchfhrung von Matrix-Vektor-Multiplikationen in diesemFormat erfolgt in einer einfachen Schlei-
fe ber alle Nicht-Null-Eintrge, in der sie mit den entsprechenden Eintrgen im Koefzientenvektor
multipliziert werden und auf die entsprechenden Stellen im Ergebnisvektor aufaddiert werden, vgl. Al-
gorithmus 2.5. Die Korrektheit wird dabei dadurch sichergestellt, dass der Ergebnisvektor mit Nullen
initialisiert wird.
Algorithmus 2.5. (SpMV im COO-Format)
for (int k=0; k<N; k++)
y[k] = 0.0;
for (int k=0; k<NNZ; k++)
y[row[k]] = y[row[k]] + data[k]
*
x[col[k]];
Diskussion der SpMV-Operation Eine genauere Betrachtung von Algorithmus 2.5 offenbart einige
deutliche Nachteile. Wir beschrnken die Analyse auf die eigentliche Schleife und ignorieren die Initia-
lisierungsphase: Pro Nicht-Null-Eintrag werden je eine Multiplikation und eine Addition durchgefhrt,
und je ein Lesezugriff auf die beiden Index-Arrays, auf das Daten-Array, auf den Koefzientenvektor und
den Ergebnisvektor; hinzu kommt ein Schreibzugriff auf den Ergebnisvektor (der dazu ntige Zugriff auf
das Zeilen-Array wird wiederverwendet aus der Leseoperation). Bei gleicher Gre eines Index und ei-
nes Datenelements erhalten wir also zwei Rechenoperationen und sechs Speicherzugriffe, und somit eine
arithmetische Intensitt von 1/3.
Die Zugriffe auf den Inhalt der drei COO-Arrays erfolgen konsekutiv bzgl. der Schleifenvariable k, also
optimal im Sinne der blockweisen Datentransfers zwischen Haupt- und Cachespeicher. Allerdings wird
jeder Eintrag im Daten-Array jeweils genau einmal verwendet, es besteht also keinerlei Mglichkeit, Da-
ten aus dem Cache-Speicher wiederzuverwenden. Dies ist in der Natur der Matrix-Vektor-Multiplikation
begrndet und unvermeidbar. Beim Koefzientenvektor und dem Vektor der Spaltenindices existiert
durchaus Potential fr die Weiterverwendung von Elementen, da jeder Eintrag im Koefzientenvektor
genau so oft bentigt wird, wie es Nicht-Null-Eintrge in der zugehrigen Matrixspalte gibt. Die Zu-
griffe auf den Koefzientenvektor (und auch auf den Ergebnisvektor) erfolgen allerdings indirekt, die
entsprechenden Indices werden aus den Zeilen- und Spaltenindex-Arrays ausgelesen und sind somit ty-
pischerweise nicht konsekutiv. Dies fhrt dazu, dass diese Daten oft nicht mehr im Cache vorhanden
sind wenn sie erneut bentigt werden und somit erneut aus dem (deutlich langsameren) Hauptspeicher
geladen werden mssen. Auerdem werden durch die bertragung ganzer Cachezeilen potentiell oft Da-
ten in den Cache-Speicher transferiert, die aktuell gar nicht bentigt werden. Diese Effekte fhren in der
Praxis dazu, dass die tatschliche Zugriffsgeschwindigkeit deutlich unterhalb der durch die arithmetische
Intensitt vorgegebenen erwarteten Speichergeschwindigkeit liegt: Im schlimmsten Fall wird pro ber-
tragener Cachezeile nur genau ein Wert verwendet bevor die Cachezeile im Cache gelscht wird um Platz
fr neue Daten zu schaffen. Im obigen Beispiel von 64 Byte pro Cachezeile und einfacher Genauigkeit
entspricht dies also einer effektiven Bandbreite von
1
16
der physikalisch mglichen Bandbreite fr den
Zugriff auf Eintrge der Koefzienten- und Ergebnisvektoren.
Parallelitt Die Lnge des Ergebnisvektors ist typischerweise deutlich kleiner als die Anzahl der
Nicht-Null-Elemente. Durch die indirekte Adressierung der Schreibzugriffe (Akkumulation) fr den Er-
gebnisvektor wird deshalb eine einfache Parallelisierung dieser Operation verhindert. Als Beispiel be-
trachten wir den Fall zweier Prozessoren. Bei allgemeinen Besetzungsstrukturen der Koefzientenmatrix
ist es nicht auszuschlieen, dass zwei Schleifenindices k, k

zum gleichen Zugriffsindex im Ergebnisvek-


tor fhren: row[k]=row[k]. Werden diese beiden Zugriffe nun von zwei Prozessoren gleichzeitig
ausgefhrt, so gewinnt nur einer von ihnen und der andere akkumuliert seinen Anteil nicht auf den
Eintrag im Ergebnisvektor , d.h. es wird ein falsches Ergebnis berechnet wenn keine entsprechenden
Gegenmanahmen wie die in Kapitel 4 vorgestellten ergriffen werden.
2.3. DNN BESETZTE MATRIZEN 23
2.3.3 Das CSR-Format
Neben den im vorherigen Abschnitt erluterten Nachteilen des COO-Formats fllt bei genauerer Be-
trachtung auch auf, dass die Zeilen- und Spaltenindex-Arrays redundante Informationen beinhalten: Ins-
besondere wenn die Eintrge zeilenweise angeordnet werden, enthlt das Zeilenindex-Array mehrfach
hintereinander denselben Eintrag, prziser formuliert so oft hintereinander wie die entsprechende Zeile
Nicht-Null-Eintrge enthlt. Die Idee des CSR-Formats (engl. compressed sparse row)
1
ist es nun, die-
se Informationen komprimiert abzuspeichern, d.h. nur noch die Indices eines Zeilenwechsels in der
Matrix werden explizit notiert. Wie wir sehen werden, erlaubt uns dieses Format auerdem, in der zu-
gehrigen SpMV-Operation die Hlfte der indirekten Speicherzugriffe zu eliminieren (d.h. durch direkte
Speicherzugriffe zu ersetzen), die fr die schlechte erwartete Hardware-Efzienz verantwortlich sind.
Das CSR-Format setzt zunchst voraus, dass die Nummerierung der Nicht-Null-Elemente der Matrix
zeilenweise erfolgt. Die beiden Arrays data und col der Lnge NNZ werden unverndert aus dem ent-
sprechenden Spezialfall des COO-Formats bernommen. Das Zeilenindex-Array row hat nun nur noch
die Lnge N +1 und speichert den Index in den beiden vorherigen Arrays, der mit einem Zeilenwechsel
in der Matrix korrespondiert, konkret den Index des ersten Eintrags einer jeden neuen Zeile. Zustz-
lich wird als letzter Eintrag in diesem Array der Wert NNZ abgespeichert, dies vereinfacht spter den
SpMV-Algorithmus.
Wir verdeutlichen das Format am gleichen Beispiel wie in Abschnitt 2.3.2:
_
_
_
_
1 7 0 0
0 2 8 0
5 0 3 9
0 6 0 4
_
_
_
_
data = [1, 7, 2, 8, 5, 3, 9, 6, 4]
row = [0, 2, 4, 7, 9]
col = [0, 1, 1, 2, 0, 2, 3, 1, 3]
Die Matrix-Assemblierung ist in diesem Format etwas komplizierter, da vorab bestimmt werden muss,
wie viele Nicht-Null-Eintrge jede Zeile enthalten wird. Dafr ist die Durchfhrung von Matrix-Vektor-
Operationen sehr intuitiv. In einer Schleife ber alle Eintrge des Ergebnisvektors wird fr jede Zeile
das entsprechende dnn besetzte Skalarprodukt aus Matrixzeile und den zugehrigen Eintrgen im Ko-
efzientenvektor berechnet, vgl. Algorithmus 2.6. Dieses Vorgehen ist vollkommen analog zum dichtbe-
setzten Fall, mit dem einzigen Unterschied dass die Skalarprodukte nun auf dnn besetzten Zeilen- und
Spaltenvektoren basieren.
Algorithmus 2.6. (SpMV im CSR-Format)
for (int r=0; r<N; r++)
gamma = 0.0;
for (int c=row[r]; c<row[r+1]; c++)
gamma += data[c]
*
x[col[c]];
y[r] = gamma;
Diskussion Wie an Algorithmus 2.6 einfach zu sehen ist, sind nun lediglich die Lesezugriffe auf den
Koefzientenvektor indirekt. Dies ist der Preis, den wir dafr bezahlen mssen, dass wir fr dieses Spei-
cherformat keinerlei Annahmen an die Besetzungsstruktur getroffen haben; und als Ausblick auch in-
hrent fr alle Formate fr beliebige Besetzungsstrukturen. Alle anderen Speicherzugriffe, insbesondere
die Schreibzugriffe auf den Ergebnisvektor, erfolgen vollstndig konsekutiv, d.h. auf kontinuierlich im
Speicher angeordnete Daten und somit optimal. Durch die Einfhrung der Hilfsvariable gamma haben
wir zudem die Initialisierungsphase vermieden. Da die Schreibzugriffe auf den Ergebnisvektor nun nur
noch vom aktuellen Schleifenindex abhngen, ist zudem eine Parallelisierung durch die Partitionierung
1
In der Literatur ist dieses Format oft auch auch als CRS (compressed row storage) bezeichnet.
24 KAPITEL 2. GRUNDLAGEN
des Indexbereichs r=0,...,N-1 mit k < N Prozessen die jeweils einen kontinuierlichen Indexbereich
bearbeiten trivial mglich.
Varianten des CSR-Formats In vielen Anwendungen ist eine zugrundeliegende zeilenweise Numme-
rierung der Matrix nicht optimal, oder Algorithmen bentigen schnelleren Zugriff auf einzelne Teile der
Matrix. Aus diesen und weiteren Grnden wurden viele Modikationen des CSR-Formats entwickelt,
von denen wir in der folgenden Liste exemplarische Vertreter zusammenstellen.
CSC (engl. compressed sparse column) ist ein Analogon des CSR-Formats, das auf einer spaltenwei-
sen Nummerierung der Matrix basiert. Die notwendigen nderungen am SpMV-Algorithmus sind
trivial.
MSR (engl. modied sparse row) ist eine leicht permutierte Variante des CSR-Formats. In vielen itera-
tiven Verfahren wird die Diagonale einer Matrix oft separat bentigt. Man knnte nun ein zustzli-
ches Index-Array einfhren um die Indices der Diagonalelemente explizit abzuspeichern, oder die
entsprechenden Eintrge selbst zustzlich konsekutiv gespeichert vorzuhalten. Diese Varianten er-
hhen jedoch wieder die Redundanz des Formats. Aus diesem Grund basiert das MSR-Format auf
der Konvention, in den ersten N Eintrgen des Daten-Arrays die Diagonalelemente zu speichern
und erst danach die Nicht-Null-Elemente aller Nebendiagonalen (diese wiederum zeilenweise an-
geordnet). Die Zeilen- und Spaltenindex-Arrays werden entsprechend angepasst. Man beachte,
dass der kontinuierliche Speicherzugriff auf die Matrixeintrge in der SpMV-Operation dabei er-
halten bleibt.
MSC ist das Analogon des MSR-Formats fr eine spaltenweise Nummerierung.
ELL ist die Abkrzung fr ELLPACK, ein numerisches Softwarepaket in dem das nach ihm benannte
Speicherformat erstmals vorgestellt wurde. Es erlaubt die Vektorisierung der inneren Schleife und
ist zudem gut fr eine Implementierung auf GPUs geeignet. Zustzlich zur zeilenweisen Numme-
rierung wird hierbei angenommen, dass die Zahl der Nicht-Null-Eintrge pro Zeile konstant ist,
und jede Zeile wird mit dieser festen Lnge abgespeichert. Zeilen mit weniger Eintrgen werden
mit explizit abgespeicherten Nullen aufgefllt.
2.3.4 Das DIA-Format
Abschlieend betrachten wir noch ein Datenformat fr Bandmatrizen. Bandmatrizen sind Matrizen, in
denen sich die Nicht-Null-Eintrge auf wenige Bnder (Diagonalen) verteilen, oder in denen sich alle
Nicht-Null-Eintrge auf einen Bereich geringer Bandbreite, d.h. Abstand zur Hauptdiagonalen, vertei-
len. Das DIA-Format speichert nun alle Bnder hintereinander ab, wobei Nebendiagonalen mit Nullen
von unten oder von oben aufgefllt werden, so dass alle Bnder die gleiche Lnge haben. Das Daten-
Array besteht also aus einem Array der Lnge Nb, wobei b die Anzahl der Bnder bezeichnet. In einem
zustzlichen Array der Lnge b werden die Offsets der Bnder gespeichert, wobei die Hauptdiagona-
le den Offset 0 erhlt, untere Nebendiagonalen negative Offsets und obere Nebendiagonalen positive
Offsets.
Wir verdeutlichen das Format am gleichen Beispiel wie in den vorherigen Abschnitten, dabei numme-
rieren wir die Bnder von links unten nach rechts oben:
_
_
_
_
1 7 0 0
0 2 8 0
5 0 3 9
0 6 0 4
_
_
_
_
data = [0, 0, 5, 6, 1, 2, 3, 4, 7, 8, 9, 0]
offset = [2, 0, 1]
2.3. DNN BESETZTE MATRIZEN 25
In der Literatur nden sich viele Varianten der SpMV-Operation in diesem Format, wir prsentieren hier
eine Variante die unserer Meinung nach mglichst optimal ist, da sie die Anzahl der Speicherzugriffe
minimiert. In einer Schleife ber alle Eintrge des Ergebnisvektors berechnen wir wieder pro Zeile ein
dnn besetztes Skalarprodukt, und stellen ber das Offset-Array und geschickte Indexarithmetik sicher,
dass der Zugriff auf die Bnder mit den Eintrgen der entsprechenden Zeile korrespondiert, vgl. Algo-
rithmus 2.7.
Algorithmus 2.7. (SpMV im DIA-Format)
for (int r=0; r<N; r++)
gamma = 0.0;
for (int diag=0; diag<numDiags; diag++)
diagOffset = offset[diag];
gamma += data[N
*
diag + r]
*
x[r + diagOffset];
y[r] = gamma;
Diskussion Da die Schreibzugriffe auf den Ergebnisvektor wieder nur vom Index der ueren Schleife
abhngen, ist eine Parallelisierung ebenso einfach mglich wie im CSR-Format. Auerdem sind die-
se Speicherzugriffe optimal im Bezug auf Cachezeilen. Gleiches gilt fr die Zugriffe auf die Matrix-
Eintrge, in einer Iteration der inneren Schleife werden zwar Daten aus allen Bndern geladen, aber in-
nerhalb jedes Bands wird mit Inkrement eins ber die entsprechende Cachezeile iteriert, der Index r ist
additiv in der Addressberechnung. Der Zugriff auf den Koefzientenvektor ist erfolgt analog, sequentiell
in jedem Indexbereich, der zu einem Matrixband gehrt. Es besteht moderat hohes Wiederverwendungs-
potential wenn die Bandbreite der Matrix nicht zu gro ist. Insbesondere wenn es keine groen Lcken
zwischen den Matrixbndern gibt, bietet das Format automatisch eine hohe Lokalitt. Mit einer gehri-
gen Portion Index-Arithmetik in der Implementierung der SpMV-Operation kann die Lokalitt in diesem
Format dramatisch erhht werden, vgl. Turek et al. [29] und die dort gegebenen Referenzen.
Zuletzt ist noch zu klren, wie mit den Zugriffen auf im Koefzientenvektor nicht existierende Eintrge
umgegangen werden soll, bspw. fr Zugriffe mit negativen Indices. Eine if-Konstruktion verbietet sich
aus Efzienzgrnden. Was oft in der Praxis eingesetzt wird ist eine Variante, die den Koefzientenvektor
um die notwendige Anzahl Nullen ergnzt und den Startindex 0 danach per Zeiger-Arithmetik ver-
schiebt. Alternativ kann die uere Schleife ausgerollt werden, indem die Iterationen zu Beginn und zum
Ende aus der Schleife herausgezogen werden, die mit um Nullen ergnzten Bndern korrespondieren: In
diesen Iterationen werden dann in der inneren Schleife die entsprechenden Bnder nicht verwendet. Am
Beispiel der Systemmatrix fr unser Modellproblem sind dies gerade die ersten und letzten

N vielen
Iterationen der Schleife.
26 KAPITEL 2. GRUNDLAGEN

También podría gustarte