DE102018131816A1 - Bedarfsgesteuerte speicherdeduplizierung - Google Patents

Bedarfsgesteuerte speicherdeduplizierung Download PDF

Info

Publication number
DE102018131816A1
DE102018131816A1 DE102018131816.2A DE102018131816A DE102018131816A1 DE 102018131816 A1 DE102018131816 A1 DE 102018131816A1 DE 102018131816 A DE102018131816 A DE 102018131816A DE 102018131816 A1 DE102018131816 A1 DE 102018131816A1
Authority
DE
Germany
Prior art keywords
staging area
data
threshold
usage amount
field
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE102018131816.2A
Other languages
English (en)
Inventor
Chandan Egbert
Amin Firoozshahian
Mahesh Maddury
John Stevenson
Henk Neefs
Omid Azizi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102018131816A1 publication Critical patent/DE102018131816A1/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/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/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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/604Details relating to cache allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Hierin sind verschiedene Systeme und Verfahren zur Computerspeicherverwaltung beschrieben. Ein System zur Computerspeicherverwaltung weist eine erste Speichervorrichtung, die eine Zuordnungstabelle aufweist, eine zweite Speichervorrichtung, die einen Stagingbereich aufweist, eine dritte Speichervorrichtung, die eine Deduplizierungsdatenregion aufweist, und eine Speichersteuerung, die betrieben werden kann, um: eine Speicherzugriffsanfrage zu erhalten, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; die Daten in den Stagingbereich zu schreiben; und die Zuordnungstabelle mit der Adresse zu aktualisieren, auf.

