DE102012023574A1 - Verfahren, Vorrichtung und System zum Effizienten Verarbeiten von mehreren Abbildungen virtueller Adressen bei der transaktionalen Abarbeitung - Google Patents

Verfahren, Vorrichtung und System zum Effizienten Verarbeiten von mehreren Abbildungen virtueller Adressen bei der transaktionalen Abarbeitung Download PDF

Info

Publication number
DE102012023574A1
DE102012023574A1 DE201210023574 DE102012023574A DE102012023574A1 DE 102012023574 A1 DE102012023574 A1 DE 102012023574A1 DE 201210023574 DE201210023574 DE 201210023574 DE 102012023574 A DE102012023574 A DE 102012023574A DE 102012023574 A1 DE102012023574 A1 DE 102012023574A1
Authority
DE
Germany
Prior art keywords
address
physical address
translation
entry
translation buffer
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.)
Withdrawn
Application number
DE201210023574
Other languages
English (en)
Inventor
Paul Caprioli
Abhay S. Kanhere
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102012023574A1 publication Critical patent/DE102012023574A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Hier werden eine Vorrichtung und ein Verfahren zum Bereitstellen von Strukturen zum Unterstützen des Software-basierten Neuordnens eines Speichers in atomaren Abschnitten eines Codes beschrieben. Am Beginn oder Ende eines kritischen Abschnitts werden spekulative Bits eines Übersetzungspuffers zurückgesetzt. Wenn ein spekulativer Speicherzugriff eine Adressübersetzung einer virtuellen Adresse in eine physikalische Adresse bewirkt, wird der Übersetzungspuffer durchsucht, um zu ermitteln, ob ein anderer Eintrag (eine andere virtuelle Adresse) die gleiche physikalische Adresse enthält. Und wenn der andere Eintrag die gleiche physikalische Adresse enthält, wird die spekulative Abarbeitung fehlschlagen gelassen, um Schutz vor einer ungültigen Abarbeitung zu bieten, die aus dem Neuordnen des Speichers resultiert.

