DE202019005682U1 - Hardwaregestützte Paging-Mechanismen - Google Patents

Hardwaregestützte Paging-Mechanismen Download PDF

Info

Publication number
DE202019005682U1
DE202019005682U1 DE202019005682.3U DE202019005682U DE202019005682U1 DE 202019005682 U1 DE202019005682 U1 DE 202019005682U1 DE 202019005682 U DE202019005682 U DE 202019005682U DE 202019005682 U1 DE202019005682 U1 DE 202019005682U1
Authority
DE
Germany
Prior art keywords
memory
cache lines
field
reference count
indication
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.)
Active
Application number
DE202019005682.3U
Other languages
English (en)
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 DE202019005682U1 publication Critical patent/DE202019005682U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/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
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • 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
    • 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/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/0871Allocation or management of cache space
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • 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/7201Logical to physical mapping or translation of blocks or pages
    • 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

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

Vorrichtung, die Mittel zum Durchführen folgender Schritte umfasst:
Zugreifen, von einer Verarbeitungsschaltungsanordnung in einem Speichergebiet, auf das Speichergebiet, das einer Speicherreduzierungstechnik unterzogen wird;
Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets;
Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und
Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.

Description

  • TECHNISCHES GEBIET
  • Hier beschriebene Ausführungsformen betreffen allgemein eine Computerspeicherverwaltung und insbesondere Systeme für hardwaregestützte Paging-Mechanismen.
  • HINTERGRUND
  • Moderne Rechensysteme verwenden eine immer weiter zunehmende Menge an Speicher für Betriebssysteme, Anwendungen und Daten. Für eine effiziente Verwendung von Speicher wurden verschiedene Speicherreduktionstechniken entwickelt. Manche Speicherreduktionstechniken zielen auf das Reduzieren der verwendeten Menge an Speicher durch Datenkompressionstechniken an den Speicherinhalten ab. Andere Speicherreduktionstechniken beseitigen duplizierte Kopien von Daten im Speicher und Verwenden Referenzen, um auf eine einzige Kopie der Daten zu zeigen, wie etwa mit Speicherdeduplizierungstechniken. In beiden Fällen wird mehr adressierbarer Speicherplatz angegeben als der tatsächlich verfügbare physische Speicher.
  • Figurenliste
  • In den Zeichnungen, die nicht notwendigerweise maßstabsgetreu gezeichnet sind, können gleiche Ziffern ähnliche Komponenten in verschiedenen Ansichten beschreiben. Gleiche Ziffern mit verschiedenen angehängten Buchstaben können verschiedene Instanzen ähnlicher Komponenten repräsentieren. Manche Ausführungsformen sind beispielhaft und nicht beschränkend in den Figuren der beigefügten Zeichnungen veranschaulicht, in denen gilt:
    • 1 ist ein Diagramm, das eine Hardware- und Softwarearchitektur 100 eines Rechensystems, in dem verschiedene Schnittstellen zwischen Hardwarekomponenten und Softwarekomponenten gezeigt sind, gemäß einer Ausführungsform veranschaulicht;
    • 2 ist ein Blockdiagramm, das ein System gemäß einer Ausführungsform veranschaulicht;
    • 3 ist ein Diagramm, das eine Zuordnung zwischen einem Systemadressenraum und einem Systemdatenraum gemäß einer Ausführungsform veranschaulicht;
    • 4 ist eine Pseudocodeauflistung, die einen Prozess zum Sammeln von Referenzzählungsinformationen gemäß einer Ausführungsform veranschaulicht;
    • 5 ist ein Blockdiagramm, das eine Architektur gemäß einer Ausführungsform veranschaulicht;
    • 6 ist ein Blockdiagramm, das eine Zuordnungstabelle und eine Datengebietsverwendung gemäß einer Ausführungsform veranschaulicht;
    • 7 ist ein Blockdiagramm, das eine Zuordnungstabelle und eine Datengebietsverwendung gemäß einer Ausführungsform veranschaulicht;
    • 8 ist ein Blockdiagramm, das einen Prozess zum Erhalten von Referenzzählungsinformationen von Hardware gemäß einer Ausführungsform veranschaulicht;
    • 9 ist ein Blockdiagramm, das einen Prozess zum Anfordern und Verwenden von Referenzzählungsinformationen von Hardware gemäß einer Ausführungsform veranschaulicht;
    • 10 ist ein Flussdiagramm, das ein Verfahren zur Computerspeicherverwaltung veranschaulicht;
    • 11 ist ein Blockdiagramm, das eine beispielhafte Maschine, mit der eine oder mehrere der hier besprochenen Techniken (z. B. Methodologien) durchgeführt werden können, gemäß einer Ausführungsform veranschaulicht;
    • 12A-12B sind Blockdiagramme, die ein allgemeines vektorfreundliches Befehlsformat und Befehls-Templates davon gemäß einer Ausführungsform veranschaulichen;
    • 13A-13D sind Blockdiagramme, die ein spezielles vektorfreundliches Befehlsformat gemäß einer Ausführungsform veranschaulichen;
    • 14 ist ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform;
    • 15A ist ein Blockdiagramm, das sowohl eine In-Order-Pipeline als auch eine Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführung-Pipeline gemäß einer Ausführungsform veranschaulicht;
    • 15B ist ein Blockdiagramm, das sowohl einen In-Order-Architekturkern als auch einen Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführung-Architekturkern, der in einem Prozessor aufzunehmen ist, gemäß einer Ausführungsform veranschaulicht;
    • 16A-16B veranschaulichen Blockdiagramme einer spezielleren In-Order-Kernarchitektur, wobei der Kern einer von einigen Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip wäre, gemäß einer Ausführungsform;
    • 17 ist ein Blockdiagramm eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafiken aufweisen kann, gemäß einer Ausführungsform;
    • 18-21 sind Blockdiagramme von Computerarchitekturen gemäß einer Ausführungsform; und
    • 22 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zum Konvertieren binärer Befehle in einem Quellenbefehlssatz 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 spezielle Einzelheiten dargelegt, um ein umfassendes Verständnis mancher Ausführungsbeispiele bereitzustellen. Es ist für einen Fachmann jedoch offensichtlich, dass die vorliegende Offenbarung ohne diese speziellen Einzelheiten umgesetzt werden kann.
  • Die Verwendung von Speicherreduzierungstechniken ermöglicht einem Speicherverbraucher (z. B. einer Anwendung, einem Betriebssystem, einem Prozess usw.), mehr Speicher zu adressieren als auf der physischen Ebene tatsächlich verfügbar ist. Mit anderen Worten wird ein Speicheradressenraum von einem Speicherdatenraum entkoppelt. Beispielsweise kann eine 8-Gigabyte(GB)-Speichervorrichtung als 12 GB verfügbaren Speicherungsplatz angegeben werden. Wenn Anwendungen Speicher in der Speichervorrichtung zuweisen, werden manche der Daten der Anwendung komprimiert oder neuzugeordnet, so dass es von dem Sichtpunkt der Anwendung aus 12 GB an adressierbarem Raum (z. B. Adressenraum) gibt, der indirekt zu 8 GB eines physischen Speicherraums (z. B. Datenraums) zeigt.
  • Bei einem Beispiel kann ein System eine Speicherreduzierungstechnik verwenden, die als Deduplizierung bezeichnet wird. Eine Speicherdeduplizierung ist ein Prozess für eine effiziente Speichernutzung. Anstelle des Speicherns mehrerer Kopien derselben Daten wird eine deduplizierte Kopie gespeichert und werden zusätzliche Datenstrukturen verwendet, um zu verfolgen, welche anderen Adressen dieselben „deduplizierten“ Daten möglicherweise verwenden. Die Speicherdeduplizierung wird in Hardware durchgeführt und kann durch die Speichersteuerung bereitgestellt werden. Durch das Deduplizieren von Daten kann eine Speichersteuerung einen größeren Adressenraum angeben als es einen Datenraum gibt.
  • Ein anderes Beispiel für eine Speicherreduzierung ist ein System, das eine Kompressionstechnologie verwendet, die Inhalte des physischen Speichers komprimiert und daher einen Speicher effizienter verwendet. Bei einem solchen System kann, wenn die Zentralverarbeitungseinheit (CPU) einen Block eines Speichers, zum Beispiel eine 4-Kilobyte(kB)-Seite, schreibt, ein tatsächlicher physischer Speicherverbrauch viel geringer als 4 kB sein, falls die Inhalte der Seite komprimiert sind, was daher ermöglicht, dass der physische Speicher mehr Inhalte aufnimmt als die ursprüngliche Größe des Blocks, der geschrieben wurde.
  • Der Unterschied zwischen dem Adressenraum (z. B. adressierbarem Raum) und dem Datenraum wird durch die Kompressionsmenge (z. B. das Kompressionsverhältnis) bestimmt, die die Daten durchlaufen. Basierend auf verschiedenen Implementierungen kann das Kompressionsverhältnis so hoch wie 2:1, 2,5:1 oder sogar höher in Bezug auf Adressenraum zu Datenraum sein.
  • Bei solchen Systemen kann der tatsächliche physische Speicherverbrauch mit der Zeit variieren, da Dateninhalte verschiedene Kompressionsverhältnisse im Verlauf einer Programmausführung haben können. Eine Entkopplung des Adressenraums von dem Datenraum verhindert, dass sich eine Systemsoftware darüber bewusst ist, wie viel physischer Speicher tatsächlich in dem System verbraucht wird. Infolgedessen verhindert diese Indirektion, dass eine Systemsoftware erforderliche Handlungen in Fällen vornimmt, in denen ein physischer Speicher sich seiner Grenze annähert. Wenn die Systemsoftware den gesamten physischen Speicher verwaltet, kennt sie üblicherweise den Speicherverbrauch und kann mit dem Freimachen von Platz durch Auslagern zu anderen Speicherungsformen beginnen.
  • „Speicherdruck“ oder „Speicherüberbelegung“ ist ein Zustand, in dem ein Verbrauch physischen Speichers des Datenraums sich seinen Grenzen annähert (z. B. voll wird), während der angegebene Speicherraum immer noch nichtverwendete Gebiete aufweist. In einer solchen Situation kann die Systemsoftware weiterhin versuchen, verfügbaren Adressenraum zuzuweisen, wobei ihre Metriken fälschlicherweise angeben, dass es einen verfügbaren zugrundeliegenden Speicher gibt, während der Datenraum in der Realität seine Kapazität erreicht hat oder nahe dieser ist. Versuche, in einem vollständig vollen Datenraum zu schreiben, können zu Datenverlust, Speicherfehlern, Abstürzen oder anderen Fehlerzuständen führen.
  • In einem überbelegten Speichersystem (z. B. einem Speichersystem, das Kompression oder Deduplizierung mit einer hohen Speichernutzung verwendet) variiert die Menge an Speicher, der zur Verwendung durch Software verfügbar ist, mit dem Inhalt, der in den Speicher geschrieben wird. In einem solchen System kann Software bewirken, dass dem System verfügbarer Speicher ausgeht, indem die Inhalte von bereits zugewiesenen Speicherseiten mit weniger komprimierbaren Inhalt überschrieben werden. Es wird erwartet, dass das Betriebssystem (OS) diesen Speicherdruck bewältigt, indem es Speicher zu einer Platte auslagert, wenn die Speicherdruckbedingungen ansteigen.
  • In einem Speicherkompressionsschema werden die in dem Speicher gespeicherten Daten zuerst unter Verwendung irgendeines Kompressionsalgorithmus komprimiert und dann On-The-Fly dekomprimiert, wenn später auf den Speicherort zugegriffen wird. Durch Speichern der Daten in einer komprimierten Form wird die Menge an verwendbarem Speicher erhöht. Deduplizierung verwendet im Vergleich dazu ein Schema, bei dem identische Datenstücke zu weniger Stücken reduziert, oder dedupliziert, werden, so dass weniger Kopien der identischen Stücke gespeichert werden. Zeiger und andere Mechanismen werden verwendet, um das Deduplizierungsschema vor dem Eigentümerprozess oder - Thread zu maskieren.
  • Wenn eine vollständige komprimierte oder deduplizierte Seite ausgelagert wird, wird aufgrund der Varianz der Kompression von Seite zu Seite eine gewisse Menge des physischen Speichers an das System zurückgegeben. Wenn jedoch eine vollständig deduplizierte Seite ausgelagert wird, die ihre gesamten Inhalte mit anderen Seiten teilt, gibt es keinen physischen Speicher, der an das System zurückgegeben wird.
  • Üblicherweise sortieren und organisieren Betriebssysteme Kandidatenseiten zum Auslagern basierend ihrer Zugriffsgeschichte. Typischerweise werden die Seiten mit den geringsten Zugriffen in letzter Zeit oben in dieser Liste platziert, da mit geringerer Wahrscheinlichkeit wieder auf sie zugegriffen wird. Jedoch wird in einem deduplizierten Speichersystem in Abhängigkeit davon, wie viele Cache-Zeilen in diesen Seiten mit anderen Seiten in dem System geteilt werden, das Auslagern dieser Seiten möglicherweise nicht genügend Speicher freimachen. Was benötigt wird, ist ein Mechanismus, zum besseren Verwalten eines Pagings in einem deduplizierten oder komprimierten Speichersystem. Eine Implementierung eines solchen Mechanismus erhöht die Betriebseffizienz und Fähigkeit des Rechensystems durch eine bessre Speicherverwaltung. Die hier besprochenen Implementierungen verbessern den Betrieb einer Rechenvorrichtung auf einer fundamentalen Ebene der Speicherverwaltung.
  • Diese Offenbarung beschreibt einen innovativen Ansatz zum Verbessern der Effizienz des Paging-Mechanismus eines Rechensystems, das Speicherdeduplizierung verwendet, durch Verwenden eines seitenbasierten Referenzzählungsverfolgungsschemas. Das seitenbasierte Referenzzählungsverfolgungsschema kann in Hardware implementiert werden und von seinem Softwarestapel, wie etwa durch Treiber, OS-Bibliotheken oder dergleichen, zugänglich sein. Das hier beschriebene seitenbasierte Referenzzählungsverfolgungsschema stellt einen Weg für einen Betriebssystemprozess zum Sammeln von Referenzzählungsinformationen einer gegebenen Seite von Hardware bereit. Die Seitenreferenzzählungsinformationen beschreiben den Grad des Teilens für jede Kandidatenseite in einem deduplizierten Speichersystem. Diese Informationen können Systemsoftware beim Auswählen der Seiten zum Auslagern unterstützen, um den freigegebenen Speicher zu maximieren.
  • 1 ist ein Diagramm, das eine Hardware- und Softwarearchitektur 100 eines Rechensystems, in dem verschiedene Schnittstellen zwischen Hardwarekomponenten und Softwarekomponenten gezeigt sind, gemäß einer Ausführungsform veranschaulicht. Wie durch HW angegeben, sind Hardwarekomponenten unterhalb der Trennlinie repräsentiert, während sich Softwarekomponenten (durch SW gekennzeichnet) oberhalb der Trennlinie befinden. Auf der Hardwareseite sind Verarbeitungsvorrichtungen 102 (die einen oder mehrere Mikroprozessoren, Digitalsignalprozessoren usw. beinhalten können, die jeweils einen oder mehrere Prozessorkerne aufweisen) an die Speicherverwaltungsvorrichtung 104 und die Systemzwischenverbindung 106 angekoppelt. Die Speicherverwaltungsvorrichtung 104 stellt Zuordnungen zwischen virtuellem Speicher, der durch Prozesse verwendet wird, die ausgeführt werden, und physikalischen Speicher bereit. Die Speicherverwaltungsvorrichtung 104 kann ein integraler Bestandteil einer zentralen Verarbeitungseinheit sein, die auch die Verarbeitungsvorrichtungen 102 beinhaltet.
  • Die Zwischenverbindung 106 beinhaltet eine Backplane, wie etwa Speicher-, Daten- und Steuerleitungen, sowie die Schnittstelle zu Eingabe-/Ausgabevorrichtungen, z. B. PCI, USB usw. Ein Speicher 108 (z. B. dynamischer Direktzugriffsspeicher - DRAM) und ein nichtflüchtiger Speicher 110, wie etwa Flash-Speicher (z. B. elektrisch löschbarer Nur-Lese-Speicher - EEPROM, NAND-Flash, NOR-Flash usw.), sind über die Speichersteuerung 112 an die Speicherverwaltungsvorrichtung 104 und die Zwischenverbindung 106 angekoppelt. Diese Architekturmikroarchitektur 100 kann bei manchen Ausführungsformen Direktspeicherzugriff (DMA: Direct Memory Access) durch Peripherievorrichtungen unterstützen. E/A-Vorrichtungen, einschließlich Video- und Audio-Adaptern, nichtflüchtiger Speicherung, externen Peripherieverknüpfungen, wie etwa USB, Bluetooth usw., sowie Netzwerkschnittstellenvorrichtungen, wie etwa jene, die über Wi-Fi- oder LTE-Familie-Schnittstellen kommunizieren, sind gemeinsam als E/A-Vorrichtungen und Vernetzung 114 repräsentiert, die über entsprechende E/A-Steuerungen 116 an die Zwischenverbindung 106 angekoppelt sind.
  • Bei 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 Vermitteln eines Zugriffs auf den Speicher 108 von einer E/A-Vorrichtung 114 bereitstellen. Die IOMMU 118 kann auch einen DMA-Speicherschutz in virtualisierten Umgebungen bereitstellen, wobei sie ermöglicht, dass gewisse Hardwareressourcen gewissen Gast-VMs zugewiesen werden, die auf dem System laufen, und erzwingt eine Isolierung zwischen anderen VMs und Peripherievorrichtungen, die ihnen 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 Initiieren des Hochfahrens des Betriebssystems zuständig. Ein herkömmliches Beispiel für eine Pre-OS-Umgebung 120 ist ein Basis-Input/Output-System (BIOS). 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 Initiieren des Startens des Betriebssystems zuständig, stellt jedoch auch eine Ausführungsumgebung für eingebettete Anwendungen bereit.
  • Das Betriebssystem (OS) 122 stellt einen oder mehrere Kernel bereit, die die Hardwarevorrichtungen steuern, verwaltet einen 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, initiiert die Ausführung des Anwendungsprogramms, das dann mit dem Benutzer und mit Hardwarevorrichtungen interagiert, und detektiert und reagiert auf verschiedene definierte Unterbrechungen. Außerdem stellt das Betriebssystem 122 Vorrichtungstreiber und eine Vielfalt an üblichen Diensten, wie etwa jene, die eine Ankopplung an Peripherievorrichtungen und eine Vernetzung ermöglichen, die eine Abstraktion für Anwendungsprogramme bereitstellen, so dass die Anwendungen nicht für das Behandeln der Einzelheiten solcher üblicher Operationen zuständig sein müssen, bereit. Das Betriebssystem 122 stellt zusätzlich eine grafische Benutzeroberfläche (GUI: Graphical User Interface) bereit, die eine Interaktion mit dem Benutzer über Peripherievorrichtungen, wie etwa einen Monitor, eine Tastatur, eine Maus, ein Mikrofon, eine Videokamera, einen Berührungsbildschirm und dergleichen, ermöglicht.
  • Das Laufzeitsystem 124 implementiert Teile eines Ausführungsmodells einschließlich solcher Operationen wie Setzen von Parametern auf den Stapel vor einem Funktionsaufruf, des Verhaltens von Platten-Eingabe/Ausgabe (E/A) und parallelausführungsbezogener Verhalten. Das Laufzeitsystem 124 kann auch Hilfsdienste, wie etwa Typenüberprüfung, Debugging oder Codeerzeugung und -optimierung, durchführen.
  • Bibliotheken 126 beinhalten Sammlungen von Programmfunktionen, die eine weitere Abstraktion für Anwendungsprogramme bereitstellen. Diese schließen zum Beispiel gemeinsam genutzte Bibliotheken, dynamische verknüpfte Bibliotheken (DLLs: Dynamic Linked Libraries) ein. Die Bibliotheken 126 können integral in dem Betriebssystem 122, dem Laufzeitsystem 124 sein oder können hinzugefügte Merkmale oder sogar remote gehostet sein. Die Bibliotheken 126 definieren eine Anwendungsprogrammschnittstelle (API: Application Program Interface), durch die eine Vielzahl an Funktionsaufrufen durch Anwendungsprogramme 128 vorgenommen werden können, um die durch das Betriebssystem 122 bereitgestellten Dienste aufzurufen. 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 ein System 200 gemäß einer Ausführungsform veranschaulicht. Das System 200 beinhaltet einen Prozessor 202 und eine Speichervorrichtung 204. Obwohl in 2 nur ein Prozessor 202 veranschaulicht ist, versteht es sich, dass ein oder mehrere Prozessoren 202 in dem System 200 enthalten sein können.
  • Der Prozessor 202 kann zum Beispiel eine Instanz der Verarbeitungsvorrichtungen 102 aus 1, des Prozessors 1102 aus 11 oder des Prozessors 1810 aus 18 sein. Die Speichervorrichtung 204 ist direkt mit dem Prozessor 202 gekoppelt. Die Speichervorrichtung 204 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM: Dynamic Random Access Memory), Phasenwechselspeicher (PCM: Phase Change Memory) oder eine Kombination aus den beiden sein. Die Speichervorrichtung 204 kann zum Beispiel eine Instanz eines Hauptspeichers 1104 aus 11 oder eines Speichers 1840 aus 18 sein.
  • Eine Speicherreduzierungsschaltungsanordnung 206 wird verwendet, um Daten in der Speichervorrichtung 204 zu komprimieren oder zu deduplizieren. Die Speicherreduzierungsschaltungsanordnung 206 kann in den Prozessor 202 eingebunden sein oder kann eine separate Spezialspaltungsanordnung für Speicherreduzierungstechniken sein. Die Speicherreduzierungsschaltungsanordnung 206 kann zum Beispiel eine Instanz der Speicherverwaltungsvorrichtung 104 aus 1 sein.
  • Das System 200 beinhaltet auch eine Speicherseitensteuerschaltungsanordnung 210, die in eine Speichersteuerung in dem Prozessor 202 integriert sein kann oder eine separate Einheit sein kann. Beispielsweise kann die Speicherseitensteuerschaltungsanordnung 210 ein Coprozessor oder ein anderer Spezialprozessor (z. B. die Speicherverwaltungsvorrichtung 104 aus 1, ein Grafikspeichersteuer-Hub 1890 aus 18 oder eine integrierte Speichersteuerung 1972 aus 19) sein.
  • Die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 wird zum Überwachen von Seiten in der Speichervorrichtung 204 verwendet. Das Betriebssystem (OS) kann mit der Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 kommunizieren, um eine Unterstützung beim Bestimmen zu erhalten, welche Seite abgegeben wird, um einen Speicherdruck abzuschwächen. Die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 kann in die Speicherreduzierungsschaltungsanordnung 206 integriert sein. Wenn Daten in die Speichervorrichtung 204 geschrieben werden, können die Daten durch die Speicherreduzierungsschaltungsanordnung 206 analysiert werden, um zu bestimmen, ob die Daten doppelt in Bezug auf jene bereits in der Speichervorrichtung 204 gespeicherten sind. Falls dies der Fall ist, dann kann die Speicherreduzierungsschaltungsanordnung 206 einen Eintrag in einer Tabelle erstellen, so dass die Adresse der neu geschriebenen Daten indirekt zu der existierenden Datenadresse zeigt. Die Speicherreduzierungsschaltungsanordnung 206 kann dann die Referenzzählung für die Cache-Zeile aktualisieren, die die Daten hält, um anzugeben, dass mehr als eine Adresse eine Referenz zu den Daten hält.
  • Im Vergleich zu herkömmlichen Systemen, bei denen eine Systemsoftware zum Verwalten des physischen Speichers verwendet wird, ist in einem deduplizierten Speichersystem oder einem System, das Speicherkompression verwendet, der tatsächliche Verbrauch physischen Speichers nur der Hardware bekannt. Die hier beschriebene Architektur implementiert einen verbesserten Seitenauslagerungsmechanismus durch Verfolgen davon, wenn Cache-Zeilen in Speicherseiten außerhalb der Grenze der Seite (z. B. mit einer anderen Speicherseite) geteilt werden. Dieses Teilen verhindert, dass die Hardware jene Zeilen freigibt, wenn die Seiten ausgelagert werden, und infolgedessen kann die Menge an Speicher, der durch Auslagern einer Seite freigegeben wird, geringer als die Seitengröße sein.
  • Die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 wird verwendet, um dem OS eine Indikation bereitzustellen, wie viele einzigartige Cache-Zeilen innerhalb einer gegebenen Seite existieren. Dies erlaubt dem OS zu wissen, wie viel Speicher freigemacht werden wird, falls die Seite ausgelagert würde.
  • In einem deduplizierten Speichersystem werden Cache-Zeilen, die die gleichen Daten enthalten, entfernt, wenn nur eine einzige Kopie der Cache-Zeile mit gegebenen Daten in dem Speicher existiert. Um zu verfolgen, wie viele Systemadressen gegebene Daten zu einem beliebigen Zeitpunkt in dem System aufweisen, ist die die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 dazu in der Lage, eine mit jeder Cache-Zeile assoziierte Referenzzählung zu erhalten. Durch das Berücksichtigen von Duplikaten ist das OS dazu in der Lage, den verfügbaren Speicherraum effizienter zu nutzen, was zu Kosteneinsparungen oder erhöhter Leistungsfähigkeit führt.
  • 3 ist ein Diagramm, das eine Zuordnung zwischen einem Systemadressenraum 300 und einem Systemdatenraum 302 gemäß einer Ausführungsform veranschaulicht. In einem deduplizierten Speichersystem ist der Adressenraum 300 von dem Datenraum 302 entkoppelt. Zwei distinkte Adressen in dem Adressenraum 300 können auf die gleichen Daten in dem Datenraum 302 verweisen (oder indirekt zeigen). Diese Anordnung stellt eine effektive Zunahme der Menge an Daten, die in einer Speichervorrichtung gespeichert werden können, in Abhängigkeit davon bereit, wie viele doppelte Daten in einem System existieren.
  • Eine Seite beinhaltet Cache-Zeilen, die die Granularität der Deduplizierung in dieser Ausführungsform sind. Bei manchen herkömmlichen Systemen ist eine Seitengröße 4 kB (Kilobyte) und ist eine Cache-Zeilengröße 64 Byte. Dies führt dazu, dass eine Seite 64 Cache-Zeilen speichern kann. Wenn der Adressenraum der Seite von seinem Datenraum entkoppelt ist, weist eine 4-kB-Seite 64 adressierbare Cache-Zeilen in dem Adressenraum auf, aber die Cache-Zeilen, die tatsächliche Daten in dem Datenraum speichern, können über einige Adressen hinweg über einige verschiedene Seiten verwendet werden.
  • Das Teilen von Cache-Zeilen über verschiedene Speicheradressen hinweg führt Herausforderungen für den Paging-Mechanismus der Systemsoftware ein. Wenn die Systemsoftware entscheidet, Seiten in eine Sekundärspeicherung auszulagern, um Speicher freizumachen, kann sie aufgrund der Tatsache, dass Cache-Zeilen in einer gegebenen Seite möglicherweise mit anderen Seiten in dem System geteilt werden, nicht wissen, wie viel Speicher freigegeben wird. Im schlechtesten Fall wird, falls sämtliche Cache-Zeilen in der Seite, die die Systemsoftware auszulagern versucht, mit anderen Seiten geteilt wird, das Auslagern überhaupt keinen Speicher freigeben. Dies liegt darin begründet, dass das deduplizierte Speichersystem eine gegebene Cache-Zeile in dem Datenraum nicht freigeben wird, bis seine Referenzzählung null erreicht (was angibt, dass keine Adressen in dem Systemadressenraum diese speziellen Daten verwenden) . Falls es mehr Adressen in dem System gibt, die die spezielle Datenzeile in dem Datenraum immer noch verwenden, wird die Hardware sie aktiv halten und nicht versuchen, sie freizugeben.
  • In 3 beinhaltet der Adressenraum 300 drei Seiten: Seite A 304A, Seite B 304B und Seite C 304C. Der Einfachheit halber sind nur drei Seiten veranschaulicht und jede Seite beinhaltet nur Adressen von vier Cache-Zeilen. Es versteht sich, dass der Adressenraum 300 viele weitere Seiten beinhalten kann und jede Seite viele Cache-Zeile-Adressen speichern kann. Der Datenraum 302 beinhaltet acht Cache-Zeilen 306A-H.
  • Falls die Systemsoftware versucht, die Seite A 304A auszulagern, wird dies nur zum Freimachen einer Cache-Zeile (Zeile 306D) führen, weil der Rest der Cache-Zeilen, die durch die Seite A 304A verwendet werden, auch durch andere Seiten in dem Adressenraum 300 (z. B. Seite B 306A und Seite C 306C) verwendet wird. Basierend auf der Anordnung der Speicheradresse und des Datenraums, die in 3 veranschaulicht ist, wäre die beste freizugebende Seite die Seite C 304C, was drei Cache-Zeilen des Datenraums 302 freimachen würde.
  • Um bei dieser Art von Bestimmung zu helfen, ist die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 zum Zugreifen auf den Speicher und Lesen der Referenzzählungsinformationen sämtlicher Zeilen innerhalb der Seite konfiguriert. Auf die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 kann von der Systemsoftware durch die Verwendung einer Anwendungsprogrammschnittstelle (API) zugegriffen werden. Die API kann eine Funktionalität der Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 mit einem parametrisierten Funktionsaufruf freilegen. Ein beispielhafter Funktionsaufruf ist: Request_RC_Info(). Diese Funktion kann für Vorrichtungstreibersoftware, Bibliotheken oder andere Systemsoftware niedriger Ebene verfügbar sein, um auf Speicherstatistiken während Seitenoperationen zuzugreifen.
  • Die Betriebssystemsoftware kann Request_RC_Info() verwenden, um Informationen über eine Seite oder eine Gruppe von Seiten zu erhalten. Die gewonnenen Informationen können verwendet werden, um Seiten so zu sortieren, dass Seiten, die die größte Menge an Speicher freigeben können, gegenüber jenen Seiten priorisiert werden, die möglicherweise nicht so viel Speicher freigeben, wenn sie ausgelagert werden.
  • Ein beispielhafter Prototypfunktionsaufruf von Request_RRCef_Info() ist Request_RC_Info(start_addr, size, th, tag), wobei start_addz die Speicheradresse ist, wo das Sammeln von Informationen beginnt, size die Größe des Gebiets ist, für das Informationen gesammelt werden sollen, th die Referenzzählungsschwelle ist und tag ein optionales Tag ist, das durch die Systemsoftware verwendet werden kann, um Statusinformationen, Anforderungspriorität, Speicherstatus oder andere Informationen zu kommunizieren. Der size-Parameter kann typischerweise die Größe einer Speicherseite (z. B. 4 kB) sein, aber in Abhängigkeit von der Systembestätigung oder -implementierung können kleinere oder größere Größen verwendet werden. Der th-Parameter wird durch die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 verwendet, um zu bestimmen, welche Cache-Zeilen innerhalb des gegebenen Gebiets zu zählen sind. Für if th = 2 wird die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 zum Beispiel die Zahl an Cache-Zeilen zählen, die einen Referenzzählungswert von 2 oder weniger aufweisen. Es versteht sich, dass die in diesem beispielhaften Funktionsaufruf veranschaulichten Parameter in Abhängigkeit von der tatsächlichen Implementierung geändert werden können.
  • Als Reaktion auf den Aufruf von Reguest_RC_Info()scannt die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 das spezifizierte Gebiet des Adressenraums und stellt Einzelheiten hinsichtlich Referenzzählungen und anderer Informationen bereit. Beispielhafte Rückgabeinformationen schließen RC(1) , RC (threshold) , RC(max), RC(sum), RC(average) und tag ein. Die Rückgabeinformation RC(1) ist die Anzahl an Cache-Zeilen mit einem Referenzzählungswert von 1. Die Rückgabeinformation RC(threshold) ist die Anzahl an Cache-Zeilen mit einem Referenzzählungswert kleiner oder gleich der spezifizierten Schwelle (z. B. dem th-Parameter in Request_RC_Info ()) . Die Rückgabeinformation RC(max) ist die maximale Referenzzählung, die in dem spezifizierten Gebiet gefunden wird. Die Rückgabeinformation RC(sum) ist die Summe aller Referenzzählungswerte aller Cache-Zeilen in dem spezifizierten Gebiet. Die Rückgabeinformation RC(average) ist der Durchschnittsreferenzzählungswert der Referenzzählungen über die Cache-Zeilen in dem spezifizierten Gebiet. Der tag-Rückgabewert kann für Kommunikationsstatusinformationen, Speicherstatusinformationen oder dergleichen verwendet werden. Es versteht sich, dass andere Metriken, Aggregationen, Statistiken oder Informationen hinsichtlich des spezifizierten Speichergebiets an den anfordernden Systemsoftwareprozess zurückgegeben werden können. Diese Informationen können als eine oder mehrere Nachrichten an den Anforderer zurückgegeben werden. Alternativ dazu können die Informationen unter Verwendung von Registern kommuniziert werden. Parameter, die zum Aufrufen des Request_RC_ Info () -Aufrufs verwendet werden, können auch über Register weitergegeben werden.
  • Zurückgegebene Referenzzählungsinformationen werden durch die Systemsoftware verwendet, um zu beurteilen, ob eine gegebene Seite ein guter Kandidat zur Auslagerung ist oder nicht. Idealerweise ist die Systemsoftware dazu in der Lage, auf diese Weise gesammelte Referenzzählungsinformationen mit dem Seitenzugriffsverlauf zu kombinieren, den sie intern hält, um die Liste der Kandidatenseiten zur Auslagerung umzusortieren. Dies erlaubt dem System, Seiten auszulagern, die von den Anwendungen nicht mehr benötigt werden, und auch die maximale Menge an Speicher freizugeben.
  • 4 ist eine Pseudocodeauflistung, die einen Prozess 400 zum Sammeln von Referenzzählungsinformationen gemäß einer Ausführungsform veranschaulicht. Der Prozess 400 kann zum Beispiel durch die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 aus 2 durchgeführt werden. Die Funktion Request_RC_Info() wird mit den folgenden Parametern aufgerufen: start_addr, size, th, tag. Die Funktion Request_RC_Info() verwendet diese Parameter und legt Variablen RC_ONE, RC_TH, MAX_RC, RC_SUM und RC AVG fest. Diese Variablen entsprechen den oben besprochenen funktionalen Ausgaben, RC(1), RC (threshold) , RC (max) , RC(sum) und RC(average). Die Betriebssystemsoftware kann eine oder mehrere dieser Metriken verwendet, um eine Liste von Seiten zur Speicherverwaltung anzuordnen. Es versteht sich, dass die Funktion möglicherweise nicht alle der Ausgaben berechnet oder festlegt. Ferner kann die Funktion unterschiedlich gestaltet werden, zum Beispiel zum Verwenden des tag-Parameters oder eines anderen nicht gezeigten Parameters, um zu steuern, welche der Ausgaben berechnet wird.
  • 5 ist ein Blockdiagramm, das eine Architektur 500 gemäß einer Ausführungsform veranschaulicht. Die Architektur 500 beinhaltet eine Speicherreduzierungsschaltungsanordnung 502 (z. B. die Speicherreduzierungsschaltungsanordnung 206), eine Zuordnungstabelle 504 und eine Speichervorrichtung 506 (z. B. den Speicher 204). Die Speichervorrichtung 506 speichert ein Datengebiet 508. Das Datengebiet 508 speichert die Dateneinhalte, die in das Speichersystem geschrieben werden. Die gespeicherten Daten können komprimiert, dedupliziert oder beides werden. Bei manchen Implementierungen speichert die Speichervorrichtung 506 auch die Zuordnungstabelle 504 in einem getrennten Bereich von dem Datengebiet 508. Bei noch anderen Implementierungen kann die Zuordnungstabelle 504 auf einer von dem Datengebiet 508 getrennten Vorrichtung gespeichert werden.
  • Die Speicherreduzierungsschaltungsanordnung 502 unterstützt verschiedene Speicherreduzierungstechniken, wie etwa Kompression oder Deduplizierung. Um eine von einem Anforderer, zum Beispiel einer CPU, empfangene Anforderung zu bedienen, referenziert die Speicherreduzierungsschaltungsanordnung 502 die Zuordnungstabelle 504, um indirekt auf das Datengebiet der Speichervorrichtung 506 zu zeigen. Die Speicherreduzierungsschaltungsanordnung 502 verwaltet alle Zugriffe auf die Speichervorrichtung 506. Diese Hardware fängt den gesamten Verkehr ab und implementiert die Logik, um (1) zu bestimmen, wo sich die Daten für eine Adresse befinden, und (2) Daten in dem Datengebiet 508 nach Bedarf zu speichern und freizumachen.
  • Die Zuordnungstabelle 504 beinhaltet Zuordnungen vom Adressenraum zu dem Datenraum oder mit anderen Worten von einem logischen Adressenraum zu einem physischen Datenraum. Bei einer Ausführungsform ist die Zuordnungstabelle 504 eine Tabelle von Zeigern, die Systemadressen von der CPU zu dem Ort der komprimierten oder deduplizierten Daten in der physischen Speichervorrichtung 506 zuordnen. Bei der einfachsten Ausführungsform ordnet die Zuordnungstabelle 504 Stücke mit fester Größe des Adressenraums zu komprimierten oder deduplizierten Stücken in dem Datengebiet 508 in der Speichervorrichtung 506 zu.
  • 6 ist ein Blockdiagramm, das eine Zuordnungstabelle 504 und eine Verwendung eines Datengebiets 508 gemäß einer Ausführungsform veranschaulicht. Eine Adresse 600 wird durch die Speicherreduzierungsschaltungsanordnung 502 empfangen und die Speicherreduzierungsschaltungsanordnung 502 kann auf die Zuordnungstabelle 504 verweisen, um die physische Adresse in dem Datengebiet 508 zu bestimmen. Wie veranschaulicht, kann durch einen Zeiger (z. B. wird durch einen Zeiger 602 auf Daten 610 gezeigt) oder durch einige Zeiger (z. B. wird durch Zeiger 604 und 606 auf Daten 608 gezeigt) auf einen gegebenen Teil des Datengebiets 508 gezeigt werden. Wenn Daten durch einige Zeiger referenziert werden, ist dies eine Veranschaulichung einer Deduplizierung (die beiden Zeiger 604 und 606 zeigen auf dieselben Daten), wodurch die Gesamtspeichernutzung in dem Datengebiet 508 reduziert wird. Daten in Datenblöcken können in Abhängigkeit von der Implementierung auch komprimiert werden, was ein noch höheres Speicherkompressionsverhältnis bereitstellen würde.
  • Die Zuordnungstabelle 504 beinhaltet auch einen Teil, der Aufzeichnungen der Datengebiete und davon, wie viele Zeiger zu einem speziellen Datengebiet zeigen, beibehält. Die Anzahl an Zeiger, die zu einem Teil des Datengebiets zeigen, wird als die „Referenzzählung“ dieses Datengebiets bezeichnet. Die Datengebiete sind typischerweise Cache-Zeilen in dem Speicher, aber können in anderen Granularitäten zugeordnet werden.
  • Wenn ein Zeiger 606 zu der Zuordnungstabelle 504 zugeordnet wird, welcher zu Daten 612 zeigt (wobei die Daten effektiv dedupliziert werden), wird eine Aufzeichnung 614 in der Zuordnungstabelle 504 hinzugefügt oder aktualisiert, um die Anzahl an Zeigern anzugeben, die zu der physischen Adresse in diesem Datengebiet zeigen (z. B. die Referenzzählung). Unter der Annahme von 4-kB-Seiten und 64-Byte-Cache-Zeilen wird jede Cache-Zeile-Grenze mit 0x0040-Datenadressen ausgerichtet. Die Daten 612 sind bei diesem Beispiel eine Dache-Zeile in einer Speicherseite.
  • Wenn Daten gelöscht werden, so dass die Referenzzählung auf null geht, dann wird die Referenzzählungsaufzeichnung in der Zuordnungstabelle 504 gelöscht. Diese Referenzzählungsaufzeichnungen in der Zuordnungstabelle 504 können in einem zusammenhängenden Abschnitt mit sequentiellen Adressen gespeichert werden. Dies stellt eine einfachere Art zum Scannen der Zuordnungstabelle und Tabellieren der verschiedenen Referenzzählermetriken bereit.
  • 7 ist ein Blockdiagramm, das eine Zuordnungstabelle 504 und eine Verwendung eines Datengebiets 508 gemäß einer Ausführungsform veranschaulicht. Ähnlich der in 6 gefundenen Anordnung greift die Speicherreduzierungsschaltungsanordnung 502 auf die Zuordnungstabelle 504 zu, um Zeiger zu aktualisieren, die indirekt auf das Datengebiet 508 zeigen. Jedoch werden anstelle der Referenzzähleraufzeichnungen, die in der Zuordnungstabelle 504 gespeichert werden (z. B. Aufzeichnungen 612 und 614 aus 6), die Referenzzählungsinformationen mit den Daten in dem Datengebiet 508 gespeichert. Beispielsweise wird in 4-Bit-Feld in einem Header der Daten verwendet, welches die Referenzzählung für die assoziierten Daten angibt. Wenn eine Adresse 700 durch die Speicherreduzierungsschaltungsanordnung 502 empfangen wird, werden Zeiger 702, 704 oder 706 während der Schreibvorgänge oder der Aktualisierungen in den Datengebieten 508 hinzugefügt oder entfernt und wird die Referenzzählung in den assoziierten Daten (z. B. den Daten 708 oder den Daten 710) aktualisiert.
  • 8 ist ein Blockdiagramm, das einen Prozess 800 zum Erhalten von Referenzzählungsinformationen von Hardware gemäß einer Ausführungsform veranschaulicht. Der Prozess 800 kann in Hardware, wie etwa bei einer Speichersteuerung oder der Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 aus 2, durchgeführt werden. Bei 802 wird ein Seitenspeicher gescannt. Der Bereich von Adressen kann an den agierenden Hardwareschaltkreis geliefert werden. Wie in 4 beschrieben, kann der Speicherbereich mit einer Startadresse und einer Größe bereitgestellt werden. Der Seitenspeicher wird in einem zusammenhängenden Block des Speichers gescannt.
  • Bei 804 werden die Referenzzählungsinformationen für jede Cache-Zeile in den gescannten Seiten erhalten. Die Referenzzählungsinformationen können in einem separaten Bereich (z. B. Zuordnungstabelle 504) oder mit den Daten (z. B. in einem Daten-Header-Block) gespeichert werden. Die Referenzzählungsinformationen sind die Anzahl an Zeigern, die zu dem physischen Block von Daten zeigen.
  • Bei 806 werden Referenzzählungsmetriken berechnet. Die berechneten Metriken können auf Anforderung sein, so dass die agierende Schaltungsanordnung in Abhängigkeit davon, welche Metriken die aufrufende Entität (z. B. die Betriebssystemsoftware) anfordert, gewissen Metriken berechnen kann. Mögliche Metriken beinhalten unter anderem die Anzahl an Zeilen, die eine Referenzzählung von 1 haben, die gesamte Referenzzählung für alle gescannten Zeilen, due höchste Referenzzählung einer beliebigen Zeile oder die Anzahl an Zeilen, die gleich oder kleiner als eine bereitgestellte Referenzzählungsschwelle sind.
  • Bei 808 werden die berechneten Referenzzählungsmetriken ausgegeben. Die Referenzzählungsmetriken können als Rückgabevariablen, wie etwa bei einem Prozeduraufruf für die agierende Schaltungsanordnung, bereitgestellt werden. Alternativ dazu können die Referenzzählungsmetriken durch Register unter Verwendung eines oder mehrerer geteilter Register zwischen der agierenden Schaltungsanordnung und der Betriebssystemsoftware oder einer anderen aufrufenden Entität weitergegeben werden.
  • 9 ist ein Blockdiagramm, das einen Prozess 900 zum Anfordern und Verwenden von Referenzzählungsinformationen von Hardware gemäß einer Ausführungsform veranschaulicht. Der Prozess 900 kann durch eine Systemsoftware, eine Bibliothek, einen Vorrichtungstreiber oder eine andere Betriebssoftware niedriger Ebene aufgerufen werden. Der Prozess 900 ermöglicht, dass die aufrufende Entität Informationen über den zugrundeliegenden Hardwarestatus erhält, um bessere Entscheidungen darüber zu treffen, welche Seiten ausgelagert werden, wenn es einen Speicherdruck gibt.
  • 9 veranschaulicht, wie eine Systemsoftware die gesammelten Informationen verwenden kann, um ihre Paging-Aktivitäten zu leiten. Bei diesem Beispiel gibt es zwei Schwellenwerte für verfügbaren freien Speicher. Falls die Menge an verwendetem Speicher größer als eine erste Schwelle ist, beginnt die Systemsoftware unter Verwendung der Referenzzählungsinformations-Engine (z. B. der Referenzzählungsinformationssammlungs-Schaltungsanordnung 208) mit dem Sammeln notwendiger Informationen und dem Umsortieren der Liste von Kandidatenseiten. Falls die Menge an verwendetem Speicher eine zweite Schwelle überschreitet, dann beginnt die Systemsoftware unter Verwendung der angeordneten Seitenliste mit dem Auslagern von Kandidatenseiten in die Sekundärspeicherung. Beispielsweise kann die erste Schwelle 60 % betragen und kann die zweite Schwelle 85 % betragen. Wenn bei einem solchen Beispiel der verwendete Speicher 60 % überschreitet, dann beginnt die Systemsoftware mit dem Sammeln von Referenzzählungsinformationen und, wenn der verwendete Speicher 85 % überschreitet, beginnt die Systemsoftware mit dem Paging.
  • Obwohl eine „verwendeter Speicher“-Metrik bei diesem beispielhaften Prozess 900 implementiert ist, versteht es sich, dass eine „freier Speicher“-Metrik stattdessen verwendet werden kann. Die Schwellen und Vergleiche solcher Schwellen würden bei einer solchen Implementierung umgekehrt werden. Beispielsweise kann das System anstelle einer Schwellenwertbildung bei 60 % des verwendeten Speichers eine Schwelle bei 40 % des verbleibenden freien Speichers bilden.
  • Der Prozess 900 beinhaltet einen Zustand 902, in dem der Systembetrieb normal fortschreitet. Zu einer gewissen Zeit wird die erste Schwelle ausgewertet (Operation 904). Dies kann periodisch, wie etwa alle 500 ms, oder infolge des Empfangens von Benachrichtigungen (z. B. Interrupts) von der Hardware oder dergleichen durchgeführt werden. Falls die Menge an verwendetem Speicher die erste Schwelle (TH1) nicht überschreitet, kehrt der Prozess 900 zu dem Zustand 902 zurück, in dem er mit einer normalen Ausführung fortfährt.
  • Falls der verwendete Speicher über der ersten Schwelle (TH1) ist, werden dann die Referenzzählungsinformationen von der Hardware erhalten (Operation 906). Dies kann auf die in 1-8 und dem assoziierten Text beschriebene Weise durchgeführt werden.
  • Eine Kandidatenseitenliste wird unter Verwendung von Referenzzählungsinformationen als wenigstens ein Faktor in der Anordnung angeordnet (Operation 908). Kandidatenseiten sind jene, die ausgelagert werden können. Beispielsweise können Seiten zuerst bezüglich LRU(Least Recenty Used - zuletzt verwendet)-Metriken und dann Seiten mit der niedrigsten Gesamtreferenzzählung sortiert werden. Andere Referenzzählungsinformationen können verwendet werden, um die Kandidatenseitenliste zu ordnen, wie etwa gemäß einer Anzahl an Zeilen mit einem Referenzzählungswert von Eins, einem Durchschnittsreferenzzählungswert, einem maximalen Referenzzählungswert oder dergleichen. Außerdem können einige Referenzzählungsmetriken kombiniert werden, um eine kombinierte Metrik zu bilden, die zum Sortieren von Kandidatenseiten verwendet werden kann. Die kombinierte Metrik kann unter Verwendung einer gewichteten Funktion von Referenzzählungsmetriken berechnet werden.
  • Während die Referenzzählungsinformationen gesammelt und verwendet werden (Operationen 906 und 908) oder danach wird die zweite Schwelle getestet (Operation 910). Falls die Menge an verwendeten Speicher unter der zweiten Schwelle (TH2) ist, dann kehrt der Prozess 900 zu der Erstschwellenauswertung (Operation 904) zurück. Auf diese Weise können die Seiten in der Kandidatenseitenliste sortiert und umsortiert werden, wenn Referenzzählungs- und Seitenzugriffsinformationen überarbeitet werden.
  • Falls die Menge an verwendetem Speicher oberhalb der zweiten Schwelle (TH2) ist, dann wird eine Seitenauslagerung begonnen (Operation 912). Eine Seitenauslagerung kann unter Verwendung herkömmlicher Verfahren durchgeführt werden. Jedoch werden Seiten basierend auf einer Kandidatenseitenliste ausgewählt, die wenigstens teilweise basierend auf Referenzzählungsinformationen geordnet wird.
  • Obwohl viele Beispiele und Ausführungsformen in diesem Dokument unter Bezugnahme auf Referenzzählungsinformationen beschrieben sind, die in einem deduplizierten Speicherungsschema verwendet werden, versteht es sich, dass die hier beschriebenen Mechanismen zur Verwendung in einer Speicherkompressionsumgebung verwendet werden können. Falls komprimierter Speicher verwendet wird, dann beinhaltet jeder Block von Daten in dem Datenraum eine Indikation einer komprimierten Größe anstelle eines Referenzzählungswertes. Die Indikation einer komprimierten Größe kann ein Kompressionsverhältnis, eine Größe eines komprimierten Blocks, einen Prozentsatz des Raums, den der komprimierte Datenblock verwendet, im Vergleich zu einem nichtkomprimierten Block oder dergleichen. Kompressionsmetriken können auf eine ähnliche Weise zu Referenzzählungen verwendet werden. Seiten mit einem höheren Kompressionsgrad werden langsamer zum Auslagern in einen Zusatzspeicher sein. Diese Information ist zum Einstufen von Kandidatenseiten zum Auslagern hilfreich.
  • 10 ist ein Flussdiagramm, das ein Verfahren 1000 für eine Computerspeicherverwaltung veranschaulicht. Das Verfahren 1000 kann zum Beispiel durch die Referenzzählungsinformationssammlungs-Schaltungsanordnung 208 aus 2 durchgeführt werden.
  • Bei 1002 wird auf ein Speichergebiet von einer Verarbeitungsschaltungsanordnung zugegriffen, wobei das Speichergebiet einer Speicherreduzierungstechnik unterzogen wird. Bei einer Ausführungsform ist das Speichergebiet eine Speicherseite. Bei einer Ausführungsform beinhaltet die Speicherreduzierungstechnik Speicherdeduplizierung.
  • Bei 1004 wird eine Indikation einer Speicherreduzierung des Speichergebiets erhalten. Bei einer Ausführungsform ist die Indikation einer Speicherreduzierung eine Referenzzählung, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind. Bei einer weiteren Ausführungsform umfasst das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  • Bei einer anderen Ausführungsform umfasst das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  • Bei einer anderen Ausführungsform umfasst das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  • Bei 1006 werden Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, berechnet.
  • Bei einer Ausführungsform umfasst das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  • Bei einer anderen Ausführungsform umfasst das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  • Bei einer anderen Ausführungsform umfasst das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  • Bei einer anderen Ausführungsform umfasst das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Berechnen einer Summe von Referenzzählungen für die Cache-Zeilen.
  • Bei einer anderen Ausführungsform umfasst das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Berechnen einer Durchschnittsreferenzzählung für die Cache-Zeilen.
  • Bei 1008 werden die Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen geliefert. Bei einer Ausführungsform ist das Speichergebiet eine Seite und umfassen die Speicherverwaltungsmechanismen Paging-Mechanismen.
  • Alternativ dazu beinhalten die Speicherreduzierungstechniken eine Speicherdatenkompression. Bei einer weiteren Ausführungsform ist die Indikation einer Speicherreduzierung eine Kompressionsmenge, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  • Ausführungsformen können in einer oder einer Kombination von Hardware, Firmware und Software implementiert werden. Ausführungsformen können auch als Befehle implementiert sein, die auf einer maschinenlesbaren Speicherungsvorrichtung gespeichert sind, die durch wenigstens einen Prozessor gelesen und ausgeführt werden können, um die hier beschriebenen Operationen durchzuführen. Eine maschinenlesbare Speicherungsvorrichtung kann einen beliebigen nichtflüchtigen Mechanismus zum Speichern von Informationen in einer durch eine Maschine (z. B. einen Computer) lesbaren Form beinhalten. Zum Beispiel kann eine maschinenlesbare Speicherungsvorrichtung Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM), Magnetplattenspeicherungsmedien, optische Speicherungsmedien, Flash-Speicher-Vorrichtungen und andere Speicherungsvorrichtungen und -medien einschließen.
  • Ein Prozessorsubsystem kann verwendet werden, um den Befehl auf dem maschinenlesbaren Medium auszuführen. Das Prozessorsubsystem kann einen oder mehrere Prozessoren, jeweils mit einem oder mehreren Kernen, beinhalten. Außerdem kann das Prozessorsubsystem auf einer oder mehreren physischen Vorrichtungen angeordnet sein. Das Prozessorsubsystem kann einen oder mehrere spezialisierte Prozessoren, wie zum Beispiel eine Grafikverarbeitungseinheit (GPU), einen Digitalsignalprozessor (DSP), ein feldprogrammierbares Gatterarray (FPGA) oder einen Prozessor mit fester Funktion beinhalten.
  • Wie hier beschriebene Beispiele können Logik oder eine Anzahl an Komponenten, Modulen oder Mechanismen beinhalten oder an diesen arbeiten. Module können Hardware, Software oder Firmware sein, die kommunikativ mit einem oder mehreren Prozessoren gekoppelt ist, um die hier beschriebenen Operationen auszuführen. Module können Hardwaremodule sein und von daher können solche Module als greifbare Entitäten betrachtet werden, die dazu in der Lage sind, spezifizierte Operationen durchzuführen, und können auf eine gewisse Art konfiguriert oder angeordnet sein. Bei einem Beispiel können Schaltkreise auf eine spezifizierte Weise als ein Modul angeordnet sein (z. B. intern oder in Bezug auf externe Entitäten, wie etwa andere Schaltkreise). Bei einem Beispiel kann die Gesamtheit oder ein Teil eines oder mehrerer Computersysteme (z. B. ein Standalone-, Client- oder Servercomputersystem) oder ein oder mehrere Hardwareprozessoren durch Firmware oder Software (z. B. Befehle, einen Anwendungsteil oder eine Anwendung) als ein Modul konfiguriert sein, das dahingehend arbeitet, vorgegebene Operationen durchzuführen. Bei einem Beispiel kann sich die Software auf einem maschinenlesbaren Medium befinden. Bei einem Beispiel bewirkt die Software bei Ausführung durch die zugrunde liegende Hardware des Moduls, dass die Hardware die vorgegebenen Operationen durchführt. Demnach ist der Begriff Hardwaremodul so zu verstehen, dass er eine greifbare Entität umfasst, sei dies eine Entität, die dazu physisch konstruiert, insbesondere konfiguriert (z. B. festverdrahtet) oder temporal (z. B. transitorisch) konfiguriert (z. B. programmiert) ist, auf eine spezifizierte Weise zu arbeiten oder einen Teil oder die Gesamtheit beliebiger hier beschriebener Operationen durchzuführen. Unter Berücksichtigung von Beispielen, in denen Module temporal konfiguriert sind, muss zu einem gegebenen Zeitpunkt nicht jedes der Module instanziiert sein. Wenn die Module zum Beispiel einen unter Verwendung von Software konfigurierten Mehrzweckhardwareprozessor umfassen, kann der Mehrzweckhardwareprozessor zu verschiedenen Zeiten als jeweilige unterschiedliche Module konfiguriert sein. Entsprechend kann Software einen Hardwareprozessor beispielsweise so konfigurieren, dass er zu einem Zeitpunkt ein bestimmtes Modul darstellt und zu einem anderen Zeitpunkt ein anderes Modul darstellt. Module können auch Software- oder Firmwaremodule sein, welche dahingehend arbeiten, die hier beschriebenen Methodologien durchzuführen.
  • Schaltungsanordnung oder Schaltkreise, wie in diesem Dokumentverwendet, kann zum Beispiel eine festverdrahtete Schaltungsanordnung, eine programmierbare Schaltungsanordnung, wie etwa Computerprozessoren, die einen oder mehrere einzelne Befehlsverarbeitungskerne umfassen, eine Zustandsmaschinenschaltungsanordnung und/oder Firmware, die Befehle speichert, die durch eine programmierbare Schaltungsanordnung ausgeführt werden, allein oder in Kombination umfassen. Die Schaltkreise, Schaltungsanordnung oder Module können gemeinsam oder einzeln als eine Schaltungsanordnung umgesetzt sein, die Teil eines größeren Systems, zum Beispiel eines integrierten Schaltkreises (IC), eines System-on-Chip (SoC), von Desktop-Computern, Laptop-Computern, Tablet-Computern, Servern, Smartphones usw., ist.
  • Wie hier bei einer beliebigen Ausführungsform verwendet, kann der Begriff „Logik“ auf eine Firmware und/oder Schaltungsanordnung verweisen, die dazu konfiguriert ist, beliebige der zuvor genannten Operationen durchzuführen. Firmware kann als Code, Befehle oder Befehlssätze und/oder Daten umgesetzt sein, die in Speichervorrichtungen und/oder eine Schaltungsanordnung festcodiert (zum Beispiel nichtflüchtig) sind.
  • „Schaltungsanordnung“, wie hier bei einer beliebigen Ausführungsform 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, allein oder in einer beliebigen Kombination umfassen. Die Schaltungsanordnung kann als ein integrierter Schaltkreis, wie etwa ein Integrierter-Schaltkreis-Chip, umgesetzt sein. Bei manchen Ausführungsformen kann die Schaltungsanordnung wenigstens 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 Mehrzweckprozessor in eine Spezialverarbeitungsumgebung zum Durchführen einer oder mehrerer der hier beschriebenen Operationen transformiert wird. Bei manchen Ausführungsformen kann die Prozessorschaltungsanordnung als ein alleinstehender integrierter Schaltkreis umgesetzt sein oder kann als eine von einigen Komponenten in einem integrierten Schaltkreis eingebunden sein. Bei manchen 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.
  • 11 ist ein Blockdiagramm, das eine Maschine in der beispielhaften Form eines Computersystems 1100, in dem ein Satz oder eine Sequenz von Befehlen ausgeführt werden kann, um zu bewirken, dass die Maschine eine beliebige der hier besprochenen Methodologien durchführt, gemäß einer Ausführungsform veranschaulicht. Bei alternativen Ausführungsformen arbeitet die Maschine als alleinstehende Vorrichtung oder kann mit anderen Maschinen verbunden (z. B. vernetzt) sein. Bei einem vernetzten Einsatz kann die Maschine als entweder ein Server oder eine 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 getragene Anzeige, eine Wearable-Vorrichtung, ein Personal Computer (PC), ein Tablet-PC, ein Hybrid-Tablet, ein persönlicher digitaler Assistent (PDA), ein Mobiltelefon oder irgendeine Maschine sein, die dazu in der Lage ist, Befehle auszuführen (sequentiell oder anders), die Handlungen spezifizieren, die von dieser Maschine zu ergreifen sind. Obwohl nur eine einzige Maschine veranschaulicht wird, ist der Begriff „Maschine“ ferner auch so aufzufassen, dass er eine beliebige Ansammlung von Maschinen einschließt, die einzeln oder gemeinsam einen Satz (oder mehrere Sätze) von Befehlen ausführen, um irgendeine oder mehrere der hier besprochenen Methodologien durchzuführen. Gleichermaßen ist der Begriff „prozessorbasiertes System“ so aufzufassen, dass er einen beliebigen Satz einer oder mehrerer Maschinen einschließt, die durch einen Prozessor (z. B. einen Computer) dazu gesteuert oder betrieben werden, einzeln oder gemeinsam Befehle auszuführen, um irgendeine oder mehrere der hier besprochenen Methodologien durchzuführen.
  • Das beispielhafte Computersystem 1100 beinhaltet wenigstens einen Prozessor 1102 (z. B. eine zentrale Verarbeitungseinheit (CPU), eine Grafikverarbeitungseinheit (GPU) oder beides, Prozessorkerne, Rechenknoten usw.), einen Hauptspeicher 1104 und einen statischen Speicher 1106, die über einen Link 1108 (z. B. einen Bus) miteinander kommunizieren. Das Computersystem 1100 kann ferner eine Videoanzeigeeinheit 1110, eine alphanumerische Eingabevorrichtung 1112 (z. B. eine Tastatur) und eine Benutzeroberfläche(UI)-Navigationsvorrichtung 1114 (z. B. eine Maus) beinhalten. Bei einer Ausführungsform sind die Videoanzeigeeinheit 1110, die Eingabevorrichtung 1112 und die UI-Navigationsvorrichtung 1114 in eine Berührungsbildschirmanzeige eingebunden. Das Computersystem 1100 kann zusätzlich eine Speicherungsvorrichtung 1116 (z. B. eine Laufwerkeinheit), eine Signalerzeugungsvorrichtung 1118 (z. B. einen Lautsprecher), eine Netzwerkschnittstellenvorrichtung 1120 und einen oder mehrere Sensoren (nicht gezeigt), wie etwa einen Sensor einen Globales-Positionsbestimmungssystem(GPS)-Sensor, einen Kompass, einen Beschleunigungsmesser, ein Gyrometer, ein Magnetometer oder einen anderen Sensor, beinhalten.
  • Die Speicherungsvorrichtung 1116 beinhaltet ein maschinenlesbares Medium 1122, auf dem ein oder mehrere Sätze von Datenstrukturen und Befehle 1124 (z. B. Software) gespeichert sind, die eine oder mehrere der hier beschriebenen Methodologien oder Funktionen umsetzen oder durch diese genutzt werden. Die Befehle 1124 können sich während deren Ausführung durch das Computersystem 1100 auch vollständig oder wenigstens teilweise innerhalb des Hauptspeichers 1104, des statischen Speichers 1106 und/oder innerhalb des Prozessors 1102 befinden, wobei der Hauptspeicher 1104, der statische Speicher 1106 und der Prozessor 1102 auch maschinenlesbare Medien bilden.
  • Obwohl das maschinenlesbare Medium 1122 bei einem Ausführungsbeispiel als ein einziges Medium veranschaulicht ist, kann der Begriff „maschinenlesbares Medium“ ein einziges Medium oder mehrere Medien (z. B. eine zentralisierte oder verteilte Datenbank und/oder assoziierte Caches und Server) einschließen, die den einen oder die mehreren Befehle 1124 speichern. Der Begriff „maschinenlesbares Medium“ ist auch so aufzufassen, dass er ein beliebiges greifbares Medium einschließt, das zum Speichern, Codieren oder Tragen von Befehlen zur Ausführung durch die Maschine imstande ist und das bewirkt, dass die Maschine irgendeine oder mehrere der Methodologien der vorliegenden Offenbarung durchführt, oder das zum Speichern, Codieren oder Tragen von Datenstrukturen imstande ist, die durch derartige Befehle genutzt werden oder damit assoziiert sind. Der Begriff „maschinenlesbares Medium“ ist demnach so aufzufassen, dass er unter anderem Festkörperspeicher und optische und magnetische Medien einschließt. Spezielle Beispiele für maschinenlesbare Medien schließen nichtflüchtigen Speicher ein, einschließlich unter anderem beispielsweise Halbleiterspeichervorrichtungen (z. B. elektrisch programmierbarer Nur-Lese-Speicher (EPROM), elektrisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM)) und Flash-Speichervorrichtungen; Magnetplatten, wie etwa interne Festplatten und austauschbare Platten; magnetooptische Platten; und CD-ROM- und DVD-ROM-Disks.
  • Die Befehle 1124 können ferner über ein Kommunikationsnetzwerk 1126 unter Verwendung eines Übertragungsmediums über die Netzwerkschnittstellenvorrichtung 1120 übertragen oder empfangen werden, die ein beliebiges einer Reihe von allgemein bekannten Übertragungsprotokollen nutzt (z. B. HTTP). Beispiele für Kommunikationsnetzwerke schließen ein lokales Netzwerk (LAN: Local Area Network), ein Großraumnetzwerk (WAN: Wide Area Network), das Internet, Mobilfunknetzwerke, Analogtelefon(POTS: Plain Old Telephone)-Netzwerke und Drahtlosdatennetzwerke (z. B. Bluetooth, Wi-Fi, 3G und 4G LTE/LTE-A, 5G, DSRC oder WiMAX-Netzwerke) ein. Der Begriff „Übertragungsmedium“ ist so aufzufassen, dass er ein beliebiges greifbares Medium einschließt, das zum Speichern, Codieren oder Tragen von Befehlen zur Ausführung durch die Maschine imstande ist, und schließt digitale oder analoge Kommunikationssignale oder ein anderes nicht greifbares Medium ein, um die Kommunikation solcher Software zu ermöglichen.
  • Die Figuren unten stellen Architekturen und Systeme zur Implementierung von Ausführungsformen des Vorhergehenden ausführlich dar. Bei manchen Ausführungsformen werden ein/e oder mehrere Hardwarekomponenten und/oder Befehle, die oben beschrieben sind, emuliert, wie unten ausführlich beschrieben ist, oder als Softwaremodule implementiert.
  • Ausführungsformen des bzw. der oben ausführlich beschriebenen Befehls bzw. Befehle können in einem „allgemeinen vektorfreundlichen Befehlsformat“ ausgeführt werden, das nachstehend ausführlich beschrieben ist. Bei anderen Ausführungsformen wird ein solches Format nicht genutzt und wird ein anderes Befehlsformat genutzt, jedoch 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. Außerdem sind 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 jene ausführlich beschriebenen beschränkt.
  • Ein Befehlssatz kann ein oder mehrere Befehlsformate beinhalten. 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. Manche Befehlsformate sind durch die Definition von Befehls-Templates (oder Subformaten) weiter aufgeschlüsselt. 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 wenigstens manche weisen unterschiedliche Bitpositionen auf, weil weniger Felder enthalten sind), und/oder so definiert sein, dass sie ein gegebenes Feld aufweisen, das anders interpretiert wird. Dementsprechend wird jeder Befehl einer ISA unter Verwendung eines gegebenen Befehlsformats (und, falls definiert, in einem gegebenen der Befehls-Templates jenes Befehlsformats) ausgedrückt und beinhaltet Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist ein ADD-Befehl einen speziellen Opcode und ein Befehlsformat auf, das ein Opcode-Feld enthält, um diese Opcode- und Operandenfelder zum Auswählen von Operanden (Quellel/Ziel und Quelle2) zu spezifizieren; und ein Vorhandensein dieses ADD-Befehls in einem Befehlsstrom wird spezielle Inhalte in den Operandenfeldern aufweisen, die spezielle Operanden auswählen. Ein Satz von SIMD-Erweiterungen, die als Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden und das Vector-Extensions(VEX)-Codierungsschema verwenden, wurde herausgegeben und/oder veröffentlicht (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/der hier beschriebenen Befehls/Befehle können in verschiedenen Formaten umgesetzt werden. Außerdem werden nachstehend Systeme, Architekturen und Pipelines ausführlich beschrieben. Ausführungsformen des/der Befehls/Befehle können auf solchen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf jene ausführlich beschriebenen beschränkt.
  • Allgemeines vektorfreundliches Befehlsformat
  • Ein vektorfreundliches Befehlsformat ist ein Befehlsformat, das für Vektorbefehle geeignet ist (z. B. gibt es gewisse Felder, die spezifisch für Vektoroperationen sind). Obgleich Ausführungsformen beschrieben sind, bei denen sowohl Vektor- als auch Skalaroperationen durch das vektorfreundliche Befehlsformat unterstützt werden, verwenden alternative Ausführunasformen nur Vektoroperationen durch das vektorfreundliche Befehlsformat.
  • 12A-12B sind Blockdiagramme, die ein allgemeines vektorfreundliches Befehlsformat und Befehls-Templates davon gemäß einer Ausführungsform veranschaulichen. 12A ist ein Blockdiagramm, das ein allgemeines vektorfreundliches Befehlsformat und Klasse-A-Befehls-Templates davon gemäß einer Ausführungsform veranschaulicht; während 12B ein Blockdiagramm ist, das das allgemeine vektorfreundliche Befehlsformat und Klasse-B-Befehls-Templates davon gemäß einer Ausführungsform veranschaulicht. Insbesondere ein allgemeines vektorfreundliches Befehlsformat 1200, für das Klasse-A- und Klasse-B-Befehls-Templates definiert sind, die beide Befehls-Templates 1205 ohne Speicherzugriff und Befehls-Templates 1220 mit Speicherzugriff umfassen. Der Ausdruck allgemein in dem Zusammenhang des vektorfreundlichen Befehlsformats verweist darauf, dass das Befehlsformat nicht an irgendeinen speziellen Befehlssatz gebunden ist.
  • Während Ausführungsformen beschrieben werden, in denen das vektorfreundliche 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 12A beinhalten Folgendes: 1) innerhalb der Befehls-Templates 1205 ohne Speicherzugriff ist ein Befehls-Template für eine Vollrundungssteuerungsoperation 1210 ohne Speicherzugriff und ein Befehls-Template für eine Datentransformationsoperation 1215 ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehls-Templates mit Speicherzugriff 1220 ist ein Befehls-Template für temporalen Speicherzugriff 1225 und ein Befehls-Template für nichttemporalen Speicherzugriff 1230 gezeigt. Die Klasse-B-Befehls-Templates in 12B beinhalten Folgendes: 1) innerhalb der Befehls-Templates 1205 ohne Speicherzugriff ist ein Befehls-Template mit Schreibmaskensteuerung für eine Operation vom partiellen Rundungssteuertyp 1212 ohne Speicherzugriff und ein Befehls-Template mit Schreibmaskensteuerung für eine Operation vom vsize-Typ 1217 ohne Speicherzugriff gezeigt; und 2) innerhalb der Befehls-Templates 1220 mit Speicherzugriff ist ein Befehls-Template mit Schreibmaskensteuerung 1227 mit Speicherzugriff gezeigt.
  • Das allgemeine vektorfreundliche Befehlsformat 1200 beinhaltet die folgenden Felder, die nachfolgend in der in 12A-12B veranschaulichten Reihenfolge aufgelistet sind.
  • Ein Formatfeld 1240 - ein spezieller Wert (ein Befehlsformatkennungswert) in diesem Feld identifiziert das vektorfreundliche Befehlsformat eindeutig und somit Fälle des Auftretens von Befehlen in dem vektorfreundlichen Befehlsformat in Befehlsströmen. Von daher ist dieses Feld in dem Sinn optional, dass es nicht für einen Befehlssatz benötigt wird, der nur das allgemeine vektorfreundliche Befehlsformat aufweist.
  • Basisoperationsfeld 1242 - sein Inhalt unterscheidet verschiedene Basisoperationen.
  • Registerindexfeld 1244 - sein Inhalt spezifiziert, direkt oder durch Adressenerzeugung, die Orte der Quellen- und Zieloperanden, egal ob in Registern oder in Speicher. Diese beinhalten eine ausreichende Anzahl an Bits, um N Register aus einer PxQ(z. B. 32x512, 16x128, 32x1024, 64x1024)-Registerdatei auszuwählen. Während bei einer Ausführungsform N bis zu drei Quellen- und ein Zielregister sein kann, können alternative Ausführungsformen mehr oder weniger Quellen- und Zielregister unterstützen (können z. B. bis zu zwei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, können bis zu drei Quellen unterstützen, wobei eine dieser Quellen auch als das Ziel fungiert, können bis zu zwei Quellen und ein Ziel unterstützen).
  • Modifikatorfeld 1246 - sein Inhalt unterscheidet Fälle des Auftretens von Befehlen in dem allgemeinen Vektorbefehlsformat, die einen Speicherzugriff spezifizieren, von jenen, die dies nicht tun; das heißt, zwischen Befehls-Templates ohne Speicherzugriff 1205 und Befehls-Templates mit Speicherzugriff 1220. Speicherzugriffsoperationen lesen und/oder schreiben in die Speicherhierarchie (wobei in manchen Fällen die Quellen- und/oder Zieladressen unter Verwendung von Werten in Registern spezifiziert werden), 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 1250 - sein Inhalt unterscheidet, welche einer Vielzahl unterschiedlicher Operationen zusätzlich zu der Basisoperation durchgeführt werden soll. Dieses Feld ist kontextspezifisch. Bei einer Ausführungsform ist dieses Feld in ein Klassenfeld 1268, ein Alphafeld 1252 und ein Betafeld 1254 unterteilt. Das Ergänzungsoperationsfeld 1250 ermöglicht, dass gemeinsame Gruppen von Operationen in einem einzigen Befehl durchgeführt werden, anstatt in 2, 3 oder 4 Befehlen.
  • Skalierungsfeld 1260 - sein Inhalt ermöglicht die Skalierung des Inhalts des Indexfeldes zur Speicheradressenerzeugung (z. B. zur Adressenerzeugung, die 2Skalierung * Index + Basis verwendet).
  • Verschiebungsfeld 1262A - sein Inhalt wird als Teil der Speicheradressenerzeugung verwendet (z. B. zur Adressenerzeugung, die 2Skalierung * Index + Basis + Verschiebung verwendet).
  • Verschiebungsfaktorfeld 1262B (es sei darauf hingewiesen, dass die Nebeneinanderstellung des Verschiebungsfelds 1262A direkt über dem Verschiebungsfaktorfeld 1262B angibt, dass das eine oder das andere verwendet wird) - sein Inhalt wird als Teil der Adressenerzeugung verwendet; es spezifiziert einen Verschiebungsfaktor, der durch die Größe eines Speicherzugriffs (N) skaliert werden soll - wobei N die Anzahl von Bytes in dem Speicherzugriff ist (z. B. zur Adressenerzeugung, die 2Skalierung * Index + Basis + skalierte Verschiebung verwendet). Redundante Bits niedriger Ordnung werden ignoriert und daher wird der Inhalt des Verschiebungsfaktorfelds mit der Gesamtgröße (N) der Speicheroperanden multipliziert, um die endgültige Verschiebung zu erzeugen, die beim Berechnen einer effektiven Adresse verwendet werden soll. Der Wert von N wird durch die Prozessorhardware zur Laufzeit basierend auf dem Voll-Opcode-Feld 1274 (hier später beschrieben) und dem Datenmanipulationsfeld 1254C bestimmt. Das Verschiebungsfeld 1262A und das Verschiebungsfaktorfeld 1262B sind in dem Sinne optional, dass sie nicht für die Befehls-Templates 1205 ohne Speicherzugriff verwendet werden und/oder andere Ausführungsformen möglicherweise nur eine oder keine der beiden implementieren.
  • Datenelementbreitenfeld 1264 - sein Inhalt unterscheidet, welche einer Zahl von Datenelementbreiten zu verwenden ist (bei manchen Ausführungsformen für alle Befehle; bei anderen Ausführungsformen nur für manche der Befehle). Dieses Feld ist in dem Sinne optional, dass es nicht benötigt wird, falls nur eine Datenelementbreite unterstützt wird und/oder Datenelementbreiten unterstützt werden, die einen gewissen Aspekt der Opcodes verwenden.
  • Schreibmaskenfeld 1270 - sein Inhalt steuert auf einer Basis je Datenelementposition, ob die Datenelementposition in dem Zielvektoroperanden das Ergebnis der Basisoperation und der Ergänzungsoperation wiedergibt. Klasse-A-Befehls-Templates unterstützen Zusammenlegungsschreibmaskierung, während Klasse-B-Befehls-Templates sowohl Zusammenlegungs- als auch Nullungsschreibmaskierung unterstützen. Beim Zusammenlegen ermöglichen Vektormasken, dass ein beliebiger Satz von Elementen im Ziel während der Ausführung einer beliebigen Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) vor Aktualisierungen geschützt wird; wobei bei einer anderen Ausführungsform der alte Wert jedes Elements des Ziels bewahrt wird, wo das entsprechende Maskenbit eine 0 aufweist. Wenn im Gegensatz dazu Nullungsvektormasken ermöglichen, dass ein beliebiger Satz von Elementen in dem Ziel während der Ausführung einer Operation (spezifiziert durch die Basisoperation und die Ergänzungsoperation) genullt wird; wird bei einer Ausführungsform ein Element des Ziels auf 0 gesetzt, wenn das entsprechende Maskenbit einen 0-Wert aufweist. Ein Teilsatz dieser Funktionalität ist die Fähigkeit, die Vektorlänge der durchgeführten Operation (d. h. die Spanne von modifizierten Elementen vom ersten bis zum letzten) zu steuern; es ist jedoch nicht notwendig, dass die Elemente, die modifiziert werden, konsekutiv sind. Dementsprechend ermöglicht das Schreibmaskenfeld 1270 partielle Vektoroperationen, einschließen Laden, Speichern, Arithmetik, Logik usw. Obgleich Ausführungsformen beschrieben sind, bei denen der Inhalt des Schreibmaskenfelds 1270 eines einer Anzahl an Schreibmaskenregistern auswählt, das die zu verwendende Schreibmaske enthält (und dementsprechend der Inhalt des Schreibmaskenfelds 1270 indirekt identifiziert, dass eine Maskierung durchzuführen ist), ermöglichen alternative Ausführungsformen stattdessen oder zusätzlich, dass der Inhalt des Schreibmaskenfelds 1270 direkt die Maskierung spezifiziert, die durchzuführen ist.
  • Immediate-Feld 1272 - sein Inhalt ermöglicht die Spezifikation eines Immediates. Dieses Feld ist in dem Sinne optional, dass es bei einer Implementierung des allgemeinen vektorfreundlichen Formats, das keinen Immediate unterstützt, nicht vorhanden ist und in Befehlen, die keinen Immediate verwenden, nicht vorhanden ist.
  • Klassenfeld 1268 - sein Inhalt unterscheidet zwischen verschiedenen Klassen von Befehlen. Unter Bezugnahme auf die 12A-12B wählen die Inhalte dieser Felder zwischen Klasse-A- und Klasse-B-Befehlen aus. In 12A-12B werden Quadrate mit abgerundeten Ecken verwendet, um anzugeben, dass ein spezieller Wert in einem Feld vorhanden ist (z. B. Klasse A 1268A bzw. Klasse B 1268B für das Klassenfeld 1268 in 12A-12B) .
  • Befehls-Templates der Klasse A
  • Im Falle der Befehls-Templates 1205 der Klasse A ohne Speicherzugriff wird das Alphafeld 1252 als ein RS-Feld 1252A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden sollen (z. B. sind Runden 1252A.1 und Datentransformation 1252A.2 jeweils für die Befehls-Templates für Operation 1210 vom Rundungstyp ohne Speicherzugriff bzw. die Operation 1215 vom Datentransformationstyp ohne Speicherzugriff spezifiziert), während das Betafeld 1254 unterscheidet, welche der Operationen des spezifizierten Typs durchzuführen ist. In den Befehls-Templates ohne Speicherzugriff 1205 sind das Skalierungsfeld 1260, das Verschiebungsfeld 1262A und das Verschiebungsskalierungsfeld 1262B nicht vorhanden.
  • Befehls-Templates ohne Speicherzugriff - Operation vom Vollrundungssteuertyp
  • In dem Befehls-Template für die Operation 1210 vom Vollrundungssteuertyp ohne Speicherzugriff wird das Betafeld 1254 als ein Rundungssteuerfeld 1254A interpretiert, dessen Inhalt(e) statisches Runden bereitstellt (bereitstellen). Während in den beschriebenen Ausführungsformen das Rundungssteuerfeld 1254A ein Feld 1256 zum Unterdrücken aller Gleitkommaausnahmen (SAE) und ein Rundungsoperationssteuerfeld 1258 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 1258 aufweisen).
  • SAE-Feld 1256 - sein Inhalt unterscheidet, ob das Melden von Ausnahmeereignissen deaktiviert werden soll oder nicht; wenn der Inhalt des SAE-Felds 1256 angibt, dass eine Unterdrückung aktiviert ist, meldet ein gegebener Befehl keine Art von Gleitkommaausnahme-Flag und bewirkt keinen Gleitkommaausnahme-Handler.
  • Rundungsoperationssteuerfeld 1258 - sein Inhalt unterscheidet, welche aus einer Gruppe von Rundungsoperationen durchzuführen ist (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Dementsprechend ermöglicht das Rundungssteuerfeld 1258 das Ändern des Rundungsmodus auf einer Basis je Befehl. Bei einer Ausführungsform, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperationssteuerfelds 1250 diesen Registerwert.
  • Befehls-Templates ohne Speicherzugriff Datentransformationstypoperation
  • In dem Befehls-Template ohne Speicherzugriff, mit Datentransformationstypoperation 1215 wird das Betafeld 1254 als ein Datentransformationsfeld 1254B interpretiert, dessen Inhalt unterscheidet, welche einer Reihe von Datentransformationen durchgeführt werden soll (z. B. keine Datentransformation, Swizzle, Broadcast).
  • In dem Fall eines Befehls-Templates mit Speicherzugriff 1220 der Klasse A wird das Alphafeld 1252 als ein Ausräumhinweisfeld 1252B interpretiert, dessen Inhalt unterscheidet, welcher der Ausräumhinweise zu verwenden ist (in 12A sind temporal 1252B.1 und nichttemporal 1252B.2 für das temporale 1225 Befehls-Template mit Speicherzugriff bzw. das nichttemporale 1230 Befehls-Template mit Speicherzugriff spezifiziert), während das Betafeld 1254 als ein Datenmanipulationsfeld 1254C interpretiert wird, dessen Inhalt unterscheidet, welche einer Anzahl an Datenmanipulationsoperationen (auch als Primitive bekannt) durchgeführt werden soll (z. B. keine Manipulation; Broadcast, Aufwärtsumwandlung einer Quelle; und Abwärtsumwandlung eines Ziels). Die Befehls-Templates 1220 mit Speicherzugriff beinhalten das Skalierungsfeld 1260 und optional das Verschiebungsfeld 1262A oder das Verschiebungsskalierungsfeld 1262B.
  • Vektorspeicherbefehle führen Vektorladen aus dem und Vektorspeichern in den Speicher mit Umwandlungsunterstützung durch. Wie bei regulären Vektorbefehlen übertragen Vektorspeicherbefehle Daten von dem/in den Speicher auf eine datenelementweise Art, wobei die Elemente, die tatsächlich übertragen werden, durch die Inhalte der Vektormaske, die als die Schreibmaske ausgewählt wird, diktiert werden.
  • Befehls-Templates mit Speicherzugriff - Temporal
  • Temporale Daten sind Daten, die wahrscheinlich zeitnah genug wiederverwendet werden, um von Caching zu profitieren. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können dies auf verschiedene Weisen, einschließlich des vollständigen Ignorierens des Hinweises, implementieren.
  • Befehls-Templates mit Speicherzugriff - Nichttemporal
  • Nichttemporale Daten werden wahrscheinlich nicht zeitnah genug wiederverwendet, um von einem Caching in dem Ist-Level-Cache zu profitieren, und sollten Priorität zum Ausräumen erhalten. Dies ist jedoch ein Hinweis und verschiedene Prozessoren können dies auf verschiedene Weisen, einschließlich des vollständigen Ignorierens des Hinweises, implementieren.
  • Befehls-Templates der Klasse B
  • Im Fall der Befehls-Templates der Klasse B wird das Alphafeld 1252 als ein Schreibmaskensteuer(Z)-Feld 1252C interpretiert, dessen Inhalt unterscheidet, ob die durch das Schreibmaskenfeld 1270 gesteuerte Schreibmaskierung eine Zusammenlegung oder eine Nullung sein soll.
  • Im Fall der Befehls-Templates der Klasse B ohne Speicherzugriff 1205 wird ein Teil des Betafeldes 1254 als ein RL-Feld 1257A interpretiert, dessen Inhalt unterscheidet, welcher der unterschiedlichen Ergänzungsoperationstypen durchgeführt werden soll (z. B. werden Runden 1257A.1 und Vektorlänge (VSIZE) 1257A.2 für das Befehls-Template für Schreibmaskensteuer-Partialrundungssteuertypoperation 1212 ohne Speicherzugriff bzw. für das Befehls-Template für eine Schreibmaskensteuer-VSIZE-Typ-Operation 1217 ohne Speicherzugriff spezifiziert), während der Rest des Betafelds 1254 unterscheidet, welche der Operationen des spezifizierten Typs durchgeführt werden soll. In den Befehls-Templates ohne Speicherzugriff 1205 sind das Skalierungsfeld 1260, das Verschiebungsfeld 1262A und das Verschiebungsskalierungsfeld 1262B nicht vorhanden.
  • In dem Befehls-Template für eine Schreibmaskensteuer-Partialrundungssteuertypoperation 1210 ohne Speicherzugriff wird der Rest des Betafelds 1254 als ein Rundungsoperationsfeld 1259A interpretiert und ist das Melden von Ausnahmeereignissen deaktiviert (ein gegebener Befehl meldet keine Art von Gleitkommaausnahme-Flag und löst keinen Gleitkommaausnahme-Handler aus).
  • Rundungsoperationssteuerfeld 1259A - sein Inhalt unterscheidet, genau wie das Rundungsoperationssteuerfeld 1258, welche aus einer Gruppe von Rundungsoperationen durchgeführt werden soll (z. B. Aufrunden, Abrunden, Runden in Nullrichtung und Runden zum Nächsten). Das Rundungsoperationssteuerfeld 1259A ermöglicht somit das Ändern des Rundungsmodus auf Basis je Befehl. Bei einer Ausführungsform, bei der ein Prozessor ein Steuerregister zum Spezifizieren von Rundungsmodi aufweist, überschreibt der Inhalt des Rundungsoperationssteuerfelds 1250 diesen Registerwert.
  • Bei dem Befehls-Template für eine Schreibmaskensteuer-VSIZE-Typoperation 1217 ohne Speicherzugriff wird der Rest des Betafelds 1254 als ein Vektorlängenfeld 1259B interpretiert, dessen Inhalt unterscheidet, welche einer Anzahl an Datenvektorlängen durchgeführt werden soll (z. B. 128, 256 oder 512 Byte).
  • Im Fall eines Befehls-Templates der Klasse B mit Speicherzugriff 1220 wird ein Teil des Betafelds 1254 als ein Broadcast-Feld 1257B interpretiert, dessen Inhalt unterscheidet, ob die Broadcast-Typ-Datenmanipulationsoperation durchgeführt werden soll oder nicht, während der Rest des Betafelds 1254 als das Vektorlängenfeld 1259B interpretiert wird. Die Befehls-Templates 1220 mit Speicherzugriff beinhalten das Skalierungsfeld 1260 und optional das Verschiebungsfeld 1262A oder das Verschiebungsskalierungsfeld 1262B.
  • Mit Bezug auf das allgemeine vektorfreundliche Befehlsformat 1200 ist ein Voll-Opcode-Feld 1274 einschließlich des Formatfelds 1240, des Basisoperationsfelds 1242 und des Datenelementbreitenfelds 1264 gezeigt. Während eine Ausführungsform gezeigt ist, bei welcher das Voll-Opcode-Feld 1274 alle dieser Felder beinhaltet, umfasst das Voll-Opcode-Feld 1274 bei Ausführungsformen, welche nicht alle von ihnen unterstützen, weniger als alle dieser Felder. Das Voll-Opcode-Feld 1274 stellt den Operationscode (Opcode) bereit.
  • Das Ergänzungsoperationsfeld 1250, das Datenelementbreitenfeld 1264 und das Schreibmaskenfeld 1270 ermöglichen, dass diese Merkmale in dem allgemeinen vektorfreundlichen Befehlsformat auf Basis je Befehl spezifiziert werden.
  • Die Kombination aus Schreibmaskenfeld und Datenelementbreitenfeld erschafft insofern typisierte Befehle, als dass sie ermöglichen, dass die Maske basierend auf verschiedenen Datenelementbreiten angewandt wird.
  • Die verschiedenen Befehls-Templates, die innerhalb Klasse A und Klasse B gefunden werden, sind in verschiedenen Situationen vorteilhaft. Bei manchen Ausführungsformen können unterschiedliche Prozessoren oder unterschiedliche Kerne innerhalb eines Prozessors nur die Klasse A, nur die Klasse B oder beide Klassen unterstützen. Beispielsweise kann ein Hochleistungs-Mehrzweck-Out-Of-Order-Kern, der für Mehrweckberechnung vorgesehen ist, nur Klasse B unterstützen, kann ein Kern, der primär für Grafik- und/oder wissenschaftliche (Durchsatz-)Berechnung vorgesehen ist, nur Klasse A unterstützen, und kann ein Kern, der für beides vorgesehen ist, beides unterstützen (natürlich liegt ein Kern, der eine gewisse Mischung aus Templates und Befehlen beider Klassen, aber nicht alle Templates und Befehle beider Klassen aufweist, innerhalb des Geltungsbereichs der Erfindung). Außerdem kann ein einziger Prozessor mehrere Kerne beinhalten, von denen alle die gleiche Klasse unterstützen oder bei denen unterschiedliche Kerne eine unterschiedliche Klasse unterstützen. Zum Beispiel kann in einem Prozessor mit separaten Grafik- und Mehrzweckkernen einer der Grafikkerne, der primär für Grafik- und/oder wissenschaftliches Rechnen vorgesehen ist, nur Klasse A unterstützen, während einer oder mehrere der Mehrzweckkerne Hochleistungsmehrweckkerne mit Out-Of-Order-Ausführung und Registerumbenennung sein können, die für Mehrzweckberechnung vorgesehen sind, die nur Klasse B unterstützen. Ein anderer Prozessor, der keinen getrennten Grafikkern aufweist, kann einen oder mehrere Mehrzweck-In-Order-Kerne aufweisen, die sowohl Klasse A als auch Klasse B unterstützen. Natürlich können Merkmale von einer Klasse bei unterschiedlichen Ausführungsformen auch in der anderen Klasse implementiert werden. Programme, die in einer höheren Sprache geschrieben sind, würden in eine Vielzahl unterschiedlicher ausführbarer Formen gesetzt werden (z. B. just-in-time-kompiliert oder statisch kompiliert), die Folgendes beinhalten: 1) eine Form mit nur 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 unterschiedlicher Kombinationen der Befehle aller Klassen geschrieben sind, und mit einen Steuerflusscode, der die Routinen, die auszuführen sind, basierend auf den Befehlen auswählt, die von dem Prozessor unterstützt werden, der den Code momentan ausführt.
  • Spezielles vektorfreundliches Befehlsformat
  • 13 ist ein Blockdiagramm, das ein spezielles vektorfreundliches Befehlsformat gemäß einer Ausführungsform veranschaulicht. 13 zeigt ein spezielles vektorfreundliches Befehlsformat 1300, das in dem Sinne speziell ist, dass es die Stelle, die Größe, die Interpretation und die Reihenfolge der Felder sowie Werte für manche jener Felder spezifiziert. Das spezielle vektorfreundliche Befehlsformat 1300 kann verwendet werden, um den x86-Befehlssatz zu erweitern, und dementsprechend sind manche der Felder jenen, die in dem existierenden x86-Befehlssatz und einer Erweiterung davon (z. B. AVX) verwendet werden, ähnlich oder die gleichen wie diese. Dieses Format bleibt konsistent mit dem Präfixcodierungsfeld, Real-Opcode-Byte-Feld, MOD-R/M-Feld, SIB-Feld, Verschiebungsfeld und den Immediate-Feldern des existierenden x86-Befehlssatzes mit Erweiterungen. Die Felder aus 12, denen die Felder aus 13 zugeordnet werden, sind veranschaulicht.
  • Es versteht sich, dass, obwohl Ausführungsformen zu Illustrationszwecken unter Bezugnahme auf das spezielle vektorfreundliche Befehlsformat 1300 in dem Zusammenhang des allgemeinen vektorfreundlichen Befehlsformats 1200 beschrieben sind, die Erfindung nicht auf das spezielle vektorfreundliche Befehlsformat 1300 beschränkt ist, außer wo dies beansprucht wird. Zum Beispiel zieht das allgemeine vektorfreundliche Befehlsformat 1200 eine Vielfalt möglicher Größen für die verschiedenen Felder in Betracht, obwohl das spezielle vektorfreundliche Befehlsformat 1300 mit Feldern spezieller Größen gezeigt ist. Als ein spezielles Beispiel ist, obwohl das Datenelementbreitenfeld 1264 bei dem speziellen vektorfreundlichen Befehlsformat 1300 als ein Ein-Bit-Feld veranschaulicht ist, die Erfindung nicht derart beschränkt (das heißt, das allgemeine vektorfreundliche Befehlsformat 1200 zieht andere Größen des Datenelementbreitenfelds 1264 in Betracht).
  • Das allgemeine vektorfreundliche Befehlsformat 1200 beinhaltet die folgenden Felder, die nachfolgend in der in 13A veranschaulichten Reihenfolge aufgelistet sind.
  • EVEX-Präfix (Bytes 0-3) 1302 - ist in einer Vier-Byte-Form codiert.
  • Formatfeld 1240 (EVEX-Byte 0, Bits [7:0]) - das erste Byte (EVEX-Byte 0) ist das Formatfeld 1240 und es enthält 0x62 (der eindeutige Wert, der bei einer Ausführungsform zum Unterscheiden des vektorfreundlichen Befehlsformats verwendet wird).
  • Die zweiten-vierten Bytes (EVEX-Bytes 1-3) beinhalten eine Anzahl an Bitfeldern, die eine spezielle Fähigkeit bereitstellen.
  • REX-Feld 1305 (EVEX-Byte 1, Bits [7-5])-besteht aus einem EVEX.R-Bitfeld (EVEX-Byte 1, Bit [7] - R), EVEX.X-Bitfeld (EVEX-Byte 1, Bit [6] - X), und 1257BEX-Byte 1, Bit [5] - B). Die EVEX.R-, EVEX.X- und EVEX.B-Bitfelder bieten die gleiche Funktionalität wie die zugehörigen VEX-Bitfelder und werden unter Verwendung der Is-Komplementform codiert, d. h. ZMMO wird als 1111B codiert, ZMM15 wird als 0000B codiert. Andere Felder der Befehle codieren die unteren drei Bits der Registerindizes, wie in der Technik bekannt (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Hinzufügen von EVEX.R, EVEX.X und EVEX.B gebildet werden können.
  • REX'-Feld 1210 - dies ist der erste Teil des REX'-Feldes 1210 und ist das EVEX.R'-Bit-Feld (EVEX-Byte 1, Bit [4] - R'), das verwendet wird, um entweder die oberen 16 oder die unteren 16 des erweiterten 32-Register-Satzes zu codieren. Bei einer Ausführungsform wird dieses Bit, zusammen mit anderen, wie nachstehend angegeben, in einem bitinvertierten Format gespeichert, um eine Unterscheidung (in dem wohlbekannten x86-32-Bit-Modus) von dem BOUND-Befehl vorzunehmen, dessen reales Opcode-Byte 62 ist, der jedoch in dem MOD R/M-Feld (nachstehend beschrieben) den Wert von 11 in dem MOD-Feld nicht akzeptiert; alternative Ausführungsformen speichern weder dieses noch die anderen, nachstehend angegebenen Bits in dem invertierten Format. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird R'Rrrr durch Kombinieren von EVEX.R', EVEX.R und des anderen RRR aus anderen Feldern gebildet.
  • Opcode-Map-Feld 1315 (EVEX-Byte 1, Bits [3:0] - mmmm) - sein Inhalt codiert ein impliziertes führendes Opcode-Byte (0F, OF 38 oder 0F 3).
  • Datenelementbreitenfeld 1264 (EVEX-Byte 2, Bit [7]-W) - es wird durch die Bezeichnung EVEX.W repräsentiert. EVEX.W wird verwendet, um die Granularität (Größe) des Datentyps (entweder 32-Bit-Datenelemente oder 64-Bit-Datenelemente) zu definieren.
  • EVEX.vvv 1320 (EVEX-Byte 2, Bits [6:3]-vvvv) - die Rolle von EVEX.vvvv kann Folgendes beinhalten: 1) EVEX.vvvv codiert den ersten Quellenregisteroperanden, spezifiziert in invertierter (ls-Komplement) Form, und ist für Befehle mit 2 oder mehr Quellenoperanden gültig; 2) EVEX.vvvv codiert den Zielregisteroperanden, spezifiziert in Is-Komplementform für gewisse Vektorverschiebungen; oder 3) EVEX.vvvv codiert keinen Operanden, das Feld ist reserviert und sollte 1111b enthalten. Dementsprechend codiert das EVEX.vvvv-Feld 1320 die 4 Bits niedriger Ordnung des ersten Quellenregisterspezifikationssymbols, welche in invertierter (ls-Komplement-)Form gespeichert werden. In Abhängigkeit von dem Befehl wird ein zusätzliches verschiedenes EVEX-Bitfeld verwendet, um die Spezifikationssymbolgröße auf 32 Register zu erweitern.
  • EVEX.U-1268-Klassenfeld (EVEX-Byte 2, Bit [2]-U) - Falls EVEX.U = 0 gilt, gibt es Klasse A oder EVEX.U0 an; falls EVEX.U = 1 gilt, gibt es Klasse B oder EVEX.U1 an.
  • Präfixcodierungsfeld 1325 (EVEX-Byte 2, Bits [1:0]-pp) - stellt zusätzliche Bits für das Basisoperationsfeld bereit. Zusätzlich zu dem Bereitstellen einer Unterstützung für die Legacy-SSE-Befehle in dem EVEX-Präfix-Format weist dies auch den Vorteil des Kompaktierens des SIMD-Präfixes auf (statt ein Byte zum Ausdrücken des SIMD-Präfixes zu benötigen, benötigt das EVEX-Präfix nur 2 Bit). Bei einer Ausführungsform sind zur Unterstützung von Legacy-SSE-Befehle, die ein SIMD-Präfix (66H, F2H, F3H) verwenden, in sowohl dem Legacy-Format als auch in dem EVEX-Präfix-Format diese Legacy-SIMD-Präfixe in das SIMD-Präfixcodierungsfeld codiert; und werden zur Laufzeit in das Legacy-SIMD-Präfix codiert, bevor sie an den PLA des Decoders geliefert werden (sodass der PLA sowohl das Legacy- als auch das EVEX-Format dieser Legacy-Befehle ohne Modifikation ausführen kann). Obwohl neuere Befehle den Inhalt des EVEX-Präfixcodierungsfeldes direkt als eine Opcode-Erweiterung verwenden könnten, nehmen gewisse Ausführungsformen aus Konsistenzgründen eine ähnliche Erweiterung vor, ermöglichen jedoch, dass verschiedene Bedeutungen durch diese Legacy-SIMD-Präfixe spezifiziert werden. Eine alternative Ausführungsform kann den PLA umgestalten, um die 2-Bit-SIMD-Präfixcodierungen zu unterstützen, und benötigt dementsprechend die Erweiterung nicht.
  • Alphafeld 1252 (EVEX-Byte 3, Bit [7] - EH; auch als EVEX.EH, EVEX.rs, EVEX.RL, EVEX.Schreibmaskensteuerung und EVEX.N bekannt; auch mit α veranschaulicht) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • Betafeld 1254 (EVEX-Byte 3, Bits [6:4]-SSS, auch bekannt als EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB; auch mit βββ veranschaulicht) - wie zuvor beschrieben, ist dieses Feld kontextspezifisch.
  • REX'-Feld 1210 - dies ist der Rest des REX'-Feldes 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-Register-Satzes zu codieren. Dieses Bit wird in bitinvertiertem Format gespeichert. Ein Wert von 1 wird verwendet, um die unteren 16 Register zu codieren. Mit anderen Worten wird V'VVVV durch Kombinieren von EVEX.V', EVEX.vvvv gebildet.
  • Schreibmaskenfeld 1270 (EVEX-Byte 3, Bits [2:0]-kkk) - sein Inhalt spezifiziert den Index eines Registers in den Schreibmaskenregistern, wie zuvor beschrieben. Bei einer Ausführungsform hat der spezielle Wert EVEX.kkk=000 ein spezielles Verhalten, das impliziert, dass keine Schreibmaske für den speziellen Befehl verwendet wird (dies kann auf verschiedene Weisen implementiert werden, einschließlich des Verwendens einer Schreibmaske, die mit allen festverdrahtet ist, oder von Hardware, die die Maskierungshardware umgeht).
  • Das Real-Opcode-Feld 1330 (Byte 4) ist auch als das Opcode-Byte bekannt. Ein Teil des Opcodes ist in diesem Feld spezifiziert.
  • Das MOD-R/M-Feld 1340 (Byte 5) beinhaltet das MOD-Feld 1342, Reg-Feld 1344 und R/M-Feld 1346. Wie zuvor beschrieben, unterscheidet der Inhalt des MOD-Feldes 1342 zwischen Operationen mit Speicherzugriff und ohne Speicherzugriff. Die Rolle des Reg-Felds 1344 kann auf zwei Situationen zusammengefast werden: Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden, oder es wird als eine Opcode-Erweiterung behandelt und nicht zum Codieren irgendeines Befehlsoperanden verwendet. Die Rolle des R/M-Feldes 1346 kann Folgendes einschließen: Codieren des Befehlsoperanden, der eine Speicheradresse referenziert, oder Codieren entweder des Zielregisteroperanden oder eines Quellregisteroperanden.
  • Byte für Skalierung, Index, Basis (SIB) (Byte 6) - Wie zuvor beschrieben, wird der Inhalt des Skalierungsfeldes 1250 für eine Speicheradressenerzeugung verwendet. SIB.xxx 1354 und SIB.bbb 1356 - auf die Inhalte dieser Felder wurde zuvor mit Bezug auf die Registerindizes Xxxx und Bbbb Bezug genommen.
  • Verschiebungsfeld 1262A (Bytes 7-10) - wenn das MOD-Feld 1342 10 enthält, sind Bytes 7-10 das Verschiebungsfeld 1262A, und es funktioniert genauso wie die Legacy-32-Bit-Verschiebung (disp32) und arbeitet auf Byte-Granularität.
  • Verschiebungsfaktorfeld 1262B (Byte 7) - wenn das MOD-Feld 1342 01 enthält, ist Byte 7 das Verschiebungsfaktorfeld 1262B. Der Ort dieses Felds ist der gleiche wie jener der Legacy-x86-Befehlssatz-8-Bit-Verschiebung (disp8), die auf Byte-Granularität arbeitet. Da disp8 vorzeichenerweitert ist, kann es Offsets nur zwischen -128 und 127 Bytes adressieren; in Bezug auf 64-Byte-Cache-Zeilen verwendet disp8 8 Bits, die auf nur vier wirklich nützliche Werte eingestellt werden können -128, -64, 0 und 64; da oft ein größerer Bereich benötigt wird, wird disp32 verwendet; disp32 benötigt jedoch 4 Bytes. Im Gegensatz zu disp8 und disp32 ist das Verschiebungsfaktorfeld 1262B eine Neuinterpretation von disp8; bei Verwendung des Verschiebungsfaktorfelds 1262B wird die eigentliche Verschiebung durch den Inhalt des Verschiebungsfaktorfelds multipliziert mit der Größe des Speicheroperandenzugriffs (N) bestimmt. Diese Art von Verschiebung wird als disp8*N bezeichnet. Dies reduziert die durchschnittliche Befehlslänge (es wird ein einziges Byte für die Verschiebung verwendet, aber 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 daher müssen die redundanten Bits niedriger Ordnung des Adressen-Offsets nicht codiert zu werden. Mit anderen Worten ersetzt das Verschiebungsfaktorfeld 1262B die 8-Bit-Verschiebung des Legacy-x86-Befehlssatzes. Dementsprechend wird das Verschiebungsfaktorfeld 1262B auf die gleiche Weise wie eine 8-Bit-Verschiebung des x86-Befehlssatzes codiert (solange es keine Änderungen in den ModRM/SIB-Codierungsregeln gibt), mit der einzigen Ausnahme, dass disp8 zu disp8*N überladen wird. Mit anderen Worten gibt es keine Änderungen in den Codierungsregeln oder Codierungslängen, sondern nur in der Interpretation des Verschiebungswertes durch Hardware (die die Verschiebung mit der Größe des Speicheroperanden skalieren muss, um einen byteweisen Adressen-Offset zu erhalten). Das Immediate-Feld 1272 arbeitet wie zuvor beschrieben.
  • Voll-Opcode-Feld
  • 13B ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300 gemäß einer Ausführungsform veranschaulicht, die das Voll-Opcode-Feld 1274 darstellen. Insbesondere beinhaltet das Voll-Opcode-Feld 1274 das Formatfeld 1240, das Basisoperationsfeld 1242 und das Datenelementbreiten(W)-Feld 1264. Das Basisoperationsfeld 1242 beinhaltet das Präfixcodierungsfeld 1325, das Opcode-Map-Feld 1315 und das Real-Opcode-Feld 1330.
  • Registerindexfeld
  • 13C ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300 gemäß einer Ausführungsform veranschaulicht, die das Registerindexfeld 1244 darstellen. Insbesondere beinhaltet das Registerindexfeld 1244 das REX-Feld 1305, das REX'-Feld 1310, das MODR/M.reg-Feld 1344, das MODR/M.r/m-Feld 1346, das VVVV-Feld 1320, das xxx-Feld 1354 und das bbb-Feld 1356.
  • Ergänzungsoperationsfeld
  • 13D ist ein Blockdiagramm, das die Felder des speziellen vektorfreundlichen Befehlsformats 1300 gemäß einer Ausführungsform veranschaulicht, die das Ergänzungsoperationsfeld 1250 darstellen. Wenn das Klassen-(U)-Feld 1268 0 enthält, bezeichnet es EVEX.U0 (Klasse A 1268A); wenn es 1 enthält, bezeichnet es EVEX.U1 (Klasse B 1268B). Wenn U=0 gilt und das MOD-Feld 1342 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird das Alphafeld 1252 (EVEX-Byte 3, Bit [7] - EH) als das rs-Feld 1252A interpretiert. Wenn das rs-Feld 1252A eine 1 enthält (Runden 1252A.1), wird das Betafeld 1254 (EVEX-Byte 3, Bits [6:4] - SSS) als das Rundungssteuerfeld 1254A interpretiert. Das Rundungssteuerfeld 1254A beinhaltet ein Ein-Bit-SAE-Feld 1256 und ein Zwei-Bit-Rundungsoperationsfeld 1258. Wenn das rs-Feld 1252A eine 0 enthält (Datentransformation 1252A.2), wird das Betafeld 1254 (EVEX-Byte 3, Bits [6:4] - SSS) als ein Drei-Bit-Datentransformationsfeld 1254B interpretiert. Wenn U=0 gilt und das MOD-Feld 1342 00, 01 oder 10 enthält (eine Operation mit Speicherzugriff bezeichnet), wird das Alphafeld 1252 (EVEX-Byte 3, Bit [7] - EH) als das Räumungshinweis (EH)-Feld 1252B interpretiert und wird das Betafeld 1254 (EVEX-Byte 3, Bits [6:4] - SSS) als ein Drei-Bit-Datenmanipulationsfeld 1254C interpretiert.
  • Wenn U=1 gilt, wird das Alphafeld 1252 (EVEX-Byte 3, Bit [7] - EH) als das Schreibmaskensteuer(Z)-Feld 1252C interpretiert. Wenn U=1 gilt und das MOD-Feld 1342 11 enthält (was eine Operation ohne Speicherzugriff bezeichnet), wird ein Teil des Betafelds 1254 (EVEX-Byte 3, Bit [4]- S0) als das RL-Feld 1257A interpretiert; wenn es eine 1 enthält (Runden 1257A.1), wird der Rest des Betafelds 1254 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Rundungsoperationsfeld 1259A interpretiert, während der Rest des Betafelds 1254 (EVEX-Byte 3, Bit [6-5] - S2-1) als das Vektorlängenfeld 1259B (EVEX-Byte 3, Bit [6-5] - L1-0) interpretiert wird, wenn das RL-Feld 1257A eine 0 enthält (VSIZE 1257.A2). Wenn U=1 gilt und das MOD-Feld 1342 00, 01 oder 10 enthält (was eine Operation mit Speicherzugriff bezeichnet), wird das Betafeld 1254 (EVEX-Byte 3, Bits [6:4] - SSS) als das Vektorlängenfeld 1259B (EVEX-Byte 3, Bit [6-5] - L1-0) und das Broadcast-Feld 1257B (EVEX-Byte 3, Bit [4] - B) interpretiert.
  • Registerarchitektur
  • 14 ist ein Blockdiagramm einer Registerarchitektur 1400 gemäß einer Ausführungsform. Bei der veranschaulichten Ausführungsform gibt es 32 Vektorregister 1410, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 referenziert. Die 256 Bit niedrigerer Ordnung der unteren 16 zmm-Register werden auf Register ymm0-16 überlagert. Die 128 Bit niedrigerer Ordnung der unteren 16 zmm-Register (die 128 Bit niedrigerer Ordnung der ymm-Register) werden auf Register xmm0-15 überlagert. Das spezielle vektorfreundliche Befehlsformat 1300 arbeitet auf diesen überlagerten Registerdateien, wie in den nachfolgenden Tabellen veranschaulicht ist.
    Anpassbare Vektorlänge Klasse Operationen Register
    Befehls-Templates, die das Vektorlängenfeld A ( 12A; U=0) 1210, 1215, 1225, 1230 zmm-Register (die Vektorlänge beträgt 64 Byte)
    1259B nicht enthalten B ( 12B; U = 1) 1212 zmm-Register (die Vektorlänge beträgt 64 Byte)
    Befehls-Templates, die das Vektorlängenfeld 1259B enthalten B ( 12B; U = 1) 1217, 1227 zmm-, ymm- oder xmm-Register (die Vektorlänge beträgt 64 Byte, 32 Byte oder 16 Byte), abhängig vom Vektorlängenfeld 1259B
  • Mit anderen Worten wählt das Vektorlängenfeld 1259B zwischen einer maximalen Länge und einer oder mehreren anderen, kürzeren Längen aus, wobei jede solche kürzere Länge die Hälfte der Länge der vorhergehenden Länge ist; und Befehls-Templates ohne das Vektorlängenfeld 1259B arbeiten auf der maximalen Vektorlänge. Ferner arbeiten die Klasse-B-Befehls-Templates des speziellen vektorfreundlichen Befehlsformats 1300 bei einer Ausführungsform an gepackten oder Skalargleitkommadaten mit einfacher/doppelter Genauigkeit und gepackten oder Skalarintegerdaten. Skalaroperationen sind Operationen, die an der Datenelementstelle niedrigster Ordnung in einem zmm-/ymm-/xmm-Register ausgeführt werden; die Datenelementstellen höherer Ordnung werden abhängig von der Ausführungsform entweder gleich wie vor dem Befehl belassen oder werden auf Null gesetzt.
  • Schreibmaskenregister 1415 - bei der veranschaulichten Ausführungsform gibt es 8 Schreibmaskenregister (k0 bis k7), jeweils mit einer Größe von 64 Bit. Bei einer alternativen Ausführungsform weisen die Schreibmaskenregister 1415 eine Größe von 16 Bit auf. Wie zuvor beschrieben, kann das Vektormaskenregister k0 bei einer Ausführungsform nicht als eine Schreibmaske verwendet werden; wenn die Codierung, die normalerweise k0 angeben würde, für eine Schreibmaske verwendet wird, wählt sie eine festverdrahtete Schreibmaske von 0xFFFF aus, wodurch eine Schreibmaskierung für diesen Befehl effektiv deaktiviert wird.
  • Mehrzweckregister 1425 - bei der veranschaulichten Ausführungsform gibt es sechzehn 64-Bit-Mehrzweckregister, die zusammen mit den vorhandenen x86-Adressierungsmodi verwendet werden, um Speicheroperanden zu adressieren. Diese Register werden mit den Namen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R15 bezeichnet.
  • Skalar-Gleitkomma-Stapel-Registerdatei (x87-Stapel) 1445, auf der die MMX-gepackte-Integer-Flat-Registerdatei 1450 zugwiesen wird - bei der veranschaulichten Ausführungsform ist der x87-Stapel ein Acht-Element-Stapel, der verwendet wird, um Skalargleitkommaoperationen an 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung auszuführen; dagegen werden die MMX-Register verwendet, um Operationen an 64-Bitgepackten-Integerdaten durchzuführen sowie um Operanden für manche Operationen zu halten, die zwischen MMX- und XMM-Registern 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 verschiedene Arten, für verschiedene Zwecke und in verschiedenen Prozessoren umgesetzt werden. Beispielsweise können Implementierungen solcher Kerne Folgendes beinhalten: 1) einen Mehrzweck-In-Order-Kern, der für eine Mehrzweckberechnung bestimmt ist; 2) einen Hochleistungs-Mehrzweck-Out-Of-Order-Kern, der für eine Mehrzweckberechnung bestimmt ist; 3) einen Spezialkern, der primär für Grafik und/oder wissenschaftliche (Durchsatz) Berechnung bestimmt ist. Implementierungen unterschiedlicher Prozessoren können Folgendes beinhalten: 1) eine CPU einschließlich eines oder mehrerer Mehrzweck-In-Order-Kerne, die für eine Mehrzweckberechnung bestimmt sind, und/oder eines oder mehrerer Mehrzweck-Out-Of-Order-Kerne, die für eine Mehrzweckberechnung bestimmt sind; und 2) einen Coprozessor, der einen oder mehrere Spezialkerne beinhaltet, die primär für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die Folgendes beinhalten können: 1) den Coprozessor auf einem von der CPU separaten Chip; 2) den Coprozessor auf einem separaten Die in demselben Gehäuse wie eine CPU; 3) den Coprozessor auf demselben Die wie eine CPU (wobei in diesem Fall ein solcher Coprozessor manchmal als Speziallogik, wie etwa integrierte Grafik- und/oder Wissenschaft(Durchsatz)-Logik oder als Spezialkerne bezeichnet wird); und 4) ein System auf einem Chip, das, auf demselben Die, die beschriebene CPU (manchmal als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet), den oben beschriebenen Coprozessor und zusätzliche Funktionalität beinhalten kann. Kernarchitekturen werden als Nächstes beschrieben, gefolgt von Beschreibungen von Prozessoren und Computerarchitekturen.
  • Kernarchitekturen
  • In Order- und Out-Of-Order-Kern-Blockdiagramm.
  • 15A ist ein Blockdiagramm, das sowohl eine In-Order-Pipeline als auch eine Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführung-Pipeline gemäß Ausführungsformen veranschaulicht. 15B ist ein Blockdiagramm, das sowohl eine Ausführungsform eines In-Order-Architekturkern als auch eines Registerumbenennung-Out-Of-Order-Ausgabe-/Ausführungsarchitekturkerns, der in einem Prozessor aufzunehmen ist, gemäß einer Ausführungsform veranschaulicht. Die Kästen mit durchgezogenen Linien in 15A-15B veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Hinzufügung der Kästen mit gestrichelter Linie die Registerumbenennung-Out-Of-Order-Ausgabe/Ausführung-Pipeline und den -Kern veranschaulichen. Unter der Annahme, dass der In-Order-Aspekt eine Teilmenge des Out-Of-Order-Aspekts ist, wird der Out-Of-Order-Aspekt beschrieben.
  • In 15A beinhaltet eine Prozessor-Pipeline 1500 eine Abrufstufe 1502, eine Längendecodierungsstufe 1504, eine Decodierungsstufe 1506, eine Zuweisungsstufe 1508, eine Umbenennungsstufe 1510, eine Planungsstufe (auch als eine Versand- oder Ausgabestufe bekannt) 1512, eine Registerlese-/Speicherlesestufe 1514, eine Ausführungsstufe 1516, eine Zurückschreib-/Speicherschreibstufe 1518, eine Ausnahmebehandlungsstufe 1522 und eine Commit-Stufe 1524.
  • 15B zeigt einen Prozessorkern 1590, einschließlich einer Frontend-Einheit 1530, die mit einer Ausführungs-Engine-Einheit 1550 gekoppelt ist, und beide sind mit einer Speichereinheit 1570 gekoppelt. Der Kern 1590 kann ein RISC-Kern (RISC: Reduced Instruction Set Computing - Berechnung mit reduziertem Befehlssatz), ein CISC-Kern (CISC: Complex Instruction Set Computing - Berechnung mit komplexem Befehlssatz), ein VLIW-Kern (VLIW: Very Long Instruction Word - sehr langes Befehlswort) oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 1590 ein Spezialkern, wie etwa beispielweise ein Netzwerk- oder Kommunikationskern, eine Kompressions-Engine, ein Coprozessorkern, ein GPGPU-Kern (GPGPU: General Purpose Computing Graphics Processing Unit-Mehrzweckberechnungsgrafikverarbeitungseinheit),
    Grafikkern oder dergleichen sein.
  • Die Frontendeinheit 1530 beinhaltet eine Verzweigungsvorhersageeinheit 1532, die mit einer Befehls-Cache-Einheit 1534 gekoppelt ist, die mit einem Befehlsübersetzungspuffer (TLB: Translation Lookaside Buffer) 1536 gekoppelt ist, der mit einer Befehlsabrufeinheit 1538 gekoppelt ist, die mit einer Decodierungseinheit 1540 gekoppelt ist. Die Decodierungseinheit 1540 (oder der Decoder) kann Befehle decodieren und als eine Ausgabe eine(n) oder mehrere Mikrooperationen, Mikrocodeeintragspunkte, Mikrobefehle, andere Befehle oder andere Steuersignale erzeugen, die aus den ursprünglichen Befehlen decodiert werden oder diese anderweitig wiedergeben oder aus diesen abgeleitet werden. Die Decodierungseinheit 1540 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen beinhalten unter anderem Nachschlagetabellen, Hardwareimplementierungen, programmierbare Logikarrays (PLAs), Mikrocode-Nurlesespeicher (ROMs) usw. Bei einer Ausführungsform beinhaltet der Kern 1590 einen Mikrocode-ROM oder ein anderes Medium, das einen Mikrocode für gewisse Makrobefehle speichert (z. B. in der Decodierungseinheit 1540 oder anderweitig innerhalb der Frontend-Einheit 1530). Die Decodierungseinheit 1540 ist mit einer Umbenennungs-/Zuweisereinheit 1552 in der Ausführungs-Engine-Einheit 1550 gekoppelt.
  • Die Ausführungs-Engine-Einheit 1550 beinhaltet die Umbenennungs-/Zuweisereinheit 1552, die mit einer Rückzugseinheit 1554 und einem Satz einer oder mehrerer Planereinheiten 1556 gekoppelt ist. Die Planereinheit(en) 1556 repräsentiert eine beliebige Anzahl unterschiedlicher Planer, einschließlich Reservierungsstationen, eines zentralen Befehlsfensters usw. Die Planereinheit(en) 1556 ist mit der (den) physischen Registerdatei(en)-Einheit(en) 1558 gekoppelt. Jede der physischen Registerdatei(en)-Einheiten 1558 repräsentiert eine oder mehrere physische Registerdateien, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie etwa Skalarinteger, Skalargleitkomma, gepackter Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. Bei einer Ausführungsform umfasst die physische Registerdatei(en)-Einheit 1558 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Mehrzweckregister bereitstellen. Die physische(n) Registerdatei(en)-Einheit(en) 1558 ist (sind) durch die Rückzugseinheit 1554 überlappt, um verschiedene Wege zu veranschaulichen, auf die eine Registerumbenennung und Out-Of-Order-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Umsortierungspuffer und einer oder mehrerer Rückzugsregisterdateien; unter Verwendung einer oder mehrerer zukünftiger Registerdateien, eines oder mehrerer Verlaufspuffer und einer oder mehrerer Rückzugsregisterdateien; unter Verwendung einer Registerzuordnung und eines Pools von Registern usw.). Die Rückzugseinheit 1554 und die physikalischen Registerdatei(en)-Einheit(en) 1558 sind mit dem (den) Ausführungs-Cluster(n) 1560 gekoppelt. Der (die) Ausführungs-Cluster 1560 beinhaltet (beinhalten) einen Satz einer oder mehreren Ausführungseinheiten 1562 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 1564. Die Ausführungseinheiten 1562 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Typen von Daten (z. B. Skalargleitkomma, gepackter Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma) durchführen. Obwohl manche Ausführungsformen eine Anzahl an Ausführungseinheiten beinhalten können, die für spezielle Funktionen oder Sätze von Funktionen dediziert sind, beinhalten andere Ausführungsformen möglicherweise nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die allesamt alle Funktionen durchführen. Die Planereinheit(en) 1556, die physischen Registerdatei(en)-Einheit(en) 1558 und der (die) Ausführungs-Cluster 1560 sind als möglicherweise mehrere gezeigt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erschaffen (z. B. eine Pipeline für Skalarinteger, eine Pipeline für Skalargleitkomma/gepackter Integer/gepacktes Gleitkomma/Vektorinteger/Vektorgleitkomma und/oder eine Speicherzugriffs-Pipeline, die jeweils ihre/n eigene/n Planereinheit, physische Registerdatei(en)-Einheit und/oder Ausführungs-Cluster aufweisen - und im Fall einer separaten Speicherzugriffs-Pipeline sind bestimmte Ausführungsformen implementiert, in denen nur der Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 1564 aufweist). Es versteht sich auch, dass, wenn separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-Of-Order-Ausgabe/-Ausführung und der Rest In-Order sein können.
  • Der Satz von Speicherzugriffseinheiten 1564 ist mit der Speichereinheit 1570 gekoppelt, die eine Daten-TLB-Einheit 1572 beinhaltet, die mit einer Daten-Cache-Einheit 1574 gekoppelt ist, die mit einer Level-2(L2)-Cache-Einheit 1576 gekoppelt ist. Bei einer Ausführungsform können die Speicherzugriffseinheiten 1564 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit beinhalten, die jeweils mit der Daten-TLB-Einheit 1572 in der Speichereinheit 1570 gekoppelt sind. Die Befehls-Cache-Einheit 1534 ist ferner mit einer Level-2(L2)-Cache-Einheit 1576 in der Speichereinheit 1570 gekoppelt. Die L2-Cache-Einheit 1576 ist mit einem oder mehreren anderen Leveln des Caches und schließlich mit einem Hauptspeicher gekoppelt.
  • Beispielsweise kann die Registerumbenennungs-Out-Of-Order-Ausgabe/-Ausführungs-Kernarchitektur die Pipeline 1500 wie folgt implementieren: 1) der Befehlsabruf 1538 führt die Abruf- und Längendecodierungsstufen 1502 und 1504 durch; 2) die Decodierungseinheit 1540 führt die Decodierungsstufe 1506 durch; 3) die Umbenennung/Zuweiser-Einheit 1552 führt die Zuweisungsstufe 1508 und die Umbenennungsstufe 1510 durch; 4) die Planereinheit(en) 1556 führt (führen) die Planungsstufe 1512 durch; 5) die physische(n) Registerdatei(en)-Einheit(en) 1558 und die Speichereinheit 1570 führen die Registerlese-/Speicherlesestufe 1514 durch; die Ausführungs-Cluster 1560 führen die Ausführungsstufe 1516 durch; 6) die Speichereinheit 1570 und die physische(n) Registerdatei(en)-Einheit(en) 1558 führen die Rückschreib-/Speicherschreibstufe 1518 durch; 7) verschiedene Einheiten können bei der Fehlerbehandlungsstufe 1522 beteiligt sein; und 8) die Rückzugseinheit 1554 und die physische(n) Registerdatei(en)-Einheit(en) 1558 führen die Commit-Stufe 1524 durch.
  • Der Kern 1590 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, CA, USA; den ARM-Befehlssatz (mit optional zusätzlichen Erweiterungen, wie etwa NEON) von ARM Holdings in Sunnyvale, CA, USA), einschließlich des (der) hier beschriebenen Befehls (Befehle). Bei einer Ausführungsform weist der Kern 1590 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 Multimediaanwendungen verwendeten Operationen unter Verwenden gepackter Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführen von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies auf vielfältige Weisen vornehmen kann, einschließlich Zeitscheiben-Multithreading, Simultan-Multithreading (wobei ein einzelner physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Multithreading behandelt), oder eine Kombination daraus (z. B. Zeitscheiben-Abruf und -Decodierung und simultanes Multithreading danach, wie etwa bei der Hyperthreading-Technologie von Intel®).
  • Obwohl 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 1534/1574 und eine gemeinsame L2-Cache-Einheit 1576 beinhaltet, können alternative Ausführungsformen einen einzelnen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie etwa zum Beispiel einen internen Level-1(L1)-Cache, oder mehrere interne Levels des Caches. Bei manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der extern bezüglich des Kerns und/oder des Prozessors ist, beinhalten. Alternativ dazu kann sich der gesamte Cache extern bezüglich des Kerns und/oder des Prozessors befinden.
  • Spezielle In-Order-Kernarchitektur
  • 16A-16B veranschaulichen ein Blockdiagramm einer spezielleren In-Order-Kernarchitektur, wobei der Kern einer von einigen Logikblöcken (einschließlich anderer Kernen des gleichen Typs und/oder verschiedener Typen) in einem Chip wäre. Die Logikblöcke kommunizieren über ein Zwischenverbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einer gewissen Festfunktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik in Abhängigkeit von der Anwendung.
  • 16A ist ein Blockdiagramm eines Einzelprozessorkerns zusammen mit seiner Verbindung zum On-Die-Zwischenverbindungsnetzwerk 1602 und seinem lokalen Teilsatz des Level-2 (L2-) -Caches 1604 gemäß einer Ausführungsform. Bei einer Ausführungsform unterstützt ein Befehlsdecodierer 1600 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 1606 ermöglicht Zugriffe mit niedriger Latenz auf einen Cache-Speicher in die Skalar- und Vektoreinheiten. Obwohl bei einer Ausführungsform (zum Vereinfachen der Gestaltung) eine Skalareinheit 1608 und eine Vektoreinheit 1610 separate Registersätze (Skalarregister 1612 bzw. Vektorregister 1614) verwenden und Daten, die zwischen ihnen transferiert werden, in Speicher geschrieben und dann in einen Level-1(L1)-Cache 1606 zurückgelesen werden, können alternative Ausführungsformen einen anderen Ansatz verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad beinhalten, der ermöglicht, dass Daten zwischen den zwei Registerdateien transferiert werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 1604 ist Teil eines globalen L2-Caches, der in separate lokale Teilsätze, einen je Prozessorkern, unterteilt ist. Jeder Prozessorkern weist einen Direktzugriffspfad zu seinem eigenen lokalen Teilsatz des L2-Caches 1604 auf. Durch einen Prozessorkern gelesene Daten werden in seinem L2-Cache-Teilsatz 1604 gespeichert und es kann schnell auf diesen zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Durch einen Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Teilsatz 1604 gespeichert und werden bei Bedarf aus anderen Teilsätzen geleert. Das Ringnetzwerk stellt eine Kohärenz der gemeinsam genutzten Daten sicher. Das Ringnetzwerk ist bidirektional, um Agenten, wie etwa Prozessorkernen, L2-Caches und anderen Logikblöcken, zu ermöglichen, innerhalb des Chips miteinander zu kommunizieren. Jeder Ringdatenpfad ist je Richtung 1012 Bit breit.
  • 16B ist eine erweiterte Ansicht eines Teils des Prozessorkerns in 16A gemäß einer Ausführungsform. 16B beinhaltet einen L1-Daten-Cache 1606A, der Teil des L1-Caches 1604 ist, sowie mehr Einzelheiten hinsichtlich der Vektoreinheit 1610 und der Vektorregister 1614. Insbesondere ist die Vektoreinheit 1610 eine 16-breite Vektorverarbeitungseinheit (VPU: Vector Processing Unit) (siehe die 16-breite ALU 1628), die einen oder von Integerbefehlen, Gleitkommabefehlen mit einfacher Genauigkeit und Gleitkommabefehlen mit doppelter Genauigkeit ausführt. Die VPU unterstützt Swizzling der Registereingänge mit einer Swizzle-Einheit 1620, numerische Konvertierung mit numerischen Konvertierungseinheiten 1622AB und Replikation mit einer Replikationseinheit 1624 auf dem Speichereingang. Schreibmaskenregister 1626 ermöglichen das Vorhersagen resultierender Vektorschreibvorgänge.
  • 17 ist ein Blockdiagramm eines Prozessors 1700, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafiken aufweisen kann, gemäß Ausführungsformen. Die Kästen mit durchgezogenen Linien in 17 veranschaulichen einen Prozessor 1700 mit einem einzigen Kern 1702A, einem Systemagenten 1710, einem Satz aus einer oder mehreren Bussteuereinheiten 1716, während die optionale Hinzufügung der Kästen mit gestrichelten Linien einen alternativen Prozessor 1700 mit mehreren Kernen 1702A-N, einem Satz aus einer oder mehreren integrierten Speichersteuereinheiten 1714 in der Systemagenteneinheit 1710 und einer Speziallogik 1708 veranschaulicht.
  • Dementsprechend können unterschiedliche Implementierungen des Prozessors 1700 Folgendes beinhalten: 1) eine CPU mit der Speziallogik 1708, die eine integrierte Grafik- und/oder Wissenschaft(Durchsatz)-Logik ist (die einen oder mehrere Kerne beinhalten kann), und wobei die Kerne 1702A-N ein oder mehrere Mehrzweckkerne sind (z. B. Mehrzweck-in-Order-Kerne, Mehrzweck-Out-Of-Order-Kerne, eine Kombination aus beiden); 2) einen Coprozessor mit den Kernen 1702A-N, die eine große Anzahl an Spezialzweckkernen sind, die primär für Grafik und/oder Wissenschaft (Durchsatz) beabsichtigt sind; und 3) einen Coprozessor mit den Kernen 1702A-N, der eine große Anzahl an Mehrzweck-In-Order-Kernen ist. Dementsprechend kann der Prozessor 1700 ein Mehrzweckprozessor, ein Coprozessor oder Spezialprozessor, wie etwa ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU (Mehrzweckgrafikverarbeitungseinheit), ein Hochdurchsatz-MIC-Coprozessor (MIC: Many Integrated Core - viele integrierte Kerne) (der 30 oder mehr Kerne beinhaltet), ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1700 kann ein Teil eines oder mehrerer Substrate unter Verwendung einer beliebigen Anzahl an Prozesstechnologien, wie etwa, beispielsweise, BiCMOS, CMOS oder NMOS, sein und/oder kann darauf implementiert sein.
  • Die Speicherhierarchie umfasst eine oder mehrere Ebenen eines Caches innerhalb der Kerne, einen Satz von oder eine oder mehrere geteilte Cache-Einheiten 1706 und einen (nicht gezeigten) externen Speicher, der mit dem Satz integrierter Speichersteuereinheiten 1714 gekoppelt ist. Der Satz geteilter Cache-Einheiten 1706 kann einen oder mehrere Mid-Level-Caches beinhalten, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen daraus. Obwohl bei einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1712 die integrierte Grafiklogik 1708, den Satz geteilter Cache-Einheiten 1706 und die Systemverwaltungseinheit 1710/integrierte Speichersteuereinheit(en) 1714 miteinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl bereits bekannter Techniken zum Verbinden derartiger Einheiten miteinander verwenden. Bei einer Ausführungsform wird eine Kohärenz zwischen einer oder mehreren Cache-Einheiten 1704A-N und Kernen 1702A-N beibehalten.
  • Bei manchen Ausführungsformen sind einer oder mehrere der Kerne 1702A-N zum Multithreading fähig. Der Systemagent 1710 beinhaltet jene Komponenten, die die Kerne 1702A-N koordinieren und betreiben. Die Systemagentenheinheit 1710 kann zum Beispiel eine Leistungssteuereinheit (PCU: Power Control Unit) und eine Anzeigeeinheit beinhalten. Die PCU kann eine Logik und Komponenten, die zum Regeln des Leistungszustands der Kerne 1702A-N und der integrierten Grafiklogik 1708 benötigt werden, sein oder beinhalten. Die Anzeigeeinheit dient dem Ansteuern einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 1702A-N können hinsichtlich eines Architekturbefehlssatzes homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 1702A-N können zur Ausführung des gleichen Befehlssatzes fähig sein, während andere zum Ausführen nur eines Teilsatzes jenes Befehlssatzes oder eines anderen Befehlssatzes fähig sein können.
  • Computerarchitekturen
  • 18-21 sind Blockdiagramme von Computerarchitekturen. Andere Systemgestaltungen und Konfigurationen, die in der Technik für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, Digitalsignalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Mobiltelefone, portable Medienabspieler, tragbare Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Allgemein ist eine große Vielzahl an Systemen oder elektronischen Vorrichtungen allgemein geeignet, die zum Einbinden eines Prozessors und/oder anderer Ausführungslogik, wie hier offenbart, fähig sind.
  • Nun unter Bezugnahme auf 18 ist ein Blockdiagramm eines Systems 1800 gemäß einer Ausführungsform gezeigt. Das System 1800 kann einen oder mehrere Prozessoren 1810, 1815 beinhalten, die mit einem Steuerung-Hub 1820 gekoppelt sind. Bei einer Ausführungsform beinhaltet das Steuerung-Hub 1820 einen Grafikspeichersteuerung-Hub (GMCH: Graphics Memory Controller Hub) 1890 und einen Eingabe/Ausgabe-HUB (EAH) 1850 (die auf getrennten Chips sein können); der GMCH 1890 beinhaltet Speicher- und Grafiksteuerungen, mit denen ein Speicher 1840 und ein Coprozessor 1845 gekoppelt sind; der EAH 1850 koppelt Eingabe/Ausgabe(E/A)-Vorrichtungen 1860 mit dem GMCH 1890. Alternativ dazu sind der Speicher und/oder die Grafiksteuerungen innerhalb des Prozessors integriert (wie hier beschrieben), sind der Speicher 1840 und der Coprozessor 1845 direkt mit dem Prozessor 1810 gekoppelt und ist der Steuerung-Hub 1820 in einem einzigen Chip mit dem IOH 1850.
  • Die optionale Natur zusätzlicher Prozessoren 1815 ist in 18 mit gestrichelten Linien gekennzeichnet. Jeder Prozessor 1810, 1815 kann einen oder mehrere der hier beschriebenen Prozessorkerne beinhalten und kann eine Version des Prozessors 1700 sein.
  • Der Speicher 1840 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM), ein Phasenwechselspeicher (PCM) oder eine Kombination aus den beiden sein. Für wenigstens eine Ausführungsform kommuniziert der Steuerung-Hub 1820 mit dem (den) Prozessor(en) 1810, 1815 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie etwa QuickPath-Interconnect (QPI), oder eine ähnliche Verbindung 1895.
  • Bei einer Ausführungsform ist der Coprozessor 1845 ein Spezialprozessor, wie etwa zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompression-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Steuerung-Hub 1820 einen integrierten Grafikbeschleuniger beinhalten.
  • Es kann eine Vielzahl an Unterschieden zwischen den physischen Ressourcen 1810, 1815 in Bezug auf ein Spektrum von Leistungsmetriken, einschließlich Architektur-, Mikroarchitektur-, Wärme-, Leistungsverbrauchscharakteristiken und dergleichen, geben.
  • Bei einer Ausführungsform führt der Prozessor 1810 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1810 erkennt diese Coprozessorbefehle als von einem Typ, der vom verbundenen Coprozessor 1845 ausgeführt werden soll. Entsprechend gibt der Prozessor 1810 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle repräsentieren) auf einem Coprozessorbus oder einer anderen Zwischenverbindung an den Coprozessor 1845 aus. Der/die Coprozessor(en) 1845 nehmen die empfangenen Coprozessorbefehle an und führen diese aus.
  • Nun unter Bezugnahme auf 19 ist ein Blockdiagramm eines ersten spezielleren Systems 1900 gemäß einer Ausführungsform gezeigt. Wie in 19, gezeigt, ist das Mehrprozessorsystem 1900 ein Punkt-zu-Punkt-Zwischenverbindungssystem und beinhaltet einen ersten Prozessor 1970 und einen zweiten Prozessor 1980, die über eine Punkt-zu-Punkt-Zwischenverbindung 1950 gekoppelt sind. Jeder der Prozessoren 1970 und 1980 kann irgendeine Version des Prozessors 1700 sein. Bei einer Ausführungsform sind die Prozessoren 1970 und 1980 die Prozessoren 1810 bzw. 1815, während der Coprozessor 1938 der Coprozessor 1845 ist. Bei einer anderen Ausführungsform sind die Prozessoren 1970 und 1980 der Prozessor 1810 bzw. der Coprozessor 1845.
  • Die Prozessoren 1970 und 1980 sind einschließlich IMC-Einheiten (IMC: Integrated Memory Controller - Integrierte Speichersteuerung) 1972 bzw. 1982 gezeigt. Der Prozessor 1970 beinhaltet als Teil seiner Bussteuerungseinheiten auch Punkt-zu-Punkt(P-P)-Schnittstellen 1976 und 1978; gleichermaßen beinhaltet der zweite Prozessor 1980 P-P-Schnittstellen 1986 und 1988. Die Prozessoren 1970, 1980 können Daten über eine Punkt-zu-Punkt(P-P)-Schnittstelle 1950 unter Verwendung von P-P-Schnittstellenschaltkreisen 1978, 1988 austauschen. Wie in 19 gezeigt, koppeln die IMCs 1972 und 1982 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1932 und einem Speicher 1934, die Teile eines lokal an die jeweiligen Prozessoren angeschlossenen Hauptspeichers sein können.
  • Die Prozessoren 1970, 1980 können jeweils Informationen über individuelle P-P-Schnittstellen 1952, 1954 mit einem Chipsatz 1990 unter Verwendung von Punkt-zu-Punkt-Schnittstellen-Schaltkreisen 1976, 1994, 1986, 1998 austauschen. Der Chipsatz 1990 kann optional Information mit dem Coprozessor 1938 über eine Hochleistungsschnittstelle 1939 austauschen. Bei einer Ausführungsform ist der Coprozessor 1938 ein Spezialprozessor, wie etwa zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompression-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein (nicht gezeigter) geteilter Cache kann in beiden Prozessoren oder außerhalb beider Prozessoren enthalten sein, jedoch über eine P-P-Zwischenverbindung mit den Prozessoren verbunden sein, so dass lokale Cache-Informationen von einem der Prozessoren oder beiden in dem geteilten Cache gespeichert werden können, falls ein Prozessor in einen Niederleistungsmodus gesetzt wird.
  • Der Chipsatz 1990 kann mit einem ersten Bus 1916 über eine Schnittstelle 1996 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1916 ein Peripheral-Component-Interconnect(PCI-)Bus oder ein Bus, wie zum Beispiel ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Erzeugung, sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
  • Wie in 19 gezeigt, können verschiedene E/A-Vorrichtungen 1914 zusammen mit einer Busbrücke 1918, die den ersten Bus 1916 mit einem zweiten Bus 1920 koppelt, mit dem ersten Bus 1916 gekoppelt sein. Bei einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1915, wie etwa Coprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPUs, Beschleuniger (wie etwa z. B. Grafikbeschleuniger oder Digitalsignalverarbeitung(DSP)-Einheiten), feldprogrammierbare Gatterarrays oder beliebige andere Prozessoren, mit dem ersten Bus 1916 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1920 ein LPC-Bus (LPC: Low Pin Count - niedrige Pinzahl) sein. Verschiedene Vorrichtungen können mit einem zweiten Bus 1920 gekoppelt sein, einschließlich zum Beispiel einer Tastatur und/oder einer Maus 1922, Kommunikationsvorrichtungen 1927 und einer Speichereinheit 1928, wie etwa eines Diskettenlaufwerks oder einer anderen Massenspeichervorrichtung, die bei einer Ausführungsform Befehle/Code und Daten 1930 enthalten kann. Ferner kann eine Audio-E/A 1924 mit dem zweiten Bus 1920 gekoppelt sein. Es sei angemerkt, dass andere Architekturen möglich sind. Zum Beispiel kann ein System an Stelle der Punkt-zu-Punkt-Architektur aus 19 einen Multi-Drop-Bus oder eine andere solche Architektur implementieren.
  • Nun unter Bezugnahme auf 20 ist ein Blockdiagramm eines zweiten spezielleren Systems 2000 gemäß einer Ausführungsform gezeigt. Gleiche Elemente in 19 und 20 tragen gleiche Bezugszeichen, und gewisse Aspekte von 19 wurden in 20 ausgelassen, um eine Verschleierung anderer Aspekten aus 20 zu verhindern.
  • 20 veranschaulicht, dass die Prozessoren 1970, 1980 eine integrierte Speicher- und E/A-Steuerlogik („CL“: Control Logic) 1972 bzw. 1982 beinhalten können. Dementsprechend beinhaltet die CL 1972, 1982 integrierte Speichersteuereinheiten und beinhaltet eine E/A-Steuerlogik. 20 veranschaulicht, dass nicht nur die Speicher 1932, 1934 mit der CL 1972, 1982 gekoppelt sind, sondern auch, dass die E/A-Vorrichtungen 2014 ebenfalls mit der Steuerlogik 1972, 1982 gekoppelt sind. Legacy-E/A-Vorrichtungen 2015 sind mit dem Chipsatz 1990 gekoppelt.
  • Nun unter Bezugnahme auf 21 ist ein Blockdiagramm eines SoC 2100 gemäß einer Ausführungsform gezeigt. Gleiche Elemente in 17 tragen gleiche Bezugsziffern. Außerdem sind Kästchen mit gestrichelten Linien optionale Merkmale auf fortschrittlicheren SoC. In 21 ist (sind) (eine) Zwischenverbindungseinheit(en) 2102 mit Folgendem gekoppelt: einem Anwendungsprozessor 2110, der einen Satz aus einem oder mehreren Kernen 1702A-N mit integrierten Cache-Einheiten 1704A-N und (eine) geteilte Cache-Einheit(en) 1706 beinhaltet; einer Systemagenteneinheit 1710; (einer) Bussteuereinheit(en) 1716; (einer) integrierten Speichersteuereinheit(en) 1714; einem Satz aus einem oder mehreren Coprozessoren 2120, die eine integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor beinhalten können; einer SRAM-Einheit (SRAM: Static Random Access Memory - statischer Direktzugriffsspeicher) 2130; einer DMA-Einheit (DMA: Direct Memory Access - direkter Speicherzugriff) 2132; und einer Anzeigeeinheit 2140 zum Koppeln mit einer oder mehreren externen Anzeigen. Bei einer Ausführungsform beinhaltet (beinhalten) der(die) Coprozessor(en) 2120 einen Spezialprozessor, wie etwa zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert sein, die bzw. der auf programmierbaren Systemen ausgeführt werden/wird, die wenigstens einen Prozessor, ein Speicherungssystem (einschließlich flüchtigen und nichtflüchtigen Speichers und/oder Speicherungselemente), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie etwa ein in 19 veranschaulichter Code 1930, kann angewandt werden, um Befehle zum Durchführen der hier beschriebenen Funktionen einzugeben und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf eine oder mehrere Ausgabevorrichtungen auf bereits bekannte Weise angewandt werden. Zu Zwecken dieser Anmeldung beinhaltet ein Verarbeitungssystem ein beliebiges System, das einen Prozessor aufweist, wie etwa zum Beispiel einen Digitalsignalprozessor (DSP), einen Mikrocontroller, einen anwendungsspezifischen integrierte Schaltkries (ASIC: Application Specific Integrated Circuit) oder einen Mikroprozessor.
  • Der Programmcode kann in einer prozeduralen oder objektorientierten höheren Programmiersprache implementiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hier beschriebenen Mechanismen in ihrem Schutzumfang auf keine spezielle Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform können durch repräsentative Befehle, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken innerhalb des Prozessors repräsentiert, implementiert sein, welche, wenn sie durch eine Maschine gelesen werden, die Maschine dazu veranlassen, eine Logik zum Durchführen der hier beschriebenen Techniken zu fabrizieren. Solche Repräsentationen, die als „IP-Kerne“ bekannt sind, können auf einem greifbaren maschinenlesbaren Medium gespeichert sein und an verschiedene Kunden oder Herstellungsanlagen geliefert werden, um sie in die Fertigungsmaschinen zu laden, welche die Logik oder den Prozessor tatsächlich erzeugen.
  • Solche maschinenlesbaren Speichermedien können unter anderem nichtflüchtige greifbare Anordnungen von Artikeln, die durch eine Maschine oder eine Vorrichtung hergestellt oder gebildet werden, beinhalten, einschließlich Speichermedien, wie etwa Festplatten, oder einer beliebigen anderen Art von Disk, einschließlich Floppy-Disketten, optischer Disks, CD-ROMs (Compact Disc Read-Only Memories), CD-RWs (Compact Disk Rewritables) und magnetooptischer Disks, Halbleitervorrichtungen, wie etwa ROMs (Read-Only Memories), RAMs (Random Access Memories), wie etwa DRAMs (Dynamic Random Access Memories), SRAMs (Static Random Access Memories), EPROMs (Erasable Programmable Read-Only Memories), Flash-Speichern, EEPROMs (Electrically Erasable Programmable Read-Only Memories), PCM (Phase Change Memory), magnetischer oder optischer Karten oder irgendeines anderen Typs von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Entsprechend beinhalten Ausführungsformen der Erfindung auch nichtflüchtige greifbare maschinenlesbare Medien, die Befehle enthalten oder Gestaltungsdaten enthalten, wie etwa Hardwarebeschreibungssprache (HDL: Hardware Description Language), die Strukturen, Schaltkreise, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert, die hier beschrieben sind. Solche Ausführungsformen können als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In manchen Fällen kann ein Befehlskonverter verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Beispielsweise kann der Befehlskonverter einen Befehl in einen oder mehrere andere Befehle, die durch den Kern zu verarbeiten sind, übersetzen (z. B. unter Verwendung statischer Binärübersetzung, dynamischer Binärübersetzung einschließlich dynamischer Kompilation), umformen, emulieren oder anderweitig konvertieren. Der Befehlskonverter kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlskonverter kann sich auf einem Prozessor, außerhalb eines Prozessors befinden oder teilweise auf und teilweise außerhalb eines Prozessors sein.
  • 22 ist ein Blockdiagramm, das die Verwendung eines Softwarebefehlskonverters zum Konvertieren binärer Befehle in einem Quellenbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen gegenüberstellt. Bei der veranschaulichten Ausführungsform ist der Befehlskonverter ein Softwarebefehlskonverter, obwohl alternativ dazu der Befehlskonverter in Software, Firmware, Hardware oder verschiedenen Kombinationen daraus implementiert werden kann. 22 zeigt, dass ein Programm in einer höheren Sprache 2202 unter Verwendung eines x86-Compilers 2204 kompiliert werden kann, um einen x86-Binärcode 2206 zu erzeugen, der von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 2216 nativ ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 2216 repräsentiert einen beliebigen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem er (1) einen wesentlichen Teil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die zum Laufen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern vorgesehen ist, kompatibel ausführt oder anderweitig verarbeitet, um im Wesentlichen das gleiche Ergebnis wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 2204 repräsentiert einen Compiler, welcher dazu funktionsfähig ist, x86-Binärcode 2206 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit wenigstens einem x86-Befehlssatzkern 2216 ausgeführt werden kann. Gleichermaßen zeigt 22, dass das Programm in der höheren Sprache 2202 unter Verwendung eines Alternativbefehlssatz-Compilers 2208 kompiliert werden kann, um den Alternativbefehlssatzbinärcode 2210 zu erzeugen, der von einem Prozessor ohne wenigstens einen x86-Befehlssatzkern 2214 (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 2212 wird verwendet, um den x86-Binärcode 2206 in einen Code umzuwandeln, der durch den Prozessor ohne einen x86-Befehlssatz-Kern 2214 nativ ausgeführt werden kann. Es ist nicht wahrscheinlich, dass dieser konvertierte Code gleich dem Alternativbefehlssatzbinärcode 2210 ist, weil ein Befehlskonverter, der hierzu in der Lage ist, schwer zu fertigen ist; der konvertierte Code erzielt jedoch die allgemeine Operation und besteht aus Befehlen aus dem alternativen Befehlssatz. Dementsprechend repräsentiert der Befehlskonverter 2212 Software, Firmware, Hardware oder eine Kombination daraus, die durch Emulation, Simulation oder einen beliebigen anderen Prozess ermöglicht, dass ein Prozessor oder eine andere elektronische Vorrichtung, der/die keinen x86-Befehlssatz-Prozessor oder -Kern aufweist, den x86-Binärcode 2206 ausführt.
  • Zusätzliche Anmerkungen & Beispiele:
  • Beispiel 1 ist eine Verarbeitungsschaltungsanordnung zur Computerspeicherverwaltung, wobei die Verarbeitungsschaltungsanordnung Folgendes umfasst: eine Speicherreduzierungsschaltungsanordnung zum Implementieren einer Speicherreduzierungstechnik; und eine Referenzzählungsinformationssammlungs-Schaltungsanordnung für Folgendes: Zugreifen auf ein Speichergebiet, wobei das Speichergebiet der Speicherreduzierungstechnik unterzogen wird; Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets; Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.
  • In Beispiel 2 beinhaltet der Gegenstand aus Beispiel 1, dass das Speichergebiet eine Speicherseite ist.
  • In Beispiel 3 beinhaltet der Gegenstand aus Beispielen 1-2, dass die Speicherreduzierungstechnik eine Speicherdeduplizierung beinhaltet.
  • In Beispiel 4 beinhaltet der Gegenstand aus Beispiel 3, dass die Indikation einer Speicherreduzierung eine Referenzzählung ist, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 5 beinhaltet der Gegenstand aus Beispiel 4, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Erhalten der Indikation einer Speicherreduzierung von Cache-Zeilen zu Folgendem ausgelegt ist: Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  • In Beispiel 6 beinhaltet der Gegenstand aus Beispielen 4-5, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Erhalten einer Speicherreduzierung des Speichergebiets zu Folgendem ausgebildet ist: Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  • In Beispiel 7 beinhaltet der Gegenstand aus Beispielen 4-6, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Erhalten der Indikation einer Speicherreduzierung des Speichergebiets zu Folgendem ausgelegt ist: Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  • In Beispiel 8 beinhaltet der Gegenstand aus Beispielen 4-7, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, zu Folgendem ausgelegt ist: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  • In Beispiel 9 beinhaltet der Gegenstand aus Beispielen 4-8, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, zu Folgendem ausgelegt ist: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  • In Beispiel 10 beinhaltet der Gegenstand aus Beispielen 4-9, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, zu Folgendem ausgelegt ist: Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  • In Beispiel 11 beinhaltet der Gegenstand aus Beispielen 4-10, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, zu Folgendem ausgelegt ist: Berechnen einer Summe von Referenzzählungen für diese Cache-Zeilen.
  • In Beispiel 12 beinhaltet der Gegenstand aus Beispielen 4-11, dass die Referenzzählungsinformationssammlungs-Schaltungsanordnung zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, zu Folgendem ausgelegt ist: Berechnen einer Durchschnittsreferenzzählung für diese Cache-Zeilen.
  • In Beispiel 13 beinhaltet der Gegenstand aus Beispielen 1-12, dass die Speicherreduzierungstechnik eine Datenkompression beinhaltet.
  • In Beispiel 14 beinhaltet der Gegenstand aus Beispiel 13, dass die Indikation einer Speicherreduzierung eine Kompressionsmenge ist, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 15 beinhaltet der Gegenstand aus Beispielen 1-14, dass das Speichergebiet eine Seite ist, und wobei die Speicherverwaltungsmechanismen Paging-Mechanismen umfassen.
  • Beispiel 16 ist ein Verfahren zur Computerspeicherverwaltung, wobei das Verfahren Folgendes umfasst: Zugreifen, von einer Verarbeitungsschaltungsanordnung in einem Speichergebiet, auf das Speichergebiet, das einer Speicherreduzierungstechnik unterzogen wird; Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets; Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.
  • In Beispiel 17 beinhaltet der Gegenstand aus Beispiel 16, dass das Speichergebiet eine Speicherseite ist.
  • In Beispiel 18 beinhaltet der Gegenstand aus Beispielen 16-17, dass die Speicherreduzierungstechnik eine Speicherdeduplizierung beinhaltet.
  • In Beispiel 19 beinhaltet der Gegenstand aus Beispiel 18, dass die Indikation einer Speicherreduzierung eine Referenzzählung ist, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 20 beinhaltet der Gegenstand aus Beispiel 19, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  • In Beispiel 21 beinhaltet der Gegenstand aus Beispielen 19-20, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  • In Beispiel 22 beinhaltet der Gegenstand aus Beispielen 19-21, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  • In Beispiel 23 beinhaltet der Gegenstand aus Beispielen 19-22, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  • In Beispiel 24 beinhaltet der Gegenstand aus Beispielen 19-23, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  • In Beispiel 25 beinhaltet der Gegenstand aus Beispielen 19-24, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  • In Beispiel 26 beinhaltet der Gegenstand aus Beispielen 19-25, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Summe von Referenzzählungen für die Cache-Zeilen.
  • In Beispiel 27 beinhaltet der Gegenstand aus Beispielen 19-26, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Durchschnittsreferenzzählung für die Cache-Zeilen.
  • In Beispiel 28 beinhaltet der Gegenstand aus Beispielen 16-27, dass die Speicherreduzierungstechnik eine Datenkompression beinhaltet.
  • In Beispiel 29 beinhaltet der Gegenstand aus Beispiel 28, dass die Indikation einer Speicherreduzierung eine Kompressionsmenge ist, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 30 beinhaltet der Gegenstand aus Beispielen 16-29, dass das Speichergebiet eine Seite ist, und wobei die Speicherverwaltungsmechanismen Paging-Mechanismen umfassen.
  • Beispiel 31 ist ein maschinenlesbares Medium bzw. maschinenlesbare Medien, die Befehle beinhalten, die, wenn sie durch eine Maschine ausgeführt werden, bewirken, dass die Maschine Operationen beliebiger der Verfahren aus den Beispielen 16-30 durchführt.
  • Beispiel 32 ist eine Vorrichtung, die Mittel zum Durchführen beliebiger der Verfahren der Beispiele 16-30 umfasst.
  • Beispiel 33 ist eine Vorrichtung zur Computerspeicherverwaltung, wobei die Vorrichtung Folgendes umfasst: ein Mittel zum Zugreifen auf ein Speichergebiet, wobei das Speichergebiet einer Speicherreduzierungstechnik unterzogen wird; ein Mittel zum Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets; ein Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und ein Mittel zum Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.
  • In Beispiel 34 beinhaltet der Gegenstand aus Beispiel 33, dass das Speichergebiet eine Speicherseite ist.
  • In Beispiel 35 beinhaltet der Gegenstand aus Beispielen 33-34, dass die Speicherreduzierungstechnik eine Speicherdeduplizierung beinhaltet.
  • In Beispiel 36 beinhaltet der Gegenstand aus Beispiel 35, dass die Indikation einer Speicherreduzierung eine Referenzzählung ist, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 37 beinhaltet der Gegenstand aus Beispiel 36, dass das Mittel zum Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: ein Mittel zum Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  • In Beispiel 38 beinhaltet der Gegenstand aus Beispielen 36-37, dass das Mittel zum Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: ein Mittel zum Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  • In Beispiel 39 beinhaltet der Gegenstand aus Beispielen 36-38, dass das Mittel zum Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: ein Mittel zum Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  • In Beispiel 40 beinhaltet der Gegenstand aus Beispielen 36-39, dass das Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: ein Mittel zum Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  • In Beispiel 41 beinhaltet der Gegenstand aus Beispielen 36-40, dass das Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: ein Mittel zum Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  • In Beispiel 42 beinhaltet der Gegenstand aus Beispielen 36-41, dass das Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: ein Mittel zum Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  • In Beispiel 43 beinhaltet der Gegenstand aus Beispielen 36-42, dass das Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: ein Mittel zum Berechnen einer Summe von Referenzzählungen für die Cache-Zeilen.
  • In Beispiel 44 beinhaltet der Gegenstand aus Beispielen 36-43, dass das Mittel zum Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: ein Mittel zum Berechnen einer Durchschnittsreferenzzählung für die Cache-Zeilen.
  • In Beispiel 45 beinhaltet der Gegenstand aus Beispielen 33-44, dass die Speicherreduzierungstechnik eine Datenkompression beinhaltet.
  • In Beispiel 46 beinhaltet der Gegenstand aus Beispiel 45, dass die Indikation einer Speicherreduzierung eine Kompressionsmenge ist, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 47 beinhaltet der Gegenstand aus Beispielen 33-46, dass das Speichergebiet eine Seite ist, und wobei die Speicherverwaltungsmechanismen Paging-Mechanismen umfassen.
  • Beispiel 48 ist wenigstens ein maschinenlesbares Medium, das Befehle zur Computerspeicherverwaltung beinhaltet, wobei die Befehle, wenn sie durch eine Verarbeitungsschaltungsanordnung ausgeführt werden, bewirken, dass die Verarbeitungsschaltungsanordnung die Operationen durchführt, die Folgendes umfassen: Zugreifen auf ein Speichergebiet, wobei das Speichergebiet einer Speicherreduzierungstechnik unterzogen wird; Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets; Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.
  • In Beispiel 49 beinhaltet der Gegenstand aus Beispiel 48, dass das Speichergebiet eine Speicherseite ist.
  • In Beispiel 50 beinhaltet der Gegenstand aus Beispielen 48-49, dass die Speicherreduzierungstechnik eine Speicherdeduplizierung beinhaltet.
  • In Beispiel 51 beinhaltet der Gegenstand aus Beispiel 50, dass die Indikation einer Speicherreduzierung eine Referenzzählung ist, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 52 beinhaltet der Gegenstand aus Beispiel 51, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  • In Beispiel 53 beinhaltet der Gegenstand aus Beispielen 51-52, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  • In Beispiel 54 beinhaltet der Gegenstand aus Beispielen 51-53, dass das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  • In Beispiel 55 beinhaltet der Gegenstand aus Beispielen 51-54, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  • In Beispiel 56 beinhaltet der Gegenstand aus Beispielen 51-55, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  • In Beispiel 57 beinhaltet der Gegenstand aus Beispielen 51-56, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  • In Beispiel 58 beinhaltet der Gegenstand aus Beispielen 51-57, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Summe von Referenzzählungen für die Cache-Zeilen.
  • In Beispiel 59 beinhaltet der Gegenstand aus Beispielen 51-58, dass das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Durchschnittsreferenzzählung für die Cache-Zeilen.
  • In Beispiel 60 beinhaltet der Gegenstand aus Beispielen 48-59, dass die Speicherreduzierungstechnik eine Datenkompression beinhaltet.
  • In Beispiel 61 beinhaltet der Gegenstand aus Beispiel 60, dass die Indikation einer Speicherreduzierung eine Kompressionsmenge ist, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  • In Beispiel 62 beinhaltet der Gegenstand aus Beispielen 48-61, dass das Speichergebiet eine Seite ist, und wobei die Speicherverwaltungsmechanismen Paging-Mechanismen umfassen.
  • Beispiel 63 ist wenigstens ein maschinenlesbares Medium, das Befehle beinhaltet, die bei Ausführung durch eine Verarbeitungsschaltungsanordnung bewirken, dass die Verarbeitungsschaltungsanordnung Operationen zum Implementieren eines beliebigen der Beispiele 1-62 durchführt.
  • Beispiel 64 ist eine Vorrichtung, die Mittel zum Implementieren eines beliebigen der Beispiele 1-62 umfasst.
  • Beispiel 65 ist ein System zum Implementieren eines beliebigen der Beispiele 1-62.
  • Beispiel 66 ist ein Verfahren zum Implementieren eines beliebigen der Beispiele 1-62.
  • Die vorstehende ausführliche Beschreibung schließt Bezüge auf die begleitenden Zeichnungen ein, welche einen Teil der ausführlichen Beschreibung bilden. Die Zeichnungen zeigen veranschaulichend spezielle Ausführungsformen, die umgesetzt werden können. Diese Ausführungsformen werden hier auch als „Beispiele“ bezeichnet. Derartige 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, so als wären sie einzeln durch Bezugnahme aufgenommen. Im Falle von inkonsistenten Verwendungen zwischen diesem Dokument und den derart durch Bezugnahme aufgenommenen Dokumenten ist die Verwendung in der/den aufgenommenen Referenz(en) ergänzend zu jener dieses Dokuments; bei unvereinbaren Inkonsistenzen ist die Verwendung in diesem Dokument maßgebend.
  • In diesem Dokument wird der Begriff „ein/eine“ verwendet, wie es in Patentdokumenten üblich ist, um eines oder mehr als eines einzuschließen, unabhängig von anderen Fällen oder Verwendungen von „wenigstens 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, sodass „A oder B“ sowohl „A, aber nicht B“, „B, aber nicht A“ und „A und B“ einschließt, sofern nicht anders angegeben wird. In den angehängten Ansprüchen werden die Begriffe „einschließlich“ und „in denen“ als Äquivalente der entsprechenden Begriffe „umfassend“ und „wobei“ verwendet. Auch werden in den folgenden Ansprüchen die Begriffe „einschließlich“ und „umfassend“ offen verwendet, das heißt, ein System, eine Vorrichtung, ein Artikel oder ein Prozess, das/die/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 ein oder mehrere Aspekte davon) 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 dem Leser eine schnelle Erfassung des Wesens der technischen Offenbarung zu ermöglichen. Sie wird in dem Verständnis vorgelegt, dass sie nicht dazu verwendet wird, den Schutzumfang oder die Bedeutung der Ansprüche zu interpretieren oder beschränken. Auch können in der vorstehenden ausführlichen Beschreibung verschiedene Merkmale zusammengefasst sein, um die Offenbarung zu optimieren. Die Ansprüche legen jedoch möglicherweise nicht alle hier offenbarten Merkmale dar, da Ausführungsformen eine Teilmenge dieser Merkmale aufweisen können. Ferner können die Ausführungsformen weniger Merkmale als jene in einem speziellen Beispiel offenbarten beinhalten. Dementsprechend werden die folgenden Ansprüche hiermit in die ausführliche Beschreibung aufgenommen, wobei ein Anspruch für sich allein 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 denen diese Ansprüche berechtigt sind, zu bestimmen.

