<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parallel_Random_Access_Machine</id>
	<title>Parallel Random Access Machine - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parallel_Random_Access_Machine"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parallel_Random_Access_Machine&amp;action=history"/>
	<updated>2026-05-14T17:44:30Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Parallel_Random_Access_Machine&amp;diff=258872&amp;oldid=prev</id>
		<title>imported&gt;Gerolsteiner flasche: /* growthexperiments-addlink-summary-summary:2|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parallel_Random_Access_Machine&amp;diff=258872&amp;oldid=prev"/>
		<updated>2024-09-26T16:58:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:2|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Als &amp;#039;&amp;#039;&amp;#039;Parallel Random Access Machine&amp;#039;&amp;#039;&amp;#039;, kurz &amp;#039;&amp;#039;&amp;#039;PRAM&amp;#039;&amp;#039;&amp;#039;, bezeichnet man in der [[Informatik]] einen [[Automat (Informatik)|Automaten]] zur Analyse [[Paralleler Algorithmus|paralleler Algorithmen]]. Es handelt sich um eine [[Registermaschine]], die um die Möglichkeit zur parallelen Verarbeitung von Befehlen erweitert wurde. Wie bei allen Registermaschinen-Modellen gibt es verschiedene Variationen der PRAM. Die allen Modellen gemeinsame Vorstellung besteht darin, dass mehrere [[Register (Computer)|Register]] gleichzeitig Berechnungen ausführen und das Ergebnis in [[Arbeitsspeicher|Speicherzellen]] ablegen können. Die PRAM dient u.&amp;amp;nbsp;a. in der [[Komplexitätstheorie]] zur Definition der Klasse [[NC (Komplexitätsklasse)|NC]] der effizient parallel [[entscheidbar]]en Probleme.&lt;br /&gt;
&lt;br /&gt;
== Beispiel für eine Realisierung ==&lt;br /&gt;
Auch wenn Registermaschinen im engeren Sinne nur einen sehr einfachen [[Befehlssatz]] unterstützen, lassen sich äquivalente Registermaschinen definieren, deren [[Computerprogramm|Programme]] in einer höheren [[Programmiersprache]] angegeben werden können. Die parallele Verarbeitung von Befehlen kann nun durch die Einführung einer neuen [[Anweisung (Programmierung)|Anweisung]] erfolgen, die etwa folgendermaßen aussieht:&lt;br /&gt;
&lt;br /&gt;
:for &amp;lt;Bedingung&amp;gt; &amp;#039;&amp;#039;&amp;#039;pardo&amp;#039;&amp;#039;&amp;#039; &amp;lt;Anweisungen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pardo steht für &amp;#039;&amp;#039;do in parallel&amp;#039;&amp;#039;. Ein Beispiel:&lt;br /&gt;
&lt;br /&gt;
:for i = 1 to 100 &amp;#039;&amp;#039;&amp;#039;pardo&amp;#039;&amp;#039;&amp;#039; x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; := 0&lt;br /&gt;
&lt;br /&gt;
Durch diese Anweisung werden 100 Speicherplätze gleichzeitig mit dem Wert 0 initialisiert. x kann beispielsweise als [[Feld (Datentyp)|Array]] betrachtet werden, dessen Felder mit 1 bis 100 indiziert sind. Die allgemeinere Schreibweise x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; sieht von solchen [[Implementierung]]sdetails ab. Das angegebene Beispiel ist freilich nicht von allzu hoher praktischer Bedeutung. Daher hier ein sinnvolleres Beispiel, das die Leistungsfähigkeit einer PRAM gut demonstriert:&lt;br /&gt;
&lt;br /&gt;
Gegeben sei eine Liste von n verschiedenen Werten, die unsortiert in den Speicherzellen x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; bis x&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; abgelegt sind. Wir suchen dasjenige x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;, das den größten Wert enthält. Diese Suche ist auf einer PRIORITY-CRCW-PRAM (siehe unten), die keine Aktivierung der Prozessoren erfordert, parallel überraschenderweise für beliebig große n &amp;#039;&amp;#039;in konstanter Zeit durchführbar&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
 for i=1 to n &amp;#039;&amp;#039;&amp;#039;pardo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; := 1&lt;br /&gt;
 for i,j=1 to n &amp;#039;&amp;#039;&amp;#039;pardo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     if x&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt; &amp;gt; x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&lt;br /&gt;
     then&lt;br /&gt;
         b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; := 0&lt;br /&gt;
     fi&lt;br /&gt;
 for i=1 to n &amp;#039;&amp;#039;&amp;#039;pardo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
     if b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1&lt;br /&gt;
     then&lt;br /&gt;
         m := i&lt;br /&gt;
     fi&lt;br /&gt;
&lt;br /&gt;
Nach der zweiten [[for-Schleife]] steht nur dann noch in b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; der Wert 1, wenn x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; das Maximum ist. In allen anderen b&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt; mit j≠i steht der Wert 0. Dasjenige i mit b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = 1 ist also der gesuchte Index und findet sich nach Ausführung des Programms in &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;. Das [[Größtes und kleinstes Element|Maximum]] in einer unsortierten Liste einer beliebigen Länge n lässt sich also mit konstantem Aufwand, also in [[Landau-Notation|O]](1) Zeit berechnen.&lt;br /&gt;
&lt;br /&gt;
== Unterschiedliche PRAM-Modelle ==&lt;br /&gt;
=== SIMD und MIMD-PRAMs ===&lt;br /&gt;
Die oben beschriebene pardo-Anweisung ermöglicht innerhalb eines Zeittaktes die gleichzeitige Ausführung eines bestimmten Befehles auf unterschiedlichen [[Variable (Programmierung)|Variablen]]. Derartige parallele Modelle bezeichnet man als &amp;#039;&amp;#039;Single Instruction Multiple Data&amp;#039;&amp;#039;-Modell oder kurz [[Flynnsche Klassifikation#SIMD (Single Instruction, Multiple Data)|SIMD]]. Sind innerhalb eines Zeittaktes auch unterschiedliche Befehle erlaubt, so spricht man von einem &amp;#039;&amp;#039;Multiple Instruction Multiple Data&amp;#039;&amp;#039;-Modell ([[Flynnsche Klassifikation#MIMD (Multiple Instruction, Multiple Data)|MIMD]]). Die pardo-Anweisung ist für ein solches Modell zu eng definiert.&lt;br /&gt;
&lt;br /&gt;
=== Gleichzeitige Lese- und Schreibzugriffe auf identische Speicherzellen ===&lt;br /&gt;
Es muss definiert werden, ob gleichzeitige Lese- und Schreibzugriffe auf identische Speicherzellen erlaubt sein sollen oder nicht. Der obige [[Algorithmus]] zur Maximumsuche benötigt beides: Innerhalb der zweiten pardo-Anweisung wird sowohl von verschiedenen [[Prozessor]]en gleichzeitig auf identische Speicherzellen x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; zugegriffen, um diese miteinander zu vergleichen, als auch gleichzeitig schreibend auf die Speicherzelle b&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; zugegriffen. Derartige Freiheiten möchte man nicht immer erlauben. Man unterscheidet daher:&amp;lt;ref&amp;gt;{{Literatur |Autor=Jaja, J. |Titel=Introduction to Parallel Algorithms |Seiten=14-15 |Online=https://www.cs.utah.edu/~hari/teaching/bigdata/book92-JaJa-parallel.algorithms.intro.pdf}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* CRCW PRAM: Concurrent Read, Concurrent Write – gleichzeitiger Lese- und Schreibzugriff möglich&lt;br /&gt;
* CREW PRAM: Concurrent Read, Exclusive Write – gleichzeitiger Lesezugriff, aber nur exklusiver Schreibzugriff erlaubt&lt;br /&gt;
* EREW PRAM: Exclusive Read, Exclusive Write – nur exklusiver Lese- und Schreibzugriff erlaubt&lt;br /&gt;
Bei einer EREW darf also beispielsweise jeweils nur ein Prozessor lesend oder schreibend auf eine bestimmte Speicherzelle zugreifen. Ansonsten kommt es zu einem [[Programmabbruch]].&lt;br /&gt;
&lt;br /&gt;
=== Schreibzugriffe bei CRCWs ===&lt;br /&gt;
Bei einer CRCW PRAM muss noch geklärt werden, was im Falle eines gleichzeitigen Schreibzugriffes geschehen soll, wenn verschiedene Prozessoren verschiedene Werte in die Speicherzelle schreiben wollen. Man unterscheidet 3 Modi:&lt;br /&gt;
* common: Nur das Schreiben identischer Werte ist erlaubt.&lt;br /&gt;
* arbitrary: Ein zufälliger Wert wird ausgewählt und geschrieben.&lt;br /&gt;
* priority: Der Prozessor mit der niedrigsten Adresse erhält das Schreibrecht.&lt;br /&gt;
&lt;br /&gt;
Die unterschiedlichen Variationen der PRAM führen bei konkreten Algorithmen zu unterschiedlichen [[Komplexität (Informatik)|Komplexitäten]] im Ressourcenverbrauch. So ist der oben angegebene Algorithmus zur Maximumsuche wie beschrieben auf gleichzeitigen Lese- und Schreibzugriff angewiesen, also auf eine CRCW PRAM. Auf einer PRAM, die dies nicht erlaubt, wäre eine Lösung in konstanter Zeit nicht möglich. Welches PRAM-Modell man für eine konkrete Untersuchung auswählt, hängt also von den Analysezielen ab, die man damit verfolgt.&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4361282-9}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Theoretische Informatik]]&lt;br /&gt;
[[Kategorie:Parallelverarbeitung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Gerolsteiner flasche</name></author>
	</entry>
</feed>