[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/wiki15\/2020\/11\/26\/pradikation-computerarchitektur-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/wiki15\/2020\/11\/26\/pradikation-computerarchitektur-wikipedia\/","headline":"Pr\u00e4dikation (Computerarchitektur) – Wikipedia","name":"Pr\u00e4dikation (Computerarchitektur) – Wikipedia","description":"before-content-x4 In der Informatik Pr\u00e4dikation ist ein Architekturmerkmal, das eine Alternative zur bedingten \u00dcbertragung der Steuerung bietet und durch Maschinenanweisungen","datePublished":"2020-11-26","dateModified":"2020-11-26","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/wiki15\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/wiki15\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":100,"height":100},"url":"https:\/\/wiki.edu.vn\/wiki15\/2020\/11\/26\/pradikation-computerarchitektur-wikipedia\/","wordCount":2489,"articleBody":" (adsbygoogle = window.adsbygoogle || []).push({});before-content-x4In der Informatik Pr\u00e4dikation ist ein Architekturmerkmal, das eine Alternative zur bedingten \u00dcbertragung der Steuerung bietet und durch Maschinenanweisungen wie bedingte Verzweigung, bedingten Aufruf, bedingte R\u00fcckgabe und Verzweigungstabellen implementiert wird. Die Pr\u00e4dikation funktioniert, indem Anweisungen von beiden Pfaden des Zweigs ausgef\u00fchrt werden und nur diese Anweisungen vom genommenen Pfad zugelassen werden, um den Architekturstatus zu \u00e4ndern.[1] Die Anweisungen aus dem genommenen Pfad d\u00fcrfen den Architekturstatus \u00e4ndern, da sie verkn\u00fcpft wurden (basiert) mit einer Pr\u00e4dikatEin boolescher Wert, der von der Anweisung verwendet wird, um zu steuern, ob die Anweisung den Architekturstatus \u00e4ndern darf oder nicht. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Table of Contents\u00dcberblick[edit]Vorteile[edit]Nachteile[edit]Geschichte[edit]Siehe auch[edit]Verweise[edit]Weiterf\u00fchrende Literatur[edit]\u00dcberblick[edit]Die meisten Computerprogramme enthalten bedingten Code, der nur unter bestimmten Bedingungen ausgef\u00fchrt wird, abh\u00e4ngig von Faktoren, die nicht im Voraus bestimmt werden k\u00f6nnen, z. B. abh\u00e4ngig von Benutzereingaben. Da die meisten Prozessoren einfach den n\u00e4chsten Befehl in einer Sequenz ausf\u00fchren, besteht die traditionelle L\u00f6sung darin, ihn einzuf\u00fcgen Ast Anweisungen, die es einem Programm erm\u00f6glichen, bedingt zu einem anderen Codeabschnitt zu verzweigen und so den n\u00e4chsten Schritt in der Sequenz zu \u00e4ndern. Dies war ausreichend, bis die Designer begannen, die Leistung durch die Implementierung von Anweisungs-Pipelining zu verbessern, eine Methode, die durch Zweige verlangsamt wird. Eine ausf\u00fchrlichere Beschreibung der aufgetretenen Probleme und eine beliebte L\u00f6sung finden Sie unter Branch Predictor.Gl\u00fccklicherweise hat eines der gebr\u00e4uchlichsten Codemuster, das normalerweise auf Verzweigungen beruht, eine elegantere L\u00f6sung. Betrachten Sie den folgenden Pseudocode:[1] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4if condition {dosomething}else {dosomethingelse};Auf einem System, das bedingte Verzweigung verwendet, kann dies zu Maschinenanweisungen f\u00fchren, die \u00e4hnlich aussehen wie:[1]branch-if-condition to label1dosomethingelsebranch-to label2label1:dosomethinglabel2:...Bei der Pr\u00e4dikation werden alle m\u00f6glichen Verzweigungspfade inline codiert, einige Anweisungen werden jedoch ausgef\u00fchrt, w\u00e4hrend andere dies nicht tun. Die Grundidee ist, dass jeder Befehl einem Pr\u00e4dikat zugeordnet ist (das Wort wird hier \u00e4hnlich wie in der Pr\u00e4dikatenlogik verwendet) und dass der Befehl nur ausgef\u00fchrt wird, wenn das Pr\u00e4dikat wahr ist. Der Maschinencode f\u00fcr das obige Beispiel mit Pr\u00e4dikation k\u00f6nnte ungef\u00e4hr so \u200b\u200baussehen:[1](condition) dosomething(not condition) dosomethingelseNeben der Eliminierung von Verzweigungen wird insgesamt weniger Code ben\u00f6tigt, vorausgesetzt, die Architektur bietet vorgegebene Anweisungen. Dies garantiert zwar im Allgemeinen keine schnellere Ausf\u00fchrung, wird es aber tun, wenn die etwas tun und mach etwas anderes Codebl\u00f6cke sind kurz genug.Die einfachste Form der Pr\u00e4dikation ist teilweise Pr\u00e4dikation, wo die Architektur hat bedingte Bewegung oder bedingte Auswahl Anleitung. Bedingte Verschiebungsanweisungen schreiben den Inhalt eines Registers nur dann \u00fcber ein anderes, wenn der Wert des Pr\u00e4dikats wahr ist, w\u00e4hrend bedingte Auswahlbefehle basierend auf dem Wert des Pr\u00e4dikats ausw\u00e4hlen, welches von zwei Registern in ein drittes Register geschrieben wird. Eine allgemeinere und f\u00e4higere Form ist volle Pr\u00e4dikation. Die vollst\u00e4ndige Pr\u00e4dikation verf\u00fcgt \u00fcber einen Satz von Pr\u00e4dikatenregistern zum Speichern von Pr\u00e4dikaten (wodurch mehrere verschachtelte oder sequentielle Verzweigungen gleichzeitig entfernt werden k\u00f6nnen), und die meisten Anweisungen in der Architektur verf\u00fcgen \u00fcber ein Registerspezifiziererfeld, um anzugeben, welches Pr\u00e4dikatenregister das Pr\u00e4dikat liefert.[2] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Vorteile[edit]Der Hauptzweck der Pr\u00e4dikation besteht darin, Spr\u00fcnge \u00fcber sehr kleine Abschnitte des Programmcodes zu vermeiden, die Effektivit\u00e4t der Pipeline-Ausf\u00fchrung zu erh\u00f6hen und Probleme mit dem Cache zu vermeiden. Es hat auch eine Reihe subtilerer Vorteile:Funktionen, die traditionell mit einfachen arithmetischen und bitweisen Operationen berechnet werden, lassen sich m\u00f6glicherweise schneller mit vorhergesagten Anweisungen berechnen.Pr\u00e4dikierte Anweisungen mit unterschiedlichen Pr\u00e4dikaten k\u00f6nnen miteinander und mit bedingungslosem Code gemischt werden, was eine bessere Befehlsplanung und damit eine noch bessere Leistung erm\u00f6glicht.Das Eliminieren unn\u00f6tiger Verzweigungsbefehle kann die Ausf\u00fchrung notwendiger Verzweigungen, wie z. B. solcher, die Schleifen bilden, beschleunigen, indem die Belastung der Verzweigungsvorhersagemechanismen verringert wird.Eliminierung der Kosten einer Branchenfehlvorhersage, die bei Architekturen mit tiefen Pipelines hoch sein kann.Nachteile[edit]Der Hauptnachteil von Predication liegt im vergr\u00f6\u00dferten Codierungsraum. In typischen Implementierungen reserviert jeder Befehl ein Bitfeld f\u00fcr das Pr\u00e4dikat, das angibt, unter welchen Bedingungen dieser Befehl eine Wirkung haben soll. Wenn der verf\u00fcgbare Speicher wie bei eingebetteten Ger\u00e4ten begrenzt ist, k\u00f6nnen diese Platzkosten unerschwinglich sein. Einige Architekturen wie Thumb-2 k\u00f6nnen dieses Problem jedoch vermeiden (siehe unten). Andere Nachteile sind die folgenden:[3]Die Pr\u00e4dikation verkompliziert die Hardware, indem sie kritischen Pfaden Logikstufen hinzuf\u00fcgt und m\u00f6glicherweise die Taktrate verschlechtert.Ein vorhergesagter Block enth\u00e4lt Zyklen f\u00fcr alle Operationen, sodass k\u00fcrzere Pfade l\u00e4nger dauern und bestraft werden k\u00f6nnen.Pr\u00e4dikation wird nicht spekuliert und f\u00fchrt zu einer l\u00e4ngeren Abh\u00e4ngigkeitskette. F\u00fcr geordnete Daten bedeutet dies einen Leistungsverlust im Vergleich zu einer vorhersehbaren Verzweigung.[4]Die Vorhersage ist am effektivsten, wenn Pfade ausgeglichen sind oder wenn der l\u00e4ngste Pfad am h\u00e4ufigsten ausgef\u00fchrt wird.[3] Das Bestimmen eines solchen Pfads ist jedoch zum Zeitpunkt der Kompilierung sehr schwierig, selbst wenn Profilinformationen vorhanden sind.Geschichte[edit]Pr\u00e4dizierte Anweisungen waren in europ\u00e4ischen Computerdesigns der 1950er Jahre beliebt, darunter Mail\u00fcfterl (1955), Zuse Z22 (1955), ZEBRA (1958) und Electrologica X1 (1958). Das IBM ACS-1-Design von 1967 hat ein “\u00dcberspring” -Bit in seinen Befehlsformaten zugewiesen, und der CDC Flexible Processor hat 1976 drei bedingte Ausf\u00fchrungsbits in seinen Mikrobefehlsformaten zugewiesen.Die PA-RISC-Architektur von Hewlett-Packard (1986) hatte eine Funktion namens Aufhebung, wodurch die meisten Anweisungen durch die vorherige Anweisung vorhergesagt werden konnten. Die POWER-Architektur von IBM (1990) enthielt Anweisungen f\u00fcr bedingte Verschiebungen. Der Nachfolger von POWER, PowerPC (1993), lie\u00df diese Anweisungen fallen. Die Alpha-Architektur der Digital Equipment Corporation (1992) enthielt auch Anweisungen f\u00fcr bedingte Bewegungen. MIPS erhielt 1994 mit der MIPS IV-Version Anweisungen f\u00fcr bedingte Bewegungen. und SPARC wurde in Version 9 (1994) um bedingte Verschiebungsanweisungen sowohl f\u00fcr Ganzzahl- als auch f\u00fcr Gleitkommaregister erweitert.In der Hewlett-Packard \/ Intel IA-64-Architektur sind die meisten Anweisungen pr\u00e4diziert. Die Pr\u00e4dikate werden in 64 speziellen Pr\u00e4dikatenregistern gespeichert. und eines der Pr\u00e4dikatregister ist immer so wahr nicht vorhergesagt Anweisungen sind einfach Anweisungen, die mit dem Wert true pr\u00e4diziert werden. Die Verwendung von Pr\u00e4dikation ist f\u00fcr die Implementierung von Software-Pipelining durch IA-64 von entscheidender Bedeutung, da kein separater Code f\u00fcr Prologe und Epilogs geschrieben werden muss.[clarification needed]In der x86-Architektur wird eine Familie von Anweisungen f\u00fcr bedingte Verschiebungen (CMOV und FCMOV) wurden der Architektur vom Intel Pentium Pro (1995) -Prozessor hinzugef\u00fcgt. Das CMOV Anweisungen kopierten den Inhalt des Quellregisters in das Zielregister in Abh\u00e4ngigkeit von einem Pr\u00e4dikat, das durch den Wert des Flagregisters geliefert wird.In der ARM-Architektur bietet der urspr\u00fcngliche 32-Bit-Befehlssatz eine Funktion namens bedingte Ausf\u00fchrung Dadurch k\u00f6nnen die meisten Befehle von einem von 13 Pr\u00e4dikaten vorhergesagt werden, die auf einer Kombination der vier durch den vorherigen Befehl festgelegten Bedingungscodes basieren. Der Thumb-Befehlssatz (1994) von ARM hat die bedingte Ausf\u00fchrung eingestellt, um die Gr\u00f6\u00dfe der Befehle so zu verringern, dass sie in 16 Bit passen. Sein Nachfolger Thumb-2 (2003) hat dieses Problem jedoch durch Verwendung eines speziellen Befehls \u00fcberwunden, der keine andere Wirkung hat als die Bereitstellung Pr\u00e4dikate f\u00fcr die folgenden vier Anweisungen. Der in ARMv8-A (2011) eingef\u00fchrte 64-Bit-Befehlssatz ersetzte die bedingte Ausf\u00fchrung durch bedingte Auswahlbefehle.Einige SIMD-Befehlss\u00e4tze wie AVX2 k\u00f6nnen mithilfe einer logischen Maske Werte bedingt in den Speicher laden \/ speichern, eine parallele Form der bedingten Verschiebung. Diese Form der Pr\u00e4dikation wird auch beim GPU-Computing mit einem Befehl und mehreren Threads verwendet, bei dem ein Computerkern den Code eines Zweigs mit nicht erf\u00fcllter Bedingung ausf\u00fchrt, die in diesem Ausf\u00fchrungspfad berechneten Ergebnisse jedoch nicht festschreibt.Siehe auch[edit]Verweise[edit]^ ein b c d Rick Vinyard (26.04.2000). “Pr\u00e4dikation”. cs.nmsu.edu. Abgerufen 2014-04-22.^ Mahlke, Scott A.; Hank, Richard E.; McCormick, James E.; August, David I.; Hwn, Wen-mei W. (22.-24. Juni 1995). “Ein Vergleich der vollst\u00e4ndigen und teilweisen Unterst\u00fctzung der vorausgesagten Ausf\u00fchrung f\u00fcr ILP-Prozessoren”. Das 22. Internationale Symposium f\u00fcr Computerarchitektur.^ ein b Joseph A. Fischer, Paolo Faraboschi, Cliff Young (2004) Embedded Computing – Ein VLIW-Ansatz f\u00fcr Architektur, Compiler und Tools. Seite 172.^ Cordes, Peter. “Assembly – Wie funktioniert die Ausf\u00fchrung au\u00dferhalb der Reihenfolge mit bedingten Anweisungen, Beispiel: CMOVcc in Intel oder ADDNE (Add ungleich) in ARM”. Paket\u00fcberfluss. Anders als bei Kontrollabh\u00e4ngigkeiten (Verzweigungen) sagen sie nicht voraus oder spekulieren nicht, wie die Flags aussehen werden. Daher kann ein cmovcc anstelle eines jcc eine schleifen\u00fcbertragene Abh\u00e4ngigkeitskette erstellen und am Ende schlechter sein als ein vorhersagbarer Zweig. [1] ist ein Beispiel daf\u00fcr.Weiterf\u00fchrende Literatur[edit] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki15\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki15\/2020\/11\/26\/pradikation-computerarchitektur-wikipedia\/#breadcrumbitem","name":"Pr\u00e4dikation (Computerarchitektur) – Wikipedia"}}]}]