DE202019005663U1 - Vorrichtung und System zum verbesserten Datenvorabrufen basierend auf NUMA-Eigenschaften - Google Patents

Vorrichtung und System zum verbesserten Datenvorabrufen basierend auf NUMA-Eigenschaften Download PDF

Info

Publication number
DE202019005663U1
DE202019005663U1 DE202019005663.7U DE202019005663U DE202019005663U1 DE 202019005663 U1 DE202019005663 U1 DE 202019005663U1 DE 202019005663 U DE202019005663 U DE 202019005663U DE 202019005663 U1 DE202019005663 U1 DE 202019005663U1
Authority
DE
Germany
Prior art keywords
memory
prefetch
stream
access
prefetcher
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
DE202019005663.7U
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 DE202019005663U1 publication Critical patent/DE202019005663U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/27Using a specific cache architecture
    • G06F2212/271Non-uniform cache access [NUCA] architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/602Details relating to cache prefetching

Abstract

Vorrichtung, die Mittel zum Durchführen folgender Schritte umfasst:
Speichern von Daten in einem Systemspeicher, wobei der Systemspeicher mehrere Speicherregionen umfasst, jede der mehreren Speicherregionen mit einem jeweiligen Satz von Vorabrufparametern verknüpft ist, wenigstens eine der mehreren Speicherregionen einen Vorabrufparameterwert aufweist, der von einem entsprechenden Vorabrufparameterwert einer anderen der mehreren Speicherregionen verschieden ist;
Überwachen von Datenzugriffen auf einen Cache; und Generieren einer oder mehrerer Vorabrufanforderungen zum Abrufen von Daten aus dem Systemspeicher in den Cache, wobei die eine oder mehreren Vorabrufanforderungen basierend auf den überwachten Datenzugriffen auf den Cache und dem Satz von Vorabrufparametern generiert werden, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen.

