DE102018213430A1 - Beschleuniger mit geringer Latenzzeit - Google Patents

Beschleuniger mit geringer Latenzzeit Download PDF

Info

Publication number
DE102018213430A1
DE102018213430A1 DE102018213430.8A DE102018213430A DE102018213430A1 DE 102018213430 A1 DE102018213430 A1 DE 102018213430A1 DE 102018213430 A DE102018213430 A DE 102018213430A DE 102018213430 A1 DE102018213430 A1 DE 102018213430A1
Authority
DE
Germany
Prior art keywords
buffer
address
buffers
memory
accelerator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018213430.8A
Other languages
English (en)
Inventor
Vinodh Gopal
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 DE102018213430A1 publication Critical patent/DE102018213430A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/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
    • 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]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • 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/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/654Look-ahead translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]

Landscapes

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

Abstract

Verfahren, Vorrichtung und zugeordnete Techniken und Mechanismen zur Verringerung der Latenzzeit in einem Beschleuniger. Die Techniken und Mechanismen sind in Plattformarchitekturen implementiert, die virtuelle Gemeinspeicher (SVP) unterstützen, und umfassen den Einsatz SVM-fähigen Beschleunigers zusammen mit Übersetzungs-Lookaside-Puffern (TLBs). Ein Anfragendeskriptor, der einen durch einen Beschleuniger durchzuführenden Arbeitsauftrag definiert und auf virtuelle Adressen (VAs) und Größen von einem oder mehreren Puffern verweist, wird durch das Ausführen eines Threads auf einem Prozessorkernin eine Warteschlange eingereiht. Gemäß einem Ansatz umfasst der Deskriptor Hinweise, die hysikalische Adressen oder Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzungen umfassen, welche unter Verwendung der Puffer-VAs aus einem oder mehreren dem Kern zugeordneten TLBs erhalten werden. Gemäß einem weiteren Ansatz, bei dem TL-Snooping eingesetzt wird, werden die Puffer-VAs auf Nachschläge bzw. übereinstimmende TLB-Einträge ((VA-PA-Übersetzungen) als Hinweise verwendet. Die Hinweise werden zum spekulativen vorgreifenden Abrufen von Pufferdaten und zum spekulativen Beginnen der Verarbeitung der vorgreifend abgerufen Pufferdaten auf dem Beschleuniger verwendet.

Description

  • HINTERGRUND
  • Datenanalytik und „Big-Data“-Verarbeitung haben in den letzten Jahren zunehmend an Bedeutung gewonnen. Die Arbeitslasten im Zusammenhang mit Datenanalytik und „Big Data“ erfordern die Verarbeitung von großen Datenmengen. Ein Ansatz für die Verarbeitung solcher großen Datenmengen besteht darin, die Verarbeitungsaufgaben zahlreiche Server zu verteilen und die Arbeitslasten parallel zu verarbeiten. Die Framework-Software Apache Hadoop beispielsweise ermöglicht die Verteilung von Aufgaben auf zahlreiche Standardserver und die Verarbeitung von Arbeitslasten mittels MapReduce. Wenngleich Hadoop und MapReduce hervorragende Skalierbarkeit bereitstellen, erfordern sie (bei Umsetzung in großem Maßstab) ein enormes Ausmaß an Kommunikation zwischen den Servern und setzen Prozessor- und Speicherressourcen nicht effizient ein.
  • Bei in Bezug auf Rechenaufwand und Speicherbandbreite intensiven Arbeitslasten, wie sie etwa für Datenanalytik und für „Big Data“ verwendet werden, ist es schwer, das erforderliche Ausmaß an Leistungsfähigkeit mit Prozessorkernen zu erreichen. Um dem beizukommen, wurden so genannte „Beschleuniger“ entwickelt. Beschleuniger wurden zunächst als Komponenten ausgeführt, die mit CPUs (zentrale Verarbeitungseinheit) gekoppelt waren und als IO(Eingabe-Ausgabe)-Vorrichtung mit eigenem Adressraum verwaltet wurden, was ein signifikantes Ausmaß an IO-Kommunikation zur Übertragung von Daten zwischen dem Adressraum des Beschleunigers und dem Adressraum der im Systemspeicher laufenden Anwendungen erforderte. Vor kurzem wurden CPUs eingeführt, die System-on-Chip(SoC)-Architektur mit eingebetteten Beschleunigern verwenden.
  • Die Fähigkeiten von Beschleunigern haben sich stetig verbessert, wobei eine der signifikantesten der jüngsten Tendenzen Beschleuniger mit der Fähigkeit zum „virtuellen Gemeinspeicher“ (SVM) sind. Herkömmliche Beschleuniger mussten als Eingabe-Ausgabe(IO)-Vorrichtung mit eigenem persönlichem Adressraum verwaltet werden. Dies wurde mit teuren Kernel-Mode-Treibern (KMD) erreicht, die ein Hin- und Herwechseln von Anwendungen zwischen Benutzer- und Kernel-Raum, das Fixieren von Seiten im Speicher oder Kopieren von Benutzerpuffern von/zu speziellen, vom OS/Kernel-Mode-Treiber verwalteten Puffern erforderten. Dank SVM kann der Beschleuniger oder die IO-Vorrichtung direkt auf dem Adressraum eines jeglichen Benutzeranwendungs-Threads arbeiten, da er dieselben virtuellen-zu-physikalischen Adressenübersetzungsfunktionen wie die des CPU-Thread aufweist. Dies stellt eine wesentliche Verbesserung der Beschleunigereffizienz (unter dem Aspekt der Datenverschiebung) dar, ermöglicht Benutzer-Mode-Übermittlungen direkt an die Beschleuniger (über einen „User-Mode-Treiber“ oder UMD) und führt zu einfacheren Programmiermodellen und einfacherer Anwendung.
  • Bei Anwendungen, die Verarbeitung mit geringer Latenzzeit erfordern (insbesondere für Kleinpufferverarbeitung) stellt auch SVM eine interessante Herausforderung dar. Wenn ein Beschleuniger für einen durchzuführenden Arbeitsauftrag bereitgestellt wird, identifiziert der Arbeitsauftragsdeskriptor einige Eingangsdatenpuffer und Ausgangsdatenpuffer im virtuellen Speicherraum, auf den der Beschleuniger zuzugreifen hat. Diese Puffer werden durch die Benutzeranwendung zugewiesen und können somit im Allgemeinen, abhängig von der Größe der Puffer, viele verschiedene physikalische Speicherseiten umfassen. Der Beschleuniger muss in der Lage sein, die virtuellen Adressen (VA) in physikalische Adressen (PA) zu übersetzen, um den Arbeitsauftrag zu bearbeiten. Diese Adressübersetzung bedeutet zusätzlichen Latenzaufwand für herkömmliche Beschleuniger.
  • Figurenliste
  • Die genannten Aspekte und viele der zu erwarteten Vorteile dieser Erfindung werden in Anbetracht der folgenden ausführlichen Beschreibung in Verbindung mit den beigefügten Zeichnungen besser ersichtlich werden, wobei sich gleiche Bezugszahlen, wenn nicht anders angegeben, in den verschiedenen Ansichten auf dieselben Teile beziehen:
    • 1 ist ein Blockschaltbild einer ersten Plattformarchitektur, die einen oder mehrere On-Chip-Beschleuniger umfasst;
    • 2 ist ein Blockschaltbild einer zweiten Plattformarchitektur, die einen oder mehrere On-Chip-Beschleuniger umfasst;
    • 3a ist ein Blockschaltbild, das weitere Details eines On-Chip-Beschleunigers gemäß einer Ausführungsform zeigt;
    • 3b ist ein Blockschaltbild, das weitere Details eines On-Chip-Beschleunigers gemäß einer Ausführungsform zeigt;
    • 4 ist ein Blockschaltbild eines Adressübersetzungsschemas, das einen Übersetzungs-Lookaside-Puffer (TLB), eingesetzt durch 64-But-Prozessorarchitektur, umfasst;
    • 5 ist ein Blockschaltbild, das weitere Details des TLB von 4, einschließlich Übersetzungsregistern, zeigt;
    • 6a ist ein kombiniertes schematisches und Datenstrom-Diagramm, das eine Ausführungsform einer Implementation des Befehls Enq_with-Translations_v1 unter Verwendung der Plattformarchitektur von 3a zeigt;
    • 6b ist ein kombiniertes schematisches und Datenstrom-Diagramm, das eine Ausführungsform einer Umsetzung des Befehls Enq_with-Translations_v1 unter Verwendung der Plattformarchitektur von 3b zeigt;
    • 7a ist ein kombiniertes schematisches und Datenstrom-Diagramm, das eine Ausführungsform eines TLB-Snooping-Mechanismus unter Verwendung der Plattformarchitektur von 3a zeigt;
    • 7b ist ein kombiniertes schematisches und Datenstromdiagramm, das eine Ausführungsform eines TLB-Snooping-Mechanismus unter Verwendung der Plattformarchitektur von 3b zeigt;
    • 8 ist ein Flussdiagramm, das Arbeitsvorgänge und Logik in Bezug auf das Einreihen eines Anfragendeskriptors in eine Warteschleife gemäß einer Ausführungsform zeigt;
    • 9 ist ein Flussdiagramm, das Arbeitsvorgänge und Logik in Bezug auf die Beschleunigerverarbeitung eines Anfragendeskriptors gemäß einer Ausführungsform zeigt;
    • 10 ist eine vereinfachte NUMA-Plattformarchitektur, die verschiedene Kosten für den Zugriff auf entsprechende Komponenten, einschließlich Beschleuniger und Speichervorrichtungen, zeigt;
    • 10 ist ein schematisches Blockdiagramm, das ein Beispiel für eine ARM-basierte Mikroarchitektur zeigt, die zur Umsetzung der hier offenbarten Anweisungssatz-Architektur(ISA)-Anweisungen geeignet ist; und
    • 11 ist ein Blockschaltbild, das weitere Details einer beispielhaften Plattformarchitektur gemäß einer Ausführungsform zeigt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ausführungsformen von Verfahren und Vorrichtungen sowie zugeordneter Techniken und Mechanismen zur Verringerung der Latenzzeit von Beschleunigern sind hier beschrieben. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten ausgeführt, um ein umfassendes Verständnis von Ausführungsformen der Erfindung bereitzustellen. Fachleute auf diesem Gebiet werden jedoch erkennen, dass die Erfindung ohne eine oder mehrere der spezifischen Einzelheiten, oder mit anderen Verfahren, Komponenten, Materialien usw. umgesetzt werden kann. In anderen Fällen sind bekannte Strukturen, Materialien oder Vorgänge nicht detailliert gezeigt oder beschrieben, um eine unklare Darstellung von Aspekten der Erfindung zu vermeiden.
  • Der Verweis auf „eine Ausführungsform“ in der vorliegenden Beschreibung bedeutet, dass ein(e) bestimmte(s) Merkmal, Struktur oder Eigenschaft, das/die im Zusammenhang mit der Ausführungsform beschrieben wird, in zumindest einer Ausführungsform der vorliegenden Erfindung enthalten ist. Somit bezieht sich die Formulierung „eine Ausführungsform“ an verschiedenen Stellen in der Beschreibung nicht notwendigerweise immer auf dieselbe Ausführungsform. Ferner können die jeweiligen Merkmale, Strukturen oder Eigenschaften auf jede beliebige Weise in einer oder mehreren Ausführungsformen kombiniert sein.
  • Der Klarheit halber können einzelne Komponenten in den vorliegenden Figuren auch mit ihrer Markierung in den Figuren anstatt durch eine bestimmte Bezugszahl genannt werden. Ferner können Bezugszahlen, die sich auf eine bestimmte Art von Komponente (im Gegensatz zu einer bestimmten Komponente) beziehen, mit einer Bezugszahl, gefolgt von „(typ)“ für „typisch“ versehen sein. Es versteht sich, dass die Konfiguration dieser Komponenten typisch für ähnliche Komponenten, die möglicherweise existieren, aber der Einfachheit und Klarheit halber in den Zeichnungen nicht dargestellt sind, oder für in anderer Hinsicht ähnliche Komponenten ist, die nicht mit separaten Bezugszahlen gekennzeichnet sind. Umgekehrt ist „(typ)“ nicht so zu verstehen, dass die Komponente, das Element usw. typischerweise für die/den offenbarte(n) Funktionsweise, Umsetzung, Zweck usw. verwendet wird.
  • Wie oben dargelegt, müssen Beschleuniger in der Lage sein, virtuelle Adressen in physikalische Adressen zu übersetzen, was für herkömmliche Beschleunigerausführungen einen großen zusätzlichen Latenzaufwand bedeutet.
  • Beispielsweise ist in einer Ausführungsform ein Befehl implementiert, der einen Deskriptor mit zusätzlichen Meta-Daten an einen Beschleuniger sendet, der gültige VA-PA-Übersetzungen umfasst, welche von dem/den Übersetzungs-Lookaside-Puffer(n) (TLB(s)) der CPU für den Kern, der einen den Befehl umfassenden Befehl ausführt, gelesen oder kopiert worden sind. Im Allgemeinen kann ein solcher Befehl zur Befehlssatzarchitektur (ISA) des Prozessors als neuer ISA-Befehl hinzugefügt sein, wie unten ausführlicher beschrieben wird.
  • Gemäß einem weiteren Ansatz wird der CPU-Kern-TLB von einer IO-Speicherverwaltungseinheit (IOMMU) „ausgeschnüffelt“ (Snooping), die dort zwischengespeicherte Übersetzungen beschafft. Diese können an alle CPU-Kerne übertragen werden oder auf effizientere Weise Punkt für Punkt (was die Information, welcher Thread/Core den Arbeitsauftrag übermittelt hat, erfordert) durchgeführt werden. Für maximale Effizienz sollte dieser Prozess erfolgen, sobald der Arbeitsauftragsdeskriptor den Beschleunigerkomplex erreicht - wenn abgewartet wird, dass der Deskriptor zur Ausführung aufgegriffen wird, kann die Warteschlangenverzögerung in der Zwischenzeit die Auslagerung des Kernthreads verursacht haben.
  • Wenn der Beschleuniger mit dem Arbeitsauftrag beschäftigt ist, verwendet er diese empfangenen VA-PA-Übersetzungen als Hinweise und beginnt, wenn ihm dies möglich ist, mit der Verarbeitung des Arbeitsauftrags. Parallel dazu wird einer Ausführungsform der normale IOMMU-Prozess befolgt, um VA-PA-Übersetzungen für die Anfragen zu erhalten, sie mit den Hinweisen (falls sie bereits von der Engine verwendet wurden) gegenzuprüfen oder die Hinweise durch die VA-PA-Übersetzungen aus dem IOMMU-Prozess zu ersetzen (falls die Engine diese Seiten noch nicht verwendet hat).
  • Während dies für Eingangsdaten besser funktioniert, da diese in den Beschleunigerkomplex eingelesen werden, ist bei Ausgangsdaten Vorsicht geboten. Dies kann auf folgende Weise berücksichtigt werden:
    1. 1. Die oben genannten Mechanismen (Snooping- oder befehlsbasiert) stellen nur Hinweise für Eingangs-/Lesedaten bereit. Die Engines müssen abwarten, dass die Übersetzungen im Ausgabepuffer aus der IOMMU eintreffen, um ihre Daten zu schreiben.
    2. 2. Die Mechanismen stellen Hinweise für alle Übersetzungen bereit, doch die Engines verfügen über ausreichend lokalen Speicher, um ihre Ausgaben zu puffern, bis die Übersetzungen durch die IOMMU überprüft worden sind.
    3. 3. In manchen Arbeitsauftragserteilungen liegt eine besondere Vorgabe vor, gemäß der die Ausgangsdaten Teil einer Transaktion sind. In diesen Fällen kann der Beschleuniger befähigt sein, Daten basierend auf den Hinweisen zurück auf die Ausgangsregionen im Speicher zu schreiben. Misslingt die Transaktion, signalisiert der Beschleuniger einen „Abbruch der Transaktion“.
  • In Fällen, in denen die Eingangs- oder Ausgangsübersetzungen falsch sind, muss die Engine entweder noch einmal von vorn anfangen oder sie kann Mechanismen aufweisen, um zu überprüften Zuständen zurückzukehren.
  • 1 und 2 zeigen beispielhafte Plattformarchitekturen 100 und 200, im Rahmen derer Aspekte der hier beschriebenen Ausführungsformen implementiert sein können. Die Plattformarchitektur 100 umfasst einen Prozessor 102 mit einer System-on-Chip(SoC)- Architektur, die auf einer Hauptplatte 103 angebracht ist. Der Prozessor 102 umfasst eine zentrale Verarbeitungseinheit (CPU) (auch als Kern oder Kerneinheit bezeichnet), die n Prozessorkerne 1061-106n umfasst, wobei n eine ganze Zahl ist. Beispielsweise kann n gleich 2, 4, 6, 8, 10, 12, 16, oder auch einer noch größeren Zahl sein. Allgemeiner ist der Prozessor 102 ein Multicore-Prozessor, d.h. er weist zumindest zwei Prozessorkerne auf. Jeder der Prozessorkerne 1061-106n ist mit First(L1)- und Second-Level(L2)- Caches, wie durch L1-Caches 1081-108n und L2-Caches 1101-110n veranschaulicht, gekoppelt. Wie weiter gezeigt, umfasst jeder L1-Cache 1081-108n sowohl einen Befehlscache (L1I) und einen Datencache (L1D).
  • Jeder der L1- und L2-Caches ist einem entsprechenden Übersetzungs-Lookaside-Puffer (TLB), wie durch TLBs 1121-112n für L1-Caches 1081-108n und TLBS 1141-114n für L2-Caches 1101-110n veranschaulicht, zugeordnet. Wie unten weiter beschrieben und v veranschaulicht, können in manchen Ausführungsformen jeder der L1-Befehls- und -Datencaches L1I und L1D einen entsprechenden TLB aufweisen.
  • Der Prozessor 102 umfasst verschiedene Zwischenverbindungsschaltungen, die verwendet werden, um verschiedene Komponenten auf dem Prozessor miteinander zu verbinden. Der Einfachheit halber ist eine Zwischenverbindungsschaltung als Zwischenverbindung 116 gezeigt, die auch als Maschengewebe bezeichnet wird. In der Praxis kann das Maschengewebe eine oder mehrere Ebenen auf Zwischenverbindungsinfrastruktur und eine Zwischenverbindungshierarchie umfassen, während jede Ebene auf sich selbst eine gesonderte Hierarchie umfasst (z.B. verschachtelte verbundene Hierarchien). Im Allgemeinen kann eine gegebene Zwischenverbindungshierarchie die Struktur und Vorgänge sowohl von standardisierten als auch von proprietären Protokollen umfassen. Ferner können Brücken zwischen den Schichten vorlegen, um Grenzflächen zwischen verschiedenen Arten von Protokollen zu bilden.
  • Verschiedene Komponenten auf dem Prozessor 102 sind über eine Zwischenverbindung 116 miteinander verbunden, einschließlich der L2-Caches 1101-110n, m (einer oder mehrere) Beschleuniger 1181-118m, eines Third-Level(L3)-Caches 122 (hier auch als Last-Level-Cache oder LLC bezeichnet), und eines Paars von Speichersteuerungen 124 und 126 (auch als MC1 und MC2 bezeichnet). Ferner ist jede der für jeden Prozessorkern veranschaulichten Komponenten, einschließlich des Kerns, des L1-Caches und der TLBs, entweder über eine direkte oder eine indirekte Verbindung kommunikativ mit der Zwischenverbindung 116 verbunden.
  • Jede der Speichersteuerungen 124 und 126 weist auch einen zugeordneten IOMMU- und IO-TLB-, gemeinsam als IOMMU/IOTLB-Block 128 und 130 dargestellt, auf. In Ausführungsformen, die mehrere Beschleuniger implementieren, kann der Beschleuniger in einer Schlange zwischenverbunden sein, wie durch den gestrichelten Doppelpfeil 120 gezeigt. Wie weiter unten in 11 gezeigt ist, weist ein Prozessor im Allgemeinen zusätzliche Komponenten und Zwischenverbindungsschaltungen auf, die aus Platzgründen nicht gezeigt sind darunter IO-Komponenten und Schnittstellen, die die Kommunikation mit externen IO-Komponenten und Erweiterungssteckplätzen unterstützen.
  • Jede der Speichersteuerungen 124 und 126 umfasst einen oder mehrere Kanäle, die mit einer oder mehreren DRAM(Dynamischer-Direktzugriffspeicher)-Speichervorrichtungen 132, wie doppelreihigen Speichermodulen (DIMMs) 134, verbunden sind. In 1 sind DRAM-Speichervorrichtungen als DRAM 1-4 dargestellt. In der veranschaulichten Ausführungsform ist ein entsprechender Speicherkanal mit jeder DRAM-Speichervorrichtung 132 verbunden, wie durch Ch. 1, Ch. 2, Ch. 3, usw. angezeigt, wobei „Ch.“ für Kanal steht. Dies ist jedoch nur ein Beispiel, da eine Speichersteuerung mehr als einen Speicherkanal aufweisen kann, der mit derselben Speichervorrichtung verbunden ist.
  • Jede der DRAM-Speichervorrichtungen 132 weist einen physikalischen Adressraum auf. Im Allgemeinen ist der physikalische Adressraum in Einheiten von „Seiten“ unterteilt, die wiederum in Einheiten von Cachezeilen unterteilt sind, obwohl auch ein anderes Adressschema vorliegen kann. Die physikalischen Adressräume der DRAM-Speichervorrichtungen sind einem virtuellen Adressraum, wie durch einen virtuellen Adressraum 136 gezeigt, zugeordnet. Der virtuelle Adressraum ist üblicherweise in eine Vielzahl von virtuellen Speicher-„Seiten“ unterteilt und, und es wird auf ihn auf Seitenebene zugegriffen, obwohl über die Seiten auch auf einzelne Cachezeilen zugegriffen werden kann. Die Zuordnung zischen den virtuellen und physikalischen Adressräumen erfolgt im Allgemeinen durch die Speichersteuerung und/oder andere Plattformkomponenten, einschließlich die IOMMU und die TLBs. Das Betriebssystem kann abhängig von der jeweiligen Plattform weitere Aspekte dieser Zuordnung bereitstellen.
  • In einer Ausführungsform ist der Prozessor 102 mit einer Platine wirkgekoppelt, die eine Hauptplatine 103 über einen „Sockel“ umfasst, oder auf andere Weise über eine direkte Kopplungstechnik mit der Hauptplatine gekoppelt ist, etwa durch Flip-Chip-Bonding. In jedem Fall ist es auf dem Gebiet üblich, die Prozessoren selbst als Sockel zu bezeichnen. Im Allgemeinen umfasst die Hauptplatine 103 eine elektrische Verdrahtung (z.B. Leiterbahnen und Vias), um elektrische Verbindungen entsprechend der physikalischen Struktur der verschiedenen in 1 gezeigten Zwischenverbindungen zu erleichtern.
  • Die Plattformarchitektur 200 von 2 umfasst einen Prozessor 202, vier DRAM-Speichervorrichtungen 132, m Beschleuniger 2041-204m und eine Netzwerk-Schnittstellen-Steuerung (NIC) 206 die auf einer Hauptplatine 203 befestigt oder auf sonstige Weise damit gekoppelt ist. Zusätzlich zu den Komponenten mit den gleichen Referenzzahlen in 1 und 2 umfasst der Prozessor 202 IO-Komponenten und Schnittstellen, die einen PCIe(Periphere-Komponentenzwischenverbindung-Express)-Root-Komplex 208, gekoppelt mit mehreren PCIe-Schnittstellen, die als PCIe-Schnittstellen 210, 212 und 214 gezeigt sind, umfassen. Die PCIe-Schnittstelle 210 ist über einen PCIe-Link 216 mit dem Beschleuniger 2041 gekoppelt, während die PCIe-Schnittstelle 212 über einen PCIe-Link 218 mit dem Beschleuniger 204m gekoppelt ist und die PCIe-Schnittstelle 214 über einen PCIe-Link 220 mit der NIC 206 gekoppelt ist. Die PCIe unterstützt verschiedene Lanebreiten und -geschwindigkeiten, einschließlich 1x-, 2x-, 4x-, 8x-, und 16x-Konfigurationen, wobei „x“ für die Anzahl an Lanes steht. Sowohl bestehende als auch zukünftige PCIe-Links und Schnittstellen können als die hier erörterten und in 2 gezeigten PCIe-Links und Schnittstellen verwendet werden.
  • Im Allgemeinen kann ein Off-Chip-Beschleuniger einen Chip umfassen (z.B. ein feldprogrammierbares Gate-Array (FPGA) oder einen Chip mit festgelegter, vorprogrammierter Logik), der auf der Hauptplatine angebracht ist oder auf einer anderen Beschleunigerplatine oder -karte als der, die möglicherweise in einem PCIe-Erweiterungsslot installiert ist, angeordnet sein kann. Es ist auch möglich, dass auf derselben Platine oder Karte mehrere Beschleuniger-Chips vorliegen.
  • Wie weiter unten näher erörtert wird, kann ein Off-Chip-Beschleuniger, etwa ein Beschleuniger 2041-204m, eine Speichersteuerung oder eine sonstige Art von Speicherschnittstelle umfassen, die es dem Beschleuniger ermöglicht, über einen oder mehrere Speicherkanäle auf Speichervorrichtungen des Systems zuzugreifen. Dies wird in 2 gezeigt, wo der Beschleuniger 2041 mit über den Speicherkanal 1 dem DRAM 1 verbunden ist, während der Beschleuniger 204m über den Speicherkanal 4 mit dem DRAM 4 verbunden ist, wobei die gestrichelte Linie bedeutet, dass die Verbindungen optional sind.
  • Durch die Verwendung von direktem Speicherzugriff (DMA) durch PCIe und darauf bezogene Komponenten ist die NIC 206 in der Lage, auf den Systemspeicher (z.B. DRAM-Speichervorrichtungen 1-4) zuzugreifen, ohne auf die CPU 104 angewiesen zu sein. Darüber hinaus können die DMA-Vorgänge auch verwendet werden, um die Datenübertragung zwischen der NIC 206 und einem oder mehreren der Beschleuniger 2041-204m zu unterstützen, wodurch Paketverarbeitungsvorgänge für Netzwerkverkehr ermöglicht wird, der von einem Netzwerk 220 empfangen oder an dieses gesendet wird und von einem oder mehreren Beschleunigern herunterzuladen ist.
  • Zusätzlich zu Plattformarchitektur, die On-Chip-Beschleuniger und Off-Chip-Beschleuniger verwenden, werden hybride Plattformarchitekturen unterstützt, die sowohl On-Chip- als auch Off-Chip-Beschleuniger umfasst. Bei diesen Architekturen sind im Allgemeinen dedizierte Aspekte der hier beschriebenen On-Chip- und Off-Chip-Beschleuniger miteinander kombiniert.
  • 3a und 3b zeigen weitere Details der in 1 und 2 gezeigten Prozessoren und Beschleuniger. 3a zeigt eine Plattformarchitektur 100a, die einen Prozessor 300 mit einem On-Chip-Beschleuniger 302 (auch als Beschleunigerkomplex bezeichnet, wenn der Beschleuniger mehrere Arten von Beschleunigerfunktionen unterstützt) umfasst. Der Prozessor 300 umfasst eine CPU 104, die ähnliche Komponenten wie die für die CPU 104 in 1 und 2 gezeigten umfasst, welche kollektiv als n Kerne 106 und CPU-Kern-TLBs 302 gezeigt sind. Es versteht sich, dass die CPU 104 ferner L1 und L2-Caches umfassen würde und dass die TLBs 302 repräsentativ für die TLBs 1121-112n und TLBS 1141-114n von 1 und 2 sind. Die Zwischenverbindung 116 und LLC 122 des Prozessors 102 sind kollektiv als Maschengewebe/LLC-Block 304 gezeigt, der mit einer Speichersteuerung 306 mit einem zugeordneten IOMMU/IOTLB 308 gekoppelt ist. Die Speichersteuerung 306 ist mit dem Speicher 310 gekoppelt, der eine oder mehrere DRAM-Speichervorrichtungen 132 von 1 und 2 veranschaulicht. Wie zuvor wäre die Speichersteuerung 306 mit einem oder mehreren Speicherkanälen pro DRAM-Speichervorrichtung (nicht gezeigt) mit den DRAM-Speichervorrichtungen gekoppelt.
  • 3a zeigt ferner eine Ausführungsform eines On-Chip-Beschleunigers 312, der repräsentativ für verschiedene Arten von Beschleunigern ist. Der On-Chip-Beschleuniger 312 umfasst eine Gewebeschnittstelle 314, einen Vorrichtungs-TLB 316, Host-Schnittstellen-DMA-Warteschlangen 318, eine Scheduler-Anfragen/Fertigstellungs-Warteschlange 320 und einen Bus 322, mit dem mehrere Kompressions- und Dekompressionsblöcke gekoppelt sind, wie durch die Kompressionsblöcke 324 und 326 bzw. die Dekompressionsblöcke 328 und 330 dargestellt. Die Gewebeschnittstelle 314 veranschaulicht im Allgemeinen verschiedene Arten von IO-Schnittstellen, die einen On-Chip-Beschleuniger mit der Zwischenverbindungsinfrastruktur auf dem Prozessor/SoC verbinden, was hier kollektiv als Maschengewebe veranschaulicht und beschrieben ist. Die jeweilige Zwischenverbindungsstruktur und das Protokoll können im Allgemeinen sowohl proprietäre und standardbasierte Zwischenverbindungen umfassen.
  • Zur Veranschaulichung weist der On-Chip-Beschleuniger 312 Funktionseinheiten auf, die zwei Kompressions- bzw. Dekompressionsblöcke umfassen. Beschleuniger werden allgemein verwendet, um CPU-intensive Aufträge von Prozessorkernen herunterzuladen, wie etwa Kompressions- und Dekompressionsfunktionen, die rechenintensiv sind. Ferner kann ein Beschleuniger eingebettete Schaltungen und Logik umfassen, die maßgeschneidert ist/sind, um eine oder mehrere spezielle Aufträge effizient auszuführen, etwa Kompression und Dekompression im hier beschriebenen Beschleuniger. Die Schaltung kann in Form einer ASIC (anwendungsspezifische integrierte Schaltung) vorliegen oder eine programmierbare Schaltung/Logik umfassen, wie durch ein FPGA bereitgestellt. Ein solcher FPGA kann einen oder mehrere FPGA-Blöcke umfassen, wie sie über Lizenz von verschiedenen Herstellern bezogen werden können. Ein FPGA-Block kann auch eine Spezialanfertigung umfassen. Im Allgemeinen wird die ASIC, der FPGA-Block oder eine ähnliche eingebettete Schaltung und Logik hier als Funktionseinheit bezeichnet, die ausgelegt ist, um eine entsprechende Funktion auszuführen.
  • Allgemeiner kann ein Beschleuniger auch als „Engine“ bezeichnet werden, wobei die Engine programmiert sein kann, um eine oder mehrere zugeordnete Funktionen auszuüben. In manchen Ausführungsformen kann eine Engine auf ähnliche Weise vorgehen wie ein eingebetteter Prozessor und in der Lage sein, Befehle für zugeordnete Funktionen auszuführen (z.B. Beschleuniger-Anwendungs-/Funktionsbefehle). Eine Engine kann auch das Ausführen von Befehlen mit einer eingebetteten Schaltung und Logik kombinieren.
  • Gemäß der Ausführungsform von 3b umfasst eine Plattformarchitektur 200a einen Prozessor 202, der mit einem Off-Chip-Beschleuniger 332 gekoppelt ist. Der Prozessor 202 umfasst im Allgemeinen Komponenten, die den Komponenten des Prozessors 202 von 2 ähnlich sind, wie kollektiv ähnlich zu 3a gezeigt, einschließlich n Kernen 106, CPU-Kern-TLBs 302, Maschengewebe/LLC304, Speichersteuerung 306 und IOMMU/IOTLB 308. Gleichermaßen gehen Komponenten und Blöcke des Off-Chip-Beschleunigers 332 und On-Chip-Beschleunigers 312 mit den gleichen Bezugszahlen ähnlich vor wie jene, die oben in Bezug auf 3a beschrieben werden.
  • Zusätzlich zu diesen Komponenten und Blöcken umfasst der Off-Chip Beschleuniger 332 ferner eine Speichersteuerung 334 und einen IO-Gewebe-Block 336. In der veranschaulichten Ausführungsform ist die Speichersteuerung 334 mit einem Speicher 310 gekoppelt, der, wie oben beschrieben, repräsentativ für eine oder mehrere DRAM-Speichervorrichtungen ist. Eine solche Speichersteuerung 334 kann im Allgemeinen über einen oder mehrere Speicherkanäle mit einer oder mehreren DRAM-Speichervorrichtungen verbunden sein.
  • In der veranschaulichten Ausführungsform von 3b ist der Off-Chip-Beschleuniger 332 über einen PCIe-Link 338 mit dem Prozessor 202 verbunden. Dementsprechend würde jeder des Prozessors 202 und des Off-Chip-Beschleunigers 338 ferner eine PCIe-Schnittstelle an den entgegengesetzten Enden des PCIe-Links 338 (der Übersichtlichkeit halber nicht gezeigt) umfassen. Wie oben erläutert, kann ein Off-Chip-Beschleuniger auf einer Beschleunigerplatine oder -karte, die in einem PCIe-Erweiterungsslot oder dergleichen installiert ist, umfasst oder auf einer Hauptplatine angebracht sein. Zusätzlich zu PCIe können andere Kommunikationsmittel eingesetzt werden, um einen Off-Chip-Beschleuniger in Kommunikation with einem Prozessor zu koppeln.
  • Host-Schnittstellen-DMA-Warteschlangen 318 und Scheduler-Anfragen/Fertigstellungs-Warteschlange 320 ermöglichen, dass die Beschleuniger 312 und 332 DMA-Vorgänge unterstützen, im Rahmen derer Zugriffe auf den Speicher 310 und andere Plattformkomponenten (z.B. NIC 206 von 2) durch geführt werden, ohne eine Beteiligung der CPU erfordern. Beispielsweise kann bei einem Beschleuniger, der konfiguriert ist, um Kompression und Dekompression zu unterstützen, Netzwerkverkehr, der an einem Empfangsanschluss auf einer NIC empfangen wurde, durch einen Beschleuniger dekomprimiert werden, bevor der Verkehr zur weiteren Verarbeitung durch einen Netzwerkstack, der durch das Ausführen von Softwarebefehlen auf einem Prozessorkern implementiert wird, weitergeleitet wird. Im Fall von ausgehendem Datenverkehr kann der Verkehr auf ähnliche Weise (d.h. Daten, die über einen NIC- Übertragungsanschluss an ein Netzwerk zu senden sind) durch einen Beschleuniger komprimiert werden.
  • Gemäß Aspekten von verschiedenen hier beschriebenen und veranschaulichten Ausführungsformen, einschließlich den Ausführungsformen von 6a, 6b, 7a, und 7b, werden TLB-Einträge, die VA-PA-Übersetzungen umfassen, von TLBs gelesen oder kopiert und (entweder die VA-PA-Übersetzung oder nur die PA) als Hinweis verwendet, um ein spekulatives Aufrufen (d.h. vorgreifendes Abrufen) und die Verarbeitung von Daten mittels eines Beschleunigers zu erleichtern. Zum besseren Verständnis der Vorgänge, die dem Lesen/Kopieren von TLB-Einträgen und/oder dem Bereitstellen von Hinweisen gemäß hier beschriebenen Ausführungsformen zugeordnet sind, soll nun der Betrieb einer beispielhaften 64-Bit-TLB-Architektur unter Bezugnahme auf 4 und 5 dargelegt werden.
  • Die 64-Bit-Architektur setzt ein virtuelles Adressierungsmodell ein, das im Wesentlichen ein flacher linearer 64-Bit-Adressraum ist. 64-Bit-Register werden als Zeiger in diesen Adressraum verwendet. Die Architektur unterstützt auch lineare virtuelle 32-Bit-Adressen, die in den virtuellen 64-Bit-Adressraum null-erweitert sind.
  • Der virtuelle 64-Bit-Adressraum ist in acht virtuelle 261-Byte-Regionen unterteilt. Eine Region wird durch die obersten 3 Bits der virtuellen Adresse ausgewählt. Jeder virtuellen Region ist ein Regionenregister zugeteilt, das einen 24-Bit-Regionenidentifiktor für die Region spezifiziert. Auf acht der möglichen virtuellen 224-Adressräume kann gleichzeitig über 8 Regionenregister zugegriffen werden. Falls gewünscht, können Regionen durch Zuweisung von sequenziellen Regionenidentifikatoren miteinander verschmolzen werden, z.B. um 62-, 63-, oder 64-Bit-Räume zu erzeugen.
  • 4 zeigt den Prozess der Zuordnung (auch als „Übersetzen“ bezeichnet) einer virtuellen Adresse 400 zu einer physikalischen Adresse 402, woraus eine VA-PA-Übersetzung resultiert. Die Bits der virtuellen Adresse 400 sind in drei Felder unterteilt: 404, 406 und 408. Das Feld 404 umfasst die signifikantesten drei Bits 61-63, die verwendet werden, um auf eine virtuelle Regionsnummer (VRN) zu zeigen. Das Feld 408, das die am wenigsten signifikanten Bits umfasst, bildet das Seitenoffset. Die restlichen Bits, die das Feld 406 umfassen, dienen dazu, eine virtuelle Seitennummer (VPN) zu spezifizieren. Die Seitenoffset-Bits (Feld 408) gelangen unverändert durch den Übersetzungsprozess, wie durch ein Pysikalische-Adresse-Seitenoffset 408' gezeigt ist. Genaue Bit-Positionen für das Seitenoffset und VPN-Bits (Feld 406) variieren abhängig von der Seitengröße, die bei der virtuellen Zuordnung verwendet wird. Zulässige Seitengrößen umfassen 4K, 8K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M und 4G.
  • Auf einer Speicherreferenz (einer anderen als einer Einfügung oder Bereinigung) wählen die VRN-Bits von Feld 404 aus 1 der 8 Regionenregister 412 einen Regionenidentifikator (RID) 410 aus. Ein TLB 214 wird dann auf einen Übersetzungseintrag mit einem übereinstimmenden VPN- und RID-Wert durchsucht. Wenn ein übereinstimmender Übersetzungseintrag gefunden wird, wird die physikalische Seitennummer des Eintrags (PPN) 416 mit den Seitenoffset-Bits (Offset 208') verknüpft, um die physikalische Adresse 402 zu bilden. Übereinstimmende Übersetzungen werden durch seitengranulare Privilegsebenen-Zugriffsrechtsüberprüfungen und optionale Schutzdomänenüberprüfungen qualifiziert, indem überprüft wird, ob der Schlüssel der Übersetzung in einem Satz von Schutzschlüsselregistern 417 enthalten ist, und es werden Lese-, Schreib- oder Ausführungsautorisierungen erteilt. Der Schlüsselwert ist in einem TLB-Schlüssel-Feld 418 definiert, während die Zugriffsrechte in einem Rechte-Feld 420 spezifiziert sind.
  • Wenn eine Übersetzung nicht im TLB resident ist, kann der Prozessor gegebenenfalls eine virtuelle Hash-Seiten-Tabellen(VHPT)-Struktur im Speicher (nicht gezeigt) auf die erforderliche Übersetzung durchsuchen und den Eintrag im TLB installieren. Kann der erforderliche Eintrag weder im TLB noch im VHPT gefunden werden, meldet der Prozessor eine TLB-Verlust-Störung, um anzufordern, dass das Betriebssystem die Übersetzung liefert. Nachdem das Betriebssystem die Übersetzung im TLB und/oder der VHPT installiert hat, kann der gestörte Befehl erneut gestartet werden und die Ausführung wieder aufgenommen werden.
  • In einer Ausführungsform verwaltet ein 64-Bit-Prozessor zwei Architektur-TLBs, wie in 5 gezeigt, darunter ein Befehls-TLB (ITLB) 500 und Daten-TLB (DLTB) 502. Jeder TLB wartet Übersetzungsanfragen für Befehls- bzw. für Datenspeicherreferenzen. Der Daten-TLB 502 wartet auch Übersetzungsanfragen für Referenzen durch den RSE- und den VHPT-Walker. Jeder des Befehls-TLB 500 und des Daten-TLB 502 ist ferner in zwei Unterabschnitte unterteilt: Übersetzungsregister (TR) (ITR 504 und DTR 506) und Übersetzungs-Cache (TC) (ITC 508 und DTC 510).
  • Der Übersetzungsregisterabschnitt des TLB ist ein vollständig assoziatives Array, das definiert ist, um Übersetzungen, die direkt von Software (z.B. einem OS) und/oder Firmware verwaltet werden, zu enthalten. Software/Firmware kann explizit eine Übersetzung in ein TR einfügen, indem sie eine Register-Slotnummer spezifiziert. Übersetzungen werden aus den TRs entfernt, indem eine virtuelle Adresse, Seitengröße und ein Regionenidentifikator spezifiziert werden. Übersetzungsregister ermöglichen es dem Betriebssystem kritische virtuelle Speicherübersetzungen im TLB zu „fixieren“. Beispiele umfassen I/-Räume, Kernel-Speicherbereiche, Frame-Puffer, Seitentabellen, sensiblen Unterbrechungskode usw.
  • Einträge werden mit dem Befehl Insert Translation Register (itr) in einem spezifischen TR-Slot angeordnet. Ist eine Übersetzung eingefügt, ersetzt der Prozessor die Übersetzung nicht automatisch, um Platz für weitere Übersetzungen zu schaffen. Lokale Übersetzungen können nur durch Ausgabe des Befehls Purge Translation Register (ptr) entfernt werden.
  • Es versteht sich für Fachleute, dass die obige Beschreibung eines 64-Bit-TLB und zugeordneter Architektur, wie in 4 und 5 gezeigt, rein beispielhaft für eine Art von TLB sind und keine Einschränkung darstellt. Es können andere Arten der TLB-Architektur gemäß den Grundsätzen und Lehren der Ausführungsformen unter Verwendung von fachbekannten Techniken implementiert werden.
  • IO-Vorrichtungen, die SVM-fähig sind, müssen Adressübersetzungen durchführen, bevor gelesene/geschriebene Transaktionen über die IO-Gewebe übermittelt werden. Ein Mechanismus besteht darin, dass ein TLB in der Vorrichtung vorliegt, der manche Übersetzungen zwischenspeichert. Wenn die Übersetzung nicht durch den Vorrichtungs-TLB gewartet werden kann, wird die Anfrage an den IOTLB in der IOMMU gesendet. Die Adressübersetzung wird durch die IOMMU durchgeführt, indem der IOTLB nachgeschlagen wird, und, wenn kein Eintrag vorliegt, Seitenwalks initiiert werden. Im Fall von Seitenstörungen muss die IOMMU der Software das Ereignis melden. Weitere Einzelheiten sind in der PCISIG-Norm unter ATS (Adressübersetzungsdienst) zu finden (siehe beispielsweise allgemein PCI-Express Adressübersetzungsdienst 1.1). Im Rahmen von PCIe wird der IOTLB auch als Adressübersetzungs-Cache (ATC) bezeichnet, um ihn von dem/den TLB(s) zu unterscheiden, die von der CPU verwendet werden. Gegebenenfalls kann ein ATC gesondert vom IOTLB abgespeichert sein, wobei Aktualisierungen des ATC in den IOTLB kopiert werden.
  • Neue ISA-Befehle
  • Gemäß Aspekten von manchen hier offenbarten Ausführungsformen sind neue Befehle bereitgestellt, die als Teil einer ISA eines Prozessors implementiert sein können. Die grundlegende Idee besteht darin, dass, wenn ein CPU-Thread auf einen Beschleuniger zugreifen muss, der Thread seinen Anfragendeskriptor übermittelt, indem er ihn an eine spezifische Speicheradresse schreibt (die dem Eingabeportal der Beschleunigervorrichtung im Speicher zugeordnet wurde). Die Speicheradresse wird davor durch den Thread durch einen Kernel-Aufruf ermittelt, der die Ermittlung/Aufzählung von Beschleunigern und ihrer Funktionsweise handhabt.
  • Der Thread kann diese Speicherposition nicht durch normale Last-/Speicher-Befehle lesen/schreiben, sondern er kann nur einen Deskriptor für sie schreiben und mithilfe der speziellen ISA eine Bestätigung von der Vorrichtung (über die erfolgte Annahme) empfangen. Die Hardware des CPU-Kerns erhöht auch die Deskriptor-Nutzlast durch zusätzliche Informationen, wie Prozess/Thread-IDs und, was wichtig ist, eine Liste von Übersetzungen, wie unten in PROGRAMMAUSDRUCK 1 gezeigt, die einen Pseudokode zur Implementierung des ISA Befehls Enq_with-Translations_v1 umfasst.
  • Die Kern-Hardware führt nur die Übersetzungen auf, die in den L1- oder L2-TLBs vorhanden sind, und löst, wenn sie nicht vorhanden sind, nicht das Abrufen der Übersetzungen auf. Der Grund dafür ist, dass der Beschleuniger wahrscheinlich die Daten benötigt, aber nicht der Kern-CPU-Thread.
    Figure DE102018213430A1_0001
  • Der Befehl Enq_with-Translations_v1 umfasst die drei Parameter (Operanden) dest, src, und len, die jeweils in einem ersten und einem zweiten 64-Bit-Register m64 und einem 64-Bit-Register r64 gespeichert sind. Der Eintrag m64 bedeutet, dass der Operand ein Zeiger für den Speicher ist, damit Inhalte in einem Last-/Speicher-Befehl verwendet werden. Der Eintrag r64 bedeutet, dass der Operand als Datenwert verwendet wird. Wie in PROGRAMMAUSDRUCK 1 gezeigt ist, speichert dest die Adresse des Beschleunigerportals, in das der Deskriptor geschrieben wird, während src die Adresse des Deskriptors auf der Benutzeranwendung einer Länge len speichert.
  • Wie weiter unten in den Zeilen 6-17 gezeigt ist, weist der Deskriptor in der Ausführungsform von PROGRAMMAUSDRUCK 1 ein Format auf, das die Anzahl an Eingangspuffern, einen Zeiger auf jeden Eingangspuffer (z.B. input-buffer2-pointer, input-buffer2-pointer) und die Größe jedes Eingangspuffers (gezeigt durch input-bufferl-size, input-buffer2-size...), die Anzahl an Ausgangspuffern, einen Zeiger und eine Größe für jeden Ausgangspuffer (gezeigt durch output-bufferl-pointer, output-buffer2-size) und andere Nutzlastinformationen, wie Funktions-Opcodes, Fertigstellungsaufzeichnungen usw. umfasst.
  • Wie in den Zeilen 19-25 gezeigt ist, sind die VM# (Anzahl virtueller Maschinen), Prozess-ID, Thread-Anzahl und Kernanzahl auf dest geschrieben. Die äußere FOR-Schleife (Zeilen 20-24) wird verwendet, um jeden Eingangspuffer in src zu verarbeiten. Die innere FOR-Schleife weist einen Iterator auf, der die Größe einer Seite aufweist (in diesem Beispiel 4K, wobei auch andere Seitengrößen verwendet werden können). Für jede Seite in jedem Puffer wird die physikalische Adresse unter Verwendung der virtuellen Adresse der aktuellen Seite in einem TLB nachgeschlagen (virtuelle Adresse des Pufferzeigers plus „i“, was gleich der Seitengröße mal dem Seitenoffset von Beginn des Puffers ist). Ist das Ergebnis nicht gleich NULL, wird die physikalische Adresse der aktuellen Seite auf dest geschrieben.
  • Wie weiter in den Zeilen 27-28 gezeigt ist, wird die Benutzernutzlast, auf dest geschrieben, indem eine Speicherkopie (memcopy) von Länge len Bytes von src (Register) in dest (Register) geschrieben wird. Der Thread wartet dann auf eine Bestätigung des Beschleunigers (Zeile 29), und entweder gelingen die Rückgaben (erfolgreiche fehlerfreie Verarbeitung) oder sie schlagen fehl (ein Fehler ist aufgetreten), wie in Zeile 31 gezeigt ist.
  • Varianten
  • Die Basisversion des ISA-Befehls mit dem Pseudokode, der im PROGRAMMAUSDRUCK 1 gezeigt ist, kann sowohl für den Eingangs- als auch für den Ausgangspuffer auf Lookup-Übersetzungen erweitert werden. In Fällen von Kontext-/Zustandspuffern, die sowohl ausgelesen als auch beschrieben werden, würde der Befehl eine Übersetzung für sie schreiben, doch würde der Beschleuniger den Schreibzustand zurückhalten, bis die Übersetzung bestätigt ist.
  • Bei der Basisversion des Befehls zur Einreihung in die Warteschlange wird vom Beschleuniger ausschließlich Erfolg oder Misserfolgen zurückgemeldet. Um ein System mit geringer Latenzzeit zu ermöglichen, wird dieses Protokoll erweitert, so dass der Beschleuniger eine Art von „Zeit-bis-zum-Dienst“-Schätzung zurücksendet. Dies entspricht in etwa den Erfahrungen beim Eintritt in eine Art Warteschlange, wenn angegeben wird, dass die zu erwartende Wartezeit „X“ ist. Basierend auf der zu erwartenden Wartezeit kann der Thread beschließen, zu warten/zu pollen oder auszulagern. Zusätzlich dazu kann er beschließen, die Übersetzungen für den Ausgangspuffer vorgreifend abzurufen, da der CPU-Thread damit arbeiten müsste. Ein Pseudokode gemäß einer Ausführungsform einer Variante des Basisbefehls aus dem PROGRAMMAUSDRUCK 1 ist in PROGRAMMAUSDRUCK 2 gezeigt.
    Figure DE102018213430A1_0002
    Figure DE102018213430A1_0003
  • Die Zeilen 1-30 des PROGRAMMAUSDRUCKS 1 und des PROGRAMMAUSDRUCKS 2 sind gleich (mit Ausnahme der unterschiedlichen Befehlsnamen). In Zeile 31 wird dem vom Beschleuniger zurückgegebenen Zeitwert „T“ zugewiesen. Wenn T unter einer vordefinierten Schwelle t1 liegt, werden die in den Zeilen 34-41 gezeigten Vorgänge ausgeführt. Für jeden Ausgangspuffer in src (Zeile 34) und für jede der Seiten für diesen Puffer (Zeile 35) wird eine physikalische Adresse (PA) für die Seite nachgeschlagen, indem auf ähnliche Weise wie oben dargelegt ein TLB verwendet wird. Wenn die PA gleich NULL ist, setzt Seiten-Walking ein, um die physikalische Adresse zu finden und in den TLB einzufügen. Wie in Zeile 43 gezeigt, wird mit dem Ausführen des aufrufenden Threads gewartet, wenn T unter einer zweiten Schwelle t2 liegt, andernfalls wird es gegen einem anderen Thread ausgetauscht.
  • Gegebenenfalls wird alternativ zum vorgreifenden Abrufen von Übersetzungen über den Seiten-Walker ein umgekehrtes Snooping aus dem IOTLB nach Ausgangsdatenübersetzungen durchgeführt.
  • Beschleunigerverarbeitung
  • Vorgänge und Datenströme für vorgreifendes Abrufen von Pufferdaten in Verbindung mit der Beschleunigerverarbeitung bei beispielhaften On-Chip-Beschleunigerausführungsformen sind in 6a und 7a gezeigt, während entsprechende Vorgänge und Datenflüsse für beispielhafte Off-Chip-Beschleunigerausführungsformen in 6b und 7b gezeigt sind. Zusätzlich dazu sind Vorgänge und Logik gemäß beispielhaften Ausführungsformen von Beschleunigerverarbeitung in den Flussdiagrammen 800 und 900 von 8 und 9 gezeigt.
  • 6a zeigt eine Umsetzung des Befehls Enq_with-Translations_v1 unter Verwendung der Plattformarchitektur 100a von 3a. In diesem Beispiel ruft ein Ausführungsthread 600, der auf dem Kern n ausgeführt wird, den Befehl Enq_with-Translations_v1 (in Block 602 gezeigt) mit dedizierten Daten auf, die in die oben erörterten Operanden geladen werden, einschließlich Referenzen (z.B Zeiger) auf die virtuellen Adressen des Puffers. Der Befehl Enq_with-Translations_v1 verwendet die virtuellen Pufferadressen als Eingaben an den/die dem Kern n zugeordneten TLB(s). In einer Ausführungsform wird beispielsweise der Daten-TLB für den L1-Cache verwendet, während in einer anderen Ausführungsform sowohl der Daten-TLB für den L1-Cache und der TLB für den L2-Cache verwendet wird. Mithilfe der Puffer-VAs als Lookups wird überprüft, ob ein TLB-„Treffer“ oder -„Misserfolg“ vorliegt, wobei TLB-Treffer bedeutet, dass ein TLB-Eintrag, der eine VA-PA-Übersetzung für die Puffer-VA umfasst, vorliegt, wobei der Befehl Enq_with-Translations_v1 die physikalische Adresse (PA) für diese VA zurücksendet. Wie in den Zeilen 20-25 von PROGRAMMAUSDRUCK 1 beschrieben, verwendet der Befehl Enq_with-Translations_v1 die TLB-Nachschläge sendet die PAs für jede der Seiten im Speicher zurück, die zum Speichern jedes Puffers verwendet werden.
  • Der Befehl Enq_with-Translations_v1 reiht ferner einen Anfragendeskriptor 604 in einer Warteschleife in einem Portal des Beschleunigers 312 ein, wie durch den Anfragendeskriptor veranschaulicht, der zur Scheduler-Anfragen/Fertigstellungs-Warteschlange 320 hinzugefügt ist. Der Anfragendeskriptor enthält die verschiedenen Parameter aus dem PROGRAMMAUSDRUCK 1, einschließlich Puffer-VAs und Größen 605 plus die übersetzten PAs, die als Adresshinweise dienen.
  • In einer Ausführungsform wird, wenn ein Anfragendeskriptor in eine Warteschlange eingereiht ist, unter Verwendung von DMA-Übertragungen ein spekulativer Datenaufrufvorgang durchgeführt, um die (mutmaßlich) in den Speicherseiten, die den PA-Hinweisen 606 und den Puffergrößen entsprechen, gespeicherten Pufferdaten vorgreifend abzurufen, wie in Block 608 gezeigt. Bei der Plattformarchitektur 100a wird die DMA-Übertragung durch Einsatz der Host-Schnittstellen-DMA-Warteschlangen 318, der Gewebeschnittstelle 314, dem Maschengewebe/LLC 304, der Prozessorspeichersteuerung 306 und den Speicher 310 erleichtert, wie durch die fett markierten Anschlüsse in 6a veranschaulicht. Nach dem vorgreifenden Abrufen der Pufferdaten kann eine spekulative Verarbeitung der Pufferdaten durch eine oder mehrere Funktionseinheiten auf dem Beschleuniger 312 beginnen.
  • 6b zeigt eine Umsetzung des Befehls Enq_with-Translations_v1 unter Verwendung von Plattformarchitektur 200a von 3b. Wie anhand der gleich nummerierten Komponenten und Blöcke in 6a und 6b zu sehen ist, sind die Vorgänge, die bis zum Einreihen des Anfragendeskriptors 604 in eine Warteschlange durchgeführt werden, für 6a und 6b gleich. Bei der Plattformarchitektur 200a ist jedoch der DMA-Zugriffsmechanismus ein anderer. Wie in Block 610 gezeigt, wird der DMA-Vorgang durch Einsatz des On-Board-Beschleunigers 332 der Speichersteuerung (334) erleichtert. Wie durch die fett markierten Verbindungen gezeigt, umfasst der DMA-Zugriffspfad Host- Schnittstellen-DMA-Warteschlangen 318, das IO-Gewebe 336, die Speichersteuerung 334, und den Speicher 310. Wie zuvor kann nach dem vorgreifenden Abrufen der Pufferdaten die spekulative Verarbeitung der Pufferdaten durch eine oder mehrere Funktionseinheiten auf dem Beschleuniger 312 beginnen.
  • 7a und 7b zeigen Ausführungsformen von Schemata, die vorgreifendes Abrufen von Pufferdaten mittels IOTLB-Snooping unterstützen. Auf ähnliche Weise wie in 6a und 6b wird ein Ausführungsthread 700 auf dem Kern n ausgeführt und reiht einen Anfragendeskriptor 702 unter Verwendung des Beschleunigerportals ein, wie durch die Scheduler-Anfragen/Fertigstellungs-Warteschlange 320 gezeigt. Doch anstatt die physikalischen Adressen des Puffers zu umfassen, umfasst der Anfragendeskriptor 702 die virtuellen Adressen des Puffers.
  • Wie zuvor wird, wenn der Anfragendeskriptor 702 in die Warteschlange eingereiht ist, ein spekulativ vorgreifendes Abrufen und Verarbeiten der Pufferdaten mittels DMA-Übertragungen durchgeführt. Gemäß der Ausführungsform von 7a ist der für die DMA-Übertragungen verwendete Pfad derselbe wie in 6a. Allerdings beziehen sich die vorgreifenden Zugriffe der DMA auf den Speicher 310 bei den IOTLB-Snooping-Ausführungsformen auf die virtuellen Adressen des Puffers und nicht auf die physikalischen Adressen. Da die Speichersteuerung physikalische Adressen verwendet, um auf den Speicher 310 zuzugreifen, muss vor dem Speicherzugriff eine VA-PA-Übersetzung durchgeführt werden. Dies wird durch den Einsatz des IOMMU/IOTLB 308 erleichtert. Erst wird der IOTLB überprüft, um festzustellen, ob ein bestehender TLB-Eintrag für die VA zu einem Treffer führt. Trifft dies zu, wird die zurückgesendete PA verwendet, um auf die Speicherseite für den Puffer zuzugreifen. Führt der TLB-Nachschlag für den IOMMU/IOTLB 308 zu einem Misserfolg, führt der IOMMU/IOTLB unter Verwendung der VA als TLB-Nachschlag ein Snooping des/der dem Kern n zugeordneten TLB(s) durch, wie in Block 706 gezeigt. Bei TL-Treffern werden die entsprechenden TLB-Einträge (VA-PA-Übersetzungen) aus dem/den Anwendungskern-TLB(s) in den IOMMU/IOTLB 308 kopiert, wie in Block 708 gezeigt. Auf diese dedizierten Speicherseiten für den Puffer in Speicher 310 kann dann mithilfe von dedizierten TLB-Einträgen im IOMMU/IOTLB 308 zugegriffen werden, wie in Block 710 gezeigt.
  • Wie weiter in 7a und 7b gezeigt, können TLB-Einträge in den IOMMU/IOTLB in den Vorrichtungs-TLB 316 kopiert werden. Gemäß diesem Ansatz kann der Vorrichtungs-TLB auf einen TLB-Treffer überprüft werden, bevor der DMA-Vorgang an die Speichersteuerung 306 übermittelt wird. Wenn der VA-Nachschlag im Vorrichtungs-TLB zu einem Treffer führt, kann die PA aus der VA-PA-Übersetzung für die Speicherseite mit der DMA-Zugriffsanfrage übermittelt werden, womit kein Einsatz des IOMMU/IOTLB 308 mehr erforderlich ist.
  • In einer Ausführungsform wird IOTLB-Snooping der CPU-Kern-TLBs 302 in Verbindung mit zugeordneten DMA-Übertragungen durchgeführt. In einer anderen Ausführungsform kann spekulatives IOTLB-Snooping vor den DMA-Übertragungen durchgeführt werden. Bei diesem Ansatz führt der IOTLB spekulativ vorgreifendes Abrufen von aktuellen CPU-Kern-TLB-Einträgen durch. Abhängig von der Größe des IOTLB und weiteren Faktoren, wie der Zwischenverbindungsbandbreite und Aspekten der durch das IOTLB-Snooping verbrauchten Latenzzeit können verschiedene Ansätze für vorgreifendes Abrufen verfolgt werden.
  • 7b zeigt eine Ausführungsform des TLB-Snoopingschemas unter Verwendung der Plattformarchitektur 200a aus 3b. Der Anfragendeskriptor und sein Vorgang zum Einreihen in eine Warteschlange sind dieselben wie in 7a gezeigt und oben beschrieben. Bei der Plattformarchitektur 200a verläuft der DMA-Zugriffspfad jedoch über die Speichersteuerung (334) auf dem Beschleuniger 332 anstatt über die Speichersteuerung 306. Bei der Plattformarchitektur 200a wird der Vorrichtungs-TLB 316 durch die Speichersteuerung 334 zur Durchführung von VA-PA-Übersetzungen verwendet. Wenn der TLB-Nachschlag der Vorrichtungs-TLB 316 zu einem Misserfolg führt, wird durch den IOMMU/IOTLB ähnlich wie für 7a beschrieben Snooping durchgeführt. Sobald die physikalische Adresse für den Pufferspeicherseite verfügbar ist (entweder aus dem Vorrichtungs-TLB oder durch den IOMMU/IOTLB ausgelesen oder durch Snooping erhalten), wird die PA von der Beschleunigerspeichersteuerung verwendet, um auf die Pufferspeicherseiten im Speicher 310 zuzugreifen, wie in Block 712 gezeigt.
  • In einer Ausführungsform werden die durch für den Beschleuniger durchgeführtes IOMMU/IOTLB-Snooping erhaltenen IOTLB-TLB-Einträge in den Vorrichtungs-TLB kopiert. Im Allgemeinen kann das Kopieren von Einträgen aus dem IOTLB in einen Vorrichtungs-TLB in Verbindung mit einem aktuellen DMA-Vorgang durchgeführt werden, oder es kann asynchron zu DMA-Vorgängen erfolgen, im Rahmen derer mehrere TLB-Einträge kopiert werden können.
  • Abhängig von den jeweiligen Plattformkonfigurationen kann die Plattform mehr als einen Off-Chip-Beschleuniger umfassen. Es können auch Ausführungsformen unterstützt werden, die eine Kombination auf Off-Chip- und On-Chip-Beschleunigern umfassen. Darüber hinaus kann eine Plattformarchitektur, wie in 1 und 2 gezeigt, mehrere Speichersteuerungen jede mit einem eigenen IOMMU/IOTLB, umfassen. Zudem können die IOTLB-Einträge aus Speicherzugriffen von anderen IO-Vorrichtungen in der Plattform als dem Beschleuniger resultieren, wie etwa aus DMA-Vorgängen, die zur Übertragung von Daten zwischen dem Systemspeicher und einer NIC verwendet werden.
  • Zusätzlich zum vorgreifenden Abrufen und Verarbeiten von Pufferdaten, sind Mechanismen bereitgestellt, um zu überprüfen, ob die Pufferdaten, auf die zugegriffen wird, wirklich die korrekten Daten sind. In einer Ausführungsform werden die Pufferdaten validiert, indem überprüft wird, ob die für das vorgreifende Abrufen von Daten verwendeten physikalischen Adressen die korrekten physikalischen Adressen sind. Der Grund für das Überprüfen der physikalische Adressen (und damit der Pufferdaten) ist, dass TLB-Einträge veralten können oder möglicherweise auf andere Weise nicht die tatsächliche physikalische Position einer gegebenen Speicherseite zu einem bestimmten Zeitpunkt wiedergeben. beispielsweise können Speicherpuffer durch ein Betriebssystem aus dem physikalischen Speicher und in diesen ausgelagert werden (z.B. auf die Festplatte ausgelagert werden, um die Größe des physikalischen Speichers der Plattform zu erhöhen). Es ist auch möglich, dass sich eine gegebene VA-PA Zuordnung ändert, was dazu führt, dass auf die falsche Speicherseite zugegriffen wird.
  • Wie oben erörtert zeigen die Flussdiagramme 800 und 900 von 8 und 9 Vorgänge und Logik gemäß beispielhaften Ausführungsformen von Beschleunigerverarbeitung. Unter Bezugnahme auf das Flussdiagramm 800 von 8 wird in Block 802 ein ISA-Befehl zum Einreihen in eine Warteschlange verwendet, um einen Deskriptor für eine spezielle Adresse zu schreiben, die einem Portal im Beschleuniger zugeordnet ist. Dies führt dazu, dass der Beschleuniger in Block 804 ein „Doorbell“-Signal erhält. Dabei handelt es sich tatsächlich um ein Signal oder dergleichen, das vom Beschleuniger erhalten wird und anzeigt, dass es eine neue Aufgabe auszuführen gilt. Als Antwort auf den Empfang des Doorbell-Signals überprüft der Beschleuniger seine Hardware-Warteschlangen, um sicherzustellen, dass eine leere Stelle vorliegt (damit der Deskriptor zu einer Hardware-Warteschleife hinzugefügt wird).
  • Wie durch den Entscheidungsblock 806 gezeigt, geht die Logik, wenn es eine leere Stelle gibt, zu einem Block 808 über, in dem der Deskriptor zur Anfragenwarteschleife des Beschleunigers hinzugefügt wird und dem Thread auf der CPU, der den Deskriptor übermittelt hat, der Erfolg zurückgemeldet wird. Beispielsweise wird der Deskriptor im Zusammenhang mi dem Beschleuniger von 3a und 3b zu einer Anfragendeskriptor-Warteschleife in einer Scheduler-Anfragen/Fertigstellungs-Warteschlange 320 hinzugefügt (darin eingereiht). Ist keine leere Stelle vorhanden, geht die Logik über zu Block 810, wobei der Beschleuniger gegebenenfalls einen Wert zurücksenden kann, der die aktuelle Warteschlangentiefe darstellt und als Proxy für erwartete Wartezeit, nach der eine Stelle verfügbar sein sollte, verwendet wird.
  • An diesem Punkt geht die Logik über zum Flussdiagramm 900. Wie in Block 902 gezeigt, starten, sobald der Deskriptor gelesen wurde, ATS-Anfragen für alle der durch den Deskriptor identifizierten Puffer. Parallel dazu wird in einem Entscheidungsblock 904 bestimmt, ob der Deskriptor bereit ist, durch eine Funktionseinheit auf dem Beschleuniger verarbeitet zu werden. Lautet die Antwort NEIN, werden nach einer vordefinierten Verzögerung und/oder unter Verwendung eines Poll-Schemas eine oder mehrere aufeinanderfolgende Überprüfungen des Entscheidungsblocks 904 vorgenommen. Sobald die Antwort JA ist, geht die Logik zu Block 906 über, in dem der ATS-Status des Eingangs- und Zustandspuffers überprüft wird.
  • In einem Entscheidungsblock 908 ist eine Bestimmung darüber verfügbar, ob der Status anzeigt, dass ATS für die Eingangs- und Zustandspuffer verfügbar ist. Ist die Antwort JA, geht die Logik über zu Block 910, in dem, neben dem Ausführen der Funktionseinheit, ein DMA-Vorgang gestartet wird. Ist die Antwort auf den Entscheidungsblock 908 NEIN, geht die Logik über zum Entscheidungsblock 912, in dem bestimmt wird, ob ein Hinweis mit dem Deskriptor für die ersten Eingangs- und Zustandsseiten bereitgestellt ist. Ist die Antwort JA, wird spekulativ ein DMA-Vorgang gestartet, neben dem spekulativen Ausführen der Funktionseinheit mit gelesenen Raten. Ist die Antwort auf den Entscheidungsblock 912 NEIN, kehrt die Logik zurück zu Block 906.
  • Währenddessen werden durchgehend die im gestrichelten Kasten 916 gezeigte(n) Vorgänge und Logik asynchron durchgeführt. In Block 918 werden Überprüfungen vorgenommen, um neue ATS-Zuordnungen in Gegenüberstellung zu spekulativ verwendeten Übersetzungen zu detektieren. Wie oben dargelegt, sind Details des Betriebs von ATS durch die PCISIG-Norm definiert (z.B. PCI-Express-Adressübersetzungsdienst 1.1).
  • In Entscheidungsblock 920 wird bestimmt, ob eine Übereinstimmung vorliegt. Ist die Antwort JA, geht die Logik zu Block 922 über, in dem die Verarbeitung fortgesetzt wird. Ist allerdings die Antwort auf den Entscheidungsblock 920 NEIN, wird entweder der Prozess von Anfang an neu gestartet, wenn alle ATS-Vorgänge abgeschlossen worden sind, oder es wird die Verarbeitung von einem vorangehenden, für gut befundenen Überprüfungspunkt weg wieder aufgenommen.
  • Wie weiter veranschaulicht, führt jeder der Blöcke 922, 910 und 914 asynchron in einen Block 926 zu. In diesem Block werden alle Ausgaben in einen temporären lokalen Speicher gepuffert, bis der ATS gültige Übersetzungen für die erste(n) Seite(n) des/der Ausgangspuffer(s) bereitstellt. Dieser Prozess wird dann in Block 928 abgeschlossen, wo der Ausgangsdatenstrom (nichtspekulativ) ausgeschrieben wird.
  • In manchen Ausführungsformen wird auf den PCIe-ATS durch Emulieren einer PCIe-Vorrichtung zugegriffen. Beispielweise ist der Beschleuniger in den hier beschriebenen Ausführungsformen eines On-Chip-Beschleunigers, wie in 3a gezeigt, über eine Gewebeschnittstelle, die kein PCIe einsetzt, mit dem Maschengewebe gekoppelt. Um auf den PCIe-ATS zuzugreifen, emuliert der Beschleuniger eine PCIe-Vorrichtung, indem er PCIe-Protokoll-Nachrichten verwendet, die in über die Gewebeschnittstelle versendeten Nachrichten eingekapselt sind. Die Maschengewebe-Zwischenverbindungsstruktur umfasst eine PCIe-zu-Gewebe-Brücke, die konfiguriert ist, um eine Schnittstelle zwischen der PCIe-Zwischenverbindung und der Gewebezwischenverbindung herzustellen. Auf der Brücke werden die eingekapselten PCIe-Nachrichten entkapselt und an eine dedizierte PCIe-Komponente auf dem Prozessor weitergeleitet, wie etwa den PCIe-Root-Komplex.
  • In einer Ausführungsform kann jeder der vorhergehenden Befehle Enq_with-Translations_v1 und Enq_with-Trans!ations_v2 in Prozessoren implementiert sein, die eine x86-ISA einsetzen. Dies ist jedoch rein beispielhaft und stellt keine Einschränkung dar, da Varianten der vorhergehenden Befehle auf verschiedenen Prozessorarchitekturen implementiert sein können. Ein Beispiel dafür ist der RISC-Style-Arm-Prozessor. ARM-Befehle sind im Allgemeinen zu 3 Operanden fähig. Sie besitzen Integer-Skalarbefehle, die auf allgemeinen Registern (GPRs) (z.B. 16 oder 32 Registern) arbeiten, und Vektor-/Gleitkomma-Befehle, die auf 128-Bit-SIMD (so genannten Neon)-Registern arbeiten.
  • Ein Beispiel für eine Ausführungsform einer Arm-Prozessor-Mikroarchitektur 1000 ist in 10 gezeigt. Die Mikroarchitektur 1000 umfasst eine Zweigvorhersageeinheit (BPU) 1002, eine Abrufeinheit 1004, einen Befehls-Übersetzungs-Lookaside-Puffer (ITLB) 1006, einen 64KB(Kilobyte)-Befehlsspeicher 1008, eine Aufrufwarteschlange 1010, eine Vielzahl von Entschlüsselungseinheiten (DECs) 1012, einen Registerumbenennungsblock 1014, einen Neuordnungspuffer (ROB) 1016, Reservierungsstationseinheiten (RSUs) 1018, 1020 und 1022, eine arithmetischlogische Zweigeinheit (BR/ALU) 1024, einen ALU/MUL(Multiplikator)/BR 1026, Verschieben/ALUs 1028 und 1030, und Last-/Speicherblöcke 1032 und 1034. Die Mikroarchitektur 1000 umfasst ferner Vektor-/Gleitkomma(VFP)-Neon-Blöcke 1036 und 1038 und einen VFP-Neon-Kryptographieblock 1040, einen L2-Steuerblock 1042, Integer-Register 1044, 128-Bit-VFP- und Neon-Register 1046, einen ITLB 1048 und einen 64KB-Befehlsspeicher 1050.
  • Im Allgemeinen kann jeder der hier beschriebenen Befehle Enq_with-Translations_v1 und Enq_with-Translations_v2 unter Verwendung von eingebetteter Logik (z.B. über Schaltungen), Mikrokode oder einer Kombination der beiden implementiert werden. Bei einer Arm-Mikroarchitektur können für die 64-Bit-Operanden m64 und r64 allgemeine Register verwendet werden.
  • Aus Platzgründen sind die Prozessoren 102 und 202 in 1 und 2 vereinfacht dargestellt. 11 zeigt eine Plattformarchitektur 1100, die weitere Details eines Prozessors 1102 und von Plattformkomponenten zeigt, welche im Allgemeinen in der Plattformarchitektur 100 und 200 von 1 und 2 umfasst sein können. Die Plattformarchitektur 1100 umfasst eine Hauptplatine 1104, auf der verschiedene Komponenten befestigt sind und/oder die auf sonstige Weise kommunikativ mit ihr gekoppelt sind, einschließlich den Prozessor 1102. Wie zuvor umfasst der Prozessor 1102 eine CPU 104, die n Prozessorkerne 1061-106n umfasst, welche mit L1-Caches 1081-108n und L2-Caches 1101-110n gekoppelt sein können. Wie weiter gezeigt, umfasst jeder L1-Cache 1081-108n sowohl einen Befehls-Cache (L1I) als auch einen Daten-Cache (L1D), und jeder der L1- und L2-Caches ist einem entsprechenden Übersetzungs-Lookaside-Puffer (TLB) zugeordnet, wie durch die TLBs 1121-112n für die L1-Caches 1081-108n bzw. die TLBS 1141-114n für die L2-Caches 1101-110n gezeigt. Die L2-Caches 1101-110n sind mit einer Zwischenverbindung 116 verbunden.
  • Auch mit der Zwischenverbindung 116 verbunden sind ein PCIe-Root-Komplex 1106 und ein L3-Cache 122, Beschleuniger 1181-118m, eine IO-Schnittstelle 1108 und Speichersteuerungen 124 und 126 (auch als MC1 und MC2 gekennzeichnet).
  • Der PCIe-Root-Komplex 1106 ist im Allgemeinen mit einer oder mehreren PCIe-Schnittstellen gekoppelt, wie durch die PCIe-Schnittstellen 1114, 1116 und 1118 veranschaulicht. Im Allgemeinen können alle oder ein Teil der PCIe-Schnittstellen und PCIe-Links mit PCIe-Erweiterungsslots (nicht gezeigt) verbunden sein, die auf der Hauptplatine 1104 angebracht sind. Die veranschaulichte PCIe-Schnittstelle 1114 ist über einen PCIe-Link 1122 mit einem Off-Chip-Beschleuniger 1120 verbunden. Wie oben dargelegt, kann ein Off-Chip-Beschleuniger einen Beschleuniger-Chip oder dergleichen umfassen, der entweder auf der Hauptplatine der Plattform angebracht oder auf einer Beschleunigerplatte oder -karte installiert ist, die in einem PCIe-Erweiterungsslot befestigt ist.
  • Die PCIe-Schnittstelle 1116 ist (über einen PCIe-Link 1124) mit einer NIC 1126 verbunden, die Zugriff auf ein Netzwerk 1128 bereitstellt. Im Allgemeinen ist die NIC 1126 repräsentativ für verschiedene Typen von Netzwerkschnittstellenadaptern und Gewebeadaptern, einschließlich, ohne darauf beschränkt zu sein, Ethernetadapter, InfiniBand-Host-Controller-Aapter (HCAs) und INTEL®-OmniPath-Host-Gewebeschnittstellen (HFIs).
  • Die PCIe-Schnittstelle 1118 ist über einen PCIe-Link 1132 mit einem Halbleiterlaufwerk (SSD) 1130 verbunden. Gegebenenfalls können andere Arten von IO-Schnittstellen verwendet werden, um es einem Prozessor zu ermöglichen, mit einem SSD zu kommunizieren. Wie gezeigt, ist die Systemsoftware 1134 auf dem SSD 1130 gespeichert. Die Systemsoftware kann im Allgemeinen ein Betriebssystem und eine oder mehrere Anwendungen, die auf dem Betriebssystem laufen, umfassen. Die Systemsoftware kann auch verschiedene Arten von virtualisierten Ausführungsformen umfassen, darunter visualisierte Plattformen, die Type-1- und Type-2 Hypervisoren sowie Container-basierte Virtualisierungsumgebungen. Wie weiter durch die Software 1136 veranschaulicht, kann die Systemsoftware während des Plattformstarts über das Netzwerk 1128 ganz oder teilweise geladen werden.
  • Die IO-Schnittstelle 1108 ist über einen IO-Link 1140 mit einer Firmware-Speichervorrichtung, wie einer Flash-Vorrichtung 1138, verbunden. Die Flash-Vorrichtung 1138 speichert die System-Firmware 1142, die als Teil der Plattforminitialisierung geladen wird. Im Allgemeinen können abhängig von der Plattform verschiedene Arten von Firmware verwendet werden, einschließlich Firmware, die Vereinheitlichte-erweiterbare-Firmware-Schnittstellen(UEFI)-Architektur einsetzt. Die gesamte Firmware oder ein Teil davon kann aus historischen Gründen auch als BIOS (Basis-Eingabe-Ausgabe-System) bezeichnet werden.
  • Im Allgemeinen kann ein Prozessor eine oder mehrere Speichersteuerungen umfassen, die jeweils einen oder mehrere Speicherkanäle umfassen, welche mit der einen oder den mehreren Speichervorrichtungen verbunden sind, wie oben erörtert. Die Ausführungsform von 11 umfasst zwei Speichersteuerungen 124 und 126. Die Speichersteuerung 124 ist über entsprechende Speicherkanäle 1 und 2 mit Speichervorrichtungen DRAM 1 und DRAM 2 gekoppelt. Die Speichersteuerung 126 ist über entsprechende Speicherkanäle 3 und 4 mit Speichervorrichtungen DRAM 3 und DRAM 4 gekoppelt.
  • Zusätzlich zu einem Off-Chip-Beschleuniger mit einer Speichersteuerung, der konfiguriert ist, um über die Speichersteuerung direkt auf den Systemspeicher zuzugreifen, umfasst der Off-Chip-Beschleuniger möglicherweise keine Speichersteuerung und greift auf den Systemspeicher über DMA-Vorgänge zu, die über eine Speichersteuerung auf dem Prozessor durch den Prozessor weitergeleitet werden. Beispielweise können ein oder mehrere Beschleuniger in einer in einem PCIe-Erweiterungsslot installierten Steckkarte oder -platte installiert sein. Von der Perspektive der Architektur aus gesehen, funktioniert jeder der Beschleuniger auf der Karte oder Platte wie eine PCIe-Vorrichtung. Da allerdings die PCIe-Links, die den Prozessor mit PCIe-Erweiterungsslots verbinden, nicht mit dem Systemspeicher gekoppelt sind, können die PCIe-Vorrichtungen auf in PCIe-Erweiterungsslots installierten Karten nicht direkt auf den Systemspeicher zugreifen und verwenden so die vorhergehenden DMA Vorgänge.
  • Weitere Aspekte des hier beschriebenen Gegenstands sind in den folgenden nummerierten Absätzen ausgeführt:
    1. 1. Ein Verfahren, das auf einer Rechenplattform durchgeführt wird, welche einen Multicore-Prozessor umfasst, der mit einer oder mehreren Speichervorrichtungen gekoppelt ist, welche einen als virtuellen Gemeinspeicher (SVM) implementierten Systemspeicher umfassen, wobei der Multicore-Prozessor eine Vielzahl von Kernen umfasst, wobei jeder Kern zumindest einem Übersetzungs-Lookaside-Puffer (TLB) zugeordnet ist, wobei der Multicore-Prozessor ferner zumindest eine Speichersteuerung umfasst, die über zumindest einen Speicherkanal mit einer oder mehreren Speichervorrichtungen wirkgekoppelt ist, wobei die Rechenplattform ferner einen oder mehrere SVM-fähige Beschleuniger mit einer oder mehreren Funktionseinheiten umfasst, wobei das Verfahren Folgendes umfasst:
      • Einreihen eines Anfragendeskriptors für einen Beschleuniger in eine Warteschlange durch Ausführen eines Ausführungsthreads auf einem aus der Vielzahl von Kernen, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und Informationen umfasst, die einem oder mehreren Puffern im Systemspeicher zugeordnet sind, auf welche der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat;
      • spekulatives vorgreifendes Abrufen von Pufferdaten aus dem Systemspeicher unter Verwendung der Informationen im Anfragendeskriptor, die dem einen oder den mehreren Puffern zugeordnet sind;
      • spekulatives Beginnen der Verarbeitung des Arbeitsauftrags durch Verarbeitung von zumindest einem Teil der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers; und
      • Überprüfen, ob die spekulativ vorgreifenden abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
    2. 2. Verfahren nach Abschnitt 1, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, wobei das Verfahren ferner Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer
      • das Verwenden des Adresshinweises für den Puffer zum vorgreifenden Abrufen von Pufferdaten für den Puffer.
    3. 3. Verfahren nach Abschnitt 2, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst:
      • eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder
      • eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
    4. 4. Verfahren nach Abschnitt 2, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer unter Verwendung eines Befehlssatzarchitektur(ISA)-Befehls im Ausführungsthread, der vom Prozessorkern ausgeführt wird, erhalten wird.
    5. 5. Verfahren nach Abschnitt 4, wobei das Ausführen des ISA-Befehls durch den Prozessorkern bewirkt, dass der Prozessor:
      • für jeden des einen oder der mehreren Puffer,
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordnete TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst.
    6. 6. Verfahren nach Abschnitt 1, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen in Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen, wobei das Verfahren ferner Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer,
      • Verwenden der virtuellen Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und
      • spekulativ vorgreifendes Abrufen von Pufferdaten für den Puffer unter Verwendung des Hinweises.
    7. 7. Verfahren nach einem der Abschnitte 2-6, ferner Folgendes umfassend:
      • für jeden des einen oder der mehreren Puffer Übersetzen der virtuellen Adresse für den Puffer in eine physikalische Adresse, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und
      • für jeden des einen oder der mehreren Puffer Überprüfen des Adresshinweises für den Puffer mit der aktuell gültigen physikalischen Adresse für den Puffer.
    8. 8. Verfahren nach Abschnitt 7, wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer durch den Einsatz eines Periphere-Komponentenzwischenverbindung-Express(PCIe)-Adressübersetzungsdiensts erleichtert wird.
    9. 9. Verfahren nach Abschnitt 8, ferner Folgendes umfassend:
      • Beurteilen des PCIe-Adressübersetzungsdiensts durch Emulieren einer PCIe-Vorrichtung.
    10. 10. Verfahren nach einem der vorhergehenden Abschnitte, wobei überprüft wird, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind, ferner Folgendes umfassend:
      • Fortsetzen der Verarbeitung des Arbeitsauftrags durch Verarbeiten aller der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers.
    11. 11. Computersystem, Folgendes umfassend:
      • einen Multicore-Prozessor, umfassend:
        • eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung;
        • ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist;
        • eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist;
        • eine Eingabe-Ausgabe(IO)-Schnittstelle, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist; und
        • einen IOTLB zum Speichern einer Vielzahl von TLB-Einträgen, umfassend VA-PA-Übersetzungen für eine oder mehrere IO-Vorrichtungen;
        • einen Systemspeicher, umfassend eine oder mehrere Speichervorrichtungen, die jeweils kommunikativ mit zumindest einem Speicherkanal der Speichersteuerung gekoppelt sind;
        • einen Beschleuniger mit Fähigkeit zum virtuellen Gemeinspeicher (SVM), der eine oder mehrere Funktionseinheiten, entweder eingebettet im Prozessor oder über die IO-Schnittstelle kommunikativ mit dem Prozessor gekoppelt, aufweist;
        • wobei das System konfiguriert ist, um
        • einen Anfragendeskriptor für den Beschleuniger durch Ausführen eines Ausführungsthreads auf einem der Vielzahl von Kernen in eine Warteschlange einzureihen, wobei der Anfragendeskriptor einen Arbeitsauftrag definiert, der vom Beschleuniger durchzuführen ist, und einem oder mehreren Puffern im Systemspeicher zugeordnete Informationen umfasst, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat;
        • Pufferdaten aus dem Systemspeicher unter Verwendung der dem einen oder den mehreren Puffern zugeordneten Informationen im Anfragendeskriptor spekulativ vorgreifend abzurufen;
        • die Verarbeitung des Arbeitsauftrags durch Verarbeiten von zumindest einem Teil der Pufferdaten, der unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers vorgreifend abgerufen wird, spekulativ zu beginnen; und
        • zu überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
    12. 12. Computersystem nach Abschnitt 11, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, wobei das System ferner konfiguriert ist, um:
      • für jeden des einen oder der mehreren Puffer,
      • den Adresshinweis für den Puffer zum spekulativ vorgreifenden Abrufen von Pufferdaten für den Puffer zu verwenden.
    13. 13. Computersystem nach Abschnitt 12, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst:
      • eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder
      • eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
    14. 14. Computersystem nach Abschnitt 12 oder 13, wobei jeder der Prozessorkerne eine Befehlssatzarchitektur (ISA) aufweist, und wobei der Adresshinweis für jeden des einen oder der mehreren Puffer durch den Einsatz eines ISA-Befehls im Ausführungsthread, der vom Prozessorkern ausgeführt wird, erhalten wird.
    15. 15. Computersystem nach Abschnitt 14, wobei das Ausführen des ISA-Befehls durch den Prozessorkern bewirkt, dass der Prozessor:
      • für jeden des einen oder der mehreren Puffer
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordnete TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst.
    16. 16. Computersystem nach einem der Abschnitte 12-15, wobei das System ferner konfiguriert ist, um:
      • für jeden des einen oder der mehreren Puffer die virtuelle Adresse für den Puffer in eine physikalische Adresse zu übersetzen, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und
      • für jeden des einen oder der mehreren Puffer den Adresshinweis für den Puffer mit der aktuell gültigen physikalischen Adresse für den Puffer zu überprüfen.
    17. 17. Computersystem nach Abschnitt 16, wobei die IO-Schnittstelle eine Periphere-Komponentenzwischenverbindung-Express(PCIe)-Schnittstelle umfasst und wobei der Prozessor einen PCIe-Root-Komplex umfasst, der mit dem Zwischenverbindungsgewebe und mit der PCIe-Schnittstelle gekoppelt ist, und wobei der Prozessor konfiguriert ist, um den PCIe-Adressübersetzungsdienst (ATS) zu unterstützen, und wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer durch den Einsatz des PCIe-ATS erleichtert wird.
    18. 18. Computersystem nach Abschnitt 11, wobei die dem einen oder den mehreren Puffer(n) zugeordneten Informationen im Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen, und wobei das System ferner konfiguriert ist, um:
      • für jeden des einen oder der mehreren Puffer,
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, zu verwenden, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und
      • spekulativ vorgreifendes Abrufen von Pufferdaten für den Puffer unter Verwendung des Hinweises.
    19. 19. Computersystem nach Abschnitt 18, wobei das System ferner konfiguriert ist, um:
      • die virtuelle Adresse für jeden des einen oder der mehreren Puffer in eine physikalische Adresse zu übersetzen, um eine aktuell gültige physikalische Adresse zu erhalten; und
      • für jeden des einen oder der mehreren Puffer den Hinweis für diesen Puffer mit der aktuell gültigen physikalischen Adresse für diesen Puffer zu überprüfen.
    20. 20. Computersystem nach einem der Abschnitte 11-19, wobei das System als Antwort auf das Überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind, ferner konfiguriert ist, um die Verarbeitung des Arbeitsauftrags durch Verarbeiten aller der spekulativ vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers fortzusetzen.
    21. 21. Multicore-Prozessor, umfassend:
      • eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung;
      • ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist;
      • eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist;
      • einen Beschleuniger, der kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist, mit einer oder mehreren Funktionseinheiten und zumindest einem aus einer Anfragewarteschlange und einem Portal,
      • wobei der Multicore-Prozessor konfiguriert ist, um in einem Computersystem installiert zu sein, das einen Systemspeicher umfasst, der eine oder mehrere Speichervorrichtungen umfasst, welche mit dem einen oder den mehreren Speicherkanälen gekoppelt sind, wenn der Prozessor im Computersystem installiert ist, wobei das Computersystem eine Virtueller-Gemeinspeicher(SVM)-Architektur einsetzt, und wobei jeder Prozessorkern eine Befehlssatzarchitektur (ISA) aufweist, die einen Befehl umfasst, der beim Ausführen bewirkt, dass der Prozessor:
        • entweder einen Anfragendeskriptor in das Beschleunigerportal schreibt oder einen Anfragendeskriptor in die Beschleunigeranfragewarteschlange einreiht, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und einen Adresshinweis für jeden des einen oder der mehreren Puffer im Systemspeicher umfasst, auf den der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat,
        • wobei der Adresshinweis für einen Puffer vom Prozessor einzusetzen ist, um Pufferdaten, die dem Puffer aus dem Systemspeicher entsprechen, spekulativ vorgreifend abzurufen.
    22. 22. Multicore-Prozessor nach Abschnitt 21, wobei der Multicore-Prozessor ferner konfiguriert ist, um:
      • als Antwort auf das Einreihen des Anfragendeskriptors in die Beschleunigeranfragenwarteschlange
      • den Adresshinweis für jeden des einen oder der mehreren Puffer zum spekulativen vorgreifenden Abrufen von Pufferdaten aus dem Systemspeicher für diesen Puffer einzusetzen;
      • spekulativ zu beginnen, den durch den Anfragendeskriptor definierten Arbeitsauftrag durch Verarbeitung von zumindest einem Teil der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers zu verarbeiten; und
      • zu überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
    23. 23. Multicore-Prozessor nach Abschnitt 21 oder 22, wobei der ISA-Befehl einen ersten Operanden zum Speichern einer Adresse des Beschleunigerportals zum Schreiben eines Anfragendeskriptors in ein erstes Register, einen zweiten Operanden zum Speichern einer Adresse des Anfragendeskriptors von einer Benutzeranwendung, die im Systemspeicher läuft, in einem zweiten Register und einen dritten Operanden zum Speichern einer Länge des Anfragendeskriptors im dritten Register umfasst.
    24. 24. Multicore-Prozessor nach Abschnitt 23, wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor:
      • aus dem Anfragendeskriptor Daten extrahiert, die eine virtuelle Adresse von jedem des einen oder der mehreren Puffer identifizieren;
      • für jeden des einen oder der mehreren Puffer
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordneten TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst; und
      • den Anfragendeskriptor aktualisiert, um den Hinweis aufzunehmen.
    25. 25. Multicore-Prozessor nach Abschnitt 24, wobei zumindest einer der Puffer Daten umfasst, die in mehreren Seiten im Systemspeicher gespeichert sind, und wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor:
      • den Anfragendeskriptor mit einer physikalischen Speicheradresse für jede der mehreren Seiten für jeden Puffer aktualisiert, der Daten umfasst, welche in mehreren Seiten im Systemspeicher gespeichert sind.
    26. 26. Multicore-Prozessor nach Abschnitt 24 oder 25, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor einen oder mehrere Hinweise für jeden des einen oder der mehreren Eingangspuffer erzeugt, aber für keinen des einen oder der mehreren Ausgangspuffer einen Hinweis erzeugt.
    27. 27. Multicore-Prozessor nach Abschnitt 24 oder 25, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor einen oder mehrere Hinweise für jeden des einen oder der mehreren Eingangspuffer und jeden des einen oder der mehreren Ausgangspuffer erzeugt.
    28. 28. Multicore-Prozessor nach Abschnitt 24 oder 25, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor:
      • für jeden des einen oder der mehreren Eingangspuffer einen oder mehrere Hinweise erzeugt;
      • dem Beschleuniger Informationen sendet;
      • vom Beschleuniger einen Zeitwert erhält;
      • wenn der Zeitwert unter einer Schwelle liegt,
      • einen oder mehrere Hinweise für jeden des einen oder der mehreren Ausgangspuffer erzeugt.
    29. 29. Multicore-Prozessor nach einem der Abschnitte 22 bis 28, wobei der Beschleuniger ferner einen Vorrichtungs-TLB umfasst und der Prozessor ferner konfiguriert ist, um dem Vorrichtungs-TLB in Verbindung mit zumindest einem aus dem Zugreifen auf eine physikalische Adresse über einen Hinweis und dem Überprüfen einer einem Hinweis zugeordneten VA-PA-Übersetzung eine neue VA-PA-Übersetzung hinzuzufügen.
    30. 30. Multicore-Prozessor nach einem der Abschnitte 22 bis 29, wobei der Beschleuniger ferner konfiguriert ist, um unter Verwendung von direkten Speicherzugriffs(DMA)-Vorgängen auf den Systemspeicher zuzugreifen.
    31. 31. Multicore-Prozessor nach Abschnitt 30, wobei der Beschleuniger ferner eine Vielzahl von DMA-Warteschlangen umfasst.
    32. 32. Multicore-Prozessor nach einem der Abschnitte 21-31, ferner umfassend eine mit der Speichersteuerung gekoppelte Eingabe-Ausgabe-Speicherverwaltungseinheit (IOMMU).
    33. 33. Multicore-Prozessor nach einem der Abschnitte 21-32, wobei der Prozessor ferner konfiguriert ist, um:
      • für jeden des einen oder der mehreren Puffer eine virtuelle Adresse für den Puffer in eine physikalische Adresse zu übersetzen, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und
      • für jeden des einen oder der mehreren Puffer den Adresshinweis für den Puffer anhand der aktuell gültigen physikalischen Adresse für den Puffer zu überprüfen.
    34. 34. Multicore-Prozessor nach Abschnitt 33, wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer durch den Einsatz eines Periphere-Komponentenzwischenverbindung-Express(PCIe)-Adressübersetzungsdiensts erleichtert wird.
    35. 35. Multicore-Prozessor nach Abschnitt 34, wobei der Beschleuniger in der Lage ist, durch Emulieren einer PCIe-Vorrichtung auf den PCIe-Adressübersetzungsdienst zuzugreifen.
    36. 36. Multicore-Prozessor nach einem der Abschnitte 22 bis 35, ferner umfassend einen Eingabe-Ausgabe-Übersetzungs-Lookaside-Puffer (IOTLB), wobei der Multicore-Prozessor konfiguriert ist, um dem IOTLB in Verbindung mit zumindest einem aus dem Erzeugen einer einem Hinweis zugeordneten VA-PA-Übersetzung und dem Überprüfen einer einem Hinweis zugeordneten VA-PA-Übersetzung eine VA-PA-Übersetzung hinzuzufügen.
    37. 37. Multicore-Prozessor, umfassend:
      • eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung;
      • ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist;
      • eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist;
      • eine Eingabe-Ausgabe(IO)-Schnittstelle;
      • ein Beschleuniger, der kommunikativ mit dem Zwischenverbindungsgewebe, mit einer oder mehreren Funktionseinheiten und einer Anfragenwarteschleife gekoppelt ist,
      • wobei der Multicore-Prozessor konfiguriert ist, um in einem Computersystem installiert zu sein, das einen Systemspeicher umfasst, der eine oder mehrere Speichervorrichtungen umfasst, welche mit dem einen oder den mehreren Speicherkanäle(n) gekoppelt sind, und einen Beschleuniger mit Fähigkeit zum virtuellen Gemeinspeicher (SVM) umfasst, der mit der IO-Schnittstelle gekoppelt ist, wenn der Prozessor im Computersystem installiert ist, wobei das Computersystem eine Virtueller-Gemeinspeicher-Architektur einsetzt, und wobei jeder Prozessorkern eine Befehlssatzarchitektur (ISA) aufweist, die einen Befehl umfasst, welcher beim Ausführen bewirkt, dass der Prozessor:
        • dem Beschleuniger über die IO-Schnittstelle einen Anfragendeskriptor sendet, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und einen Adresshinweis für jeden des einen oder der mehreren Puffer im Systemspeicher umfasst, auf den der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat,
        • wobei der Adresshinweis für einen Puffer durch den Beschleuniger zum vorgreifenden Abrufen von Pufferdaten, die dem Puffer aus dem Systemspeicher entsprechen, einzusetzen ist.
    38. 38. Multicore-Prozessor nach Abschnitt 37, wobei der ISA-Befehl einen ersten Operanden zum Speichern einer Adresse auf einem Portal des Beschleunigers zum Schreiben eines Anfragendeskriptors in ein erstes Register, einen zweiten Operanden zum Speichern einer Adresse des Anfragendeskriptors von einer Benutzeranwendung, die im Systemspeicher läuft, in einem zweiten Register und einen dritten Operanden zum Speichern einer Länge des Anfragendeskriptors im dritten Register umfasst.
    39. 39. Multicore-Prozessor nach Abschnitt 38, wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor:
      • aus dem Anfragendeskriptor Daten extrahiert, die eine virtuelle Adresse von jedem des einen oder der mehreren Puffer identifizieren;
      • für jeden des einen oder der mehreren Puffer
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordneten TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst; und
      • den Anfragendeskriptor aktualisiert, um den Hinweis aufzunehmen.
    40. 40. Multicore-Prozessor nach Abschnitt 39, wobei zumindest einer der Puffer Daten umfasst, die in mehreren Seiten im Systemspeicher gespeichert sind, und wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor:
      • den Anfragendeskriptor mit einer physikalischen Speicheradresse für jede der mehreren Seiten für jeden Puffer aktualisiert, der Daten umfasst, welche in mehreren Seiten im Systemspeicher gespeichert sind.
    41. 41. Multicore-Prozessor nach Abschnitt 39 oder 40, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor einen oder mehrere Hinweise für jeden des einen oder der mehreren Eingangspuffer erzeugt, aber für keinen des einen oder der mehreren Ausgangspuffer einen Hinweis erzeugt.
    42. 42. Multicore-Prozessor nach Abschnitt 39 oder 40, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor einen oder mehrere Hinweise für jeden des einen oder der mehreren Eingangspuffer und jeden des einen oder der mehreren Ausgangspuffer erzeugt.
    43. 43. Multicore-Prozessor nach Abschnitt 39 oder 40, wobei der Anfragendeskriptor virtuelle Adressen für einen oder mehrere Eingangspuffer und einen oder mehrere Ausgangspuffer identifiziert, und das Ausführen des Befehls bewirkt, dass der Prozessor:
      • für jeden des einen oder der mehreren Eingangspuffer einen oder mehrere Hinweise erzeugt;
      • dem Beschleuniger Informationen sendet;
      • vom Beschleuniger einen Zeitwert erhält;
      • wenn der Zeitwert unter einer Schwelle liegt,
      • einen oder mehrere Hinweise für jeden des einen oder der mehreren Ausgangspuffer erzeugt.
    44. 44. Multicore-Prozessor nach einem der Abschnitte 34-37, wobei der Beschleuniger konfiguriert ist, um:
      • den Adresshinweis für jeden des einen oder der mehreren Puffer zum vorgreifenden Abrufen von Pufferdaten aus dem Systemspeicher für diesen Puffer einzusetzen;
      • spekulativ zu beginnen, den durch den Anfragendeskriptor definierten Arbeitsauftrag durch Verarbeitung von zumindest einem Teil der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers zu verarbeiten,
      • und wobei der Multicore-Prozessor ferner konfiguriert ist, um
      • vom Beschleuniger eine Adressübersetzungsanfrage zu erhalten, die eine virtuelle Adresse für jeden des einen oder der mehreren Puffer, für den zum spekulativen vorgreifenden Abrufen der Daten ein Hinweis eingesetzt wird, umfasst;
      • die virtuelle Adresse in eine physikalische Adresse zu übersetzen, um eine VA-PA-Übersetzung zu erzeugen; und
      • dem Beschleuniger eine VA-PA-Übersetzung für jede Adressübersetzungsanfrage zu zurücksenden.
    45. 45. Multicore-Prozessor nach Abschnitt 44, wobei die IO-Schnittstelle eine Periphere-Komponentenzwischenverbindung-Express(PCIe)-Schnittstelle umfasst, und wobei das Übersetzen der virtuellen in die physikalische Adresse durch den Einsatz eines PCIe-Adressübersetzungsdiensts erleichtert wird.
    46. 46. Multicore-Prozessor nach einem der Abschnitte 44 oder 45, ferner umfassend einen Eingabe-Ausgabe-Übersetzungs-Lookaside-Puffer (IOTLB) zum Speichern einer Vielzahl von TLB-Einträgen, die VA-PA-Übersetzungen für eine oder mehrere IO-Vorrichtungen, einschließlich den Beschleuniger, umfassen, wobei der Multicore-Prozessor konfiguriert ist, um dem IOTLB in Verbindung mit der Erzeugung einer VA-PA-Übersetzung eine VA-PA-Übersetzung hinzuzufügen.
    47. 47. Beschleuniger mit Fähigkeit zum virtuellem Gemeinspeicher (SVM) Beschleunige, Folgendes umfassend:
      • eine Eingabe-Ausgabe(IO)-Schnittstelle;
      • eine erste Speichersteuerung;
      • ein Portal; und
      • eine oder mehrere Funktionseinheiten;
      • wobei der Beschleuniger konfiguriert ist, um in einem Computersystem installiert zu sein, das einen Multicore-Prozessor mit einer Vielzahl von Prozessorkernen und eine zweite Speichersteuerung umfasst, die mit dem Systemspeicher gekoppelt ist, umfassend eine oder mehrere Speichervorrichtungen, wobei jeder der Prozessorkerne einem oder mehreren Übersetzungs-Lookaside-Puffern (TLBs) zugeordnet ist, wobei das Computersystem eine Virtueller-Gemeinspeicher-Architektur einsetzt, wobei der Beschleuniger, wenn er im Computersystem installiert ist, über die IO-Schnittstelle mit dem Multicore-Prozessor gekoppelt ist und die erste Speichersteuerung des Beschleunigers mit zumindest einer der einen oder mehreren Speichervorrichtungen gekoppelt, und wobei der Beschleuniger, wenn er im Computersystem installiert ist, konfiguriert ist, um:
      • von einem Ausführungsthread, der auf einem der Prozessorkerne des Multicore-Prozessors ausgeführt wird, einen Anfragendeskriptor zu empfangen, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und Informationen umfasst, die einem oder mehreren Puffern im Systemspeicher zugeordnet sind, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat;
      • Pufferdaten aus dem Systemspeicher unter Verwendung der Informationen im Anfragendeskriptor, die dem einen oder den mehreren Puffer(n) zugeordnet sind, spekulativ vorgreifend abzurufen; und
      • spekulativ zu beginnen, den Arbeitsauftrag durch Verarbeitung von zumindest einem Teil der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers zu verarbeiten.
    48. 48. SVM-fähiger Beschleuniger nach Abschnitt 47, ferner konfiguriert, um zu überprüfen, ob die vorgreifen abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
    49. 49. SVM-fähiger Beschleuniger nach Abschnitt 47 oder 48, wobei die dem einen oder den mehreren Puffer(n) zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, ferner konfiguriert, um:
      • für jeden des einen oder der mehreren Puffer
      • den Adresshinweis für den Puffer zum vorgreifenden Abrufen von Pufferdaten für den Puffer zu verwenden.
    50. 50. SVM-fähiger Beschleuniger nach Abschnitt 49, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst:
      • eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder
      • eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
    51. 51. SVM-fähiger Beschleuniger nach Abschnitt 47, wobei die einem oder mehreren Puffer(n) zugeordneten Informationen im Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen und der Anfragendeskriptor Informationen umfasst, die einen Prozessorkern identifizieren, welcher einen Thread ausführt, der den Anfragendeskriptor erzeugt, wobei der SVM-fähige Beschleuniger ferner konfiguriert ist, um:
      • für jeden des einen oder der mehreren Puffer
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, zu verwenden, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und
      • spekulativ Pufferdaten für den Puffer unter Verwendung des Hinweises vorgreifend abzurufen.
    52. 52. SVM-fähiger Beschleuniger nach einem der Abschnitte 47 bis 51, ferner umfassend einen Vorrichtungs-TLB, in dem eine Vielzahl von VA-PA-Übersetzungen zu speichern ist, wobei der Beschleuniger konfiguriert ist, um den Vorrichtungs-TLB zum vereinfachten Zugriff auf den Systemspeicher einzusetzen.
    53. 53. SVM-fähiger Beschleuniger nach Abschnitt 52, wobei der Beschleuniger konfiguriert ist, um eine VA-PA-Übersetzung vom Multicore-Prozessor zu erhalten und entweder einen bestehenden TLB-Eintrag im Vorrichtungs-TLB mit der erhaltenen VA-PA-Übersetzung zu aktualisieren oder mit der erhaltenen VA-PA-Übersetzung einen neuen TLB-Eintrag zum Vorrichtungs-TLB hinzuzufügen.
    54. 54. SVM-fähiger Beschleuniger nach einem der Abschnitte 49 bis 53, ferner konfiguriert, um:
      • dem Multicore-Prozessor eine Adressübersetzungsanfrage zu senden, die eine virtuelle Adresse für jeden des einen oder der mehreren Puffer, für die ein Hinweis zum spekulativen vorgreifenden Abrufen von Daten eingesetzt wird, umfasst;
      • vom Multicore-Prozessor für jede Adressübersetzungsanfrage eine VA-PA-Übersetzung zu empfangen; und
      • für jeden Hinweis durch Vergleichen der vom Multicore-Prozessor erhaltenen VA-PA-Übersetzung den Hinweis zu überprüfen.
    55. 55. SVM-fähiger Beschleuniger nach Abschnitt 54, wobei die IO-Schnittstelle eine Periphere-Komponentenzwischenverbindung-Express(PCIe)-Schnittstelle umfasst und der Multicore-Prozessor konfiguriert ist, um einen PCIe-Adressübersetzungsdienst zu implementieren, und wobei der Adressübersetzungsdienst eine PCIe-Adressübersetzungsdiensanfrage erfordern umfasst.
    56. 56. SVM-fähiger Beschleuniger nach einem der Abschnitte 47 bis 55, ferner umfassend eine Anfragenwarteschleife, wobei der Beschleuniger als Antwort auf das Empfangen des Anfragendeskriptors den Anfragendeskriptor in die Anfragenwarteschleife einreiht.
    57. 57. SVM-fähiger Beschleuniger nach Abschnitt 56, ferner konfiguriert, um:
      • ein Doorbell-Signal zu erhalten, welches anzeigt, dass ein Anfragendeskriptor erhalten worden ist;
      • die Anfragenwarteschleife zu prüfen, um zu bestimmen, ob eine leere Stelle vorhanden ist; und
      • den Anfragendeskriptor hinzuzufügen, wenn eine leere Stelle vorhanden ist.
    58. 58. SVM-fähiger Beschleuniger nach Abschnitt 57, wobei der Beschleuniger ferner konfiguriert ist, um eine aktuelle Warteschlangentiefe an den Ausführungsthread zurückzusenden, wenn bestimmt wird, dass keine leere Stelle vorhanden ist.
    59. 59. Verfahren, das auf einer Rechenplattform durchgeführt wird, die einen Multicore-Prozessor aufweist, welcher mit einer oder mehreren Speichervorrichtungen gekoppelt ist, die einen als virtuellen Gemeinspeicher (SVM) implementierten Systemspeicher umfasst, wobei der MulticoreProzessor eine Vielzahl von Kernen aufweist, die jeweils einen First-Level- und einen Second-Level-Cache aufweisen und zumindest einem Übersetzungs-Lookaside-Puffer (TLB) zugeordnet sind, wobei der Multicore-Prozessor ferner zumindest eine Speichersteuerung umfasst, die über zumindest einen Speicherkanal mit der einen oder den mehreren Speichervorrichtungen wirkgekoppelt ist, wobei die Rechenplattform ferner einen oder mehrere SVM-fähige Beschleuniger umfasst, die jeweils einen Vorrichtungs-TLB aufweisen und eine oder mehrere Funktionseinheiten, die zur Durchführung von zumindest einer Funktion konfiguriert sind, wobei das Verfahren Folgendes umfasst:
      • Einreihen eines Anfragendeskriptors für einen Beschleuniger in eine Warteschlange durch Ausführen eines Ausführungsthreads auf einem der Vielzahl von Kernen, wobei der Anfragendeskriptor einen Arbeitsauftrag definiert, der vom Beschleuniger durchzuführen ist, und virtuelle Adressen für eine Vielzahl von Puffern, die im Systemspeicher gespeichert sind, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat, identifiziert;
      • spekulatives Beginnen der Verarbeitung des Arbeitsauftrags, indem
      • für jeden von einem oder mehreren Puffern der Vielzahl von Puffern
      • eine spekulative VA-PA-Übersetzung mit einer virtuellen Adresse, die dem Puffer entspricht, identifiziert wird und ein direkter Speicherzugriffs(DMA)-Vorgang unter Verwendung der physikalischen Adresse von dieser spekulativen VA-PA-Übersetzung durchgeführt wird, um Daten, die spekulativ diesem Puffer entsprechen, aus dem Systemspeicher zu lesen; und
      • begonnen wird, die Daten, die aus dem einen oder mehreren Puffern gelesen werden, unter Verwendung von einer oder mehreren Funktionseinheiten auf dem Beschleuniger zu verarbeiten.
    60. 60. Verfahren nach Abschnitt 59, ferner Folgendes umfassend:
      • parallel zum spekulativen Beginnen der Verarbeitung des Arbeitsauftrags
      • Übersetzen der virtuellen Adresse für jeden des einen oder der mehreren Puffer in eine physikalische Adresse, um aktuell gültige VA-PA-Übersetzungen zu erzeugen; und
      • Überprüfen der spekulativen VA-PA-Übersetzungen durch Vergleichen, für jeden des einen oder der mehreren Puffer, der spekulative VA-PA-Übersetzung für den jeweiligen Puffer anhand der aktuell gültigen VA-PA-Übersetzung für diesen Puffer.
    61. 61. Verfahren nach Abschnitt 59 oder 60, ferner Folgendes umfassend:
      • Kopieren der spekulativen (VA-PA)-Übersetzungen aus dem dem Kern zugeordneten TLB; und
      • Bereitstellen der Kopie der spekulativen VA-PA-Übersetzungen mit dem Anfragendeskriptor.
    62. 62. Verfahren nach Abschnitt 59, ferner Folgendes umfassend:
      • Identifizieren von entsprechenden virtuellen Adressen im Anfragendeskriptor für den Anfragendeskriptor des einen oder der mehreren Puffer; und
      • Snooping des dem Kern zugeordneten TLB unter Verwendung der entsprechenden virtuellen Adressen, um die Kopie der spekulativen VA-PA-Übersetzungen vom TLB zu erhalten.
    63. 63. Verfahren nach einem der Abschnitte 1 bis 10 und 59 bis 62, ferner Folgendes umfassend:
      • als Antwort auf das Einreihen des Anfragendeskriptors in eine Warteschlange auf dem Beschleuniger
      • Lesen des Anfragendeskriptors; und
      • Beginnen von Anfragen des Adressübersetzungsdiensts (ATS) für alle aus der Vielzahl von Puffern.
    64. 64. Verfahren nach Abschnitt 63, ferner umfassend:
      • Bestimmen, ob der Deskriptor für die Verarbeitung durch eine Funktionseinheit auf dem Beschleuniger bereit ist.
    65. 65. Verfahren nach Abschnitt 64, wobei bestimmt wird, dass der Deskriptor für die Verarbeitung durch eine Funktionseinheit auf dem Beschleuniger bereit ist, und wobei die Vielzahl von Puffern Eingangs- und Ausgangspuffer umfasst, ferner Folgendes umfassend:
      • Überprüfen des ATS-Status eines Eingangs- oder Ausgangspuffers;
      • wenn der ATS-Status anzeigt, dass die Adressübersetzung für den Eingangs- oder Statuspuffer verfügbar ist,
      • Beginnen eines direkten Speicherzugriffs(DMA)-Vorgangs zum Zugreifen auf den Eingangs- oder Statuspuffer und das Beginnen der Ausführung der Funktionseinheit;
      • andernfalls, wenn der ATS-Status anzeigt, dass die Adressübersetzung für den Eingangs- oder Statuspuffer nicht verfügbar ist,
      • spekulatives Beginnen der Verwendung von einer der im Anfragendeskriptor breitgestellten Virtuelle-in-physikalische-Adresse-Übersetzungen, einem DMA-Vorgang, im Rahmen dessen der Beschleuniger Daten im Systemspeicher, die spekulativ dem Eingangs- oder Statuspuffer entsprechen, liest; und
      • spekulatives Beginnen der Ausführung der Funktionseinheit, um eine Beschleunigerfunktion durchzuführen, die die gelesenen Daten bearbeitet.
    66. 66. Computersystem, umfassend:
      • einen Multicore-Prozessor, Folgendes umfassend:
        • eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung;
        • ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist;
        • eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist;
        • eine Eingabe-Ausgabe(IO)-Schnittstelle, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist; und
        • einen IOTLB zum Speichern einer Vielzahl von TLB-Einträgen, umfassend VA-PA-Übersetzungen für eine oder mehrere IO-Vorrichtungen;
        • einen Systemspeicher, umfassend eine oder mehrere Speichervorrichtungen, die jeweils mit zumindest einem Speicherkanal der Speichersteuerung kommunikativ gekoppelt sind;
        • einen Beschleuniger mit Fähigkeit zum virtuellen Gemeinspeicher (SVM), mit einer oder mehreren Funktionseinheiten, die entweder auf dem Prozessor eingebettet oder über die IO-Schnittstelle mit dem Prozessor kommunikativ gekoppelt sind;
        • wobei das System ferner Mittel für Folgendes umfasst:
          • Einreihen eines Anfragendeskriptors für den Beschleuniger durch Ausführen eines Ausführungsthreads auf einem der Vielzahl von Kernen, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und Informationen umfasst, die einem oder mehreren Puffern im Systemspeicher zugeordnet sind, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat;
          • spekulatives vorgreifendes Abrufen von Pufferdaten aus dem Systemspeicher unter Verwendung der Informationen im Anfragendeskriptor, die dem einen oder den mehreren Puffern zugeordnet sind;
          • spekulatives Beginnen der Verarbeitung des Arbeitsauftrags durch Verarbeitung von zumindest einem Teil der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers; und
          • Überprüfen, ob die vorgreifen abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
    67. 67. Computersystem nach Abschnitt 66, wobei die einem oder mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, wobei das System ferner Mittel für Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer,
      • Einsetzen des Adresshinweises für den Puffer zum spekulativen vorgreifenden Abrufen von Pufferdaten für den Puffer.
    68. 68. Computersystem nach Abschnitt 67, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst:
      • eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder
      • eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
    69. 69. Computersystem nach Abschnitt 67 oder 68, wobei jeder der Prozessorkerne eine Befehlssatzarchitektur (ISA) aufweist, und wobei der Adresshinweis für jeden des einen oder der mehreren Puffer durch den Einsatz eines ISA-Befehls im Ausführungsthread, der vom Prozessorkern ausgeführt wird, erhalten wird.
    70. 70. Computersystem nach Abschnitt 69, wobei das Ausführen des ISA-Befehls durch den Prozessorkern bewirkt, dass der Prozessor:
      • für jeden des einen oder der mehreren Puffer
      • die virtuelle Adresse des Puffers als TLB-Nachschlag in einem oder mehreren dem Prozessorkern zugeordneten TLB(s) verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst.
    71. 71. Computersystem nach einem der Abschnitte 67 bis 70, wobei das System ferner Mittel für Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer Übersetzen der virtuellen Adresse für den Puffer in eine physikalische Adresse, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und
      • für jeden des einen oder der mehreren Puffer Überprüfen des Adresshinweises für den Puffer mit der aktuell gültigen physikalischen Adresse für den Puffer.
    72. 72. Computersystem nach Abschnitt 71, wobei die IO-Schnittstelle eine Periphere-Komponentenzwischenverbindung-Express(PCIe)-Schnittstelle umfasst und wobei der Prozessor einen PCIe-Root-Komplex umfasst, der mit dem Zwischenverbindungsgewebe und mit der PCIe-Schnittstelle gekoppelt ist, und wobei der Prozessor konfiguriert ist, um einen PCIe-Adressübersetzungsdienst (ATS) zu unterstützen, und wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer is durch den Einsatz eines PCIe-ATS erleichtert wird.
    73. 73. Computersystem nach Abschnitt 66, wobei die einem oder mehreren Puffer(n) zugeordneten Informationen im Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen, und wobei das System ferner Mittel für Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer
      • Verwenden der virtuellen Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und
      • spekulativ vorgreifendes Abrufen von Pufferdaten für den Puffer unter Verwendung des Hinweises.
    74. 74. Computersystem nach Abschnitt 73, wobei das System ferner Mittel für Folgendes umfasst:
      • für jeden des einen oder der mehreren Puffer Übersetzen der virtuelle Adresse in eine physikalische Adresse, um eine aktuell gültige physikalische Adresse zu erhalten; und
      • für jeden des einen oder der mehreren Puffer Überprüfen des Hinweises für diesen Puffer anhand der aktuell gültigen physikalischen Adresse für diesen Puffer.
    75. 75. Computersystem nach einem der Abschnitte 66 bis 74, wobei das System ferner Mittel für Folgendes umfasst:
      • als Antwort auf das Überprüfen, dass die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind
      • Fortsetzen der Verarbeitung des Arbeitsauftrags durch Verarbeiten aller der spekulativ vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers.
  • Obwohl manche Ausführungsformen unter Bezugnahme auf bestimmte Umsetzungen beschrieben werden, sind gemäß manchen Ausführungsformen andere Umsetzungen möglich. Darüber hinaus müssen Anordnung und/oder Reihenfolge von Elementen oder sonstigen Merkmalen, die in den Zeichnungen veranschaulicht und/oder hier beschrieben werden, nicht genau wie veranschaulicht und beschrieben angeordnet sein. Gemäß manchen Ausführungsformen sind viele andere Anordnungsweisen möglich.
  • In jeder Vorrichtung oder jedem System, die/das in einer Figur gezeigt ist, können Elemente in manchen Fällen jeweils dieselbe Bezugszahl oder eine andere Bezugszahl aufweisen, um anzudeuten, dass die dargestellten Elemente unterschiedlich und/oder ähnlich sein könnten. Ein Element kann allerdings flexibel genug sein, um verschiedene Umsetzungen aufzuweisen und mit einigen oder allen der hier gezeigten oder beschriebenen Systemen zu funktionieren. Die verschiedenen in den Figuren gezeigten Elemente können gleich oder unterschiedlich sein. Welches als erstes Element und welches als zweites Element bezeichnet wird, ist beliebig.
  • In der Beschreibung und den Ansprüchen können die Begriffe „gekoppelt“ und „verbunden“ nebst ihrer abgewandelten Formen verwendet werden. Es ist zu verstehen, dass diese Begriffe nicht als Synonyme füreinander zu betrachten sind. Vielmehr kann „verbunden“ in bestimmten Ausführungsformen verwendet werden, um auszusagen, dass zwei oder mehrere Elemente sich in direktem physikalischem oder elektrischem Kontakt miteinander befinden. „Gekoppelt“ kann jedoch auch bedeuten, dass zwei oder mehrere Elemente nicht in direktem Kontakt miteinander stehen, aber dennoch zusammenwirken oder miteinander wechselwirken. „Kommunikativ gekoppelt“ bedeutet zudem, dass zwei oder mehrere Elemente, die sich in direktem Kontakt miteinander befinden können oder nicht, in der Lage sind, miteinander zu kommunizieren. Wenn beispielsweise Komponente A mit Komponente B verbunden ist, die wiederum mit Komponente C verbunden ist, kann Komponente A über Komponente B als Zwischenkomponente mit Komponente C verbunden sein.
  • Eine Ausführungsform ist eine Umsetzung oder ein Beispiel für die Erfindungen. Ein Verweis in der Beschreibung auf „eine Ausführungsform“, „manche Ausführungsformen“ oder „weitere Ausführungsformen“ bedeutet, dass bestimmte Merkmale, Strukturen oder Eigenschaften, die in Verbindung mit Ausführungsformen beschrieben werden, zumindest von manchen Ausführungsformen, aber nicht unbedingt von allen Ausführungsformen der Erfindungen umfasst sind. Die verschiedenen Erwähnungen von „einer Ausführungsform“ oder „manchen Ausführungsformen“ beziehen sich nicht notwendigerweise auf dieselben Ausführungsformen.
  • Nicht alle Komponenten, Merkmale, Strukturen, Eigenschaften usw., die hier beschrieben und veranschaulicht sind, müssen in einer bestimmten Ausführungsform oder Ausführungsformen enthalten sein. Wenn in der Beschreibung festgestellt wird, dass Komponenten, Merkmale, Strukturen oder Eigenschaften umfasst sein „können“ oder „könnten“, dann ist es nicht erforderlich, dass diese Komponenten, Merkmale, Strukturen oder Eigenschaften umfasst sind. Wenn sich die Beschreibung oder ein Anspruch auf „ein“ Element bezieht, bedeutet dies nicht, dass nur eines dieses Elements existiert. Wenn die Beschreibung oder ein Anspruch sich auf „ein zusätzliches“ Element bezieht, dann schließt dies nicht aus, dass mehr als ein zusätzliches Element vorliegt.
  • Wie oben dargelegt, können verschiedene Aspekte der vorliegenden Ausführungsformen durch entsprechende Software- und/oder Firmware-Komponenten und -Anwendungen erleichtert werden, wie durch einen eingebetteten Prozessor ausgeführte Software und/oder Firmware. Somit können Ausführungsformen dieser Erfindung als oder zur Unterstützung von Software-Programmen, Software-Modulen, Firmware und/oder verteilte(r) Software verwendet werden, die auf einer Form von Prozessor, Verarbeitungskern oder eingebetteter Logik einer virtuellen Maschine, die auf einem Prozessor oder Kern läuft oder auf sonstige Weise auf oder in einem nichtflüchtigen computerlesbaren oder maschinenlesbaren Speichermedium umgesetzt oder realisiert ist, ausgeführt werden. Ein nichtflüchtiges computerlesbares oder maschinenlesbares Speichermedium umfasst einen beliebigen Mechanismus zum Speichern oder Übertragen von Informationen in einer Form, die von einer Maschine (z.B. einem Computer) lesbar ist. Beispielsweise umfasst ein nichtflüchtiges computerlesbares oder maschinenlesbares Speichermedium einen beliebigen Mechanismus, der Informationen in einer Form bereitstellt (d.h. speichert und/oder überträgt), die für einen Computer oder eine Rechenvorrichtung (z.B. Rechenvorrichtung, elektronisches System usw.) zugänglich ist, wie etwa beschreibbare/nicht beschreibbare Medien (z.B. Festwertspeicher (ROM), Direktzugriffspeicher (RAM), Magnetplattenspeichermedien, optische Speichermedien, Flash-Speichervorrichtungen usw.). Der Inhalt kann unmittelbar ausführbar sein („Objekt-“ oder „ausführbare“ Form), Quellkode oder Differenzkode („Delta“- oder „Patch“-Kode) sein. Ein nichtflüchtiges computerlesbares oder maschinenlesbares Speichermedium kann auch einen Speicher oder eine Datenbank umfassen, von dem/der Inhalte heruntergeladen werden können. Das nichtflüchtige computerlesbare oder maschinenlesbare Speichermedium kann auch eine Vorrichtung oder ein Produkt umfassen, die/das zum Zeitpunkt des Verkaufs oder der Lieferung Inhalte darauf aufweist. Die Lieferung einer Vorrichtung mit gespeicherten Inhalten oder das Anbieten von Inhalten zum Download über ein Kommunikationsmedium ist als Bereitstellung eines Fertigungsprodukts, das ein nichtflüchtiges computerlesbares oder maschinenlesbares Speichermedium mit den hier beschriebenen Inhalten umfasst, zu verstehen.
  • Verschiedene Komponenten, die hierin als Prozesse, Server oder Tools beschrieben werden, können Mittel zur Durchführung der beschriebenen Funktionen darstellen. Die durch verschiedene hier beschriebene Komponenten durchgeführten Vorgänge und Funktionen können durch Software implementiert werden, die auf einem Verarbeitungselement läuft, und zwar über einbettete Hardware oder dergleichen, oder eine beliebige Kombination von Hardware und Software. Diese Komponenten können als Software-Module, Hardware-Module, Hardware mit besonderem Zweck (z.B. Anwendungsspezifische Hardware, ASICs, DSPs usw.), eingebettete Steuerungen, festverdrahtete Schaltungen, Hardware-Logik usw. umgesetzt sein. Software-Inhalte (z.B. Daten, Befehle, Konfigurationsinformationen usw.) können über ein Fertigungsprodukt, wie ein nichtflüchtiges computerlesbares oder maschinenlesbares Speichermedium, das Inhalte bereitstellt, die ausführbare Befehle darstellen, umgesetzt sein. Die Inhalte können dazu führen, dass ein Computer verschiedene hier beschriebene Funktionen/Vorgänge durchführt.
  • Wie im Vorliegenden verwendet, kann eine Auflistung von Dingen, die mit dem Begriff „mindestens eins von“ verbunden sind, jede Kombination der aufgeführen, inge bedeuten. Beispielsweise kann der Satz „mindestens eins von A, B oder C“ Folgende bedeuten: A; B; C; A und B; A und C; B und C; oder A, B und C.
  • Kursiv gesetzte Buchstaben, wie „n“ und „m“ in der obigen ausführlichen Beschreibung, werden verwendet, um eine ganze Zahl darzustellen, und die Verwendung eines bestimmten Buchstabens ist nicht auf bestimmte Ausführungsformen beschränkt. Zudem kann derselbe Buchstabe in verschiedenen Ansprüchen verwendet werden, um verschiedene ganze Zahlen darzustellen, oder es können verschiedene Buchstaben verwendet werden. Darüber hinaus kann die Verwendung eines bestimmten Buchstabens in der ausführlichen Beschreibung mit dem Buchstaben, der in einem denselben Gegenstand in der ausführlichen Beschreibung betreffenden Anspruch verwendet wurde, übereinstimmen oder nicht.
  • Die obige Beschreibung von veranschaulichten Ausführungsformen der Erfindung, einschließlich der Beschreibung in der Zusammenfassung, ist nicht als erschöpfende Darlegung der Erfindung oder als Beschränkung der Erfindung auf die konkreten offenbarten Formen zu verstehen. Wenngleich hier spezifische Ausführungsformen von der und Beispiele für die Erfindung zur Veranschaulichung beschrieben werden, sind verschiedene äquivalente Modifikationen innerhalb des Schutzumfangs der Erfindung möglich, wie für Fachleute ersichtlich sein wird.
  • Diese Modifikationen können an der Erfindung in Anbetracht der obigen ausführlichen Beschreibung vorgenommen werden. Die in den folgenden Ansprüchen verwendeten Begriffe sollen die Erfindung nicht auf die spezifischen in der Beschreibung und den Zeichnungen offenbarten Ausführungsformen beschränken. Vielmehr wird der Schutzumfang der Erfindung ausschließlich durch die nun folgenden Ansprüche bestimmt, die gemäß den gängigen Grundsätzen der Interpretation von Ansprüchen auszulegen sind.

Claims (25)

  1. Verfahren, das auf einer Rechenplattform durchgeführt wird, welche einen Multicore-Prozessor umfasst, der mit einer oder mehreren Speichervorrichtungen gekoppelt ist, umfassend einen als virtueller Gemeinspeicher (SVM) implementierten Systemspeicher, wobei der Multicore-Prozessor eine Vielzahl von Kernen aufweist, wobei jeder Kern zumindest einem Übersetzungs-Lookaside-Puffer (TLB) zugeordnet ist, der Multicore-Prozessor ferner zumindest eine Speichersteuerung umfasst, die über zumindest einen Speicherkanal mit einer oder mehreren Speichervorrichtungen wirkgekoppelt ist, wobei die Rechenplattform ferner einen oder mehrere SVM-fähige Beschleuniger mit einer oder mehreren Funktionseinheiten umfasst, wobei das Verfahren Folgendes umfasst: Einreihen eines Anfragendeskriptors für einen Beschleuniger in eine Warteschlange durch Ausführen eines Ausführungsthreads auf einem der Vielzahl von Kernen, wobei der Anfragendeskriptor einen Arbeitsauftrag definiert, der vom Beschleuniger durchzuführen ist, und einem oder mehreren Puffern im Systemspeicher zugeordnete Informationen umfasst, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat; spekulatives vorgreifendes Abrufen von Pufferdaten aus dem Systemspeicher unter Verwendung der dem einen oder den mehreren Puffern zugeordneten Informationen im Anfragendeskriptor; spekulatives Beginnen der Verarbeitung des Arbeitsauftrags durch Verarbeiten von zumindest einem Teil der Pufferdaten, der unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers vorgreifend abgerufen wird; und Überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
  2. Verfahren nach Anspruch 1, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, wobei das Verfahren ferner Folgendes umfasst: für jeden des einen oder der mehreren Puffer, Verwenden des Adresshinweises für den Puffer zum spekulativen vorgreifenden Abrufen von Pufferdaten für den Puffer.
  3. Verfahren nach Anspruch 2, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst: eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
  4. Verfahren nach Anspruch 2, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer durch den Einsatz eines Befehlssatzarchitektur(ISA)-Befehls im vom Prozessorkern ausgeführten Ausführungsthread erhalten wird.
  5. Verfahren nach Anspruch 4, wobei das Ausführen des ISA-Befehls durch den Prozessorkern bewirkt, dass der Prozessor: für jeden des einen oder der mehreren Puffer, die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordnete TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst.
  6. Verfahren nach Anspruch 1, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen in Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen, wobei das Verfahren ferner Folgendes umfasst: für jeden des einen oder der mehreren Puffer, Verwenden der virtuellen Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder einer Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und spekulativ vorgreifendes Abrufen der Pufferdaten für den Puffer unter Verwendung des Hinweises.
  7. Verfahren nach einem der Ansprüche 2 bis 6, ferner Folgendes umfassend: für jeden des einen oder der mehreren Puffer Übersetzen der virtuellen Adresse für den Puffer in eine physikalische Adresse, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und für jeden des einen oder der mehreren Puffer Überprüfen des Adresshinweises für den Puffer anhand der aktuell gültigen physikalische Adresse für den Puffer.
  8. Verfahren nach Anspruch 7, wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer durch den Einsatz eines Periphere-Komponentenzwischenverbindung- Express(PCIe)-Adressübersetzungsdiensts erleichtert wird.
  9. Verfahren nach Anspruch 8, ferner Folgendes umfassend: Beurteilen des PCIe-Adressübersetzungsdiensts durch Emulieren einer PCIe-Vorrichtung.
  10. Verfahren nach einem der vorhergehenden Ansprüche, wobei überprüft wird, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind, ferner Folgendes umfassend: Fortsetzen der Verarbeitung des Arbeitsauftrags durch Verarbeiten aller der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers.
  11. Computersystem, umfassend: einen Multicore-Prozessor, umfassend: eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung; ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist; eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist; eine Eingabe-Ausgabe(IO)-Schnittstelle, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist; und einen IOTLB zum Speichern einer Vielzahl von TLB-Einträgen, umfassend VA-PA-Übersetzungen für eine oder mehrere IO-Vorrichtungen; einen Systemspeicher, umfassend eine oder mehrere Speichervorrichtungen, die jeweils kommunikativ mit zumindest einem Speicherkanal der Speichersteuerung gekoppelt sind; einen Beschleuniger mit Fähigkeit zum virtuellen Gemeinspeicher (SVM), der eine oder mehrere Funktionseinheiten, entweder eingebettet im Prozessor oder über die IO-Schnittstelle kommunikativ mit dem Prozessor gekoppelt, aufweist; wobei das System konfiguriert ist, um einen Anfragendeskriptor für den Beschleuniger durch Ausführen eines Ausführungsthreads auf einem der Vielzahl von Kernen in eine Warteschlange einzureihen, wobei der Anfragendeskriptor einen Arbeitsauftrag definiert, der vom Beschleuniger durchzuführen ist, und einem oder mehreren Puffern im Systemspeicher zugeordnete Informationen umfasst, auf die der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat; Pufferdaten aus dem Systemspeicher unter Verwendung der dem einen oder den mehreren Puffern zugeordneten Informationen im Anfragendeskriptor spekulativ vorgreifend abzurufen; die Verarbeitung des Arbeitsauftrags durch Verarbeiten von zumindest einem Teil der Pufferdaten, der unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers vorgreifend abgerufen wird, spekulativ zu beginnen; und zu überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
  12. Computersystem nach Anspruch 11, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse, eine Größe und einen Adresshinweis für jeden des einen oder der mehreren Puffer umfassen, wobei das System ferner konfiguriert ist, um: für jeden des einen oder der mehreren Puffer, den Adresshinweis für den Puffer zum spekulativ vorgreifenden Abrufen von Pufferdaten für den Puffer einzusetzen.
  13. Computersystem nach Anspruch 12, wobei der Adresshinweis für jeden des einen oder der mehreren Puffer Folgendes umfasst: eine physikalische Adresse für zumindest eine erste Seite von einer oder mehreren Speicherseiten, die dem Puffer entsprechende Daten umfassen; oder eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung für zumindest die erste Seite einer oder mehrerer Speicherseiten, die dem Puffer entsprechende Daten umfassen.
  14. Computersystem nach Anspruch 12 oder 13, wobei jeder der Prozessorkerne eine Befehlssatzarchitektur (ISA) aufweist und wobei der Adresshinweis für jeden des einen oder der mehreren Puffer unter Verwendung eines ISA-Befehls im Ausführungsthread, der vom Prozessorkern ausgeführt wird, erhalten wird.
  15. Computersystem nach Anspruch 14, wobei das Ausführen des ISA-Befehls durch den Prozessorkern bewirkt, dass der Prozessor: für jeden des einen oder der mehreren Puffer die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordnete TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst.
  16. Computersystem nach einem der Ansprüche 12 bis 15, wobei das System ferner konfiguriert ist, um: für jeden des einen oder der mehreren Puffer, die virtuelle Adresse für den Puffer in eine physikalische Adresse zu übersetzen, um eine aktuell gültige physikalische Adresse für den Puffer zu erhalten; und für jeden des einen oder der mehreren Puffer den Adresshinweis für den Puffer anhand der aktuell gültigen physikalischen Adresse für den Puffer zu überprüfen.
  17. Computersystem nach Anspruch 16, wobei die IO-Schnittstelle eine Periphere-Komponentenzwischenverbindung-Express(PCIe)-Schnittstelle umfasst und wobei der Prozessor einen mit dem Zwischenverbindungsgewebe und mit der PCIe-Schnittstelle gekoppelten PCIe-Root-Komplex umfasst und der Prozessor konfiguriert ist, um den PCIe-Adressübersetzungsdienst (ATS) zu unterstützen, und wobei das Übersetzen einer virtuellen Adresse für einen Puffer in eine physikalische Adresse für den Puffer durch den Einsatz von PCIe-ATS erleichtert wird.
  18. Computersystem nach Anspruch 11, wobei die dem einen oder den mehreren Puffern zugeordneten Informationen im Systemspeicher eine virtuelle Adresse und eine Größe von jedem des einen oder der mehreren Puffer umfassen, und wobei das System ferner konfiguriert ist, um: für jeden des einen oder der mehreren Puffer die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere TLBs, welche(r) dem den Thread ausführenden Kern zugeordnet ist/sind, zu verwenden, wobei der TLB-Nachschlag zumindest eine aus einer physikalischen Speicheradresse, die einen Hinweis umfasst, oder einer Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung, die einen Hinweis umfasst, identifiziert; und Pufferdaten für den Puffer unter Verwendung des Hinweises spekulativ vorgreifend abzurufen.
  19. Computersystem nach Anspruch 18, wobei das System ferner konfiguriert ist, um: die virtuelle Adresse für jeden des einen oder der mehreren Puffer in eine physikalische Adresse zu übersetzen, um eine aktuell gültige physikalische Adresse zu erhalten; und für jeden des einen oder der mehreren Puffer den Hinweis für diesen Puffer mit der aktuell gültigen physikalischen Adresse für diesen Puffer zu überprüfen.
  20. Computersystem nach einem der Ansprüche 11-19, wobei das System als Antwort auf das Überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind, ferner konfiguriert ist, um die Verarbeitung des Arbeitsauftrags durch Verarbeiten aller der vorgreifend abgerufenen Pufferdaten unter Verwendung von einer oder mehrerer Funktionseinheiten des Beschleunigers fortzusetzen.
  21. Multicore-Prozessor, umfassend: eine Vielzahl von Prozessorkernen, wobei jeder Prozessorkern zumindest einen zugeordneten Übersetzungs-Lookaside-Puffer (TLB) aufweist, wobei jeder TLB eine Vielzahl von TLB-Einträgen zu speichern hat, umfassend eine Virtuelle-Adresse-in-physikalische-Adresse(VA-PA)-Übersetzung; ein Zwischenverbindungsgewebe, das mit jedem Prozessorkern kommunikativ gekoppelt ist, und wobei jeder TLB jedem Prozessorkern zugeordnet ist; eine Speichersteuerung, die kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist und einen oder mehrere Speicherkanäle aufweist; einen Beschleuniger, der kommunikativ mit dem Zwischenverbindungsgewebe gekoppelt ist, mit einer oder mehreren Funktionseinheiten und zumindest einem aus einer Anfragewarteschlange und einem Portal, wobei der Multicore-Prozessor konfiguriert ist, um in einem Computersystem installiert zu sein, das einen Systemspeicher umfasst, der eine oder mehrere Speichervorrichtungen umfasst, welche mit dem einen oder den mehreren Speicherkanälen gekoppelt sind, wenn der Prozessor im Computersystem installiert ist, wobei das Computersystem eine Virtueller-Gemeinspeicher(SVM)-Architektur einsetzt, und wobei jeder Prozessorkern eine Befehlssatzarchitektur (ISA) aufweist, die einen Befehl umfasst, der beim Ausführen bewirkt, dass der Prozessor: entweder einen Anfragendeskriptor in das Beschleunigerportal schreibt oder einen Anfragendeskriptor in die Beschleunigeranfragewarteschlange einreiht, wobei der Anfragendeskriptor einen vom Beschleuniger durchzuführenden Arbeitsauftrag definiert und einen Adresshinweis für jeden des einen oder der mehreren Puffer im Systemspeicher umfasst, auf den der Beschleuniger während der Verarbeitung des Anfragendeskriptors zuzugreifen hat, wobei der Adresshinweis für einen Puffer vom Prozessor einzusetzen ist, um Pufferdaten, die dem Puffer aus dem Systemspeicher entsprechen, spekulativ vorgreifend abzurufen.
  22. Multicore-Prozessor nach Anspruch 21, wobei der Multicore-Prozessor ferner konfiguriert ist, um: als Antwort auf das Einreihen des Anfragendeskriptors in die Beschleunigeranfragenwarteschlange den Adresshinweis für jeden des einen oder der mehreren Puffer zum spekulativen vorgreifenden Abrufen von Pufferdaten aus dem Systemspeicher für diesen Puffer einzusetzen; die Verarbeitung des durch den Anfragendeskriptor definierten Arbeitsauftrags durch Verarbeiten von zumindest einem Teil der Pufferdaten, der unter Verwendung von einer oder mehreren Funktionseinheiten des Beschleunigers vorgreifend abgerufen wird, spekulativ zu beginnen; und zu überprüfen, ob die spekulativ vorgreifend abgerufenen Pufferdaten die korrekten vom Arbeitsauftrag zu verarbeitenden Pufferdaten sind.
  23. Multicore-Prozessor nach Anspruch 21 oder 22, wobei der ISA-Befehl einen ersten Operanden zum Speichern einer Adresse des Beschleunigerportals zum Schreiben eines Anfragendeskriptors in ein erstes Register, einen zweiten Operanden zum Speichern einer Adresse des Anfragendeskriptors von einer Benutzeranwendung, die im Systemspeicher läuft, in einem zweiten Register und einen dritten Operanden zum Speichern einer Länge des Anfragendeskriptors im dritten Register umfasst.
  24. Multicore-Prozessor nach Anspruch 23, wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor: aus dem Anfragendeskriptor Daten extrahiert, die eine virtuelle Adresse von jedem des einen oder der mehreren Puffer identifizieren; für jeden des einen oder der mehreren Puffer die virtuelle Adresse des Puffers als TLB-Nachschlag in einen oder mehrere dem Prozessorkern zugeordneten TLBs verwendet, wobei der TLB-Nachschlag eine physikalische Speicheradresse zurücksendet, die einen Hinweis umfasst; und den Anfragendeskriptor aktualisiert, um den Hinweis aufzunehmen.
  25. Multicore-Prozessor nach Anspruch 24, wobei zumindest einer der Puffer Daten umfasst, die in mehreren Seiten im Systemspeicher gespeichert sind, und wobei das Ausführen des ISA-Befehls durch einen Prozessorkern bewirkt, dass der Prozessor: den Anfragendeskriptor mit einer physikalischen Speicheradresse für jede der mehreren Seiten für jeden Puffer aktualisiert, der Daten umfasst, welche in mehreren Seiten im Systemspeicher gespeichert sind.
DE102018213430.8A 2017-09-26 2018-08-09 Beschleuniger mit geringer Latenzzeit Pending DE102018213430A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/715,594 US10437739B2 (en) 2017-09-26 2017-09-26 Low-latency accelerator
US15/715,594 2017-09-26

Publications (1)

Publication Number Publication Date
DE102018213430A1 true DE102018213430A1 (de) 2019-03-28

Family

ID=65638642

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018213430.8A Pending DE102018213430A1 (de) 2017-09-26 2018-08-09 Beschleuniger mit geringer Latenzzeit

Country Status (3)

Country Link
US (1) US10437739B2 (de)
CN (1) CN109558168A (de)
DE (1) DE102018213430A1 (de)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422954B2 (en) * 2018-09-28 2022-08-23 Intel Corporation Techniques for accelerating memory access operations
KR102646630B1 (ko) * 2018-10-01 2024-03-11 삼성전자주식회사 시스템 런타임 환경에서 dram 셀 상의 라이트 보호 커맨드를 발행하는 방법
US11455257B2 (en) * 2019-04-07 2022-09-27 Intel Corporation Ultra-secure accelerators
CN110083387B (zh) * 2019-04-19 2021-11-12 上海兆芯集成电路有限公司 使用轮询机制的处理系统及其访存方法
US11025544B2 (en) 2019-06-07 2021-06-01 Intel Corporation Network interface for data transport in heterogeneous computing environments
US10997086B1 (en) 2020-03-03 2021-05-04 Intel Corporation Systems and methods in a graphics environment for providing shared virtual memory addressing support for a host system
GB2593487B (en) 2020-03-24 2022-05-04 Advanced Risc Mach Ltd Apparatus and method
GB2593484B (en) * 2020-03-24 2022-09-28 Advanced Risc Mach Ltd Memory management
US20200266995A1 (en) * 2020-05-04 2020-08-20 Vinodh Gopal Managing state in accelerators
CN113868292A (zh) * 2020-06-30 2021-12-31 华为技术有限公司 一种读数据的方法、写数据的方法、设备和系统
US20220197816A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Compressed cache memory with parallel decompress on fault
EP4268085A4 (de) * 2020-12-22 2024-04-10 INTEL Corporation Prozessorschaltung zur ausführung einer eingabe-ausgabe-übersetzung virtueller adressenbefehle
US20220206975A1 (en) * 2020-12-24 2022-06-30 Intel Corporation Circuitry and methods for low-latency page decompression and compression acceleration
US20240020241A1 (en) * 2020-12-24 2024-01-18 Intel Corporation Apparatus and method for address pre-translation to enhance direct memory access by hardware subsystems
US11704253B2 (en) * 2021-02-17 2023-07-18 Microsoft Technology Licensing, Llc Performing speculative address translation in processor-based devices
CN115309693A (zh) 2021-05-07 2022-11-08 脸萌有限公司 集成电路、数据处理装置和方法
CN114817081A (zh) * 2022-03-02 2022-07-29 阿里巴巴(中国)有限公司 内存访问方法、装置和输入输出内存管理单元
US20230333990A1 (en) * 2022-04-18 2023-10-19 Samsung Electronics Co., Ltd. Systems and methods for address translation
TWI827034B (zh) * 2022-05-03 2023-12-21 開曼群島商臉萌有限公司 積體電路、資料處理裝置和方法
US20230401160A1 (en) * 2022-06-09 2023-12-14 Microsoft Technology Licensing, Llc Address translation prefetching for input/output devices

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5883641A (en) * 1997-04-29 1999-03-16 Hewlett-Packard Company System and method for speculative execution in a geometry accelerator
EP1589433A1 (de) * 2004-04-20 2005-10-26 Ecole Polytechnique Federale De Lausanne Virtuelles Speicherfenster mit dynamischer Vorausholungsunterstützung
US7930519B2 (en) * 2008-12-17 2011-04-19 Advanced Micro Devices, Inc. Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit
US20110161620A1 (en) * 2009-12-29 2011-06-30 Advanced Micro Devices, Inc. Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US8954490B2 (en) * 2010-06-24 2015-02-10 International Business Machines Corporation Speculative and coordinated data access in a hybrid memory server
US9361116B2 (en) * 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9772944B2 (en) * 2014-06-27 2017-09-26 International Business Machines Corporation Transactional execution in a multi-processor environment that monitors memory conflicts in a shared cache
US9658963B2 (en) * 2014-12-23 2017-05-23 Intel Corporation Speculative reads in buffered memory
US10387343B2 (en) * 2015-04-07 2019-08-20 International Business Machines Corporation Processing of events for accelerators utilized for parallel processing
US10282308B2 (en) * 2016-06-23 2019-05-07 Advanced Micro Devices, Inc. Method and apparatus for reducing TLB shootdown overheads in accelerator-based systems
US10310897B2 (en) * 2016-09-30 2019-06-04 Intel Corporation Hardware accelerators and methods for offload operations

Also Published As

Publication number Publication date
CN109558168A (zh) 2019-04-02
US20190095343A1 (en) 2019-03-28
US10437739B2 (en) 2019-10-08

Similar Documents

Publication Publication Date Title
DE102018213430A1 (de) Beschleuniger mit geringer Latenzzeit
DE102018006756A1 (de) Beschleuniger-Fabric
DE112013002069B4 (de) Hohes Leistungsverbindungskohärenz-Protokoll
DE102007062744B4 (de) Guest-Host-Adressübersetzung für den Zugriff von Geräten auf einen Speicher in einem partitionierten System
DE102010035603A1 (de) Bereitstellen von Hardwareunterstützung für gemeinsam benutzten virtuellen Speicher zwischen physischem Lokal- und Fernspeicher
DE69031433T2 (de) Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher
DE102007063960B3 (de) Synchronisieren eines Übersetzungspufers (TLB) mit einer erweiterten Seitenwechseltabelle
DE102018000886A1 (de) Virtuelle Maschinenkommunikation auf Hardware-Basis
DE102015002582A1 (de) Architekturübergreifendes Kompatibilitätsmodul, um zuzulassen, dass ein Codemodul einer Architektur ein Bibliotheksmodul einer anderen Architektur verwendet
DE112016005910T5 (de) Architechtur für Software-Definierten Interconnect-Switch
DE112016007566T5 (de) Systeme, Verfahren und Vorrichtungen zur heterogenen Berechnung
US6920521B2 (en) Method and system of managing virtualized physical memory in a data processing system
DE112017001825T5 (de) Prozessoren, verfahren, systeme und instruktionen zum atomischen speichern von daten, die breiter als eine nativ unterstützte datenbreite sind, in einem speicher
DE102018004327A1 (de) Systeme und Verfahren zum Zugreifen auf Massenspeicher als Arbeitsspeicher
DE102018006797A1 (de) Kohärente Speichereinrichtungen über PCIe
DE112010001467B4 (de) Steuerung von Blöcken einer On-Die-System-Struktur
DE112010004971T5 (de) Ein System, Verfahren und eine Vorrichtung für einen Cache-Flush eines Seitenbereichs und TLB Invalidierung eines Bereichs von Einträgen
DE112017001148T5 (de) Abflachende portalbrücke .
DE112006003597T5 (de) Unbeschränkte Transaktionsspeichersysteme
DE112010005821T5 (de) Kontextwechsel
DE102018130225A1 (de) Entfernte atomare Operationen in Multi-Sockel-Systemen
DE112019002389T5 (de) Architektur zur dynamischen umwandlung einer speicherkonfiguration
DE102018002294A1 (de) Effizientes bereichsbasiertes speicher-rückschreiben zum verbessern der host-zu-geräte-kommunikation für optimale energie und leistung
DE202010018020U1 (de) Opportunistische Verbesserung einer MMIO-Anfrageabwicklung aufgrund eines Zielberichts von Raumerfordernissen
DE112017003332T5 (de) Öffnungszugriffsprozessoren, verfahren, systeme und befehle