DE112012006946T5 - Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung - Google Patents

Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung Download PDF

Info

Publication number
DE112012006946T5
DE112012006946T5 DE112012006946.3T DE112012006946T DE112012006946T5 DE 112012006946 T5 DE112012006946 T5 DE 112012006946T5 DE 112012006946 T DE112012006946 T DE 112012006946T DE 112012006946 T5 DE112012006946 T5 DE 112012006946T5
Authority
DE
Germany
Prior art keywords
instruction
store
code
binary
load
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE112012006946.3T
Other languages
English (en)
Inventor
Guokai Ma
Yihua Jin
Daniel M. Lavery
Jianhui Li
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 DE112012006946T5 publication Critical patent/DE112012006946T5/de
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Verfahren und System zur Unterstützung einer Planung von Memory-Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung in einer Verarbeitungseinheit oder einem Prozessor. In einer Ausführungsform der Erfindung weist die Verarbeitungseinheit einen Speicherpuffer auf, der ermöglicht, dass Speicherinstruktionen in einer von der Quell-Binärprogrammordnung verschiedenen Ordnung ausgegeben werden, aber weiterhin in der Quell-Binärprogrammordnung rückgeordnet werden. Dies vereinfacht einen kleinen atomaren Bereich, der auf jede Iteration eines Quellbinärcodes mappt, und diese atomaren Bereiche werden in einem Pipeline-Bereich miteinander verbunden. In einer Ausführungsform der Erfindung führt die Verarbeitungseinheit einmal in jeder Schleifeniteration eine Festlegungsinstruktion(en) aus, anstatt die Festlegungsinstruktion(en) einmal nach dem Schleifenausstieg auszuführen.