Description

  • TECHNISCHES GEBIET
  • Die hierin beschriebenen Ausführungsformen beziehen sich allgemein auf Computerspeicherverwaltung und insbesondere auf Systeme und Verfahren zur bedarfsgesteuerten Speicherdeduplizierung.
  • ALLGEMEINER STAND DER TECHNIK
  • Bei modernen Computersystemen hat die Speichersystemkapazität nicht mit der steigenden Systemkomplexität und den steigenden Anwendungsanforderungen Schritt gehalten, was die Speicherverfügbarkeit und Leistungsfähigkeit zu einem zunehmend einschränkenden Faktor macht. Die Speicherkosten bilden einen beträchtlichen Anteil an den Gesamtsystemkosten. Dementsprechend wäre es ein Fortschritt in der Technik, eine verbesserte Speicherverwaltung bereitzustellen.
  • Figurenliste
  • In den Zeichnungen, die nicht unbedingt maßstabsgetreu gezeichnet sind, können gleiche Bezugszeichen ähnliche Komponenten in verschiedenen Ansichten beschreiben. Gleiche Bezugszeichen mit verschiedenen angehängten Buchstaben können verschiedene Beispiele ähnlicher Komponenten darstellen. Einige Ausführungsformen sind beispielhaft und nicht einschränkend in den Figuren der begleitenden Zeichnungen veranschaulicht.
    • 1 ist ein Diagramm, das Hardware- und Softwarearchitektur eines Computersystems, in welchem verschiedene Schnittstellen zwischen Hardwarekomponenten und Softwarekomponenten gezeigt sind, gemäß einer Ausführungsform veranschaulicht;
    • 2 ist ein Blockdiagramm, das eine bedarfsgesteuerte Speicherdeduplizierungsmikroarchitektur gemäß einer Ausführungsform veranschaulicht;
    • 3 ist ein Diagramm, das die Stagingbereichsnutzung im Verlaufe der Zeit gemäß einer Ausführungsform veranschaulicht;
    • 4 ist ein Flussdiagramm, das ein Verfahren zur Computerspeicherverwaltung gemäß einer Ausführungsform veranschaulicht;
    • 5 ist ein Flussdiagramm, das ein Verfahren zur Computerspeicherverwaltung gemäß einer Ausführungsform veranschaulicht;
    • 6 ist ein Blockdiagramm, das eine beispielhafte Maschine, bei welcher eine oder mehrere der hierin erörterten Techniken (z. B. Methodologien) durchgeführt werden können, gemäß einer Ausführungsform veranschaulicht;
    • 7A-7B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und die Befehls-Templates davon gemäß einer Ausführungsform veranschaulichen;
    • 8A-8D sind Blockdiagramme, die ein spezifisches vektorgerechtes Befehlsformat gemäß einer Ausführungsform veranschaulichen;
    • 9 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform;
    • 10A ist ein Blockdiagramm, das sowohl eine In-Order-Pipeline als auch eine Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführungspipeline gemäß einer Ausführungsform veranschaulicht;
    • 10B ist ein Blockdiagramm, das sowohl einen In-Order-Architekturkern als auch einen Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführungsarchitekturkern, der in einem Prozessor aufzunehmen ist, gemäß einer Ausführungsform veranschaulicht;
    • 11A-11B veranschaulichen Blockdiagramme einer spezifischeren In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderen Kernen des gleichen Typs und/oder anderer Typen) in einem Chip wäre, gemäß einer Ausführungsform;
    • 12 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern aufweisen kann, der eine integrierte Speichersteuerung aufweisen kann und der integrierte Grafiken aufweisen kann, gemäß einer Ausführungsform;
    • 13-16 sind Blockdiagramme von Computerarchitekturen gemäß einer Ausführungsform; und
    • 17 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlskonverters zum Konvertieren binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß einer Ausführungsform gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zum Zweck der Erklärung zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis einiger beispielhafter Ausführungsformen zu ermöglichen. Es wird einem Fachmann jedoch offensichtlich, dass die vorliegende Offenbarung ohne diese spezifischen Details umgesetzt werden kann.
  • In einer zentralen Verarbeitungseinheit (CPU, Central Processor Unit) werden Daten und Befehle von einem Cache abgerufen. Moderne CPUs weisen mehrere Cache-Ebenen auf. Die Ebenen werden üblicherweise als Level One(L1), Level Two(L2) und Level Three(L3)-Cache bezeichnet. Daten werden zwischen dem Hauptspeicher und dem Cache in Blöcken mit einer festen Größe, die Cache-Zeilen oder Cache-Blöcke genannt werden, übertragen. Wenn eine Cache-Zeile in den Cache kopiert wird, wird ein Cache-Eintrag erstellt. Wenn eine Cache-Zeile geräumt wird, wird sie zurück in den Speicher geschrieben. Es ist möglich, dass mehrere Prozesse oder sogar derselbe Prozess Cache-Zeilen bei verschiedenen Adressen besitzen, die genau die gleichen Werte enthalten. Dies ist unter dem Begriff duplizierte Daten bekannt.
  • Eine Speicherdeduplizierung ist der Prozess für eine effiziente Speichernutzung. Anstelle des Speicherns von mehreren Cache-Zeilen mit denselben Daten (oder Befehl) in dem Speicher werden zusätzliche Datenstrukturen verwendet, um zu verfolgen, welche Adressen dieselben „deduplizierten“ Daten speichern können. Die Speicherdeduplizierung wird in Hardware durchgeführt und kann ein Teil der Speichersteuerung sein.
  • Die Speicherdeduplizierung kann einen hohen Speicherbandbreitenoverhead aufgrund der Inhaltsnachschlageprozesse aus dem Speicher hervorrufen. Zum Beispiel erfordert in einer generellen Form bei jedem Schreibvorgang der Speicherdeduplizierungsprozess ein Durchsuchen des gesamten Inhalts des Speichers oder eines Teils davon, um zu bestimmen, ob duplizierte Daten vorhanden sind. Es wird ein effizienterer Speicherdeduplizierungsprozess benötigt. Selbst mit einem stark optimierten Suchprozess können mehrere (z. B. 3 oder mehr) Speicherzugriffe nötig sein, um einen Schreibvorgang zu deduplizieren, und daher verbrauchen die Schreibvorgänge Speicherbandbreite.
  • Das vorliegende Dokument beschreibt einen bedarfsgesteuerten Deduplizierungsprozess im Speicher, der die Bandbreitenkosten der generellen Form der Speicherdeduplizierung behandelt. Die bedarfsgesteuerte Deduplizierung verringert dramatisch den Bandbreitenverbrauch eines deduplizierten Speichersystems. In einigen Fällen betragen die Bandbreiteneinsparungen 30-40 % oder mehr.
  • Die bedarfsgesteuerte Deduplizierung richtet sich auf den Deduplizierungsprozess bei stabilen Daten anstelle von sich schnell ändernden Daten. Dies geschieht durch Einführen eines Stagingbereichs zum Verzögern des Deduplizierungsprozesses. Dieser Stagingbereich agiert als Umschreibungsfilter, der Modifikationen der Daten, die zu bewältigen sind, bevor die Deduplizierungskosten in dem Speicher hervorgerufen werden, erlaubt.
  • Die wichtigste Erkenntnis der bedarfsgesteuertem Deduplizierung ist, dass es ein vergeudeter Aufwand ist, die Daten eines Schreibvorgangs auf eine Adresse zu deduplizieren, welche in naher Zukunft erneut umgeschrieben werden. Wenn zum Beispiel eine bestimmte Adresse in dem Speicher Teil einer größeren Arbeitsgruppe einer Anwendung ist und sich immer noch regelmäßig ändert, würde es Speicherbandbreite einsparen, wenn der Deduplizierungsprozess nur aufgerufen werden würde, nachdem sich die Daten stabilisiert hatten. Von daher versucht die bedarfsgesteuerte Deduplizierung, Daten zu deduplizieren, die stabil sind - entweder Adressen mit einem hohen Leseaufkommen oder Adressen, die nicht aktiv durch die Software manipuliert werden.
  • 1 ist ein Diagramm, das Hardware- und Softwarearchitektur 100 eines Computersystems gemäß einer Ausführungsform veranschaulicht, in welchem verschiedene Schnittstellen zwischen Hardwarekomponenten und Softwarekomponenten gezeigt sind. Wie durch HW angegeben ist, sind Hardwarekomponenten unterhalb der Trennlinie dargestellt, während sich Softwarekomponenten (durch SW gekennzeichnet) oberhalb der Trennlinie befinden. Auf der Hardwareseite sind die Verarbeitungsvorrichtungen 102 (welche einen oder mehrere Mikroprozessoren, Digitalsignalprozessoren usw. aufweisen können, die jeweils einen oder mehrere Prozessorkerne aufweisen) mit der Speicherverwaltungsvorrichtung 104 und der Systemverschaltung 106 verbunden. Die Speicherverwaltungsvorrichtung 104 stellt Zuweisungen zwischen virtuellem Speicher, der von Prozessen verwendet wird, die ausgeführt werden, und dem physikalischen Speicher bereit. Die Speicherverwaltungsvorrichtung 104 kann ein integraler Bestandteil einer zentralen Verarbeitungseinheit sein, welche auch die Verarbeitungsvorrichtungen 102 beinhaltet.
  • Die Verschaltung 106 weist eine Backplane, wie etwa Speicher, Daten und Steuerleitungen, sowie die Schnittstelle mit Eingabe/AusgabeVorrichtungen, z. B. PCI, USB usw., auf. Der Speicher 108 (z. B. dynamische Direktzugriffsspeicher - DRAM) und der nichtflüchtige Speicher 110, wie etwa Flash-Speicher (z. B. elektrisch löschbarer Nur-Lese-Speicher - EEPROM, NAND Flash, NOR Flash usw.), sind mit der Speicherverwaltungsvorrichtung 104 und der Verschaltung 106 über die Speichersteuerung 112 verbunden. Diese Architekturmikroarchitektur 100 kann in einigen Ausführungsformen direkten Speicherzugriff (DMA, Direct Memory Access) durch Peripherievorrichtungen unterstützen. Die E/A-Vorrichtungen, einschließlich Video- und Audio-Adapter, nichtflüchtigem Speicher, externen Peripherieverknüpfungen, wie etwa USB, Bluetooth usw., sowie Netzwerkschnittstellenvorrichtungen, wie etwa jene, die über Wi-Fi oder LTE-Familien-Schnittstellen kommunizieren, sind gemeinsam als E/A-Vorrichtungen und Netzwerke 114 dargestellt, welche mit der Verschaltung 106 über entsprechende E/A-Steuerungen 116 verbunden sind.
  • In einer verwandten Ausführungsform unterstützt die Eingabe/Ausgabe-Speicherverwaltungseinheit IOMMU (Input/Output Memory Management Unit) 118 einen sicheren Direktspeicherzugriff (DMA, Direct Memory Access) durch Peripherievorrichtungen. Die IOMMU 118 kann Speicherschutz durch Erwägen eines Zugriffs auf den Speicher 108 von der E/A-Vorrichtung 114 bereitstellen. Die IOMMU 118 kann auch DMA-Speicherschutz in virtualisierten Umgebungen bereitstellen, wo sie bestimmten Hardwareressourcen erlaubt, bestimmten Gast-VMs zugewiesen zu werden, die auf dem System laufen, und verstärkt die Isolierung zwischen anderen VMs und Peripherievorrichtungen, die diesen nicht zugewiesen sind.
  • Auf der Softwareseite wird eine Vorbetriebssystem(Pre-OS)-Umgebung 120 bei einem anfänglichen Hochfahren des Systems ausgeführt und ist für das Starten des Hochfahrens des Betriebssystem zuständig. Ein traditionelles Beispiel für eine Pre-OS-Umgebung 120 ist ein Basis-Eingabe/Ausgabe-System (BIOS, Basis Input/Output System). In gegenwärtigen Systemen kann eine vereinheitlichte erweiterbare Firmware-Schnittstelle (UEFI, Unified Extensible Firmware Interface) implementiert werden. Die Pre-OS-Umgebung 120 ist für das Starten des Ingangsetzens des Betriebssystems zuständig, stellt jedoch auch eine Ausführungsumgebung für eingebettete Anwendungen bereit.
  • Das Betriebssystem (OS, Operating System) 122 stellt einen oder mehrere Kernel bereit, die die Hardwarevorrichtungen steuern, verwaltet Speicherzugriff für Programme in dem Speicher, koordiniert Aufgaben und ermöglicht Multi-Tasking, organisiert zu speichernde Daten, weist Speicherraum und andere Ressourcen zu, lädt binären Programmcode in den Speicher, startet die Ausführung des Anwendungsprogramms, welches dann mit dem Benutzer und mit Hardwarevorrichtungen interagiert, und detektiert und reagiert auf verschiedene definierte Unterbrechungen. Ebenfalls stellt das Betriebssystem derart 122 Vorrichtungstreiber und eine Vielfalt an üblichen Diensten, wie etwa jenen, die eine Verbindung mit Peripherievorrichtungen und Netzwerken ermöglichen, die eine Abstraktion für Anwendungsprogramme bereitstellen, dass die Anwendungen nicht für das Behandeln der Details solcher üblichen Operationen zuständig sein müssen, bereit. Das Betriebssystem 122 stellt zusätzlich eine grafische Benutzerschnittstelle (GUI, Graphical User Interface) bereit, die eine Interaktion mit dem Benutzer über Peripherievorrichtungen, wie etwa einem Monitor, einer Tastatur, einer Maus, einem Mikrofon, einer Videokamera, einem Touchscreen und dergleichen, ermöglicht.
  • Das Laufzeitsystem 124 implementiert Teile eines Ausführungsmodells einschließlich Operationen wie Stellparametern auf den Stapel vor einem Funktionsaufruf, des Verhaltens von Platten-Eingabe/Ausgabe (E/A) und paralleler ausführungsbezogener Verhalten. Das Laufzeitsystem 124 kann auch Supportdienste, wie etwa Typenüberprüfung, Fehlerbeseitigung oder Codeerstellung und -optimierung durchführen.
  • Die Bibliotheken 126 weisen Sammlungen von Programmfunktionen auf, die eine weitere Abstraktion für Anwendungsprogramme bereitstellen. Diese schließen zum Beispiel gemeinsame Bibliotheken, dynamische verknüpfte Bibliotheken (DLLs, Dynamic Linked Libraries) ein. Die Bibliotheken 126 können in dem Betriebssystem 122, dem Laufzeitsystem 124 integriert sein oder hinzugefügte Funktionen oder sogar aus der Entfernung gehostet sein. Die Bibliotheken 126 definieren eine Anwendungsprogrammschnittstelle (API, Application Program Interface), durch welche eine Vielzahl an Funktionsaufrufen durch Anwendungsprogramme 128 durchgeführt werden können, um die von dem Betriebssystem 122 bereitgestellten Dienste aufzurufen. Die Anwendungsprogramme 128 sind jene Programme, die nützliche Aufgaben für Benutzer über die Aufgaben hinaus durchführen, die von Systemprogrammen einer niedrigeren Ebene durchgeführt werden, die die Basisoperabilität der Rechenvorrichtung selbst koordinieren.
  • 2 ist ein Blockdiagramm, das eine bedarfsgesteuerte Speicherdeduplizierungsmikroarchitektur 200 gemäß einer Ausführungsform veranschaulicht. Die bedarfsgesteuerte Speicherdeduplizierungsmikroarchitektur 200 weist eine Deduplizierungssteuerung 202 und eine Speichervorrichtung 204 auf. Die Speichervorrichtung 204 kann ein Hauptspeicher sein, von dem Teile in einem Befehls- oder Datencache, wie etwa einem L1-, L2- oder L3-Cache, der mit einem Prozessor 206 verknüpft ist, gecached werden können.
  • Die Speichervorrichtung 204 weist mehrere Nutzungsbereiche auf: eine Zuordnungstabelle 208, eine Deduplizierungsdatenregion 210 und einen Stagingbereich 212. Die Zuordnungstabelle 208 wird verwendet, um Verweise zwischen dem Prozessor-Adress-Raum und dem Adressraum in der Deduplizierungsdatenregion 210 zu speichern. Die Deduplizierungsdatenregion 210 speichert Zeilen von deduplizierten Daten oder Befehlen. Der Stagingbereich 212 wird verwendet, um in dem Hauptspeicher neu geschriebene Cache-Zeilen zu speichern. Der Stagingbereich 212 agiert als Puffer oder Cache für die Deduplizierungsdatenregion 210 und gleicht Speicherzugriffe auf die Deduplizierungsdatenregion 210 aus. Der Stagingbereich 212 ist derart bemessen, dass er die Vorteile des Stagingbereichs 212 gegenüber den Vorteilen der Deduplizierungsdatenregion 210 ausgleicht. In einer Ausführungsform beträgt der Stagingbereich 212 10 % der Deduplizierungsdatenregion 210.
  • Die Speichervorrichtung 204 kann in verschiedenen Ausführungsformen eine einzige Vorrichtung bilden oder kann mehrere Vorrichtungen darstellen, die sich auf dem Die, in einem gemeinsamen Package, auf einer gemeinsamen Leiterplatte oder auf einem gemeinsamen Bus befinden. Von daher können die Zuordnungstabelle 208, die Deduplizierungsdatenregion 210 und der Stagingbereich 212 in einer einzigen Speichervorrichtung oder auf mehreren Speichervorrichtungen gespeichert werden. Je nach der Größe jeder Datenstruktur (208, 210 oder 212) oder der Speicherorganisation können die Zuordnungstabelle 208, die Deduplizierungsdatenregion 210 oder der Stagingbereich 212 auf mehreren Speichervorrichtungen gespeichert werden.
  • Die Deduplizierungssteuerung 202 fängt Speicherzugriffe von dem Prozessor 206 ab und implementiert eine Logik zum Bearbeiten der Lese- oder Schreibanfrage. Insbesondere verwaltet die Deduplizierungssteuerung 202 das Dereferenzierungsniveau unter Verwendung der Zuordnungsstabelle 208. Als Reaktion auf einen Lesevorgang werden Daten in den Stagingbereich 212 geschrieben (Operation A). Hier verwendet ein Schreibvorgang in den Stagingbereich 212 nur einen einzigen Schreibvorgang im Gegensatz zu dem allgemeineren Deduplizierungsprozess, der mehrere Speicherzugriffe benötigt.
  • Nach dem Schreiben in den Stagingbereich 212 wird die Zuordnungstabelle 208 aktualisiert, um die Adresse auf den Ort innerhalb des Stagingbereichs 212 zu richten. Wenn der Prozess versucht, erneut auf den Ort zuzugreifen, wird die Adresse in der Zuordnungstabelle 208 in den Ort in dem Stagingbereich 212 übersetzt. Solange die Daten in dem Stagingbereich 212 verbleiben, bewältigen sie Umschreibvorgänge mit geringen Kosten. Insbesondere überschreiben Schreibvorgänge auf Adressen, die dem Stagingbereich 212 zugeordnet werden, einfach den Inhalt direkt in dem Stagingbereich 212. Diese Aktivität wird als Umschreibungsfiltern bezeichnet und ist für Bandbreiteneinsparungen wesentlich. Durch Vermeiden des Nachschlagens der Deduplizierungsdatenregion 210 sind Schreibvorgänge und Umschreibvorgänge einfache atomare Aktivitäten mit einem geringen Overhead, im Unterschied zu der Adressübersetzung.
  • Die Deduplizierungssteuerung 202 weist eine sekundäre Funktion auf, um stabile Daten von dem Stagingbereich 212 in die Deduplizierungsdatenregion 210 zu bewegen (Operation B). Diese Funktion wird als „Rückforderung“ bezeichnet, da sie Speicherkapazität von den duplizierten Daten zurückfordert. Die Rückforderungsfunktion wird parallel mit Speicherzugriffen auf den Stagingbereich 212 durchgeführt. Die Rückforderungsfunktion kann ein Prozess sein, der von der Deduplizierungssteuerung 202 basierend auf verschiedenen Bedingungen ausgelöst wird.
  • In einer Ausführungsform weist die Deduplizierungssteuerung 202 eine bedarfsgesteuerte Steuerungslogik 214 und eine Rückforderungsdurchsuchungsengine 216 auf. Die bedarfsgesteuerte Steuerungslogik 214 überwacht die Anzahl an Schreibvorgängen in den Stagingbereich 212, die Nutzung des Stagingbereichs 212 und startet die Rückforderungsdurchsuchungsengine 216 gemäß den Bedingungen des Stagingbereichs 212. Der Stagingbereich 212 weist eine feste Größe auf, um einen Dauerzustand im Durchschnitt für jeden Schreibvorgang beizubehalten, der Daten in den Stagingbereich 212 platziert, wobei eine übereinstimmende Rückforderung vorhanden sein muss, die Daten aus dem Stagingbereich 212 heraus bewegt.
  • Wenn der Stagingbereich 212 voller wird, aktiviert die bedarfsgesteuerte Steuerungslogik 214 die Rückforderungsdurchsuchungsengine 216, um Zeilen aus dem Stagingbereich 212 heraus zu deduplizieren und diese in die Deduplizierungsdatenregion 210 zu bewegen. Da der Rückforderungsprozess eine Tabellendurchsuchung der Zuordnungstabelle 208 erfordert, ist er nicht umgehend. Von daher ist die bedarfsgesteuerte Steuerungslogik 214 konfiguriert, um die Rückforderungsdurchsuchungsengine 216 zu aktivieren, bevor sich der Stagingbereich 212 vollständig füllt.
  • Wenn ein kontinuierlicher Burst von Schreibvorgängen vorhanden ist, die den Stagingbereich 212 vollständig füllen, dann kann die bedarfsgesteuerte Steuerungslogik 214 die Schreibvorgänge in den Stagingbereich 212 deaktivieren und werden die Schreibvorgänge spontan dedupliziert. Der Zeitablauf des Rückforderungsprozesses wird ausführlicher in 3 weiter unten beschrieben.
  • Die Rückforderungsdurchsuchungsengine 216 kann eine Heuristik verwenden, um zu kennzeichnen, welche Zeilen in dem Stagingbereich 212 auf die Deduplizierungsdatenregion 210 dedupliziert werden. In einer Ausführungsform durchsucht die Rückforderungsdurchsuchungsengine 216 die Zuordnungstabelle 208, um Einträge zu kennzeichnen, die auf den Stagingbereich 212 hindeuten. Die Rückforderungsdurchsuchungsengine 216 kann die Deduplizierung auf diesen Zeilen starten. Wenngleich diese Heuristik gelegentlich eine falsche Auswahl auswählen kann, wobei Daten ausgewählt werden, die sich bald ändern werden, wird die Adresse zurück in den Stagingbereich 212 bei dem nächsten Schreibvorgang abgebildet. Solange die Rückforderungsrate nicht so schnell läuft, dass sie viele solcher Fehler verursacht, bleiben die Umschreibungsfilterraten hoch.
  • Die Rückforderungsdurchsuchungsengine 216 kann eine zeitbasierte Heuristik verwenden und einen Alterbestimmungsmechanismus bei den Schreibvorgängen anwenden. Zum Beispiel kann ein grobkörniger Zeitstempel in der Zuordnungstabelle 208 nach jedem Schreibvorgang gespeichert werden. Der Zeitstempel wird verwendet, um das Alter der Adresse der entsprechenden neu geschriebenen Daten zu bestimmen. Basierend auf dem Zeitstempel kann die Rückforderungsdurchsuchungsengine 216 einen Teilsatz von Adressen in der Zuordnungstabelle 208 von ältesten zu neuesten verarbeiten. Es kann ein fortlaufender 2-Bit-Zeitstempel verwendet werden, um vier Zeiträume zu erzeugen, und die Rückforderungsdurchsuchungsengine 216 kann konfiguriert sein, um sich durch die Zeiträume auf eine Art zu drehen, dass sie die ältesten Schreibvorgänge zuerst bearbeitet. Es können andere Zeitstempelformate verwendet werden, wie etwa 1-Bit, 3-Bit, 4-Bit oder mit einer anderen Feldlänge.
  • 3 ist ein Diagramm 300, das die Stagingbereichsnutzung im Verlaufe der Zeit gemäß einer Ausführungsform veranschaulicht. Zum Zeitpunkt T0 befindet sich der Stagingbereich in einer 0%-Nutzung. Nachdem das System beginnt, zu bearbeiten, nimmt die Stagingbereichsnutzung stetig zu. Es werden Schwellenwerte verwendet, um bestimmte Operationen auszulösen. Der Schwellenwert 1 302 gibt an, dass die Anzahl an Schreibvorgängen in den Stagingbereich die Anzahl an Rückforderungen übertrifft. Bei dem Schwellenwert 1 302 startet die bedarfsgesteuerte Steuerungslogik 114 die Rückforderungsdurchsuchungsengine 116, um die Rückforderung zu beginnen. Während einer Zeit entspricht die Rückforderungsrate ungefähr der Schreibrate, was zu einem kontinuierlichen Zustand bei dem Schwellenwert 1 302 führt. Wenn die Stagingbereichsnutzung unter den Schwellenwert 1 302 fällt, dann kann die Rückforderung ausgesetzt werden.
  • Bei dem Abschnitt 304 erfolgt ein Schreibvorgang-Burst. Der Schreibvorgang-Burst wird von dem Stagingbereich aufgenommen. Zu einem späteren Zeitpunkt bewirkt ein größerer Schreib-Burst 312, dass sich der Stagingbereich vollständig füllt. Der Schwellenwert 2 306 befindet sich bei 100% der Stagingbereichsnutzung. Bei dem Schwellenwert 2 306 werden die bedarfsgesteuerten Schreibvorgänge in den Stagingbereich deaktiviert und können herkömmliche Deduplizierungsprozesse verwendet werden, um die Deduplizierungsdatenregion zu füllen. Wahlweise kann in dieser Phase der Rückforderungsprozess derart abgeändert werden, dass er aggressiver ist, wie etwa durch einen häufigeren Betrieb, um die Stagingbereichsnutzung zu reduzieren.
  • Um ein Hin- und Herspringen von verschiedenen Schwellenwerten zu vermeiden, werden die zusätzlichen Schwellenwerte - Schwellenwerte 3 308 und Schwellenwert 4 310, verwendet, um von einer höheren Stagingnutzungsstufe auf eine niedrigere Stagingnutzungsstufe zu ändern. Zum Beispiel muss nach dem Überschreiten des Schwellenwerts 1 302 und dem Starten des Rückforderungsprozesses zum Deaktivieren des Rückforderungsprozesses die Stagingnutzung unter den Schwellenwert 3 308 fallen. Gleichermaßen muss nach dem Füllen des Stagingbereichs und dem Erreichen des Schwellenwerts 2 306 die Nutzung unter den Schwellenwert 4 310 fallen, bevor bedarfsgesteuerte Schreibvorgänge in den Stagingbereich fortgesetzt werden.
  • Es können zusätzliche Schwellenwerte gemäß verschiedenen Implementierungsmustern verwendet werden, um Aktionen auszulösen, wenn die Stagingbereichsnutzung zunimmt oder abnimmt. Zum Beispiel kann eine abgestufte Erhöhung verwendet werden, um von einer niedrigen Rückforderungspriorität zu einer mittleren und dann zu einer hohen Priorität abzustufen. Wenn die Priorität zunimmt, kann der Rückforderungsprozess mit einer größeren Häufigkeit ausgeführt werden, verschiedene Heuristiken verwenden oder ansonsten aggressiver zum Reduzieren der Stagingbereichsnutzung sein.
  • Alternativ kann eine kontinuierliche Funktion verwendet werden, um den Betrieb des Rückforderungsprozesses mit zunehmender und abnehmender Nutzung des Stagingbereichs anzupassen. Die Funktion kann den Betrieb des Rückforderungsprozesses innerhalb eines bestimmten Teilnutzungsbereichs (z. B. von einer 30%- bis zu einer 100%-Nutzung oder von einer 50%- bis zu einer 100%-Nutzung) anpassen. Alternativ kann die kontinuierliche Funktion über den gesamten Nutzungsbereich (z. B. eine Nutzung von 0 % bis 100 %) angewendet werden.
  • 4 ist ein Flussdiagramm, das ein Verfahren 400 zur Computerspeicherverwaltung gemäß einer Ausführungsform veranschaulicht. Bei 402 wird eine Speicherzugriffsanfrage erhalten. Wenn die Anfrage für einen Lesevorgang ist (Entscheidungsblock 404), dann wird eine Adresse in der Zuordnungstabelle nachgeschlagen (Operation 406) und wird auf die Daten von der Deduplizierungsdatenregion oder dem Stagingbereich zugegriffen (Operation 408), je nachdem, wo sich die Daten befinden.
  • Wenn stattdessen die Speicherzugriffsanfrage ein Schreibvorgang ist, dann wird bestimmt, ob die bedarfsgesteuerte Schreibfunktion aktiv ist (Entscheidungsblock 410). Wenn die bedarfsgesteuerte Schreibfunktion aktiv ist, dann werden die Daten in den Stagingbereich geschrieben (Operation 412) und wird die Zuordnungstabelle aktualisiert. Nachdem ein Schreibvorgang erfolgt, wird der Rückforderungsprozess konfiguriert (Operation 414). Der Rückforderungsprozess kann basierend auf einem oder mehreren Schwellenwerten aktiviert oder deaktiviert werden, wie zuvor unter Bezugnahme auf 2 und 3 beschrieben wurde. Die Rückforderung kann im Hintergrund von anderer Lese- und Schreibzugriffsanfragebearbeitung erfolgen.
  • Unter Bezugnahme wieder auf die Entscheidung bei Block 410, wenn der bedarfsgesteuerte Schreibvorgang nicht aktiv ist, werden dann die Daten in die Deduplizierungsdatenregion unter Verwendung eines herkömmlichen Deduplizierungsprozesses geschrieben (Operation 416). Der herkömmliche Deduplizierungsprozess kann die gesamte Deduplizierungsdatenregion oder einen Teil davon durchsuchen, um zu bestimmen, ob andere Daten vorhanden sind, die mit den Daten in der Speicherzugriffsanfrage übereinstimmen, und wenn übereinstimmende Daten vorhanden sind, dann wird die Zuordnungstabelle für die Speicherzugriffsanfrage aktualisiert. Die herkömmliche Deduplizierung kann eine Hash-basierte Suche der Deduplizierungsdatenregion verwenden.
  • Nachdem der herkömmliche Deduplizierungsprozess ausgeführt ist, wird der bedarfsgesteuerte Schreibvorgang konfiguriert (Operation 418). Wenn der herkömmliche Deduplizierungsprozess verwendet wurde, dann wurde der bedarfsgesteuerte Schreibvorgang aufgrund der hohen Nutzung des Stagingbereichs deaktiviert. Wenn der Rückforderungsprozess die Nutzung ausreichend reduziert hat, kann der bedarfsgesteuerte Schreibvorgang erneut aktiviert werden, wie zuvor unter Bezugnahme auf 2 und 3 beschrieben wurde.
  • 5 ist ein Flussdiagramm, das ein Verfahren 500 zur Computerspeicherverwaltung gemäß einer Ausführungsform veranschaulicht. Bei 502 wird eine Speicherzugriffsanfrage erhalten, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet.
  • Bei 504 werden die Daten in einen Stagingbereich in einer Speichervorrichtung geschrieben, wobei der Stagingbereich verwendet wird, um Daten vorübergehend zu speichern, bevor sie dedupliziert werden.
  • Bei 506 wird eine Zuordnungstabelle mit der Adresse aktualisiert, wobei die Zuordnungstabelle in der Speichervorrichtung gespeichert wird.
  • In einer Ausführungsform beinhaltet das Verfahren 500 das Überwachen des Stagingbereichs zum Bestimmen einer Nutzungsmenge. Das Verfahren 500 beinhaltet auch das Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und die duplizierten Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  • In einer Ausführungsform umfasst das Konfigurieren des Rückforderungsprozesses das Konfigurieren eines Zeitsteuerungsintervalls zum Ausführen des Rückforderungsprozesses.
  • In einer Ausführungsform wird der Rückforderungsprozess verwendet, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  • In einer Ausführungsform umfasst das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, und umfasst das Konfigurieren des Rückforderungsprozesses das Deaktivieren des Rückforderungsprozesses, während die Nutzungsmenge unter dem ersten Schwellenwert liegt. In einer weiteren Ausführungsform ist der erste Schwellenwert eine 50%-Nutzung des Stagingbereichs. Es versteht sich, dass ein beliebiger prozentualer Anteil der Nutzung verwendet werden kann.
  • In einer Ausführungsform umfasst das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, und umfasst das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge über dem ersten Schwellenwert liegt. In einer weiteren Ausführungsform ist der zweite Schwellenwert eine 100%-Nutzung des Stagingbereichs.
  • In einer Ausführungsform umfasst das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, und umfasst das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt. In solch einer Ausführungsform beinhaltet das Verfahren 500 ferner das Deaktivieren weiterer Schreibvorgänge in den Stagingbereich, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt. In einer weiteren Ausführungsform beinhaltet das Verfahren 500 das Aktivieren eines herkömmlichen Deduplizierungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In einer Ausführungsform umfasst das Konfigurieren des Rückforderungsprozesses das Verwenden der Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses. Zum Beispiel kann der Rückforderungsprozess alle n Millisekunden ausgeführt werden, wobei n ein Ergebnis einer linearen Funktion des prozentualen Anteils der Nutzung ist.
  • In einer Ausführungsform beinhaltet das Konfigurieren des Rückforderungsprozesses das Auswählen basierend auf einer temporalen Markierung eines Satzes von Adressen, die sich auf den Stagingbereich beziehen, wobei der Satz von Adressen in der Zuordnungstabelle gespeichert ist, und das Bearbeiten des Satzes von Adressen in dem Rückforderungsprozess. In einer weiteren Ausführungsform ist die temporale Markierung ein Zeitstempel, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden. In einer weiteren Ausführungsform ist der Zeitstempel ein 2-Bit-Zeitstempel.
  • Die Ausführungsformen können in einer oder einer Kombination von Hardware, Firmware und Software implementiert sein. Die Ausführungsformen können auch als Befehle implementiert sein, die auf einer maschinenlesbaren Speicherungsvorrichtung gespeichert sind, welche von mindestens einem Prozessor ausgeführt werden können, um die hierin beschriebenen Operationen durchzuführen. Eine maschinenlesbare Speicherungsvorrichtung kann einen beliebigen nichtflüchtigen Mechanismus zum Speichern von Informationen in einer von einer Maschine (z. B. einem Computer) lesbaren Form aufweisen. Beispielsweise kann eine maschinenlesbare Speicherungsvorrichtung Nur-Lese-Speicher (ROM); Direktzugriffsspeicher (RAM); Magnetplattenspeichermedien; optische Speichermedien; Flash-Speicher-Vorrichtungen; und andere Speicherungsvorrichtungen und -medien einschließen.
  • Es kann ein Prozessorsubsystem verwendet werden, um den Befehl auf dem maschinenlesbaren Medium auszuführen. Das Prozessorsubsystem kann einen oder mehrere Prozessoren, je mit einem oder mehreren Kernen, aufweisen. Zusätzlich kann das Prozessorsubsystem auf einer oder mehreren physikalischen Vorrichtungen angeordnet sein. Das Prozessorsubsystem kann einen oder mehrere spezialisierte Prozessoren, wie zum Beispiel eine Grafikverarbeitungseinheit (GPU), einen Digital-Signal-Prozessor (DSP), ein feldprogrammierbares Gate-Array (FPGA) oder einen Prozessor mit fester Funktion, aufweisen.
  • Bespiele, wie hierin beschrieben, können Logik oder eine Anzahl von Komponenten, Modulen oder Mechanismen aufweisen oder darauf funktionieren. Die Module können Hardware, Software oder Firmware sein, die kommunikativ mit einem oder mehreren Prozessoren gekoppelt ist, um die hierin beschriebenen Operationen auszuführen. Die Module können Hardwaremodule sein, und von daher können die Module als dinghafte Entitäten betrachtet werden, die in der Lage sind, spezifische Operationen durchzuführen, und können auf eine bestimmte Art konfiguriert oder angeordnet sein. In einem Beispiel können Schaltungen in einer spezifizierten Weise als Modul ausgelegt sein (z. B. intern oder in Bezug auf externe Entitäten, wie beispielsweise andere Schaltungen). In einem Beispiel können die Gesamtheit oder ein Teil eines oder mehrerer Computersysteme (z. B. ein selbständiges, ein Client- oder ein Servercomputersystem) oder ein oder mehrere Hardwareprozessoren durch Firmware oder Software (z. B. Befehle, einen Anwendungsteil oder eine Anwendung) als Modul konfiguriert sein, das so funktioniert, dass es spezifizierte Operationen durchführt. In einem Beispiel kann sich die Software auf einem maschinenlesbaren Medium befinden. In einem Beispiel veranlasst die Software bei Ausführung durch die zugrunde liegende Hardware des Moduls die Hardware zum Durchführen der spezifizierten Operationen. Demgemäß ist der Begriff „Hardwaremodul“ so zu verstehen, dass er eine dinghafte Entität umfasst, sei dies eine Entität, die physikalisch aufgebaut, spezifisch konfiguriert (z. B. festverdrahtet) oder temporär (z. B. transitorisch) konfiguriert (z. B. programmiert) ist, um auf eine spezifizierte Art und Weise zu funktionieren oder einen Teil oder die Gesamtheit jeder hierin beschriebenen Operation durchzuführen. Unter Berücksichtigung von Beispielen, in welchen Module temporär konfiguriert sind, muss zu einem gegebenen Zeitpunkt nicht jedes der Module instanziiert sein. Wenn zum Beispiel die Module einen Universal-Hardwareprozessor aufweisen, der unter Verwendung von Software konfiguriert ist, kann der Universal-Hardwareprozessor zu verschiedenen Zeiten jeweils als unterschiedliches Modul konfiguriert sein. Software kann demgemäß einen Hardwareprozessor zum Beispiel so konfigurieren, dass er zu einem Zeitpunkt ein bestimmtes Modul darstellt und zu einem anderen Zeitpunkt ein anderes Modul darstellt. Die Module können auch Software- oder Firmwaremodule sein, welche derart arbeiten, dass sie die hierin beschriebenen Methodologien durchführen.
  • „Schaltungsanordnung oder Schaltungen“, wie in diesem Dokument verwendet, können zum Beispiel einzeln oder in einer beliebigen Kombination eine festverdrahtete Schaltungsanordnung, eine programmierbare Schaltungsanordnung, wie etwa Computerprozessoren, die einen oder mehrere individuelle Befehlsverarbeitungskerne umfassen, eine Zustandsmaschinenschaltungsanordnung und/oder Firmware aufweisen, die Befehle, die von einer programmierbaren Schaltungsanordnung ausgeführt wird, speichern. Die Schaltungen, Schaltungsanordnung oder Module können kollektiv oder individuell als Schaltungsanordnung umgesetzt sein, die Teil eines größeren Systems ist, zum Beispiel eine integrierte Schaltung (IC), ein Systemon-Chip (SoC), Desktop-Computer, Laptop-Computer, Tablet-Computer, Server, Smartphones usw.
  • Wie hier bei einer beliebigen Ausführungsform verwendet, kann der Begriff „Logik“ auf Firmware und/oder eine Schaltungsanordnung verweisen, die dazu konfiguriert sind, beliebige der zuvor genannten Operationen durchzuführen. Firmware kann als Code, Befehle oder Befehlssätze und/oder Daten, die in Speichervorrichtungen festcodiert (zum Beispiel nichtflüchtig) sind, und/oder eine Schaltungsanordnung ausgeführt sein.
  • „Schaltungsanordnung“, wie bei einer beliebigen Ausführungsform hier verwendet, kann zum Beispiel eine festverdrahtete Schaltungsanordnung, eine programmierbare Schaltungsanordnung, eine Zustandsmaschinenschaltungsanordnung, eine Logik und/oder Firmware, die Befehle speichert, die durch eine programmierbare Schaltungsanordnung ausgeführt werden, alleine oder in einer beliebigen Kombination umfassen. Die Schaltungsanordnung kann als ein integrierter Schaltkreis, wie etwa ein Integrierter-Schaltkreis-Chip, umgesetzt sein. In manchen Ausführungsformen kann die Schaltungsanordnung mindestens teilweise durch die Prozessorschaltungsanordnung gebildet sein, die Code und/oder Befehlssätze (z. B. Software, Firmware usw.) ausführt, der/die der hier beschriebenen Funktionalität entspricht/entsprechen, wodurch dementsprechend ein Universalprozessor in eine Spezialverarbeitungsumgebung zum Durchführen einer oder mehrerer der hier beschriebenen Operationen transformiert wird. In einigen Ausführungsformen kann die Prozessorschaltungsanordnung als eine alleinstehende integrierte Schaltung umgesetzt sein oder als eine von mehreren Komponenten in einer integrierten Schaltung aufgenommen sein. In einigen Ausführungsformen können die verschiedenen Komponenten und die Schaltungsanordnung des Knotens oder anderer Systeme in einer System-on-a-Chip(SoC)-Architektur kombiniert sein.
  • 6 ist ein Blockdiagramm, das eine Maschine in der beispielhaften Form eines Computersystems 600, in der ein Satz oder eine Abfolge von Befehlen ausgeführt werden kann, um zu bewirken, dass die Maschine irgendeine der hier erörterten Methoden durchführt, gemäß einer Ausführungsform veranschaulicht. In alternativen Ausführungsformen funktioniert die Maschine als selbständige Vorrichtung oder kann mit anderen Maschinen verbunden (z. B. vernetzt) sein. Bei einem vernetzten Einsatz kann die Maschine mit der Fähigkeit eines Servers oder einer Client-Maschine in Server-Client-Netzwerkumgebungen arbeiten, oder sie kann als eine Peer-Maschine in Peer-to-Peer- (oder verteilten) Netzwerkumgebungen fungieren. Die Maschine kann eine an dem Kopf montierte Anzeige, eine tragbare Vorrichtung, ein Personal Computer (PC), ein Tablet-PC, ein Hybrid-Tablet, ein Personal Digital Assistant (PDA), ein Mobiltelefon oder irgendeine Maschine sein, die in der Lage ist, Befehle auszuführen (sequentiell oder anders), die Aktionen spezifizieren, die von dieser Maschine ausgeführt werden sollen. Obwohl nur eine einzelne Maschine veranschaulicht wird, ist der Begriff „Maschine“ ferner auch so aufzufassen, dass er irgendeine Ansammlung von Maschinen beinhaltet, die einzeln oder gemeinsam einen Satz (oder mehrere Sätze) von Befehlen ausführen, um irgendeine oder mehrere der hier erörterten Methoden durchzuführen. Gleichermaßen ist der Begriff „prozessorbasiertes System“ so aufzufassen, dass er irgendeinen Satz aus einer oder mehreren Maschinen beinhaltet, die durch einen Prozessor (z. B. einen Computer) gesteuert oder betrieben werden, um einzeln oder gemeinsam Befehle auszuführen, um irgendeine oder mehrere der hier erörterten Methoden durchzuführen.
  • Das beispielhafte Computersystem 600 schließt mindestens einen Prozessor 602 (z. B. eine zentrale Verarbeitungseinheit (CPU), eine Grafikverarbeitungseinheit (GPU) oder beides, Prozessorkerne, Rechenknoten usw.), einen Hauptspeicher 604 und einen statischen Speicher 606, ein, die miteinander über einen Link 608 (z. B. einen Bus) kommunizieren. Das Computersystem 600 kann ferner eine Videoanzeigeeinheit 610, eine alphanumerische Eingabevorrichtung 612 (z. B. eine Tastatur) und eine Benutzerschnittstellen (UI - User Interface)-Navigationsvorrichtung 614 (z. B. eine Maus) einschließen. In einer Ausführungsform sind die Videoanzeigeeinheit 610, die Eingabevorrichtung 612 und die UI-Navigationsvorrichtung 614 in einem Touchscreendisplay aufgenommen. Das Computersystem 600 kann zusätzlich eine Speicherungsvorrichtung 616 (z. B. eine Laufwerkeinheit), eine Signalerzeugungsvorrichtung 618 (z. B. einen Lautsprecher), eine Netzwerkschnittstellenvorrichtung 620 und einen oder mehrere Sensoren (nicht gezeigt), wie beispielsweise einen Sensor eines globalen Positionsbestimmungssystems (GPS - Global Positioning System), einen Kompass, einen Beschleunigungsmesser, ein Gyrometer, ein Magnetometer oder einen anderen Sensor, einschließen.
  • Die Speicherungsvorrichtung 616 enthält ein maschinenlesbares Medium 622, auf welchem ein oder mehrere Sätze von Datenstrukturen und Befehlen 624 (z. B. Software) gespeichert sind, die eine oder mehrere der hier beschriebenen Methoden oder Funktionen ausführen oder von diesen genutzt werden. Die Befehle 624 können sich auch vollständig oder mindestens teilweise innerhalb des Hauptspeichers 604, des statischen Speichers 606 und/oder innerhalb des Prozessors 602 während deren Ausführung durch das Computersystem 600 befinden, wobei der Hauptspeicher 604, der statische Speicher 606 und der Prozessor 602 auch maschinenlesbare Medien bilden.
  • Obwohl das maschinenlesbare Medium 622 in einer beispielhaften Ausführungsform als ein einzelnes Medium veranschaulicht wird, kann der Begriff „maschinenlesbares Medium“ ein einzelnes Medium oder mehrere Medien beinhalten (z. B. eine zentralisierte oder verteilte Datenbank und/oder verknüpfte Caches und Server), die den einen oder die mehreren Befehle 624 speichern. Der Begriff „maschinenlesbares Medium“ ist auch so aufzufassen, dass er irgendein dinghaftes Medium beinhaltet, das zum Speichern, Codieren oder Führen von Befehlen zur Ausführung durch die Maschine imstande ist und das bewirkt, dass die Maschine irgendeine oder mehrere der Methoden der vorliegenden Offenbarung durchführt, oder das zum Speichern, Codieren oder Führen von Datenstrukturen imstande ist, die von solchen Befehlen verwendet werden oder damit verknüpft sind. Der Begriff „maschinenlesbares Medium“ ist dementsprechend so aufzufassen, dass er Halbleiterspeicher und optische und magnetische Medien beinhaltet, ohne darauf beschränkt zu sein. Zu spezifischen Beispielen für maschinenlesbare Medien zählen nichtflüchtiger Speicher, wie zum Beispiel, ohne darauf beschränkt zu sein, Halbleiterspeichervorrichtungen (z. B. elektrisch programmierbarer Nur-Lese-Speicher (Electrically Programmable Read-Only Memory, EPROM), elektrisch löschbarer programmierbarer Nur-Lese-Speicher (Electrically Erasable Programmable Read-Only Memory, EEPROM)) und Flash-Speichervorrichtungen, Magnetplatten, wie zum Beispiel interne Festplatten und austauschbare Speicherplatten, magnetooptische Speicherplatten und CD-ROM- und DVD-ROM-Speicherplatten.
  • Die Befehle 624 können ferner über ein Kommunikationsnetzwerk 626 unter Verwendung eines Übertragungsmediums über die Netzwerkschnittstellenvorrichtung 620 übertragen oder empfangen werden, die irgendeines einer Reihe von allgemein bekannten Übertragungsprotokollen nutzt (z. B. HTTP). Beispiele für Kommunikationsnetzwerke beinhalten ein lokales Netzwerk (LAN, Local Area Network), ein Großraumnetzwerk (WAN, Wide Area Network), das Internet, Mobilfunknetzwerke, Analogtelefon(POTS, Plain Old Telephone)-Netzwerke und drahtlose Datennetzwerke (z. B. Bluetooth, Wi-Fi, 3G und 4G LTE/LTE-A, 5G, DSRC oder WiMAX-Netzwerke). Der Begriff „Übertragungsmedium“ ist so aufzufassen, dass er irgendein materielles Medium beinhaltet, das zum Speichern, Codieren oder Führen von Befehlen zur Ausführung durch die Maschine imstande ist, und beinhaltet digitale oder analoge Kommunikationssignale oder ein anderes immaterielles Medium, um die Kommunikation solcher Software zu ermöglichen.
  • Die Figuren unten stellen Architekturen und Systeme zur Implementierung von Ausführungsformen des Obigen ausführlich dar. In einigen Ausführungsformen werden eine oder mehrere Hardwarekomponenten und/oder Befehle, die oben beschrieben werden, emuliert, wie nachstehend ausführlich beschrieben wird, oder als Softwaremodule implementiert.
  • Ausführungsformen des bzw. der oben ausführlich beschriebenen Befehls bzw. Befehle können in einem „generischen vektorgerechten Befehlsformat“ ausgeführt werden, was nachstehend ausführlich beschrieben wird. In anderen Ausführungsformen wird ein solches Format nicht genutzt, und ein anderes Befehlsformat wird genutzt, allerdings ist die nachstehende Beschreibung der Schreibmaskenregister, verschiedener Datentransformationen (Swizzle, Broadcast usw.), Adressierung usw. im Allgemeinen auf die obige Beschreibung der Ausführungsformen des Befehls bzw. der Befehle anwendbar. Zusätzlich werden nachstehend Systeme, Architekturen und Pipelines ausführlich beschrieben. Obige Ausführungsformen des Befehls bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die ausführlich beschriebenen beschränkt.
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate aufweisen. Ein gegebenes Befehlsformat kann verschiedene Felder (z. B. Anzahl an Bits, Position von Bits) definieren, um unter anderem die durchzuführende Operation (z. B. Opcode) und den/die Operand(en), an dem/denen die Operation durchzuführen ist, und/oder (ein) andere(s) Datenfeld(er) (z. B. Maske) zu spezifizieren. Einige Befehlsformate werden durch die Definition von Befehls-Templates (oder Unterformaten) weiter aufgeteilt. Zum Beispiel können die Befehls-Templates eines gegebenen Befehlsformats so definiert sein, dass sie unterschiedliche Teilsätze der Felder des Befehlsformats aufweisen (die enthaltenen Felder sind typischerweise in der gleichen Reihenfolge, aber mindestens einige weisen unterschiedliche Bitpositionen auf, weil dort weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Daher wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, wenn definiert, in einem gegebenen der Befehls-Templates dieses Befehlsformats) ausgedrückt und enthält Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein ADD-Befehl einen spezifischen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zum Auswählen von Operanden (Quelle1/Ziel und Quelle2) zu spezifizieren; und ein Vorhandensein dieses ADD-Befehls in einem Befehlsstrom wird spezifische Inhalte in den Operandenfeldern aufweisen, die spezifische Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als Advanced Vector Extensions (weiterentwickelte Vektorerweiterungen, AVX) (AVX1 und AVX2) bezeichnet werden, und das Verwenden des Vector Extensions- (Vektorerweiterungen, VEX)Codierschemas sind herausgegeben und/oder veröffentlicht worden (siehe z. B. Intel® 64 und IA-32 Architectures Software Developer's Manual, September 2014; und siehe Intel® Advanced Vector Extensions Programming Reference, Oktober 2014).
  • Befehlsformate
  • Ausführungsformen des bzw. der hierin beschriebenen Befehls bzw. Befehle können in unterschiedlichen Formaten ausgeführt werden. Zusätzlich werden nachstehend Systeme, Architekturen und Pipelines ausführlich beschrieben. Ausführungsformen des Befehls bzw. der Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die ausführlich beschriebenen beschränkt.
  • Generisches vektorgerechtes Befehlsformat
  • Ein vektorgerechtes Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es bestimmte Felder, die für Vektoroperationen spezifisch sind). Obwohl Ausführungsformen beschrieben werden, bei denen sowohl Vektor- als auch skalare Operationen durch das vektorgerechte Befehlsformat unterstützt werden, verwenden alternative Ausführungsformen nur Vektoroperationen des vektorgerechten Befehlsformats.
  • 7A-7B sind Blockdiagramme, die ein generisches vektorgerechtes Befehlsformat und die Befehls-Templates davon gemäß einer Ausführungsform veranschaulichen. 7A ist ein Blockdiagramm, das ein generisches vektorgerechtes Befehlsformat und Klasse-A-Befehls-Templates davon gemäß einer Ausführungsform veranschaulicht; während 7B ein Blockdiagramm ist, das das generische vektorgerechte Befehlsformat und Klasse-B-Befehls-Templates davon gemäß einer Ausführungsform veranschaulicht. Insbesondere ein generisches vektorgerechtes Befehlsformat 700, für das Klasse-A- und Klasse-B-Befehls-Templates definiert sind, die beide Befehls-Templates 705 ohne Speicherzugriff und Befehls-Templates 720 mit Speicherzugriff umfassen. Der Begriff „generisch“ im Kontext des vektorgerechten Befehlsformats bezieht sich darauf, dass das Befehlsformat an keinen spezifischen Befehlssatz gebunden ist.
  • Während Ausführungsformen beschrieben werden, in denen das vektorgerechte Befehlsformat Folgendes unterstützt: eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte) oder 64 Bit (8 Byte) (und somit besteht ein 64-Byte-Vektor entweder aus 16 Doppelwort-Größe-Elementen oder alternativ dazu aus 8 Quadwort-Größe-Elementen); eine 64-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 16 Bit (2 Byte) oder 8 Bit (1 Byte); eine 32-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); und eine 16-Byte-Vektoroperandenlänge (oder -größe) mit Datenelementbreiten (oder -größen) von 32 Bit (4 Byte), 64 Bit (8 Byte), 16 Bit (2 Byte) oder 8 Bit (1 Byte); können alternative Ausführungsformen mehr, weniger und/oder andere Vektoroperandengrößen unterstützen (z. B. 256-Byte-Vektoroperanden) mit mehr, weniger oder anderen Datenelementbreiten (z. B. Datenelementbreiten von 128 Bit (16 Byte)).
  • Die Klasse-A-Befehls-Templates in 7A umfassen: 1) innerhalb der Befehls-Templates 705 ohne Speicherzugriff ist ein Befehls-Template für eine Operation 710 vom vollen Rundungssteuertyp ohne Speicherzugriff und ein Befehls-Template für eine Operation 715 vom Datentransformationstyp ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehls-Templates 720 mit Speicherzugriff ist ein temporales Befehls-Template mit Speicherzugriff 725 und ein nicht temporales Befehls-Template mit Speicherzugriff 730 gezeigt. Die Klasse-B-Befehls-Templates in 7B umfassen: 1) innerhalb der Befehls-Templates 705 ohne Speicherzugriff ist ein Befehl-Template 712 ohne Speicherzugriff, mit Schreibmaskensteuerung für eine Operation vom teilweisen Rundungssteuertyp und ein Befehls-Template 717 ohne Speicherzugriff, mit Schreibmaskensteuerung für eine Operation vom vsize-Typ; und 2) innerhalb der Befehls-Templates 720 mit Speicherzugriff ist ein Befehls-Template 727 mit Schreibmaskensteuerung mit Speicherzugriff gezeigt.
  • Das generische vektorgerechte Befehlsformat 700 umfasst die folgenden Felder, nachfolgend in der in 7A-7B veranschaulichten Reihenfolge aufgeführt.
  • Formatfeld 740 - ein spezifischer Wert (ein Befehlsformatidentifikatorwert) in diesem Feld identifiziert eindeutig das vektorgerechte Befehlsformat und somit Fälle des Auftretens von Befehlen im vektorgerechten Befehlsformat in Befehlsströmen. Von daher ist dieses Feld in dem Sinne optional, dass es für einen Befehlssatz, der nur das generische vektorgerechte Befehlsformat aufweist, nicht erforderlich ist.
  • Basisoperationsfeld 742 - dessen Inhalt unterscheidet unterschiedliche Basisoperationen.
  • Registerindexfeld 744 - sein Inhalt spezifiziert direkt oder durch Adressgenerierung die Orte der Quell- und Zieloperanden, egal ob in Registern oder in Speicher. Diese enthalten eine ausreichende Anzahl von Bits, um N Register aus einer PxQ-Registerdatei (z. B. 32×512, 16×128, 32×1024, 64×1024) auszuwählen. Während in einer Ausführungsform N bis zu drei Quell- und ein Zielregister sein können, können alternative Ausführungsformen mehr oder weniger Quell- und Zielregister unterstützen (sie können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, sie können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 746 - sein Inhalt unterscheidet Fälle des Auftretens von Befehlen im generischen Vektorbefehlsformat, die Speicherzugriff spezifizieren, von denen, die dies nicht tun; das heißt, es unterscheidet zwischen Befehls-Templates 705 ohne Speicherzugriff und Befehls-Templates 720 mit Speicherzugriff. Speicherzugriffsoperationen lesen aus der Speicherhierarchie und/oder schreiben in diese (in einigen Fällen unter Angabe der Quell- und/oder Zieladressen unter Verwendung von Werten in Registern), während Operationen ohne Speicherzugriff dies nicht tun (z. B. sind die Quelle und die Ziele Register). Während dieses Feld bei einer Ausführungsform auch zwischen drei unterschiedlichen Weisen zum Durchführen von Speicheradressberechnungen auswählt, können alternative Ausführungsformen mehr, weniger oder unterschiedliche Weisen zum Durchführen von Speicheradressberechnungen unterstützen.
  • Ergänzungsoperationsfeld 750 - sein Inhalt unterscheidet, welche von einer Vielzahl von unterschiedlichen Operationen zusätzlich zu der Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. In einer Ausführungsform ist dieses Feld in ein Klassenfeld 768, ein Alphafeld 752 und ein Beta-Feld 754 geteilt. Das Ergänzungsoperationsfeld 750 ermöglicht gängigen Gruppen von Operationen, in einem einzelnen Befehl durchgeführt zu werden, anstatt in 2, 3 oder 4 Befehlen.
  • Skalierfeld 760 - sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfelds zur Speicheradressgenerierung (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 762A - sein Inhalt wird als Teil der Speicheradressgenerierung verwendet (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 762B (es sei darauf hingewiesen, dass die Anordnung des Verschiebungsfelds 762A direkt über dem Verschiebungsfaktorfeld 762B anzeigt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressgenerierung verwendet; es spezifiziert einen Verschiebungsfaktor, der durch die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Bytes im Speicherzugriff ist (z. B. zur Adressgenerierung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante niederwertige Bits werden ignoriert, und somit wird der Inhalt des Verschiebungsfaktorfelds mit der Speicheroperandengesamtgröße (N) multipliziert, um die endgültige Verschiebung zu generieren, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N ist durch die Prozessor-Hardware zur Laufzeit auf Basis des Felds des vollständigen Opcodes 774 (hierin weiter unten beschrieben) und dem Datenmanipulationsfeld 754C bestimmt. Das Verschiebungsfeld 762A und das Verschiebungsfaktorfeld 762B sind in dem Sinne optional, dass sie nicht für die Befehls-Templates 705 ohne Speicherzugriff verwendet werden und/oder andere Ausführungsformen möglicherweise nur eine oder keine der beiden implementieren.
  • Datenelementbreitenfeld 764 - sein Inhalt unterscheidet, welche einer Reihe von Datenelementbreiten verwendet werden soll (in einigen Ausführungsformen für alle Befehle; in anderen Ausführungsformen nur für einige der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht erforderlich ist, wenn nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unter Verwendung einiger Aspekte der Opcodes unterstützt werden.
  • Schreibmaskenfeld 770 - sein Inhalt steuert für jede Datenelementeposition einzeln, ob diese Datenelementeposition in dem Zielvektoroperand das Ergebnis der Basisoperation und der Ergänzungsoperation widerspiegelt. Klasse-A-Befehls-Templates unterstützen Zusammenführen-Schreibmaskieren, während Klasse-B-Befehls-Templates sowohl Zusammenführen- als auch Nullsetzen-Schreibmaskieren unterstützen. Beim Zusammenführen ermöglichen Vektormasken, dass irgendein Satz von Elementen im Ziel vor Aktualisierungen während der Ausführung irgendeiner Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) geschützt wird; in einer anderen Ausführungsform Beibehalten des alten Werts jedes Elements des Ziels, wobei das entsprechende Maskenbit eine 0 hat. Demgegenüber ermöglichen Vektormasken beim Nullsetzen, dass irgendein Satz von Elementen im Ziel während der Ausführung irgendeiner Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) auf Null gesetzt wird; in einer Ausführungsform wird ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen Wert von 0 hat. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der Operation, die durchgeführt wird, zu steuern (das heißt, die Spanne von Elementen, die modifiziert werden, vom ersten bis zum letzten); allerdings ist es nicht notwendig, dass die Elemente, die modifiziert werden, aufeinanderfolgend sind. Somit ermöglicht das Schreibmaskenfeld 770 teilweise Vektoroperationen, einschließlich Laden, Speichern, arithmetisch, logisch usw. Während Ausführungsformen beschrieben sind, in denen der Inhalt des Schreibmaskenfelds 770 eines aus einer Reihe von Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und der Inhalt des Schreibmaskenfelds 770 somit indirekt identifiziert, dass dieses Maskieren durchgeführt werden soll), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich dazu, dass der Inhalt des Maskenschreibfelds 770 das durchzuführende Maskieren direkt spezifiziert.
  • Immediate-Feld 772 - sein Inhalt gestattet die Spezifikation eines Immediate. Dieses Feld ist in dem Sinne optional, dass es in einer Implementierung des generischen vektorgerechten Formats, das unmittelbare Elemente nicht unterstützt, nicht vorhanden ist und in Befehlen, die kein unmittelbares Element verwenden, nicht vorhanden ist.
  • Klassenfeld 768 - sein Inhalt unterscheidet zwischen unterschiedlichen Klassen von Befehlen. Bezug nehmend auf 7A-7B wählen die Inhalte dieses Felds zwischen Klasse-A- und Klasse-B-Befehlen aus. In 7A-7B werden Quadrate mit abgerundeten Ecken verwendet, um anzuzeigen, dass ein spezifischer Wert in einem Feld vorhanden ist (z. B. Klasse A 768A und Klasse B 768B für das Klassenfeld 768 jeweils in 7A-7B).
  • Befehls-Templates der Klasse A
  • Im Falle der Befehls-Templates 705 der Klasse A ohne Speicherzugriff wird das Alphafeld 752 als ein RS-Feld 752A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden sollen (Runden 752A.1 und Datentransformation 752A.2 sind z. B. jeweils für die Befehls-Templates für Operation 710 vom Rundungstyp ohne Speicherzugriff bzw. die Operation 715 vom Datentransformationstyp ohne Speicherzugriff spezifiziert), während das Beta-Feld 754 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen ist. In den Befehls-Templates ohne Speicherzugriff 705 sind das Skalierfeld 760, das Verschiebungsfeld 762A und das Verschiebungsskalierfeld 762B nicht vorhanden.
  • Befehls-Templates ohne Speicherzugriff - Operation vom vollen Rundungssteuertyp
  • Im Befehls-Template für die Operation 710 vom vollen Rundungssteuertyp ohne Speicherzugriff wird das Beta-Feld 754 als Rundungssteuerfeld 754A interpretiert, dessen Inhalt(e) statisches Runden bereitstellen. Während in den beschriebenen Ausführungsformen das Rundungssteuerfeld 754A ein Feld zum Unterdrücken aller Gleitkommaausnahmen (SAE) 756 und ein Rundungsoperationssteuerfeld 758 enthält, können alternative Ausführungsformen diese beiden Konzepte unterstützen und in das gleiche Feld codieren oder nur das eine oder das andere dieser Konzepte/Felder aufweisen (können z. B. nur das Rundungsoperationssteuerfeld 758 aufweisen).
  • SAE-Feld 756 - sein Inhalt unterscheidet, ob Melden von Ausnahmeereignissen deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Felds 756 anzeigt, dass Unterdrückung aktiviert ist, meldet ein gegebener Befehl keine Art von Gleitkommaausnahme-Kennzeichen und bewirkt keinen Gleitkommaausnahmehandler.
  • Rundungsoperationssteuerfeld 758 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden Richtung Null und Runden zur nächstgelegenen Rundungszahl). Somit ermöglicht das Rundungsoperationssteuerfeld 758 das Ändern des Rundungsmodus für jeden Befehl einzeln. In einer Ausführungsform, wo ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperationssteuerfelds 750 diesen Registerwert.
  • Befehls-Templates ohne Speicherzugriff - Operation vom Datentransformationstyp
  • Im Befehls-Template ohne Speicherzugriff, mit Operation 715 vom Typ Datentransformation wird das Beta-Feld 754 als ein Datentransformationsfeld 754B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datentransformationen durchgeführt werden soll (z. B. ohne Datentransformation, Swizzeln, Broadcast).
  • Im Fall eines Befehls-Templates 720 mit Speicherzugriff der Klasse A wird das Alphafeld 752 als ein Räumungshinweisfeld 752B interpretiert, dessen Inhalt unterscheidet, welcher der Räumungshinweise verwendet werden soll (in 7A sind temporal 752B.1 und nicht temporal 752B.2 jeweils für das Befehls-Template 725 mit Speicherzugriff, temporal bzw. das Befehls-Template 730 mit Speicherzugriff, nicht temporal spezifiziert), während das Beta-Feld 754 als ein Datenmanipulationsfeld 754C interpretiert wird, dessen Inhalt unterscheidet, welche einer Reihe von Datenmanipulationsoperationen (auch bekannt als Primitive) durchgeführt werden soll (z. B. ohne Manipulation, Broadcast, Aufwärtskonvertierung einer Quelle und Abwärtskonvertierung eines Ziels). Die Befehls-Templates 720 mit Speicherzugriff enthalten das Skalierfeld 760 und optional das Verschiebungsfeld 762A oder das Verschiebungsskalierfeld 762B.
  • Vektorspeicherbefehle führen Vektorladevorgänge und Vektorspeichervorgänge aus bzw. in Speicher mit Konvertierungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten aus bzw. in Speicher in einer datenelementweisen Art, wobei die Elemente, die tatsächlich übertragen werden, von den Inhalten der Vektormaske vorgeschrieben werden, die als die Schreibmaske ausgewählt ist.
  • Befehls-Templates mit Speicherzugriff - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich bald genug wiederverwendet werden, um von Caching zu profitieren. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
  • Befehls-Templates mit Speicherzugriff - Nicht-Temporal
  • Nicht-temporale Daten sind Daten, die wahrscheinlich nicht bald genug wiederverwendet werden, um von Caching im Level-1-Cache zu profitieren und denen Priorität für Räumung gegeben werden sollte. Dies ist allerdings ein Hinweis, und unterschiedliche Prozessoren können es auf unterschiedliche Weisen implementieren, einschließlich, den Hinweis komplett zu ignorieren.
  • Befehls-Templates der Klasse B
  • Im Fall der Befehls-Templates der Klasse B wird das Alphafeld 752 als ein Schreibmaskensteuer- (Z-) Feld 752C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 770 gesteuerte Schreibmaskierung ein Zusammenführen oder ein Nullsetzen sein soll.
  • Im Fall der Befehls-Templates der Klasse B ohne Speicherzugriff 705 wird ein Teil des Betafelds 754 als ein RL-Feld 757A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden soll (z. B. werden Runden 757A.1 und Vektorlänge (VSIZE) 757A.2 für das Befehls-Template 712 ohne Speicherzugriff, Schreibmaskensteuern-, partielle Rundungssteuertypoperation bzw. für das Befehls-Template 717 ohne Speicherzugriff, Schreibmaskensteuern-, Vektorlängentypoperation spezifiziert), während der Rest des Betafelds 754 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Befehls-Templates ohne Speicherzugriff 705 sind das Skalierfeld 760, das Verschiebungsfeld 762A und das Verschiebungsskalierfeld 762B nicht vorhanden.
  • Beim Befehls-Template 710 ohne Speicherzugriff, Schreibmaskensteuern, partielle Rundungssteuertypoperation wird der Rest des Betafelds 754 als ein Rundungsoperationsfeld 759A interpretiert und Ausnahmeereignismeldung ist deaktiviert (ein gegebener Befehl meldet keinerlei Gleitkommaausnahme-Kennzeichen und bewirkt keinen Gleitkommaausnahmehandler).
  • Rundungsoperationssteuerfeld 759A - sein Inhalt unterscheidet, genau wie das Rundungsoperationssteuerfeld 758, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundungsoperationssteuerfeld 759A ermöglicht somit das befehlsweise Ändern des Rundungsmodus. In einer Ausführungsform, wo ein Prozessor ein Steuerregister zum Spezifizieren der Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperationssteuerfelds 750 diesen Registerwert.
  • Beim Befehls-Template 717 ohne Speicherzugriff, Schreibmaskensteuern-, Vektorlängentypoperation wird der Rest des Betafelds 754 als ein Vektorlängenfeld 759B interpretiert, dessen Inhalt unterscheidet, auf welcher aus einer Reihe von Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Bytes).
  • Im Fall eines Befehls-Templates 720 mit Speicherzugriff der Klasse B wird ein Teil des Betafelds 754 als ein Broadcast-Feld 757B interpretiert, dessen Inhalt unterscheidet, ob die Datenmanipulationsoperation vom Broadcast-Typ durchgeführt werden soll oder nicht, während der Rest des Betafelds 754 als das Vektorlängenfeld 759B interpretiert wird. Die Befehls-Templates 720 mit Speicherzugriff enthalten das Skalierfeld 760 und optional das Verschiebungsfeld 762A oder das Verschiebungsskalierfeld 762B.
  • Mit Bezug auf das generische vektorgerechte Befehlsformat 700 wird ein vollständiges Opcode-Feld 774 gezeigt, das das Formatfeld 740, das Basisoperationsfeld 742 und das Datenelementbreitenfeld 764 enthält. Obwohl eine Ausführungsform gezeigt wird, bei der das vollständige Opcode-Feld 774 alle diese Felder enthält, enthält das vollständige Opcode-Feld 774 bei Ausführungsformen, die nicht alle diese unterstützen, weniger als alle diese Felder. Das vollständige Opcode-Feld 774 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 750, das Datenelementbreitenfeld 764 und das Schreibmaskenfeld 770 erlauben, dass diese Funktionen für jeden Befehl einzeln in dem generischen vektorgerechten Befehlsformat spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erzeugt typenbehaftete Befehle dahingehend, dass sie ermöglichen, die Maske basierend auf unterschiedlichen Datenelementbreiten anzuwenden.
  • Die verschiedenen Befehls-Templates, die in der Klasse A und in der Klasse B enthalten sind, sind in unterschiedlichen Situationen nützlich. In einigen Ausführungsformen können unterschiedliche Prozessoren oder unterschiedliche Kerne in einem Prozessor nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Zum Beispiel kann ein Out-Of-Order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist, nur die Klasse B unterstützen, kann ein Kern, der primär für Grafik- und/oder wissenschaftliches (Durchsatz-)Rechnen vorgesehen ist, nur die Klasse A unterstützen und kann ein Kern, der für beides vorgesehen ist, beide unterstützen (selbstverständlich ein Kern, der eine bestimmte Mischung aus Templates und Befehlen aus beiden Klassen aufweist, aber nicht alle Templates und Befehle aus beiden Klassen liegen im Bereich der Erfindung). Außerdem kann ein Einzelprozessor mehrere Kerne enthalten, die alle die gleiche Klasse unterstützen oder in denen unterschiedliche Kerne unterschiedliche Klassen unterstützen. Beispielsweise kann in einem Prozessor mit separaten Grafik- und Universalkernen einer der Grafikkerne, der primär für Grafik- und/oder wissenschaftliche Berechnung gedacht ist, nur Klasse A unterstützen, während einer oder mehrere der Universalkerne für Universalberechnung gedachte Hochleistungsuniversalkerne mit Out-Of-Order-Ausführung und Registerumbenennung sein können, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen separaten Grafikkern aufweist, kann einen oder mehrere In-Order- oder Out-Of-Order-Universalkerne aufweisen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können Merkmale aus einer Klasse auch in der anderen Klasse in unterschiedlichen Ausführungsformen implementiert sein. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl unterschiedlicher ausführbarer Formen gelegt werden (z. B. just-intime-kompiliert oder statisch kompiliert), beinhaltend: 1) eine Form lediglich mit Befehlen der Klasse(n), die durch den Zielprozessor zur Ausführung unterstützt wird/werden; oder 2) eine Form mit alternativen Routinen, die unter Verwendung verschiedener Kombinationen der Befehle aller Klassen geschrieben sind und einen Steuerflusscode aufweisen, der die auszuführenden Routinen basierend auf den Befehlen, die von dem Prozessor, der gerade den Code ausführt, unterstützt werden, auswählt.
  • Spezifisches vektorgerechtes Befehlsformat
  • 8 ist ein Blockdiagramm, das ein spezifisches vektorgerechtes Befehlsformat gemäß einer Ausführungsform veranschaulicht. 8 zeigt ein spezifisches vektorgerechtes Befehlsformat 800, das in dem Sinne spezifisch ist, dass es die Position, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für einige dieser Felder spezifiziert. Das spezifische vektorgerechte Befehlsformat 800 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und somit ähneln einige der Felder denen, die im vorhandenen x86-Befehlssatz und seiner Erweiterung verwendet werden (z. B. AVX), oder sind ihnen gleich. Dieses Format bleibt konsistent mit dem Präfixcodierfeld, dem realen Opcode-Byte-Feld, dem MOD R/M-Feld, dem SIB-Feld, dem Verschiebungsfeld und den Immediate-Feldern des vorhandenen x86-Befehlssatzes mit Erweiterungen. Die Felder aus 7, in die die Felder aus 8 zugeordnet werden, sind veranschaulicht.
  • Es versteht sich, dass, obwohl Ausführungsformen zur Veranschaulichung in Bezug auf das spezifische vektorgerechte Befehlsformat 800 im Kontext des generischen vektorgerechten Befehlsformats 700 beschrieben werden, die Erfindung nicht auf das spezifische vektorgerechte Befehlsformat 800 beschränkt ist, es sei denn, es wird beansprucht. Beispielsweise berücksichtigt das generische vektorgerechte Befehlsformat 700 eine Vielzahl möglicher Größen für die verschiedenen Felder, während das spezifische vektorgerechte Befehlsformat 800 als Felder mit spezifischen Größen aufweisend gezeigt ist. Als spezifisches Beispiel: Obwohl das Datenelementbreitenfeld 764 als ein Ein-Bit-Feld im spezifischen vektorgerechten Befehlsformat 800 veranschaulicht wird, ist die Erfindung nicht darauf beschränkt (das heißt: Beim generischen, vektorgerechten Befehlsformat 700 werden andere Größen des Datenelementbreitenfelds 764 in Betracht gezogen).
  • Das generische vektorgerechte Befehlsformat 700 enthält die folgenden Felder, die nachstehend in der Reihenfolge aufgelistet sind, die in 8A veranschaulicht wird.
  • EVEX-Präfix (Bytes 0-3) 802 - es ist in einer Vier-Byte-Form codiert.
  • Das Formatfeld 740 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX Byte 0) ist das Formatfeld 740 und enthält 0x62 (der einzige Wert, der zum Unterscheiden des vektorgerechten Befehlsformats in einer Ausführungsform verwendet wird).
  • Die zweiten bis vierten Bytes (EVEX-Bytes 1-3) weisen eine Anzahl von Bitfeldern auf, die eine spezifische Fähigkeit bieten.
  • REX-Feld 805 (EVEX-Byte 1, Bits [7-5]) - es besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), einem EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] - X) und einem 757BEX-Byte 1, Bit [5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder stellen die gleiche Funktionalität wie die entsprechenden VEX-Bitfelder bereit und sind unter Verwendung einer 1s-Komplement-Form codiert, d. h. ZMM0 ist als 1111B codiert, ZMM15 ist als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes wie in der Technik bekannt ist (rrr, xxx und bbb) derart, dass Rrrr, Xxxx und Bbbb durch Addieren von EVEX.R, EVEX.X und EVEX.B ausgebildet werden können.
  • REX'-Feld 710 - dies ist der erste Teil des REX'-Felds 710 und ist das EVEX.R'-Bitfeld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu codieren. In einer Ausführungsform wird dieses Bit, zusammen mit anderen, wie nachstehend angegeben wird, in bitinvertiertem Format gespeichert, um eine Unterscheidung (in dem allgemein bekannten x86 32-Bit-Modus) vom BOUND-Befehl zu treffen, dessen reales Opcode-Byte 62 ist, der jedoch im MOD R/M-Feld (nachstehend beschrieben) den Wert von 11 im MOD-Feld nicht akzeptiert; alternative Ausführungsformen speichern weder dieses noch die anderen, nachstehend angegebenen Bits im invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, R'Rrrr wird durch Kombinieren von EVEX.R', EVEX.R und den anderen RRR aus anderen Feldern gebildet.
  • Opcode-Abbildungsfeld 815 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, 0F 38 oder 0F 3).
  • Datenelementbreitenfeld 764 (EVEX-Byte 2, Bit [7]-W) - es wird durch die Bezeichnung EVEX.W dargestellt. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps zu definieren (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente).
  • EVEX.vw 820 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vwv kann Folgendes beinhalten: 1) EVEXvvvv codiert den ersten Quellregisteroperanden, der in invertierter (1s-Komplement-) Form spezifiziert ist, und gilt für Befehle mit 2 oder mehr Quelloperanden; 2) EVEXvvvv codiert den Zielregisteroperanden, der für bestimmte Vektorverschiebungen in 1s-Komplement-Form spezifiziert ist; oder 3) EVEXvvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Somit codiert das EVEX.vwv-Feld 820 die 4 niederwertigen Bits des ersten Quellregisterspezifikationselements, die in invertierter (1s-Komplement-) Form gespeichert sind. Je nach Befehl wird ein zusätzliches anderes EVEX-Bitfeld verwendet, um die Größe des Spezifikationselements auf 32 Register zu erweitern.
  • EVEX.U 768 Klassenfeld (EVEX-Byte 2, Bit [2]-U) - falls EVEX.U = 0, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1, gibt es Klasse B oder EVEX.U1 an.
  • Präfixcodierungsfeld 825 (EVEX-Byte 2, Bits [1:0]-pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich dazu, dass es Unterstützung für die Legacy-SSE-Befehle im EVEX-Präfixformat bereitstellt, weist dies auch den Vorteil auf, das SIMD-Präfix kompakter zu machen (statt ein Byte zum Ausdrücken des SIMD-Präfixes erfordert das EVEX-Präfix lediglich 2 Bits). In einer Ausführungsform werden, um die älteren SSE-Befehle zu unterstützen, die ein SIMD-Präfix (66H, F2H, F3H) sowohl im älteren Format als auch im EVEX-Präfixformat verwenden, diese älteren SIMD-Präfixe in das SIMD-Präfixcodierungsfeld codiert und werden bei Laufzeit in das ältere SIMD-Präfix erweitert, bevor sie der PLA des Decoders bereitgestellt werden (sodass die PLA sowohl das ältere als auch das EVEX-Format dieser älteren Befehle ohne Modifikationen ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfelds direkt als eine Opcode-Erweiterung verwenden können, erweitern gewisse Ausführungsformen aus Gründen der Konsistenz in einer ähnlichen Weise, erlauben aber, dass unterschiedliche Bedeutungen durch diese älteren SIMD-Präfixe angegeben werden. Eine alternative Ausführungsform kann die PLA neu konzipieren, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und daher die Erweiterung nicht benötigen.
  • Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH; auch bekannt als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.write mask control (Schreibmaskensteuerung) und EVEX.N; auch dargestellt als a) - wie vorher beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 754 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch dargestellt durch βββ) - wie vorher beschrieben worden ist, ist dieses Feld kontextspezifisch.
  • REX'-Feld 710 - dies ist der Rest des REX'-Felds und ist das EVEX.V'-Bitfeld (EVEX-Byte 3, Bit [3] - V'), das verwendet werden kann, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Registersatzes zu codieren. Dieses Bit wird im bitinvertierten Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten, V'VVVV wird durch Kombinieren von EVEX.V', EVEXvvvv gebildet.
  • Schreibmaskenfeld 770 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt gibt den Index eines Registers in den Schreibmaskenregistern an, wie vorher beschrieben. In einer Ausführungsform hat der spezifische Wert EVEX.kkk=000 ein spezielles Verhalten, implizierend, dass keine Schreibmaske für den bestimmten Befehl verwendet wird (dies kann auf verschiedene Weisen implementiert werden, einschließlich des Verwendens einer Schreibmaske, fest mit allen verdrahtet, oder von Hardware, die die Maskierungshardware umgeht).
  • Das reale Opcode-Feld 830 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • MOD-R/M-Feld 840 (Byte 5) umfasst MOD-Feld 842, Reg-Feld 844 und R/M-Feld 846. Wie vorher beschrieben worden ist, unterscheidet der Inhalt des MOD-Felds 842 zwischen Operationen für Speicherzugriff und ohne Speicherzugriff. Die Rolle von Reg-Feld 844 kann für zwei Situationen zusammengefasst werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden, oder als eine Opcode-Erweiterung behandelt zu werden und nicht zum Codieren eines Befehlsoperanden verwendet zu werden. Die Rolle von R/M-Feld 846 kann Folgendes umfassen: Codieren des Befehlsoperanden, der sich auf eine Speicheradresse bezieht, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Skalierung-Index-Basis-Byte (SIB, Scale, Index, Base) (Byte 6) - Wie zuvor beschrieben, wird der Inhalt des Skalierungsfelds 750 für Speicheradressenerzeugung verwendet. SIB.xxx 854 und SIB.bbb 856 - auf die Inhalte dieser Felder ist vorher in Hinsicht auf die Registerindizes Xxxx und Bbbb eingegangen worden.
  • Verschiebungsfeld 762A (Bytes 7-10) - wenn das MOD-Feld 842 10 enthält, sind die Bytes 7-10 das Verschiebungsfeld 762A, und es funktioniert genauso wie die Legacy-32-Bit-Verschiebung (disp32) und arbeitet mit Byte-Granularität.
  • Verschiebungsfaktorfeld 762B (Byte 7) - wenn das MOD-Feld 842 01 enthält, ist das Byte 7 das Verschiebungsfaktorfeld 762B. Die Position dieses Felds ist die gleiche wie die der 8-Bit-Verschiebung des Legacy-x86-Befehlssatzes (disp8), die mit Byte-Granularität arbeitet. Weil disp8 vorzeichenerweitert ist, kann es nur Offsets zwischen -128 und 127 Bytes adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bits, die auf nur vier wirklich verwendbare Werte gesetzt werden können: -128, -64, 0 und 64; weil häufig ein größerer Bereich benötigt wird, wird disp32 verwendet; allerdings erfordert disp32 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 762B eine Neuinterpretation von disp8; bei Verwendung des Verschiebungsfaktorfelds 762B wird die eigentliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Dieser Verschiebungstyp wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (ein einzelnes Byte wird für die Verschiebung verwendet, jedoch mit einem viel größeren Bereich). Eine solche komprimierte Verschiebung basiert auf der Annahme, dass die effektive Verschiebung ein Vielfaches der Granularität des Speicherzugriffs ist, und somit müssen die redundanten niederwertigen Bits des Adress-Offsets nicht codiert werden. Mit anderen Worten: Das Verschiebungsfaktorfeld 762B ersetzt die 8-Bit-Verschiebung des Legacy-x86-Befehlssatzes. Somit wird das Verschiebungsfaktorfeld 762B in der gleichen Weise wie eine 8-Bit-Verschiebung des x86-Befehlssatzes codiert (also keine Änderungen in den ModRM/SIB-Codierungsregeln), mit der einzigen Ausnahme, dass disp8 auf disp8*N aufgeladen wird. Mit anderen Worten: Bei den Codierungsregeln oder den Codierungslängen gibt es keine Änderungen, sondern lediglich bei der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung um die Größe des Speicheroperanden skalieren muss, um einen byteweisen Adress-Offset zu erhalten). Immediate-Feld 772 operiert wie vorher beschrieben worden ist.
  • Vollständiges Opcode-Feld
  • 8B ist ein Blockdiagramm, das gemäß einer Ausführungsform die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das vollständige Opcode-Feld 774 besteht. Insbesondere umfasst das vollständige Opcode-Feld 774 das Formatfeld 740, das Basisoperationsfeld 742 und das Datenelementbreitenfeld (W) 764. Das Basisoperationsfeld 742 enthält das Präfixcodierfeld 825, das Opcode-Map-Feld 815 und das reale Opcode-Feld 830.
  • Registerindexfeld
  • 8C ist ein Blockdiagramm, das gemäß einer Ausführungsform die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das Registerindexfeld 744 besteht. Insbesondere umfasst das Registerindexfeld 744 das REX-Feld 805, das REX'-Feld 810, das MODR/M.reg-Feld 844, das MODR/M.r/m-Feld 846, das VVVV-Feld 820, das xxx-Feld 854 und das bbb-Feld 856.
  • Ergänzungsoperationsfeld
  • 8D ist ein Blockdiagramm, das gemäß einer Ausführungsform die Felder des spezifischen vektorgerechten Befehlsformats 800 veranschaulicht, aus denen das Ergänzungsoperationsfeld 750 besteht. Wenn das Klasse (U)-Feld 768 0 enthält, bezeichnet es EVEX.U0 (Klasse A 768A); wenn es 1 enthält, bezeichnet es EVEX.U1 (Klasse B 768B). Wenn U = 0 ist und das MOD-Feld 842 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 752A interpretiert. Wenn das rs-Feld 752A eine 1 enthält (Runden 752A.1), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als das Rundungssteuerfeld 754A interpretiert. Das Rundungssteuerfeld 754A enthält ein Ein-Bit-SAE-Feld 756 und ein Zwei-Bit-Rundungsoperationsfeld 758. Wenn das rs-Feld 752A eine 0 enthält (Datentransformation 752A.2), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 754B interpretiert. Wenn U = 0 ist und das MOD-Feld 842 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis- (EH-) Feld 752B interpretiert, und das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) wird als ein Drei-Bit-Datenmanipulationsfeld 754C interpretiert.
  • Wenn U = 1 ist, wird das Alphafeld 752 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer- (Z-) Feld 752C interpretiert. Wenn U = 1 ist und das MOD-Feld 842 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird ein Teil des Betafelds 754 (EVEX-Byte 3, Bit [4] - S0) als das RL-Feld 757A interpretiert; wenn es eine 1 enthält (Runden 757A.1), wird der Rest des Betafelds 754 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Rundungsoperationsfeld 759A interpretiert, während der Rest des Betafelds 754 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Vektorlängenfeld 759B (EVEX-Byte 3, Bit [6-5] - L1-0) interpretiert wird, wenn das RL-Feld 757A eine 0 enthält (Vektorlänge 757.A2). Wenn U = 1 ist und das MOD-Feld 842 00, 01 oder 10 enthält (was eine Speicherzugriffsoperation bezeichnet), wird das Betafeld 754 (EVEX-Byte 3, Bits [6:4] - SSS) als das Vektorlängenfeld 759B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Broadcast-Feld 757B (EVEX-Byte 3, Bit [4] - B) interpretiert.
  • Regi sterarchitektur
  • 9 ist ein Blockdiagramm einer Registerarchitektur 900 gemäß einer Ausführungsform. In der veranschaulichten Ausführungsform gibt es 32 Vektorregister 910, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 Bits niederer Ordnung der unteren 16 zmm-Register werden auf Register ymm0-16 überlagert. Die 128 Bits niederer Ordnung der unteren 16 zmm-Register (die 128 Bits niederer Ordnung der ymm-Register) werden den Registern xmm0-15 überlagert. Das spezifische vektorgerechte Befehlsformat 800 operiert auf dieser überlagerten Registerdatei, wie in der nachstehenden Tabelle veranschaulicht wird.
    Einstellbare Vektorlänge Klasse Operationen Register
    Befehls- Templates, die nicht das A ( 7A; U = 0) 710, 715, 725, 730 zmm-Register (die Vektorlänge ist 64 Byte)
    Vektorlängenfeld 759B enthalten B ( 7B; U = 1) 712 zmm-Register (die Vektorlänge ist 64 Byte)
    Befehls- Templates, die das Vektorlängenfeld 759B enthalten B ( 7B; U = 1) 717, 727 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte), abhängig vom Vektorlängenfeld 759B
  • Mit anderen Worten: Das Vektorlängenfeld 759B wählt zwischen einer maximalen Länge und einer oder mehreren anderen, kürzeren Längen, wobei jede solcher kürzeren Längen halb so lang ist wie die vorhergehende Länge; und Befehls-Templates ohne das Vektorlängenfeld 759B operieren mit der maximalen Vektorlänge. Des Weiteren operieren in einer Ausführungsform die Klasse-B-Befehls-Templates des spezifischen vektorgerechten Befehlsformats 800 an gepackten oder skalaren Gleitkommadaten mit einfacher/doppelter Genauigkeit und an gepackten oder skalaren Ganzzahldaten. Skalare Operationen sind Operationen, die auf der Datenelementposition der niedrigsten Ordnung in einem zmm/ymm/xmm-Register durchgeführt werden; die Datenelementpositionen der höheren Ordnung werden, in Abhängigkeit von der Ausführungsform, entweder so gelassen, wie sie vor dem Befehl waren, oder auf Null gesetzt.
  • Schreibmaskenregister 915 - in der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), die jeweils 64 Bits groß sind. In einer alternativen Ausführungsform sind die Schreibmaskenregister 915 16 Bits groß. Wie zuvor beschrieben, kann in einer Ausführungsform das Vektormaskenregister k0 nicht als eine Schreibmaske verwendet werden; wenn die Codierung, welche normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie eine festverdrahtete Schreibmaske von 0xFFFF aus, wobei eine Schreibmaskierung für diesen Befehl wirksam deaktiviert wird.
  • Universelle Register 925 - in der veranschaulichten Ausführungsform gibt es sechzehn universelle 64-Bit-Register, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden als RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalare Gleitkomma-Stack-Registerdatei (x87-Stack) 945, auf die Aliasing der gepackten MMX Integer Flat-Register-Datei 950 erfolgt - in der veranschaulichten Ausführungsform ist der x87-Stack ein Acht-Elemente-Stack, der verwendet wird, um skalare Gleitkommaoperationen an 32-/64-/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen, während die MMX-Register verwendet werden, um Operationen an gepackten 64-Bit-Ganzzahldaten durchzuführen sowie Operanden für einige Operationen zu halten, die zwischen dem MMX- und dem XMM-Register durchgeführt werden.
  • Alternative Ausführungsformen können breitere oder schmalere Register verwenden. Zusätzlich können alternative Ausführungsformen mehr, weniger oder andere Registerdateien und Register verwenden.
  • Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren implementiert werden. Zum Beispiel können zu Implementierungen solcher Kerne Folgende zählen: 1) ein In-Order-Universalkern, der für Universalrechnen vorgesehen ist; 2) ein Out-Of-Order-Hochleistungsuniversalkern, der für Universalrechnen vorgesehen ist; 3) ein Spezialkern, der primär für Grafik- und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen ist. Implementierungen unterschiedlicher Prozessoren können Folgendes aufweisen: 1) eine CPU, die einen oder mehrere In-Order-Universalkerne, die für Universalrechnen vorgesehen sind, und einen oder mehrere Out-Of-Order-Universalkerne, die für Universalrechnen vorgesehen sind, aufweist; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne aufweist, die primär für Grafik- und/oder wissenschaftliches (Durchsatz-) Rechnen vorgesehen sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes aufweisen können: 1) den Coprozessor auf einem von der CPU separaten Chip; 2) den Coprozessor auf einem separaten Chip im gleichen Package wie eine CPU; 3) den Coprozessor auf dem gleichen Chip wie eine CPU (in diesem Fall wird ein solcher Coprozessor manchmal als spezielle Logik, wie zum Beispiel als integrierte Grafik und/oder wissenschaftliche (Durchsatz-) Logik, oder als spezielle Kerne bezeichnet); und 4) ein System auf einem Chip, das auf demselben Chip die beschriebene CPU (manchmal als der bzw. die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität enthalten kann. Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von Prozessoren und Computerarchitekturen.
  • Kernarchitekturen
  • In-Order- und Out-Of-Order-Kernblockdiagramm
  • 10A ist ein Blockdiagramm, das sowohl eine In-Order-Pipeline als auch eine Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführungspipeline gemäß Ausführungsformen veranschaulicht. 10B ist ein Blockdiagramm, das sowohl einen In-Order-Architekturkern als auch einen Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführungsarchitekturkern, der in einem Prozessor aufzunehmen ist, gemäß einer Ausführungsform veranschaulicht. Die Boxen mit durchgezogenen Linien in 10A-10B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während das zusätzliche Hinzufügen der Boxen mit gestrichelten Linien die Registerumbenennung-Out-Of-Order-Ausgabe/Ausführungspipeline und -kern veranschaulicht. Unter der Voraussetzung, dass der In-Order-Aspekt ein Teilsatz des Out-Of-Order-Aspekts ist, wird der Out-Of-Order-Aspekt beschrieben.
  • In 10A enthält eine Prozessorpipeline 1000 eine Abrufstufe 1002, eine Längendecodierstufe 1004, eine Decodierstufe 1006, eine Zuordnungsstufe 1008, eine Umbenennungsstufe 1010, eine Scheduling-Stufe (auch als eine Versand- oder Ausgabestufe bekannt) 1012, eine Registerlese-/Speicherlesestufe 1014, eine Ausführungsstufe 1016, eine Zurückschreib-/Speicherschreibstufe 1018, eine Ausnahmebehandlungsstufe 1022 und eine Commit-Stufe 1024.
  • 10B zeigt den Prozessorkern 1090 einschließlich einer Front-End-Einheit 1030, die mit einer Ausführungs-Engine-Einheit 1050 gekoppelt ist, und beide sind mit einer Speichereinheit 1070 gekoppelt. Der Kern 1090 kann ein Reduced-Instruction-Set-Computing (RISC) -Kern, ein Complex-Instruction-Set-Computing (CISC) -Kern, ein Very-Long-Instruction-Word (VLIW) -Kern oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 1090 ein Spezialkern, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Komprimierungs-Engine, ein Coprozessorkern, ein General-Purpose-Computing-Graphics-Processing-Unit (GPGPU) -Kern, ein Grafikkern oder Ähnliches sein.
  • Die Front-End-Einheit 1030 enthält eine Verzweigungsvorhersageeinheit 1032, die mit einer Befehls-Cache-Einheit 1034 gekoppelt ist, die mit einem Befehls-Übersetzungspuffer (TLB, Translation Lookaside Buffer) 1036 gekoppelt ist, der mit einer Befehlsabrufeinheit 1038 gekoppelt ist, die mit einer Decodiereinheit 1040 gekoppelt ist. Die Decodiereinheit 1040 (oder der Decodierer) kann Befehle decodieren und als eine Ausgabe eine oder mehrere Mikrooperationen, einen oder mehrere Mikrocode-Eintrittspunkte, einen oder mehrere Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die aus den ursprünglichen Befehlen decodiert worden sind oder diese anderweitig reflektieren oder anderweitig von diesen abgeleitet worden sind. Die Decodiereinheit 1040 kann unter Verwendung verschiedener anderer Mechanismen implementiert werden. Beispiele für geeignete Mechanismen beinhalten Lookup-Tabellen, Hardwareimplementierungen, programmierbare logische Arrays (PLAs), Mikrocode-Nur-Lese-Speicher (ROMs) usw., ohne jedoch darauf beschränkt zu sein. In einer Ausführungsform weist der Kern 1090 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für bestimmte Makrobefehle speichert (z. B. in der Decodiereinheit 1040 oder ansonsten innerhalb der Front-End-Einheit 1030), auf. Die Decodiereinheit 1040 ist mit einer Umbenennungs-/Zuordnungseinheit 1052 in der Ausführungs-Engine-Einheit 1050 gekoppelt.
  • Die Ausführungs-Engine-Einheit 1050 enthält die Umbenennungs-/Zuordnungseinheit 1052, die an eine Rückzugseinheit 1054 und einen Satz von einer oder mehreren Planungseinheit(en) 1056 gekoppelt ist. Die Planungseinheit(en) 1056 stellen irgendeine Anzahl von unterschiedlichen Planern dar, einschließlich Reservierungsstationen, ein zentrales Befehlsfenster usw. Die Planungseinheit(en) 1056 sind mit der/den physikalischen Registerdatei(en)-Einheit(en) 1058 gekoppelt. Jede der physikalischen Registerdatei(en)-Einheiten 1058 stellt eine oder mehrere physikalische Registerdateien dar, von welchen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare Ganzzahlen, skalare Gleitkommazahlen, gepackte Ganzzahlen, gepackte Gleitkommazahlen, Vektorganzzahlen, Vektorgleitkommazahlen, Status (zum Beispiel einen Anweisungspointer, der die Adresse der nächsten auszuführenden Anweisung ist) usw. In einer Ausführungsform umfasst die physikalische Registerdatei(en)-Einheit 1058 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physikalische(n) Registerdatei(en)-Einheit(en) 1058 wird bzw. werden von der Rückzugseinheit 1054 überlappt, um verschiedene Weisen zu veranschaulichen, in denen Registerumbenennung und Out-Of-Order-Ausführung implementiert werden können (z. B. unter Verwendung von Neuordnungspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Zukunftsdatei(en), von Verlaufspuffer(n) und von Rückzugsregisterdatei(en), unter Verwendung von Registerabbildungen und eines Pools von Registern usw.). Die Rückzugseinheit 1054 und die physikalische(n) Registerdatei(en)-Einheit(en) 1058 sind an den bzw. die Ausführungs-Cluster 1060 gekoppelt. Der/die Ausführungs-Cluster 1060 enthalten einen Satz von einer oder mehreren Ausführungseinheiten 1062 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 1064. Die Ausführungseinheiten 1062 können verschiedene Operationen (zum Beispiel Verschiebungen, Addition, Subtraktion, Multiplikation) und auf verschiedenen Datentypen (zum Beispiel skalares Gleitkomma, gepackte Ganzzahl, gepacktes Gleitkomma, Vektor-Ganzzahl, Vektor-Gleitkomma) durchführen. Während einige Ausführungsformen eine Reihe von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen dediziert sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten enthalten, die alle alle Funktionen durchführen. Die Planungseinheit(en) 1056, die physikalische(n) Registerdatei(en)-Einheit(en) 1058 und der bzw. die Ausführungs-Cluster 1060 werden als möglicherweise eine Mehrzahl gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erzeugen (z. B. eine Pipeline für skalare Ganzzahl, eine Pipeline für skalares Gleitkommalgepackte Ganzzahl/gepacktes Gleitkomma/Vektor-Ganzzahl/Vektor-Gleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre eigene Planungseinheit, physikalische Registerdatei(en)-Einheit und/oder Ausführungs-Cluster aufweisen - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1064 aufweist). Es versteht sich auch, dass bei Verwendung separater Pipelines eine oder mehrere dieser Pipelines Out-Of-Order-Ausgabe/-Ausführungspipelines und der Rest In-Order-Pipelines sein können.
  • Der Satz von Speicherzugriffseinheiten 1064 ist mit der Speichereinheit 1070 gekoppelt, die eine Daten-TLB-Einheit 1072 enthält, die mit einer Daten-Cache-Einheit 1074 gekoppelt ist, die mit einer Level-2- (L2-) Cache-Einheit 1076 gekoppelt ist. In einer Ausführungsform können die Speicherzugriffseinheiten 1064 eine Ladeeinheit, eine Adressspeichereinheit und eine Datenspeichereinheit einschließen, die alle an die Daten-TLB-Einheit 1072 in der Speichereinheit 1070 gekoppelt sind. Die Befehls-Cache-Einheit 1034 ist ferner an eine Level-2 (L2)-Cache-Einheit 1076 in der Speichereinheit 1070 gekoppelt. Die L2-Cache-Einheit 1076 ist mit einem oder mehreren anderen Cache-Levels und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die Registerumbenennung-Out-Of-Order-Ausgabe/-Ausführungskern-Architektur die Pipeline 1000 wie folgt implementieren: 1) das Befehlsabrufen 1038 führt die Abrufen- und Längendecodieren-Stufen 1002 und 1004 durch; 2) die Decodiereinheit 1040 führt die Decodierstufe 1006 durch; 3) die Umbenennungs-/Zuordnungseinheit 1052 führt die Zuordnungsstufe 1008 und die Umbenennungsstufe 1010 durch; 4) die Planungseinheit(en) 1056 führen die Planungsstufe 1012 durch; 5) die physikalischen Registerdatei(en)-Einheit(en) 1058 und die Speichereinheit 1070 führen die Registerlesen/Speicherlesen-Stufe 1014 durch; der Ausführungs-Cluster 1060 führt die Ausführungsstufe 1016 durch; 6) die Speichereinheit 1070 und die physikalische(n) Registerdatei(en)-Einheit(en) 1058 führen die Zurückschreiben-/Speicherschreiben-Stufe 1018 durch; 7) verschiedene Einheiten können an der Ausnahmebehandlungsstufe 1022 beteiligt sein; und 8) die Rückzugseinheit 1054 und die Einheit(en) der physikalischen Registerdatei(en) 1058 führen die Commit-Stufe 1024 durch.
  • Der Kern 1090 kann einen oder mehrere Befehlssätze unterstützen (zum Beispiel den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien, USA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie zum Beispiel NEON) von ARM Holdings in Sunnyvale, Kalifornien, USA), einschließlich des bzw. der hierin beschriebene(n) Befehl(e). In einer Ausführungsform weist der Kern 1090 eine Logik zum Unterstützen einer Befehlssatzerweiterung für gepackte Daten (zum Beispiel AVX1, AVX2) auf, wodurch es ermöglicht wird, dass die von vielen Multimedia-Anwendungen verwendeten Vorgänge unter Verwenden gepackter Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehreren parallelen Sätzen von Vorgängen oder Threads) unterstützen kann und dies auf vielerlei Arten tun kann, einschließlich Zeitscheiben-Multithreading, simultanes Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads bereitstellt, für die dieser physikalische Kern ein simultanes Multithreading durchführt) oder einer Kombination davon (zum Beispiel Zeitscheiben-Abrufen und -Decodieren und simultanes Multithreading danach, wie zum Beispiel bei der Intel® Hyperthreading-Technologie).
  • Während eine Registerumbenennung in dem Zusammenhang einer Out-Of-Order-Ausführung beschrieben ist, versteht es sich, dass eine Registerumbenennung in einer In-Order-Architektur verwendet werden kann. Obwohl die veranschaulichte Ausführungsform des Prozessors auch separate Befehls- und Daten-Cache-Einheiten 1034/1074 und eine gemeinsam genutzte L2-Cache-Einheit 1076 enthält, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie zum Beispiel einen internen Level-1- (L1-) Cache oder mehrere interne Cache-Level. In einigen Ausführungsformen kann das System eine Kombination von einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, aufweisen. Alternativ dazu kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
  • Spezifische In-Order-Kernarchitektur
  • 11A-11B veranschaulichen ein Blockdiagramm einer spezifischeren In-Order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderen Kernen des gleichen Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Verschaltungsnetzwerk mit hoher Bandbreite (zum Beispiel ein Ringnetzwerk) mit einiger fester Funktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
  • 11A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung zum On-Die-Verschaltungsnetzwerk 1102 und seinem lokalen Teilsatz des Level-2- (L2-) Cache 1104 gemäß einer Ausführungsform. In einer Ausführungsform unterstützt ein Befehlsdecodierer 1100 den x86-Befehlssatz mit einer gepackten Daten-Befehlssatz-Erweiterung. Ein L1-Cache 1106 ermöglicht Zugriffe mit geringer Latenz auf einen Cache-Speicher in die skalaren und Vektoreinheiten. Während in einer Ausführungsform (zum Vereinfachen der Konzeption) eine skalare Einheit 1108 und eine Vektoreinheit 1110 separate Registersätze verwenden (skalare Register 1112 bzw. Vektorregister 1114) und Daten, die zwischen ihnen transferiert werden, in Speicher geschrieben und dann von einem Level-1-Cache (L1) 1106 zurückgelesen werden, können alternative Ausführungsformen einen unterschiedlichen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationspfad umfassen, der Daten ermöglicht, zwischen den zwei Registerdateien transferiert zu werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 1104 ist Teil eines globalen L2-Caches, der in getrennte lokale Teilsätze, einen pro Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen direkten Zugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 1104 auf. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Teilsatz 1104 gespeichert, und es kann schnell auf sie zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Teilsatz 1104 gespeichert und, falls nötig, aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten, wie zum Beispiel Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, in dem Chip miteinander zu kommunizieren. Jeder Ringdatenpfad ist je Richtung 1012 Bits breit.
  • 11B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 11A gemäß einer Ausführungsform. 11B beinhaltet einen L1-Daten-Cache 1106A, der Teil des L1-Caches 1104 ist, ebenso wie mehr Details hinsichtlich der Vektoreinheit 1110 und der Vektorregister 1114. Insbesondere ist die Vektoreinheit 1110 eine 16-breite Vektorverarbeitungseinheit (Vector Processing Unit, VPU) (siehe die 16-breite ALU 1128), die einen oder mehrere der folgenden Befehle ausführt: Ganzzahlbefehle, Gleitkommabefehle mit einfacher Genauigkeit und Gleitkommabefehle mit doppelter Genauigkeit. Die VPU unterstützt Swizzling der Registereingänge mit der Swizzle-Einheit 1120, numerische Konvertierung mit den numerischen Konvertierungseinheiten 1122A-B und Replikation mit der Replikationseinheit 1124 auf dem Speichereingang. Schreibmaskenregister 1126 gestatten das Prädizieren resultierender Vektorschreibvorgänge.
  • 12 ist ein Blockdiagramm eines Prozessors 1200, der mehr als einen Kern aufweisen kann, der eine integrierte Speichersteuerung aufweisen kann und der integrierte Grafiken aufweisen kann, gemäß Ausführungsformen. Die Kästen mit durchgezogenen Linien in 12 veranschaulichen einen Prozessor 1200 mit einem einzelnen Kern 1202A, einen Systemagenten 1210, einen Satz einer oder mehrerer Bussteuerungseinheiten 1216, während das optionale Hinzufügen der Kästen mit gestrichelten Linien einen alternativen Prozessor 1200 mit mehreren Kernen 1202A-N, einen Satz einer oder mehrerer integrierter Speichersteuerungseinheit(en) 1214 in der Systemagenteneinheit 1210 und Speziallogik 1208 veranschaulicht.
  • Somit können unterschiedliche Implementierungen des Prozessors 1200 Folgendes enthalten: 1) eine CPU mit der Speziallogik 1208, die integrierte Grafik- und/oder wissenschaftliche (Durchsatz-) Logik ist (die einen oder mehrere Kerne enthalten kann), und mit den Kernen 1202A-N, die einer oder mehrere Universalkerne sind (z. B. Universal-In-Order-Kerne, Universal-Out-Of-Order-Kerne, eine Kombination aus den beiden); 2) einen Coprozessor mit den Kernen 1202A-N, die eine große Anzahl von Spezialkernen sind, die primär für Grafiken und/oder Wissenschaft (Durchsatz) vorgesehen sind; und 3) einen Coprozessor mit den Kernen 1202A-N, die eine große Anzahl von Universal-In-Order-Kernen sind. Daher kann der Prozessor 1200 ein Universalprozessor, ein Coprozessor oder Spezialprozessor, wie zum Beispiel ein Netz- oder Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, GPGPU (Universalgrafikverarbeitungseinheit), ein Hochdurchsatz-MIC-Coprozessor (MIC: Many Integrated Core - viele integrierte Kerne) (der 30 oder mehr Kerne aufweist), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1200 kann ein Teil eines und/oder kann auf einem oder mehreren Substraten unter Verwendung einer beliebigen Anzahl von Prozesstechnologien implementiert sein, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie umfasst ein oder mehrere Level von Cache innerhalb der Kerne, einen Satz von einer oder mehreren gemeinsam genutzten Cache-Einheiten 1206 und externen Speicher (nicht gezeigt), gekoppelt mit dem Satz an integrierten Speichersteuerungseinheiten 1214. Der Satz von gemeinsam genutzten Cache-Einheiten 1206 kann einen oder mehrere Mid-Level-Caches enthalten, wie zum Beispiel Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus. Während in einer Ausführungsform eine ringbasierte Verschaltungseinheit 1212 die integrierte Grafiklogik 1208, den Satz gemeinsam genutzter Cache-Einheiten 1206 und die Systemagenteneinheit 1210/die integrierte(n) Speichersteuerungseinheit(en) 1214 verbindet, können alternative Ausführungsformen irgendeine Anzahl an allgemein bekannten Techniken zum Verschalten solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cache-Einheiten 1204A-N und Kernen 1202A-N gewahrt.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 1202A-N zum Multithreading in der Lage. Der Systemagent 1210 enthält diejenigen Komponenten, die die Kerne 1202A-N koordinieren und betreiben. Die Systemagenteneinheit 1210 kann zum Beispiel eine Leistungssteuereinheit (PCU, Power Control Unit) und eine Anzeigeeinheit enthalten. Die PCU kann Logik und Komponenten sein oder enthalten, die zum Regeln des Leistungszustands der Kerne 1202A-N und der integrierten Grafiklogik 1208 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1202A-N können hinsichtlich des Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1202A-N können in der Lage sein, den gleichen Befehlssatz auszuführen, während andere in der Lage sein können, nur einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Computerarchitekturen
  • 13-16 sind Blockdiagramme von Computerarchitekturen. Andere im Fachgebiet bekannte Systemdesigns und Konfigurationen für Laptops, Desktops, Handheld-PC, Personal Digital Assistants, Engineering-Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digital-Signal-Prozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabevorrichtungen, Handheld-Vorrichtungen und diverse andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielzahl an Systemen oder elektronischen Vorrichtungen allgemein geeignet, die, wie hier offenbart wird, zur Integration eines Prozessors und/oder anderer Ausführungslogik in der Lage sind.
  • Unter Bezugnahme nunmehr auf 13 ist ein Blockdiagramm eines Systems 1300 gemäß einer Ausführungsform gezeigt. Das System 1300 kann einen oder mehrere Prozessoren 1310, 1315, die mit einem Steuervorrichtungs-Hub 1320 gekoppelt sind, aufweisen. In einer Ausführungsform weist der Steuervorrichtungs-Hub 1320 einen Grafikspeicher-Steuervorrichtungs-Hub (GMCH, Graphics Memory Controller Hub) 1390 und einen Eingabe-/Ausgabe-Hub (IOH, Input/Output Hub) 1350 (die sich auf separaten Chips befinden können) auf; der GMCH 1390 weist Speicher- und Grafiksteuervorrichtungen, mit welchen ein Speicher 1340 und ein Coprozessor 1345 gekoppelt sind, auf; der IOH 1350 koppelt die Eingabe-/Ausgabe- (E/A)-Vorrichtungen 1360 mit dem GMCH 1390. Alternativ sind eine oder beide der Speicher- und der Grafiksteuervorrichtung in den Prozessor integriert (wie hier beschrieben), der Speicher 1340 und der Coprozessor 1345 sind direkt mit dem Prozessor 1310 gekoppelt, und der Steuervorrichtungs-Hub 1320 befindet sich in einem einzelnen Chip mit dem IOH 1350.
  • Die optionale Natur zusätzlicher Prozessoren 1315 ist in 13 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 1310, 1315 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne enthalten und kann eine Version des Prozessors 1200 sein.
  • Der Speicher 1340 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM, Dynamic Random Access Memory), ein Phasenwechselspeicher (PCM, Phase Change Memory) oder eine Kombination der beiden sein. In mindestens einer Ausführungsform kommuniziert der Steuervorrichtung-Hub 1320 mit dem/den Prozessor(en) 1310, 1315 über einen Multi-Drop-Bus, wie zum Beispiel einem Front Side Bus (FSB), einer Punkt-zu-Punkt-Schnittstelle, wie zum Beispiel QuickPath Interconnect (QPI), oder einer ähnlichen Verbindung 1395.
  • In einer Ausführungsform ist der Coprozessor 1345 ein Spezialprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuervorrichtungs-Hub 1320 einen integrierten Grafikbeschleuniger aufweisen.
  • Es kann eine Vielfalt von Unterschieden zwischen den physikalischen Ressourcen 1310, 1315 hinsichtlich eines Spektrums relevanter Metriken geben, einschließlich architektonischer, mikroarchitektonischer, thermischer, Stromverbrauchscharakteristika und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1310 Befehle aus, die Datenverarbeitungsvorgänge eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1310 erkennt diese Coprozessorbefehle als einem Typ zugehörig, der vom angeschlossenen Coprozessor 1345 ausgeführt werden soll. Entsprechend gibt der Prozessor 1310 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf einem Coprozessorbus oder einer anderen Verschaltung an den Coprozessor 1345 aus. Ein oder mehrere Coprozessoren 1345 akzeptieren die empfangenen Coprozessorbefehle und führen sie aus.
  • Unter Bezugnahme nunmehr auf 14 ist ein Blockdiagramm eines ersten spezifischeren Systems 1400 gemäß einer Ausführungsform gezeigt. Wie in 14 gezeigt wird, ist das Multiprozessorsystem 1400 ein Punkt-zu-Punkt-Verschaltungssystem und enthält einen ersten Prozessor 1470 und einen zweiten Prozessor 1480, die über eine Punkt-zu-Punkt-Verschaltung 1450 gekoppelt sind. Jeder der Prozessoren 1470 und 1480 kann eine Version des Prozessors 1200 sein. In einer Ausführungsform sind die Prozessoren 1470 und 1480 jeweils die Prozessoren 1310 und 1315, während der Coprozessor 1438 der Coprozessor 1345 ist. In einer anderen Ausführungsform sind die Prozessoren 1470 und 1480 der Prozessor 1310 bzw. der Coprozessor 1345.
  • Die Prozessoren 1470 und 1480 sind einschließlich integrierter Speicher-Controller(Integrated Memory Controller, IMC)-Einheiten 1472 bzw. 1482 gezeigt. Der Prozessor 1470 weist auch als Teil seiner Bus-Steuervorrichtungseinheiten Punkt-zu-Punkt-Schnittstellen (P-P) 1476 und 1478 auf, in ähnlicher Weise weist der zweite Prozessor 1480 P-P-Schnittstellen 1486 und 1488 auf. Die Prozessoren 1470, 1480 können Informationen über eine Punkt-zu-Punkt-Schnittstelle (P-P) 1450 unter Verwenden von P-P-Schnittstellenschaltungen 1478, 1488 austauschen. Wie in 14 gezeigt wird, koppeln IMCs 1472 und 1482 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1432 und einem Speicher 1434, die Teile eines Hauptspeichers sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
  • Die Prozessoren 1470, 1480 können jeweils Informationen mit einem Chipsatz 1490 über einzelne P-P-Schnittstellen 1452, 1454 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 1476, 1494, 1486, 1498 austauschen. Der Chipsatz 1490 kann optional Informationen mit dem Coprozessor 1438 über eine Hochleistungsschnittstelle 1439 austauschen. In einer Ausführungsform ist der Coprozessor 1438 ein Spezialprozessor, wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder ein Kommunikationsprozessor, eine Komprimierungs-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam verwendeter Cache (nicht gezeigt) kann in beiden Prozessoren oder außerhalb der beiden Prozessoren enthalten sein, jedoch derart über eine P-P-Verschaltung mit den Prozessoren verbunden sein, dass die lokalen Cache-Informationen eines oder beider Prozessoren in dem gemeinsam verwendeten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 1490 kann über eine Schnittstelle 1496 mit einem erstem Bus 1416 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1416 ein Peripheral Component Interconnect (PCI-) Bus oder ein Bus, wie zum Beispiel ein PCI-Express-Bus, oder ein anderer E/A-Verbindungsbus der dritten Generation sein, obwohl der Schutzbereich der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 14 gezeigt, können verschiedene E/A-Vorrichtungen 1414 zusammen mit einer Busbrücke 1418, die den ersten Bus 1416 mit einem zweiten Bus 1420 koppelt, mit dem ersten Bus 1416 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche(r) Prozessor(en) 1415, wie zum Beispiel Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder Digital-Signal-Verarbeitungs-(DSP)-Einheiten), feldprogrammierbare Gate-Arrays (Field Programmable Gate Arrays) oder ein beliebiger anderer Prozessor, mit dem ersten Bus 1416 gekoppelt. In einer Ausführungsform kann der zweite Bus 1420 ein Low-Pin-Count (LPC-) Bus sein. Diverse Vorrichtungen können in einer Ausführungsform mit einem zweiten Bus 1420 gekoppelt sein, einschließlich zum Beispiel eine Tastatur und/oder eine Maus 1422, Kommunikationsvorrichtungen 1427 und eine Speicherungseinheit 1428, wie ein Festplattenlaufwerk oder eine andere Massenspeichervorrichtung, die Befehle/Code und Daten 1430 aufweisen kann. Des Weiteren kann eine Audio-E/A 1424 mit dem zweiten Bus 1420 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Punkt-zu-Punkt-Architektur von 14 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Unter Bezugnahme nunmehr auf 15 ist ein Blockdiagramm eines zweiten spezifischeren Systems 1500 gemäß einer Ausführungsform gezeigt. Ähnliche Elemente in 14 und 15 tragen ähnliche Bezugszeichen, und gewisse Aspekte von 14 wurden in 15 ausgelassen, um Eintrüben von anderen Aspekten aus 15 zu verhindern.
  • 15 stellt dar, dass die Prozessoren 1470, 1480 integrierten Speicher und E/A-Steuerlogik („CL“, Control Logic) 1472 bzw. 1482 umfassen können. Somit enthalten die CL 1472, 1482 integrierte Speichersteuerungseinheiten und E/A-Steuerlogik. 15 veranschaulicht, dass nicht nur die Speicher 1432, 1434 mit den CL 1472, 1482 gekoppelt sind, sondern dass auch die E/A-Vorrichtungen 1514 mit der Steuerlogik 1472, 1482 gekoppelt sind. Legacy-E/A-Vorrichtungen 1515 sind mit dem Chipsatz 1490 gekoppelt.
  • Unter Bezugnahme nunmehr auf 16 ist ein Blockdiagramm eines SoC 1600 gemäß einer Ausführungsform gezeigt. Ähnliche Elemente in 12 tragen gleiche Bezugszeichen. Kästen mit gestrichelten Linien sind ebenfalls optionale Merkmale auf weiterentwickelten SoCs. In 16 ist bzw. sind Verschaltungseinheit(en) 1602 gekoppelt mit: einem Anwendungsprozessor 1610, der einen Satz von einem oder mehreren Kernen 1202A-N mit integrierten Cache-Einheiten 1204A-N und gemeinsam genutzten Cache-Einheit(en) 1206 aufweist; einer Systemagenteneinheit 1210; einer oder mehreren Bussteuerungseinheiten 1216; einer oder mehreren integrierten Speichersteuerungseinheiten 1214; einem Satz aus einem oder mehreren Coprozessoren 1620, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen kann; einer statischen Direktzugriffsspeichereinheit (SRAM, Static Random Access Memory) 1630; einer Direktzugriffsspeichereinheit (DMA, Direct Memory Access) 1632; und einer Anzeigeeinheit 1640 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst(umfassen) der(die) Coprozessor(en) 1620 einen Spezialprozessor, wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Komprimierungs-Engine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert sein. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, der auf programmierbaren Systemen ausgeführt wird, die mindestens einen Prozessor, ein Speichersystem (einschließlich flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie zum Beispiel der Code 1430, der in 14 veranschaulicht wird, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Anwendung enthält ein Verarbeitungssystem irgendein System, das einen Prozessor aufweist, wie zum Beispiel einen Digital-Signal-Prozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (Application Specific Integrated Circuit, ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann nach Wunsch auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich ist der Schutzbereich der hier beschriebenen Mechanismen nicht auf irgendeine besondere Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Einer oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das diverse Logik im Prozessor darstellt, die, wenn sie von einer Maschine gelesen wird, bewirkt, dass die Maschine Logik zum Durchführen der hier beschriebenen Techniken herstellt. Diese Repräsentationen, bekannt als „IP-Kerne“, können auf einem dinghaften maschinenlesbaren Medium gespeichert und für verschiedene Kunden oder Herstellungseinrichtungen bereitgestellt werden, um sie in die Herstellungsmaschinen zu laden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Solche maschinenlesbaren Speichermedien können ohne Einschränkung umfassen: nicht-flüchtige, dingbare Anordnungen von Artikeln, die durch eine Maschine oder eine Vorrichtung gefertigt oder gebildet werden, einschließlich Speichermedien, wie etwa Festplatten, jeder andere Typ von Platte, einschließlich Floppy Disks, optische Platten, CD-Nur-Lese-Speicher (CD-ROMs, Compact Disk Read-Only Memories), wiederbeschreibbare Compact Disks (CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen, wie etwa Nur-Lese-Speicher (ROMs, Read-Only Memories), Direktzugriffsspeicher (RAMs, Random Access Memories), wie etwa dynamische Direktzugriffsspeicher (DRAMs, Dynamic Random Access Memories), statische Direktzugriffsspeicher (SRAMs, Static Random Access Memories), löschbare, programmierbare Nur-Lese-Speicher (EPROMs, Erasable Programmable Read-Only Memories), Flash-Speicher, elektrisch löschbare, programmierbare Nur-Lese-Speicher (EEPROMs, Electrically Erasable Programmable Read-Only Memories), Phasenwechselspeicher (PCM, Phase Change Memory), magnetische oder optische Karten oder jeden anderen Typ von zum Speichern von elektronischen Befehlen geeigneten Medien.
  • Dementsprechend beinhalten Ausführungsformen der Erfindung auch nichtflüchtige, dingbare maschinenlesbare Medien, die Befehle enthalten oder Designdaten enthalten, wie zum Beispiel eine Hardware-Description-Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Einrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl aus einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Zum Beispiel kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle, die vom Kern verarbeitet werden sollen, übersetzen (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilierung), morphen, emulieren oder auf andere Weise konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlskonverter kann sich auf dem Prozessor, außerhalb des Prozessors oder teilweise auf und teilweise außerhalb des Prozessors befinden.
  • 17 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlskonverters zum Konvertieren binärer Befehle in einem Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlskonverter ein Softwarebefehlskonverter, obwohl der Befehlskonverter alternativ in Software, Firmware, Hardware oder diversen Kombinationen daraus implementiert sein kann. 17 zeigt, dass ein Programm in einer Hochsprache 1702 unter Verwendung eines x86-Compilers 1704 kompiliert werden kann, um den x86-Binärcode 1706 zu generieren, der von einem Prozessor mit mindestens einem x86-Befehlssatzkern 1716 nativ ausgeführt werden kann. Der Prozessor mit mindestens einem x86-Befehlssatzkern 1716 stellt jeden Prozessor dar, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Applikationen oder anderer Software, die zum Laufen auf einem Intel-Prozessor mit mindestens einem x86-Befehlssatzkern vorgesehen ist, kompatibel ausführt oder anders verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 1704 stellt einen Compiler dar, der dazu betrieben werden kann, den x86-Binärcode 1706 (z. B. Objektcode) zu generieren, der auf dem Prozessor mit mindestens einem x86-Befehlssatzkern 1716 mit oder ohne zusätzliche Verknüpfungsverarbeitung ausgeführt werden kann. Gleichermaßen zeigt 17, dass das Programm in der Hochsprache 1702 unter Verwendung eines alternativen Befehlssatz-Compilers 1708 kompiliert werden kann, um den alternativen Befehlssatzbinärcode 1710 zu erzeugen, der von einem Prozessor ohne mindestens einen x86-Befehlssatzkern 1714 (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARM Holdings in Sunnyvale, Kalifornien ausführen) nativ ausgeführt werden kann. Der Befehlskonverter 1712 wird zum Umwandeln des x86-Binärcodes 1706 in Code verwendet, der vom Prozessor ohne einen x86-Befehlssatzkern 1714 nativ ausgeführt werden kann. Dieser konvertierte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatz-Binärcode 1710, weil ein Befehlskonverter, der dazu in der Lage ist, schwierig herzustellen ist; allerdings wird der konvertierte Code die allgemeine Operation erledigen und aus Befehlen aus dem alternativen Befehlssatz zusammengesetzt sein. Somit stellt der Befehlskonverter 1712 Software, Firmware, Hardware oder eine Kombination daraus dar, die es durch Emulation, Simulation oder irgendeinen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, gestattet, den x86-Binärcode 1706 auszuführen.
  • Zusätzliche Anmerkungen und Beispiele:
  • Beispiel 1 ist ein System zur Computerspeicherverwaltung, wobei das System Folgendes umfasst: eine erste Speichervorrichtung, die eine Zuordnungstabelle aufweist; eine zweite Speichervorrichtung, die einen Stagingbereich aufweist; eine dritte Speichervorrichtung, die eine Deduplizierungsdatenregion aufweist; und eine Speichersteuerung, die betrieben werden kann, um: eine Speicherzugriffsanfrage zu erhalten, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; die Daten in den Stagingbereich zu schreiben; und die Zuordnungstabelle mit der Adresse zu aktualisieren.
  • In Beispiel 2 beinhaltet der Gegenstand des Beispiels 1, dass die erste und zweite Speichervorrichtung in demselben Package integriert sind.
  • In Beispiel 3 beinhaltet der Gegenstand der Beispiele 1-2, dass die Speichersteuerung Folgendes durchführt: Überwachen des Stagingbereichs, um eine Nutzungsmenge zu bestimmen; und Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  • In Beispiel 4 beinhaltet der Gegenstand des Beispiels 3, dass zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung einen Zeitraum zum Ausführen des Rückforderungsprozesses konfiguriert.
  • In Beispiel 5 beinhaltet der Gegenstand der Beispiele 3-4, dass der Rückforderungsprozess verwendet wird, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  • In Beispiel 6 beinhaltet der Gegenstand der Beispiele 3-5, dass zum Überwachen des Stagingbereichs die Speichersteuerung bestimmt, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, und wobei zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung den Rückforderungsprozess deaktiviert, während die Nutzungsmenge unter dem ersten Schwellenwert liegt.
  • In Beispiel 7 beinhaltet der Gegenstand des Beispiels 6 eine 50%-Nutzung des Stagingbereichs.
  • In Beispiel 8 beinhaltet der Gegenstand der Beispiele 3-7, dass zum Überwachen des Stagingbereichs die Speichersteuerung bestimmt, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, und wobei zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung den Rückforderungsprozess aktiviert, während die Nutzungsmenge über dem ersten Schwellenwert liegt.
  • In Beispiel 9 beinhaltet der Gegenstand des Beispiels 8 eine 100%-Nutzung des Stagingbereichs.
  • In Beispiel 10 beinhaltet der Gegenstand der Beispiele 3-9, dass zum Überwachen des Stagingbereichs die Speichersteuerung bestimmt, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, und wobei zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung den Rückforderungsprozess aktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, und wobei die Speichersteuerung weitere Schreibvorgänge in den Stagingbereich deaktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In Beispiel 11 beinhaltet der Gegenstand des Beispiels 10, dass die Speichersteuerung einen herkömmlichen Deduplizierungsprozess aktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In Beispiel 12 beinhaltet der Gegenstand der Beispiele 3-11, dass zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung die Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses verwendet.
  • In Beispiel 13 beinhaltet der Gegenstand der Beispiele 3-12, dass zum Konfigurieren des Rückforderungsprozesses die Speichersteuerung: basierend auf einer temporalen Markierung einen Satz von Adressen, die sich auf den Stagingbereich beziehen, auswählt, wobei der Satz von Adressen in der Zuordnungstabelle gespeichert ist; und den Satz von Adressen in dem Rückforderungsprozess bearbeitet.
  • In Beispiel 14 beinhaltet der Gegenstand des Beispiels 13, dass die temporale Markierung ein Zeitstempel ist, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden.
  • In Beispiel 15 beinhaltet der Gegenstand des Beispiels 14 den 2-Bit-Zeitstempel.
  • Beispiel 16 ist ein Verfahren zur Computerspeicherverwaltung, wobei das Verfahren Folgendes umfasst: Erhalten einer Speicherzugriffsanfrage, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; Schreiben der Daten in einen Stagingbereich in einer Speichervorrichtung, wobei der Stagingbereich Daten temporär speichert, bevor sie dedupliziert werden; und Aktualisieren einer Zuordnungstabelle mit der Adresse, wobei die Zuordnungstabelle in der Speichervorrichtung gespeichert ist.
  • In Beispiel 17 beinhaltet der Gegenstand des Beispiels 16 das Überwachen des Stagingbereichs zum Bestimmen einer Nutzungsmenge; und das Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  • In Beispiel 18 beinhaltet der Gegenstand des Beispiels 17, dass das Konfigurieren des Rückforderungsprozesses das Konfigurieren eines Zeitraums zum Ausführen des Rückforderungsprozesses umfasst.
  • In Beispiel 19 beinhaltet der Gegenstand der Beispiele 17-18, dass der Rückforderungsprozess verwendet wird, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  • In Beispiel 20 beinhaltet der Gegenstand der Beispiele 17-19, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Deaktivieren des Rückforderungsprozesses, während die Nutzungsmenge unter dem ersten Schwellenwert liegt, umfasst.
  • In Beispiel 21 beinhaltet der Gegenstand des Beispiels 20 eine 50%-Nutzung des Stagingbereichs.
  • In Beispiel 22 beinhaltet der Gegenstand der Beispiele 17-21, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge über dem ersten Schwellenwert liegt, umfasst.
  • In Beispiel 23 beinhaltet der Gegenstand des Beispiels 22 eine 100%-Nutzung des Stagingbereichs.
  • In Beispiel 24 beinhaltet der Gegenstand der Beispiele 17-23, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst, und wobei das Verfahren ferner das Deaktivieren weiterer Schreibvorgänge in den Stagingbereich, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst.
  • In Beispiel 25 beinhaltet der Gegenstand des Beispiels 24 das Aktivieren eines herkömmlichen Deduplizierungsprozesses während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In Beispiel 26 beinhaltet der Gegenstand der Beispiele 17-25, dass das Konfigurieren des Rückforderungsprozesses das Verwenden der Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses umfasst.
  • In Beispiel 27 beinhaltet der Gegenstand der Beispiele 17-26, dass das Konfigurieren des Rückforderungsprozesses Folgendes umfasst: Auswählen basierend auf einer temporalen Markierung eines Satzes von Adressen, die sich auf den Stagingbereich beziehen, wobei der Satz von Adressen in der Zuordnungstabelle gespeichert ist; und Bearbeiten des Satzes von Adressen in dem Rückforderungsprozess.
  • In Beispiel 28 beinhaltet der Gegenstand des Beispiels 27, dass die temporale Markierung ein Zeitstempel ist, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden.
  • In Beispiel 29 beinhaltet der Gegenstand des Beispiels 28 den 2-Bit-Zeitstempel.
  • Beispiel 30 ist mindestens ein maschinenlesbares Medium, das Befehle aufweist, welche, wenn sie von einer Maschine ausgeführt werden, bewirken, dass die Maschine Operationen beliebiger der Verfahren der Beispiele 16-27 durchführt.
  • Beispiel 31 ist eine Einrichtung, die Mittel zum Durchführen beliebiger der Verfahren der Beispiele 16-27 umfasst.
  • Beispiel 32 ist eine Einrichtung zur Computerspeicherverwaltung, wobei die Einrichtung Folgendes umfasst: Mittel zum Erhalten einer Speicherzugriffsanfrage, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; Mittel zum Schreiben der Daten in einen Stagingbereich in einer Speichervorrichtung, wobei der Stagingbereich Daten temporär speichert, bevor sie dedupliziert werden; und Mittel zum Aktualisieren einer Zuordnungstabelle mit der Adresse, wobei die Zuordnungstabelle in der Speichervorrichtung gespeichert ist.
  • In Beispiel 33 beinhaltet der Gegenstand des Beispiels 32 Mittel zum Überwachen des Stagingbereichs zum Bestimmen einer Nutzungsmenge; und Mittel zum Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  • In Beispiel 34 beinhaltet der Gegenstand des Beispiels 33, dass die Mittel zum Konfigurieren des Rückforderungsprozesses Mittel zum Konfigurieren eines Zeitraums zum Ausführen des Rückforderungsprozesses umfassen.
  • In Beispiel 35 beinhaltet der Gegenstand der Beispiele 33-34, dass der Rückforderungsprozess verwendet wird, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  • In Beispiel 36 beinhaltet der Gegenstand der Beispiele 33-35, dass die Mittel zum Überwachen des Stagingbereichs Mittel zum Bestimmen, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, umfassen, und wobei die Mittel zum Konfigurieren des Rückforderungsprozesses Mittel zum Deaktivieren des Rückforderungsprozesses, während die Nutzungsmenge unter dem ersten Schwellenwert liegt, umfassen.
  • In Beispiel 37 beinhaltet der Gegenstand des Beispiels 36 eine 50%-Nutzung des Stagingbereichs.
  • In Beispiel 38 beinhaltet der Gegenstand der Beispiele 33-37, dass die Mittel zum Überwachen des Stagingbereichs Mittel zum Bestimmen, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, umfassen, und wobei die Mittel zum Konfigurieren des Rückforderungsprozesses Mittel zum Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge über dem ersten Schwellenwert liegt, umfassen.
  • In Beispiel 39 beinhaltet der Gegenstand des Beispiels 38 eine 100%-Nutzung des Stagingbereichs.
  • In Beispiel 40 beinhaltet der Gegenstand der Beispiele 33-39, dass die Mittel zum Überwachen des Stagingbereichs Mittel zum Bestimmen, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, umfassen, und wobei die Mittel zum Konfigurieren des Rückforderungsprozesses Mittel zum Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfassen, und wobei die Einrichtung ferner Mittel zum Deaktivieren weiterer Schreibvorgänge in den Stagingbereich, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst.
  • In Beispiel 41 beinhaltet der Gegenstand des Beispiels 40 Mittel zum Aktivieren eines herkömmlichen Deduplizierungsprozesses während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In Beispiel 42 beinhaltet der Gegenstand der Beispiele 33-41, dass die Mittel zum Konfigurieren des Rückforderungsprozesses das Verwenden der Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses umfassen.
  • In Beispiel 43 beinhaltet der Gegenstand der Beispiele 33-42, dass die Mittel zum Konfigurieren des Rückforderungsprozesses Folgendes umfassen: Mittel zum Auswählen basierend auf einer temporalen Markierung eines Satzes von Adressen, die sich auf den Stagingbereich beziehen, wobei der Satz von Adressen in der Zuordnungstabelle gespeichert ist; und Mittel zum Bearbeiten des Satzes von Adressen in dem Rückforderungsprozess.
  • In Beispiel 44 beinhaltet der Gegenstand des Beispiels 43, dass die temporale Markierung ein Zeitstempel ist, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden.
  • In Beispiel 45 beinhaltet der Gegenstand des Beispiels 44 den 2-Bit-Zeitstempel.
  • Beispiel 46 ist mindestens ein maschinenlesbares Medium, das Befehle zur Computerspeicherverwaltung aufweist, wobei die Befehle, wenn sie von einer Maschine ausgeführt werden, bewirken, dass die Maschine Operationen durchführt, die Folgendes umfassen: Erhalten einer Speicherzugriffsanfrage, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; Schreiben der Daten in einen Stagingbereich in einer Speichervorrichtung, wobei der Stagingbereich Daten temporär speichert, bevor sie dedupliziert werden; und Aktualisieren einer Zuordnungstabelle mit der Adresse, wobei die Zuordnungstabelle in der Speichervorrichtung gespeichert ist.
  • In Beispiel 47 beinhaltet der Gegenstand des Beispiels 46 das Überwachen des Stagingbereichs zum Bestimmen einer Nutzungsmenge; und das Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  • In Beispiel 48 beinhaltet der Gegenstand des Beispiels 47, dass das Konfigurieren des Rückforderungsprozesses das Konfigurieren eines Zeitraums zum Ausführen des Rückforderungsprozesses umfasst.
  • In Beispiel 49 beinhaltet der Gegenstand der Beispiele 47-48, dass der Rückforderungsprozess verwendet wird, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  • In Beispiel 50 beinhaltet der Gegenstand der Beispiele 47-49, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Deaktivieren des Rückforderungsprozesses, während die Nutzungsmenge unter dem ersten Schwellenwert liegt, umfasst.
  • In Beispiel 51 beinhaltet der Gegenstand des Beispiels 50 eine 50%-Nutzung des Stagingbereichs.
  • In Beispiel 52 beinhaltet der Gegenstand der Beispiele 47-51, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge über dem ersten Schwellenwert liegt, umfasst.
  • In Beispiel 53 beinhaltet der Gegenstand des Beispiels 52 eine 100%-Nutzung des Stagingbereichs.
  • In Beispiel 54 beinhaltet der Gegenstand der Beispiele 47-53, dass das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst, und wobei das maschinenlesbare Medium ferner das Deaktivieren weiterer Schreibvorgänge in den Stagingbereich, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst.
  • In Beispiel 55 beinhaltet der Gegenstand des Beispiels 54 das Aktivieren eines herkömmlichen Deduplizierungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  • In Beispiel 56 beinhaltet der Gegenstand der Beispiele 47-55, dass das Konfigurieren des Rückforderungsprozesses das Verwenden der Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses umfasst.
  • In Beispiel 57 beinhaltet der Gegenstand der Beispiele 47-56, dass das Konfigurieren des Rückforderungsprozesses Folgendes umfasst: Auswählen basierend auf einer temporalen Markierung eines Satzes von Adressen, die sich auf den Stagingbereich beziehen, wobei der Satz von Adressen in der Zuordnungstabelle gespeichert ist; und Bearbeiten des Satzes von Adressen in dem Rückforderungsprozess.
  • In Beispiel 58 beinhaltet der Gegenstand des Beispiels 57, dass die temporale Markierung ein Zeitstempel ist, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden.
  • In Beispiel 59 beinhaltet der Gegenstand des Beispiels 58 den 2-Bit-Zeitstempel.
  • Beispiel 60 ist mindestens ein maschinenlesbares Medium, das Befehle aufweist, welche, wenn sie von einer Verarbeitungsschaltungsanordnung ausgeführt werden, bewirken, dass die Verarbeitungsschaltungsanordnung Operationen zum Implementieren eines der Beispiele 1-59 durchführt.
  • Beispiel 61 ist eine Einrichtung, die Mittel zum Implementieren eines der Beispiele 1-59 umfasst.
  • Beispiel 62 ist ein System zum Implementieren eines der Beispiele 1-59.
  • Beispiel 63 ist ein Verfahren zum Implementieren eines der Beispiele 1-59.
  • Die vorherige ausführliche Beschreibung beinhaltet Bezugnahmen auf die beigefügten Zeichnungen, welche einen Teil der ausführlichen Beschreibung bilden. Die Zeichnungen zeigen veranschaulichend spezifische Ausführungsformen, die umgesetzt werden können. Diese Ausführungsformen werden hierin auch als „Beispiele“ bezeichnet. Solche Beispiele können Elemente zusätzlich zu den gezeigten oder beschriebenen beinhalten. Es werden jedoch auch Beispiele in Betracht gezogen, die die gezeigten oder beschriebenen Elemente beinhalten. Ferner werden auch Beispiele unter Verwendung einer beliebigen Kombination oder Umsetzung der gezeigten oder beschriebenen Elemente (oder eines oder mehrerer Aspekte davon) entweder bezüglich eines bestimmten Beispiels (oder eines oder mehrerer Aspekte davon) oder bezüglich anderer Beispiele (oder eines oder mehrerer Aspekte davon), die hierin gezeigt oder beschrieben sind, in Betracht gezogen.
  • Veröffentlichungen, Patente und Patentdokumente, die in diesem Dokument zitiert werden, sind hierin in ihrer Gesamtheit durch Bezugnahme aufgenommen, als wenn sie einzeln durch Bezugnahme aufgenommen wären. Im Falle von widersprüchlichen Verwendungen zwischen diesem Dokument und den derart durch Bezugnahme aufgenommenen Dokumenten ist die Verwendung in der bzw. den aufgenommenen Referenz bzw. Referenzen ergänzend zu jener von diesem Dokument; bei unüberwindbaren Widersprüchen hat die Verwendung in diesem Dokument Vorrang.
  • In diesem Dokument wird der Begriff „ein/eine“ verwendet, wie es in Patentdokumenten üblich ist, um eins oder mehr als eins einzuschließen, unabhängig von anderen Fällen oder Verwendungen von „mindestens ein/eine“ oder „ein/eine oder mehrere“. In diesem Dokument wird der Begriff „oder“ verwendet, um sich auf ein nicht ausschließliches Oder zu beziehen, derart, dass „A oder B“ sowohl „A, aber nicht B“, „B, aber nicht A“ und „A und B“ einschließt, sofern nicht anders angegeben. In den anliegenden Ansprüchen werden die Begriffe „beinhaltet/aufweist“ und „in denen“ als Äquivalente der entsprechenden Begriffe „umfassend/umfasst“ und „wobei“ verwendet. Auch werden in den folgenden Ansprüchen die Begriffe „beinhaltet/aufweist“ und „umfassend/umfasst“ offen verwendet, das heißt, ein System, eine Vorrichtung oder ein Prozess, der Elemente zusätzlich zu jenen enthält, die nach solch einem Begriff in einem Anspruch aufgelistet sind, werden noch als in den Schutzbereich dieses Anspruchs fallend angesehen. Außerdem werden in den folgenden Ansprüchen die Begriffe „erste(n)“, „zweite(n)“ und „dritte“ usw. nur als Bezeichnungen verwendet und sollen ihren Objekten keine numerische Reihenfolge aufzwingen.
  • Die vorstehende Beschreibung soll veranschaulichend sein, und nicht einschränkend. Zum Beispiel können die oben beschriebenen Beispiele (oder einer oder mehrere ihrer Aspekte) in Kombination mit anderen verwendet werden. Andere Ausführungsformen können verwendet werden, wie zum Beispiel von einem Durchschnittsfachmann nach Durchsicht der obigen Beschreibung. Die Zusammenfassung wird bereitgestellt, um es dem Leser zu gestatten, das Wesen der technischen Offenbarung zügig zu erfassen. Sie wird in dem Verständnis vorgelegt, dass sie nicht dazu verwendet werden wird, den Schutzumfang oder die Bedeutung der Ansprüche zu interpretieren oder einzuschränken. Auch können in der vorstehenden ausführlichen Beschreibung verschiedene Merkmale zusammengefasst sein, um die Offenbarung zu straffen. Die Ansprüche legen jedoch möglicherweise nicht alle Merkmale dar, die hierin offenbart sind, da die Ausführungsformen eine Untergruppe dieser Merkmale aufweisen können. Ferner können die Ausführungsformen weniger Merkmale als die in einem bestimmten Beispiel offenbarten beinhalten. Somit werden die folgenden Ansprüche hierbei in die ausführliche Beschreibung aufgenommen, wobei ein Anspruch für sich alleine als separate Ausführungsform steht. Der Schutzumfang der hier offenbarten Ausführungsformen ist unter Bezugnahme auf die beigefügten Ansprüche zusammen mit dem gesamten Schutzumfang von Äquivalenten, zu welchem diese Ansprüche berechtigt sind, zu bestimmen.

Claims (26)

  1. Beansprucht wird:
  2. System zur Computerspeicherverwaltung, wobei das System Folgendes aufweist: eine erste Speichervorrichtung, die eine Zuordnungstabelle aufweist; eine zweite Speichervorrichtung, die einen Stagingbereich aufweist; eine dritte Speichervorrichtung, die eine Deduplizierungsdatenregion aufweist; und eine Steuerung, die betrieben werden kann, um: eine Speicherzugriffsanfrage zu erhalten, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; die Daten in den Stagingbereich zu schreiben; und die Zuordnungstabelle mit der Adresse zu aktualisieren.
  3. System nach Anspruch 1, wobei die erste und zweite Speichervorrichtung in demselben Package integriert sind.
  4. System nach Anspruch 1, wobei die Steuerung: den Stagingbereich überwacht, um eine Nutzungsmenge zu bestimmen; und Speicherkapazität von duplizierten Daten basierend auf der Nutzungsmenge zurückfordert, wobei die Rückforderung konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in die Deduplizierungsdatenregion in der dritten Speichervorrichtung zu bewegen.
  5. System nach Anspruch 3, wobei zum Zurückfordern von Speicherkapazität die Steuerung: den Stagingbereich durchsucht, um duplizierte Daten zu kennzeichnen; eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse schreibt; die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, aktualisiert; und die duplizierten Daten aus dem Stagingbereich löscht.
  6. System nach Anspruch 3, wobei zum Überwachen des Stagingbereichs die Steuerung bestimmt, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, und wobei zum Zurückfordern von Speicherkapazität die Steuerung die Rückforderung deaktiviert, während die Nutzungsmenge unter dem ersten Schwellenwert liegt.
  7. System nach Anspruch 5, wobei der erste Schwellenwert eine 50%-Nutzung des Stagingbereichs ist.
  8. System nach Anspruch 3, wobei zum Überwachen des Stagingbereichs die Steuerung bestimmt, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, und wobei zum Zurückfordern von Speicherkapazität die Steuerung die Rückforderung aktiviert, während die Nutzungsmenge über dem ersten Schwellenwert liegt.
  9. System nach Anspruch 7, wobei der zweite Schwellenwert eine 100%-Nutzung des Stagingbereichs ist.
  10. System nach Anspruch 3, wobei zum Überwachen des Stagingbereichs die Steuerung bestimmt, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, und wobei zum Zurückfordern von Speicherkapazität die Steuerung die Rückforderung aktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, und wobei die Steuerung weitere Schreibvorgänge auf den Stagingbereich deaktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  11. System nach Anspruch 9, wobei die Steuerung einen herkömmlichen Deduplizierungsprozess aktiviert, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  12. System nach Anspruch 3, wobei zum Konfigurieren des Rückforderungsprozesses die Steuerung die Nutzungsmenge in einer kontinuierlichen Funktion zum Konfigurieren eines Verhaltens des Rückforderungsprozesses verwendet.
  13. System nach Anspruch 3, wobei zum Zurückfordern von Speicherkapazität die Steuerung: basierend auf einer temporalen Markierung Adressen auswählt, die sich auf den Stagingbereich beziehen, wobei die Adressen in der Zuordnungstabelle gespeichert sind; und die Adressen in der Rückforderung bearbeitet.
  14. System nach Anspruch 12, wobei die temporale Markierung ein Zeitstempel ist, der gespeichert wurde, als die entsprechenden Daten in den Stagingbereich geschrieben wurden.
  15. System nach Anspruch 13, wobei der Zeitstempel ein 2-Bit-Zeitstempel ist.
  16. Verfahren zur Computerspeicherverwaltung, wobei das Verfahren Folgendes umfasst: Erhalten einer Speicherzugriffsanfrage, wobei die Speicherzugriffsanfrage eine Adresse und Daten beinhaltet; Schreiben der Daten in einen Stagingbereich in einer Speichervorrichtung, wobei der Stagingbereich Daten temporär speichert, bevor sie dedupliziert werden; und Aktualisieren einer Zuordnungstabelle mit der Adresse, wobei die Zuordnungstabelle in der Speichervorrichtung gespeichert ist.
  17. Verfahren nach Anspruch 15, das ferner Folgendes umfasst: Überwachen des Stagingbereichs, um eine Nutzungsmenge zu bestimmen; und Konfigurieren eines Rückforderungsprozesses basierend auf der Nutzungsmenge, wobei der Rückforderungsprozess konfiguriert ist, um Daten in dem Stagingbereich zu deduplizieren und duplizierte Daten in eine Deduplizierungsdatenregion in der Speichervorrichtung zu bewegen.
  18. Verfahren nach Anspruch 16, wobei der Rückforderungsprozess verwendet wird, um den Stagingbereich zu durchsuchen, um duplizierte Daten zu kennzeichnen, eine Kopie der duplizierten Daten in die Deduplizierungsdatenregion bei einer Zieladresse zu schreiben, die Zuordnungstabelle mit der Zieladresse für Einträge, die auf die duplizierten Daten hindeuteten, zu aktualisieren und die duplizierten Daten aus dem Stagingbereich zu löschen.
  19. Verfahren nach Anspruch 16, wobei das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge unter einem ersten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Deaktivieren des Rückforderungsprozesses, während die Nutzungsmenge unter dem ersten Schwellenwert liegt, umfasst.
  20. Verfahren nach Anspruch 18, wobei der erste Schwellenwert eine 50%-Nutzung des Stagingbereichs ist.
  21. Verfahren nach Anspruch 16, wobei das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge über einem ersten Schwellenwert und unter einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge über dem ersten Schwellenwert liegt, umfasst.
  22. Verfahren nach Anspruch 20, wobei der zweite Schwellenwert eine 100%-Nutzung des Stagingbereichs ist.
  23. Verfahren nach Anspruch 16, wobei das Überwachen des Stagingbereichs das Bestimmen, dass die Nutzungsmenge auf oder über einem zweiten Schwellenwert liegt, umfasst, und wobei das Konfigurieren des Rückforderungsprozesses das Aktivieren des Rückforderungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst, und wobei das Verfahren ferner das Deaktivieren weiterer Schreibvorgänge auf den Stagingbereich, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt, umfasst.
  24. Verfahren nach Anspruch 22, ferner umfassend das Aktivieren eines herkömmlichen Deduplizierungsprozesses, während die Nutzungsmenge auf oder über dem zweiten Schwellenwert liegt.
  25. Maschinenlesbares Medium bzw. maschinenlesbare Medien, die Befehle aufweisen, welche, wenn sie von einer Maschine ausgeführt werden, bewirken, dass die Maschine Operationen beliebiger der Verfahren der Ansprüche 16-23 durchführt.
  26. Einrichtung, die Mittel zum Durchführen beliebiger der Verfahren der Ansprüche 16-23 aufweist.
DE102018131816.2A 2018-01-11 2018-12-11 Bedarfsgesteuerte speicherdeduplizierung Withdrawn DE102018131816A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/868,787 US10732880B2 (en) 2018-01-11 2018-01-11 Lazy memory deduplication
US15/868,787 2018-01-11

Publications (1)

Publication Number Publication Date
DE102018131816A1 true DE102018131816A1 (de) 2019-07-11

Family

ID=66995382

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018131816.2A Withdrawn DE102018131816A1 (de) 2018-01-11 2018-12-11 Bedarfsgesteuerte speicherdeduplizierung

Country Status (2)

Country Link
US (1) US10732880B2 (de)
DE (1) DE102018131816A1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10942650B1 (en) * 2018-03-05 2021-03-09 Pure Storage, Inc. Reporting capacity utilization in a storage system
US11320987B2 (en) * 2019-08-29 2022-05-03 Micron Technology, Inc. Scanning techniques for a media-management operation of a memory sub-system
US11442911B2 (en) * 2020-08-31 2022-09-13 Google Llc Moving window data deduplication in distributed storage
US11593028B2 (en) * 2021-03-11 2023-02-28 EMC IP Holding Company LLC Adaptive turbo toggling
US20230244606A1 (en) * 2022-02-03 2023-08-03 Arm Limited Circuitry and method
US12067246B2 (en) * 2022-10-17 2024-08-20 Dell Products L.P. Data storage system with dynamic workload adjustment based on headroom estimation

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9081683B2 (en) * 2013-02-08 2015-07-14 Nexenta Systems, Inc. Elastic I/O processing workflows in heterogeneous volumes
US9710165B1 (en) * 2015-02-18 2017-07-18 Pure Storage, Inc. Identifying volume candidates for space reclamation
US9678683B1 (en) * 2016-11-01 2017-06-13 Red Hat, Inc. Lazy persistent storage volume provisioning
US11144227B2 (en) * 2017-09-07 2021-10-12 Vmware, Inc. Content-based post-process data deduplication

Also Published As

Publication number Publication date
US20190212935A1 (en) 2019-07-11
US10732880B2 (en) 2020-08-04

Similar Documents

Publication Publication Date Title
DE102018131816A1 (de) Bedarfsgesteuerte speicherdeduplizierung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE202019005682U1 (de) Hardwaregestützte Paging-Mechanismen
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102015007571A1 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren. -verfahren, -systeme und -befehle
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112013005418T5 (de) Vorrichtung und Verfahren zur schnellen Befehlsfehlerbehandlung
DE112019002389T5 (de) Architektur zur dynamischen umwandlung einer speicherkonfiguration
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102018006798A1 (de) Einrichtung und Verfahren zum Multiplizieren, Addieren/Subtrahieren und Akkumulieren von gepackten Datenelementen
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102018125971A1 (de) Systeme und verfahren zum berechnen von skalaprodukten von halbbytes in operanden aus zwei kacheln
DE102018129273A1 (de) Einrichtung und verfahren zum vektor-multiplizieren; und -akkumulieren von unsignierten doppelwörtern
DE102018005976A1 (de) Systeme, vorrichtungen und verfahren zur multiplikation und akkumulation von vektorgepackten vorzeichenbehafteten werten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee