parallelisierbar ist etwas, wenn es sinnvoll ist mehrere Prozessoren einzusetzen
O Problematisch!
EREW Suche: O(log p) + O(log
n
) = O(log n) Time
p
geht auch mit nur einem Prozessor in O(log n) Zeit
würde bedeuten: nicht sinnvoll zu parallelisieren!
2. Ansatz
Wann geht es hinreichend schnell?
polylogarithmische Zeit
polynomial viele Prozessoren
P theoretisch interessanter
Definition:
NC
Nick's Class
ein Problem ist in NC ↔ wenn es gelöst werden kann
mit O(logk n) Zeit
und O(nk) Prozessoren für festes k
aber: dieser Ansatz ist eine Notlösung!
EREW-Suche ist in NC, aber dennoch nicht sinnvoll parallelisierbar
Þ Wenn es in NC ist, muss es nicht zwangsweise parallelisierbar sein
aber wenn es nicht in NC ist, ist es sicher hochgradig nicht parallelisierbar
Þ vor allem für Probleme interessant, die nicht in NC sind
Problem: gibt es Probleme, die nicht in NC sind?
Definition P:
P ist die Menge aller Entscheidungsprobleme, für die es einen Polynomialzeit-Algorithmus gibt
= die Klasse der Sprachen, die in polynomieller Zeit entscheidbar sind auf einer
Turing-Maschine
Sprache
Definition:
L ist Sprache über Σ L Í Σ*
Σ @ Alphabet
p-vollständigkeit
sei L Î P
Definition P:
P ist die Menge aller Entscheidungsprobleme, für die es einen Polynomialzeit-Algorithmus gibt
= die Klasse der Sprachen, die in polynomieller Zeit entscheidbar sind auf einer
Turing-Maschine
L ist P-vollständig "L1 Î P: L1 ≤NC L
≤NC bedeutet:
rechter Ausdruck ist schwerer zu parallelisieren als linker
L1 ≤NC L2 $ Algorithmus f, der für alle möglichen Inputs w für L1 einen möglichen Input f(w) für L2 berechnet, mit der Eigenschaft, dass w Î L1 f(w) Î L2 und f ist NC-berechenbar
f ist NC-berechenbar, wenn Funktionswerte in O(logk n) Time mit O(nk) Prozessoren berechenbar
L1, L2 sind Sprachen, w bzw. f(w) sind Wörter über den entsprechenden Alphabeten!
sei etwa L1 Î Σ1*, L2 Î Σ2*
→"w ÎΣ1* wird f(w) ÎΣ2* gebildet: w ÎL1 f(w) Î L2
kurz: es existiert ein NC-Alg. f: f transformiert jeden möglichen Input w für L1 in einen solchen von L2: w ÎL1 f(w) ÎL2
Beweis:
prüfe für jedes Wort, ob es in L1 ist
dazu: ordne wÎL1 dem f(w) zu
(f von L1 ≤NC L2 genommen)
da L2 ÎNC, kann man "leicht" feststellen, ob f(w) Î L2 oder nicht
wenn ja Þ w Î L1 wenn nein Þ w Ï L1
Anmerkung: dieser Reduktionssatz ist Grundlage für relative Komplexitätsbeweise
Parallelisierbarkeit für Sprachen
Def:
Ein einem Berechnungsproblem zugeordnetes Entscheidungsproblem heiße relevant, wenn aus der Lösung des Berechnungsproblems die Lösung des Entscheidungsproblems direkt folgt
Beispiel:
G sei kantenmarkierter gerichteter
Graph
start (Start-)Knoten von G
Berechnungsproblem: DFS (geordnete Tiefensuche, depth first search)
Tiefensuche
gewünschter Output: Reihenfolge der Knoten bei Tiefensuche, beginnend mit v
Frage: kann man dieses Problem parallel berechnen, oder ist es Î NC?
Þ relevantes Entscheidungsproblem:
Gleicher Input
G
start
zwei weitere Knoten u,v Î V(G)
Frage: kommt u in v vor, oder v in u?
Seien L1, L2 Sprachen mit L1 ≤NC L2
Aussagen über NC:
Fakt: die Hintereinanderausführung zweier NC-Algorithmen ist ein NC-Algorithmus
Folgerung: ≤NC ist eine transitive Relation
Reduktionssatz:
seien L1 ≤NC L2
dann gilt:
wenn L1 Ï NC ist, so ist auch L2 Ï NC
wenn L2 Î NC Þ L1 Î NC
Definition: CVP
circuit value problem
Schaltkreisproblem
C ist Schaltkreis C ist eine Folge <g1, g2,...> : "i: gi ist entweder Inputvariable oder gi = gj Ú gk oder gi = gj Ù gk oder gi = Ø gj für alle j,k ≠ i