DE10297596T5 - Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt - Google Patents
Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt Download PDFInfo
- Publication number
- DE10297596T5 DE10297596T5 DE10297596T DE10297596T DE10297596T5 DE 10297596 T5 DE10297596 T5 DE 10297596T5 DE 10297596 T DE10297596 T DE 10297596T DE 10297596 T DE10297596 T DE 10297596T DE 10297596 T5 DE10297596 T5 DE 10297596T5
- Authority
- DE
- Germany
- Prior art keywords
- thread
- address
- processor
- monitoring
- response
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 105
- 238000000034 method Methods 0.000 title claims description 39
- 238000012544 monitoring process Methods 0.000 claims abstract description 102
- 238000012806 monitoring device Methods 0.000 claims abstract description 64
- 230000004044 response Effects 0.000 claims abstract description 46
- 239000000725 suspension Substances 0.000 claims description 22
- 238000005192 partition Methods 0.000 claims description 18
- 238000001514 detection method Methods 0.000 claims description 17
- 239000000872 buffer Substances 0.000 claims description 15
- 239000003795 chemical substances by application Substances 0.000 claims description 15
- 238000013519 translation Methods 0.000 claims description 11
- 238000000638 solvent extraction Methods 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 2
- 238000012986 modification Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 claims description 2
- 230000000694 effects Effects 0.000 claims 1
- 239000000375 suspending agent Substances 0.000 claims 1
- 238000013461 design Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000004913 activation Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 208000003443 Unconsciousness Diseases 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
- Acyclic And Carbocyclic Compounds In Medicinal Compositions (AREA)
Abstract
mehrere Ausführungseinheiten, um die Ausführung mehrerer Threads zu ermöglichen, einschließlich eines ersten Threads, wobei der erste Thread eine erste Anweisung mit einem zugeordneten Adressenoperanden, der eine Überwachungsadresse angibt, aufweist;
Suspendierungslogik zum Suspendieren der Ausführung des ersten Threads;
eine Überwachungsvorrichtung zur Bewirkung der Wiederaufnahme des ersten Threads als Reaktion auf einen Speicherzugriff auf die Überwachungsadresse.
Description
- VERWANDTE ANMELDUNGEN
- Die vorliegende Anmeldung ist mit der Anmeldung Nr. mit dem Titel "Suspending Execution of a Thread in a Multi-threaded Processor"; der Anmeldung Nr. mit dem Titel "Coherency Techniques for Suspending Execution of a Thread Until a Specified Memory Access Occurs"; Anmeldung Nr. mit dem Titel "Instruction Sequences for Suspending Execution of a Thread Until a Specified Memory Access Occurs", verwandt, die alle am selben Datum wie die vorliegende Anmeldung registriert wurden.
- HINTERGRUND
1 . Technisches Gebiet - Die vorliegende Offenlegung betrifft das Gebiet der Prozessoren und insbesondere Mehrfach-Thread-Prozessoren und Techniken zum Vorübergehenden Suspendieren der Verarbeitung eines Threads in einem Mehrfach-Thread-Prozessor.
- 2. Allgemeiner Stand der Technik
- Ein Mehrfach-Thread-Prozessor kann gleichzeitig mehrere verschiedene Anweisungssequenzen verarbeiten. Ein Hauptmotivierungsfaktor für die Ausführung mehrerer Anweisungsströme in einem einzigen Prozessor ist die resultierende Verbesserung der Prozessorausnutzung. Über die Jahre haben sich parallele Architekturen entwickelt, es ist aber häufig schwierig, genug Parallelität aus einem einzigen Anweisungsstrom zu extrahieren, um die mehrfachen Ausführungseinheiten auszunutzen. Durch Prozessoren mit gleichzeitigen Mehrfach-Threads können mehrere Anweisungsströme gleichzeitig in den verschiedenen Ausführungsbetriebsmitteln ausgeführt werden, um zu versuchen, diese Betriebsmittel besser auszunützen. Mehrfach-Threads können besonders für solche Programme vorteilhaft sein, bei denen es zu Ver zögerungen hoher Latenz kommt oder die häufig auf das Eintreten von Ereignissen warten. Wenn ein Thread darauf wartet, daß eine Task mit hoher Latenz fertig wird, oder auf ein bestimmtes Ereignis, kann ein anderer Thread verarbeitet werden.
- Es wurden viele verschiedene Techniken vorgeschlagen, um zu steuern, wann ein Prozessor zwischen Threads wechselt. Zum Beispiel erkennen bestimmte Prozessoren bestimmte Ereignisse mit langer Latenz, wie zum Beispiel L2-Cache-Fehlspeicherungen und wechseln als Reaktion auf diese erkannten Ereignisse mit langer Latenz Threads. Obwohl die Erkennung solcher Ereignisse mit langer Latenz in bestimmten Umständen effektiv sein kann, erkennt eine solche Ereigniserkennung nur unwahrscheinlich alle Punkte, an denen es effizient sein kann, Threads zu wechseln. Insbesondere kann es sein, daß das Thread-Wechseln auf Ereignisbasis Punkte in einem Programm, an denen Verzögerungen vom Programmierer beabsichtigt sind, nicht erkennt.
- Tatsächlich ist häufig der Programmierer am besten in der Lage, zu bestimmen, wann es effizient wäre, Threads zu wechseln, um verschwenderische Spin-Wait-Schleifen oder andere Betriebsmittel verbrauchende Verzögerungstechniken zu vermeiden. Indem Programmen erlaubt wird, den Thread-Wechsel zu steuern, können Programme also effizienter operieren. Zu diesem Zweck können explizite Programmanweisungen vorteilhaft sein, die sich auf die Thread-Auswahl auswirken. Zum Beispiel wird in der US-Patentanmeldung Nr. 09/489,130, registriert am 21.1.2000, eine „Pause"-Anweisung beschrieben. Durch die Pause-Anweisung kann ein Ausführungs-Thread vorübergehend suspendiert werden, bis entweder ein Zählwert erreicht wird oder bis eine Anweisung die Prozessor-Pipeline durchlaufen hat. Verschiedene Techniken können nützlich sein, indem Programmierern erlaubt wird, die Betriebsmittel eines Mehrfach-Thread-Prozessors effizienter einzuspannen.
- Kurze Beschreibung der Zeichnungen
- Die vorliegende Erfindung wird in den Figuren der beigefügten Zeichnungen als Beispiel und nicht als Beschränkung veranschaulicht.
-
1 zeigt eine Ausführungsform eines Mehrfach-Thread-Prozessors mit einer Überwachungsvorrichtung zum Überwachen von Speicherzugriffen. -
2 ist ein Flußdiagramm der Funktionsweise des Mehrfach-Thread-Prozessors von1 gemäß einer Ausführungsform. -
3 zeigt weitere Einzelheiten einer Ausführungsform eines Mehrfach-Thread-Prozessors. -
4 zeigt Betriebsmittel-Partitionierung-Sharing und -Duplikation gemäß einer Ausführungsform. -
5 ist ein Flußdiagramm des Suspendierens und Wiederaufnehmens der Ausführung eines Threads gemäß einer Ausführungsform. -
6a ist ein Flußdiagramm der Aktivierung und Funktionsweise von Überwachungslogik gemäß einer Ausführungsform. -
6b ist ein Flußdiagramm der Erweiterung der Beobachtbarkeit von Schreiboperationen gemäß einer Ausführungsform. -
7 ist ein Flußdiagramm von Überwachungsoperationen gemäß einer Ausführungsform. -
8 zeigt ein System gemäß einer Ausführungsform. -
9a –9c zeigen verschiedene Ausführungsformen von Softwaresequenzen, die offengelegte Prozessoranweisungen und -techniken verwenden. -
10 zeigt eine alternative Ausführungsform, die es ermöglicht, daß eine überwachte Adresse Cache-gespeichert bleibt. -
11 zeigt die verschiedenen Entwurfsrepräsentationen oder -formate zur Simulation, Emulation und Herstellung eines Entwurfs unter Verwendung der offengelegten Techniken. - Ausführliche Beschreibung
- Die folgende Beschreibung beschreibt Techniken zum Suspendieren der Ausführung eines Threads bis ein spezifizierter Speicherzugriff auftritt. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten, wie zum Beispiel logische Implementierungen, Opcodes, Mittel zum Spezifizieren von Operanden, Implementierungen für Betriebsmittel-Partitionierung/-Sharing/-Duplikation, Typen und Beziehungen von Systemkomponenten und Wahlmöglichkeiten für logische Partitionierung/Integration dargelegt, um ein besseres Verständnis der vorliegenden Erfindung zu ermöglichen. Für Fachleute ist jedoch erkennbar, daß die Erfindung ohne solche spezifischen Einzelheiten ausgeübt werden kann. In anderen Fällen wurden Steuerstrukturen, Schaltung auf Gatterebene und volle Softwareanweisungssequenzen nicht im Einzelnen gezeigt, um die Erfindung nicht zu verdecken. Anhand der angegebenen Beschreibungen werden Durchschnittsfachleute in der Lage sein, ohne übermäßiges Experimentieren geeignete Funktionalität zu implementieren.
- Durch die offengelegten Techniken kann ein Programmierer einen Wartemechanismus in einem Thread implementieren, während andere Threads Verarbeitungsbetriebsmittel einspannen können. Es kann eine Überwachungsvorrichtung eingerichtet werden, so daß ein Thread suspendiert werden kann, bis ein bestimmter Speicherzugriff, wie zum Beispiel eine Schreiboperation in eine spezifizierte Speicherstelle auftritt. Somit kann ein Thread bei einem spezifizierten Ereignis wiederaufgenommen werden, ohne eine prozessorbetriebsmittelverschwendende Routine wie etwa eine Spin-Wait-Schleife auszuführen. Bei bestimmten Ausführungsformen können zuvor dem suspendierten Thread zugeordnete Partitionen freigegeben werden, während der Thread suspendiert ist. Diese und/oder andere offengelegte Techniken können vorteilhafterweise den Gesamtprozessordurchsatz verbessern.
-
1 zeigt eine Ausführungsform eines Mehrfach-Thread-Prozessors100 mit einer Speicherzugriffüberwachungsvorrichtung110 zur Überwachung von Speicherzugriffen. Bei bestimmten Ausführungsformen kann ein „Prozessor" als eine einzige integrierte Schaltung gebildet werden. Bei anderen Ausführungsformen können mehrere integrierte Schaltungen zusammen einen Prozessor bilden, und bei noch anderen Ausführungsformen können Hardware- und Softwareroutinen (z.B. binäre Übersetzungsroutinen) zusammen den Prozessor bilden. Bei der Ausführungsform von1 führt eine Bus-/Speichersteuerung120 einem Frontend130 auszuführende Anweisungen zu. Das Frontend130 lenkt das Abrufen von Anweisungen von verschiedenen Threads gemäß Anweisungszeigern170 . Anweisungszeigerlogik ist vervielfältigt, um mehrere Threads zu unterstützen. - Das Frontend
130 leitet Anweisungen in Thread-partitionierbare Betriebsmittel140 zur weiteren Verarbeitung. Die Thread-partitionierbaren Betriebsmittel140 enthalten logisch getrennte Partitionen, die fest bestimmten Threads zugeordnet sind, wenn mehrere Threads in dem Prozessor100 aktiv sind. Bei einer Ausführungsform enthält jede getrennte Partition nur Anweisungen aus dem Thread, dem dieser Teil fest zugeordnet ist. Die Thread-partitionierbaren Betriebsmittel140 können zum Beispiel Anweisungswarteschlangen enthalten. In einem Einzel-Thread-Modus können die Partitionen der Thread-partitionierbaren Betriebsmittel140 kombiniert werden, um eine einzige große Partition zu bilden, die dem einen Thread fest zugeordnet ist. - Außerdem enthält der Prozessor
100 den vervielfältigten Zustand180 . Der vervielfältigte Zustand180 enthält Zustandsvariablen, die ausreichen, um den Kontext für einen logischen Prozessor zu halten. Mit dem vervielfältigten Zustand180 können mehrere Threads ausgeführt werden, ohne um Zustandsvariablenspeicherung zu konkurrieren. Zusätzlich kann für jeden Thread Registerzuteilungslogik vervielfältigt sein. Die vervielfältigte zustandsbezogene Logik operiert mit den entsprechenden Betriebsmittelpartitionen, um ankommende Anweisungen für die Ausführung vorzubereiten. - Die Thread-partitionierbaren Betriebsmittel
140 leiten Anweisungen zu gemeinsam benutzten Betriebsmitteln150 weiter. Die gemeinsam benutzten Betriebsmittel150 operieren an Anweisungen ungeachtet ihres Ursprungs. Zum Beispiel können Scheduler- und Ausführungseinheiten Thread-unbewußte gemeinsam benutzte Betriebsmittel sein. Die partitionierbaren Betriebsmittel140 können den gemeinsam benutzten Betriebsmitteln150 Anweisungen aus mehreren Threads zuführen, indem zwischen den Threads auf eine faire Weise alterniert wird, die einen fortgesetzten Fortschritt an jedem aktiven Thread bereitstellt. Somit können die gemeinsam benutzten Betriebsmittel die bereitgestellten Anweisungen an dem entsprechenden Zustand ohne Sorge um die Thread-Mischung ausführen. - Den gemeinsam benutzten Betriebsmitteln
150 kann eine weitere Menge von Thread-partitionierbaren Betriebsmitteln160 folgen. Die Thread- partitionierbaren Betriebsmittel160 können Ausscheidungsbetriebsmittel wie zum Beispiel ein Umordnungspuffer und dergleichen enthalten. Folglich können die Thread-partitionierbaren Betriebsmittel160 sicherstellen, daß die Ausführung von Anweisungen aus jedem Thread ordnungsgemäß endet, und daß der entsprechende Zustand für diesen Thread entsprechend aktualisiert wird. - Wie bereits erwähnt, kann es wünschenswert sein, Programmierern eine Technik zur Implementierung der Funktionalität einer Spin-Wait-Schleife bereitzustellen, ohne ein konstantes Abfragen einer Speicherstelle oder sogar Ausführen von Anweisungen zu erfordern. Somit enthält der Prozessor
100 von1 die Speicherzugriffsüberwachungsvorrichtung110 . Die Speicherzugriffsüberwachungsvorrichtung110 kann mit Informationen über einen Speicherzugriffszyklus programmiert werden, für dessen Beobachtung die Überwachungsvorrichtung110 freigegeben werden kann. Folglich enthält die Überwachungsvorrichtung110 ein Überwachungsvorrichtungszyklusinformationsregister112 , das durch Vergleichslogik114 mit aus der Bus-/Speichersteuerung120 empfangenen Buszyklusinformationen verglichen wird. Wenn es zu einer Übereinstimmung kommt, wird ein Thread-Wiederaufnehmen-Signal erzeugt, um einen suspendierten Thread neu zu starten. Aus internen und/oder externen Bussen des Prozessors können Speicherzugriffsinformationen erhalten werden. - Das Überwachungsvorrichtungszyklusinformationsregister
112 kann Einzelheiten enthalten, die die Art des Zyklus und/oder die Adresse, die die Wiederaufnahme eines Threads auslösen sollte, spezifizieren. Bei einer Ausführungsform speichert das Überwachungsvorrichtungszyklusinformationsregister112 eine physikalische Adresse und die Überwachungsvorrichtung wartet auf jegliche Buszyklen, die ein tatsächliches oder potentielles Schreiben in diese physikalische Adresse anzeigen. Ein solcher Zyklus kann in Form eines expliziten Schreibzyklus vorliegen und/oder kann eine Leseoperation für Eigentümerschaft oder ein invalidierender Zyklus durch einen anderen Agenten sein, der versucht, die exklusive Eigentümerschaft einer Cache-speicherbaren Leitung zu übernehmen, so daß er ohne eine externe Bustransaktion auf diese Leitung schreiben kann. In jedem Fall kann die Überwachungsvorrichtung so programmiert werden, daß sie bei verschiedenen Ausführungsformen an verschiedenen Transaktionen ausgelöst wird. - Die Operationen der Ausführungsform von
1 können mit Bezug auf das Flußdiagramm von2 weiter erläutert werden. Bei einer Ausführungsform enthält der Anweisungssatz des Prozessors100 einen MONITOR-Opcode (Anweisung), der die Überwachungstransaktionsinformationen einrichtet. Im Block200 wird der MONITOR-Opcode als Teil der Anweisungssequenz eines ersten Threads (T1) empfangen. Wie im Block210 angegeben, ermöglicht es der Prozessor100 als Reaktion auf den MONITOR-Opcode der Überwachungsvorrichtung110 , Speicherzugriffe für den spezifizierten Speicherzugriff zu überwachen. Der aus lösende Speicherzugriff kann durch einen impliziten oder einen expliziten Operanden spezifiziert werden. Deshalb kann das Ausführen des MONITOR-Opcodes die Überwachungsadresse spezifizieren, da die Überwachungsadresse im Voraus in einem Register oder in einer anderen Speicherstelle als ein impliziter Operand gespeichert werden kann. Wie im Block215 angegeben, prüft die Überwachungsvorrichtung, ob der spezifizierte Zyklus erkannt wurde. Wenn nicht, überwacht die Überwachungsvorrichtung weiter Speicherzugriffe. Wenn der auslösende Zyklus erkannt wird, wird ein Anstehendes-Überwachungsereignis-Anzeiger gesetzt, wie im Block220 angegeben. - Die Ausführung des MONITOR-Opcodes löst die Aktivierung der Überwachungsvorrichtung
110 aus. Die Überwachungsvorrichtung110 kann beginnen, parallel mit anderen Operationen in dem Prozessor zu operieren. Bei einer Ausführungsform richtet die MONITOR-Anweisung selbst nur die Überwachungsvorrichtung110 mit den ordnungsgemäßen Speicherzyklusinformationen ein und aktiviert die Überwachungsvorrichtung110 , ohne Überwachungsereignisse zu entmaskieren. Anders ausgedrückt, können sich bei dieser Ausführungsform nach der Ausführung des MONITOR-Opcodes Überwachungsereignisse ansammeln, was jedoch unerkannt bleiben kann, wenn sie nicht explizit entmaskiert werden. - Im Block
225 wird also das Auslösen eines Speicherwartens als ein separates Ereignis angegeben. Bei bestimmten Ausführungsformen kann ein Opcode für Speicherwarten (MWAIT) verwendet werden, um die Erkennung von Überwachungsereignissen und die Suspendierung von T1 auszulösen. Durch die Verwendung zweier getrennter Anweisungen zum Einrichten und zum Auslösen der Thread-Suspendierung kann ein Programmierer zusätzliche Flexibilität erhalten und es kann ein effizienteres Programmieren möglich werden. Eine alternative Ausführungsform löst das Speicherwarten jedoch von dem ersten Opcode aus, der auch die Überwachungsvorrichtung110 einrichtet. In jedem Fall aktivieren eine oder mehrere Anweisungen die Überwachungsvorrichtung und ermöglichen das Erkennen von Überwachungsereignissen. - Bei Ausführungsformen, bei denen getrennte Opcodes zum Aktivieren der Überwachungsvorrichtung
110 und zum Auslösen des Erkennens von Überwachungsereignissen verwendet werden, kann es vorteilhaft sein, eine Prüfung durchzuführen, um sicherzustellen, daß die Überwachungsvorrichtung aktiviert worden ist, bevor der Thread suspendiert wird, wie im Block230 gezeigt. Durch Prüfen, ob ein Überwachungsereignis bereits ansteht (nicht gezeigt) kann zusätzlich die Suspendierung von T1 vermieden werden und die Operationen können im Block250 fortgesetzt werden. Unter der Annahme, daß die Überwachungsvorrichtung110 freigegeben wurde und keine Überwachungsereignisse bereits anstehen, kann T1 suspendiert werden, wie im Block235 gezeigt. - Mit suspendiertem T1 tritt der Prozessor in einen implementierungsabhängigen Zustand ein, der es anderen Threads ermöglicht, die Prozessorbetriebsmittel besser auszunutzen. Bei bestimmten Ausführungsformen kann der Prozessor einen Teil der Partitionen der partitionierbaren Betriebsmittel
140 und160 , die fest T1 zugeordnet waren, oder alle diese freigeben. Bei anderen Ausführungsformen können verschiedene Permutationen des MONITOR-Opcodes oder von diesem zugeordneten Einstellungen angeben, welche etwaigen Betriebsmittel freigegeben werden. Wenn zum Beispiel ein Programmierer ein kürzeres Warten antizipiert, kann der Thread suspendiert werden, aber seine Betriebsmittelpartitionen aufrechterhalten. Der Durchsatz ist immer noch verbessert, da die gemeinsam benutzten Betriebsmittel während des Thread-Suspendierungszeitraums ausschließlich von anderen Threads verwendet werden können. Wenn ein längeres Warten antizipiert wird, können durch Freigabe aller dem suspendierten Thread zugeordneten Partitionen andere Threads zusätzliche Betriebsmittel erhalten, wodurch der Durchsatz der anderen Threads potentiell erhöht wird. Der zusätzliche Durchsatz wird jedoch zu Lasten des Overheads erhalten, das dem Entfernen und Hinzufügen von Partitionen, wenn Threads suspendiert bzw. wiederaufgenommen werden, zugeordnet ist. - T1 bleibt in einem suspendierten Zustand, bis ein Überwachungsereignis ansteht. Wie bereits besprochen, operiert die Überwachungsvorrichtung
110 unabhängig, um Überwachungsereignisse zu erkennen und zu signalisieren (Blöcke215 –220 ). Wenn der Prozessor im Block240 erkennt, daß ein Überwachungsereignis ansteht, wird T1 wiederaufgenommen, wie im Block250 angegeben. Es muß keine aktive Verarbeitung von Anweisungen in T1 auftreten, damit das Überwachungsereignis T1 aufweckt. Statt dessen bleibt T1 suspendiert und die freigegebene Überwachungsvorrichtung110 signalisiert dem Prozessor ein Ereignis. Der Prozessor wickelt das Ereignis ab, erkennt, daß das Ereignis anzeigt, daß T1 wiederaufgenommen werden soll, und führt die entsprechenden Aktionen zur Wiederaufnahme von T1 durch. - Die Ausführungsformen von
1 und2 liefern also Techniken, durch die ein durch ein Programm suspendierter Thread nach dem Auftreten eines spezifizierten Speicherzugriffs wiederaufgenommen werden kann. Bei einer Ausführungsform bewirken auch andere Erei gnisse, daß71 wiederaufgenommen wird. Zum Beispiel kann ein Interrupt bewirken, daß T1 wiederaufgenommen wird. Durch eine solche Implementierung ist es vorteilhafterweise möglich, daß die Überwachungsvorrichtung insofern weniger als perfekt ist, als sie bestimmte Speicherzugriffe oder andere Bedingungen, die eine Wiederaufnahme des Threads verursachen sollten, verfehlt (nicht erkennt). Folglich kann T1 manchmal unnötigerweise aufgeweckt werden. Eine solche Implementierung verringert jedoch die Wahrscheinlichkeit, daß T1 aufgrund eines verfehlten Ereignisses permanent eingefroren wird, wodurch Hardwareentwurf und -validierung vereinfacht werden. Die unnötigen Erweckungen von T1 können nur eine geringfügige Unannehmlichkeit sein, da eine Schleife konstruiert werden kann, so daß T1 nachprüft, ob die Bedingung, die er erwartet hat, wirklich aufgetreten ist, und er sich nochmals selbst suspendieren kann, wenn dies nicht der Fall ist. - Bei bestimmten Ausführungsformen können die Thread-partitionierbaren Betriebsmittel, die vervielfältigten Betriebsmittel und die gemeinsam benutzten Betriebsmittel verschieden angeordnet sein. Bei bestimmten Ausführungsformen liegen möglicherweise nicht an beiden Enden der gemeinsam benutzten Betriebsmittel partitionierbare Betriebsmittel vor. Bei bestimmten Ausführungsformen können die partitionierbaren Betriebsmittel möglicherweise nicht strikt partitioniert sein, sondern statt dessen bestimmten Anweisungen ermöglichen, Partitionen zu überschreiten, oder Partitionen ermöglichen, eine verschiedene Größe aufzuweisen, abhängig von dem in dieser Partition ausgeführten Thread oder von der Gesamtzahl von ausgeführten Threads. Außerdem können verschiedene Mischungen von Betriebsmitteln als gemeinsam benutzte, duplizierte und partitionierte Betriebsmittel ausgewiesen werden.
-
3 zeigt weitere Einzelheiten einer Ausführungsform eines Mehrfach-Thread-Prozessors. Die Ausführungsform von3 enthält unter anderem mit Kohärenz zusammenhängende Logik350 , eine Implementierung einer Überwachungsvorrichtung310 und eine spezifische Implementierung von Thread-Suspendierungs- und -wiederaufnahmelogik377 . Bei der Ausführungsform von3 enthält eine Busschnittstelle300 eine Bussteuerung340 , Ereigniserkennungslogik345 , eine Überwachungsvorrichtung310 und die mit Kohärenz zusammenhängende Logik350 . - Die Busschnittstelle
300 führt einem Frontend365 Anweisungen zu, das die Erzeugung von Mikrooperanden (uOP) durchführt und aus Makroanweisungen uOPs erzeugt. Die Ausführungsbetriebsmittel370 empfangen uOPS von dem Frontend365 , und Backend-Logik380 zieht die verschiedenen uOPs zurück, nachdem sie ausgeführt wurden. Bei einer Ausführungsform unterstützen das Frontend, das Backend und Ausführungsbetriebsmittel eine Ausführung außerhalb der Reihenfolge. - Mit Bezug auf
5 –9 werden verschiedene Einzelheiten von Operationen weiter besprochen. Kurz gefaßt kann jedoch ein MONITOR-Opcode durch die Busschnittstelle300 in den Prozessor eintreten und durch das Frontend365 für die Ausführung vorbereitet werden. Bei einer Ausführungsform wird zur Ausführung durch die Ausführungsbetriebsmittel370 ein spezieller MONITOR-uOP erzeugt. Der MONITOR-uOP kann von den Ausführungseinheiten ähnlich wie eine Speicheroperation behandelt werden, wobei die Überwachungsadresse durch Adressenübersetzungslogik375 in eine physikalische Adresse übersetzt wird, die der Überwachungsvorrichtung310 zugeführt wird. Die Überwachungsvorrichtung310 kommuniziert mit Thread-Suspendierungs- und -wiederaufnahmelogik377 , um die Wiederaufnahme von Threads zu bewirken. Die Thread-Suspendierungs- und -wiederaufnahmelogik kann Partition und Verschmelzung von Betriebsmitteln durchführen, wenn sich die Anzahl aktiver Threads ändert. - Zum Beispiel zeigt
4 das Partitionieren, Duplizieren und gemeinsame Benutzen von Betriebsmitteln gemäß einer Ausführungsform. Partitionierte Betriebsmittel können gemäß dem Auf und Ab aktiver Threads in der Maschine partitioniert und verschmolzen (zur Wiederverwendung durch andere Threads wieder zusammengeschmolzen) werden. Bei der Ausführungsform von4 umfassen duplizierte Betriebsmittel Anweisungszeigerlogik in dem Anweisungsabrufteil der Pipeline, Registerumbenennungslogik in dem Umbenennungsteil der Pipeline, (nicht gezeigte, aber in verschiedenen Stufen in der Pipeline erwähnte) Zustandsvariablen und eine Interrupt-Steuerung (nicht gezeigt, im allgemeinen asynchron zur Pipeline). Gemeinsam benutzte Betriebsmittel in der Ausführungsform von4 umfassen Scheduler in der Schedule-Stufe der Pipeline, ein Registerpool in den Register-Lese- und -schreibteilen der Pipeline und Ausführungsbetriebsmittel im Ausführungsteil der Pipeline. Zusätzlich können ein Trace-Cache und ein L1-Daten-Cache gemeinsam benutzte Betriebsmittel sein, die gemäß Speicherzugriffen ungeachtet des Thread-Kontexts aufgefüllt werden. Bei anderen Ausführungsformen kann bei Cache-Speicherungsentscheidungen Thread-Kontext berücksichtigt werden. Partitionierte Betriebsmittel in der Ausführungsform von4 umfassen zwei Warteschlangen in Warteschlangenstufen der Pipeline, einen Umordnungspuffer in einer Ausscheidungsstufe der Pipeline und einen Speicherpuffer. Thread-Auswahlmultiplexlogik alterniert zwischen den verschiedenen duplizierten und partitionierten Betriebsmitteln, um beiden Threads einen sinnvollen Zugriff zu gewähren. - Als Beispiel wird angenommen, daß bei der weiteren Beschreibung der Funktionsweise einer Ausführungsform des Prozessors von
3 , das in4 gezeigte Partitionieren, gemeinsame Benutzen und Duplizieren in Verbindung mit der Ausführungsform von3 verwendet wird. Insbesondere werden nun weitere Einzelheiten der Funktionsweise der Ausführungsform von3 mit Bezug auf das Flußdiagramm von5 besprochen. Es wird angenommen, daß der Prozessor in einem Mehrfach-Thread-Modus arbeitet, wobei mindestens zwei Threads aktiv sind. - Im Block
500 empfängt das Frontend365 einen MONITOR-Opcode während der Ausführung eines ersten Threads (T1). Das Frontend365 erzeugt bei einer Ausführungsform einen speziellen Überwachungs-uOP. Der MONITOR-uOP wird zu den Ausführungsbetriebsmitteln370 weitergeleitet. Der Überwachungs-uOP weist eine zugeordnete Adresse auf, die die zu überwachende Adresse angibt (die Überwachungsadresse). Die zugeordnete Adresse kann in Form eines expliziten Operanden oder eines impliziten Operanden vorliegen (d.h. die zugeordnete Adresse ist einem vorbestimmten Register oder einer anderen Speicherstelle zu entnehmen). Durch die zugeordnete Adresse wird insofern die Überwachungsadresse „angegeben", als sie genug Informationen zur Bestimmung der Überwachungsadresse (möglicherweise in Verbindung mit anderen Registern oder Informationen) übermittelt. Zum Beispiel kann die zugeordnete Adresse eine lineare Adresse sein, die eine entsprechende physikalische Adresse aufweist, die die fragliche Überwachungsadresse ist. Alternativ dazu könnte die Überwachungsadresse in einem virtuellen Adressenformat gegeben oder als eine relative Adresse angegeben oder auf andere bekannte oder zweckmäßige Adressenspezifizierungsweisen spezifiziert werden. Wenn virtuelle Adressenoperanden verwendet werden, kann es wünschenswert sein, wenn allgemeine Programmfehler als Break-Ereignisse erkannt werden. - Die Überwachungsadresse kann jede beliebige zweckmäßige Speichereinheit für die Überwachung angeben. Zum Beispiel kann die Überwachungsadresse bei einer Ausführungsform eine Cache-Leitung angeben. Bei alternativen Ausführungsformen kann die Überwachungsadresse jedoch einen Teil einer Cache-Leitung, einen Teil einer spezifischen gewählten Größe oder eine Einheit von Speicher mit verschiedenen Beziehungen zu den Cache-Leitungsgrößen verschiedener Prozessoren oder eine einzige Adresse angeben. Die Überwachungsadresse kann also eine Einheit angeben, die durch den Operanden spezifizierte Daten (und weitere Daten) enthält, oder kann spezifisch eine Adresse für eine gewünschte Dateneinheit angeben.
- Bei der Ausführungsform von
3 wird die Überwachungsadresse der Adressenübersetzungslogik375 zugeführt und zu der Überwachungsvorrichtung310 weitergeleitet und dort in einem Überwachungsadressenregister335 gespeichert. Als Reaktion auf den MONITOR-Opcode wird die Überwachungsvorrichtung310 dann durch die Ausführungsbetriebsmittel370 freigegeben und aktiviert, wie im Block510 angegeben und in6 weiter erläutert. Wie später mit Bezug auf6 weiter besprochen werden wird, kann es vorteilhaft sein, etwaige Speicheroperationen, die nach dem MONITOR-Opcode auftreten, einzusperren, um sicherzustellen, daß Speicheroperationen verarbeitet und deshalb erkannt werden, bevor jegliche Thread-Suspendierung auftritt. Es müssen möglicherweise also bei dieser Ausführungsform als Ergebnis des Aktivierens der Überwachungsvorrichtung310 bestimmte Operationen auftreten, bevor jegliche nachfolgende Anweisungen unternommen werden können. Der Block510 ist jedoch als parallel zu dem Block505 auftretend gezeigt, weil bei dieser Ausführungsform die Überwachungsvorrichtung310 weiter parallel mit anderen Operationen operiert, bis ein Break-Ereignis auftritt, nachdem sie durch den MONITOR-Opcode aktiviert wurde. - Im Block
505 wird in Thread1 ein Opcode für Speicherwarten (MWAIT) empfangen und zur Ausführung weitergeleitet. Die Ausführung des MWAIT-Opcodes entmaskiert Überwachungsereignisse in der Ausführungsform von5 . Als Reaktion auf den MWAIT-Opcode wird wie im Block515 angegeben geprüft, ob ein Überwachungsereignis ansteht. Wenn kein Überwachungsereignis ansteht, wird im Block520 eine Prüfung durchgeführt, um sicherzustellen, daß die Überwachungsvorrichtung aktiv ist. Wenn zum Beispiel ein MWAIT ausgeführt wird, ohne daß zuvor ein MONITOR ausgeführt wurde, wäre die Überwachungsvorrichtung310 nicht aktiv. Wenn entweder die Überwachungsvorrichtung inaktiv ist oder ein Überwachungsereignis ansteht, wird die Ausführung von Thread1 im Block580 fortgesetzt. - Wenn die Überwachungsvorrichtung
310 aktiv ist und kein Überwachungsereignis ansteht, dann wird die Ausführung von Thread1 suspendiert, wie im Block525 angegeben. Die Thread-Suspendierungs-/-wiederaufnahmelogik377 enthält Pipeline-Flush-Logik382 , die die Prozessorpipeline entleert, um alle Anweisungen auszuräumen, wie im Block530 angegeben. - Nachdem die Pipeline entleert wurde, bewirkt die Partitions-/Verschmelzungslogik
385 , daß jegliche exklusiv Thread1 zugeordnete Betriebsmittel zur Verwendung durch andere Threads freigegeben werden, wie im Block535 angegeben. Diese freigegebenen Betriebsmittel werden verschmolzen, um zur Benutzung durch die übrigen aktiven Threads eine Menge größerer Betriebsmittel zu bilden. Zum Beispiel werden mit Bezug auf das Zweithreadbeispiel von4 alle mit Thread1 zusammenhängenden Anweisungen aus beiden Warteschlangen entleert. Jedes Paar von Warteschlange wird dann kombiniert, um dem zweiten Thread eine größere Warteschlange bereitzustellen. Ähnlich werden dem zweiten Thread weitere Register aus dem Registerpool zur Verfügung gestellt, weitere Einträge aus dem Speicherpuffer werden für den zweiten Thread befreit und weitere Einträge in dem Umordnungspuffer werden dem zweiten Thread zur Verfügung gestellt. Im wesentlichen werden diese Strukturen wieder in einzelne festzugeordnete Strukturen der doppelten Größe verwandelt. Natürlich können sich verschiedene Proportionen aus Implementierungen ergeben, die verschieden viele Threads verwenden. - In den Blöcken
540 ,545 und550 werden verschiedene Ereignisse geprüft, um zu bestimmen, ob Thread1 wieder aufgenommen werden soll. Es ist zu beachten, daß diese Prüfungen nicht durch Anweisungen durchgeführt werden, die als Teil von Thread1 ausgeführt werden. Statt dessen werden diese Operationen durch den Prozessor parallel mit seiner Verarbeitung anderer Threads durchgeführt. Wie ausführlicher mit Bezug auf6 besprochen werden wird, prüft die Überwachungsvorrichtung selbst, ob ein Überwachungs-Schreibereignis aufgetreten ist, und zeigt dies durch Setzen eines Anstehendes-Ereignis-Anzeigers an. Der Anstehendes-Ereignis-Anzeiger wird über eine EVENT-Signal der Suspendierungs-/Wiederaufnahmelogik377 zugeführt (z.B. Mikrocode). Mikrocode kann bei einer Ausführungsform das Überwachungsereignis an einer entsprechenden Anweisungsgrenze erkennen (Block540 ), da dieses Ereignis im Block505 durch den MWAIT-Opcode entmaskiert wurde. Die Ereignisdetektionslogik345 kann andere Ereignisse erkennen, wie zum Beispiel Interrupts, die als Break-Ereignisse ausgewiesen sind (Block545 ). Zusätzlich kann ein optionaler Timer verwendet werden, um periodisch aus dem Speicherwartezustand auszutreten, um sicherzustellen, daß der Prozessor nicht aufgrund einer bestimmten Ereignissequenz einfriert (Block550 ). Wenn keine dieser Ereignisse einen Austritt für den Speicherwartezustand signalisieren, bleibt Thread1 suspendiert. - Wenn Thread
1 wieder aufgenommen wird, wird die Thread-/Suspendierungswiederaufnahmelogik377 nach Erkennung des entsprechenden Ereignisses nochmals aktiviert. Wieder wird die Pipeline ausgeräumt, wie im Block560 angegeben, um Anweisungen aus der Pipeline zu entleeren, so daß Betriebsmittel nochmals partitioniert werden können, um den bald aufzuweckenden Thread1 zu berücksichtigen. Im Block570 werden die entsprechenden Betriebsmittel neu partitioniert und Thread1 wird im Block580 wiederaufgenommen. -
6a zeigt weitere Einzelheiten der Aktivierung und Funktionsweise der Überwachungsvorrichtung310 . Im Block600 wird das Frontend-Abrufen für Thread1 gestoppt, um zu verhindern, daß weitere Operationen von Thread1 in die Maschine eintreten. Im Block605 wird der zugeordnete Adressenoperand durch die Adressenübersetzungslogik375 von einer linearen Adresse in eine physikalische Adresse umgesetzt. Im Block610 wird die Beobachtbarkeit von Schreiboperationen an die überwachte Adresse erhöht. Im allgemeinen besteht das Ziel dieser Operation darin, Cache-Agenten dazu zu zwingen, Schreib-Operationen, die sich auf an der Überwachungsadresse gespeicherte Informationen auswirken würden, der Überwachungsvorrichtung310 selbst sichtbar zu machen. Weitere Einzelheiten einer spezifischen Implementierung werden mit Bezug auf6b besprochen. Im Block615 wird die physikalische Adresse zur Überwachung gespeichert, obwohl zu beachten ist, daß diese Adresse früher oder später in dieser Sequenz gespeichert werden kann. - Wie im Block
620 angegeben, wird als nächstes die Überwachungsvorrichtung freigegeben. Die Überwachungsvorrichtung überwacht Buszyklen auf Schreiboperationen in die physikalische Adresse, die die in dem Überwachungsadressenregister335 gespeicherte Überwachungsadresse ist. Weitere Einzelheiten der Überwachungsoperation werden nachfolgend mit Bezug auf7 besprochen. Nachdem die Überwachungsvorrichtung freigegeben wurde, wird wie im Block625 angegeben eine Speichereinsperroperation ausgeführt. Das Speichereinsperren hilft dabei, sicherzustellen, daß alle Speicheroperationen in der Maschine dann verarbeitet werden, wenn der MONITOR-Opcode mit der Ausführung fertig ist. Wenn alle Speicheroperationen aus der Zeit, bevor MONITOR aus der Maschine entleert wird, ist die Wahrscheinlichkeit, daß fälschlich in einen Speicherwartezustand eingetreten wird, reduziert. Die Speichereinsperroperation ist jedoch eine Vorsichtsmaßnahme und kann eine zeitaufwendige Operation sein. - Dieses Speichereinsperren ist optional, weil der MONITOR/MWAIT-Mechanismus dieser Ausführungsform als Mehrfachaustrittsmechanismus ausgelegt wurde. Anders ausgedrückt, können auch verschiedene Ereignisse, wie zum Beispiel bestimmte Interrupts, System- oder Onboard-Timer usw. einen Austritt aus dem Speicherwartezustand verursachen. Es ist also bei dieser Ausführungsform nicht garantiert, daß der einzige Grund für ein Aufwecken des Threads darin besteht, daß sich der überwachte Datenwert verändert hat. Folglich (siehe auch
9a –c ) sollte bei dieser Implementierung Software nachprüfen, ob sich der in dem Speicher gespeicherte bestimmte Wert verändert hat. Bei einer Ausführungsform sind bestimmte Ereignisse, darunter das Setzen von INTR-, NMI- und SMI-Interrupts; Maschinenprüf-Interrupts und Fehler Break-Ereignisse und andere, wie zum Beispiel Powerdown-Ereignisse, sind es nicht. Bei einer Ausführungsform ist das Setzen des A20M-Anschlusses auch ein Break-Ereignis. - Wie im Block
630 gezeigt, prüft die Überwachungsvorrichtung weiter, ob auftretende Buszyklen eine Schreiboperation in die Überwachungsoperation anzeigen oder anzuzeigen scheinen. Wenn ein solcher Buszyklus erkannt wird, wird der Anstehendes-Ereignis-Anzeiger gesetzt, wie im Block635 angegeben. Nach der Ausführung des MWAIT-Opcodes (Block505 ,5 ) wird dieser Anstehendes-Ereignis-Anzeiger als ein Ereignis versorgt und bewirkt Threadwiederaufnahme in den Blöcken560 –580 von5 . Außerdem können Ereignisse, die die Adressenübersetzung verändern, bewirken, daß Thread1 wiederaufgenommen wird. Zum Beispiel können Ereignisse, die bewirken, daß ein Übersetzungs-Look-Aside-Puffer ausgeräumt wird, die Wiederaufnahme von Thread1 auslösen, da die Übersetzung, die vorgenommen wurde, um die Überwachungsadresse aus einer linearen zu einer physikalischen Adresse zu erzeugen, möglicherweise nicht mehr gültig ist. Zum Beispiel können in einem mit der x86-Intel-Architektur kompatiblen Prozessor Schreiboperationen in die Steuerregister CR0, CR3 und CR4 sowie in bestimmte maschinenspezifische Register einen Austritt des Speicherwartezustands verursachen. - Wie bereits erwähnt, zeigt
6b weitere Einzelheiten der Erweiterung der Beobachtbarkeit von Schreiboperationen in die Überwachungsadresse (Block610 ,6a ). Bei einer Ausführungsform räumt der Prozessor die der Überwachungsadresse zugeordnete Cache-Leitung aus allen internen Caches des Prozessors aus, wie im Block650 angegeben. Als Folge dieses Ausräumens erreicht jede nachfolgende Schreiboperation in die Überwachungsadresse die Busschnittstelle300 , wodurch eine Erkennung durch die Überwachungsvorrichtung310 , die in der Busschnittstelle300 enthalten ist, möglich wird. Bei einer Ausführungsform wird der MONITOR-uOP nach einer Cache-Leitungs-Ausräum-CLFLUSH-Anweisung, die eine existierende Anweisung in einem x86-Anweisungssatz ist, modelliert bzw. hat dasselbe Fehlermodell. Der Überwachungs-uOP schreitet durch linear-zu-physikalisch-Übersetzung der Adresse und Ausräumen interner Caches sehr ähnlich wie ein CLFLUSH voran; die Busschnittstelle erkennt jedoch den Unterschied zwischen MONITOR und CLFLUSH und behandelt den MONITOR-uOP entsprechend. - Wie im Block
655 angegeben, aktiviert als nächstes die mit Kohärenz zusammenhängende Logik350 in der Busschnittstelle300 die Leseleitungserzeugungslogik355 , um eine Leseleitungstransaktion auf dem Prozessorbus zu erzeugen. Die Leseleitungstransaktion in die Überwachungsadresse stellt sicher, daß keine anderen Caches in Prozessoren auf dem Bus Daten entweder in einem gemeinsam benutzten oder exklusiven Zustand (entsprechend dem wohlbekannten MESI-Protokoll) an der Überwachungsadresse speichern. Bei anderen Protokollen können andere Zustände verwendet werden; die Transaktion ist jedoch dafür ausgelegt, die Wahrscheinlichkeit zu verringern, daß ein anderer Agent in die Überwachungsadresse schreiben kann, ohne daß die Transaktion durch die Überwachungsvorrichtung310 beobachtbar ist. Anders ausgedrückt, werden Schreiboperationen oder Schreiben-anzeigende Transaktionen nachfolgend rundgesendet, so daß sie durch die Überwachungsvorrichtung erkannt werden können. Nachdem die Leseleitungsoperation fertig ist, beginnt die Überwachungsvorrichtung310 mit der Überwachung von Transaktionen auf dem Bus. - Während zusätzliche Transaktionen auf dem Bus auftreten, bewahrt die mit Kohärenz zusammenhängende Logik weiter die Beobachtbarkeit der Überwachungsadresse, indem versucht wird, zu verhindern, daß Busagenten die Eigentümerschaft der der überwachten Adresse zugeordneten Cache-Leitung übernehmen. Gemäß einem Busprotokoll kann dies dadurch erreicht werden, daß die Treffererzeugungslogik
360 während einer Snoop-Phase jeder Leseoperation der Überwachungsadresse ein HIT#-Signal setzt, wie im Block660 angegeben. Das Setzen von HIT# verhindert, daß sich andere Caches über den gemeinsam benutzten Zustand hinaus in dem MESI-Protokoll zu dem Exklusiv- und dann potentiell zu dem Modifiziert-Zustand bewegen. Wie im Block665 angegeben, können folglich keine Agenten in dem gewählten Kohärenzbereich (der Speicherteil, der kohärent gehalten wird) Daten in dem Modifiziert- oder Exklusiv-Zustand (oder ihren Äquivalenten) aufweisen. Der Prozessor scheint effektiv die Cache-Leitung der Überwachungsadresse Cache-gespeichert zu haben, obwohl sie bei dieser Ausführungsform aus internen Caches ausgeräumt wurde. - Nunmehr mit Bezug auf
7 sind weitere Einzelheiten der dem Block620 in6a zugeordneten Operationen aufgeführt. Insbesondere zeigt7 weitere Einzelheiten der Funktionsweise der Überwachungsvorrichtung310 . Im Block700 empfängt die Überwachungsvorrichtung310 Anforderungs- und Adresseninformationen aus einer Bussteuerung340 für eine Bustransaktion. Wie im Block710 angegeben, untersucht die Überwachungsvorrichtung310 den Buszyklustyp und die betroffene(n) Adresse(n). Insbesondere bestimmt die Zyklusvergleichslogik320 , ob der Buszyklus ein spezifizierter Zyklus ist. Bei einer Ausführungsform vergleicht eine Adressenvergleichsschaltung330 die Bustransaktionsadresse mit der in dem Überwachungsadressenregister335 gespeicherten Überwachungsadresse und Schreibdetektionslogik325 decodiert die Zyklustypinformationen aus der Bussteuerung340 , um zu erkennen, ob eine Schreiboperation aufgetreten ist. Wenn eine Schreiboperation in die Überwachungsadresse auftritt, wird ein Anstehendes-Ereignis-Anzeiger gesetzt, wie im Block720 angegeben. Der Threadsuspendierungs-/-wiederaufnahmelogik377 wird ein Signal (WRITE DETECTED) zugeführt, um das Ereignis zu signalisieren (und es wird unter der Annahme versorgt, daß sie durch Ausführen von MWAIT freigegeben wurde). Als letztes wird die Überwachungsvorrichtung310 angehalten, wie im Block730 angegeben. Das Anhalten der Überwachungsvorrichtung spart Strom, ist aber nicht kritisch, solange falsche Überwachungsereignisse maskiert oder anderweitig nicht erzeugt werden. Auch kann an diesem Punkt der Überwachungsereignisanzeiger zurückgesetzt werden. In der Regel maskiert das Versorgen des Überwachungsereignisses außerdem die Erkennung weiterer Überwachungsereignisse, bis MWAIT nochmals ausgeführt wird. - Im Fall einer Leseoperation auf die Überwachungsadresse wird die mit Kohärenz zusammenhängende Logik
350 aktiviert. Wie im Block740 angegeben, wird ein Signal (wie zum Beispiel HIT#) gesetzt, um zu verhindern, daß ein anderer Agent Eigentümerschaft erhält, die zukünftige Schreiboperationen ohne Kohärenzrundsendungen erlauben würde. Die Überwachungsvorrichtung310 bleibt aktiv und kehrt danach zum Block700 zurück und wird nicht durch eine Leseoperation der Überwachungsadresse beeinflußt. Wenn eine Transaktion weder eine Leseoperation noch eine Schreiboperation in die Überwachungsadresse ist, bleibt die Überwachungsvorrichtung zusätzlich aktiv und kehrt zum Block700 zurück. - Bei bestimmten Ausführungsformen wird die MONITOR-Anweisung so begrenzt, daß nur bestimmte Arten von Zugriffen überwacht werden können. Diese Zugriffe können Zugriffe sein, die als effiziente Programmiertechniken anzeigend gewählt werden, oder können aus anderen Gründen gewählt werden. Zum Beispiel muß bei einer Ausführungsform der Speicherzugriff eine cachebare Speicheroperation in dem Rückschreibespeicher sein, die naturgemäß ausgerichtet ist. Ein naturgemäß ausgerichtetes Element ist ein N-Bitelement, das an einer durch N teilbaren Adresse startet. Als Folge der Verwendung naturgemäß ausgerichteter Elemente muß auf eine einzige Cache-Leitung zugegriffen werden (statt auf zwei Cache-Leitungen, so wie es notwendig wäre, falls Daten über zwei Cache-Leitungen verteilt werden), um in die überwachte Adresse zu schreiben. Folglich kann die Verwendung naturgemäß ausgerichteter Speicheradressen das Beobachten des Busses vereinfachen.
-
8 zeigt eine Ausführungsform eines Systems, die Mehrfach-Thread-Speicher-Wartetechniken verwendet. Bei der Ausführungsform von8 ist eine Menge von N Mehrfach-Thread-Prozessoren (Prozessoren805-1 bis805-N ) an einen Bus802 angekoppelt. Bei anderen Ausführungsformen kann ein einziger Prozessor oder eine Mischung von Mehrfach-Thread-Prozessoren und Einzel-Thread-Prozessoren verwendet werden. Zusätzlich können andere bekannte oder anderweitige verfügbare Systemanordnungen verwendet werden. Zum Beispiel können die Prozessoren in einem Punkt-zu-Punkt-Verfahren verbunden werden, und Teile wie zum Beispiel die Speicherschnittstelle können in jeden Prozessor integriert sein. - Bei der Ausführungsform von
8 ist eine an den Bus angekoppelte Speicherschnittstelle815 an einen Speicher830 und eine Medienschnittstelle angekoppelt. Der Speicher830 enthält ein für Mehrfach-Verarbeitung bereites Betriebssystem835 und Anweisungen für einen ersten Thread840 und Anweisungen für einen zweiten Thread845 . Die Anweisungen830 enthalten gemäß den offengelegten Techniken, von denen verschiedene Versionen in9a –9c gezeigt sind, eine Leerlaufschleife. - Die entsprechende Software zur Durchführung dieser verschiedenen Funktionen kann in einem beliebigen einer Vielfalt maschinenlesbarer Medien bereitgestellt werden. Die Medienschnittstelle
820 liefert eine Schnittstelle zu solcher Software. Die Medienschnittstelle820 kann eine Schnittstelle zu einem Speichermedium (z.B. einem Plattenlaufwerk, einem optischen Laufwerk, einem Bandlaufwerk, einem flüchtigen Speicher, einem nichtflüchtigen Speicher oder dergleichen) oder zu einem Übertragungsmedium (z.B. einer Netzwerkschnittstelle oder einer anderen digitalen oder analogen Kommunikationsschnittstelle) sein. Die Medienschnittstelle820 kann Softwareroutinen aus einem Medium (z.B. dem Speichermedium792 oder dem Übertragungsmedium795 ) lesen. Maschinenlesbare Medien sind Medien, die Informationen zumindest vorübergehend zum Lesen durch eine Maschinenschnittstelle speichern können. Dazu können Signalübertragungen gehören (über Draht, Optik oder Luft als Medium) und/oder physikalische Speichermedien792 , wie zum Beispiel verschiedene Arten von Laufwerk- und Speichergeräten. -
9a zeigt eine Leerlaufschleife gemäß einer Ausführungsform. Im Block905 wird der MONITOR-Befehl mit Adresse1 als seinem Operanden (der Überwachungsadresse) ausgeführt. Im Block910 wird der MWAIT-Befehl in demselben Thread ausgeführt. Wie bereits besprochen, bewirkt die MWAIT-Anweisung, daß der Thread suspendiert wird, vorausgesetzt, daß andere Bedingungen ordnungsgemäß erfüllt sind. Wenn im Block915 ein Break-Ereignis auftritt, geht die Routine zum Block920 weiter, um zu bestimmen, ob sich der an der Überwachungsadresse gespeicherte Wert geändert hat. Wenn sich der Wert an der Überwachungsadresse geändert hat, dann wird die Ausführung des Threads fortgesetzt, wie im Block922 angegeben. Wenn sich der Wert nicht geändert hat, dann ist ein falsches Weckereignis aufgetreten. Das Weckereignis ist insofern falsch, als aus MWAIT ausgetreten wurde, ohne daß eine Speicherschreiboperation in die Überwachungsadresse stattgefunden hat. Wenn sich der Wert nicht verändert hat, kehrt die Schleife zum Block905 zurück, indem die Überwachungsvorrichtung nochmals eingerichtet wird. Durch diese Schleifensoftwareimplementierung wird es möglich, die Überwachungsvorrichtung so auszulegen, daß falsche Weckereignisse zugelassen werden. -
9b zeigt eine alternative Leerlaufschleife. Die Ausführungsform von9b fügt eine zusätzliche Prüfung hinzu, um die Wahrscheinlichkeit, daß die MWAIT-Anweisung eine Schreiboperation in die überwachte Speicheradresse nicht erfaßt, weiter zu reduzieren. Wieder beginnt der Fluß in9b mit der Ausführung der MONITOR-Anweisung mit Adresse1 als ihrem Operanden, wie im Block925 angegeben. Zusätzlich liest die Softwareroutine im Block930 den Speicherwert an der Überwachungsadresse. Im Block935 führt die Software eine Nachprüfung durch, um sicherzustellen, daß sich der Speicherwert nicht von dem Wert geändert hat, wodurch angezeigt wird, daß der Thread in Leerlauf versetzt werden sollte. Wenn sich der Wert geändert hat, wird die Threadausführung fortgesetzt, wie im Block952 angegeben. Wenn sich der Wert nicht geändert hat, wird MWAIT-Anweisung ausgeführt, wie im Block940 angegeben. Wie bereits besprochen, wird der Thread suspendiert, bis ein Break-Ereignis auftritt (Block945 ). Da falsche Break-Ereignisse zugelassen werden, wird jedoch im Block950 nochmals geprüft, ob sich der Wert geändert hat. Wenn sich der Wert nicht geändert hat, kehrt die Schleife zurück, um nochmals die Überwachungsvorrichtung freizugeben, Adresse1 zu verfolgen, indem zu Block925 zurückgekehrt wird. Wenn sich der Wert geändert hat, wird die Ausführung des Threads im Block952 fortgesetzt. Bei bestimmten Ausführungsformen muß die MONITOR-Anweisung nach einem falschen Weckereignis nicht noch mal ausgeführt werden, bevor die MWAIT-Anweisung ausgeführt wird, um den Thread nochmals zu suspendieren. -
9c zeigt ein weiteres Beispiel für eine Softwaresequenz, die MONITOR- und MWAIT-Anweisungen verwendet. In dem Beispiel von9c läuft die Schleife nur dann leer, wenn zwei getrennte Tasks in demselben Thread nichts zu tun haben. An der Arbeitsspeicherstelle WL1 wird ein konstanter Wert CV1 gespeichert, wenn eine erste Routine Arbeit zu leisten hat. Ähnlich wird in WL2 ein zweiter konstanter Wert CV2 gespeichert, wenn eine zweite Routine Arbeit zu leisten hat. Um eine einzige Überwachungsadresse zu verwenden, werden WL1 und WL2 als Speicherstellen in derselben Cache-Leitung gewählt. Als Alternative kann auch eine einzige Arbeitsspeicherstelle verwendet werden, um Statusanzeiger für mehrere Tasks zu speichern. Zum Beispiel können ein oder mehrere Bits in einem einzigen Byte oder in einer anderen Einheit jeweils eine verschiedene Tasks repräsentieren. - Wie im Block
955 angegeben, wird die Überwachungseinrichtung dafür eingerichtet, WL1 zu überwachen. Im Block960 wird geprüft, ob WL1 den konstanten Wert speichert, wodurch angezeigt wird, daß Arbeit zu verrichten ist. Wenn dies der Fall ist, wird die WL1 betreffende Arbeit durchgeführt, wie im Block965 angegeben. Wenn nicht, wird im Block970 geprüft, ob WL2 CV2 speichert, wodurch angezeigt wird, daß Arbeit im Zusammenhang WL2 zu verrichten ist. Wenn dies der Fall ist, wird die mit WL2 zusammenhängende Arbeit verrichtet, wie im Block975 angegeben. Wenn nicht, kann die Schleife dann bestimmen, ob es angemessen ist, einen Stromverwaltungs-Handler aufzurufen (Block980 ). Wenn zum Beispiel ein gewählter Zeitraum abgelaufen ist, kann der logische Prozessor in einen Zustand mit verringerter Stromaufnahme versetzt werden (z.B. in einen einer Menge „C"-Zuständen, die unter der Advanced Configuration and Power Interface (ACPI) Specification, Version 1.0b (oder später), veröffentlicht am 8.2.1999, erhältlich bei www.acpi.info zum Zeitpunkt der Registra tion der vorliegenden Anmeldung definiert werden). Wenn dies der Fall ist, wird im Block985 der Stromverwaltungs-Handler aufgerufen. In jedem der Fälle965 ,975 und985 , in denen Arbeit zu verrichten war, verrichtet der Thread diese Arbeit und kehrt dann in einer Schleife zurück, um dieselben Bestimmungen nach der Einrichtung der Überwachungsvorrichtung im Block955 vorzunehmen. Bei einer alternativen Ausführungsform könnte die Schleife zurück von den Blöcken965 ,975 und985 zu dem Block960 gehen, solange die Überwachungsvorrichtung aktiv bleibt. - Wenn durch die Blöcke
965 ,975 und985 hindurch keine zu verrichtende Arbeit angetroffen wird, dann wird die MWAIT-Anweisung ausgeführt, wie im Block990 angegeben. Der durch MWAIT verursachte Thread-Suspendiert-Zustand wird schließlich verlassen, wenn ein Break-Ereignis auftritt, wie im Block995 angegeben. An diesem Punkt kehrt die Schleife zum Block955 zurück, um die Überwachungsvorrichtung einzurichten und um danach zu bestimmen, ob entweder WL1 oder WL2 angeben, daß Arbeit zu verrichten ist. Wenn keine Arbeit zu verrichten ist (z.B. im Fall eines falschen Aufweckereignisses), kehrt die Schleife im Block990 zu MWAIT zurück und suspendiert den Thread wieder, bis ein Break-Ereignis auftritt. -
10 zeigt eine alternative Ausführungsform eines Prozessors, die es ermöglicht, daß der Überwachungswert in dem L1-Cache Cache-gespeichert bleibt. Der Prozessor in10 enthält Ausführungseinheiten1005 , einen L1-Cache1010 und Schreibkombinierpuffer zwischen dem L1-Cache und einem inklusiven L2-Cache1030 . Die Schreibkombinierpuffer1020 enthalten einen Snoop-Port1044 , der Kohärenz der internen Caches mit anderem Speicher über durch eine Busschnittstelle1040 aus einem Bus1045 empfangene Operationen sicherstellt. Da sich auf Kohärenz auswirkende Transaktionen die Schreibkombinierpuffer1020 über den Snoop-Port1044 erreichen, kann sich eine Überwachungsvorrichtung auf der Ebene des L1-Cache befinden und immer noch ausreichend Informationen empfangen, um zu bestimmen, wann ein Speicherschreibereignis auf dem Bus1045 auftritt. Somit kann die Leitung des Speichers, die der Überwachungsadresse entspricht, in dem L1-Cache gehalten werden. Die Überwachungsvorrichtung kann sowohl Schreiboperationen in den L1-Cache aus den Ausführungseinheiten als auch Schreiboperationen aus dem Bus1045 über den Snoop-Port1044 erkennen. - Eine weitere alternative Ausführungsform unterstützt eine Zweioperandenüberwachungsanweisung. Ein Operand gibt wie zuvor besprochen die Speicheradresse an. Der zweite Operand ist eine Maske, die angibt, welches einer Vielfalt von Ereignissen, die ansonsten kein Break von dem Speicherwartezustand bewirken würden, ein Break von diesem bestimmten Speicherwarten verursachen sollte. Zum Beispiel kann ein Maskenbit angeben, daß maskierte Interrupts zugelassen werden sollten, um ein Break des Speicherwartens zu bewirken, obwohl die Interrupts maskiert sind (z.B. Zulassen eines Aufweckereignisses auch wenn das EFLAGS-Bit IF gesetzt ist, um Interrupts zu maskieren). Es ist anzunehmen, daß dann eine der Anweisungen, die nach dem Break des Speicherwartezustands ausgeführt werden, diesen Interrupt entmaskiert, so daß er versorgt wird. Andere Ereignisse, die ansonsten kein Break des Speicherwartezustands bewirken würden, können freigegeben werden, ein Break des Speicherwartens zu bewirken, oder umgekehrt können Ereignisse, die normalerweise ein Break des Speicherwartezustands bewirken, können gestört werden. Wie bei dem Operanden besprochen, kann der zweite Operand explizit oder implizit sein.
-
11 zeigt verschiedene Entwurfsrepräsentationen oder -formate zur Simulation, Emulation und Herstellung eines Entwurfs unter Verwendung der offengelegten Techniken. Daten, die einen Entwurf repräsentieren, können den Entwurf auf vielerlei Weise repräsentieren. Erstens ist es in Simulationen nützlich, daß die Hardware mit einer Hardwarebeschreibungssprache oder einer anderen funktionalen Beschreibungssprache repräsentiert wird, die im wesentlichen ein computerisiertes Modell dafür liefert, wie die entworfene Hardware erwartungsgemäß arbeiten wird. Das Hardwaremodell1110 kann in einem Speichermedium1100 , wie zum Beispiel einem Computerspeicher, gespeichert werden, so daß das Modell unter Verwendung von Simulationssoftware1120 simuliert werden kann, die eine bestimmte Prüfsuite1130 auf das Hardwaremodell1110 anwendet, um zu bestimmen, ob es tatsächlich wie beabsichtigt funktioniert. Bei bestimmten Ausführungsformen wird die Simulationssoftware nicht aufgezeichnet, erfaßt oder in dem Medium gehalten. - Zusätzlich kann ein Modell auf Schaltungsebene mit Logik und/oder Transistorgattern in einer bestimmten Phase des Entwurfsprozesses erzeugt werden. Dieses Modell kann ähnlich simuliert werden, und zwar manchmal durch eigene Hardwaresimulatoren, die das Modell unter Verwendung programmierbarer Logik bilden. Diese Art von Simulation kann, wenn sie etwas weiter geführt wird, eine Emulationstechnik sein. In jedem Fall ist unkonfigurierbare Hardware eine weitere Ausführungsform, die ein maschinenlesbares Medium beteiligen kann, das ein Modell speichert, das die offengelegten Techniken verwendet.
- Außerdem erreichen die meisten Entwürfe in einer bestimmten Phase eine Ebene von Werten, die die physikalische Plazierung verschiedener Geräte in dem Hardwaremodell repräsentieren. Falls herkömmliche Halbleiterherstellungstechniken verwendet werden, können die das Hardwaremodell repräsentierenden Daten die Daten sein, die die Anwesenheit oder Abwesenheit verschiedener Merkmale auf verschiedenen Maskenschichten für zur Herstellung der integrierten Schaltung verwendete Masken spezifizieren. Wiederum realisieren diese die integrierte Schaltung repräsentierenden Daten insofern die offengelegten Techniken, als die Schaltkreise oder Logik in den Daten simuliert oder hergestellt werden, um diese Techniken durchzuführen.
- Bei jeder Repräsentation des Entwurfs können die Daten in jeder beliebigen Form eines computerlesbaren Mediums gespeichert werden. Eine optische oder elektrische Welle
1160 , die moduliert oder anderweitig erzeugt wird, um solche Informationen zu senden, ein Speicher1150 oder eine magnetische oder optische Speicherung1140 , zum Beispiel eine Platte, können das Medium sein. Die Menge von Bits, die den Entwurf oder den bestimmten Teil des Entwurfs beschreiben, sind ein Artikel, der an und für sich von anderen zum weiteren Entwurf oder zur weiteren Herstellung verkauft oder benutzt werden kann. - Es werden also Techniken zum Suspendieren der Ausführung eines Threads bis ein spezifizierter Speicherzugriff auftritt, offengelegt. Obwohl bestimmte Ausführungsbeispiele beschrieben und in den beigefügten Zeichnungen gezeigt wurden, versteht sich, daß solche Ausführungsformen die allgemeine Erfindung lediglich veranschaulichen und nicht einschränken, und daß die vorliegende Erfindung nicht auf die spezifisch gezeigten und beschriebenen Konstruktionen und Anordnungen beschränkt ist, da Durchschnittsfachleuten bei Durchsicht der vorliegenden Offenlegung verschiedene andere Modifikationen einfallen können.
- Zusammenfassung
- Techniken zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt. Bei einer Ausführungsform enthält ein Prozessor mehrere Ausführungseinheiten, die mehrere Threads ausführen können. Ein erster Thread enthält eine Anweisung, die eine Überwachungsadresse spezifiziert. Suspendierungslogik suspendiert die Ausführung des ersten Threads und eine Überwachungsvorrichtung bewirkt die Wiederaufnahme des ersten Threads als Reaktion auf einen Zugriff auf die spezifizierte Überwachungsadresse.
Claims (69)
- Prozessor, umfassend: mehrere Ausführungseinheiten, um die Ausführung mehrerer Threads zu ermöglichen, einschließlich eines ersten Threads, wobei der erste Thread eine erste Anweisung mit einem zugeordneten Adressenoperanden, der eine Überwachungsadresse angibt, aufweist; Suspendierungslogik zum Suspendieren der Ausführung des ersten Threads; eine Überwachungsvorrichtung zur Bewirkung der Wiederaufnahme des ersten Threads als Reaktion auf einen Speicherzugriff auf die Überwachungsadresse.
- Prozessor nach Anspruch 1, wobei die Überwachungsvorrichtung die Wiederaufnahme als Reaktion auf den Speicherzugriff nur dann bewirken soll, wenn der Speicherzugriff eine tatsächliche oder potentielle Schreiboperation in die Überwachungsadresse angibt.
- Prozessor nach Anspruch 1, wobei die Überwachungsvorrichtung die Wiederaufnahme des ersten Threads als Reaktion auf den Speicherzugriff auf die Überwachungsadresse bewirken soll, wenn der erste Thread suspendiert wird und Überwachungsereignisse entmaskiert werden.
- Prozessor nach Anspruch 3, weiterhin mit Ereignisdetektionslogik, um eine Wiederaufnahme des ersten Threads als Reaktion auf ein von dem Speicherzugriff verschiedenes Ereignis zu bewirken.
- Prozessor nach Anspruch 4, wobei das Ereignis ein Interrupt ist.
- Prozessor nach Anspruch 1, wobei der zugeordnete Adressenoperand ein impliziter Operand ist.
- Prozessor nach Anspruch 6, wobei der zugeordnete Adressenoperand in einem vorbestimmten Register gespeichert wird.
- Prozessor nach Anspruch 1, wobei die Suspendierungslogik die Ausführung des ersten Threads als Reaktion auf eine zweite Anweisung suspendieren soll, wobei die erste Anweisung die Überwachungsvorrichtung freigibt und die zweite Anweisung durch die Überwachungsvorrichtung signalisierte Ereignisse entmaskiert.
- Prozessor nach Anspruch 8, wobei die zweite Anweisung die Überwachungsvorrichtung nur dann freigibt, wenn die erste Anweisung ausgeführt wurde.
- Prozessor nach Anspruch 1, wobei die Suspendierungslogik die Ausführung des ersten Threads als Reaktion auf die erste Anweisung suspendieren soll.
- Prozessor nach Anspruch 8, weiterhin umfassend: Kohärenzlogik zur Verbesserung der Visibilität von Speicheroperationen in die Überwachungsadresse.
- Prozessor nach Anspruch 11, wobei die Kohärenzlogik sicherstellen soll, daß kein Cache in einem Kohärenzbereich Informationen an der überwachten Adresse in einem Modifiziert- oder Exklusiv-Zustand speichert.
- Prozessor nach Anspruch 12, wobei die Kohärenzlogik eine der überwachten Adresse zugeordnete Cache-Leitung aus etwaigen internen Caches ausräumen und eine Busleseleitungstransaktion der der Überwachungsadresse zugeordneten Cache-Leitung zu anderen an den Prozessor angekoppelten Prozessoren erzeugen soll, wobei die Busleseleitungstransaktion eine Mehrphasentransaktion ist, die gemäß einem Pipeline-Busprotokoll bereitgestellt wird.
- Prozessor nach Anspruch 11, wobei die Kohärenzlogik bewirken soll, daß der Prozessor einen Buszyklus erzeugt, um zu verhindern, daß etwaige andere Busagenten eine Schreibtransaktion zu der Überwachungsadresse durchführen, ohne die Schreibtransaktion rund zu senden.
- Prozessor nach Anspruch 14, weiterhin mit Bussteuerlogik zum Setzen eines Treffersignals als Reaktion darauf, daß ein anderer Busagent Informationen an der Überwachungsadresse liest.
- Prozessor nach Anspruch 1, wobei die durch den zugeordneten Adressenoperanden angegebene Überwachungsadresse eine Cache-Leitung, einen Teil einer Cache-Leitung oder eine alternativ bemessene Einheit für Daten an einer durch den zugeordneten Adressenoperanden angegebenen Adresse angibt.
- Prozessor nach Anspruch 1, weiterhin mit Adressenübersetzungslogik zum Übersetzen des zugeordneten Adressenoperanden in die Überwachungsadresse, die eine physikalische Adresse ist.
- Prozessor nach Anspruch 1, wobei die Überwachungsadresse aus der folgenden Menge gewählt wird: eine physikalische Adresse, eine virtuelle Adresse, eine relative Adresse und eine lineare Adresse.
- Prozessor nach Anspruch 1, weiterhin mit mehreren partitionierbaren Betriebsmitteln, die partitioniert werden sollen, um einen Teil jedes partitionierbaren Betriebsmittels jedem aktiven der mehreren Threads fest zuzuordnen, wenn mehrere Threads aktiv sind, wobei die Suspendierungslogik etwaige der mehreren dem ersten Thread fest zugeordneten Partitionen als Reaktion auf das Suspendieren der Ausführung des ersten Threads freigeben soll.
- Prozessor nach Anspruch 19, wobei die Überwachungsvorrichtung bewirken soll, daß die mehreren partitionierbaren Betriebsmittel umpartitioniert werden, um die Ausführung des ersten Threads als Reaktion auf den Speicherzugriff auf die Überwachungsadresse zu ermöglichen.
- Prozessor nach Anspruch 20, wobei die mehreren partitionierbaren Betriebsmittel folgendes umfassen: eine Anweisungsschlange; einen Umordnungspuffer; ein Registerpool; mehrere Speicherpuffer.
- Prozessor nach Anspruch 21, weiterhin umfassend; mehrere duplizierte Betriebsmittel, wobei die mehreren duplizierten Betriebsmittel für jeden der mehreren Threads dupliziert werden, wobei die mehreren duplizierten Betriebsmittel folgendes umfassen: mehrere Prozessorzustandsvariablen; einen Anweisungszeiger; Registerumbenennungslogik.
- Prozessor nach Anspruch 22, weiterhin umfassend: mehrere gemeinsam benutzte Betriebsmittel, wobei die mehreren gemeinsam benutzten Betriebsmittel zur Verwendung durch beliebige der mehreren Threads verfügbar sind, wobei die mehreren gemeinsam benutzten Betriebsmittel folgendes umfassen: die mehreren Ausführungseinheiten; einen Cache; einen Scheduler.
- Prozessor, umfassend: ein Frontend zum Empfangen einer ersten Anweisung aus einem ersten Thread und einer zweiten Anweisung aus dem ersten Thread, wobei die erste Anweisung eine Überwachungsadresse angibt; Ausführungsbetriebsmittel zum Ausführen der ersten Anweisung und der zweiten Anweisung und zum Suspendieren der Ausführung des ersten Threads als Reaktion auf die zweite Anweisung; eine Überwachungsvorrichtung zur Bewirkung der Wiederaufnahme des ersten Threads als Reaktion auf einen Speicherzugriff auf die Überwachungsadresse.
- Prozessor nach Anspruch 24, wobei die erste Anweisung einen Operanden aufweist, der eine lineare Adresse angibt, und wobei der Prozessor weiterhin Adresseübersetzungslogik zum Übersetzen der linearen Adresse umfaßt, um die Überwachungsadresse zu erhalten, die eine physikalische Adresse ist.
- Prozessor nach Anspruch 25, weiterhin umfassend: Kohärenzlogik, um sicherzustellen, daß kein Cache in einem anderen Prozessor, der an den Prozessor angekoppelt ist, Informationen an der Überwachungsadresse in einem Modifiziert- oder Exklusiv-Zustand speichert.
- Prozessor nach Anspruch 26, wobei die Kohärenzlogik als Reaktion auf ein Snooping der Überwachungsadresse durch einen anderen Prozessor ein Treffersignal setzen soll.
- Prozessor, umfassend: Frontendlogik zum Empfangen einer ersten Anweisung aus einem ersten Thread, wobei die erste Anweisung eine zugeordnete Überwachungsadresse aufweist; eine Überwachungsvorrichtung, die so gekoppelt ist, daß sie die Überwachungsadresse empfängt und als Reaktion auf die erste Anweisung Speicherzugriffe auf die Überwachungsadresse überwacht und ein Ereignis signalisiert, wenn eine Zugriff auf die Überwachungsadresse auftritt.
- Prozessor nach Anspruch 28, wobei die Überwachungsvorrichtung das Ereignis als Reaktion auf einen Schreibspeicherzugriff, der in die Überwachungsadresse schreibt, signalisieren soll.
- Prozessor nach Anspruch 28, wobei die Überwachungsvorrichtung das Ereignis als Reaktion auf eine Leitungsinvalidierungstransaktion signalisieren soll.
- Prozessor nach Anspruch 28, weiterhin umfassend: Kohärenzlogik, um sicherzustellen, daß kein Cache in einem anderen Prozessor, der an den Prozessor angekoppelt ist, Informationen an der Überwachungsadresse in einem Modifiziert- oder Exklusiv-Zustand speichert.
- Prozessor nach Anspruch 31, wobei die Kohärenzlogik Logik zu Erzeugung eines internen Cache-Ausräumzyklus und zur Erzeugung einer externen Leseleitungstransaktion umfaßt.
- Prozessor nach Anspruch 28, weiterhin umfassend: Logik zum Entmaskieren von Überwachungsereignissen aus der Überwachungsvorrichtung und zum Suspendieren des ersten Threads als Reaktion auf eine zweite Anweisung.
- Prozessor, umfassend: mehrere Ausführungseinheiten zur Ausführung mehrerer Threads; Frontendlogik zum Empfangen einer Anweisung aus einem ersten Thread der mehreren Threads; Suspendierungslogik zum Suspendieren des ersten Threads als Reaktion auf die Anweisung, wenn keine Überwachungsereignisse anstehen, und zum Zulassen der Ausführung anderer der mehreren Threads.
- Prozessor nach Anspruch 34, wobei die Suspendierungslogik die Erkennung von Überwachungsereignissen, einschließlich bereits anstehender Überwachungsereignisse, freigeben soll.
- Prozessor nach Anspruch 35, wobei der Prozessor mehrere partitionierbare Betriebsmittel umfaßt und wobei die Suspendierungslogik Partitionen jedes der mehreren partitionierbaren Betriebsmittel, die dem ersten Thread zugeordnet sind, zusätzlich zu den Suspendierern des ersten Threads als Reaktion auf die Anweisung freigeben soll.
- Prozessor, umfassend: mehrere Thread-partitionierbare Betriebsmittel zum Empfangen von Anweisungen; mehrere gemeinsam benutzte Betriebsmittel zur Ausführung von Anweisungen in Zusammenarbeit mit den mehreren Thread-partitionierbaren Betriebsmitteln; Thread-Suspendierungslogik zum Suspendieren eines ersten Threads als Reaktion auf eine Anweisung in dem ersten Thread, wobei die Thread-Suspendierungslogik Partitionen der mehreren Thread-partitionierbaren Betriebsmittel, die dem ersten Thread zugeordnet sind, als Reaktion auf das Suspendieren des ersten Threads freigeben soll; eine Überwachungsvorrichtung zum Bewirken, daß als Reaktion auf einen Zugriff auf eine durch den ersten Thread angegebene Speicheradresse der Prozessor die mehreren Thread-partitionierbaren Betriebsmittel neu partitioniert und die Ausführung des ersten Threads wiederaufnimmt.
- Prozessor nach Anspruch 37, wobei der Zugriff auf die Speicheradresse durch eine erste Anweisung spezifiziert wird, die in dem ersten Thread ausgeführt wird, und wobei die Überwachungsvorrichtung entmaskiert wird, um Überwachungsereignisse zu signalisieren, um eine Thread-Wiederaufnahme durch die Anweisung zu bewirken, woraufhin die Thread-Suspendierungslogik den ersten Thread suspendieren soll.
- Vorrichtung, umfassend: Mittel zum Suspendieren eines ersten Threads von mehreren Ausführungsthreads; Mittel zum Erkennen eines Zugriffs auf eine Speicherstelle; Mittel zum Wiederaufnehmen des ersten Threads als Reaktion darauf, daß das Mittel zum Erkennen den Zugriff auf die Speicherstelle erkennt.
- Vorrichtung nach Anspruch 39, wobei das Mittel zum Erkennen des Zugriffs auf die Speicherstelle als Reaktion auf eine in dem ersten Thread ausgeführte erste Anweisung freigegeben wird und wobei das Mittel zum Suspendieren des ersten Threads den ersten Thread als Reaktion auf eine in dem ersten Thread ausgeführte zweite Anweisung suspendiert.
- Vorrichtung nach Anspruch 40, weiterhin umfassend: ein Kohärenzmittel zum Vereinfachen der Erkennung des Zugriffs auf die Speicherstelle.
- Vorrichtung nach Anspruch 41, wobei der Zugriff auf die Speicherstelle ein Schreib- oder ein Invalidierungszugriff ist.
- Vorrichtung nach Anspruch 41, weiterhin umfassend: ein Mittel zum Verschmelzen von Betriebsmitteln als Reaktion darauf, daß das Mittel zum Suspendieren die Ausführung des ersten Threads suspendiert, wobei das Mittel zum Verschmelzen dem ersten Thread zugeordnete partitionierte Betriebsmittel zur Verwendung durch andere der mehreren Threads befreit; ein Mittel zum Partitionieren von Betriebsmitteln zum Umpartitionieren von Betriebsmitteln, um die Wiederaufnahme des ersten Threads zu ermöglichen.
- Verfahren mit den folgenden Schritten: Empfangen eines ersten Opcodes in einem ersten Ausführungsthread, wobei der erste Opcode einen zugeordneten Adressenoperanden aufweist, der eine Überwachungsadresse angibt; Suspendieren des ersten Threads; Erkennen eines Speicherzugriffs auf die Überwachungsadresse; Wiederaufnehmen des ersten Threads als Reaktion auf das Erkennen des Speicherzugriffs auf die Überwachungsadresse.
- Verfahren nach Anspruch 44, wobei das Suspendieren des ersten Threads die folgenden Schritte umfaßt: Empfangen einer zweiten Anweisung in dem ersten Thread; Suspendieren des ersten Threads als Reaktion auf die zweite Anweisung.
- Verfahren nach Anspruch 45, wobei der Speicherzugriff ein Schreibzugriff ist.
- Verfahren nach Anspruch 45, weiterhin mit dem Schritt des Übersetzens des zugeordneten Adressenoperandens in eine überwachte physikalische Adresse, wobei das Erkennen des Speicherzugriffs auf die Überwachungsadresse das Erkennen eines Schreibzugriffs aus die überwachte physikalische Adresse umfaßt.
- Verfahren nach Anspruch 44, weiterhin mit dem folgenden Schritt: Verhindern, daß andere Agenten die Eigentümerschaft von an der Überwachungsadresse gespeicherten Informationen erhalten.
- Verfahren nach Anspruch 44, wobei das Erkennen die folgende Schritte umfaßt: Empfangen von Zyklusinformationen von externen Bustransaktionen; Erkennen von Schreiboperationen in die Überwachungsadresse
- Verfahren nach Anspruch 44, weiterhin mit dem folgenden Schritt: Wiederaufnehmen des ersten Threads als Reaktion auf ein von dem Speicherzugriff auf die Überwachungsadresse verschiedenes Ereignis.
- Verfahren nach Anspruch 50, wobei das Ereignis ein Interrupt ist.
- Verfahren nach Anspruch 51, wobei der Interrupt ein maskierter Interrupt ist, der durch einen zweiten Operanden angegeben wird, um dennoch als ein Break-Ereignis betrachtet zu werden.
- Verfahren mit den folgenden Schritten: Empfangen eines ersten Opcodes, der in einem ersten Ausführungsthread ausgeführt wird; Übersetzen einer dem ersten Opcode zugeordneten linearen Adresse in eine physikalische Adresse; Ausführen einer Bustransaktion durch einen überwachenden Busagenten, um sicherzustellen, daß kein anderer Busagent ausreichende Eigentümerschaft von der physikalischen Adresse zugeordneten Daten besitzt, um es einem anderen Busagenten zu erlauben, Daten zu modifizieren, ohne den überwachenden Busagenten zu informieren; Überwachen auf einen Schreibzugriff auf die physikalische Adresse; Signalisieren eines Treffers, wenn ein anderer Busagent die physikalische Adresse liest; Empfangen eines zweiten Opcodes in dem ersten Ausführungsthreads; Suspendieren des ersten Ausführungsthreads und Freigeben des Erkennens eines Überwachungsereignisses als Reaktion auf den zweiten Opcode; Wiederaufnehmen des ersten Threads, wenn ein Schreibzugriff auftritt; Wiederaufnehmen des Ausführens des ersten Threads als Reaktion auf ein beliebiges einer ersten Menge von Ereignissen; Ignorieren einer zweiten Menge von Ereignissen.
- Verfahren nach Anspruch 53, wobei das Suspendieren des ersten Ausführungsthreads als Reaktion auf den zweiten Opcode die folgenden Schritte umfaßt: Prüfen, ob das Überwachungsereignis ansteht; Prüfen, ob eine Überwachungsvorrichtung aktiv ist; wenn die Überwachungsvorrichtung aktiv ist und kein Überwachungsereignis ansteht, Eintreten in einen Erster-Thread-Suspendiert-Zustand.
- Verfahren nach Anspruch 54, wobei der Eintritt in den Erster-Thread-Suspendiert-Zustand die folgenden Schritte umfaßt: Freigeben mehrerer Register in einem Registerpool; Freigeben mehrerer Anweisungswarteschlangeneinträge in einer Anweisungswarteschlange; Freigeben mehrerer Speicherpuffereinträge in einem Speicherpuffer; Freigeben mehrerer Umordnungspuffereinträge in einem Umordnungspuffer.
- System, umfassend; einen Speicher zum Speichern einer ersten Anweisung auf einem ersten Thread, wobei die erste Anweisung einen zugeordneten Adressenoperanden aufweist, der eine Überwachungsadresse angibt; einen an dem Speicher angekoppelten ersten Prozessor, wobei der erste Prozessor einer Überwachungsvorrichtung ermöglichen soll, Speichertransaktionen zu überwachen, um als Reaktion auf die erste Anweisung einen Speicherzugriff auf die Überwachungsadresse zu erkennen und als Reaktion auf den Speicherzugriff auf die Überwachungsadresse die Wiederaufnahme des ersten Threads zu bewirken.
- System nach Anspruch 56, wobei der Speicher eine zweite Anweisung aus dem ersten Thread speichern soll und wobei der erste Prozessor den ersten Thread als Reaktion auf die zweite Anweisung suspendieren soll.
- System nach Anspruch 57, wobei die Überwachungsvorrichtung als Reaktion auf das Auftreten des Speicherzugriffs einen Anstehendes-Überwachungsereignis-Anzeiger setzen soll, wobei der Anstehendes-Überwachungsereignis-Anzeiger bewirken soll, daß der erste Prozessor einen Thread wiederaufnimmt, nachdem er durch die zweite Anweisung entmaskiert wurde.
- System nach Anspruch 56, wobei der erste Prozessor einen ersten Cache enthält, wobei das System weiterhin folgendes umfaßt: einen zweiten Prozessor mit einem zweiten Cache, wobei der erste Prozessor eine Bustransaktion zu dem zweiten Prozessor steuert, um den zweiten Prozessor dazu zu zwingen, etwaige Transaktionen, die eine Veränderung von an der Überwachungsadresse in dem zweiten Cache gespeicherten Daten ermöglichen, zu dem ersten Prozessor rund zu senden.
- System nach Anspruch 59, wobei der erste Prozessor ein Signal setzen soll, das verhindert, daß der zweite Prozessor Daten an der Überwachungsadresse in einen Zustand Cache-speichert, der es dem zweiten Prozessor ermöglichen würde, an der Überwachungsadresse in dem zweiten Cache gespeicherte Daten zu modifizieren, ohne rund zu senden, daß eine Modifikation stattfindet.
- System nach Anspruch 60, wobei das Signal einen Cache-Treffer angibt und verhindert, daß der zweite Cache Daten an der Überwachungsadresse in einen Exklusiv-Zustand speichert.
- System nach Anspruch 58, wobei der erste Prozessor weiterhin den ersten Thread wiederaufnehmen soll, wenn ein alternatives Ereignis auftritt.
- System nach Anspruch 62, wobei das alternative Ereignis ein Interrupt ist.
- System nach Anspruch 62, wobei der in dem Speicher gespeicherte erste Thread eine Schleife enthält, wobei die Schleife die erste Anweisung und die zweite Anweisung sowie eine Prüfung enthält, um zu bestimmen, ob sich Daten an der Überwachungsadresse verändert haben, und um die Schleife neu zu starten, wenn Daten an der Überwachungsadresse unverändert bleiben.
- Artikel mit einem computerlesbaren Medium, das einen Prozessor repräsentiert, umfassend: mehrere Ausführungseinheiten, um die Ausführung mehrerer Threads zu ermöglichen, einschließlich eines ersten Threads, wobei der erste Thread eine erste Anweisung mit einem zugeordneten Adressenoperanden, der eine Überwachungsadresse angibt, aufweist; Suspendierungslogik zum Suspendieren der Ausführung des ersten Threads; eine Überwachungsvorrichtung zur Bewirkung der Wiederaufnahme des ersten Threads als Reaktion auf einen Speicherzugriff auf die Überwachungsadresse.
- Artikel nach Anspruch 65, wobei die Überwachungsvorrichtung die Wiederaufnahme als Reaktion auf den Speicherzugriff nur dann bewirken soll, wenn der Speicherzugriff eine tatsächliche oder potentielle Schreiboperation in die Überwachungsadresse angibt.
- Artikel nach Anspruch 65, wobei die Überwachungsvorrichtung die Wiederaufnahme des ersten Threads als Reaktion auf den Speicherzugriff auf die Überwachungsadresse bewirken soll, wenn der erste Thread suspendiert wird und Überwachungsereignisse entmaskiert werden.
- Artikel nach Anspruch 65, wobei der Prozessor weiterhin Ereignisdetektionslogik umfaßt, um die Wiederaufnahme des ersten Threads als Reaktion auf ein von dem Speicherzugriff verschiedenes Ereignis zu bewirken.
- Artikel nach Anspruch 68, wobei der Prozessor weiterhin mehrere partitionierbare Betriebsmittel umfaßt, die partitioniert werden sollen, um einen Teil jedes partitionierbaren Betriebsmittels jedem aktiven der mehreren Threads fest zuzuordnen, wenn mehrere Threads aktiv sind, wobei die Suspendierungslogik alle dem ersten Thread fest zugeordneten Partitionen als Reaktion auf das Suspendieren der Ausführung des ersten Threads freigeben soll.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/039,579 | 2001-12-31 | ||
US10/039,579 US7363474B2 (en) | 2001-12-31 | 2001-12-31 | Method and apparatus for suspending execution of a thread until a specified memory access occurs |
PCT/US2002/039786 WO2003058447A2 (en) | 2001-12-31 | 2002-12-11 | A method and apparatus for suspending execution of a thread until a specified memory access occurs |
Publications (2)
Publication Number | Publication Date |
---|---|
DE10297596T5 true DE10297596T5 (de) | 2004-12-02 |
DE10297596B4 DE10297596B4 (de) | 2017-09-07 |
Family
ID=21906217
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10297856.5A Expired - Lifetime DE10297856B4 (de) | 2001-12-31 | 2002-12-11 | Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt |
DE10297596.5T Expired - Lifetime DE10297596B4 (de) | 2001-12-31 | 2002-12-11 | Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE10297856.5A Expired - Lifetime DE10297856B4 (de) | 2001-12-31 | 2002-12-11 | Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt |
Country Status (11)
Country | Link |
---|---|
US (2) | US7363474B2 (de) |
JP (2) | JP4601958B2 (de) |
KR (1) | KR100814993B1 (de) |
CN (1) | CN100383740C (de) |
AU (1) | AU2002364557A1 (de) |
DE (2) | DE10297856B4 (de) |
GB (1) | GB2400947B (de) |
HK (1) | HK1066883A1 (de) |
RU (1) | RU2308754C2 (de) |
TW (2) | TWI322959B (de) |
WO (1) | WO2003058447A2 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005003971A2 (en) * | 2003-06-27 | 2005-01-13 | Intel Corporation | Queued locks using monitor-memory wait |
Families Citing this family (138)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7127561B2 (en) * | 2001-12-31 | 2006-10-24 | Intel Corporation | Coherency techniques for suspending execution of a thread until a specified memory access occurs |
US7653912B2 (en) * | 2003-05-30 | 2010-01-26 | Steven Frank | Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations |
US8984199B2 (en) * | 2003-07-31 | 2015-03-17 | Intel Corporation | Inter-processor interrupts |
US20050108711A1 (en) * | 2003-11-13 | 2005-05-19 | Infineon Technologies North America Corporation | Machine instruction for enhanced control of multiple virtual processor systems |
US7310722B2 (en) * | 2003-12-18 | 2007-12-18 | Nvidia Corporation | Across-thread out of order instruction dispatch in a multithreaded graphics processor |
WO2005072307A2 (en) * | 2004-01-22 | 2005-08-11 | University Of Washington | Wavescalar architecture having a wave order memory |
US7490218B2 (en) * | 2004-01-22 | 2009-02-10 | University Of Washington | Building a wavecache |
US7552042B1 (en) | 2004-01-30 | 2009-06-23 | Xilinx, Inc. | Method for message processing on a programmable logic device |
US7770179B1 (en) * | 2004-01-30 | 2010-08-03 | Xilinx, Inc. | Method and apparatus for multithreading on a programmable logic device |
US7823162B1 (en) | 2004-01-30 | 2010-10-26 | Xilinx, Inc. | Thread circuits and a broadcast channel in programmable logic |
US8984517B2 (en) * | 2004-02-04 | 2015-03-17 | Intel Corporation | Sharing idled processor execution resources |
US7581214B2 (en) * | 2004-04-15 | 2009-08-25 | Intel Corporation | Live set transmission in pipelining applications |
JP4376692B2 (ja) * | 2004-04-30 | 2009-12-02 | 富士通株式会社 | 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ |
US8607241B2 (en) | 2004-06-30 | 2013-12-10 | Intel Corporation | Compare and exchange operation using sleep-wakeup mechanism |
US7206903B1 (en) * | 2004-07-20 | 2007-04-17 | Sun Microsystems, Inc. | Method and apparatus for releasing memory locations during transactional execution |
US8074030B1 (en) | 2004-07-20 | 2011-12-06 | Oracle America, Inc. | Using transactional memory with early release to implement non-blocking dynamic-sized data structure |
US7703098B1 (en) | 2004-07-20 | 2010-04-20 | Sun Microsystems, Inc. | Technique to allow a first transaction to wait on condition that affects its working set |
KR101051703B1 (ko) | 2004-08-09 | 2011-07-25 | 삼성전자주식회사 | 서스펜드/리쥼 기능을 갖는 집적 회로 카드 및 집적 회로카드 시스템 |
US7434009B2 (en) * | 2004-09-30 | 2008-10-07 | Freescale Semiconductor, Inc. | Apparatus and method for providing information to a cache module using fetch bursts |
US7257679B2 (en) | 2004-10-01 | 2007-08-14 | Advanced Micro Devices, Inc. | Sharing monitored cache lines across multiple cores |
US7313673B2 (en) * | 2005-06-16 | 2007-12-25 | International Business Machines Corporation | Fine grained multi-thread dispatch block mechanism |
US9003421B2 (en) * | 2005-11-28 | 2015-04-07 | Intel Corporation | Acceleration threads on idle OS-visible thread execution units |
KR100763200B1 (ko) | 2006-02-24 | 2007-10-04 | 삼성전자주식회사 | 인터럽트 가능한 스레드 동기화 방법 및 장치 |
KR100771877B1 (ko) | 2006-07-21 | 2007-11-01 | 삼성전자주식회사 | 오동작 방지용 커맨드 세트 프로토콜 처리 방법 및 장치 |
US20080022079A1 (en) * | 2006-07-24 | 2008-01-24 | Archer Charles J | Executing an allgather operation with an alltoallv operation in a parallel computer |
US8443341B2 (en) * | 2006-11-09 | 2013-05-14 | Rogue Wave Software, Inc. | System for and method of capturing application characteristics data from a computer system and modeling target system |
US8239657B2 (en) | 2007-02-07 | 2012-08-07 | Qualcomm Incorporated | Address translation method and apparatus |
US8898438B2 (en) * | 2007-03-14 | 2014-11-25 | XMOS Ltd. | Processor architecture for use in scheduling threads in response to communication activity |
US7937532B2 (en) * | 2007-03-30 | 2011-05-03 | Intel Corporation | Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine |
JP4420055B2 (ja) | 2007-04-18 | 2010-02-24 | 日本電気株式会社 | マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法 |
US8161480B2 (en) | 2007-05-29 | 2012-04-17 | International Business Machines Corporation | Performing an allreduce operation using shared memory |
EP2159687B1 (de) * | 2007-06-20 | 2012-12-05 | Fujitsu Limited | Arithmetische einheit |
US20090006663A1 (en) * | 2007-06-27 | 2009-01-01 | Archer Charles J | Direct Memory Access ('DMA') Engine Assisted Local Reduction |
JP2009110209A (ja) * | 2007-10-29 | 2009-05-21 | Panasonic Corp | 演算処理装置、プロセッサ、プログラム変換装置およびプログラム |
US8225120B2 (en) * | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
US8341635B2 (en) | 2008-02-01 | 2012-12-25 | International Business Machines Corporation | Hardware wake-and-go mechanism with look-ahead polling |
US8452947B2 (en) * | 2008-02-01 | 2013-05-28 | International Business Machines Corporation | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms |
US8732683B2 (en) * | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
US8312458B2 (en) * | 2008-02-01 | 2012-11-13 | International Business Machines Corporation | Central repository for wake-and-go mechanism |
US8516484B2 (en) * | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8640141B2 (en) * | 2008-02-01 | 2014-01-28 | International Business Machines Corporation | Wake-and-go mechanism with hardware private array |
US8316218B2 (en) | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
US8250396B2 (en) * | 2008-02-01 | 2012-08-21 | International Business Machines Corporation | Hardware wake-and-go mechanism for a data processing system |
US8788795B2 (en) * | 2008-02-01 | 2014-07-22 | International Business Machines Corporation | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors |
US8145849B2 (en) | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8880853B2 (en) * | 2008-02-01 | 2014-11-04 | International Business Machines Corporation | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock |
US8386822B2 (en) * | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8171476B2 (en) * | 2008-02-01 | 2012-05-01 | International Business Machines Corporation | Wake-and-go mechanism with prioritization of threads |
US8612977B2 (en) * | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8422402B2 (en) | 2008-04-01 | 2013-04-16 | International Business Machines Corporation | Broadcasting a message in a parallel computer |
US8281053B2 (en) | 2008-07-21 | 2012-10-02 | International Business Machines Corporation | Performing an all-to-all data exchange on a plurality of data buffers by performing swap operations |
CN101788922B (zh) * | 2009-01-22 | 2013-12-25 | 国际商业机器公司 | 基于辅助线程实现事务存储系统的方法和装置 |
KR101581311B1 (ko) * | 2009-03-11 | 2015-12-31 | 삼성전자주식회사 | 플래시 메모리 장치 및 그 제어 방법 |
US8082315B2 (en) * | 2009-04-16 | 2011-12-20 | International Business Machines Corporation | Programming idiom accelerator for remote update |
US8886919B2 (en) | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
US8230201B2 (en) * | 2009-04-16 | 2012-07-24 | International Business Machines Corporation | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system |
US8145723B2 (en) * | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming idiom accelerator |
US8156275B2 (en) | 2009-05-13 | 2012-04-10 | Apple Inc. | Power managed lock optimization |
US8364862B2 (en) * | 2009-06-11 | 2013-01-29 | Intel Corporation | Delegating a poll operation to another device |
CN102460376B (zh) * | 2009-06-26 | 2016-05-18 | 英特尔公司 | 无约束事务存储器(utm)系统的优化 |
EP2284693A1 (de) * | 2009-08-03 | 2011-02-16 | C.R.F. Società Consortile per Azioni | Wartebefehl |
US8695002B2 (en) * | 2009-10-20 | 2014-04-08 | Lantiq Deutschland Gmbh | Multi-threaded processors and multi-processor systems comprising shared resources |
US20110173420A1 (en) * | 2010-01-08 | 2011-07-14 | International Business Machines Corporation | Processor resume unit |
US8447960B2 (en) * | 2010-01-08 | 2013-05-21 | International Business Machines Corporation | Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition |
US8464035B2 (en) * | 2009-12-18 | 2013-06-11 | Intel Corporation | Instruction for enabling a processor wait state |
US9424087B2 (en) | 2010-04-29 | 2016-08-23 | International Business Machines Corporation | Optimizing collective operations |
US8949577B2 (en) | 2010-05-28 | 2015-02-03 | International Business Machines Corporation | Performing a deterministic reduction operation in a parallel computer |
CN102483708B (zh) * | 2010-07-07 | 2016-01-20 | 松下电器产业株式会社 | 处理器 |
US8776081B2 (en) | 2010-09-14 | 2014-07-08 | International Business Machines Corporation | Send-side matching of data communications messages |
US8566841B2 (en) * | 2010-11-10 | 2013-10-22 | International Business Machines Corporation | Processing communications events in parallel active messaging interface by awakening thread from wait state |
US8713362B2 (en) | 2010-12-01 | 2014-04-29 | International Business Machines Corporation | Obviation of recovery of data store consistency for application I/O errors |
US8694821B2 (en) * | 2010-12-03 | 2014-04-08 | International Business Machines Corporation | Generation of standby images of applications |
CN102736945B (zh) * | 2011-03-31 | 2016-05-18 | 国际商业机器公司 | 一种运行应用程序的多个实例的方法和系统 |
CN102760176B (zh) * | 2011-04-29 | 2015-02-11 | 无锡江南计算技术研究所 | 硬件事务级仿真方法、引擎及系统 |
US8893083B2 (en) | 2011-08-09 | 2014-11-18 | International Business Machines Coporation | Collective operation protocol selection in a parallel computer |
US8910178B2 (en) | 2011-08-10 | 2014-12-09 | International Business Machines Corporation | Performing a global barrier operation in a parallel computer |
US8667501B2 (en) | 2011-08-10 | 2014-03-04 | International Business Machines Corporation | Performing a local barrier operation |
US8868843B2 (en) | 2011-11-30 | 2014-10-21 | Advanced Micro Devices, Inc. | Hardware filter for tracking block presence in large caches |
US9798548B2 (en) | 2011-12-21 | 2017-10-24 | Nvidia Corporation | Methods and apparatus for scheduling instructions using pre-decode data |
CN106909444B (zh) | 2011-12-22 | 2021-01-12 | 英特尔公司 | 用于指定应用线程性能状态的指令的指令处理装置及相关方法 |
JP5819184B2 (ja) | 2011-12-28 | 2015-11-18 | 富士通株式会社 | 情報処理装置及び情報処理装置の制御方法 |
US20150143071A1 (en) * | 2011-12-30 | 2015-05-21 | Ravi L. Sahita | Memory event notification |
US8706847B2 (en) | 2012-02-09 | 2014-04-22 | International Business Machines Corporation | Initiating a collective operation in a parallel computer |
US9495135B2 (en) | 2012-02-09 | 2016-11-15 | International Business Machines Corporation | Developing collective operations for a parallel computer |
EP2831721B1 (de) | 2012-03-30 | 2020-08-26 | Intel Corporation | Kontextumschaltungsmechanismus für einen prozessorkern mit einem universal-cpu-kern und einem fest gekoppelten beschleuniger |
US9218288B2 (en) | 2012-06-15 | 2015-12-22 | International Business Machines Corporation | Monitoring a value in storage without repeated storage access |
US9256455B2 (en) * | 2012-11-20 | 2016-02-09 | Red Hat Isreal, Ltd. | Delivery of events from a virtual machine to host CPU using memory monitoring instructions |
US9563425B2 (en) | 2012-11-28 | 2017-02-07 | Intel Corporation | Instruction and logic to provide pushing buffer copy and store functionality |
US9141454B2 (en) * | 2012-12-27 | 2015-09-22 | Intel Corporation | Signaling software recoverable errors |
US10705961B2 (en) | 2013-09-27 | 2020-07-07 | Intel Corporation | Scalably mechanism to implement an instruction that monitors for writes to an address |
WO2015075550A2 (en) * | 2013-11-25 | 2015-05-28 | Marvell World Trade Ltd. | Systems and methods for loop suspension in java programming |
US9218185B2 (en) | 2014-03-27 | 2015-12-22 | International Business Machines Corporation | Multithreading capability information retrieval |
US9921848B2 (en) | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9804846B2 (en) | 2014-03-27 | 2017-10-31 | International Business Machines Corporation | Thread context preservation in a multithreading computer system |
US9354883B2 (en) | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US10102004B2 (en) | 2014-03-27 | 2018-10-16 | International Business Machines Corporation | Hardware counters to track utilization in a multithreading computer system |
US9417876B2 (en) | 2014-03-27 | 2016-08-16 | International Business Machines Corporation | Thread context restoration in a multithreading computer system |
US9594660B2 (en) | 2014-03-27 | 2017-03-14 | International Business Machines Corporation | Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores |
US9552033B2 (en) | 2014-04-22 | 2017-01-24 | Qualcomm Incorporated | Latency-based power mode units for controlling power modes of processor cores, and related methods and systems |
US9778949B2 (en) * | 2014-05-05 | 2017-10-03 | Google Inc. | Thread waiting in a multithreaded processor architecture |
US9304702B2 (en) | 2014-05-29 | 2016-04-05 | Netapp, Inc. | System and method for parallelized performance data collection in a computing system |
US9477521B2 (en) | 2014-05-29 | 2016-10-25 | Netapp, Inc. | Method and system for scheduling repetitive tasks in O(1) |
US9256477B2 (en) * | 2014-05-29 | 2016-02-09 | Netapp, Inc. | Lockless waterfall thread communication |
GB2529899B (en) * | 2014-09-08 | 2021-06-23 | Advanced Risc Mach Ltd | Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads |
KR101979697B1 (ko) * | 2014-10-03 | 2019-05-17 | 인텔 코포레이션 | 어드레스로의 기입들을 모니터링하는 명령어를 구현하는 스케일가능형 메커니즘 |
US11080064B2 (en) | 2014-10-28 | 2021-08-03 | International Business Machines Corporation | Instructions controlling access to shared registers of a multi-threaded processor |
US9575802B2 (en) | 2014-10-28 | 2017-02-21 | International Business Machines Corporation | Controlling execution of threads in a multi-threaded processor |
JP6314246B2 (ja) * | 2014-11-11 | 2018-04-18 | ルネサスエレクトロニクス株式会社 | 命令実行制御システム及び命令実行制御方法 |
WO2016088220A1 (ja) * | 2014-12-03 | 2016-06-09 | 株式会社日立製作所 | 計算機及び論理プロセッサの制御方法 |
CN105843592A (zh) * | 2015-01-12 | 2016-08-10 | 芋头科技(杭州)有限公司 | 一种在预设嵌入式系统中实现脚本操作的系统 |
GB2537115B (en) * | 2015-04-02 | 2021-08-25 | Advanced Risc Mach Ltd | Event monitoring in a multi-threaded data processing apparatus |
US10908909B2 (en) * | 2015-06-09 | 2021-02-02 | Optimum Semiconductor Technologies Inc. | Processor with mode support |
KR102476357B1 (ko) | 2015-08-06 | 2022-12-09 | 삼성전자주식회사 | 클럭 관리 유닛과 이를 적용하는 집적 회로 및 시스템 온 칩 및 그 동작 방법 |
US9916178B2 (en) * | 2015-09-25 | 2018-03-13 | Intel Corporation | Technologies for integrated thread scheduling |
GB2544994A (en) * | 2015-12-02 | 2017-06-07 | Swarm64 As | Data processing |
CN105677487B (zh) * | 2016-01-12 | 2019-02-15 | 浪潮通用软件有限公司 | 一种控制资源占用的方法及装置 |
US11023233B2 (en) | 2016-02-09 | 2021-06-01 | Intel Corporation | Methods, apparatus, and instructions for user level thread suspension |
US11061730B2 (en) * | 2016-11-18 | 2021-07-13 | Red Hat Israel, Ltd. | Efficient scheduling for hyper-threaded CPUs using memory monitoring |
CN108255587B (zh) * | 2016-12-29 | 2021-08-24 | 展讯通信(上海)有限公司 | 一种同步多线程处理器 |
US10353817B2 (en) * | 2017-03-07 | 2019-07-16 | International Business Machines Corporation | Cache miss thread balancing |
US10275254B2 (en) | 2017-03-08 | 2019-04-30 | International Business Machines Corporation | Spin loop delay instruction |
TWI648620B (zh) * | 2017-08-07 | 2019-01-21 | 慧榮科技股份有限公司 | 記憶體裝置以及操作指令錯誤處理方法 |
KR102043538B1 (ko) * | 2018-01-18 | 2019-11-11 | 주식회사 알티스트 | 파티셔닝을 적용하여 프로세스를 모니터링하는 컴퓨팅 시스템 |
CN109508229A (zh) * | 2018-09-19 | 2019-03-22 | 安徽慧视金瞳科技有限公司 | 一种多点同时绘制的匹配方法 |
US11068407B2 (en) | 2018-10-26 | 2021-07-20 | International Business Machines Corporation | Synchronized access to data in shared memory by protecting the load target address of a load-reserve instruction |
US10884740B2 (en) | 2018-11-08 | 2021-01-05 | International Business Machines Corporation | Synchronized access to data in shared memory by resolving conflicting accesses by co-located hardware threads |
US11119781B2 (en) | 2018-12-11 | 2021-09-14 | International Business Machines Corporation | Synchronized access to data in shared memory by protecting the load target address of a fronting load |
US11086672B2 (en) | 2019-05-07 | 2021-08-10 | International Business Machines Corporation | Low latency management of processor core wait state |
US11231881B2 (en) | 2020-04-02 | 2022-01-25 | Dell Products L.P. | Raid data storage device multi-step command coordination system |
US11106608B1 (en) | 2020-06-22 | 2021-08-31 | International Business Machines Corporation | Synchronizing access to shared memory by extending protection for a target address of a store-conditional request |
CN111857591B (zh) * | 2020-07-20 | 2024-08-09 | 昆仑芯(北京)科技有限公司 | 用于执行指令的方法、装置、设备和计算机可读存储介质 |
US20220197729A1 (en) * | 2020-12-23 | 2022-06-23 | Intel Corporation | Advanced queue monitoring system |
CN114489792B (zh) * | 2021-03-25 | 2022-10-11 | 沐曦集成电路(上海)有限公司 | 处理器装置及其指令执行方法 |
US11693776B2 (en) | 2021-06-18 | 2023-07-04 | International Business Machines Corporation | Variable protection window extension for a target address of a store-conditional request |
CN116089116B (zh) * | 2022-12-16 | 2024-05-31 | 成都海光集成电路设计有限公司 | 数据处理方法及装置 |
CN116185891B (zh) * | 2023-04-27 | 2023-07-21 | 珠海妙存科技有限公司 | 描述符管理方法 |
Family Cites Families (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4491910A (en) * | 1982-02-22 | 1985-01-01 | Texas Instruments Incorporated | Microcomputer having data shift within memory |
JPS59111526A (ja) | 1982-12-16 | 1984-06-27 | Fujitsu Ltd | 信号処理方式 |
JPH06105460B2 (ja) | 1988-06-07 | 1994-12-21 | 富士通株式会社 | マルチプロセッサのプロセッサ切換え装置 |
GB8817911D0 (en) | 1988-07-27 | 1988-09-01 | Int Computers Ltd | Data processing apparatus |
US4965718A (en) | 1988-09-29 | 1990-10-23 | International Business Machines Corporation | Data processing system incorporating a memory resident directive for synchronizing multiple tasks among plurality of processing elements by monitoring alternation of semaphore data |
US5357617A (en) * | 1991-11-22 | 1994-10-18 | International Business Machines Corporation | Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor |
JP2866241B2 (ja) * | 1992-01-30 | 1999-03-08 | 株式会社東芝 | コンピュータシステムおよびスケジューリング方法 |
US5428757A (en) * | 1992-04-29 | 1995-06-27 | International Business Machines Corporation | Method for reducing translation look aside buffer purges in a multitasking system |
US5546593A (en) * | 1992-05-18 | 1996-08-13 | Matsushita Electric Industrial Co., Ltd. | Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream |
JP3678759B2 (ja) * | 1992-07-21 | 2005-08-03 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 割込を発生するための装置および割込を発生するための方法 |
US5493660A (en) * | 1992-10-06 | 1996-02-20 | Hewlett-Packard Company | Software assisted hardware TLB miss handler |
US5584031A (en) * | 1993-11-09 | 1996-12-10 | Motorola Inc. | System and method for executing a low power delay instruction |
US5546037A (en) | 1993-11-15 | 1996-08-13 | Cirrus Logic, Inc. | NAPNOP circuit for conserving power in computer systems |
US5584014A (en) * | 1994-12-20 | 1996-12-10 | Sun Microsystems, Inc. | Apparatus and method to preserve data in a set associative memory device |
JPH08212512A (ja) * | 1995-02-03 | 1996-08-20 | Hitachi Ltd | 磁気記憶装置及びそれに用いる薄膜磁気ヘッドとその製造方法 |
JPH08320797A (ja) * | 1995-05-24 | 1996-12-03 | Fuji Xerox Co Ltd | プログラム制御システム |
JPH096633A (ja) | 1995-06-07 | 1997-01-10 | Internatl Business Mach Corp <Ibm> | データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
CN1280714C (zh) | 1996-08-27 | 2006-10-18 | 松下电器产业株式会社 | 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器 |
US5961639A (en) * | 1996-12-16 | 1999-10-05 | International Business Machines Corporation | Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution |
US5835705A (en) * | 1997-03-11 | 1998-11-10 | International Business Machines Corporation | Method and system for performance per-thread monitoring in a multithreaded processor |
AU6586898A (en) | 1997-03-21 | 1998-10-20 | University Of Maryland | Spawn-join instruction set architecture for providing explicit multithreading |
UA55489C2 (uk) * | 1997-10-07 | 2003-04-15 | Каналь+ Сосьєте Анонім | Пристрій для багатопотокової обробки даних (варіанти) |
US6076157A (en) | 1997-10-23 | 2000-06-13 | International Business Machines Corporation | Method and apparatus to force a thread switch in a multithreaded processor |
US6016542A (en) * | 1997-12-31 | 2000-01-18 | Intel Corporation | Detecting long latency pipeline stalls for thread switching |
JP2000010910A (ja) * | 1998-06-22 | 2000-01-14 | Nec Corp | データ転送制御装置およびデータ転送制御方法ならびに記録媒体 |
US6920634B1 (en) * | 1998-08-03 | 2005-07-19 | International Business Machines Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
US6505229B1 (en) * | 1998-09-25 | 2003-01-07 | Intelect Communications, Inc. | Method for allowing multiple processing threads and tasks to execute on one or more processor units for embedded real-time processor systems |
US6401155B1 (en) * | 1998-12-22 | 2002-06-04 | Philips Electronics North America Corporation | Interrupt/software-controlled thread processing |
SG65097A1 (en) * | 1998-12-28 | 2001-08-21 | Compaq Computer Corp | Break event generation during transitions between modes of operation in a computer system |
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US6351808B1 (en) * | 1999-05-11 | 2002-02-26 | Sun Microsystems, Inc. | Vertically and horizontally threaded processor with multidimensional storage for storing thread data |
US6341347B1 (en) * | 1999-05-11 | 2002-01-22 | Sun Microsystems, Inc. | Thread switch logic in a multiple-thread processor |
US6493741B1 (en) * | 1999-10-01 | 2002-12-10 | Compaq Information Technologies Group, L.P. | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit |
US6496925B1 (en) * | 1999-12-09 | 2002-12-17 | Intel Corporation | Method and apparatus for processing an event occurrence within a multithreaded processor |
US6357016B1 (en) * | 1999-12-09 | 2002-03-12 | Intel Corporation | Method and apparatus for disabling a clock signal within a multithreaded processor |
US6671795B1 (en) * | 2000-01-21 | 2003-12-30 | Intel Corporation | Method and apparatus for pausing execution in a processor or the like |
US7856633B1 (en) | 2000-03-24 | 2010-12-21 | Intel Corporation | LRU cache replacement for a partitioned set associative cache |
US6931639B1 (en) * | 2000-08-24 | 2005-08-16 | International Business Machines Corporation | Method for implementing a variable-partitioned queue for simultaneous multithreaded processors |
TW461627U (en) * | 2000-12-21 | 2001-10-21 | Hon Hai Prec Ind Co Ltd | Electrical connector |
US6625698B2 (en) * | 2000-12-28 | 2003-09-23 | Unisys Corporation | Method and apparatus for controlling memory storage locks based on cache line ownership |
US6463511B2 (en) * | 2000-12-29 | 2002-10-08 | Intel Corporation | System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model |
US7120762B2 (en) * | 2001-10-19 | 2006-10-10 | Wisconsin Alumni Research Foundation | Concurrent execution of critical sections by eliding ownership of locks |
US7127561B2 (en) * | 2001-12-31 | 2006-10-24 | Intel Corporation | Coherency techniques for suspending execution of a thread until a specified memory access occurs |
US20030126379A1 (en) * | 2001-12-31 | 2003-07-03 | Shiv Kaushik | Instruction sequences for suspending execution of a thread until a specified memory access occurs |
US20030126416A1 (en) * | 2001-12-31 | 2003-07-03 | Marr Deborah T. | Suspending execution of a thread in a multi-threaded processor |
-
2001
- 2001-12-31 US US10/039,579 patent/US7363474B2/en active Active
-
2002
- 2002-12-11 DE DE10297856.5A patent/DE10297856B4/de not_active Expired - Lifetime
- 2002-12-11 WO PCT/US2002/039786 patent/WO2003058447A2/en active Application Filing
- 2002-12-11 CN CNB028265904A patent/CN100383740C/zh not_active Expired - Lifetime
- 2002-12-11 GB GB0412867A patent/GB2400947B/en not_active Expired - Lifetime
- 2002-12-11 RU RU2004123622/09A patent/RU2308754C2/ru not_active IP Right Cessation
- 2002-12-11 KR KR1020047010389A patent/KR100814993B1/ko active IP Right Grant
- 2002-12-11 DE DE10297596.5T patent/DE10297596B4/de not_active Expired - Lifetime
- 2002-12-11 JP JP2003558691A patent/JP4601958B2/ja not_active Expired - Lifetime
- 2002-12-11 AU AU2002364557A patent/AU2002364557A1/en not_active Abandoned
- 2002-12-25 TW TW091137282A patent/TWI322959B/zh not_active IP Right Cessation
- 2002-12-25 TW TW097151472A patent/TWI590153B/zh not_active IP Right Cessation
-
2004
- 2004-12-07 HK HK04109671A patent/HK1066883A1/xx not_active IP Right Cessation
-
2007
- 2007-08-08 US US11/891,076 patent/US20080034190A1/en not_active Abandoned
-
2008
- 2008-03-26 JP JP2008081180A patent/JP4990829B2/ja not_active Expired - Lifetime
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005003971A2 (en) * | 2003-06-27 | 2005-01-13 | Intel Corporation | Queued locks using monitor-memory wait |
WO2005003971A3 (en) * | 2003-06-27 | 2005-07-14 | Intel Corp | Queued locks using monitor-memory wait |
GB2417805A (en) * | 2003-06-27 | 2006-03-08 | Intel Corp | Queued locks using monitor-memory wait |
US7213093B2 (en) | 2003-06-27 | 2007-05-01 | Intel Corporation | Queued locks using monitor-memory wait |
GB2417805B (en) * | 2003-06-27 | 2007-11-21 | Intel Corp | Management of resources when suspending a thread in a hyperthreading processor |
US7328293B2 (en) | 2003-06-27 | 2008-02-05 | Intel Corporation | Queued locks using monitor-memory wait |
US7640384B2 (en) | 2003-06-27 | 2009-12-29 | Intel Corporation | Queued locks using monitor-memory wait |
Also Published As
Publication number | Publication date |
---|---|
RU2004123622A (ru) | 2005-03-27 |
AU2002364557A1 (en) | 2003-07-24 |
GB2400947A (en) | 2004-10-27 |
TWI590153B (zh) | 2017-07-01 |
JP4990829B2 (ja) | 2012-08-01 |
GB2400947B (en) | 2005-08-24 |
KR20040068993A (ko) | 2004-08-02 |
WO2003058447A2 (en) | 2003-07-17 |
GB0412867D0 (en) | 2004-07-14 |
AU2002364557A8 (en) | 2003-07-24 |
RU2308754C2 (ru) | 2007-10-20 |
CN1688974A (zh) | 2005-10-26 |
DE10297856B4 (de) | 2014-07-17 |
TWI322959B (en) | 2010-04-01 |
WO2003058447A3 (en) | 2004-12-16 |
TW200941340A (en) | 2009-10-01 |
JP4601958B2 (ja) | 2010-12-22 |
KR100814993B1 (ko) | 2008-03-18 |
HK1066883A1 (en) | 2005-04-01 |
US20080034190A1 (en) | 2008-02-07 |
JP2008165834A (ja) | 2008-07-17 |
US20030126186A1 (en) | 2003-07-03 |
DE10297596B4 (de) | 2017-09-07 |
TW200305820A (en) | 2003-11-01 |
JP2006500639A (ja) | 2006-01-05 |
CN100383740C (zh) | 2008-04-23 |
US7363474B2 (en) | 2008-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE10297596B4 (de) | Verfahren und Vorrichtung zum Suspendieren der Ausführung eines Threads, bis ein spezifizierter Speicherzugriff auftritt | |
DE112004001133T5 (de) | Warteschlangen-Sperren mit Monitor-Memory-Wait | |
DE69807729T2 (de) | Threadumschaltungssteuerung in einem multithreadprozessorsystem | |
DE112004002296B4 (de) | Anwenderprogrammierbares Multithreading mit geringem Overhead | |
DE10297597T5 (de) | Suspendieren der Ausführung eines Threads in einem Mehrfach-Thread-Prozessor | |
DE10296989B4 (de) | Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms | |
DE102010052680A1 (de) | Ein Befehl, um einen Prozessor-Wartezustand zu ermöglichen | |
DE68925615T2 (de) | Digitalrechnersystem mit Niederstromverbrauchmodus | |
DE69701141T2 (de) | Multithreaded mikroprozessor ausgestaltet zur ausführung von unterbrechungsverarbeitungsroutinen als threads | |
DE60038693T2 (de) | Verfahren und vorrichtung zur ausschaltung eines taktsignals in einem vielfadenprozessor | |
DE112017000721T5 (de) | Verfahren, einrichtung und befehle für thread-aussetzung auf benutzerebene | |
DE60029619T2 (de) | Verfahren, vorrichtung, medium und programm zur aufnahme und zum verlassen von mehreren fäden in einem vielfadenprozessor | |
DE112005000706B4 (de) | Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene | |
DE60210633T2 (de) | Verfahren und vorrichtungen zur verbesserung des durchsatzes von eingebetteten prozessoren auf cache-basis durch umschalten von tasks als reaktion auf eine cache-verfehlung | |
DE69032334T2 (de) | Virtuelles Computersystem mit Ein-/Ausgabeunterbrechungssteuerung | |
DE112004002267T5 (de) | Ruhezustandsmechansimus für virtuelles Multithreading | |
US7127561B2 (en) | Coherency techniques for suspending execution of a thread until a specified memory access occurs | |
DE3851033T2 (de) | Datenprozessor mit Entwicklungsunterstützungsmerkmalen. | |
DE69636861T2 (de) | Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern | |
DE102010034555A1 (de) | Bereitstellen von Zustandsspeicher in einem Prozessor für Systemmanagement-Modus | |
DE60115976T2 (de) | Rechnersystem und Interruptvorgang | |
DE112011100715T5 (de) | Hardware-hilfs-thread | |
KR20100112137A (ko) | 프로세서 상에서 실행되는 프로그램 소프트웨어를 프로파일링하는 매커니즘 | |
DE4429921A1 (de) | Verfahren und Einrichtung zur Prozessorordnung für einen Befehle ausserhalb der Reihe ausführenden Prozessor | |
DE102014003399A1 (de) | Systeme und Verfahren zur Implementierung transaktionalen Speichers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law |
Ref document number: 10297596 Country of ref document: DE Date of ref document: 20041202 Kind code of ref document: P |
|
8172 | Supplementary division/partition in: |
Ref document number: 10297856 Country of ref document: DE Kind code of ref document: P |
|
Q171 | Divided out to: |
Ref document number: 10297856 Country of ref document: DE Kind code of ref document: P |
|
R016 | Response to examination communication | ||
R018 | Grant decision by examination section/examining division | ||
R006 | Appeal filed | ||
R007 | Decision rectified on appeal | ||
R020 | Patent grant now final | ||
R081 | Change of applicant/patentee |
Owner name: FACEBOOK INC., MENLO PARK, US Free format text: FORMER OWNER: INTEL CORPORATION, SANTA CLARA, CALIF., US |
|
R082 | Change of representative |
Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE Representative=s name: MURGITROYD & COMPANY, DE |
|
R071 | Expiry of right |