Description

  • GEBIET DER TECHNIK
  • Ausführungsformen der hier beschriebenen Erfindung betreffen allgemein das Gebiet der Datenvorabruflogik und -architektur in einem Computerverarbeitungssystem. Insbesondere betrifft die Offenbarung das erweiterte Datenvorabrufen (Prefetching) basierend auf nicht-einheitlichen Speicherzugriffseigenschaften (NUMA (Non-Uniform Memory Access) Eigenschaften, die mit unterschiedlichen Speichertypen und Speicherorten verknüpft sind.
  • STAND DER TECHNIK
  • Das Cache-Vorabrufen ist eine Technik, die von Computerprozessoren eingesetzt wird, um die Leistung durch präemptives Abrufen von Befehlen und Daten von relativ langsameren Speicherorten (z. B. dem Systemspeicher) an schnellere Speicherorte (z. B. Cache) zu erhöhen, bevor diese von den Prozessoren zur Ausführung angefordert werden. Das Vorabrufen ermöglicht, dass Teile der Speicherzugriffslatenz überlappen, was die Prozessorleistung erhöht, indem sich die Gesamt-Datenzugriffszeit reduziert. Die Faktoren, die beim Entwerfen und Implementieren eines Prefetchers zu berücksichtigen sind, beinhalten Genauigkeit und Rechtzeitigkeit. Genau zu sein bedeutet, gute Vorhersagen dahingehend zu machen, was wahrscheinlich angefordert wird, und daher werden weniger Ressourcen für schlechte Vorabrufe verschwendet. Ein genauer Prefetcher nutzt jedoch typischerweise Algorithmen, die relativ konservativ und zeitaufwändig sind. Von daher tendieren Prefetcher, die genau sind, dazu, langsam und weniger aggressiv zu sein, wenn es darum geht, Vorabruf-Vorhersagen zu machen. Andererseits tendiert ein Prefetcher, der zeitgenau ist, wie etwa einer, der Daten aggressiv vor dem Zugriffsstrom eines Prozessors abruft, dazu, weniger genau zu sein, weil Ereignisse schwerer vorherzusagen sind, je weiter sie zeitlich entfernt sind. Das Finden der richtigen Balance zwischen Genauigkeit und Rechtzeitigkeit war lange Zeit eine Problematik, mit der sich Ingenieure herumschlagen mussten, bei dem Versuch, das „perfekte“ Vorabrufverhalten zu implementieren.
  • Figurenliste
  • Die Erfindung kann am besten verstanden werden, indem auf die nachfolgende Beschreibung und die beigefügten Zeichnungen Bezug genommen wird, die verwendet werden, um die Ausführungsformen der Erfindung zu veranschaulichen. In den Zeichnungen gilt:
    • 1A ist ein Blockschaltbild, das eine Ausführungsform des Systems veranschaulicht, bei dem Aspekte der vorliegenden Erfindung implementiert sein können;
    • 1B ist ein Blockschaltbild, das eine andere Ausführungsform des Systems veranschaulicht, bei dem Aspekte der vorliegenden Erfindung implementiert sein können;
    • 1C ist ein Blockschaltbild, das eine noch andere Ausführungsform des Systems veranschaulicht, bei dem Aspekte der vorliegenden Erfindung implementiert sein können;
    • 2 ist ein Blockschaltbild, das eine Ausführungsform eines Prefetchers veranschaulicht, bei dem Aspekte der vorliegenden Erfindung implementiert sein können;
    • 3 veranschaulicht eine beispielhafte Zuordnung des Speicheradressraums eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 4 veranschaulicht unterschiedliche Arten von Zugriffsströmen in Bezug auf einen Systemspeicheradressraum gemäß einer Ausführungsform;
    • 5A veranschaulicht die Zustände, die von einem Prefetcher über die Zeit für einen Zugriffsstrom gehalten werden, der eine einzelne Speicherregion gemäß einer Ausführungsform umspannt;
    • 5B veranschaulicht die Zustände, die von dem Prefetcher über die Zeit für einen anderen Zugriffsstrom gehalten werden, der eine andere Speicherregion gemäß einer Ausführungsform umspannt;
    • 6 veranschaulicht die Zustände, die von dem Prefetcher über die Zeit für einen Zugriffsstrom gehalten werden, der mehr als eine Speicherregion gemäß Ausführungsformen der vorliegenden Erfindung umspannt;
    • 7 ist ein Flussdiagramm, das eine Verfahren veranschaulicht;
    • 8A ist ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte registerumbenennende Out-of-Order-Ausgabe-/Ausführungspipeline gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 8B ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften registerumbenennenden Out-of-Order-Ausgabe-/Ausführungsarchitekturkern zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht;
    • 9 ist ein Blockschaltbild eines Einkernprozessors und eines Mehrkernprozessors mit integrierter Speichersteuerung und Grafik gemäß Ausführungsformen der Erfindung;
    • 10 veranschaulicht ein Blockschaltbild eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 11 veranschaulicht ein Blockschaltbild eines zweiten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 12 veranschaulicht ein Blockschaltbild eines dritten Systems gemäß einer Ausführungsform der vorliegenden Erfindung;
    • 13 veranschaulicht ein Blockschaltbild eines Ein-Chip-Systems (System-on-Chip, SoC) gemäß einer Ausführungsform der vorliegenden Erfindung; und
    • 14 veranschaulicht ein Blockschaltbild, das die Verwendung eines Software-Befehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ausführungsformen einer Vorrichtung und eines Systems zum verbesserten Datenvorabrufen basierend auf nicht-einheitlichen Speicherzugriffseigenschaften (Non-Uniform Memory Access, NUMA) werden hier beschrieben. Die nachstehende Beschreibung enthält eine Reihe spezifischer Einzelheiten, um ein gründliches Verständnis der Ausführungsformen der Erfindung zu vermitteln. Fachleute auf diesem Gebiet werden jedoch erkennen, dass die Erfindung auch ohne die oder mit mehr der spezifischen Einzelheiten oder mit anderen Verfahren, Komponenten, Materialien etc. in die Praxis umgesetzt werden kann. In anderen Fällen werden ausreichend bekannte Strukturen, Materialien oder Operationen nicht in ihren Einzelheiten gezeigt oder beschrieben, um die Aspekte der Erfindung möglichst klar darzustellen.
  • Der Hinweis in der Patentschrift auf „(genau) eine Ausführungsform“ oder „eine Ausführungsform“ bedeutet, dass ein(e) besondere(s) Merkmal, Struktur oder Eigenschaft, das/die im Zusammenhang mit der Ausführungsform beschrieben wird, in wenigstens einer Ausführungsform der Erfindung vorkommt. Der Ausdruck „bei einer Ausführungsform“ oder „in einer Ausführungsform“ an diversen Stellen in der Beschreibung bezieht sich somit nicht notwendigerweise immer auf dieselbe Ausführungsform. Ferner können die besonderen Merkmale, Strukturen oder Eigenschaften auf jede geeignete Weise in einer oder mehreren Ausführungsformen kombiniert werden. Aus Gründen der Klarheit können einzelne Komponenten in den Figuren hier auch mit ihrer entsprechenden Beschriftung in den Figuren statt mit einem spezifischen Bezugszeichen bezeichnet werden.
  • Heute Computersysteme mit gemeinsam genutztem Speicher weisen zunehmend nicht-einheitliche Speicherzugriffseigenschaften (Non-Uniform Memory Access, NUMA) auf. Das bedeutet, dass, auch wenn ein Prozessorkern auf alle Speicheradressen in einem einzelnen Speicheradressraum zugreifen kann, unterschiedliche Adressen mit unterschiedlichen Zugriffslatenz- und/oder Bandbreiteneigenschaften verknüpft sein können. Aktuelle Prefetcher haben im Allgemeinen jedoch keine Kenntnis von oder Sicht auf diese(n) NUMA-Eigenschaften. Von daher sind heutige Hardware-Prefetcher oft nicht optimal für das Vorabrufen unterschiedlicher Adressen im Adressraum ausgelegt. Stattdessen begnügen sie sich typischerweise mit Einstellungen, die von einheitlichen Zugriffseigenschaften über den gesamten Adressraum ausgehen. Ein besserer Ansatz wäre es, den Prefetchern die Möglichkeit zu bieten, ihr Vorabrufverhalten für unterschiedliche Speicheradressen basierend auf den NUMA-Eigenschaften, die mit diesen Adressen verknüpft sind, anzupassen.
  • Aspekte der vorliegenden Erfindung richten sich auf das Offenlegen einer Karte des Systemspeichers für Hardware-Prefetcher und das Erweitern des Prefetcher-Algorithmus, um unterschiedliche Vorabrufverhalten in einem einzelnen Prefetcher zu unterstützen. In einer Ausführungsform wird ein Hardware-Prefetcher auf nicht-einheitliche Speicherzugriffseigenschaften aufmerksam gemacht, die mit unterschiedlichen Adressen innerhalb eines Systemspeicheradressraums verknüpft sind, was wiederum dem Hardware-Prefetcher ermöglicht, sein Vorabrufverhalten (Aggressivität, Genauigkeit etc.) gemäß den unterschiedlichen NUMA-Eigenschaften anzupassen. Insbesondere kann der Prefetcher unterschiedliche Vorabrufparameter einstellen, wenn mit unterschiedlichen Adressen gearbeitet wird. Beispielsweise kann, wenn Daten vorab von Speicheradressen abgerufen werden, die lokalem Speicher zugeordnet sind (z. B. Speicher, der sich in/auf demselben Chip/Sockel befindet wie der Prefetcher), das Prefetcher-Verhalten aggressiver gemacht werden. Umgekehrt sollte, wenn Daten vorab von Adressen abgerufen werden, die entferntem Speicher zugeordnet sind (z. B. Speicher in/auf einem anderem Chip/Sockel als der Prefetcher), das Prefetcher-Verhalten konservativer gemacht werden. In einer Ausführungsform können unterschiedliche Speicheradressen mit unterschiedlichen Vorabrufparametern verknüpft sein, je nach Ort und/oder Typ des Speichers, dem die Adressen zugeordnet sind. Indem das Prefetcher-Verhalten für unterschiedliche Speicheradressen angepasst und eingestellt werden kann, anstatt sich mit einer festen Einheitslösung für den gesamten Speicheradressraum zu begnügen, können Prefetcher effizienter gemacht werden, was die Prozessorleistung verbessert.
  • 1A ist ein Blockschaltbild, das eine Ausführungsform eines beispielhaften Systems veranschaulicht, bei dem Aspekte der vorliegenden Erfindung implementiert sein können. Einige Einzelheiten des Systems 100 wurden ausgelassen, um zu vermeiden, dass die zugrundeliegenden Aspekte der Erfindung unklar werden. System 100 beinhaltet einen oder mehrere Prozessorsockel 110. Wenigstens einige der Prozessorsockel 110 sind kommunikativ mit einem oder mehreren Systemspeichermodulen 116 oder 118 gekoppelt. Auch wenn die Einzelheiten eines Sockels 0 110-0 in 1 vereinfacht veranschaulicht sind, versteht es sich, dass jeder der anderen Prozessorsockel (z. B. Sockel 1 110-1) denselben oder einen ähnlichen Satz aus Logik, Komponenten, Schaltungen und/oder Konfigurationen wie Sockel 0 aufweisen kann. Insbesondere weist Sockel 0 110-0 einen oder mehrere Kerne 112 auf. Jeder der Kerne 112 weist ferner eine oder mehrere Ausführungseinheiten 122, einen Level 1 (L1)-Cache 124 und einen Level 2 (L2)-Cache 126 auf. In einigen Ausführungsformen besteht der L1-Cache aus einem Befehlscache zum Speichern von Befehlen und einem Datencache zum Speichern der Daten, die zum Ausführen der Befehle benötigt werden. Auch wenn dies nicht in 1A veranschaulicht ist, kann der Sockel 0 110-0 ferner einen Level 3 (L3)-Cache oder einen Last-Level-Cache (LLC) aufweisen, der kommunikativ mit allen Kernen 112 gekoppelt ist und von diesen gemeinsam genutzt wird. In einigen Ausführungsformen kann der L3/LLC physisch zwischen den Kernen 112 verteilt sein und von diesen logisch gemeinsam genutzt werden. Jeder der Caches L1, L2/MLC und L3/LLC wird, gemäß einer Ausführungsform, von einem jeweiligen Cache-Agenten oder einer Steuerung verwaltet und kann zum Zwischenspeichern (Cachen) von Befehlen und Daten verwendet werden. Wie gezeigt, weist der L2-Cache 126 ferner einen Prefetcher 130, einen Fehltreffer-Handler 132 und einen Systemadressendecoder (System Address Decoder, SAD) 134 auf oder ist mit einem solchen verknüpft. Auch wenn diese Komponenten als Teil des L2-Caches 126 gezeigt werden, können einige oder alle von diesen als unabhängige Komponenten implementiert sein, die getrennt vom L2-Cache vorliegen, wie etwa die in 1B gezeigte Systemausführung. Des Weiteren werden Fachleute auf diesem Gebiet einsehen, dass der L1- und der L3-Cache auch ihren eigenen jeweiligen Prefetcher, Fehltreffer-Handler und SAD zum Durchführen ähnlicher Funktionen wie denen des L2-Caches aufweisen können oder hiermit verknüpft sein können. 1C veranschaulicht eine Systemausführung, in welcher der L3-Cache 146 mit einem eigenen Prefetcher 150, Fehltreffer-Handler 152 und SAD 154 verknüpft ist.
  • Es wird immer noch Bezug genommen auf 1A; gemäß einer Ausführungsform empfängt der Prefetcher 130 von dem Fehltreffer-Handler 132 Informationen zu Datenanforderungen, die den L2-Cache verpassen. Unter Verwendung dieser Information verfolgt der Prefetcher 130 die Zugriffsströme und versucht, Daten vorab abzurufen, die unter Umständen in Zukunft angefordert werden. Um geeignete Vorabrufparameter oder -einstellungen für den verfolgten Zugriffsstrom zu bestimmen, kann der Prefetcher 130 den SAD 134 nach Informationen zu den Speicheradressen abfragen, die sich in dem Stromfenster des Zugriffsstroms befinden. Der SAD 134 kann Informationen zu Adressübersetzungen bereitstellen sowie Informationen zu Speichertyp, Speicherregion und/oder NUMA-Eigenschaften, die mit den Speicheradressen verknüpft sind.
  • 2 ist ein Blockschaltbild, das eine Ausführungsform eines Prefetchers veranschaulicht. Der Prefetcher 200 beinhaltet eine Überwachungsschaltung, 210, Stromsteuerungsschaltung 220, Stromtabelle 230 und Vorabrufgenerierungsschaltung 240. Die Überwachungsschaltung 210 überwacht Zugriffe auf einen verknüpften Cache (z. B. einen L2-Cache 126), was Bedarfszugriffe und verpasste Zugriffe beinhaltet. Basierend auf diesen überwachten Zugriffen kann die Stromsteuerungsschaltung 220 neue Ströme generieren und/oder bestehende Strome aktualisieren, die verwendet werden, um Vorabrufentscheidungen zu treffen. Zusätzlich zum Speichern dieser Ströme kann die Stromtabelle 230 auch einen Satz von Vorabrufparametern für jeden jeweiligen Strom speichern. Die Vorabrufgenerierungsschaltung 240 wiederum gibt Vorabrufanforderungen an den Systemspeicher aus, basierend auf den Strömen und den zugehörigen Vorabrufparametern.
  • Es wird erneut Bezug genommen auf 1 A; der Sockel 0 110-0 kann ferner eine oder mehrere Speichersteuerungen 114 aufweisen. Jede der Speichersteuerungen 114 ist kommunikativ mit einem entsprechenden Systemspeichermodul 116 gekoppelt. Jeder der Kerne 112 kann über die entsprechende Speichersteuerung 114 mit einem der Systemspeichermodule 116 kommunizieren (lesen/schreiben). Jeder der Kerne 112 kann, über eine Zwischen-Sockel-Kommunikationsschnittstelle 113, auch mit Systemspeichermodulen kommunizieren, die sich in anderen Sockeln (z. B. dem Systemspeicher N+1 118) befinden. Da sich Systemspeichermodule 116 näher am Prefetcher 130 befinden als am Systemspeichermodul 118, können sie als lokaler Speicher bezeichnet werden, während das Systemspeichermodul 118 als entfernter Speicher betrachtet werden kann. Die Systemspeichermodule 116 und 118 können von einem beliebigen Speichertyp oder einer beliebigen Speichertechnologie sein, was herkömmlichen DRAM und nichtflüchtigen Speicher (Non-Volatile Memory, NVM) einschließt. Unterschiedliche Systemspeichermodule können auch mit unterschiedlichen Zugriffseigenschaften verknüpft sein (z. B. können Zugriffe auf den NVM eine höhere Latenz und eine geringere Bandbreite aufweisen als Zugriffe auf den DRAM).
  • Gemäß einer Ausführungsform sind alle Systemspeichermodule 116 und 118 im System 100 in einem einzelnen gemeinsam genutzten globalen Speicheradressraum zugänglich. Um auf eine Adresse zuzugreifen, die lokalem Speicher 116 zugeordnet ist, nutzt ein Kern 112 die On-Chip-Verbindung zur Speichersteuerung 114 mit hoher Bandbreite und geringer Latenz. Um andererseits auf Adressen zuzugreifen, die entfernten Speichermodulen 118 zugeordnet sind, tauscht der Kern 112 Nachrichten über eine(n) Zwischen-Sockel-Kommunikationsschnittstelle/Fabric 113 aus, die typischerweise mit hoher Latenz und geringer Bandbreite verknüpft ist.
  • Um den globalen Speicheradressraum unterschiedlichen Speichermodulen und dadurch den jeweiligen Speichersteuerungen zuzuordnen, wird typischerweise eine Form von Verschachtelung verwendet. Insbesondere ist der globale Speicheradressraum in Regionen identischer Größe unterteilt, sodass jede der Regionen einen zusammenhängenden Block von physischen Speicheradressen enthält. Jede Region ist einer Speichersteuerung in einer verschachtelten Weise zugewiesen. Beispielsweise kann im Fall von zwei Speichersteuerungen eine Speichersteuerung allen ungeradzahligen Regionen zugewiesen sein, während die andere Speichersteuerung allen geradzahligen Regionen zugewiesen ist. Ein gemeinhin verwendeter Verschachtelungsfaktor (d. h. die Größe der Region) ist eine Cachezeile (z. B. 64 Bytes). Indem ein kleiner Verschachtelungsfaktor verwendet wird (z. B. eine Cachezeile), können lineare Datenzugriffsströme auf unterschiedliche Speichersteuerungen verteilt werden, um die Bandbreite zu maximieren. Indem andererseits ein großer Verschachtelungsfaktor verwendet wird, wie etwa einer, der gleich der maximalen Speicherkapazität pro Steuerung ist, kann ein Speichermodul, das an eine einzelne Steuerung angeschlossen ist, einem einzelnen aufeinanderfolgenden Speicheradressbereich zugeordnet werden. Dies wiederum kann durch das Betriebssystem ausgenutzt werden, um Speicheradressen einer Speichersteuerung zuzuteilen, die lokal zu den erwarteten Benutzern dieser Speicheradressen vorliegt, um Fernzugriffsverkehr zu minimieren.
  • Eine beispielhafte Zuordnung des Speicheradressraums eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung wird in 3 veranschaulicht. Bei dem System 300 handelt es sich um ein Zwei-Sockel-System, das Sockel 310-0 und Sockel 310-1 beinhaltet. Jeder der Sockel weist mehrere Kerne 312 sowie mehrere Speichersteuerungen 314 auf. Jede der Speichersteuerungen 314 entspricht einem anderen Systemspeichermodul 316 und ist für Zugriffe auf das und von dem entsprechende(n) Systemspeichermodul zuständig. Beispielsweise entspricht die Speichersteuerung 314-0 einem Speichermodul 316-0 des Typs DDR, die Speichersteuerung 314-1 entspricht einem anderen Speichermodul 316-1 des Typs DDR, die Speichersteuerung 314-2 entspricht einem Speichermodul 314-2 des Typs NVM und so weiter. Alle Systemspeichermodule sind durch einen einzelnen globalen Speicheradressraum 140 zugänglich, der von 0x00000000 bis 0xffffffff reicht. Insbesondere ist ein erster Abschnitt 342 des Speicheradressraums, der von 0x00000000 bis 0x1fffffff reicht, der Speichersteuerung 314-0 für das Zugreifen auf das Systemspeichermodul 316-0 zugeordnet. Ein zweiter Abschnitt 344, der von 0x2000000 bis 0x3fffffff reicht, ist der Speichersteuerung 314-3 für das Zugreifen auf das Systemspeichermodul 316-3 zugeordnet. Ein dritter Abschnitt 346 ist zwischen den Speichersteuerungen 314-1 und 314-4 verteilt (verschachtelt). Darüber hinaus ist der Abschnitt 346 ferner in Unterabschnitte mit gleicher Cachezeilengröße (64 Bytes) unterteilt, die zwischen den Speichersteuerungen 314-1 und 314-4 verschachtelt sind. Wie veranschaulicht, enthalten die dunkler schattierten Abschnitte Speicheradressen, die der Speichersteuerung 314-1 zugewiesen sind, und die heller schattierten Abschnitte enthalten Speicheradressen, die der Speichersteuerung 314-4 zugeordnet sind. Der vierte 348 und der fünfte 350 Abschnitt des Systemspeicheradressraums 340 sind den Speichersteuerungen 314-2 bzw. 314-5 für das Zugreifen auf die Systemspeichermodule 316-2 und 316-5 zugeordnet.
  • Da der Systemspeicheradressraum unterschiedlichen Speichersteuerungen und daher unterschiedlichen Speichermodulen zugeordnet sein kann, sind unterschiedliche Speicheradressen, auf die zugegriffen wird, mit unterschiedlichen Bandbreiten- und Latenzkosten verknüpft, die zu berücksichtigen sind. Hardware-Prefetcher weisen eine Anzahl von (Entwurfszeit- oder Laufzeit-) Konfigurationseinstellungen oder -parametern auf, die deren Verhalten steuern. Die optimalen Konfigurationseinstellungen oder -parameter sind abhängig vom Ort (z. B. lokal vs. entfernt) und/oder Type (z. B. DDR vs. NVM) des Systemspeichers, auf den zugegriffen wird. Verbindungen mit langer Latenz (NVM oder entfernter Speicher) erfordern, dass der Prefetcher Anforderungen weiter in der Zukunft stellt, um sicherzustellen, dass die angeforderten Daten rechtzeitig zur Ausführung abgerufen werden. Verbindungen mit geringer Bandbreite, die höhere Strafkosten für falsche Vorabrufe (verschwendete Bandbreite) aufweisen, erfordern, dass der Prefetcher genauere Vorhersagen macht. Gemäß einer Ausführungsform sollte das Verhalten eines Hardware-Prefetchers gemäß den folgenden Richtlinien angepasst werden:
    • • Prefetcher sollten aggressiver sein, wenn auf Speicherregionen mit hohen Zugriffslatenzen zugegriffen wird (z. B. ihre Anforderungen früher starten, weiter vor dem Zugriffsstrom der Anwendung bleiben)
    • • Prefetcher sollten weniger aggressiv sein, wenn auf Speicherregionen mit geringer Bandbreite zugegriffen wird (z. B. weniger Vorabrufanforderungen ausgeben, nicht zu weit vor dem Zugriffsstrom einer Anwendung abrufen)
  • Angesichts dessen, dass ein einzelner Prefetcher Anforderungen generieren muss, die auf unterschiedliche Speicheradressen und somit unterschiedliche Speicherregionen zugreifen, sollte ein Prefetcher die Regionen kennen, an die er Vorabrufe ausgeben wird, und sein Vorabrufverhalten entsprechend anpassen. Auch wenn sich die nachfolgende Erörterung auf einen Strom-Prefetcher konzentriert, der Zugriffsströme mit linearer Schrittweite in einem festen Fenster verfolgt, können Aspekte der vorliegenden Erfindung auf beliebige Arten von Prefetchern angewendet werden.
  • Strom-Prefetcher arbeiten, indem sie Zugriffsanforderungen von den Prozessorkernen überwachen und versuchen, Zugriffsmuster (lineare Schrittweiten) zu erkennen, um die nächste Speicheradresse vorherzusagen, auf die zugegriffen werden soll. Im Rahmen der Erkennung verfolgt der Prefetcher eine Anzahl von unterschiedlichen Zugriffsströmen, wobei eine oder mehrere Datenstrukturen wie Tabellen genutzt werden. Um die Größe dieser Tabelle verwaltbar zu halten, ist jeder der verfolgten Zugriffsströme auf ein Stromfenster mit fester Größe (z. B. 4KB) beschränkt. Wenn das Zugriffsmuster in einem verfolgten Zugriffsstrom erkannt und bestätigt wird, gibt der Prefetcher Vorabrufe basierend auf dem erkannten Muster aus.
  • Das Verhalten eine Strom-Prefetchers (z. B. die Vorabrufaggressivität) wird durch einen Satz von Vorabrufparametern gesteuert. In einer Ausführungsform beinhalten diese Parameter eine Vorabrufdistanz D, einen Training-zu-stabil-Schwellwert S und einen Drosselschwellwert T. Die Vorabrufdistanz D steuert, wie weit im Voraus Daten aus dem Speicheradressraum abgerufen werden können. Wenn ein Speicherzugriffsstrom von einem Prozessorkern erkannt wird, generiert der Prefetcher Anforderungen bis zu D mal die erkannte Schrittweite vor dem Zugriffsstrom. Von daher können Speicherzugriffe mit hoher Latenz überwunden werden, indem die Vorabrufdistanz D erhöht wird.
  • Der Training-zu-stabil-Schwellwert S spezifiziert die Anzahl von Speicherzugriffen, welche dasselbe Zugriffsmuster zeigen, das für einen bestimmten Zugriffsstrom erkannt werden muss, bevor der Zugriff vom Trainingszustand in einen stabilen Zustand übergehen kann. Da Vorabrufanforderungen nur ausgegeben werden, wenn sich die verfolgten Zugriffsströme in einem stabilen Zustand befinden, steuert der Training-zu-stabil-Schwellwert, wie lange ein Prefetcher warten muss, bevor er mit dem Ausgeben von Anforderungen beginnen kann. Das Erhöhen des Training-zu-stabil-Schwellwerts S ist eine Möglichkeit, den Prefetcher weniger aggressiv zu machen und dadurch weniger Bandbreite zu verschwenden.
  • Wenn fehlerhafte oder verpasste Vorabrufe erkannt werden, kann der Prefetcher die Generierung von Vorabrufanforderungen deaktivieren, sobald die Anzahl von erkannten fehlerhaften Vorabrufen den Drosselschwellwert T überschreitet. Somit kann, durch Anpassen des Drosselschwellwerts T, ein Prefetcher toleranter oder weniger tolerant gemacht werden, was fehlerhafte/abgelaufene Zugriffsströme angeht. Für das Vorabrufen in Regionen mit geringer Bandbreite kann der Prefetcher früher gedrosselt werden, indem der Drosselschwellwert T verringert wird, was dazu beiträgt, knappe Bandbreite zu erhalten.
  • Gemäß einer Ausführungsform der vorliegenden Erfindung ist jeder Speicherzugriffsstrom, der von dem Prefetcher verfolgt wird, mit seinem eigenen Satz von Vorabrufparametern D, S und 7 verknüpft. Durch Variieren des Wertes von D, S und T kann das Verhalten jedes Speicherzugriffsstroms individuell angepasst werden. In einer Ausführungsform ist der Systemspeicheradressraum in unterschiedliche Speicherregionen oder Klassen klassifiziert, basierend auf den NUMA-Eigenschaften, die mit jeder Speicheradresse in dem Adressraum verknüpft ist. Beispielsweise können Adressen, die lokalem Speicher zugeordnet sind, in eine Speicherregion klassifiziert sein, während Adressen, die entferntem Speicher zugeordnet sind, in eine andere Region klassifiziert sein. Die NUMA-Eigenschaften jeder Speicheradresse können durch den Typ, den Ort etc. des Speichermoduls beeinflusst sein, dem die Speicheradresse zugeordnet ist.
  • Gemäß einer Ausführungsform, wenn ein Prefetcher damit beginnt, einen neuen Zugriffsstrom zu verfolgen, fragt er einen Systemadressendecoder (System Address Decoder, SAD) ab, um die Anzahl von Speicherregionen zu bestimmen, die in dem Stromfenster für den neuen Zugriffsstrom enthalten sind. In einigen Ausführungsformen enthält der SAD Informationen zur Zuordnung des Systemspeicheradressraums zu den Speichersteuerungen oder hat Zugriff auf diese Informationen. Bei dem SAD kann es sich um eine bestehende Struktur im Innern jedes Kerns handeln oder, falls anderswo verortet, wie etwa außerhalb des Kerns oder außerhalb des Sockels, können die Inhalte oder Funktionen des SAD im Innern des Kerns gespiegelt oder dupliziert sein (z. B. Mini-SAD). Der SAD ermöglicht es, die entsprechende Speichersteuerung anhand einer physischen Adresse zu adressieren.
  • Sobald die Speicherregionen für einen neuen Zugriffsstrom bestimmt worden sind, kann der Prefetcher die entsprechenden Vorabrufparameter für jede Speicherregion abrufen, auf die durch den Zugriffsstrom zugegriffen werden kann. In einer Ausführungsform speichert die Konfigurationstabelle einen Satz von Vorabrufparametern für jede Speicherregion innerhalb des Systemspeicheradressraums. Die Inhalte der Konfigurationstabelle können durch den Benutzer, das Betriebssystem oder die Anwendung programmiert werden. In einer Ausführungsform kann die Konfigurationstabelle durch Register wie etwa maschinenspezifische Register (Machine-Specific Registers, MSRs) programmiert sein.
  • Es gibt zwei Arten von Zugriffsströmen, die durch den Prefetcher verfolgt werden können. Die erste Art von Zugriffsstrom beinhaltet Zugriffe auf Speicheradressen, die sich alle in derselben Speicherregion befinden. Eine Möglichkeit, wie dies erfolgen kann, liegt vor, wenn das Stromfenster kleiner oder gleich dem Verschachtelungsfaktor ist. Die zweite Art von Zugriffsstrom beinhaltet Zugriffe auf Speicheradressen, die sich alle in unterschiedlichen Speicherregionen befinden. Dies erfolgt, wenn das Stromfenster größer als der Verschachtelungsfaktor ist oder wenn das Stromfenster die Grenze zwischen zwei Speicherregionen überschreitet. 4 veranschaulicht diese zwei Arten von Zugriffsströmen. In 4 ist ein Speicheradressraum 400 drei Speichersteuerungen zugeordnet und ist somit in drei Speicherregionen 402, 404 und 406 unterteilt. Auf jede Speicherregion wird über die jeweilige Speichersteuerung zugegriffen. Des Weiteren sind die Speicherregionen 404 und 406 in Speicheradressräumen 400 verschachtelt. Zwei Zugriffsströme 410 und 420 werden durch den Prefetcher verfolgt. Der Zugriffsstrom 410 beginnt an Ausgangszeile 1 und überwacht Zugriffe auf Adressen im Stromfenster 1. Der Zugriffsstrom 420 beginnt an Ausgangszeile 2 und überwacht Zugriffe auf Adressen im Stromfenster 2. Die Richtung des Pfeils zeigt die Richtung des Zugriffsstroms an. Der Zugriffsstrom 410 veranschaulicht den ersten Typ von Zugriffsstrom, bei dem alle Adressen im Stromfenster 1 derselben Speichersteuerung zugeordnet sind und daher zu derselben Speicherregion 402 gehören. Der Zugriffsstrom 420 veranschaulicht den zweiten Typ von Zugriffsstrom, bei dem die Adressen im Stromfenster 2 einer von zwei Speichersteuerungen zugeordnet sein können und daher zu einer von zwei Speicherregionen 404 und 406 gehören können. Da unterschiedliche Speicherregionen mit unterschiedlichen NUMA-Eigenschaften verknüpft sind, sollte jede Speicherregion, die von Zugriffsstrom 420 abgedeckt ist, mit einem eigenen Satz von Vorabrufparametern verknüpft sein. Im Gegensatz dazu erfordert der Zugriffsstrom 410 nur einen Satz von Vorabrufparametern.
  • Wie vorstehend angemerkt, sollten unterschiedliche Speicherregionen mit unterschiedlichen NUMA-Eigenschaften mit unterschiedlichen Sätzen von Vorabrufparametern verknüpft sein. Beispiel:
    • • Für Speicherregionen mit hoher Bandbreite (z. B. Adressen, die lokalem DRAM zugeordnet sind):
      • D = D 0 , S = S 0 , T = T 0
        Figure DE202019005663U1_0001
    • • Für Speicherregionen mit mittlerer Bandbreite (z. B. Adressen, die entferntem DRAM zugeordnet sind):
    • D = D 1 , S = S 1 , T = T 1
      Figure DE202019005663U1_0002
    • • Für Speicherregionen mit geringer Bandbreite (z. B. Adressen, die NVM zugeordnet sind):
      • D = D 2 , S = S 2 , T = T 2
        Figure DE202019005663U1_0003
  • Zugriffsströme, die dem NVM oder entferntem Speicher zugeordnet sind, können, relativ zum lokalen Speicher, weniger aggressiv gemacht werden (weniger der geringen Bandbreite verschwenden), indem S2 > S1 > S0 eingestellt wird. Dies erfordert, dass die Anwendung ein längeres stabiles Stromzugriffsmuster beibehält, wobei auf den NVM zugegriffen wird, bevor der Prefetcher einsetzt. Darüber hinaus können, um die höhere Latenz zu überwinden, die mit dem Zugreifen auf den NVM und entfernten Speicher verknüpft ist, sobald der Prefetcher für diese Speichertypen ausgelöst wird, Vorabrufanforderungen weiter vor der Anwendung generiert werden, indem D2 > D1 > D0 eingestellt wird. Abschließend sollte ein ungenauer Prefetcher bei NVM mit geringerer Bandbreite und Fernzugriffen früher gedrosselt werden als bei Zugriffen auf den lokalen Speicher. Um dies zu erzielen, können die Parameter als T2 < T1 < T0 eingestellt werden.
  • In einigen Ausführungsformen ist die tatsächliche Vorabrufdistanz D dynamisch und wird erhöht, wenn Ströme mehr Treffer empfangen. Somit können in diesen Ausführungsformen zusätzliche Parameter verwendet werden. Diese zusätzlichen Parameter beinhalten die anfängliche Vorabrufdistanz, wenn ein Strom in einen stabilen Zustand übergeht, die Distanzzunahme bei jedem Treffer und die Maximaldistanz. Ein NUMA-bewusster Prefetcher kann dergestalt konstruiert sein, dass jeder dieser Parameter in Abhängigkeit vom Speichertyp eingestellt werden kann.
  • ZUGRIFFSSTROM MIT ABDECKUNG EINER EINZELNEN SPEICHERREGION
  • Bei Zugriffsströmen, die nur eine Speicherregion abdecken, sodass alle Adressen in dessen Stromfenster derselben Speichersteuerung zugeordnet sind, wird nur ein Satz von Vorabrufparametern für jeden Zugriffsstrom benötigt.
  • Die 5A und 5B zeigen den Zustand über Zeit für zwei unterschiedliche Zugriffsströme 510 und 520. Jeder der Zugriffsströme 510 und 520 greift nur auf Adressen zu, die einer einzelnen Speicherregion zugeordnet sind. Die Speicherregion 512, auf die durch den Zugriffsstrom 510 in 5A zugegriffen wird, ist verschieden von der Speicherregion 522, auf die durch den Zugriffsstrom 512 von 5B zugegriffen wird. Die Zugriffsströme 510 und 520 können zeitlich überlappen oder zu unterschiedlichen Zeiten auftreten.
  • Es wird zunächst Bezug genommen auf 5A; zum Zeitpunkt T0 erkennt der Prefetcher einen Requestor (Anforderer), der eine Anforderung für eine Cachezeile mit Speicheradresse 1000 stellt. Bei dem Requestor kann es sich um einen Kern, eine Anwendung, ein Betriebssystem etc. handeln. Angenommen, die Anforderung entspricht keinem bestehenden Strom, der derzeit vom Prefetcher verfolgt wird, dann wird ein Eintrag für einen neuen Strom erzeugt. Zu diesem Zeitpunkt wird der SAD befragt, sodass der Prefetcher weiß, dass dieser Strom nur eine einzelne Speicherregion 512 umspannt. Als Nächstes ruft, gemäß einer Ausführungsform, der Prefetcher aus einer Konfigurationstabelle einen Satz von Vorabrufparametern ab, die mit der Speicherregion 512 verknüpft sind. Der Prefetcher weist dann die abgerufenen Vorabrufparameter S512, D512 dem Strom 510 zu. Dementsprechend sind der Training-zu-stabil-Schwellwert S und die Vorabrufdistanz D für den Zugriffsstrom 510 beide auf 3 eingestellt. Der letzte Bedarfszugriff (1000) wird als Ausgangszeile des Stroms gespeichert. Die Schrittweite ist zu diesem Zeitpunkt unbekannt. Der Zustand wird mit dem Status SUCHEND initialisiert.
  • Zum Zeitpunkt T0 + 1 wird durch den Kern eine Anforderung für Adresse 1001 generiert. Diese Anforderung entspricht dem bereits vorhandenen Strom und schlägt eine Schrittweite von 1 vor. Diese Schrittweite wird in die Stromtabelle eingetragen, der Trefferzähler wird erhöht und der Zustand der Ströme wechselt in den Zustand TRAINING. Noch können keine Vorabrufe generiert werden, da die Trefferanzahl noch unter dem verknüpften Training-zu-stabil-Parameter S512 liegt.
  • Zum Zeitpunkt T0 + 2 wird die Adresse 1002 von dem Kern angefordert. Dies bestätigt die Schrittweite 1, und der Trefferzähler wird auf 2 erhöht. Der Zustand verbleibt im Zustand TRAINING, da die Trefferanzahl (jetzt 2) nach wie vor unter dem verknüpften Training-zu-stabil-Parameter S512 liegt.
  • Zum Zeitpunkt T0 + 3 wird die Adresse 1003 von dem Kern angefordert, mit der Schrittweite 1. Der Trefferzähler wird auf 3 erhöht. Von daher wechselt der Strom 510 jetzt in den Zustand STABIL, und der Prefetcher kann jetzt Vorabrufe zwischen Adresse 1003 (dem letzten Bedarfszugriff) und 1006 (dem letzten Bedarfszugriff + Vorabrufdistanz D512 = 3) starten. Dementsprechend gibt der Prefetcher Vorabrufanforderungen aus, um die Adressen 1004, 1005 und 1006 aus der nachgeordneten Speicherhierarchie abzurufen.
  • Zum Zeitpunkt T0 + 4 und darüber hinaus wird der Prefetcher weiter neue Vorabrufe für den Zugriffsstrom 510 ausgeben. Alle nachfolgenden Bedarfsanforderungen, die beobachtet werden, überschreiten das Stromfenster.
  • In einer Ausführungsform ist ein Mechanismus zur Erkennung von verpassten Vorabrufen durch den Prefetcher implementiert, um fehlerhafte oder abgelaufene Zugriffsströme zu drosseln. Wenn ein verpasster Vorabruf erkannt wird, wird ein aktueller falscher Vorabruf-Bruchteil F hochgezählt. In einigen Ausführungsformen wird F heruntergezählt, wenn ein gültiger Vorabruf erkannt wird. Zu jedem Zeitpunkt kann der Wert von F mit dem Drosselschwellwert-Parameter T512 verglichen werden, der mit Region 512 verknüpft ist. Wenn F > T512 ist, wird das Vorabrufen für den Zugriffsstrom 512 unterdrückt. Gemäß einer Ausführungsform wird der Prefetcher jedoch weiterhin die Zugriffsanforderungen überwachen und in Reaktion darauf die entsprechenden Parameter aktualisieren. Der Prefetcher kann das Ausgeben von Vorabrufanforderungen von dem Zugriffsstrom 520 fortsetzen, wenn F unter den Drosselschwellwert T512 fällt.
  • Es wird nun Bezug genommen auf 5B. Sie veranschaulicht den Zustand über Zeit für den Zugriffsstrom 520, der auf Adressen in einer anderen Speicherregion zugreift als der Zugriffsstrom 510. Zum Zeitpunkt T1 erkennt der Prefetcher eine Anforderung für eine Cachezeile mit Speicheradresse 2000. Die Anforderung kann durch dieselbe Anwendung erfolgen, welche die Anforderung im Zugriffsstrom 510 gestellt hat, oder eine andere Anwendung. Wieder wird, unter der Annahme, dass es keinen passenden Strom im Prefetcher gibt, ein neuer Eintrag erzeugt. Als Nächstes wird der SAD befragt, damit der Prefetcher weiß, dass dieser Strom nur eine einzelne Speicherregion 522 umspannt. Dann fragt der Prefetcher die Konfigurationstabelle nach Vorabrufparametern ab, die mit der Speicherregion 522 verknüpft sind, und weist die verknüpften Vorabrufparameter S522, D522 dem Strom 520 zu. In diesem Fall sind der Training-zu-stabil-Schwellwert S und die Vorabrufdistanz D für den Zugriffsstrom 520 auf 4 bzw. 5 eingestellt. Der letzte Bedarfszugriff (2000) wird als Ausgangszeile für den Zugriffsstrom 520 gespeichert. Die Schrittweite ist zu diesem Zeitpunkt unbekannt und daher nicht eingestellt. Der Zustand wird mit dem Status SUCHEND initialisiert.
  • Von T1+1 bis T1+3 werden Anforderungen für die Adressen 2002, 2004 und 2006 von dem Prefetcher erkannt, wobei eine Schrittweite von 2 vorgeschlagen wird. Die Treffer werden entsprechend aktualisiert. Der verfolgte Zugriffsstrom verbleibt im Trainingszustand, da die Trefferanzahl (3) unter dem Training-zu-stabil-Schwellwert für die Region 522 (4) liegt.
  • Bei T1+4 wird eine Anforderung für die Adresse 2008 erkannt. Der Strom wechselt jetzt in einen stabilen Zustand, und der Prefetcher gibt Vorabrufe zwischen der Adresse 2008 (dem letzten Bedarfszugriff) und 2018 (dem letzten Bedarfszugriff + Schrittweite x Vorabrufdistanz D522 = 2008 + 2 × 5 = 2018) aus.
  • Infolgedessen werden Cachezeilen in den Adressen 2010, 2012, 2014, 2016 und 2018 abgerufen. Ab diesem Zeitpunkt gibt der Prefetcher weiterhin neue Vorabrufe für den Zugriffsstrom 520 aus, bis der Strom gemäß dem Drosselschwellwert T522 gedrosselt wird.
  • ZUGRIFFSSTROM MIT ABDECKUNG FÜR MEHRERE SPEICHERREGIONEN
  • Wenn ein einzelner Strom auf Adressen zugreift, die mehr als einer Speicherregion zugeordnet sind, wird, gemäß einer Ausführungsform, der Strom-Prefetcher-Algorithmus erweitert, um mehrere Sätze von Vorabrufparametern für diesen Strom zu unterstützen. In einer Ausführungsform wird ein Teilstrom für jede der mehreren Speicherregionen in dem Strom erzeugt und jeder Teilstrom empfängt die Vorabrufparameter (z. B. S, D und T), die für die entsprechende Speicherregion verknüpft sind. Darüber hinaus wird ein Satz von Zustandsinformationen für jeden Teilstrom beibehalten. Gemäß einer Ausführungsform wird für Zustandsinformationen, die identisch sind oder über verschiedene Teilströme gemeinsam genutzt werden, nur eine Kopie beibehalten. Beispielsweise werden die Ausgangszeilenadresse, die erkannte Schrittweite und der Trefferzähler von verschiedenen Teilströmen gemeinsam genutzt, und somit muss nur eine Kopie dieser Informationen vom Prefetcher beibehalten werden. Andere Zustandsinformationen wie etwa der Trainingszustand des Stroms (TRAINING vs. STABIL) und die letzte vorabgerufene Adresse, die für jeden Teilstrom verschieden ist, sollten für jeden Teilstrom getrennt gehalten werden. Die erzeugten Teilströme können jeweils Vorabrufanforderungen generieren, vorausgesetzt, sie befinden sich im Zustand STABIL. Jeder Teilstrom kann Vorabrufanforderungen für jede Adresse generieren, beginnend an der Ausgangszeile und bis zur Maximaldistanz D, die durch den mit dem Teilstrom verknüpften Parameter spezifiziert ist, während Adressen, die zu anderen Speicherregionen gehören, welche von anderen Teilströmen verfolgt werden, übersprungen werden.
  • 6 zeigt ein Beispiel der Zustände, die über Zeit von einem Strom-Prefetcher für einen Strom verfolgt werden, der auf mehrere Speicherregionen zugreift. Der Einfachheit halber werden in dem Beispiel nur zwei Speicherregionen gezeigt. Es ist jedoch einzusehen, dass derselbe Ansatz unabhängig von der Anzahl der Speicherregionen anwendbar ist, auf die der Strom zugreift. Wie veranschaulicht, greift der Zugriffsstrom 600 auf Adressen zu, die zwei Speicherregionen 610 und 620 umspannen. Jede der Speicherregionen ist mit unterschiedlichen NUMA-Eigenschaften verknüpft. Beispielsweise kann die Speicherregion 612 Adressen enthalten, die lokalem Speicher zugeordnet sind, während die Speicherregion 614 Adressen enthalten kann, die entferntem Speicher zugeordnet sind. Die Speicherregion 612 ist mit den Vorabrufparametern S612=3, D612=3 verknüpft, und die Speicherregion 614 ist mit den Vorabrufparametern S614=4, D614=5 verknüpft.
  • Der Verschachtelungsfaktor ist auf 1 für den Strom 610 eingestellt, sodass gerade Adresszeilen der Speicherregion 612 zugeordnet sind, während ungerade Zeilen der Speicherregion 614 zugeordnet sind.
  • Zum Zeitpunkt T3 erkennt der Prefetcher eine Anforderung für eine Zeile mit der Adresse 3000. Es gibt keinen passenden Strom im Prefetcher; daher wird ein neuer Eintrag erzeugt. Gemäß einer Ausführungsform wird der SAD befragt, damit der Prefetcher weiß, dass dieser Strom zwei Speicherregionen 612 und 614 umspannt. Der Prefetcher weist dann die relevanten Vorabrufparameter S612, D612, S614 und D614 den entsprechenden Teilströmen zu. Der letzte Bedarfszugriff (3000) wird als Ausgangszeile gespeichert, die von beiden Teilströmen gemeinsam genutzt wird. Die Schrittweite ist unbekannt und somit nicht eingestellt. Beide Teilströme werden mit dem Status SUCHEND initialisiert.
  • Zum Zeitpunkt T3+1 wird vom Prefetcher eine Anforderung für Adresse 3001 erkannt. Diese Anforderung entspricht dem bereits vorhandenen Strom und schlägt eine Schrittweite von 1 vor. Diese Schrittweite ist in der Stromtabelle ausgefüllt. Der Trefferzähler wird erhöht. Beide Teilströme wechseln in den Zustand TRAINING. Keine Vorabrufanforderungen werden durch einen der Teilströme generiert, da die Anzahl von Treffern nach wie vor unterhalb der Training-zu-stabil-Parameterwerte für beide Teilströme liegt. Zum Zeitpunkt T3+2 wird die Adresse 3002 angefordert, welche die Schrittweite von 1 bestätigt. Der Trefferzähler wird auf 2 erhöht. Wieder werden keine Vorabrufanforderungen generiert, da keiner der Teilströme aktiv ist.
  • Zum Zeitpunkt T3+3 erreicht der Trefferzähler den Wert 3. Von daher wechselt der Teilstrom für die Region 612 vom Zustand TRAINING zu STABIL, da S612=3 ist. Dieser Teilstrom kann jetzt Vorabrufe für Adressen zwischen 3003 (dem letzten Bedarfszugriff) und 3006 (3000 plus der Distanz D612=3) ausgeben. Bei diesen Vorabrufen kann es sich um Ausgaben über mehrere nachfolgende Taktzyklen handeln. Adressen, die nicht zur Speicherregion des Teilstroms gehören, werden jedoch übersprungen. Infolgedessen werden nur die Vorabrufanforderungen für die Adressen 3004 und 3006 an die nachgeordnete Speicherhierarchie ausgegeben. Die Adresse 3005 wird übersprungen, da sie zu einer anderen Speicherregion (d. h. der Speicherregion 614) gehört.
  • Zum Zeitpunkt T3+4 kann der Teilstrom für die Region 612 Vorabrufanforderungen für Adressen bis 3007 (3004+3=3007) ausgeben. Das letzte Vorabruffeld wird entsprechend aktualisiert, damit der Teilstrom den zugehörigen Fortschritt verfolgen kann. Allerdings werden keine neuen Vorabrufanforderungen generiert, da die Adresse 3007 zu Speicherregion 614 gehört und nicht zu 612. Bis zu diesem Punkt ist der Teilstrom für Speicherregion 614 im Zustand TRAINING verblieben, da der Trefferzähler unterhalb des Training-zu-stabil-Schwellwerts für die Speicherregion 614 (S614=5) geblieben ist.
  • Zum Zeitpunkt T3+5 gibt der Teilstrom für die Speicherregion 612 seinen nächsten Vorabruf für Adresse 3008 aus. Andererseits wechselt der Teilstrom für die Speicherregion 614 jetzt vom Zustand TRAINING zu STABIL und beginnt mit der Ausgabe von Vorabrufen ab dem letzten Bedarfszugriff 3005 bis zu einer Distanz von 5 Adressen (Schrittweite = 1*D513=5). Von daher gibt er Vorabrufanforderungen über die nächsten mehreren Taktzyklen für die Adressen 3007 und 3009 aus. Ab diesem Punkt befinden sich beide Teilströme in einem stabilen Zustand und werden jeweils weiterhin neue Vorabrufe für ihre eigene Speicherregion ausgeben. Darüber hinaus wird, wenn weitere Zugriffsanforderungen beobachtet werden, das Stromfenster erweitert.
  • Wie vorstehend angemerkt, wird, falls ein Mechanismus zur Erkennung von verpassten Vorabrufen verwendet wird, um eine Drosselung für fehlerhafte oder abgelaufene Zugriffsströme bereitzustellen, zu jedem Zeitpunkt der aktuelle falsche Vorabruf-Bruchteil F mit beiden Schwellwerten T612 und T614 verglichen. Wenn F > T612 ist, werden Vorabrufe von dem Teilstrom für die Speicherregion 612 unterdrückt. Andererseits werden, wenn F > T614 ist, Vorabrufe von dem Teilstrom für die Speicherregion 614 unterdrückt. Wie zuvor wird der Vorabruf-Zustand weiterhin aktualisiert, wenn Zugriffsanforderungen erkannt werden. Der Prefetcher kann einen Teilstrom neu starten, wenn F unter den Drosselschwellwert für diesen Teilstrom fällt.
  • 7 ist ein Flussdiagramm für ein Verfahrens, das von einem Prefetcher implementiert und/oder durchgeführt werden kann. Das Verfahren beginnt am Startblock. Bei Block 702 wird ein Zugriff auf eine Speicheradresse erkannt. Der Zugriff kann eine Bedarfsanforderung oder ein Fehltreffer sein. Als Nächstes wird, bei Block 704, bestimmt, ob der Zugriff mit einem bestehenden Strom verknüpft ist, der derzeit verfolgt wird, und falls dies der Fall ist, werden, bei Block 706, die entsprechenden, für den bestehen Strom gehaltenen Werte aktualisiert. Beispielsweise kann der Wert für Felder wie etwa Ausgangszeile, Schrittweite, Fehltreffer, Zustand und letzte Vorabruf-Adresse aktualisiert werden. Falls der Zugriff ein Fehltreffer ist, kann der aktuelle falsche Vorabruf-Bruchteil F aktualisiert werden. In einer Ausführungsform werden die Aktualisierungen für die Werte vorgenommen, die für den Strom sowie die verknüpften Teilströme gehalten werden. Es wird erneut Bezug genommen auf Block 704; falls bestimmt wird, dass der erkannte Zugriff nicht mit irgendeinem bestehenden Strom verknüpft ist, dann bestimmt der Prefetcher bei Block 708, wie viele unterschiedliche Speicherregionen in dem Stromfenster für den erkannten Zugriff liegen. In einer Ausführungsform fragt der Prefetcher diese Informationen von dem SAD basierend auf der Speicheradresse ab und empfängt die Informationen. Bei Block 710 bestimmt der Prefetcher die Vorabrufparameter, die mit jeder Speicherregion in dem Stromfenster verknüpft sind. Der Prefetcher kann, gemäß einer Ausführungsform, diese Informationen aus einer internen oder externen Konfigurationstabelle abrufen. Bei Block 712 wird bestimmt, ob es mehr als eine Speicherregion in dem Stromfenster gibt. Bei Block 714 erzeugt, falls es nur eine Speicherregion in dem Stromfenster gibt, der Prefetcher einen neuen Strom mit den Vorabrufparametern, die mit dieser Speicherregion verknüpft sind (siehe z. B. die Zugriffsströme in 5A-5B). Falls jedoch das Stromfenster mehrere Speicherregionen umspannt, dann erzeugt der Prefetcher bei Block 716 einen neuen Strom, der einen Teilstrom für jede der Speicherregionen beinhaltet. Jeder Teilstrom ist mit den Vorabrufparametern für eine jeweilige Speicherregion verknüpft (siehe z. B. den Zugriffsstrom in 6).
  • Ein Beispiel der vorliegenden Erfindung ist eine Vorrichtung, die einen Systemspeicher zum Speichern von Daten beinhaltet, und einen Cache zum Speichern von Daten, die vom Systemspeicher empfangen werden. Der Systemspeicher kann mehrere Speicherregionen beinhalten, von denen jede mit einem eigenen Satz von Vorabrufparametern verknüpft ist. Wenigstens eine der Speicherregionen kann einen Vorabrufparameterwert aufweisen, der von einem entsprechenden Vorabrufparameterwert einer der anderen Speicherregionen verschiedenen ist. Die Vorrichtung kann außerdem einen Prefetcher zum Überwachen von Datenzugriffen auf den Cache und zum Generieren einer oder mehrerer Vorabrufanforderungen beinhalten, um Daten aus dem Systemspeicher abzurufen und in den Cache zu laden. Die eine oder mehreren Vorabrufanforderungen können basierend auf den überwachten Datenzugriffen und dem Satz von Vorabrufparametern, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen, generiert werden. Die Speicherregionen können wenigstens eine erste Speicherregion eines ersten Speichertyps und eine zweite Speicherregion eines zweiten Speichertyps beinhalten, wobei der erste und der zweite Speichertyp unterschiedliche Speichertypen sein können. Bei der ersten Speicherregion kann es sich um einen lokalen Speicher handeln und bei der zweiten Speicherregion kann es sich um einen entfernten Speicher handeln oder umgekehrt. Bei dem Prefetcher kann es sich um einen Strom-Prefetcher handeln und der Satz von Vorabrufparametern kann eine Vorabrufdistanz, einen Training-zu-stabil-Schwellwert und einen Drosselschwellwert beinhalten. Die Werte des Satzes von Vorabrufparametern, die mit jeder jeweiligen Speicherregion verknüpft sind, können, wenigstens teilweise, basierend auf einer oder mehreren Speicherzugriffseigenschaften für die jeweilige Speicherregion eingestellt sein. Die eine oder mehreren Speicherzugriffseigenschaften können eine Zugriffslatenz und/oder eine Zugriffsbandbreite beinhalten. Der Prefetcher kann eine eingehende Datenzugriffsanforderung für das Zugreifen auf Daten im Cache erkennen. Er kann auch bestimmen, dass die eingehende Datenzugriffsanforderung keinen bestehenden Strömen entspricht, die von dem Prefetcher verfolgt werden, und dass mehr als eine Speicherregion in ein Stromfenster fällt. Das Stromfenster kann basierend auf einer Speicheradresse der eingehenden Datenzugriffsanforderung und einer Stromfenstergröße bestimmt werden. Der Prefetcher kann einen neuen Strom erzeugen und der neue Strom kann einen Teilstrom für jede Speicherregion beinhalten, die in das Stromfenster fällt. Jeder Teilstrom kann einer jeweiligen Speicherregion entsprechen und kann mit dem Satz von Vorabrufparametern verknüpft sein, die mit dieser Speicherregion verknüpft sind. Der Prefetcher kann auch bestimmen, dass die eingehende Datenzugriffsanforderung einem bestehenden Strom entspricht, der von dem Prefetcher verfolgt wird, und in Reaktion darauf einen oder mehrere Zustände aktualisieren, die mit dem bestehenden Strom verknüpft sind, wobei Informationen in der eingehenden Datenzugriffsanforderung verwendet werden. Der Prefetcher kann eine oder mehrere Vorabrufanforderungen ausgeben, wenn ein aktualisierter Zustand einen Schwellwert überschreitet, der durch den Satz von Vorabrufparametern spezifiziert ist, welche mit dem bestehenden Strom verknüpft sind.
  • Ein weiteres Beispiel ist ein Verfahren, das in einem Computerprozessor implementiert ist. Das Verfahren beinhaltet das Speichern von Daten in einen Systemspeicher. Der Systemspeicher kann mehrere Speicherregionen beinhalten, von denen jede mit einem eigenen Satz von Vorabrufparametern verknüpft ist. Wenigstens eine der Speicherregionen kann einen Vorabrufparameterwert aufweisen, der von einem entsprechenden Vorabrufparameterwert einer der anderen Speicherregionen verschiedenen ist. Das Verfahren kann ferner das Überwachen von Datenzugriffen auf einen Cache und das Generieren einer oder mehrerer Vorabrufanforderungen zum Abrufen von Daten aus dem Systemspeicher in den Cache beinhalten. Die eine oder mehreren Vorabrufanforderungen können basierend auf den überwachten Datenzugriffen auf den Cache und dem Satz von Vorabrufparametern, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen, generiert werden. Die Speicherregionen können wenigstens eine erste Speicherregion beinhalten, die aus einem ersten Speichertyp besteht, und eine zweite Speicherregion, die aus einem zweiten Speichertyp besteht. Der erste Speichertyp und der zweite Speichertyp können unterschiedliche Speichertypen sein. Bei der ersten Speicherregion kann es sich um einen lokalen Speicher handeln und bei der zweiten Speicherregion kann es sich um einen entfernten Speicher handeln oder umgekehrt. Bei dem Prefetcher kann es sich um einen Strom-Prefetcher handeln und der Satz von Vorabrufparametern kann eine Vorabrufdistanz, einen Training-zu-stabil-Schwellwert und einen Drosselschwellwert beinhalten. Das Verfahren kann ferner das Einstellen von Werten für einen Satz von Vorabrufparametern beinhalten, die mit einer ersten Speicherregion verknüpft sind. Diese Werte können, wenigstens teilweise, auf einer oder mehreren Speicherzugriffseigenschaften der ersten Speicherregion basieren. Die eine oder mehreren Speicherzugriffseigenschaften können eine Zugriffslatenz und/oder eine Zugriffsbandbreite beinhalten. Das Verfahren kann ferner das Erkennen einer eingehenden Datenzugriffsanforderung für das Zugreifen auf Daten im Cache beinhalten; das Bestimmen, dass die eingehende Datenzugriffsanforderung keinen bestehenden Datenströmen entspricht, die derzeit verfolgt werden; das Bestimmen, dass mehr als eine Speicherregion in ein Stromfenster fällt; und das Erzeugen eines neuen Stroms. Das Stromfenster kann basierend auf einer Speicheradresse der eingehenden Datenzugriffsanforderung und einer Stromfenstergröße bestimmt werden. Der neue Strom kann einen Teilstrom für jede Speicherregion beinhalten, die in das Stromfenster fällt. Jeder Teilstrom kann einer jeweiligen Speicherregion entsprechen und kann mit einem Satz von Vorabrufparametern verknüpft sein, die mit der jeweiligen Speicherregion verknüpft sind. Das Verfahren kann ferner das Bestimmen beinhalten, dass die eingehende Datenzugriffsanforderung einem bestehenden Strom entspricht, der vom Prefetcher verfolgt wird; das Aktualisieren eines oder mehrerer Zustände, die mit dem bestehenden Strom verknüpft sind, wobei Informationen in der eingehenden Datenzugriffsanforderung verwendet werden; und das Ausgeben einer oder mehrerer Vorabrufanforderungen, wenn ein aktualisierter Zustand einen Schwellwert überschreitet, der durch den Satz von Vorabrufparametern spezifiziert ist, welche mit dem bestehenden Strom verknüpft sind.
  • Ein noch anderes Beispiel der vorliegenden Erfindung ist ein System, das einen oder mehrere Prozessorkerne zum Ausführen von Befehlen und zum Wirken auf Daten beinhaltet, einen Systemspeicher zum Speichern von Daten und einen Cache zum Speichern von Daten, die von dem Systemspeicher zur Verwendung durch den einen oder die mehreren Prozessorkerne empfangen werden. Der Systemspeicher kann mehrere Speicherregionen beinhalten, von denen jede mit einem eigenen Satz von Vorabrufparametern verknüpft ist. Wenigstens eine der Speicherregionen weist einen Vorabrufparameterwert auf, der von einem entsprechenden Vorabrufparameterwert einer der anderen Speicherregionen verschiedenen ist. Das System kann außerdem einen Prefetcher zum Überwachen von Datenzugriffen auf den Cache und zum Generieren einer oder mehrerer Vorabrufanforderungen beinhalten, um Daten aus dem Systemspeicher abzurufen und in den Cache zu laden. Die eine oder mehreren Vorabrufanforderungen können basierend auf den überwachten Datenzugriffen und dem Satz von Vorabrufparametern, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen, generiert werden. Die Speicherregionen können wenigstens eine erste Speicherregion eines ersten Speichertyps und eine zweite Speicherregion eines zweiten Speichertyps beinhalten, wobei der erste und der zweite Speichertyp unterschiedliche Speichertypen sind. Bei der ersten Speicherregion kann es sich um einen lokalen Speicher handeln und bei der zweiten Speicherregion kann es sich um einen entfernten Speicher handeln oder umgekehrt. Bei dem Prefetcher kann es sich um einen Strom-Prefetcher handeln und der Satz von Vorabrufparametern kann eine Vorabrufdistanz, einen Training-zu-stabil-Schwellwert und einen Drosselschwellwert beinhalten. Die Werte des Satzes von Vorabrufparametern, die mit jeder jeweiligen Speicherregion verknüpft sind, können, wenigstens teilweise, basierend auf einer oder mehreren Speicherzugriffseigenschaften für die jeweilige Speicherregion eingestellt sein. Die eine oder mehreren Speicherzugriffseigenschaften können eine Zugriffslatenz und/oder eine Zugriffsbandbreite beinhalten. Der Prefetcher kann eine eingehende Datenzugriffsanforderung für das Zugreifen auf Daten im Cache erkennen. Er kann auch bestimmen, dass die eingehende Datenzugriffsanforderung keinen bestehenden Strömen entspricht, die von dem Prefetcher verfolgt werden, und dass mehr als eine Speicherregion in ein Stromfenster fällt. Das Stromfenster kann basierend auf einer Speicheradresse der eingehenden Datenzugriffsanforderung und einer Stromfenstergröße bestimmt werden. Der Prefetcher kann einen neuen Strom erzeugen und der neue Strom kann einen Teilstrom für jede Speicherregion beinhalten, die in das Stromfenster fällt. Jeder Teilstrom kann einer jeweiligen Speicherregion entsprechen und kann mit dem Satz von Vorabrufparametern verknüpft sein, die mit dieser Speicherregion verknüpft sind. Der Prefetcher kann auch bestimmen, dass die eingehende Datenzugriffsanforderung einem bestehenden Strom entspricht, der von dem Prefetcher verfolgt wird und in Reaktion darauf einen oder mehrere Zustände aktualisieren, die mit dem bestehenden Strom verknüpft sind, wobei Informationen in der eingehenden Datenzugriffsanforderung verwendet werden. Der Prefetcher kann eine oder mehrere Vorabrufanforderungen ausgeben, wenn ein aktualisierter Zustand einen Schwellwert überschreitet, der durch den Satz von Vorabrufparametern spezifiziert ist, welche mit dem bestehenden Strom verknüpft sind.
  • Ein zusätzliches Beispiel der vorliegenden Erfindung ist ein computer- oder maschinenlesbares Medium, auf dem Code oder Programme gespeichert sind, die, wenn sie von dem Computer oder der Maschine ausgeführt werden, den Computer oder die Maschine veranlassen, eine Reihe von Operationen durchzuführen, die das Speichern von Daten in einem Systemspeicher, das Überwachen von Datenzugriffen auf einen Cache und das Generieren einer oder mehrerer Vorabrufanforderungen beinhalten, um Daten aus dem Systemspeicher abzurufen und in den Cache zu laden. Der Systemspeicher kann mehrere Speicherregionen beinhalten, von denen jede mit einem eigenen Satz von Vorabrufparametern verknüpft ist. Wenigstens eine der Speicherregionen kann einen Vorabrufparameterwert aufweisen, der von einem entsprechenden Vorabrufparameterwert einer der anderen Speicherregionen verschiedenen ist. Die eine oder mehreren Vorabrufanforderungen können basierend auf den überwachten Datenzugriffen auf den Cache und dem Satz von Vorabrufparametern, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen, generiert werden. Die Speicherregionen können wenigstens eine erste Speicherregion beinhalten, die aus einem ersten Speichertyp besteht, und eine zweite Speicherregion, die aus einem zweiten Speichertyp besteht. Der erste Speichertyp und der zweite Speichertyp können unterschiedliche Speichertypen sein. Bei der ersten Speicherregion kann es sich um einen lokalen Speicher handeln und bei der zweiten Speicherregion kann es sich um einen entfernten Speicher handeln oder umgekehrt. Bei dem Prefetcher kann es sich um einen Strom-Prefetcher handeln und der Satz von Vorabrufparametern kann eine Vorabrufdistanz, einen Training-zu-stabil-Schwellwert und einen Drosselschwellwert beinhalten. Die Reihe von Operationen kann ferner das Einstellen von Werten für einen Satz von Vorabrufparametern beinhalten, die mit einer ersten Speicherregion verknüpft sind. Diese Werte können, wenigstens teilweise, auf einer oder mehreren Speicherzugriffseigenschaften der ersten Speicherregion basieren. Die eine oder mehreren Speicherzugriffseigenschaften können eine Zugriffslatenz und/oder eine Zugriffsbandbreite beinhalten. Die Reihe von Operationen kann ferner das Erkennen einer eingehenden Datenzugriffsanforderung für das Zugreifen auf Daten im Cache beinhalten; das Bestimmen, dass die eingehende Datenzugriffsanforderung keinen bestehenden Datenströmen entspricht, die derzeit verfolgt werden; das Bestimmen, dass mehr als eine Speicherregion in ein Stromfenster fällt; und das Erzeugen eines neuen Stroms. Das Stromfenster kann basierend auf einer Speicheradresse der eingehenden Datenzugriffsanforderung und einer Stromfenstergröße bestimmt werden. Der neue Strom kann einen Teilstrom für jede Speicherregion beinhalten, die in das Stromfenster fällt. Jeder Teilstrom kann einer jeweiligen Speicherregion entsprechen und kann mit einem Satz von Vorabrufparametern verknüpft sein, die mit der jeweiligen Speicherregion verknüpft sind. Die Reihe von Operationen kann außerdem das Bestimmen beinhalten, dass die eingehende Datenzugriffsanforderung einem bestehenden Strom entspricht, der vom Prefetcher verfolgt wird; das Aktualisieren eines oder mehrerer Zustände, die mit dem bestehenden Strom verknüpft sind, wobei Informationen in der eingehenden Datenzugriffsanforderung verwendet werden; und das Ausgeben einer oder mehrerer Vorabrufanforderungen, wenn ein aktualisierter Zustand einen Schwellwert überschreitet, der durch den Satz von Vorabrufparametern spezifiziert ist, welche mit dem bestehenden Strom verknüpft sind.
  • 8A ist ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte registerumbenennende Out-of-Order-Ausgabe-/Ausführungspipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 8B ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform eines In-Order-Architekturkerns als auch einen beispielhaften registerumbenennenden Out-of-Order-Ausgabe-/Ausführungsarchitekturkern zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht. Die in 8A-B mit einer durchgehenden Linie gekennzeichneten Felder veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der mit einer gestrichelten Linie gekennzeichneten Felder die Registerumbenennung, die Out-of-Order-Ausgabe-/Ausführungspipeline und den Out-of-Order-Ausgabe-/Ausführungskern veranschaulicht. Da der In-Order-Aspekt eine Untermenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 8A umfasst eine Prozessorpipeline 800 eine Abrufstufe 802, eine Längendecodierstufe 804, eine Decodierstufe 806, eine Zuteilungsstufe 808, eine Umbenennungsstufe 810, eine Zeitplanungsstufe (auch Versandstufe oder Ausgabestufe genannt) 812, eine Registerlese-/Speicherlesestufe 814, eine Ausführungsstufe 816, eine Rückschreibe-/Speicherschreibstufe 818, eine Ausnahmebehandlungsstufe 822 und eine Übergabestufe 824.
  • 8B zeigt einen Prozessorkern 890 mit einer Frontend-Hardware 830, die an eine Ausführungsengine-Hardware 850 gekoppelt ist, und beide sind an eine Speicher-Hardware 870 gekoppelt. Bei dem Kern 890 kann es sich um einen Kern für die Verarbeitung reduzierter Befehlssätze (Reduced Instruction Set Computing, RISC), einen Kern für die Verarbeitung komplexer Befehlssätze (Complex Instruction Set Computing, CISC), einen Kern für sehr lange Befehlswörter (Very Long Instruction Word, VLIW) oder eine hybride oder alternative Kernart handeln. Als eine noch andere Option kann es sich bei dem Kern 890 um einen Spezialkern handeln, wie beispielsweise einen Netz- oder Kommunikationskern, eine Kompressionsengine, einen Coprozessorkern, den Kern einer Grafikverarbeitungseinheit für allgemeine Datenverarbeitungszwecke (General Purpose Computing Graphics Processing Unit, GPGPU), einen Grafikkern oder dergleichen.
  • Die Frontend-Hardware 830 weist eine Sprungvorhersage-Hardware 832 auf, die an eine Befehlscache-Hardware 834 gekoppelt ist, welche an einen Übersetzungspuffer (Translation Lookaside Buffer, TLB) für Befehle 836 gekoppelt ist, der wiederum an eine Befehlsabruf-Hardware 838 gekoppelt ist, die an eine Decodier-Hardware 840 gekoppelt ist. Die Decodier-Hardware 840 (oder der Decodierer) kann Befehle decodieren und als Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungpunkte, Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die anhand der ursprünglichen Befehle decodiert werden oder die ursprünglichen Befehle in anderer Weise wiedergeben oder von den ursprünglichen Befehlen abgeleitet sind. Die Decodier-Hardware 840 kann unter Verwendung von mehreren unterschiedlichen Mechanismen implementiert sein. Beispiele für geeignete Mechanismen umfassen, ohne jedoch hierauf beschränkt zu sein, Nachschlagetabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs), Festwertspeicher (Read-only Memories, ROMs) für Mikrocode usw. In einer Ausführungsform weist der Kern 890 einen Mikrocode-ROM oder ein anderes Medium auf, das Mikrocode für bestimmte Makrobefehle (z. B. in einer Decodier-Hardware 840 oder sonstwie in der Frontend-Hardware 830) speichert. Die Decodier-Hardware 840 ist an eine Umbenennungs-/Zuteilungs-Hardware 852 in der Ausführungsengine-Hardware 850 gekoppelt.
  • Die Ausführungsengine-Hardware 850 umfasst die Umbenennungs-/Zuteilungs-Hardware 852, die an eine Rückordnungs-Hardware 854 und an einen Satz von einer oder mehreren Planer-Hardware-Einheiten 856 gekoppelt ist. Die Planer-Hardware 856 repräsentiert eine beliebige Anzahl von unterschiedlichen Planern, einschließlich Reservierungsstationen, ein zentrales Befehlsfenster usw. Die Planer-Hardware 856 ist an die physische Registerdatei(en)-Hardware 858 gekoppelt. Jede der physischen Registerdatei-Hardware-Einheiten 858 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene einen oder mehrere unterschiedliche Datentypen speichern, wie etwa skalare Ganzzahl, skalarer Gleitkommawert, gepackte Ganzzahl, gepackter Gleitkommawert, Vektorganzzahl, Vektorgleitkommawert, Status (z. B. einen Befehlszeiger, bei dem es sich um die Adresse des nächsten auszuführenden Befehls handelt) etc. In einer Ausführungsform umfasst die physische Registerdatei-Hardware 858 eine Vektorregister-Hardware, eine Schreibmaskenregister-Hardware und eine Skalarregister-Hardware. Diese Register-Hardware kann architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische Registerdatei-Hardware 858 wird von der Rückordnungs-Hardware 854 überlappt, um verschiedene Arten und Weisen zu veranschaulichen, auf die eine Registerumbenennung und eine Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung von (einem oder mehreren) Neuordnungspuffern und (einer oder mehreren) Rückordnungsregisterdateien; unter Verwendung von (einer oder mehreren) zukünftigen Dateien, (einem oder mehreren) historischen Puffern und (einer oder mehreren) Rückordnungsregisterdateien; unter Verwendung von Registerkarten und eines Registerpools usw.). Die Rückordnungs-Hardware 854 und die physische Registerdatei-Hardware 858 sind an den (die) Ausführungscluster 860 gekoppelt. Der (die) Ausführungscluster 860 weist (weisen) einen Satz von einer oder mehreren Ausführungseinheiten 862 und einen Satz von einer oder mehreren Speicherzugriffs-Hardware-Einheiten 864 auf. Die Ausführungs-Hardware 862 kann verschiedene Operationen (z. B. Verschiebungen, Ergänzungen, Subtraktionen, Multiplikationen) an verschiedenen Datentypen (z. B. skalarer Gleitkommawert, gepackte Ganzzahl, gepackter Gleitkommawert, Vektorganzzahl, Vektorgleitkommawert) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungs-Hardware-Einheiten aufweisen können, die für spezifische Funktionen oder Funktionssätze vorgesehen sind, können andere Ausführungsformen nur eine Ausführungs-Hardware oder mehrere Ausführungs-Hardware-Einheiten aufweisen, die alle sämtliche Funktionen durchführen. Die Planer-Hardware-Einheit(en) 856, die physische(n) Registerdatei-Hardware-Einheit(en) 858 und die Ausführungscluster 860 werden als möglicherweise mehrfach vorhanden gezeigt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Arten von Daten/Operationen erzeugen (z. B. eine skalare Ganzzahl-Pipeline, eine Pipeline für skalare Gleitkommawerte/gepackte Ganzzahlen/gepackte Gleitkommawerte/Vektorganzzahlen/Vektorgleitkommawerte und/oder eine Speicherzugriffspipeline, die jeweils eine eigene Planer-Hardware, physische Registerdatei-Hardware und/oder Ausführungscluster aufweisen - und im Fall einer separaten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffs-Hardware 864 aufweist). Es versteht sich außerdem, dass in den Fällen, in denen separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines als Out-of-Order-Ausgabe-/Ausführungspipeline und der Rest als In-Order-Pipeline ausgeführt sein kann (können).
  • Der Satz von Speicherzugriffs-Hardware-Einheiten 864 ist an die Speicher-Hardware 870 gekoppelt, welche eine Daten-TLB-Hardware 872 aufweist, die an eine Datencache-Hardware 874 gekoppelt ist, welche wiederum an eine Level-2 (L2)-Cache-Hardware 876 gekoppelt ist. In einer beispielhaften Ausführungsform kann die Speicherzugriffs-Hardware 864 eine Lade-Hardware, eine Speicheradressen-Hardware und eine Speicherdaten-Hardware aufweisen, von denen jede an die Daten-TLB-Hardware 872 in der Speichereinheit 870 gekoppelt ist. Die Befehlscache-Hardware 834 ist ferner an eine Level-2 (L2)-Cache-Hardware 876 in der Speicher-Hardware 870 gekoppelt. Die L2-Cache-Hardware 876 ist an einen oder mehrere andere Cache-Level und letztendlich an einen Hauptspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte registerumbenennende Out-of-Order-Ausgabe/Ausführungskern-Architektur die Pipeline 800 wie folgt implementieren: 1) die Befehlsabrufeinheit 838 führt die Abruf- und Längendecodierstufen 802 und 804 durch; 2) die Decodier-Hardware 840 führt die Decodierstufe 806 durch; 3) die Umbenennungs-/Zuteilungs-Hardware 852 führt die Zuteilungsstufe 808 und die Umbenennungsstufe 810 durch; 4) die Planer-Hardware 856 führt die Planungsstufe 812 durch; 5) die physische Registerdatei-Hardware 858 und die Speicher-Hardware 870 führen die Registerlese-/Speicherlesestufe 814 durch; der Ausführungscluster 860 führt die Ausführungsstufe 816 durch; 6) die Speicher-Hardware 870 und die physische Registerdatei-Hardware 858 führen die Rückschreibe-/Speicherschreibstufe 818 durch; 7) verschiedene Hardware kann in die Ausnahmebehandlungsstufe 822 einbezogen sein; und 8) die Rückordnungs-Hardware 854 und die physische Registerdatei-Hardware 858 führen die Übergabestufe 824 durch.
  • Der Kern 890 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, Kalifornien), einschließlich der hier beschriebenen Befehle. In einer Ausführungsform weist der Kern 890 eine Logik auf, um eine gepackte Datenbefehlssatz-Erweiterung zu unterstützen (z. B. AVX1, AVX2 und/oder eine Form des generischen vektorfreundlichen Befehlsformats (U=0 und/oder U=1), nachstehend beschrieben), wodurch ermöglicht wird, dass die von vielen Multimediaanwendungen verwendeten Operationen unter Verwendung von gepackten Daten ausgeführt werden können.
  • Es versteht sich, dass der Kern ein Multithreading (das Ausführen von zwei oder mehreren parallelen Sätzen von Operationen oder Programmfäden) unterstützen kann und dies auf verschiedene Art und Weise realisieren kann, einschließlich zeitscheibenbasiertes Multithreading, simultanes Multithreading (bei dem ein einzelner physischer Kern für jeden der Programmfäden, die dieser physische Kern gleichzeitig verarbeitet, einen logischen Kern bereitstellt), oder eine Kombination davon (z. B. zeitscheibenbasiertes Abrufen und Decodieren und anschließendes simultanes Multithreading wie etwa bei der Intel® Hyperthreading-Technologie).
  • Auch wenn die Registerumbenennung im Zusammenhang mit der Out-of-Order-Ausführung beschrieben wird, versteht es sich, dass die Registerumbenennung auch in einer In-Order-Architektur verwendet werden kann. Auch wenn die veranschaulichte Ausführungsform des Prozessors getrennte Befehls- und Datencache-Hardware 834/874 und eine gemeinsam genutzte L2-Cache-Hardware 876 aufweist, können alternative Ausführungsformen einen einzelnen internen Cache für beides, Befehle und Daten, aufweisen, wie beispielsweise einen internen Level-1 (L1)-Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache aufweisen, der außerhalb des Kerns und/oder Prozessors liegt. Alternativ kann der gesamte Cache außerhalb des Kerns und/oder Prozessors liegen.
  • 9 ist ein Blockschaltbild eines Prozessors 900, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und eine integrierte Grafik gemäß der Ausführungsform der Erfindung aufweisen kann. Die mit einer durchgehenden Linie gekennzeichneten Felder in 9 zeigen einen Prozessor 900 mit einem einzelnen Kern 902A, einem Systemagenten 910, einem Satz von einer oder mehreren Bussteuerungs-Hardware-Einheiten 916, während die optionale Ergänzung der mit einer gestrichelten Linie gekennzeichneten Felder einen alternativen Prozessor 900 mit mehreren Kernen 902A-N, einem Satz von einer oder mehreren integrierten Speichersteuerungs-Hardware-Einheiten 914 in der Systemagenten-Hardware-Einheit 910 und Speziallogik 908 zeigt.
  • Somit können unterschiedliche Implementierungen des Prozessors 900 aufweisen: 1) eine CPU mit der Speziallogik 908, bei der es sich um eine integrierte Grafik- und/oder eine wissenschaftliche (Durchsatz)Logik handelt (die einen oder mehrere Kerne aufweisen kann) und die Kerne 902A-N, bei denen es sich um einen oder mehrere Universalkerne (z. B. universelle In-Order-Kerne, universelle Out-of-Order-Kerne, eine Kombination der beiden) handelt; 2) einen Coprozessor, mit den Kernen 902A-N, bei denen es sich um eine große Anzahl von Spezialkernen handelt, die primär für grafische und/oder wissenschaftliche (Durchsatz)Berechnungen vorgesehen sind; und 3) einen Coprozessor mit den Kernen 902A-N, bei denen es sich um eine große Anzahl von universellen In-Order-Kernen handelt. Somit kann es sich bei dem Prozessor 900 um einen Universalprozessor, einen Coprozessor oder einen Spezialprozessor wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Kompressionsengine, einen Grafikprozessor, eine GPGPU (General Purpose Graphics Processing Unit), einen durchsatzstarken MIC (Many Integrated Core)-Coprozessor (mit 30 oder mehr Kernen), einen eingebetteten Prozessor oder dergleichen handeln. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann Teil eines Substrats sein und/oder unter Verwendung einer Anzahl von Prozesstechnologien wie beispielsweise BiCMOS, CMOS oder NMOS auf einem oder mehreren Substraten implementiert sein.
  • Die Speicherhierarchie weist in den Kernen eine oder mehrere Ebenen von Cache, einen Satz von oder eine oder mehrere gemeinsam genutzte Cache-Hardware-Einheiten 906 und (nicht gezeigten) externen Speicher auf, der an den Satz von integrierten Speichersteuerungs-Hardware-Einheiten 914 gekoppelt ist. Der Satz von gemeinsam genutzten Cache-Hardware-Einheiten 906 kann einen oder mehrere Mid-Level-Caches, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen davon aufweisen. Während in einer Ausführungsform eine ringbasierte Verbindungs-Hardware 912 die integrierte Grafiklogik 908, den Satz von gemeinsam genutzten Cache-Hardware-Einheiten 906 und die Systemagenten-Hardware 910/die integrierte Speichersteuerungs-Hardware 914 untereinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl von bekannten Verfahren zum Verbinden solcher Hardware verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer/einem oder mehreren Cache-Hardware-Einheiten 906 und Kernen 902-A-N beibehalten.
  • In einigen Ausführungsformen sind ein oder mehrere Kerne 902A-N Multithreading-fähig. Der Systemagent 910 beinhaltet diejenigen Komponenten, welche die Kerne 902A-N koordinieren und betreiben. Die Systemagenten-Hardware 910 kann beispielsweise eine Leistungssteuerungseinheit (Power Control Unit, PCU) und eine Anzeige-Hardware aufweisen. Die PCU kann Logik und Komponenten darstellen oder beinhalten, die für das Regeln des Leistungszustands der Kerne 902A-N und der integrierten Grafiklogik 908 benötigt werden. Die Anzeige-Hardware dient zum Ansteuern von einer oder mehreren extern verbundenen Anzeigen.
  • Die Kerne 902A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 902A-N können in der Lage sein, denselben Befehlssatz auszuführen, während andere in der Lage sein können, nur eine Untermenge dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen. In einer Ausführungsform sind die Kerne 902A-N heterogen und weisen sowohl die nachstehend beschriebenen „kleinen“ als auch die „großen“ Kerne auf.
  • Die 10-13 sind Blockschaltbilder von beispielhaften Computerarchitekturen. Andere Systementwürfe und Konfigurationen nach dem Stand der Technik für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten (PDAs), Arbeitsstationen (Engineering Workstations, EWS), Server, Netzvorrichtungen, Netzknoten, Switches, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabegeräte, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Allgemein eignet sich eine enorme Vielzahl von verschiedenen Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder andere Ausführungslogik wie hier offenbart aufzunehmen.
  • Es wird nun Bezug genommen auf 10; gezeigt wird ein Blockschaltbild eines Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 aufweisen, die an einen Steuerungsknoten 1020 gekoppelt sind. In einer Ausführungsform weist der Steuerungsknoten 1020 einen Grafikspeicher-Steuerungsknoten (Graphics Memory Controller Hub, GMCH) 1090 und einen Eingabe/Ausgabe-Knoten (Input/Output Hub, IOH) 1050 auf (die auf getrennten Chips vorliegen können); der GMCH 1090 weist Speicher- und Grafiksteuerungen auf, an die ein Speicher 1040 und ein Coprozessor 1045 gekoppelt sind; der IOH 1050 koppelt Eingabe/Ausgabe (E/A)-Vorrichtungen 1060 an den GMCH 1090. Alternativ sind eine oder beide der Speicher- und Grafiksteuerungen (wie hier beschrieben) im Prozessor integriert, der Speicher 1040 und der Coprozessor 1045 sind direkt an den Prozessor 1010 gekoppelt und der Steuerungsknoten 1020 befindet sich in einem einzelnen Chip mit dem IOH 1050.
  • Der optionale Charakter zusätzlicher Prozessoren 1015 ist in 10 durch die gestrichelten Linien gekennzeichnet. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne aufweisen und eine Version des Prozessors 900 sein.
  • Bei dem Speicher 1040 kann es sich beispielsweise um dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM), Phasenwechselspeicher (Phase Change Memory, PCM) oder um eine Kombination der beiden handeln. Bei wenigstens einer Ausführungsform kommuniziert der Steuerungsknoten 1020 mit dem (den) Prozessor(en) 1010, 1015 über einen Multi-Drop-Bus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 1095.
  • In einer Ausführungsform ist der Coprozessor 1045 ein Spezialprozessor wie beispielsweise ein MIC-Prozessor mit hohem Durchsatz, ein Netz- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsknoten 1020 einen integrierten Grafikbeschleuniger aufweisen.
  • Es kann verschiedene Unterschiede zwischen den physischen Ressourcen 1010, 1015 im Hinblick auf ein Spektrum von Gütemetriken geben, zu denen architektonische, mikroarchitektonische, thermische, leistungsaufnahmebezogene Eigenschaften und dergleichen zählen.
  • In einer Ausführungsform führt der Prozessor 1010 Befehle aus, die Datenverarbeitungsoperationen von allgemeiner Art steuern. In die Befehle können Coprozessorbefehle eingebettet sein. Der Prozessor 1010 erkennt diese Coprozessorbefehle als Befehle eines Typs, der von dem verbundenen Coprozessor 1045 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 1010 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle repräsentieren) über einen Coprozessor-Bus oder eine andere Zwischenverbindung an den Coprozessor 1045 aus. Ein oder mehrere Coprozessoren 1045 akzeptieren die empfangenen Befehle und führen diese aus.
  • Es wird nun Bezug genommen auf 11; gezeigt wird ein Blockschaltbild eines ersten spezifischeren beispielhaften Systems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 11 gezeigt, ist das Mehrprozessorsystem 1100 ein Punkt-zu-Punkt-Verbindungssystem und weist einen ersten Prozessor 1170 und einen zweiten Prozessor 1180 auf, die über eine Punkt-zu-Punkt-Verbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann eine Version des Prozessors 900 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 die Prozessoren 1010 bzw. 1015, während der Coprozessor 1138 der Coprozessor 1045 ist. In einer anderen Ausführungsform sind die Prozessoren 1170 und 1180 der Prozessor 1010 bzw. der Coprozessor 1045.
  • Die Prozessoren 1170 und 1180 werden mit integrierter Speichersteuerungs-Hardware (Integrated Memory Controller, IMC) 1172 bzw. 1182 gezeigt. Der Prozessor 1170 weist außerdem als Teil seiner Bussteuerungs-Hardware Punkt-zu-Punkt (P-P)-Schnittstellen 1176 und 1178 auf; in ähnlicher Weise weist der zweite Prozessor 1180 die P-P-Schnittstellen 1186 und 1188 auf. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt (P-P)-Schnittstelle 1150 unter Verwendung von P-P-Schnittstellenschaltungen 1178, 1188 austauschen. Wie in 11 gezeigt, koppeln die IMCs 1172 und 1182 die Prozessoren an die jeweiligen Speicher, nämlich einen Speicher 1132 und einen Speicher 1134, die Teile des lokal mit den jeweiligen Prozessoren verbundenen Hauptspeichers sein können.
  • Die Prozessoren 1170, 1180 können jeder über individuelle P-P-Schnittstellen 1152, 1154 Informationen mit einem Chipsatz 1190 austauschen, wobei Punkt-zu-Punkt-Schnittstellenschaltungen 1176, 1194, 1186, 1198 verwendet werden. Der Chipsatz 1190 kann optional über eine Hochleistungsschnittstelle 1139 Informationen mit dem Coprozessor 1138 austauschen. In einer Ausführungsform ist der Coprozessor 1138 ein Spezialprozessor wie beispielsweise ein durchsatzstarker MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter (nicht gezeigter) Cache kann in jedem Prozessor enthalten sein oder außerhalb beider Prozessoren vorliegen, aber mit den Prozessoren über eine P-P-Verbindung verbunden sein, sodass lokale Cache-Informationen jedes oder beider Prozessoren im gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Niedrigenergiemodus versetzt wird.
  • Der Chipsatz 1190 kann über eine Schnittstelle 1196 mit einem ersten Bus 1116 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1116 ein Peripheriegeräteverbindungsbus (Peripheral Component Interconnect, PCI) oder ein Bus wie etwa ein PCI Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation sein, wenngleich der Schutzbereich der vorliegenden Erfindung nicht hierauf beschränkt ist.
  • Wie in 11 gezeigt, können verschiedene E/A-Vorrichtungen 1114 an den ersten Bus 1116 gekoppelt sein, zusammen mit einer Busbrücke 1118, die den ersten Bus 1116 an einen zweiten Bus 1120 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1115, wie etwa Coprozessoren, durchsatzstarke MIC-Prozessoren, GPGPUs, Beschleuniger (wie beispielsweise Grafikbeschleuniger oder Digitalsignalverarbeitungs-Hardware (Digital Signal Processing, DSP), feldprogrammierbare Gatteranordnungen oder andere Prozessoren, an den ersten Bus 1116 gekoppelt. In einer Ausführungsform kann der zweite Bus 1120 ein Bus mit geringer Stiftzahl (Low Pin Count, LPC) sein. Verschiedene Vorrichtungen können an einen zweiten Bus 1120 gekoppelt sein, in einer Ausführungsform beispielsweise eine Tastatur und/oder eine Maus 1122, Kommunikationsvorrichtungen 1127 und eine Datenspeicher-Hardware 1128 wie etwa ein Plattenlaufwerk oder eine Massenspeichervorrichtung, die in einer Ausführungsform Befehle/Code und Daten 1130 aufweisen kann. Ferner kann ein Audio-E/A 1124 an den zweiten Bus 1120 gekoppelt sein. Es sei darauf hingewiesen, dass auch andere Architekturen möglich sind. So kann ein System beispielsweise anstelle der Punkt-zu-Punkt-Architektur aus 11 einen Multi-Drop-Bus oder eine andere derartige Architektur implementieren.
  • Es wird nun Bezug genommen auf 12; gezeigt wird ein Blockschaltbild eines spezifischeren zweiten beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung. Gleiche Elemente in 11 und 12 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 11 wurden in 12 ausgelassen, um zu verhindern, dass andere Aspekte von 12 verdeckt werden.
  • 12 veranschaulicht, dass die Prozessoren 1170, 1180 einen integrierten Speicher und eine E/A-Steuerungslogik (Control Logic, „CL“) 1172 bzw. 1182 aufweisen können. Somit weist die CL 1172, 1182 integrierte Speichersteuerungs-Hardware und eine E/A-Steuerungslogik auf. 12 veranschaulicht, dass nicht nur die Speicher 1132, 1134 an die CL 1172, 1182 gekoppelt sind, sondern auch, dass die E/A-Vorrichtungen 1214 ebenfalls an die Steuerungslogik 1172, 1182 gekoppelt sind. Bisherige E/A-Vorrichtungen 1215 sind an den Chipsatz 1190 gekoppelt.
  • Es wird nun Bezug genommen auf 13; gezeigt wird ein Blockschaltbild eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Erfindung. Ähnliche Elemente in 9 tragen ähnliche Bezugszeichen. Außerdem stehen mit einer gestrichelten Linie gekennzeichnete Felder für optionale Merkmale auf fortschrittlicheren SoCs. In 13 ist eine Verbindungs-Hardware 1302 gekoppelt an: einen Anwendungsprozessor 1310, der einen Satz von einem oder mehreren Kernen 902A-N und gemeinsam genutzte Cache-Hardware 906 aufweist; eine Systemagenten-Hardware 910; eine Bussteuerungs-Hardware 916; eine integrierte Speichersteuerungs-Hardware 914; einen Satz von einem oder mehreren Coprozessoren 1320, der integrierte Grafiklogik aufweisen kann, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor; eine statische Direktzugriffsspeicher-Hardware (Static Random Access Memory, SRAM) 1330; eine Direktspeicherzugriffs-Hardware (Direct Memory Access, DMA) 1332; und eine Anzeige-Hardware 1340 für das Ankoppeln an ein oder mehrere externe Anzeigen. In einer Ausführungsform weist (weisen) der (die) Coprozessor(en) 1320 einen Spezialprozessor wie beispielsweise einen Netzprozessor oder einen Kommunikationsprozessor, eine Kompressionsengine, eine GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen auf.
  • Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware implementiert sein oder eine Kombination dieser Implementierungsansätze darstellen. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode implementiert sein, die/der auf programmierbaren Systemen ausgeführt werden/wird, die wenigstens einen Prozessor, ein Datenspeichersystem (mit flüchtigem und nichtflüchtigem Speicher und/oder Datenspeicherelementen), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
  • Programmcode, wie etwa der in 11 veranschaulichte Code 1130, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu generieren. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Patentanmeldung beinhaltet ein Verarbeitungssystem ein beliebiges System, das über einen Prozessor verfügt, wie etwa: einen Digitalsignalprozessor (Digital Signal Processor, DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (Application-Specific Integrated Circuit, ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer prozeduralen Hochsprache oder in einer objektorientierten Programmiersprache zum Kommunizieren mit einem Verarbeitungssystem implementiert sein. Der Programmcode kann auf Wunsch auch in Assembler- oder Maschinensprache implementiert sein. Tatsächlich sind die hier beschriebenen Mechanismen hinsichtlich des Schutzbereichs nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann es sich bei der Sprache um eine kompilierte oder eine interpretierte Sprache handeln.
  • Ein oder mehrere Aspekte von wenigstens einer Ausführungsform können durch repräsentative Befehle implementiert sein, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken im Prozessor repräsentiert, welche beim Auslesen durch eine Maschine bewirken, dass die Maschine Logik für das Durchführen der hier beschriebenen Verfahren erstellt. Derartige Darstellungen, bekannt als „IP-Kerne“, können auf einem physischen, maschinenlesbaren Medium gespeichert und für verschiedene Kunden oder HerstellungsVorrichtungen bereitgestellt werden, um in die Herstellungsmaschinen geladen zu werden, welche die Logik oder den Prozessor tatsächlich herstellen.
  • Ein solches maschinenlesbares Datenspeichermedium kann, ohne Einschränkung, nicht-transitorische, physische Anordnungen von Artikeln beinhalten, die von einer Maschine oder einer Vorrichtung gefertigt oder geformt werden, einschließlich Datenspeichermedien wie etwa Festplatten, irgendeine andere Art von Platte einschließlich Disketten, optische Platten, CD-Festwertspeicher (Compact Disk Read-only Memories, CD-ROMs), wiederbeschreibbare CDs (Compact Disk Rewritables, CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen wie etwa Festwertspeicher (Read-only Memories, ROMs), Direktzugriffsspeicher (Random Access Memories, RAMs) wie etwa dynamische Direktzugriffsspeicher (Dynamic Random Access Memories, DRAMs), statische Direktzugriffsspeicher (Static Random Access Memories, SRAMs), löschbare programmierbare Festwertspeicher (Erasable Programmable Read-only Memories, EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Festwertspeicher (Electrically Erasable Programmable Read-only Memories, EEPROMs), Phasenwechselspeicher (Phase Change Memory, PCM), magnetische oder optische Karten oder irgendeine andere Art von Medien, die sich für das Speichern elektronischer Befehle eignen.
  • Dementsprechend beinhalten Ausführungsformen der Erfindung auch nicht-transitorische, physische maschinenlesbare Medien, die Befehle oder Entwurfsdaten enthalten, wie etwa eine Hardware-Beschreibungssprache (Hardware Description Language, HDL), welche die hier beschriebenen Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. So kann der Befehlsumwandler beispielsweise einen Befehl zum Verarbeiten durch den Kern in einen oder mehrere andere Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung einschließlich einer dynamischen Kompilierung), umformen, emulieren oder sonstwie umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Der Befehlsumwandler kann prozessorintern, prozessorextern oder teilweise prozessorintern und teilweise prozessorextern sein.
  • 14 ist ein Blockschaltbild, das die Verwendung eines Software-Befehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumwandler ein Software-Befehlsumwandler, wenngleich der Befehlsumwandler alternativ auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 14 zeigt, dass ein Programm in einer Hochsprache 1402 unter Verwendung eines x86-Compilers 1404 kompiliert werden kann, um x86-Binärcode 1406 zu generieren, der nativ von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 1416 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 1416 repräsentiert jeden Prozessor, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem dieser Prozessor in kompatibler Weise (1) einen wesentlichen Teil des Befehlssatzes des Intel x86-Befehlssatzskerns oder (2) Objektcode-Versionen von Anwendungen oder andere Software, die für das Ausführen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern vorgesehen ist, ausführt oder sonstwie verarbeitet, um im Wesentlichen dasselbe Ergebnis zu erzielen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern. Der x86-Compiler 1404 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 1406 (z. B. Objektcode) zu generieren, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit wenigstens einem x86-Befehlssatzkern 1416 ausgeführt werden kann. In ähnlicher Weise zeigt 14, dass das Programm in der Hochsprache 1402 unter Verwendung eines alternativen Befehlssatz-Compilers 1408 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1410 zu generieren, der von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 1414 nativ ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, Kalifornien, ausführen). Der Befehlsumwandler 1412 wird verwendet, um den x86-Binärcode 1406 in Code umzuwandeln, der vom Prozessor ohne einen x86-Befehlssatzkern 1414 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht identisch mit dem alternativen Befehlssatz-Binärcode 1410, weil ein Befehlsumwandler, der hierzu in der Lage wäre, schwer herzustellen ist; allerdings wird der umgewandelte Code den allgemeinen Betrieb bewältigen und sich aus Befehlen aus dem alternativen Befehlssatz zusammensetzen. Somit repräsentiert der Befehlsumwandler 1412 Software, Firmware, Hardware oder eine Kombination davon, die es, durch Emulation, Simulation oder einen anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung, der bzw. die keinen x86-Befehlssatzprozessor oder -kern aufweist, ermöglicht, den x86-Binärcode 1406 auszuführen.
  • Auch wenn einige Ausführungsformen hier unter Bezugnahme auf bestimmte Implementierungen beschrieben worden sind, sind gemäß manchen Ausführungsformen andere Implementierungen möglich. Darüber hinaus muss eine Anordnung und/oder Abfolge von Elementen oder anderen Merkmalen, die in den Zeichnungen veranschaulicht und/oder hier beschrieben sind, nicht notwendigerweise in der bestimmten veranschaulichten und beschriebenen Weise angeordnet werden. Gemäß manchen Ausführungsformen sind zahlreiche andere Anordnungen möglich.
  • Bei jedem in einer Figur dargestellten System können die Elemente in einigen Fällen jeweils ein gleiches Bezugszeichen oder ein anderes Bezugszeichen haben, um anzudeuten, dass die dargestellten Elemente verschieden und/oder ähnlich sein könnten. Allerdings kann ein Element flexibel genug sein, verschiedene Implementierungen aufzuweisen und mit einigen oder allen der hier gezeigten oder beschriebenen Systeme zu funktionieren. Die verschiedenen in den Figuren gezeigten Elemente können identisch oder unterschiedlich sein. Dabei ist die Bezeichnung als ein erstes bzw. als ein zweites Element rein willkürlich.
  • In der Beschreibung und in den Patentansprüchen können die Begriffe „gekoppelt“ und „verbunden“ sowie Ableitungen davon verwendet werden. Es sei darauf hingewiesen, dass diese Begriffe nicht als Synonyme beabsichtigt sind. Vielmehr kann in bestimmten Ausführungsformen „verbunden“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt miteinander stehen. „Gekoppelt“ kann bedeuten, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt stehen. Allerdings kann „gekoppelt“ auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt zueinander stehen, aber dennoch zusammenwirken oder miteinander interagieren.
  • Eine Ausführungsform ist eine Implementierung oder ein Beispiel der Erfindungen. Wenn in dieser Beschreibung „eine Ausführungsform“, „einige Ausführungsformen“ oder „andere Ausführungsformen“ erwähnt werden, ist damit gemeint, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Kennzeichen, das/die im Zusammenhang mit den Ausführungsformen beschrieben ist, zumindest bei einigen Ausführungsformen, aber nicht notwendigerweise bei allen Ausführungsformen der Erfindungen vorhanden ist. Die verschiedenen Stellen mit der Formulierung „eine Ausführungsform“ oder „einigen Ausführungsformen“ beziehen sich nicht notwendigerweise alle auf dieselben Ausführungsformen.
  • Nicht alle Komponenten, Merkmale, Strukturen, Eigenschaften etc., die hier beschrieben und veranschaulicht werden, müssen in (einer) bestimmten Ausführungsform oder Ausführungsformen vorkommen. Falls in dieser Beschreibung angegeben ist, dass eine Komponente, ein Merkmal, eine Struktur oder eine Eigenschaft vorhanden sein „kann“, „könnte“ oder „möglicherweise“ vorhanden ist, muss diese Komponente, dieses Merkmal, diese Struktur oder diese Eigenschaft nicht unbedingt vorhanden sein. Wenn sich die Beschreibung oder ein Anspruch auf „ein“ Element bezieht, bedeutet das nicht, dass nur eines der Elemente vorhanden ist. Wenn sich die Beschreibung oder ein Anspruch auf „ein zusätzliches“ Element bezieht, schließt das nicht aus, dass mehr als ein zusätzliches Element vorhanden ist.
  • Die vorstehende Beschreibung veranschaulichter Ausführungsformen der Erfindung einschließlich des Inhalts der Zusammenfassung ist nicht erschöpfend und nicht dazu bestimmt, die Erfindung auf die genauen Formen wie offenbart zu beschränken. Auch wenn zum Zwecke der Veranschaulichung hier spezifische Ausführungsformen der Erfindung und Beispiele für diese beschrieben werden, sind innerhalb des Schutzbereichs der Erfindung diverse gleichwertige Modifikationen möglich, wie für Fachleute auf diesem Gebiet ersichtlich ist.
  • Diese Modifikationen an der Erfindung können vor dem Hintergrund der vorstehenden ausführlichen Beschreibung vorgenommen werden. Die in den nachstehenden Patentansprüchen verwendeten Begriffe sollten nicht dahingehend ausgelegt werden, dass sie die Erfindung auf die spezifischen in der Beschreibung und in den Zeichnungen offenbarten Ausführungsformen beschränken. Vielmehr ist der Schutzbereich der Erfindung insgesamt anhand der nachstehenden Patentansprüche zu bestimmen, die gemäß geltenden Grundsätzen der Auslegung von Patentansprüchen zu deuten sind.

Claims (11)

  1. Vorrichtung, die Mittel zum Durchführen folgender Schritte umfasst: Speichern von Daten in einem Systemspeicher, wobei der Systemspeicher mehrere Speicherregionen umfasst, jede der mehreren Speicherregionen mit einem jeweiligen Satz von Vorabrufparametern verknüpft ist, wenigstens eine der mehreren Speicherregionen einen Vorabrufparameterwert aufweist, der von einem entsprechenden Vorabrufparameterwert einer anderen der mehreren Speicherregionen verschieden ist; Überwachen von Datenzugriffen auf einen Cache; und Generieren einer oder mehrerer Vorabrufanforderungen zum Abrufen von Daten aus dem Systemspeicher in den Cache, wobei die eine oder mehreren Vorabrufanforderungen basierend auf den überwachten Datenzugriffen auf den Cache und dem Satz von Vorabrufparametern generiert werden, die mit der Speicherregion verknüpft sind, aus der Daten abgerufen werden sollen.
  2. Vorrichtung nach Anspruch 1, wobei die mehreren Speicherregionen wenigstens eine erste Speicherregion beinhalten, die einen ersten Speichertyp umfasst, und eine zweite Speicherregion, die einen zweiten Speichertyp umfasst, der von dem ersten Speichertyp verschieden ist.
  3. Vorrichtung nach einem der Ansprüche 1-2, wobei die mehreren Speicherregionen wenigstens eine erste Speicherregion beinhalten, die einen lokalen Speicher umfasst, und eine zweite Speicherregion, die einen entfernten Speicher umfasst.
  4. Vorrichtung nach einem der Ansprüche 1-3, wobei die eine oder mehreren Vorabrufanforderungen von einem Strom-Prefetcher generiert werden.
  5. Vorrichtung nach einem der Ansprüche 1-4, wobei der Satz von Vorabrufparametern eine Vorabrufdistanz, einen Training-zu-stabil-Schwellwert und einen Drosselschwellwert umfasst.
  6. Vorrichtung nach einem der Ansprüche 1 bis 5, ferner umfassend Mittel zum: Einstellen von Werten für einen Satz von Vorabrufparametern, die mit einer ersten Speicherregion verknüpft sind, wobei die Werte, wenigstens teilweise, auf einer oder mehreren Speicherzugriffseigenschaften der ersten Speicherregion basieren.
  7. Vorrichtung nach Anspruch 6, wobei die eine oder mehreren Speicherzugriffseigenschaften eine Zugriffslatenz umfassen.
  8. Vorrichtung nach Anspruch 6, wobei die eine oder mehreren Speicherzugriffseigenschaften eine Zugriffsbandbreite umfassen.
  9. Vorrichtung nach einem der Ansprüche 1-8, ferner umfassend Mittel zum: Erkennen einer eingehenden Datenzugriffsanforderung für das Zugreifen auf Daten im Cache; Bestimmen, dass die eingehende Datenzugriffsanforderung keinen bestehenden Strömen entspricht, die derzeit verfolgt werden; Bestimmen, dass mehr als eine Speicherregion in ein Stromfenster fällt, wobei das Stromfenster basierend auf einer Speicheradresse der eingehenden Datenzugriffsanforderung und einer Stromfenstergröße bestimmt wird; und Erzeugen eines neuen Stroms, wobei der neue Strom einen Teilstrom für jede Speicherregion beinhaltet, die in das Stromfenster fällt, wobei jeder Teilstrom einer jeweiligen Speicherregion entspricht und mit einem Satz von Vorabrufparametern verknüpft ist, die mit der jeweiligen Speicherregion verknüpft sind.
  10. Vorrichtung nach Anspruch 9, ferner umfassend Mittel zum: Bestimmen, dass die eingehende Datenzugriffsanforderung einem bestehenden Strom entspricht, der von dem Prefetcher verfolgt wird; Aktualisieren eines oder mehrerer Zustände, die mit dem bestehenden Strom verknüpft sind, wobei Informationen in der eingehenden Datenzugriffsanforderung verwendet werden; und Ausgeben einer oder mehrerer Vorabrufanforderungen, wenn ein aktualisierter Zustand einen Schwellwert überschreitet, der durch den Satz von Vorabrufparametern spezifiziert ist, welche mit dem bestehenden Strom verknüpft sind.
  11. Maschinenlesbarer Datenspeicher, der maschinenlesbare Befehle enthält, die, wenn sie ausgeführt werden, eine Vorrichtung nach einem der vorstehenden Ansprüche implementieren.
DE202019005663.7U 2018-06-29 2019-05-24 Vorrichtung und System zum verbesserten Datenvorabrufen basierend auf NUMA-Eigenschaften Active DE202019005663U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/024,527 2018-06-29
US16/024,527 US10621099B2 (en) 2018-06-29 2018-06-29 Apparatus, method, and system for enhanced data prefetching based on non-uniform memory access (NUMA) characteristics

Publications (1)

Publication Number Publication Date
DE202019005663U1 true DE202019005663U1 (de) 2021-05-07

Family

ID=66655173

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202019005663.7U Active DE202019005663U1 (de) 2018-06-29 2019-05-24 Vorrichtung und System zum verbesserten Datenvorabrufen basierend auf NUMA-Eigenschaften

Country Status (4)

Country Link
US (2) US10621099B2 (de)
EP (1) EP3588312A1 (de)
CN (1) CN110659220A (de)
DE (1) DE202019005663U1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11372763B2 (en) * 2020-07-14 2022-06-28 Micron Technology, Inc. Prefetch for data interface bridge
US10922231B1 (en) * 2020-10-22 2021-02-16 Open Drives LLC Systems and methods that predictively read ahead different amounts of data for different content stored in a multi-client storage system
US11567878B2 (en) * 2020-12-23 2023-01-31 Intel Corporation Security aware prefetch mechanism

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8621157B2 (en) 2011-06-13 2013-12-31 Advanced Micro Devices, Inc. Cache prefetching from non-uniform memories
US8954680B2 (en) * 2011-11-20 2015-02-10 International Business Machines Corporation Modifying data prefetching operation based on a past prefetching attempt
US9665491B2 (en) * 2014-07-17 2017-05-30 Samsung Electronics Co., Ltd. Adaptive mechanism to tune the degree of pre-fetches streams
EP3129887B1 (de) * 2014-12-14 2018-08-15 VIA Alliance Semiconductor Co., Ltd. Mehrere datenvorlader die sich gegenseitig je nach vorausladeeffektivität durch speicherzugangstyp anweisen
US9858191B2 (en) * 2014-12-31 2018-01-02 Samsung Electronics Co., Ltd. Electronic system with data management mechanism and method of operation thereof
US10067872B2 (en) * 2015-06-22 2018-09-04 Advanced Micro Devices, Inc. Memory speculation for multiple memories
US9990296B2 (en) * 2015-07-31 2018-06-05 Oracle International Corporation Systems and methods for prefetching data

Also Published As

Publication number Publication date
US10621099B2 (en) 2020-04-14
US20200004684A1 (en) 2020-01-02
US11256626B2 (en) 2022-02-22
CN110659220A (zh) 2020-01-07
EP3588312A1 (de) 2020-01-01
US20200233806A1 (en) 2020-07-23

Similar Documents

Publication Publication Date Title
DE69633166T2 (de) Integrierter schaltkreis mit mehreren funktionen und gemeinsamer verwendung mehrerer interner signalbusse zur verteilung der steuerung des buszugriffes und der arbitration
DE112013002069B4 (de) Hohes Leistungsverbindungskohärenz-Protokoll
DE102011076894B9 (de) Persistenter Speicher für einen Hauptspeicher eines Prozessors
DE112005002298B4 (de) Leistungssteigerung einer Adreßübersetzung unter Verwendung von Übersetzungstabellen, die große Adreßräume umfassen
DE102018006756A1 (de) Beschleuniger-Fabric
DE112013003731T5 (de) Neue befehls- und hocheffiziente Mikroarchitektur zum ermöglichen einer sofortigen Kontextumschaltung für Benutzerebenen-Threading
DE102018213430A1 (de) Beschleuniger mit geringer Latenzzeit
DE112013004751T5 (de) Prozessor mit mehreren Kernen, gemeinsam genutzter Kernerweiterungslogik und gemeinsam genutzten Kernerweiterungsnutzungsbefehlen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102015002582A1 (de) Architekturübergreifendes Kompatibilitätsmodul, um zuzulassen, dass ein Codemodul einer Architektur ein Bibliotheksmodul einer anderen Architektur verwendet
DE102018002294A1 (de) Effizientes bereichsbasiertes speicher-rückschreiben zum verbessern der host-zu-geräte-kommunikation für optimale energie und leistung
DE112016004303T5 (de) Hardware-Vorhersageelement mit geringem Verwaltungsaufwand zur Verringerung der Leistungsumkehr für Kern-zu-Kern-Datenübertragungsoptimierungsbefehle
DE102018004727A1 (de) Verfahren und System zum Durchführen von Datenbewegungsoperationen mit Lese-Snapshot und In-Place-Schreibaktualisierung
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE112008001679T5 (de) Cache-Speicher mit konfigurierbarer Assoziativität
DE102010034555A1 (de) Bereitstellen von Zustandsspeicher in einem Prozessor für Systemmanagement-Modus
DE102010046892A1 (de) Management und Implementierung von Metadaten in der Zentraleinheit unter Verwendung von Registererweiterungen
DE102010035603A1 (de) Bereitstellen von Hardwareunterstützung für gemeinsam benutzten virtuellen Speicher zwischen physischem Lokal- und Fernspeicher
DE112012007115T5 (de) Wahlweise Logikprozessor-Zählung und Typauswahl für eine gegebene Arbeitsbelastung basierend auf Wärme- und Leistungsbudget-Einschränkungen der Plattform
DE202019005663U1 (de) Vorrichtung und System zum verbesserten Datenvorabrufen basierend auf NUMA-Eigenschaften
DE102018006015A1 (de) Globale und lokale Zeitschrittbestimmungsschemata für neuronale Netzwerke
DE202007019502U1 (de) Globaler Überlauf für virtualisierten Transaktionsspeicher
DE112013005368T5 (de) Prozessoren, verfahren und systeme für echtzeit-befehlsverfolgung
DE112017001700T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen zum Abruf von Daten auf der angegebenen Cache-Ebene mit garantiertem Abschluss
DE102014003798A1 (de) Verfahren zum Booten eines heterogenen Systems und Präsentieren einer symmetrischen Kernansicht

Legal Events

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