PRAM-Modelle
- EREW PRAM (Exclusive Read Exclusive Write). Dies ist das restriktivste Modell von allen. In keinem Schritt dürfen zwei Prozessoren auf die gleiche Zelle zugreifen, weder lesend noch schreibend.
- CREW PRAM (Concurrent Read Exclusive Write). Das ist das übliche Modell,
das wir bisher verwendet haben. Es ist erlaubt, dass mehrere Prozessoren gleichzeitig die
gleiche
Speicherzelle lesen. Wenn allerdings ein Prozessor in eine Zelle schreiben will, so
darf in diesem Schritt kein anderer Prozessor auf diese Zelle zugreifen.
Vorsicht. Der Algorithmus muss garantieren, dass es nie zu unerlaubten Konflikten kommt. Falls also z.B. manchmal zwei Prozessoren auf die gleiche Zelle schreiben wollen, dann gilt dieser Algorithmus als inkorrekt für eine CREW PRAM. Selbst wenn das Ergebnis nicht vom Ausgang dieser konfligierenden Schreibsituation abhängt.
Übungsaufgabe Zeigen Sie, wie EREW PRAMs und CREW PRAMs mit Schaltkreisen zusammenhängen.
- Zeigen Sie, dass ein Schaltkreis (mit beliebig Gates wie Max oder Minmax oder Summe, nicht nur Booleschen) mit $m$ Gates simuliert werden kann durch eine CREW PRAM mit $m$ Prozessoren. Gehen Sie dabei aus, dass man für ein Gate $i$ sehr leicht berechnen kann, woher die Input-Kabel kommen.
- Welche Bedingung sollte ein Schaltkreis erfüllen, so dass Sie ihn ohne Probleme durch eine EREW PRAM simulieren können?
Übungsaufgabe Überlegen Sie sich, wie man eine CREW PRAM auf einer EREW PRAM simuliert. Gehen Sie wie folgt vor:
- Betrachten Sie das Szenario, dass alle $n$ Prozessoren in diesem Schritt die gleiche Speicherzelle lesen wollen. Zeigen Sie, wie Sie dies mit $O(\log n)$ EREW-Schritten ohne Lesekonflikte simulieren können.
- Betrachten Sie nun den allgemeinen Fall. Es gibt $m$ Speicherzellen, und jeder Prozessor will eine davon lesen. Wie lösen Sie die Lesekonflikte auf? Seien Sie verschwenderisch mit Speicherplatz und gönnen sich für Ihren EREW-Algorithmus $O(nm)$ Speicherplatz!
- CRCW PRAM (Concurrent Read Concurrent Write). Dies ist das
stärkste Modell. Wir erlauben, dass mehrere Prozessoren gleichzeitig lesend sowie
schreibend auf eine Zelle zugreifen. In diesem Falle
müssen wir spezifizieren, was in so einem Falle geschieht, wie also der
Konflikt gelöst wird. Dies führt zu einer Vielzahl möglicher Untermodelle:
- Common. Gleichzeitige Schreiboperationen auf der gleichen Zelle sind nur erlaubt, wenn alle Prozessoren den gleichen Wert schreiben wollen. Der Algorithmus muss dies garantieren, ansonsten gilt er als inkorrekt.
- Arbitrary. Wenn mehrere Prozessoren in eine Zelle schreiben wollen, dann wird der "Sieger" beliebig bestimmt. Um als korrekt zu gelten, muss der Algorithmus für jede beliebige (auch gegnerische) Siegerbestimmungsstrategie erfolgreich sein.
- Priority. Wenn mehrere Prozessoren in eine Zelle schreiben wollen, dann gewinnt der Prozessor mit dem größten Index.
- Robust. No assumption is being made. Arbitrary value? No change? Special symbol? Some completely different garbage symbol? Algorithm must work for all possibilities.
- Tolerant. If more than one processor attempts to write, nothing is written. Gil and Matias do not mention whether the processors "see" that their attempt has been unsuccessful.
- Collision. If more than one processor attempts to write, a special collision symbol # is written.
- Collision+. Like Collision, but if all attempts are unanimous (same value), then that same value is being written into the cell.
Übungsaufgabe Überlegen Sie sich, wie man eine Priority CRCW PRAM (also das bisher stärkste Modell) auf einer EREW PRAM simuliert. Nehmen Sie sich $O(nm)$ Platz und gehen dabei vor wie in .
Übungsaufgabe Simulieren Sie eine Priority CRCW PRAM mit $n$ Prozessoren und $m$ Speicher auf einer CREW PRAM mit $n$ Prozessoren und $m + O(n)$ Speicherplatz, so dass jeder Schritt der Priority CRCW PRAM mit $O(\log n)$ EREW-Schritten simuliert wird!
Tip: Verwenden Sie Coles Mergesort-Algorithmus!
Übungsaufgabe Gehen Sie nochmal Valiants $O(\log \log n)$-Algorithmus für Max durch (Kapitel 3.3). Zeigen Sie, wie man ihn auf einer Common CRCW PRAM in $O(\log \log n)$ Zeit implementieren kann.
Dies sind die drei geläufigsten CRCW-PRAM-Modelle. Wir werden gleich weitere, "esoterischere" Modelle kennenlernen.
Maximum und Minimum in $O(1)$ auf einer Arbitrary CRCW PRAM
Valiants Algorithmus aus Kapitel 3.3 braucht $O(\log \log n)$ Schritte, um mit $n$ Prozessoren das Maximum eines Arrays der Länge $n$ zu finden - wenn man nur die Schritte zählt, in denen Vergleichsoperationen ausgeführt werden. Wenn wir alle Operationen zählen, so braucht er dann doch mehr. Auf gewissen PRAM-Modellen können wir ihn jedoch tatsächlich in $O(\log \log n)$ implementieren.
Übungsaufgabe Gegeben $n$ Prozessoren und ein Array aus $\sqrt{n}$ Elementen. Auf welchen PRAM-Modellen kann man das Maximum in $O(1)$ Schritten berechnen?
Tip. Gegeben $k$ Prozessoren und ein Array aus $k$ Booleschen Werten. Auf welchen PRAM-Modellen können Sie AND bzw. OR in $O(1)$ berechnen?
Übungsaufgabe Gehen Sie nochmal über Valiants Algorithmus aus Kapitel 3.3 und überlegen Sie sich, auf welchen PRAM-Varianten man den Algorithmus tatsächlich in $O(\log \log n)$ implementieren kann.
Im folgenden betrachten wir das Modell Collision. Sie können sich auch Arbitrary vorstellen, aber Collision ist etwas schwächer.
Theoren (Gil und Matias). Gegeben $n$ Prozessoren und ein Array aus $n$ Elementen. Auf einer Collision CRCW PRAM mit Randomisierung kann man damit das Maximum in $O(1)$ und Fehlerwahrscheinlichkeit $O\pfrac{1}{\sqrt{n}}$ berechnen.
Falscher Beweis. Wir wählen zufällig $\sqrt{n}$ Elemente aus und berechnen mit $n$ Prozessoren in $O(1)$ das Maximum. Nach geht dies auf einer Collision CRCW PRAM. Sei $x^*$ das Maximum dieser $\sqrt{n}$ Elemente. Wir markieren nun alle Elemente mit $x \lt x^*$ als eliminiert. Mit großer Wahrscheinlichkeit haben nicht mehr als $O(\sqrt{n})$ Elemente überlebt. In einer zweiten Runde können die $n$ Prozessoren also das Maximum der überlebendene Elemente in $O(1)$ berechnen.
\(\square\)Übungsaufgabe Entdecken Sie den Fehler im vorherigen "Beweis".
Problem FindMax (Bottom of page 140 of Gil and Matias). Given a set $\Phi$ of processors where each processor $P$ holds a value $\val(P)$, determine one processor $P^* \in \Phi$ with $\forall P \in \Phi:\ \val(P^*) \geq \val(P)$
Problem MultipleFindMax Solve $m$ instances of Findmax on anonymous sets $\Phi_1, \dots, \Phi_m$ of processors with $\sum_{i=1}^m |\Phi_i| \leq n$.
Gil and Matias do not require the $\Phi_i$ to be disjoint (at least they don't state it). If we assume that they are disjoint, I think we can view it as follows: every processor is given a color $\col(P)$ and a value $\val(P)$. We want to determine the "winner" for each color, i.e., compute ${\rm Winner}(c)$ for each color $c$ such that
\begin{align*} \forall \textnormal{ colors } c \ \forall \textnormal{ processors } P:\quad \col(P) = c \rightarrow \val(\textnormal{Winner}(c)) \geq \val(P) \ . \end{align*}If no processor has color $c$ then we set ${\rm Winner}(c) = \bot$. Note that $m$ (the number of colors) corresponds to the size of the memory. $\col(P) = c, \val(P) = v$ means that $P$ wants to write value $v$ into cell $c$. The memory might be much larger than the number of processors, so we cannot afford a processor for each color!