Description

  • Gebiet der Erfindung
  • Diese Patentbeschreibung betrifft das Gebiet der integrierten Schaltungen und insbesondere die Adressübersetzung in Prozessoren.
  • Hintergrund der Erfindung
  • Fortschritte in der Halbleiterverarbeitung und bei der logischen Struktur haben eine Zunahme des Umfangs der Logik ermöglicht, die auf integrierten Schaltungsanordnungen vorhanden sein kann. Dadurch haben sich Computersystem-Konfigurationen von einer einzigen oder mehreren integrierten Schaltungen in einem System hin zu mehreren Kernen und mehreren Logikprozessoren entwickelt, die auf einzelnen integrierten Schaltungen vorhanden sind. Ein Prozessor oder eine integrierte Schaltung umfasst normalerweise einen einzigen Prozessorchip, wobei der Prozessorchip jede Anzahl von Kernen oder Logikprozessoren haben kann.
  • Durch die immer weiter wachsende Anzahl von Kernen und Logikprozessoren auf integrierten Schaltungen können mehr Software-Threads gleichzeitig abgearbeitet werden. Die wachsende Anzahl von Software-Threads, die simultan abgearbeitet werden können, hat jedoch zu Problemen bei der Synchronisation von Daten geführt, die von den Software-Threads gemeinsamen genutzt werden. Eine weit verbreitete Lösung für den Zugriff auf gemeinsam genutzte Daten in Systemen mit mehreren Kernen oder mehreren Logikprozessoren ist die Verwendung von Datensperren zur Gewährleistung eines gemeinsamen Ausschlusses über mehrere Zugriffe auf gemeinsam genutzte Daten hinweg. Das immer stärker zunehmende Vermögen, mehrere Software-Threads abzuarbeiten, führt potentiell zu einer künstlichen Konkurrenz und einer Serialisierung der Abarbeitung.
  • Betrachten wir zum Beispiel eine Hash-Tabelle, die gemeinsame genutzte Daten hält. Mit einem Sperrsystem kann ein Programmierer die gesamte Hash-Tabelle sperren, sodass nur ein Thread auf die gesamte Hash-Tabelle zugreifen kann. Der Durchsatz und die Leistung anderer Threads werden jedoch potentiell beeinträchtigt, da sie erst dann auf Einträge in der Hash-Tabelle zugreifen können, wenn die Sperre aufgehoben wird. Alternativ kann jeder Eintrag in der Hash-Tabelle gesperrt werden. So oder so – nach dem Extrapolieren dieses einfachen Beispiels in ein großes skalierbares Programm wird klar, dass die Komplexität der Sperrkonkurrenz, die Serialisierung, Fine-Grain-Synchronisation und Deadlock-Vermeidung, zu extrem starken Belastungen für Programmierer werden.
  • Ein weiteres neues Datensynchronisationsverfahren umfasst die Verwendung eines transaktionalen Speichers (TM). Häufig umfasst die transaktionale Abarbeitung die atomare Durchführung einer Gruppierung einer Vielzahl von Mikro-Operationen, Operationen oder Befehlen. In dem vorstehenden Beispiel laufen beide Threads in der Hash-Tabelle, und ihre Speicherzugriffe werden überwacht/verfolgt. Wenn beide Threads auf den gleichen Eintrag zugreifen oder ihn ändern, kann eine Konfliktlösung durchgeführt werden, um die Datenvalidität zu gewährleisten. Eine Art der transaktionalen Abarbeitung ist der Software-unterstützte transaktionale Speicher (Software Transactional Memory; STM), bei dem die Verfolgung von Speicherzugriffen, Konfliktlösung, Abbruch-Tasks und andere transaktionale Tasks in der Software ausgeführt werden, oft ohne die Unterstützung von Hardware. Eine weitere Art der transaktionalen Abarbeitung ist ein Hardware-unterstütztes transaktionales Speichersystem (HTM-System; HTM: Hardware Transactional Memory), bei dem Hardware zur Unterstützung der Zugriffsverfolgung, Konfliktlösung und anderer transaktionaler Tasks hinzugezogen wird.
  • Wie zu erkennen ist, hat der TM das Potential, eine bessere Leistung unter mehreren Threads zu liefern. Und in Transaktionen würden Compiler und Binärumsetzer Ladungen und Speicherungen in einem Transaktionsbereich neu ordnen, um den Code weiter zu optimieren und ihn effizienter zu machen. Während dieses Neuordnens bestimmen jedoch die statische Analyse oder Laufzeit-Kontrollen die Zugriffe auf genau die virtuelle Adresse, die möglicherweise gegen die Regeln für das Ordnen von Speicherzugriffen verstößt. In diesem Szenario kann ein Compiler oder ein Binärumsetzer in der Lage sein, ein Lesen nach dem Schreiben (read alter Write; RAW), ein Schreiben nach dem Lesen (WAR) oder ein Schreiben nach dem Schreiben (WAW) für genau diese virtuelle Speicheradresse zu verhindern. Aber Software ist oft nicht in der Lage, einen Fall zu erkennen, bei dem zwei verschiedene virtuelle Adressen genutzt werden, wobei die beiden verschiedenen virtuellen Adressen Bestandteil von virtuellen Adressräumen sind, die auf den gleichen physikalischen Adressraum abgebildet werden. Dadurch werden die beiden verschiedenen virtuellen Adressen potentiell auf ein und dieselbe physikalische Adresse abgebildet. Daher ordnet die Software während der Optimierung eine Ladung oder eine Speicherung an verschiedenen virtuellen Adressen neu, die auf ein und dieselbe physikalische Adresse abgebildet werden, aber dieses Neuordnen führt potentiell zu ungültigen Daten oder einer ungültigen Abarbeitung.
  • Kurze Beschreibung der Zeichnungen
  • Die vorliegende Erfindung wird nachstehend anhand von Beispielen erläutert und soll nicht durch die Figuren in den beigefügten Zeichnungen beschränkt werden.
  • 1 zeigt eine Ausführungsform einer logischen Darstellung eines Systems, das einen Prozessor mit mehreren Verarbeitungselementen (zwei Kernen und vier Thread-Einschüben) hat.
  • 2 zeigt eine Ausführungsform einer logischen Darstellung von Modulen zur Unterstützung beim Detektieren mehrerer virtueller Adressen für ein und dieselbe physikalische Adresse.
  • 3 zeigt eine weitere Ausführungsform einer logischen Darstellung von Modulen zur Unterstützung beim Detektieren mehrerer virtueller Adressen für ein und dieselbe physikalische Adresse.
  • 4 zeigt eine Ausführungsform eines Ablaufdiagramms für ein Verfahren zum vorzeitigen Abbrechen einer Transaktion beim Ermitteln einer Abbildung von verschiedenen transaktional zugegriffenen Adressen auf eine entsprechende physikalische Adresse.
  • Detaillierte Beschreibung
  • In der nachstehenden Beschreibung werden zahlreiche spezielle Einzelheiten dargelegt, wie etwa Beispiele für spezielle Arten von speziellen Prozessor-Konfigurationen, spezielle Hardware-Strukturen, spezielle Architektur- und Mikroarchitektur-Details, spezielle Register-Konfigurationen, spezielle Adressabgleichverfahren, spezielle Arten von Adressräumen usw., um ein besseres Verständnis der vorliegenden Erfindung zu ermöglichen. Fachleuten dürfte jedoch klar sein, dass diese speziellen Einzelheiten nicht erforderlich sind, um die vorliegende Erfindung zu nutzen. In anderen Fällen sind bekannte Komponenten oder Verfahren, wie etwa spezielle und alternative Architekturen von Prozessoren, spezielle Logikschaltungen oder Codes für beschriebene Algorithmen, spezielle Einzelheiten zur Adressübersetzung, spezielle Funktionsweisen von Decodierern, spezielle Befehlsformate, spezielle Strukturen von transaktionalen Speichern und andere spezielle Betriebsdetails zu Prozessoren, nicht näher beschrieben worden, um zu vermeiden, dass das Verständnis der vorliegenden Erfindung unnötig erschwert wird.
  • Die nachstehenden Ausführungsformen werden zwar unter Bezugnahme auf einen Prozessor beschrieben, aber andere Ausführungsformen können für andere Arten von integrierten Schaltungen und Logikvorrichtungen verwendet werden. Ähnliche Verfahren und Grundsätze von hier beschriebenen Ausführungsformen können auf andere Arten von Schaltungen oder Halbleiteranordnungen angewendet werden, die von einem höheren Durchsatz und einer höheren Leistung profitieren können. Zum Beispiel sind die beschriebenen Ausführungsformen nicht auf Computersysteme beschränkt und sie können auch in anderen Geräten verwendet werden, wie etwa Handheld-Geräten, Ein-Chip-Systemen (SoC) und eingebetteten Anwendungen. Zu den Beispielen für Handheld-Geräte gehören Mobiltelefone, Internetprotokoll-Geräte, Digitalkameras, Personal Digital Assistants (PDAs) und Handheld-PCs. Zu den eingebetteten Anwendungen gehören der Microcontroller, der Digitalsignalprozessor (DSP), das Ein-Chip-System, der Netzwerk-Computer (NetPC), die Set-Top-Box, Netzwerk-Hubs, WAN-Schalter (WAN: wide area network; Weitverkehrsnetz) oder jedes andere System, das die Funktionen und Operationen ausführen kann, die nachstehend beschrieben werden.
  • Das Verfahren und die Vorrichtung, die hier beschrieben werden, dienen dem Schutz von Abbildungen von Hardware-Adressübersetzungen (z. B. Schutzvorkehrungen für Abbildungen eines disjunkten virtuellen Adressraums auf ein und denselben physikalischen Adressraum, um das Neuordnen von Speicherzugriffen in atomaren Abschnitten eines Codes zu ermöglichen). Insbesondere werden Schutzvorkehrungen für die Abbildung von Adressübersetzungen bei der transaktionalen Abarbeitung mit einem Mikroprozessor, wie etwa einem Prozessor 100, erörtert. Aber die Vorrichtung und die Verfahren, die hier beschrieben werden, sind nicht hierauf beschränkt, da sie in Verbindung mit alternativen Prozessor-Architekturen sowie jeder Anordnung mit mehreren Verarbeitungselementen implementiert werden können. Zum Beispiel können Sicherheiten für die Abbildung von Adressübersetzungen in anderen Arten von integrierten Schaltungen und Logikvorrichtungen implementiert werden. Oder sie können in kleinen Formfaktorgeräten, Handheld-Geräten, SoCs oder eingebetteten Anwendungen verwendet werden, wie vorstehend dargelegt worden ist. Darüber hinaus können Sicherheiten für die Abbildung von Adressübersetzungen auch für Neuordnungsverfahren implementiert werden, die nicht mit der transaktionalen Abarbeitung verbunden sind.
  • Kommen wir nun zu 1. Hier ist eine Ausführungsform eines Prozessors mit mehreren Kernen dargestellt. Der Prozessor 100 ist ein Prozessor oder eine Verarbeitungsvorrichtung zum Abarbeiten eines Codes, wie etwa ein Mikroprozessor, ein eingebetteter Prozessor, ein Digitalsignalprozessor (DSP), ein Netzwerk-Prozessor, ein Handheld-Prozessor, ein Applikationsprozessor, ein Coprozessor oder ein anderes Gerät. Bei einer Ausführungsform hat der Prozessor 100 mindestens zwei Kerne, und zwar einen Kern 101 und einen Kern 102, die asymmetrische Kerne oder symmetrische Kerne (die dargestellte Ausführungsform) sein können. Der Prozessor 100 kann jedoch jede Anzahl von Verarbeitungselementen haben, die symmetrisch oder asymmetrisch sein können.
  • Bei einer Ausführungsform bezieht sich das Verarbeitungselement auf Hardware oder Logik zum Unterstützen eines Software-Threads. Beispiele für Hardware-Verarbeitangselemente sind eine Thread-Einheit, ein Thread-Einschub, ein Thread, eine Prozesseinheit, ein Kontext, eine Kontexteinheit, ein Logikprozessor, ein Hardware-Thread, ein Kern und/oder ein anderes Element, das einen Zustand für einen Prozessor halten kann, wie etwa einen Abarbeitungszustand oder einen Architekturzustand. Mit anderen Worten, ein Verarbeitungselement bezieht sich bei einer Ausführungsform auf jede Hardware, die unabhängig mit einem Code assoziiert sein kann, wie etwa einem Software-Thread, einem Betriebssystem, einer Anwendungssoftware oder einem anderen Code. Ein physikalischer Prozessor bedeutet eine integrierte Schaltung, die potentiell eine Anzahl von Verarbeitungselementen enthält, wie etwa Kerne oder Hardware-Threads.
  • Ein Kern bezieht sich häufig auf eine Logik, die sich auf einer integrierten Schaltung befindet, die einen unabhängigen Architekturzustand aufrechterhalten kann, wobei jeder unabhängig aufrechterhaltene Architekturzustand mit mindestens einigen dedizierten Abarbeitungsressourcen assoziiert ist. Im Gegensatz zu Kernen bezieht sich ein Hardware-Thread auf eine Logik, die sich auf einer integrierten Schaltung befindet, die einen unabhängigen Architekturzustand aufrechterhalten kann, wobei die unabhängig aufrechterhaltenen Architekturzustände gemeinsam Zugriff auf Abarbeitungsressourcen haben. Wie zu erkennen ist, überlappt sich die Verbindung zwischen der Nomenklatur eines Hardware-Threads und eines Kerns, wenn bestimmte Ressourcen gemeinsam genutzt werden und andere speziell für einen Architekturzustand bestimmt sind. Immer noch werden ein Kern und ein Hardware-Thread von einem Betriebssystem oft als einzelne Logikprozessoren angesehen, wobei das Betriebssystem in der Lage ist, Operationen an jedem Logikprozessor einzeln festzulegen.
  • Wie in 1 gezeigt ist, hat der physikalische Prozessor 100 zwei Kerne, und zwar den Kern 101 und den Kern 102. Hier werden die Kerne 101 und 102 als symmetrische Kerne angesehen, d. h. als Kerne mit den gleichen Konfigurationen, Funktionseinheiten und/oder der gleichen Logik. Bei einer anderen Ausführungsform ist der Kern 101 ein Out-of-Order-Prozessorkern, während der Kern 102 ein In-Order-Prozessorkern ist. Die Kerne 101 und 102 können jedoch individuell aus Kernen jeder Art gewählt werden, wie etwa ein nativer Kern, ein Software-verwalteter Kern, ein Kern, der so eingerichtet ist, dass er eine native Befehlssatzarchitektur (Instruction Set Architecture; ISA) abarbeitet, ein Kern, der so eingerichtet ist, dass er eine übersetzte Befehlssatzarchitektur (ISA) abarbeitet, ein co-entworfener Kern oder ein anderer bekannter Kern. Um die Diskussion voranzubringen, werden nur die Funktionseinheiten, die in dem Kern 101 dargestellt sind, nachstehend näher beschrieben, da die Einheiten in dem Kern 102 in einer ähnlichen Weise funktionieren.
  • Wie gezeigt ist, hat der Kern 101 zwei Hardware-Threads 101a und 101b, die auch als Hardware-Thread-Einschübe 101a und 101b bezeichnet werden können. Daher sehen Software-Entitäten, wie etwa ein Betriebssystem, bei einer Ausführungsform den Prozessor 100 potentiell als vier einzelne Prozessoren an, d. h. als vier Logikprozessoren oder Verarbeitungselemente, die vier Software-Threads gleichzeitig abarbeiten können. Wie vorstehend dargelegt worden ist, ist ein erster Thread mit Architekturzustandsregistern 101a assoziiert, ein zweiter Thread ist mit Architekturzustandsregistern 101b assoziiert, ein dritter Thread kann mit Architekturzustandsregistern 102a assoziiert sein und ein vierter Thread kann mit Architekturzustandsregistern 102b assoziiert sein. Hier können die Architekturzustandsregister (101a, 101b, 102a und 102b) jeweils als Verarbeitungselemente, Thread-Einschübe oder Thread-Einheiten bezeichnet werden, wie vorstehend dargelegt worden ist. Wie gezeigt ist, sind die Architekturzustandsregister 101a in den Architekturzustandsregistern 101b repliziert, sodass einzelne Architekturzustände/Kontexte für den Logikprozessor 101a und den Logikprozessor 101b gespeichert werden können. In dem Kern 101 können auch andere kleinere Ressourcen, wie etwa Befehlszeiger und eine Umbenennungslogik in einer Umbenennungszuweisungslogik 130, für die Threads 101a und 101b repliziert werden. Einige Ressourcen, wie etwa Neuordnungspuffer in einer Neuordnungs- und Retirement-Einheit 135, ein I-TLB (Befehlsübersetzungspuffer) 120, Lade-/Speicherpuffer und Warteschlangen, können durch Partitionieren gemeinsam genutzt werden. Andere Ressourcen, wie etwa interne Universalregister, ein oder mehrere Register auf Seiten-Tabellen-Basis, ein untergeordneter Daten-Cache und Daten-TLB 115, eine oder mehrere Abarbeitungseinheiten 140 und Teile der Out-of-Order-Einheit 135, werden potentiell gemeinsam genutzt.
  • Der Prozessor 100 hat oft auch andere Ressourcen, die vollständig gemeinsam genutzt werden können, durch Partitionieren gemeinsam genutzt werden können oder von/für Verarbeitungselemente(n) dediziert sein können. In 1 ist eine Ausführungsform eines rein beispielhaften Prozessors mit beispielhaften Logikeinheiten/Ressourcen eines Prozessors dargestellt. Man beachte, dass ein Prozessor jede dieser Funktionseinheiten haben kann oder auch nicht sowie alle anderen bekannten Funktionseinheiten, Logik oder Firmware haben kann, die nicht dargestellt sind. Wie gezeigt ist, ist der Kern 101 ein vereinfachter typischer Out-of-Order(OOO)-Prozessorkern. Aber in anderen Ausführungsformen kann auch ein In-Order-Prozessor verwendet werden. Der OOO-Kern hat einen Sprungzielpuffer (BTB) 120 zum Vorhersagen von abzuarbeitenden oder durchzuführenden Sprüngen und einen Befehlsübersetzungspuffer (I-TLB) 120 zum Speichern von Adressübersetzungseinträgen für Befehle.
  • Der Kern 101 weist weiterhin ein mit einer Abrufeinheit 120 verbundenes Decodiermodul 125 zum Decodieren von abgerufenen Elementen auf. Bei einer Ausführungsform weist eine Abruflogik einzelne Sequenzer auf, die mit den Thread-Einschüben 101a bzw. 101b assoziiert sind. Normalerweise ist der Kern 101 mit einer ersten Befehlssatzarchitektur (ISA) assoziiert, die Befehle definiert oder festlegt, die auf dem Prozessor 100 ausgeführt werden können. Oftmals haben Maschinencodebefehle, die Bestandteil der ersten ISA sind, einen Befehlsteil (der als Opcode bezeichnet wird), der einen auszuführenden Befehl oder eine auszuführende Operation referenziert oder festlegt. Die Decodierlogik 125 weist eine Schaltung auf, die diese Befehle anhand ihrer Opcodes erkennt und die decodierten Befehle in der Pipeline zum Verarbeiten weiterleitet, wie es von der ersten ISA definiert wird. Wie später näher erörtert wird, haben bei einer Ausführungsform die Decodierer 125 zum Beispiel eine Logik, die so konfiguriert oder eingerichtet ist, dass sie spezielle Befehle, wie etwa einen transaktionalen Befehl, erkennt. Als Ergebnis der Erkennung durch den Decodierer 125 trifft die Architektur oder der Kern 101 spezielle festgelegte Maßnahmen, um Tasks auszuführen, die mit dem entsprechenden Befehl assoziiert sind. Es ist unbedingt zu beachten, dass alle hier beschriebenen Tasks, Blöcke, Operationen und Verfahren in Reaktion auf einen oder mehrere Befehle ausgeführt werden können, wobei einige davon neue oder alte Befehle sein können.
  • Bei einem Beispiel weist ein Zuordnungs- und Umbenennungsblock 130 einen Zuordner zum Reservieren von Ressourcen, wie etwa Registerdateien, auf, um die Ergebnisse der Befehlsverarbeitung zu speichern. Die Threads 101a und 101b sind jedoch potentiell zu einer Out-of-Order-Ausführung in der Lage, wobei der Zuordnungs- und Umbenennungsblock 130 auch andere Ressourcen, wie etwa Neuordnungspuffer, reserviert, um Befehlsergebnisse zu verfolgen. Die Einheit 130 kann auch einen Register-Umbenenner zum Umbenennen von Programm- oder Befehlsreferenzregistern in andere Register aufweisen, die Prozessor-100-intern sind. Eine Aufzeichnungs- und Retirement-Einheit 135 hat Komponenten, wie etwa die Neuordnungspuffer, die vorstehend erwähnt worden sind, Ladepuffer und Speicherpuffer, um die Out-of-Order-Verarbeitung und das spätere In-Order-Retirement von Befehlen zu unterstützen, die out of Order ausgeführt worden sind.
  • Ein Scheduler- und Verarbeitungseinheiten-Block 140 weist bei einer Ausführungsform eine Scheduler-Einheit zum Festlegen von Befehlen und Operationen an Verarbeitungseinheiten auf. Zum Beispiel wird ein Gleitkomma-Befehl an einem Eingang einer Verarbeitungseinheit festgelegt, die eine verfügbare Gleitkomma-Verarbeitungseinheit hat. Registerdateien, die mit den Verarbeitungseinheiten assoziiert sind, sind ebenfalls enthalten, um Informationen von Ergebnissen der Befehlsverarbeitung zu speichern. Beispielhafte Verarbeitungseinheiten sind eine Gleitkomma-Verarbeitungseinheit, eine Ganzzahlen-Verarbeitungseinheit, eine Sprungverarbeitungseinheit, eine Ladeverarbeitungseinheit, eine Speicherverarbeitungseinheit und andere bekannte Verarbeitungseinheiten.
  • Ein untergeordneter Daten-Cache und ein Datenübersetzungspuffer (D-TLB) 150 sind mit den Verarbeitungseinheiten 140 verbunden. Der Daten-Cache dient zum Speichern von Elementen, die zuletzt verwendet oder aktiviert worden sind, wie etwa Daten-Operanden, die potentiell in Speicherkohärenzzuständen gehalten werden. Der D-TLB dient zum Speichern von Übersetzungen der letzten virtuellen/linearen Adressen in physikalische Adressen. Als ein spezielles Beispiel kann ein Prozessor eine Seitentabellen-Struktur haben, um den physikalischen Speicher in eine Vielzahl von virtuellen Seiten zu unterteilen.
  • Hier haben die Kerne 101 und 102 gemeinsam Zugriff auf einen übergeordneten oder Further-out-Cache 110, der zuletzt abgerufene Elemente cachen soll. Man beachte, dass sich „übergeordnet” oder „further out” auf Cache-Niveaus bezieht, die steigen oder sich von der einen oder den mehreren Verarbeitungseinheiten weiter entfernen. Bei einer Ausführungsform ist der übergeordnete Cache 110 ein Last-Level-Daten-Cache – der letzte Cache in der Speicherhierarchie bei dem Prozessor 100 – wie etwa ein Second- oder Third-Level-Daten-Cache. Der übergeordnete Cache 110 ist jedoch nicht hierauf beschränkt, da er mit einem Befehls-Cache assoziiert sein kann oder diesen enthalten kann. Ein Trace-Cache – eine Art Befehls-Cache – kann stattdessen nach dem Decodierer 125 geschaltet werden, um zuletzt decodierte Spuren zu speichern.
  • Bei der dargestellten Konfiguration weist der Prozessor 100 auch ein Busschnittstellen-Modul 105 auf, um mit Geräten außerhalb des Prozessors 100 zu kommunizieren, wie etwa einem Systemspeicher 175, einem Chipsatz (der oft einen Memory Controller Hub zum Verbinden mit dem Speicher 175 und einen E/A-Controller-Hub zum Verbinden von peripheren Geräten hat), einem Memory Controller Hub, einer Northbridge oder einer anderen integrierten Schaltung. Der Bus 105 kann jede bekannte Verbindungsleitung sein, wie etwa ein Mehrpunktbus, eine Punkt-zu-Punkt-Verbindungsleitung, eine serielle Verbindungsleitung, ein Parallelbus, ein kohärenter (z. B. Cache-kohärenter) Bus, eine mehrschichtige Protokoll-Architektur, ein Differenzbus und ein GTL-Bus. Der Speicher 175 kann speziell für den Prozessor 100 bestimmt sein oder kann gemeinsam mit anderen Geräten in einem System genutzt werden. Übliche Beispiele für Typen des Speichers 175 sind dynamischer Arbeitsspeicher (DRAM), statischer Arbeitsspeicher (SRAM), nichtflüchtiger Speicher (NV-Speicher) und andere bekannte Speichervorrichtungen. Man beachte, dass die Vorrichtung 180 Folgendes sein kann: ein Grafikbeschleuniger, ein Prozessor oder eine Karte, der/die mit einem Memory Controller Hub verbunden ist; ein Datenspeicher, der mit einem E/A-Controller-Hub verbunden ist; ein drahtloser Sendeempfänger; ein Flash-Gerät; ein Audio-Steuergerät; ein Netzwerk-Steuergerät oder eine andere bekannte Vorrichtung.
  • Man beachte, dass bei der gezeigten Ausführungsform der Controller Hub und der Speicher außerhalb des Prozessors 100 dargestellt sind. Die Implementierungen der Verfahren und Vorrichtungen, die hier beschrieben sind, sind jedoch nicht hierauf beschränkt. Da tatsächlich mehr Logik und Bauelemente auf einem einzigen Chip, wie etwa einem Ein-Chip-System (SoC), integriert sind, kann jedes dieser Bauelemente in den Prozessor 100 integriert werden. Zum Beispiel ist bei einer Ausführungsform der Memory Controller Hub auf dem gleichen Baustein und/oder dem gleichen Chip wie der Prozessor 100. Hier enthält ein Teil des Kerns (ein On-Core-Teil) einen Controller Hub zum Verbinden mit anderen Bauelementen, wie etwa einem Controller Hub. In der SoC-Umgebung können noch mehr Vorrichtungen, wie etwa die Netzwerk-Schnittstelle, Co-Prozessoren und andere bekannte Computer-Bauelemente oder -Schnittstellen, auf einem einzigen Chip oder einer einzigen integrierten Schaltung integriert werden, um einen kleinen Formfaktor bei hoher Funktionalität und geringem Stromverbrauch zu ermöglichen.
  • Bei einer Ausführungsform kann der Prozessor 100 eine Hardware-unterstützte Transaktion, eine Software-unterstützte Transaktion oder eine Kombination oder eine Mischung aus beiden ausführen. Eine Transaktion, die auch als Abarbeitung eines kritischen oder atomaren Abschnitts oder Bereichs eines Codes bezeichnet werden kann, umfasst eine Gruppierung von Befehlen oder Operationen, die als eine atomare Gruppe ausgeführt werden sollen. Befehle oder Operationen können zum Beispiel zum Demarkieren oder Begrenzen einer Transaktion oder eines kritischen Abschnitts verwendet werden. Bei einer Ausführungsform, die nachstehend näher beschrieben wird, sind diese Befehle Teil eines Satzes von Befehlen, wie etwa einer Befehlssatzarchitektur (ISA), die von der Hardware des Prozessors 100, wie etwa den vorstehend beschriebenen Decodierern 125, erkannt werden können. Häufig enthalten diese Befehle, sobald sie von einer höheren Programmiersprache in eine von der Hard-ware erkennbare Assemblersprache kompiliert worden sind, Operationscodes (Opcodes) oder andere Teile der Befehle, die die Decodierer 125 in der Decodierphase erkennen.
  • Normalerweise werden bei der Abarbeitung einer Transaktion Aktualisierungen des Speichers erst dann global sichtbar gemacht, wenn die Transaktion festgeschrieben worden ist. Zum Beispiel ist das Schreiben einer Transaktion in einen Speicherplatz für einen lokalen Thread potentiell sichtbar, aber in Reaktion auf das Lesen aus einem anderen Thread werden die Schreibdaten erst dann gesendet, wenn die Transaktion, die die transaktionale Schreiboperation enthält, festgeschrieben worden ist. Während die Transaktion noch ansteht oder wartet, werden Datenwörter oder Datenelemente, die aus einem Speicher geladen und in den Speicher geschrieben werden, verfolgt, wie nachstehend näher erörtert wird. Sobald die Transaktion einen Festschreibungspunkt erreicht, wird, wenn keine Konflikte für die Transaktion erkannt worden sind, die Transaktion festgeschrieben und Aktualisierungen, die während der Transaktion gemacht werden, werden global sichtbar gemacht. Wenn jedoch die Transaktion während ihres Wartens ungültig gemacht wird, wird sie vorzeitig abgebrochen und wird potentiell neu gestartet, ohne dass die Aktualisierungen global sichtbar gemacht werden. Daher bedeutet der hier verwendete Begriff „wartende Transaktion” eine Transaktion, die auszuführen begonnen worden ist und nicht festgeschrieben oder vorzeitig abgebrochen worden ist, d. h. eine anstehende Transaktion.
  • Ein Software-unterstütztes transaktionales Speichersystem (STM-System) bezieht sich oft auf das Durchführen einer Zugriffsverfolgung, Konfliktlösung oder anderer Tasks des transaktionalen Speichers während oder zumindest primär durch die Abarbeitung der Software oder des Codes. Bei einer Ausführungsform kann der Prozessor 100 Transaktionen unter Verwendung der Hardware oder Logik ausführen, d. h. in einem Hardware-unterstützten transaktionalen Speichersystem (HTM-System). Bei der Implementierung eines HTM gibt es unter dem Architektur- oder Mikroarchitektur-Aspekt zahlreiche spezifische Implementierungsdetails, von denen die meisten hier nicht erörtert werden, um das Verständnis der Darlegung nicht unnötig zu erschweren. Einige Strukturen, Ressourcen und Implementierungen werden jedoch zur Erläuterung beschrieben. Es ist aber zu beachten, dass diese Strukturen und Implementierungen nicht erforderlich sind und vermehrt und/oder durch andere Strukturen mit anderen Implementierungsdetails ersetzt werden können. Ein weiteres Abarbeitungsverfahren, das eng mit dem transaktionalen Speicher zusammenhängt, ist Lock Elision [oft als „Hardware Lock Elision” (HLE) bezeichnet]. Bei diesem Szenario werden Sperrbefehlspaare (Sperren und Entsperren) von einem User, einer Software oder einer Hardware durch atomare Start- und Ende-Begrenzungsbefehle ersetzt. Und der Abschnitt des Codes zwischen den Sperrbefehlspaaren wird wie eine Transaktion abgearbeitet.
  • Als eine Kombination kann der Prozessor 100 Transaktionen unter Verwendung eines Hybridverfahrens (Hardware und Software) abarbeiten, wie etwa in einem unbegrenzten transaktionalen Speichersystem (unbounded transactional memory system; UTM-System), das die Vorteile sowohl des STM- als auch des HTM-Systems zu nutzen versucht. Ein HTM ist zum Beispiel oft schnell und effizient beim Abarbeiten von kleinen Transaktionen, da er sich nicht auf Software zum Durchführen der gesamten Zugriffsverfolgung, Konflikterkennung, Validierung und Festschreibung für Transaktionen stützt. HTMs sind jedoch meistens nur in der Lage, kleinere Transaktionen zu verarbeiten, während STMs auch größere Transaktionen verarbeiten können, die oft als „Transaktionen unbegrenzter Größe” bezeichnet werden. Daher verwendet bei einer Ausführungsform ein UTM-System Hardware zum Abarbeiten von kleineren Transaktionen und Software zum Abarbeiten von Transaktionen, die für die Hardware zu groß sind. Wie aus der nachstehenden Erörterung zu erkennen sein wird, kann auch dann, wenn Software Transaktionen verarbeitet, Hardware genutzt werden, um die Software zu unterstützen und zu beschleunigen. Dieses Hybridverfahren wird im Allgemeinen als „Hardware-beschleunigter STM” bezeichnet, da das primäre transaktionale Speichersystem (Buchhaltung usw.) zwar in der Software residiert, aber unter Verwendung von Hardware-Hooks beschleunigt wird.
  • Kehren wir bei der Erörterung nun wieder zu 1 zurück. Bei einer Ausführungsform weist der Prozessor 100 Monitore zum Detektieren oder Verfolgen von Zugriffen und potentiellen nachfolgenden Konflikten auf, die mit Datenwörtern assoziiert sind. Ein Datenwort, Datenobjekt oder Datenelement, wie etwa das Datenwort 201, kann Daten auf einer Granularitätsebene umfassen, die von Hardware, Software oder einer Kombination davon definiert wird. Eine nicht erschöpfende Liste von Beispielen für Daten, Datenelemente, Datenwörter oder Referenzen darauf enthält eine Speicheradresse, ein Datenobjekt, eine Klasse, ein Feld des Typs dynamischer Sprachcode, den Typ dynamischer Sprachcode, eine Variable, einen Operanden, eine Datenstruktur und eine indirekte Referenz auf eine Speicheradresse. Es kann jedoch jede bekannte Gruppierung von Daten als ein Datenelement oder Datenwort bezeichnet werden. Einige der vorgenannten Beispiele, wie etwa ein Feld des Typs dynamischer Sprachcode und der Typ dynamischer Sprachcode, beziehen sich auf Datenstrukturen des dynamischen Sprachcodes. Zur Erläuterung: ein dynamischer Sprachcode, wie etwa JavarTM von Sun Microsystems, Inc., ist eine stark typisierte Sprache. Jede Variable hat einen Typ, der beim Kompilieren bekannt ist. Die Typen werden in zwei Kategorie eingeteilt: primitive Typen (Boolean und numerisch, z. B. Int und Float) und Referenztypen (Klassen, Schnittstellen und Arrays). Die Werte der Referenztypen sind Referenzen auf Objekte. Bei JavaTM kann ein Objekt, das aus Feldern besteht, eine Klassen-Instanz oder ein Array sein. Für ein Objekt a der Klasse A werden normalerweise die Notation A::x zum Verweisen auf das Feld x des Typs A und die Notation a.x zum Verweisen auf das Feld x des Objekts a der Klasse A verwendet. Ein Ausdruck kann zum Beispiel als a.x = a.y + a.z dargestellt werden. Hier werden das Feld y und das Feld z zum Addieren geladen, und das Ergebnis muss in das Feld x geschrieben werden.
  • Daher können Zugriffe von Überwachungs- oder Pufferspeichern auf Datenwörter mit jeder Datenebenen-Granularität durchgeführt werden. Bei einer Ausführungsform werden Speicherzugriffe auf Daten zum Beispiel auf der Typ-Ebene überwacht. Hier können eine transaktionale Schreiboperation für ein Feld A::x und eine nicht-transaktionale Lade-Operation für ein Feld A::y als Zugriffe auf das gleiche Datenwort, d. h. Typ A, überwacht werden. Bei einer anderen Ausführungsform werden das Überwachen und Puffer von Speicherzugriffen mit einer Feldebenen-Granularität durchgeführt. Hier werden eine transaktionale Schreiboperation für das Feld A::x und eine nicht-transaktionale Lade-Operation für das Feld A::y nicht als Zugriffe auf das gleiche Datenwort überwacht, da sie Referenzen auf getrennte Felder sind. Man beachte, dass auch andere Datenstrukturen oder Programmierverfahren beim Verfolgen von Speicherzugriffen auf Datenwörter in Betracht gezogen werden können. Nehmen wir zum Beispiel an, dass die Felder x und y der Klasse A (d. h. A::x und A::y) auf Objekte der Klasse B zeigen, für neu zugewiesene Objekte initialisiert werden und niemals nach der Initialisierung beschrieben werden. Bei einer Ausführungsform wird die transaktionale Schreiboperation für ein Feld B::z eines Objekts, auf das von A::x gezeigt wird, nicht als Speicherzugriff auf das gleiche Datenwort wie bei einer nicht-transaktionalen Lade-Operation für das Feld B::z eines Objekts überwacht, auf das von A::y gezeigt wird. Wenn man von diesen Beispiel extrapoliert, kann man feststellen, dass Monitore das Überwachen und Puffer auf jeder Datengranularitätsebene durchführen.
  • Man beachte, dass bei einer Ausführungsform diese Monitore die gleichen Attribute haben (oder enthalten) wie die Attribute, die vorstehend für die Beschleunigung eines STM beschrieben worden sind. In diesem Szenario können Monitore die Hardware-Verfolgungs- und Software-Beschleunigungsunterstützung verdoppeln. Zum Beispiel umfasst die Hardware des Prozessors 100 Lesemonitore und Schreibmonitore zum Verfolgen von Ladungen und Speicherungen, die entsprechend überwacht werden sollen. Hardware-Lesemonitore und – Schreibmonitore können trotz der Granularität der zugrunde liegenden Speicherstrukturen Datenwörter mit der Granularität der Datenwörter überwachen. Oder alternativ fuhren sie die Überwachung mit der Granularität der Speicherstruktur durch. Bei einer Ausführungsform ist ein Datenwort durch Verfolgungsmechanismen begrenzt, die mit der Granularität der Speicherstrukturen assoziiert sind, um zu gewährleisten, dass mindestens das gesamte Datenwort entsprechend überwacht wird.
  • Als ein spezielles erläuterndes Beispiel haben Lese- und Schreibmonitore Attribute, die mit Cache-Speicherplätzen, wie etwa Speicherplätzen in dem untergeordneten Datencache 150 (der bei einigen Ausführungsformen ein spekulativer Cache ist), assoziiert sind, um Ladungen von, und Speicherungen an, Adressen zu überwachen, die mit diesen Speicherplätzen assoziiert sind. Hier wird ein Lese-Attribut für einen Cache-Speicherplatz des Datencache 150 auf ein Lese-Ereignis hin auf eine Adresse festgelegt, die mit dem Cache-Speicherplatz assoziiert ist, um eine Überwachung auf potentielle Konflikt-Schreibvorgänge an ein und derselben Adresse durchzuführen: In diesem Fall funktionieren Schreib-Attribute in einer ähnlichen Weise für Schreib-Ereignisse zum Überwachen auf potentielle Konflikt-Schreib- und -Lesevorgänge an der gleichen Adresse. Weiterhin kann in diesem Beispiel Hardware Konflikte auf Grund von Snoops für Lese- und Schreibvorgänge an Cache-Speicherplätzen mit Lese- und/oder Schreib-Attributen detektieren, die so festgelegt sind, dass sie anzeigen, dass die Cache-Speicherplätze überwacht werden. Umgekehrt führt das Festlegen von Lese- und Schreibmonitoren oder das Aktualisieren eines Cache-Speicherplatzes in einen gepufferten Zustand bei einer Ausführungsform zu Snoops, wie etwa Lese-Anforderungen oder Lesen nach Eigentümerschafts-Anforderungen, die eine Detektion von Konflikten mit Adressen ermöglichen, die in anderen Caches überwacht werden.
  • Daher führen auf Grund der Konfiguration verschiedene Kombinationen von Cache-Kohärenz-Anforderungen und überwachten Kohärenzzuständen von Cache-Zeilen zu potentiellen Konflikten, wie etwa einer Cache-Zeile, die ein Datenwort in einem gemeinsamen Lese-überwachten Zustand hält, und einem Snoop, der eine Schreib-Anforderung für das Datenwort anzeigt. Umgekehrt können eine Cache-Zeile, die ein Datenwort hält, das gerade in einem gepufferten Schreibzustand ist, und ein externer Snoop, der eine Lese-Anforderung für das Datenwort anzeigt, als potentiell in Konflikt befindlich angesehen werden. Um diese Kombinationen aus Zugriffs-Anforderungen und Attributzuständen zu detektieren, ist bei einer Ausführungsform die Snoop-Logik mit einer Konflikterkennungs- und -meldelogik, wie etwa Monitoren und/oder einer Logik zur Konflikterkennung und -meldung, sowie Zustandsregistern zum Melden der Konflikte verbunden.
  • Jede Kombination aus Bedingungen und Szenarios kann jedoch als eine Kombination angesehen werden, die eine Transaktion ungültig macht. Beispiele für Faktoren, die für das Nicht-Festschreiben einer Transaktion in Erwägung gezogen werden können, sind das Detektieren eines Konflikts an einem Speicherplatz, auf den von einer Transaktion zugegriffen wird, der Verlust von Monitor-Informationen, der Verlust von gepufferten Daten, der Verlust von Metadaten, die mit einem Datenwort assoziiert sind, auf das von einer Transaktion zugegriffen wird, und das Detektieren eines anderen ungültig-machenden Ereignisses, wie etwa eines Interrupts, eines Ringübergangs oder eines expliziten Nutzerbefehls.
  • Bei einer Ausführungsform soll die Hardware des Prozessors 100 transaktionale Aktualisierungen gepuffert halten. Wie vorstehend dargelegt worden ist, werden transaktionale Schreiboperationen erst nach der Festschreibung einer Transaktion global sichtbar gemacht. Ein lokaler Software-Thread, der mit den transaktionalen Schreiboperationen assoziiert ist, kann jedoch auf die transaktionalen Aktualisierungen für nachfolgende transaktionale Zugriffe zugreifen. Als ein erstes Beispiel ist in dem Prozessor 100 zum Halten der gepufferten Aktualisierungen eine separate Pufferstruktur vorgesehen, die die Aktualisierungen für den lokalen Thread, nicht aber für andere externe Threads, bereitstellen kann.
  • Im Gegensatz dazu wird bei einem anderen Beispiel ein Cache-Speicher, wie etwa der Datencache 150, zum Puffer der Aktualisierungen verwendet, wobei die gleiche transaktionale Funktionalität ermöglicht wird. Hier kann der Cache 150 Datenwörter in einem gepufferten Kohärenzzustand halten. In einem Fall wird ein neuer gepufferter Kohärenzzustand zu einem Cache-Kohärenzprotokoll, wie etwa dem MESI-Protokoll (MESI: Modified Exclusive Shared Invalid), hinzugefügt, um ein MESIB-Protokoll zu bilden. In Reaktion auf lokale Anforderungen eines gepufferten Datenworts, das in einem gepufferten Kohärenzzustand gehalten wird, stellt der Cache 150 das Datenwort für das lokale Verarbeitungselement bereit, um ein internes sequentielles Ordnen der Transaktionen sicherzustellen. In Reaktion auf eine externe Zugriffsanforderung wird jedoch die Antwort „Fehlgeschlagen” gesendet, um sicherzustellen, dass das transaktional aktualisierte Datenwort erst nach der Festschreibung global sichtbar gemacht wird. Wenn darüber hinaus eine Zeile des Cache 150 in einem gepufferten Kohärenzzustand gehalten wird und zum Löschen gewählt ist, wird die gepufferte Aktualisierung nicht in übergeordnete Cache-Speicher zurück geschrieben – die gepufferte Aktualisierung soll sich nicht durch das Speichersystem ausbreiten, d. h., sie soll bis zur Festschreibung nicht global sichtbar gemacht werden. Vielmehr kann die Transaktion vorzeitig abbrechen oder die gelöschte Zeile kann in einer spekulativen Struktur zwischen dem Datencache und den übergeordneten Cache-Speichern, wie etwa einem Opfer-Cache, gespeichert werden.
  • Nach der Festschreibung werden die gepufferten Zeilen in einen modifizierten Zustand gebracht, um das Datenwort global sichtbar zu machen.
  • Man beachte, dass sich die Begriffe „intern” und „extern” oft auf die Perspektive eines Threads beziehen, der mit der Abarbeitung einer Transaktion oder von Verarbeitungselementen verbunden ist, die einen Cache gemeinsam nutzen. Zum Beispiel bezieht sich ein erstes Verarbeitungselement zum Abarbeiten eines Software-Threads, der mit der Abarbeitung einer Transaktion verbunden ist, auf einen lokalen Thread. Wenn bei der vorstehenden Erörterung eine Speicherung an, oder eine Ladung von, einer vorher von dem ersten Thread geschriebenen Adresse – wobei die Speicherung oder Ladung dazu führt, dass eine Cache-Zeile für die Adresse in einem gepufferten Kohärenzzustand gehalten wird – empfangen wird, wird die gepufferte Version der Cache-Zeile für den ersten Thread bereitgestellt, da er der lokale Thread ist. Im Gegensatz dazu kann ein zweiter Thread an einem anderen Verarbeitungselement in dem gleichen Prozessor abgearbeitet werden, aber dieser ist nicht mit der Abarbeitung der Transaktion verbunden, die für die Cache-Zeile verantwortlich ist, die gerade in dem gepufferten Zustand gehalten wird – ein externer Thread. Daher gibt es für eine Ladung aus dem, oder Speicherung in den, zweiten Thread an der Adresse keine gepufferte Version der Cache-Zeile und es wird eine normale Cache-Ersetzung genutzt, um die ungepufferte Version der Cache-Zeile aus dem übergeordneten Speicher abzurufen.
  • Bei einer Ausführungsform kann der Prozessor 100 einen Compiler-, Optimierungs- und/oder Übersetzer-Code 177 zum Kompilieren eines Anwendungscodes 176 abarbeiten, um die transaktionale Abarbeitung zu unterstützen und den Anwendungscode 176 potentiell zu optimieren, wie etwa eine Neuordnung durchzuführen. Hier kann der Compiler Operationen, Aufrufe, Funktionen und andere Codes einfügen, um die Abarbeitung von Transaktionen zu ermöglichen und eine Software-Unterstützung für das Neuordnen von Speicheroperationen zu bieten.
  • Ein Compiler ist oft ein Programm oder eine Gruppe von Programmen zum Übersetzen eines Quelltexts oder Quellcodes in einen Zieltext oder -code. Normalerweise erfolgt die Kompilierung eines Programm- oder Anwendungscodes mit einem Compiler in mehreren Phasen und dabei wird der Code einer höheren Programmiersprache in den Code einer niedrigeren Maschinen- oder Assemblersprache umgewandelt. Für eine einfache Kompilierung können noch immer Einschritt-Compiler zum Einsatz kommen. Ein Compiler kann alle bekannten Kompilierungsverfahren nutzen und kann alle bekannten Compiler-Operationen ausführen, wie etwa lexikalische Analyse, Vorverarbeitung, Parsing, semantische Analyse, Code-Erzeugung, Code-Umwandlung und Code-Optimierung. Die Überschneidung der transaktionalen Abarbeitung und der dynamischen Code-Kompilierung führt potentiell dazu, dass eine aggressivere Optimierung unter Beibehaltung notwendiger Speicherordnungs Sicherheitsmaßnahmen möglich wird.
  • Größere Compiler haben oft mehrere Phasen, aber meistens sind diese Phasen in zwei allgemeinen Phasen enthalten: (1) einem Eingang, d. h., an dem im Allgemeinen eine syntaktische Verarbeitung, semantische Verarbeitung und eine gewisse Transformation oder Optimierung erfolgen können, und (2) einem Ausgang, d. h., an dem im Allgemeinen Analysen, Transformationen, Optimierungen und die Code-Erzeugung stattfinden. Einige Compiler beziehen sich auf die Mitte, was die Unschärfe der Abgrenzung zwischen dem Eingang und dem Ausgang eines Compilers veranschaulicht. Daher kann ein Verweis auf das Einfügen, Assoziieren, Erzeugen oder eine andere Operation eines Compilers in jeder der vorgenannten Phasen oder Durchläufe sowie in allen anderen bekannten Phasen oder Durchläufen eines Compilers erfolgen. Als ein erläuterndes Beispiel fügt ein Compiler potentiell transaktionale Operationen, Aufrufe, Funktionen usw. in einer oder mehreren Phasen der Kompilierung ein, wobei er zum Beispiel Aufrufe oder Operationen in einer Eingangsphase der Kompilierung einfügt und die Aufrufe oder Operationen anschließend während einer Phase der Umwandlung des transaktionalen Speichers in einen niedrigeren Code umwandelt. Man beachte, dass bei der dynamischen Kompilierung der Compiler-Code oder der dynamische Optimierungscode diese Aufrufe oder Operationen einfügen kann und den Code für die Abarbeitung während der Laufzeit optimieren kann. Als ein spezielles erläuterndes Beispiel kann ein Binärcode (ein Code, der bereits kompiliert worden ist) während der Laufzeit dynamisch optimiert werden. Hier kann der Programmcode der dynamische Optimierungscode, der Binärcode oder eine Kombination davon sein.
  • Trotz seiner Abarbeitungsumgebung und seines dynamischen oder statischen Charakters kompiliert der Compiler bei einer Ausführungsform den Programmcode so, dass eine transaktionale Abarbeitung möglich wird und/oder Teile des Programmcodes optimiert werden. Ähnlich einem Compiler übersetzt ein Übersetzer, wie etwa ein Binärübersetzer, den Code entweder statisch oder dynamisch, um den Code zu optimieren und/oder zu übersetzen. Daher kann sich der Verweis auf die Abarbeitung eines Codes, Anwendungscodes, Programmcodes, einer STM-Umgebung oder einer anderen Software-Umgebung auf Folgendes beziehen: (1) dynamische oder statische Abarbeitung eines oder mehrerer Compiler-Programme, eines Optimierungscode-Optimierers oder -Übersetzers, um den Programmcode zu kompilieren, transaktionale Strukturen aufrechtzuerhalten, andere Transaktions-bezogene Operationen auszuführen, den Code zu optimieren oder den Code zu übersetzen; (2) Abarbeitung eines Hauptprogrammcodes mit transaktionalen Operationen oder Aufrufen, wie etwa eines Anwendungscodes, der optimiert oder kompiliert worden ist; (3) Abarbeitung eines anderen Programmcodes, wie etwa Bibliotheken, die mit dem Hauptprogrammcode assoziiert sind, um transaktionale Strukturen aufrechtzuerhalten, andere Transaktions-bezogene Operationen auszuführen oder den Code zu optimieren; oder (4) eine Kombination davon.
  • Bei STM-Systemen (Software-unterstützten transaktionalen Speichersystemen) dient ein Compiler oftmals dazu, einige Operationen, Aufrufe und andere Codes in-line in den zu kompilierenden Anwendungscode einzufügen, während andere Operationen, Aufrufe, Funktionen und Codes gesondert in Bibliotheken bereitgestellt werden. Dadurch können die Bibliothekenverteiler potentiell die Bibliotheken optimieren und aktualisieren, ohne den Anwendungscode neu kompilieren zu müssen. Als ein spezielles Beispiel kann ein Aufruf einer Festschreibungsfunktion in-line in den Anwendungscode an einem Festschreibungspunkt einer Transaktion eingefügt werden, während die Festschreibungsfunktion gesondert in einer aktualisierbaren Bibliothek bereitgestellt wird. Und die Festschreibungsfunktion enthält einen Befehl oder eine Operation, wenn sie ausgeführt wird, um spekulative Bits eines Übersetzungspuffers zurückzusetzen, wie später näher beschrieben wird. Außerdem beeinflusst die Wahl, wo bestimmte Operationen und Aufrufe untergebracht werden sollen, potentiell die Effizienz des Anwendungscodes. Als ein weiteres Beispiel wird der Binärübersetzungscode in einer Firmware oder Mikrocode-Schicht einer Verarbeitungsvorrichtung bereitgestellt. Daher wird, wenn ein Binärcode auftritt, der Binärübersetzungscode abgearbeitet, um den Code für die Abarbeitung an der Verarbeitungsvorrichtung zu übersetzen und potentiell zu optimieren (sowie den Speicher neu zu ordnen).
  • Wie vorstehend dargelegt worden ist, sind bei einer Ausführungsform Hardware-Strukturen vorgesehen, um diese Optimierung in transaktionalen Bereichen (kritischen Abschnitten) zu unterstützen und gleichzeitig eine gültige Abarbeitung zu gewährleisten, wenn verschiedene virtuelle Adressseiten auf die gleiche physikalische Seite abgebildet werden. Dadurch können Software-Optimierungen, wie etwa atomare Vektorverbreiterungen (z. B. Verbreitern von 128-Bit-Vektor-Befehlen auf 256-Bit-Vektor-Befehle), in atomaren Abschnitten des Codes durchgeführt werden, ohne befürchten zu müssen, dass die Optimierungen zu einer ungültigen Abarbeitung führen.
  • Wenn bei einer Ausführungsform während der Abarbeitung eines atomaren Hardware-Abschnitts des Codes (entweder durch transaktionale Abarbeitung oder Hardware Lock Elision) zwei atomare Speicheroperationen in zwei verschiedene virtuelle Adressseiten oder Adressräume zu einer Übersetzung von virtuell nach physikalisch für den gleichen physikalischen Speicherplatz führen, wird der atomare Abschnitt fehlschlagen gelassen oder vorzeitig abgebrochen. Als ein Beispiel werden Hardware-Strukturen verwendet oder so modifiziert, dass sie eine solches Übersetzungsszenario detektieren und die Transaktion vorzeitig abbrechen. Daher führt Software (ein Compiler, ein Optimierer und/oder ein Übersetzer), die in einigen Fällen zum Detektieren solche Übersetzungsprobleme ungeeignet ist, die Optimierungen durch und verlässt sich darauf, dass die Hardware die Datensicherheit schützt.
  • Als eine beispielhafte Ausführungsform wird ein spekulatives Zugriffsbit (s-Bit) zu den Einträgen eines Übersetzungspuffers hinzugefügt, wie etwa eines Datenübersetzungs-Look-aside-Puffers (d-TLB). Die Bits werden am Beginn eines atomaren Abschnitts (oder analog am Ende eines vorhergehenden kritischen Abschnitts) auf einen Standardwert zurückgesetzt. Und ein Bit für einen gegebenen TLB-Eintrag wird auf einen zugegriffenen Wert gesetzt, wenn eine Speicheroperation bewirkt, dass eine Übersetzung durchgeführt wird, die den gegebenen TLB-Eintrag verwendet. Darüber hinaus ermittelt, wenn das s-Bit für einen Eintrag gesetzt ist, die Hardware (entweder mittels eines Filters oder durch einen direkten Abgleich), ob eine übersetzte physikalische Adresse für den Eintrag mit einer anderen physikalischen Adresse für einen anderen TLB-Eintrag übereinstimmt, dessen s-Bit ebenfalls auf den zugegriffenen Wert gesetzt ist. Wenn die Hardware ermittelt, dass ein anderer Eintrag eine übereinstimmende physikalische Adresse hat (und dass deren s-Bit ebenfalls gesetzt ist), wird die mit der Speicheroperation assoziierte Transaktion fehlschlagen gelassen oder vorzeitig abgebrochen. Wie vorstehend dargelegt worden ist, kann die Ermittlung durch die Hardware, ob physikalische Adressen übereinstimmen, bei jeder Granularität durchgeführt werden (iterativ über die einzelnen TLB-Einträge oder durch Gruppieren oder Filtern von TLB-Einträgen).
  • Es kann zum Beispiel ein Bloom-Filter verwendet werden, um zu ermitteln, ob eine physikalische Adresse auf der gleichen Gruppe wie andere physikalische Adressen in dem TLB abgebildet wird. Und wenn sie nicht zu der gleichen Gruppe gehört, kann weiter ermittelt werden, ob die physikalische Adresse mit einer physikalischen Adresse aus dieser Gruppe übereinstimmt. Außerdem wird bei einigen Ausführungsformen eine Transaktion fehlschlagen gelassen, wenn ein TLB-Eintrag, dessen s-Bit auf den zugegriffenen Wert gesetzt ist, zum Löschen gewählt wird. Bei diesem Szenario kann es zweckmäßig sein, einen TLB-Ersetzungs-Algorithmus von Lösch-Einträgen zu befreien, deren s-Bit auf den zugegriffenen Wert gesetzt ist.
  • Kommen wir nun zu 2. Hier ist eine Ausführungsform einer logischen Darstellung von Modulen zur Unterstützung beim Detektieren und/oder Verarbeiten von mehreren unübersetzten Adressen gezeigt, die in entsprechende übersetzte Adressen übersetzt werden. Bei der nachstehenden Beschreibung ist zu beachten, dass eine beispielhafte Ausführungsform einer unübersetzten Adresse (einer virtuellen Adresse) und einer übersetzten Adresse (einer physikalischen Adresse) verwendet wird, um die Erörterung voranzubringen. Die hier beschriebenen Verfahren und Ausführungsformen können jedoch für jede Übersetzung von Adressen sowie für alle Strukturen zum Halten von letzten Versionen dieser Übersetzungen verwendet werden.
  • Bei einer Ausführungsform sind ein oder mehrere Decodierer 205 so konfiguriert, dass sie Befehle decodieren, die als Teil einer Befehlssatzarchitektur erkennbar sind, die für einen Prozessor 200 definiert ist. Hier ist eine Decodierlogik 205 so konfiguriert, dass sie eine erste Zugriffsoperation des transaktionalen Speichers decodiert (Befehl 203), um eine erste virtuelle Adresse (eine virtuelle Adresse 203a) zu referenzieren. Als ein Beispiel erkennen die Decodierer 205 einen Operationscode (einen Opcode 203o) des Befehls 203, um den Befehl aus der ISA zu identifizieren. Und die übrige Pipeline (weitere Stufen 250), Stufen, Logik (eine Übersetzungslogik 210), Firmware usw. des Prozessors 200 führen festgelegte Schritte auf Grund der Identifikation des Befehls 203 durch den einen oder die mehreren Decodierer 205 aus.
  • Wie gezeigt ist, enthält der Befehl 203 beispielhaft eine spekulative Operation, die Bestandteil eines kritischen oder atomaren Abschnitts des Codes ist. Zum Beispiel umfasst eine spekulative Operation, die Bestandteil eines kritischen Abschnitts des Codes ist, einen Start-Befehl für einen atomaren, transaktionalen oder kritischen Abschnitt, einen Ende-Befehl für den atomaren, transaktionalen oder kritischen Abschnitt, einen Speicherzugriffsbefehl für den atomaren, transaktionalen oder kritischen Abschnitt, usw. Ebenso sind der oder die Decodierer 205 so konfiguriert, dass sie den Befehl 204, der den Operationscode 2040 und eine virtuelle Adresse 204a referenziert, erkennen und decodieren. Wenn die virtuellen Adressen 203a und 204a gleich sind, fürt die Übersetzungslogik 204 normalerweise die gleiche Übersetzung in eine physikalische Adresse durch. Um die Geschwindigkeit der Übersetzung zu erhöhen, enthält die Logik 210 oftmals einen Puffer zum Halten der letzten Übersetzungen. Dadurch werden nachfolgende Übersetzungen beschleunigt, da das Durchgehen von Seitentabellen zum Durchführen einer Übersetzung potentiell vermieden wird, wenn die Übersetzung bereits in einem Puffer gehalten wird.
  • Wenn im Gegensatz dazu die virtuellen Adressen 203a und 204a verschieden sind, werden zwei verschiedene Übersetzungen ausgeführt (d. h., ein mit einer virtuellen Adresse indexierter Übersetzungspuffer hat zwei Übersetzungseinträge, einen für die virtuelle Adresse 203a und einen für die virtuelle Adresse 204a). Mit anderen Worten, die Übersetzungslogik 210 übersetzt die virtuelle Speicheradresse 203a in eine physikalische (oder übersetzte) Adresse 203ta. Und gleichermaßen wird die virtuelle Speicheradresse 204a in eine übersetzte Adresse 204ta übersetzt. Man beachte, dass die Adressübersetzung, wie etwa die Übersetzung unter Verwendung von Seitentabellen, die oft einzeln mit Threads verbunden sind, hier nicht speziell beschrieben wird, um zu vermeiden, dass das Verständnis der Erörterung unnötig erschwert wird.
  • Bei jeder Übersetzung wird ein Übersetzungspuffer-Eintrag erzeugt, gespeichert und/oder aktualisiert, um die virtuelle Adresse 203, die der übersetzten Adresse 203ta entspricht oder mit dieser assoziiert ist, und die virtuelle Adresse 204a mit der übersetzten Adresse 204ta zu halten. Vorher (während der statischen Analyse oder bei Laufzeit-Kontrollen) vermeidet die Software potentiell Neuordnungszugriffe auf die gleiche virtuelle Speicheradresse. Wenn zwei verschiedene virtuelle Adressen 203a und 204a auf die gleiche physikalische Adresse abgebildet werden, kann die Software dieses Szenario möglicherweise nicht detektieren und vermeiden, was dann zu einer ungültigen Abarbeitung führen kann (der Fall RAW, WAR oder WAW). Bei einer Ausführungsform sollen jedoch Module, wie etwa die Übersetzungslogik 210 und eine Steuerlogik 215, sicherstellen, dass dieses Szenario nicht zu einer ungültigen Abarbeitung führt.
  • Daher soll bei einer Ausführungsform jeder Übersetzungseintrag ein spekulatives Zugriffsfeld haben (oder mit diesem assoziiert sein). Für den Fall, dass die Übersetzungslogik 210 einen Übersetzungseintrag mit einer neuen Übersetzung aktualisiert (d. h., einen Übersetzungseintrag mit einer Übersetzung einer unübersetzten Adresse 203a, die mit der übersetzten Adresse 203ta assoziiert ist, in Reaktion auf einen Decodierbefehl 203 des oder der Decodierer 205 aktualisiert), ist die Übersetzungslogik 210 außerdem so konfiguriert oder eingerichtet, dass sie das entsprechende spekulative Zugriffsfeld auf einen zugegriffenen Wert aktualisiert. Das soll anzeigen, dass auf den entsprechenden Übersetzungspuffer-Eintrag transaktional oder spekulativ zugegriffen worden ist.
  • Darüber hinaus ist bei einer Ausführungsform die Steuerlogik 215 so konfiguriert, dass sie eine Transaktion, die mit einer spekulativen Speicheroperation (z. B. dem Befehl 204) assoziiert ist, in Reaktion auf die übersetzte Adresse 203ta fehlschlagen lasst, die direkt mit der übersetzten Adresse 204ta übereinstimmt. Mit anderen Worten, wenn zwei verschiedene spekulativ zugegriffene Übersetzungspuffer-Einträge übersetzte Adressen halten, die miteinander direkt übereinstimmen, wird eine Transaktion, die mit mindestens einem der Übersetzungspuffer-Einträge assoziiert ist, vorzeitig abgebrochen. Das lässt sich in Bezug auf virtuelle und physikalische Adressen auch wie folgt ausdrücken: Wenn zwei verschiedene spekulativ zugegriffen virtuelle Adressen in entsprechende physikalische Adressen übersetzt werden (wie es durch den Inhalt der beiden verschiedenen Übersetzungspuffer-Einträge angegeben ist), muss eine mit den Einträgen assoziierte Transaktion vorzeitig abgebrochen oder fehlschlagen gelassen werden.
  • Nehmen wir hier an, dass der Befehl 203 abgerufen worden ist (ein Befehlszeiger wurde auf den Referenzbefehl 203 bewegt und eine Abruflogik erhielt den Befehl 203 von einem Speicher oder einem Cache). Und dann wurde der Befehl 203 von den Decodierern 205 decodiert. In Reaktion darauf übersetzt die Übersetzungslogik 210 die virtuelle Adresse 203a in die physikalische Adresse 203ta und fuhrt die festgelegten Operationen in Pipeline-Stufen 250 für die referenzierte Adresse 203ta aus. Nach der Übersetzung cachet oder speichert die Übersetzungslogik 210 die Übersetzung in einer Struktur, wie etwa einem Übersetzungspuffer. Nehmen wir außerdem an, dass der Befehl 203 ein spekulativer Befehl, wie etwa eine Zugriffsoperation des transaktionalen Speichers, ist, so setzt die Übersetzungslogik 210 ein spekulatives Bit, das mit dem gecacheten oder gespeicherten Übersetzungseintrag assoziiert ist.
  • Wenn ein Befehl 204 vorliegt, läuft ein ähnlicher Prozess ab. Und beim Aktualisieren des Übersetzungspuffer-Eintrags (und somit des spekulativen Bits) ermittelt die Steuerlogik 215, ob ein weiterer spekulativ zugegriffener Übersetzungspuffer-Eintrag eine entsprechende übersetzte Adresse (eine Adresse, die mit der physikalischen Adresse 204ta übereinstimmt) hält. An und für sich umfasst die vorhergehende Anweisung Folgendes: (1) Ermitteln, ob auf einen Übersetzungspuffer-Eintrag spekulativ zugegriffen wird, und (2) Ermitteln, ob ein Übersetzungspuffer-Eintrag eine physikalische Adresse hält, die mit der physikalischen Adresse 204ta übereinstimmt. Diese Ermittlungsoperationen können in jeder Reihenfolge ausgeführt werden.
  • Als ein erstes Beispiel wird eine Gruppe von spekulativ zugegriffenen Puffereinträgen bestimmt (d. h., alle Einträge, bei denen das spekulative Zugriffsbit gesetzt ist und die auf einen speziellen Thread oder den Bereich aller Threads begrenzt sein können, die auf Grund der Implementierung der Konfiguration gemeinsam Zugriff auf den Übersetzungspuffer haben). Dann wird die Gruppe von spekulativ zugegriffenen Einträgen gesucht, um zu ermitteln, ob sie eine Adresse halten, die mit der physikalischen Adresse 204ta übereinstimmt. Alternativ wird der Übersetzungspuffer nach einer physikalischen Adresse durchsucht, die mit der physikalischen Adresse 204ta übereinstimmt. Und wenn eine solche übereinstimmende physikalische Adresse gefunden wird, wird ermittelt, ob der zugehörige Übersetzungspuffer-Eintrag als spekulativ zugegriffen gekennzeichnet ist. Als eine Kombination kann ein TLB iterativ durchsucht werden, wie etwa bei einer Hardware-Zustandsmaschine, um zu ermitteln, ob ein Eintrag sowohl eine Adresse, die mit der physikalischen Adresse 204ta übereinstimmt, hält als auch als spekulativ zugegriffen gekennzeichnet ist. Diese Suche kann auch unterteilt werden (z. B. wird ermittelt, ob spekulativ zugegriffen worden ist, und es wird ohne Adressenvergleich weitergemacht, wenn nicht spekulativ zugegriffen worden ist) oder simultan durchgeführt werden (z. B. wird für den Vergleichsprozess das spekulative Bit an die Adresse 204ta angehängt).
  • Als ein weiteres Beispiel wird ein Filter oder Algorithmus verwendet, um zu ermitteln, ob ein Übersetzungspuffer Adressen hält, die mit der physikalischen Adresse 204ta übereinstimmen. Hier wird ein Filter, wie etwa ein Bloom-Filter, verwendet. Physikalische. Adressen, wie etwa die Adresse 204ta, des Übersetzungspuffers werden auf eine Gruppe von Bloom-Filter-Bits abgebildet (z. B. in die Gruppe gehasht). Und wenn zwei physikalische Adressen auf die gleiche Gruppe abgebildet werden, wird bei einer Ausführungsform ermittelt, dass sie übereinstimmende physikalische Adressen sind. Man beachte, dass dieses Szenario eine größere Granularität beinhaltet, damit physikalische Adressen miteinander übereinstimmen (d. h., es können mehrere physikalische Adressen gefunden werden, die miteinander übereinstimmen). Aber der Mehraufwand zum Ermitteln einer exakten Übereinstimmung von physikalischen Adressen wird potentiell verringert, da ein vollständiger Adressenvergleich potentiell vermieden wird.
  • Die Ebene oder der Bereich von Adressen, die miteinander übereinstimmen, ist eine Wahlmöglichkeit für die Implementierung der Konfiguration, die so abgeändert werden kann, dass mehr vorzeitige Abbrüche (eine größere Anzahl von Adressen, die durch größere Gruppierungen von übereinstimmenden Adressen miteinander übereinstimmen, was leicht zu mehr Konflikten und vorzeitigen Abbrüchen führt) oder weniger vorzeitige Abbrüche (detailgenaue Übereinstimmung der physikalischen Adressen, um nur dann vorzeitig abzubrechen, wenn zwei virtuelle Adressen auf genau die gleiche physikalische Adresse abgebildet werden) erzielt werden. Außerdem kann ein mehrstufiger Ansatz verwendet werden. Hier wird zunächst ein Filter verwendet, um zu ermitteln, ob andere Übersetzungspuffer-Einträge eine physikalische Adresse halten, die in die gleiche Gruppe wie die Adresse 204ta gehasht werden. Wenn keine anderen Puffereinträge eine solche physikalische Adresse halten, gibt es keinen Konflikt und die Abarbeitung geht normal weiter. Wenn jedoch festgestellt wird, dass eine oder mehrere Adressen auf der Filter-Ebene miteinander übereinstimmen, wird ein Adressenvergleich durchgeführt, um zu ermitteln, ob eine Adresse aus der gefilterten Gruppe mit der Adresse 204ta übereinstimmt. Daher wird in dem Fall, dass keine gefilterten Adressen miteinander übereinstimmen, die Kontrolle wesentlich beschleunigt. Und auch wenn Adressen, die miteinander exakt übereinstimmen, in dem Übersetzungspuffer für die Adresse 204ta vorhanden sind, wird die Kontrolle durch Eingrenzen der Einträge mit einem Filter potentiell so beschleunigt, dass der Adressenvergleich potentiell an einer kleineren Anzahl von Adressen durchgeführt wird.
  • Gleichgültig, ob durch iterative Suche, Filtern oder ein anderes bekanntes Verfahren zum Auffinden eines Inhalts in einer Struktur – nehmen wir an, dass in diesem Beispiel die physikalischen Adressen 204ta und 203ta miteinander übereinstimmen und dass auf beide Adressen 203ta und 204ta von verschiedenen virtuellen Adressen spekulativ zugegriffen wurde (z. B. von zwei Puffereinträgen, die auf Grund dessen, dass zwei verschiedene virtuelle Adressen die physikalische Adresse 203ta bzw. 204ta halten, als spekulativ zugegriffen gekennzeichnet sind). Bei einer Ausführungsform initiiert die Steuerlogik 215 einen Abbruch oder Fehlschlag des atomaren Abschnitts des Codes, der mit dem Befehl 204 assoziiert ist. Man beachte, dass bei einer Ausführungsform, bei der die spekulativen Bits am Beginn oder Ende einer Transaktion zurückgesetzt werden, angenommen werden kann, dass die zwei Einträge mit dem gleichen kritischen Abschnitt assoziiert sind.
  • Hier kann das Initiieren eines Abbruchs einer Transaktion einfach nur durch Aufdrücken (oder umgekehrtes Deaktivieren) eines Abbruchsignals 220 erfolgen, was dazu führen kann, dass ein Abbruchfeld in einem Register (z. B. einem Zustandsregister) aktualisiert wird. Und eine assoziierte Transaktion wird in Reaktion darauf, dass das Zustandsregister aktualisiert wird, abgebrochen (entweder synchron oder asynchron). Oft wird in einem Hardwareunterstützten transaktionalen Speichersystem ein Checkpoint für den Architekturzustand und den Speicherzustand gewählt, bevor mit der Abarbeitung einer Transaktion begonnen wird. Bei diesem Szenario macht es ein Abbruch häufig erforderlich, diesen Architektur- und Speicherzustand bis zu diesem Checkpoint rückgängig zu machen, wobei jedoch ein HTM einen Cache-Speicher verwendet, um provisorische Aktualisierungen zu halten. Die transaktional zugegriffenen Zeilen können als verändert oder ungültig gekennzeichnet werden. Und die vorhergehenden Daten (d. h., die Daten ab dem Checkpoint) können bei Bedarf aus einem übergeordneten Speicher in den Cache gebracht werden.
  • Bei einer Ausführungsform ist die Steuerlogik 215 weiterhin so konfiguriert, dass sie in Reaktion darauf eine Transaktion fehlschlagen lässt, dass ein Übersetzungspuffer-Eintrag (entweder für die virtuelle Adresse 203a in die physikalische Adresse 203ta oder für die virtuelle Adresse 204a in die physikalische Adresse 204ta), der als spekulativ zugegriffen gekennzeichnet ist (wenn ein assoziiertes spekulatives Zugriffsfeld einen spekulativ zugegriffenen Wert hält), aus dem Übersetzungspuffer gelöscht wird. In der Realität hat ein Übersetzungspuffer nur eine begrenzte Kapazität. Nehmen wir daher an, dass eine Übersetzung für den Befehl 203 durchgeführt wird, wie vorstehend dargelegt worden ist, und ein Puffereintrag mit einem spekulativen Zugriffsfeld aktualisiert wird, das auf einen zugegriffenen Wert gesetzt ist, der mit der Adresse 203a assoziiert ist, die mit der Adresse 203ta übereinstimmt. Dann füllt sich der Übersetzungspuffer und braucht Speicherplatz für eine neue Übersetzung. Wenn der Puffereintrag ohne Fehlschlag der Transaktion gelöscht wird und dann der Befehl 204 ausgeführt wird, wenn die Adressen 203ta und 204ta übereinstimmen, gibt es keine Möglichkeit, den Konflikt zu detektieren, da die Informationen über den spekulativen Zugriff für die Übersetzung der Adresse 203ta gelöscht worden sind und verloren gegangen sind. Daher wird bei einer Ausführungsform bei der Löschung eines spekulativen Puffereintrags die aktuelle Transaktion abgebrochen oder fehlschlagen gelassen – ein Hinweis darauf, dass die Transaktion keine Hardware-Ressourcen mehr hat, um die Datensicherheit entsprechend zu gewährleisten.
  • Als eine Ausführungsform der potentiellen Implementierung der Konfiguration soll dann die Steuerlogik 215 Übersetzungspuffer-Einträge ersetzen, bei denen die spekulativen Bits nicht vor Einträgen gesetzt werden, die nicht als spekulativ gekennzeichnet sind. Der gebräuchlichste Ersetzungsalgorithmus für solche Strukturen ist der zuletzt verwendete (d. h., wenn ein Puffereintrag der älteste ist, wird dieser erste Puffereintrag gelöscht). In diesem Beispiel kann jedoch ein LRU-Algorithmus so modifiziert werden, dass er gegen das Ersetzen von spekulativ zugegriffenen Übersetzungspuffer-Einträgen durch nicht spekulativ zugegriffene Einträge beeinflusst wird. Selbst wenn zum Beispiel ein spekulativ zugegriffener Puffereintrag der zuletzt verwendete Eintrag ist, wird ein nicht spekulativ zugegriffener Puffereintrag zum Löschen gewählt, um die spekulative Verfolgung aufrechtzuerhalten. Man beachte jedoch, dass das Beeinflussen gegen diese Ersetzung für das Wählen eines nicht spekulativen Eintrags gegenüber einem spekulativen Eintrag möglicherweise nicht uneingeschränkt ist. Mit anderen Worten, entsprechend dem Grundsatz, einem Hinweis oder einem anderen Faktor kann ein spekulativer Puffereintrag vor einem nicht spekulativ zugegriffenen Puffereintrag ersetzt werden.
  • Als ein Ergebnis solcher Schutzmaßnahmen wird die Software in die Lage versetzt, Optimierungen, wie etwa das Neuordnen von Befehlen, in atomaren Abschnitten des Codes für die virtuelle Adresse auszuführen. Mit anderen Worten, die Software kann von der Voraussetzung ausgehen, dass nicht zwei verschiedene virtuelle Adressen auf die gleiche physikalische Adresse zugreifen. Und wenn während der Laufzeit-Abarbeitung eines atomaren Abschnitts des Codes, wie etwa der Abarbeitung einer Hardware-unterstützten Transaktion in einer HTM-Umgebung, oder eines kritischen Abschnitts in einer HLE-Umgebung zwei verschiedene virtuelle Zugriffe den gleichen physikalischen Speicherplatz referenzieren, initiiert die Hardware einen Abbruch des atomaren Abschnitts, um sicherzustellen, dass keine der Software-Optimierungen, die unter den vorgenannten Grundvoraussetzungen vorgenommen worden sind, ungünstige Wirkungen verursacht.
  • Kommen wir nun zu 3. Hier ist eine Ausführungsform von logischen Darstellungen von Hardware-Strukturen dargestellt, die das Software-basierte Neuordnen von Speicherzugriffsoperationen in atomaren Abschnitten des Codes unterstützen sollen. Genauso wie bei der Erörterung zu 2 ist eine Decodierlogik 305 so konfiguriert, dass sie transaktionale Speicheroperationen 303 und 304 decodiert, die auch als atomare oder spekulative Operationen aus einem kritischen oder atomaren Abschnitt des Codes bezeichnet werden können.
  • Ein Übersetzungspuffer 310 hat Übersetzungspuffer-Einträge 310 bis 314, die letzte Übersetzungen halten sollen. Man beachte, dass der Übersetzungspuffer 310 jeder Puffer zum Halten von zwei Werten oder Adressen sein kann, die durch einen Algorithmus miteinander verbunden sind, wie etwa ein Datenübersetzungs-Look-aside-Puffer (dTLB), der Übersetzungen von virtuellen in physikalische Adressen halten soll. Wie gezeigt ist, hat jeder der Übersetzungspuffer-Einträge 310 bis 314 ein spekulatives Zugriffsfeld (spekulative Zugriffsfelder 310s bis 314s) (oder er ist mit einem spekulativen Zugriffsfeld assoziiert).
  • Als ein Beispiel detektieren der oder die Decodierer 305 während der Laufzeit den Befehl 303 und decodieren ihn. Eine Übersetzungslogik 307 übersetzt eine virtuelle Adresse 303a in eine physikalische Adresse 313pa und speichert die Übersetzung in dem Eintrag 313. Wenn wir nun annehmen, dass der Befehl 303 ein spekulativer Befehl, wie etwa ein Speicherzugriffsbefehl aus einem atomaren Abschnitt des Codes, ist, so wird das spekulative Feld 313s auf einen spekulativ zugegriffenen Wert aktualisiert, um anzuzeigen, dass auf den Puffer 313 spekulativ zugegriffen worden ist. Bei einer Ausführungsform hat das Feld 313s eine Speicherzelle zum Halten eines „Bits” (d. h., eines logischen Werts). Hier kann das Bit 313s einen Standard- oder Rückstellwert, wie etwa eine logische Eins oder einen logischen H-Pegel, und einen Sollwert (oder spekulativ zugegriffenen Wert) haben, wie etwa eine logische Null oder einen logischen L-Pegel.
  • In ähnlicher Weise decodieren der oder die Decodierer 305 einen Befehl 304, führen eine Übersetzung durch, um eine physikalische Adresse 314pa zu erhalten, speichern die Übersetzung in dem Eintrag 314 und aktualisieren das spekulative Zugriffsbit 314s auf einen spekulativ zugegriffenen Wert. Bei einigen Ausführungsformen wird die nachstehend beschriebene Suche durchgeführt, bevor der Übersetzungseintrag 314 aktualisiert wird. Daher brauchen solche Aktualisierungen nicht durchgeführt zu werden, wenn ein Abbruch erfolgen soll. Trotz der Reihenfolge ermittelt die Steuerlogik 315, ob ein anderer Übersetzungspuffer-Eintrag in dem Puffer 310 eine übereinstimmende physikalische Adresse enthält. Wie vorstehend dargelegt worden ist, hat bei einer Ausführungsform eine Vergleichslogik 320 eine Hardware-Zustandsmaschine, um den Übersetzungspuffer 310 iterativ zu durchsuchen, um zu ermitteln, ob ein Eintrag, wie etwa der Übersetzungspuffer-Eintrag 313, der mit dem spekulativen Zugriffsfeld 313s assoziiert ist, das den spekulativ zugegriffenen Wert hält, die übersetzte physikalische Adresse 314a referenziert. Erstens ist zu beachten, dass eine ähnliche Suche bei der Anfangsdecodierung des Befehls 303 durchgeführt werden kann. Zweitens umfasst die Suche in dem Puffer 310 bei einem Beispiel eine Durchsuchung der einzelnen Einträge 310 bis 313 (außer 314, da dieser Eintrag die Suchkriterien der Adresse 314pa enthält). Und bei der Suche wird ermittelt, ob alle oder nur einige physikalische Adressen, wie etwa die physikalischen Adressen 310pa bis 313pa, mit der gesamten Adresse 314a oder dem übereinstimmenden Teil davon übereinstimmen.
  • Bei einigen Ausführungsformen kann eine partielle oder volle Adressenübereinstimmung nur ein Kriterium für einen Abbruch oder Fehlschlag sein. Wenn hier der Eintrag 313 nicht auch als spekulativ zugegriffen gekennzeichnet ist (das Bit 313s ist gesetzt), gibt es keinen Konflikt. Und wenn während der Suche ein Konflikt ermittelt wird, kann ein Abbruch oder Fehlschlag des atomaren Abschnitts initiiert werden, ohne die Suche zu Ende zu führen. Nehmen wir in Fortsetzung des vorstehenden Beispiels an, dass die physikalische Adresse 313a mit der physikalischen Adresse 314pa übereinstimmt. In diesem Fall vergleicht die Vergleichslogik 320 die physikalischen Adressen 310a bis 312a ohne Übereinstimmung. Aber beim Vergleichen der physikalischen Adressen 314a und 313a wird eine Übereinstimmung gefunden. Und entweder während dieses Vergleichs, als Teil dieses Vergleichs oder gesondert wird festgestellt, dass auf den Eintrag 313 von dem Feld 313s spekulativ zugegriffen worden ist. Das spekulative Zugriffsfeld 313s kann zum Beispiel an die physikalische Adresse 313a angehängt werden, um mit dem an die Adresse 314a angehängten Feld 314s verglichen zu werden. Eine exakte Übereinstimmung zeigt, dass sowohl die Adressen übereinstimmen als auch die spekulativen Bits auf einen zugegriffenen Wert gesetzt sind.
  • Eine exakte Adressenübereinstimmung und eine iterative Durchsuchung des gesamten Puffers 310 sind jedoch nicht notwendig. Bei weiteren Ausführungsformen können Filter zum Einteilen von Adressen in Gruppen verwendet werden. Und wenn sich eine der Gruppen von Adressen in dem Übersetzungspuffer befindet, kann ein Abbruch initiiert werden oder eine weitere Suche durchgeführt werden. Anstatt zum Beispiel die gesamte Adresse 314a abzugleichen, wird nur ein Teil der Adresse 314a verwendet. Hier bedeutet ein Teil der Adresse 314a im Wesentlichen mehrere potentielle Adressen, die mit diesen speziellen Bits übereinstimmen. Mit anderen Worten, die Genauigkeit der spezifischen Adressenübereinstimmung geht zu Lasten der Geschwindigkeit. Wenn jedoch zu viele Abbrüche auftreten, da die Adressen-Gruppierungen zu groß sind, können die Gruppen dynamisch nach Größen eingeteilt werden, oder nach einer Übereinstimmung in einer Gruppe kann eine weitere Suche durchgeführt werden. Oder es wird zunächst auf Grund des Felds 313s festgestellt, dass auf den Eintrag 313 spekulativ zugegriffen wurde. Und anschließend führt ein Adressenvergleich der physikalischen Adressen 313pa und 314pa zu einer Adressenübereinstimmung.
  • Als ein weiteres Beispiel umfasst die Logik 320 eine Bloom-Filter-Logik, die die Adresse 314pa in eine Gruppe von Bits hashen soll. Hier werden mehrere Adressen in die gleiche Gruppe gehasht. Und wenn, wie in dem vorstehenden Beispiel, die physikalische Adresse 313pa mit der Adresse 314pa übereinstimmt, ermittelt die Bloom-Filter-Logik 320, dass sie zu der gleichen Gruppe gehören. Als ein Ergebnis der Zugehörigkeit zu der gleichen Gruppe wird ermittelt, dass die Adressen übereinstimmen. Auf Grund dieser Information wird bei einer Ausführungsform ein Transaktionsfehlschlag initiiert, wie etwa mit einem Abbruchsignal 330. Bei einer weiteren Alternative wird, in dem Fall, dass ein Bloom-Filter zu zu vielen Abbrüchen führt oder führen würde, eine iterative Suche ähnlich der in der vorstehenden Erörterung in der Gruppe durchgeführt, wenn Adressen mit der gleichen Gruppe übereinstimmen. Nehmen wir zum Beispiel an, dass die Adressen 312pa bis 314pa, wenn sie von der Filterlogik 320 gehasht werden, alle auf die gleiche Gruppe abgebildet werden. Hier werden, anstatt den gesamten Puffer 310 nach einer Adressenübereinstimmung zu durchsuchen, nur die Einträge 312 bis 313 durchsucht, sodass potentiell die Notwendigkeit entfällt, die Einträge 310 bis 311 zu vergleichen. In diesem Beispiel wird die Übereinstimmung der physikalischen Adressen in dem Eintrag 313 gefunden, nachdem nur zwei Einträge anstatt des gesamten Puffers durchsucht worden sind, was zu einem Abbruch führt. Man beachte, dass wenn keine Übereinstimmung gefunden wird, Fremdabbrüche, die von den gefilterten Gruppierungen erzeugt werden, auf Kosten einer zusätzlichen Suche eliminiert werden können. Daher kann ein Entwickler (oder eine dynamische Laufzeit-Einstellung) eine Anzahl von potentiellen Abbrüchen mit der Suchgeschwindigkeit und -effizienz im Gleichgewicht halten.
  • Bei einer weiteren Ausführungsform umfasst der Befehl 303 einen Begrenzungsbefehl, der einen abzuarbeitenden atomaren Abschnitt des Codes begrenzen soll. Hier sollen der oder die Decodierer 305 den Befehl 303 begrenzen, der eine Adresse 303va referenziert. Oft umfasst ein Begrenzungsbefehl einen Start-Befehl für einen kritischen Abschnitt oder einen Ende-Befehl für den kritischen Abschnitt. Als ein Beispiel fügt ein Nutzer oder Compiler für die transaktionale Abarbeitung einen Start- und/oder Ende-Befehl für den atomaren Abschnitt ein, um einen kritischen Abschnitt des Codes für die Abarbeitung zu begrenzen (zu definieren). Gleichermaßen wird bei einer HLE ein Sperr-/Entsperr-Paar entweder von einer Software, Firmware, Hardware oder einer Kombination davon durch einen Start- und Ende-Befehl für den kritischen Abschnitt ersetzt, was dazu führt, dass das Sperr-/Entsperr-Paar elidiert wird und der kritische Abschnitt wie eine Transaktion abgearbeitet wird. Wie vorstehend dargelegt worden ist, kann bei einer Ausführungsform ein Begrenzungsbefehl ein Aufruf für eine Start- oder Ende-Transaktionsfunktion sein, der in einem Bibliothekscode bereitgestellt wird. Daher kann sich ein Verweis auf die Ausführung einer Operation, wie etwa das nachstehend beschriebene Rücksetzen von spekulativen Bits, auf einen Verweis auf einen Befehl oder eine Operation beziehen, der/die in-line eingefügt wird, um eine Bibliotheksfunktion oder einen Befehl oder eine Operation in der Bibliotheksfunktion aufzurufen.
  • Hier werden in Reaktion darauf, dass der oder die Decodierer 305 den Begrenzungsbefehl 303 decodieren, die spekulativen Zugriffsfelder 310s bis 314s auf einen Standardwert zurückgesetzt. Somit werden beim Starten und/oder Beenden einer Transaktion die spekulativen Zugriffsfelder zurückgesetzt. Dadurch verursachen spekulative Zugriffe von einer aktuellen Transaktion keine Abbrüche auf Grund von spekulativen Zugriffen von einer vorhergehenden Transaktion, die bereits ausgeführt worden ist. Zum Beispiel hat eine Start-Transaktions-Bibliotheksfunktion einen Begrenzungsbefehl, wenn sie ausgeführt wird, um die spekulativen Felder 310s bis 314s zurückzusetzen, sodass die Felder bei einem nicht spekulativ zugegriffenen Wert beginnen. Mit anderen Worten, es wird ein neuer Start zum Verfolgen von atomaren Übersetzungen in dem Übersetzungspuffer 310 erzielt. Man beachte, dass ähnlich wie bei anderen gemeinsamen Ressourcennutzungen zwischen Threads oder Verarbeitungselementen ein Verarbeitungselement-Identifikator (PID) in Verbindung mit den spekulativen Zugriffsbits 310s bis 314s zum Setzen, Suchen und Rücksetzen verwendet werden kann, damit mehrere Threads einen gemeinsamen Zugriff auf den Puffer 310 haben können.
  • Kommen wir nun zu 4. Hier ist eine Ausführungsform eines Ablaufdiagramms für ein Verfahren zum Abbrechen einer Transaktion in Reaktion auf die Übersetzung einer spekulativ zugegriffenen unübersetzten Adresse in eine entsprechende übersetzte Adresse gezeigt. Man beachte, dass die Vorgänge für das Ablaufdiagramm von 4 im Wesentlichen seriell mit einer angegebenen Reihenfolge der Vorgänge dargestellt sind. Jedoch ist weder der serielle Charakter dieser Vorgänge noch die dargestellte Reihenfolge erforderlich. Zum Beispiel können bei 4 auf Grund der Implementierung der Konfiguration die Vorgänge 415 und 420 nicht ausgeführt werden, wenn bei dem Vorgang 430 eine physikalische Adresse, die mit einer übersetzten Adresse übereinstimmt, gefunden wird, bevor die Übersetzungseinträge aktualisiert werden. Auch die Vorgänge 405 bis 435 sind in einer im Wesentlichen linearen oder seriellen Weise dargestellt. Die Vorgänge können jedoch in dem gesamten Zeitraum parallel ausgeführt werden. Anstatt zum Beispiel iterativ nach Übersetzungseinträgen zu suchen, die in dem Vorgang 425 gekennzeichnet werden, und dann zu ermitteln, ob es in dem Vorgang 430 eine Übereinstimmung von physikalischen Adressen gibt, können zunächst die physikalischen Adressen verglichen werden und dann kann ermittelt werden, ob ein passender Eintrag als spekulativ gekennzeichnet ist. Darüber hinaus kann jeder der dargestellten Vorgänge in einer Hardware, Software, Firmware oder einer Kombination davon ausgeführt werden. Außerdem kann ein Programmcode in der Form eines oder mehrerer Befehle oder Operationen bei der Abarbeitung eine Maschine veranlassen, die nachstehend dargestellten und beschriebenen Vorgänge auszuführen. Man beachte, dass sich die nachstehende Erörterung auf die Abarbeitung einer Transaktion bezieht. Die Vorgänge gelten jedoch gleichermaßen für einen atomaren Abschnitt für die HLE oder eine andere atomare spekulative Abarbeitung.
  • Aus der vorstehenden Erörterung geht hervor, dass als spekulativ gekennzeichnete Übersetzungseinträge entweder beim Beenden einer Transaktion (Abbrechen oder Ausführen) oder beim Beginnen einer Transaktion zurückgesetzt werden. Dann wird bei dem Vorgang 405 eine transaktionale Speicheroperation von einer Transaktion ausgeführt. Wie vorstehend dargelegt worden ist, referenziert die Speicheroperation eine Speicheradresse, wie etwa eine virtuelle Adresse. Das Ausführen einer Operation kann auf jeder bekannten Stufe der Verarbeitung erfolgen, wie etwa einer Pipeline-Stufe, die aus der Gruppe der folgenden Stufen gewählt ist: eine Abrufstufe in dem Fall, dass ein Befehlszeiger die transaktionale Speicheroperation referenziert, eine Decodierstufe, eine Sendestufe, eine Festlegungsstufe, eine Abarbeitungsstufe und eine Retirement-Stufe.
  • Bei dem Vorgang 410 wird die virtuelle Adresse in Reaktion auf das Ausführen der transaktionalen Speicheroperation in eine physikalische Adresse übersetzt. Oft wird eine solche Übersetzung unter Verwendung von Seitentabellen durchgeführt. Die Seitentabellen- und Adressübersetzung wird hier zwar nicht näher erörtert, um das Verständnis der Erörterung nicht zu erschweren, aber es kann jedes bekannte Adressübersetzungsverfahren verwendet werden. Dann wird in den Vorgängen 415 und 420 ein erster Übersetzungseintrag mit der virtuellen Adresse aktualisiert, die mit der übersetzten, physikalischen Adresse assoziiert ist (mit dieser übereinstimmt). Und der erste Übersetzungseintrag wird als transaktional zugegriffen gekennzeichnet. Zum Beispiel wird ein spekulatives Bit, das mit dem Übersetzungseintrag assoziiert ist, mit diesem übereinstimmt und/oder in diesem enthalten ist, auf einen spekulativ zugegriffenen logischen Wert gesetzt.
  • Bei dem Vorgang 425 wird ermittelt, ob ein zweiter Übersetzungseintrag, der ebenfalls als transaktional zugegriffen gekennzeichnet ist, mit der physikalischen Adresse aus dem ersten Übersetzungseintrag übereinstimmt. Wie vorstehend dargelegt worden ist, umfasst bei einer Ausführungsform die Übereinstimmung das Ermitteln, dass eine zweite physikalische Adresse, die in dem zweiten Übersetzungseintrag gehalten wird, mit der physikalischen Adresse übereinstimmt. Als ein weiteres erläuterndes Beispiel umfasst die Übereinstimmung das Ermitteln, dass eine zweite physikalische Adresse, die in dem zweiten Übersetzungseintrag gehalten wird, auf die gleiche Gruppe wie die physikalische Adresse abgebildet wird. Hier kann ein Bloom-Filter verwendet werden, um zu ermitteln, ob beide physikalische Adressen zu der gleichen Gruppe gehören.
  • Gleichgültig, ob durch Filtern oder Abgleichen – wenn die physikalischen Adressen übereinstimmen, ist bereits festgestellt worden, dass der Eintrag bei dem Vorgang 425 als spekulativ gekennzeichnet wurde. Daher wird bei dem Vorgang 435 die Transaktion abgebrochen oder fehlschlagen gelassen. Auf diese Weise kann eine Software, Firmware oder ein Mikrocode eine Speicherordnungsoptimierung für unübersetzte Adressen durchführen und sich auf Hardware-Strukturen stützen, um zu gewährleisten, dass solche unübersetzten Adressen, die verschieden sind, nicht auf die gleiche physikalische Adresse abgebildet werden. Oder wenn sie dennoch auf die gleiche physikalische Adresse abgebildet werden, kann zumindest gewährleistet werden, dass die spekulative atomare Abarbeitung, die mit den Übersetzungen assoziiert ist, abgebrochen oder fehlschlagen gelassen wird, bevor eine ungültige Abarbeitung für den Speicher- oder Architekturzustand erfolgt.
  • Ein Modul, das hier verwendet wird, bezieht sich auf Hardware, Software, Firmware oder eine Kombination davon. Modulgrenzen, die als trennend dargestellt sind, andern sich oft und überschneiden sich potentiell. Zum Beispiel können ein erstes und ein zweites Modul Hardware, Software, Firmware oder eine Kombination davon gemeinsam nutzen, während sie potentiell eine unabhängige Hardware, Software oder Firmware halten. Bei einer Ausführungsform umfasst die Verwendung des Begriffs „Logik” Hardware, wie etwa Transistoren oder Register, oder andere Hardware, wie etwa programmierbare Logikschaltungen. Bei einer weiteren Ausführungsform umfasst „Logik” jedoch auch Software oder einen Code, der mit der Hardware eine Einheit bildet, wie etwa Firmware oder ein Mikrocode.
  • Der hier verwendete Begriff „Wert” umfasst jede bekannte Darstellung einer Anzahl, eines Zustands, eines logischen Zustands oder eines binären logischen Zustands. Oft werden verwendete logische Pegel oder logische Werte auch als Einsen und Nullen bezeichnet, die einfach binäre logische Zustande darstellen. Zum Beispiel bezeichnet eine Eins einen logischen H-Pegel, und eine Null bezeichnet einen logischen L-Pegel. Bei einer Ausführungsform kann eine Speicherzelle, wie etwa eine Transistor- oder Flash-Zelle, einen einzigen oder mehrere logische Werte halten. Es sind aber auch andere Darstellungen von Werten in Computersystemen verwendet worden. Zum Beispiel kann die Dezimalzahl Zehn auch als ein binärer Wert 1010 und ein hexadezimaler Buchstabe A dargestellt werden. Somit ist ein Wert eine Darstellung von Informationen, die in einem Computersystem gehalten werden können.
  • Außerdem können Zustände durch Werte oder Teile von Werten dargestellt werden. Zum Beispiel kann ein erster Wert, wie etwa eine logische Eins, einen Standard- oder Anfangszustand darstellen, während ein zweiter Wert, wie etwa eine logische Null, einen Nicht-Standardzustand darstellen kann. Bei einer Ausführungsform bezieht sich der Begriff „Rücksetzen” auf einen Standardwert oder -zustand, und der Begriff „Setzen” bezieht sich auf einen aktualisierten Wert oder Zustand. Zum Beispiel ist ein Standardwert potentiell ein logischer H-Pegel, d. h. „Rücksetzen”, während ein aktualisierter Wert potentiell ein logischer L-Pegel ist, d. h. „Setzen”. Man beachte, dass auch eine Kombination von Werten verwendet werden kann, um eine Anzahl von Zuständen darzustellen.
  • Die vorstehend beschriebenen Ausführungsformen der Verfahren, Hardware, Software, Firmware oder des Codes können über Befehle oder Codes implementiert werden, die auf einem Maschinen-zugreifbaren, Maschinen-lesbaren, Computer-zugreifbaren oder Computer-lesbaren Medium gespeichert sind und mit einem Verarbeitungselement abgearbeitet werden können. Ein nichtflüchtiges Maschinen-zugreifbares oder -lesbares Medium ist ein Mechanismus, der Informationen in einer Form bereitstellt (d. h. speichert und/oder sendet), die von einer Maschine, wie etwa einem Computer oder einem elektronischen System, gelesen werden kann. Ein nichtflüchtiges Maschinen-zugreifbares Medium ist zum Beispiel ein Schreib-Lese-Speicher (RAM), wie etwa ein statischer RAM (SRAM) oder ein dynamischer RAM (DRAM); ein ROM; ein magnetisches oder optisches Speichermedium; eine Flash-Speichervorrichtung; eine elektrische Speichervorrichtung; eine optische Speichervorrichtung; eine akustische Speichervorrichtung oder eine andere Form einer Speichervorrichtung zum Halten von Informationen, die aus transitorischen Signalen (Signalen, die sich ausgebreitet haben) (z. B. Trägerwellen, Infrarotsignalen, digitalen Signalen) erhalten werden; usw., die von den nichtflüchtigen Medien zu unterscheiden sind, die Informationen von diesen empfangen können.
  • In der gesamten vorliegenden Patentbeschreibung bedeutet die Bezugnahme auf „eine Ausführungsform”, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Eigenschaft, die in Zusammenhang mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform der vorliegenden Erfindung enthalten ist. Daher bezieht sich das Auftreten der Wendung „bei einer Ausführungsform” an verschiedenen Stellen in der gesamten vorliegenden Patentbeschreibung nicht unbedingt immer auf ein und dieselbe Ausführungsform. Darüber hinaus können die speziellen Merkmale, Strukturen oder Eigenschaften in einer geeigneten Weise in einer oder mehreren Ausführungsformen kombiniert werden.
  • In der vorstehenden Patentbeschreibung ist eine detaillierte Beschreibung unter Bezugnahme auf spezielle beispielhafte Ausführungsformen erfolgt. Es ist jedoch klar, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von dem allgemeinen Grundgedanken und Schutzumfang der Erfindung abzuweichen, die in den beigefügten Ansprüchen dargelegt sind. Die Patentbeschreibung und die Zeichnungen sind daher als erläuternd und nicht als beschränkend anzusehen. Darüber hinaus bezieht sich die vorstehende Verwendung der Ausführungsformen und anderer beispielhafter Darlegungen nicht unbedingt auf ein und dieselbe Ausführungsform oder ein und dasselbe Beispiel, sondern kann sich auf verschiedene und getrennte Ausführungsformen sowie potentiell auf ein und dieselbe Ausführungsform beziehen.

