Matrizenmultiplikation. Matrizenmultiplikation. Multiplikation nach Winograd. Multiplikation nach Winograd. Multiplikation nach Winograd

Matrizenmultiplikation Matrizenmultiplikation Standardalgorithmus: Wozu? A = (aij ), • Geometrie: Matrix = lineare Abbildung Matrixprodukt = Hint...
Author: Elizabeth Fuchs
26 downloads 0 Views 191KB Size
Matrizenmultiplikation

Matrizenmultiplikation Standardalgorithmus:

Wozu?

A = (aij ),

• Geometrie:

Matrix = lineare Abbildung Matrixprodukt = Hintereinanderausführung

• Graphen:

Matrix = Adjazenzmatrix Multiplikation z.B. für transitive Hülle

• Signale:

Filter, Diskrete Fourier Transformation

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

B = (bij ),

C = AB = (cij )

n

wobei: cij = ∑ aik bkj k =1

n Multiplikationen je Matrixelement und n-1 Additionen je Element Gesamtaufwand ist n 3 Multiplikationen und n 2 (n − 1) Additionen, also O (n 3 ) Universität Karlsruhe (TH)

Folie 12.1

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.2

Multiplikation nach Winograd j

Multiplikation nach Winograd

Π Π Π

n

ci , j = ∑ ai , k bk , j

i

k =1

n/2

ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j )

+

k =1

n/2

ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j k =1



+ ai , 2 k −1ai , 2 k + b2 k , j b2 k −1, j − ai , 2 k −1ai , 2 k − b2 k , j b2 k −1, j )

k =1

k =1

k =1

n/2

∑ (a

ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − ∑ ai , 2 k −1ai , 2 k − ∑ b2 k , j b2 k −1, j

=

k =1 n/2

ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − k =1

Universität Karlsruhe (TH)

Ai



Bj

k =1 n/2

Ai = ∑ ai , 2 k −1ai , 2 k k =1

+ b2 k , j ) ⋅ (ai , 2 k + b2 k −1, j ) a

i , 2 k −1 i , 2 k

Ai

) + (ai , 2 k −1b2 k −1 ) + (b2 k , j ai , 2 k ) + (b2 k , j b2 k −1, j ) Bj

= ci , j + Ai + B j

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Universität Karlsruhe (TH)

Folie 12.3

Multiplikation nach Winograd

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.4

Matrixmultiplikation nach Strassen Entwurf eines Teile-und-herrsche-Algorithmus:

Aufwandsabschätzung für Winograds Algorithmus: n/2

i , 2 k −1