Claims (14)

  1. Vorrichtung, die Mittel zum Durchführen folgender Schritte umfasst: Zugreifen, von einer Verarbeitungsschaltungsanordnung in einem Speichergebiet, auf das Speichergebiet, das einer Speicherreduzierungstechnik unterzogen wird; Erhalten einer Indikation einer Speicherreduzierung des Speichergebiets; Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung von Cache-Zeilen, die mit dem Speichergebiet assoziiert sind; und Liefern der Metriken an eine Systemsoftwarekomponente zur Verwendung in Speicherverwaltungsmechanismen.
  2. Vorrichtung nach Anspruch 1, wobei das Speichergebiet eine Speicherseite ist.
  3. Vorrichtung nach Anspruch 1 oder 2, wobei die Speicherreduzierungstechnik eine Speicherdeduplizierung beinhaltet.
  4. Vorrichtung nach Anspruch 3, wobei die Indikation einer Speicherreduzierung eine Referenzzählung ist, wobei die Referenzzählung eine Zahl logischer Adressen aufzählt, die zu einer physischen Adresse einer Cache-Zeile der Cache-Zeilen zeigen, die mit dem Speichergebiet assoziiert sind.
  5. Vorrichtung nach Anspruch 4, wobei das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf eine Zuordnungstabelle, wobei die Zuordnungstabelle einen ersten Teil, der eine Zuordnung zwischen logischen und physischen Adressen beibehält, und einen zweiten Teil, der eine Referenzzählung von mit den physischen Adressen assoziierten Cache-Zeilen beibehält, beinhaltet.
  6. Vorrichtung nach Anspruch 4, wobei das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf einen Header einer Cache-Zeile der Cache-Zeilen, wobei der Header zum Beibehalten einer Referenzzählung verwendet wird, die mit der Cache-Zeile assoziiert ist.
  7. Vorrichtung nach Anspruch 4, wobei das Erhalten der Indikation einer Speicherreduzierung des Speichergebiets Folgendes umfasst: Zugreifen auf ein separates Gebiet des Speichers, der Informationen der Referenzzählungen enthält, die mit jeder Cache-Zeile assoziiert sind.
  8. Vorrichtung nach Anspruch 4, wobei das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert von Eins.
  9. Vorrichtung nach Anspruch 4, wobei das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Zahl an Cache-Zeilen mit einem Referenzzählungswert kleiner als eine Referenzzählungsschwelle.
  10. Vorrichtung nach Anspruch 4, wobei das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer maximalen Referenzzählung, die über die Cache-Zeilen hinweg gefunden wird.
  11. Vorrichtung nach Anspruch 4, wobei das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Summe von Referenzzählungen für die Cache-Zeilen.
  12. Vorrichtung nach Anspruch 4, wobei das Berechnen von Metriken basierend auf der Indikation einer Speicherreduzierung der Cache-Zeilen, die mit dem Speichergebiet assoziiert sind, Folgendes umfasst: Berechnen einer Durchschnittsreferenzzählung für die Cache-Zeilen.
  13. Vorrichtung nach Anspruch 1, wobei die Speicherreduzierungstechnik eine Datenkompression beinhaltet, und wobei die Indikation einer Speicherreduzierung eine Kompressionsmenge ist, wobei die Kompressionsmenge eine Menge einer Datenkompression der Cache-Zeilen repräsentiert, die mit dem Speichergebiet assoziiert sind.
  14. Maschinenlesbares Medium bzw. maschinenlesbare Medien, die Befehle beinhalten, die, wenn sie durch eine Maschine ausgeführt werden, bewirken, dass die Maschine Operationen nach einem der Ansprüchen 1-13 durchführt.
