-
VERWANDTE ANMELDUNGEN
-
Diese
US Patentanmeldung ist mit der folgenden US Patentanmeldung verwandt:
BUFFFERING
UNCHECKED STORES FOR FAULT DETECTION IN RMS USING SPECULATIVE MEMORY
SUPPORT, Anmeldung Nummer
10/749,618 , eingereicht
am 30. Dezember 2003.
-
HINTERGRUNDINFORMATIONEN
-
Prozessoren
werden zunehmend für
vorübergehende
Fehler anfällig,
die durch Alpha-Teilchen und
Belastung mit kosmischer Strahlung verursacht werden. Diese Fehler
können
zu Betriebsfehlern führen,
die als "leichte" Fehler bezeichnet
werden, da diese Fehler nicht zu einer dauerhaften Fehlfunktion des
Prozessors führen.
Belastungen mit kosmischen Strahlenpartikeln, wie Neutronen, sind
besonders kritisch, da dem Prozessor ein wirksamer Schutz fehlt. Vorübergehende
Fehler machen derzeit mehr als 90% der Fehler in Vorrichtungen auf
Prozessorbasis aus.
-
Wenn
Transistoren kleiner sind, werden die einzelnen Transistoren für Belastungen
mit kosmischen Strahlenpartikeln weniger anfällig. Sinkende Spannungspegel,
die die verringerte Transistorgröße begleiten
und die entsprechende Transistorvergrößerung führen jedoch dazu, daß Prozessoren
einen exponentialen Anstieg in der gesamten Prozessoranfälligkeit
für Belastungen
mit kosmischen Strahlenpartikeln oder andere Ursachen leichter Fehler
zeigen. Zur Lösung
des Problems erfordert das Erreichen einer bestimmten Fehlerrate
für ein
Multiprozessorsystem eine noch geringere Fehlerrate für die einzelnen Prozessoren.
Infolge dieser Trends werden Fehlererfassungs- und -behebungstechniken,
die gewöhnlich missionskritischen
Anwendungen vorbehalten sind, zunehmend bei anderen Prozessoranwendungen anwendbar.
-
Eine
Silent Data Corruption (SDC) tritt ein, wenn keine Fehler erfaßt werden,
und kann zu korrupten Datenwerten führten, die bestehen bleiben, bis
der Prozessor zurückgestellt
wird. Die SDC-Rate ist die Rate, bei der SDC-Ereignisse eintreten.
Leichte Fehler sind Fehler, die zum Beispiel unter Verwendung einer
Paritätsprüfung erfaßt, aber
nicht korrigiert werden können.
-
Eine
Fehlererfassungsunterstützung
kann die SDC-Rate eines Prozessors verringern, indem der Rechenvorgang
angehalten wird, bevor sich Fehler in den permanenten Speicher fortpflanzen
können.
Parität
zum Beispiel ist ein allgemein bekannter Fehlererfassungsmechanismus,
der eine Silent Date Corruption für Einzelbit-Fehler in Speicherstrukturen verhindert.
Leider kann das Hinzufügen
einer Parität zu
Zwischenspeichern oder einer Logik in Hochleistungsprozessoren die
Zykluszeit und Gesamtleistung allgemein negativ beeinflussen. Folglich
haben Prozessordesigner auf redundante Ausführungsmechanismus zurückgegriffen,
um Fehler in Prozessoren zu erfassen.
-
Gegenwärtige redundante
Ausführungssysteme
verwenden allgemein eine Technik, die als "Lockstepping" bekannt ist, die Prozessorfehler erfaßt, indem
sie identische Kopien desselben Programms auf zwei identischen "lockstepped" (zyklussynchronisierten)
Prozessoren laufen läßt. In jedem Zyklus
werden beiden Prozessoren identische Eingänge zugeleitet und eine Prüfschaltung
vergleicht die Ausgänge.
Bei einer fehlenden Übereinstimmung der
Ausgänge,
zeigt die Prüfschaltung
einen Fehler an und kann eine Behebungssequenz einleiten. Lockstepping
kann das SDC FIT der Prozessoren verringern, indem jeder Fehler
erfaßt
wird, der sich bei der Prüfschaltung
zeigt. Leider verbraucht das Lockstepping Prozessor-Ressourcen,
die sonst zur Verbesserung der Leistung verwendet werden könnten.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Verschiedene
Merkmale der Erfindung gehen aus der folgenden Beschreibung bevorzugter Ausführungsformen
hervor, wie in den beiliegenden Zeichnungen dargestellt, in welchen
sich gleiche Bezugszeichen im Allgemeinen auf dieselben Teile in
allen Zeichnungen beziehen. Die Zeichnungen sind nicht unbedingt
maßstabgetreu,
sondern der Schwerpunkt liegt vielmehr auf der Veranschaulichung
der Prinzipien der Erfindung.
-
1 ist
ein Blockdiagramm einer Ausführungsform
einer redundanten Multithreading-Architektur
mit den redundanten Threads.
-
2 ist
ein Blockdiagramm einer Ausführungsform
einer simultanen und redundanten Threading-Architektur.
-
3 zeigt
minimale und maximale Pufferzeit-Verhältnisse für eine Ausführungsform einer simultanen
und redundanten Multithreading-Architektur.
-
4 ist
ein Flußdiagramm
von Speichersystemerweiterungen zum Managen interepochaler Speicherdatenabhängigkeiten.
-
5 ist
ein Blockdiagramm einer Ausführungsform
externer Speicheraktualisierungen zur Fehlererfassung in einer redundanten
Multithreading-Architektur.
-
AUSFÜHRLICHE BESCHREIBUNG
-
In
der folgenden Beschreibung sind spezifische Einzelheiten zur Erklärung und
nicht zur Einschränkung
dargelegt, wie besondere Strukturen, Architekturen, Schnittstellen,
Techniken usw., um ein umfassendes Verständnis verschiedener Aspekte der
Erfindung zu bieten. Für
den Fachmann ist jedoch offensichtlich, daß angesichts der vorliegenden Offenbarung
die verschiedenen Aspekte der Erfindung in anderen Beispielen ausgeführt werden
können,
die von diesen spezifischen Einzelheiten abweichen. In bestimmten
Fällen
werden Beschreibungen allgemein bekannter Vorrichtungen, Schaltungen
und Methoden unterlassen, damit die Beschreibung der vorliegenden
Erfindung nicht wegen unnötiger
Details undeutlich wird.
-
Replikationssphäre
-
1 ist
ein Blockdiagramm einer Ausführungsform
einer redundanten Multithreading-Architektur.
In einer Multithreading-Architektur können Fehler erfaßt werden,
indem zwei Kopien eines Programms als separate Threads ausgeführt werden. Jeder
Thread ist mit identischen Eingängen
bereitgestellt und die Ausgänge
werden verglichen, so daß festgestellt
werden kann, ob ein Fehler aufgetreten ist. Redundantes Multitheading
kann im Bezug auf ein Konzept be schrieben werden, das hierin als "Replikationssphäre" bezeichnet wird.
Die Replikationssphäre
ist die Grenze einer logisch oder physikalisch redundanten Operation.
-
Komponenten
innerhalb der Replikationssphäre 130 (z.B.
ein Prozessor, der einen voreilenden Thread 110 ausführt, und
ein Prozessor, der einen nacheilenden Thread 120 ausführt) unterliegen einer
redundanten Ausführung.
Im Gegensatz dazu unterliegen Komponenten außerhalb der Replikationssphäre 130 (z.B.
Speicher 150, RAID 160) keiner redundanten Ausführung. Ein
Fehlerschutz wird durch andere Techniken bereitgestellt, zum Beispiel eine
Fehlerkorrekturcode für
Speicher 150 und eine Parität für RAID 160. Andere
Vorrichtungen können außerhalb
der Replikationssphäre 130 liegen und/oder
andere Techniken können
verwendet werden, um einen Fehlerschutz für Vorrichtungen außerhalb
der Replikationssphäre 130 bereitzustellen.
-
Daten,
die in die Replikationssphäre 130 gelangen,
treten durch eine Eingangs-Replikationseinrichtung 170 ein,
die Daten repliziert und eine Kopie der Daten zu einem voreilenden
Thread 110 und einem nacheilenden Thread 120 sendet.
Ebenso treten Daten, die die Replikationssphäre 130 verlassen, durch
eine Ausgangsvergleichseinrichtung 180 aus, die die Daten
vergleicht und bestimmt, ob ein Fehler aufgetreten ist. Bei einer Änderung
der Grenze der Replikationssphäre 130 werden
Leistung und Menge an Hardware gegenseitig aufgewogen. Zum Beispiel würde ein
replizierender Speicher 150 einen schnelleren Speicherzugriff
ermöglichen,
indem ein Ausgangsvergleich von Speicheranweisungen vermieden wird,
aber gleichzeitig die Systemkosten durch eine Verdopplung der Speichermenge
in dem System erhöhen.
-
Im
Allgemeinen gibt es zwei Replikationssphären, die als "SoR-Register" und SoR-Cache" bezeichnet werden
können.
In der SoR-Registerarchitektur befinden sich die Registerdatei und
Caches außerhalb
der Replikationssphäre.
Ausgänge
von der SoR-Register-Replikationssphäre enthalten
Registereinträge
und Speicheradresse und Daten, die auf Fehler verglichen werden.
In der SoR-Cache-Architektur befinden sich die Anweisungs- und Daten-Cache-Speicher außerhalb
der Replikationssphäre,
so daß alle
Speicheradressen und Daten, nicht aber Registereinträge, auf
Fehler verglichen werden.
-
Die
SoR-Cache-Architektur hat den Vorteil, daß nur Speicherungen (und möglicherweise
eine begrenzte Anzahl anderer gewählter Anweisungen) auf Fehler
verglichen werden, wodurch die Prüfschaltung-Bandbreite verringert
und die Leistung erhöht wird,
indem die Speicheropera tionen nicht verzögert werden. Im Gegensatz dazu
erfordert die SoR-Registerarchitektur einen Vergleich der meisten
Anweisungen auf Fehler, was eine größere Prüfschaltung-Bandbreite erfordert
und Speicheroperationen verzögern
kann, bis die Prüfschaltung
bestimmt, daß alle
Anweisungen vor dem Speichervorgang fehlerfrei sind. Der SoR-Cache
kann dasselbe Abdekkungsmaß für vorübergehende
Fehler bereitstellen wie das SoR-Register, da Fehler, die sich nicht
als Fehler an der Grenze der Replikationssphäre manifestieren, den Systemzustand
nicht korrumpieren, und daher effektiv maskiert werden.
-
Zur
Bereitstellung einer Fehlerbehebung sollte jedes Anweisungsergebnis
verglichen werden, um einen Prüfpunkt
bereitzustellen, der jeder Anweisung entspricht. Daher wird die
SoR-Register-Architektur hier ausführlicher beschrieben.
-
Überblick über die simultane und redundante
Threading-Architektur
-
2 ist
ein Blockdiagramm einer Ausführungsform
einer simultanen und redundanten Threading-Architektur. Die Architektur
von 2 ist eine SoR-Register-Architektur, in der der
Ausgang, oder das Ergebnis, von jeder Anweisung zur Fehlererfassung
verglichen wird.
-
Ein
voreilender Thread 210 und ein nacheilender Thread 210 stellen
korrespondierende Threads dar, die mit einer Zeitdifferenz ausgeführt werden,
so daß der
voreilende Thread 210 Anweisungen ausführt, bevor der nacheilende
Thread 220 dieselbe Anweisung ausführt. In einer Ausführungsform
ist der voreilende Thread 210 mit dem nacheilenden Thread 220 identisch.
Als Alternative können der
voreilende Thread 210 und/oder der nacheilende Thread 200 eine
Steuerung oder andere Informationen enthalten, die nicht in dem
Thread-Gegenstück enthalten
sind. Der voreilende Thread 210 und der nacheilende Thread 220 können von
demselben Prozessor ausgeführt
werden, oder der voreilende Thread 120 und der nacheilende
Thread 220 können von
verschiedenen Prozessoren ausgeführt
werden.
-
Anweisungsadressen
werden vom voreilenden Thread 210 über eine Anweisungsreplikationsschlange 230 zum
nacheilenden Thread 220 geleitet. Wenn Anweisungen durch
die Anweisungsreplikationsschlange 230 geleitet werden,
ist eine Kontrolle der Zeitdifferenz oder der "Pufferzeit" ("slack") zwischen der Ausführung einer
Anweisung im voreilenden Thread 210 und der Ausführung einer
Anweisung im nacheilenden Thread 220 möglich.
-
Eingangsdaten
werden durch die Quellenregisterwertschlange 240 vom voreilenden
Thread 210 zum nacheilenden Thread 220 geleitet.
In einer Ausführungsform
repliziert die Quellenregisterwertschlange 240 Eingangsdaten
sowohl für
den voreilenden Thread 210 wie auch für den nacheilenden Thread 220.
Ausgangsdaten werden durch eine Zielortregisterwertschlange 250 vom
voreilenden Thread 220 zum nacheilenden Thread 210 geleitet. In
einer Ausführungsform
vergleicht die Zielortregisterwertschlange 250 Ausgangsdaten
sowohl vom voreilenden Thread 210 wie auch vom nacheilenden Thread 220.
-
In
einer Ausführungsform
läuft der
voreilende Thread 210 Hunderte Anweisung vor dem nacheilenden
Thread 220. Es kann jede Anzahl von "Pufferzeit"-Anweisungen verwendet werden. In einer
Ausführungsform
wird die Pufferzeit durch eine Verlangsamung/oder Verzögerung des
Anweisungsabrufs des nacheilenden Threads 220 verursacht.
In einer anderen Ausführungsform
kann die Pufferzeit durch eine Anweisungsreplikationsschlange 230 oder
einen Anweisungsreplikationsmechanismus verursacht werden, wenn
eine Anweisungsreplikation nicht von der Anweisungsreplikationsschlange 230 ausgeführt wird.
-
Weitere
Einzelheiten für
Techniken, die eine Pufferzeit in einer simultanen und redundanten Threading-Architektur
erzeugen, finden sich in "Detailed Design and Evaluation of Redundant
Multithreading Alternatives",
von Shubhendu S. Mukherjee, Michael Kontz und Steven K. Reinhardt,
in Proc. 29th Int'l
Symp. on Computer Architecture, Mai 2002, und in "Transient Fault Detection
via Simultaneous Multithreading",
von Stefen K. Reinhardt und Shubhendu S. Mukherjee, in Proc. 27th
Int'l Symp. on Computer
Architecture, Juni 2000.
-
3 zeigt
minimale und maximale Pufferzeit-Verhältnisse für eine Ausführungsform einer simultanen
und redundanten Threading-Architektur. Die Ausführungsform von 3 ist
eine SoR-Register-Architektur, wie zuvor beschrieben. Die minimale Pufferzeit
ist die Gesamtlatenzzeit eines Cache-Miss, die Latenzzeit von der
Ausführung
bis zur Rückordnung,
und der Latenzzeit, die zum Befördern
der Lastadresse und des Wertes zu dem nacheilenden Thread verstreicht.
Wenn der voreilende Thread ein Cache-Miss erführt, und die entsprechende
Last vom voreilenden Thread vor der Minimalpufferzeit beim Ausführungspunkt
eintrifft, wird der voreilende Thread verzögert.
-
Ebenso
ist die maximale Pufferzeit die Latenzzeit von der Rückordnung
bis zur Fehlererfassung im voreilenden Thread. Im Allgemeinen gibt
ein gewisses Puffermaß,
so daß rückgeordnete
Anweisungen von dem voreilenden Thread nach der Rückordnung
in dem Prozessor verbleiben können.
Dies definiert die maximale Pufferzeit zwischen dem voreilenden
und nacheilenden Thread. Wenn sich der Pufferspeicher füllt, wird
der voreilende Thread verzögert,
so daß der
nacheilende Thread zusätzliche
Anweisungen vom Pufferspeicher aufnehmen kann. Wenn daher die Pufferzeit
zwischen den beiden Threads größer als
die maximale Pufferzeit ist, wird die gesamte Leistung schlechter.
-
Spekulative Speicherunterstützung
-
In
einem spekulativen Multithreading-System ist ein sequentielles Programm
in logisch sequentielle Segmente geteilt, die als Epochen oder Tasks
bezeichnet werden. Mehrere Epochen werden parallel ausgeführt, entweder
auf separaten Prozessorkernen oder als separate Threads in einem SMT-Prozessor.
Zu jedem bestimmten Zeitpunkt entspricht nur die älteste Epoche
der Ausführung
des ursprünglichen
sequentiellen Programms. Die Ausführung aller anderer Epochen
beruht auf einer Spekulation über
Potentialsteuerung und Datenkonflikte. Im Falle einer interepochalen
Fehlspekulation werden die fehlspekulierten Epochen verworfen. Wenn
eine Epoche eine Ausführung
beendet und zur ältesten Epoche
wird, werden ihre Ergebnisse in dem sequentiellen Architekturzustand
der Berechnung festgehalten.
-
In
einer Ausführungsform
eines spekulativen Multithreading-Systems kann der Kompiler den
Code auf heuristischer Basis statisch in Epochen teilen. Zum Beispiel
werden Schleifenkörper
häufig
zur Bildung von Epochen verwendet. In diesem Fall würden mehrfache
Iterationen der Schleife mehrfache Epochen zur Ausführungszeit
erzeugen, die parallel ausgeführt
werden.
-
Das
System muß interepochale
Datenkonflikte durchsetzen, um die Semantik des sequentiellen Programms über diese
parallele Ausführung
aufrechtzuerhalten. In einer Ausführungsform ist der Kompiler
für die
Epochenbildung verantwortlich, so daß er eine interepochale Kommunikation
auf Registerbasis explizit managen kann (möglicherweise mit Hardware-Unterstützung).
Datenkonflikte auf Speicherbasis sind (im Allgemeinen) statisch
nicht vorhersagbar, und müssen
somit zur Ausführungszeit
bearbeitet werden. Speichersystemerweiterungen zum Managen interepochaler
Speicherdatenabhängigkeiten,
zur Erfüllung
dieser, wenn möglich, und
sonst zum Erfassen von Verletzungen und Verwerfen von Epochen, sind
eine Schlüsselkomponente
jedes spekulativen Multithreading-Systems.
-
4 zeigt
Speichersystemerweiterungen zum Managen interepochaler Speicherdatenabhängigkeiten.
Das Erfassen von Verletzungen und Verwerfen von Epochen ist ein
wesentliches Merkmal eines spekulativen Multithreading-Systems.
In einer Ausführungsform
muß eine
Last den Wert einer Speicherung zu derselben Adresse zurückleiten,
die in einer logischen sequentiellen Ausführung eines Programms unmittelbar
zuvor liegt, Schritt 400. Zum Beispiel muß das System
Folgendes in der Reihenfolge der Priorität zurückleiten. Zuerst den Wert von
der jüngsten
vorangehenden Speicherung innerhalb derselben Epoche, falls vorhanden.
Zweitens den Wert von der letzten Speicherung in der am nächsten liegenden,
logisch vorangehenden Epoche, falls vorhanden. Schließlich den
Wert von dem festgehaltenen sequentiellen Speicherzustand. Ferner
darf die Last nicht durch logisch nachfolgende Speicherungen beeinträchtigt werden,
die bereits ausgeführt wurden.
Hier wird angenommen, daß der
Prozessor garantiert, daß Speicherreferenzen
scheinbar in einer Epoche sequentiell arbeiten, und somit alle logisch
nachfolgenden Speicherungen zu logisch nachfolgenden Epochen gehören.
-
Anschließend muß ein Speicher
erfassen, ob logisch nachfolgende Lasten bereits ausgeführt sind, 410.
Wenn dies zutrifft, verletzen sie die Datenabhängigkeit. Dann muß jede Epoche,
die eine solche Last enthält,
und möglicherweise
auch jede spätere Epoche,
verworfen werden. Eine Commit-Operation nimmt den Satz exponierter
Speicherungen, der während
einer Epoche ausgeführt
wurde, und wendet diesen atomar bei dem festgehaltenen sequentiellen
Speicherzustand an, 420. Eine exponierte Speicherung ist
die letzte Speicherung an einer bestimmten Stelle innerhalb einer
Epoche. Nicht exponierte Speicherungen, d.h., jene, deren Werte
innerhalb derselben Epoche überschrieben
werden, sind außerhalb
der Epoche, in der sie arbeiten, nicht erkennbar. Schließlich nimmt
eine Abort-Operation den Satz von Speicherungen, der während einer
Epoche ausgeführt
wurde, und verwirft diesen, 430.
-
5 ist
ein Blockdiagramm zur Isolierung redundanter Ausführungen
externer Speicheraktualisierungen zur Fehlererfassung in redundanten
Multithreading-Systemen unter Verwendung einer spekulativen Speicherunterstützung. Die
Isolierung von Ausführungen
externer Speicheraktualisierungen bietet eine präzise Replikation von Lasteingängen.
-
In
dieser Ausführungsform
führen
der voreilende Thread 510 und der nacheilende Thread 520 Epochen
parallel aus. Eine Anweisungsreplikationsschlange 530 sendet
die Epoche vom voreilenden Thread 510 zum nacheilenden
Thread 520. Sowohl der voreilende Thread 510 als
auch der nacheilende Thread 520 haben eine Replikationssphäre 500.
-
Individuelle
Ausführungen
einer bestimmten Epoche sind als "Epocheninstanz" bekannt. Die beiden Epocheninstanzen
werden von dem voreilenden Thread 510 und dem nacheilenden
Thread 520 des RMT-Systems parallel ausgeführt. Sobald
sie ausgeführt
sind, werden die Speicherungen zu einem Speichersystem 540 gesendet.
Speichermodifizierungen von externen Einrichtungen, die Stellen
modifizieren können,
auf die bereits während
der laufenden Epoche zugegriffen wurde, werden nicht angewendet. Vielmehr
werden sie in den Speicher 540 gestellt. Da sie in den
Speicher gestellt werden, haben alle Stellen, die von dem voreilenden
Thread während
der Epoche gelesen werden, denselben Wert, wenn die entsprechende
Last des nacheilenden Threads auftritt. Die Speicherungen werden
in dem Speichersystem als spekulative Speicherungen gehalten, wobei die
zuvor beschriebene spekulative Speicherunterstützung verwendet wird. Sobald
beide Instanzen der Epoche vollendet sind, werden die exponierten
Speicherungen verglichen, 550. Wenn die verglichenen Speicherungen übereinstimmen,
wird ein einziger Satz exponierter Speicherungen im Architektur-Speicherzustand
festgehalten, 560.
-
In
dieser Ausführungsform
ist, wie zuvor beschrieben, der erfaßte Zustand ein externer Schreibvorgang
an einer Stelle, die in einer gegenwärtigen Ausführungsepoche gelesen wurde.
In spekulativen Speichersystemen würde ein Eintreten dieser Bedingung
eine inkorrekte Spekulation anzeigen, und dazu führen, daß die gegenwärtige Ausführungsepoche verworfen
wird. Das Verwerfen beider Instanzen der gegenwärtigen Epoche in einem RMT-System
würde ebenso
eine divergente Ausführung
verhindern, und eine adäquate
Lösung
darstellen, solange ein Fortschreiten garantiert werden kann. In
einem RMT-System mit einem Relaxed Memory Consistency Modell muß dieses
Ereignis jedoch nicht zu einem Verwerfen führen. Wenn der vorhergehende
Wert der extern geschriebenen Stelle bis zum Ende der Epoche beibehalten
werden kann, und zu folgenden Lasten innerhalb beider Epocheninstanzen
geleitet werden kann, werden beide Instanzen entlang demselben Ausführungspfad
fortgesetzt. Der externe Schreibvorgang kann für die lokalen Threads bei Beendigung
der laufenden Epoche sichtbar gemacht werden, 570.
-
Der
Detektionsmechanismus für
einen konfliktbereitenden Zugriff eines spekulativen Speichersystems
kann einen Supersatz der Ereignisse identifizieren, die eine divergente
Ausführung
in einem RMT-System verursachen könnten. Insbesondere können drei
verschiedene Situationen eintreten, in welchen ein externer Schreibvorgang
an einer Stelle in einem Block auftritt, die bereits lokal während der laufenden
Epoche gelesen wurde, von welchen alle von dem spekulativen Speichersystem
mit einem Flag versehen worden wären.
-
In
der ersten Situation unterscheidet sich die extern beschriebene
Stelle, während
sie sich in demselben Cache-Block befindet, von der oder den Stellen,
die von dem örtlichen
Prozessor gelesen werden. In diesem Fall zeigt das spekulative Speichersystem
einen "falschen
Konflikt". Diese
Situation kann vermieden werden, indem zusätzliche Zustandsbits verwendet
werden, um präzise
anzugeben, auf welche Worte innerhalb des Blocks zugegriffen wurde.
-
In
einer zweiten Situation erfolgt der externe Schreibvorgang, sobald
sowohl der voreilende wie auch der nacheilende Thread ihre korrespondierenden
Zugriffe beendet haben (aber vor dem Ende der Epoche). Die zwei
redundanten Threads haben bereits denselben Wert erfaßt, so daß es zu
keiner Divergenz kommt.
-
In
einer dritten Situation erfolgt der externe Schreibvorgang, sobald
ein Thread seinen Zugriff beendet, aber bevor der andere Thread
seinen korrespondierenden Zugriff beendet hat. Nur in diesem Fall kann
das Anwenden des externen Schreibvorgangs zum Zeitpunkt seines Entreffens
zu einer divergenten Ausführung
führen.
-
Wenn
erfaßte
Zugriffskonflikte ein Verwerfen der laufenden Epoche verursachen,
kann in vorteilhafter Weise die Unterscheidung der ersten zwei Fälle von
dem dritten lohnend sein, um ein unnötiges Verwerfen zu vermeiden.
Wenn konfliktbereitende externe Schreibvorgänge nur bis zu einer Epochengrenze
aufgeschoben werden, sollte der Mehraufwand für das Anwenden dieser Politik
bei allen Fällen minimal
sein.
-
Ein
weiterer Vorteil der spekulativen Speichermethode im Bezug auf das
ursprüngliche LVQ-Design
ist, daß auf
das Speichersystem zweimal zugegriffen wird, wodurch der Cache-Zugriffspfad in die
Replikationssphäre
gebracht und die RMT Fehlerabdeckung erweitert wird. Dieser Vorteil
geht jedoch auf Kosten einer Erhöhung
der Speichersystem-Bandbreitenanforderungen.
-
Zusätzlich gruppiert
die gegenwärtige
spekulative Speichermethode alle Lasten gemeinsam in einer Epoche.
Da externe Invalidationen dazu gezwungen werden, nur zwischen Epochen
wirksam zu werden, wird garantiert, daß beide Instanzen jeder Last innerhalb
der vorangehenden Epoche beendet sind, und keine Instanz einer Last
innerhalb der nachfolgenden Epoche eingetreten ist.
-
In
der folgenden Beschreibung sind spezifische Einzelheiten zur Erklärung und
nicht Einschränkung
dargelegt, wie besondere Strukturen, Architekturen, Schnittstellen,
Techniken usw., um ein umfassendes Verständnis der verschiedenen Aspekte
der Erfindung zu ermöglichen.
Für den
Fachmann ist jedoch angesichts der vorliegenden Offenbarung offensichtlich,
daß die
verschiedenen Aspekte der Erfindung in anderen Beispielen ausgeführt werden
können,
die von diesen spezifischen Details abzuweichen. In gewissen Fällen fehlen
Beschreibungen allgemein bekannter Vorrichtungen, Schaltungen und Verfahren,
um die Beschreibung der vorliegenden Erfindung nicht wegen unnötiger Details
undeutlich zu machen.
-
Zusammenfassung
-
Es
wird eine Multithreading-Architektur zum Managen externem Speicheraktualisierungen
zur Fehlererfassung in redundanten Multithreading-Systemen unter
Verwendung einer spekulativen Speicherunterstützung offenbart. Insbesondere
stellt eine Methode eine Eingangsreplikation von Lastwerten an einem
SRT-Prozessor unter Verwendung einer spekulativen Speicherunterstützung zur
Isolierung redundanter Threads aus externen Aktualisierungen bereit.
Diese Methode macht daher für
zweckbestimmte Strukturen die Bereitstellung einer Eingangsreplikation
unnötig.