DE102023100602A1 - Konfliktverfolgung zur latenzreduktion bei exklusiven operationen - Google Patents

Konfliktverfolgung zur latenzreduktion bei exklusiven operationen Download PDF

Info

Publication number
DE102023100602A1
DE102023100602A1 DE102023100602.9A DE102023100602A DE102023100602A1 DE 102023100602 A1 DE102023100602 A1 DE 102023100602A1 DE 102023100602 A DE102023100602 A DE 102023100602A DE 102023100602 A1 DE102023100602 A1 DE 102023100602A1
Authority
DE
Germany
Prior art keywords
memory
operations
exclusive
data
location
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.)
Pending
Application number
DE102023100602.9A
Other languages
English (en)
Inventor
Anurag Chaudhary
Christopher Richard Feilbach
Jasjit Singh
Manuel Gautho
Aprajith Thirumalai
Shailender Chaudhry
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102023100602A1 publication Critical patent/DE102023100602A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0857Overlapped cache accessing, e.g. pipeline by multiple requestors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0859Overlapped cache accessing, e.g. pipeline with reload from main memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc

Landscapes

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

Abstract

Die hier offenbarten Techniken umfassen eine Verfolgung von Konflikten und die Verwendung der verfolgten Konflikte zur Verringerung der Latenz von exklusiven Speicheroperationen. Die Technologie ermöglicht es einem Prozessor, zu verfolgen, welche Orte im Hauptspeicher konfliktiv sind, und die Reihenfolge der exklusiven Speicheroperationen basierend auf der Konfliktivität zu modifizieren. Ein Thread kann mehrere exklusive Operationen für denselben Speicherort umfassen (z.B. exklusives Laden und ein komplementäres exklusives Speichern). Die mehreren exklusiven Speicheroperationen können zu einer Warteschlange hinzugefügt werden und eine oder mehrere dazwischen liegende Operationen in der Warteschlange umfassen. Der Prozessor kann die Operationen in der Warteschlange basierend auf der Reihenfolge verarbeiten, in der sie hinzugefügt wurden, und kann den verfolgten Konflikt verwenden, um eine Verarbeitung außerhalb der Reihenfolge für einige der exklusiven Operationen durchzuführen. Zum Beispiel kann der Prozessor die exklusive Ladeoperation ausführen und, da der entsprechende Ort konfliktiv ist, die komplementäre exklusive Speicheroperation vor den dazwischen liegenden Operationen verarbeiten.