DE202019005682.3U 2018-06-27 2019-05-21 Hardwaregestützte Paging-Mechanismen Active DE202019005682U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/020,444 US11392491B2 (en) 2018-06-27 2018-06-27 Hardware-assisted paging mechanisms
US16/020,444 2018-06-27

Publications (1)

Publication Number Publication Date
DE202019005682U1 true DE202019005682U1 (de) 2021-08-25

Family

ID=66630152

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202019005682.3U Active DE202019005682U1 (de) 2018-06-27 2019-05-21 Hardwaregestützte Paging-Mechanismen

Country Status (4)

Country Link
US (1) US11392491B2 (de)
EP (1) EP3588306A1 (de)
CN (1) CN110647291A (de)
DE (1) DE202019005682U1 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10396827B2 (en) 2015-09-25 2019-08-27 SK Hynix Inc. Data storage device
KR102285940B1 (ko) 2015-05-29 2021-08-05 에스케이하이닉스 주식회사 데이터 처리 회로, 데이터 처리 회로를 포함하는 데이터 저장 장치 및 그것의 동작 방법
US11177835B2 (en) * 2015-09-25 2021-11-16 SK Hynix Inc. Data storage device
US11611359B2 (en) 2015-05-29 2023-03-21 SK Hynix Inc. Data storage device
US11515897B2 (en) 2015-05-29 2022-11-29 SK Hynix Inc. Data storage device
US11392491B2 (en) 2018-06-27 2022-07-19 Intel Corporation Hardware-assisted paging mechanisms
CN113138941A (zh) 2020-01-20 2021-07-20 华为技术有限公司 内存交换的方法、装置
CN114157621A (zh) * 2020-09-07 2022-03-08 华为技术有限公司 一种发送清除报文的方法及装置
US11442832B2 (en) * 2020-11-24 2022-09-13 Hewlett Packard Enterprise Development Lp Managing synchronized reboot of a system
US11755465B1 (en) * 2022-07-29 2023-09-12 Lemon Inc. Method of superposition of multiple commands execution

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7099999B2 (en) 2003-09-30 2006-08-29 International Business Machines Corporation Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US9483484B1 (en) * 2011-05-05 2016-11-01 Veritas Technologies Llc Techniques for deduplicated data access statistics management
US20140337577A1 (en) * 2011-12-23 2014-11-13 Oracle International Corporation Sub-lun auto-tiering
US9454321B1 (en) * 2014-05-30 2016-09-27 Emc Corporation Workload-driven storage configuration management
US9983821B2 (en) * 2016-03-29 2018-05-29 Samsung Electronics Co., Ltd. Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application
US9836243B1 (en) * 2016-03-31 2017-12-05 EMC IP Holding Company LLC Cache management techniques
US20180004668A1 (en) 2016-06-30 2018-01-04 Intel Corporation Searchable hot content cache
US10359966B2 (en) * 2017-05-11 2019-07-23 Vmware, Inc. Capacity based load balancing in distributed storage systems with deduplication and compression functionalities
JP2019057178A (ja) * 2017-09-21 2019-04-11 東芝メモリ株式会社 メモリシステムおよび制御方法
US11392491B2 (en) 2018-06-27 2022-07-19 Intel Corporation Hardware-assisted paging mechanisms

