-
Mit
dem Fortschritt der Prozessortechnologie wird jetzt auch ein neuerer
Software-Code erzeugt, der auf Maschinen mit diesen Prozessoren
laufen soll. Nutzer erwarten und fordern im Allgemeinen eine höhere Leistung
von ihren Computer unabhängig
von der Art der verwendeten Software. Probleme können sich aus der Art von Befehlen
und Operationen ergeben, die gerade in dem Prozessor ausgeführt werden.
Bestimmte Arten von Operationen erfordern aufgrund der Komplexität der Operationen
und/oder des Typs der benötigten
Schaltung mehr Zeit für
die Ausführung.
Dies bietet eine Möglichkeit
zur Optimierung der Art und Weise, in der bestimmte komplexe Operationen
in dem Prozessor ausgeführt
werden.
-
Medien-Anwendungen
treiben die Mikroprozessor-Entwicklung voran. Daher sind das Anzeigen
von Bildern und das Wiedergeben von Audio- und Videodaten, die kollektiv
als Inhalt bezeichnet werden, immer weiter verbreitete Anwendungen
für aktuelle
Rechengeräte
geworden. Solche Operationen sind zwar rechenintensiv, bieten aber
ein hohes Maß an
Datenparallelität,
die über
eine effiziente Implementierung unter Verwendung verschiedener Datenspeichergeräte, wie
etwa SIMD-Register (SIMD: Single Instruction Multiple Data), genutzt
werden kann. Mehrere aktuelle Architekturen erfordern außerdem mehrere
Operationen, Befehle oder Teilbefehle (die oft als „Mikro-Operationen" oder „μops" bezeichnet werden),
um verschiedene mathematische Operationen oder Datenübertragungsoperationen
an mehreren Operanden auszuführen,
wodurch der Durchsatz verringert wird und die Anzahl von Taktzyklen
zunimmt, die zum Ausführen
dieser Operationen erforderlich sind.
-
Eine
Maskierung wird häufig
bei SIMD- oder Vektorisierungsoperationen verwendet, damit ein Programmierer
einen Teil der Vektoren maskieren kann. Sie wird oft für bedingte
Operationen, für
den Beginn/das Ende einer vektorisierten Schleife oder zur Kurzvektor-Unterstützung verwendet.
Das Maskenladen und -speichern von Vektordaten sind ziemlich komplexe
Operationen, die normalerweise zahlreiche einzelne Befehle und Taktzyklen
für die
Ausführung
erfordern. Während
dieser Operationen sollten einige Teile der vektorisierten Lade-/Speicheroperationen
(die „maskierten" Teile) überhaupt
nicht ausgeführt
werden. Da Speicheroperationen normalerweise in Blöcken (z.
B. Laden von 128 Bit, Speicher von 128 Bit) ausgeführt werden,
wird es ziemlich anspruchsvoll, Maskenoperationen mit einer angemessenen
Leistung zu unterstützen,
da diese Blockladungen ohne Referenzierung einer Maske erfolgen.
-
Das
Durchführen
des Ladens und Speicherns unter Verwendung einer Prozessor-Architektur,
wie etwa eines Prozessors auf Basis der Intel®-Architektur
(IA-32), ist wegen fehlausgerichteter Ladungen, Seiten-/Segmentierungsfehlern,
Daten-Breakpoint-Unterstützung
und dergleichen sogar noch anspruchsvoller. Zum Beispiel kann sich
beim Laden einer 128-Bit-Maske ein Teil der Daten auf einer Seite
befinden, während sich
der andere Teil auf einer anderen Seite befinden kann. Wenn eine
der Seiten nicht vorhanden ist, dürfte ein Seitenfehler nur dann
auftreten, wenn der Teil, der zu dieser Seite gehört, nicht
maskiert ist. Somit nehmen aktuelle Architekturen nicht adäquat die
effiziente Ausführung
von Maskenlade- und -speicheroperationen in Angriff. Stattdessen
erfordern diese Techniken zahlreiche Verarbeitungszyklen und können einen
Prozessor oder ein System unnötige
Energie verbrauchen lassen, um diese maskierten Operationen auszuführen.
-
Kurze Beschreibung der Zeichnungen
-
1 ist
ein Blockdiagramm eines beispielhaften Computersystems, das mit
einem Prozessor konfiguriert ist, der eine Logik zum Ausführen von
Befehlen für
Maskenlade- und -speicheroperationen nach einer Ausführungsform
der vorliegenden Erfindung hat.
-
2 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Maskenladeoperation
nach einer Ausführungsform
der vorliegenden Erfindung.
-
3 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Maskenladeoperation
nach einer weiteren Ausführungsform
der vorliegenden Erfindung.
-
4 ist
ein Ablaufdiagramm zum Ausführen
einer Maskenspeicheroperation nach einer Ausführungsform der vorliegenden
Erfindung.
-
5 ist
ein Ablaufdiagramm eines Verfahrens zum Ausführen einer Maskenspeicheroperation
nach einer weiteren Ausführungsform
der vorliegenden Erfindung.
-
6 ist
ein Blockdiagramm eines Prozessors nach einer Ausführungsform
der vorliegenden Erfindung.
-
7 ist
ein Blockdiagramm eines Systems nach einer Ausführungsform der vorliegenden
Erfindung.
-
Detaillierte Beschreibung
-
Bei
modernen Prozessoren werden mehrere verschiedene Ausführungseinheiten
zum Verarbeiten und Ausführen
verschiedener Codes und Befehle verwendet. Nicht alle Befehle werden
in der gleichen Weise erzeugt, da einige schneller auszuführen sind,
während
andere eine enorme Anzahl von Taktzyklen dauern können. Je
schneller der Durchsatz von Befehlen ist, umso besser ist die Gesamtleistung
des Prozessors. Es gibt jedoch bestimmte Befehle, die eine größere Komplexität haben
und mehr Ausführungszeit
und Prozessorressourcen erfordern. Dazu gehören zum Beispiel Gleitkomma-Befehle,
Lade-/Speicheroperationen, Datenverschiebungen usw.
-
Da
immer mehr Computersysteme in Internet- und Multimedia-Anwendungen
verwendet werden, ist mit der Zeit eine zusätzliche Prozessor-Unterstützung eingeführt worden.
Zum Beispiel sind SIMD-Ganzzahl-/-Gleitkommabefehle und SSE-Befehle
(SSE: Streaming SIMD Extensions) Befehle, die die Gesamtanzahl von
Befehlen verringern, die erforderlich sind, um eine spezielle Programm-Task
auszuführen,
was wiederum den Energieverbrauch senken kann. Diese Befehle können durch
paralleles Arbeiten an mehreren Datenelementen die Software-Leistung erhöhen. Dadurch
können
Leistungszuwächse
in einem großen
Bereich von Anwendungen, unter anderem Video-, Sprach- und Bild-/Fotoverarbeitung,
erzielt werden.
-
Bei
verschiedenen Ausführungsformen
können
einzelne Befehle eines Befehlsvorrats bereitgestellt werden, um
eine effizientere Ausführung
von Maskenlade- und -speicherbefehlen zu ermöglichen. Insbesondere können Ausführungsformen
mehrere Flavors von Maskenlade- und
-speicherbefehlen bereitstellen, um jeweils das Laden von gepackten
SIMD-Daten aus dem Speicher an einen gewählten Speicherplatz oder das Abspeichern
von gepackten SIMD-Daten von einem gewählten Quellen-Speicherplatz
zu ermöglichen.
Ausführungsformen
können
mehrere Flavors dieser Befehle bereitstellen, um das Laden und Speichern
von gepackten Werten mit verschiedenen Bitbreiten von und an Quellen-
und Ziel-Speicherplätze(n)
verschiedener Größe in dem
System zu ermöglichen.
Allgemein können
diese Befehle als bedingte gepackte SIMD-Lade- und -Speicherbefehle
zum Ermöglichen
des bedingten Ladens und Speicherns von gepackten Datenelementen
aufgrund von Maskenwerten angesehen werden, die mit den gepackten
Datenelementen assoziiert sind.
-
1 ist
ein Blockdiagramm eines beispielhaften Computersystems, das mit
einem Prozessor konfiguriert ist, der eine Logik zum Ausführen der
Maskenverschiebungsbefehle nach einer Ausführungsform der vorliegenden
Erfindung hat. Ein System 100 weist eine Komponente, wie
etwa einen Prozessor 102, auf, um Ausführungseinheiten mit einer Logik
zum Ausführen
von Algorithmen zum Verarbeiten von Maskenverschiebungsoperationen
gemäß der vorliegenden
Erfindung zu verwenden, wie etwa bei den hier beschriebenen Ausführungsformen.
Das System 100 ist für
Verarbeitungssysteme typisch, die auf den Mikroprozessoren PENTIUM® 4,
PENTIUM® Dual-Core,
CoreTM 2 Duo und Quad, XeonTM,
Itanium®,
XScaleTM und/oder StrongARMTM basieren,
die von Intel Corporation in Santa Clara, Kalifornien, erhältlich sind,
obwohl auch andere Systeme (mit PCs mit anderen Mikroprozessoren,
Engineering Workstations, Set-Top-Boxes und dergleichen) verwendet
werden können.
Bei einer Ausführungsform
kann das System 100 eine Version des Betriebssystems WINDOWSTM abarbeiten, das von Microsoft Corporation
in Redmond, Washington, erhältlich
ist, obwohl auch andere Betriebssysteme (zum Beispiel UNIX und Linux),
eingebettete Software und/oder grafische Benutzeroberflächen verwendet
werden können.
Daher sind Ausführungsformen
der vorliegenden Erfindung nicht auf eine spezielle Kombination
aus Hardware-Schaltungen und Software beschränkt. Bei anderen Geräten, wie etwa
Handheld-Geräten,
und eingebetteten Anwendungen können
alternative Ausführungsformen
der vorliegenden Erfindung verwendet werden.
-
Der
Prozessor 102 weist eine oder mehrere Ausführungseinheiten 108 zum
Ausführen
eines Algorithmus zum Ausführen
von Maskenlade- und -speicheroperationen an SIMD-Datenelementen nach einer Ausführungsform
der vorliegenden Erfindung auf. Das System 100 ist ein
Beispiel für
eine Hub-Architektur. Der Prozessor 102 kann ein CISC-Mikroprozessor
(CISC: Complex Instruction Set Computer), ein RISC-Mikroprozessor
(RISC: Reduced Instruction Set Computing), ein VLIW-Mikroprozessor
(VLIW: Very Long Instruction Word), ein Prozessor, der eine Kombination
aus Befehlsvorräten
implementiert, oder ein anderer Prozessor sein, wie zum Beispiel
ein Digitalsignalprozessor. Der Prozessor 102 ist mit einem
Prozessorbus 110 verbunden, der Datensignale zwischen dem
Prozessor 102 und anderen Komponenten in dem System 100 übertragen
kann.
-
Bei
einer Ausführungsform
weist der Prozessor 102 einen internen Ebene-1(L1)-Cache-Speicher 104 auf.
In Abhängigkeit
von der Architektur kann der Prozessor 102 einen einzelnen
internen Cache oder mehrere Interner-Cache-Ebenen haben. Alternativ
kann bei einer anderen Ausführungsform
der Cache-Speicher außerhalb
des Prozessors 102 residieren. Weitere Ausführungsformen
können
auch eine Kombination aus internen und externen Caches in Abhängigkeit
von der speziellen Implementierung und den speziellen Erfordernissen
haben. Eine Registerdatei 106 kann verschiedene Typen von
Daten in verschiedenen Registern speichern, unter anderem in Ganzzahlregistern,
Gleitkommaregistern, Vektor- oder erweiterten Registern, Statusregistern
und einem Befehlszeigerregister.
-
Die
Ausführungseinheit 108,
die eine Logik zum Ausführen
von Ganzzahl- und Gleitkomma-Operationen
hat, residiert ebenfalls in dem Prozessor 102. Der Prozessor 102 hat
auch einen Mikrocode(μcode)-Nur-Lese-Speicher
(ROM), der einen Mikrocode für
bestimmte Makrobefehle speichert. Bei dieser Ausführungsform
hat die Ausführungseinheit 108 eine
Logik zum Verarbeiten eines gepackten Befehlsvorrats 109.
Bei einer Ausführungsform
hat der gepackte Befehlsvorrat 109 verschiedene Instanzen
von Maskenlade- und -speicherbefehlen zum effizienten Verarbeiten
dieser Operationen. Durch Integrieren des gepackten Befehlsvorrats 109 in
den Befehlsvorrat eines Mehrzweckprozessors 102 sowie eine
zugehörige
Schaltung zum Ausführen
der Befehle können
die von zahlreichen Multimedia-Anwendungen verwendeten Operationen unter
Verwendung von gepackten Daten in dem Mehrzweckprozessor 102 ausgeführt werden.
Durch Nutzung der vollen Breite eines Datenbusses des Prozessors
zum Ausführen
dieser Maskenlade- und -speicheroperationen an gepackten Daten können zahlreiche
Multimedia-Anwendungen beschleunigt und effizienter ausgeführt werden.
Dadurch kann die Notwendigkeit eliminiert werden, kleinere Einheiten
von Daten über
den Datenbus des Prozessors zu übertragen,
um eine oder mehrere Operationen an einem Datenelement auf einmal auszuführen.
-
Alternative
Ausführungsformen
der Ausführungseinheit 108 können auch
in Mikrocontrollern, eingebetteten Prozessoren, Grafikgeräten, Digitalsignalprozessoren
(DSPs) und anderen Arten von Logikschaltungen zum Einsatz kommen.
Das System 100 weist einen Speicher 120 auf. Der
Speicher 120 kann ein dynamischer Schreib-Lese-Speicher
(DRAM), ein statischer Schreib-Lese-Speicher
(SRAM), ein Flash-Speicher oder ein anderes Speichergerät sein.
Der Speicher 120 kann Befehle und/oder Daten speichern,
die durch Datensignale dargestellt sind, die von dem Prozessor 102 verarbeitet
werden können.
-
Ein
Systemlogikchip 116 ist mit dem Prozessorbus 110 und
dem Speicher 120 verbunden. Der Systemlogikchip 116 in
der dargestellten Ausführungsform
ist ein MCH (Memory Controller Hub). Der Prozessor 102 kann über den
Prozessorbus 110 mit dem MCH 116 kommunizieren.
Der MCH 116 stellt einen Speicherweg 118 mit hoher
Bandbreite zu dem Speicher 120 für die Befehls- und Datenspeicherung
und zum Speichern von Grafikbefehlen, Daten und Texturen bereit.
Der MCH 116 soll Datensignale zwischen dem Prozessor 102, dem
Speicher 120 und anderen Komponenten in dem System 100 senden
und mit den Datensignalen eine Verbindung zwischen dem Prozessorbus 110,
dem Speicher 120 und einem Hub-Schnittstellenbus 122 herstellen.
Bei einigen Ausführungsformen
kann der Systemlogikchip 116 einen Grafik-Anschluss zum Verbinden mit
einem Grafik-Steuergerät 112 bereitstellen.
Der MCH 116 ist über
eine Speicher-Schnittstelle 118 mit dem Speicher 120 verbunden.
Die Grafikkarte 112 ist über einen AGP-Interconnect 114 (AGP:
Accelerated Graphics Port) mit dem MCH 116 verbunden.
-
Das
System 100 verwendet den Hub-Schnittstellenbus 122 zum
Verbinden des MCH 116 mit einem ICH (I/O Controller Hub;
E/A-Steuer-Hub) 130. Der ICH 130 stellt direkte
Verbindungen zu einigen E/A-Geräten über einen
lokalen E/A-Bus her. Der lokale E/A-Bus ist ein schneller E/A-Bus
zum Verbinden von Peripheriegeräten
mit dem Speicher 120, einem Chipsatz und dem Prozessor 102.
Einige Beispiele sind ein Audio-Steuergerät, ein Firmware-Hub (Flash-BIOS) 128,
ein Funk-Sende-Empfänger 126,
ein Datenspeicher 124, ein E/A-Legacy-Steuergerät mit Nutzer-Eingabe-
und Tastatur-Schnittstellen, ein serieller Erweiterungsport, wie etwa
ein USB (Universal Serial Bus), und ein Netzwerk-Steuergerät 134.
Das Datenspeichergerät 124 kann ein
Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM, ein Flash-Speicher
oder ein anderer Massenspeicher sein.
-
Der
Schutzumfang der vorliegenden Erfindung ist diesbezüglich nicht
beschränkt,
und die Maskenverschiebungsbefehle können auch für andere Datenbreiten verwendet
werden. Zum Beispiel können
gepackte Werte mit verschiedenen Bitbreiten erhalten und geladen
oder gespeichert werden. Zum Beispiel können 128-Bit- oder 256-Bit-Werte
von einem ersten Speicherplatz erhalten werden, der einem Quellenindikator
entspricht. In diesen Vektordatenwerten können mehrere gepackte Datenelemente
oder -felder vorhanden sein. Zum Beispiel können diese einzelnen Datenelemente
in dem größeren Vektordatenelement
die Form von Doppelwörtern
(Dwords) und Quadwörtern
(Qwords) annehmen, obwohl auch kleinere und größere Datenelemente möglich sind.
Darüber
hinaus können
andere Datentypen verwendet werden, wie etwa Ganzzahl- und Gleitkomma-Datentypen
mit einfacher und doppelter Genauigkeit. Somit können bei einigen Implementierungen gepackte
Werte mit einfacher Genauigkeit (single precision; PS) vorhanden
sein, während
andere Implementierungen mit gepackten Werten mit doppelter Genauigkeit
(double precision; PD) arbeiten können.
-
Der
Begriff „Register" wird hier benutzt,
um Speicherplätze
eines Prozessors auf der Platine zu bezeichnen, die als Teil von
Makrobefehlen zum Identifizieren von Operanden verwendet werden.
Mit anderen Worten, die Register, auf die hier Bezug genommen wird,
sind solche, die von außerhalb
des Prozessors (aus der Perspektive eines Programmierers) zu sehen
sind. Die Register einer Ausführungsform
sollten in ihrer Bedeutung jedoch nicht auf einen bestimmten Schaltkreistyp
beschränkt
werden. Vielmehr braucht ein Register einer Ausführungsform nur Daten speichern
und bereitstellen zu können
und die hier beschriebenen Funktionen ausführen zu können. Die hier beschriebenen
Register können
durch Schaltungen in einem Prozessor unter Verwendung mehrerer verschiedener
Verfahren implementiert werden, wie etwa dedizierte physische Register,
dynamisch zugewiesene physische Register, die eine Register-Umbenennung
verwenden, Kombinationen von dedizierten und dynamisch zugewiesenen
physischen Registern usw. Bei einer Ausführungsform speichern Ganzzahlregister
32-Bit- oder 64-Bit-Ganzzahldaten. Eine Registerdatei einer Ausführungsform
enthält
außerdem
Multimedia-SIMD-Register (z. B. XMM) für gepackte Daten. Diese Register
können
128 Bit breite XMM-Register und 256 Bit breite Register (die die
XMM-Register in ihren niedrigwertigen Bits enthalten können) für die Technologien
SSE2, SSE3, SSE4, GSSE und darüber
hinaus (was generisch als „SSEx" bezeichnet wird)
haben, um diese gepackten Datenoperanden zu halten.
-
Im
Allgemeinen ist ein Datenelement ein einzelnes Datenelement, das
in einem einzelnen Register oder Speicherplatz mit anderen Datenelementen
der gleichen Länge
gespeichert wird. Bei gepackten Datensequenzen für die SSEx-Technologie beträgt die Anzahl
von Datenelementen, die in einem XMM-Register gespeichert werden,
128 Bit (die auf größere Breiten,
z. B. 256 Bit oder 512 Bit, erweitert werden können), dividiert durch die
Länge,
in Bit, eines einzelnen Datenelements. Beispiele für einen
128 Bit breiten Operanden sind gepackte Datenelemente mit sechzehn
Byte. Ein Byte wird hier als 8-Bit-Daten definiert. Informationen
für jedes
Byte-Datenelement werden im Bit 7 bis Bit 0 für das Byte 0, im Bit 15 bis
Bit 8 für
das Byte 1, im Bit 23 bis Bit 16 für das Byte 2 und schließlich im
Bit 120 bis Bit 127 für
das Byte 15 gespeichert. Ebenso beträgt bei gepackten Datensequenzen
für die
MMX- und SSE-Technologie die Anzahl von Datenelementen, die in einem MMX-Register
gespeichert werden, 64 Bit, dividiert durch die Länge, in
Bit, eines einzelnen Datenelements. Ein gepackter Wortvektor kann eine
Länge von
128 Bit haben und acht gepackte Wortdatenelemente enthalten, wobei
jedes gepackte Wort sechzehn Bit Informationen enthält. Ein
gepacktes Doppelwort kann eine Länge
von 128 Bit haben und vier gepackte Doppelwort-Datenelemente enthalten,
wobei jedes gepackte Vektor-Doppelwort-Datenelement 32 Bit Informationen
enthält.
Ein gepackter Quadwort-Vektor kann eine Länge von 128 Bit haben und enthält zwei
gepackte Quadwort-Datenelemente.
Natürlich
kann bei 256-Bit-Vektoren die doppelte Anzahl dieser Datentypen
vorhanden sein. Es dürfte
wohlverstanden sein, dass diese gepackten Datenformate weiter auf
andere Registerlängen,
zum Beispiel auf 96 Bit, 160 Bit, 192 Bit, 224 Bit, 256 Bit oder mehr,
erweitert werden können.
Darüber
hinaus ist klar, dass verschiedene Darstellungen von gepackten Datentypen
mit und ohne Vorzeichen in Multimedia-Registern nach einer Ausführungsform
der vorliegenden Erfindung gespeichert werden können.
-
Bei
einigen Implementierungen können
Ladeformen eines bedingten SIMD-Datenübertragungsbefehls
zum Laden von gepackten Werten aus z. B. 128-Bit- (bei XMM-Formen) oder 256-Bit-Speicherplätzen in ein
Ziel-XMM-Register einer gegebenen Breite z. B. unter Verwendung
von Maskenwerten verwendet werden, die aus einem Vektor-Maskenregister
(z. B. in XMM0 gespeichert) geholt werden können. Bei einer Ausführungsform
kann diese Maske aus dem höchstwertigen
Bit jedes Dwords (Formen mit einfacher Genauigkeit) oder dem höchstwertigen
Bit jedes Qwords (Formen mit einfacher Genauigkeit) des Maskenregisters
berechnet werden. Die Maske kann als Ergebnis eines SIMD-Vergleichsbefehls
abgeleitet werden. Dieser Befehl setzt die Zielregister-Teiloperanden
entweder alle auf „1" oder „0". Einige Implementierungen
können
ein Bit [z. B. das höchstwertige
Bit (MSB)] des Vergleichsziels als Maskenbit verwenden. Wenn sie
auf „0" gesetzt sind, erfolgt
für keines
der Bits der Maske eine entsprechende Ladung, und das entsprechende
Feld des Ziel-Speicherplatzes wird auf null gesetzt.
-
Bei
einigen Implementierungen können
mit Speicherformen eines bedingten SIMD-Datenübertragungsbefehls gepackte
Werte aus einem Quellenspeicher, wie etwa einem XMM-Register, an einem
Ziel-Speicherplatz [z. B. einem 128-Bit-(XMM-Formen)-Speicherplatz]
unter Verwendung von Werten gespeichert werden, die aus einem Vektormaskenregister,
das z. B. in XMM0 gespeichert ist, geholt werden können. Bei
einer Ausführungsform
kann diese Maske auch aus dem höchstwertigen
Bit jedes Dwords (Formen mit einfacher Genauigkeit) oder dem höchstwertigen
Bit jedes Qwords (Formen mit einfacher Genauigkeit) des Maskenregisters
berechnet werden. Wenn sie auf „0" gesetzt sind, erfolgt für keines
der Bits der Maske eine entsprechende Speicherung, und das entsprechende
Feld des Ziel-Speicherplatzes wird nicht geändert.
-
Bezugnehmend
auf Tabelle 1, in der eine Aufstellung verschiedener Flavors von
Vektormaskenlade- und -speicherbefehlen nach einer Ausführungsform
der vorliegenden Erfindung gezeigt ist. In Tabelle 1 sind mehrere
einzelne Befehle jeweils zum Ausführen einer gegebenen bedingten
gepackten SIMD-Lade- oder -Speicheroperation an bestimmten Datentypen
gezeigt. Jeder Befehl entspricht außerdem einem Opcode. Die Befehle
nehmen jeweils die Form eines Befehlsnamens (z. B. VMASKMOVPS) an,
an den sich ein Ziel-Indikator
und ein Quellenindikator anschließen. Zum Beispiel dient der
erste Befehl in Tabelle 1 (d. h. VMASKMOVPS) zum Aktivieren des
Ladens von gepackten Werten mit einfacher Genauigkeit von einem
Quellen-Speicherplatz, nämlich
128 Bit Speicher (m128), an einen Ziel-Speicherplatz, nämlich das Register XMM1. Darüber hinaus
soll diese Ladeoperation unter Verwendung einer Maske an einem vorgegebenen
Speicherplatz, z. B. XMM0, ausgeführt werden, der als Vektormaskenregister
verwendet werden kann. Man beachte, dass die Bezeichnung YMM zum
Identifizieren von Registern mit einer größeren Breite, z. B. 256 Bit,
dient. Tabelle 1
Opcode | Befehl | Beschreibung |
VEX
128.66
38 A6/r | VMASKMOVPS
XMM1,
m128 | Lädt gepackte
Werte mit einfacher Genauigkeit unter Verwendung einer Maske aus
dem Speicher in XMM0 |
VEX
256.66
38 A6/r | VMASKMOVPS
YMM1,
m256 | Lädt gepackte
Werte mit einfacher Genauigkeit unter Verwendung einer Maske aus
dem Speicher in YMM0 |
VEX
128.66
38 A7/r | VMASKMOVPD
XMM1,
m128 | Lädt gepackte
Werte mit doppelter Genauigkeit unter Verwendung einer Maske aus
dem Speicher in XMM0 |
VEX
256.66
38 A7/r | VMASKMOVPD
YMM1,
m256 | Lädt gepackte
Werte mit doppelter Genauigkeit unter Verwendung einer Maske aus
dem Speicher in YMM0 |
VEX
128.66
38 A8/r | VMASKMOVPS
m128,
XMM1 | Speichert
gepackte Werte mit einfacher Genauigkeit unter Verwendung einer
Maske in XMM0 ab |
VEX
256.66
38 A8/r | VMASKMOVPS
m256,
YMM1 | Speichert
gepackte Werte mit einfacher Genauigkeit unter Verwendung einer
Maske in YMM0 ab |
VEX
128.66
38 A9/r | VMASKMOVPD
m128,
YMM1 | Speichert
gepackte Werte mit doppelter Genauigkeit unter Verwendung einer
Maske in XMM0 ab |
VEX
256.66
38 A9/r | VMASKMOVPD
m256,
YMM1 | Speichert
gepackte Werte mit doppelter Genauigkeit unter Verwendung einer
Maske in YMM0 ab |
-
Da
es relativ ineffizient sein kann, eine Maskenladeoperation, bei
der jedes einzelne gepackte Datenelement in einem Vektor oder einem
anderen SIMD-Datenelement einzeln aus dem Speicher geladen wird,
zu implementieren, da Prüfungen,
Zweige und zahlreiche kleine (z. B. 32-Bit-) Ladeoperationen erforderlich
sind, können
Ausführungsformen
eine Ladung mit voller Breite spekulativ durchführen. Insbesondere kann, um mehrere
einzelne Ladungen von gepackten Datenelementen zu vermeiden, eine
volle Ladung (z. B. 128 Bit oder 256 Bit), z. B. aus einem normalen
Write-back(WB)-Speicher, auch dann spekulativ durchgeführt werden, wenn
ein Teil davon maskiert ist (und hinsichtlich der Architektur als
nicht-durchgeführt
angesehen wird). Das geschieht deshalb, weil das Laden von einem
WB-Speicherplatz normalerweise spekulativ (mit Prefetching usw.)
erfolgen kann. Um jedoch Nebenwirkungen durch Lesen von Daten von
einem Masken-Speicherplatz zu vermeiden, können zusätzliche Schritte ausgeführt werden.
Beispiele für
Nebenwirkungen des Lesens von Daten von einem Masken-Speicherplatz
sind Sicherheitsprobleme, nicht-deterministisches Verhalten und
so weiter. Somit führen
Maskenladungen zu Nullen an maskierten Speicherplätzen. Dadurch
ist der eigentliche Ablauf bei einer Maskenladeoperation eine volle
Ladung (128 Bit, 256 Bit), an die sich eine UND-Verknüpfung mit dem
Maskenregister (z. B. YMM0/XMM0-Vorzeichenbits) anschließt, um alle
Maskenspeicherplätze
zu nullen.
-
Eine
Maskenlade-/-speicheroperation kann unter Verwendung der Mikrocode(μcode)-Verarbeitung nicht-spekulativ
implementiert werden. Um jedoch Leistungsvorteile zu erzielen, kann
die Hardware eine spekulative Ladung (oder Speicherung) mit voller
Breite befehlen. Wenn ein Fehler (real oder in anderer Weise) auftritt,
kann ein μcode-Handler
abgearbeitet werden. Wenn zum Beispiel Ladungen das Ende einer Seite (oder
eines Segments) kreuzen, kann nur dann eine Ausnahme aufgestellt
werden, wenn dieser Teil nicht maskiert ist, oder sie kann nur für Operationen
an nicht-cachefähigen
Daten aufgestellt werden. In diesen Fällen kann ein Fehler (Seitenfehler,
Segmentverletzung, Daten-Breakpoint usw.) entstehen, und dadurch
erzeugt die Hardware eine μcode-Ausnahme.
Der μcode-Ausnahmen-Handler
prüft,
ob die Ausnahme durch einen Maskenladebefehl auftritt. Wenn die
Ausnahme in einem anderen Befehl auftritt, kann der Handler einen
normalen Ausnahmen-Ablauf durchführen.
Andernfalls startet er die Ausführung
des Maskenladebefehls unter Verwendung eines langsamen μcodes neu,
wodurch die Maskenspeicherplätze übersprungen
werden. Ebenso geht die Hardware zu dem Ausnahmen-Handler, um ihn
langsam abzuarbeiten, wenn sie erkennt, dass der Speichertyp nicht
cachefähig
(un-cacheable; UC) ist und somit keine spekulative Ladung durchgeführt werden kann.
-
Bezugnehmend
nun auf 2, in der ein Ablaufdiagramm
eines Verfahrens zum Ausführen
einer Maskenladeoperation nach einer Ausführungsform der vorliegenden
Erfindung gezeigt ist. Ein Verfahren 200 kann durch Empfangen
eines Vektormaskenladebefehls in einem Prozessor beginnen (Block 220).
Zum Beispiel kann bei zahlreichen Implementierungen ein Nutzerebenenbefehl,
z. B. ein Befehl eines Befehlsvorrats mit einer gegebenen Prozessorbefehlsvorratsarchitektur
(prozessor instruction set architecture; prozessor ISA), in dem
Prozessor empfangen werden. Außer
dem Befehl können
auch Quellen- und Ziel-Indikatoren mit dem Befehl empfangen werden.
-
Immer
noch bezugnehmend auf 2, kann in einem Block 225 ein
mit dem Befehl assoziiertes Flag gesetzt werden. Insbesondere kann
ein Maskenladeflag gesetzt werden, um anzugeben, dass der entsprechende
Befehl ein Vektormaskenladebefehl ist. Die Verwendung dieses Flags
wird später
näher erläutert. Dann
kann bei einem Block 230 eine Ladeoperation mit voller
Breite ausgeführt
werden, und die geladenen Daten können in einem Zwischenspeicher
gespeichert werden. Insbesondere kann die Ladeoperation mit voller
Breite eine spekulative Ladeoperation sein, bei der Daten an dem
Quellen-Speicherplatz, der einem Platz im Speicher entsprechen kann,
spekulativ in einen Zwischenspeicher des Prozessors geladen werden
können. Die
Daten können
zum Beispiel in ein nicht-sichtbares Zwischenregister geladen werden.
-
Immer
noch bezugnehmend auf 2, kann dann ermittelt werden,
ob während
der Ausführung
der Operation eine Ausnahme aufgetreten ist (Raute 235).
Wenn zum Beispiel während
der Operation eine Ausnahme (z. B. ein Seitenfehler, eine Segmentverletzung,
ein Daten-Breakpoint oder dergleichen) auftritt, kann eine Ausnahme
erzeugt werden. Wenn nicht, geht die Steuerung zu einem Block 240,
wo eine optimierte Maskenladeoperation realisiert werden kann.
-
Immer
noch bezugnehmend auf 2, wenn keine Ausnahme erkannt
wird, geht die Steuerung zu dem Block 240, wo eine mitlaufende
UND-Verknüpfung
zwischen den geladenen Daten und dem mit dem Vektormaskenladebefehl
assoziierten Maskenwert durchgeführt
werden kann. Insbesondere kann bei einigen Ausführungsformen der Maskenwert
mehreren Bits entsprechen, die jeweils mit einem anderen gepackten
Datenelement der geladenen Daten assoziiert sind. Bei einer Ausführungsform
kann eine Maske, die die Maskenwerte enthält, aus dem höchstwertigen
Bit jedes Dwords (Formen mit einfacher Genauigkeit) oder dem höchstwertigen
Bit jedes Qwords (Formen mit doppelter Genauigkeit) des Maskenregisters
errechnet werden. Wenn die Bits der Maske auf „0" gesetzt sind, erfolgt bei keinem der
Bits der Maske eine entsprechende Ladung, und bei jedem der Bits
der Maske wird das entsprechende Feld des Ziels auf null gesetzt.
Oder bei einigen Implementierungen kann das Ziel für Masken-Operanden
unberührt
bleiben. Wenn durch Ausführen
einer mitlaufenden UND-Verknüpfung
das entsprechende Bit einen Wert Eins hat, ist das Ergebnis das
Gleiche wie bei dem Datenelement. Das Ergebnis dieser mitlaufenden
UND-Verknüpfung
kann dann in dem Zielspeicher gespeichert werden (Block 245).
Bei einigen Ausführungsformen
kann zum Beispiel der Zielspeicher ein erweitertes Register sein,
das in dem Ziel-Indikator des Vektormaskenladebefehls angegeben
ist. Das Zielregister kann einem sichtbaren Register entsprechen,
wie etwa einem erweiterten Multimedia-Register, wie etwa einem 128-Bit-
oder einem größeren Register,
zum Beispiel einem 256-Bit-Register.
-
Immer
noch bezugnehmend auf 2, wenn eine Ausnahme erkannt
wird, geht die Steuerung zu einer Raute 250, wo ermittelt
werden kann, ob das Maskenflag (das vorstehend bei Block 225 erörtert wurde) gesetzt
ist. Wenn nicht, wird eine Ausnahme für einen anderen Befehl erzeugt,
und dadurch kann die Ausnahme mit einem entsprechenden Ausnahmen-Handler
verarbeitet werden (Block 255). Zum Beispiel kann ein Hardware-
oder Software-Ausnahmen-Handler den gegebenen Fehler verarbeiten.
-
Wenn
hingegen das Maskenflag gesetzt ist, geht die Steuerung zu einem
Block 260, wo eine nicht-optimierte (d. h., nicht-spekulative)
Ladung der angeforderten Daten durchgeführt werden kann. Insbesondere kann
diese nicht-optimierte Ladeoperation einzeln für jedes einzelne Datenelement
in der Quelle ausgeführt werden.
Somit kann bei dem Block 260 die Ladeoperation unter Verwendung
eines Langsame-Mikrocodesequenz-Handlers neu gestartet werden. Auf
diese Weise können
die unmaskierten Teile der Quelle einzeln in den Zielspeicher geladen
werden. Eine spezielle Implementierung zum Abarbeiten dieses Mikrocode-Handlers wird
weiter unten unter Bezugnahme auf 3 erörtert.
-
Auf
diese Weise kann unter Verwendung des in der Ausführungsform
von 2 beschriebenen Verfahrens eine bedingte gepackte
SIMD-Ladung durchgeführt
werden, um ein Vektordatenelement unter einer Maske an einen Ziel-Speicherplatz
zu laden. Wie vorstehend dargelegt worden ist, können mit einigen Implementierungen
gepackte Datenelemente, wie etwa gepackte Werte mit einfacher Genauigkeit
oder gepackte Werte mit doppelter Genauigkeit, von einer Quelle,
wie etwa einem Speicher (z. B. einem 128-Bit-Speichercluster oder
einem 256-Bit-Speichercluster),
in einen Zielspeicher geladen werden, wie etwa ein oder mehrere Architekturregister,
z. B. ein erweitertes Multimedia-Register, wie etwa einen niedrigwertigen
Teil eines 256-Bit-Registers oder das gesamte 256-Bit-Register.
Es ist zwar die spezielle Implementierung in der Ausführungsform
von 2 beschrieben worden, aber der Schutzumfang der
vorliegenden Erfindung ist diesbezüglich nicht beschränkt.
-
Bezugnehmend
nun auf 3, in der ein Ablaufdiagramm
eines Verfahrens zum Ausführen
einer nicht-optimierten Vektormaskenladeoperation nach einer weiteren
Ausführungsform
der vorliegenden Erfindung gezeigt ist. Man beachte, dass ein Verfahren 270,
das in 3 gezeigt ist, der nicht-optimierten Ladeoperation
entsprechen kann, die vorstehend bei Block 260 von 2 beschrieben
worden ist.
-
Wie
in 3 gezeigt ist, kann das Verfahren 270 durch
Erhalten von Maskenindikatoren beginnen, die mit der Maskenladeoperation
verbunden sind (Block 272). Wie vorstehend dargelegt worden
ist, können
bei einer Ausführungsform
die Maskenindikatoren jeweils ein einzelnes Bit sein, das mit einem
anderen gepackten Datenelement der zu ladenden Vektordaten assoziiert
ist. Von dem Block 272 geht die Steuerung zu einer Raute 274,
wo ermittelt werden kann, ob alle Maskenindikatoren einen zweiten
Wert haben. Bei einer Ausführungsform
kann der zweite Wert einem logischen Wert Null entsprechen, mit
anderen Worten, die Maske wird für
die gegebenen entsprechenden Datenelemente festgelegt. Wenn alle
Maskenindikatoren den zweiten Wert haben, geht die Steuerung zu
einem Block 275, wo alle Nullen in den Zielspeicher geschrieben
werden können. Da
alle Datenelemente maskiert werden sollen, können alle Nullen direkt geschrieben
werden und das Verfahren 270 kann beendet werden, wodurch
eine effiziente Beendigung der Ladeoperation ermöglicht wird, wenn alle Daten
maskiert werden sollen.
-
Wenn
bei der Raute 274 ermittelt wird, dass nicht alle Indikatoren
den zweiten Wert haben, geht die Steuerung zu einem Block 276,
wo die Quellen- und Ziel-Speicherplätze auf das niedrigstwertige
Feld gesetzt werden können.
Wenn man zum Beispiel annimmt, dass der Ziel-Indikator des Vektormaskenladebefehls
für ein
Zielregister XMM1 ist, so kann der Ziel-Speicherplatz auf das niedrigste Datenelementfeld
in diesem Register gesetzt werden, z. B. die Bits [31:0]. Ebenso
kann der Quellen-Speicherplatz eine niedrigwertige Position eines
Speichersegments, z. B. mem0, sein.
-
Die
Steuerung geht dann zu einer Raute 278, wo ermittelt werden
kann, ob der entsprechende Maskenindikator für dieses gepackte Datenelement
einen ersten Wert hat. Der erste Wert kann zum Beispiel einem Wert
Eins entsprechen, der angibt, dass das gegebene Datenelement unmaskiert
sein soll. Wenn dem nicht so ist und der mit dem entsprechenden
Feld assoziierte Maskenindikator stattdessen einen Wert Null hat,
können
alle Nullen in diese Bits des Zielregisters geschrieben werden (Block 280).
Wenn hingegen bei der Raute 278 ermittelt wird, dass der
Maskenindikator einen ersten Wert, z. B. einen Wert Eins, hat, kann
eine Ladeoperation ausgeführt
werden, um den gepackten Wert von dem Quellen-Speicherplatz in das
Zielfeld zu laden (Block 285). Auf diese Weise kann eine
Ladeoperation ausgeführt
werden, um das Lesen des gegebenen gepackten Datenelements von dem
Quellen-Speicherplatz und das Laden des gepackten Datenelements
in den gegebenen Teil des Ziel-Speicherplatzes zu ermöglichen.
-
Von
den Blöcken 280 und 285 geht
die Steuerung zu einer Raute sb0, wo ermittelt werden kann, ob das
Laden an den Ziel-Speicherplatz zu Ende ist. Wenn ja, kann das Verfahren 270 beendet
werden. Andernfalls geht die Steuerung zu einem Block 295,
wo der Quellen-Speicherplatz und der Ziel-Speicherplatz inkrementiert
werden können.
Die Steuerung geht dann zu der Raute 278 zur weiteren Abarbeitung
zurück,
damit weitere gepackte Datenelemente des Vektordatenelements an
den Ziel-Speicherplatz geladen werden können, wenn sie unmaskiert sind.
Es ist zwar diese spezielle Implementierung in der Ausführungsform
von 3 beschrieben worden, aber der Schutzumfang der
vorliegenden Erfindung ist diesbezüglich nicht beschränkt.
-
Bezugnehmend
nun auf Tabelle 2, in der ein Pseudocode zum Ausführen einer
Maskenladeoperation nach einer Ausführungsform der vorliegenden
Erfindung gezeigt ist. Insbesondere zeigt Tabelle 2 einen Pseudocode
zum Durchführen
einer 256-Bit-Ladung von gepackten Datenelementen mit einfacher
Genauigkeit von einem Speicherplatz (d. h., mem-mem+28) an einen Ziel-Speicherplatz
(d. h., DEST[255:0]).
-
-
Wie
in Tabelle 2 gezeigt ist, kann also die langsame Mikrocodesequenz
mehreren einzelnen Ladeoperationen entsprechen, die nur dann ausgeführt werden,
wenn das entsprechende Maskenbit für das gegebene gepackte Datenelement
auf eins gesetzt ist. Andernfalls wird die Ladung nicht durchgeführt, und
das Zielfeld wird mit Nullen gefüllt.
Somit wird diese Sequenz von Ladeoperationen von einer niedrigen
zu einer hohen Adresse geordnet. Man beachte, dass ein Fehler dazu
führen
kann, dass die Sequenz von Anfang an neu startet, sodass die gleiche
Adresse mehrmals gelesen oder geschrieben werden kann.
-
Die
Grundoperation eines Maskenspeicherbefehls ist einer Maskenladung ähnlich,
die vorstehend beschrieben worden ist. Allgemein kann angenommen
werden, dass die Speicherung nicht fehlerhaft ist und eine Speicheroperation
mit voller Breite entsprechend der Maske ausgeführt werden kann. Bei Fehlern
(wie Seitenfehlern, wie etwa Blindfehlern und UC-Speicherungen) kann der μcode aktiviert
werden, um sie langsam zu verarbeiten. Der Unterschied zwischen
Maskenlade- und Maskenspeicheroperationen besteht darin, dass das Speicher-Teilsystem
des Prozessors den Maskenwert erhält, sodass am Ende der Ausführung (d.
h., wenn der ältere
Speicher zu arbeiten aufhört)
der Cache-Speicher oder andere Zielspeicher nur in dem nichtmaskierten Bereich
aktualisiert wird. Das geschieht durch einen μop-Ablauf, der die Maskenbits
in das Speicher-Teilsystem verschiebt. Und da ein Teil der in dem
Speicher-Teilsystem
gespeicherten Daten potentiell nicht gültig ist (d. h., einer Maskierung
unterzogen wird), können
die Daten während
des Wartens auf die Ausführung
der Maskenspeicheroperationen (z. B. durch eine Ladespeicher-Vorwärtsoperation)
nicht verwendet werden.
-
Bezugnehmend
nun auf 4, in der ein Ablaufdiagramm
eines Verfahrens zum Ausführen
einer Maskenspeicheroperation nach einer Ausführungsform der vorliegenden
Erfindung gezeigt ist. Ein Verfahren 300 kann durch Empfangen
eines Vektormaskenspeicherbefehls in einem Prozessor beginnen (Block 320). Zum
Beispiel kann bei zahlreichen Implementierungen ein Nutzerebenenbefehl
in dem Prozessor empfangen werden. Außer dem Befehl können auch
Quellen- und Ziel-Indikatoren mit dem Befehl empfangen werden.
-
Immer
noch bezugnehmend auf 4, kann bei einem Block 325 eine
mit dem Befehl assoziierte Maske aus dem Maskenregister extrahiert
werden. Wie vorstehend dargelegt worden ist, können zum Beispiel spezielle
Bits extrahiert werden, die jeweils mit einem gegebenen Datenelement
eines Vektordatenelements assoziiert sind. Außerdem kann ein Flag gesetzt
werden, das mit dem Befehl assoziiert ist. Insbesondere kann ein
Maskenspeicherflag gesetzt werden, um anzugeben, dass der entsprechende
Befehl ein Vektormaskenspeicherbefehl ist. Die Verwendung dieses
Flags wird weiter unten erläutert.
Dann kann bei einem Block 330 eine Speicheroperation mit
voller Breite ausgeführt
werden. Insbesondere kann die Speicheroperation mit voller Breite
einen Eintrag in einem Speicher-Teilsystem des Prozessors erzeugen,
z. B. einem Speicherpuffer, einem Speicherordnungspuffer oder einer
anderen derartigen Speicher-Teilsystem-Komponente.
Der Eintrag kann sowohl die Mikro-Operation (d. h., die Speicheroperation)
als auch die Quellen-Adresse und die Ziel-Adresse, an der die Daten
gespeichert werden sollen, sowie den extrahierten Maskenwert umfassen.
-
Immer
noch bezugnehmend auf 4, kann dann ermittelt werden,
ob während
der Ausführung
der Operation eine Ausnahme aufgetreten ist. Wenn zum Beispiel während der
Operation ein Fehler (z. B. ein Seitenfehler, eine Segmentverletzung,
ein Daten-Breakpoint oder dergleichen) auftritt, kann eine Ausnahme
erzeugt werden. Bei einer Raute 335 kann also ermittelt
werden, ob eine Ausnahme auftritt. Wenn nicht, geht die Steuerung
zu einem Block 340, wo eine optimierte Maskenspeicheroperation
realisiert werden kann.
-
Insbesondere
können
die partiellen Daten der unmaskierten Teile des Vektordatenelements
unter Verwendung der Maskenwerte in den Zielspeicher geschrieben
werden (Block 340). Das heißt, für jedes Bit der Vektormasken-Informationen
in dem Speicher-Teilsystem, das einen ersten Wert (z. B. einen logischen
Wert Eins) hat, kann das entsprechende Vektordatenelement von seinem
Quellen-Speicherplatz an den Ziel-Speicherplatz geschrieben werden,
der ein mit dem Speicher-Teilsystem verbundener Cache-Speicher sein
kann, und das Vektordatenelement kann dann später an den endgültigen Speicherplatz
(z. B. den Hauptspeicher) gesendet werden.
-
Immer
noch bezugnehmend auf 4, wenn eine Ausnahme erkannt
wird, geht die Steuerung zu einer Raute 350, wo ermittelt
werden kann, ob das Maskenflag (das vorstehend bei Block 325 erörtert wurde) gesetzt
ist. Wenn nicht, wird eine Ausnahme für einen anderen Befehl erzeugt,
und dadurch kann die Ausnahme mit einem entsprechenden Ausnahmen-Handler
verarbeitet werden (Block 355). Zum Beispiel kann ein Hardware-
oder Software-Ausnahmen-Handler den gegebenen Fehler verarbeiten.
-
Wenn
hingegen das Maskenflag gesetzt ist, geht die Steuerung zu einem
Block 360, wo eine nicht-optimierte (d. h., nicht-spekulative)
Speicherung der angeforderten Daten durchgeführt werden kann. Insbesondere
kann diese nicht-optimierte Speicheroperation einzeln für jedes
einzelne Datenelement in der Quelle ausgeführt werden. Somit kann bei
dem Block 360 die Speicheroperation unter Verwendung eines
Langsame-Mikrocodesequenz-Handlers neu gestartet werden. Auf diese
Weise können
die unmaskierten Teile der Quelle einzeln in den Zielspeicher geladen
werden. Eine spezielle Implementierung zum Abarbeiten dieses Mikrocode-Handlers
wird weiter unten unter Bezugnahme auf 5 erörtert.
-
Auf
diese Weise kann unter Verwendung des in der Ausführungsform
von 4 beschriebenen Verfahrens eine bedingte gepackte
SIMD-Speicherung durchgeführt
werden, um ein Vektordatenelement unter einer Maske an einem Ziel-Speicherplatz
zu speichern. Wie vorstehend dargelegt worden ist, können mit
einigen Implementierungen gepackte Datenelemente, wie etwa gepackte
Werte mit einfacher Genauigkeit oder gepackte Werte mit doppelter
Genauigkeit, von einer Quelle, wie etwa einem oder mehreren Architekturregistern, z.
B. einem erweiterten Multimedia-Register, wie etwa einem niedrigwertigen
Teil eines 256-Bit-Registers
oder dem gesamten 256-Bit-Register, in einem Zielspeicher gespeichert
werden, wie etwa einem Speicher (z. B. einem 128-Bit-Speichercluster
oder einem 256-Bit-Speichercluster). Es ist zwar die spezielle Implementierung in
der Ausführungsform
von 4 beschrieben worden, aber der Schutzumfang der
vorliegenden Erfindung ist diesbezüglich nicht beschränkt. Bezugnehmend
nun auf 5, in der ein Ablaufdiagramm
eines Verfahrens zum Ausführen
einer nicht-optimierten Vektormaskenspeicheroperation nach einer
weiteren Ausführungsform
der vorliegenden Erfindung gezeigt ist. Man beachte, dass ein Verfahren 370,
das in 5 gezeigt ist, der nicht-optimierten Speicheroperation
entsprechen kann, die vorstehend bei Block 360 von 4 beschrieben
worden ist.
-
Wie
in 5 gezeigt ist, kann das Verfahren 370 durch
Erhalten von Maskenindikatoren beginnen, die mit der Maskenspeicheroperation
verbunden sind (Block 372). Wie vorstehend dargelegt worden
ist, können bei
einer Ausführungsform
die Maskenindikatoren jeweils ein einzelnes Bit sein, das mit einem
anderen gepackten Datenelement der zu speichernden Vektordaten assoziiert
ist. Von dem Block 372 geht die Steuerung zu einer Raute 374,
wo ermittelt werden kann, ob alle Maskenindikatoren einen zweiten
Wert, z. B. einen logischen Wert Null, haben. Wenn alle Maskenindikatoren
den zweiten Wert haben, sind keine Speicheroperationen erforderlich
und das Verfahren 370 kann beendet werden, wodurch eine
effiziente Beendigung der Speicheroperation ermöglicht wird, wenn alle Daten
maskiert werden sollen.
-
Wenn
bei der Raute 374 ermittelt wird, dass nicht alle Indikatoren
den zweiten Wert haben, geht die Steuerung zu einem Block 376,
wo die Quellen- und Ziel-Speicherplätze auf das niedrigstwertige
Feld gesetzt werden können.
Wenn man zum Beispiel annimmt, dass der Ziel-Indikator des Vektormaskenspeicherbefehls für ein Speichersegment
ist, so kann der Ziel-Speicherplatz
auf das niedrigste Datenelementfeld in diesem Segment gesetzt werden,
z. B. mem0. Ebenso kann der Quellen-Speicherplatz ein niedrigwertiges
Quellenregister sein, z. B. das Register XMM1, z. B. die Bits [31:0].
-
Die
Steuerung geht dann zu einer Raute 378, wo ermittelt werden
kann, ob der entsprechende Maskenindikator für dieses gepackte Datenelement
einen ersten Wert (z. B. einen Wert Null) hat, die Steuerung kann
dann zu einer Raute 390 gehen. Wenn stattdessen bei der
Raute 378 ermittelt wird, dass der Maskenindikator einen
ersten Wert, z. B. einen Wert Eins, hat, kann eine Speicheroperation
ausgeführt
werden, um den gepackten Wert von dem Quellen-Speicherplatz in das
Zielfeld zu speichern (Block 385). Auf diese Weise kann eine
Speicheroperation ausgeführt
werden, um das Schreiben des gegebenen gepackten Datenelements von dem
Quellen-Speicherplatz
und das Speichern des gepackten Datenelements in den gegebenen Teil
des Ziel-Speicherplatzes
zu ermöglichen.
-
Bei
der Raute 390 kann ermittelt werden, ob die Speicherung
an dem Ziel-Speicherplatz zu Ende ist. Wenn ja, kann das Verfahren 370 beendet
werden. Andernfalls geht die Steuerung zu einem Block 395,
wo der Quellen-Speicherplatz und der Ziel-Speicherplatz inkrementiert
werden können.
Die Steuerung geht dann zu der Raute 378 zur weiteren Abarbeitung
zurück,
damit weitere gepackte Datenelemente des Vektordatenelements an
dem Ziel-Speicherplatz gespeichert werden können, wenn sie unmaskiert sind.
Es ist zwar diese spezielle Implementierung in der Ausführungsform
von 5 beschrieben worden, aber der Schutzumfang der vorliegenden
Erfindung ist diesbezüglich
nicht beschränkt.
-
Bezugnehmend
nun auf Tabelle 3, in der eine Pseudocode-Implementierung einer
Vektormaskenspeicheroperation nach einer Ausführungsform der vorliegenden
Erfindung gezeigt ist. Insbesondere kann der in Tabelle 3 gezeigte
Pseudocode einem VMASKMOVPS-Befehl
zum Ausführen
einer 256-Bit-Speicheroperation entsprechen. Wie gezeigt ist, werden
für jedes
einzelne gepackte Datenelement, das gepackten Datenelementen mit
einfacher Genauigkeit entsprechen kann, wenn das entsprechende Maskenbit
einen ersten Wert, z. B. einen Wert Eins, hat, die Daten an dem
Quellen-Speicherplatz in dem entsprechenden Teil des Ziel-Speicherplatzes gespeichert.
Ansonsten werden keine weiteren Aktionen für das gegebene Datenelement
durchgeführt.
-
-
Bezugnehmend
nun auf 6, in der ein Blockdiagramm
eines Prozessors nach einer Ausführungsform
der vorliegenden Erfindung gezeigt ist. Wie in 6 gezeigt
ist, kann ein Prozessor 400 ein Mehrstufen-Pipeline-Out-of-Order-Prozessor
sein. Der Prozessor 400 ist in 6 mit einer
relativ einfachen Darstellung gezeigt, um verschiedene Merkmale
darzustellen, die in Verbindung mit den vorstehend beschriebenen Maskenlade-
und -speicheroperationen verwendet werden.
-
Wie
in 6 gezeigt ist, weist der Prozessor 400 Front-End-Einheiten 410 auf,
die zum Abrufen von Makrobefehlen, die ausgeführt werden sollen, und zum
Vorbereiten der Befehle auf die spätere Verwendung in dem Prozessor
verwendet werden können.
Die Front-End-Einheiten 410 können zum Beispiel einen Befehls-Prefetcher,
einen Befehlsdecodierer und einen Trace-Cache zusammen mit einem
Mikrocodespeicher sowie einen μop-Speicher
umfassen. Der Befehls-Prefetcher
kann Makrobefehle aus dem Speicher abrufen und kann sie dem Befehlsdecodierer
zuführen,
um sie zu Primitiven, d. h. μops
zur Ausführung
mit dem Prozessor, zu decodieren. Der Trace-Cache kann decodierte μops nehmen
und sie in programmgeordnete Sequenzen zur Speicherung in dem Mikrocodespeicher
assemblieren. Bei komplexen Makrobefehlen kann jedoch der Mikrocodespeicher
die μops
bereitstellen, die für
die Ausführung
der Operation benötigt
werden. Natürlich
können
weitere Komponenten und Funktionen in den Front-End-Einheiten 410 implementiert
werden.
-
Zwischen
die Front-End-Einheiten 410 und Ausführungseinheiten 420 ist
eine Out-of-Order(OOO)-Maschine 415 geschaltet,
die dazu verwendet werden kann, die Mikrobefehle zu empfangen und sie
für die
Ausführung
vorzubereiten. Insbesondere kann die OOO-Maschine 415 verschiedene
Puffer haben, um den Mikrobefehlsfluss neu zu ordnen und verschiedene
Ressourcen zuzuweisen, die zur Ausführung benötigt werden, sowie um eine
Umbenennung von Logikregistern in Speicherplätze in verschiedenen Registerdateien,
wie etwa einer Registerdatei 430 und einer erweiterten
Registerdatei 435, durchzuführen. Die Registerdatei 430 kann
getrennte Registerdateien für
Ganzzahl- und Gleitkomma-Operationen haben. Die erweiterte Registerdatei 435 kann
erweiterte Register, wie etwa XMM-Register (z. B. 128-Bit-Register)
und/oder YMM-Register (z. B. 256-Bit-Register), haben, aber bei
einigen Implementierungen können
die XMM-Register auch in niedrigwertigen Bits der YMM-Register untergebracht
sein. Darüber
hinaus kann sich ein Steuerregister 436, das zum Speichern
verschiedener Maskeninformationen verwendet werden kann, in der
erweiterten Registerdatei 435 befinden. Zum Beispiel kann
bei einigen Maskenlade- und -speicheroperationen das Steuerregister 436 einem
XMM0- oder YMM0-Register entsprechen, das Maskeninformationen speichern
kann, aus denen eine Maske zum Ausführen der Maskenlade- und -speicheroperationen
erhalten werden kann.
-
In
den Ausführungseinheiten 420 können verschiedene
Ressourcen vorhanden sein, unter anderem zum Beispiel verschiedene
Ganzzahl-, Gleitkomma- und SIMD-Logikeinheiten und andere spezialisierte
Hardware. Nachdem die Mikrobefehle in den Ausführungseinheiten 420 ausgeführt worden
sind, können
die Ergebnisse für
ein Speicher-Teilsystem des Prozessors bereitgestellt werden, das
einen Speicherordnungspuffer (memory Order buffer; MOB) 440 hat,
der eine Steuerlogik 442, einen Ladepuffer 444 und
einen Speicherpuffer 446 haben kann. Die MOB-Steuerlogik 442,
die ein Steuergerät
oder dergleichen sein kann, dient zum Steuern der Puffer in dem
MOB 440. Der Ladepuffer 444 kann zum Speichern
von Lade-μops
vor ihrer Ausführung
und zum Verfolgen früherer
Ladungen oder anderer Operationen verwendet werden, die beendet
sein müssen,
bevor eine gegebene Speicheroperation selbst beendet werden kann.
Ebenso kann der Speicherpuffer 446 zum Speichern von Operationen
des Speichers, zum Beispiel von Speicheroperationen, und zum Verfolgen
früherer
Operationen des Speichers (normalerweise Ladungen) verwendet werden,
die beendet sein müssen,
bevor eine gegebene Speicheroperation selbst beginnen kann. Der
Ladepuffer 444 kann verschiedene Informationen, die mit
Ladebefehlen assoziiert sind, wie etwa die μop, sowie Identifikatoren für die Quellen- und Ziel-Speicherplätze speichern.
Der Speicherpuffer 446 kann bei einer Ausführungsform
der vorliegenden Erfindung ähnliche
Informationen sowie erweiterte Informationen enthalten, unter anderem
Maskeninformationen zur Verwendung für Maskenspeicheroperationen.
In 6 ist ein Eintrag 445 aus dem Speicherpuffer 446 gezeigt,
der verschiedene Felder enthält,
unter anderem ein μop-Feld
a, ein Zielidentifikator-Feld b, ein Quellenidentifikator-Feld c
und ein Maskenfeld d. Das Maskenfeld d kann entsprechende Maskenbits
enthalten, die während
der Ausführung
der Speicheroperation zum Ermitteln dienen, ob die entsprechenden
gepackten Datenelemente abgespeichert werden sollen oder nicht.
Wie in 6 gezeigt ist, ist der MOB 440 mit einem
Cache 450 verbunden, der bei einer Ausführungsform ein niedriger Cache
(z. B. ein L1-Cache) sein kann, aber der Schutzumfang der vorliegenden
Erfindung ist diesbezüglich
nicht beschränkt.
Von dem Cache 450 kann eine Datenkommunikation mit höheren Caches,
dem Systemspeicher und dergleichen erfolgen. Es ist zwar diese spezielle
Implementierung in der Ausführungsform
von 6 beschrieben worden, aber der Schutzumfang der
vorliegenden Erfindung ist diesbezüglich nicht beschränkt.
-
Somit
können,
wie in 6 gezeigt ist, verschiedene Komponenten des Prozessors 400 mit
z. B. den Ausführungseinheiten 420 und
dem MOB 440 bei einer Ausführungsform der vorliegenden
Erfindung eine Logik zum Ausführen
von Vektormaskenverschiebungsoperationen haben. Auf diese Weise
kann eine Befehlsvorratsunterstützung
für Maskenlade-
und -speicheroperationen erfolgen. Nach dieser ISA-Definition kann
ein Compiler mit kombinierten neuen spekulativen Maskenlade- und
-speicheroperationen eine stärkere
Vektorisierung unter Verwendung von Maskenladungen und -speicherungen
ohne Leistungsverlust als unter Verwendung von normalen unmaskierten
Ladungen und Speicherungen durchführen.
-
Ausführungsformen
können
in vielen verschiedenen Arten von Systemen implementiert werden.
Kommen wir nun zu 7, wo ein Blockdiagramm eines
Systems nach einer Ausführungsform
der vorliegenden Erfindung gezeigt ist. Wie in 7 gezeigt
ist, ist ein Mehrprozessorensystem 500 ein Punkt-zu-Punkt-Verbindungssystem
und weist einen ersten Prozessor 570 und einen zweiten
Prozessor 580 auf, die über
eine Punkt-zu-Punkt-Verbindung 550 verbunden sind. Wie
in 7 gezeigt ist, kann jeder der Prozessoren 570 und 580 ein
Mehrkernprozessor mit einem ersten und einem zweiten Prozessorkern
sein (d. h., Prozessorkernen 574a und 574b und
Prozessorkernen 584a und 584b). Bei einer Ausführungsform
der vorliegenden Erfindung kann jeder Prozessorkern eine Logik haben,
wie sie in 6 gezeigt ist, um die Ausführung von
Einzelbefehls-Vektormaskenverschiebungsoperationen zu ermöglichen.
Auf diese Weise können
Verschiebungsoperationen mit voller Breite spekulativ ausgeführt werden,
und wenn dann eine Ausnahme auftritt, kann ein in dem Prozessor
gespeicherter Mikrocode-Handler Verschiebungsoperationen einzeln
für jedes
nichtmaskierte Datenelement ausführen.
-
In 7 weist
der erste Prozessor 570 weiterhin einen Speichersteuer-Hub
(MCH) 572 und Punkt-zu-Punkt(P-P)-Schnittstellen 576 und 578 auf.
Ebenso weist der zweite Prozessor 580 einen MCH 582 und
P-P-Schnittstellen 586 und 588 auf. Wie in 7 gezeigt
ist, verbinden die MCHs 572 und 582 die Prozessoren
mit entsprechenden Speichern, und zwar einem Speicher 532 und
einem Speicher 534, die Teile des Hauptspeichers [z. B.
eines dynamischen Schreib-Lese-Speichers
(DRAM)] sein können,
der sich lokal an den entsprechenden Prozessoren befindet. Der erste
Prozessor 570 und der zweite Prozessor 580 können über eine
P-P-Verbindung 552 bzw. 554 mit
einem Chipsatz 590 verbunden sein. Wie in 7 gezeigt
ist, weist der Chipsatz 590 P-P-Schnittstellen 594 und 598 auf.
-
Außerdem weist
der Chipsatz 590 eine Schnittstelle 592 zum Verbinden
des Chipsatzes 590 mit einer Hochleistungs-Grafikmaschine 538 auf.
Der Chipsatz 590 kann wiederum über eine Schnittstelle 596 mit
einem ersten Bus 516 verbunden sein. Wie in 7 gezeigt
ist, können
verschiedene E/A-Geräte 514 zusammen
mit einer Busbrücke,
die den ersten Bus 516 mit einem zweiten Bus 520 verbindet,
mit dem ersten Bus 516 verbunden sein. Bei einer Ausführungsform
können
verschiedene Geräte,
unter anderem zum Beispiel eine Tastatur/Maus 522, Kommunikationsgeräte 526 und
eine Datenspeichereinheit 528, wie etwa ein Plattenlaufwerk oder
ein anderes Massenspeichergerät,
die einen Code 530 enthalten kann, mit dem zweiten Bus 520 verbunden
sein. Darüber
hinaus kann ein Audio-E/A-Gerät 524 mit
dem zweiten Bus 520 verbunden sein.
-
Ausführungsformen
können
in einem Code implementiert werden oder können in einem Speichermedium
gespeichert werden, in dem Befehle gespeichert sind, die dazu verwendet
werden können,
ein System so zu programmieren, dass es die Befehle ausführt. Das
Speichermedium kann unter anderem jede Art von Platten sein, unter
anderem Disketten, optische Platten, Compact Disk Read-Only Memories
(CD-ROMs), Compact Disk Rewritables (CD-RWs) und magnetooptische
Platten, Halbleiteranordnungen, wie etwa Nur-Lese-Speicher (ROMs),
Schreib-Lese-Speicher (RAMs), wie etwa dynamische Schreib-Lese-Speicher
(DRAMs), statische Schreib-Lese-Speicher (SRAMs), löschbare
programmierbare Nur-Lese-Speicher
(EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher
(EEPROMs), magnetische oder optische Karten oder jede andere Art
von Medien, die zum Speichern von elektronischen Befehlen geeignet
sind.
-
Die
vorliegende Erfindung ist zwar anhand einer begrenzten Anzahl von
Ausführungsformen
beschrieben worden, aber Fachleute werden daraus zahlreiche Modifikationen
und Abwandlungen erkennen. Die beigefügten Ansprüche sollen alle diese Modifikationen
und Abwandlungen erfassen, die innerhalb des eigentlichen Grundgedankens
und Schutzumfangs dieser vorliegenden Erfindung liegen.