Claims (24)

  1. Vorrichtung mit: einer Decodierlogik, die so konfiguriert ist, dass sie eine erste transaktionale Speicherzugriffsoperation decodiert, um eine erste virtuelle Adresse zu referenzieren, und eine zweite transaktionale Speicherzugriffsoperation decodiert, um eine zweite virtuelle Speicheradresse zu referenzieren, wobei die erste und die zweite virtuelle Speicheradresse verschiedene virtuelle Speicheradressen sein sollen; einer Übersetzungslogik, die so konfiguriert ist, dass sie in Reaktion darauf, dass die Decodierlogik die erste transaktionale Speicherzugriffsoperation und die zweite transaktionale Speicherzugriffsoperation decodiert hat, die erste virtuelle Speicheradresse in eine erste physikalische Adresse übersetzt und die zweite virtuelle Speicheradresse in eine zweite physikalische Adresse übersetzt; und einer Steuerlogik, die so konfiguriert ist, dass sie eine Transaktion, die mit mindestens der zweiten Speicheroperation assoziiert ist, in Reaktion darauf fehlschlagen lässt, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt.
  2. Vorrichtung nach Anspruch 1, dadurch gekennzeichnet, dass die Übersetzungslogik, die so konfiguriert ist, dass sie die erste virtuelle Speicheradresse in eine erste physikalische Adresse übersetzt und die zweite virtuelle Speicheradresse in eine zweite physikalische Adresse übersetzt, Folgendes aufweist: eine Seitentabellenlogik, die so konfiguriert ist, dass sie die erste virtuelle Speicheradresse in die erste physikalische Adresse übersetzt und die zweite virtuelle Speicheradresse in die zweite physikalische Adresse übersetzt; und einen Übersetzungspuffer, der so konfiguriert ist, dass er einen ersten Übersetzungseintrag zum Aufnehmen der ersten virtuellen Adresse, die mit der ersten physikalischen Adresse übereinstimmt, und einen zweiten Übersetzungspuffereintrag zum Aufnehmen der zweiten virtuellen Adresse hält, die mit der zweiten physikalischen Adresse übereinstimmt.
  3. Vorrichtung nach Anspruch 2, dadurch gekennzeichnet, dass der erste Übersetzungseintrag weiterhin ein erstes spekulatives Zugriffsfeld haben soll und der zweite Übersetzungseintrag weiterhin ein zweites spekulatives Zugriffsfeld haben soll und die Übersetzungslogik weiterhin so konfiguriert ist, dass sie in Reaktion darauf, dass die Decodierlogik die erste transaktionale Speicherzugriffsoperation decodiert hat, das erste spekulative Zugriffsfeld auf einen spekulativ zugegriffenen Wert aktualisiert und in Reaktion darauf, dass die Decodierlogik die zweite transaktionale Speicherzugriffsoperation decodiert hat, das zweite spekulative Zugriffsfeld auf den spekulativ zugegriffenen Wert aktualisiert.
  4. Vorrichtung nach Anspruch 3, dadurch gekennzeichnet, dass die Steuerlogik, die so konfiguriert ist, dass sie eine Transaktion, die mit mindestens der zweiten Speicheroperation assoziiert ist, in Reaktion darauf fehlschlagen lässt, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt, weiterhin so konfiguriert ist, dass sie in Reaktion darauf, dass die Decodierlogik die zweite transaktionale Speicherzugriffsoperation decodiert hat, die folgenden Schritte ausführt: in Reaktion darauf, dass das erste spekulativ zugegriffene Feld den zugegriffenen Wert hält, Ermitteln, dass auf den ersten Übersetzungspuffer-Eintrag spekulativ zugegriffen wurde; in Reaktion darauf, dass ermittelt wurde, dass auf den ersten Übersetzungspuffer-Eintrag spekulativ zugegriffen wurde, Ermitteln, ob die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt; und in Reaktion darauf, dass ermittelt wurde, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt, Fehlschlagenlassen der Transaktion.
  5. Vorrichtung nach Anspruch 3, dadurch gekennzeichnet, dass die Steuerlogik, die so konfiguriert ist, dass sie in Reaktion darauf, dass das erste spekulativ zugegriffene Feld den zugegriffenen Wert hält, ermittelt, dass auf den ersten Übersetzungspuffer-Eintrag spekulativ zugegriffen wurde, und in Reaktion darauf, dass ermittelt wurde, dass auf den ersten Übersetzungspuffer-Eintrag spekulativ zugegriffen wurde, ermittelt, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt, eine Hardware-Zustandsmaschine aufweist, um eine physikalische Adresse, die in jedem Übersetzungspuffer-Eintrag gehalten wird, der ein assoziiertes spekulatives Zugriffsfeld hat, das auf den zugegriffenen Wert gesetzt ist, iterativ mit der zweiten physikalischen Adresse zu vergleichen und in Reaktion auf das Vergleichen der in dem ersten Übersetzungspuffer-Eintrag gehaltenen ersten physikalischen Adresse mit der zweiten physikalischen Adresse und auf die Übereinstimmung der ersten physikalischen Adresse mit der zweiten physikalischen Adresse zu ermitteln, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt.
  6. Vorrichtung nach Anspruch 1, dadurch gekennzeichnet, dass die Steuerlogik, die so konfiguriert ist, dass sie in Reaktion darauf, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt, eine Transaktion, die mit mindestens der zweiten Speicheroperation assoziiert ist, fehlschlagen lässt, eine Bloom-Filter-Logik aufweist, die so konfiguriert ist, dass sie die erste physikalische Adresse und die zweite physikalische Adresse in eine Gruppe von Bloom-Filter-Bits hasht, und in Reaktion darauf, dass der Hash der ersten physikalischen Adresse und der zweiten physikalischen Adresse anzeigt, dass sie Teile der gleichen Gruppe sind, ermittelt, dass die erste physikalische Adresse direkt mit der zweiten physikalischen Adresse übereinstimmt.
  7. Vorrichtung nach Anspruch 3, dadurch gekennzeichnet, dass die Steuerlogik weiterhin so konfiguriert ist, dass sie in Reaktion darauf, dass der erste Übersetzungspuffer-Eintrag aus dem Übersetzungspuffer gelöscht wird, wenn das erste spekulative Zugriffsfeld den spekulativ zugegriffenen Wert hält, eine Transaktion fehlschlagen lässt.
  8. Vorrichtung nach Anspruch 3, dadurch gekennzeichnet, dass die Steuerlogik weiterhin so konfiguriert ist, dass sie einen dritten Übersetzungspuffer-Eintrag ersetzt, bevor sie den ersten Übersetzungspuffer-Eintrag und den zweiten Übersetzungspuffer-Eintrag ersetzt, wenn das erste spekulative Zugriffsfeld und das zweite spekulative Zugriffsfeld den spekulativ zugegriffenen Wert halten.
  9. Vorrichtung mit: einer Decodierlogik, die so konfiguriert ist, dass sie einen transaktionalen Speicherzugriff von einer Transaktion decodiert, wobei der transaktionale Speicherzugriff eine Adresse referenziert; einem Übersetzungspuffer, der so konfiguriert ist, dass er ein spekulatives Zugriffsfeld hält, das mit einem Übersetzungspuffer-Eintrag assoziiert ist, wobei der Übersetzungspuffer-Eintrag so konfiguriert ist, dass er die Adresse hält, die mit einer übersetzten Adresse assoziiert ist, wobei der Übersetzungspuffer weiterhin so konfiguriert ist, dass er in Reaktion darauf, dass die Decodierlogik den transaktionalen Speicherzugriff decodiert hat, das spekulative Zugriffsfeld auf einen zugegriffenen Wert aktualisiert, und ermittelt, ob ein zweiter Übersetzungspuffer-Eintrag, der in dem Übersetzungspuffer enthalten ist und mit einem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, die übersetzte Adresse referenziert; und einer Steuerlogik, die so konfiguriert ist, dass sie einen Abbruch der Transaktion in Reaktion darauf initiiert, dass der Übersetzungspuffer ermittelt, dass der zweite Übersetzungspuffer-Eintrag, der in dem Übersetzungspuffer enthalten ist und mit dem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, die übersetzte Adresse referenziert.
  10. Vorrichtung nach Anspruch 9, dadurch gekennzeichnet, dass die Adresse eine virtuelle Speicheradresse umfasst und die übersetzte Adresse eine physikalische Adresse umfasst.
  11. Vorrichtung nach Anspruch 9, dadurch gekennzeichnet, dass der Übersetzungspuffer, der so konfiguriert ist, dass er ermittelt, ob ein zweiter Übersetzungspuffer-Eintrag, der in dem Übersetzungspuffer enthalten ist und mit einem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, die übersetzte Adresse referenziert, eine Hardware-Zustandsmaschine zum Durchsuchen des Übersetzungspuffers aufweist, um in Reaktion darauf, dass eine Adresse, die in dem zweiten Übersetzungspuffer-Eintrag gehalten wird, mit der übersetzten Adresse übereinstimmt, zu ermitteln, dass der zweite Übersetzungspuffer-Eintrag mit dem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, und zu ermitteln, dass der zweite Übersetzungspuffer-Eintrag die übersetzte Adresse referenziert.
  12. Vorrichtung nach Anspruch 9, dadurch gekennzeichnet, dass der Übersetzungspuffer, der so konfiguriert ist, dass er ermittelt, ob ein zweiter Übersetzungspuffer-Eintrag, der in dem Übersetzungspuffer enthalten ist und mit einem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, die übersetzte Adresse referenziert, eine Hardware-Zustandsmaschine zum Durchsuchen des Übersetzungspuffers aufweist, um in Reaktion darauf, dass ein Bloom-Filter-Hash einer Adresse, die in dem zweiten Übersetzungspuffer-Eintrag gehalten wird, auf eine Gruppe abgebildet wird, die die übersetzte Adresse enthält, zu ermitteln, dass der zweite Übersetzungspuffer-Eintrag mit dem zweiten spekulativen Zugriffsfeld assoziiert ist, das den zugegriffenen Wert hält, und zu ermitteln, dass der zweite Übersetzungspuffer-Eintrag die übersetzte Adresse referenziert.
  13. Vorrichtung mit: einer Decodierlogik, die so konfiguriert ist, dass sie einen Begrenzungsbefehl decodiert, der einen atomaren Abschnitt eines abzuarbeitenden Codes begrenzen soll, wobei der Begrenzungsbefehl eine Adresse referenzieren soll; einem Übersetzungspuffer, der so konfiguriert ist, dass er eine Vielzahl von Übersetzungspuffer-Einträgen enthält, die jeweils mit einem spekulativen Zugriffsfeld assoziiert werden sollen; und einer Steuerlogik, die so konfiguriert ist, dass sie in Reaktion darauf, dass die Decodierlogik den transaktionalen Begrenzungsbefehl decodiert, das spekulative Zugriffsfeld, das mit jedem Übersetzungspuffer-Eintrag der Vielzahl von Übersetzungspuffer-Einträgen assoziiert ist, auf einen nicht-zugegriffenen Wert zurücksetzt.
  14. Vorrichtung nach Anspruch 13, dadurch gekennzeichnet, dass der Begrenzungsbefehl einen Startbefehl für einen kritischen Abschnitt umfasst.
  15. Vorrichtung nach Anspruch 13, dadurch gekennzeichnet, dass der Begrenzungsbefehl einen Ende-Befehl für einen kritischen Abschnitt umfasst.
  16. Vorrichtung nach Anspruch 13, dadurch gekennzeichnet, dass die Decodierlogik weiterhin so konfiguriert ist, dass sie eine atomare Speicherzugriffsoperation decodiert, und die Steuerlogik weiterhin so konfiguriert ist, dass sie in Reaktion darauf, dass auf den Übersetzungspuffer-Eintrag in Reaktion darauf zugegriffen wird, dass die Decodierlogik die atomare Speicherzugriffsoperation decodiert hat, ein spekulatives Zugriffsfeld aktualisiert, das mit einem Übersetzungspuffer-Eintrag der Vielzahl von Übersetzungspuffer-Einträgen assoziiert ist.
  17. Vorrichtung nach Anspruch 16, dadurch gekennzeichnet, dass die Steuerlogik weiterhin so konfiguriert ist, dass sie einen Abbruch des kritischen Abschnitts in Reaktion darauf initiiert, dass ein zweiter Übersetzungspuffer-Eintrag eine nachfolgende physikalische Adresse hält, die mit einer vorhergehenden physikalischen Adresse übereinstimmt, auf die in Reaktion darauf spekulativ zugegriffen wird, dass die Decodierlogik eine zweite atomare Speicheroperation decodiert hat.
  18. Verfahren mit den folgenden Schritten: Ausführen einer transaktionalen Speicheroperation in einer Transaktion, die eine virtuelle Adresse referenziert; Übersetzen der virtuellen Adresse in eine physikalische Adresse in Reaktion auf das Ausführen der transaktionalen Speicheroperation; in Reaktion auf das Übersetzen der virtuellen Adresse in die physikalische Adresse Aktualisieren eines ersten Übersetzungseintrags mit der virtuellen Adresse, die mit der physikalischen Adresse assoziiert ist, und Kennzeichnen des ersten Übersetzungseintrags als transaktional zugegriffen; Ermitteln, ob ein zweiter Übersetzungseintrag, der ebenfalls als transaktional zugegriffen gekennzeichnet ist, mit der physikalischen Adresse übereinstimmt; und Abbrechen der Transaktion in Reaktion darauf, dass ermittelt worden ist, dass der zweite Übersetzungseintrag mit der physikalischen Adresse übereinstimmt.
  19. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Ausführen der transaktionalen Speicheroperation das Ausführen der transaktionalen Speicheroperation in einer Pipeline-Stufe umfasst, die aus einer Gruppe der folgenden Stufen gewählt ist: eine Abrufstufe in dem Fall, dass ein Befehlszeiger die transaktionale Speicheroperation referenziert, eine Decodierstufe, eine Sendestufe, eine Festlegungsstufe, eine Abarbeitungsstufe und eine Retirement-Stufe.
  20. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Übersetzen der virtuellen Adresse in eine physikalische Adresse in Reaktion auf das Ausführen der transaktionalen Speicheroperation das Übersetzen der virtuellen Adresse in die physikalische Adresse unter Verwendung von Seitentabellen umfasst.
  21. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Kennzeichnen des ersten Übersetzungseintrags als transaktional zugegriffen das Kennzeichnen eines ersten spekulativen Zugriffsbits umfasst, das mit dem ersten Übersetzungseintrag assoziiert ist.
  22. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Ermitteln, ob ein zweiter Übersetzungseintrag, der ebenfalls als transaktional zugegriffen gekennzeichnet ist, mit der physikalischen Adresse übereinstimmt, das Ermitteln umfasst, ob eine zweite physikalische Adresse, die in dem zweiten Übersetzungseintrag gehalten wird, mit der physikalischen Adresse übereinstimmt.
  23. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Ermitteln, ob ein zweiter Übersetzungseintrag, der ebenfalls als transaktional zugegriffen gekennzeichnet ist, mit der physikalischen Adresse übereinstimmt, das Ermitteln umfasst, ob eine zweite physikalische Adresse, die in dem zweiten Übersetzungseintrag gehalten wird, auf die gleiche Gruppe wie die physikalische Adresse abgebildet wird.
  24. Verfahren nach Anspruch 18, dadurch gekennzeichnet, dass das Abbrechen der Transaktion in Reaktion darauf, dass ermittelt wird, dass der zweite Übersetzungseintrag mit der physikalischen Adresse übereinstimmt, das Wiederholen eines Speicherzustands und eines Architekturzustands bis zu einem Punkt vor der Transaktion in Reaktion auf das Ermitteln umfasst, dass der zweite Übersetzungseintrag mit der physikalischen Adresse übereinstimmt.