Also Published As

Publication number Publication date
CN110647291A (zh) 2020-01-03
US11392491B2 (en) 2022-07-19
US20200004677A1 (en) 2020-01-02
EP3588306A1 (de) 2020-01-01

Similar Documents

Publication Publication Date Title
DE202019005682U1 (de) Hardwaregestützte Paging-Mechanismen
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112017001804T5 (de) Vorrichtung und Verfahren für träge synchrone Seitentabellenaktualisierungen mit geringem Aufwand
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112016005849T5 (de) Hardwarebeschleuniger und Verfahren für zustandsbehafetete Komprimierungs- und Dekomprimierungsoperationen
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE112013005418T5 (de) Vorrichtung und Verfahren zur schnellen Befehlsfehlerbehandlung
DE102019109845A1 (de) Vereinheitlichte Beschleunigung eines Blockgeheimcodes eines symmetrischen Schlüssels für AES-SMS4-Camellia
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102020128808A1 (de) Einrichtung und Verfahren zur adaptiven Planung von Arbeit auf heterogenen Verarbeitungsressourcen
DE102018126036A1 (de) Systeme und verfahren zum setzen eines kachelregisterpaars auf null
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018130225A1 (de) Entfernte atomare Operationen in Multi-Sockel-Systemen
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE102020133945A1 (de) Vorrichtung und verfahren für energievirusschutz in einem prozessor
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
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE112013003735T5 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102020134280A1 (de) Vorrichtung und verfahren zur effizienten gleitkomma-komprimierung

Legal Events

Date Code Title Description
R207 Utility model specification
R150 Utility model maintained after payment of first maintenance fee after three years