∑ (a k =1

n/2

B j = ∑ b2 k −1, j b2 k , j

k =1

k =1

n/2

Σ

ci , j = ∑ (ai , 2 k −1b2 k −1, j +ai , 2 k b2 k , j )

ci , j = ∑ ((ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − ai , 2 k −1ai , 2 k − b2 k , j b2 k −1, j ) n/2

Π Π Π

k =1

n/2

n/2

n/2

n

ci , j = ∑ ai ,k bk , j

Σ

n/2

1 benötigt n Multiplikationen. 2

Berechnung eines Ai = ∑ ai , 2 k −1ai , 2 k k =1 Ebenso B j . Ai und B j müssen nur einmal berechnet werden => Aufwand für alle Ai und B j ist n 2 Multiplikationen.

A11 A12 . A21 A22   A11   

  +  

B11 B12 B21 B22

A12    + A   21

=

C11 C12 C21 C22

  +  

    B11  ⋅ A22    

  +  

  +  

A12 B22    + A B   21 11

  +  

B12    + B   21

  +  

  B22  

n/2

ci , j = ∑ (ai , 2 k −1 + b2 k , j )(ai , 2 k b2 k −1, j ) − Ai − B j

 A11 B11  

k =1

2 n benötigt n ⋅ Multiplikationen, insgesamt also 2

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

3

n + n2 2 Folie 12.5

  +  

A11B12   A12 B21 +  

C11   Universität Karlsruhe (TH)

  +  

C12    + C   21

  +  

  + A21B12   A22 B21

  +  

 A22 B22 

 C22 

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.6

1

Multiplikation nach Strassen

Multiplikation nach Strassen Aufwandsabschätzung:

Teile-und-herrsche-Algorithmus macht also aus 1 Multiplikation von n×n Matrizen 8 Multiplikationen von n/2×n/2 Matrizen

T (n) = 8T (n / 2) + O(n 2 ) = O( n 3 )

(wir lösen die Problematik für ungerade n ähnlich wie beim Potenzieren)

Basisfall: Multiplikation zweier 2×2 Matrizen:  a11 a  21

a12  b11 b12   a11b11 + a12b21 ⋅ = a22  b21 b22  a21b11 + a22b21

= O( n 3 ) Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.7

Unter welchen Umständen Fehler) • schlechtere Parallelisierbarkeit • erhöhter Programmieraufwand (Verschwendung von Informatikerzeit)

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.16

Matrixmultiplikation nach Strassen  a b   e g   r s   ae + bf ag + bh   c d  ⋅  f h  =  t u  =  ce + df cg + dh          Standardalgorithmus:

e f g h

a b c d

ae+bf=r

ae+bf=r

Informatik II Sommersemester 2001, Dr. Ivica Rogina

e f g h

a b c d

e f g h

ag+bh=s

a b c d

e f g h

ce+df=t

a b c d

e f g h

cg+dh=u

4 mal 2 = 8 Multiplikationen Folie 12.17

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.18

3

Matrixmultiplikation nach Strassen Andere Terme (mit je einer Multiplikation) könnten z.B. sein:

Matrixmultiplikation nach Strassen Term

Multiplikationen

P1 = ag − ah = a ( g − h) a b c d

e f g h

a b c d

(a+b)h

e f g h

a b c d

1

e

e f g h

Informatik II Sommersemester 2001, Dr. Ivica Rogina

P2 = ah + bh = (a + b)h

Folie 12.19

Darstellung

e

1

f

g

d

Multiplikationen

e 0

c

d

d

Multiplikationen

Darstellung

f

g

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Term

Multiplikationen

h

Folie 12.22

Darstellung

h

e

f

g

h

a

b

− P3 = −ce − de

0

b

c

c

d

d

Informatik II Sommersemester 2001, Dr. Ivica Rogina

g

Matrixmultiplikation nach Strassen

a 1

f

a

c

Folie 12.21

Folie 12.20

Darstellung

b

e

Universität Karlsruhe (TH)

Term

b

Informatik II Sommersemester 2001, Dr. Ivica Rogina

P3 = ce + de = (c + d )e

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Matrixmultiplikation nach Strassen

− P2 = − ah − bh

Matrixmultiplikation nach Strassen Term

Universität Karlsruhe (TH)

h

a

Universität Karlsruhe (TH)

h

c

d(f-e)

Multiplikationen

g

b

a(g-h)

Matrixmultiplikation nach Strassen Term

f

a

Fragestellung: Ist es möglich, Terme zu finden, die alle benötigten Produkte abdecken, aber zusammen weniger als 8 Multiplikationen benötigen? Universität Karlsruhe (TH)

Darstellung

Folie 12.23

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.24

4

Matrixmultiplikation nach Strassen Term

Multiplikationen

Darstellung e

P4 = df − de = d ( f − e)

f

g

e

b

b

c

1

Folie 12.25

Darstellung e

f

g

Universität Karlsruhe (TH)

g

h

d

Term

Multiplikationen

Darstellung

h

e a

b

b

c

c

d

d

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.27

Multiplikationen

Folie 12.26

Matrixmultiplikation nach Strassen

a

Matrixmultiplikation nach Strassen Term

1

Informatik II Sommersemester 2001, Dr. Ivica Rogina

P7 = ae + ag − ce − cg = (a − c )(e + g ) Universität Karlsruhe (TH)

f

c

P5 = ae + ah + de + dh = (a + d )(e + h)

Multiplikationen

1

Darstellung

a

Informatik II Sommersemester 2001, Dr. Ivica Rogina

P6 = bf + bh − df − dh = (b − d )( f + h)

Multiplikationen

a

Matrixmultiplikation nach Strassen Term

Term

h

d

Universität Karlsruhe (TH)

Matrixmultiplikation nach Strassen

Universität Karlsruhe (TH)

f

g

h

1

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.28

Matrixmultiplikation nach Strassen

Darstellung

r = ae + bf = P5 + P4 − P2 + P6 e

f

g

h

a b c d

− P7 = − ae − ag + ce + cg Universität Karlsruhe (TH)

0

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.29

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.30

5

Matrixmultiplikation nach Strassen

Matrixmultiplikation nach Strassen

s = ag + bh = P1 + P2

t = ce + df = P3 + P4

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.31

Matrixmultiplikation nach Strassen u = cg + dh = P5 + P1 − P3 − P7

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.32

Rechnen mit Booleschen Matrizen Boolesche Matrizen sind z.B: xor

• Schalttafeln für elektronische Gatter • Adjazenzmatrizen für Graphen • schwarz-weiße Pixelbilder • Definitionen beliebiger Relationen • etc.

0 1 0 0 1 1 1 0

1

2 3

4

0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0

Multiplikation von Booleschen Matrizen entspricht Hintereinanderausführung der durch sie definierten Relation. Erinnern: Berechnung der transitiven Hülle eines Graphen. Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.33

Rechnen mit Booleschen Matrizen Boolesche Operatoren und Grundrechenarten: AND entspricht Multiplikation



OR entspricht Addition

0 0 0

0 0 1

1 0 1

1 1 1

Was aber ist mit Subtraktion?

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.34

Multiplikation Boolescher Matrizen bei transitiver Hülle hatten wir:

+ 0 1

0 1

Universität Karlsruhe (TH)

(i, j ) ∈ H ⇔ Aijn ≠ 0

Kante (i,j) ist in Hülle, wenn die n-te Potenz der Adjazenzmatrix (mit Elementen aus N) an der stelle i,j nicht 0 ist. D.h. wir können die Booleschen Werte 0 und 1 wie natürliche Zahlen behandeln, aber interpretieren am Ende =0 ist falsch ≠0 ist wahr

0+1=1 und 1+1=1

Leichte Modifikation für Strassen-Algorithmus: Rechne im Ring Modulo (n+1), d.h. kein Überlauf, Subtraktion geht. Also obere Schranke ist O(n 2.81 ) . Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.35

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.36

6

Multiplikation Boolescher Matrizen

Multiplikation Boolescher Matrizen j n

Gesehen:

Fragen:

Boolesche Matrizenmultiplikation kann mit Strassen-Algorithmus in O (n 2.81 ) berechnet werden.

Multiplikationsschema: cij = ∑ aik bkj

Aber Rechnen mit Natürlichen Zahlen statt Bits ist Overkill.

D.h. cij ist das Skalarprodukt zweier Vektoren

Kann man irgendwie ausnutzen, daß die Operationen mit Bits und Bitvektoren einfacher zu machen sind?

k =1

i

Ai = (ai1 ,..., ain ) und B j = (b1 j ,..., bnj ) Τ auch genannt inneres Produkt (inner product, dot product). In Booleschen Operationen ausgedrückt:

Kann man ausnutzen, daß fast alle CPUs mehrere Bits auf einmal manipulieren können?

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Multiplikation Boolescher Matrizen Angenommen, die Wortbreite (Anzahl gleichzeitig verarbeitbarer Bits) unserer CPU sei mindestens n, dann können wir 0 falls ∀k : pk = 0 cij =  1 falls ∃k : pk = 1

pk = aik bkj durch ein AND berechnen also

0 falls P = 0 cij =  1 falls P ≠ 0

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Wenn CPU-Wortlänge = k, dann inneres Produkt der Länge n in O(n/k) berechenbar. =>

Aufwand für n×n Matrixmultiplikation (d.h. n 2 innere Produkte) ist n 3 / k .

Wenn k=logn (nicht untypisch, mit 8-Bit Wortlänge wären so 256×256 Matrizen machbar), dann ist der Aufwand für eine Boolsche n×n Matrixmultiplikation O(n3/logn).

Informatik II Sommersemester 2001, Dr. Ivica Rogina

a1

a2 ... an



b1 b2 ... bn

=

a1

a2 ... ak



b1 b2 ... bk



ak +1



bk +1 bk + 2 ... b2 k



bn − k +1 bn − k + 2 ... bn

ak + 2 ... a2 k an − k + 2 ... an

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.40

Multiplikation Boolescher Matrizen Vorberechnen aller inneren Produkte, und Ablegen in einer Tabelle: k=2 00 01 10 11

0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 1

Speicheraufwand: O(2 2 k ) = O(n) für k = (log n) / 2 Rechenaufwand: O(k 2 2 k ) = O(n log n) für k = (log n) / 2

D.h.: wenn wir innere produkte der Länge n berechnen wollen, legen wir uns in O(nlogn) Zeit eine Tabelle mit O(n) Einträgen für innere Produkte der gewählten Länge k=(logn)/2 an. (Im obigen Beispiel wäre n=16.)

Frage: Was aber wenn wir uns nicht auf die Fähigkeit der CPU, k Bits gleichzeitig mit AND zu verknüpfen verlassen können? Universität Karlsruhe (TH)

Es ist zu erwarten, daß die Wortlänge k der CPU < n ist. Was dann?

=> Aufwand ist O(n/k) Folie 12.39

Multiplikation Boolescher Matrizen gesehen:

Folie 12.38

Wir zerlegen ein inneres Produkt der Länge n in n/k innere Produkte der Länge k.

d.h. ein inneres Produkt wäre in O(1) berechenbar. Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Multiplikation Boolescher Matrizen

⊕ ... ⊕ an − k +1

durch einen Vergleich mit 0 berechnen

P = Ai AND B j

Universität Karlsruhe (TH)

Folie 12.37

00 01 10 11

Universität Karlsruhe (TH)

0 falls ∀k : pk = 0 cij =  1 falls ∃k : pk = 1

pk = aik bkj

Alternativ: wähle k=logn, dann steigt Speicheraufwand auf O(n 2 ) , aber k doppelt so groß => 2×weniger Operationen später. Frage: kann man O(n 2 ) Speicher effizienter nutzen? Folie 12.41

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.42

7

Multiplikation Boolescher Matrizen

Multiplikation Boolescher Matrizen

Andere Schreibweise für Matrixmultiplikation:

n

A ⋅ B = ∑ AC (r ) ⋅ BR (r )

funktioniert nicht nur für einzelne Spalten (Zeilen), sondern auch für Gruppen von diesen:

r =1

.

=

Matrixprodukt zweier Vektoren

BR (r )

Spaltenvektor

Zeilenvektor

.

( AC (r ) ⋅ BR (r )) ij = ( AC (r )) i ⋅ ( BR (r )) j = air ⋅ brj

leicht zu sehen:

BR (r..s )

AC (r..s )

AC (r ) ⋅ BR (r )

AC (r )

=

A1.... An / k Leicht zu sehen:

n

n/k

A ⋅ B = ∑ AC (r ) ⋅ BR (r )

A ⋅ B = ∑ Ai Bi

r =1

i =1

mit A = [ A1 A2 ... An / k ], B = [ B1 B2 ...Bn / k ]

also Ai = AC (k (i − 1) + 1..ki), Bi = BR (k (i − 1) + 1..ki) Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Universität Karlsruhe (TH)

Folie 12.43

Multiplikation Boolescher Matrizen

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.44

Multiplikation Boolescher Matrizen

A ⋅ B = ∑ Ai Bi = ∑ Ci

Feststellung: Es gibt maximal 2 k verschiedene Kombinationen (Potenzmenge) von Reihen aus Bi .

Frage: wie berechnet man Ci am schnellsten?

Frage: Lohnt es sich, die Summe jeder Kombination vorzuberechnen?

n/k

n/k

i =1

i =1

Beispiel:

Ai

0 0 1 1 1 1 1 0

0 1 0 0 1 1 0 0

1 1 0 1 0 1 0 1

Bi

1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0

= Ci

erste Zeile von C=letzte von B, weil erste von A=001

=

0 1 1 1 1 1 1 0

1 1 1 1 1 1 1 1

1 1 0 1 0 1 0 1

1 1 1 1 1 1 1 1

0 1 0 0 1 1 0 0

0 1 1 1 1 1 1 0

0 0 1 1 1 1 1 0

0 1 0 0 1 1 0 0

Bi

=

letzte Zeile von C=erste von C, weil letzte von A=erste von A

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.45

Multiplikation Boolescher Matrizen Rechenaufwand für Vorberechnung aller Kombinationssummen: Beginne mit Kombination 00...0 (Summe ist trivialerweise 00...0), Induktion: 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

Aufwand:

Berechne Kombination, die der Dualdarstellung von i entspricht. Es gibt eine Zahl kleiner i, die sich von i nur durch ein Bit unterscheidet (z.B. die ohne die erste 1 in i). Nimm diese und addiere die der ersten 1 entsprechende Reihe von Bi . Addition von n Bits für jede der 2k Kombinationen => O(n ⋅ 2k )

Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.47

1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 1 0 0 0 0

Speicheraufwand:

k

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

0 0 1 1 1 1 1 1

0 1 0 1 1 1 1 1

0 1 0 1 0 1 0 1

0 1 1 1 1 1 1 1

0 0 1 1 0 0 1 1

0 0 1 1 1 1 1 1

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

2k

O(2 k ⋅ 2 k ) = O(n 2 ) für k = log n Rechenaufwand: ? Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.46

Multiplikation Boolescher Matrizen Algorithmus der vier Russen gegeben: Boolesche n×n Matrizen A und B, Wortlänge k (teilt n) gesucht: C=AB A = [ A1 A2 ... An / k ], B = [ B1 B2 ...Bn / k ] initialisiere C=0 für alle i=1..n/k k berechne alle 2 Summen von Kombinationen aus Reihen von Bi für alle j=1..n addiere zu C die Summe der Kombination, die der j-ten Zeile von Ai entspricht Aufwand: n/k Multiplikationen für Ai ⋅ Bi mit jeweiligem Aufwand von O(n 2 ) und O(n ⋅ 2 k ) fürs Erstellen der Kombinationentabelle, gesamt also: O(n 3 / k + 2 k ⋅ n 2 / k ) = O(n 3 / log n) für k = log n Universität Karlsruhe (TH)

Informatik II Sommersemester 2001, Dr. Ivica Rogina

Folie 12.48

8

Suggest Documents