Description

  • GEBIET DER ERFINDUNG
  • Diese Erfindung bezieht sich auf eine Verarbeitungseinheit und spezifischer, jedoch nicht ausschließlich, auf ein Verfahren und eine Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung in der Verarbeitungseinheit.
  • HINTERGRUNDBESCHREIBUNG
  • Auf dem Gebiet der binären Übersetzung bestehen einige Barrieren, die eine aggressive Instruktionsplanung und ein Software-Pipelining behindern. Beispielsweise ist eine dieser Barrieren bei der binären Übersetzung die Anforderung der Speicherordnung der Gastarchitektur, die in einem Quelle-binär-Kompilierer nicht vorhanden ist. Wenn eine binäre Übersetzung an einem Code mit einer starken Speicherordnungs-Instruktionssatzarchitektur (ISA) vorgenommen wird, kann der übersetzte Code die Ordnung von Speicheroperationen, wie store-to-store, load-to-load und load-to-store, nicht ändern, auch wenn keine Abhängigkeit zwischen diesen Speicheroperationen besteht. Dies dient dazu zu verhindern, dass der oder die anderen Prozessoren eine Änderung ihres Speichers in einer verschiedenen Ordnung verglichen mit dem ursprünglichen binären Code sehen. Bei der x86 ISA-Architektur schränken die Speicherordnungsregeln beispielsweise das Bewegen einer nicht-abhängigen Ladeinstruktion vor eine Speicheroperation nicht ein, schränken jedoch das Bewegen einer nicht-abhängigen Speicherinstruktion vor eine weitere Speicherinstruktion ein.
  • Der atomare Bereich, der zwischen Festlegungsinstruktionen oder -punkten gebildet wird, ermöglicht die Umordnung von Ladeinstruktionen und Speicherinstruktionen innerhalb des atomaren Bereichs. Einige Prozessoren unterstützen eine Transaktionsausführung, bei der ein Bereich von Instruktionen atomar ausgeführt wird, wobei der gesamte in dem Bereich geänderte Speicherzustand sofort sichtbar wird, wenn eine Festlegungsinstruktion ausgeführt wird. Eine derartige Transaktionsunterstützung ermöglicht die Umordnung von Speicherinstruktionen innerhalb des atomaren Bereichs, ohne dass andere Prozessoren den Speicher in einer verschiedenen Ordnung geändert sehen.
  • Ein Software-Pipelining, das sehr effizient ist bei der Optimierung eines Codes in einem Kompilierer, bringt auf dem Gebiet der binären Übersetzung wegen der starken Speicherordnungsanforderungen weniger Vorteile. Software-Pipelining ordnet aggressiv Instruktionen quer über verschiedene Iterationen um. Beispielsweise kann eine Speicherinstruktion in einer späteren Iteration vor eine Speicherinstruktion oder eine Ladeinstruktion in einer vorherigen Iteration umgeordnet werden müssen, um eine hochkompakte Kernschleife zu erhalten. Dies durchbricht jedoch die store-to-store-(oder load-to-store-)Ordnung und kann in einem binären Übersetzer nicht durchgeführt werden. Falls ein binärer Übersetzer diese Speicherordnungseinschränkungen einhält, kann der binäre Übersetzer nur weniger Vorteile bringen verglichen mit dem Software-Pipelining-Algorithmus eines Kompilierers.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die Merkmale und Vorteile von Ausführungsformen der Erfindung gehen aus der folgenden detaillierten Beschreibung des Gegenstands hervor, wobei:
  • 1A ein Blockbild eines Systems gemäß einer Ausführungsform der Erfindung ist;
  • 1B ein Blockbild eines Systems gemäß einer Ausführungsform der Erfindung ist;
  • 1C ein Blockbild eines Systems gemäß einer Ausführungsform der Erfindung ist;
  • 2 ein Blockbild eines Prozessors gemäß einer Ausführungsform der Erfindung ist;
  • 3A eine modifizierte Ziel-Instruktionssatzarchitektur (ISA) gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 3B ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 3C ein umgeordnetes Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 4A ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 4B ein umgeordnetes Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 5A ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 5B ein umgeordnetes Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 6 einen Gate-gesteuerten Speicherpuffer mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 7A einen Pseudocode der Ziel-ISA gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 7B einen Algorithmus veranschaulicht, um einen Code zu generieren, der eine Speicherinstruktionsordnung im übersetzten Code unter Verwendung der Ziel-ISA beibehält, gemäß einer Ausführungsform der Erfindung;
  • 8A ein Beispiel eines linearen Blockcodes gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 8B das Beispiel des linearen Blockcodes veranschaulicht, nachdem Schritt Eins des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung;
  • 8C das Beispiel des linearen Blockcodes veranschaulicht, nachdem Schritt Zwei des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung;
  • 9A ein Beispiel eines Schleifenkörpercodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 9B das Beispiel des Schleifenkörpercodes veranschaulicht, nachdem Schritt Eins des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung;
  • 9C das Beispiel des Schleifenkörpercodes veranschaulicht, nachdem Schritt Zwei des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung;
  • 10A die Inhalte des Gate-gesteuerten Speicherpuffers mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 10B die Inhalte des Gate-gesteuerten Speicherpuffers mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 10C die Inhalte des Gate-gesteuerten Speicherpuffers mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 10D die Inhalte des Gate-gesteuerten Speicherpuffers mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 11A ein Beispiel eines Schleifencodes gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 11B den konvertierten Vektorbeispielcode gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 12 ein Blockbild eines Systems gemäß einer Ausführungsform der Erfindung veranschaulicht;
  • 13 ein Blockbild zeigt, das die Entwicklung von IP-Kernen veranschaulicht, gemäß einer Ausführungsform der Erfindung; und
  • 14 ein Blockbild ist, das die Verwendung eines Software-Instruktionskonvertierers veranschaulicht, um binäre Instruktionen in einem Quellinstruktionssatz in binäre Instruktionen in einem Zielinstruktionssatz zu konvertieren, gemäß Ausführungsformen der vorliegenden Erfindung.
  • DETAILLIERTE BESCHREIBUNG
  • Die folgende Beschreibung beschreibt Instruktionen und Verarbeitungslogik, um die Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung innerhalb oder in Assoziation mit einem Prozessor, Computersystem oder einer anderen Verarbeitungsvorrichtung zu unterstützen. In der folgenden Beschreibung werden zahlreiche spezifische Details, wie Verarbeitungslogik, Prozessortypen, Mikroarchitekturbedingungen, Ereignisse, Freigabemechanismen und dgl. angegeben, um ein besseres Verständnis von Ausführungsformen der vorliegenden Erfindung zu bieten. Für Fachleute ist jedoch klar, dass die Erfindung ohne solche spezifische Details praktiziert werden kann. Zusätzlich werden einige wohlbekannte Strukturen, Schaltungen und dgl. nicht detailliert gezeigt, um zu vermeiden, dass Ausführungsformen der vorliegenden Erfindung unnötig unklar werden.
  • Obwohl die vorliegenden Ausführungsformen mit Bezugnahme auf einen Prozessor beschrieben werden, sind andere Ausführungsformen auf andere Typen von Integrationsschaltungen und Logikvorrichtungen anwendbar. Ähnliche Techniken und Lehren von Ausführungsformen der vorliegenden Erfindung können bei anderen Typen von Schaltungen oder Halbleitervorrichtungen angewendet werden, die von einem höheren Pipeline-Durchsatz und einer verbesserten Leistung profitieren können. Die Lehren von Ausführungsformen der vorliegenden Erfindung sind auf einen beliebigen Prozessor oder eine Maschine anwendbar, der oder die Datenmanipulationen vornimmt. Die vorliegende Erfindung ist jedoch nicht auf Prozessoren oder Maschinen beschränkt, die 512 Bit-, 256 Bit-, 128 Bit-, 64 Bit- 32-Bit oder 16 Bit-Datenoperationen vornehmen, und kann bei einem beliebigen Prozessor und einer Maschine angewendet werden, in denen eine Datenmanipulation oder -verwaltung vorgenommen wird.
  • Zusätzlich liefert die folgende Beschreibung Beispiele, und die beigeschlossenen Zeichnungen zeigen verschiedene Beispiele für Zwecke der Veranschaulichung. Diese Beispiele sind jedoch nicht im einschränkenden Sinn auszulegen, da sie nur Beispiele von Ausführungsformen der vorliegenden Erfindung liefern sollen, anstatt eine erschöpfende Liste aller möglichen Implementierungen von Ausführungsformen der vorliegenden Erfindung vorzusehen.
  • Obwohl die nachstehenden Beispiele eine Instruktionshandhabung und -verteilung im Kontext von Ausführungseinheiten und Logikschaltungen beschreiben, können andere Ausführungsformen der vorliegenden Erfindung durch Daten oder Instruktionen erzielt werden, die auf einem maschinenlesbaren, greifbaren Medium gespeichert sind, und die, wenn sie von einer Maschine vorgenommen werden, die Maschine veranlassen, Funktionen vorzunehmen, die mit wenigstens einer Ausführungsform der Erfindung konsistent sind. In einer Ausführungsform sind mit Ausführungsformen der vorliegenden Erfindung assoziierte Funktionen in maschinenlesbaren Instruktionen verkörpert. Die Instruktionen können verwendet werden, um einen Universal- oder Spezialprozessor zu veranlassen, der mit den Instruktionen programmiert ist, die Schritte der vorliegenden Erfindung vorzunehmen. Ausführungsformen der vorliegenden Erfindung können als Computerprogrammprodukt oder Software vorgesehen werden, das oder die ein maschinen- oder computerlesbares Medium mit darauf gespeicherten Instruktionen umfasst, die verwendet werden können, um einen Computer (oder eine andere elektronische Vorrichtung) zu programmieren, eine oder mehrere Operationen gemäß Ausführungsformen der vorliegenden Erfindung vorzunehmen. Alternativ dazu könnten Schritte von Ausführungsformen der vorliegenden Erfindung durch spezifische Hardware-Komponenten vorgenommen werden, die Festfunktionslogik zur Vornahme der Schritte enthalten, oder durch eine beliebige Kombination programmierter Computerkomponenten und Festfunktions-Hardware-Komponenten.
  • Instruktionen, die verwendet werden, um Logik zu programmieren, Ausführungsformen der Erfindung vorzunehmen, können innerhalb eines Speichers im System gespeichert werden, wie eines DRAM, Cache, Flash-Speichers oder anderen Speichers. Ferner können die Instruktionen über ein Netz oder mittels anderer computerlesbarer Medien verteilt werden. So kann ein maschinenlesbares Medium einen beliebigen Mechanismus zum Speichern oder Senden von Informationen in einer Form umfassen, die von einer Maschine (z. B. einem Computer) gelesen werden kann, ist jedoch nicht beschränkt auf: Disketten, optische Platten, Compact Disc-Nurlesespeicher (CD-ROMs) und magnetooptische Platten, Nurlesespeicher (ROMs), Speicher mit wahlfreiem Zugriff (RAM), löschbare programmierbare Nurlesespeicher (EPROM), elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher oder einen greifbaren, maschinenlesbaren Speicher, der bei der Transmission von Informationen über das Internet über elektrische, optische, akustische oder andere Formen ausgebreiteter Signale (z. B. Trägerwellen, Infrarot-Signale, Digitalsignale) verwendet wird. Demgemäß umfasst das computerlesbare Medium einen beliebigen Typ eines greifbaren maschinenlesbaren Mediums, das zum Speichern oder Senden elektronischer Instruktionen oder Informationen in einer Form geeignet ist, die von einer Maschine (z. B. einem Computer) gelesen werden kann.
  • Eine Ausbildung kann durch verschiedene Stufen gehen, von der Erzeugung zur Simulation zur Herstellung. Eine Ausbildung repräsentierende Daten können die Ausbildung in verschiedener Weise repräsentieren. Zuerst, wie es bei Simulationen nützlich ist, kann die Hardware unter Verwendung einer Hardware-Beschreibungssprache oder einer anderen funktionellen Beschreibungssprache repräsentiert werden. Zusätzlich kann ein Modell auf Schaltungsebene mit Logik und/oder Transistorgates in einigen Stufen des Ausbildungsprozesses erzeugt werden. Ferner erreichen die meisten Ausbildungen in irgendeiner Stufe eine Ebene von Daten, welche die physikalische Platzierung verschiedener Vorrichtungen in das Hardware-Modell repräsentieren. In dem Fall, wo herkömmliche Halbleiter-Herstellungstechniken verwendet werden, können die das Hardware-Modell repräsentierenden Daten jene Daten sein, welche das Vorliegen oder Fehlen verschiedener Merkmale auf verschiedenen Maskenschichten für Masken spezifizieren, die zur Erzeugung der Integrationsschaltung verwendet werden. In einer beliebigen Repräsentation der Ausbildung können die Daten in einer beliebigen Form eines maschinenlesbaren Mediums gespeichert werden. Ein Speicher oder ein magnetischer oder optischer Speicher, wie eine Platte, kann das maschinenlesbare Medium sein, um Informationen zu speichern, die über optische oder elektrische Wellen gesendet werden, welche moduliert oder auf andere Weise generiert werden, um solche Informationen zu senden. Wenn eine elektrische Trägerwelle gesendet wird, die den Code oder die Ausbildung anzeigt oder trägt, in dem Ausmaß, dass ein Kopieren, Puffer oder eine erneute Übertragung des elektrischen Signals vorgenommen wird, wird eine neue Kopie gemacht. So kann ein Kommunikationsanbieter oder ein Netzanbieter auf einem greifbaren, maschinenlesbaren Medium, zumindest temporär, einen Artikel speichern, wie in einer Trägerwelle codierte Informationen, die Techniken von Ausführungsformen der vorliegenden Erfindung verkörpern.
  • In modernen Prozessoren wird eine Reihe verschiedener Ausführungseinheiten verwendet, um verschiedenste Codes und Instruktionen zu verarbeiten und auszuführen. Nicht alle Instruktionen werden gleich erzeugt, da einige schneller vollendet werden können, wohingegen andere eine Anzahl von Taktzyklen benötigen können, um vollendet zu werden. Je schneller der Durchsatz von Instruktionen, desto besser die Gesamtleistung des Prozessors. So wäre es vorteilhaft, dass so viele Instruktion wie möglich so schnell wie möglich ausgeführt werden. Es gibt jedoch bestimmte Instruktionen, die eine größere Komplexität aufweisen und mehr bezogen auf die Ausführungszeit und Prozessorressourcen erfordern. Beispielsweise gibt es Gleitkommainstruktionen, Lade/Speicheroperationen, Datenbewegungen, etc.
  • Mit der zunehmenden Verwendung von Computersystemen im Internet, bei Texten und in Multimedia-Anwendungen wurde mit der Zeit zusätzliche Prozessorunterstützung eingebracht. In einer Ausführungsform kann ein Instruktionssatz mit einer oder mehreren Computerarchitekturen assoziiert sein, die Datentypen, Instruktionen, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Unterbrechungs- und Ausnahmebehandlung und externen Eingang und Ausgang (I/O) umfassen.
  • In einer Ausführungsform kann die Instruktionssatzarchitektur (ISA) durch eine oder mehrere Mikroarchitekturen implementiert werden, die Prozessorlogik und Schaltungen umfassen, welche zur Implementierung eines oder mehrerer Instruktionssätze verwendet werden. Demgemäß können Prozessoren mit unterschiedlichen Mikroarchitekturen wenigstens einen Teil eines gemeinsamen Instruktionssatzes gemeinsam nützen. Beispielsweise implementieren Intel® Pentium 4-Prozessoren, Intel® CoreTM-Prozessoren und Prozessoren von Advanced Micro Devices, Inc., of Sunnyvale, CA, nahezu identische Versionen des x86-Instruktionssatzes (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden), haben jedoch unterschiedliche interne Ausbildungen. Ähnlich können Prozessoren, die von anderen Prozessorentwicklungsfirmen ausgebildet werden, wie ARM Holdings, Ltd., MIPS oder ihren Lizenzträgern oder -nehmern, wenigstens einen Teil eines gemeinsamen Instruktionssatzes gemeinsam nützen, können aber unterschiedliche Prozessorausbildungen umfassen. Beispielsweise kann dieselbe Registerarchitektur der ISA in verschiedener Weise in verschiedenen Mikroarchitekturen unter Verwendung neuer oder wohlbekannter Techniken implementiert werden, die dedizierte physische Register umfassen, ein oder mehrere dynamisch zugeordnete physische Register unter Verwendung eines Registerumbenennungsmechanismus, z. B. unter Verwendung einer Register-Alias-Tabelle (RAT), eines Umordnungspuffers (Reorder Buffer, ROB) und einer Rückordnungsregisterdatei. In einer Ausführungsform können Register ein oder mehrere Register, Registerarchitekturen, Registerdateien oder andere Registersätze umfassen, die von einem Software-Programmierer adressierbar sein können oder nicht.
  • In einer Ausführungsform kann eine Instruktion ein oder mehrere Instruktionsformate umfassen. In einer Ausführungsform kann ein Instruktionsformat verschiedene Felder (Anzahl von Bits, Ort von Bits) anzeigen, um, unter anderem, die vorzunehmende Operation und den oder die Operanden zu spezifizieren, an denen diese Operation vorzunehmen ist. Einige Instruktionsformate können, definiert durch Instruktionsschablonen (oder Subformate), weiter unterteilt werden. Beispielsweise können die Instruktionsschablonen eines gegebenen Instruktionsformats definiert werden, verschiedene Subsätze der Instruktionsformatfelder aufzuweisen, und/oder definiert werden, ein gegebenes Feld aufzuweisen, das anders interpretiert wird. In einer Ausführungsform wird eine Instruktion unter Verwendung eines Instruktionsformats ausgedrückt (und, falls definiert, in einer gegebenen einen der Instruktionsschablonen dieses Instruktionsformats) und spezifiziert die Operation und die Operanden oder zeigt diese an, an denen die Operation operieren wird.
  • Wissenschaftliche, finanzielle, auto-vektorisierte Universal-, RMS- (Recognition, Mining & Synthesis-) und visuelle und Multimedia-Anwendungen (z. B. 2D/3D-Grafik, Bildverarbeitung, Videokompression/dekompression, Spracherkennungsalgorithmen und Audio-Manipulation) können erfordern, dass dieselbe Operation an einer großen Anzahl von Datenitems vorzunehmen ist. In einer Ausführungsform bezieht sich Single Instruction Multiple Data (SIMD) auf einen Instruktionstyp, der einen Prozessor veranlasst, eine Operation an mehreren Datenelementen vorzunehmen. Die SIMD-Technologie kann in Prozessoren verwendet werden, welche die Bits in einem Register in eine Anzahl von Datenelementen mit fester Größe oder variabler Größe logisch teilen können, wobei jedes davon einen getrennten Wert repräsentiert. Beispielsweise können in einer Ausführungsform die Bits in einem 64 Bit-Register als Quelloperand organisiert werden, der vier getrennte 16 Bit-Datenelemente enthält, wobei jedes davon einen getrennten 16 Bit-Wert repräsentiert. Dieser Datentyp kann als „gepackter” Datentyp oder „Vektor” datentyp bezeichnet werden, und Operanden dieses Datentyps werden als gepackte Datenoperanden oder Vektoroperanden bezeichnet. In einer Ausführungsform kann ein gepacktes Datenitem oder ein Vektor eine Sequenz gepackter Datenelemente sein, die innerhalb eines einzelnen Registers gespeichert sind, und ein gepackter Datenoperand oder ein Vektoroperand kann ein Quell- oder Zieloperand einer SIMD-Instruktion (oder „gepackten Dateninstruktion” oder einer „Vektorinstruktion”) sein. In einer Ausführungsform spezifiziert eine SIMD-Instruktion eine einzelne Vektoroperation, die an zwei Quellvektoroperanden vorzunehmen ist, um einen Zielvektoroperanden (der auch als Ergebnisvektoroperand bezeichnet wird) mit derselben oder einer anderen Größe, mit derselben oder einer anderen Anzahl von Datenelementen und in derselben oder einer anderen Datenelementordnung zu generieren.
  • Die SIMD-Technologie, wie jene, die verwendet wird von Intel® CoreTM-Prozessoren mit einem Instruktionssatz mit x86, MMXTM, Streaming SIMD Extensions (SSE), SSE2-, SSE3-, SSE4.1- und SSE4.2-Instruktionen, ARM-Prozessoren, wie der ARM Cortex®-Prozessorfamilie mit einem Instruktionssatz mit Vector Floating Point-(VFP-) und/oder NEON-Instruktionen, und MIPS-Prozessoren, wie der Loongson-Prozessorfamilie, die vom Institute of Computing Technology (ICT) der chinesischen Akademie der Wissenschaften entwickelt wurde, ermöglichte eine signifikante Verbesserung der Anwendungsleistung (CoreTM und MMXTM sind eingetragene Warenzeichen oder Warenzeichen der Intel Corporation of Santa Clara, Kalifornien).
  • 1A ist ein Blockbild eines beispielhaften Computersystems, das mit einem Prozessor gebildet ist, der eine Ausführungseinheit 108 umfasst, um wenigstens eine Instruktion auszuführen, gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 100 umfasst eine Komponente, wie einen Prozessor 102, um Ausführungseinheiten zu verwenden, die Logik umfassen, um Algorithmen für Prozessdaten vorzunehmen, gemäß der vorliegenden Erfindung, wie in der hier beschriebenen Ausführungsform. Das System 100 ist für Verarbeitungssysteme auf der Basis von PENTIUMTM III-, PENTIUMTM 4-, XeonTM-, ItaniumTM-, XScaIeTM- und/oder StrongARMTM-Mikroprozessoren repräsentativ, die von Intel Corporation of Santa Clara, Kalifornien, erhältlich sind, obwohl auch andere Systeme verwendet werden können (umfassend PCs mit anderen Mikroprozessoren, technischen Arbeitsstationen, Set-top-Boxen und dgl.). In einer Ausführungsform kann das beispielhafte System 100 eine Version des WINDOWSTM-Betriebssystems ausführen, das von Microsoft Corporation of Redmond, Washington, erhältlich ist, obwohl auch andere Betriebssysteme (beispielsweise UNIX und LINUX), eingebettete Software und/oder grafische Benutzeroberflächen verwendet werden können. So sind Ausführungsformen der vorliegenden Erfindung nicht auf irgendeine spezifische Kombination von Hardware-Schaltungen und Software beschränkt.
  • Ausführungsformen sind nicht auf Computersysteme beschränkt. Alternative Ausführungsformen der vorliegenden Erfindung können in anderen Vorrichtungen verwendet werden, wie Hand-Vorrichtungen und eingebetteten Anwendungen. Einige Beispiele von Hand-Vorrichtungen umfassen Zellulartelefone, Internet-Protokollvorrichtungen, Digitalkameras, Personal Digital Assistants (PDAs) und Hand-PCs. Eingebettete Anwendungen können eine Mikrosteuereinheit, einen digitalen Signalprozessor (DSP), System-on-a-Chip, Netzcomputer (NetPC), Set-top-Boxen, Netzknoten, Wide Area Network-(WAN-)Schalter oder ein beliebiges anderes System umfassen, das eine oder mehrere Instruktionen gemäß wenigstens einer Ausführungsform vornehmen kann.
  • Eine Ausführungsform kann im Kontext eines Einzelprozessor-Desktop- oder -Serversystems beschrieben werden, aber alternative Ausführungsformen können in einem Mehrprozessorsystem eingeschlossen sein. Das System 100 ist ein Beispiel einer „Knoten”-Systemarchitektur. Das Computersystem 100 umfasst einen Prozessor 102, um Datensignale zu verarbeiten. Der Prozessor 102 kann ein Computermikroprozessor mit komplexem Befehlssatz (Complex Instruction Set Computer, CISC), ein Computermikroprozessor mit reduziertem Befehlssatz (RISC), ein Very Long Instruction Word-(VLIW-)Mikroprozessor, ein Prozessor, der eine Kombination von Instruktionssätzen implementiert, oder eine beliebige andere Prozessorvorrichtung sein, wie beispielsweise ein digitaler Signalprozessor. Der Prozessor 102 ist mit einem Prozessorbus 110 gekoppelt, der Datensignale zwischen dem Prozessor 102 und anderen Komponenten im System 100 senden kann. Die Elemente des Systems 100 nehmen ihre herkömmlichen Funktionen vor, die Fachleuten wohlbekannt sind.
  • In einer Ausführungsform umfasst der Prozessor 102 einen Level 1-(L1-) internen Cache-Speicher 104. In Abhängigkeit von der Architektur kann der Prozessor 102 einen einzelnen internen Cache oder mehrere Level interner Caches aufweisen. Alternativ dazu kann in einer Ausführungsform der Cache-Speicher extern vom Prozessor 102 residieren. Andere Ausführungsformen können auch eine Kombination sowohl interner als auch externer Caches in Abhängigkeit von der bestimmten Implementierung und den Erfordernissen umfassen. Eine Registerdatei 106 kann verschiedene Datentypen in verschiedenen Registern speichern, die ganzzahlige Register, Gleitkommaregister, Statusregister und Instruktionszeigerregister umfassen.
  • Die Ausführungseinheit 108 mit der Logik zur Vornahme der ganzzahligen und Gleitkommaoperationen residiert auch im Prozessor 102. Der Prozessor 102 umfasst auch einen Mikrocode-(Ucode-)ROM, der einen Mikrocode für bestimmte Makroinstruktionen speichert. Für eine Ausführungsform umfasst die Ausführungseinheit 108 Logik, um einen gepackten Instruktionssatz 109 handzuhaben. Durch den Einschluss des gepackten Instruktionssatzes 109 im Instruktionssatz eines Universalprozessors 102, zusammen mit assoziierten Schaltungen, um die Instruktionen auszuführen, können die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung gepackter Daten in einem Universal-Prozessor 102 vorgenommen werden. So können viele Multimedia-Anwendungen durch die Verwendung der vollen Breite eines Datenbusses eines Prozessors zur Vornahme von Operationen an gepackten Daten beschleunigt und effizienter ausgeführt werden. Dadurch kann die Notwendigkeit entfallen, kleinere Einheiten von Daten quer über den Datenbus des Prozessors transferieren zu müssen, um eine oder mehrere Operationen mit jeweils einem Datenelement zu einer Zeit vorzunehmen.
  • Alternative Ausführungsformen einer Ausführungseinheit 108 können auch in Mikrosteuereinheiten, eingebetteten Prozessoren, Grafikvorrichtungen, DSPs und anderen Typen von Logikschaltungen verwendet werden. Das System 100 umfasst einen Speicher 120. Der Speicher 120 kann eine dynamische Speichervorrichtung mit wahlfreiem Zugriff (DRAM), eine statische Speichervorrichtung mit wahlfreiem Zugriff (SRAM), eine Flash-Speichervorrichtung oder eine andere Speichervorrichtung sein. Der Speicher 120 kann Instruktionen und/oder Daten speichern, welche durch Datensignale repräsentiert werden, die vom Prozessor 102 ausgeführt werden können.
  • Ein Systemlogikchip 116 ist mit dem Prozessorbus 110 und dem Speicher 120 gekoppelt. Der Systemlogikchip 116 ist in der veranschaulichten Ausführungsform ein Speicher-Steuereinheitknoten (Memory Controller Hub, MCH). Der Prozessor 102 kann mit dem MCH 116 über einen Prozessorbus 110 kommunizieren. Der MCH 116 liefert einen Speicherweg 118 mit hoher Bandbreite zum Speicher 120 zum Speichern von Instruktionen und Daten und zum Speichern von Grafikbefehlen, Daten und Texturen. Der MCH 116 hat Datensignale zwischen dem Prozessor 102, Speicher 120 und anderen Komponenten im System 100 zu leiten und die Datensignale zwischen dem Prozessorbus 110, dem Speicher 120 und dem System-I/O 122 zu überbrücken. In einigen Ausführungsformen kann der Systemlogikchip 116 einen Grafikport zur Kopplung mit einer Grafiksteuereinheit 112 vorsehen. Der MCH 116 ist mit dem Speicher 120 durch eine Speicherschnittstelle 118 gekoppelt. Die Grafikkarte 112 ist mit dem MCH 116 durch eine beschleunigte Grafikport-(Accelerated Graphics Port-, AGP-)Zwischenverbindung 114 gekoppelt.
  • Das System 100 verwendet einen eigenen Knotenschnittstellenbus 122, um den MCH 116 mit dem I/O-Steuereinheitknoten (ICH) 130 zu verbinden. Der ICH 130 sieht direkte Verbindungen mit einigen I/O-Vorrichtungen über einen lokalen I/O-Bus vor. Der lokale I/O-Bus ist ein Hochgeschwindigkeits-I/O-Bus zum Verbinden von Peripheriegeräten mit dem Speicher 120, Chipsatz und Prozessor 102. Einige Beispiele sind die Audio-Steuereinheit, der Firmware-Knoten (Flash-BIOS) 128, der drahtlose Sender/Empfänger 126, der Datenspeicher 124, die Legacy-I/O-Steuereinheit, die Benutzereingabe-und Tastaturschnittstellen enthält, ein serieller Erweiterungsport, wie Universal Serial Bus (USB), und eine Netzsteuereinheit 134. Die Datenspeichervorrichtung 124 kann ein Festplattenlaufwerk, ein Diskettenlaufwerk, eine CD-ROM-Vorrichtung, eine Flash-Speichervorrichtung oder eine andere Massenspeichervorrichtung umfassen.
  • Für eine weitere Ausführungsform eines Systems kann eine Instruktion gemäß einer Ausführungsform mit einem System-on-a-Chip verwendet werden. Eine Ausführungsform von einem System-on-a-Chip umfasst einen Prozessor und einen Speicher. Der Speicher für ein solches System ist ein Flash-Speicher. Der Flash-Speicher kann auf demselben Chip wie der Prozessor und andere Systemkomponenten angeordnet sein. Zusätzlich können auch andere Logikblöcke, wie eine Speichersteuereinheit oder Grafiksteuereinheit, auf einem System-on-a-Chip angeordnet sein.
  • 1B veranschaulicht ein Datenverarbeitungssystem 140, das die Prinzipien einer Ausführungsform der vorliegenden Erfindung implementiert. Für Fachleute ist es klar, dass die hier beschriebenen Ausführungsformen mit alternativen Verarbeitungssystemen verwendet werden können, ohne vom Umfang der Ausführungsformen der Erfindung abzuweichen.
  • Das Computersystem 140 umfasst einen Verarbeitungskern 159, der wenigstens eine Instruktion gemäß einer Ausführungsform vornehmen kann. Für eine Ausführungsform repräsentiert der Verarbeitungskern 159 eine Verarbeitungseinheit eines beliebigen Architekturtyps, einschließlich, jedoch nicht beschränkt auf einen CISC-, einen RISC- oder einen VLIW-Architekturtyp. Der Verarbeitungskern 159 kann auch zur Herstellung in einer oder mehreren Prozesstechnologien geeignet sein und kann, indem er auf einem maschinenlesbaren Medium ausreichend detailliert repräsentiert wird, geeignet sein, die genannte Herstellung zu vereinfachen.
  • Der Verarbeitungskern 159 umfasst eine Ausführungseinheit 142, einen Satz einer (von) Registerdatei(en) 145 und einen Decoder 144. Der Verarbeitungskern 159 umfasst auch zusätzliche Schaltungen (nicht gezeigt), die für das Verständnis von Ausführungsformen der vorliegenden Erfindung nicht nötig sind. Die Ausführungseinheit 142 wird zur Ausführung von Instruktionen verwendet, die vom Verarbeitungskern 159 empfangen werden. Zusätzlich zur Vornahme typischer Prozessorinstruktionen kann die Ausführungseinheit 142 Instruktionen in einem gepackten Instruktionssatz 143 zur Vornahme von Operationen an gepackten Datenformaten vornehmen. Der gepackte Instruktionssatz 143 umfasst Instruktionen zur Vornahme von Ausführungsformen der Erfindung und andere gepackte Instruktionen. Die Ausführungseinheit 142 ist mit der Registerdatei 145 durch einen internen Bus gekoppelt. Die Registerdatei 145 repräsentiert einen Speicherbereich am Verarbeitungskern 159 zum Speicher von Informationen, die Daten umfassen. Wie vorstehend angegeben, ist es klar, dass der Speicherbereich, der zum Speichern der gepackten Daten verwendet wird, nicht kritisch ist. Die Ausführungseinheit 142 ist mit dem Decoder 144 gekoppelt. Der Decoder 144 wird zur Decodierung von Instruktionen, die vom Verarbeitungskern 159 empfangen werden, in Steuersignale und/oder Mikrocode-Eintrittspunkte verwendet. Ansprechend auf diese Steuersignale und/oder Mikrocode-Eintrittspunkte nimmt die Ausführungseinheit 142 die geeigneten Operationen vor. In einer Ausführungsform wird der Decoder verwendet, um den Operationscode der Instruktion zu interpretieren, der anzeigen wird, welche Operation an den entsprechenden Daten vorgenommen werden soll, die innerhalb der Instruktion angezeigt wird.
  • Der Verarbeitungskern 159 ist mit einem Bus 141 zum Kommunizieren mit verschiedenen anderen Systemvorrichtungen gekoppelt, die umfassen können, jedoch nicht beschränkt sind beispielsweise auf eine synchrone dynamische Speichersteuerung 146 mit wahlfreiem Zugriff (SDRAM), eine statische Speichersteuerung 147 mit wahlfreiem Zugriff (SRAM), eine Burst-Flash-Speicherschnittstelle 148, eine Personal Computer Memory Card International Association (PCMCIA)/Compact Flash-(CF)-Kartensteuerung 149, eine Flüssigkristallanzeige-(LCD-)Steuerung 150, eine Steuereinheit 151 mit direktem Speicherzugriff (DMA) und eine alternative Bus-Master-Schnittstelle 152. In einer Ausführungsform kann das Datenverarbeitungssystem 140 auch eine I/O-Brücke 154 zum Kommunizieren mit verschiedenen I/O-Vorrichtungen über einen I/O-Bus 153 umfassen. Solche I/O-Vorrichtungen können umfassen, sind jedoch nicht beschränkt beispielsweise auf einen Universal Asynchronous Receiver/Transmitter (UART) 155, einen Universal Serial Bus (USB) 156, einen Bluetooth-Drahtlos-UART 157 und eine I/O-Erweiterungsschnittstelle 158.
  • Eine Ausführungsform des Datenverarbeitungssystems 140 liefert mobile, Netz- und/oder drahtlose Kommunikationen und einen Verarbeitungskern 159, der SIMD-Operationen vornehmen kann, die eine Textfolgen-Vergleichsoperation umfassen. Der Verarbeitungskern 159 kann mit verschiedenen Audio-, Video-, Abbildungs- und Kommunikationsalgorithmen programmiert werden, die diskrete Transformationen, wie eine Walsh-Hadamard-Transformation, eine schnelle Fourier-Transformation (FFT), eine diskrete Kosinustransformation (DCT) und ihre jeweiligen inversen Transformationen; Kompressions/Dekompressionstechniken, wie Farbraumtransformation, Videocodierungs-Bewegungsschätzung oder Videodecodierungs-Bewegungsschätzung; und Modulations/Demodulations-(MODEM-)Funktionen, wie impulscodierte Modulation (PCM), umfassen.
  • 1C veranschaulicht noch weitere alternative Ausführungsformen eines Datenverarbeitungssystems, das SIMD-Textfolgen-Vergleichsoperationen vornehmen kann. Gemäß einer alternativen Ausführungsform kann das Datenverarbeitungssystem 160 einen Hauptprozessor 166, einen SIMD-Coprozessor 161, einen Cache-Speicher 167 und ein Eingabe/Ausgabesystem 168 umfassen. Das Eingabe/Ausgabesystem 168 kann gegebenenfalls mit einer drahtlosen Schnittstelle 169 gekoppelt sein. Der SIMD-Coprozessor 161 kann Operationen vornehmen, die Instruktionen gemäß einer Ausführungsform umfassen. Ein Verarbeitungskern 170 kann zur Herstellung in einer oder mehreren Prozesstechnologien geeignet sein, und kann, indem er auf einem maschinenlesbaren Medium ausreichend detailliert repräsentiert wird, geeignet sein, die Herstellung des gesamten oder eines Teils des Datenverarbeitungssystems 160 zu vereinfachen, das den Verarbeitungskern 170 umfasst.
  • Für eine Ausführungsform umfasst der SIMD-Coprozessor 161 eine Ausführungseinheit 162 und einen Satz einer (von) Registerdatei(en) 164. Eine Ausführungsform des Hauptprozessors 165 umfasst einen Decoder 165, um Instruktionen des Instruktionssatzes 163, die Instruktionen gemäß einer Ausführungsform umfassen, zur Ausführung durch die Ausführungseinheit 162 zu erkennen. Für alternative Ausführungsformen umfasst der SIMD-Coprozessor 161 auch wenigstens einen Teil des Decoders 165B, um Instruktionen des Instruktionssatzes 163 zu decodieren. Der Verarbeitungskern 170 umfasst auch zusätzliche Schaltungen (nicht gezeigt), die für das Verständnis von Ausführungsformen der vorliegenden Erfindung nicht nötig sind.
  • Im Betrieb führt der Hauptprozessor 166 einen Strom von Datenverarbeitungsinstruktionen aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern, welche Interaktionen mit dem Cache-Speicher 167 und dem Eingabe/Ausgabe-System 168 umfassen. Innerhalb des Stroms von Datenverarbeitungsinstruktionen sind SIMD-Coprozessorinstruktionen eingebettet. Der Decoder 165 des Hauptprozessors 166 erkennt, dass diese SIMD-Coprozessorinstruktionen einen Typ aufweisen, der von einem angeschlossenen SIMD-Coprozessor 161 ausgeführt werden sollte. Demgemäß gibt der Hauptprozessor 166 diese SIMD-Coprozessorinstruktionen (oder Steuersignale, die SIMD-Coprozessorinstruktionen repräsentieren) auf dem Coprozessorbus 166 aus, von wo sie durch beliebige angeschlossene SIMD-Coprozessoren empfangen werden. In diesem Fall wird der SIMD-Coprozessor 161 beliebige empfangene SIMD-Coprozessorinstruktionen akzeptieren und ausführen, die für ihn bestimmt sind.
  • Daten können über eine drahtlose Schnittstelle 169 zur Verarbeitung durch die SIMD-Coprozessorinstruktionen empfangen werden. Für ein Beispiel kann eine Sprachkommunikation in der Form eines Digitalsignals empfangen werden, das von den SIMD-Coprozessorinstruktionen verarbeitet werden kann, um digitale Audio-Abtastwerte zu regenerieren, die für die Sprachkommunikationen repräsentativ sind. Für ein anderes Beispiel kann komprimiertes Audio und/oder Video in der Form eines digitalen Bitstroms empfangen werden, der von den SIMD-Coprozessorinstruktionen verarbeitet werden kann, um digitale Audio-Abtastwerte und/oder Bewegungsvideorahmen zu regenerieren. Für eine Ausführungsform des Verarbeitungskerns 170 sind der Hauptprozessor 166 und ein SIMD-Coprozessor 161 in einen einzelnen Verarbeitungskern 170 integriert, der eine Ausführungseinheit 162, einen Satz einer (von) Registerdatei(en) 164 und einen Decoder 165 umfasst, um Instruktionen des Instruktionssatzes 163 zu erkennen, die Instruktionen gemäß einer Ausführungsform umfassen.
  • 2 ist ein Blockbild der Mikroarchitektur für einen Prozessor 200, der Logikschaltungen umfasst, um Instruktionen gemäß einer Ausführungsform der vorliegenden Erfindung vorzunehmen. In einigen Ausführungsformen kann eine Instruktion gemäß einer Ausführungsform implementiert werden, um an Datenelementen mit Größen eines Bytes, Wortes, Doppelwortes, Quadwortes, etc., zu operieren, sowie Datentypen, wie ganzzahligen Einzel- und Doppelpräzisions- und Gleitkommadatentypen. In einer Ausführungsform ist das In-Order-Front-End 201 der Teil des Prozessors 200, der Instruktion abruft, die auszuführen sind, und diese darauf vorbereitet, später in der Prozess-Pipeline verwendet zu werden.
  • Das Front-End 201 kann einige Einheiten umfassen. In einer Ausführungsform ruft der Vorabrufer 226 Instruktionen aus dem Speicher ab und führt sie einem Instruktionsdecoder 228 zu, der sie seinerseits decodiert oder interpretiert. Beispielsweise decodiert in einer Ausführungsform der Decoder eine empfangene Instruktion in eine oder mehrere Operationen, welche „Mikroinstruktionen” oder „Mikrooperationen” genannt werden (auch als Mikro-Ops oder Uops bezeichnet), und welche die Maschine ausführen kann. In anderen Ausführungsformen analysiert der Decoder die Instruktion syntaktisch in einen Operationscode und entsprechende Daten und Steuerfelder, die von der Mikroarchitektur verwendet werden, um Operationen gemäß einer Ausführungsform vorzunehmen. In einer Ausführungsform nimmt der Trace-Cache 230 decodierte Uops und assembliert sie in programmgeordnete Sequenzen oder Spuren in der Uop-Warteschlange 234 zur Ausführung. Wenn der Trace-Cache 230 auf eine komplexe Instruktion trifft, liefert der Mikrocode-ROM 232 die Uops, die zur Vollendung der Operation notwendig sind.
  • Einige Instruktionen werden in eine einzelne Mikro-Op konvertiert, wohingegen andere einige Mikro-Ops benötigen, um die volle Operation zu vollenden. Falls in einer Ausführungsform mehr als vier Mikro-Ops notwendig sind, um eine Instruktion zu vollenden, greift der Decoder 228 auf den Mikrocode-ROM 232 zu, um die Instruktion auszuführen. Für eine Ausführungsform kann eine Instruktion in eine geringe Anzahl von Mikro-Ops zur Verarbeitung am Instruktionsdecoder 228 decodiert werden. In einer anderen Ausführungsform kann eine Instruktion innerhalb des Mikrocode-ROM 232 gespeichert werden, sollte eine Anzahl von Mikro-Ops notwendig sein, um die Operation zu vollenden. Der Trace-Cache 230 bezieht sich auf eine Entrittspunkt-programmierbare Logikanordnung (PLA), um einen korrekten Mikroinstruktionszeiger zum Lesen der Mikrocodesequenzen zu bestimmen, um eine oder mehrere Instruktionen gemäß einer Ausführungsform aus dem Mikrocode-ROM 232 zu vollenden. Nachdem der Mikrocode-ROM 232 die Sequenzierung von Mikro-Ops für eine Instruktion beendet hat, nimmt das Front-End 201 der Maschine den Abruf von Mikro-Ops aus dem Trace-Cache 230 wieder auf.
  • Die Out-of-Order-Ausführungsmaschine 203 ist, wo die Instruktionen zur Ausführung vorbereitet werden. Die Out-of-Order-Ausführungslogik hat eine Reihe von Puffern, um den Fluss von Instruktionen zur Optimierung der Leistung zu glätten und umzuordnen, während sie in der Pipeline abgearbeitet werden und zur Ausführung geplant werden. Die Zuordnungslogik ordnet die Maschinenpuffer und Ressourcen zu, die jede Uop benötigt, um ausgeführt zu werden. Die Registerumbenennungslogik benennt Logikregister auf Einträge in einer Registerdatei um. Der Zuordner ordnet auch einen Eintrag für jede Uop in einer der beiden Uop-Warteschlangen zu, eine für Speicheroperationen und eine für Nicht-Speicheroperationen, vor den Instruktions-Schedulern: Speicher-Scheduler, schneller Scheduler 202, langsamer/allgemeiner Gleitkomma-Scheduler 204 und einfacher Gleitkomma-Scheduler 206. Die Uop-Scheduler 202, 204, 206 bestimmen, wann eine Uop bereit zur Ausführung ist, auf der Basis der Bereitschaft ihrer abhängigen Eingaberegister-Operandenquellen und der Verfügbarkeit der Ausführungsressourcen, die Uops benötigen, um ihre Operation zu vollenden. Der schnelle Scheduler 202 einer Ausführungsform kann bei jeder Hälfte des Haupttaktzyklus planen, wohingen die anderen Scheduler nur einmal pro Hauptprozessor-Taktzyklus planen können. Die Scheduler entscheiden für die Abwicklungsports, um Upos zur Ausführung zu planen.
  • Registerdateien 208, 210 sitzen zwischen den Schedulern 202, 204, 206 und den Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224 im Ausführungsblock 211. Es gibt eine getrennte Registerdatei 208, 210 für ganzzahlige bzw. Gleitkommaoperationen. Jede Registerdatei 208, 210 einer Ausführungsform umfasst auch ein Umgehungsnetz, das gerade vollendete Ergebnisse, die noch nicht die die Registerdatei geschrieben wurden, umgehen oder zu neuen abhängigen Uops weiterleiten kann. Die ganzzahlige Registerdatei 208 und die Gleitkommaregisterdatei 210 können auch Daten mit der anderen kommunizieren. Für eine Ausführungsform ist die ganzzahlige Registerdatei 208 in zwei getrennte Registerdateien getrennt, eine Registerdatei für die 32 Datenbits niedriger Ordnung und eine zweite Registerdatei für die 32 Datenbits hoher Ordnung. Die Gleitkommaregisterdatei 210 einer Ausführungsform hat 128 Bit breite Einträge, da die Gleitkommainstruktionen typischerweise Operanden mit einer Breite von 64 bis 128 Bits aufweisen.
  • Der Ausführungsblock 211 enthält die Ausführungseinheiten 212, 214, 216, 218, 220, 222, 224, wo die Instruktionen tatsächlich ausgeführt werden. Diese Sektion umfasst die Registerdateien 208, 210, welche die ganzzahligen und Gleitkomma-Datenoperandenwerte speichern, die die Mikroinstruktionen ausführen müssen. Der Prozessor 200 einer Ausführungsform besteht aus einer Anzahl von Ausführungseinheiten: der Adressengenerierungseinheit (AGU) 212, AGU 214, schnellen ALU 216, schnellen ALU 218, langsamen ALU 220, Gleitkomma-ALU 222, Gleitkommabewegungseinheit 224. Für eine Ausführungsform führen die Gleitkommaausführungsblöcke 222, 224 Gleitkomma-, MMX-, SIMD- und SSE- oder andere Operationen aus. Die Gleitkomma-ALU 222 einer Ausführungsform umfasst einen 64 Bit mal 64 Bit Gleitkommateiler, um Teilungs-, Quadratwurzel- und Rest-Mikrooperationen auszuführen. Für Ausführungsformen der vorliegenden Erfindung können Instruktionen, die einen Gleitkommawert involvieren, mit der Gleitkomma-Hardware handgehabt werden. In einer Ausführungsform gehen die ALU-Operationen zur den Hochgeschwindigkeits-ALU-Ausführungseinheiten 216, 218. Die schnellen ALUs 216, 218 einer Ausführungsform können schnelle Operationen mit einer effektiven Latenz eines halben Taktzyklus ausführen. Für eine Ausführungsform gehen die komplexesten ganzzahligen Operationen zur langsamen ALU 220, da die langsame ALU 220 ganzzahlige Ausführungs-Hardware für Operationen eines langen Latenztyps umfasst, wie einen Vervielfacher, Verschiebungen, eine Steuerzeichenlogik und Sprungverarbeitung. Memory-Lade/Speicheroperationen werden von den AGUs 212, 214 ausgeführt. Für eine Ausführungsform werden die ganzzahligen ALUs 216, 218, 220 im Kontext der Vornahme ganzzahliger Operationen an 64 Bit Datenoperanden beschrieben. In alternativen Ausführungsformen können die ALUs 216, 218, 220 implementiert werden, um verschiedenste Datenbits zu unterstützen, die 16, 32, 128, 256, etc., umfassen. Ähnlich können die Gleitkommaeinheiten 222, 224 implementiert werden, um einen Bereich von Operanden mit Bits unterschiedlicher Breite zu unterstützen. Für eine Ausführungsform können die Gleitkommaeinheiten 222, 224 an 128 Bit breiten gepackten Datenoperanden in Verbindung mit SIMD- und Multimedia-Instruktionen operieren.
  • In einer Ausführungsform können die Uops-Scheduler 202, 204, 206 abhängige Operationen abfertigen, bevor das übergeordnete Laden die Ausführung beendet hat. Da Uops spekulativ geplant und im Prozessor 200 ausgeführt werden, umfasst der Prozessor 200 auch Logik zur Behandlung von Speicherfehlschlägen. Falls ein Datenladen im Daten-Cache fehlschlägt, kann es abhängige Operationen im Flug in der Pipeline geben, die den Scheduler mit temporär inkorrekten Daten verlassen haben. Ein Wiederholungsmechanismus verfolgt Instruktionen, die inkorrekte Daten verwenden, und führt diese erneut aus. Nur die abhängigen Operationen müssen wiederholt werden, und den unabhängigen wird gestattet zu vollenden. Die Scheduler und der Wiederholungsmechanismus einer Ausführungsform eines Prozessors sind auch ausgebildet, Instruktionssequenzen für Textfolgen-Vergleichsoperationen abzufangen.
  • Der Ausdruck „Register” kann sich auf die On-board-Prozessorspeicherorte beziehen, die als Teil von Instruktionen zur Identifikation von Operanden verwendet werden. Mit anderen Worten können Register jene sein, die von der Außenseite des Prozessors (aus der Perspektive eines Programmierers) verwendbar sind. Die Register einer Ausführungsform sollten jedoch nicht in ihrer Bedeutung auf einen bestimmten Schaltungstyp beschränkt werden. Stattdessen kann ein Register einer Ausführungsform Daten speichern und liefern, und die hier beschriebenen Funktionen vornehmen. Die hier beschriebenen Register können durch Schaltungen innerhalb eines Prozessors unter Verwendung einer beliebigen Anzahl verschiedener Techniken implementiert werden, wie dedizierte physische Register, dynamisch zugeordnete physische Register unter Verwendung einer Registerumbenennung, Kombinationen dedizierter und dynamisch zugeordneter physischer Register, etc. In einer Ausführungsform speichern ganzzahlige Register 32 Bit-ganzzahlige Daten. Eine Registerdatei einer Ausführungsform enthält auch 8 Multimedia-SIMD-Register für gepackte Daten. Für die nachstehenden Diskussionen werden die Register als Datenregister verstanden, die ausgebildet sind, gepackte Daten zu halten, wie 64 Bit breite MMXTM-Register (die in einigen Fällen auch als „mm”-Register bezeichnet werden) in Mikroprozessoren, die mit der MMX-Technologie von Intel Corporation of Santa Clara, Kalifornien, ausgestattet sind. Diese MMX-Register, die sowohl in ganzzahliger als auch in Gleitkomma-Form verfügbar sind, können mit gepackten Datenelementen operieren, die SIMD- und SSE-Instruktionen begleiten. Ähnlich können auch 128 Bit breite XMM-Register in Bezug auf die SSE2-, SSE3- und SSE4- oder eine höhere Technologie (die generisch als „SSEx” bezeichnet wird) verwendet werden, um solche gepackten Datenoperanden zu halten. In einer Ausführungsform müssen die Register beim Speichern gepackter Daten und ganzzahliger Daten nicht zwischen den beiden Datentypen differenzieren. In einer Ausführungsform sind ganze Zahlen und Gleitkomma entweder in derselben Registerdatei oder verschiedenen Registerdateien enthalten. Ferner können in einer Ausführungsform Gleitkomma- und ganzzahlige Daten in verschiedenen Registern oder denselben Registern gespeichert werden.
  • Ausführungsformen der Erfindung sehen ein Verfahren und eine Vorrichtung vor, um die Planung von Memory-Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung in einer Verarbeitungseinheit oder einem Prozessor zu unterstützen. In einer Ausführungsform der Erfindung weist die Verarbeitungseinheit einen Speicherpuffer auf, der es ermöglicht, dass Speicherinstruktionen in einer anderen Ordnung als der Quell-Binärprogrammordnung ausgegeben werden, aber weiterhin in die Quell-Binärprogrammordnung rückgeordnet werden. Dies vereinfacht einen kleinen atomaren Bereich, der auf jede Iteration eines Quell-Binärcodes mappt, und diese atomaren Bereiche werden in einen Pipeline-Bereich miteinander verbunden. In einer Ausführungsform der Erfindung führt die Verarbeitungseinheit eine Festlegungsinstruktion(en) einmal in jeder Schleifeniteration aus, anstatt die Festlegungsinstruktion(en) einmal nach dem Schleifenausstieg auszuführen.
  • In einer Ausführungsform der Erfindung weist der Prozessor Logik auf, um eine binäre Übersetzung eines Codes mit einer Quell-Binärprogrammordnung vorzunehmen, wobei eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in einer Ordnung auszugeben sind, die von der Quell-Binärprogrammordnung der einen oder mehreren Speicherinstruktionen des Codes verschieden ist, und wobei die eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in der Quell-Binärprogrammordnung rückzuordnen sind.
  • In einer Ausführungsform der Erfindung umfasst der Prozessor, ist jedoch nicht beschränkt auf eine modifizierte Ziel-ISA, um die Anzeige der Quell-Binärprogramm-Speicherordnung zu erleichtern. In einer Ausführungsform der Erfindung weist der Prozessor einen Gategesteuerten Puffer mit wahlfreiem Zugriff auf, um die modifizierte Ziel-ISA zu implementieren. In einer weiteren Ausführungsform der Erfindung führt der Prozessor einen Algorithmus aus, der einen übersetzten Code generiert, welcher die Speicherordnung im ursprünglichen Code aufrechterhält, der die modifizierte Ziel-ISA verwendet.
  • 3A veranschaulicht eine modifizierte Ziel-ISA gemäß einer Ausführungsform der Erfindung. In einer Ausführungsform der Erfindung umfasst die modifizierte Ziel-ISA, ist jedoch beschränkt auf drei ISA-Primitiva.
  • Das erste ISA-Primitivum ist die Speicherinstruktion 302. Die Speicherinstruktion 302 hat drei Felder, die umfassen, aber nicht beschränkt sind auf die Adresse eines Speicherorts, den im Speicherort zu speichernden Wert und eine Speicherversetzung (offset_s). In einer Ausführungsform der Erfindung zeigt für jede Speicherinstruktion innerhalb eines atomaren Bereichs die offset_s der Speicherinstruktion ihre Quellprogrammordnung an. Wenn eine Speicherinstruktion ausgegeben wird, wird der Wert offset_s in einer Ausführungsform der Erfindung mit der Speicherinstruktion assoziiert. In einer Ausführungsform der Erfindung wird eine Speicherinstruktion für andere Verarbeitungseinheiten oder -kerne nicht verfügbar gemacht oder extern sichtbar gemacht, bis alle anderen Speicherinstruktionen mit einem kleineren Wert offset_s (einschließlich Speicherinstruktionen, die nicht ausgegeben wurden) extern sichtbar gemacht werden.
  • Das zweite ISA-Primitivum ist die Ladeinstruktion 304. Die Ladeinstruktion 304 hat drei Felder, die umfassen, jedoch nicht beschränkt sind auf ein Zielregister (dest), die Adresse eines Speicherorts, wo die Daten an diesem Speicherort in das Zielregister zu laden sind, und eine Ladeversetzung (offset_l). In einer Ausführungsform der Erfindung wird es jeder Ladeinstruktion nur gestattet, Speicherinstruktionen zu sehen, die einen Wert offset_s kleiner oder gleich dem Wert offset_l aufweisen.
  • In einer Ausführungsform der Erfindung erzeugen die Speicherinstruktionen mit einem größeren Wert offset_s keinen Wert, der von dem Ladeinstruktionswert offset_l abhängig ist. Falls es kein Aliasing in den nicht ausgegebenen Speicherinstruktionen gibt, die extern nicht sichtbar sind, erhält die Ladeinstruktion in einer Ausführungsform der Erfindung ihren Wert vom externen Speichersystem, bevor alle anstehenden Speicherinstruktionen extern sichtbar sind.
  • Das dritte ISA-Primitivum ist die Festlegungsinstruktion 306. Die Festlegungsinstruktion 306 weist in einer Ausführungsform der Erfindung ein Zählwertfeld auf. Die Festlegungsinstruktion steuert, welche Speicherinstruktionen extern für andere Verarbeitungskerne sichtbar sind. Beispielsweise werden in einer Ausführungsform der Erfindung, wenn eine Festlegungsinstruktion ausgeführt wird, alle der ausgegebenen Speicherinstruktionen mit einem Wert offset_s kleiner oder gleich dem Zählwert extern in der Ordnung sichtbar gemacht, die vom Wert offset_s spezifiziert wird. Die anderen Speicherinstruktionen mit einem größeren Wert offset_s bleiben extern unsichtbar. Nach der Ausführung der Festlegungsinstruktion wird in einer Ausführungsform der Erfindung die assoziierte interne Repräsentation des Werts offset_s für jede vorher ausgeführte, aber weiterhin nicht-sichtbare Speicherinstruktion um den Zählwert subtrahiert.
  • In einer Ausführungsform der Erfindung ermöglicht die modifizierte Ziel-ISA, die in 3A veranschaulicht ist, dass Speicherinstruktionen quer über verschiedene atomare Bereiche umgeordnet werden. In einer weiteren Ausführungsform der Erfindung ermöglicht die modifizierte Ziel-ISA, die in 3A veranschaulicht ist, dass eine Instruktion quer über die Festlegungsinstruktionen geplant wird. 3B und 3C veranschaulichen, wie eine Speicherinstruktion hinter eine weitere Speicherinstruktion unter Verwendung der modifizierten Ziel-ISA bewegt wird.
  • 3B veranschaulicht ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung. Das Beispiel des Programmcodes hat vier Instruktionen (INSTR), Instruktion 1 310, Instruktion 2 312, Instruktion 3 314 und Instruktion 4 316. Die Sequenz der Instruktionen 1 310, 2 312 und 4 316 wird in einer Ausführungsform der Erfindung als Quell- oder Original-Binärprogrammordnung bezeichnet. In Bezug auf die Instruktion 4 316 wird diese nach der Festlegungsinstruktion ausgeführt, und der Wert offset_s der Speicherinstruktion startet bei 1, wenn der Festlegungspuffer zurückgesetzt wird.
  • 3C veranschaulicht ein umgeordnetes Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung. 3C zeigt, wie das Beispiel des Programmcodes in 3B umgeplant wird, während die Speicherreihenfolge des Quell- oder Originalprogrammcodes beibehalten wird. Die Speicherinstruktionen 1 324 und 2 322 werden überlagert, ohne die Speicherordnung im umgeordneten Beispiel des Programmcodes zu durchbrechen. Die Speicherinstruktion 4 320 wird vor die Festlegungsinstruktion 3 326 im umgeordneten Beispiel des Programmcodes bewegt. Der binäre Übersetzer hat den Wert offset_s der Speicherinstruktion 4 320 von 1 auf 3 geändert (um den Zählwert der Festlegungsinstruktion 3 326 erhöht), wodurch gestattet wird, dass sie zu einem vorherigen atomaren Bereich vor der Festlegungsinstruktion 3 326 bewegt wird. Da der Zählwert der Festlegungsinstruktion 3 326 als 2 gesetzt ist, wird die Speicherinstruktion 4 320 nicht ausgeführt, wenn die Festlegungsinstruktion 3 326 ausgeführt wird. In einer Ausführungsform der Erfindung wird, nachdem die Festlegungsinstruktion 3 326 ausgeführt wurde, die assoziierte interne Repräsentation des Werts offset_s der der Speicherinstruktion 4 320 von 3 auf 1 reduziert (Subtraktion der internen Repräsentation offset_s um den Zählwert). So wird der interne Wert offset_s für die Instruktion 4 gleich als wäre die Instruktion 4 nicht über die Festlegungsinstruktion 3 bewegt worden.
  • In einer Ausführungsform der Erfindung ermöglicht die modifizierte Ziel-ISA, die in 3A veranschaulicht ist, dass eine Ladeinstruktion hinter eine Speicherinstruktion bewegt oder umgeordnet wird. In einer weiteren Ausführungsform der Erfindung ermöglicht die modifizierte Ziel-ISA, die in 3A veranschaulicht ist, dass eine Speicherinstruktion hinter eine Ladeinstruktion bewegt oder umgeordnet wird. 4A und 4B veranschaulichen, wie eine Ladeinstruktion hinter eine Speicherinstruktion bewegt wird, und wie eine Speicherinstruktion hinter eine Ladeinstruktion bewegt wird.
  • 4A veranschaulicht ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung. Das Beispiel des Programmcodes hat vier Instruktionen (INSTR), Instruktion 1 402, Instruktion 2 404, Instruktion 3 406 und Instruktion 4 408. Die Instruktionen Instruktion 1 402, 2 404 und 4 408 sind in ihrer Quell- oder Original-Binärprogrammordnung. In Bezug auf die Instruktion 4 408 wird diese nach der Festlegungsinstruktion ausgeführt, und der Wert offset_s der Speicherinstruktion 4 408 startet bei 1, wenn der Festlegungspuffer zurückgesetzt wird.
  • 4B veranschaulicht ein umgeordnetes Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung. 4B zeigt ein Beispiel verschiedener Typen einer Umordnung von Instruktionen. Der erste Umordnungstyp ist die Umordnung einer Ladeinstruktion hinter eine Speicherinstruktion, d. h. Bewegen der Speicherinstruktion 2 412 vor die Ladeinstruktion 1 414 und Bewegen der Speicherinstruktion 4 410 vor die Ladeinstruktion 1 414. Der zweite Umordnungstyp ist die Umordnung einer Speicherinstruktion hinter eine weitere Speicherinstruktion, d. h. Bewegen der Speicherinstruktion 2 412 hinter die Speicherinstruktion 4 410. Der dritte Umordnungstyp ist die Umordnung einer Festlegungsinstruktion hinter eine Speicherinstruktion, d. h. Bewegen der Festlegungsinstruktion 3 416 hinter die Speicherinstruktion 4 410.
  • Obwohl im umgeordneten Beispiel des Programmcodes in 4B die Speicherinstruktion 2 412 vor der Ladeinstruktion 1 414 geplant ist, ist sie für das Speichersystem nicht sichtbar, bevor die Festlegungsinstruktion 3 416 ausgeführt wird. Die Speicherinstruktion 4 410 ist bis zur nächsten Festlegungsinstruktion nicht sichtbar, die nicht in diesem Codestück ist. Die modifizierte Ziel-ISA ermöglicht in einer Ausführungsform der Erfindung, dass die Last- und Speicherinstruktionen umgeordnet werden, ohne die Speicherordnung der Quell-Binärprogrammordnung zu beeinträchtigen.
  • In einer Ausführungsform der Erfindung ermöglicht die modifizierte Ziel-ISA, die in 3A veranschaulicht ist, dass eine Ladeinstruktion hinter eine weitere Ladeinstruktion bewegt oder umgeordnet wird, indem spekulative Ladeinstruktionen verwendet werden. Wenn eine Ladeinstruktion vor eine weitere Ladeinstruktion umgeordnet wird, wird beispielsweise in einer Ausführungsform der Erfindung das Laden auf eine spekulative Ladeinstruktion geändert und der Speicher wird gesnoopt, um zu bestimmen, ob die Ladeadresse überschrieben wurde.
  • 5A veranschaulicht ein Beispiel eines Programmcodes gemäß einer Ausführungsform der Erfindung. Das Beispiel des Programmcodes hat zwei Ladeinstruktionen 1 502 und 2 504.
  • 5B veranschaulicht ein umgeordnetes Beispiel des Programmcodes gemäß einer Ausführungsform der Erfindung. 5B zeigt, dass die beiden Ladeinstruktionen 1 502 und 2 504 durch zwei spekulative Ladeinstruktionen 1 512 bzw. 2 510 ersetzt wurden. Die spekulative Ladeinstruktion 2 510 wird vor die spekulative Ladeinstruktionen 1 512 umgeordnet. Die spekulative Prüfinstruktion 3 514 wird hinzugefügt, um zu prüfen, ob die Inhalte der Ladeadresse überschrieben oder geändert wurden. Falls beispielsweise irgendein Schreiben an die Adresse 2 zwischen den Instruktionen 2 510 und 3 514 auftritt, geht der Steuerfluss zu label 1, um eine Wiederherstellung vorzunehmen, um zu verhindern, dass die spekulative Ladeinstruktion die alten Inhalte sieht.
  • 6 veranschaulicht einen Gate-gesteuerten Speicherpuffer 602 mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung. In einer Ausführungsform der Erfindung wird der Gate-gesteuerte Speicherpuffer 602 mit wahlfreiem Zugriff verwendet, um die Ziel-ISA-Modifikation zu implementieren.
  • Der Gate-gesteuerte Speicherpuffer 602 mit wahlfreiem Zugriff ist ein Speicherpuffer, er arbeitet jedoch in einer Ausführungsform der Erfindung nicht in einer First-in-First-out-(FIFO-)Weise. Stattdessen ermöglicht er in einer Ausführungsform der Erfindung, dass Speicheranforderungen in den Speicherpuffer in der Weise eines wahlfreien Zugriffs eintreten und den Speicherpuffer in sequentieller Weise verlassen.
  • Der Gate-gesteuerte Speicherpuffer 602 mit wahlfreiem Zugriff hat zwei Zeiger, die auf die Speicheranforderungen im Speicherpuffer zeigen. Der Festlegungszeiger 604 steuert, welche Speicheranforderungen extern sichtbar sind. In einer Ausführungsform der Erfindung werden nur Speicheranforderungen rechts vom Festlegungszeiger extern sichtbar gemacht. Der Pending-Zeiger 606 zeigt auf die Speicheranforderungen, die zuerst festzulegen sind. Der Gate-gesteuerte Speicherpuffer 602 mit wahlfreiem Zugriff sendet Speicheranforderungen zwischen dem Pending-Zeiger 606 zum Festlegungszeiger 604 unter Verwendung einer rechts-nach-links-Ordnung in das Speichersystem. Alle der Speicheranforderungen links vom Festlegungszeiger 604 werden nicht zugelassen, extern sichtbar zu sein.
  • Unter Verwendung des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff wird eine Speicherinstruktion mit einem Wert offset_s als Speicheranforderung links vom Festlegungszeiger 604 eingefügt. Der Wert offset_s der Speicherinstruktion bestimmt, wo die Speicheranforderung einzufügen ist. In Bezug auf eine Speicherinstruktion mit einem Wert offset_s von 1 wird diese beispielsweise links neben dem Festlegungszeiger 604 eingefügt.
  • Wenn eine Festlegungsinstruktion ausgegeben wird, wird der Festlegungszeiger 604 um den Zählwert nach links bewegt. Dies ermöglicht, dass ein Zählwert von Speicheranforderungen extern sichtbar gemacht wird. In einer Ausführungsform der Erfindung räumt oder sendet eine Speicherräumlogik oder -Hardware Speicheranforderungen, die vom Pending-Zeiger 606 angezeigt wurden, zum Speichersystem, um diese Speicheranforderungen extern wirklich sichtbar zu machen. Jede Räumung bewegt den Pending-Zeiger 606 um 1 nach links, bis der Pending-Zeiger 606 auf den Festlegungszeiger 604 trifft.
  • In einer Ausführungsform der Erfindung ist der Pending-Zeiger 606 von der Ziel-ISA nicht sichtbar. In einer weiteren Ausführungsform der Erfindung ist der Pending-Zeiger 606 von der Ziel-ISA nicht steuerbar. Die Speicheranforderungen zwischen dem Festlegungszeiger 604 und dem Pending-Zeiger 606 können zum Speicher in einem beliebigen Zyklus geräumt werden. In einer Ausführungsform der Erfindung kann eine Speicheranforderung rechts vom Festlegungszeiger 604 nicht zurückgenommen oder nach links vom Festlegungszeiger 604 bewegt werden.
  • 7A veranschaulicht einen Pseudocode der Ziel-ISA gemäß einer Ausführungsform der Erfindung. Der Pseudocode beschreibt die Ziel-ISA in einer Ausführungsform der Erfindung. Alle Zeigerberechnungen basieren auf der Puffergröße des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff und werden an der Puffergrenze des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff überlagert.
  • Der Pseudocode umfasst, ist jedoch nicht beschränkt auf das Speicherinstruktionsprimitivum, das Festlegungsinstruktionsprimitivum, das Ladeinstruktionsprimitivum, das Rücksetzprimitivum, das flush-to-memory-Primitivum für Codes mit schwacher Atomizität und das flush-to-memory-Primitivum für Codes mit starker Atomizität. Gewöhnliche Fachleute auf dem relevanten Gebiet werden leicht die Arbeitsweisen des Pseudocodes in 7A erkennen und die Arbeitsweisen werden hier nicht beschrieben.
  • Der Gate-gesteuerte Speicherpuffer 602 mit wahlfreiem Zugriff und der in 7A beschriebene Pseudocode ermöglichen, dass Speicherinstruktion Out-of-order ausgeführt werden, aber in die Originalprogrammordnung rückgeordnet werden.
  • 7B veranschaulicht einen Algorithmus, um einen Code zu generieren, der die Speicherinstruktionsordnung im übersetzten Code unter Verwendung der Ziel-ISA beibehält, gemäß einer Ausführungsform der Erfindung. Der Algorithmus umfasst zwei Schritte. Der erste Schritt generiert eine neue Ziel-ISA gemäß dem Quellbinärcode und der zweite Schritt stellt die neuen ISA-Instruktionen in der Codebewegungsstufe ein. Der erste Schritt gilt für eine Schleife oder einen normalen linearen Code. Der zweite Schritt gilt für, ist jedoch nicht beschränkt auf Software-Pipelining oder andere Arten einer Codebewegung.
  • Die beiden Schritte des Algorithmus ermöglichen in einer Ausführungsform, dass der übersetzte Binärcode die Originalspeicherordnung und die Programmsemantik beibehält. Der erste Schritt des Algorithmus wird während der Codegenerierungsstufe verwendet und der zweite Schritt des Algorithmus wird während einer beliebigen Optimierung verwendet, die eine Codebewegung involviert. Beispielsweise wird in einer Ausführungsform der Erfindung für ein Software-Pipelining in der binären Übersetzung der erste Algorithmus verwendet, um die Schleife zu generieren, und Schritt 2 des Algorithmus wird verwendet, um die Kernschleife aufzubauen.
  • Für gewöhnliche Fachleute auf dem relevanten Gebiet ist es klar, dass die Arbeitsweisen des Pseudocodes in 7B und die Arbeitsweisen hier nicht beschrieben werden.
  • Ausführungsformen der Erfindung können angewendet werden, sind jedoch nicht beschränkt auf einen linearen Block, eine Software-Pipelining-Schleife und einen Schleifenblock. Die folgenden 8A, 8B und 8C veranschaulichen beispielsweise, wie eine Speicherinstruktion quer über verschiedene atomare Bereiche in einem linearen Block eines Codes umgeordnet oder geplant werden kann.
  • 8A veranschaulicht ein Beispiel eines linearen Blockcodes gemäß einer Ausführungsform der Erfindung. Das Beispiel des linearen Blockcodes hat zwei atomare Bereiche, wobei jede Festlegungsinstruktion am Ende jedes atomaren Bereichs ist. Der erste atomare Bereich umfasst die Instruktionen 1 bis 4 802, 804, 806, 808, und der zweite atomare Bereich umfasst die Instruktionen 5 bis 12 810, 812, 814, 816, 818, 820, 822, 824. Unter Verwendung der neuen Ziel-ISA-Primitiva können in einer Ausführungsform der Erfindung Speicherinstruktionen quer über die Festlegungsinstruktion bewegt werden, d. h. quer über verschiedene atomare Bereiche.
  • 8B veranschaulicht das Beispiel des linearen Blockcodes, nachdem Schritt Eins des Algorithmus angewendet wurde, gemäß der vorliegenden Erfindung. In 8B wird der Wert offset_s mit jeder Speicherinstruktion auf der Basis von Schritt Eins des Algorithmus addiert, d. h. mit den Speicherinstruktionen 3 836, 8 846, 11 852 wird offset_s addiert. Ähnlich wird der Wert offset_l mit jeder Ladeinstruktion auf der Basis von Schritt Eins des Algorithmus addiert, d. h. mit den Ladeinstruktionen 1 832, 5 840, 6 842, 9 848 wird offset_l addiert. Für die Festlegungsinstruktionen 4 838, 12 854 wird der Zählwert jeweils addiert. Gewöhnliche Fachleute auf dem relevanten Gebiet werden erkennen, wie Schritt Eins des Algorithmus anzuwenden ist, um den linearen Code in 8B zu generieren, und die Arbeitsweisen werden hier nicht beschrieben.
  • 8C veranschaulicht das Beispiel des linearen Blocks, nachdem Schritt Zwei des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung. Für jede Speicher- oder Ladeinstruktion, die vor eine Festlegungsinstruktion bewegt wird, wird der Zählwert dieser Festlegungsinstruktion jeweils mit dem Wert offset_s oder offset_l addiert. Beispielsweise werden in 8C die Ladeinstruktionen 5 864, 6 866 und 9 868 vor die Festlegungsinstruktion 4 880 bewegt, und offset_l dieser Ladeinstruktionen wird mit dem Zählwert der Festlegungsinstruktion 4 880 addiert.
  • Beispielsweise ist in 8B der Wert offset_l der Ladeinstruktion 5 840 Null. Nachdem Schritt Zwei des Algorithmus angewendet wurde, wird der Wert offset_l der Ladeinstruktion 5 840 mit dem Zählwert der Festlegungsinstruktion 4 880 addiert, und der neue Wert offset_l der Ladeinstruktion 5 864 wird 1.
  • Ähnlich wird in 8C die Speicherinstruktion 8 876 vor die Festlegungsinstruktion 4 880 bewegt, und offset_s der Speicherinstruktion wird mit dem Zählwert der Festlegungsinstruktion 4 880 addiert.
  • Nachdem die Festlegungsinstruktion 4 880 ausgeführt wird, ist die Speicherinstruktion 8 876 noch nicht in einem festgelegten Status, da der Wert offset_s höher ist als der Zählwert der Festlegungsinstruktion 4 880. Die interne Repräsentation des Werts offset_s der Speicherinstruktion 8 876 wird um den Zählwert der Festlegungsinstruktion 4 880 nach der Ausführung der Festlegungsinstruktion 4 880 subtrahiert. Wenn die Festlegungsinstruktion 12 884 ausgeführt wurde, wird die Speicherinstruktion 8 876 extern sichtbar gemacht.
  • 8C veranschaulicht, dass die Speicherinstruktionen quer über verschiedene atomare Bereiche umgeordnet werden können und weiterhin ihre Original-Quellprogramm- oder Speicherordnung beibehalten.
  • In einem weiteren Beispiel veranschaulichen die folgenden 9A, 9B und 9C ein Beispiel einer Software-Pipelining-Schleife, welche die Speicherordnung beibehält. 9A veranschaulicht ein Beispiel eines Schleifenkörpercodes gemäß einer Ausführungsform der Erfindung. Das Beispiel des Schleifenkörpercodes addiert 3678 mit einer Anordnung ganzer Zahlen und macht eine Kopie des Inhalts in einer anderen Anordnung ganzer Zahlen.
  • 9B veranschaulicht das Beispiel des Schleifenkörpercodes, nachdem Schritt Eins des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung. Nachdem Schritt Eins des Algorithmus angewendet wurde, wird das Beispiel des Schleifenkörpercodes in eine Schleife transformiert, wo jede Iteration ein atomarer Bereich ist.
  • 9C veranschaulicht das Beispiel des Schleifenkörpercodes, nachdem Schritt Zwei des Algorithmus angewendet wurde, gemäß einer Ausführungsform der Erfindung. 9C veranschaulicht den Schleifenkörpercode nach dem Aufbau des Kerns und nach der Anwendung von Schritt Zwei des Algorithmus. In der Zeile 930 werden die Instruktionen 1 bis 5 in eine Zeile gesetzt, um anzuzeigen, dass ein Parallelismus auf Instruktions-Ebene besteht. Jedes Symbol ', das zu jeder Instruktion hinzugefügt wird, zeigt die Anzahl von Iterationen an, welche die Instruktion vor oder früher bewegt wird.
  • Beispielsweise wird in Zeile 930 die Instruktion 4 eine Iteration vorbewegt und wird als INSTR4' angezeigt, die Instruktion 3 wird zwei Iterationen vorbewegt und sie wird als INSTR3'' angezeigt, die Instruktion 2 wird drei Iterationen vorbewegt und sie wird als INSTR3''' angezeigt, und die Instruktion 1 wird vier Iterationen vorbewegt und sie wird als INSTR1'''' angezeigt.
  • Die Instruktionen werden quer über eine Festlegungsinstruktion für jede Iteration bewegt, die sie vor- oder früher bewegt werden. Da die Ladeinstruktion 2 beispielsweise drei Iterationen früher bewegt wird, wird sie dreimal quer über die Festlegungsinstruktion 6 932 bewegt. offset_l der Ladeinstruktion 2 wird um 6 erhöht (3 × der Zählwert der Festlegungsinstruktion 6 932).
  • Ähnlich wird offset_s der Speicherinstruktion 3 um 4 erhöht (2 × der Zählwert der Festlegungsinstruktion 6 932), da er zwei Iterationen früher bewegt wird. In diesem Beispiel hat offset_l der Ladeinstruktion 2 eine unnötige Umgehung zu vermeiden, in deisem Fall wird kein Speichern über Laden gehoben, so ist die Versetzung die größte im Kern, d. h. es wird keine Umgehung blockiert.
  • Die 10A bis 10D veranschaulichen, wie sich die Inhalte im Gate-gesteuerten Speicherpuffer 602 mit wahlfreiem Zugriff mit der Ausführung der Instruktionen ändern. Die Zahl im Eintrag ist die Instruktionsnummer, die mit der Speicheranforderung assoziiert ist.
  • 10A veranschaulicht die Inhalte des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung. In 10A ist veranschaulicht, dass die Speicherinstruktion 5 (INSTR5) eine Wert offset_s von 2 aufweist, und die mit der Speicherinstruktion 5 assozierte Speicheranforderung wird in den Slot 1008 eingefügt, der zwei Slots links vom Festlegungszeiger 1004 ist. Der Slot 1008 wird in 10A durch die Zahl 5 angezeigt.
  • 10B veranschaulicht die Inhalte des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung. In 10B ist veranschaulicht, dass die Speicherinstruktion 3 (INSTR3'') eine Wert offset_s von 5 aufweist, und die mit der Speicherinstruktion 3'' assozierte Speicheranforderung wird in den Slot 1010 eingefügt, der fünf Slots links vom Festlegungszeiger 1004 ist. Der Slot 1010 wird in 10A durch die Zahl 3 angezeigt.
  • 10C veranschaulicht die Inhalte des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung. 10C veranschaulicht die Ausführung der Festlegungsinstruktion mit einem Zählwert von 2. Nach der Ausführung der Festlegungsinstruktion wird der Festlegungszeiger 1004 zwei Slots nach links bewegt. Die Speicheranforderungen, die rechts vom Festlegungszeiger 1004 sind, werden in einer Ausführungsform der Erfindung extern verfügbar gemacht.
  • 10D veranschaulicht die Inhalte des Gate-gesteuerten Speicherpuffers 602 mit wahlfreiem Zugriff gemäß einer Ausführungsform der Erfindung. 10D veranschaulicht die nächste Iteration der Speicherinstruktion 5 (INSTR5). Die Speicherinstruktion 5 hat einen Wert offset_2 von 2, und die Speicheranforderung, die mit der Speicherinstruktion 5 assoziiert ist, wird in den Slot 1012 eingefügt, der zwei Slots links vom Festlegungszeiger 1004 ist. Der Slot 1012 ist in 10A mit der Zahl 5 bezeichnet.
  • Die 10A bis 10D sollen nicht einschränkend sein und dienen nur als Illustration der Arbeitsweisen der Ausführungsformen der Erfindung. Ausführungsformen der Erfindung ermöglichen, dass die Speicherinstruktion in einer späteren Iteration vor eine Speicherinstruktion oder eine Ladeinstruktion in einer vorherigen Iteration umgeordnet wird, um eine hochkompakte Kernschleife zu erhalten. Dies erleichtert das Software-Pipelining in einer starken Speicherordnungs-ISA in einer Ausführungsform der Erfindung.
  • In einer Ausführungsform der Erfindung sind die Vektorinstruktionen mit den Arbeitsweisen der Erfindung kompatibel. 11A veranschaulicht ein Beispiel eines Schleifencodes gemäß einer Ausführungsform der Erfindung.
  • Unter der Annahme, dass das Beispiel des Schleifencodes mit einem 32 Bit-Operanden arbeitet, wird das Beispiel des Schleifencodes 4-mal in Vektoroperationen von 128 Bit-Operanden aufgerollt und gefaltet. Die Speicher-, Addier- und Speicherinstruktionen werden in ein Vektorformat konvertiert und die Festlegungsinstruktion wird eingefügt, um die Originalprogrammordnung sicherzustellen. 11B veranschaulicht das konvertierte Beispiel des Vektorcodes gemäß einer Ausführungsform der Erfindung. Gewöhnliche Fachleute auf dem relevanten Gebiet werden die Arbeitsweisen des konvertierten Beispiels des Vektorcodes in 11B leicht verstehen, und es wird hier nicht beschrieben.
  • 12 veranschaulicht ein Blockbild eines Systems 1200 gemäß einer Ausführungsform der Erfindung. Wie in 12 gezeigt, ist das Mehrprozessorsystem 1200 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1270 und einen zweiten Prozessor 1280, die über eine Punkt-zu-Punkt-Zwischenverbindung 1250 gekoppelt sind. Obwohl nur zwei Prozessoren 1270, 1280 gezeigt sind, ist es klar, dass der Umfang der vorliegenden Erfindung nicht so begrenzt ist. In anderen Ausführungsformen kann oder können ein oder mehrere zusätzliche Prozessoren in einem gegebenen Prozessor vorhanden sein.
  • Von den Prozessoren 1270, 1280 ist gezeigt, dass sie integrierte Speichersteuereinheiten (IMC) 1272 und 1282 umfassen. Der Prozessor 1270 umfasst auch als Teil seiner Bussteuereinheiten Punkt-zu-Punkt-(P-P-)Schnittstellen 1276 und 1278; ähnlich umfasst der zweite Prozessor 1280 P-P-Schnittstellen 1286 und 1288. Die Prozessoren 1270, 1280 können Informationen über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 1250 unter Verwendung von P-P-Schnittstellenschaltungen 1278, 1288 austauschen. Wie in 12 gezeigt, koppeln IMCs 1272 und 1282 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1232 und einem Speicher 1234, die Teile des Hauptspeichers sein können, der lokal an den jeweiligen Prozessoren angebracht ist.
  • Die Prozessoren 1270, 1280 können jeweils Informationen mit einem Chipsatz 1290 über einzelne P-P-Schnittstellen 1252, 1254 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1276, 1294, 1286, 1298 austauschen. Der Chipsatz 1290 kann auch Informationen mit einer Hochleistungs-Grafikschaltung 1238 über eine Hochleistungs-Grafikschnittstelle 1239 austauschen.
  • Ein gemeinsam genutzer Cache (nicht gezeigt) kann in einem der Prozessoren oder außerhalb beider Prozessoren angeordnet, jedoch mit den Prozessoren über eine P-P-Zwischenverbindung verbunden sein, so dass die lokalen Cache-Informationen eines oder beider der Prozessoren im gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Energiesparmodus versetzt wird.
  • Der Chipsatz 1290 kann in einer Ausführungsform mit einem ersten Bus 1216 über eine Schnittstelle 1296 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1216 ein Peripheral Component Interconnect-(PCI-)Bus oder ein Bus sein wie ein PCI Express-Bus oder ein anderer I/O-Zwischenverbindungsbus der dritten Generation, obwohl der Umfang der vorliegenden Erfindung nicht so eingeschränkt ist.
  • Wie in 12 gezeigt, können verschiedene I/O-Vorrichtungen 1214 mit einem ersten Bus 1216 gekoppelt sein, zusammen mit einer Busbrücke 1218, die den ersten Bus 1216 mit einem zweiten Bus 1220 koppelt. In einer Ausführungsform kann der zweite Bus 1220 ein Bus mit geringer Anschlusszahl (Low Pin Count, LPC) sein. Verschiedene Vorrichtungen können mit dem zweiten Bus 1220 gekoppelt sein, die beispielsweise eine Tastatur und/oder Maus 1222, Kommunikationsvorrichtungen 1227 und eine Speichereinheit 1228, wie ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, umfassen, welche in einer Ausführungsform Informationen/Code und Daten 1230 umfassen können. Ferner kann ein Audio-I/O 1224 mit dem zweiten Bus 1220 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Beispielsweise kann anstelle der Punkt-zu-Punkt-Architektur von 12 ein System einen Multidrop-Bus oder eine andere derartige Architektur implementieren.
  • Ein oder mehrere Aspekte wenigstens einer Ausführungsform kann oder können durch repräsentative Daten implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logik innerhalb des Prozessors repräsentiert, und das, wenn es von einer Maschine gelesen wird, die Maschine veranlasst, Logik zu erzeugen, um die hier beschriebenen Techniken vorzunehmen. Solche Repräsentationen, die als „IP”-Kerne bekannt sind, können auf einem greifbaren, maschinenlesbaren Medium („Band”) gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, welche die Logik oder den Prozessor tatsächlich erzeugen. Beispielsweise können IP-Kerne, wie die CortexTM-Prozessorfamilie, entwickelt von ARM Holdings, Ltd., und Loongson IP-Kerne, entwickelt vom Institute of Computing Technology (ICT) der chinesischen Akdademie der Wissenschaften an verschiedene Kunden oder Lizenznehmer lizensiert oder verkauft werden, wie Texas Instruments, Qualcomm, Apple oder Samsung, und in von diesen Kunden oder Lizenznehmern erzeugten Prozessoren implementiert werden.
  • 13 zeigt ein Blockbild, das die Entwicklung von IP-Kernen gemäß einer Ausführungsform der Erfindung zeigt. Ein Speicher 1300 umfasst Simulations-Software 1320 und/oder ein Hardware- oder Software-Modell 1310. In einer Ausführungsform können die Daten, welche die IP-Kernausbildung repräsentieren, an den Speicher 1330 über den Speicher 1340 (z. B. Festplatte), eine verdrahtete Verbindung (z. B. Internet) 1350 oder eine drahtlose Verbindung 1360 geliefert werden. Die vom Simulationswerkzeug und Modell generierten IP-Kerninformationen können dann zu einer Herstellungseinrichtung gesendet werden, wo sie von einer Drittpartei verarbeitet werden können, um wenigstens eine Instruktion gemäß wenigstens einer Ausführungsform vorzunehmen.
  • In einigen Ausführungsformen kann oder können eine oder mehrere Instruktionen einem ersten Architekturtyp entsprechen (z. B. x86) und auf einem Prozessor mit einem anderen Typ oder einer anderen Architektur (z. B. ARM) übersetzt oder emuliert werden. Eine Instruktion kann daher gemäß einer Ausführungsform auf einem beliebigen Prozessor oder Prozessortyp vorgenommen werden, die ARM, x86, MIPS, eine GPU oder einen anderen Prozessortyp oder eine andere Archtitektur umfassen.
  • 14 ist ein Blockbild, das die Verwendung eines Software-Instruktionskonvertierers veranschaulicht, um binäre Instruktionen in einem Quellinstruktionssatz in binäre Instruktionen in einem Zielinstruktionssatz gemäß Ausführungsformen der Erfindung zu konvertieren. In der veranschaulichten Ausführungsform ist der Instruktionskonvertierer ein Software-Instruktionskonvertierer, obwohl alternativ dazu der Instruktionskonvertierer auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann.
  • 14 zeigt ein Programm in einer höheren Programmiersprache 1402, das unter Verwendung eines x86-Kompilierers 1404 kompiliert werden kann, um einen x86 Binärcode 1406 zu generieren, der nativ von einem Prozessor mit wenigstens einem x86 Instruktionssatzkern 1416 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86 Instruktionssatzkern 1416 repräsentiert einen beliebigen Prozessor, der im Wesentlichen die gleichen Funktionen vornehmen kann wie ein Intel-Prozessor mit wenigstens einem x86 Instruktionssatzkern durch die kompatible Ausführung oder sonstige Verarbeitung (1) eines wesentlichen Teils des Instruktionssatzes der x86 Intel-Instruktionssatzkerns oder (2) von Objektcodeversionen von Anwendungen oder anderer Software, die darauf gerichtet ist, auf einem Intel-Prozessor mit wenigstens einem x86 Instruktionssatzkern zu laufen, um im Wesentlichen das gleiche Ergebnis zu erzielen wie ein Intel-Prozessor mit wenigstens einem x86 Instruktionssatzkern.
  • Der x86 Kompilierer 1404 repräsentiert einen Kompilierer, der betreibbar ist, einen x86 Binärcode 1406 (z. B. Objektcode) zu generieren, welcher, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit wenigstens einem x86 Instruktionssatzkern 1416 ausgeführt werden kann. Ähnlich zeigt 14, dass das Programm in der höheren Programmiersprache 1402 unter Verwendung eines alternativen Instruktionssatzkompilierers 1408 kompiliert werden kann, um einen alternativen Instruktionssatz-Binärcode 1410 zu generieren, der nativ von einem Prozessor ohne wenigstens einen x86 Instruktionssatzkern 1414 ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Instruktionssatz von MIPS Technologies of Sunnyvale, CA, ausführen, und/oder die den ARM-Instruktionssatz von ARM Holdings of Sunnyvale, CA, ausführen). Der Instruktionskonvertierer 1412 wird verwendet, um den x86 Binärcode 1406 in einen Code zu konvertieren, der nativ vom Prozessor ohne einen x86 Instruktionssatzkern 1414 ausgeführt werden kann.
  • Dieser konvertierte Code wird wahrscheinlich nicht derselbe sein wie der alternative Instruktionssatz-Binärcode 1410, da ein Instruktionskonvertierer, der dies kann, schwer herzustellen ist; der konvertierte Code wird jedoch die allgemeine Operation erzielen und aus Instruktionen aus dem alternativen Instruktionssatz bestehen. So repräsentiert der Instruktionskonvertierer 1412 Software, Firmware, Hardware oder eine Kombination davon, die es durch Emulation, Simulation oder einen beliebigen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung ermöglicht, die keinen x86 Instruktionssatzprozessor oder -kern aufweist, den x86 Binärcode 1406 auszuführen.
  • Obwohl der geoffenbarte Gegenstand mit Bezugnahme auf veranschaulichende Ausführungsformen beschrieben wurde, ist diese Beschreibung nicht in einem einschränkenden Sinn auszulegen. Verschiedene Modifikationen der veranschaulichenden Ausführungsformen sowie andere Ausführungsformen des Gegenstands, die für Fachleute auf dem Gebiet ersichtlich sind, zu dem der geoffenbarte Gegenstand gehört, werden als im Umfang des geoffenbarten Gegenstands liegend angesehen.

Claims (27)

  1. Vorrichtung, umfassend: Logik, um eine binäre Übersetzung eines Codes mit einer Quell-Binärprogrammordnung vorzunehmen, wobei eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in einer Ordnung auszugeben sind, die von der Quell-Binärprogrammordnung der einen oder mehreren Speicherinstruktionen des Codes verschieden ist, und wobei die eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in der Quell-Binärprogrammordnung rückzuordnen sind.
  2. Vorrichtung nach Anspruch 1, wobei jede Speicherinstruktion einen Speicherversetzungsindikator aufweist, um die Quell-Binärprogrammordnung anzuzeigen.
  3. Vorrichtung nach Anspruch 2, wobei der Code eine oder mehrere Ladeinstruktionen umfasst, wobei jede Ladeinstruktion einen Ladeversetzungsindikator aufweist, und wobei jede Speicherinstruktion für jede Ladeinstruktion nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Ladeversetzungsindikator ist.
  4. Vorrichtung nach Anspruch 3, wobei der Code eine oder mehrere Festlegungsinstruktionen umfasst, wobei jede Festlegungsinstruktion einen Zählwert aufweist, und wobei jede Speicherinstruktion extern nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Zählwert einer ausgeführten Festlegungsinstruktion ist.
  5. Vorrichtung nach Anspruch 4, wobei die Logik ferner den binär übersetzten Code auszuführen hat, indem die folgenden Schritte vorgenommen werden: ansprechend auf die ausgeführte Festlegungsinstruktion, Subtrahieren des Speicherversetzungsindikators jeder Speicherinstruktion um den Zählwert, falls der Speicherversetzungsindikator größer ist als der Zählwert; und ansprechend auf die ausgeführte Festlegungsinstruktion, Subtrahieren des Ladeversetzungsindikators jeder Ladeinstruktion um den Zählwert, falls der Ladeversetzungsindikator größer ist als der Zählwert.
  6. Vorrichtung nach Anspruch 4, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung: einen aktuellen Speicherversetzungsindikator auf Null zu initialisieren hat; für jede Speicherinstruktion im Code, den aktuellen Speicherversetzungsindikator um Eins zu inkrementieren hat; und eine entsprechende Speicherinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code zu generieren hat; für jede Ladeinstruktion im Code, eine entsprechende Ladeinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code zu generieren hat; für jede Festlegungsinstruktion im Code, eine entsprechende Festlegungsinstruktion mit dem Zählwert im binär übersetzten Code zu generieren hat, wobei der Zählwert die Anzahl von Speicherinstruktionen zwischen der entsprechenden Festlegungsinstruktion und einer vorherigen Festlegungsinstruktion der entsprechenden Festlegungsinstruktion oder zwischen der entsprechenden Festlegungsinstruktion und einem Beginn des Codes ist, falls die entsprechende Festlegungsinstruktion eine erste Festlegungsinstruktion im Code ist; und für jede andere Instruktion, die keine Speicher-, Lade- oder Festlegungsinstruktion ist, die andere Instruktion zu generieren hat.
  7. Vorrichtung nach Anspruch 6, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung ferner: für alle Speicher- und Ladeinstruktionen im Code, die rückwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, den Speicherversetzungsindikator jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu inkrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und den Ladeversetzungsindikator jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu inkrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind.
  8. Vorrichtung nach Anspruch 6, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung ferner: für alle Speicher- und Ladeinstruktionen im Code, die vorwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, den Speicherversetzungsindikator jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu dekrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; den Ladeversetzungsindikator jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu dekrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und einen Fehler ansprechend darauf, dass der dekrementierte Speicherversetzungsindikator kleiner oder gleich Null ist, und ansprechend darauf, dass der dekrementierte Ladeversetzungsindikator kleiner als Null ist, zurückzuführen hat.
  9. Vorrichtung nach Anspruch 4, wobei für eine erste und eine zweite Speicherinstruktion, die extern auf der Basis der ausgeführten Festlegungsinstruktion sichtbar zu machen sind, die erste und die zweite Speicherinstruktion extern gleichzeitig als ein atomares Ereignis sichtbar zu machen sind oder auf der Basis ihrer jeweiligen Speicherversetzungsindikatoren sichtbar zu machen sind.
  10. System, umfassend: einen Speicher; und einen Prozessor mit Logik, um eine binäre Übersetzung eines Codes mit einer Quell-Binärprogrammordnung vorzunehmen, wobei eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in einer Ordnung auszugeben sind, die von der Quell-Binärprogrammordnung der einen oder mehreren Speicherinstruktionen des Codes verschieden ist, und wobei die eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in der Quell-Binärprogrammordnung rückzuordnen sind.
  11. System nach Anspruch 10, wobei jede Speicherinstruktion einen Speicherversetzungsindikator aufweist, um die Quell-Binärprogrammordnung anzuzeigen.
  12. System nach Anspruch 11, wobei der Code eine oder mehrere Ladeinstruktionen umfasst, wobei jede Ladeinstruktion einen Ladeversetzungsindikator aufweist, und wobei jede Speicherinstruktion für jede Ladeinstruktion nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Ladeversetzungsindikator ist.
  13. System nach Anspruch 12, wobei der Code eine oder mehrere Festlegungsinstruktionen umfasst, wobei jede Festlegungsinstruktion einen Zählwert aufweist, und wobei jede Speicherinstruktion extern nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Zählwert einer ausgeführten Festlegungsinstruktion ist.
  14. System nach Anspruch 13, wobei die Logik ferner den binär übersetzten Code auszuführen hat, indem die folgenden Schritte vorgenommen werden: ansprechend auf die ausgeführte Festlegungsinstruktion, Subtrahieren des Speicherversetzungsindikators jeder Speicherinstruktion um den Zählwert, falls der Speicherversetzungsindikator größer ist als der Zählwert; und ansprechend auf die ausgeführte Festlegungsinstruktion, Subtrahieren des Ladeversetzungsindikators jeder Ladeinstruktion um den Zählwert, falls der Ladeversetzungsindikator größer ist als der Zählwert.
  15. System nach Anspruch 13, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung: einen aktuellen Speicherversetzungsindikator auf Null zu initialisieren hat; für jede Speicherinstruktion im Code, den aktuellen Speicherversetzungsindikator um Eins zu inkrementieren hat; und eine entsprechende Speicherinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code zu generieren hat; für jede Ladeinstruktion im Code, eine entsprechende Ladeinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code zu generieren hat; für jede Festlegungsinstruktion im Code, eine entsprechende Festlegungsinstruktion mit dem Zählwert im binär übersetzten Code zu generieren hat, wobei der Zählwert die Anzahl von Speicherinstruktionen zwischen der entsprechenden Festlegungsinstruktion und einer vorherigen Festlegungsinstruktion der entsprechenden Festlegungsinstruktion oder zwischen der entsprechenden Festlegungsinstruktion und einem Beginn des Codes ist, falls die entsprechende Festlegungsinstruktion eine erste Festlegungsinstruktion im Code ist; und für jede andere Instruktion, die keine Speicher-, Lade- oder Festlegungsinstruktion ist, die andere Instruktion zu generieren hat.
  16. System nach Anspruch 15, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung ferner: für alle Speicher- und Ladeinstruktionen im Code, die rückwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, den Speicherversetzungsindikator jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu inkrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und den Ladeversetzungsindikator jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu inkrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind.
  17. System nach Anspruch 16, wobei die Logik zur Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung ferner: für alle Speicher- und Ladeinstruktionen im Code, die vorwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, den Speicherversetzungsindikator jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu dekrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; den Ladeversetzungsindikator jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen zu dekrementieren hat, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und einen Fehler ansprechend darauf, dass der dekrementierte Speicherversetzungsindikator kleiner oder gleich Null ist, und ansprechend darauf, dass der dekrementierte Ladeversetzungsindikator kleiner als Null ist, zurückzuführen hat.
  18. System nach Anspruch 13, wobei für eine erste und eine zweite Speicherinstruktion, die extern auf der Basis der ausgeführten Festlegungsinstruktion sichtbar zu machen sind, die erste und die zweite Speicherinstruktion extern gleichzeitig als ein atomares Ereignis sichtbar zu machen sind oder auf der Basis ihrer jeweiligen Speicherversetzungsindikatoren sichtbar zu machen sind.
  19. Verfahren, umfassend: Vornehmen einer binären Übersetzung eines Codes mit einer Quell-Binärprogrammordnung, wobei eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in einer Ordnung auszugeben sind, die von der Quell-Binärprogrammordnung der einen oder mehreren Speicherinstruktionen des Codes verschieden ist, und wobei die eine oder mehrere Speicherinstruktionen des binär übersetzten Codes in der Quell-Binärprogrammordnung rückzuordnen sind.
  20. Verfahren nach Anspruch 19, wobei jede Speicherinstruktion einen Speicherversetzungsindikator aufweist, um die Quell-Binärprogrammordnung anzuzeigen.
  21. Verfahren nach Anspruch 20, wobei der Code eine oder mehrere Ladeinstruktionen umfasst, wobei jede Ladeinstruktion einen Ladeversetzungsindikator aufweist, und wobei jede Speicherinstruktion für jede Ladeinstruktion nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Ladeversetzungsindikator ist.
  22. Verfahren nach Anspruch 21, wobei der Code eine oder mehrere Festlegungsinstruktionen umfasst, wobei jede Festlegungsinstruktion einen Zählwert aufweist, und wobei jede Speicherinstruktion extern nur sichtbar ist, falls der Speicherversetzungsindikator der Speicherinstruktion kleiner oder gleich dem Zählwert einer ausgeführten Festlegungsinstruktion ist.
  23. Verfahren nach Anspruch 22, wobei das Verfahren ferner ein Ausführen des binär übersetzten Codes umfasst, indem die folgenden Schritte vorgenommen werden: Subtrahieren des Speicherversetzungsindikators jeder Speicherinstruktion um den Zählwert, falls der Speicherversetzungsindikator größer ist als der Zählwert, ansprechend auf die ausgeführte Festlegungsinstruktion; und Subtrahieren des Ladeversetzungsindikators jeder Ladeinstruktion um den Zählwert, falls der Ladeversetzungsindikator größer ist als der Zählwert, ansprechend auf die ausgeführte Festlegungsinstruktion.
  24. Verfahren nach Anspruch 22, wobei die Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung umfasst: Initialisieren eines aktuellen Speicherversetzungsindikators auf Null; für jede Speicherinstruktion im Code, Inkrementieren des aktuellen Speicherversetzungsindikators um Eins; und Generieren einer entsprechenden Speicherinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code; für jede Ladeinstruktion im Code, Generieren einer entsprechenden Ladeinstruktion mit dem aktuellen Speicherversetzungsindikator im binär übersetzten Code; für jede Festlegungsinstruktion im Code, Generieren einer entsprechenden Festlegungsinstruktion mit dem Zählwert im binär übersetzten Code, wobei der Zählwert die Anzahl von Speicherinstruktionen zwischen der entsprechenden Festlegungsinstruktion und einer vorherigen Festlegungsinstruktion der entsprechenden Festlegungsinstruktion oder zwischen der entsprechenden Festlegungsinstruktion und einem Beginn des Codes ist, falls die entsprechende Festlegungsinstruktion eine erste Festlegungsinstruktion im Code ist; und für jede andere Instruktion, die keine Speicher-, Lade- oder Festlegungsinstruktion ist, Generieren der anderen Instruktion.
  25. Verfahren nach Anspruch 24, wobei die Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung umfasst: für alle Speicher- und Ladeinstruktionen im Code, die rückwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, Inkrementieren des Speicherversetzungsindikators jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und Inkrementieren des Ladeversetzungsindikators jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind.
  26. Verfahren nach Anspruch 25, wobei die Vornahme der binären Übersetzung des Codes mit der Quell-Binärprogrammordnung umfasst: für alle Speicher- und Ladeinstruktionen im Code, die vorwärts von einem ersten Ort in der Quell-Binärprogrammordnung zu einem zweiten Ort in dem binär übersetzten Code umgeordnet werden, Dekrementieren des Speicherversetzungsindikators jeder Speicherinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; Dekrementieren des Ladeversetzungsindikators jeder Ladeinstruktion mit einer Summe der Zählwerte aller Festlegungsinstruktionen, die zwischen dem ersten Ort in der Quell-Binärprogrammordnung und dem zweiten Ort im binär übersetzten Code lokalisiert sind; und Zurückführen eines Fehlers ansprechend darauf, dass der dekrementierte Speicherversetzungsindikator kleiner oder gleich Null ist, und ansprechend darauf, dass der dekrementierte Ladeversetzungsindikator kleiner als Null ist.
  27. Verfahren nach Anspruch 22, wobei für eine erste und eine zweite Speicherinstruktion, die extern auf der Basis der ausgeführten Festlegungsinstruktion sichtbar zu machen sind, die erste und die zweite Speicherinstruktion extern gleichzeitig als ein atomares Ereignis sichtbar zu machen sind oder auf der Basis ihrer jeweiligen Speicherversetzungsindikatoren sichtbar zu machen sind.
DE112012006946.3T 2012-09-27 2012-09-27 Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung Withdrawn DE112012006946T5 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2012/082139 WO2014047828A1 (en) 2012-09-27 2012-09-27 Method and apparatus to schedule store instructions across atomic regions in binary translation

Publications (1)

Publication Number Publication Date
DE112012006946T5 true DE112012006946T5 (de) 2015-06-03

Family

ID=50386810

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112012006946.3T Withdrawn DE112012006946T5 (de) 2012-09-27 2012-09-27 Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung

Country Status (4)

Country Link
US (1) US9141362B2 (de)
CN (1) CN106170761B (de)
DE (1) DE112012006946T5 (de)
WO (1) WO2014047828A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014047828A1 (en) * 2012-09-27 2014-04-03 Intel Corporation Method and apparatus to schedule store instructions across atomic regions in binary translation
US9525586B2 (en) * 2013-03-15 2016-12-20 Intel Corporation QoS based binary translation and application streaming
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US10447823B2 (en) * 2014-01-08 2019-10-15 Marvell Semiconductor, Inc. Packet parsing engine
US10990362B1 (en) * 2014-01-17 2021-04-27 Tg Llc Converting programs to visual representation with reading complied binary
US10515430B2 (en) * 2015-11-03 2019-12-24 International Business Machines Corporation Allocating device buffer on GPGPU for an object with metadata using access boundary alignment
CN109582295B (zh) * 2017-09-28 2022-06-21 北京国双科技有限公司 一种数据处理方法、装置、存储介质及处理器

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6105124A (en) 1996-01-26 2000-08-15 Intel Corporation Method and apparatus for merging binary translated basic blocks of instructions
US6330709B1 (en) * 1998-03-30 2001-12-11 International Business Machines Corporation Virtual machine implementation for shared persistent objects
US6748523B1 (en) * 2000-11-02 2004-06-08 Intel Corporation Hardware loops
GB2424727B (en) 2005-03-30 2007-08-01 Transitive Ltd Preparing instruction groups for a processor having a multiple issue ports
US7752613B2 (en) * 2006-12-05 2010-07-06 Intel Corporation Disambiguation in dynamic binary translation
CN101042670A (zh) * 2007-04-24 2007-09-26 上海华龙信息技术开发中心 一种指令异常处理方法
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
CN101923492B (zh) 2010-08-11 2013-05-01 上海交通大学 面向嵌入式异构多核上执行动态分配指令的方法
US20120079245A1 (en) * 2010-09-25 2012-03-29 Cheng Wang Dynamic optimization for conditional commit
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8918625B1 (en) * 2010-11-24 2014-12-23 Marvell International Ltd. Speculative scheduling of memory instructions in out-of-order processor based on addressing mode comparison
CN102073533B (zh) * 2011-01-14 2013-06-19 中国人民解放军国防科学技术大学 支持动态二进制翻译的多核体系结构
US8826257B2 (en) * 2012-03-30 2014-09-02 Intel Corporation Memory disambiguation hardware to support software binary translation
WO2014047828A1 (en) * 2012-09-27 2014-04-03 Intel Corporation Method and apparatus to schedule store instructions across atomic regions in binary translation

Also Published As

Publication number Publication date
US9141362B2 (en) 2015-09-22
WO2014047828A1 (en) 2014-04-03
CN106170761A (zh) 2016-11-30
CN106170761B (zh) 2019-05-10
US20140282437A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
DE102007045496B4 (de) Anweisung und Logik zum Bearbeiten von Textstrings
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE112011105664T5 (de) Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE202012009380U1 (de) Befehl und Logik zum Durchführen einer dynamischen Binärübersetzung
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112012007119T5 (de) Threadmigration-Unterstützung für Kerne unterschiedlicher Architektur
DE102013018238A1 (de) Anweisung und Logik zum Bereitstellen einer Vektorkompressions- und Rotationsfunktionalität
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112012006946T5 (de) Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE112010004887T5 (de) Verfahren und Vorrichtung zur Durchführung einer Verschiebe- und Exklusiv-ODER-Operation in einer einzelnen Instruktion
DE112007002101T5 (de) Instruktion und Logik zur Durchführung einer Skalarprodukt-Operation
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112017004911T5 (de) Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers
DE102018001229A1 (de) Beschleunigerschaltung mit variabler Wortlänge für ein neuronales Netzwerk
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE112013001442T5 (de) Kopieren von Zeichendaten, die ein Abschlusszeichen aufweisen, von einer Speicherposition zu einer anderen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE

R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee