-
ALLGEMEINER
STAND DER TECHNIK
-
Erfindungsgebiet
-
Die
Erfindung bezieht sich auf Prozessoren und insbesondere auf den
Einsatz von Monitor-Memory-Wait zur Überwachung einer Sperre für einen oder
mehrere auf die Sperre wartenden Prozessoren, bis die Sperre verfügbar ist.
-
Beschreibung
der einschlägigen
Technik
-
Ein
Hyperthreaded- oder Multithreaded-Prozessor ist typisch fähig, gleichzeitig
mehrere Anweisungsfolgen zu verarbeiten. Ein primärer Motivierungsfaktor,
der die Ausführung
mehrerer Anweisungsströme
innerhalb eines einzigen Prozessors treibt, ist die resultierende
Verbesserung in der Prozessornutzung. Hyperthreaded-Prozessoren
erlauben mehreren Anweisungsströmen
die gleichzeitige Ausführung
in verschiedenen Ausführungsressourcen,
um diese Ressourcen besser nutzen zu können. Des weiteren können Hyperthreaded-Prozessoren für Programme
benutzt werden, die hohe Latenzverzögerungen antreffen oder die
oft auf das Eintreten von Ereignissen warten.
-
Hyperthreaded-Prozessoren
weisen typisch ein einziges Ressourcen-Setup auf, welches von allen
Threads oder logischen Prozessoren (Prozessoren) gemeinsam benutzt
wird. Ein Mangel an hinreichenden Ressourcen kann zu signifikanten
Streitigkeiten und Konkurrenz zwischen Prozessoren führen, besonders
dann, wenn ein oder mehrere Prozessoren darauf warten, daß eine Sperre
verfügbar
wird. Vorgeschlagen wurden mehrere Techniken, um Programmablauf-Ineffizienz
und andere Ressourcen-verbrauchende Verzögerungen zu verbessern, die
den Streit um eine Sperre zwischen mehreren Prozessoren betreffen.
Zum Beispiel wird in einem konventionellen Spinwait-Sperrensystem
eine Warteschlange verwendet, um den auf die Sperre wartenden Prozessor
auf die Warteliste zu setzen, wo er wartet, bis die Sperre verfügbar ist.
Während
dieses Wartens greift der Prozessor jedoch fortlaufend auf den Speicherort
der Sperre zu und verursacht Streit um diesen Speichort, Ressourcen-Engpässe, sowie eine
Verschwendung von Speicher-Bandbreite, Berechnungsbandbreite, microarchitektonischen
Ressourcen und Strom. Derartige mit Warten beschäftigten Prozessoren können eine
nachteilige Auswirkung auf die Leistung anderer Prozessoren im Pakt
haben.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
In
den beigefügten
Ansprüchen
sind die besonderen Merkmale der vorliegenden Ansprüche aufgeführt. Die
Ausführungsformen
der vorliegenden Erfindung, zusammen mit ihren Vorteilen, erklären sich
am besten mit Bezug auf die folgende ausführliche Beschreibung im Zusammenhang
mit den beiliegenden Zeichnungen, in denen
-
1 ein
Blockdiagramm ist, das eine Ausführungsform
eines Hyperthreaded-Prozessors
mit einem Speicherzugriffsmonitor darstellt;
-
2 ein
Flußdiagramm
ist, das eine Ausführungsform
einer Betriebsweise eines Hyperthreaded-Prozessors darstellt;
-
3 ein
Blockdiagramm ist, das eine Ausführungsform
einer Betriebsweise eines Hyperthreaded-Prozessors darstellt;
-
4 ein
Blockdiagramm ist, das eine Ausführungsform
eines Verfahrens zum Partitionieren, zur gemeinsamen Nutzung und
zum Duplizieren von Ressourcen darstellt;
-
5 ein
Flußdiagramm
ist, das eine Ausführungsform
eines Verfahrens zum Suspendieren und Neustarten der Ausführung eines
Threads darstellt;
-
6 ein
Flußdiagramm
ist, das eine Ausführungsform
eines Verfahrens zum Aktivieren und Betreiben einer Überwachungslogik
darstellt;
-
7 ein
Flußdiagramm
ist, das eine Ausführungsform
eines Verfahrens zum Überwachen von
Vorgängen
darstellt;
-
8 ein
Flußdiagramm
ist, das eine Ausführungsform
eines Verfahrens zum Erwerb einer Sperre und zur Überwachung
der Sperre mit Monitor-Memory-Wait darstellt;
-
9 ein
Flußdiagramm
ist, das eine Ausführungsform
eines Verfahrens zur Freigabe einer Sperre und zur Überwachung
der Sperre mit Monitor-Memory-Wait darstellt;
-
10 ein
Blockdiagramm ist, das eine Ausführungsform
eines Systems darstellt; und
-
11 ein
Blockdiagramm ist, das eine Ausführungsform
verschiedener Design-Darstellungen oder
Formate zur Simulation, Emulation und Fabrikation eines Designs
veranschaulicht.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
Beschrieben
wird ein Verfahren und eine Vorrichtung zur Überwachung einer Sperre für einen oder
mehrere Prozessoren, die auf eine Sperre warten. Allgemein gesagt,
stellen die Ausführungsformen
der vorliegenden Erfindung Monitor-Memory-MWait zur Überwachung
einer Sperre für
einen oder mehrere Prozessoren bereit, die darauf warten, daß die Sperre
verfügbar
wird.
-
Es
wird ein System, eine Vorrichtung und ein Verfahren zum Stillegen
(Versetzen in einen Ruhemodus) eines Prozessors bereitgestellt,
um eine Sperre zu erwerben, um die sich noch andere Prozessoren
bewerben, bis ein Monitor-Ereignis eintritt, durch welches die Sperre
für den
Prozessor verfügbar
wird. Anders ausgedrückt
kann der Prozessor, obwohl er darauf wartet, daß die Sperre verfügbar wird,
während
seines Aufenthalts in einer Warteschlange „schlafen". Gemäß einer Ausführungsform kann
der stillgelegte Prozessor nach Wahl seine Ressourcen aufgeben und
die aufgegebenen Ressourcen anderen Prozessoren zu ihrer Benutzung
zur Verfügung
stellen. Gemäß einer
Ausführungsform kann
der auf die Sperre wartende Prozessor ein logischer Prozessor eines
Hyperthreaded-Prozessors sein. Ein typischer Hyperthreaded-Prozessor kann mehrere
Threads oder logische Prozessoren, die sich die gleiche Ressource
teilen, beinhalten.
-
Gemäß einer
Ausführungsform
kann Monitor-Memory-Wait (Monitor-Mwait) dazu benutzt werden, die
umstrittene Sperre zu überwachen
und den Prozessor stillzulegen, bis beispielsweise die Sperre verfügbar wird.
Die umstrittene Sperre kann eine Sperre sein, auf die mehrere Prozessoren
warten, oder die sie zu erwerben versuchen. Gemäß einer Ausführungsform
kann ein dem Prozessor entsprechender Knoten oder ein Warteschlangenelement (Knoten)
erzeugt werden. Gemäß einer
Ausführungsform
kann der Knoten initialisiert, mit der umstrittenen Sperre verknüpft und
unter Einsatz von Monitor-Mwait überwacht
werden. Das Überwachen
des Knotens kann das Überwachen
der Sperre durch beispielsweise Überwachen
der Sperrenadresse, die als Überwachungsadresse
bezeichnet werden kann, beinhalten.
-
Gemäß einer
Ausführungsform
können
ein oder mehrere Ereignisse, oder eine bestimmte Zeitperiode, als Überwachungsereignisse
bezeichnet werden, und beim Eintreten eines Überwachungsereignisses kann
das Überwachen
des Knotens beendet und der Prozessor geweckt werden. Zum Beispiel
kann der Anspruch des nächsten
Prozessors in der Warteschlange auf die Sperre und die Verfügbarkeit
der Sperre als Überwachungsereignis
bezeichnet werden. Anders ausgedrückt kann der Prozessor, wenn
er der nächste
(oder erste) Prozessor in der Reihe ist, der auf den Empfang der
umstrittenen Sperre wartet, und die Sperre verfügbar wird, die Sperre beanspruchen
und außerdem
einige oder alle der früher
aufgegebenen Ressourcen zurückverlangen.
Gemäß einer
Ausführungsform
kann die umstrittene Sperre verfügbar
werden, wenn sie von einem anderen Prozessor, der die Sperre besitzt,
freigegeben wird.
-
Gemäß einer
Ausführungsform
kann Monitor-Mwait in einem einzigen Thread oder Prozessor implementiert
werden, während
anderen Prozessoren die Benutzung von Verarbeitungsressourcen erlaubt
wird. Zum Beispiel kann gemäß einer
Ausführungsform
eine Überwachung
eingerichtet werden, derart, daß ein
Prozessor so lange schlafen kann, bis ein bestimmter Speicherzugriff,
wie zum Beispiel das Schreiben auf einen angegebenen Speicherort,
eintritt. Bei Eintreten eines bestimmten Ereignisses kann ein Prozessor,
ohne Prozessorressourcen-verschwendende Routinen auszuführen, geweckt
werden. Gemäß einer
Ausführungsform
können
Partitionen, die früher
dem jetzt schlafenden Prozessor zugeordnet waren, aufgegeben werden,
während
der Prozessor noch schläft.
Diese und/oder andere Ausführungsformen
der vorliegenden Erfindung führen zu
einer relativen Verbesserung des Maschinengesamtdurchsatzes.
-
In
der folgenden Beschreibung werden zahlreiche spezifischen Details
wie Logikimplementierung, Opcodes, Ressourcenpartitionierung, gemeinsame
Ressourcennutzung und Ressourcenduplizierungs-Implementierungen,
Typen und Wechselbeziehungen von Systemkomponenten sowie Partitionierungs-/Integrierungswahlen
aufgeführt,
um ein gründlicheres
Verständnis
verschiedener Ausführungsformen
der vorliegenden Erfindung zu vermitteln. Es versteht sich jedoch,
daß ein
Fachmann aufgrund der bereitgestellten Offenbarung die Ausführungsformen
der vorliegenden Erfindung auch ohne diese spezifischen Details
praktizieren kann. In anderen Fällen
wurde auf die ausführliche
Darstellung von Steuerungsstrukturen, Gate-Level-Schaltungen und vollständigen Software-Anweisungsfolgen
verzichtet, um ein möglichst
klares Bild der Erfindung zu vermitteln. Ein Fachmann wird anhand
der enthaltenen Beschreibungen in der Lage sein, die entsprechende Funktionalität ohne übermäßiges Experimentieren
zu implementieren.
-
Im
folgenden sollen verschiedene Schritte der erfindungsgemäßen Ausführungsformen
beschrieben werden. Die verschiedenen Schritte der Ausführungsformen
können
von Hardware-Komponenten
durchgeführt
werden oder können
in maschinenausführbare
Anweisungen aufgenommen werden, die nach ihrer Einprogrammierung
in einen Allzweck- oder Spezialzweckcomputer oder in eine Maschine
oder in Logikschaltungen dann die Ausführung der verschiedenen Schritte
bewirken können. Die
verschiedenen Schritte der Ausführungsformen können aber
auch von einer Hardware- und Software-Kombination durchgeführt werden.
-
Verschiedene
erfindungsgemäße Ausführungsformen
können
als Computerprogrammprodukt bereitgestellt werden, wozu ein maschinenlesbares Medium
mit darin gespeicherten Anweisungen gehören kann, die zum Programmieren
eines Computers (oder anderer elektronischer Geräte) verwendet werden können, um
ein Verfahren entsprechend den verschiedenen erfindungsgemäßen Ausführungsformen durchzuführen. Verwendbar
als maschinenlesbares Medium, aber nicht darauf beschränkt, sind
Floppies, optische Platten, DC-ROMs,
magneto-optische Disks, ROMs, RAMs, EPROMs, EEPROMs, magnetische
oder optische Karten, Flash-Speicher, oder irgendein anderer Typ
eines zum Speichern von elektronischen Anweisungen geeigneten Mediums/maschinenlesbaren
Mediums. Darüber
hinaus können verschiedene
erfindungsgemäße Ausführungsformen
auch als Computerprogrammprodukt heruntergeladen werden, wobei das
Programm von einem entfernten Computer auf einen anfordernden Computer
mittels Datensignalen übertragen
werden kann, die über
eine Kommunikations-Link (zum Beispiel eine Modem- oder Netzwerkverbindung)
in eine Trägerwelle
oder ein anderes Fortpflanzungsmedium aufgenommen wurden.
-
1 ist
ein Blockdiagramm einer Ausführungsform
eines Hyperthreaded-Prozessors 100 mit einem Speicherzugriffsmonitor 110.
Gemäß einer Ausführungsform
kann ein Prozessor 100 als einzelne integrierte Schaltung
ausgebildet sein. Gemäß einer
anderen Ausführungsform
können
mehrere integrierte Schaltungen zusammen einen Prozessor 100 bilden,
und gemäß einer
wiederum anderen Ausführungsform
können
Hardware- und Software-Routinen zusammen den Prozessor 100 bilden.
Wie dargestellt, kann ein Bus/Speichercontroller 120 Anweisungen
zur Ausführung
eines Front-End 130 bereitstellen. Das Front-End 130 kann
den Abruf von Anweisungen verschiedener Threads entsprechend Anweisungsanzeigern 170 dirigieren.
Die Anweisungsanzeigerlogik kann repliziert werden, um mehrere Threads
zu unterstützen.
-
Gemäß einer
Ausführungsform
kann das Front-End 130 den partitionierbaren Thread/Prozessor-Ressourcen 140 Anweisungen
zur weiteren Verarbeitung zuführen.
Die partitionierbaren Thread/Prozessor-Ressourcen 140 können logisch
getrennte Partitionen beinhalten, die bestimmten Threads zugeordnet
sind, wenn mehrere Threads innerhalb des Prozessors 100 aktiv
sind. Gemäß einer
Ausführungsform
kann jede separate Partition nur Anweisungen von dem Thread enthalten,
dem dieser Abschnitt zugeordnet ist. Die partitionierbaren Thread/Prozessor-Ressourcen 140 können zum
Beispiel Anweisungswarteschlangen beinhalten. Im Einzel-Thread-Modus
können
die partitionierbaren Thread/Prozessor-Ressourcen 140 zu
einer einzigen großen
Partition, die dem einen Thread zugeordnet ist, zusammengefaßt werden.
-
Gemäß einer
Ausführungsform
kann der Prozessor 100 auch einen replizierten Zustand 180 enthalten.
Der replizierte Zustand 180 kann Zustandsvariablen enthalten,
die ausreichend sind, um den Kontext für einen logischen Prozessor
aufrechtzuerhalten. Mit dem replizierten Zustand 180 können mehrere
Threads konkurrenzlos für
zustandsvariable Speicherung ausgeführt werden. Zudem kann für jeden
Thread Registerzuweisungslogik repliziert werden. Die replizierte
zustandsbezogene Logik kann die entsprechenden Ressourcenpartitionen
benutzen, um eingehende Anweisungen auf die Ausführung vorzubereiten.
-
Gemäß einer
Ausführungsform
können
die partitionierbaren Thread/Prozessor-Ressourcen 140 Anweisungen
an die gemeinsam benutzten Ressourcen 150 weitergeben.
Die gemeinsam benutzten Ressourcen 150 können ungeachtet
ihres Ursprungs auf die Anweisungen reagieren. Zum Beispiel können Scheduler-
und Ausführungseinheiten
gemeinsam benutzte Ressourcen sein, die sich der Threads nicht bewußt sind.
Die partitionierbaren Ressourcen 140 können Anweisungen von mehreren
Threads an die gemeinsam benutzten Ressourcen 150 weiterleiten,
indem sie in fairer Weise zwischen den Threads alternieren, was
für einen
kontinuierlichen Fortschritt auf jedem aktiven Thread sorgt. Somit
können
die gemeinsam benutzten Ressourcen 150 die gelieferten Anweisungen
auf dem entsprechenden Zustand ausführen, ohne die Thread-Mischung
beachten zu müssen.
-
Gemäß einer
Ausführungsform
kann auf die gemeinsam benutzten Ressourcen 150 ein anderer Satz
von partitionierbaren Thread/Prozessor-Ressourcen 160 folgen.
Die partitionierbaren Thread/Prozessor-Ressourcen 160 können Deaktivierungsressourcen
(retirement resources), wie einen Neuordnungspuffer, beinhalten.
Dementsprechend können
die partitionierbaren Thread/Prozessor-Ressourcen 160 sicherstellen,
daß die
Ausführung
von Anweisungen von jedem Thread ordnungsgemäß beendet wird, und daß der entsprechende
Zustand für
diesen Thread entsprechend aktualisiert wird.
-
Gemäß einer
Ausführungsform
kann Programmierern ein Mechanismus zur Implementierung der Funktionalität von Monitor-Memory-Wait
zur Verfügung
gestellt werden, ohne daß die
ständige
Befragung eines Speicherorts oder sogar die Ausführung von Anweisungen erforderlich
ist. Zum Beispiel kann der Prozessor 100 einen Speicherzugriffsmonitor 110 enthalten.
Der Speicherzugriffsmonitor 110 kann mit Information über einen
Speicherzugriffszyklus programmiert werden, den der Speicherzugriffsmonitor 110 nach
Aktivierung beobachten kann. Dementsprechend kann der Speicherzugriffsmonitor 110 ein Überwachungszyklus-Informationsregister 112 enthalten,
welches mit Buszyklusinformation verglichen wird, die vom Bus/Speichercontroller 120 über Vergleichslogik 114 empfangen
wird. Wenn eine Deckung gefunden wird, kann ein Thread-Neustart-Signal
erzeugt werden, um einen suspendierten Thread erneut zu starten.
Speicherzugriffsinformation kann von internen und/oder externen
Bussen des Prozessors eingeholt werden.
-
Das Überwachungszyklus-Informationsregister 112 kann
Details enthalten, die den Zyklustyp und/oder Adressentyp festlegen,
der den Neustart eines Threads auslösen kann. Gemäß einer
Ausführungsform
kann das Überwachungszyklus-Informationsregister 112 eine
physische Adresse speichern, und der Speicherzugriffsmonitor 110 kann
auf jeden Buszyklus achten, der ein tatsächliches oder potentielles
Schreiben auf diese physische Adresse anzeigt. Ein solcher Zyklus
kann ein expliziter Schreibzyklus und/oder ein Lesevorgang zur Prüfung der
Inhaberschaft oder ein entwertender Zyklus von einem anderen Agenten
sein, der versucht, die ausschließliche Inhaberschaft einer
cache-fähigen
Zeile zu erwerben, so daß er
ohne eine externe Bustransaktion auf diese Zeile schreiben kann.
Der Speicherzugriffsmonitor 110 kann so programmiert werden,
daß er
durch verschiedene Transaktionen in verschiedenen Ausführungsformen
ausgelöst
wird.
-
2 ist
ein Flußdiagramm,
das die Betriebsweise eines Hyperthread-Prozessors veranschaulicht.
Die Betriebsweisen der verschiedenen Ausführungsformen von 1 lassen
sich näher
mit Bezug auf das Flußdiagramm
von 2 erklären. Gemäß einer
Ausführungsform
kann der Satz von Anweisungen von Prozessor 100 einen MONITOR-Opcode
(Anweisung) zum Einrichten der Überwachungstransaktions-Information
enthalten. Bei Verarbeitungsblock 200 wird der MONITOR-Opcode als
Teil der Folge von Anweisungen eines ersten Threads (T1) empfangen.
Bei Verarbeitungsblock 210 aktiviert der Prozessor 100 in
Antwort auf den MONITOR-Opcode den Speicherzugriffsmonitor 110, um
Speicherzugriffe für
den angegebenen Speicherzugriff zu überwachen. Der auslösende Speicherzugriff
kann durch einen impliziten oder expliziten Operand bestimmt werden.
Folglich kann das Ausführen des
MONITOR-Opcodes die Überwachungsadresse bestimmen,
da die Überwachungsadresse
im Voraus in einem Register oder einem anderen Ort als impliziter
Operand gespeichert werden kann. Bei Entscheidungsblock 215 kann
der Speicherzugriffsmonitor 110 prüfen, ob der angegebene Zyklus
entdeckt wurde. Wenn der angegebene Zyklus nicht entdeckt wird,
kann der Speicherzugriffsmonitor 110 das Überwachen
von Speicherzugriffen fortsetzen. Wenn der auslösende Zyklus entdeckt wird,
kann bei Verarbeitungsblock 220 ein Überwachungsereignisanstehend-Anzeiger
gesetzt werden.
-
Gemäß einer
Ausführungsform
kann das Ausführen
des MONITOR-Opcodes die Aktivierung des Speicherzugriffsmonitors 110 auslösen. Der Speicherzugriffsmonitor 110 kann
anfangen, parallel zu anderen Vorgängen in Prozessor 100 zu
laufen. Gemäß einer
Ausführungsform
kann die MONITOR-Anweisung selbst nur die entsprechende Speicherzyklusinformation
im Speicherzugriffsmonitor 110 einrichten und den Speicherzugriffsmonitor 110 aktivieren,
ohne Überwachungsereignisse
aufzudecken. Anders ausgedrückt
heißt
das, nach Ausführen des
MONITOR-Opcodes können Überwachungsereignisse
kumulieren, aber nicht erkannt werden, es sei denn, daß sie explizit
aufgedeckt wurden.
-
Bei
Verarbeitungsblock 225 ist das Auslösen eines Memory-Wait (Mwait)
als separates Ereignis veranschaulicht. Gemäß einer Ausführungsform kann
ein MWAIT-Opcode dazu verwendet werden, das Erkennen von Überwachungsereignissen
und die Suspendierung von T1 auszulösen. Bei Einsatz von zwei separaten
Anweisungen zum Einrichten und Auslösen der Thread-Suspendierung
erhält
ein Programmierer mehr Flexibilität und kann effizienter programmieren.
Gemäß einer
anderen Ausführungsform
kann Mwait durch den ersten Opcode ausgelöst werden, wodurch auch der
Speicherzugriffsmonitor 110 eingerichtet werden kann. In
jedem Fall kann der Speicherzugriffsmonitor 110 mit einer
oder mehreren Anweisungen ausgerüstet
werden und das Erkennen von Überwachungsereignissen
ermöglichen.
-
Gemäß einer
Ausführungsform,
bei der separate Opcodes zum Ausrüsten . des Speicherzugriffsmonitors 110 und
zum Auslösen
der Erkennung von Überwachungsereignissen
benutzt werden, kann eine Prüfung
durchgeführt
werden, um sicherzustellen, daß der
Speicherzugriffsmonitor 110 aktiviert wurde, bevor der
Thread bei Entscheidungblock 230 suspendiert wird. Des
weiteren kann durch Prüfen, ob
ein Überwachungsereignis
bereits ansteht (nicht dargestellt), das Suspendieren von T1 vermieden und
der Betrieb bei Verarbeitungsblock 250 fortgesetzt werden.
Wenn der Monitor 110 aktiviert wurde, und noch keine Überwachungsereignisse
anstehen, kann T1 bei Verarbeitungsblock 250 suspendiert
werden.
-
Nach
Suspendieren von T1 kann gemäß einer
Ausführungsform
der Prozessor 100 in einen Implementierungs-abhängigen Zustand
eintreten, welcher anderen Threads die umfassendere Nutzung von
Prozessor-Ressourcen erlauben kann. Gemäß einer Ausführungsform
kann der Prozessor einige oder alle Partitionen der partitionierbaren
Ressourcen 140 und 160 aufgeben, die T1 zugeordnet
waren. Gemäß einer
Ausführungsform
können
verschiedene Varianten des MONITOR-Opcodes oder der damit verknüpften Einstellungen
anzeigen, welche Ressourcen, falls zutreffend, aufgegeben werden
sollen. Wenn zum Beispiel ein Programmierer ein kürzeres Wait
voraussieht, kann der Thread suspendiert werden, seine Ressourcen-Partitionen jedoch
behalten. Der Durchsatz ist trotzdem verbessert, weil die gemeinsam
benutzten Ressourcen während
der Thread-Suspendierungsperiode ausschließlich von anderen Threads benutzt
werden. Wenn ein längeres Wait
vorausgesehen wird, können
durch Aufgeben aller mit dem suspendierten Thread verknüpften Partitionen
anderen Threads zusätzliche
Ressourcen zugestanden werden, wodurch möglicherweise der Durchsatz
der anderen Threads steigt. Der zusätzliche Durchsatz kann auf
Kosten des Overheads gehen, das mit dem Entfernen und Hinzufügen von
Partitionen verknüpft
ist, wenn Threads suspendiert bzw. neu gestartet werden.
-
Gemäß einer
Ausführungsform
kann T1 so lange in einem suspendierten Zustand verbleiben, bis
ein Überwachungsereignis
ansteht. Wie an früherer
Stelle besprochen, kann der Speicherzugriffsmonitor 110 unabhängig laufen,
um Überwachungsereignisse
(Block 215–220)
zu entdecken und zu melden. Wenn der Prozessor 100 bei
Entscheidungsblock 240 entdeckt, daß ein Überwachungsereignis ansteht,
kann T1 bei Verarbeitungsblock 250 wieder gestartet werden.
Ein aktives Verarbeiten von Anweisungen in T1, damit das Überwachungsereignis
T1 weckt, ist nicht erforderlich; vielmehr kann T1 weiterhin suspendiert
bleiben, und der aktivierte Speicherzugriffsmonitor 110 kann
dem Prozessor 110 ein Ereignis melden. Der Prozessor 100 kann
das Ereignis handhaben und erkennen, daß T1 infolge des Ereignisses
neu gestartet werden soll, und die entsprechenden Aktionen zum Neustarten
von T1 durchführen.
-
Die
Ausführungsformen
von 1 und 2 können Techniken bereitstellen,
um einen von einem Programm suspendierten Thread nach Eintreten
eines bestimmten Speicherzugriffs neu zu starten. Gemäß einer
Ausführungsform
können
aber auch andere Ereignisse den Neustart von T1 bewirken. Zum Beispiel
kann ein Interrupt den Neustart von T1 verursachen. Eine solche
Implementierung könnte
zu einer weniger perfekten Ausbildung von Speicherzugriffsmonitor 110 führen, insofern
als der Speicherzugriffsmonitor bestimmte Speicherzugriffe oder
andere Bedingungen überschlägt (d.h.
nicht entdeckt), die einen Neustart des Threads bewirken sollen.
Dies kann dazu führen,
daß T1
viele Male unnötig
geweckt wird. Jedoch reduziert eine solche Implementierung die Wahrscheinlichkeit,
daß T1
aufgrund eines nicht erkannten Ereignisses permanent eingefroren
wird, so daß Hardware-Design
und Validierung vereinfacht werden. Das unnötige Wecken von T1 fällt nicht
besonders ins Gewicht, da eine Schleife konstruiert werden kann,
die es T1 ermöglicht
zweimal zu prüfen,
ob die erwartete Bedingung auch wirklich eingetreten ist, und falls
nicht, sich von neuem zu suspendieren.
-
Gemäß einer
Ausführungsform
können
die partitionierbaren Thread/Prozessor-Ressourcen, die replizierten Ressourcen
und die gemeinsam benutzten Ressourcen auf andere Weise arrangiert
werden. In einigen Ausführungsformen
sind vielleicht keine partitionierbaren Ressourcen an beiden Enden
der gemeinsam benutzten Ressourcen vorhanden. Gemäß einer
Ausführungsform
müssen
die partitionierbaren Thread/Prozessor-Ressourcen nicht strikt partitioniert
sein, sondern können
manchen Anweisungen erlauben, Partitionen zu überqueren oder in der Größe zu variieren,
abhängig
vom Thread, der gerade in der betreffenden Partition ausgeführt wird,
oder abhängig
von der Gesamtanzahl der gerade ausgeführten Threads. Außerdem können verschiedene Ressourcenmischungen
als gemeinsam benutzte, duplizierte und Thread-partitionierte Ressourcen
bestimmt werden.
-
3 ist
ein Blockdiagramm, welches eine Ausführungsform eines Hyperthreaded-Prozessors darstellt.
Wie dargestellt, enthält 3 gemäß einer Ausführungsform
Kohärenzbezogene
Logik 350, eine Implementierung eines Monitors 310 und
eine spezifische Implementierung einer Thread-Suspendierungs-/Neustart-
und Prozessor-Schlaf-/Weck-Logik 377, abgesehen von anderen
Komponenten. Gemäß einer
Ausführungsform
enthält
eine Busschnittstelle 300 einen Bus-Controller 340,
Ereigniserkennungslogik 345, einen Monitor 310 und
Kohärenz-bezogene
Logik 350.
-
Gemäß einer
Ausführungsform
kann die Busschnittstelle 300 Anweisungen an ein Front-End 365 liefern,
welches durch Erzeugung von uOPs aus Makroanweisungen Micro-Operand-Generierung (uOP)
durchführt.
Ausführungsressourcen 370 können uOPs
vom Front-End 365 empfangen, und die Back-End-Logik 380 kann
verschiedene uOPs nach ihrer Ausführung deaktivieren (retire).
Gemäß einer Ausführungsform
kann eine Ausführung „außer der Reihe" vom Front-End, vom
Back-End und von Ausführungsressourcen
unterstützt
werden.
-
Gemäß einer
Ausführungsform
kann ein MONITOR-Opcode über
die Busschnittstelle 300 in den Prozessor eintreten und
vom Front-End 365 auf die Ausführung vorbereitet werden. Gemäß einer Ausführungsform
kann ein spezieller MONITOR-uOP zur Ausführung durch die Ausführungsressourcen 370 erzeugt
werden. Der MONITOR-uOP kann von den Ausführungseinheiten in ähnlicher
Weise wie ein Speichervorgang behandelt werden, wobei die Überwachungsadresse
durch Adressenübersetzungslogik 375 in
eine physische Adresse übersetzt
wird, die an den Monitor 310 geliefert wird. Der Monitor 310 kann
mit der Thread-Suspendierungs-/Neustart- und Prozessor-Schlaf-/Weck-Logik 377 kommunizieren, um
den Neustart von Threads zu veranlassen. Die Thread-Suspendierungs-
und Neustartlogik kann Partitionierung durchführen und Ressourcen wieder miteinander
verschmelzen, während
sich die Anzahl der aktiven Threads ändert.
-
In 4 ist
ein Blockdiagramm dargestellt, das eine Ausführungsform eines Prozesses
zum Partitionieren, zur gemeinsamen Nutzung und zum Duplizieren
von Ressourcen veranschaulicht. Gemäß einer Ausführungsform
können
partitionierte Ressourcen entsprechend des Flusses von aktiven Threads durch
die Maschine partitioniert und wieder miteinander verschmolzen (zur
Wiederbenutzung durch andere Threads fusioniert) werden. Gemäß einer
Ausführungsform
können
duplizierte Ressourcen Anweisungsanzeigerlogik im Anweisungsholabschnitt 405 der
Pipeline, Registerumbennungslogik im Umbenennungsabschnitt 415 der
Pipeline, Zustandsvariablen (nicht dargestellt) und einen Interrupt-Controller (nicht
dargestellt) beinhalten. Gemeinsam benutze Ressourcen können gemäß einer
Ausführungsform Scheduler
(Planer) im Planungsstadium 425 der Pipeline, einen Register-Pool
in den Registerlese- (430) und Registerschreibabschnitten
(445) der Pipeline und Ausführungsressourcen im Ausführungsabschnitt 435 der
Pipeline enthalten. Zusätzlich
können ein
Verfolgungs-Cache (in I-fetch 405) und ein L1-Daten-Cache
(in L1-Cache 440) gemeinsam benutzte Ressourcen sein, die
gemäß Speicherzugriffen
ungeachtet des Thread-Kontexts gefüllt werden. Gemäß einer
anderen Ausführungsform
kann bei Caching-Entscheidungen der Thread-Kontext berücksichtigt werden. Partitionierte
Ressourcen können gemäß einer
Ausführungsform
zwei Warteschlangen in den Warteschlangenstadien 410 der
Pipeline, einen Neuordnungspuffer in einem Deaktivierungstadium 450 (retirement
stage) der Pipeline und einen Speicherpuffer beinhalten. Thread-Auswahl-Multiplexinglogik
kann zwischen verschiedenen duplizierten und partitionierten Ressourcen
wechseln, um angemessenen Zugriff auf beide Threads bereitzustellen.
-
Zu
Beispielzwecken sei angenommen, daß das Partitionieren, gemeinsame
Nutzen und Duplizieren, wie in 4 dargestellt,
in Verbindung mit der Ausführungsform
in 3 zur weiteren Beschreibung der Betriebsweise
einer Ausführungsform
des Prozessors von 3 benutzt werden kann. Insbesondere
sollen jetzt weitere Details der Betriebsweise der Ausführungsform
von 3 mit Bezug auf das Flußdiagramm in 5 erörtert werden.
Es wird davon ausgegangen, daß die
Ausführung
des Prozessors in einen Multithreading-Modus erfolgt, wobei mindestens
zwei Threads aktiv sind.
-
5 ist
ein Flußdiagramm,
das eine Ausführungsform
eines Verfahrens zum Suspendieren und Neustarten der Ausführung eines
Threads darstellt. Bei Verarbeitungsblock 500 kann das Front-End 365 einen
MONITOR-Opcode während der
Ausführung
eines ersten Threads (T1) empfangen. Das Front-End 365 kann
gemäß einer
Ausführungsform
einen besonderen Monitor-uOP erzeugen. Der MONITOR-uOP kann an die
Ausführungsressourcen 370 weitergereicht
werden. Der MONITOR-uOP kann eine zugeordnete Adresse aufweisen,
die die zu überwachende
Adresse (die Überwachungsadresse)
angibt. Die zugeordnete Adresse kann als expliziter Operand oder
impliziter Operand ausgebildet sein (d.h. die zugeordnete Adresse
ist einem vorbestimmten Register oder einem anderen Speicherort
zu entnehmen). Die zugeordnete Adresse kann die Überwachungsadresse dadurch „angeben", daß sie genügend Information
zur Bestimmung der Überwachungsadresse
(möglicherweise
in Verbindung mit anderen Registern oder Informationen) vermittelt.
Zum Beispiel kann die zugeordnete Adresse eine lineare Adresse sein,
die eine entsprechende physische Adresse aufweist, die die entsprechende Überwachungsadresse
sein kann. Die Überwachungsadresse
kann aber auch in virtuellem Adressenformat oder als relative Adresse
oder in anderer bekannter oder geeigneter adreßspezifierender Weise angegeben
werden. Wenn virtuelle Adreß-Operanden
benutzt werden, ist es wünschenswert
zu gestatten, daß allgemeine
Schutzfehler als Break Events (Unterbrechungsereignisse) erkannt
werden.
-
Die Überwachungsadresse
kann jede zur Überwachung
geeignete Speichereinheit bezeichnen. Zum Beispiel kann gemäß einer
Ausführungsform
die Überwachungsadresse
eine Cache-Zeile bezeichnen. Gemäß einer
anderen Ausführungsform kann
die Überwachungsadresse
aber auch einen Abschnitt einer Cache-Zeile, einen Abschnitt oder
eine Einheit eines Speichers einer spezifischen/ausgewählten Größe, der
zu den Cache-Zeilen-Größen verschiedener
Prozessoren andere Beziehungen aufweist, oder eine einzelne Adresse
bezeichnen. Die Überwachungsadresse
kann eine Einheit bezeichnen, die vom Operand vorgegebene Daten
(und mehr Daten) enthält,
oder kann spezifisch eine Adresse für eine gewünschte Einheit von Daten bezeichnen.
-
Mit
Bezug auf die Darstellung in 3 kann die Überwachungsadresse
gemäß einer
Ausführungsform
an die Adressenübersetzungslogik 375 geliefert
und an den Monitor 310 weitergeleitet werden, wo sie in
einem Überwachungsadressenregister 335 gespeichert
werden kann. In Antwort auf den MONITOR-Opcode können die Ausführungsressourcen 370 dann
den Monitor 310 aktivieren und betreiben, wie in Verarbeitungsblock 510 angegeben
und im Detail in 6 veranschaulicht. Gemäß einer Ausführungsform
können
irgendwelche Speichervorgänge,
die nach dem MONITOR-Opcode eintreten, eingegrenzt werden, um sicherzustellen,
daß die Speicher
verarbeitet und daher entdeckt werden, bevor eine Thread-Suspendierung eintritt.
Gemäß einer Ausführungsform
müssen
einige Vorgänge
infolge der Aktivierung des Monitors 310 eintreten, bevor
irgendwelche späteren
Anweisungen ausgeführt
werden können.
Wie dargestellt, läuft
Verarbeitungsblock 510 jedoch parallel zu Verarbeitungsblock 505 ab,
weil der Monitor 310, nachdem er gemäß einer Ausführungsform
vom MONITOR-Opcode aktiviert wurde, weiterhin parallel zu anderen
Vorgängen
laufen kann, bis ein Break Event eintritt.
-
Bei
Verarbeitungsblock 505 kann ein MEMORY WAIT (MWAIT) Opcode
in Thread 1 empfangen werden. Gemäß einer Ausführungsform
kann der MWAIT-Opcode zum Aufdecken von Überwachungsereignissen ausgeführt werden.
In Antwort auf den MWAIT-Opcode kann bei Verarbeitungsblock 515 eine
Prüfung
durchgeführt
werden, um zu bestimmen, ob ein Überwachungsereignis
ansteht. Wenn kein Überwachungsereignis
ansteht, kann bei Verarbeitungsblock 520 eine Prüfung durchgeführt werden,
um zu bestimmen, ob der Monitor aktiv ist. Wenn zum Beispiel MWAIT
ausgeführt
wird, ohne vorher einen MONITOR auszuführen, kann der Monitor 310 nicht
aktiv sein. Wenn entweder der Monitor inaktiv ist oder ein Überwachungsereignis
ansteht, kann die Ausführung
von Thread 1 bei Verarbeitungsblock 565 fortgesetzt werden.
-
Gemäß einer
Ausführungsform,
wenn der Monitor 310 aktiv ist und kein Überwachungsereignis ansteht,
kann die Ausführung
von Thread 1 bei Verarbeitungsblock 525 suspendiert werden.
Die Thread-Suspendierungs-/Neustart-Logik 377 kann Pipeline-Flush-Logik 382 zum
Entleeren der Prozessor-Pipeline enthalten, um alle Anweisungen
bei Verarbeitungsblock 530 zu löschen. Nach Entleeren der Pipeline
kann die Partitionierungs-/Verschmelzungslogik 385 bewirken,
daß bei
Verarbeitungsblock 535 alle ausschließlich Thread 1 zugeordneten
partitionierten Ressourcen zur Benutzung durch andere Threads aufgegeben
werden. Die aufgegebenen Ressourcen können miteinander verschmolzen
werden, um einen Satz größerer Ressourcen
zur Verwendung durch die verbleibenden aktiven Threads zu bilden.
Unter Bezugnahme auf das Zwei-Thread-Beispiel in 4 könnten zum
Beispiel alle auf Thread 1 bezogenen Anweisungen aus beiden Warteschlangen
entfernt werden. Dann kann jedes Warteschlangenpaar kombiniert werden,
um eine größere Warteschlange
für den
zweiten Thread bereitzustellen. Desgleichen könnten dem zweiten Thread mehr
Register aus dem Register-Pool zur Verfügung gestellt werden, könnten mehr
Einträge aus
dem Speicherpuffer für
den zweiten Thread freigemacht werden, und könnten mehr Einträge im Neuordnungspuffer
dem zweiten Thread zur Verfügung
gestellt werden. Im Kern werden diese Strukturen auf einzelne dedizierte
Strukturen zurückgeführt, die
zweimal so groß sind.
Andere Verhältnisse,
die sich aus Implementierungen bei Einsatz anderer Threadanzahlen
ergeben, werden in Erwägung
gezogen.
-
Gemäß einer
Ausführungsform
werden bei Verarbeitungsblöcken 540, 545 und 550 verschiedene
Ereignisse geprüft,
um zu bestimmen, ob Thread 1 neu gestartet werden kann. Zu bemerken
ist, daß diese
Prüfungen
nicht mit Anweisungen durchgeführt werden
können,
die als Teil von Thread 1 ausgeführt werden.
Vielmehr können
diese Vorgänge
vom Prozessor durchgeführt
werden, während
er parallel dazu andere Threads verarbeitet. Wie ausführlicher mit
Bezug auf 6 besprochen, kann der Monitor selbst
prüfen,
ob ein Monitor-Schreibereignis
eingetreten und dies durch Einstellen eines Ereignis-anstehend-Anzeigers
angezeigt wird. Der Ereignis-anstehend-Anzeiger kann über ein
EVENT-Signal (zum Beispiel Microcode) an die Suspendierungs-/Neustart-Logik 377 geliefert
werden. Der Microcode kann das Überwachungsereignis
an einer entsprechenden Anweisungsgrenze in einer Ausführungsform
(Block 540) erkennen, da dieses Ereignis bei Verarbeitungsblock 505 durch
den MWAIT-Opcode aufgedeckt wurde. Ereigniserkennungslogik 345 kann
andere Ereignisse, wie zum Interrupts, entdecken, die bei Verarbeitungsblock 545 als
Break Events (Unterbrechnungsereignisse) bezeichnet sind. Zusätzlich kann gemäß einer
Ausführungsform
periodisch ein wahlweiser Zeitgeber zum Verlassen des Memory-Wait-Zustands
benutzt werden, um sicherzustellen, daß der Prozessor nicht aufgrund
einer bestimmten Ereignisfolge bei Verarbeitungsblock 550 einfriert.
Wenn keins dieser Ereignisse ein Verlassen des Mwait-Zustands meldet,
kann Thread 1 suspendiert bleiben.
-
Wenn
Thread 1 neu gestartet wird, kann gemäß einer Ausführungsform
die Thread-Suspendierungs-/Neustart-Logik 355 nach
Entdeckung des entsprechenden Ereignisses wieder aktiviert werden. Die
Pipeline kann wiederum bei Verarbeitungsblock 555 ausgespült werden,
um Anweisungen aus der Pipeline zu löschen, damit Ressourcen wieder
partitioniert werden können,
um Platz für
den bald-zu-weckenden Thread 1 zu machen. Bei Verarbeitungsblock 560 können die
entsprechenden Ressourcen neu partitioniert werden und bei Verarbeitungsblock 565 kann
Thread 1 neu gestartet werden.
-
6 ist
ein Flußdiagramm,
welches eine Ausführungsform
eines Prozesses zum Aktivieren und Betreiben einer Überwachungslogik
darstellt. Bei Verarbeitungsblock 600 kann Front-End-Fetching (Front-End-Holen)
für Thread
1 gestoppt werden, um weitere Thread-1-Vorgänge
am Eintritt in die Maschine zu hindern. Bei Verarbeitungsblock 605 kann
der zugehörige
Adreß-Operand
durch die Adressenübersetzungslogik 375 von
einer linearen Adresse in eine physische Adresse umgewandelt werden.
Bei Verarbeitungsblock 610 kann die Beobachtbarkeit von Schreibvorgängen auf
die Überwachungsadresse
erhöht
werden, vielleicht um Caching-Agenten zu zwingen, Schreibvorgänge durchzuführen, die
sich auf die in der Überwachungsadresse
gespeicherte Information auswirken würden, die für den Monitor 310 selbst
sichtbar ist. Bei Verarbeitungsblock 615 kann die zu überwachende
physische Adresse früher
oder später
in dieser Folge gespeichert werden.
-
Als
nächstes
kann gemäß einer
Ausführungsform
bei Verarbeitungsblock 620 der Monitor aktiviert werden.
Der Überwachungsbus
kann Schreibvorgänge
auf die physische Adresse, welche die im Monitoradreßregister 445 gespeicherte Überwachungsadresse
sein kann, zyklisch überwachen. Weitere
Details des Überwachungsvorgangs
werden unten mit Bezug auf 7 beschrieben.
Nach Aktivieren des Monitors kann gemäß einer Ausführungsform
bei Verarbeitungsblock 625 ein Speichereingrenzungsvorgang
ausgeführt
werden. Die Speichereingrenzung kann dazu beitragen sicherzustellen, daß alle Speicher
in der Maschine zu dem Zeitpunkt, zu dem der MONITOR-Opcode die
Ausführung
abschließt,
verarbeitet sind. Wenn alle Speicher in der Maschine vor Ausführung des
Monitors entleert werden, wird die Wahrscheinlichkeit reduziert,
daß fälschlicherweise
ein Memory-Wait-Zustand (mwait) eintritt. Der Speichereingrenzungsvorgang
ist ein Vorbeugungsvorgang und kann sehr zeitaufwendig sein.
-
Die
Speichereingrenzung kann wahlweise erfolgen, weil der Monitor-Mwait-Mechanismus gemäß einer
Ausführungsform
als mehrfacher Ausgangsmechanismus (Verlassen) ausgestaltet werden kann.
Anders ausgedrückt
können
verschiedene Ereignisse, wie bestimmte Interrupts, Erkennungen, System-On-Board-Zeitgeber
usw., ebenfalls das Verlassen eines Mwait-Zustands verursachen.
Gemäß einer
Ausführungsform
kann der Thread geweckt werden, weil sich der Datenwert, der überwacht
wird, geändert
hat. Dementsprechend kann gemäß einer Ausführungsform
eine doppelte Softwareprüfung
auf Änderung
des jeweiligen im Speicher gespeicherten Werts erfolgen. Gemäß einer
Ausführungsform
können
bestimmte Ereignisse, wie Assertion NonMaskable Interrupt (NMI)
(nicht maskierbares Interrupt) und System Management Interrupt (SMI),
Maschinenprüfungs-Interrupts
und Störungen
als Break Events betrachtet werden, während dies für andere Ereignisse,
wie zum Beispiel Power-Down-Ereignisse, nicht möglich ist. Gemäß einer
Ausführungsform kann
auch Aktivierung eines A20M-Stifts als Break Event betrachtet werden.
-
Bei
Verarbeitungsblock 630 kann gemäß einer Ausführungsform
der Monitor kontinuierlich prüfen,
ob Buszyklen, die eintreten, einen Schreibvorgang auf die Überwachungsadresse
anzeigen oder anzuzeigen scheinen. Wenn ein solcher Buszyklus entdeckt
wird, kann bei Verarbeitungsblock 635 der Überwachungsereignis-anstehend-Anzeiger
gesetzt werden. Nach Ausführung
des MWAIT-Opcodes (Block 505, 5) kann
dieser Ereignisanstehend-Anzeiger als Ereignis abgewickelt werden
und Thread-Neustart in Blöcken 555–565 in 5 verursachen.
Des weiteren können
Ereignisse, die Änderung
von Adressenübersetzung
verursachen, den Neustart von Thread 1 bewirken. Zum Beispiel können Ereignisse,
die das Ausspülen
eines Übersetzungs-Lookaside-Puffers
verursachen, den Neustart von Thread 1 auslösen, da die Übersetzung
aus einer linearen in eine physische Adresse, die zur Erzeugung
einer Überwachungsadresse
vorgenommen wurde, vielleicht nicht mehr gültig ist. Zum Beispiel können in
einem mit x86 Intel-Architektur kompatiblen Prozessor Schreibvorgänge auf
Steuerregister CR0, CR3 und CR4 sowie auf bestimmte maschinenspezifische
Register das Verlassen des Mwait-Zustands bewirken.
-
7 ist
ein Flußdiagramm,
welches eine Ausführungsform
eines Verfahrens zum Handhaben von Überwachungsvorgängen veranschaulicht.
Insbesondere veranschaulicht 7 weitere
Betriebsdetails des Monitors 310 von 3 und
des Verarbeitungsblocks 620 von 6. Gemäß einer
Ausführungsform
kann der Monitor 310 bei Verarbeitungsblock 700 Anforderungs-
und Adreßinformation
von einem Bus-Controller 340 für eine Bustransaktion empfangen.
Bei Verarbeitungsblock 710 kann der Monitor 310 den
Buszyklustyp und die betroffene(n) Adresse(n) prüfen. Insbesondere kann die
Zyklusvergleichslogik 320 bestimmen, ob der Buszyklus ein vorgegebener
Zyklus ist. Gemäß einer
Ausführungsform
kann eine Adressenvergleichsschaltung 330 die Bustransaktionsadresse
mit der im Überwachungsadressenregister 445 gespeicherten Überwachungsadresse
vergleichen, und die Schreibvorgangsentdeckungslogik 325 kann
die Zyklustypinformation des Bus-Controllers 340 dekodieren,
um festzustellen (zu entdecken), ob ein Schreibvorgang eingetreten
ist. Wenn ein Schreibvorgang auf der Überwachungsadresse eintritt,
kann bei Verarbeitungsblock 720 ein Überwachungsereignis-anstehend-Anzeiger
gesetzt werden. Zum Melden des Ereignisses kann ein Signal (WRITE
DETECTED) an die Thread-Suspendierungs-/Neustart-Logik 377 geschickt
werden (und abgewickelt werden in der Annahme, daß es durch
Ausführen
von MEMORY-WAIT
(MWAIT) aktiviert wurde). Schließlich kann der Monitor 310 bei
Verarbeitungsblock 730 angehalten werden. Anhalten des Monitors
kann Strom sparen, ist jedoch nicht kritisch, solange falsche Überwachungsereignisse
maskiert oder ansonsten nicht erzeugt werden. Der Überwachungsereignis-Anzeiger
kann an diesem Punkt auch zurückgesetzt
werden. Typisch kann das Abwickeln des Überwachungsereignisses auch
die Erkennung von weiteren Überwachungsereignissen
maskieren, bis MWAIT wieder ausgeführt wird.
-
Im
Falle eines Lesevorgangs auf der Überwachungsadresse kann gemäß einer
Ausführungsform
die Kohärenz-bezogene
Logik 350 aktiviert werden. Bei Verarbeitungsblock 740 kann
ein Signal (wie HIT#) aktiviert werden, um einen anderen Agenten am
Erwerb der Inhaberschaft zu hindern, wodurch zukünftige Schreibvorgänge ohne
Kohärenz-Broadcasts
ermöglicht
werden können.
Gemäß einer
Ausführungsform
kann der Monitor 310 aktiv bleiben und zu Verarbeitungsblock 700 zurückkehren
und von einem Lesevorgang auf der Überwachungsadresse unbeeinflußt bleiben.
Des weiteren, wenn eine Transaktion auf der Überwachungsadresse weder ein
Lese- noch ein Schreibvorgang ist, kann der Monitor aktiv bleiben
und zu Verarbeitungsblock 700 zurückkehren.
-
Gemäß einer
Ausführungsform
kann sich die MONITOR-Anweisung auf bestimmte, zu überwachende
Zugriffstypen beziehen. Diese Zugriffe können so gewählt werden, daß sie bezeichnend
für effiziente
Programmiertechniken sind, oder aus anderen Gründen. Zum Beispiel muß gemäß einer
Ausführungsform
der Speicherzugriff ein kopierbarer (cacheable) Speicher im Write-Back-Speicher
sein, der natürlich
ausgerichtet ist. Ein natürlich
ausgerichtetes Element kann sich auf ein N-Bit-Element beziehen,
das an einer durch N dividierbaren Adresse startet. Bei Einsatz
natürlich
ausgerichteter Elemente muß nur
auf eine einzige Cache-Zeile (anstatt zwei Cache-Zeilen, wie es
erforderlich ist, wenn Daten auf zwei Cache-Zeilen aufgeteilt werden)
zugegriffen werden, um auf die Überwachungsadresse
zu schreiben. Somit kann der Einsatz von natürlich ausgerichteten Überwachungsadressen
die Busüberwachung vereinfachen.
-
8 ist
ein Flußdiagramm,
das eine Ausführungsform
eines Verfahrens zum Erwerb einer Sperre und zur Überwachung
der Sperre mit Monitor-Memory-Wait darstellt. Ein typischer Hyperthreaded-Prozessor
oder Multithreaded-Prozessor kann mehrere Threads oder mehrere logischen
Prozessoren (Prozessoren) beinhalten. Mehrere Prozessoren sehen
typisch wie separate physische Prozessoren aus und teilen sich die
gleichen Ressourcen. Bei Verarbeitungsblock 802 versucht
ein Prozessor, eine Sperre zu erwerben, um die sich auch andere
Prozessoren streiten. Bei Entscheidungsblock 804 wird bestimmt,
ob die Sperre, die der Prozessor erwerben möchte, noch von einem anderen
Prozessor bestritten wird. Die umstrittene Sperre kann eine Sperre sein,
auf deren Erwerb ein oder mehrere Prozessoren warten. Wenn nicht
um die Sperre gestritten wird, kann der Prozessor die Sperre auf
konventionelle Art und Weise erwerben, indem er die Inhaberschaft
der verfügbaren
Sperre bei Verarbeitungsblock 806 beansprucht.
-
Wenn
eine Sperre von einem oder mehreren Prozessoren bestritten wird,
bilden die auf die Sperre wartenden Prozessoren typisch eine Warteschlange. Ein
derartiges Warten der Prozessoren wird jedoch typisch als „aktives
Warten" (busy waiting)
bezeichnet, weil die wartenden Prozessoren die ihnen zur Verfügung stehenden
Ressourcen dazu verwenden, auf den Speicherort der umstrittenen
Sperre zuzugreifen. Bei Verarbeitungsblock 808 kann gemäß einer
Ausführungsform,
falls die Sperre umstritten ist, ein Warteschlangenelement oder
ein Knoten (Knoten), wie Knoten N, für den Prozessor erstellt werden. Gemäß einer
Ausführungsform
kann der Knoten dann bei Verarbeitungsblock 810 initialisiert
werden. Gemäß einer
anderen Ausführungsform
ist die Initialisierung des Knotens eventuell nicht notwendig, weil der
Knoten bereit initialisiert ist. Bei Verarbeitungsblock 812 kann
der initialisierte Knoten mit der umstrittenen Sperre verknüpft oder
dieser zugeordnet werden. Gemäß einer
Ausführungsform
kann dann nach der Zuordnung des Knotens als Schwanzanzeiger der
umstrittenen Sperre dienen.
-
Gemäß einer
Ausführungsform
kann bei Verarbeitungsblock 814 ein Monitor auf dem Knoten
eingerichtet werden, um den mit der umstrittenen Sperre verknüpften Knoten
zur Überwachung
der umstrittenen Sperre zu überwachen.
Die Überwachung
der umstrittenen Sperre kann die Überwachung der Sperrenadresse
der Sperre beinhalten, um zu bestimmen, ob die Sperre dem ersten
Prozessor {Monitor(N.lock)} zur Verfügung gestellt wurde. Gemäß einer
Ausführungsform
kann das Einrichten des Monitors das Aktivieren des Monitors in
Antwort auf den Empfang eines MONITOR-Opcodes durch das Front-End 365 und
die Erzeugung eines speziellen Monitor-uOPs durch das Front-End 365 beinhalten. Der
Monitor-uOP kann an die Ausführungsressourcen 370 weitergereicht
werden. Der Monitor-uOP kann eine zugeordnete Adresse aufweisen,
die die zu überwachende
Adresse (die Überwachungsadresse) bezeichnet.
Gemäß einer
Ausführungsform
kann die Überwachungsadresse
die Sperrenadresse der Sperre beinhalten, mit der der Knoten verknüpft sein kann.
Die zugeordnete Adresse kann die Überwachungsadresse dadurch „angeben", daß sie genügend Information
zur Bestimmung der Überwachungsadresse
(möglicherweiser
in Verbindung mit anderen Registern oder Informationen) vermittelt.
-
Wie
in 3 dargestellt, kann die Überwachungsadresse gemäß einer
Ausführungsform
an die Adressenübersetzungslogik 375 geliefert
und an den Monitor weitergegeben werden, wo sie in einem Überwachungsadressenregister 335 gespeichert werden
kann. In Antwort auf den MONITOR-Opcode können die Ausführungsressourcen 370 dann
den Monitor aktivieren und betreiben, wie bei Verarbeitungsblock 510 angegeben
und in 6 im Detail dargestellt. Gemäß einer Ausführungsform
kann der Monitor, nachdem er gemäß einer
Ausführungsform durch
den MONITOR-Opcode aktiviert wurde, weiterhin parallel zu anderen
Vorgängen
laufen, bis ein Überwachungsereignis
eintritt.
-
Bei
Verarbeitungsblock 816 kann gemäß einer Ausführungsform
die Memory-Wait-(Mwait)
Anweisung ausgeführt
werden, um den Prozessor stillzulegen, während er auf das Verfügbarwerden
der umstrittenen Sperre wartet. Gemäß einer Ausführungsform
kann die Ausführung
des MWAIT-Opcodes verschiedene Überwachungsereignisse
aufdecken. In Antwort auf den MWAIT-Opcode kann eine Prüfung durchgeführ werden,
um zu bestimmen, ob ein Überwachungsereignis
ansteht. Wenn kein Überwachungsereignis
ansteht, kann eine Prüfung durchgeführt werden,
um zu bestimmen, ob der Monitor aktiv ist. Wenn zum Beispiel MWAIT
ausgeführt wird,
ohne zuvor einen MONITOR auszuführen,
ist der Monitor vielleicht nicht aktiv. Gemäß einer Ausführungsform,
wenn entweder der Monitor inaktiv ist oder wenn ein Überwachungsereignis
ansteht, kann der Prozessor nicht stillgelegt werden. Gemäß einer Ausführungsform
kann sich das Überwachungsereignis
auf ein Ereignis beziehen, nach dessen Eintreten der Monitor inaktiv
wird und so die Überwachung
des Knotens beendet, und der Prozessor geweckt werden kann. Zum
Beispiel kann ein Überwachungsereignis
darin bestehen, daß der
Prozessor an der Reihe ist, die Inhaberschaft der Sperre zu beanspruchen,
und/oder die Sperre für
den Prozessor verfügbar
wird, wenn sie von einem anderen Prozessor, der die Sperre gerade
besitzt, freigegeben wird.
-
Gemäß einer
Ausführungsform
kann der Prozessor durch Einsatz des Monitor-Mwait-Mechanismus auf dem
Knoten bei Verarbeitungsblock 818 stillgelegt werden. Gemäß einer
Ausführungsform kann
der Prozessor, wenn der Monitor aktiv ist und es kein anstehendes Überwachungsereignis
gibt, stillgelegt werden, bis das Überwachungsereignis eintritt.
Anders ausgedrückt,
kann der erste Prozessor schlafen, bis er zum Beispiel als der Prozessor
erkannt wird, der nun an der Reihe ist, die Inhaberschaft der umstrittenen
Sperre zu beanspruchen. Diese Erkennung kann als das Eintreten desjenigen Überwachungsereignisses
bezeichnet werden, das den Monitor inaktiv werden läßt und den
Prozessor bei Verarbeitungsblock 820 weckt.
-
Gemäß einer
Ausführungsform
ist ein Überwachungsereignis
nicht auf ein einziges Ereignis beschränkt, und es können verschiedene
Ereignisse geprüft
werden, um zu bestimmen, ob die Überwachung
beendet und der Prozessor geweckt werden soll. Wie mit Bezug auf 6 besprochen,
kann der Monitor selbst prüfen,
ob ein Überwachungsereignis eingetreten
ist und dies durch Setzen eines Ereignis-anstehend-Anzeigers anzeigen.
Der Ereignis-anstehend-Anzeiger
kann über
ein EVENT-Signal an die Prozessor-Schlaf-/Wecklogik 377 (zum
Beispiel einen Microcode) geliefert werden. Der Microcode kann das Überwachungsereignis
gemäß einer
Ausführungsform
an einer entsprechenden Anweisungsgrenze erkennen, da dieses Ereignis
eventuell durch den MWAIT-Opcode aufgedeckt wurde. Des weiteren kann
die Entdeckungslogik 345 dazu benutzt werden, verschiedene
Ereignisse aufzudecken, die als Überwachungsereignisse
bezeichnet werden. Des weiteren kann gemäß einer Ausführungsform
periodisch ein wahlweiser Zeitgeber zum Verlassen des Mwait-Zustands
benutzt werden, um sicherzustellen, daß der Hyperthreaded-Prozessor
korrekt funktioniert, und um eine bestimmte Folge von Ereignissen zu
prüfen,
die das Einfrieren des Hyperthreaded-Prozessors verursachen können. Wenn
keins dieser Ereignisse ein Verlassen des Mwait-Zustands meldet, kann
der erste Prozessor weiter schlafen.
-
Bei
Verarbeitungsblock 822 kann der erste jetzt wache Prozessor
die Inhaberschaft der Sperre beanspruchen und auch irgendwelche
früher
aufgegebenen Ressourcen zurückfordern.
Früher
aufgegebene Ressourcen können
sich auf die Ressourcen beziehen, die vom ersten Prozessor, während er schlief
und auf die Sperre wartete, aufgegeben wurden. Gemäß einer
Ausführungsform
kann die Prozessor-Schlaf-/Wecklogik 377, während der
Prozessor schläft,
eine Pipeline-Flush-Logik 382 zum Entleeren der Prozessor-Pipeline
enthalten, um alle Anweisungen bei Verarbeitungsblock 530 zu
löschen. Nach
Entleeren der Pipeline kann die Partitionierungs-/Verschmelzungslogik 385 verursachen,
daß die
ausschließlich
mit dem ersten Prozessor verknüpften
Ressourcen zum Einsatz durch andere Prozessoren aufgegeben werden.
Diese aufgegebenen Ressourcen können
zur Nutzung durch andere Prozessoren zu einem Satz größerer Ressourcen
verschmolzen werden. Zum Beispiel könnten mit Bezug auf das Zwei-Thread-Beispiel von 4 alle
auf Thread 1 bezogenen Anweisungen aus beiden Warteschlangen entfernt
werden. Jedes Warteschlangenpaar kann dann kombiniert werden, um
eine größere Warteschlange
für den
zweiten Thread bereitzustellen. Desgleichen könnten dem zweiten Thread mehr
Register aus dem Register-Pool zur Verfügung gestellt werden, könnten mehr
Einträge
aus dem Speicherpuffer für
den zweiten Thread freigemacht werden, und könnten mehr Einträge im Neuordnungspuffer
dem zweiten Thread zur Verfügung
gestellt werden. Im Kern werden diese Strukturen auf einzelne dedizierte
Strukturen zurückgeführt, die zweimal
so groß sind.
Andere Verhältnisse,
die sich aus Implementierungen bei Einsatz anderer Threadanzahlen
ergeben, werden in Erwägung
gezogen.
-
Gemäß einer
Ausführungsform
kann nach Aufwachen oder Neustarten des ersten Prozessors die Prozessor-Schlaf-/Wecklogik 377 nach
Entdeckung des Überwachungsereignisses
wieder aktiviert werden. Die Pipeline kann wiederum ausgespült werden,
um Anweisungen aus der Pipeline zu entfernen, damit die früher aufgegebenen
Ressourcen wieder partitioniert werden können, um Platz für den bald-zu-weckenden
oder kürzlich-geweckten
ersten Prozessor zu machen.
-
9 ist
ein Flußdiagramm,
das eine Ausführungsform
eines Verfahrens zur Freigabe einer Sperre und zur Überwachung
der Sperre mit Monitor-Memory-Wait darstellt. Wie mit Bezug auf 8 beschrieben,
kann gemäß einer
Ausführungsform Monitor-Memory-Wait
(Monitor-Mwait) dazu benutzt werden, eine umstrittene Sperre durch Überwachen des
entsprechenden Warteschlangenelements oder Knotens (Knoten), wie
Knoten N, zu überwachen, und
den Prozessor, der die umstrittene Sperre erwerben möchte, stillzulegen,
bis zum Beispiel die umstrittene Sperre verfügbar wird. Unter Einsatz von
Monitor-Mwait hinsichtlich der Freigabe einer Sperre wird bei Entscheidungsblock 902 bestimmt,
ob die Sperre umstritten ist. Wenn die Sperre nicht umstritten ist, kann
die Sperre bei Verarbeitungsblock 904 freigegeben werden.
Wenn die Sperre jedoch umstritten ist, tritt die Freigabe der Sperre
möglicherweise
erst dann ein, wenn zum Beispiel der Prozessor (der freigebende
Prozessor), der die Sperre besitzt, diese in Antwort auf ein oder
mehrere Ereignisse einschließlich
eines oder mehrerer Überwachungsereignisse freigibt.
-
Gemäß einer
Ausführungsform
kann sich ein Überwachungsereignis
auf den auf die Sperre wartenden Prozessor (den schlafenden Prozessor)
beziehen, der an der Reihe ist, die Sperre zu beanspruchen. Zum
Beispiel kann der freigebende Prozessor ein „store the N.next->Lock" (N.nächste->Sperre speichern) ausgeben,
um den schlafenden Prozessor, der auf die umstrittene Sperre wartet,
aus dem Schlafzustand zu wecken (sleep/mwait ((if N.next!=0) {Store
to N.next->Lock //waking
up the sleeping processor}), wie in der erworbenen Phase mit Bezug
auf 8 beschrieben. Anders ausgedrückt, wird bei Entscheidungsblock 906 bestimmt,
ob der Knoten Null (0) erreicht hat (oder im Kreislauf zu Null zurückgekehrt
ist). Wenn der Knoten Null erreicht hat, d.h. N.next!=0, kann der
freigebende Prozessor ein „store N.next->Lock" ausgeben, was besagt,
daß der
schlafende Prozessor an der Reihe ist, die Sperre zu besitzen, und
somit bei Verarbeitungsblock 910 aus dem Schlaf geweckt
wird. Wenn der Knoten nicht Null erreicht hat, kann die Sperre bei
Verarbeitungsblock 908 nicht freigegeben werden. Bei Verarbeitungsblock 912 wird
die Sperre von dem freigebenden Prozessor freigegeben. Gemäß einer
Ausführungsform können irgendwelche
nach dem MONITOR-Opcode eintretenden Speichervorgänge eingegrenzt
werden, um sicherzustellen, daß die
Speicher verarbeitet und entdeckt werden. Gemäß einer Ausführungsform müssen manche
Vorgänge
infolge der Aktivierung des Monitors eintreten, bevor irgendwelche
späteren Anweisungen
ausgeführt
werden können,
oder können
parallel zu anderen Vorgängen
eintreten, bis ein Überwachungsereignis
nach Aktivierung durch den MONITOR-Opcode eintritt.
-
10 ist
ein Blockdiagramm, das eine Ausführungsform
eines Systems darstellt. Gemäß einer Ausführungsform
enthält
das System, wie veranschaulicht, einen Satz von N Hyperthreaded-Prozessoren,
Prozessoren 1005-1 bis 1005-N. Die Hyperthreaded-Prozessoren 1005-1 bis 1005-N sind
mit einem Bus 1050 gekoppelt. Gemäß einer anderen Ausführungsform
kann ein einzelner Prozessor oder eine Mischung von Hyperthreaded-Prozessoren
und Einzel-Thread-Prozessoren
verwendet werden. Des weiteren können
andere bekannte oder anderweitig verfügbare Systemanordnungen benutzt
werden. Zum Beispiel können
die Prozessoren 1005-1 bis 1005-N in Punkt-zu-Punkt-Weise
miteinander verbunden werden, und Teile wie die Speicherschnittstelle
können
in jeden Prozessor 1005-1 bis 1005-N integriert
werden.
-
Gemäß einer
Ausführungsform
ist eine mit dem Bus 1050 gekoppelte Speicherschnittstelle 1015 mit
einem Speicher 1030 und einer Medienschnittstelle 1020 gekoppelt.
Der Speicher 1030 kann ein zur Vielfachverarbeitung bereites
Betriebssystem 1035 und Anweisungen für einen ersten Thread 1040 sowie
für einen
zweiten Thread 1045 beinhalten. Die Anweisungen 1030 können gemäß einer
Ausführungsform
eine inaktive Schleife beinhalten.
-
Gemäß einer
Ausführungsform
kann die entsprechende Software zur Durchführung verschiedener Funktionen
oder Ausführungsformen
in einem aus einer Vielfalt von maschinenlesbaren Medien vorgesehen
werden. Gemäß einer
Ausführungsform kann
die Medienschnittstelle 1020 eine Schnittstelle zu solcher
Software vorsehen.
-
Gemäß einer
Ausführungsform
kann die Medienschnittstelle 1020 eine Schnittstelle zu
einem Speichermedium (zum Beispiel einem Diskettenlaufwerk, einem
optischen Laufwerk, einem Bandlaufwerk, einem flüchtigen Speicher, einem nichtflüchtigen
Speicher oder dergleichen) oder zu einem Übertragungsmedium (zum Beispiel
einer Netzwerkschnittstelle oder einer anderne digitalen oder analogen
Kommunationsschnittstelle) sein. Die Medienschnittstelle 1020 kann
Softwareroutinen aus einem Medium (zum Beispiel einem Speichermedium 1092 oder
einem Übertragungsmedium 1095)
lesen. Maschinenlesbare Medien sind Medien, die mindestens temporär Information
zum Lesen einer Maschinenschnittstelle lesen können. Hierzu können Signalübertragungen
(über Draht,
Optiken oder Luft als Medium) und/oder physische Speichermedien 1092 wie verschiedene
Disktypen und Speichergeräte
(Memory Storage Devices) gehören.
-
11 ist
ein Blockdiagramm, das eine Ausführungsform
verschiedener Design-Darstellungen oder
Formate zur Simulation, Emulation und Fabrikation eines Designs
veranschaulicht. Daten, die ein Design darstellen, können das
Design in einer Anzahl von Weisen veranschaulichen. Erstens, wie
es in Simulationen nützlich
ist, kann die Hardware mittels einer Hardwarebeschreibungssprache
oder einer anderen Funktionsbeschreibungssprache veranschaulicht
werden, die im wesentlichen ein Computermodell der erwarteten Leistung
der entworfenen Hardware bereitstellt. Das Hardwaremodell 1110 kann
in einem Speichermedium 1100, wie einem Computerspeicher,
gespeichert werden, damit das Modell mit Hilfe von Simulationssoftware 1120 simuliert
werden kann, die für
eine bestimmte Prüffolge 1130 für Hardwaremodell 1110 gelten
kann, um zu bestimmen, ob sie ihre beabsichtigte Funktion ausführt. Gemäß einer
Ausführungsform
kann die Simulationssoftware 1120 weder aufgezeichnet noch
erfaßt
werden noch im Medium enthalten sein.
-
Gemäß einer
Ausführungsform
kann in einigen Stadien des Design-Prozesses ein Schaltungsebenenmodell
mit logischen und/oder Kondensator-Gates erstellt werden. Ein solches
Modell kann auf ähnliche
Weise, manchmal durch dedizierte Hardwaresimulatoren, die das Modell
bilden, mit Hilfe programmierbarer Logik simuliert werden. Diese
An von Simulation kann, wenn man sie einen Schritt weiter führt, eine
Emulationstechnik sein. Gemäß einer Ausführungsform
kann rekonfigurierbare Hardware ein maschinenlesbares Medium enthalten,
in dem ein Modell gespeichert ist, das die offenbarten Techniken verwendet.
-
Des
weiteren können
gemäß einer
Ausführungsform
die meisten Designs in irgendeinem Stadium ein Niveau erreichen,
auf dem die Daten die physische Plazierung verschiedener Geräte im Hardwaremodell
darstellen. In Fällen,
in denen konventionelle Halbleiterherstellungstechniken verwendet
werden, können
die das Hardwaremodell darstellenden Daten die Daten sein, die die
An- oder Abwesenheit verschiedener Merkmale auf verschiedenen Maskenschichten
für Masken
angeben, die zur Herstellung der integrierten Schaltung dienen.
Diese die integrierte Schaltung darstellenden Daten können die
offenbarten Techniken dadurch aufweisen, daß die Schaltungen oder die
Logik in den Daten zur Durchführung
dieser Techniken simuliert oder gefertigt werden kann.
-
Gemäß einer
Ausführungsform
können
die Daten in einer beliebigen Form eines computerlesbaren Mediums
gespeichert werden. Eine optische oder elektrische Welle 1160,
die moduliert ist oder ansonsten zur Übertragung dieser Information
erzeugt wird, ein Speicher 1150 oder ein magnetischer oder
optischer Speicher 1140, wie eine Disk, können das
Medium darstellen. Der Satz von Bits, die das Design oder das betreffende
Teil des Designs beschreiben, kann einen Artikel darstellen, der
als Teil eines weiteren Designs oder eines Produkts verkauft oder
als Einzelteil verkauft oder von anderen für das weitere Design oder die
weitere Herstellung benutzt wird.
-
Obwohl
bestimmte beispielhafte Ausführungsformen
beschrieben und in den beiliegenden Zeichnungen veranschaulicht
wurden, versteht es sich, daß diese
Ausführungsformen
lediglich illustrativ, aber nicht einschränkend sind, und daß die erfindungsgemäßen Ausführungsformen
nicht auf spezifische dargestellte und beschriebene Konstruktionen und
Anordnungen beschränkt
sind, da der Fachmann nach Studieren der Offenbarung verschiedene
andere Modifikationen erkennen wird.
-
Zusammenfassung
-
Ein
Verfahren, eine Vorrichtung und ein System werden zum Überwachen
von Sperren unter Einsatzes eines Monitor-Memory-Wait zur Verfügung gestellt.
Gemäß einer
Ausführungsform
wird ein Knoten, der mit einer umstrittenen Sperre in Verbindung steht, überwacht;
und ein Prozessor, der die umstrittene Sperre sucht, wird in einen
Ruhemodus versetzt, bis ein Monitor-Ereignis eintritt.