Description

  • TECHNISCHES GEBIET
  • Ausführungsbeispiele der Offenbarung beziehen sich allgemein auf Prozessor-Cache und insbesondere auf die Verfolgung von Konflikten und die Verwaltung von Cache- und Speicheroperationen basierend auf den Konflikten.
  • HINTERGRUND
  • Auf in Speicher gespeicherte Daten wird häufig von verschiedenen Threads zugegriffen, die auf einem oder mehreren Prozessoren ausgeführt werden. Die Prozessoren speichern oft lokale Kopien der Daten im Cache, um den Zugriff auf die Daten zu beschleunigen. Die Threads kooperieren typischerweise miteinander und modifizieren die Daten abwechselnd, um ein gegenseitiges Überschreiben der Modifikationen zu vermeiden.
  • Figurenliste
  • Die Offenbarung wird anhand der nachstehend gegebenen detaillierten Beschreibung und der begleitenden Zeichnungen verschiedener Ausführungsbeispiele der Offenbarung besser verstanden. Die Zeichnungen sind jedoch nicht so zu verstehen, dass die Offenbarung auf die spezifischen Ausführungsbeispiele beschränkt ist, sondern dienen lediglich der Erläuterung und dem Verständnis.
    • 1 zeigt ein beispielhaftes Rechengerät, das einen Prozessor und einen Speicher umfasst, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 2 zeigt ein Diagramm des Prozessors und eines Multi-Level-Caches, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 3 zeigt ein detailliertes Blockdiagramm eines Prozessors, das beispielhafte Komponenten und Module für das Verwalten von Cache basierend auf Konflikten zeigt, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 4 zeigt ein detailliertes Blockdiagramm eines Prozessors, das beispielhafte Komponenten und Module für das Verwalten von Speicheroperationen basierend auf dem Konflikt zeigt, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 5 zeigt ein Flussdiagramm eines Verfahrens zur Verwendung von Konfliktverfolgung zum Verwalten von Cache, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 6 zeigt ein Flussdiagramm eines Verfahrens zur Verwendung von Konfliktverfolgung zum Verwalten von Speicheroperationen, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung.
    • 7 ist ein Blockdiagramm eines beispielhaften Rechnersystems, in dem Ausführungsbeispiele der vorliegenden Offenbarung ausgeführt werden können.
  • DETAILLIERTE BESCHREIBUNG
  • Aspekte der vorliegenden Offenbarung beziehen sich auf Rechnersysteme, die Konflikte (engl. contention, dt. auch Kollision oder Konkurrenz) verfolgen und die verfolgten Konflikte verwenden können, um einen Prozessor-Cache zu verwalten, eine Verarbeitung von Speicheroperationen außerhalb der Reihenfolge durchzuführen oder eine Kombination davon. Der Konflikt kann entstehen, wenn mehrere Threads miteinander um den Zugriff auf Daten im Speicher konkurrieren. Die Daten können als konfliktive Daten (engl. contentious, dt. auch umstritten, konfliktträchtig) bezeichnet werden und können den Inhalt von Variablen umfassen, die von den Threads gelesen und geschrieben werden. Rechnersysteme verwalten Konflikte häufig, indem sie einem der Threads den Zugriff auf die Daten ermöglichen und die übrigen Threads veranlassen, zu warten, bis der Thread fertig ist. Der Thread kann vor seiner Beendigung eine oder mehrere Operationen an den konfliktiven Daten durchführen. Die übrigen Threads warten darauf, dass die eine oder mehreren Operationen abgeschlossen werden und der Zugriff auf die Daten möglich wird. In einem Beispiel kann der Konflikt unter Verwendung von Sperren verwaltet werden und wird als Sperrkonflikt bezeichnet. Ein initialer Thread kann eine Sperre für die Daten erwerben, und wartende Threads können jeweils versuchen, die Sperre zu erwerben und auf die Daten zuzugreifen. Das Warten auf den Zugriff auf die Daten kann die Leistung des Rechnersystems verringern und veranlassen, dass die konfliktiven Daten zu einem Leistungsengpass beitragen.
  • Der Prozessor-Cache soll die Leistung des Rechnersystems erhöhen, indem er Kopien der Daten näher an den Kernen des Prozessors speichert, so dass der Zugriff auf die Daten schneller erfolgen kann. Der Prozessor kann einen Satz von Kernen umfassen, und der Prozessor-Cache kann einen gemeinsam genutzten Cache, der von dem Satz von Kernen gemeinsam genutzt wird, und private Caches, die jeweils für einen der Kerne privat sind, umfassen. Der Prozessor-Cache kann mehrere Kopien der Daten im Cache speichern und eine Cache-Kohärenztechnik verwenden, um die Kopien synchronisiert zu halten. Die Cache-Kohärenztechnik kann eine Änderung an einer der Kopien detektieren und eine oder mehrere der Kopien aktualisieren, um anzuzeigen, dass eine Kopie veraltet ist, um eine Kopie zu ersetzen oder eine Kombination davon. Wenn auf die Daten von Threads auf verschiedenen Kernen zugegriffen wird, speichert der Prozessor-Cache in der Regel eine Kopie der Daten im privaten Cache für jeden dieser Kerne. Das Vorhandensein mehrerer Kopien von Daten, die häufig modifiziert werden, kann den Overhead der Cache-Kohärenztechnik erhöhen und die Leistung des Rechnersystems nachteilig beeinflussen.
  • Aspekte der vorliegenden Offenbarung beheben die obigen und andere Unzulänglichkeiten, indem sie eine Technologie bereitstellen, die es einem Prozessor ermöglicht, Konflikte um Daten im Speicher zu detektieren und den Konflikt zur Verwaltung des Caches, zur Verwaltung der Verarbeitung von Speicheroperationen oder einer Kombination davon zu verwenden. Die Technologie kann einen Prozessor in die Lage versetzen, einen Ort im Speicher zu identifizieren und zu bestimmen, ob der Ort konfliktiv ist. Der Ort im Speicher kann mit einer oder mehreren physischen, virtuellen oder logischen Adressen im Speicher korrespondieren. Der Ort kann als konfliktiv bestimmt werden, wenn ein Thread nicht auf den Ort zugreifen konnte, weil er von einem anderen Thread verwendet wird. Beispielsweise kann ein erster Thread eine Sperre für die Daten an diesem Ort erworben haben (z.B. Ticket-Sperre) und ein zweiter Thread kann am Zugriff auf die Daten gehindert werden, solange diese gesperrt sind. Wenn der Ort einmal als konfliktiv bestimmt wurde, kann er auch nach der Entsperrung konfliktiv bleiben, da es wahrscheinlicher ist, dass er in Zukunft wieder Gegenstand eines Thread-Konflikts sein wird. Die Konfliktverfolgung kann durch Aktualisierung einer oder mehrerer Strukturen erfolgen, die anzeigen, ob Orte konfliktiv oder nicht konfliktiv sind, oder eine Kombination davon (z.B. Konflikttabelle, Konflikt-Bit-Flag im Cache-Eintrag).
  • Der Prozessor kann die Konfliktivität von Orten zur Verwaltung des Caches verwenden. Die Technologie kann steuern, ob die Daten im Cache gespeichert werden (z.B. gemeinsam genutzter Cache) und wie Einträge im Cache (z.B. Cache-Zeilen, Cache-Blöcke) allokiert und entfernt (evicted) werden sollen. Wie oben beschrieben, kann der Cache Kopien der Daten aus dem Hauptspeicher umfassen und Kopien der Daten in einem oder mehreren privaten Caches, gemeinsam genutzten Caches oder einer Kombination davon speichern. Der Prozessor kann bestimmen, ob der Ort konfliktiv ist, bevor, während oder nachdem er die Daten empfängt, die sich an dem Ort im Hauptspeicher befinden. Der Prozessor kann die Daten im gemeinsam genutzten Cache speichern, wenn der Ort konfliktiv ist, und kann den gemeinsam genutzten Cache umgehen/übergehen (z.B. das Speichern im gemeinsam genutzten Cache vermeiden) und die Daten im privaten Cache speichern, wenn der Ort nicht konfliktiv ist. Dies kann vorteilhaft sein, da durch die Speicherung der Daten im gemeinsam genutzten Cache die Anzahl der Kopien in den verschiedenen privaten Caches reduziert bzw. vermieden werden kann (z.B. Vermeidung doppelter Kopien in den L2-Caches). Wenn es sich um konfliktive Daten handelt, kann dies den Cache-Kohärenz-Overhead erheblich reduzieren, der erforderlich ist, um die Kopien in den privaten Caches synchron zu halten. In einem Beispiel kann die Technologie in der Cache-Steuerlogik des Prozessors implementiert werden (z.B. Cache-Controller-Schaltungen und/oder Steuerregister).
  • Der Prozessor kann auch oder alternativ die Konfliktivität von Orten verwenden, um die Verwaltung von Speicheroperationen zu verwalten. Die von einem Prozessor ausgeführten Threads können Speicheroperationen generieren, die zur Verarbeitung in eine Warteschlange (z.B. einen geordneten Satz) aufgenommen werden können. Wie bereits erwähnt, kann ein Thread, der auf Daten an einem Ort zugreift, mehrere Operationen an den Daten durchführen, bevor der Thread die Daten verwendet. Die mehreren Operationen können der Warteschlange hinzugefügt werden und die Warteschlange kann eine oder mehrere dazwischen liegende Operationen umfassen. Die Operationen in der Warteschlange können eine bestimmte Reihenfolge haben, z. B. First-in-First-out (FiFo). Der Prozessor kann einige der Operationen basierend auf der Reihenfolge der Warteschlange verarbeiten und einige der Operationen außer der Reihenfolge verarbeiten.
  • Jede der Operationen kann mit Daten von einem Ort im Speicher assoziiert sein (z.B. einer physikalischen Adresse im Hauptspeicher), und der Prozessor kann basierend auf der Konfliktivität des jeweiligen Ortes eine als nächstes zu verarbeitende Operation auswählen. Zum Beispiel kann der Prozessor eine der mehreren Speicheroperationen für den Thread ausführen und, wenn der mit den Speicheroperationen assoziierte Ort konfliktiv ist, eine oder mehrere der verbleibenden Speicheroperationen priorisieren, so dass die verbleibenden Speicheroperationen außer der Reihenfolge und vor einer oder mehreren der dazwischen liegenden Operationen durchgeführt werden können. In einem Beispiel können die mehreren Speicheroperationen exklusive Speicheroperationen sein, und die erste Speicheroperation kann eine Load-Exclusive-Operation (exklusive Ladeoperation) sein, die Daten von einem Ort lädt (z.B. liest) und bestimmen kann, ob der Ort blockiert ist, und die zweite Speicheroperation kann eine Store-Exclusive-Operation (exklusive Speicheroperation) sein, die eine Blockierung des Ortes erwirkt, wenn der Ort nicht blockiert ist.
  • Die Vorteile der hier offengelegten Technologie umfassen unter anderem die Verbesserung der Verwendung von Cache durch einen Prozessor, um die Anzahl und Dauer von Leistungsengpässen zu verringern, die durch Speicherkonflikte entstehen. Die Technologie kann dies erreichen, indem sie die Anzahl der Kopien im privaten Cache reduziert, um den Cache-Kohärenz-Overhead zu verringern. Die Technologie kann es den Prozessoren auch ermöglichen, Speicheroperationen (z.B. Exklusivspeicher) schneller zu verarbeiten, indem sie die Dauer der Unzugänglichkeit von Speicherorten verkürzt (z.B. durch Verringerung der Dauer, die zum Erreichen einer Sperre erforderlich ist). Die Technologie kann auch dazu verwendet werden, atomare Operationen schneller zu verarbeiten, indem detektiert wird, wenn sich die atomare Operation auf einen unumstrittenen Ort bezieht, und indem nahe atomare Operationen auf lokale Daten anstelle von weiteren atomaren Operationen verwendet werden.
  • 1 zeigt ein Beispiel für ein Rechengerät 100, das einen Prozessor mit einer Technologie zur Konfliktverfolgung und zur Verwendung des verfolgten Konflikts zur Verwaltung von Cache- und Verarbeitungsspeicheroperationen gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung enthält. Das Rechengerät 100 kann einen Prozessor 110, einen Cache 120 und einen Speicher 130 umfassen.
  • Rechengerät 100 kann ein beliebiges physisches Gerät sein und kann ein Server-Rechengerät (z.B. Server), ein verteiltes Rechengerät (z.B. Cloud-Gerät, Cluster-Gerät), ein Supercomputer, ein Personal Computer (PC) (z.B. Workstation, Desktop, Laptop, Notebook), ein mobiles Gerät (z.B. Mobiltelefon, Tablet), ein Fahrzeug (z.B. ein Flugzeug, eine Drohne, ein Zug, ein Auto oder ein anderes Transportmittel), ein Internet der Dinge (IoT)-Gerät, ein eingebetteter Rechner (z.B. einer, der in einer Industrieanlage enthalten ist, oder ein vernetztes kommerzielles Gerät) oder ein beliebiges solches Rechengerät, das einen oder mehrere Prozessoren 110 umfasst.
  • Prozessor 110 kann sich auf ein verarbeitendes Gerät beziehen, das ein oder mehrere Verarbeitungsgeräte oder Verarbeitungseinheiten umfasst, die in der Lage sind, Anweisungen auszuführen, die arithmetische, logische, Speicher- oder E/A-Operationen kodieren. Der Prozessor 110 kann als einzelner integrierter Schaltkreis, als zwei oder mehr integrierte Schaltkreise implementiert werden, oder er kann Bestandteil eines Multi-Chip-Moduls sein (z.B. wenn individuelle Mikroprozessorchips in einem einzigen integrierten Schaltkreis enthalten sind). Der Prozessor 110 kann eine oder mehrere zentrale Verarbeitungseinheiten (CPUs), grafische Verarbeitungseinheiten (GPUs), Datenverarbeitungseinheiten (DPUs), arithmetische Logikeinheiten (ALUs), Fließkommaeinheiten (FPUs), Speicherverwaltungseinheiten (MMUs), Speicherschutzeinheiten (MPUs) umfassen, applikationsspezifische integrierte Schaltungen (ASICs), Tensor Processing Units (TPUs), digitale Signalprozessoren (DSPs), Field Programmable Gate Arrays (FPGAs), Netzwerk-Schnittstellen-Controller (NIC), Cache-Controller, Speicher-Controller, Quantenprozessor, anderer Prozessor oder eine Kombination davon.
  • Der Prozessor 110 kann eine Anweisungssatzarchitektur (ISA) implementieren, die als Schnittstelle zwischen dem Prozessor 110 und dem Rechengerät 100 dient. Die Architektur des Anweisungssatzes kann gleich oder ähnlich einer Advanced RISC Machine (ARM®), x86 (z.B. Intel®, AMD®), PowerPC®, Scalable Processor Architecture (SPARC®), einer anderen Rechnerarchitektur oder einer Kombination davon sein. Der Prozessor 110 kann die Anweisungen im Satz unter Verwendung eines einzelnen Verarbeitungskerns oder unter Verwendung mehrerer Verarbeitungskerne 111A-Z verarbeiten.
  • Verarbeitungskerne 111A-Z können Teile des Prozessors 110 sein, die in der Lage sind, Anweisungen eines aus dem Speicher 130 geladenen Computerprogramms zu lesen und auszuführen. Ein Rechnerprogramm kann Anweisungen (z.B. ausführbare Daten), Informationen (z.B. nicht ausführbare Daten) oder eine Kombination davon umfassen. Die Anweisungen können vom Prozessor 110 an eine oder mehrere Pipelines weitergeleitet werden, wodurch die Parallelität auf Anweisungsebene ausgenutzt wird. Eine Pipeline kann versuchen, mehrere Teile des Prozessors mit einigen der Anweisungen zu beschäftigen, indem die Anweisungen in eine Reihe von sequentiellen Schritten aufgeteilt werden, die von verschiedenen Verarbeitungseinheiten durchgeführt werden, wobei verschiedene Teile der Anweisungen parallel verarbeitet werden. Die Anweisungen können als verschiedene Streams von Anweisungen angeordnet werden, die weiter unten in Bezug auf die Threads 113A-Z erörtert werden. In einem Beispiel kann jeder der Verarbeitungskerne 111 A-Z ein verarbeitendes Gerät sein und Teile des Prozessors umfassen, die an der Ausführung von Anweisungen beteiligt sind und Teile des Cache 120 umfassen (z.B. die privaten Caches des Cache 120).
  • Der Cache 120 kann ein Hardware-Cache sein, der vom Prozessor 110 verwendet wird, um vom Speicher 130 (z.B. dem Hauptspeicher) empfangene Daten zu speichern. Der Cache 120 ist Teil einer Speicherhierarchie, und die Speicherhierarchie kann ein Teil des abgestuften Speichers für das Rechengerät 100 sein. Die Speicherhierarchie kann sich von Prozessorregistern auf der niedrigsten Ebene bis zum Hauptspeicher auf der höchsten Ebene erstrecken. Der mehrstufige Speicher kann sich weiter nach oben bis zum Sekundärspeicher (z.B. Festplattenlaufwerk, Solid-State-Laufwerk) und möglicherweise zu einem entfernten Speicher (z.B. verteilter Speicher, Network Attached Storage (NAS), Storage Area Network (SAN)) erstrecken.
  • Der Cache 120 kann mehrere verschiedene Caches umfassen. Die verschiedenen Caches können physisch getrennte Caches sein (z.B. verschiedene Teile eines Chips oder auf verschiedenen Chips), verschiedene Teile desselben Caches (z.B. verschiedene Teile derselben Bank von Speicherzellen) oder eine Kombination davon. Die verschiedenen Caches können Daten unter Verwendung einer beliebigen Datenspeichertechnologie speichern und flüchtigen Speicher (z.B. ephemeren oder nicht-persistenten Speicher), nicht-flüchtigen Speicher (z.B. persistenten Speicher) oder eine Kombination davon umfassen. Der Datenspeicher kann Random Access Memory (RAM) in Form von Static Random-Access Memory (SRAM), eingebettetem Dynamic Random-Access Memory (eDRAM), anderem Speicher oder einer Kombination davon umfassen. Wie in 1 gezeigt, kann der Cache 120 einen gemeinsam genutzten Cache 122 und einen oder mehrere private Caches 124A-Z umfassen.
  • Der gemeinsam genutzte Cache 122 und die privaten Caches 124A-Z können vom Prozessor 110 verwendet werden, um Daten im Speicher 130 zum Zugriff durch einen oder mehrere Verarbeitungskerne 111A-Z zu speichern. Der gemeinsam genutzte Cache 122 kann von einem Satz mehrerer Verarbeitungskerne genutzt werden und kann gleiche oder ähnlich einem System-Level-Cache (SLC), Last-Level-Cache (LLC) oder Level-3 (L3-) -Cache, einem anderer Begriff oder einer Kombination davon sein. Private Caches 124A-Z können jeweils für einen bestimmten Verarbeitungskern reserviert sein. Ein privater Cache kann gleich oder ähnlich wie ein lokaler Cache, Level 1 (L1) Cache, Level 2 (L2) Cache, ein anderer Cache oder eine Kombination davon sein.
  • In dem in 1 gezeigten Beispiel kann der gemeinsam genutzte Cache 122 von allen Verarbeitungskernen des Prozessors 110 (z.B. den Verarbeitungskernen 111A-Z) verwendet werden und kann weiter von den Verarbeitungskernen entfernt positioniert werden und im Vergleich zu einem entsprechenden privaten Cache einen langsameren Zugriff bereitstellen. Jeder der privaten Caches 124A-Z kann ausschließlich von einem einzelnen Verarbeitungskern verwendet werden und kann näher am Verarbeitungskern angeordnet sein, um einen schnelleren Zugriff auf den Verarbeitungskern bereitzustellen.
  • Threads 113A-Z sind jeweils ein Ausführungs-Thread, der die kleinste Sequenz programmierter Anweisungen sein kann, die unabhängig von einem Scheduler (Planer) eines Betriebssystems (OS), eines Prozessors oder eines anderen Teils des Rechnersystems 100 verwaltet werden kann (z.B. OS-Threads, Rechenthreads). In dem gezeigten Beispiel kann jeder der Threads 113A-Z von einem anderen der Verarbeitungskerne 111A-Z ausgeführt werden. In anderen Beispielen können ein oder mehrere der Threads 113A-Z auf demselben Verarbeitungskern gleichzeitig ausgeführt werden (z.B. Parallelität auf Thread-Ebene). Die Threads 113A-Z können demselben Rechenprozess (z.B. einem Haupt-Thread und Worker-Threads), verschiedenen Rechenprozessen oder einer Kombination davon entsprechen. Jeder der Threads 113A-Z kann, wenn er von einem Verarbeitungskern ausgeführt wird, eine entsprechende Speicheroperation der Speicheroperationen 115A-Z veranlassen.
  • Speicheroperationen 115A-Z können jede Operation sein, die von einem Gerät zum Verarbeiten durchgeführt wird, das auf gespeicherte Daten zugreift. Der Zugriff kann einen oder mehrere Lesezugriffe (z.B. das Laden von Daten), Schreibzugriffe (z.B. das Speichern von Daten) oder eine Kombination davon umfassen. Der Zugriff auf die gespeicherten Daten kann aus dem Speicher 130, dem gemeinsam genutzten Cache 122, dem privaten Cache 124A-Z, den Prozessorregistern, einem anderen Datenspeicher oder einer Kombination davon erfolgen. Die Speicheroperationen 115A-Z können eine oder mehrere Hardwareanweisungen (z.B. Prozessoranweisungen, CPU-Anweisungen), Softwareanweisungen (z.B. Funktionsaufrufe, Maschinencode, Bytecode), Firmware-Anweisungen (z.B. Opcodes, Microcode), andere Operationen oder eine Kombination davon umfassen. In einem Beispiel können Speicheroperationen 115A-Z externe Operationen sein, die von einer Quelle außerhalb des Prozessors 110 (z.B. Kernel-Code, Applikations-Code) bereitgestellt werden und Aufrufe an Prozessoranweisungen (z.B. CPU-Anweisungen) vornehmen. In einem anderen Beispiel können die Speicheroperationen 115A-Z interne Operationen sein, die von einer internen Quelle des Prozessors 110 (z.B. Cache-Controller-Logik) bereitgestellt werden. In beiden Beispielen kann jede der Speicheroperationen 115A-Z eine exklusive Operation, eine atomare Operation, eine andere Operation oder eine Kombination davon sein.
  • Bei Speicheroperationen, die exklusiv sind, kann ein Ausschlussmechanismus verwendet werden, der den Speicheroperationen eines bestimmten Threads Zugriff auf Daten bereitstellt, ohne den Speicheroperationen eines oder mehrerer anderer Threads Zugriff auf die Daten zu gewähren (z.B. abwesender, freier oder fehlender Zugriff). Der Ausschlussmechanismus kann der gleiche oder ein ähnlicher sein wie ein Mechanismus zur Steuerung der Gleichzeitigkeit oder zur Synchronisation und kann eine oder mehrere Ausschlussdatenstrukturen umfassen. Die Ausschlussdatenstruktur (z.B. Synchronisationsprimitiv) kann gleich oder ähnlich einer Sperre, Semaphore, Mutex, Futex, Barriere, einer anderen Ausschlussdatenstruktur oder einer Kombination davon sein. In einem Beispiel können die Operationen eine oder mehrere Sperren umfassen, und eine Speicheroperation kann den Ausschlussmechanismus aktivieren (z.B. die Sperre erwerben) und eine nachfolgende Speicheroperation kann den Ausschlussmechanismus deaktivieren (z.B. die Sperre freigeben). In einem anderen Beispiel können die Operationen einen oder mehrere kritische Abschnitte umfassen, die einen Abschnitt des ausführbaren Codes einschließen, in dem nur ein Thread ausgeführt werden kann und in bestimmten Fällen nicht unterbrochen werden kann (z.B. Kernel-Code). Der kritische Abschnitt kann durch eine oder mehrere Sperren bewacht werden, und da mehrere Threads versuchen, in den kritischen Abschnitt zu gelangen, kann es zu Konflikten kommen.
  • In einem Beispiel können die Speicheroperationen 115A-Z exklusive Ladeoperationen (Load-Exclusive-Operation) und exklusive Speicheroperationen (Store-Exclusive-Operation) umfassen. Eine Load-Exclusive-Operation und eine Store-Exclusive-Operation können gemeinsam verwendet werden, um zu prüfen, ob ein Speicherort mit einer deaktivierten Ausschlussdatenstruktur assoziiert ist, und um die Ausschlussdatenstruktur zu aktualisieren, um einen Ausschlussmechanismus zu aktivieren. In einem Beispiel kann die Load-Exclusive-Operation Daten an einem Ort im Speicher 130 in den Cache 120 laden und bestimmen, ob der Ausschlussmechanismus für den Speicherort von einem anderen Anforderer (z.B. einem anderen Thread) aktiviert wurde. Wenn der Ausschlussmechanismus nicht aktiviert ist, kann eine Store-Exclusive-Operation verwendet werden, um den Ausschlussmechanismus für den Anforderer zu aktivieren, indem Daten gespeichert werden, die die Ausschlussdatenstruktur aktualisieren. Die Store-Exclusive-Operation und/oder Load-Exclusive-Operation kann basierend auf dem Status der Ausschlussdatenstruktur eine oder mehrere konditionale Operationen durchführen. Beispielsweise kann die Store-Exclusive-Operation den Ausschlussmechanismus konditional aktivieren, wenn er nicht gerade von einem anderen Thread aktiviert wird. Nach der exklusiven Speicheroperation können eine oder mehrere Speicheroperationen (z.B. nicht-exklusive Speicheroperationen) auftreten und veranlassen, dass die Ausschlussdatenstruktur deaktiviert wird (z.B. entriegelt, entfernt, gelöscht, zurückgesetzt). In einem Beispiel können sowohl die Load-Exclusive-Operation als auch die Store-Exclusive-Operation zusammenarbeiten, um eine Sperre zu erhalten. Die Load-Exclusive-Operation kann prüfen, ob eine Sperre bereits von einem anderen Thread erworben wurde. Wenn die Sperre nicht von einem anderen Thread erworben wurde, kann eine Store-Exclusive-Operation verwendet werden, um zu versuchen, die Sperre zu erwerben. Die Store-Exclusive-Operation ist entweder erfolgreich, was indiziert, dass die Sperre erworben wurde, oder sie schlägt fehl, was bedeutet, dass ein anderer Thread die Sperre erworben haben könnte. Beispielsweise kann ein anderer Thread die Sperre zwischen dem Zeitpunkt, an dem die Load-Exclusive-Operation beendet ist, und dem Zeitpunkt, an dem die Store-Exclusive-Operation beendet ist, erworben haben.
  • Speicheroperationen, die atomar sind, können das Durchführen der einen oder mehreren Speicheroperationen als eine atomare Transaktion beinhalten. Die atomare Transaktion kann ein unteilbarer und irreduzibler Satz von Operationen sein, die entweder alle oder keine auftreten. Der Satz kann eine oder mehrere exklusive oder nicht-exklusive Speicheroperationen umfassen, und die atomare Transaktion kann eine Atomizität bereitstellen, die verhindert, dass der Satz von Operationen partiell auftritt. Einige Beispiele für atomare Speicheroperationen (z.B. atomare Speicheroperationen) sind Test-and-set-Operationen, Fetch-and-add-Operationen (FAA), Compare-and-swap-Operationen (CAS), Load-Link/Store-Conditional-Operationen (LL/SC), Lesen-Ändern-Schreiben, andere atomare Operationen oder eine Kombination davon. In einem Beispiel können die Speicheroperationen eines Threads als atomare Transaktion durchgeführt werden, um zu vermeiden, dass der Thread während der atomaren Transaktion vorzeitig beendet wird. In einem anderen Beispiel können die Speicheroperationen eines Threads als atomare Transaktion durchgeführt werden, die eine Vorkaufsphase zulässt und abgeschlossen werden kann, wenn die Ausführung des Threads aus der Vorkaufsphase zurückkehrt. In beiden Beispielen können die Speicheroperationen 115A-Z (ob atomar, exklusiv oder anders) auf Konflikte 117 stoßen.
  • Ein Konflikt 117 tritt auf, wenn Speicheroperationen verschiedener Threads miteinander konkurrieren, um auf Daten desselben Ortes im Speicher 130 zuzugreifen. Zum Beispiel kann ein erster Thread 113A eine exklusive oder atomare Speicheroperation 115A initiieren, die auf Daten 134A des Ortes 132A zugreift. Ein zweiter Thread 113B kann eine Speicheroperation 115B initiieren, die demselben Ort 132A entspricht, aber die Speicheroperation 115B kann nicht abgeschlossen werden, bis der erste Thread 113A fertig ist. Sobald der Konflikt auftritt, kann der Ort weiterhin als konfliktiv eingestuft werden, auch nachdem der Konflikt gelöst wurde. Nachdem beispielsweise der erste Thread mit den Daten an diesem Ort fertig ist, können die anderen Threads auf den Ort zugreifen, aber der Ort kann ein konfliktiver Ort bleiben. Dies ist vorteilhaft, weil ein Ort, der einmal konfliktiv ist, mit größerer Wahrscheinlichkeit auch in Zukunft konfliktiv sein wird, und die hier offenbare Technologie den Ort anders behandeln kann, um die Gesamtleistung des Rechengeräts 100 zu verbessern.
  • Der Konflikt 117 kann einen Konflikt zwischen Threads, einen Konflikt zwischen Verarbeitungskernen, einen Konflikt um eine Sperre oder eine Kombination davon umfassen oder beinhalten. Der Thread-Konflikt kann auftreten, wenn mehrere Threads, die auf demselben Verarbeitungskern oder verschiedenen Verarbeitungskernen ausgeführt werden, um den Zugriff auf einen gemeinsamen Speicherort konkurrieren. Die mehreren Threads können Teil desselben Rechenprozesses sein (z.B. ein Multi-Thread-Prozess) oder Teil verschiedener Rechenprozesse. Die verschiedenen Rechenprozesse können demselben Rechensystem oder verschiedenen Betriebssystemen zugeordnet sein. Der Konflikt zwischen den Verarbeitungskernen kann auftreten, wenn mehrere verschiedene Verarbeitungskerne desselben Prozessors oder verschiedener Prozessoren um den Zugriff auf den gemeinsamen Speicherort konkurrieren. Der Sperrkonflikt kann auftreten, wenn eine Rechen-Entität eine Sperre für den Speicherort erwirbt und eine andere Rechen-Entität versucht, auf die Daten an diesem Ort zuzugreifen, bevor die Sperre freigegeben wurde. Die verschiedenen Rechen-Entitäten können einen oder mehrere verschiedene Threads, Prozesse, Verarbeitungskerne, Prozessoren, Rechengeräte, Hosts, Knoten, andere Rechnersysteme oder eine Kombination davon umfassen.
  • Die Orte 132A und 132B sind beispielhafte Speicherorte 130, auf die durch den Satz von Speicheroperationen 115A-Z zugegriffen wird. Ort 132A ist ein Beispiel für einen konfliktiven Ort, weil er Gegenstand des Konflikts 117 war, wie oben beschrieben. Ort 132B ist ein Beispiel für einen unumstrittenen Ort, denn obwohl die Threads 113Y und 113Z entsprechende Speicheroperationen 115Y und 115Z veranlassen, die auf Ort 132B zugreifen, finden die Zugriffe statt, ohne Konflikte zu verursachen. Die Zugriffe können aus vielen Gründen unumstritten sein. In einem Beispiel kann die frühere Speicheroperation 115Y weder eine exklusive Operation noch eine atomare Operation sein (z.B. keine Sperre erworben), und daher können sich die Speicheroperationen 115Y und 115Z überschneiden oder gleichzeitig auf Ort 132B zugreifen (z.B. mehrere Nur-Lese-Operationen). In einem anderen Beispiel kann die frühere Speicheroperation 115Y exklusiv oder atomar sein, aber die spätere Speicheroperation 115Z greift erst auf den Ort 132B zu, nachdem Thread 113Z die Verwendung des Speicherorts 132B beendet hat (z.B. nachdem die Sperre aufgehoben wurde).
  • Die Orte 132A und 132B können ein Ort in einem Adressraum sein und können einer oder mehreren Adressen entsprechen. Die Adressen können physikalische Adressen (z.B. physikalische Speicheradressen), virtuelle Adressen (z.B. virtuelle Speicheradresse), logische Adressen (z.B. logische Speicheradresse), andere Adressen oder eine Kombination davon sein. Jeder Ort kann einem Datenspeicherblock entsprechen, und der Ort kann den Anfang des Blocks, das Ende des Blocks oder einen Zwischenort im Block angeben. Auf die Orte im Adressraum kann der Prozessor 110 unter Verwendung der Verbindung 140 zugreifen.
  • Die Verbindung 140 kann den Prozessor 110 mit dem Speicher 130 koppeln. Wie hierin verwendet, bezieht sich „Kopplung mit“ oder „gekoppelt an“ im Allgemeinen auf eine Verbindung zwischen Komponenten oder Geräten, die eine indirekte kommunikative Verbindung oder eine direkte kommunikative Verbindung (z.B. ohne dazwischenliegende Komponenten oder Geräte) sein kann, ob verdrahtet oder drahtlos, einschließlich Verbindungen wie elektrische, optische, magnetische und ähnliche. Die Verbindung 140 kann einen Kommunikationskanal zwischen dem Prozessor 110 und dem Speicher 130 bereitstellen. Die Verbindung 140 kann eine oder mehrere Schnittstellen, Stecker, Adapter, andere Hardware- oder Softwarekomponenten oder eine Kombination davon umfassen. Verbindungen 140 können ein standardisiertes oder proprietäres Kommunikationsprotokoll implementieren, das Compute Express Link™ (CXL), Peripheral Component Interconnect™ (z.B. PCI, PCIe), Non-Volatile Memory Express™ (NVMe), Advanced Host Controller Interface™ (AHCI), Serial Advanced Technology Attachment Interface™ (z.B., SATA, mSATA), Small Computer System Interface™ (SCSI, iSCSI), Integrated Drive Electronics™ (z.B. IDE, EIDE), InfiniBand™, eine andere Kommunikationstechnologie oder eine Kombination davon.
  • In einem Beispiel kann die Verbindung 140 eine CPU-zu-Speicher-Verbindung sein, die eine oder mehrere CPUs mit dem Speicher 130 verbindet, der als Hauptspeicher (z.B. als Primärspeicher) dient. Der Speicher 130 kann ein oder mehrere DIMMs (z.B. DRAMs) umfassen und kann sich über einen oder mehrere Knoten (z.B. NUMA-Knoten) erstrecken und einen oder mehrere lokale Speicherknoten, entfernte Speicherknoten oder eine Kombination davon umfassen.
  • In dem in 1 gezeigten Beispiel kann der Prozessor 110 eine Konfliktverfolgungskomponente 112, eine Cache-Controller-Komponente 114 und eine Betriebsverarbeitungskomponente 116 umfassen. Die Konfliktverfolgungskomponente 112 kann den Prozessor 110 in die Lage versetzen, die Speicherorte zu detektieren, die das Ziel von Konflikten sind, und eine Datenstruktur zu aktualisieren, um anzuzeigen, welche der Speicherorte konfliktiv, nicht konfliktiv oder eine Kombination davon waren. Die Cache-Controller-Komponente 114 kann den Prozessor 110 in die Lage versetzen, die Konfliktverfolgung zur Verwaltung des Cache 120 zu verwenden. Dies kann die Durchführung von Cache-Allokations- und Räumungsoperationen beinhalten, um Daten aus dem Speicher 130 im gemeinsam genutzten Cache 122, in den privaten Caches 124A-Z, in einem anderen Teil des Prozessors 110 oder in einer Kombination davon zu speichern. Die Operationsverarbeitungskomponente 116 kann den Prozessor 110 in die Lage versetzen, Speicheroperationen 115 effizienter zu verarbeiten und die Konfliktverfolgung zu verwenden, um eine Verarbeitung außerhalb der Reihenfolge für bestimmte Speicheroperationen (z.B. komplementäre speicherexklusive Operationen) durchzuführen. Die Komponenten 112, 114 und 116 werden im Folgenden in Bezug auf die 3-4 detaillierter besprochen.
  • 2 zeigt einen beispielhaften Prozessor 110, der gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung eine Technologie zur Konfliktverfolgung und Verwaltung eines Multi-Level-Cache des Prozessors umfasst. Der Cache 120 ist der gleiche oder ein ähnlicher Cache wie der Cache 120 in 1 und zeigt den Cache in detaillierterer Form. In dem gezeigten Beispiel kann Cache 120 eine Cache-Ebene 220A mit Caches 224A-Z, eine Cache-Ebene 220B mit privaten Caches 124A-Z und eine Cache-Ebene 220C mit gemeinsam genutztem Cache 122 umfassen.
  • Der Cache 120 kann ein Multi-Level-Cache mit einer Speicherarchitektur sein, die eine Cache-Hierarchie verwendet. Die Cache-Hierarchie kann es dem Prozessor 110 ermöglichen, die Daten aus dem Speicher in einer oder mehreren Ebenen des Cache 120 als gecachte Daten zu speichern. Die Verarbeitungskerne 111A-Z können auf die im Cache gespeicherten Daten schneller zugreifen und sie verarbeiten, als wenn sie auf die Daten aus dem Speicher 130 zugreifen (z.B. beim Hauptspeicherzugriff). Jeder Zugriff auf den Speicher 130 kann zu einem Engpass für die Leistung der Verarbeitungskerne 111A-Z werden, da sie Zyklen vergeuden müssten, während sie auf das Abrufen von Daten aus dem Hauptspeicher warten. Der Prozessor 110 reduziert die Anzahl der verschwendeten Zyklen, indem er die mehreren Cache-Ebenen 220A-C verwendet.
  • Während des Betriebs verwendet der Prozessor 110 die mehreren Cache-Ebenen 220A-C. Die Cache-Steuerlogik des Prozessors 110 operiert, indem sie die Caches auf niedrigeren Ebenen überprüft, bevor sie die Caches auf den höheren Ebenen überprüft. Beispielsweise überprüft der Prozessor 110 einen Cache auf einer niedrigeren Cache-Ebene 220A (z.B. L1), und wenn die Daten vorhanden sind (z.B. ein Cache-Treffer), können die Verarbeitungskerne darauf zugreifen, und wenn die Daten nicht vorhanden sind (z.B. ein Cache-Fehlschlag), fährt der Prozessor 110 mit der Überprüfung anderer Cache-Ebenen fort. Der Prozessor 110 kann die nächsthöhere Ebene, d.h. die Cache-Ebene 220B (z.B. L2), usw. überprüfen, bevor er bestimmt, dass die Daten in allen Ebenen des Cache 120 fehlen und die Daten aus dem Speicher 130 (z.B. dem Hauptspeicher) abruft.
  • Jede der Cache-Ebenen 220A-C ist kommunikativ mit dem Prozessor 110 gekoppelt und kann intern oder extern zum Prozessor 110 sein. In dem in 2 gezeigten Beispiel können alle Ebenen des Cache 120 innerhalb des Prozessors 110 liegen (z.B. innerhalb des Prozessors umfasst sein). Eine Cache-Ebene ist prozessorintern, wenn sie sich auf dem Die des Prozessors (z.B. auf dem Chip) oder im Gehäuse des Prozessors (z.B. im Multi-Chip-Modul) befindet. Ebenso können eine oder mehrere Cache-Ebenen 220A-C Caches umfassen, die sich intern oder extern zu einem jeweiligen Verarbeitungskern des Prozessors 110 befinden. Beispielsweise können die Cache-Ebenen 220A und 220B Caches umfassen, die intern zu ihren jeweiligen Verarbeitungskernen gehören (z.B. Teil eines Verarbeitungskerns), und die Cache-Ebene 220C kann Caches umfassen, die extern zu allen Verarbeitungskernen liegen. In anderen Beispielen können eine oder mehrere Ebenen des Cache 120 außerhalb des Prozessors 110 und seiner Verarbeitungskerne liegen (z.B. außerhalb des Prozessors). Beispielsweise können sich die Cache-Ebene 220C (L3) oder eine oder mehrere zusätzliche Ebenen (z.B. L4) außerhalb des Prozessors 110 befinden (z.B. außerhalb des Chips und/oder außerhalb des Gehäuses). In beiden Beispielen kann es eine oder mehrere untere Cache-Ebenen 220A-B (z.B. L1, L2) geben, die als privater Cache dienen, und eine oder mehrere obere Cache-Ebenen 220C (z.B. L3, L4, usw.), die als gemeinsam genutzter Cache dienen.
  • Die Cache-Ebene 220A kann eine niedrigere Ebene des Cache 120 sein (z.B. die niedrigste Cache-Ebene) und kann einen oder mehrere Hardware-Caches umfassen, die Anweisungsdaten von Nicht-Anweisungsdaten trennen. Caches, die die Anweisungsdaten (z.B. ausführbare Daten) von Informationsdaten (z.B. nicht ausführbare Daten) trennen, können als getrennter Cache bezeichnet werden. Der getrennte Cache der Cache-Ebene 220A kann mehrere verschiedene Teile desselben Hardware-Caches, mehrere verschiedene Hardware-Caches oder eine Kombination davon umfassen. In dem in 2 gezeigten Beispiel kann die Cache-Ebene 220A ein Cache der ersten Ebene (L1) sein, der zwei separate lokale Caches für jeden der Verarbeitungskerne 111A-Z umfasst, und der Verarbeitungskern 111 A kann einen Cache 224A zum Speichern von Anweisungsdaten (z.B. L1i) und einen Cache 224B zum Speichern von Informationsdaten (z.B. L1d) umfassen. Bei den Caches in der Cache-Ebene 220A kann es sich um private Caches handeln, die als lokale Caches bezeichnet werden können, da sie intern zum Verarbeitungskern gehören oder die nächstgelegenen Caches zu jedem jeweiligen Verarbeitungskern sind.
  • Die Cache-Ebene 220B kann eine Zwischenebene des Cache 120 sein und kann einheitliche Caches umfassen. Ein Cache, der einheitlich ist, vermeidet die Trennung von Anweisungsdaten und hat eine Kombination von sowohl Anweisungsdaten als auch Informationsdaten und kann als einheitlicher Cache, kombinierter Cache oder ein anderer Begriff bezeichnet werden. In dem in 2 gezeigten Beispiel kann die Cache-Ebene 220B ein Cache der zweiten Ebene (L2) sein und einen einzigen einheitlichen Cache für jeden der Verarbeitungskerne 111A-Z umfassen, und der Verarbeitungskern 111A kann den privaten Cache 124A und der Verarbeitungskern 111Z den privaten Cache 124Z verwenden. Die Caches in der Cache-Ebene 220B können für einen jeweiligen Verarbeitungskern (wie dargestellt) oder für eine Teilmenge der Verarbeitungskerne 111A-Z (z.B. für ein Paar von Kernen) privat sein. Die Caches in der Cache-Ebene 220B sind möglicherweise nicht die dem Verarbeitungskern am nächsten liegenden Caches, können aber dennoch als lokaler Cache betrachtet werden, wenn sie Teil des Verarbeitungskerns sind.
  • Die Cache-Ebene 220C kann eine höhere Ebene des Cache 120 sein und einen oder mehrere gemeinsam genutzte Caches umfassen. Die Cache-Ebene 220C kann die höchste Ebene des Cache 120 sein (z.B. bei Abwesenheit von L4). Die höchste Cache-Ebene ist die letzte Ebene vor dem Hauptspeicher und kann als Cache der letzten Ebene (LLC) bezeichnet werden. In dem in 2 gezeigten Beispiel kann die Cache-Ebene 220C ein Cache der dritten Ebene (L3-Cache) sein und einen einzigen gemeinsam genutzten Cache 122 umfassen, der von allen Verarbeitungskernen 111 A-Z gemeinsam genutzt wird. Der gemeinsam genutzte Cache 122 kann ein einheitlicher Cache sein, der sowohl Anweisungs- als auch Informationsdaten speichert, und er kann mit dem gemeinsam genutzten Cache 122 von 1 identisch oder diesem ähnlich sein. Die Cache-Ebene 220C kann intern zum Prozessor 110 (wie gezeigt) oder extern zum Prozessor 110 (z.B. außerhalb des Chips oder des Gehäuses) liegen. In einem Beispiel kann die Cache-Ebene 220C ausschließlich vom Prozessor 110 verwendet werden (z.B. System-Cache). In einem anderen Beispiel kann die Cache-Ebene 220C von mehreren Prozessoren verwendet werden (z.B. globaler Cache). In beiden Beispielen kann die Cache-Ebene 220C Teil eines Multi-Level-Cache der CPU sein, der eine oder mehrere einheitliche Cache-Ebenen und eine oder mehrere getrennte Cache-Ebenen umfasst, die zum Speichern von Daten 134A-B verwendet werden können.
  • Daten 134A-B können vom Prozessor 110 aus dem Hauptspeicher empfangen und im Cache 120 gespeichert werden. Daten 134A-B, die im Cache 120 gespeichert sind, können als Cachedaten bezeichnet werden und können Anweisungsdaten (z.B. ausführbare Daten), Informationsdaten (z.B. nicht ausführbare Daten), andere Daten oder eine Kombination davon umfassen. Die Anweisungsdaten können ausführbare Daten eines Computerprogramms umfassen, das in den Hauptspeicher geladen wird und eine oder mehrere Prozessoranweisungen (z.B. CPU-Anweisungen, GPU-Anweisungen) umfassen kann. Bei den Informationsdaten kann es sich um nicht ausführbare Daten handeln, die vom Prozessor 110 vor, während oder nach der Ausführung der Prozessoranweisungen erstellt, gelesen, aktualisiert oder gelöscht werden. In einem Beispiel können die Daten 134A-B Daten einer oder mehrerer Variablen (z.B. gemeinsam genutzte Variablen oder Konstanten), eines Dateisystemobjekts (z.B. gemeinsam genutzte Dateien, Links, Verzeichnisse), eines Datenbankobjekts (z.B. Datensatz, Tupel), eines anderen Datenspeicherobjekts oder einer Kombination davon sein. Die Daten 134A-B können im Cache 120 als ein oder mehrere Blöcke 234A-C gespeichert werden.
  • Blöcke 234A-C sind Datenspeichereinheiten und können im Cache 120, im Speicher 130 oder einer Kombination davon gespeichert werden. Datenblöcke, die im Cache gespeichert sind, können als Cache-Blöcke bezeichnet werden, und Blöcke, die im Speicher gespeichert sind, können als Speicherblöcke bezeichnet werden. Die Cache-Blöcke können auch als Cache-Zeilen bezeichnet werden, und ihre Struktur wird weiter unten in Bezug auf 3 detaillierter erörtert. Die Größe der Blöcke 234A-C kann auf allen Ebenen des Cache 120 gleich sein oder auf den Ebenen des Cache 120 unterschiedlich sein. In einem Beispiel kann die Größe der Blöcke 234A-C im Cache 120 gleich sein und mit der Größe der vom Hauptspeicher empfangenen Blöcke übereinstimmen oder nicht (z.B. sind die Größe des Cache-Blocks und des Speicherblocks gleich). In einem anderen Beispiel kann die Größe der Blöcke 234A-C im Cache 120 unterschiedlich sein, und Blöcke auf einer niedrigeren Ebene (z.B. L1) können kleiner sein als die Blöcke auf einer Zwischenebene (z.B. L2) und Blöcke auf der Zwischenebene können kleiner sein als die Blöcke auf der höheren Ebene (z.B. L3). In dem in 2 gezeigten Beispiel sind die Blöcke 234A-C Cache-Blöcke, die auf verschiedenen Ebenen des Cache 120 gespeichert sind. Block 234A ist in der Cache-Ebene 220A (L1) gespeichert, Block 234B ist in der Cache-Ebene 220B (L2) gespeichert, und Block 234C ist in der Cache-Ebene 220C (L3) gespeichert.
  • Der Prozessor 110 kann die Cache-Controller-Komponente 114 verwenden, um auf die Daten 134A-B im Cache 120 zuzugreifen und sie zu speichern. Der Verarbeitungskern 111 A kann versuchen, auf die Daten 134A-B zuzugreifen, und der Prozessor 110 kann die Daten 134A und die Daten 134B vom Hauptspeicher abrufen. Der Prozessor 110 kann bestimmen, dass die Daten 134A einem konfliktiven Ort entsprechen (z.B. konfliktive Daten) und dass die Daten 134B einem nicht-konfliktiven Ort entsprechen (z.B. nicht-konfliktive Daten). Der Prozessor 110 kann eine Kopie der konfliktiven Daten 134A im gemeinsam genutzten Cache 122 speichern, so dass alle Verarbeitungskerne 111A-Z auf dieselbe Kopie der konfliktiven Daten 134A zugreifen können, was die Cache-Kohärenzoperationen reduzieren kann.
  • Der Prozessor 110 kann eine Kopie der nicht-konfliktiven Daten 134B im privaten Cache 124A (L2) für den jeweiligen Verarbeitungskern 111A speichern, der versucht hat, auf sie zuzugreifen. Die Speicherung der nicht-konfliktiven Daten im privaten Cache ermöglicht einen schnelleren Zugriff auf die nicht-konfliktiven Daten, kann aber zusätzliche Cache-Kohärenz einführen (z.B. wenn die Daten von einem oder mehreren anderen Verarbeitungskernen verwendet werden). Zum Beispiel kann der Verarbeitungskern 111Z zu einem späteren Zeitpunkt versuchen, auf die gleichen Daten 134B zuzugreifen. Der Prozessor 110 kann eine Kopie der Daten 134B erstellen und sie im privaten Cache 124Z (L2) zur Verwendung durch den Verarbeitungskern 111B speichern. Der Cache 120 umfasst nun mehrere Kopien der Daten 134B in der Cache-Ebene 220B (L2), und der Prozessor 110 wird zusätzliche Rechenressourcen (z.B. Prozessor-Overhead) verbrauchen, um die Kopien kohärent zu halten, indem er eine oder mehrere Cache-Kohärenzoperationen 213 durchführt.
  • Cache-Kohärenzoperationen 213 sind Operationen, die vom Prozessor 110 durchgeführt werden, um Cache-Kohärenz zu erhalten. Cache-Kohärenz ist die Einheitlichkeit von Daten, die in mehreren Caches des Cache 120 gespeichert sind. Wenn ein Verarbeitungskern Daten modifiziert, die von anderen Verarbeitungskernen gemeinsam genutzt werden, können die Daten in den verschiedenen Kopien inkohärent werden. Cache-Kohärenzoperationen 213 können verwendet werden, um den Cache zu verwalten und anzuzeigen, welche Kopien inkohärent sind (z.B. veraltet), um inkohärente Kopien der Daten zu aktualisieren oder eine Kombination davon. Die Cache-Controller-Komponente 114 und die Cache-Kohärenz werden weiter unten in Bezug auf 3 detaillierter behandelt.
  • Der Ort, an dem die Daten gespeichert sind, kann eine atomare Operation veranlassen, entweder eine nahe atomare 215A oder eine ferne atomare 215B zu sein. Die nahe atomare Operation 215A kann das Operieren auf Daten beinhalten, die lokal sind, und die ferne atomare Operation 215B kann das Operieren auf Daten beinhalten, die nicht lokal sind. In einem Beispiel sind Daten lokal, wenn sie lokal zu dem Verarbeitungskern gespeichert sind, der die atomare Operation ausführt. Wenn die Daten innerhalb des Verarbeitungskerns gespeichert sind (z.B. lokaler Cache, privater Cache, L1/L2), kann die atomare Operation eine nahe atomare Operation sein, und wenn die Daten außerhalb des Verarbeitungskerns gespeichert sind (z.B. gemeinsam genutzter Cache, L3/L4), kann die atomare Operation eine ferne atomare Operation sein. In einem anderen Beispiel sind Daten lokal, wenn sie lokal zu dem Prozessor gespeichert sind, der die atomare Operation ausführt. Wenn die Daten prozessorintern gespeichert sind, handelt es sich um eine nahe atomare Operation, und wenn die Daten außerhalb des Prozessors gespeichert sind (z.B. außerhalb des Chips oder des Gehäuses, L3/L4), ist die atomare Operation eine weitere atomare Operation. In beiden Beispielen kann der Prozessor 110 standardmäßig ferne atomare Operationen verwenden, um den Cache-Kohärenz-Overhead zu reduzieren, und indem er detektiert, dass die atomare Operation einer nicht-konfliktiven Operation entspricht, kann der Prozessor 110 nahe atomare Operationen durchführen, die schneller sind als die fernen atomaren Operationen.
  • 3-4 sind Blockdiagramme, die gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung den beispielhaften Prozessor 110 mit einer Technologie zur Verfolgung von Konflikten um Daten im Speicher und zur Verwendung der verfolgten Konflikte während seines Betriebs zeigen. In 3 kann der Prozessor 110 die verfolgten Konflikte verwenden, um den Cache zu verwalten und zu bestimmen, wo die Daten im Cache zu speichern sind. In 4 kann der Prozessor 110 den verfolgten Konflikt verwenden, um Speicheroperationen zu verwalten und zu bestimmen, welche Speicheroperationen außer der Reihe durchgeführt werden können.
  • Die in Bezug auf die Komponenten und Module der 3-4 diskutierten Merkmale können in Software (z.B. Programmcode) oder Hardware (z.B. Schaltungen) des Prozessors 110 implementiert werden. Ohne Verlust der Allgemeingültigkeit können auch mehr oder weniger Komponenten oder Module umfasst sein. Beispielsweise können zwei oder mehr der Komponenten zu einer einzigen Komponente kombiniert werden, oder Merkmale einer Komponente können in zwei oder mehr Komponenten aufgeteilt werden. Unter Bezugnahme auf 3 kann der Prozessor 110 eine Komponente zur Konfliktverfolgung 112 und eine Cache-Controller-Komponente 114 umfassen.
  • Die Konfliktverfolgungskomponente 112 kann verwendet werden, um die Speicherorte zu detektieren, die das Ziel von Konflikten sind, und eine oder mehrere Datenstrukturen zu aktualisieren, um anzuzeigen, welche der Speicherorte konfliktiv, nicht-konfliktiv oder eine Kombination davon gewesen sind. In einem Beispiel kann die Komponente 112 zur Konfliktverfolgung ein Konfliktbestimmungsmodul 312, ein Datenstruktur-Aktualisierungsmodul 314 und ein Ort-Überprüfungsmodul 316 umfassen.
  • Das Konfliktbestimmungsmodul 312 kann den Prozessor 110 in die Lage versetzen, zu bestimmen, dass ein Konflikt an einem Ort im Speicher besteht. Ein Konflikt kann auftreten, wenn ein erster Satz von einer oder mehreren Speicheroperationen (z.B. ein erster Thread) mit einem zweiten Satz von einer oder mehreren Speicheroperationen (z.B. ein zweiter Thread) um den Zugriff auf Daten von einem gemeinsamen Ort im Speicher konkurriert. Der gemeinsame Ort kann entstehen, wenn die Speicheroperationen demselben Speicherort entsprechen, oder wenn die Speicheroperationen verschiedenen Speicherorten entsprechen, die verschiedenen Speicherorte jedoch mindestens einen gemeinsamen Ort umfassen (z.B. überlappende Teile des Speichers).
  • Das Konfliktbestimmungsmodul 312 kann das Auftreten eines Konflikts detektieren, indem es ein oder mehrere Rechenereignisse feststellt. Die Rechenereignisse können einen oder mehrere bestimmte Fehler, Störungen (z.B. Cache-Miss, Seitenfehler), Ausnahmen, Traps oder Zustandsübergänge umfassen. Die Zustandsübergänge können das Verlassen oder Eintreten in einen Thread-Zustand (z.B. Warten, Blockieren, Pausieren, Schlafen, Laufen, Anhalten, Beenden), einen Sperrzustand (z.B. Sperren, Entsperren, Öffnen, Schließen), andere Zustandsübergänge oder eine Kombination davon sein. Das Konfliktbestimmungsmodul 312 kann eine Vorhersage darüber treffen, ob es einen Konflikt gibt (z.B. konfliktiv), ob es keine Konflikte gibt (z.B. nicht-konfliktiv, ohne Konflikte, fehlende Konflikte), ob der Konflikt fortgesetzt wird, ob die Abwesenheit von Konflikten fortgesetzt wird, ob der Konflikt oder die Abwesenheit von Konflikten in der Zukunft auftreten wird, eine andere Vorhersage oder eine Kombination davon.
  • Das Konfliktbestimmungsmodul 312 kann den Prozessor 110 in die Lage versetzen, einen oder mehrere Ereignis-Listener zu registrieren, die als Reaktion auf das Auftreten des Ereignisses eine Analyse auslösen. In einem Beispiel kann das Konfliktbestimmungsmodul 312 einen Sperrkonflikt als Antwort darauf detektieren, dass ein nachfolgender Thread nicht in der Lage ist, eine Sperre auf den gesperrten Speicherort zu erlangen (z.B. fehlgeschlagener Sperrversuch) oder nicht auf den gesperrten Speicherort zuzugreifen (z.B. Lesefehler, Schreibfehler), wobei letzteres ohne jeden Versuch, eine Sperre zu erlangen, geschehen kann. In einem anderen Beispiel kann das Konfliktbestimmungsmodul 312 Barrierenkonflikte detektieren. Eine Barriere ist ein Software-Mechanismus, der sicherstellt, dass ein Satz von Threads alle einen bestimmten Punkt innerhalb ihrer Anweisungs-Streams erreicht haben, bevor ein Thread über diesen Punkt hinaus fortfahren darf. Der Punkt kann vor, innerhalb oder nach einem oder mehreren kritischen Abschnitten liegen.
  • Das Datenstruktur-Aktualisierungsmodul 314 kann den Prozessor 110 in die Lage versetzen, eine oder mehrere Datenstrukturen 334 basierend auf dem detektierten oder vorhergesagten Konflikt zu aktualisieren. Bei der Datenstruktur 334 kann es sich um eine beliebige Datenstruktur handeln, die vom Prozessor 110 verwendet wird, um einen oder mehrere Teile der Speicherhierarchie zu verwalten, die Prozessorregister, Cache, Hauptspeicher oder eine Kombination davon umfasst. Die Datenstruktur 334 kann Metadaten umfassen, die die im Cache und Hauptspeicher gespeicherten Daten definieren, beschreiben oder organisieren. Die Datenstruktur 334 kann im Speicherbereich des Prozessors (z.B. Register, Cache), im Primärspeicher (z.B. Hauptspeicher), im Sekundärspeicher (z.B. Festplatte, Solid State Drive), an einem anderen Ort oder einer Kombination davon gespeichert werden. Die Datenstruktur 334 kann einen Satz von einem oder mehreren Einträgen umfassen, die den Speicherorten entsprechen. Die Datenstruktur 334 kann den Satz als eine oder mehrere Listen (z.B. verknüpfte Liste), Arrays (z.B. mehrdimensionales Array, Matrix, Tabelle), andere Speicherobjekte oder eine Kombination davon repräsentieren.
  • Die Einträge in dem Satz können jeweils einem oder mehreren Speicherorten entsprechen und können jeweils Konfliktdaten umfassen, die angeben, ob der eine oder die mehreren Speicherorte konfliktiv, nicht-konfliktiv oder eine Kombination davon sind. In einem Beispiel kann die Datenstruktur 334 einen Satz (z.B. Tabelle, verknüpfte Liste) umfassen, der einen Eintrag (z.B. Zeile, Spalte, Element, Knoten) für jeden Speicherort enthält, der konfliktiv ist (z.B. Konfliktdaten), ohne einen Eintrag für die nicht-konfliktiven Speicherorte zu enthalten oder umgekehrt. In einem anderen Beispiel kann die Datenstruktur 334 einen Satz (z.B. eine Bit-Map) mit einem Eintrag umfassen, der jeden Ort im Speicher repräsentiert, und eine Indikation (z.B. Bit-Flag, Konfliktdaten) für jeden Ort, die angibt, ob der Ort konfliktiv ist oder nicht. In einem weiteren Beispiel kann die Datenstruktur 334 eine Cache-Datenstruktur sein, die einen Satz von Cache-Einträgen mit eingebetteten Konfliktdaten (z.B. Konfliktindikator) umfasst.
  • Ein Cache-Eintrag kann eine Struktur mit einem oder mehreren Tags, Datenblöcken und Indikationen umfassen. Jedes Tag kann Orts-Metadaten umfassen, die den Ort im Speicher repräsentieren, der dem Cache-Eintrag entspricht. Die Orts-Metadaten können den gesamten Identifikator des Ortes (z.B. die Adresse) oder einen Teil des Identifikators (z.B. Bits niedriger oder höherer Ordnung der Adresse) umfassen. Jeder Datenblock kann die Daten aus dem Speicher umfassen, die im Cache gespeichert werden, und kann mit einer Cache-Zeile oder einem Cache-Block identisch oder diesem ähnlich sein. Jeder der Indikatoren kann ein oder mehrere Bits umfassen, die den Zustand des Datenblocks anzeigen und dem Konflikt (z.B. konfliktiv oder nicht-konfliktiv), der Kohärenz (z.B. veraltet, gültig, ungültig), der Aktualisierung (z.B. ungeschrieben, schmutzig, sauber), dem Blockieren (z.B. gesperrt, entsperrt), dem gemeinsam genutzten oder einem anderen Zustand oder einer Kombination davon entsprechen.
  • Das Datenstruktur-Aktualisierungsmodul 314 kann anzeigen, dass ein Ort ein konfliktiver Ort ist, der auf eine einzelne Instanz eines Konflikts oder auf mehrere Instanzen eines Konflikts antwortet. In einem Beispiel kann ein Speicherort ein konfliktiver Speicherort sein, wenn der Speicherort mindestens einmal Ziel eines konfliktiven Konflikts ist (z.B. eine einzelne Instanz eines Konflikts). In einem anderen Beispiel kann der Speicherort ein konfliktiver Speicherplatz sein, wenn ein oder mehrere Maße des Konflikts einen oder mehrere Schwellenwerte erfüllen (z.B. über, unter oder gleich den Schwellenwerten). Das Maß des Konflikts kann auf einem oder mehreren Beträgen des Konflikts (z.B. x Instanzen), Dauern des Konflikts (z.B. y Taktzyklen, y Nanosekunden), Raten des Konflikts (z.B. x Instanzen pro y Dauer), Anzahl der an dem Konflikt beteiligten Rechen-Entitäten (z.B. z Threads, die versucht werden, während sie gesperrt sind), Arten der beteiligten Rechen-Entitäten (z.B. Threads, Prozesse, Kerne, Prozessoren, Geräte), einem anderen Maß oder einer Kombination davon basieren.
  • Sobald eine Datenstruktur aktualisiert wird, um anzuzeigen, dass der Ort konfliktiv ist, kann der Ort auch dann konfliktiv bleiben, wenn der Konflikt gelöst ist. Zum Beispiel kann die Indikation für einen Konflikt bestehen bleiben, nachdem der Konflikt aufgelöst wurde (z.B. Ort entsperrt). Der Konfliktindikator kann für eine beliebige Zeitspanne bestehen bleiben, bis die Datenstruktur aktualisiert wird, um die Indikation zu entfernen. Die Aktualisierung der Datenstruktur zur Entfernung der Indikation kann eine Entfernungsoperation beinhalten, die den Satz aktualisiert, um das Kennzeichen, den Ort, den Eintrag oder die gesamte Datenstruktur zu entfernen. Der Entfernungsvorgang kann gleich oder ähnlich sein wie ein Toggle (z.B. Bitflip), Replace (z.B. Überschreiben), Löschen eines Eintrags, Löschen der Datenstruktur, Leeren, Flush, ein anderer Vorgang oder eine Kombination davon. Der Löschvorgang kann zu einem vorbestimmten Zeitpunkt (z.B. n Nanosekunden, geplante Zeit, nach einem bestimmten Zeitraum) oder als Antwort auf ein Rechenereignis (z.B. Beendigung eines Threads, Power Cycle, Page In/Out, Context Switch, Load/Store) erfolgen.
  • Das Ort-Überprüfungsmodul 316 kann den Prozessor 110 in die Lage versetzen, zu bestimmen, ob ein oder mehrere bestimmte Orte konfliktiv, nicht-konfliktiv oder eine Kombination davon sind. Das Bestimmen, ob ein bestimmter Ort konfliktiv ist, kann den Zugriff auf die Datenstruktur 334 und deren Analyse beinhalten, wobei der Ort im Speicher verwendet wird (z.B. Ortsdaten im Tag). Dies kann beinhalten, dass ein Eintrag in dem Satz basierend auf dem Ort identifiziert wird und bestimmt wird, ob der Eintrag angibt, dass der Ort konfliktiv oder nicht-konfliktiv ist.
  • Die Cache-Controller-Komponente 114 kann auf Daten der Konfliktverfolgungskomponente 112 zugreifen und die Daten zur Verwaltung des Cache 120 verwenden. Dies kann die Durchführung von Cache-Allokations- und Räumungsoperationen beinhalten, um Daten aus dem Speicher im gemeinsam genutzten Cache, im privaten Cache, in einem anderen Teil des Cache oder einer Kombination davon zu speichern. In einem Beispiel kann die Cache-Controller-Komponente 114 ein Speicherzugriffsmodul 322 und ein Datenspeichermodul 324 umfassen.
  • Das Speicherzugriffsmodul 322 kann es dem Prozessor 110 ermöglichen, auf den Hauptspeicher zuzugreifen, um Daten an einem Ort im Speicher abzurufen. Das Speicherzugriffsmodul 322 kann den Ort im Speicher als Eingabe empfangen oder einen anderen Ort empfangen und den Ort (z.B. einen logischen oder virtuellen Ort) in einen Ort im Speicher (z.B. einen physischen Ort) auflösen. Die Auflösung des Ortes kann eine oder mehrere Operationen umfassen, um eine oder mehrere erste Adressen (z.B. logische oder virtuelle Adressen) einer oder mehreren zweiten Adressen (z.B. physischen Adressen) zuzuordnen, wobei ein Translation-Lookaside-Buffer (TLB) verwendet werden kann oder nicht. Das Speicherzugriffsmodul 322 kann eine oder mehrere Verbindungen (siehe oben) verwenden, um auf die an dem Ort gespeicherten Daten zuzugreifen. Wie bereits erwähnt, kann der Zugriff auf Daten im Speicher einen Lesezugriff, einen Schreibzugriff oder eine Kombination davon beinhalten. Der Lesezugriff kann das Laden von Daten aus dem Speicher in den Cache umfassen und beinhaltet, dass der Prozessor 110 die Daten von dem Ort im Speicher empfängt. Der Schreibzugriff kann das Speichern der Daten aus dem Cache in den Speicher beinhalten und beinhaltet, dass der Prozessor 110 die Daten aus dem Cache an den Ort im Speicher sendet.
  • Das Datenspeichermodul 324 kann den Prozessor 110 in die Lage versetzen, die vom Hauptspeicher empfangenen Daten in einem oder mehreren Caches des Prozessors 110 zu speichern. Das Datenspeichermodul 324 kann bestimmen, wo im Cache des Prozessors die Daten zu platzieren sind. Wie oben beschrieben, kann der Prozessor-Cache mehrere Caches auf verschiedenen Ebenen umfassen und einen gemeinsam genutzten Cache sowie einen oder mehrere private Caches umfassen. Das Datenspeichermodul 324 kann Daten der Konfliktverfolgungskomponente 112 verwenden, um zu bestimmen, wo im Prozessor-Cache die Daten zu speichern sind. Wie oben beschrieben, kann das Datenspeichermodul 324 die Daten im gemeinsam genutzten Cache (z.B. L3) speichern, wenn die Daten einem konfliktiven Ort entsprechen. Wenn die Daten einem nicht-konfliktiven Ort entsprechen, kann das Datenspeichermodul 324 in einem oder mehreren der privaten Caches (z.B. L2, L1d) gespeichert werden.
  • Bei konfliktiven Orten kann das Datenspeichermodul 324 die Daten als eine einzige Kopie im gemeinsam genutzten Cache speichern und vermeiden, dass mehrere Kopien der Daten in privaten Caches vorhanden sind. In einem Beispiel kann der gesamte Prozessor-Cache (z.B. L1-L3) eine einzige Kopie der Daten aufweisen, und die einzige Kopie befindet sich im gemeinsam genutzten Cache (z.B. in L3, aber nicht in L2 oder L1). In einem anderen Beispiel kann der gesamte Prozessor-Cache eine einzige Kopie im gemeinsam genutzten Cache (z.B. in L3) und eine einzige Kopie im privaten Cache (z.B. L1d, aber nicht L2) haben. Die letztgenannte Situation kann aufgrund des Prozessordesigns immer oder gelegentlich auftreten. In jedem dieser Beispiele kann das Datenspeichermodul 324 mehrere Kopien in den privaten Caches vermeiden. Dies kann den Cache-Kohärenz-Overhead erheblich reduzieren, da die Daten von einem konfliktiven Ort stammen und wahrscheinlich von mehreren Kernen abgerufen werden und ansonsten in den jeweiligen privaten Caches der mehreren Kerne gespeichert worden wären.
  • Bei nicht-konfliktiven Orten kann das Datenspeichermodul 324 den gemeinsam genutzten Cache umgehen, indem es keinen Speicherplatz im gemeinsam genutzten Cache allokiert, um eine Kopie der Daten zu speichern. In einem Beispiel können die Daten immer noch vom gemeinsam genutzten Cache empfangen werden und den gemeinsam genutzten Cache durchlaufen, bevor sie in einem entsprechenden privaten Cache (z.B. L2) empfangen und gespeichert werden.
  • Wie oben beschrieben, kann der Prozessor-Cache mehrere Kopien in den privaten Caches (L2) vermeiden und kann als größtenteils exklusiver Cache, teilweise exklusiver Cache, nichtinklusiver, einem anderen Ausdruck, oder eine Kombination davon bezeichnet werden. Der Cache kann ein „größtenteils exklusiver Cache“ oder ein „teilweise exklusiver Cache“ sein, da die gecachten Daten in der Regel nur einmal in den verschiedenen Cache-Ebenen eines Verarbeitungskerns gespeichert werden, aber es gibt einige Situationen, in denen mehrere Kopien vorhanden sind (z.B. eine Kopie im privaten L1d und im gemeinsam genutzten L3). In einem Beispiel kann der Prozessor-Cache ein „exklusiver einheitlicher Cache“ sein, weil er eine einzige Kopie der Daten in den einheitlichen Cache-Teilen für einen bestimmten Verarbeitungskern umfasst, obwohl eine weitere Kopie in den getrennten Cache-Teilen des bestimmten Verarbeitungskerns (z.B. L1d oder L1i) vorhanden sein kann.
  • Das Datenspeichermodul 324 kann die Allokation und das Entfernen von Daten aus dem Cache übernehmen. Das Auslagern von Daten aus dem Cache kann das Entfernen von Daten (z.B. Auslagern) aus dem Cache beinhalten, um im Cache Platz für die Speicherung eingehender Daten freizumachen. Das Entfernen kann basierend auf der Konfliktivität des Speicherortes der Daten im Cache erfolgen. So kann beispielsweise das Entfernen von Daten, die einem nicht-konfliktiven Ort entsprechen, gegenüber dem Entfernen von Daten, die einem konfliktiven Ort entsprechen, priorisiert werden. Daten, die aus dem Cache entfernt werden, können anschließend überschrieben werden, wenn der Speicherplatz zum Speichern eingehender Daten verwendet wird. Das Datenspeichermodul 324 kann die Allokation des Speicherplatzes übernehmen. In einem Beispiel kann das Allokieren des Speicherplatzes das Generieren eines Cache-Eintrags beinhalten, der eine Markierung, eine Cache-Zeile und einen Satz von Indikationen umfasst. Wie oben beschrieben, kann das Tag den Speicherort markieren und die Cache-Zeile kann die Daten des Speicherortes umfassen. Der Satz von Indikatoren kann einen oder mehrere von einem Konflikt-Indikator, einem Schmutz-Indikator und einem Verfalls-Indikator umfassen.
  • Unter Bezugnahme auf 4 kann der Prozessor 110 gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung eine Technologie zum Verfolgen von Konflikten um Daten im Speicher und zum Verwenden des verfolgten Konflikts zum Verarbeiten von Speicheroperationen umfassen. Der Prozessor 110 kann die Konfliktverfolgungskomponente 112 und eine Komponente zum Verarbeiten von Operationen 116 umfassen. Die Konfliktverfolgungskomponente 112 kann die gleiche oder eine ähnliche sein wie die oben in 4 beschriebene Konfliktverfolgungskomponente 112.
  • Die Operationsverarbeitungskomponente 116 kann den Prozessor 110 in die Lage versetzen, Speicheroperationen 115 effizienter zu verarbeiten und Konfliktverfolgung zu verwenden, um eine Verarbeitung außerhalb der Reihenfolge für bestimmte Speicheroperationen durchzuführen (z.B. eine exklusive Speicheroperation, die eine vorherige Ladeoperation desselben Threads ergänzt). In einem Beispiel kann die Operationsverarbeitungskomponente 116 ein Warteschlangenmodul 422, ein Operationsanalysemodul 424 und ein Verarbeitungsmodul 426 umfassen.
  • Das Warteschlangenmodul 422 kann den Prozessor 110 in die Lage versetzen, einen geordneten (d.h. in einer Reihenfolge angeordneten) Satz von Operationen zu verwalten. Die Verwaltung des geordneten Satzes von Operationen kann das Hinzufügen von Operationen, das Entfernen von Operationen, das Umordnen der Operationen oder eine Kombination davon umfassen. Die Operationen in dem Satz können jede vom Prozessor 110 durchgeführte Operation umfassen und können Speicheroperationen und alle Nicht-Speicheroperationen umfassen, die von einem Prozessor 110 durchgeführt werden. Die Speicheroperationen werden oben in Bezug auf die Speicheroperationen 115 erörtert und können die gleichen oder ähnliche Speicherzugriffsoperationen sein, die den Zugriff auf Daten im Hauptspeicher (z.B. Lesezugriff oder Schreibzugriff) oder die Verwaltung des Zugriffs (z.B. Sperren, Ausschluss oder Synchronisation) beinhalten. Der geordnete Satz von Operationen kann in der Warteschlange 432 gespeichert werden.
  • Warteschlange 432 kann eine Datenstruktur zum Speichern und Organisieren eines Satzes von Operationen sein. Die Warteschlange kann gleich oder ähnlich einem Puffer, Array, einer Liste, einer anderen Speicherstruktur oder einer Kombination davon sein. In einem Beispiel kann die Warteschlange 432 sowohl Speicheroperationen als auch Nicht-Speicheroperationen umfassen. In einem anderen Beispiel kann die Warteschlange 432 Speicheroperationen umfassen, ohne Nicht-Speicheroperationen zu beinhalten. In beiden Beispielen kann die Warteschlange 432 eine oder mehrere Empfangswarteschlangen umfassen, die Operationen vor, während oder nach dem Verarbeiten der Operationen speichern. Sobald die Operationen verarbeitet (z.B. abgeschlossen) sind, können die Operationen aus der Warteschlange 432 entfernt werden oder aktualisiert werden, um anzuzeigen, dass sie verarbeitet wurden, und in der Warteschlange 432 verbleiben, bis sie überschrieben werden (z.B. kreisförmige Warteschlange).
  • Das Operationsanalysemodul 424 kann den Prozessor 110 in die Lage versetzen, die Operationen in dem Satz (z.B. in der Warteschlange 432) zu analysieren. Das Operationsanalysemodul 424 kann detektieren, dass der Satz Speicherladeoperationen, Speicherspeicheroperationen und null oder mehr dazwischen liegende Operationen umfasst. Ein Thread kann eine Ladespeicheroperation für einen bestimmten Speicherort umfassen und kann eine oder mehrere komplementäre Speicherspeicheroperationen für denselben Speicherort umfassen (z.B. ein komplementäres Lade-/Speicherpaar für Thread A). Die dazwischen liegenden Operationen können zwischen diesen komplementären Lade- und Speicheroperationen in dem geordneten Satz liegen. Bei den dazwischenliegenden Operationen kann es sich um jeden Typ von Operation handeln, die Speicheroperationen (z.B. Laden oder Speichern eines anderen Threads), Nicht-Speicheroperationen (z.B. Vergleiche, Datenmanipulation) oder eine Kombination davon umfassen.
  • Die Lade- und Speicheroperationen können exklusive Operationen, atomare Operationen oder eine Kombination davon sein. In einem Beispiel können die Lade- und Speicheroperationen exklusive Speicheroperationen sein. Beispielsweise kann die Ladespeicheroperation eine exklusive Ladeoperation sein, die durch die Ausführung einer Load-Exclusive-Prozessoranweisung eines Threads veranlasst wird, und die Speicherspeicheroperation kann eine exklusive Speicheroperation sein, die durch die Ausführung einer speicherexklusiven Prozessoranweisung desselben Threads veranlasst wird. Die exklusive Ladeoperation kann bestimmen, ob eine Sperre für den Speicherort zuvor von einem anderen Thread erworben wurde, und die exklusive Speicheroperation kann die Sperre erwerben.. In einem anderen Beispiel können die Operationen in dem geordneten Satz atomare Operationen umfassen, die ein Laden und Speichern als eine einzige Transaktion durchführen, die die Sperre für den Speicherort blockieren kann oder nicht.
  • Das Verarbeitungsmodul 426 kann den Prozessor 110 in die Lage versetzen, die Operationen in dem geordneten Satz von Operationen zu verarbeiten. Der Satz von Lade- und Speichervorgängen kann eine bestimmte Reihenfolge haben. Die Reihenfolge kann basierend auf einem First-in-First-out (FiFo) sein. Die Reihenfolge kann als Eingabe verwendet werden, um zu bestimmen, wann die Speicheroperationen zu verarbeiten sind. Das Verarbeitungsmodul 426 kann auf Daten der Konfliktverfolgungskomponente 112 (z.B. Metadaten und Datenstrukturen) zugreifen und die Daten zum Verarbeiten von Operationen außerhalb der Reihenfolge verwenden. So kann das Verarbeitungsmodul 426 beispielsweise einen späteren Speichervorgang für einen konfliktiven Speicherort verarbeiten, bevor es einen früheren Speichervorgang für einen nicht-konfliktiven Ort verarbeitet. In einem Beispiel kann das Verarbeitungsmodul 426 einen exklusiven Ladevorgang für einen konfliktiven Ort basierend auf der bestehenden Reihenfolge des Satzes verarbeiten und den komplementären exklusiven Speichervorgang außerhalb der Reihenfolge verarbeiten. In einem anderen Beispiel kann das Verarbeitungsmodul 426 sowohl die Load-Exclusive- als auch die Store-Exclusive-Operation für einen konfliktiven Ort außerhalb der Reihenfolge verarbeiten. In beiden Beispielen bedeutet das Verarbeiten einer Operation außerhalb der Reihenfolge, dass eine oder mehrere frühere Operationen umgangen (z.B. übersprungen) werden können, was die Zeitdauer, die zum Erfassen einer Sperre, zum Erhalten einer Sperre, zum Freigeben einer Sperre oder einer Kombination davon für den konfliktiven Ort benötigt wird, verringern kann.
  • Das Verarbeitungsmodul 426 kann den Prozessor 110 in die Lage versetzen, den Satz geordneter Operationen (z.B. die Warteschlange 432) unter Verwendung mehrerer Threads zu verarbeiten. Der Prozessor 110 kann einen ersten Thread zum Verarbeiten von Speicheroperationen zum Laden von Daten aus dem Hauptspeicher in den Cache verwenden (z.B. Operationen zum Laden von exklusivem Speicher). Der Prozessor 110 kann einen zweiten Thread zum Verarbeiten von Speicheroperationen zum Speichern von Daten aus dem Cache in den Hauptspeicher verwenden (z.B. Store-Exclusive-Memory-Operationen). Der zweite Thread kann den Satz von geordneten Operationen analysieren und komplementäre Speicheroperationen identifizieren und sie außer der Reihe verarbeiten.
  • Das Verarbeitungsmodul 426 kann auch Daten der Konfliktverfolgungskomponente 112 verwenden, um atomare Operationen effizienter zu verarbeiten. Atomare Operationen können standardmäßig unter Verwendung weiterer atomarer Operationen im Speicher verarbeitet werden, um den Cache-Kohärenz-Overhead zu reduzieren. Das Verarbeitungsmodul 426 kann detektieren, ob die atomare Operation einem konfliktiven Ort oder einem nicht-konfliktiven Ort entspricht. Wenn der atomare Vorgang einem nicht-konfliktiven Ort entspricht, kann das Verarbeitungsmodul 426 den atomaren Vorgang als nahen atomaren Vorgang (z.B. auf lokalen Daten) verarbeiten. Wenn die atomare Operation einem konfliktiven Ort entspricht, kann das Verarbeitungsmodul die atomare Operation als eine ferne atomare Operation verarbeiten. Dies kann vorteilhaft sein, weil das Verarbeitungsmodul 426 die typische Verarbeitung atomarer Operationen außer Kraft setzen kann, um Speicheroperationen schneller zu verarbeiten.
  • 5 ist ein Flussdiagramm eines Verfahrens 500 zur Verwendung von Konfliktverfolgung zur Verwaltung von Cache, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Verfahren 500 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsgerät, Schaltungen, dedizierte Logik, programmierbare Logik, Mikrocode, Hardware eines Geräts, integrierte Schaltung usw.), Software (z.B. Anweisungen, die auf einem Verarbeitungsgerät ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsbeispielen wird das Verfahren 500 vom Prozessor 110 der 1-4 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse modifiziert werden, sofern nicht anders angegeben. Daher sind die gezeigten Ausführungsbeispiele nur als Beispiele zu verstehen, und die gezeigten Prozesse können in einer anderen Reihenfolge durchgeführt werden, und einige Prozesse können gleichzeitig oder parallel durchgeführt werden. Außerdem können in verschiedenen Ausführungsbeispielen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jedem Ausführungsbeispiel erforderlich. Andere Prozessabläufe sind möglich.
  • Bei Operation 510 kann die Verarbeitungslogik eines verarbeitenden Geräts einen Ort in einem Speicher identifizieren, und der Ort im Speicher umfasst Daten. Die Verarbeitungslogik kann die Daten von dem Ort in dem Speicher empfangen und einen Cache-Eintrag generieren, der ein Tag, eine Cache-Zeile und einen Satz von Indikationen umfasst. Der Tag kann den Ort markieren, die Cache-Zeile kann die Daten von dem Ort im Speicher umfassen, und der Satz von Indikatoren kann einen oder mehrere von einem Konflikt-Indikator, einem Schmutz-Indikator und einem Verfalls-Indikator umfassen. In einem Beispiel kann die Verarbeitungslogik Zugriff auf einen Multi-Level-Cache des Prozessors haben, der eine trennende Cache-Ebene und eine oder mehrere einheitliche Cache-Ebenen umfasst. Die trennende Cache-Ebene kann Anweisungsdaten von Informationsdaten trennen und die eine oder mehreren einheitlichen Cache-Ebenen können jeweils die Anweisungsdaten mit den Informationsdaten kombinieren. In einem Beispiel kann die Verarbeitungslogik Teil einer zentralen Verarbeitungseinheit (CPU) sein, die eine Vielzahl von Verarbeitungskernen und den Cache (z.B. den Multi-Level-Cache des Prozessors) umfasst.
  • Bei Operation 520 kann die Verarbeitungslogik bestimmen, ob der Ort konfliktiv ist. Der Ort im Speicher kann konfliktiv sein, wenn mindestens ein Thread am Zugriff auf den Ort blockiert wurde, während der Ort von einem anderen Thread blockiert wurde. In einem Beispiel kann die Verarbeitungslogik bestimmen, dass ein erster Thread eine Sperre für den Ort erworben hat, und einen Sperrkonflikt als Reaktion darauf detektieren, dass ein zweiter Thread keine Sperre für den Ort erwerben konnte. Der erste Thread kann auf einem ersten Verarbeitungskern ausgeführt werden und der zweite Thread kann auf einem zweiten Verarbeitungskern ausgeführt werden. Die Verarbeitungslogik kann eine Datenstruktur aktualisieren, um anzuzeigen, dass der Ort ein konfliktiver Ort ist.
  • Bei Operation 530 kann die Verarbeitungslogik die Daten in dem gemeinsam genutzten Cache speichern, der darauf antwortet, dass der Ort konfliktiv ist. Der gemeinsam genutzte Cache kann von einer Vielzahl von Verarbeitungskernen verwendet werden. In einem Beispiel werden die Daten als eine einzige Kopie in dem gemeinsam genutzten Cache gespeichert und vermeiden mehrere Kopien der Daten in privaten Caches, um Cache-Kohärenzoperationen zu reduzieren. In einem anderen Beispiel kann der Cache ein meist exklusiver Cache sein, der eine einzige Kopie der Daten über mehrere Ebenen des Caches erhält, und die mehreren Ebenen umfassen eine einheitliche Cache-Ebene 2 (L2) und eine einheitliche Cache-Ebene 3 (L3). Die Verarbeitungslogik kann Daten vor, während oder nach der Speicherung aus dem Cache auslagern. Das Auslagern kann das Entfernen von Daten, die einem nicht-konfliktiven Ort entsprechen, gegenüber dem Entfernen von Daten, die einem konfliktiven Ort entsprechen, priorisieren.
  • Bei Operation 540 kann die Verarbeitungslogik den gemeinsam genutzten Cache umgehen und die Daten in dem privaten Cache speichern, der auf den nicht-konfliktiven Ort antwortet. Der private Cache kann von einem einzelnen Verarbeitungskern der Vielzahl von Verarbeitungskernen verwendet werden. Die Daten können in dem privaten Cache gespeichert werden, ohne dass sie in dem gemeinsam genutzten Cache gespeichert werden. Der gemeinsam genutzte Cache kann ein Cache der Ebene drei (L3) sein, der von mehreren Verarbeitungskernen gemeinsam genutzt wird, und der private Cache kann einen Cache der Ebene zwei (L2) und einen Cache der Ebene eins (L1) umfassen, die für einen der Verarbeitungskerne privat sind. In einem Beispiel kann das verarbeitende Gerät eine Vielzahl von atomaren Operationen auf den Daten des Ortes verarbeiten. Die Vielzahl atomarer Operationen kann als ferne atomare Operationen verarbeitet werden, wenn der Ort konfliktiv ist, und als nahe atomare Operationen verarbeitet werden, wenn der Ort nicht-konfliktiv ist.
  • 6 ist ein Flussdiagramm eines Verfahrens 600 zur Verwendung von Konfliktverfolgung zur Verwaltung von Speicheroperationen, gemäß einigen Ausführungsbeispielen der vorliegenden Offenbarung. Das Verfahren 600 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsgerät, Schaltungen, dedizierte Logik, programmierbare Logik, Mikrocode, Hardware eines Geräts, integrierte Schaltung usw.), Software (z.B. Anweisungen, die auf einem Verarbeitungsgerät ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsbeispielen wird das Verfahren 600 vom Prozessor 110 der 1-4 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse modifiziert werden, sofern nicht anders angegeben. Daher sind die gezeigten Ausführungsbeispiele nur als Beispiele zu verstehen, und die gezeigten Prozesse können in einer anderen Reihenfolge durchgeführt werden, und einige Prozesse können parallel durchgeführt werden. Außerdem können in verschiedenen Ausführungsbeispielen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jedem Ausführungsbeispiel erforderlich. Andere Prozessabläufe sind möglich.
  • In Block 610 kann die Verarbeitungslogik eines verarbeitenden Geräts bestimmen, dass ein Thread für den Zugriff auf Daten einer Vielzahl von gesperrten Speicherorten blockiert ist. Die Verarbeitungslogik kann bestimmen, dass ein erster Thread eine Sperre auf dem Speicherort erworben hat, und einen Sperrkonflikt als Reaktion darauf detektieren, dass ein zweiter Thread keine Sperre auf einem der Speicherorte erwerben konnte. Der erste Thread kann auf einem ersten Verarbeitungskern des Geräts ausgeführt werden und der zweite Thread kann auf einem zweiten Verarbeitungskern des Geräts ausgeführt werden.
  • Bei Operation 620 kann die Verarbeitungslogik eine Datenstruktur aktualisieren, um anzuzeigen, dass die Vielzahl von Speicherorten konfliktiv sind und die Vielzahl von Speicherorten konfliktiv bleiben kann, nachdem sie entsperrt wurde. In einem Beispiel kann die Verarbeitungslogik die Aktualisierung initiieren, antwortend auf das Detektieren eines blockierenden Konflikts.
  • Bei Operation 630 kann die Verarbeitungslogik eine erste Speicheroperation aus einer Warteschlange verarbeiten. Die Warteschlange kann die erste Speicheroperation, eine Vielzahl von dazwischenliegenden Operationen und eine zweite Speicheroperation umfassen. Die erste Speicheroperation und die zweite Speicheroperation können auf Daten eines Speicherortes operieren (d.h. können auf Daten des Speicherortes wirken). Die erste Speicheroperation und die zweite Speicheroperation können auftreten, während der Speicherort blockiert ist. In einem Beispiel kann die erste Speicheroperation eine exklusive Ladeoperation und die zweite Speicheroperation eine exklusive Speicheroperation sein. Die exklusive Ladeoperation kann durch die Ausführung einer Load-Exclusive-Prozessoranweisung eines Threads veranlasst werden und die exklusive Speicheroperation kann durch die Ausführung einer speicherexklusiven Prozessoranweisung desselben Threads veranlasst werden.
  • Bei Operation 640 kann die Verarbeitungslogik basierend auf der Datenstruktur bestimmen, dass der Speicherort ein konfliktiver Speicherort ist. In einem Beispiel kann der Speicherort eine physische Speicheradresse des Hauptspeichers sein. Die Datenstruktur kann physische Speicheradressen anzeigen, die zu irgendeinem Zeitpunkt während eines vorbestimmten Zeitraums konfliktiv waren.
  • Bei Operation 650 kann die Verarbeitungslogik die zweite Speicheroperation vor mindestens einer der dazwischenliegenden Operationen verarbeiten. Eine zwischengeschaltete Operation kann zwischen der ersten Speicheroperation und der zweiten Speicheroperation in der Warteschlange liegen. Das Verarbeiten der zweiten Speicheroperation (z.B. Speicheroperation) vor der mindestens einen dazwischenliegenden Operation in der Warteschlange kann die Zeitdauer, in der der konfliktive Ort blockiert ist, verringern. Die Warteschlange kann ein geordneter Satz von Speicheroperationen sein, der eine Vielzahl von exklusiven Ladeoperationen umfasst, gefolgt von einer Vielzahl von exklusiven Speicheroperationen. Die Verarbeitungslogik kann alle der Vielzahl von exklusiven Speicheroperationen, die sich auf konfliktive Orte beziehen, vor allen der Vielzahl von exklusiven Speicheroperationen, die sich auf nicht-konfliktive Orte beziehen, verarbeiten. In einem Beispiel kann die Warteschlange von mehreren Threads verarbeitet werden. Ein erster Thread kann Speicheroperationen zum Laden von Daten verarbeiten und der zweite Thread kann Speicheroperationen zum Speichern von Daten verarbeiten.
  • 7 zeigt einen beispielhaften Rechner eines Rechnersystems 700, in dem ein Satz von Anweisungen ausgeführt werden kann, die den Rechner veranlassen, eine oder mehrere der hierin besprochenen Methoden durchzuführen. In einigen Ausführungsbeispielen kann das Rechnersystem 700 ein Rechengerät sein, das einen Prozessor mit einem Cache-Controller, einen Speichercontroller oder eine Kombination davon umfasst. In alternativen Ausführungsbeispielen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet und/oder dem Internet verbunden (z.B. vernetzt) sein. Der Rechner kann als Server oder Client-Rechner in einer Client-Server-Netzwerkumgebung, als Peer-Rechner in einer Peer-to-Peer- (oder verteilten) Netzwerkumgebung oder als Server oder Client-Rechner in einer Cloud-Computing-Infrastruktur oder -Umgebung betrieben werden.
  • Bei der Maschine kann es sich um einen Personal Computer (PC), einen Tablet-PC, eine Set-Top-Box (STB), einen Personal Digital Assistant (PDA), ein Mobiltelefon, eine Web-Appliance, einen Server, einen Netzwerk-Router, einen Switch oder eine Bridge oder eine beliebige Maschine handeln, die in der Lage ist, einen Satz von Anweisungen (sequentiell oder anderweitig) auszuführen, die die von dieser Maschine auszuführenden Aktionen spezifizieren. Weiter wird zwar eine einzelne Maschine gezeigt, aber der Begriff „Maschine“ umfasst auch jede Sammlung von Maschinen, die individuell oder gemeinsam einen Satz (oder mehrere Sätze) von Anweisungen ausführen, um eine oder mehrere der hier erörterten Methoden durchzuführen.
  • Das beispielhafte Rechnersystem 700 umfasst ein Rechengerät 702 (z.B. Prozessor 110), einen Hauptspeicher 704 (z.B. Festwertspeicher (ROM), Flash-Speicher, dynamischer Random Access Memory (DRAM) wie synchroner DRAM (SDRAM) oder Rambus DRAM (RDRAM) usw.), einen statischen Speicher 706 (z.B. Flash-Speicher, statischer Random Access Memory (SRAM) usw.) und ein Datenspeichersystem 718, die über einen Bus 730 miteinander kommunizieren.
  • Das Gerät 702 zum Verarbeiten repräsentiert ein oder mehrere universell einsetzbare Verarbeitungseinheiten, wie z.B. einen Mikroprozessor, eine zentrale Verarbeitungseinheit oder ähnliches. Insbesondere kann das verarbeitende Gerät ein CISC-Mikroprozessor (Complex Instruction Set Computing), ein RISC-Mikroprozessor (Reduced Instruction Set Computing), ein VLIW-Mikroprozessor (Very Long Instruction Word) oder ein Prozessor sein, der andere Anweisungen implementiert, oder ein Prozessor, der eine Kombination von Anweisungen implementiert. Bei dem verarbeitenden Gerät 702 kann es sich auch um ein oder mehrere spezielle Geräte zum Verarbeiten handeln, wie z. B. einen applikationsspezifischen integrierten Schaltkreis (ASIC), ein Field Programmable Gate Array (FPGA), einen digitalen Signalprozessor (DSP), einen Netzwerkprozessor oder Ähnliches. Das verarbeitende Gerät 702 ist so konfiguriert, dass es Anweisungen 726 zum Durchführen der hier besprochenen Operationen und Schritte ausführt. Das Rechnersystem 700 kann ferner ein Netzwerk-Schnittstellengerät 708 enthalten, um über das Netzwerk 720 zu kommunizieren.
  • Das Datenspeichersystem 718 kann ein maschinenlesbares Speichermedium 724 (auch bekannt als nicht-transitorisches computerlesbares Medium) umfassen, auf dem ein oder mehrere Sätze von Anweisungen 726 oder Software gespeichert sind, die eine oder mehrere der hierin beschriebenen Methoden oder Funktionen verkörpern. Die Anweisungen 726 können sich auch vollständig oder zumindest teilweise im Hauptspeicher 704 und/oder im Rechengerät 702 befinden, während sie vom Rechnersystem 700 ausgeführt werden, wobei der Hauptspeicher 704 und das Rechengerät 702 ebenfalls maschinenlesbare Speichermedien darstellen. Das maschinenlesbare Speichermedium 724, das Datenspeichersystem 718 und/oder der Hauptspeicher 704 können dem Speicher 130 von 1 entsprechen.
  • In einem Ausführungsbeispiel umfassen die Anweisungen 726 Anweisungen zum Implementieren einer Funktionalität, die der Konfliktverfolgungskomponente 112 der 1-4 entspricht. Während das maschinenlesbare Speichermedium 724 in einem Ausführungsbeispiel als ein einzelnes Medium dargestellt ist, sollte der Begriff „nicht-transitorisches maschinenlesbares Speichermedium“ ein einzelnes Medium oder mehrere Medien umfassen, die den einen oder mehrere Sätze von Anweisungen speichern. Der Begriff „maschinenlesbares Speichermedium“ soll auch jedes Medium umfassen, das in der Lage ist, einen Satz von Anweisungen zur Ausführung durch die Maschine zu speichern oder zu kodieren, und das die Maschine veranlasst, eine oder mehrere der Methoden der vorliegenden Offenbarung durchzuführen. Der Begriff „maschinenlesbares Speichermedium“ soll dementsprechend Festkörperspeicher, optische Medien und magnetische Medien umfassen, aber nicht darauf beschränkt sein.
  • Einige Teile der vorangehenden detaillierten Beschreibungen wurden in Form von Algorithmen und symbolischen Repräsentationen von Operationen an Datenbits innerhalb eines Rechnerspeichers dargestellt. Diese algorithmischen Beschreibungen und Repräsentationen werden von Fachleuten aus dem Bereich der Datenverarbeitung verwendet, um anderen Fachleuten den Inhalt ihrer Arbeit möglichst effektiv zu vermitteln. Ein Algorithmus wird hier und im Allgemeinen als eine in sich konsistente Abfolge von Operationen verstanden, die zu einem gewünschten Ergebnis führt. Die Operationen sind solche, die physikalische Manipulationen von physikalischen Anzahlen erfordern. Normalerweise, wenn auch nicht notwendigerweise, haben diese Anzahlen die Form von elektrischen oder magnetischen Signalen, die gespeichert, kombiniert, verglichen und anderweitig manipuliert werden können. Es hat sich zuweilen als zweckmäßig erwiesen, hauptsächlich aus Gründen des allgemeinen Sprachgebrauchs, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Begriffe, Zahlen oder dergleichen zu bezeichnen.
  • Es sollte jedoch bedacht werden, dass alle diese und ähnliche Begriffe mit den entsprechenden physikalischen Anzahlen assoziiert werden müssen und lediglich zweckmäßige Markierungen für diese Anzahlen sind. Die vorliegende Offenbarung kann sich auf die Vorgänge und Prozesse eines Rechnersystems oder eines ähnlichen elektronischen Rechengeräts beziehen, das Daten, die als physikalische (elektronische) Anzahlen in den Registern und Speichern des Rechnersystems repräsentiert sind, manipuliert und in andere Daten umwandelt, die in ähnlicher Weise als physikalische Anzahlen in den Speichern oder Registern des Rechnersystems oder in anderen derartigen Informationsspeichergeräten repräsentiert sind.
  • Die vorliegende Offenbarung bezieht sich auch auf eine Vorrichtung zur Durchführung der hier beschriebenen Operationen. Diese Vorrichtung kann speziell für die beabsichtigten Zwecke konstruiert sein, oder sie kann einen Rechner für allgemeine Zwecke umfassen, der durch ein im Rechner gespeichertes Computerprogramm selektiv aktiviert oder rekonfiguriert wird. Ein solches Computerprogramm kann in einem computerlesbaren Speichermedium gespeichert werden, wie z.B., aber nicht beschränkt auf, jede Art von Diskette, einschließlich Disketten, optische Disketten, CD-ROMs und magnetisch-optische Disketten, Festwertspeicher (ROMs), Direktzugriffsspeicher (RAMs), EPROMs, EEPROMs, magnetische oder optische Karten oder jede Art von Medien, die zum Speichern elektronischer Anweisungen geeignet sind, jeweils gekoppelt an einen Rechnersystembus.
  • Die hier vorgestellten Algorithmen und Anzeigen sind nicht von Natur aus mit einem bestimmten Rechner oder einer anderen Vorrichtung verbunden. Verschiedene Allzwecksysteme können mit Programmen gemäß den hier dargelegten Lehren verwendet werden, oder es kann sich als zweckmäßig erweisen, eine speziellere Vorrichtung zur Durchführung des Verfahrens zu konstruieren. Die Struktur für eine Vielzahl dieser Systeme wird in der folgenden Beschreibung dargestellt. Darüber hinaus wird die vorliegende Offenbarung nicht unter Bezugnahme auf eine bestimmte Programmiersprache beschrieben. Es wird anerkannt, dass eine Vielzahl von Programmiersprachen verwendet werden kann, um die Lehren der Offenbarung, wie hier beschrieben, zu implementieren.
  • Die vorliegende Offenbarung kann als Computerprogrammprodukt oder Software bereitgestellt werden, die ein maschinenlesbares Medium umfassen kann, auf dem Anweisungen gespeichert sind, die dazu verwendet werden können, ein Rechnersystem (oder andere elektronische Geräte) zu programmieren, um einen Prozess gemäß der vorliegenden Offenbarung durchzuführen. Ein maschinenlesbares Medium umfasst jeden Mechanismus zum Speichern von Informationen in einer Form, die von einer Maschine (z.B. einem Rechner) gelesen werden kann. In einigen Ausführungsbeispielen umfasst ein maschinenlesbares (z.B. nicht-transitorisches, computerlesbares) Medium ein maschinenlesbares Speichermedium (z.B. einen Rechner), wie z.B. einen Festwertspeicher („ROM“), einen Speicher mit wahlfreiem Zugriff („RAM“), Magnetplattenspeichermedien, optische Speichermedien, Flash-Speicherkomponenten, usw.
  • In der vorstehenden Beschreibung wurden Ausführungsbeispiele der Offenbarung unter Bezugnahme auf spezifische Ausführungsbeispiele beschrieben. Es ist offensichtlich, dass verschiedene Modifikationen daran vorgenommen werden können, ohne von dem breiteren Verständnis und Umfang der Ausführungsbeispiele der Offenbarung, wie in den folgenden Ansprüchen dargelegt, abzuweichen. Die Beschreibung und die Zeichnungen sind dementsprechend eher in einem illustrativen als in einem einschränkenden Sinne zu verstehen.

Claims (20)

  1. System, umfassend: einen Speicher; und ein Verarbeitungsgerät, das operativ mit dem Speicher gekoppelt ist, um Operationen durchzuführen, die folgende Schritte umfassen: Bestimmen, dass ein Thread für einen Zugriff auf Daten einer Vielzahl von Speicherorten, die gesperrt sind, blockiert ist; Aktualisieren einer Datenstruktur, um anzuzeigen, dass die Vielzahl von Speicherorten konfliktiv ist, wobei die Vielzahl von Speicherorten konfliktiv bleibt, nachdem sie entsperrt wurde; Verarbeiten einer ersten Speicheroperation aus einer Warteschlange, die die erste Speicheroperation, eine Vielzahl von dazwischenliegenden Operationen und eine zweite Speicheroperation umfasst, wobei die erste Speicheroperation und die zweite Speicheroperation auf Daten eines Speicherorts operieren; Bestimmen, basierend auf der Datenstruktur, dass der Speicherort ein konfliktiver Speicherort ist; und Verarbeiten der zweiten Speicheroperation vor mindestens einer der dazwischenliegenden Operationen, wobei die mindestens eine dazwischenliegende Operation zwischen der ersten Speicheroperation und der zweiten Speicheroperation in der Warteschlange angeordnet war.
  2. System nach Anspruch 1, wobei die erste Speicheroperation bestimmt, ob eine Sperre für den Speicherort zuvor erworben wurde, und die zweite Speicheroperation die Sperre für den Speicherort erwirbt, und wobei das Verarbeiten der zweiten Speicheroperation vor der mindestens einen dazwischenliegenden Operation in der Warteschlange eine Zeitdauer bis zum Erwerb der Sperre für den konfliktiven Speicherort verringert.
  3. System nach Anspruch 1 oder 2, wobei die erste Speicheroperation eine exklusive Ladeoperation ist und die zweite Speicheroperation eine exklusive Speicheroperation ist, und wobei die exklusive Ladeoperation durch die Ausführung einer Load-Exclusive-Prozessoranweisung eines Threads veranlasst wird und wobei die exklusive Speicheroperation durch die Ausführung einer Store-Exclusive-Prozessoranweisung des Threads veranlasst wird.
  4. System nach einem der vorhergehenden Ansprüche, wobei die Warteschlange einen geordneten Satz von Speicheroperationen umfasst, der eine Vielzahl von exklusiven Ladeoperationen gefolgt von einer Vielzahl von exklusiven Speicheroperationen umfasst, und wobei alle aus der Vielzahl von exklusiven Speicheroperationen, die auf konfliktive Speicherorte gerichtet sind, vor allen aus der Vielzahl von exklusiven Speicheroperationen, die für nicht-konfliktive Speicherorte sind, verarbeitet werden.
  5. System nach einem der vorhergehenden Ansprüche, wobei die Operationen weiter umfassen: Bestimmen, dass ein erster Thread eine Sperre für den Speicherort erworben hat, wobei der erste Thread auf einem ersten Verarbeitungskern des Verarbeitungsgerätes ausgeführt wird; Detektieren eines Sperrkonflikts als Reaktion darauf, dass ein zweiter Thread keine Sperre an dem Speicherort erworben hat, wobei der zweite Thread auf einem zweiten Verarbeitungskern des Verarbeitungsgeräts ausgeführt wird; und Initiieren der Aktualisierung der Datenstruktur, um anzuzeigen, dass der Speicherort ein konfliktiver Speicherort ist.
  6. System nach einem der vorhergehenden Ansprüche, wobei die Speicherorte physikalische Speicheradressen des Hauptspeichers umfassen und wobei die Datenstruktur physikalische Speicheradressen anzeigt, die zu irgendeinem Zeitpunkt während eines vorbestimmten Zeitraums konfliktiv gewesen sind.
  7. System nach einem der vorhergehenden Ansprüche, wobei die Warteschlange von einem ersten Thread und einem zweiten Thread verarbeitet wird, wobei der erste Thread Speicheroperationen zum Laden von Daten und der zweite Thread Speicheroperationen zum Speichern von Daten verarbeitet.
  8. Verfahren umfassend: Bestimmen, dass ein Thread für den Zugriff auf Daten einer Vielzahl von Speicherorten, die gesperrt sind, blockiert ist; Aktualisieren einer Datenstruktur durch ein Verarbeitungsgerät, um anzuzeigen, dass die Vielzahl von Speicherorten konfliktiv ist, wobei die Vielzahl von Speicherorten konfliktiv bleibt, nachdem sie entsperrt wurde; Verarbeiten, durch das Verarbeitungsgerät, einer ersten Speicheroperation aus einer Warteschlange, die die erste Speicheroperation, eine Vielzahl von dazwischenliegenden Operationen und eine zweite Speicheroperation umfasst, wobei die erste Speicheroperation und die zweite Speicheroperation auf Daten eines Speicherorts operieren; Bestimmen, basierend auf der Datenstruktur, dass der Speicherort ein konfliktiver Speicherort ist; und Verarbeiten, durch das Verarbeitungsgerät, der zweiten Speicheroperation vor mindestens einer der dazwischenliegenden Operationen, wobei die mindestens eine dazwischenliegende Operation zwischen der ersten Speicheroperation und der zweiten Speicheroperation in der Warteschlange angeordnet war.
  9. Verfahren nach Anspruch 8, wobei die erste Speicheroperation bestimmt, ob eine Sperre für den Speicherort zuvor erworben wurde, und die zweite Speicheroperation die Sperre für den Speicherort erwirbt, und wobei das Verarbeiten der zweiten Speicheroperation vor der mindestens einen dazwischenliegenden Operation in der Warteschlange eine Zeitdauer bis zum Erwerben der Sperre für den konfliktiven Speicherort verringert.
  10. Verfahren nach Anspruch 8 oder 9, wobei die erste Speicheroperation eine exklusive Ladeoperation ist und die zweite Speicheroperation eine exklusive Speicheroperation ist, und wobei die exklusive Ladeoperation durch die Ausführung einer Load-Exclusive-Prozessoranweisung eines Threads veranlasst wird und wobei die exklusive Speicheroperation durch die Ausführung einer Store-Exclusive-Prozessoranweisung des Threads veranlasst wird.
  11. Verfahren nach einem der Ansprüche 8 bis 10, wobei die Warteschlange einen geordneten Satz von Speicheroperationen umfasst, der eine Vielzahl von exklusiven Ladeoperationen gefolgt von einer Vielzahl von exklusiven Speicheroperationen umfasst, und wobei alle aus der Vielzahl von exklusiven Speicheroperationen, die für konfliktive Speicherorte sind, vor allen aus der Vielzahl von exklusiven Speicheroperationen, die für nicht-konfliktive Speicherorte sind, verarbeitet werden.
  12. Verfahren nach einem der Ansprüche 8 bis 11, weiter umfassend: Bestimmen, dass ein erster Thread eine Sperre für den Speicherort erworben hat, wobei der erste Thread auf einem ersten Verarbeitungskern des Verarbeitungsgerätes ausgeführt wird; Detektieren eines Sperrkonflikts als Reaktion darauf, dass ein zweiter Thread keine Sperre an dem Speicherort erworben hat, wobei der zweite Thread auf einem zweiten Verarbeitungskern des Verarbeitungsgeräts ausgeführt wird; und Initiieren der Aktualisierung der Datenstruktur, um anzuzeigen, dass der Speicherort ein konfliktiver Speicherort ist.
  13. Verfahren nach einem der Ansprüche 8 bis 12, wobei die Speicherorte physikalische Speicheradressen des Hauptspeichers umfassen und wobei die Datenstruktur physikalische Speicheradressen anzeigt, die zu irgendeinem Zeitpunkt während eines vorbestimmten Zeitraums konfliktiv gewesen sind.
  14. Verfahren nach einem der Ansprüche 8 bis 13, wobei die Warteschlange von einem ersten Thread und einem zweiten Thread verarbeitet wird, wobei der erste Thread Speicheroperationen zum Laden von Daten und der zweite Thread Speicheroperationen zum Speichern von Daten verarbeitet.
  15. System, umfassend: einen Speicher; und ein Verarbeitungsgerät, das operativ mit dem Speicher gekoppelt ist, um Operationen durchzuführen, die folgende Schritte umfassen: Aktualisieren einer Datenstruktur, um anzuzeigen, dass eine Vielzahl von Speicherorten konfliktiv ist; Verarbeiten einer ersten exklusiven Speicheroperation aus einer Warteschlange, die die erste exklusive Speicheroperation, eine Vielzahl von dazwischenliegenden Operationen und eine zweite exklusive Speicheroperation umfasst, wobei die erste exklusive Speicheroperation und die zweite exklusive Speicheroperation auf Daten eines Speicherorts operieren; Bestimmen, basierend auf der Datenstruktur, dass der Speicherort ein konfliktiver Speicherort ist; und Verarbeiten der zweiten exklusiven Speicheroperation vor mindestens einer der dazwischenliegenden Operationen, wobei die mindestens eine dazwischenliegende Operation zwischen der ersten exklusiven Speicheroperation und der zweiten exklusiven Speicheroperation in der Warteschlange angeordnet war.
  16. System nach Anspruch 15, wobei die erste exklusive Speicheroperation bestimmt, ob eine Sperre für den Speicherort zuvor erworben wurde, und die zweite exklusive Speicheroperation die Sperre für den Speicherort erwirbt, und wobei das Verarbeiten der zweiten exklusiven Speicheroperation vor der mindestens einen dazwischenliegenden Operation in der Warteschlange eine Zeitdauer zum Erwerb der Sperre für den konfliktiven Speicherort verringert.
  17. System nach Anspruch 15 oder 16, wobei die Warteschlange einen geordneten Satz von Speicheroperationen umfasst, der eine Vielzahl von exklusiven Ladeoperationen gefolgt von einer Vielzahl von exklusiven Speicheroperationen umfasst, und wobei alle aus der Vielzahl von exklusiven Speicheroperationen, die für konfliktive Speicherorte sind, vor allen aus der Vielzahl von exklusiven Speicheroperationen, die für nicht-konfliktive Speicherorte sind, verarbeitet werden.
  18. System nach einem der Ansprüche 15 bis 17, wobei die Operationen weiter umfassen: Bestimmen, dass ein erster Thread eine Sperre für den Speicherort erworben hat, wobei der erste Thread auf einem ersten Verarbeitungskern des Verarbeitungsgerätes ausgeführt wird; Detektieren eines Sperrkonflikts als Reaktion darauf, dass ein zweiter Thread keine Sperre an dem Speicherort erworben hat, wobei der zweite Thread auf einem zweiten Verarbeitungskern des Verarbeitungsgeräts ausgeführt wird; und Initiieren der Aktualisierung der Datenstruktur, um anzuzeigen, dass der Speicherort ein konfliktiver Speicherort ist.
  19. System nach einem der Ansprüche 15 bis 18, wobei die Speicherorte physikalische Speicheradressen des Hauptspeichers umfassen und wobei die Datenstruktur physikalische Speicheradressen anzeigt, die zu irgendeinem Zeitpunkt während eines vorbestimmten Zeitraums konfliktiv waren.
  20. System nach einem der Ansprüche 15 bis 19, wobei die Warteschlange von einem ersten Thread und einem zweiten Thread verarbeitet wird, wobei der erste Thread exklusive Speicheroperationen zum Laden von Daten und der zweite Thread exklusive Speicheroperationen zum Speichern von Daten verarbeitet.
DE102023100602.9A 2022-01-20 2023-01-12 Konfliktverfolgung zur latenzreduktion bei exklusiven operationen Pending DE102023100602A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/580,360 2022-01-20
US17/580,360 US11789869B2 (en) 2022-01-20 2022-01-20 Contention tracking for latency reduction of exclusive operations

Publications (1)

Publication Number Publication Date
DE102023100602A1 true DE102023100602A1 (de) 2023-07-20

Family

ID=86990640

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102023100602.9A Pending DE102023100602A1 (de) 2022-01-20 2023-01-12 Konfliktverfolgung zur latenzreduktion bei exklusiven operationen

Country Status (3)

Country Link
US (1) US11789869B2 (de)
CN (1) CN116521580A (de)
DE (1) DE102023100602A1 (de)

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7447861B2 (en) 2004-07-14 2008-11-04 International Business Machines Corporation Integrated multi-function object locks
US7458076B2 (en) 2004-08-05 2008-11-25 International Business Machines Corporation Method, apparatus, and computer program product for dynamically tuning a data processing system by identifying and boosting holders of contentious locks
GB0518516D0 (en) 2005-09-10 2005-10-19 Ibm Managing a resource lock
US9274960B2 (en) 2012-03-20 2016-03-01 Stefanos Kaxiras System and method for simplifying cache coherence using multiple write policies
US9298623B2 (en) 2013-09-26 2016-03-29 Globalfoundries Inc. Identifying high-conflict cache lines in transactional memory computing environments
US9471397B2 (en) 2014-10-03 2016-10-18 International Business Machines Corporation Global lock contention predictor
US20160110283A1 (en) 2014-10-20 2016-04-21 Microsoft Corporation On-demand expansion of synchronization primitives
US10394682B2 (en) * 2015-02-27 2019-08-27 Vmware, Inc. Graphical lock analysis
US9552235B2 (en) 2015-02-27 2017-01-24 Vmware Inc. Using pagerank algorithm-based lock analysis to identify key processes for improving computing system efficiency
US10102037B2 (en) * 2016-06-30 2018-10-16 International Business Machines Corporation Averting lock contention associated with core-based hardware threading in a split core environment
US11216378B2 (en) 2016-09-19 2022-01-04 Advanced Micro Devices, Inc. Techniques for handling cache coherency traffic for contended semaphores
US11294652B2 (en) 2018-04-17 2022-04-05 The Board Of Regents Of The University Of Texas System Low-overhead detection techniques for synchronization problems in parallel and concurrent software
CN110609807B (zh) * 2018-06-15 2023-06-23 伊姆西Ip控股有限责任公司 用于删除快照数据的方法、设备和计算机可读存储介质
US11442730B2 (en) 2018-09-21 2022-09-13 Oracle International Corporation Ticket locks with enhanced waiting
US11243884B2 (en) * 2018-11-13 2022-02-08 Advanced Micro Devices, Inc. Control flow guided lock address prefetch and filtering
US11010210B2 (en) 2019-07-31 2021-05-18 International Business Machines Corporation Controller address contention assumption

Also Published As

Publication number Publication date
US11789869B2 (en) 2023-10-17
US20230244604A1 (en) 2023-08-03
CN116521580A (zh) 2023-08-01

Similar Documents

Publication Publication Date Title
DE112011105042B4 (de) Indikatoren zur Aufzeichnung einer letzten Verzweigung für einen Transaktionsspeicher
DE112005003874B3 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE112006002237B4 (de) Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE60005701T2 (de) Threadumschaltungslogik in einem multithreadprozessor
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE60002200T2 (de) Umschaltungsverfahren in einem multithreadprozessor
DE102007054057A1 (de) Mechanismus zum Detektieren und Vorhersagen eines kritischen Abschnitts zur Hardware-Lock-Elision
DE112012005210B4 (de) Bereitstellen eines gemeinsamen Caching-Agenten für ein Kern- und integriertes Ein-/Ausgabe-(IO)-Modul
DE112004001133T5 (de) Warteschlangen-Sperren mit Monitor-Memory-Wait
DE112005002180T5 (de) Lösen von Cachekonflikten
DE112006003597T5 (de) Unbeschränkte Transaktionsspeichersysteme
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE112015004750T5 (de) Eine beinahe faire aktive sperre
DE102005032949A1 (de) Verfahren und Vorrichtung zum Implementieren von Speicherordnungsmodellen mit Ordnungsvektoren
DE112005001515T5 (de) Verfahren und Vorrichtung zur spekulativen Ausführung von nicht kollisionsbehafteten Sperrbefehlen
DE112013000891T5 (de) Verbessern der Prozessorleistung für Befehlsfolgen, die Sperrbefehle enthalten
DE112005002402T5 (de) Hybride Hardware-/Software-Implementierung eines Transaktionsspeicherzugriffs
DE102012224265A1 (de) Gemeinsame Nutzung dicht benachbarter Daten-Cachespeicher
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE112006001698T5 (de) Grundfunktionen zum Verbessern von Thread-Level Spekulation
DE112009000741T5 (de) Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen
DE112011101364T5 (de) Fehlerbehebung in Multithread-Code
DE102010034555A1 (de) Bereitstellen von Zustandsspeicher in einem Prozessor für Systemmanagement-Modus

Legal Events

Date Code Title Description
R012 Request for examination validly filed