DE112013000486B4 - Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads - Google Patents

Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads Download PDF

Info

Publication number
DE112013000486B4
DE112013000486B4 DE112013000486.0T DE112013000486T DE112013000486B4 DE 112013000486 B4 DE112013000486 B4 DE 112013000486B4 DE 112013000486 T DE112013000486 T DE 112013000486T DE 112013000486 B4 DE112013000486 B4 DE 112013000486B4
Authority
DE
Germany
Prior art keywords
instructions
uncertainty
jump
instruction
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE112013000486.0T
Other languages
English (en)
Other versions
DE112013000486T5 (de
Inventor
c/o IBM Corporation Prasky Brian Robert
c/o IBM Corporation Buyuktosunoglu Alper
c/o IBM Corporation Srinivasan Vijayalakshmi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112013000486T5 publication Critical patent/DE112013000486T5/de
Application granted granted Critical
Publication of DE112013000486B4 publication Critical patent/DE112013000486B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

Ein Computersystem zur Ausführung von Anweisungen enthält einen Prozessor mit einer Pipeline. Das System ist eingerichtet, ein Verfahren durchzuführen, das beinhaltet, eine Vielzahl von Anweisungen in der Pipeline abzurufen, wobei die Vielzahl von Anweisungen eine Vielzahl von Sprunganweisungen enthält, für jede der Vielzahl von Sprunganweisungen jeder aus der Vielzahl von Sprunganweisungen eine Sprungunsicherheit zuzuweisen, ...

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft die Verarbeitung mit mehreren Threads und genauer Systeme, Verfahren und Computerprogrammprodukte zum Anweisungsausgleich durch Anweisungsunsicherheit innerhalb eines Prozessors mit mehreren Threads.
  • Es gibt viele Ziele bei der Gestaltung einer Pipeline mit mehreren Threads, einschließlich, jedoch nicht auf diese beschränkt, ein Ausführen jedes einzelnen Thread so schnell wie möglich und ein Optimieren von Arbeitseinheiten pro Watt. Pipelining stellt eine spezielle Form von Parallelität dar, bei der die Ausführung mehrerer Anweisungen auf derselben Hardware verzahnt sein kann. Unabhängig vom Ziel der Pipelinegestaltung können für jeden Thread eines Programms mehrere Sprunganweisungen angetroffen werden. Wenn ein Thread auf einen Sprung trifft, wird eine Vorhersage erstellt, welche Richtung der Sprung einschlagen wird, und dann wird der Thread entlang des vorhergesagten Pfades ausgeführt. Die Sprungvorhersage wird üblicherweise mit einem 2-Bit-Sättigungszähler pro Sprungvorhersage-Tabelleneintrag realisiert, wobei die Zustände lauten: stark nicht vorgenommen (00), schwach nicht vorgenommen (01), schwach vorgenommen (10) und stark vorgenommen (11). Bei einem aufgelösten vorgenommen Sprung wird der Zähler um eins erhöht, bei Erreichen eines Zustands von „11” geht der Zähler jedoch bei diesem Wert in Sättigung. Bei einem aufgelösten nicht vorgenommen Sprung wird der Zähler um eins verringert, bei Erreichen eines Zustands von „00” geht der Zähler jedoch bei diesem Wert in Sättigung. Für die Zustände „10” und „11” wird ein Sprung als vorgenommen vorhergesagt, und für die Zustände „00” und „11” wird ein Sprung als nicht vorgenommen vorhergesagt. Dieser Sättigungszähler stellt eine Richtung für den Sprung bereit, sagt jedoch nichts über die Genauigkeit des Sprungs aus. Zum Beispiel wird der Sprung bei einer For-Schleife jedes Mal vorgenommen, außer für den Fall der Nichterfüllung. Bei der Nichterfüllungsiteration wird der Vertrauenszähler von „11” auf „10” herabgestuft. Beim nächsten Antreffen der For-Schleife wird der Sprung erneut vorgenommen. Insofern wird der Sprung in einem Zustand von „11” für alle Fälle außer der Nichterfüllung vorgenommen. Bei einem Zustand von „10” wird der Sprung erneut vorgenommen. Insofern gibt ein starker Zustand keine vertrauenswürdigere Vorhersage als diejenige eines schwachen Zustands an. Bei einem solchen Schema wird die Genauigkeit der Sprungvorhersage beim Erstellen der Vorhersage nicht berücksichtigt. In einer Verarbeitungsumgebung mit mehreren Threads können mehrere Threads gleichzeitig Arbeit durchführen. Insofern können mehrere Threads in einer Pipeline ausgeführt werden, wobei jeder Thread auf mehrere Sprünge trifft und der vorhergesagte Zustand (stark/schwach, vorgenommen/nicht vorgenommen) durch die Pipeline befördert wird, so dass bei der Sprungauflösung der Vorhersagezustand innerhalb der Sprungtabelle aktualisiert werden kann. Darüber hinaus gibt es in einem Prozessor mit mehreren Threads Ressourcen, die unter den Threads gemeinsam genutzt werden. Diese dynamisch aufgeteilten Ressourcen beruhen auf der Grundlage „First come first serve”. Während dynamische Ressourcen ein Optimieren von Siliciumfläche und Leistung erlauben, gibt es viele Leistungsbegrenzungen einer dynamischen Ressource, wie beispielsweise Thread-Blockierung, die einen Leistungsbegrenzer erzeugt. Wenn zum Beispiel ein Thread, X, blockiert ist, hat der andere Thread, Y, die Fähigkeit, eine erhebliche Menge der Pipelineressourcen zu nutzen. Der Thread Y kann Wegwerfarbeit erzeugen (wie zum Beispiel entlang eines Pfades eines zu ermittelnden falschen Sprungs) und X Ressourcen wegnehmen, die X in naher Zukunft für Arbeiten verwenden könnte, die nicht verworfen werden.
  • Aus US 2006/0 161 762 A1 ist die Verwaltung von Ressourcen eines Prozessorsystems bei spekulativer Ausführung bekannt. bei der eine Verzweigungsvorhersagegenauigkeit für einen ersten Hardware-Thread berechnet wird und daraus ermittelt wird, ob ein oder mehrere andere Threads vorrangig behandelt werden sollten. In diesem Fall werden die Hardware-Ressourcen für den ersten Thread reduziert.
  • Aus US 2011/0 320 774 A1 ist das Laden von Befehlen in Abhängigkeit von Verzweigungsvertrauenswerten bekannt. Dabei werden Wichtungswerte für jeden Befehl in einer Prozessor-Pipeline aufsummiert, wobei der Summationswert von einer Verzweigungsunsicherheit und einer Verweildauer abhängig ist. Anhand des Summationswertes wird der Zugriff auf einen Speicher zugelassen.
  • Aus Vandierendonck H., Seznec A. (2007) ”Fetch Gating Control Through Speculative Instruction Window Weighting”. In: De Bosschere K., Kaeli D., Stenström P., Whalley D., Ungerer T. (eds) High Performance Embedded Architectures and Compilers. HiPEAC 2007. Lecture Notes in Computer Science, vol 4367. Springer, Berlin, Heidelberg ist das Filtern von Ladeoperationen bekannt, bei dem Energieverbrauch aufgrund von irrtümlichen Befehlen vermieden wird und die Eingangsrate von Befehlen mit der Ausgangsrate von Befehlen abgeglichen wird.
  • Aus Kun Luo et al., „Boosting SMT Performance by Speculation Control”, Proceedings of the 15th International Parallel & Distributed Processing Symposium (IPDPS-01), San Francisco, CA, April 23–27, 2001. IEEE Computer Society 2001, ISBN 0-7695-0990-8, ist die simultane Verarbeitung von Threads (simultaneous multithreading) bekannt, bei der das Laden von Befehlen gemäß Prioritätslisten und Filterung erfolgt (fetch prioritizing and gating).
  • Ausgehend von diesem Stand der Technik stellt sich die Erfindung die Aufgabe, die Unsicherheit von spekulativen Thread-Bearbeitungen besser abzuschätzen.
  • Diese Aufgabe wird erfindungsgemäß gelöst durch das Verfahren nach Anspruch 1 sowie das System nach Anspruch 9 und das Computerprogramm nach Anspruch 10. Bevorzugte Ausführungsformen der Erfindung sind Gegenstand der jeweiligen Unteransprüche.
  • KURZDARSTELLUNG
  • Die Erfindung schlägt im wesentlichen vor, die Gesamtunsicherheit der einzelnen Threads dadurch zu ermitteln, dass die Anweisungsunsicherheiten der einzelnen Threads aufsummiert werden. Die Anweisungsunsicherheit jeder Anweisung wird dabei ermittelt aus der Summe der Sprungunsicherheit der vorangehenden Sprunganweisungen.
  • Zu beispielhaften Ausführungsformen zählt ein Computersystem zur Ausführung von Anweisungen, wobei das System einen Prozessor mit einer Pipeline enthält, wobei das System eingerichtet ist, ein Verfahren durchzuführen, das beinhaltet, eine Vielzahl von Anweisungen in der Pipeline abzurufen, wobei die Vielzahl von Anweisungen eine Vielzahl von Sprunganweisungen enthält,
    für jede der Vielzahl von Sprunganweisungen jeder aus der Vielzahl von Sprunganweisungen eine Sprungunsicherheit zuzuweisen,
    für jede der Vielzahl von Anweisungen eine Anweisungsunsicherheit zuzuweisen, die eine Summe von Sprungunsicherheiten älterer unaufgelöster Sprünge darstellt, und die Anweisungen auf der Grundlage einer aktuellen Summe von Anweisungsunsicherheit in der Pipeline auszugleichen.
  • Zusätzliche beispielhafte Ausführungsformen beinhalten ein durch Computer realisiertes Verfahren zur Ausführung von Anweisungen in einer Pipeline, wobei das Verfahren beinhaltet, eine Vielzahl von Anweisungen in der Pipeline abzurufen, wobei die Vielzahl von Anweisungen eine Vielzahl von Sprunganweisungen enthält, für jede der Vielzahl von Sprunganweisungen jeder aus der Vielzahl von Sprunganweisungen eine Sprungunsicherheit zuzuweisen, für jede der Vielzahl von Anweisungen eine Anweisungsunsicherheit zuzuweisen, die eine Summe von Sprungunsicherheiten älterer unaufgelöster Sprünge darstellt, und die Anweisungen auf der Grundlage einer aktuellen Summe von Anweisungsunsicherheit in der Pipeline auszugleichen.
  • Weitere beispielhafte Ausführungsformen beinhalten ein Computerprogrammprodukt zur Ausführung von Anweisungen in einer Pipeline. Das Computerprogrammprodukt enthält ein gegenständliches Speichermedium, das durch eine Verarbeitungsschaltung lesbar ist und Anweisungen zum Durchführen eines Verfahrens zur Ausführung durch die Verarbeitungsschaltung speichert. Das Verfahren beinhaltet, eine Vielzahl von Anweisungen in der Pipeline abzurufen, wobei die Vielzahl von Anweisungen eine Vielzahl von Sprunganweisungen enthält, für jede der Vielzahl von Sprunganweisungen jeder aus der Vielzahl von Sprunganweisungen eine Sprungunsicherheit zuzuweisen, für jede der Vielzahl von Anweisungen eine Anweisungsunsicherheit zuzuweisen, die eine Summe von Sprungunsicherheiten älterer unaufgelöster Sprünge darstellt, und die Anweisungen auf der Grundlage einer aktuellen Summe von Anweisungsunsicherheit in der Pipeline auszugleichen.
  • Weitere Merkmale und Vorteile werden durch die Techniken der vorliegenden Erfindung ausgebildet.
  • KURZBESCHREIBUNG DER MEHREREN ZEICHNUNGSANSICHTEN
  • Die vorhergehenden und weitere Merkmale und Vorteile der Erfindung werden anhand der folgenden detaillierten Beschreibung in Verbindung mit den angehängten Zeichnungen ersichtlich, in denen:
  • 1 ein Blockschaubild eines Systems 100 zum Anweisungsausgleich durch Anweisungsunsicherheit innerhalb eines Prozessors mit mehreren Threads veranschaulicht;
  • 2 ein Blockschaubild eines Prozessor-Anweisungspipeline-Systems veranschaulicht, in dem die beispielhaften Verfahren zum Anweisungsausgleich gemäß einer beispielhaften Ausführungsform realisiert werden können;
  • 3 einen Ablaufplan für ein Verfahren zum Anweisungsausgleich durch Anweisungsunsicherheit innerhalb eines Prozessors mit mehreren Threads veranschaulicht;
  • 4 ein Beispiel einer Tabelle veranschaulicht, die realisiert werden kann, um eine Unsicherheit in der Pipeline zu verfolgen;
  • 5 schaubildhaft ein Beispiel einer statischen Grenze veranschaulicht, die gemäß beispielhaften Ausführungsformen realisiert werden kann;
  • 6 schaubildhaft ein Beispiel eines Leerens aus einer Anweisungswarteschlange veranschaulicht, das gemäß beispielhaften Ausführungsformen realisiert werden kann; und
  • 7 ein Beispiel eines Computerprogrammprodukts auf einem computerlesbaren/durch Computer verwendbaren Medium mit in einem gegenständlichen Medium ausgebildeter Computerprogrammcode-Logik als einen Herstellungsartikel veranschaulicht.
  • DETAILLIERTE BESCHREIBUNG
  • In beispielhaften Ausführungsformen realisieren die Systeme und Verfahren gleichzeitiges Mehrfach-Threading in einem Prozessor, um dem Prozessorkern zu ermöglichen, einen höheren Durchsatz (d. h. mehr Arbeit) pro Transistor zu erreichen. In einer gegebenen Pipeline wird durch die hierein beschriebenen Systeme und Verfahren nicht nur die Richtung jedes vorhergesagten Pfades, sondern auch ein Vertrauenswert/eine Genauigkeit für jeden vorhergesagten Pfad berechnet. Darüber hinaus wird eine Unsicherheit für einen vorhergesagten Sprung verfolgt und durch jeden vorhergesagten Pfad befördert, um Entscheidungen über die Reihenfolge der von jedem Thread auszuführenden Anweisungen zu treffen. Indem den Threads ermöglicht wird, in einem „allgemeinen Wettbewerb” zu stehen und so viele Ressourcen zu beanspruchen, wie jeder Thread wünscht, so lange genügend Ressourcen verfügbar sind, werden die Ressourcen nicht auf eine Weise unter den Threads aufgeteilt, die den maximal möglichen Durchsatz anstrebt. Ein Bereich erhöhten Durchsatzausgleichs befindet sich um denjenigen von Sprüngen. Immer wenn ein gegebener Thread (im Hinblick auf den anderen Thread) eine höhere Wahrscheinlichkeit aufweist, dass die Richtung/das Ziel für einen gegebenen Sprung inkorrekt vorhergesagt wird, sollte er von den in Anspruch genommenen/angeforderten Ressourcen Abstand nehmen und zulassen, dass der andere (d. h. vertrauenswürdigere) Thread seinen Anteil an den Ressourcen beansprucht. In einem Prozessor mit einem einzigen Thread sind alle Ressourcen dem einen Thread gewidmet. In einem Prozessor mit gleichzeitigem Mehrfach-Threading (simultaneous multithreading (SMT)) werden diese Ressourcen von den gleichzeitig ausgeführten Threads „gemeinsam genutzt”. Manche Ressourcen werden statisch aufgeteilt, während andere Ressourcen dynamisch aufgeteilt werden. Die dynamisch aufgeteilten Ressourcen beruhen auf der Grundlage „First come first serve”. Während dynamische Ressourcen ein Optimieren erlauben, gibt es viele Leistungsbegrenzungen einer dynamischen Ressource. Wenn zum Beispiel ein Thread X für einige Zyklen blockiert ist, hat Thread Y die Fähigkeit, eine erhebliche Menge der Pipelineressourcen zu nutzen. Der Thread Y kann Wegwerfarbeit erzeugen (wie zum Beispiel entlang eines Pfades eines falschen Sprungs) und Thread X Ressourcen wegnehmen, die Thread X nach Überwinden der Blockierung für Arbeiten verwenden könnte, die nicht verworfen werden.
  • 1 veranschaulicht ein Blockschaubild eines Systems 100 zum Anweisungsausgleich durch Anweisungsunsicherheit innerhalb eines Prozessors mit mehreren Threads. Die hierin beschriebenen Verfahren können in Hardware, Software (z. B. Firmware) oder einer Kombination davon realisiert werden. In einer beispielhaften Ausführungsform sind die hierein beschriebenen Verfahren in Hardware als Teil des Mikroprozessors eines zweckbestimmten oder universellen digitalen Computers, wie beispielsweise ein PC, ein Arbeitsplatzrechner, ein Minicomputer oder ein Großrechner, realisiert. Das System 100 enthält daher einen universellen Computer 101.
  • In einer beispielhaften Ausführungsform enthält der in 1 gezeigte Computer 101 im Hinblick auf die Hardware-Architektur einen Prozessor 105, einen mit einer Speichersteuereinheit 115 verbundenen Hauptspeicher 110 und eine oder mehrere Eingabe- und/oder Ausgabe(E/A)-Einheiten 140, 145 (oder Peripherieeinheiten), die über eine lokale Eingabe/Ausgabe-Steuereinheit 135 im Sinne einer Datenübertragung verbunden sind. Bei der Eingabe/Ausgabe-Steuereinheit 135 kann es sich zum Beispiel, ohne auf diese beschränkt zu sein, um einen oder mehrere Busse oder andere kabelgebundene oder kabellose Verbindungen handeln, wie sie in der Technik bekannt sind. Die Eingabe/Ausgabe-Steuereinheit 135 kann zusätzliche, der Einfachheit halber weggelassene Elemente wie beispielsweise Steuereinheiten, Puffer (Cachespeicher), Treiber, Verstärker (repeaters) und Empfänger aufweisen, um die Datenübertragung zu ermöglichen. Weiterhin kann die lokale Schnittstelle Adressen-, Steuerungs- und/oder Datenverbindungen einschließen, um einen geeigneten Datenaustausch zwischen den zuvor genannten Komponenten zu ermöglichen.
  • Bei dem Prozessor 105 handelt es sich um eine Hardware-Einheit zum Ausführen von Software, insbesondere der im Hauptspeicher 110 gespeicherten. Bei dem Prozessor 105 kann es sich um jeden anwendungsspezifisch hergestellten oder am Markt erhältlichen Prozessor, eine Zentraleinheit (central processing unit (CPU)), einen Hilfsprozessor unter mehreren dem Computer 101 zugeordneten Prozessoren, einen Mikroprozessor auf Halbleiterbasis (in Form eines Mikrochips oder Chipsatzes) oder allgemein jede beliebige Einheit zum Ausführen von Anweisungen handeln.
  • Der Hauptspeicher 110 kann eines oder eine Kombination flüchtiger Speicherelemente (z. B. Speicher mit wahlfreiem Zugriff (random access memory (RAM, wie beispielsweise DRAM, SRAM, SDRAM usw.)) sowie nichtflüchtiger Speicherelemente (z. B. ROM, löschbaren programmierbaren Nur-Lese-Speicher (erasable programmable read only memory (EPROM), elektronisch löschbaren programmierbaren Nur-Lese-Speicher (electronically erasable programmable read only memory (EEPROM), programmierbaren Nur-Lese-Speicher (programmable read only memory (PROM), Band, Compact-Disk-Nur-Lese-Speicher (compact disc read only memory CD-ROM), Platten, Disketten, Kassetten, Bandkassetten oder Ähnliches usw.) einschließen. Darüber hinaus kann der Hauptspeicher 110 elektronische, magnetische, optische und/oder andere Arten von Speichermedien aufweisen. Es ist zu beachten, dass der Hauptspeicher 110 eine verteilte Architektur aufweisen kann, bei der vielfältige Komponenten entfernt voneinander angeordnet, jedoch durch den Prozessor 105 zugänglich sind.
  • Die Anweisungen im Hauptspeicher 110 können ein oder mehrere separate Programme enthalten, von denen jedes eine geordnete Liste ausführbarer Anweisungen zur Ausführung logischer Funktionen beinhalten kann. Im Beispiel von 1 die Anweisungen im Hauptspeicher 110 ein geeignetes Betriebssystem (BS) 111. Das Betriebssystem 111 steuert im Wesentlichen die Ausführung anderer Computerprogramme und stellt eine Zeitplanung, Steuerung der Eingabe/Ausgabe, Datei- und Datenverwaltung, Speicherverwaltung und Datenübertragungssteuerung sowie verwandte Dienste bereit.
  • In einer beispielhaften Ausführungsform können eine herkömmliche Tastatur 150 und eine herkömmliche Maus 155 mit der Eingabe/Ausgabe-Steuereinheit 135 verbunden sein. Zu weiteren Ausgabeeinheiten, wie beispielsweise den E/A-Einheiten 140, 145, können zum Beispiel, ohne auf diese beschränkt zu sein, ein Drucker, ein Scanner, ein Mikrophon und Ähnliches zählen. Schließlich können die E/A-Einheiten 140, 145 weiterhin Einheiten einschließen, die sowohl Eingaben als auch Ausgaben abwickeln, wie beispielsweise, jedoch nicht auf diese beschränkt, eine Netzwerkschnittstellenkarte (network interface card (NIC)) oder einen Modulator/Demodulator (zum Zugreifen auf andere Dateien, Einheiten, Systeme oder ein Netzwerk), einen Hochfrequenz(HF)- oder anderen Transceiver, eine Telefonschnittstelle, eine Brücke, einen Router und Ähnliches. Das System 100 kann weiterhin eine mit einer Anzeige 130 verbundene Anzeigesteuereinheit 125 enthalten. In einer beispielhaften Ausführungsform kann das System 100 weiterhin eine Netzwerkschnittstelle 160 zum Verbinden mit einem Netzwerk 165 enthalten. Bei dem Netzwerk 165 kann es sich um ein IP-gestütztes Netzwerk für den Datenaustausch zwischen dem Computer 101 und einem beliebigen externen Server, Client und Ähnliches über eine Breitbandverbindung handeln. Das Netzwerk 165 sendet und empfängt Daten zwischen dem Computer 101 und externen Systemen. In einer beispielhaften Ausführungsform kann es sich bei dem Netzwerk 165 um ein verwaltetes IP-Netzwerk handeln, das durch einen Dienstanbieter verwaltet wird. Das Netzwerk 165 kann in drahtloser Weise ausgeführt sein, z. B. unter Verwendung drahtloser Protokolle und Technologien wie beispielsweise WiFi, WiMAX usw. Beim Netzwerk 165 kann es sich auch um ein paketvermitteltes Netzwerk wie beispielsweise ein lokales Netzwerk (local area network), ein Weitverkehrsnetzwerk (wide area network), ein Stadtnetz (metropolitan area network), ein Internet-Netzwerk oder eine ähnliche Art von Netzwerkumgebung, handeln. Bei dem Netzwerk 165 kann es sich um ein festes drahtloses Netzwerk, ein drahtloses lokales Netzwerk (wireless local area network (LAN)), ein drahtloses Weitverkehrsnetzwerk (wireless wide area network (WAN)), ein Netzwerk für den persönlichen Bereich (personal area network (PAN)), ein virtuelles privates Netzwerk (virtual private network (VPN)), ein Intranet oder ein anderes geeignetes Netzwerksystem handeln, und es enthält Ausrüstung zum Empfangen und Senden von Signalen.
  • Wenn es sich bei dem Computer 101 um einen PC, einen Arbeitsplatzrechner, eine intelligente Einheit oder Ähnliches handelt, können die Anweisungen im Hauptspeicher 110 weiterhin ein Basis-Eingabe/Ausgabe-System (basic input Output system (BIOS)) enthalten (das der Einfachheit halber weggelassen wurde). Beim BIOS handelt es sich um einen Satz wesentlicher Software-Routinen, die Hardware beim Start initialisieren und testen, das BS 111 starten und den Transfer von Daten zwischen den Hardware-Einheiten unterstützen. Das BIOS ist in einem ROM gespeichert, so dass das BIOS ausgeführt werden kann, wenn der Computer 101 aktiviert wird.
  • Wenn der Computer 101 in Betrieb ist, ist der Prozessor 105 so eingerichtet, dass er innerhalb des Hauptspeichers 110 gespeicherte Anweisungen ausführen, Daten zum und vom Hauptspeicher 110 übertragen und allgemein Operationen des Computers 101 entsprechend den Anweisungen steuern kann.
  • In einer beispielhaften Ausführungsform, bei der die Anweisungsausgleichsverfahren in Hardware realisiert sind, können die hierein beschriebenen Anwendungsausgleichsverfahren mit einer beliebigen oder einer Kombination der folgenden Technologien ausgeführt werden, die in der Technik allgemein bekannt sind: (eine) diskrete Logikschaltung(en) mit logischen Gattern (gates) zum Realisieren logischer Funktionen auf Datensignalen, eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit (ASIC)) mit geeigneten Gattern kombinatorischer Logik, (ein) programmierbare(s) Gatter-Array(s) (programmable gate array(s) (PGA)), ein anwenderprogrammierbares Gatter-Array (field programmable gate array (FPGA) usw.
  • 2 veranschaulicht ein Blockschaubild eines unsortierten Anweisungspipelinesystems 200 eines Prozessors, in dem die beispielhaften Verfahren zum Anweisungsausgleich gemäß einer beispielhaften Ausführungsform realisiert werden können. Wie hierin beschrieben, stellt Pipelining eine spezielle Form von Parallelität dar, wobei die Ausführung mehrerer Anweisungen auf derselben Hardware verzahnt (interleaved) sein kann. In einer beispielhaften Ausführungsform beinhaltet das Pipelinesystem sieben Stufen: (1) Anweisungsabrufen 210; (2) Decodieren und Anweisungsgruppieren 220; (3) Verteilen in Ausgabewarteschlange 230; (4) Unsortierte Ausgabe 240; (5a) Festkommaeinheit, die Registermodifikationen durchführt 250; (5b) Lade/Speicher-Einheit, die auf den Cachespeicher zugreift, 255; (6) Sortierte Durchführungstabelle 260; (7) Architekturaktualisierungen 270, was Registerfestschreibungen (register commits) und Speichervorgänge einschließt. In einer beispielhaften Ausführungsform ruft die Stufe des Anweisungsabrufens 210 zu verarbeitende Anweisungen ab. Die Stufe des Decodierens und Anweisungsgruppierens 220 decodiert die Anweisung und ermittelt, welche Anweisungen von welchen Anweisungen abhängen. Das Verteilen in die Ausgabewarteschlange 230 platziert die Anweisungen und zugeordneten Abhängigkeiten in die Ausgabewarteschlange. Die unsortierte Ausgabewarteschlange 240 legt fest, welche Anweisungen an die Ausführungseinheiten zu senden sind, die eine Architekturfunktion durchführen. Die Festkommaeinheit 250 führt eine Register-zu Register-Operation durch. Die Lade/Speicher-Einheit 255 nimmt einen Registerwert und platziert ihn in einen Speicher/Cachespeicher oder nimmt Inhalt im Speicher/Cachespeicher und platziert ihn in einem Register. Die sortierte Durchführung 260 legt ein sortiertes Mittel fest, um Anweisungen an die Stufe der Architekturaktualisierungen 270 zu senden. Die Architekturaktualisierungen 270 weisen Register Speichern/Cachespeichern zu und erlauben dem unsortierten Registerdateizuordner, umbenannte Register freizugeben.
  • 3 veranschaulicht einen Ablaufplan für ein Verfahren 300 zum Anweisungsausgleich durch Anweisungsunsicherheit innerhalb eines Prozessors mit mehreren Threads. In Block 310 weist das System 100 einen Sprungvertrauenswert zu. Sprungvorhersager können viele Typen von Zählern realisieren, einschließlich, ohne auf diese beschränkt zu sein, einen Ein-Bit-Vorhersager oder einen Zwei-Bit-Sättigungszähler. Zu Zwecken der Veranschaulichung wird ein Zwei-Bit-Sättigungszähler erläutert. Es ist ersichtlich, dass weitere Typen von Vorhersagezählern in anderen beispielhaften Ausführungsformen betrachtet werden. Es können mehrere Zustände für eine Sprungrichtung eines gegebenen vorhergesagten Sprungs dargestellt werden. Zum Beispiel können die dargestellten Zustände lauten: 11 stark vorgenommen, 10 schwach vorgenommen, 01 schwach nicht vorgenommen, 00 stark nicht vorgenommen. In beispielhaften Ausführungsformen kann durch Pflegen eines x-Bit-Zählers für „korrekt” und eines x-Bit-Zählers für „falsch” der laufende Durchschnitt der Korrektheit für die Sprungvorhersage eingerichtet werden. Für jedes Mal, wenn der Sprung korrekt vorhergesagt wird (unabhängig davon, ob er vorgenommen wird oder nicht vorgenommen wird), erhöht das System 100 den „korrekt”-Zähler. Für jedes Mal, wenn die Vorhersage falsch ist, erhöht das System 100 den „falsch”-Zähler. Immer wenn der Zähler bei seinem Höchstwert in Sättigung geht, teilt das System 100 beide Zähler durch zwei. Zum Beispiel kann das Teilen durch zwei erreicht werden, indem jeder Zähler um ein Bit nach rechts verschoben wird. In beispielhaften Ausführungsformen wird der Vertrauenswert der vorhergesagten Sprünge in Sprungvorhersage-Arrays mit der Richtungsvorhersage gespeichert. Immer wenn eine Vorhersage getroffen wird, wird zudem die Unsicherheit erhalten. In einer Ausführungsform kann die Unsicherheit gegeben sein durch: 1/Vertrauenswert = Falsch/(Korrekt + Falsch)
  • In Block 320 verfolgt das System 100 die Unsicherheit des vorhergesagten Sprungs. In beispielhaften Ausführungsformen gibt es eine Unsicherheitshöhe über den vorhergesagten Sprung, wenn bei der Unsicherheit für einen Sprung die „falsch”-Anzahl größer als 0 ist. Die Unsicherheit gibt an, dass die Vorhersage in der jüngsten Vergangenheit laut den Zählern falsch war. Ungeachtet der Unsicherheit des gegebenen Sprungs geht es nicht um ein Ausführen des Sprungs in der Pipeline gemäß der Unsicherheit des Sprungs selbst; es geht um die Anweisungen nach dem Sprung.
  • Wenn zum Beispiel ein gegebener Sprung eine Unsicherheit von „1” besitzt, wird jede Anweisung, welche nach dem Sprung die Pipeline 200 hinabgeschickt wird, so behandelt als hätte sie eine Unsicherheit von „1”. Wenn insofern zum Beispiel zehn Anweisungen nach dem Sprung die Pipeline 200 hinabgeschickt werden, hat der gegebene Thread eine Unsicherheit mit einem Wert von 10 hinabgeschickt. Wenn es nach dem ersten Sprung vier Nicht-Sprung-Anweisungen gibt und dann ein weiterer Sprung eine Unsicherheit von „2” besitzt, gefolgt von weiteren fünf Anweisungen, beträgt die Gesamtunsicherheit in der Pipeline 200 für diesen Strang „20”. In diesem Beispiel ist ersichtlich, dass der erste Sprung keine Unsicherheit zur Pipeline 200 addiert. Die nächsten vier Nicht-Sprung-Anweisungen besitzen jedoch jeweils eine Unsicherheit von „1”. (Gesamtunsicherheit an diesem Punkt = „4”). Der zweite Sprung erfolgt den Unsicherheitspfad des ersten Sprungs hinab. Der zweite Sprung addiert daher einen weiteren Zähler zur Unsicherheitsanzahl (Gesamt nun bei „5”). Die Anweisungen nach dem zweiten Sprung besitzen jeweils eine Unsicherheit von „2” für den zweiten Sprung und eine „1” für den ersten Sprung, was sich zu einem Unsicherheitswert von „3” für jede Anweisung nach dem zweiten Sprung aufsummiert. Die Unsicherheit beträgt fünf Anweisungen mit einem Wert von „3”, was eine Gesamtunsicherheit von „15” ergibt. Insgesamt besteht für die zehn Anweisungen eine Unsicherheit von „20”. Unter Fortsetzung des Beispiels fällt die Unsicherheit in der Pipeline für die zehn Anweisungen im Fall eines korrekten Auflösens des ersten Sprungs (zweiter Sprung noch aufzulösen) von „20” auf „10”, da der erste Sprung keine Unsicherheit in der Pipeline 200 mehr bereitstellt. Sollte hingegen der zweite Sprung korrekt aufgelöst werden (erster Sprung noch aufzulösen) fällt die Unsicherheit ebenfalls von „20” auf „10”, da die letzten fünf Anweisungen mit einem Wert von „2” jeweils keine Unsicherheit zur Pipeline 200 mehr beitragen. Sollten beide Sprünge korrekt aufgelöst werden, beträgt die Höhe der Unsicherheit in der Pipeline „0”, da nun keine Sprünge in der Pipeline vorhanden sind, die noch aufgelöst werden müssen.
  • 4 veranschaulicht ein Beispiel einer Tabelle 400, die realisiert werden kann, um die Unsicherheit in der Pipeline 200 zu verfolgen. Im Beispiel enthält die Tabelle eine Vertrauenswertspalte 410, wobei jede Zeile der Spalte für eine aktuelle Summe des Unsicherheitswertes für eine Anweisung steht, wenn diese auf Sprünge in der Pipeline 200 trifft. Die Realisierung von „Triplets” stellt ein Beispiel für ein Verfolgen von Anweisungsgruppen für die unsortierte Verfolgung 260 derart dar, dass Anweisungen Architekturaktualisierungen 270 mit einer Geschwindigkeit schneller als eine Anweisung pro Zyklus sortiert vornehmen können. Für das gegebene Beispiel gibt es innerhalb eines Triplets Anweisungsplätze 0, 1 und 2. Sprünge werden in jedem der Plätze unterstützt; ein Sprung in Platz 1 oder 2 beendet jedoch Anweisungen innerhalb des gegebenen Triplets. In der ersten Zeile 420 besitzt die Anweisung, „Anw.” eine Unsicherheit von „0” in der Pipeline 200. Die Unsicherheit von „0” ist unterhalb von „Anw.” abgebildet. In der zweiten Zeile 430 trifft die Anweisung auf einen Sprung mit einer Unsicherheit von „1 ”, Spr(1). Die Unsicherheit für die Anweisung beträgt nun „1 ”, was als „1” unterhalb von „Anw.” abgebildet ist. In der zweiten Zeile 430 trifft die Anweisung dann auf einen Sprung mit einer Unsicherheit von „3”, Spr(3). Die der Anweisung zugeordnete Unsicherheit beträgt nun „4”, wie in der Spalte 410 in der Zeile 440 platziert. In Zeile 440 steht die Anweisung mit einer Unsicherheit von „4” unterhalb „Anw.” in der Pipeline 200. Somit bleibt in Zeile 450 die Spalte 410 auf einer Unsicherheit von „4”. In der zweiten Zeile 450 trifft die Anweisung jedoch auf einen weiteren Sprung mit einer Unsicherheit von „2”, Spr(2). Die der Anweisung zugeordnete Unsicherheit beträgt nun „6”. Insofern liest nun in Zeile 460 die Spalte 410 eine Unsicherheit „6”, was mit der Anweisung in der Pipeline 200 verbleibt. Insofern ist ersichtlich, dass die Unsicherheit für das Triplet (d. h. jede Zeile) der (Tripletsummenwert·Anzahl von Anweisungen im Triplet) + (Unsicherheit des ältesten Sprungs·Anzahl von Anweisungen, die jünger als der ältere Sprung im Triplet sind) ist.
  • In Block 330 gleicht das System 100 die Pipeline 200 aus. Um die Pipeline 200 in beispielhaften Ausführungsformen mit Anweisungen ausgeglichen zu halten, die wahrscheinlich von jedem Thread abgeschlossen werden, verteilt die Pipeline 200 Anweisungen 230 von jedem Thread so, dass die Höhe der Unsicherheit pro Thread, nach der Verteilung, in der Pipeline 200 ausgeglichen ist. Im Hinblick auf die unsortierte Ausgabemaschine besitzt jeder Thread seine eigene Alterspriorität, und die Entscheidung zwischen den beiden Threads über den auszugebenden Thread beruht darauf, die Höhe der Unsicherheit ebenfalls ausgeglichen zu halten. Auf diese Weise werden Anweisungen in die Pipeline geschickt, die wahrscheinlich Arbeit verrichten, anstatt zu einem späteren Zeitpunkt aus der Pipeline entfernt zu werden.
  • Die Anweisungen mit einem höheren Vertrauenswert (einer geringeren Unsicherheit) werden somit priorisiert.
  • In der Pipeline 200 werden Anweisungen zur Ausgabe in eine Warteschlange eingestellt. Ähnlich zu herkömmlichen Pipelines werden von der Pipeline 200 Anweisungen sortiert abgerufen 210, decodiert 220 und verteilt 230. Gleichermaßen ähnlich zu herkömmlichen Pipelines werden Anweisungen oftmals unsortiert in Warteschlangen eingestellt und ausgegeben 240. In beispielhaften Ausführungsformen berücksichtigt das Ausgeben von Anweisungen sowohl die Unsicherheit von Anweisungen als auch das Alter der Anweisungen. Beim Ausgleichen der Pipeline 200 berücksichtigt das System 100 die Unsicherheit einer Anweisungsposition, während gleichzeitig die Anweisungen so gleichmäßig wie möglich verteilt werden, um die Unsicherheit in der Pipeline anzugleichen, während zudem die Anzahl von Anweisungen erhöht wird, die wahrscheinlich Arbeit verrichten, die den Architekturzustand beeinflusst. Um die Unsicherheit von Anweisungen in der Pipeline gleich zu halten, wird in beispielhaften Ausführungsformen ein Verhältnis der Unsicherheit berechnet, und die Anweisungen werden entsprechend dem Verhältnis verteilt. Wenn zum Beispiel Thread X eine Unsicherheitssumme von 50 und Thread Y eine Unsicherheitssumme von 25 besitzt, beträgt das Verhältnis der Unsicherheiten 2/1. Entsprechend diesem Verhältnis werden für jede zugeteilte Anweisung von Thread X zweimal so viele Anweisungen für Thread Y zugeteilt. Während die Unsicherheit von X weiter über 50 ansteigt, erhöht sich Y auf diese Wiese über 25 mit einer höheren Geschwindigkeit als X über 50 wächst. Insofern bewegt sich die Unsicherheit innerhalb der Pipeline der zwei Threads auf einen Punkt eines Unsicherheitsgleichgewichts zu. Durch Erreichen eines Gleichgewichtspunktes ist es statistisch wahrscheinlich, dass die optimale Mindestmenge von Arbeit aus der Pipeline 200 entfernt wird. Es ist ersichtlich, dass sich das Verhältnis jederzeit ändern kann, da Sprünge aufgelöst werden und sich Unsicherheiten ändern können. Zum Beispiel kann sich die Unsicherheit für Thread X auf 60 und die Unsicherheit von Thread Y auf 40 bewegen, in welchem Fall das Verhältnis zu 3/2 wird. In solch einem Fall werden für jeweils zwei Anweisungen für Thread X drei Anweisung für Thread Y zugeteilt, um wiederum die Unsicherheit der Pipeline 200 anzugleichen und die Chancen für durchzuführende Arbeiten zu erhöhen, die den Architekturzustand der Maschine beeinflussen. In einem weiteren Beispiel kann ein Sprung für Thread X aufgelöst werden, wodurch die Unsicherheit auf 30 fällt und ein Verhältnis von 3/4 vorliegt. In solch einem Fall werden für jeweils vier Anweisungen für Thread X drei Anweisung für Thread Y zugeteilt, um wiederum die Unsicherheit der Pipeline 200 anzugleichen und die Chancen für durchzuführende Arbeiten zu erhöhen, die den Architekturzustand der Maschine beeinflussen.
  • Wie hierin beschrieben, liegt eine weitere Überlegung beim Pipelineausgleich darin, das Alter der auszugebenden Anweisung zu berücksichtigen. Herkömmlicherweise geben Pipelines die älteste Anweisung mit gültigen Daten in der Ausgabewarteschlange aus. In beispielhaften Ausführungsformen werden Anweisungen auf der Grundlage des Alters der Anweisung sowie der Unsicherheit der Anweisung verteilt. Für jeden Thread untersucht die älteste zur Ausgabe zulässige Anweisung die Summe der Unsicherheit von Anweisungen bis zu dem Punkt in der Pipeline 200, und bei der Anweisung vom gegebenen Thread, welche die geringste Unsicherheit besitzt, handelt es sich um die auszugebende Anweisung. Im Falle, dass die Unsicherheiten zwischen den Threads gleich sind, kann eine Umlaufauswahl (round-robin selection) zwischen den Threads zur Ausgabe angewandt werden. Wenn zum Beispiel für Thread X seine älteste zulässige Anweisung als eine Unsicherheitssumme von 30 festgelegt ist und für Thread Y seine älteste zulässige auszugebende Anweisung als eine Unsicherheitssumme von 10 festgelegt ist, wird wie vorstehend beschrieben die Anweisung für Thread Y ausgegeben. Wenn mehr als eine Anweisung in einem gegebenen Zyklus auszugeben ist, wird dieser Vergleich für jeden durch die Anweisungsausgabe im gegebenen Zyklus zu füllenden Anweisungsplatz wiederholt.
  • In beispielhaften Ausführungsformen realisieren die hierin beschriebenen Systeme und Verfahren ein Schema mit statischen Grenzen. 5 veranschaulicht schaubildhaft ein Beispiel einer Ausgabewarteschlange mit statischer Grenze 500, die gemäß beispielhaften Ausführungsformen realisiert werden kann. Die statische Grenze setzt unter der Voraussetzung, dass der andere Thread blockiert ist, einen Schwellenwert für eine Anzahl von für einen Thread zu verteilende Anweisungen, so dass ein gegebener Thread, B, die Ausgabewarteschlange während eines Zeitrahmens nicht blockiert, wenn der andere Thread, A, keine in die Ausgabewarteschlange zu platzierenden Anweisungen aufweist. Im Beispiel besitzen sowohl Thread A als auch Thread B zu verteilende Anweisungen als eine Funktion des Abrufens. Im Beispiel nimmt Thread B die Mehrheit der Ressourcen auf, da zum Beispiel Thread A unter Umständen ein Anweisungsabrufen mit langer Latenzzeit erlebt. Insofern wird eine große Anzahl von Anweisungen von Thread B in die Ausgabewarteschlange eingestellt, während A dabei ist, zusätzliche zu decodierende und in die Warteschlange einzustellende Anweisungen abzurufen. Herkömmlicherweise würde eine Ausgabewarteschlange Thread B erlauben, die Ressourcen weiterhin zu benutzen. In beispielhaften Ausführungsformen wird der Schwellenwert gesetzt, um sicherzustellen, dass manche Anweisungen von Thread A auch durch Reservieren von Platz in der Ausgabewarteschlange von Thread A verteilt werden können. Sobald die Anweisungen für Thread B ein Grenzniveau 510 (einen gegebenen prozentualen Anteil der Ausgabewarteschlange) erreichen, wird das Verteilen von Anweisungen von Thread B in die Ausgabewarteschlange angehalten. Selbst wenn Thread A nicht bereit ist, Anweisungen zu verteilen, verfügt er über eine Anzahl N von in der Ausgabewarteschlange reservierten Plätzen, in die Anweisungen verteilt werden können. Wenn sich Thread A von der Operation mit langer Latenzzeit erholt, werden in der Ausgabewarteschlange verfügbare Plätze für die Anweisungen von Thread A vorhanden sein. Das Beispiel veranschaulicht einen Kopfzeiger 520 und einen Endzeiger 530. Der Kopfzeiger 520 stellt den Kopf der Umlauf-Ausgabewarteschlange dar und legt die älteste Anweisung in der Warteschlange fest, und bei dem Endzeiger 530 handelt es sich um einen zusätzlichen Zeiger, der festlegt, wo die nächste Anweisung in die Warteschlange einzustellen ist. In beispielhaften Ausführungsformen zeigt der Endzeiger 530 auf den ersten Platz nach dem Grenzschwellenwert 510. Es wurde zugelassen, dass B kontinuierlich Anweisungen in die Endzeigerposition der Ausgabewarteschlange verteilt bis die Grenze 510 erreicht war. An diesem Punkt bewegt sich der Endzeiger einen Platz hinter die Grenze, um die Position der Ausgabewarteschlange anzugeben, in welche die nächste Anweisung zu verteilen ist. Anweisungen von Thread A verfügen nach Durchführen der Operation mit langer Latenzzeit nun über Plätze in der Ausgabewarteschlange, in die ein Verteilen möglich ist. In solch einem Schema hat die Grenze verhindert, dass das Verhältnis übermäßig größer wird als es bereits geworden ist, während sich das Unsicherheitsverhältnis wahrscheinlich allmählich vom Gleichgewicht wegbewegt hat.
  • In beispielhaften Ausführungsformen können die hierin beschriebenen Systeme und Verfahren ein Entfernen aus dem Ausgabeschema realisieren. 6 veranschaulicht schaubildhaft ein Beispiel eines Entfernens aus einer Ausgabewarteschlange 600, die gemäß beispielhaften Ausführungsformen realisiert werden kann. Anweisungen können aus der Ausgabewarteschlange entfernt werden, so dass es einen Ausgleich von Unsicherheiten verteilter Anweisungen in der Ausgabewarteschlange gibt. Im Beispiel besitzen sowohl Thread A als auch Thread B zu verteilende Anweisungen in der Ausgabewarteschlange. Thread B nimmt die Mehrheit der Ressourcen auf, da zum Beispiel Thread A unter Umständen eine Anweisungsabrufoperation mit langer Latenzzeit durchläuft. Insofern wird eine große Anzahl von Anweisungen von Thread B in die Ausgabewarteschlange eingestellt, wodurch sich das Unsicherheitsverhältnis der zwei Threads vom Gleichgewicht wegbewegt. Es ist nicht bekannt, wie lange Thread A blockiert sein wird und insofern kann Thread B zusätzliche Leistung gewinnen, indem er die vollständige Ausgabewarteschlange nutzt, da sie andernfalls ungenutzt wäre, weil Thread A keine in die Ausgabewarteschlange zu platzierenden Anweisungen verfügbar hat. Wenn in beispielhaften Ausführungsformen die Anweisungen für Thread A zum Einfügen in die Ausgabewarteschlange verfügbar werden, kann die Pipeline N jüngere Anweisungen von Thread B aus dieser Ausgabewarteschlange entfernen und sie neu verteilen, nachdem die Anweisungen von Thread A verteilt sind, was die Unsicherheit der Ausgabewarteschlange ausgleicht. Ein Kopfzeiger 610 stellt den Kopf der Umlauf-Ausgabewarteschlange dar, der die älteste Anweisung in der Ausgabewarteschlange festlegt. Ein Endzeiger 620 legt den nächsten Platz fest, in den eine Anweisungen in die Ausgabewarteschlange einzufügen ist. Eine gegebene Anzahl von B kann aus der Warteschlange entfernt werden und der B-Zeiger kann näher an den Kopfzeiger 610 bewegt werden, um eine Anzahl von zu entfernenden Thread-B-Anweisungen einzurichten, wie hierin beschrieben. Um ein erneutes Abrufen der Anweisungen für Thread B zu vermeiden, können in beispielhaften Ausführungsformen die Anweisungen in der „Geister”(virtuellen)-Warteschlange gespeichert werden, bei der es sich um eine Erweiterung des Einstellens in eine Warteschlange handeln kann, die Anweisungen vom Anweisungsabrufen vor dem Verteilen 230 speichert.
  • Wie vorstehend beschrieben, können Ausführungsformen in der Form von computerrealisierten Prozessen und Vorrichtungen zum Ausführen dieser Prozesse ausgebildet werden. Eine Ausführungsform kann als einen Herstellungsartikel ein in 7 abgebildetes Computerprogrammprodukt 700 auf einem computerlesbaren/durch Computer verwendbaren Medium 702 mit einer Computerprogrammcode-Logik beinhalten, die in einem gegenständlichen Medium ausgebildete Anweisungen enthält. Zu beispielhaften Herstellungsartikeln für das computerlesbare/durch Computer verwendbare Medium 702 können Floppy-Disketten, CD-ROMS, Festplattenlaufwerke, USB(universal serial bus)-Flash-Laufwerke und -Sticks oder jedes beliebige andere computerlesbare Speichermedium zählen, wobei bei Laden der Computerprogrammcode-Logik 704 in und Ausführen durch einen Computer der Computer zu einer Vorrichtung zum Ausführen der Erfindung wird. Ausführungsformen enthalten die Computerprogrammcode-Logik 704 zum Beispiel unabhängig davon, ob sie in einem Speichermedium gespeichert ist, auf einen Computer geladen und/oder durch diesen ausgeführt wird oder über irgendein Übertragungsmedium übertragen wird, wie beispielsweise über elektrische Leitungen oder Kabel, durch Lichtwellenleiter oder über elektromagnetische Wellen, wobei bei Laden der Computerprogrammcode-Logik 704 in und Ausführen durch einen Computer der Computer zu einer Vorrichtung zum Ausführen der Erfindung wird. Bei Implementieren auf einem universellen Mikroprozessor konfigurieren die Segmente der Computerprogrammcode-Logik 704 den Mikroprozessor so, dass spezielle Logikschaltungen erzeugt werden.
  • Wie für den Fachmann ersichtlich ist, können Aspekte der vorliegenden Erfindung als ein System, Verfahren, oder Computerprogrammprodukt ausgebildet werden.

Claims (10)

  1. Durch Computer realisiertes Verfahren zur Ausführung von Anweisungen in einer Pipeline, wobei das Verfahren aufweist: – in der Pipeline eine Vielzahl von Anweisungen von einer Vielzahl von Threads abzurufen, wobei die Vielzahl von Anweisungen eine Vielzahl von Sprunganweisungen enthält; – für jede der Vielzahl von Sprunganweisungen jeder aus der Vielzahl von Sprunganweisungen eine Sprungunsicherheit zuzuweisen; – für jede der Vielzahl von Anweisungen Zuweisen einer Anweisungsunsicherheit; – Ermitteln einer Gesamtunsicherheit zu jedem der Vielzahl von Threads als Summe der Anweisungsunsicherheiten der einzelnen Anweisungen; – wobei die Anweisungsunsicherheit jeder Anweisung ermittelt wird aus der Summe der Sprungunsicherheiten der vorangehenden Sprunganweisungen; und – Ausgleichen des Verteilens von Anweisungen, die den einzelnen Threads zugeordnet sind, in die Pipeline in Abhängigkeit von der Summe von Anweisungsunsicherheiten.
  2. Verfahren nach Anspruch 1, weiterhin aufweisend ein Zuweisen einer Vielzahl von Unsicherheiten für jeden der Vielzahl von Threads.
  3. Verfahren nach Anspruch 2, weiterhin aufweisend ein Berechnen einer Vielzahl von Unsicherheitsverhältnissen aus der Vielzahl von Unsicherheiten.
  4. Verfahren nach Anspruch 2, weiterhin aufweisend ein Verteilen der Vielzahl von Anweisungen in der Pipeline.
  5. Verfahren nach Anspruch 2, wobei Anweisungen proportional zu einem Verhältnis aus der Vielzahl von Unsicherheiten zugeteilt werden.
  6. Verfahren nach Anspruch 1, weiterhin aufweisend ein Berechnen einer Gesamtunsicherheit, wobei die Gesamtunsicherheit eine Summe der Anweisungsunsicherheit für jede der Vielzahlanweisungen darstellt.
  7. Verfahren nach Anspruch 1, weiterhin aufweisend ein Reservieren eines Ausgabewarteschlangenplatzes für einen Teilsatz der Vielzahl von Anweisungen.
  8. Verfahren nach Anspruch 1, weiterhin aufweisend ein Entfernen eines ersten Teilsatzes von Anweisungen aus der Pipeline als Reaktion auf ein Verfügbarwerden eines zweiten Teilsatzes Anweisungen für ein Verteilen.
  9. System, das ein Mittel aufweist, das eingerichtet ist, alle Schritte des Verfahrens nach einem der vorhergehenden Verfahrensansprüche auszuführen.
  10. Computerprogramm, das Anweisungen zum Ausführen aller Schritte des Verfahrens nach einem der vorhergehenden Verfahrensansprüche aufweist.
DE112013000486.0T 2012-02-06 2013-01-24 Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads Active DE112013000486B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/366,999 US9182991B2 (en) 2012-02-06 2012-02-06 Multi-threaded processor instruction balancing through instruction uncertainty
US13/366,999 2012-02-06
PCT/EP2013/051285 WO2013117434A1 (en) 2012-02-06 2013-01-24 Multi-threaded processor instruction balancing through instruction uncertainty

Publications (2)

Publication Number Publication Date
DE112013000486T5 DE112013000486T5 (de) 2014-10-02
DE112013000486B4 true DE112013000486B4 (de) 2018-03-29

Family

ID=47603736

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013000486.0T Active DE112013000486B4 (de) 2012-02-06 2013-01-24 Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads

Country Status (5)

Country Link
US (2) US9182991B2 (de)
CN (1) CN104094223B (de)
DE (1) DE112013000486B4 (de)
GB (1) GB2513787B (de)
WO (1) WO2013117434A1 (de)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606800B1 (en) * 2012-03-15 2017-03-28 Marvell International Ltd. Method and apparatus for sharing instruction scheduling resources among a plurality of execution threads in a multi-threaded processor architecture
US9569222B2 (en) 2014-06-17 2017-02-14 International Business Machines Corporation Implementing out of order processor instruction issue queue
US9652418B2 (en) 2014-06-30 2017-05-16 Intel Corporation High throughput register file memory with pipeline of combinational logic
US9734033B2 (en) 2014-12-08 2017-08-15 International Business Machines Corporation Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
US10331454B2 (en) * 2016-09-29 2019-06-25 Intel Corporation System and method for load balancing in out-of-order clustered decoding
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
WO2019069255A1 (en) * 2017-10-06 2019-04-11 International Business Machines Corporation MANAGING EFFECTIVE ADDRESS SYNONYMS IN A LOADING-STORAGE UNIT OPERATING WITHOUT ADDRESS TRANSLATION
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US10802829B2 (en) 2017-11-30 2020-10-13 International Business Machines Corporation Scalable dependency matrix with wake-up columns for long latency instructions in an out-of-order processor
US10884753B2 (en) 2017-11-30 2021-01-05 International Business Machines Corporation Issue queue with dynamic shifting between ports
US10942747B2 (en) * 2017-11-30 2021-03-09 International Business Machines Corporation Head and tail pointer manipulation in a first-in-first-out issue queue
US10922087B2 (en) 2017-11-30 2021-02-16 International Business Machines Corporation Block based allocation and deallocation of issue queue entries
US10564976B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Scalable dependency matrix with multiple summary bits in an out-of-order processor
US10929140B2 (en) 2017-11-30 2021-02-23 International Business Machines Corporation Scalable dependency matrix with a single summary bit in an out-of-order processor
US10572264B2 (en) 2017-11-30 2020-02-25 International Business Machines Corporation Completing coalesced global completion table entries in an out-of-order processor
US10564979B2 (en) 2017-11-30 2020-02-18 International Business Machines Corporation Coalescing global completion table entries in an out-of-order processor
US10901744B2 (en) 2017-11-30 2021-01-26 International Business Machines Corporation Buffered instruction dispatching to an issue queue
US11507380B2 (en) * 2018-08-29 2022-11-22 Advanced Micro Devices, Inc. Branch confidence throttle
US11880304B2 (en) 2022-05-24 2024-01-23 International Business Machines Corporation Cache management using cache scope designation

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060161762A1 (en) 2005-01-20 2006-07-20 Eisen Lee E Method and logical apparatus for managing processing system resource use for speculative execution
US20110320774A1 (en) 2010-06-24 2011-12-29 International Business Machines Corporation Operand fetching control as a function of branch confidence

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IE940855A1 (en) 1993-12-20 1995-06-28 Motorola Inc Data processor with speculative instruction fetching and¹method of operation
US6282663B1 (en) 1997-01-22 2001-08-28 Intel Corporation Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor
US6092187A (en) 1997-09-19 2000-07-18 Mips Technologies, Inc. Instruction prediction based on filtering
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6697932B1 (en) 1999-12-30 2004-02-24 Intel Corporation System and method for early resolution of low confidence branches and safe data cache accesses
US20010037384A1 (en) 2000-05-15 2001-11-01 Brian Jemes System and method for implementing a virtual backbone on a common network infrastructure
US7051192B2 (en) 2000-05-31 2006-05-23 Sun Microsystems, Inc. Facilitating value prediction to support speculative program execution
DE60143896D1 (de) 2000-07-14 2011-03-03 Mips Tech Inc Anweisungsabruf und -absendung in einem multi-thread-system
US6766441B2 (en) 2001-01-19 2004-07-20 International Business Machines Corporation Prefetching instructions in mis-predicted path for low confidence branches
US7366877B2 (en) 2003-09-17 2008-04-29 International Business Machines Corporation Speculative instruction issue in a simultaneously multithreaded processor
US7334143B2 (en) 2004-04-19 2008-02-19 Hewlett-Packard Development Company, L.P. Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value
US20070061554A1 (en) 2005-09-09 2007-03-15 Lsi Logic Corporation Branch predictor for a processor and method of predicting a conditional branch
US7707396B2 (en) 2006-11-17 2010-04-27 International Business Machines Corporation Data processing system, processor and method of data processing having improved branch target address cache
WO2008077088A2 (en) 2006-12-19 2008-06-26 The Board Of Governors For Higher Education, State Of Rhode Island And Providence Plantations System and method for branch misprediction prediction using complementary branch predictors
US8813057B2 (en) 2007-03-31 2014-08-19 Intel Corporation Branch pruning in architectures with speculation support
US7627742B2 (en) * 2007-04-10 2009-12-01 International Business Machines Corporation Method and apparatus for conserving power by throttling instruction fetching when a processor encounters low confidence branches in an information handling system
US7805595B2 (en) 2007-04-20 2010-09-28 Arm Limited Data processing apparatus and method for updating prediction data based on an operation's priority level
US7779232B2 (en) * 2007-08-28 2010-08-17 International Business Machines Corporation Method and apparatus for dynamically managing instruction buffer depths for non-predicted branches
US8255669B2 (en) 2008-01-30 2012-08-28 International Business Machines Corporation Method and apparatus for thread priority control in a multi-threaded processor based upon branch issue information including branch confidence information
US8433885B2 (en) 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US9836304B2 (en) * 2010-11-15 2017-12-05 Advanced Micro Devices, Inc. Cumulative confidence fetch throttling

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060161762A1 (en) 2005-01-20 2006-07-20 Eisen Lee E Method and logical apparatus for managing processing system resource use for speculative execution
US20110320774A1 (en) 2010-06-24 2011-12-29 International Business Machines Corporation Operand fetching control as a function of branch confidence

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Kaxiras, Stefanos; Martonosi, Margaret: Computer Architecture Techniques for Power-Efficiency. Madison (USA) : Morgan & Claypool, 2008 (SYNTHESIS LECTURES ON COMPUTER ARCHITECTURE #4). S. i-ix, 17, 46-49, 117-120. - ISBN 1935-3243
Luo, K.: Boosting SMT performance by speculation control. In: Proceedings 15th International Parallel and Distributed Processing Symposium. IPDPS 2001, 2001, S. 1-9. - ISSN 1530-2075. https://doi.org/10.1109/IPDPS.2001.924929 [abgerufen am 23.10.2017]
Vandierendonck, Hans; Seznec, André: Fetch Gating Control Through Speculative Instruction Window Weighting. In: Lecture Notes in Computer Science, 4367, 2007, S. 120-135. - ISSN 0302-9743. http://link.springer.com/chapter/10.1007/978-3-540-69338-3_9 [abgerufen am 19.05.2017]

Also Published As

Publication number Publication date
GB2513787B (en) 2016-11-23
DE112013000486T5 (de) 2014-10-02
WO2013117434A1 (en) 2013-08-15
GB201414719D0 (en) 2014-10-01
US9182991B2 (en) 2015-11-10
US20130205116A1 (en) 2013-08-08
CN104094223B (zh) 2016-10-05
US9298466B2 (en) 2016-03-29
GB2513787A (en) 2014-11-05
CN104094223A (zh) 2014-10-08
US20130205118A1 (en) 2013-08-08

Similar Documents

Publication Publication Date Title
DE112013000486B4 (de) Anweisungsausgleich durch Anweisungsunsicherheit für Prozessoren mit mehreren Threads
DE102014011332B4 (de) Priorisieren von anweisungen basierend auf typ
DE102014000384A1 (de) ZUWEISEN VON RESSOURCEN ZU THREADS AUF DER BASIS VON SPEKULATIONSMESSGRÖßEN
DE112018006124B4 (de) ZUSAMMENFÜHREN VON EINTRÄGEN GLOBALER ABSCHLUSSTABELLEN IN EINEM OoO-PROZESSOR
US10089142B2 (en) Dynamic task prioritization for in-memory databases
DE112010003595B4 (de) Verfahren, Systeme und maschinenverarbeitbares Medium zur Bereitstellung einer verteiltenPrädikatvorhersage
EP1831786B1 (de) Verfahren zur verteilung von rechenzeit in einem rechnersystem
DE69826418T2 (de) Anordnung zum Abtasten mehrerer Instruktionen in einer Prozessorpipeline
DE112016004801T5 (de) Arbeitslastzuweisung für computerressourcen
DE102020112961A1 (de) Techniken zum dynamischen partitionieren von aufgaben
DE112010005096T5 (de) Verfahren und Vorrichtungen zum Bewerten der Ressourcen-Kapazität in einem System von virtuellen Containern
DE112006003081T5 (de) Leistungspriorisierung in Multithreadprozessoren
DE112011101086T5 (de) Optimieren von Energieverbrauch und Anwendungsleistung in einem Multithread-Mehrkernprozessorsystem
DE112010003610T5 (de) Vorabfüllen eines Cachespeichers bei Threadmigration
CN104268018B (zh) 一种Hadoop集群中的作业调度方法和作业调度器
DE102012210895A1 (de) Vorhersage der ungeordneten Parallelverarbeitung der Befehle von Threads in einem Multithread-Prozessor
CN103677999A (zh) 计算环境内的资源的管理
DE102016204680A1 (de) Auswählen von Strategien zum Zuordnen von Ressourcen und Lösen von Ressourcenkonflikten
DE112018006127B4 (de) Abschliessen von verbundenen einträgen einer globalen abschlusstabelle in einem out-of-order-prozessor
DE10393481T5 (de) Verfahren und Vorrichtung zum Durchführen einer Cache-Umgehung
CN108334409A (zh) 一种细粒度的高性能云资源管理调度方法
US20220195434A1 (en) Oversubscription scheduling
DE102019103932A1 (de) Technologien für optimierte Dienstgütebeschleunigung
DE102011007603A1 (de) Verfahren und Vorrichtung zur Verarbeitung von Datenelementen mit minimaler Latenzzeit
EP2840513B1 (de) Dynamische Aufgabenpriorisierung für In-memory-Datenbanken

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final