DE201210023574 2011-12-08 2012-12-03 Verfahren, Vorrichtung und System zum Effizienten Verarbeiten von mehreren Abbildungen virtueller Adressen bei der transaktionalen Abarbeitung Withdrawn DE102012023574A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
PCT/US2011/063888 WO2013085518A1 (en) 2011-12-08 2011-12-08 A method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution
USPCT/US11/63888 2011-12-08

Publications (1)

Publication Number Publication Date
DE102012023574A1 true DE102012023574A1 (de) 2013-06-13

Family

ID=48464690

Family Applications (1)

Application Number Title Priority Date Filing Date
DE201210023574 Withdrawn DE102012023574A1 (de) 2011-12-08 2012-12-03 Verfahren, Vorrichtung und System zum Effizienten Verarbeiten von mehreren Abbildungen virtueller Adressen bei der transaktionalen Abarbeitung

Country Status (4)

Country Link
US (1) US10387324B2 (de)
DE (1) DE102012023574A1 (de)
TW (1) TWI494770B (de)
WO (1) WO2013085518A1 (de)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387324B2 (en) 2011-12-08 2019-08-20 Intel Corporation Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution
US9292294B2 (en) 2012-09-27 2016-03-22 Intel Corporation Detection of memory address aliasing and violations of data dependency relationships
US8984254B2 (en) * 2012-09-28 2015-03-17 Freescale Semiconductor, Inc. Techniques for utilizing translation lookaside buffer entry numbers to improve processor performance
WO2014142861A1 (en) * 2013-03-14 2014-09-18 Intel Corporation Memory object reference count management with improved scalability
US9411729B2 (en) * 2014-02-27 2016-08-09 International Business Machines Corporation Salvaging lock elision transactions
US9870209B2 (en) * 2014-03-28 2018-01-16 Intel Corporation Instruction and logic for reducing data cache evictions in an out-of-order processor
US10114752B2 (en) 2014-06-27 2018-10-30 International Business Machines Corporation Detecting cache conflicts by utilizing logical address comparisons in a transactional memory
US20150378904A1 (en) * 2014-06-27 2015-12-31 International Business Machines Corporation Allocating read blocks to a thread in a transaction using user specified logical addresses
US9608863B2 (en) * 2014-10-17 2017-03-28 Cisco Technology, Inc. Address autoconfiguration using bloom filter parameters for unique address computation
US20160179662A1 (en) * 2014-12-23 2016-06-23 David Pardo Keppel Instruction and logic for page table walk change-bits
US9785442B2 (en) 2014-12-24 2017-10-10 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387156B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10942744B2 (en) 2014-12-24 2021-03-09 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387158B2 (en) * 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10061589B2 (en) * 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10061583B2 (en) 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9477516B1 (en) 2015-03-19 2016-10-25 Google Inc. Concurrent in-memory data publication and storage system
GB2539958B (en) * 2015-07-03 2019-09-25 Advanced Risc Mach Ltd Data processing systems
US9940128B2 (en) * 2015-10-06 2018-04-10 International Business Machines Corporation Conditional access with timeout
US10318295B2 (en) 2015-12-22 2019-06-11 Intel Corporation Transaction end plus commit to persistence instructions, processors, methods, and systems
US10152527B1 (en) * 2015-12-28 2018-12-11 EMC IP Holding Company LLC Increment resynchronization in hash-based replication
US10509729B2 (en) * 2016-01-13 2019-12-17 Intel Corporation Address translation for scalable virtualization of input/output devices
US20180004521A1 (en) * 2016-07-01 2018-01-04 Intel Corporation Processors, methods, and systems to identify stores that cause remote transactional execution aborts
GB2554442B (en) * 2016-09-28 2020-11-11 Advanced Risc Mach Ltd Apparatus and method for providing an atomic set of data accesses
US10228981B2 (en) 2017-05-02 2019-03-12 Intel Corporation High-performance input-output devices supporting scalable virtualization
US10635654B2 (en) * 2017-06-12 2020-04-28 Samsung Electronics Co., Ltd. Data journaling for large solid state storage devices with low DRAM/SRAM
US10768915B2 (en) 2018-10-18 2020-09-08 Denso International America, Inc. Systems and methods for selectively instrumenting a program according to performance characteristics
US11301218B2 (en) 2020-07-29 2022-04-12 Bank Of America Corporation Graph-based vectorization for software code optimization references
US11256488B1 (en) 2020-07-29 2022-02-22 Bank Of America Corporation Graph-based vectorization for software code optimizations
TWI777268B (zh) * 2020-10-07 2022-09-11 大陸商星宸科技股份有限公司 虛擬記憶管理方法及處理器
US11361400B1 (en) 2021-05-06 2022-06-14 Arm Limited Full tile primitives in tile-based graphics processing

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4410060B4 (de) * 1993-04-08 2006-02-09 Hewlett-Packard Development Co., L.P., Houston Übersetzungsvorrichtung zum Umsetzen einer virtuellen Speicheradresse in eine physikalische Speicheradresse
US6453387B1 (en) * 1999-10-08 2002-09-17 Advanced Micro Devices, Inc. Fully associative translation lookaside buffer (TLB) including a least recently used (LRU) stack and implementing an LRU replacement strategy
US6493812B1 (en) * 1999-12-17 2002-12-10 Hewlett-Packard Company Apparatus and method for virtual address aliasing and multiple page size support in a computer system having a prevalidated cache
EP1182571B1 (de) * 2000-08-21 2011-01-26 Texas Instruments Incorporated Auf gemeinsamem Bit basierte TLB-Operationen
US6877088B2 (en) * 2001-08-08 2005-04-05 Sun Microsystems, Inc. Methods and apparatus for controlling speculative execution of instructions based on a multiaccess memory condition
US6615337B1 (en) * 2001-08-09 2003-09-02 Advanced Micro Devices, Inc. Method and apparatus for maintaining coherency in a translation lookaside buffer
US7073043B2 (en) * 2003-04-28 2006-07-04 International Business Machines Corporation Multiprocessor system supporting multiple outstanding TLBI operations per partition
US7398359B1 (en) * 2003-04-30 2008-07-08 Silicon Graphics, Inc. System and method for performing memory operations in a computing system
US7685365B2 (en) 2004-09-30 2010-03-23 Intel Corporation Transactional memory execution utilizing virtual memory
US7984248B2 (en) 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US7383415B2 (en) * 2005-09-09 2008-06-03 Sun Microsystems, Inc. Hardware demapping of TLBs shared by multiple threads
US7809903B2 (en) * 2005-12-15 2010-10-05 Intel Corporation Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions
US8683143B2 (en) * 2005-12-30 2014-03-25 Intel Corporation Unbounded transactional memory systems
US20070186056A1 (en) 2006-02-07 2007-08-09 Bratin Saha Hardware acceleration for a software transactional memory system
US8180967B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US7502897B2 (en) 2006-06-28 2009-03-10 Intel Corporation Object based conflict detection in a software transactional memory
US7542977B2 (en) 2006-06-29 2009-06-02 Intel Corporation Transactional memory with automatic object versioning
US8239657B2 (en) 2007-02-07 2012-08-07 Qualcomm Incorporated Address translation method and apparatus
US8117403B2 (en) * 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US8719514B2 (en) * 2007-06-27 2014-05-06 Intel Corporation Software filtering in a transactional memory system
US7516365B2 (en) * 2007-07-27 2009-04-07 Sun Microsystems, Inc. System and method for split hardware transactions
US8250254B2 (en) 2007-07-31 2012-08-21 Intel Corporation Offloading input/output (I/O) virtualization operations to a processor
US9513959B2 (en) * 2007-11-21 2016-12-06 Arm Limited Contention management for a hardware transactional memory
US20090198694A1 (en) * 2008-01-31 2009-08-06 Tessil Thomas Resolving conflicts in a transactional execution model of a multiprocessor system
US8180986B2 (en) * 2008-09-17 2012-05-15 Microsoft Corporation Memory conflict detection via mapping of the physical heap to control access permissions to the memory
US9672019B2 (en) * 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9785462B2 (en) * 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
US8484438B2 (en) * 2009-06-29 2013-07-09 Oracle America, Inc. Hierarchical bloom filters for facilitating concurrency control
US8214598B2 (en) 2009-12-22 2012-07-03 Intel Corporation System, method, and apparatus for a cache flush of a range of pages and TLB invalidation of a range of entries
US10387324B2 (en) 2011-12-08 2019-08-20 Intel Corporation Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution

Also Published As

Publication number Publication date
WO2013085518A1 (en) 2013-06-13
TWI494770B (zh) 2015-08-01
US20130275715A1 (en) 2013-10-17
TW201337585A (zh) 2013-09-16
US10387324B2 (en) 2019-08-20

Similar Documents

Publication Publication Date Title
DE102012023574A1 (de) Verfahren, Vorrichtung und System zum Effizienten Verarbeiten von mehreren Abbildungen virtueller Adressen bei der transaktionalen Abarbeitung
US10210018B2 (en) Optimizing quiescence in a software transactional memory (STM) system
US9052947B2 (en) Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system
US10180903B2 (en) Hybrid hardware and software implementation of transactional memory access
DE112009005006T5 (de) Optimierungen für ein ungebundenes transaktionales Speichersystem (UTM)
US9274855B2 (en) Optimization for safe elimination of weak atomicity overhead
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
KR101394741B1 (ko) 트랜잭션 메모리(tm) 시스템의 기입 및 판독 모니터링 속성
DE202007019502U1 (de) Globaler Überlauf für virtualisierten Transaktionsspeicher
US9569254B2 (en) Automatic checkpointing and partial rollback in software transaction memory
US9785462B2 (en) Registering a user-handler in hardware for transactional memory event handling
US8799582B2 (en) Extending cache coherency protocols to support locally buffered data
US8612950B2 (en) Dynamic optimization for removal of strong atomicity barriers
US20100122073A1 (en) Handling exceptions in software transactional memory systems
US20130097607A1 (en) Method, apparatus, and system for adaptive thread scheduling in transactional memory systems
US20100169580A1 (en) Memory model for hardware attributes within a transactional memory system
US20100169382A1 (en) Metaphysical address space for holding lossy metadata in hardware
DE102007054057A1 (de) Mechanismus zum Detektieren und Vorhersagen eines kritischen Abschnitts zur Hardware-Lock-Elision
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
US20140379996A1 (en) Method, apparatus, and system for transactional speculation control instructions
DE102016006399A1 (de) Hardwarevorrichtungen und verfahren zum durchführen von transaktionaler energieverwaltung
Quislant et al. Insights into the fallback path of best-effort hardware transactional memory systems

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0012000000

Ipc: G06F0012100000

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee