-
Die
vorliegende Patentanmeldung ist eine "Continuation in Part" der
US-Patentanmeldung Nr. 09/952,891 mit
dem Titel „An
Apparatus And Method for Efficient Filtering And Convolution Of
Content Data", angemeldet
am 29. Oktober 2001.
-
Die
Patenanmeldung hängt
mit der gleichzeitig anhängigen
US-Patentanmeldung Nr..../....,.... mit dem Titel „Fast Full
Search Motion Estimation With SIMD Merge Instruction", angemeldet am 25.
Oktober 2002, zusammen.
-
TECHNISCHES GEBIET
-
Die
vorliegende Erfindung betrifft allgemein das Gebiet der Mikroprozessoren
und Computersysteme und insbesondere ein Verfahren und eine Vorrichtung
zur Parallel-Schiebe-Rechts-Zusammenführung von Daten.
-
ALLGEMEINER STAND DER TECHNIK
-
Mit
fortschreitender Prozessortechnologie wird auch neuerer Softwarecode
erzeugt, um auf Maschinen mit diesen Prozessoren abzulaufen. Benutzer
erwarten und verlangen im allgemeinen ungeachtet der Art der verwendeten
Software eine höhere
Leistungsfähigkeit
von ihren Computer. Ein solches Problem kann durch die Arten von
Anweisungen und Operationen, die tatsächlich in dem Prozessor durchgeführt werden, entstehen.
Bestimmte Arten von Operationen benötigen auf der Grundlage der
Komplexität
der Operationen und/oder der Art der benötigten Schaltkreise mehr Zeit,
um abgeschlossen zu werden. Dadurch entsteht eine Gelegenheit, die
Art und Weise der Ausführung
bestimmter komplexer Operationen in dem Prozessor zu optimieren.
-
Seit
mehr als 10 Jahren haben Medienanwendungen die Mikroprozessorentwicklung
angetrieben. Tatsächlich
waren die meisten Datenverarbeitungsaufrüstungen in den letzten Jahren
durch Medienanwendungen motiviert. Diese Aufrüstungen sind vorherrschend
in Verbrauchersegmenten aufgetreten, obwohl auch für die durch
Unterhaltung erweiterte Bildung und Kommunikationszwecke in Unternehmenssegmenten
signifikante Fortschritte zu sehen waren. Zukünftige Medienanwendungen werden
jedoch dessen ungeachtet noch höhere
Rechenanforderungen erfordern. Folglich wird das PC-Erlebnis (Personal
Computing) von morgen sogar noch reicher an audiovisuellen Effekten
und auch leichter zu benutzen sein und, was wichtiger ist, die Datenverarbeitung
wird mit der Kommunikation verschmelzen.
-
Folglich
ist das Anzeigen von Bildern sowie das Abspielen von Audio- und
Videodaten, die hier kollektiv als Inhalt bezeichnet werden, zunehmend
zu populären
Anwendungen für
aktuelle Datenverarbeitungseinrichtungen geworden. Filter- und Faltungsoperationen
gehören
zu den häufiger
an Inhaltdaten, wie zum Beispiel Bildaudio- und Videodaten, durchgeführten Operationen.
Fachleuten ist bekannt, daß Filter-
und Korrelationsberechnungen mit einer Multiplikations-Akkumulations-Operation
berechnet werden, die die Produkte von Daten und Koeffizienten addiert.
Die Korrelation zweier Vektoren A und B besteht aus der Berechnung
der folgenden Summe S:
die sehr
oft mit k = 0 verwendet wird:
-
Im
Fall eines Filters f mit N-Abgriffen, das auf einen Vektor V angewandt
wird, lautet die zu berechnende Summe S wie folgt:
-
Solche
Operationen sind rechnerisch intensiv, bieten jedoch einen hohen
Grad an Datenparallelität, die
durch eine effiziente Implementierung ausgenutzt werden kann, wobei
verschiedene Datenspeichereinrichtungen verwendet werden, wie zum
Beispiel SIMD-Register (Singe Instruction Multiple Data).
-
Anwendungen
von Filteroperationen finden sich in einer größeren Vielfalt von Bild- und
Videoverarbeitungstasks und in der Kommunikation. Verwendungszwecke
für Filter
sind zum Beispiel die Verminderung von Blockartefakten bei MPEG-Video
(Motion Picture Expert Group), das Verringern von Rauschen und Audio,
das Entkoppeln von Wasserzeichen aus Pixelwerten, um die Wasserzeichenerkennung
zu verbessern, Korrelation zur Glättung, Verschärfung, Rauschverminderung,
zum Finden von Rändern
und zum Skallieren der Größen von
Bildern oder Videoeinzelbildern, Aufwärtsabtastung von Videoeinzelbildern
für die
Subpixel-Bewegungsschätzung,
Verbesserung der Audiosignalqualität und Impulsformung und Entzerrung
des Signals bei der Kommunikation. Folglich sind Filter- und Faltungsoperationen
entscheidend für
Datenverarbeitungseinrichtungen, die das Abspielen von Inhalt, darunter
Bild-, Audio- und Videodaten, anbieten.
-
Leider
zielen derzeitige Verfahren und Anweisungen auf die allgemeinen
Bedürfnisse
der Filterung ab und sind nicht umfassend. Tatsächlich unterstützen viele
Architekturen kein Mittel für
effiziente Filterberechnungen für
einen Bereich von Filterlängen
und Datentypen. Zusätzlich
wird eine Datenanordnung in Datenspeichereinrichtungen, wie zum
Beispiel SIMD-Registern, sowie die Fähigkeit des Hinzufügens benachbarter Werte
in einem Register und teilweiser Datentransfers zwischen Registern
im allgemeinen nicht unterstützt. Folglich
erfordern aktuelle Architekturen unnötige Datentypänderungen,
die die Anzahl von Operationen pro Anweisung minimieren und die
Anzahl von zum Ordnen von Daten für Arithmetikoperationen erforderlichen Taktzyklen
vergrößern.
-
Aus
der
US 6 098 087 A ist
ein Verfahren und eine Vorrichtung zur Durchführung von Verschiebungsoperationen
an gepackten Daten bekannt. Bei der Vorrichtung und dem Verfahren
werden m Bit große,
gepackte Datenwörter
(z.B. 32 Bit) mit einer Vielzahl von aus 8 Bit bestehenden Bytes,
die eine Vielzahl von teilweisen Datenwörtern bilden, wobei jedes teilweise
Datenwort n Byte mit n ≥ 1
hat, verschoben. Die Verschiebung erfolgt durch ein Ausgangsschieberegister
(Barrel-Shifter)
um eine Anzahl von Positionen nach links oder nach rechts und bricht
den überlaufenden
Teil automatisch um. Weiterhin ist ein Maskengenerator ausgebildet, der
unterschiedliche 32-Bit-Masken erzeugt, die entsprechend dem Datentyp
(Byte (8Bit), Halbwort (16 Bit) oder Wort (32 Bit)) ausgewählt werden.
Diese Masken werden dann in einer logischen Einheit mit dem verschobenen
32-Bit-Datenwort
kombiniert und ein 32-Bit-Ergebnis erhalten. Dieses Ergebnis ist
gleich einer unabhängigen,
logischen Verschiebungsoperation an jeweils 8 Bit der vier verketteten
Bytes in dem aus Byte gepackten 32-Bit-Wort.
-
Ebenso
wie die vorstehend diskutierte Druckschrift D1 offenbart auch Druckschrift
US 6 275 834 B1 eine
Vorrichtung zum Durchführen
von Schiebevorgängen
an gepackten Daten. In einem Register sind unabhängig voneinander zu verschiebende
Datenelemente gespeichert, während
in einem weiteren Register eine Anzahl der Verschiebungen gespeichert
ist. In einem weiteren Register wird das Ergebnis der Verschiebung abgespeichert.
Mit der Vorrichtung können
sowohl arithmetische als auch logische Verschiebungen durchgeführt werden.
Es werden damit Bits aus Bitblöcken
um eine Verschiebungszahl verschoben und das Ergebnis in einem entsprechenden
Bitblock des Ergebnisses abgespeichert.
-
Diese
beiden herkömmlichen
Verfahren und Vorrichtungen zielen darauf ab, ein vorhandenes Ausgangsschieberegister
nicht veränderen
zu müssen,
um verschiedene Datentypen verschieben zu können; es soll nur ein minimales
Redesign des Schiebers erforderlich sein.
-
Gegenüber dem
Stand der Technik ist es Aufgabe der vorliegenden Erfindung, eine
Anzahl von Datenladeoperationen und Datenladevorgängen zu
verringern, insbesondere ein nicht abgestimmtes Speicherladen und
andere zur Abstimmung von Daten erforderliche Datenmanipulationsvorgänge, die
beispielsweise bei einer Bewegungsschätzung zur Videokompression
enthalten sind.
-
Erfindungsgemäß wird diese
Aufgabe durch ein Verfahren nach Patentanspruch 1 sowie eine Vorrichtung
nach Patentanspruch 19 gelöst.
-
Durch
das erfindungsgemäße Konzept
erfolgt ein Rechtsschieben einer gewünschten Anzahl von Datensegmenten
aus einem Operanden in die höchstwertige
Seite eines zweiten Operanden, während
parallel dieselbe Anzahl von Datensegmenten aus der niedrigstwertigen
Seite des zweiten Operanden herausgeschoben wird, und anschließend werden
die zwei Datenblöcke
als ein Block zusammengeführt.
Dadurch wird ein vereinigter Datenblock erhalten, der ein neues
Datenmuster bildet. Dabei sind die Daten von einem Register, d.h.
der erste Operand, mit den Daten von einem zweiten Datenspeicher,
d.h. dem zweiten Operanden gemäß irgendeiner
gewünschten
Abstimmung durch Verschieben zweier abgestimmter Datenquellen abgestimmt
und werden zusammengeführt.
-
Auf
diese Art und Weise erfolgt eine effiziente Unterstützung von
SIMD-Operationen
sowie eine effiziente Filterung und Faltung von Inhaltsdaten.
-
Diese
und weitere Aufgaben, Merkmale und Vorteile der vorliegenden Erfindung
werden aus der nachfolgenden Beschreibung bevorzugter Ausführungsbeispiele
in Verbindung mit der Zeichnung offensichtlich.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
vorliegende Erfindung wird beispielhaft und nicht einschränkend in
den Figuren der beigefügten Zeichnungen
dargestellt, in denen gleiche Bezugszahlen ähnliche Elemente bezeichnen.
Es zeigen:
-
1 ein
Blockschaltbild eines Computersystems, das eine Ausführungsform
der vorliegenden Erfindung implementieren kann;
-
2 ein
Blockschaltbild einer Ausführungsform
des Prozessors von 1 gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung;
-
3 ein
Blockschaltbild gepackter Datentypen gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung;
-
4A eine
gepackte Bytedarstellung im Register gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
4B eine
gepackte Wortdarstellung im Register gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
4C eine
gepackte Doppelwortdarstellung im Register gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
5 ein
Blockschaltbild der Funktionsweise einer Byte-Shuffle-Anweisung
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
6 ein
Blockschaltbild einer Byte-Multiplikations-Akkumulation-Anweisung
gemäß einer
Ausführungsform
der vorliegenden Erfindung;
-
7A–7C Blockschaltbilder
der Byte-Shuffle-Anweisung von 5, kombiniert
mit der Byte-Multiplikations-Akkumulations-Anweisung von 6 zur
Erzeugung mehrerer Paare summierter Produkte gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung;
-
8A–8B Blockschaltbilder
einer Nachbar-Addieranweisung gemäß einer weiteren Ausführungsform
der vorliegenden Erfindung;
-
9A und 9B zeigen
eine Registerzusammenführungsanweisung
gemäß einer
weiteren Ausführungsform
der vorliegenden Erfindung;
-
10 ein
Blockschaltbild eines Flußdiagramms
für effiziente
Datenverarbeitung von Inhaltsdaten gemäß einer Ausführungsform
der vorliegenden Erfindung;
-
11 ein
Blockschaltbild eines zusätzlichen
Verfahrens zur Verarbeitung von Inhaltsdaten gemäß einer Datenverarbeitungsoperation
gemäß einer
weiteren Ausführungsform
der vorliegenden Erfindung;
-
12 ein
Blockschaltbild eines Flußdiagramms
zur fortgesetzten Verarbeitung von Inhaltsdaten gemäß einer
weiteren Ausführungsform
der vorliegenden Erfindung;
-
13 ein
Blockschaltbild eines Flußdiagramms
einer Registerzusammenführungsoperation
gemäß einer
weiteren Ausführungsform
der vorliegenden Erfindung;
-
14 ein
Flußdiagramm
eines zusätzlichen
Verfahrens zur Auswahl unverarbeiteter Datenelemente aus einer Quellendatenspeichereinrichtung
gemäß einer
beispielhaften Ausführungsform
der vorliegenden Erfindung;
-
15 ein
Blockschaltbild der Mikroarchitektur für einen Prozessor einer Ausführungsform
mit Logikschaltungen zur Durchführung
von Parallel-Schiebe-Rechts-Zusammenführungsoperationen
gemäß der vorliegenden
Erfindung;
-
16A ein Blockschaltbild einer Ausführungsform
einer Logik zur Durchführung
einer Parallel-Schiebe-Rechts-Zusammenführungsoperation an Datenoperanden
gemäß der vorliegenden
Erfindung;
-
16B ein Blockschaltbild einer weiteren Ausführungsform
einer Logik zur Durchführung
einer Schiebe-Rechts-Zusammenführungsoperation;
-
17A die Funktionsweise einer Parallel-Schiebe-Rechts-Zusammenführungsanweisung
gemäß einer
ersten Ausführungsform
der vorliegenden Erfindung;
-
17B die Funktionsweise einer Schiebe-Rechts-Zusammenführungsanweisung
gemäß einer
zweiten Ausführungsform;
-
18A ein Flußdiagramm
einer Ausführungsform
eines Verfahrens zum Rechtsschieben und Zusammenführen von
Datenoperanden;
-
18B ein Flußdiagramm
einer weiteren Ausführungsform
eines Verfahrens zum Rechtsschieben und Zusammenführen von
Daten;
-
19A–B
Beispiele für
die Bewegungsschätzung;
-
20 ein
Anwendungsbeispiel für
die Bewegungsschätzung
und eine resultierende Prädiktion;
-
21A–B
beispielhafte aktuelle und vorherige Einzelbilder, die während der
Bewegungsschätzung verarbeitet
werden;
-
22A–D
die Operationen der Bewegungsschätzung
an Einzelbildern gemäß einer
Ausführungsform
der vorliegenden Erfindung; und
-
23A–B
ein Flußdiagramm
einer Ausführungsform
eines Verfahrens zur Prädiktion
und Schätzung von
Bewegung.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Es
werden ein Verfahren und eine Vorrichtung zur Durchführung einer
Parallel-Schiebe-Rechts-Zusammenführung an
Daten offengelegt. Außerdem
werden ein Verfahren und eine Vorrichtung zur effizienten Filterung
und Faltung von Inhaltsdaten beschrieben. Außerdem werden ein Verfahren
und eine Vorrichtung für eine
schnelle Vollsuchbewegungsschätzung
mit SIMD-Zusammenführungsoperationen
offengelegt. Die hier beschriebenen Ausführungsformen werden im Kontext
eines Mikroprozessors beschrieben, sind jedoch nicht auf einen solchen
beschränkt.
Obwohl die folgenden Ausführungsformen
mit Bezug auf einen Prozessor beschrieben werden, sind andere Ausführungsformen
auf andere Arten von integrierten Schaltungen und Logikbausteinen
anwendbar. Dieselben Techniken und Lehren der vorliegenden Erfindung
können
leicht auf andere Arten von Schaltungen oder Halbleiterbausteinen
angewandt werden, die aus einem höheren Pipeline-Durchsatz und einer
verbesserten Leistungsfähigkeit
Nutzen ziehen können.
Die Lehren der vorliegenden Erfindung sind auf jeden Prozessor oder
jede Maschine anwendbar, der bzw. die Datenmanipuplationen durchführt. Die Erfindung
ist jedoch nicht auf Prozessoren oder Maschinen beschränkt, die
256-Bit-, 128-Bit-, 64-Bit-, 32-Bit- oder 16-Bit-Datenoperationen
durchführen,
und kann auf jeden beliebigen Prozessor oder jede beliebige Maschine
angewandt werden, in dem bzw. der eine Schiebe-Rechts-Zusammenführung von
Daten benötigt
wird.
-
In
der folgenden Beschreibung werden zur Erläuterung zahlreiche spezifische
Einzelheiten dargelegt, um ein umfassendes Verständnis der vorliegenden Erfindung
bereitzustellen. Für
Durchschnittsfachleute ist jedoch erkennbar, daß diese spezifischen Einzelheiten
nicht notwendig sind, um die vorliegende Erfindung auszuüben. In
anderen Fällen
wurden wohlbekannte elektrische Strukturen und Schaltungen nicht
in besonderem Detail dargelegt, um die vorliegende Erfindung nicht
unbedingt zu verdecken. Zusätzlich
liefert die folgende Beschreibung Beispiele und die beigefügten Zeichnungen
zeigen verschiedene Beispiele zur Veranschaulichung. Diese Beispiele
sollten jedoch nicht in einem einschränkenden Sinne aufgefaßt werden,
da sie lediglich Beispiele für
die vorliegende Erfindung geben sollen, statt eine erschöpfende Liste
aller möglichen
Implementierungen der vorliegenden Erfindung zu geben.
-
Bei
einer Ausführungsform
werden die Verfahren der vorliegenden Erfindung in maschinenausführbaren
Anweisungen realisiert. Die Anweisungen können dazu verwendet werden,
zu bewirken, daß ein
Vielzweck- oder Spezialprozessor, der mit den Anweisungen programmiert
ist, die Schritte der vorliegenden Erfindung durchführt. Als
Alternative könnten
die Schritte der vorliegenden Erfindung durch spezifische Hardwarekomponenten
durchgeführt
werden, die festverdrahtete Logik zur Durchführung der Schritte enthalten,
oder durch eine beliebige Kombination von programmierten Computerkomponenten
und angepaßten
Hardwarekomponenten.
-
In
modernen Prozessoren dienen mehrere verschiedene Ausführungseinheiten
zur Verarbeitung und Ausführung
vielfältiger
Codes und vielfältiger
Anweisungen. Es werden nicht alle Anweisungen gleich erzeugt, da
bestimmte Anweisungen schneller abgeschlossen werden können, während andere
eine enorme Anzahl von Taktzyklen in Anspruch nehmen können. Je
schneller der Anweisungsdurchsatz, desto besser ist die Gesamtleistungsfähigkeit
des Prozessors. Es wäre
also vorteilhaft, wenn soviele Anweisungen so schnell wie möglich ausgeführt werden
können.
Es gibt jedoch bestimmte Anweisungen, die eine größere Komplexität aufweisen
und größere Anforderungen
im Hinblick auf die Ausführungszeit
und Prozessorbetriebsmittel stellen. Zum Beispiel gibt es Floating-Point-Anweisungen,
Lade-/Speicheroperationen, Datenverschiebungen usw.
-
Mit
zunehmender Anzahl verwendeter Computersysteme im Internet und in
Multimedia-Anwendungen wurde im Lauf der Zeit zusätzliche
Prozessorunterstützung
eingeführt.
Zum Beispiel sind Integer-/Floating-Point-Einzelanweisungs-Mehrfachdaten-(SIMD-)Anweisungen
und Streaming-SIMD-Erweiterungen (SSE)
Anweisungen, die die Gesamtzahl von Anweisungen, die zur Ausführung einer
bestimmten Programmtask erforderlich ist, reduzieren. Diese Anweisungen
können
die Softwareleistungsfähigkeit
durch paralleles Operieren an mehreren Datenelementen beschleunigen.
Folglich lassen sich in vielfältigen
Anwendungen, wie zum Beispiel Video-, Sprach- und Bild-/Fotoverarbeitung,
Verbesserungen der Leistungsfähigkeit
erzielen. Die Implementierung von SIMD-Anweisungen in Mikroprozessoren und ähnlichen
Arten von Logikschaltungen ist gewöhnlich mit mehreren Problemen
verbunden. Außerdem
führt die
Komplexität von
SIMD-Operationen häufig
zu der Notwendigkeit zusätzlicher
Schaltkreise, um die Daten korrekt zu verarbeiten und zu manipulieren.
-
Ausführungsformen
der vorliegenden Erfindung geben eine Möglichkeit zur Implementierung
einer Parallel-Schiebe-Rechts-Anweisung als ein Algorithmus, der
SIMD-bezogene Hardware verwendet. Bei einer Ausführungsform basiert der Algorithmus
auf dem Konzept des Rechtsschiebens einer gewünschten Anzahl von Datensegmenten
aus einem Operanden in die höchstwertige
Seite eines zweiten Operanden, während dieselbe
Anzahl von Datensegmenten aus der niedrigstwertigen Seite des zweiten
Operanden herausgeschoben wird. Als Konzept kann die Rechts-Schiebe-Zusammenführungsoperation
als eine Operation betrachtet werden, die zwei Datenblöcke als
einen Block zusammenführt
und den vereinigten Block schiebt, um die Datensegmente an der gewünschten
Stelle auszurichten, um ein neues Datenmuster zu bilden. Ausführungsformen
eines Schiebe-Rechts-Zusammenführungsalgorithmus
gemäß der vorliegenden
Erfindung können
also in einem Prozessor implementiert werden, um effizient SIMD-Operationen
zu unterstützen,
ohne die Gesamtleistungsfähigkeit
stark zu beeinträchtigen.
-
Datenverarbeitungsarchitektur
-
1 zeigt
ein Computersystem 100, auf dem eine Ausführungsform
der vorliegenden Erfindung implementiert werden kann. Das Computersystem 100 umfaßt einen
Bus 101 zum Übermitteln
von Informationen und einen Prozessor 109, der an den Bus 101 angekoppelt
ist, um Informationen zu verarbeiten. Außerdem enthält das Computersystem 100 ein
an den Bus 101 angekoppeltes Speichersubsystem 104–107 zum
Speichern von Informationen und Anweisungen für den Prozessor 109.
-
Der
Prozessor 109 enthält
eine Ausführungseinheit 130,
ein Registerfile 200, einen Cache-Speicher 160,
einen Dekodierer 165 und einen internen Bus 170.
Der Cache-Speicher 160 ist an die Ausführungseinheit 130 angekoppelt
und speichert häufig
und/oder vor kurzer Zeit verwendete Informationen für den Prozessor 109.
-
Das
Registerfile 200 speichert Informationen in dem Prozessor 109 und
ist über
den internen Bus 170 an die Ausführungseinheit 130 angekoppelt.
Bei einer Ausführungsform
der Erfindung enthält
das Registerfile 200 Multimedia-Register, wie zum Beispiel
SIMD-Register, zum Speichern von Multimedia-Informationen. Bei einer
Ausführungsform
speichern Multimedia-Register jeweils bis zu einhundertachtundzwanzig
Bit gepackter Daten. Multimedia-Register können fest zugeordnete Multimedia-Register
sein oder Register, die zum Speichern von Multimedia-Informationen
und anderer Informationen verwendet werden. Bei einer Ausführungsform speichern
Multimediaregister Multimediadaten, wenn Multimediaoperationen durchgeführt werden,
und Floating-Point-Daten, wenn Floating-Point-Operationen durchgeführt werden.
-
Die
Ausführungseinheit 130 operiert
an gepackten Daten gemäß den durch
den Prozessor 109 empfangenen Anweisungen, die in der gepackten
Anweisungsmenge 140 enthalten sind. Außerdem operiert die Ausführungseinheit 130 an
skalaren Daten gemäß Anweisungen,
die in Vielzweckprozessoren implementiert sind. Der Prozessor 109 kann
den Anweisungssatz des Pentium®-Mikroprozessors und den gepackten Anweisungssatz 140 unterstützen. Durch
Aufnahme des gepackten Anweisungssatzes 140 in einen Standardmikroprozessoranweisungssatz,
wie zum Beispiel den Anweisungssatz des Pentium®-Mikroprozessors,
können
gepackte Datenanweisungen leicht in bestehende Software integriert
werden (die zuvor für
den Standardmikroprozessoranweisungssatz geschrieben wurde). Außerdem können andere
Standardanweisungssätze
wie zum Beispiel die Anweisungssätze
des PowerPCTM- und des AlphaTM-Prozessors
gemäß der beschriebenen
Erfindung verwendet werden. (Pentium® ist
ein eingetragenes Warenzeichen der Intel Corporation. PowerPCTM ist ein Warenzeichen von IBM, APPLE COMPUTER
und MOTOROLA. AlphaTM ist ein Warenzeichen
der Digital Equipment Corporation).
-
Bei
einer Ausführungsform
enthält
der gepackte Anweisungssatz 140 Anweisungen (die später ausführlicher
beschrieben werden) für
eine Datenverschiebungsoperation (MOVD) 143 und eine Daten-Shuffle-Operation
(PSHUFD) 145 zum Organisieren von Daten in einem Datenspeicherbaustein.
Ein gepacktes Multiplizieren und Akkumulieren für ein vorzeichenloses erstes
Quellenregister und vorzeichenbehaftetes zweites Quellenregister
(PMADDUSBW-Operation 147). Eine gepackte Multiplikation-Akkumulation-Operation (PMADDUUBW-Operation 149)
zur Durchführung
einer Multiplikation und Akkumulation für ein vorzeichenloses erstes
Quellenregister und ein vorzeichenbehaftetes zweites Quellenregister.
Eine gepackte Multiplikation-Akkumulation
(PMADDSSBW-Operation 151) für ein vorzeichenbehaftetes
erstes und zweites Quellenregister und eine Standard-Multiplikation-Akkumulation
(PMADDWD-Operation 153) für ein vorzeichenbehaftetes
erstes und zweites Quellenregister, die 16-Bit-Daten enthalten.
Schließlich
enthält
der gepackte Anweisungssatz eine Nachbar-Addier-Anweisung zum Addieren
benachbarter Byte (PAADDNB-Operation 155), Wörter (PAADDNWD-Operation 157)
und Doppelwörter
(PAADDNDWD 159), Zweiwortwerte (PAADDWD 161),
zwei Wörter
zur Erzeugung eines 16-Bit-Ergebnisses (PAADDNWW-Operation 163),
zwei Quadwörter zur
Erzeugung eines Quadwort-Ergebnisses (PAADDNDD-Operation 165) und eine Registerzusammenführeroperation 167.
-
Durch
Aufnahme des gepackten Anweisungssatzes 140 in den Anweisungssatz
des Vielzweckprozessors 109 zusammen mit zugeordneten Schaltkreisen
zur Ausführung
der Anweisungen können
die von vielen bestehenden Multimediaanwendungen verwendeten Operationen
unter Verwendung gepackter Daten in einem Vielzweckprozessor durchgeführt werden.
Viele Multimediaanwendungen können
also durch Verwendung der vollen Breite des Datenbus eines Prozessors
zur Durchführung
von Operationen an gepackten Daten beschleunigt und effizienter
ausgeführt
werden. Dadurch wird es unnötig,
kleinere Dateneinheiten über
den Datenbus des Prozessors zu transferieren, um eine oder mehrere
Operationen an Datenelementen einzeln auszuführen.
-
Weiter
mit Bezug auf 1 kann das Computersystem 100 der
vorliegenden Erfindung ein Anzeigegerät 121, wie zum Beispiel
einen Monitor, enthalten. Das Anzeigegerät 121 kann eine Zwischeneinrichtung, wie
zum Beispiel einen Einzelbildpuffer, enthalten. Das Computersystem 100 enthält außerdem ein
Eingabegerät 122,
wie zum Beispiel eine Tastatur, und eine Cursorsteuerung 123, wie
zum Beispiel eine Maus oder einen Trackball oder ein Trackpad. Das
Anzeigegerät 121,
das Eingabegerät 122 und
die Cursorsteuerung 123 sind an den Bus 101 angekoppelt.
Das Computersystem 100 kann auch einen Netzwerkverbinder 124 enthalten,
sodaß das
Computersystem 100 Teil eines lokalen Netzwerks (LAN) oder
eines großflächigen Netzwerks (WAN)
ist.
-
Zusätzlich kann
das Computersystem 100 an ein Gerät zur Klangaufzeichnung und/oder
zur Wiedergabe 125 angekoppelt sein, wie zum Beispiel an
einen Audio-Digitalisierer,
der an ein Mikrofon angekoppelt ist, um Spracheingangssignale zur
Spracherkennung aufzuzeichnen. Außerdem kann das Computersystem 100 eine
Videodigitalisierungseinrichtung 126 enthalten, mit der
Videobilder erfaßt
werden können,
eine Hardcopy-Einrichtung 127, wie zum Beispiel einen Drucker,
und ein CD-ROM-Gerät 128.
Die Einrichtungen 124–128 sind
ebenfalls an den Bus 101 angekoppelt.
-
Prozessor
-
2 zeigt
ein ausführliches
Diagramm des Prozessors 109. Der Prozessor 109 kann
in einem oder mehreren Substraten unter Verwendung einer beliebigen
Anzahl von Prozeßtechnologien,
wie zum Beispiel BiCMOS, CMOS und NMOS, implementiert sein. Der
Prozessor 109 umfaßt
einen Dekodierer 202 zum Dekodieren von Steuersignalen
und Daten, die von dem Prozessor 109 verwendet werden.
Daten können
dann über den
internen Bus 205 in dem Registerfile 200 gespeichert
werden. Aus Klarheitsgründen
sollten die Register einer Ausführungsform
in ihrer Bedeutung nicht als auf eine bestimmte Art von Schaltung
beschränkt
werden. Stattdessen muß ein
Register einer Ausführungsform
nur in der Lage sein, Daten zu speichern und bereitzustellen und
die hier beschriebenen Funktionen durchzuführen.
-
Abhängig von
dem Datentyp können
die Daten in Integer-Registern 201, Registern 209,
Statusregistern 208 oder in einem Anweisungszeigeregister 211 gespeichert werden.
Es können
andere Register in dem Registerfile 204 enthalten sein,
wie zum Beispiel Floating-Point-Register. Bei einer Ausführungsform
speichern die Integer-Register 201 zweiunddreißig Bit
Integer-Daten. Bei einer Ausführungsform
enthalten die Register 209 acht Multimediaregister R0 212a bis R7 212h,
zum Beispiel SIMD-Register, die gepackte Daten enthalten. Jedes
Register in den Registern 209 ist einhundertachtundzwanzig
Bit lang. R1 212a, R2 212b und R3 212c sind
Beispiele für
individuelle Register in den Registern 209. Zweiunddreißig Bit
eines Registers in den Registern 209 können in ein Integer-Register in den Integer-Registern 201 verschoben
werden. Ähnlich
kann ein Wert in einem Integer-Register in zweiunddreißig Bit
eines Registers in den Registern 209 verschoben werden.
-
Statusregister 208 geben
den Status des Prozessors 109 an. Das Anweisungszeigeregister 211 speichert
die Adresse der nächsten
auszuführenden
Anweisung. Die Integer-Register 201, die Register 209,
die Statusregister 208 und das Anweisungszeigeregister 211 sind
alle an den internen Bus 205 angeschlossen. Außerdem waren
etwaige zusätzliche
Register an den internen Bus 205 angeschlossen.
-
Bei
einer anderen Ausführungsform
kann ein Teil dieser Register für
zwei verschiedene Datentypen verwendet werden. Zum Beispiel können die
Register 209 und die Integer-Register 201 kombiniert
werden, wobei jedes Register entweder Integer-Daten oder gepackte
Daten speichern kann. Bei einer anderen Ausführungsform können die
Register 209 als Floating-Point-Register verwendet werden.
Bei dieser Ausführungsform
können
gepackte Daten in den Registern 209 gespeichert werden,
oder Floating-Point-Daten. Bei einer Ausführungsform sind die kombinierten
Register einhundertachtundzwanzig Bit lang, und Integers werden
als einhundertachtundzwanzig Bit dargestellt. Bei dieser Ausführungsform
müssen
die Register beim Speicher von gepackten Daten und Integer-Daten
nicht zwischen den beiden Datentypen unterscheiden.
-
Die
Funktionaleinheit 203 führt
die von dem Prozessor 109 ausgeführten Operationen durch. Zu
solchen Operationen können
Verschiebungen, Addition, Subtraktion, Multiplikation usw. gehören. Die
Funktionaleinheit 203 ist an den internen Bus 205 angeschlossen.
Der Cache 160 ist ein optionales Element des Prozessors 109 und
kann zum Cache-Speichern von Daten und/oder Steuersignalen zum Beispiel
aus dem Hauptspeicher 104 verwendet werden. Der Cache 160 ist
mit dem Decodierer 202 verbunden und ist so geschaltet, daß er das
Steuersignal 207 empfängt.
-
Daten- und Speicherformate
-
3 zeigt
drei gepackte Datentypen: gepacktes Byte 221, gepacktes
Wort 222 und gepacktes Doppelwort (dword) 223.
Das gepackte Byte 221 ist hundertachtundzwanzig Bit lang
und enthält
sechzehn gepackte Byte-Datenelemente.
Im allgemeinen ist ein Datenelement ein einzelnes Datenstück, das
in einem einzigen Register (oder in einer Speicherstelle) mit anderen
Datenelementen derselben Länge
gespeichert wird. Bei gepackten Datensequenzen beträgt die Anzahl
von in einem Register gespeicherten Datenelementen einhundertachtundzwanzig
Bit, geteilt durch die Länge
in Bit eines Datenelements.
-
Das
gepackte Wort 222 ist einhundertachtundzwanzig Bit lang
und enthält
acht gepackte Wort-Datenelemente. Jedes gepackte Wort enthält sechzehn
Informationsbit. Das gepackte Doppelwort 223 ist einhundertachtundzwanzig
Bit lang und enthält
vier gepackte Doppelwort-Datenelemente. Jedes gepackte Doppelwort-Datenelement
enthält
zweiunddreißig
Informationsbit. Ein gepacktes Quadwort ist einhundertundachtundzwanzig
Bit lang und enthält
zwei gepackte Quadwort-Datenelemente.
-
4A–4C zeigen
die gepackte Datenspeicherdarstellung im Register gemäß einer
Ausführungsform
der Erfindung. Die vorzeichenlose gepackte Bytedarstellung im Register 310 zeigt
die Speicherung eines vorzeichenlosen gepackten Byte 201 in
einem der Multimediaregister 209 (siehe 4A).
Informationen für
jedes Bytedatenelement werden für
Byte Null in Bit sieben bis Bit Null, für Byte eins in Bit fünfzehn bis
bis Bit acht, für
Byte zwei in Bit dreiundzwanzig bis Bit sechzehn und für Byte fünfzehn schließlich in
Bit 120 bis Bit 127 gespeichert.
-
Es
werden also alle verfügbaren
Bit in dem Register benutzt. Diese Speicheranordnung erhöht die Speicherungseffizienz
des Prozessors. Außerdem
kann mit sechzehn Datenelementen, auf die zugegriffen wird, nun
eine Operation an sechzehn Datenelementen gleichzeitig durchgeführt werden.
Die vorzeichenbehaftete gepackte Bytedarstellung im Register 311 zeigt
die Speicherung eines vorzeichenbehafteten gepackten Byte 221.
Man beachte, daß das
achte Bit jedes Bytedatenelements der Vorzeichenindikator ist.
-
Die
vorzeichenlose gepackte Wortdarstellung im Register 312 zeigt,
wie Wort sieben bis Wort Null in einem Register der Multimediaregister 209 gespeichert
werden (siehe 4B). Die vorzeichenbehaftete
gepackte Wortdarstellung im Register 312 ähnelt der
vorzeichenlosen gepackten Wortdarstellung im Register 312.
Man beachte, daß das
sechzehnte Bit jedes Wortdatenelements der Vorzeichenindikator ist.
Die vorzeichenlose gepackte Doppelwortdarstellung im Register 314 zeigt,
wie die Multimediaregister 209 zwei Doppelwortdatenelemente
speichern (siehe 4C). Die vorzeichenbehaftete
gepackte Doppelwortdarstellung im Register 315 ist der
vorzeichenlosen gepackten Doppelwortdarstellung im Register 314 ähnlich.
Man beachte, daß sich
das notwendige Vorzeichenbit in dem zweiunddreißigsten Bit des Doppelwortdatenelements
befindet.
-
Die
effiziente Filterung und Faltung von Inhaltsdaten, wie sie durch
die vorliegende Erfindung gelehrt wird, beginnt mit dem Laden von
Datenquelleneinrichtungen mit Daten und Filter-/Faltungskoeffizienten.
In vielen Fällen
muß die
Reihenfolge von Daten oder Koeffizienten in einer Datenspeichereinrichtung,
wie zum Beispiel einem Einzelanweisungs-Mehrfachdaten-(SIMD-)Register, geändert werden,
bevor arithmetische Berechnungen durchgeführt werden können. Effiziente
Filterberechnungen und Faltungen erfordern dementsprechend nicht
nur angemessene Arithmetikanweisungen, sondern auch effiziente Verfahren
zum Organisieren der zur Durchführung
der Berechnung erforderlichen Daten.
-
Unter
Verwendung der Notation im Abschnitt über den allgemeinen Stand der
Technik werden zum Beispiel Bilder gefiltert, indem der Wert zum
Beispiel des Pixels I, der durch S[I] gegeben wird, ersetzt wird. Werte
von Pixeln auf jeder Seite des Pixels I werden bei der Filterberechnung
von S[I] verwendet. Ähnlich
sind Pixel auf jeder Seite des Pixels I + 1 erforderlich, um S[I
+ 1] zu berechnen. Um Filterergebnisse für mehr als ein Pixel in einem
SIMD-Register zu berechnen, werden folglich Daten in dem SIMD-Register
für die
Berechnung vervielfacht und angeordnet.
-
Leider
fehlt es bei derzeitigen Datenverarbeitungsarchitekturen an einem
effizienten Verfahren zum Anordnen von Daten für alle entsprechenden Datengrößen in der
Datenverarbeitungsarchitektur. Wie in 5 gezeigt,
enthält
die vorliegende Erfindung folglich eine Byte-Shuffle-Anweisung (PSHUFB) 145,
die Daten beliebiger Größe effizient
ordnet. Die Byte-Shuffle-Operation 145 ordnet Datengrößen, die
größer als
Byte sind, indem die relative Position von Byte in den größeren Daten
während
der Shuffle-Operation bewahrt wird. Zusätzlich kann die Byte-Shuffle-Operation 145 die
relative Position von Daten in einem SIMD-Register ändern und
auch Daten vervielfachen.
-
Wieder
mit Bezug auf 5 zeigt 5 ein Beispiel
für eine
Byte-Shuffle-Operation 145 für ein Filter mit
drei Koeffizienten. Unter Verwendung herkömmlicher Techniken würden (nicht
gezeigte) Filterkoeffizienten auf drei Pixel angewandt, und die
Filterkoeffizienten werden dann zu einem anderen Pixel verschoben
und nochmals angewandt. Um diese Operationen parallel durchzuführen, beschreibt
die vorliegende Erfindung jedoch eine neue Anweisung für die Datenanordnung.
Wie in 5 gezeigt, werden folglich die Daten 404 in einer
Zieldatenspeichereinrichtung 406 organisiert, die bei einer
Ausführungsform
die Quellendatenspeichereinrichtung 404 ist, wobei eine
Maske 402 verwendet wird, um die Adresse zu spezifizieren,
in der jeweilige Datenelemente in dem Zielregister 406 gespeichert
werden. Bei einer Ausführungsform
basiert die Anordnung der Maske auf der gewünschten Datenverarbeitungsoperation,
wozu zum Beispiel eine Filteroperation, eine Faltungsoperation oder
dergleichen gehören
kann.
-
Unter
Verwendung der Maske 402 kann folglich die Verarbeitung
der Daten 406 zusammen mit den Koeffizienten parallel durchgeführt werden.
Bei dem beschriebenen Beispiel ist die Quellendatenspeichereinrichtung 404 ein
128-Bit-SIMD-Register,
das anfangs sechzehn 8-Bit-Pixel speichert. Bei der Verwendung eines
Pixelfilters mit drei Koeffizienten wird also der vierte Koeffizient
auf Null gesetzt. Bei einer Ausführungsform kann
abhängig
von der Anzahl von Datenelementen in der Quellendatenspeichereinrichtung 404 das
Quellenregister 404 als die Zieldatenspeichereinrichtung
bzw. das Zieldatenspeicherregister verwendet werden, wodurch die
im allgemeinen notwendige Anzahl von Registern verringert wird.
Folglich können überschriebene Daten
in der Quellendatenspeichereinrichtung 404 aus dem Speicher
oder aus einem anderen Register neu geladen werden. Zusätzlich kann
man mehrere Register als Quellendatenspeichereinrichtung 404 verwenden, wobei
ihre jeweiligen Daten je nach Wunsch in der Zieldatenspeichereinrichtung 406 organisiert
werden.
-
Nachdem
das Ordnen von Datenelementen sowie von Koeffizienten abgeschlossen
ist, müssen
die Daten und entsprechenden Koeffizienten gemäß einer Datenverarbeitungsoperation
verarbeitet werden. Für Fachleute
ist erkennbar, daß Operationen
mit verschiedener Genauigkeit für
Filterberechnungen sowie Faltungsberechnungen, die verschiedenviele
Filterkoeffizienten und Datengrößen verwenden,
notwendig sind. Die einfachste Filteroperation multipliziert zwei
Zahlenpaare und addiert ihre Produkte. Diese Operation wird als
eine Multiplikations-Akkumulationsanweisung bezeichnet.
-
Leider
unterstützen
derzeitige Datenverarbeitungsarchitekturen keine effizienten Multiplikations-Akkumulationsberechnungen
für mehrere
Arrays oder Filterlängen
und mehrere Datengrößen unter
Verwendung entweder von vorzeichenbehafteten oder vorzeichenlosen
Koeffizienten. Außerdem
werden keine Byteoperationen unterstützt. Als Ergebnis müssen herkömmliche
Computerarchitekturen 16-Bit-Daten
unter Verwendung von Unpack-Anweisungen umsetzen. Diese Computerarchitekturen
enthalten im allgemeinen Unterstützung
für Multiplikations-Akkumulationsoperationen,
die das Produkt von 16-Bit-Daten in separaten Registern berechnen
und dann benachbarte Produkte addieren, um ein 32-Bit-Ergebnis zu
liefern. Diese Lösung
ist für Filterkoeffizienten
für Daten,
die 16-Bit-Genauigkeit erfordern, akzeptabel, aber für 8-Bit-Filterkoeffizienten
in 8-Bit-Daten (wie
im Fall von Bildern und Video) werden Anweisungen und Datenebenenparallelität verschwendet.
-
Nunmehr
mit Bezug auf 6 zeigt 6 ein erstes
Quellenregister 452 und ein zweites Quellenregister 454.
Bei einer Ausführungsform
sind das erste und das zweite Quellenregister N-Bit lange SIMD-Register,
wie zum Beispiel 128-Bit-Register
des Typs Intel® SSE2
XMM. Die auf einem solchen Register implementierte Multiplikations-
und Akkumulationsanweisung würde
die folgenden Ergebnisse für
zwei Pixelvektoren 452 und 454, die in dem Zielregister 456 gespeichert
sind, liefern. Das Beispiel zeigt folglich eine 8-Bit-Byte-zu-16-Wort-Multiplikations-Akkumulationsanweisung,
die als PMADDUSBW-Operation 147 (1) bezeichnet
wird, bei der das U und das S in der Anweisung mnemonisch vorzeichenlose
und vorzeichenbehaftete Byte bedeuten.
-
Byte
in einem der Quellenregister sind vorzeichenbehaftet und in dem
anderen sind sie vorzeichenlos.
-
Bei
einer Ausführungsform
der vorliegenden Erfindung ist das Register mit den vorzeichenlosen
Daten das Ziel und die 16-Multiplikations-Akkumulation resultiert.
Der Grund für
diese Wahl besteht darin, daß bei den
meisten Implementierungen Daten vorzeichenlos und Koeffizienten
vorzeichenbehaftet sind. Folglich ist es vorzuziehen, die Daten
zu überschreiben,
da es weniger wahrscheinlich ist, daß die Daten bei zukünftigen Berechnungen
benötigt
werden. Zusätzliche
Byte-Multiplikations-Akkumulationsanweisungen (siehe 1) sind
die PMADDUUBW-Operationen 149 für vorzeichenlose Byte in beiden
Registern und die PMADDSSBW-Operation 151 für vorzeichenbehaftete
Byte in beiden Quellenregistern. Die Multiplikations-Akkumulationsanweisungen
werden durch eine PMADDWD-Anweisung 153 vervollständigt, die
für Paare
von vorzeichenbehafteten 16-Bit-Wörtern zur Erzeugung eines vorzeichenbehafteten
32-Bit-Produkts gilt.
-
Wie
allgemein im Fall von Filteroperationen enthält der zweite Vektor im allgemeinen
die Filterkoeffizenten. Um ein XMM-Register vorzubereiten, können folglich
die Koeffizienten unter Verwendung der Shuffle-Anweisung 145 in
einem Teil des Registers geladen und in den Rest des Registers kopiert
werden. Zum Beispiel (siehe 7A) wird
anfangs eine Koeffizientendatenspeichereinrichtung 502,
wie zum Beispiel ein 128-Bit-XMM-Register, als Reaktion auf die
Ausführung
einer Datenladeanweisung mit drei Koeffizienten geladen. Für Fachleute
ist jedoch erkennbar, daß Filterkoeffizienten
auch vor der Datenverarbeitung im Speicher organisiert werden können. Folglich
kann der Koeffizient anfangs wie in 7B abgebildet
auf der Basis seiner Organisation im Speicher vor dem Filtern geladen
werden.
-
Folglich
enthält
das Koeffizientenregister 502 die Filterkoeffizienten F3,
F2 und F1, die als vorzeichenbehaftete oder vorzeichenlose Byte
codiert werden können.
Nachdem das Koeffizientenregister 502 geladen ist, kann
man mit der bestehenden Anweisung PSHUFD die Filterkoeffizienten
in den übrigen
Teilen des Koeffizientenregisters kopieren, um das folgende, in 7B abgebildete
Ergebnis zu erhalten. Wie in 7B gezeigt,
enthält
das Koeffizientenregister 504 nun geshuffelte Koeffizienten,
sowie es erforderlich ist, um eine Datenverarbeitungsoperation parallel
durchzuführen.
Fachleuten ist bekannt, daß Filter,
die drei Koeffizienten enthalten, sehr häufig in Bildverarbeitungsalgorithmen
auftreten. Für
Fachleute ist jedoch erkennbar, daß bestimmte Filteroperationen,
wie zum Beispiel JPEG 2000, neun und sieben 16-Bit-Koeffizienten verwenden. Die Verarbeitung
solcher Koeffizienten übersteigt
folglich die Kapazität
von Koeffizientenregistern, was zu einem teilweise gefilterten Ergebnis
führt.
Die Verarbeitung wird folglich fortgesetzt, bis unter Verwendung
jedes Koeffizienten ein Endergebnis erhalten wird.
-
Nunmehr
mit Bezug auf 7C zeigt 7C die
Anordnung von Pixeldaten in einem Quellenregister 506,
die anfangs in dem Quellenregister 404 (siehe 5) enthalten
waren und in dem Zielregister 406 geshuffled wurden. Folglich
kann man als Reaktion auf die Ausführung einer Datenverarbeitungsoperation
die PMADDUSBW-Anweisung zur Berechnung der Summe der beiden Multiplikationen
verwenden, wobei das Ergebnis in dem Zielregister 510 gespeichert
wird. Um die Berechnung abzuschließen und Datenverarbeitungsergebnisse
für die
gewählte
Datenverarbeitungsoperation zu erzeugen, müssen leider benachbarte Paare
summierter Produkte in dem Zielregister 510 addiert werden.
-
Wenn
die Summe einer Multiplikations-Akkumulationsanweisung länger als
zwei Pixel ist, was im allgemeinen der Fall ist, müssen folglich
separate Summen addiert werden. Leider bieten derzeitige Datenverarbeitungsarchitekturen
kein effizientes Verfahren zum Addieren benachbarter Summen, da
sich die benachbarten Summen in demselben Zielregister befinden.
Folglich verwendet die vorliegende Erfindung Nachbar-Addieranweisungen,
deren Ergebnisse in 8A–8D abgebildet
sind.
-
Nunmehr
mit Bezug auf 8A zeigt 8A ein
Zielregister 552 nach dem Addieren zweier benachbarter
16-Bit-Werte (PADDD2WD-Operation 157), um eine 32-Bit-Summe
zu liefern. Folglich zeigt 8A zwei
benachbarte 16-Bit-Ergebnisse
einer Multiplikation-Akkumulationsanweisung, die addiert werden,
um eine 32-Bit-Summe von 4 Byte-Produkten zu liefern. 8B zeigt
eine Nachbaraddieranweisung (PAADDD4WD-Operation 157),
die 4 benachbarte 16-Bit-Werte
addiert, um eine 32-Bit-Summe zu liefern. Folglich werden 4 benachbarte
16-Bit-Ergebnisse einer Byte-Multiplikations-Akkumulationsanweisung addiert, um die
32-Bit-Summe von 8 Byte-Produkten zu liefern. 8C zeigt
eine Nachbaraddieranweisung (PAADD8WD-Operation 157), die
8 benachbarte 16-Bit-Werte addiert, um eine 32-Bit-Summe zu liefern.
Folglich zeigt das Beispiel 8 benachbarte 16-Bit-Ergebnisse einer
Byte-Multiplikations-Akkumulationsoperation,
die addiert werden, um eine 32-Bit-Summe von 16 Byte-Produkten zu liefern.
-
Die
Auswahl der Anweisung zur Durchführung
einer Nachbaraddieroperation basiert also auf der Anzahl von Turns
in einer Summe (N). Wenn zum Beispiel ein Filter mit drei Abgriffen
verwendet wird, wie in 7A–7C gezeigt,
erhält
eine erste Anweisung (PAADD2WD-Operation 157) das folgende
Ergebnis (sieht 8D). Für eine Korrelation zwischen
zwei 16-Bit-Pixelvektoren (zum Beispiel der ersten Zeile eines Makroblocks)
wird jedoch die letzte Anweisung (PAADD8WD-Operation 157) (siehe 8C)
verwendet. Eine solche Operation wird immer wichtiger für eine effiziente
Implementierung mit zunehmender Größe von SIMD-Registern. Ohne eine solche Operation
sind viele zusätzliche
Anweisungen erforderlich.
-
Der
Satz von Nachbaraddieranweisungen, der durch die vorliegende Erfindung
beschrieben wird, unterstützt
folglich vielfältige
Anzahlen benachbarter Werte, die addiert werden können, und
einen vollen Bereich üblicher
Datentypen. Bei einer Ausführungsform
umfaßt
die Addition benachbarter 16-Bit-Werte einen Anweisungssatz (PAADDNWD-Operation 157),
dessen Bereich mit der Addition zweier benachbarter Werte (N = 2) beginnt
und die addierte Zahl auf vier (N = 4) und dann auf acht (N = 8)
und dann bis zu einer Gesamtzahl in dem Register verdoppelt. Die
Datengröße der Summe
von 16-Bit-Nachbaradditionen beträgt 32 Bit. Bei einer alternativen
Ausführungsform
werden benachbarte 16-Bit-Werte (PAADDWD-Operation 161)
addiert, um eine 32-Bit-Summe zu liefern.
-
Bei
dieser alternativen Ausführungsform
kommt keine andere Anweisung mit der 16-Bit-Datengröße vor,
weil Nachbaraddieranweisungen mit 32-Bit-Eingabe zum Addieren der
Summe, die durch die Anweisung mit einer 16-Bit-Eingabe erzeugt
wird, verwendet werden. Beide Ausführungsformen enthalten einen
Satz von 32-Bit-Nachbaradditionsanweisungen
(PAADDNDWD-Operation 159), deren Bereich mit der Addition
zweier benachbarter Werte (N = 2) beginnt und die addierte Zahl
zu vier (N = 4), dann acht (N = 8) usw. bis zu der Gesamtzahl in
dem Register verdoppelt. Die Datengröße der Summe von 32-Bit-Nachbaradditionen
beträgt
32 Bit. In bestimmten Fällen
füllen
die Ergebnisse nicht das Register. Zum Beispiel (Anweisungen in 8A, 8B und 8C)
ergeben drei verschiedene Nachbaraddierungen 4, 2 und 1 32-Bit-Ergebnisse.
Bei einer Ausführungsform
werden die Ergebnisse in den unteren, niedrigstwertigen Teilen der Zieldatenspeichereinrichtung
gespeichert.
-
Wenn
es zwei 32-Bit-Ergebnisse gibt (siehe 8B) werden
folglich die Ergebnisse in den unteren 64 Bit gespeichert. Im Fall
eines 32-Bit-Ergebnisses (siehe 8C) werden
die Ergebnisse in den unteren 32 Bit gespeichert. Für Fachleute
ist erkennbar, daß bestimmte
Anwendungen die Summe benachbarter Byte verwenden. Die vorliegende
Erfindung unterstützt
die Nachbaraddition von Byte mit einer Anweisung (PAADDNB-Operation 155),
die zwei benachbarte vorzeichenbehaftete Byte addiert und ein 16-Bit-Wort
liefert, und eine Anweisung, die zwei benachbarte vorzeichenlose
Byte addiert und ein 16-Bit-Wort-Ergebnis liefert. Anwendungen,
die die Addition von mehr als zwei benachbarten Byte erfordern,
addieren die 16-Bit-Summe zweier Byte mit einer entsprechenden 16-Bit-Nachbaraddieroperation.
-
Nachdem
Datenverarbeitungsoperationsergebnisse berechnet wurden, besteht
die nächste
Operation darin, die Ergebnisse zu einer Speichereinrichtung zurückzurouten.
Wie durch die oben beschriebenen Ausführungsformen dargestellt, können die
Ergebnisse mit 32-Bit-Genauigkeit codiert werden. Deshalb können Ergebnisse
unter Verwendung einfacher Verschiebungsoperationen in den Speicher
zurückgeschrieben
werden, die an Doppelwörtern
wirken, wie zum Beispiel die MOVD-Operation 143, die oben
beschrieben wurde, sowie logische Rechtsschiebeoperationen, die
an dem gesamten Register wirken (PSRLDQ), Schiebe-Doppel-Quadwort-Rechts-Logisch.
Das Zurückschreiben
aller Ergebnisse in den Speicher würde folglich im ersten Fall
(8A) vier MOVD und drei PSRLDQ, im zweiten Fall
(8B) zwei MOVD und ein PSRLDQ und schließlich im
letzten Fall (siehe 8C) nur ein MOVD erfordern.
-
Obwohl
die Nachbaraddieroperationen (siehe 7C) parallel
durchgeführt
werden können,
erfordern Filterberechnungen im allgemeinen leider das nächste Pixel
in dem Bild. Folglich müssen
ein oder mehrere Pixel in eine Quellendatenspeichereinrichtung oder
in ein Quellendatenspeicherregister geladen werden. Um zu vermeiden,
jedesmal die acht Pixel in den Registern zu laden, werden für diese
Operation zwei Lösungen vorgeschlagen.
Bei einer Ausführungsform
beschreibt die vorliegende Erfindung eine Registerzusammenführungsoperation 163 (siehe 9A).
Um die Pixel A1-A8 in einem Zielregister 606 zu verarbeiten,
werden folglich die Pixel A7-A1 mit dem Pixel A8 verkettet, um die
Pixel A8-A1 in dem Zielregister 606 zu bilden. Folglich verwendet
die Registerzusammenführungsoperation
die Anzahl von Byte zur Auswahl von Registern, die durch ein Eingangsargument
geliefert wird.
-
Nunmehr
mit Bezug auf 9B zeigt 9B eine
alternative Ausführungsform
zur Durchführung
der Registerzusammenführungsoperation.
Anfangs werden acht Pixel in ein erstes Quellenregister 608 (MM0)
geladen. Als nächstes
werden acht nachfolgende Pixel in ein zweiten Quellenregister (MM1) 610 geladen.
Als nächstes
wird an dem zweiten Quellenregister 610 eine Permutationsoperation
durchgeführt.
Nach der Durchführung
wird das Register 610 in ein drittes Quellenregister (MM2) 612 kopiert.
Als nächstes
wird das erste Quellenregister 608 um acht Bit nach rechts
geschoben. Zusätzlich
werden das zweite Quellenregister 610 und ein Maskenregister 614 gemäß einer
gepackten logischen AND-Anweisung kombiniert und in dem ersten Quellenregister 608 gespeichert.
-
Als
nächstes
wird zwischen dem zweiten Quellenregister 610 und dem ersten
Quellenregister 608 eine logische OR-Operation durchgeführt, um
das folgende Ergebnis in dem Zielregister 620 zu erzeugen,
was zu der Registerzusammenführungsoperation
führt.
Der Prozess wird wie dargestellt fortgesetzt, indem das erste Quellenregister 608 geschoben
wird. Als nächstes
wird das zweite Quellenregister 610 geschoben, um das Register 612 zu
ergeben. Als nächstes
wird zwischen dem Maskenregister 614 und dem zweiten Quellenregister 612 eine
logische AND-Operation durchgeführt,
wobei die Ergebnisse in einem Zielregister 622 gespeichert
werden. Als letztes wird zwischen dem zweiten Quellenregister 612 und
dem ersten Quellenregister 608 eine gepackte OR-Operation durchgeführt, um
eine nachfolgende Registerzusammenführungsoperation in dem Zielregister 624 zu
ergeben. Es werden nun prozedurale Methoden zur Implementierung
der Lehren der vorliegenden Erfindung beschrieben.
-
Funktionsweise
-
Nunmehr
mit Bezug auf 10 zeigt 10 ein
Blockschaltbild eines Verfahrend 700 zum effizienten Filtern
und Falten von Inhaltsdaten, zum Beispiel in dem Computersystem 100 (siehe 1 und 2).
Wie hier beschrieben wird, beziehen sich Inhaltsdaten auf Bild-,
Audio-, Video- und Sprachdaten. Zusätzlich bezieht sich die vorliegende
Erfindung auf Datenspeichereinrichtungen, wozu, wie für Fachleute
erkennbar ist, verschiedene Einrichtungen gehören, die digitale Daten speichern
können,
darunter zum Beispiel Datenregister, wie zum Beispiel 128-Bit-Intel®-Architektur-SSE2-MMX-Register.
-
Wieder
mit Bezug auf 10 beginnt das Verfahren im
Prozeßblock 702,
in dem bestimmt wird, ob eine Datenverarbeitungsoperation ausgeführt wird.
Gemäß der vorliegenden
Beschreibung gehören
zu der Datenverarbeitungsoperation ohne Einschränkung Faltungs- und Filterungsoperationen,
die an Pixeldaten durchgeführt
werden. Nach der Ausführung
wird der Prozeßblock 704 durchgeführt. Im
Prozeßblock 704 wird eine
Datenladeanweisung ausgeführt.
Als Reaktion auf die Ausführung
der Datenladeanweisung werden im Prozeßblock 706 Eingangsdatenstromdaten
in einer Quellendatenspeichereinrichtung 212A und einer
sekundären
Datenspeichereinrichtung 212B, wie zum Beispiel in 2 abgebildet,
geladen.
-
Im
Prozeßblock 708 wird
bestimmt, ob die Datenverarbeitungsoperation eine Daten-Shuffle-Anweisung
ausgeführt
hat. Als Reaktion auf das Ausführen
einer Daten-Shuffle-Anweisung wird im Prozeßblock 710 ein gewählter Teil
von Daten zum Beispiel aus einer Quellendatenspeichereinrichtung 212B in
einer Zieldatenspeichereinrichtung organisiert, oder gemäß einer
Anordnung von Koeffizienten in einer Koeffizientendatenspeichereinrichtung
(siehe 5). Koeffizienten in einer Koeffizientendatenspeichereinrichtung
werden gemäß den gewünschten
Datenverarbeitungsoperationsberechnungen organisiert (wie zum Beispiel
in 7A und 7B dargestellt).
Bei einer Ausführungsform
werden Koeffizienten in dem Speicher vor allen Filteroperationen
organisiert. Folglich können
Koeffizienten in eine Koeffizientendatenspeicherung geladen werden, ohne daß ein Shuffle
notwendig ist (siehe 7B).
-
Gemäß der obigen
Beschreibung muß das
Ordnen von Daten und Koeffizienten parallele Berechnungen implementieren,
so wie es durch die Datenverarbeitungsoperation erfordert wird (siehe 7A–7C). Da
die Koeffizienten vor der Datenverarbeitungsoperation bekannt sind,
können
Koeffzienten jedoch im Speicher organisiert werden, um ein Laden
in ein Koeffizientenregister gemäß der Organisation
in dem Speicher zu ermöglichen,
ohne daß ein
Shuffle der Koeffizienten während
der Datenverarbeitungsoperation notwendig ist. Im Prozeßblock 720 werden
die geladenen Daten schließlich
gemäß der Datenverarbeitungsoperation
verarbeitet, um ein oder mehrere Datenverarbeitungsergebnisse zu
erzeugen. Nach ihrer Erzeugung können
die Datenverarbeitungsoperationsergebnisse in den Speicher zurückgeschrieben
werden.
-
Nunmehr
mit Bezug auf 11 zeigt 11 ein
Blockschaltbild eines Verfahrens 722 zum Verarbeiten von
Daten gemäß der Datenverarbeitungsoperation.
Im Prozeßblock 724 wird
bestimmt, ob die Datenverarbeitungsoperation eine Multiplikations-Akkumulations-Anweisung
ausgeführt
hat. Als Reaktion auf die Ausführung
der Multiplikations-Akkumulations-Anweisung
werden im Prozeßblock 726 eine
Vielzahl von Datenpaaren summierter Produkte in der Zielspeichereinrichtung
und Koeffizienten in der Koeffizientendatenspeichereinrichtung erzeugt
(siehe 7C). Als nächstes wird im Prozeßblock 728 bestimmt,
ob die Datenverarbeitungsoperation eine Nachbaraddieranweisung ausgeführt hat.
-
Als
Reaktion auf die Ausführung
der Nachbaraddierung werden im Prozeßblock 730 benachbarte
Paare summierter Produkte in der Zieldatenspeichereinrichtung 510 (7C)
als Reaktion auf die Ausführung
der Nachbaraddieranweisung addiert, um ein oder mehrere Datenverarbeitungsoperationsergebnisse
zu bilden (siehe 8D). Bei bestimmten Ausführungsformen,
bei denen die Anzahl von Koeffizienten eine Kapazität des Koeffizientenregisters übersteigt
(siehe Prozeßblock 732),
werden jedoch Teilweisedatenverarbeitungsergebnisse erhalten.
-
Folglich
Verarbeitung und Organisation von Koeffizienten (Prozeßblock 734),
Daten (Prozeßblock 736)
und Fortsetzung, bis die letzten Datenverarbeitungsoperationsergebnisse
erhalten werden, wie in den optionalen Prozeßblöcken 732–736 angegeben.
Ansonsten werden in dem Prozeßblock 738 das
eine bzw. die mehreren Datenverarbeitungsoperationsergebnisse gespeichert.
Im Prozeßblock 790 wird
schließlich
bestimmt, ob die Verarbeitung von Eingangsdatenstromdaten abgeschlossen
ist. Dementsprechend werden die Prozeßblöcke 724–732 wiederholt,
bis die Verarbeitung von Eingangsdatenstromdaten abgeschlossen ist. Nachdem
die Verarbeitung abgeschlossen ist, kehrt der Steuerfluß zum Prozeßblock 720 zurück, worin
das Verfahren 700 endet.
-
Nunmehr
mit Bezug auf 12 zeigt 12 ein
Flußdiagramm
eines zusätzlichen
Verfahrens 740 zur Verarbeitung zusätzlicher Eingangsdaten. Im
Prozeßblock 742 wird
bestimmt, ob es etwaige Daten in der Quellendatenspeichereinrichtung 212A gibt,
auf die nicht zugegriffen wurde. In der vorliegenden Beschreibung bedeutet
Daten, auf die nicht zugegriffen wurde, Daten in der Quellendatenspeichereinrichtung 212A,
die nicht in der Datenspeichereinrichtung geshuffled wurden, um
eine Multiplikations-Akkumulations-Anweisung
durchzuführen.
Wenn die Datenspeichereinrichtung Daten enthält, auf die nicht zugegriffen
wurde, wird im Prozeßblock 744 ein
Teil von Daten aus der Quellendatenspeichereinrichtung als die gewählten Daten
ausgewählt. Nach
der Auswahl wird der Prozeßblock 786 durchgeführt.
-
Andernfalls
werden im Prozeßblock 746 ein
oder mehrere unverarbeitete Datenelemente aus der Quellendatenspeichereinrichtung
sowie ein oder mehrere Datenelemente aus einer sekundären Datenspeichereinrichtung
ausgewählt.
In der vorliegenden Beschreibung bedeuten unverarbeitete Datenelemente
Datenelemente, für
die noch kein Datenverarbeitungsoperationsergebnis berechnet wurde.
Als nächstes
wird im Prozeßblock 780 eine
Registerzusammenführanweisung
(siehe 9A und 9B) durchgeführt, die
die unverarbeiteten Datenelemente der Quellendatenspeichereinrichtung
mit den aus der sekundären
Datenspeichereinrichtung ausgewählten
Datenelementen verkettet, um die gewählten Daten zu bilden. Als
nächstes werden
im Prozeßblock 782 Daten
aus der sekundären
Datenspeichereinrichtung in die Quellendatenspeichereinrichtung
verschoben.
-
Folglich
werden die Quellendatenspeichereinrichtungsdaten nicht mehr benötigt, da
auf sie alle zugegriffen wurde. Folglich kann die sekundäre Speicherung
von Daten, die Daten enthält,
auf die nicht zugegriffen wurde, zum Überschreiben von Daten in der
Quellendatenspeichereinrichtung verwendet werden. Im Prozeßblock 784 wird
die sekundäre
Datenspeichereinrichtung mit Eingangsdatenstromdaten aus einer Speichereinrichtung
geladen, die zusätzliche
Datenverarbeitung benötigen,
wie zum Beispiel Filterung oder Faltung. Im Prozeßblock 786 werden
die gewählten
Daten schließlich
in einer Zieldatenspeichereinrichtung oder gemäß der Anordnung von Koeffizienten
in der Koeffizientendatenspeichereinrichtung (siehe 5).
organisiert. Nach der Durchführung
kehrt der Steuerfluß zum
Prozeßblock 790 zurück (siehe 11),
um die Verarbeitung der gewählten
Daten fortzusetzen.
-
Nunmehr
mit Bezug auf 13 zeigt 13 ein
zusätzliches
Verfahren 748 zum Auswählen
unverarbeiteter Datenelemente. Im Prozeßblock 750 wird bestimmt,
ob die Quellendatenspeichereinrichtung unverarbeitete Daten enthält. Wenn
jeder Teil von Daten in der Quellendatenspeichereinrichtung verarbeitet
wurde, wird der Prozeßblock 770 durchgeführt. Im
Prozeßblock 770 wird
ein Teil von Daten aus der sekundären Datenspeichereinrichtung
ausgewählt,
der als die gewählten
Daten fungiert, und der dann gemäß der Datenverarbeitungsoperation
verarbeitet wird.
-
Andernfalls
werden im Prozeßblock 752 ein
oder mehrere unverarbeitete Datenelemente aus der Quellendatenspeichereinrichtung
ausgewählt.
Im Prozeßblock 766 werden
schließlich
zusätzliche
Datenelemente aus der sekundären
Datenspeichereinrichtung gemäß einem
Zählwert
der unverarbeiteten Datenelemente ausgewählt, um die gewählten Daten
zu bilden. Folglich werden Daten, die für ein Shuffle in einer Zieldatenspeichereinrichtung
vor der Durchführung
der Datenverarbeitungsoperation ausgewählt werden, auf einen Zählwert von
Datenelementen auf der Basis der Anzahl von Filterkoeffizienten begrenzt.
Unter Verwendung dieses Datenelementzählwerts wird folglich die Anzahl
unverarbeiteter Datenelemente von dem Datenelementzählwert subtrahiert,
um die Anzahl von aus der sekundären
Datenspeichereinrichtung zur Durchführung der Registerzusammenführoperation
auszuwählenden
Elementen zu bestimmen.
-
Schließlich zeigt
mit Bezug auf 14 14 ein
zusätzliches
Verfahren 754 zum Auswählen
unverarbeiteter Datenelemente des Prozeßblocks 752 (siehe 13).
Im Prozeßblock 756 wird
ein Datenelement aus der Quellendatenspeichereinrichtung ausgewählt. Als
nächstes
wird im Prozeßblock 758 bestimmt,
ob für das
Datenelement ein Datenverarbeitungsoperationsergebnis berechnet
wurde. Wenn ein solches Ergebnis berechnet wurde, wird das gewählte Datenelement
verworfen. Andernfalls ist im Prozeßblock 760 das gewählte Datenelement
ein unverarbeitetes Datenelement und wird gespeichert. Als nächstes wird
im Prozeßblock 762 ein
Zählwert
unverarbeiteter Datenelemente erhöht. Schließlich werden im Prozeßblock 764 die
Prozeßblöcke 756–762 wiederholt,
bis jedes Datenelement in der Quellendatenspeichereinrichtung verarbeitet
ist.
-
Dementsprechend
werden unter Verwendung der Lehren der vorliegenden Erfindung unnötige Datentypänderungen
vermieden, was zu einer Maximierung der Anzahl von SIMD-Operationen
pro Anweisungen führt.
Zusätzlich
wird auch eine signifikante Verringerung der Anzahl von zum Ordnen
von Daten für
arithmetische Operationen erforderlichen Taktzyklen erreicht. Folglich
gibt Tabelle 1 Schätzungen
für Beschleunigungswerte
für mehrere
Filteranwendungen unter Verwendung der Lehren und Anweisungen an,
die durch die vorliegende Erfindung beschrieben werden. Tabelle 1
Operation | Beschleunigung |
9-7-Wavelet | 1,7 |
3×3-Filter
mit Byte-Koeffizienten | 4,3 |
Wasserzeichenkorrelation | 6,8 |
-
Alternative Ausführungsformen
-
Es
wurden mehrere Aspekte einer Implementierung der Datenverarbeitungsarchitektur
zur Bereitstellung einer effizienten Filterung und Faltung von Inhaltsdaten
unter Verwendung von SIMD-Registern beschrieben. Verschiedene Implementierungen
der Datenverarbeitungsarchitektur liefern jedoch zahlreiche Merkmale, die
die oben beschriebenen Merkmale enthalten, ergänzen, vervollständigen und/oder
ersetzen. Merkmale können
als Teil der Datenverarbeitungsarchitektur oder als Teil spezifischer
Software- oder Hardwarekomponenten in verschiedenen Implementierungen
implementiert werden. Außerdem
verwendet die obige Beschreibung zur Erläuterung spezifische Nomenklatur
zur Bereitstellung eines umfassenden Verständnisses der Erfindung. Für Fachleute
ist jedoch ersichtlich, daß die
spezifischen Einzelheiten nicht erforderlich sind, um die Erfindung
auszuüben.
-
Obwohl
eine hierbeschriebene Ausführungsform
ein System zum effizienten Filtern und Falten von Inhaltsdaten unter
Verwendung von SIMD-Registern betrifft, ist für Fachleute zusätzlich ersichtlich,
daß die
Lehre der vorliegenden Erfindung auch auf andere Systeme angewandt
werden kann. Tatsächlich
liegen Systeme zur Verarbeitung von Bild-, Audio- und Videodaten
innerhalb der Lehren der vorliegenden Erfindung, ohne vom Gedanken
und Schutzumfang der vorliegenden Erfindung abzuweichen. Die oben
beschriebenen Ausführungsformen
wurden gewählt
und beschrieben, um die Prinzipien der Erfindung und ihre praktischen
Anwendungen am besten zu erläutern.
Diese Ausführungsformen
wurden gewählt,
um es anderen Fachleuten zu ermöglichen,
die Erfindung und verschiedene Ausführungsformen mit verschiedenen
Modifikationen, die sich für die
konkrete in Betracht gezogene Benutzung eignen, am besten auszunutzen.
-
Ausführungsformen
der vorliegenden Erfindung können
gegenüber
bekannten Verfahren viele Vorteile liefern. Die vorliegende Erfindung
enthält
die Möglichkeit,
Operationen für
Filterung/Faltung für
mehrfache Array-Längen
und Datengrößen und
Koeffizientenvorzeichen effizient zu implementieren. Diese Operationen werden
durch Verwendung einiger weniger Anweisungen erzielt, die Teil einer
kleinen Gruppe von Einzelanweisungs-Mehrfachdaten-Anweisungen (SIMD-Anweisungen)
sind. Folglich vermeidet die vorliegenden Erfindung unnötige Datentypänderungen.
Durch Vermeidung unnötiger
Datentypänderungen
maximiert die vorliegende Erfindung als Ergebnis die Anzahl von
SIMD-Operationen
pro Anweisung, während
die Anzahl von zum Ordnen von Daten für arithmetische Operationen,
wie zum Beispiel für
Multiplikations-Akkumulationsoperationen,
erforderliche Anzahl von Taktzyklen signifikant verringert wird.
-
15 ist
ein Blockschaltbild der Mikroarchitektur für einen Prozessor einer Ausführungsform
mit Logikschaltungen zur Durchführung
von Parallel-Schiebe-Rechts-Zusammenführoperationen
gemäß der vorliegenden
Erfindung. Die Schiebe-Rechts-Zusammenführoperation kann auch als Registerzusammenführoperation
und Registerzusammenführanweisung
bezeichnet werden, wie in der obigen Besprechung. Bei einer Ausführungsform
der Schiebe-Rechts-Zusammenführanweisung
(PSRMRG) erzeugt die Anweisung dieselben Ergebnisse wie die Registerzusammenführoperation 167 von 1, 9A und 9B.
Das In-Der-Reihenfolge-Frontend 1001 ist Teil des Prozessors 1000,
der die auszuführenden
Makroanweisungen abruft und sie für eine spätere Benutzung in der Prozessor-Pipeline
vorbereitet. Das Frontend dieser Ausführungsform enthält mehrere
Einheiten. Der Anweisungs-Vorabrufer 1026 ruft Makroanweisungen
aus dem Speicher ab und führt diese
einem Anweisungsdecodierer 1028 zu, der sie seinerseits
zu Primitiven decodiert, die als Mikroanweisungen oder Mikrooperationen
(oder auch als Mikro-Op oder Uops) bezeichnet werden, von denen
die Maschine weiß,
wie sie auszuführen
sind. Der Trace-Cache 1030 nimmt decodierte Uops und assembliert
sie zu programmgeordneten Sequenzen oder Traces in der Uop-Warteschlange 1034 zur
Ausführung.
Wenn der Trace-Cache 1030 auf eine komplexe Makroanweisung
trifft, liefert der Mikrocode-ROM 1032 die notwendigen UOPs
zum Abschluß der
Operation.
-
Viele
Makroanweisungen werden in eine einzige Mikro-Op umgesetzt, und
andere benötigen
mehrere Mikro-Ops, um die volle Operation abzuschließen. Bei
dieser Ausführungsform
greift, wenn mehr als vier Mikro-Ops notwendig sind, um eine Makroanweisung
abzuschließen,
der Decodierer 1028 auf den Mikrocode-ROM 1032 zu,
um die Makroanweisung durchzuführen.
Bei einer Ausführungsform
kann eine Anweisung für
einen Parallel-Schiebe-Rechts-Zusammenführalgorithmus
in dem Mikrocode-ROM 1032 gespeichert werden, falls eine
Anzahl von Mikro-Ops notwendig ist, um die Operation zu erreichen.
Der Trace-Cache 1030 bezieht sich auf ein Eintrittspunkt-PLA
(programmierbares Logik-Array), um einen korrekten Mikroanweisungszeiger
zum Lesen der Mikrocodesequenzen für den Divisionsalgorithmus
in dem Mikrocode-ROM 1032 zu bestimmen. Nachdem der Mikrocode-ROM 1032 das
Sequenzieren von Mikro-Ops
für die
aktuelle Makroanweisung beendet hat, nimmt das Frontend 1001 der
Maschine das Abrufen von Mikro-Ops aus dem Trace-Cache 1030 wieder
auf.
-
Bestimmte
SIMD- und andere Multimedia-Anweisungstypen werden als komplexe
Anweisungen betrachtet. Außerdem
sind die meisten auf Floating Point bezogenen Anweisungen komplexe
Anweisungen. Wenn der Anweisungsdecodierer 1028 auf eine
komplexe Makroanweisung trifft, wird folglich an der entsprechenden
Speicherstelle auf den Mikrocode-ROM 1032 zugegriffen,
um die Mikrocodesequenz für
diese Makroanweisung abzurufen. Die verschiedenen Mikro-Ops, die
zur Durchführung
diese Makroanweisung notwendig sind, werden zur Ausführung in
den entsprechenden Integer- und Floating-Point-Ausführungseinheiten
zu der Außer-Reihenfolge-Ausführungs-Engine 1003 übermittelt.
-
Die
Außer-Reihenfolge-Ausführungs-Engine 1003 befindet
sich dort, wo die Mikroanweisungen für die Ausführung vorbereitet werden. Die
Außer-Reihenfolge-Ausführungs-Logik
enthält
eine Anzahl von Pufferspeichern zum Ausglätten und Umordnen des Flusses
von Mikroanweisungen zur Optimierung der Leistungsfähigkeit,
während
sie die Pipeline herunterlaufen und für die Ausführung eingeteilt werden. Die
Zuteilerlogik teilt die Maschinenpuffer und Betriebsmittel zu, die
jede Uop benötigt,
um ausgeführt
zu werden. Die Register umbenennungslogik benennt Logikregister auf
Einträge
in einem Registerfile um. Außerdem
teilt der Zuteiler für jede
Uop in einer der beiden Uop-Warteschlangen einen Eintrag (einen
für Speicheroperationen
und einen für Nicht-Speicheroperationen)
vor den Anweisungs-Schedulers zu: Speicher-Scheduler, Schnell-Scheduler 1002,
langsamer/allgemeiner Floating-Point-Scheduler 1004 und
einfacher Floating-Point-Scheduler 1006. Die Uop-Scheduler 1002, 1004, 1006 bestimmen,
wann eine Uop bereit ist, ausgeführt
zu werden, auf der Basis der Bereitschaft ihrer abhängigen Eingangsregisteroperandenquellen
und der Verfügbarkeit
der Ausführungsbetriebsmittel,
die die Uops benötigen,
um ihre Operation abzuschließen.
Der Schnell-Scheduler 1002 dieser Ausführungsform kann auf jeder Hälfte des
Haupttaktzyklus einteilen, während
die anderen Scheduler nur einmal pro Hauptprozessortaktzyklus einteilen
können.
Die Scheduler arbitrieren für
die Dispatch-Ports, um Uops für
die Ausführung
einzuteilen.
-
Die
Registerfiles 1008, 1010 sitzen zwischen den Schedulern 1002, 1004, 1006 und
den Ausführungseinheiten 1012, 1014, 1016, 1018, 1020, 1022, 1024 in
dem Ausführungsblock 1011.
Es gibt ein separates Registerfile 1008, 1010 für Integer- bzw. Floating-Point-Operationen.
Jedes Registerfile 1008, 1010 dieser Ausführungsform
enthält
außerdem
ein Bypass-Netzwerk, das gerade abgeschlossene Ergebnisse, die noch
nicht in das Registerfile geschrieben wurden, zu neuen abhängigen Uops
umgehen oder weiterleiten kann. Das Integer-Registerfile 1008 und das Floating-Point-Registerfile 1010 können außerdem Daten
miteinander austauschen. Bei einer Ausführungsform ist das Integer-Registerfile 1008 in
zwei separate Registerfiles (ein Registerfile für die 32 Datenbit niedriger
Ordnung und ein zweites Registerfile für die 32 Datenbit hoher Ordnung) aufgeteilt.
Das Floating-Point-Registerfile 1010 einer Ausführungsform
enthält
128 Bitbreiteeinträge,
da Floating-Point-Anweisungen in der Regel Operanden mit einer Breite
von 64 bis 128 Bit aufweisen.
-
Der
Ausführungsblock 1011 enthält die Ausführungseinheiten 1012, 1014, 1016, 1018, 1020, 1022, 1024 in
denen die Anweisungen tatsächlich
ausgeführt
werden. Dieser Teil enthält
die Registerfiles 1008, 1010, die die Integer-
und Floating- Point-Datenoperandenwerte
speichern, die die Mikroanweisungen benötigen, um ausgeführt zu werden.
Der Prozessor 1000 dieser Ausführungsform besteht aus einer
Anzahl von Ausführungseinheiten:
Adressenerzeugungseinheit (AGU) 1012, AGU 1014,
Schnell-AGU 1016, Schnell-ALU 1018, Langsam-ALU 1020,
Floating-Point-ALU 1022, Floating-Point-Verschiebungseinheit 1024.
Bei dieser Ausführungsform
führen
die Floating-Point-Ausführungsblöcke 1022, 1024 Floating-Point-,
MMX-, SIMD- und SSE-Operationen aus. Die Floating-Point-ALU 322 dieser
Ausführungsform
enthält
einen 64 Bit mal 64 Bit Floating-Point-Dividierer zur Ausführung von Divisions-, Quadratwurzel-
und Rest-Mikro-Ops. Bei Ausführungsformen
der vorliegenden Erfindung findet jede Aktion, an der ein Floating-Point-Wert
beteiligt ist, in der Floating-Point-Hardware statt. Zum Beispiel
ist an Umsetzungen zwischen dem Integer-Format und dem Floating-Point-Format ein
Floating-Point-Registerfile beteiligt. Ähnlich geschieht eine Floating-Point-Divisionsoperation
in einem Floating-Point-Dividierer. Nicht-Floating-Point-Zahlen und der Integer-Typ
werden andererseits mit Integer-Hardwarebetriebsmitteln
behandelt. Die einfachen, sehr häufigen
ALU-Operationen
gehen zu den schnellen ALU-Ausführungseinheiten 1016, 1018.
Die schnellen ALUs 1016, 1018 dieser Ausführungsform können schnelle
Operationen mit effektiver Latenz von einer Hälfte eines Taktzyklus ausführen. Bei
einer Ausführungsform
gehen die meisten komplexen Integer-Operationen zu der langsamen
ALU 1020, da die langsame ALU 1020 Integer-Ausführungshardware
für Operationen
des Typs langer Latenz, wie zum Beispiel einen Multiplizierer, Schieber,
Flag-Logik und Zweigverarbeitung, enthält. Lade-/Speicheroperationen
des Speichers werden durch die AGUs 1012, 1014 ausgeführt. Für diese
Ausführungsform
werden die Integer-ALUs 1016, 1018, 1020 im
Kontext der Durchführung
von Integer-Operationen an 64-Bit-Detenoperanden beschrieben. Bei alternativen
Ausführungsformen
können
die ALUs 1016, 1018, 1020 so implementiert
werden, daß sie
vielfältige
Datenbit unterstützen,
darunter 16, 32, 128, 256 usw. Ähnlich
können
die Floating-Point-Einheiten 1022, 1024 so implementiert
werden, daß sie
eine Vielfalt von Operanden mit Bit verschiedener Breiten unterstützen. Bei
einer Ausführungsform
können
die Floating-Point-Einheiten 1022, 1024 in
Verbindung mit SIMD- und Multimediaanweisungen an mit 128 Bitbreiten
gepackten Datenoperanden operieren.
-
Bei
dieser Ausführungsform
fertigen die Uops-Scheduler 1002, 1004, 1006 abhängige Operationen ab,
bevor der Parent-Ladevorgang seine Ausführung beendet hat. Während Uops
spekulativ in dem Prozessor 1000 eingeteilt und ausgeführt werden,
enthält
der Prozessor 1000 auch Logik zum Behandeln von Speicherverfehlungen.
Wenn ein Datenladevorgang in dem Daten-Cache fehlt, kann es während des
Verlaufs abhängige
Operationen in der Pipeline geben, die den Scheduler mit vorrübergehend
falschen Daten zurückgelassen haben.
Ein Wiederabspielmechanismus verfolgt Anweisungen, die falsche Daten
verwenden, und führt
diese neu aus. Nur die abhängigen
Operationen müssen
wieder abgespielt werden, und die unabhängigen dürfen abgeschlossen werden.
Die Scheduler und der Wiederabspielmechanismus einer Ausführungsform
eines Prozessors sind außerdem
so ausgelegt, daß sie
Anweisungssequenzen für
Integer-Divisionsoperationen
mit erweiterter Genauigkeit fangen.
-
Der
Begriff „Register" bedeutet hier die
Onboard-Prozessorspeicherstellen, die als Teil von Makroanweisungen
zur Identifizierung von Operanden verwendet werden. Anders ausgedrückt sind
die hier erwähnten Register
diejenigen, die von außerhalb
des Prozessors (von der Perspektive eines Programmierers) aus sichtbar
sind. Die hier beschriebenen Register können jedoch unter Verwendung
einer beliebigen Anzahl verschiedener Techniken, wie zum Beispiel
fest zugeordnete physische Register, dynamisch zugeteilte physische
Register unter Verwendung von Registerumbenennung, Kombinationen
fest zugeordneter und dynamisch zugeteilter physischer Register
usw., durch Schaltkreise in einem Prozessor implementiert werden.
Für die
nachfolgenden Besprechungen sollen mit den Registern Datenregister
gemeint sein, die gepackte Daten halten, wie zum Beispiel 64-Bitbreite-MMXTM-Register (mm-Register) in Mikroprozessoren,
die mit der MMX-Technologie der Intel Corporation in Santa Clara,
Californien, ausgestattet sind. Diese MMX-Register, die sowohl in
Integer- als auch in Floating-Point-Form erhältlich sind, können mit
gepackten Datenelementen betrieben werden, die mit SIMD- und SSE-Anweisungen
einhergehen. Ähnlich
kann man auch zum Halten solcher gepackten Datenoperanden 128-Bitbreite-XMM-Register,
die mit der SSE2-Technologie zusammenhängen, benutzen.
-
In
den Beispielen der folgenden Figuren werden mehrere Datenoperanden
beschrieben. Der Einfachheit halber werden die Datensegmente vom
Buchstaben A aus alphabetisch beschriftet, wobei sich A an der untersten
Adresse und Z an der höchsten
Adresse befindet. Also kann sich A an der Adresse 0, B an der Adresse
1, C an der Adresse 3 und so weiter befinden. Obwohl die Datensequenzen
in bestimmten der Beispiele mit in umgekehrter alphabetischer Reihenfolge
angeordneten Buchstaben erscheinen, würde die Adressierung trotzdem
mit A bei 0, B bei 1 usw. beginnen. Konzeptuell impliziert eine
Rechtsschiebeoperation, wie bei der Schiebe-Rechts-Zusammenführung für eine Ausführungsform,
das Rechtsschieben der Datensegmente der unteren Adresse heraus,
wenn die Sequenz D, C, B, A lautet. Ein Rechtsschieben schiebt also
einfach die Datenelemente eines Datenblocks an einer stationären Linie
vorbei nach rechts. Weiterhin kann eine Schiebe-Rechts-Zusammenführungsoperation
konzeptuell die äußersten
rechten Datensegmente aus einem Operanden in die linke Seite eines
anderen Datenoperanden schieben, als ob sich die beiden Operanden
auf einem Kontinuum befanden.
-
16A ist ein Blockschaltbild einer Ausführungsform
von Logik zur Durchführung
einer Parallel-Schiebe-Rechts-Zusammenführungsoperation an Datenoperanden
gemäß der vorliegenden
Erfindung. Die Anweisung PSRMRG für eine Schiebe-Rechts-Zusammenführungs-(auch
eine Registerschiebe-)Operation dieser Ausführungsform beginnt mit drei
Informationselementen: einem ersten Datenoperanden 1102,
einem zweiten Datenoperanden 1104 und einem Schiebezählwert 1106.
Bei einer Ausführungsform
wird die Schiebe-PSRMRG-Anweisung
in einer Mikrooperation decodiert. Bei einer alternativen Ausführungsform
kann die Anweisung in eine vielfältige
Anzahl von Mikro-Ops decodiert werden, um die Schiebe-Zusammenführungsoperation
an den Datenoperanden durchzuführen.
Bei diesem Beispiel sind die Datenoperanden 1102, 1104 64 Bit
breite Datenstücke,
die in einem Register/Speicher gespeichert sind, und der Schiebezählwert 1106 ist
ein 8 Bit breiter sofortiger Wert. Abhängig von der konkreten Implementierung
können
die Datenoperanden und der Schiebezählwert andere Breiten aufweisen,
wie zum Beispiel 128/256 Bit bzw. 16 Bit. Der erste Operand 1102 besteht
in diesem Beispiel aus acht Datensegmenten: P, O, N, M, L, K, J
und I. Der zweite Operand 1104 besteht auch aus acht Datensegmenten:
H, G, F, E, D, C, B und A. Die Datensegmente weisen hier gleiche Länge auf
und umfassen jeweils ein einziges Byte (8 Bit) Daten. Eine andere
Ausführungsform
der vorliegenden Erfindung operiert jedoch mit längeren 128-Bit-Operanden, wobei
die Datensegmente jeweils aus einem einzigen Byte (8 Bit) bestehen
und der 128 Bit breite Operand 16 Byte breite Datensegmente aufweisen
würde. Ähnlich würde, wenn
jedes Datensegment ein Doppelwort (32 Bit) oder ein Quadwort (64
Bit) wäre,
der 128-Bit-Operand vier Doppelwörter
breite bzw. zwei Quadwörter
breite Datensegmente aufweisen. Ausführungsformen der vorliegenden
Erfindung sind also nicht auf Datenoperanden, Datensegmente oder
Schiebezählwerte
bestimmter Länge
beschränkt
und können
für jede
Implementierung entsprechend bemessen werden.
-
Die
Operanden 1102, 1104 können entweder in einem Register
oder an einer Speicherstelle oder in einem Registerfile oder einer
Mischung verankert sein. Die Datenoperanden 1102, 1104 und
der Zählwert 1106 werden
zusammen mit einer Schiebe-Rechts-Zusammenführungsanweisung zu einer Ausführungseinheit 1110 in
dem Prozessor gesendet. Bis die Schiebe-Rechts-Zusammenführungsanweisung
die Ausführungseinheit 1110 erreicht,
sollte die Anweisung früher
in der Prozessor-Pipeline decodiert worden sein. Die Schiebe-Rechts-Zusammenführungsanweisung
kann also in Form einer Mikrooperation (Uop) oder in einem bestimmten
anderen decodierten Format vorliegen. Bei dieser Ausführungsform
werden die beiden Datenoperanden 1102, 1104 in
einer Verkettungslogik und einem temporären Register empfangen. Die
Verkettungslogik fürt
die Datensegmente für
die beiden Operanden zusammen bzw. verbindet diese und plaziert
den neuen Datenblock in einem temporären Register. Hierbei besteht
der neue Datenblock aus 16 Datensegmenten: P, O, N, M, L, K, J,
I, H, G, F, E, D, C, B, A. Da dieses Beispiel mit 64 breiten Operanden
arbeitet, muß das
temporäre Register
zum Halten der kombinierten Daten 128 Bit breit sein. Für 128 Bit
breite Datenoperanden wird ein 256 Bit breites temporäres Register
benötigt.
-
Die
Rechtsschiebelogik 1114 in der Ausführungseinheit 1110 nimmt
den Inhalt des temporären
Registers und führt
eine logische Rechtsverschiebung des Datenblocks um n Datensegmente
durch, wie durch den Zählwert 1106 angefordert.
Bei dieser Ausführungsform
gibt der Zählwert 1106 die
Anzahl von nach rechts zu schiebenden Byte an. Abhängig von
der konkreten Implementierung kann mit dem Zählwert 1106 auch abhängig von
der Granularität
der Datensegmente die Anzahl zu schiebender Bit, Nibbles, Wörter, Doppelwörter, Quadwörter usw.
angegeben werden. Für
dieses Beispiel ist n gleich 3, sodaß der Inhalt des temporären Registers
um drei Byte geschoben wird. Wenn jedes Datensegment ein Wort oder
Doppelwort breit ist, dann kann der Zählwert die Anzahl zu schiebender
Wörter
bzw. Doppelwörter
angeben. Bei dieser Ausführungsform
werden von der linken Seite des temporären Registers aus 0en eingeschoben,
um die geleerten Stellen aufzufüllen,
während
die Daten in dem Register nach rechts geschoben werden. Wenn der
Schiebezählwert 1106 größer als
die Anzahl von Datensegmenten in einem Datenoperanden (in diesem
Fall acht) ist, können
also eine oder mehrere 0en in dem Resultat 1108 erscheinen.
Wenn der Schiebezählwert 1106 größer oder
gleich der Gesamtzahl von Datensegmenten für beide Operanden ist, wird
ferner das Resultat aus nur 0en bestehen, da alle Datensegmente
weggeschoben worden sein werden. Die Rechtsschiebelogik 1114 gibt
die entsprechende Anzahl von Datensegmenten aus dem temporären Register
als das Resultat 1108 aus. Bei einer anderen Ausführungsform
kann ein Ausgangsmultiplexer oder -speicher nach der Rechtsschiebelogik
vorgesehen werden, um das Resultat auszugeben. Bei diesem Beispiel
ist das Resultat 64 Bit breit und enthält acht Byte. Aufgrund der
Schiebe-Rechts-Zusammenführungsoperation
an den beiden Datenoperanden 1102, 1104 besteht
das Resultat aus den folgenden acht Datensegmenten: K, J, I, H,
G, F, E und D.
-
16B ist ein Blockschaltbild einer anderen Ausführungsform
von Logik zur Durchführung
einer Schiebe-Rechts-Zusammenführungsoperation.
Wie bei dem vorherigen Beispiel von 16A beginnt
die Schiebe-Rechts-Zusammenführungsoperation
dieser Ausführungsform
mit drei Informationstücken:
einem ersten 64 Bit breiten Datenoperanden 1102, einem
zweiten 64 Bit breiten Datenoperanden 1104 und einem acht
Bit breiten Schiebezählwert 1106.
Der Schiebezählwert 1106 gibt
an, um wieviele Stellen die Datensegmente geschoben werden sollen.
Bei dieser Ausführungsform
wird der Zählwert 1106 in
Anzahl von Byte ausgedrückt.
Bei einer alternativen Ausführungsform
kann der Zählwert
die Anzahl von Bit, Nibbles, Wörtern,
Doppelwörtern
oder Quadwörtern,
um die die Daten verschoben werden sollen, angeben. Der erste und
der zweite Operand 1102 in diesem Beispiel bestehen jeweils
aus acht gleichlangen, bytegroßen
Datensegmenten (H, G, F, E, D, C, B, A), und der zweite Operand 1104 besteht
aus acht Datensegmenten (P, O, N, M, L, K, J, I). Der Zählwert n
ist gleich 3. Eine andere Ausführungsform
der Erfindung kann mit Operanden und Datensegmenten alternativer
Länge operieren,
wie zum Beispiel mit 128/256/512 Bit breiten Operanden und Datensegmenten der
Größe Bit/Byte/Wort/Doppelwort/Quadwort,
und den 8/16/32 Bit breiten Schiebezählwerten. Ausführungsformen
der vorliegenden Erfindung sind also nicht auf Datenoperanden, Datensegmente
oder Schiebezählwerte
bestimmter Länge
beschränkt
und können
für jede
Implementierung entsprechend bemessen werden.
-
Die
Datenoperanden 1102, 1104 und der Zählwert 1106 werden
zusammen mit einer Schiebe-Rechts-Zusammenführungsanweisung zu einer Ausführungseinheit 1120 in
dem Prozessor gesendet. Bei dieser Ausführungsform werden der erste
Datenoperand 1102 und der zweite Datenoperand 1104 in
einer Linksschiebelogik 1122 bzw. einer Rechtsschiebelogik 1124 empfangen.
Der Zählwert 1106 wird
außerdem
zu der Schiebelogik 1122, 1124 gesendet. Die Linksschiebelogik 1122 schiebt
Datensegmente für
den ersten Operanden 1102 um die „Anzahl von Datensegmenten
in dem ersten Operanden-n"-Anzahl
von Segmenten nach links. Während
die Datensegmente nach links geschoben werden, werden von der rechten
Seite aus 0en eingeschoben, um die leergewordenen Stellen aufzufüllen. In
diesem Fall gibt es acht Datensegmente, sodaß der erste Operand 1102 um
acht minus drei oder fünf
Stellen nach links geschoben wird. Der erste Operand 1102 wird
um diesen verschiedenen Wert geschoben, um die korrekte Datenausrichtung
zum Zusammenführen
in dem logischen OR-Gatter 1126 zu erzielen. Nach der Linksverschiebung
hier lautet der erste Datenoperand nun: K, J, I, 0, 0, 0, 0, 0.
Wenn der Zählwert 1106 größer als
die Anzahl der Anzahl von Datensegmenten in dem Operanden ist, kann
die Linksschiebeberechnung eine negative Zahl ergeben, wodurch eine
negative Linksverschiebung angezeigt wird. Eine logische Linksverschiebung
mit einem negativen Zählwert
wird als ein Schieben in der negativen Richtung interpretiert und
ist im wesentlichen ein logisches Rechtsschieben. Ein negatives
Linksschieben bringt 0en von der linken Seite des ersten Operanden 1102 herein.
-
Ähnlich schiebt
die Rechtsschiebelogik 1124 Datensegmente für den zweiten
Operanden um n Anzahl von Segmenten nach rechts. Während die
Datensegmente nach rechts geschoben werden, werden von der linken
Seite aus 0en eingeschoben, um die leergewordenen Stellen aufzufüllen. Der
zweite Datenoperand lautet dann: 0, 0, 0, H, G, F, E, D. Die geschobenen
Operanden werden aus der Links-/Rechtsschiebelogik 1122, 1124 ausgegeben
und in dem logischen OR-Gatter 1126 zusammengeführt. Das
OR-Gatter führt
eine logische OR-Verknüpfung
der Datensegmente durch und liefert ein 64 Bit breites Resultat 1108 dieser
Ausführungsform.
Die OR-Verknüpfung
von „K,
J, I, 0, 0, 0, 0, 0" mit „0, 0,
0, H, G, F, E, D" erzeugt
ein Resultat 1108, das acht Byte umfaßt: K, J, I, H, G, F, E, D.
Das Ergebnis ist dasselbe wie bei der ersten Ausführungsform
der vorliegenden Erfindung in 16A.
Man beachte, daß für einen
Zählwert
n 1106 größer als
die Anzahl von Datenelementen in einem Operanden die entsprechende
Anzahl von 0en, beginnend auf der linken Seite, in dem Resultat
erscheinen kann. Wenn der Zählwert 1106 größer oder
gleich der Gesamtzahl von Datenelementen in beiden Operanden ist,
umfaßt
das Resultat ferner nur 0en.
-
17A zeigt die Funktionsweise einer Parallel-Schiebe-Rechts-Zusammenführungsanweisung
gemäß einer
ersten Ausführungsform
der vorliegenden Erfindung. Für
die vorliegenden Besprechungen werden MM1 1204, MM2 1206,
TEMP 1232 und DEST 1242 im allgemeinen als Operanden
oder Datenblöcke
bezeichnet, sind aber nicht dahingehend eingeschränkt und
enthalten außerdem
Register, Registerfiles und Speicherstellen. Bei einer Ausführungsform
sind MM1 1204 und MM2 1206 64 Bit breite MMX-Register
(die in bestimmten Fällen
auch als „mm" bezeichnet werden).
Im Zustand I 1200 werden ein Schiebezählwert imm[y] 1202, ein
erster Operand MM1[x] 1204 und ein zweiter Operand MM2[x] 1206 mit
der Parallel-Schiebe-Rechts-Zusammenführungsanweisung
gesendet. Der Zählwert 1202 ist
ein sofortiger Wert mit einer Breite von y Bit. Der erste Operand 1204 und
der zweite Operand 1206 sind Datenblöcke, die x Datensegmente enthalten
und Gesamtbreiten von jeweils 8× Bit
aufweisen, wenn jedes Datensegment ein Byte (8 Bit) ist. Der erste
Operand 1204 und der zweite Operand 1206 sind
jeweils mit einer Anzahl kleinerer Datensegmente gepackt. Für dieses Beispiel
besteht der erste Datenoperand MM1 1204 aus acht gleichlangen
Datensegmenten: P 1211, O 1212, N 1213,
M 1214, L 1215, K 1216, J 1217,I 1218. Ähnlich besteht
der zweite Datenoperand MM2 1206 aus acht gleichlangen
Datensegmenten: H 1221, G 1222, F 1223,
E 1224, D 1225, C 1226, B 1227,
A 1228. Jedes dieser Datensegmente ist also „x·8" Bit breit. Wenn
x also 8 ist, ist jeder Operand 8 Byte oder 64 Bit breit. Bei anderen
Ausführungsformen
kann ein Datenelement ein Nibble (4 Bit), ein Wort (16 Bit), ein
Doppelwort (32 Bit), ein Quadwort (64 Bit) usw. sein. Bei alternativen
Ausführungsformen
kann x 16, 32, 64 usw. Datenelemente breit sein. Der Zählwert y
ist bei dieser Ausführungsform
gleich 8 und der Sofortige kann als ein Byte präsentiert werden. Bei alternativen
Ausführungsformen
kann y 4, 16, 32 usw. Bit breit sein. Außerdem ist der Zählwert 1202 nicht
auf einen sofortigen Wert beschränkt
und kann auch in einem Register oder in einer Speicherstelle gespeichert
werden.
-
Die
Operanden MM1 1204 und MM2 1206 werden im Zustand
II 1230 zusammengeführt,
um einen temporären
Datenblock TEMP[2x] 1232 von 2x Datenelementen (oder Byte
in diesem Fall) Breite zu bilden. Die zusammengeführten Daten 1232 dieses
Beispiels bestehen aus sechzehn Datensegmenten, die folgendermaßen angeordnet
sind: P, O, N, M, L, K, J, I, H, G, F, E, D, C, B und A. Ein acht
Byte breites Fenster 1234 rahmt acht Datensegmente des
temporären
Datenblocks 1232, beginnend von der äußersten rechten Flanke, ein.
Die rechte Flanke des Fensters 1234 wäre also mit der rechten Flanke
des Datenblocks 1232 ausgerichtet, sodaß das Fenster 1234 die
folgende Datenmenge einrahmt: H, G, F, E, D, C, B und A. Der Schiebezählwert n 1202 gibt
den gewünschten
Betrag der Rechtsschiebung der zusammengeführten Daten an. Der Zählwert kann
implementiert werden, um den Schiebebetrag in Bit, Nibble, Byte,
Wörtern,
Doppelwörtern,
Quadwörtern usw.
oder einer bestimmten Anzahl von Datensegmenten auszudrücken. Auf
der Basis des Zählwerts 1202 wird
hier der Datenblock 1232 um n Datensegmente nach rechts
geschoben 1236. Bei diesem Beispiel ist n gleich 3 und
der Datenblock 1232 wird um drei Positionen nach rechts
geschoben. Anders betrachtet wird das Fenster 1234 in der
entgegengesetzen Richtung geschoben. Anders ausgedrückt kann
das Fenster 1234 konzeptuell als sich um drei Positionen
nach links von der rechten Flanke des temporären Datenblocks 1232 aus verschiebend
betrachtet werden. Bei einer Ausführungsform würde das
Resultat, wenn der Schiebezählwert
n größer als
die Gesamtzahl von Datensegmenten 2x, die in dem kombinierten Datenblock
vorhanden sind, ist, nur „0"en umfassen. Ähnlich würde, wenn
der Schiebezählwert
n größer oder
gleich der Anzahl von Datensegmenten x in dem ersten Operanden 1204 ist,
das Resultat, beginnend von der linken Seite des Resultats, eine oder
mehrere „0"en enthalten. Im
Zustand III 1240 werden die durch das Fenster 1234 eingerahmten
Datensegmente (K, J, I, H, G, F, E, D) als ein Resultat an das x
Datenelemente breite Ziel DEST[x] 1242 ausgegeben.
-
17B zeigt die Funktionsweise einer Schiebe-Rechts-Zusammenführungsanweisung
gemäß einer zweiten
Ausführungsform.
Der Schiebe-Rechts-Zusammenführungsanweisung
geht im Zustand I 1250 ein Zählwert imm[y] von y Bit, ein
erster Datenoperand MM1 [x] von x Datensegmenten und ein zweiter
Datenoperand MM2[x] von x Datensegmenten einher. Wie bei dem Beispiel
von 17A ist y gleich 8 und x ist
gleich 8, wobei MM1 und MM2 jeweils 64 Bit oder 8 Byte breit sind.
Das erste 1204 und zweite 1206 dieser Ausführungsform
werden mit einer Anzahl gleichgroßer Datensegmente, die in diesem
Fall jeweils ein Byte breit sind, „P 1211, O 1212,
N 1213, M 1214, L 1215, K 1216,
J 1217, I 1218" bzw.
H 1221, G 1222, F 1223, E 1224,
D 1225, C 1226, B 1227, A 1228" gepackt.
-
Im
Zustand II 1260 wird der Schiebezählwert n 1202 zum
Schieben des ersten Operanden 1204 und des zweiten Operanden 1206 benutzt.
Bei dieser Ausführungsform
gibt der Zählwert
die Anzahl von Datensegmenten an, um die die zusammengeführten Daten
rechtsgeschoben werden sollen. Bei dieser Ausführungsform findet das Schieben
vor dem Zusammenführen
des ersten Operanden 1204 und des zweiten Operanden 1206 statt.
Folglich wird der erste Operand 1204 anders geschoben.
In diesem Beispiel wird der erste Operand 1204 um x minus
n Datensegmente nach links geschoben. Die Berechnung „x – n" ermöglicht bei
dem späteren Datenzusammenführen eine
ordnungsgemäße Datenausrichtung.
-
Für einen
Zählwert
n von 3 wird also der erste Operand 1204 um fünf Datensegmente
oder fünf
Byte nach links geschoben. Von der rechten Seite aus werden 0en
eingeschoben, um die leergewordenen Stellen zu füllen. Wenn der Schiebezählwert n 1202 jedoch
größer als
die Anzahl von in dem ersten Operanden 1204 verfügbaren Datensegmenten
x ist, kann die Linksschiebeberechnung von „x – n" eine negative Zahl ergeben, wodurch
im wesentlichen ein negatives Linksschieben angegeben wird. Bei
einer Ausführungsform
wird ein logisches Linksschieben mit einem negativen Zählwert als
ein Linksschieben in der negativen Richtung interpretiert und ist
im wesentlichen ein logisches Rechtsschieben. Ein negatives Linksschieben
bringt 0en von der linken Seite des ersten Operanden 1204 aus
herein. Ähnlich
wird der zweite Operand 1206 um den Schiebezählwert von
3 nach rechts geschoben und Den werden von der linken Seite aus
eingeschoben, um die Leerstellen zu füllen. Die geschobenen Ergebnisse
werden für
den ersten Operanden 1204 und den zweiten Operanden 1206 in
x Datensegmente breiten Register TEMP1 1266 bzw. TEMP2 1268 gespeichert.
Die geschobenen Ergebnisse aus TEMP1 1266 und TEMP2 1268 werden
zusammengeführt 1272,
um die gewünschten Schiebe-Zusammenführungsdaten
in dem Register DEST 1242 im Zustand III 1270 zu
erzeugen. Wenn der Schiebezähler
n 1202 größer als
x ist, kann der Operand eine oder mehrere 0en in dem Resultat von
der linken Seite enthalten. Wenn der Schiebezählwert n 1202 größer oder
gleich 2x ist, umfaßt
ferner das Resultat in DEST 1242 nur 0en.
-
In
den obigen Beispielen, wie zum Beispiel in 17A und 17B, können
MM1 und/oder MM2 64-Bit-Datenregister in einem Prozessor sein, der
mit MMX/SSE-Technologie
ausgestattet ist, oder 128-Bit-Datenregister bei SSE2-Technologie.
Abhängig
von der Implementierung können
diese Register 64/128/256 Bit breit sein. Ähnlich können MM1 und/oder MM2 andere
Speicherstellen als ein Register sein. Bei der Prozessorarchitektur
einer Ausführungsform
sind MM1 und MM2 Quellenoperanden für eine Schiebe-Rechts-Zusammenführungsanweisung
(PSRMRG), wie oben beschrieben. Der Schiebezählwert IMM ist auch ein Sofortiger
für eine
solche PSRMRG-Anweisung. Bei einer solchen Ausführungsform ist das Ziel für das Resultat
DEST auch ein MMX- oder XMM-Datenregister.
Des Weiteren kann DEST das gleiche Register sein wie einer der Quellenoperanden.
Zum Beispiel weist bei einer Architektur eine PSRMRG-Anweisung einen ersten
Quellenoperanden MM1 und einen zweiten Quellenoperanden MM2 auf.
Das vordefinierte Ziel für das
Resultat kann das Register für
den ersten Quellenoperanden, in diesem Fall MM1, sein.
-
18A ist ein Flußdiagramm einer Ausführungsform
eines Verfahrens zum parallelen Rechtsschieben und Zusammenführen von
Datenoperanden. Die Längenwerte
von L dienen hier im allgemeinen zur Darstellung der Breite der
Operanden und Datenblöcke.
Abhängig
von der konkreten Ausführungsform
kann mit L die Breite in Datensegmenten, Bit, Byte, Wörtern usw.
gekennzeichnet werden. Im Block 1302 wird ein erster Datenoperand
der Länge
L zur Verwendung mit der Ausführung
einer Schiebe-Zusammenführungsoperation empfangen.
Im Block 1304 wird ein zweiter Datenoperand der Länge L zur
Verwendung bei der Ausführung der
Schiebe-Zusammenführungsoperation
empfangen. Im Block 1306 wird ein Schiebezählwert empfangen, um
anzuzeigen, wieviele Datensegmente oder Distanz in Bit/Nibble/Byte/Wörtern/Doppelwörtern/Quadwörtern. Die
Ausführungslogik
im Block 1308 verkettet den ersten Operanden mit dem zweiten
Operanden. Bei einer Ausführungsform
hält ein
temporäres
Register der Länge
2L den verketteten Datenblock. Bei einer alternativen Ausführungsform
werden die zusammengeführten
Daten in einer Speicherstelle gehalten. Im Block 1310 wird
der verkettete Datenblock um den Schiebezählwert nach rechts geschoben.
Wenn der Zählwert
als ein Datensegmentzählwert
ausgedrückt
wird, wird der Datenblock um soviele Datensegmente nach rechts geschoben
und 0en werden von links entlang dem höchstwertigen Ende des Datenblocks
eingeschoben, um die Leerstellen zu füllen. Wenn der Zählwert zum
Beispiel in Bit oder Byte ausgedrückt wird, wird der Datenblock ähnlich um
diese Distanz nach rechts geschoben. Im Block 1312 wird
aus der rechten Seite oder dem niedrigstwertigen Ende des verschobenen
Datenblocks ein Resultat der Länge
L erzeugt. Bei einer Ausführungsform
werden die Datensegmente der Lange-L-Menge aus dem geschobenen Datenblock
in ein Zielregister oder in eine Speicherstelle gemultiplext.
-
18B ist ein Flußdiagramm einer weiteren Ausführungsform
eines Verfahrens zum Rechtsschieben und Zusammenführen von
Daten. Im Block 1352 wird ein erster Datenoperand der Länge L zur
Verarbeitung mit einer Rechtsschiebe- und Zusammenführungsoperation
empfangen. Im Block 1354 wird ein zweiter Datenoperand
der Länge
L empfangen. Im Block 1356 ein Schiebezählwert zur Anzeige der gewünschten
Rechtsschiebedistanz. Im Block 1358 wird der erste Datenoperand
auf der Basis einer Berechnung mit dem Schiebezählwert nach links geschoben.
Die Berechnung einer Ausführungsform
umfaßt
das Subtrahieren des Schiebezählwert
von L. Wenn zum Beispiel die Operandenlänge L und der Schiebezählwert über Datensegmente
ausgedrückt
vorliegen, dann wird der erste Operand um „L-Schiebezählwert" Segmente nach links
geschoben, wobei von dem niedrigstwertigen Ende des Operanden aus
0en eingeschoben werden. Ähnlich
würde,
wenn L in Bit ausgedrückt
wird und der Zählwert
in Byte vorliegt, der erste Operand um „L-Schiebezählwert·8" Bit nach links geschoben.
Der zweite Datenoperand wird im Block 1360 um den Schiebezählwert nach rechts
geschoben und 0en werden von dem höchstwertigen Ende des zweiten
Operanden aus eingeschoben, um Leerstellen zu füllen. Im Block 1362 werden
der verschobene erste Operand und der verschobene zweite Operand
zusammengeführt,
um ein Resultat der Länge
L zu erzeugen. Bei einer Ausführungsform
führt das Zusammenführen zu
einem Ergebnis, das die gewünschten
Datensegmente sowohl aus dem ersten als auch dem zweiten Operanden
umfaßt.
-
Bei
einem zunehmend beliebten Verwendungszweck für Computer werden extrem große Video-
und Audiodateien manipuliert. Obwohl diese Video- und Audiodaten
in der Regel über
Netzwerke mit sehr hoher Bandbreite oder Speichermedien mit hoher
Kapazität
transferiert werden, ist immer noch eine Datenkomprimierung notwendig,
um den Verkehr abzuwickeln. Folglich werden verschiedene Komprimierungsalgorithmen zu
wichtigen Teilen des Representations- oder Kodierungsschemas für viele
beliebte Audio-, Bild- und Videoformate. Video gemäß einem
der Standards der Motion Picture Expert Group (MPEG) ist eine Anwendung,
die Komprimierung verwendet. MPEG-Video wird in eine Hierarchie
von Schichten zerlegt, um die Fehlerbehandlung, das Direktsuchen
und Editieren und die Synchronisation zu erleichtern.
-
Zur
Veranschaulichung werden die Schichten, die ein MPEG-Video ausmachen,
kurz beschrieben. Auf der obersten Ebene befindet sich eine Videosequenzschicht
mit einem selbstängigen
Bitstrom. Eine Schicht weiter unten befindet sich eine Bildergruppe,
die aus einer oder mehreren Gruppen von Intra- und/oder Nicht-Intra-Einzelbildern
besteht. Die dritte Schicht ist die Bildschicht selbst, und die
nächste
Schicht darunter eine Slice-Schicht. Jedes Slice ist eine zusammenhängende Sequenz
rastergeordneter Makroblöcke,
am häufigsten
zeilenweise bei typischen Videoanwendungen, aber nicht dahingehend
beschränkt.
Jedes Slice besteht aus Makroblöcken,
die 16×16-Arrays
von Luminanzpixeln oder Bilddatenelementen mit zwei 8×8-Arrays zugeordneter
Chrominanzpixel sind. Die Makroblöcke können zur weiteren Verarbeitung,
wie zum Beispiel Transformationscodierung, weiter in distinkte 8×8-Blöcke unterteilt
werden. Der Makroblock ist eine fundamentale Einheit für die Bewegungskompensation
und Bewegungsschätzüng und kann
ihm zugeordnete Bewegungsvektoren aufweisen. Abhängig von der Ausführungsform
können
Makroblöcke
16 Zeilen mal 16 Spalten oder vielfältige Dimensionen aufweisen.
-
Eine
zeitliche Prädiktionstechnik,
die in MPEG-Video verwendet wird, basiert auf Bewegungsschätzung. Bewegungsschätzung basiert
auf der Voraussetzung, daß aufeinanderfolgende
Videoeinzelbilder im allgemeinen ähnlich sein werden, mit Ausnahme
von durch sich in den Einzelbildern bewegenden Objekten verursachte Änderungen.
Wenn die Bewegung zwischen Einzelbildern Null ist, kann ein Codierer
das aktuelle Einzelbild leicht und effizient als ein Duplikat des
vorherigen oder Prädiktionseinzelbildes
vorhersagen. Das vorherige Einzelbild kann auch als das Bezugseinzelbild
bezeichnet werden. Bei einer anderen Ausführungsform kann das Bezugseinzelbild
dann das nächste
Einzelbild oder sogar irgendein anderes Einzelbild in der Sequenz
sein. Ausführungsformen
der Bewegungsschätzung
müssen
nicht ein aktuelles Einzelbild mit einem vorherigen Einzelbild vergleichen.
Es wird also ein beliebiges anderes Einzelbild bei dem Vergleich
verwendet. Die Informationen, die zum Codierer gesendet werden müssen, werden
zu dem syntaktischen Overhead, das notwendig ist, um das Bild aus
dem ursprünglichen
Bezugseinzelbild zu rekonstruieren. Wenn zwischen den Bildern jedoch
Bewegung stattfindet, ist die Situation komplexer. Die Unterschiede
zwischen einem am besten übereinstimmenden
Makroblock und dem aktuellen Makroblock waren im Idealfall eine
Menge 0-Werte. Bei der Codierung eines Makroblocks werden die Unterschiede
zwischen der besten Übereinstimmung
und dem aktuellen Makroblock transformiert und quantisiert. Bei
einer Ausführungsform
werden die quantisierten Werte zur Komprimierung zu einer Codierung
variabler Länge übermittelt.
Da 0en sehr gut komprimiert werden können, ist eine beste Übereinstimmung
mit vielen 0-Differenzwerten wünschenswert.
Außerdem
können
aus den Differenzwerten Bewegungsvektoren abgeleitet werden.
-
19A zeigt ein erstes Beispiel für die Bewegungsschätzung. Das
linke Einzelbild 1402 ist eine Probe eines vorherigen Videoeinzelbildes,
die eine Strichfigur und ein Schild enthält. Das rechte Einzelbild 1404 ist
eine Probe eines aktuellen Videoeinzelbildes mit einer ähnlichen
Strichfigur und einem ähnlichen
Schild. In dem aktuellen Einzelbild 1404 hat die Panoramaeinstellung
dazu geführt,
daß sich
das Schild von seiner ursprünglichen
Position in dem vorherigen Einzelbild 1402 aus nach rechts
und nach unten bewegt. Die Strichfigur mit den nun erhobenen Armen
in dem aktuellen Einzelbild hat sich ebenfalls nach unten und nach
rechts von der Mitte des vorherigen Einzelbildes 1402 aus
verschoben. Mit Bewegungsschätzalgorithmen
können
die Änderungen
zwischen den beiden Videoeinzelbildern 1402, 1404 adäquat repräsentiert
werden.
-
Bei
einer Ausführungsform
führt der
Bewegungsschätzalgorithmus
eine umfassende zweidimensionale (2D-)Raumsuche für jeden
Luminanzmakroblock durch. Abhängig
von der Implementierung kann die Bewegungsschätzung möglicherweise nicht direkt auf
die Chrominanz in MPEG-Video angewandt werden, da die Farbbewegung
vielleicht adäquat
durch dieselben Bewegungsinformationen wie die Luminanz repräsentiert werden
kann. Es sind viele verschiedene Verfahren zur Implementierung der
Bewegungsschätzung
möglich, und
das konkrete Schema zur Durchführung
der Bewegungsschätzung
hängt bis
zu einem gewissen Grade von der Komplexität gegenüber Qualitätsfragen für diese spezifische Anwendung
ab. Folglich kann eine vollständige,
erschöpfende
Suche über
einen breiten 2D-Bereich im allgemeinen die besten Übereinstimmungsergebnisse
erzielen. Diese Leistungsfähigkeit
hat jedoch extreme rechnerische Kosten, da die Bewegungsschätzung häufig der
rechenaufwendigste Teil der Videocodierung ist. Versuche, die Kosten
durch Begrenzen des Pixelsuchumfangs oder des Typs der Suche zu
verringern, können
sich auf die Videoqualität
auswirken.
-
19B zeigt ein Beispiel für eine Makroblocksuche. Die
Einzelbilder 1410, 1420 enthalten jeweils verschiedene
Makroblöcke.
Der Zielmakroblock 1430 eines aktuellen Einzelbildes ist
der aktuelle Makroblock, der mit vorherigen Makroblöcken aus
den vorherigen Einzelbildern 1410, 1420 verglichen
werden soll. In dem ersten Einzelbild 1410 enthält ein schlecht übereinstimmender
Makroblock 1412 einen Teil eines Schildes und stimmt schlecht
mit dem aktuellen Makroblock überein.
In dem zweiten Einzelbild 1420 enthält ein gut übereinstimmender Makroblock 1420 Teile
eines Schildes und einen Kopf der Strichfigur, wie in dem zu codierenden aktuellen
Makroblock 1430. Die beiden Makroblöcke 1422, 1430 weisen
bestimmte Gemeinsamkeiten auf, und es ist nur ein geringfügiger Fehler
sichtbar. Da eine relativ gute Übereinstimmung
gefunden wird, weist der Codierer dem Makroblock Bewegungsvektoren
zu. Diese Vektoren geben an, um wieviel der Makroblock horizontal
und vertikal verschoben werden muß, damit eine Übereinstimmung
erfolgt.
-
20 zeigt
ein Anwendungsbeispiel für
die Bewegungsschätzung
und die resultierende Prädiktion bei
der Erzeugung eines zweiten Einzelbildes. Das vorherige Einzelbild 1510 geht
dem aktuellen Einzelbild 1520 zeitlich voraus. Bei diesem
Beispiel wird das aktuelle Einzelbild 1520 von dem vorherigen
Einzelbild 1510 subtrahiert, um ein weniger kompliziertes
Restfehlerbild 1530 zu erhalten, das codiert und übertragen
werden kann. Das vorherige Einzelbild dieses Beispiels 1510 umfaßt ein Schild 1511 und
eine Strichfigur 1513. Das aktuelle Einzelbild 1520 umfaßt ein Schild 1521 und
zwei Strichfiguren 1522, 1523 auf einem Board 1524.
Je genauer die Bewegung geschätzt
und angepaßt
wird, desto wahrscheinlicher ist es, daß sich der Restfehler Null
nähern
kann und zu einer höheren
Codierungseffizienz führt.
Makroblockprädiktion
kann dabei helfen, die Suchfenstergröße zu reduzieren.
-
Codierungseffizienz
kann erzielt werden, indem der Umstand ausgenutzt wird, daß Bewegungsvektoren
häufig
stark zwischen Makroblöcken
korreliert sind. Die horizontale Komponente kann also mit dem zuvor gültigen horizontalen
Bewegungsvektor verglichen und differenzcodiert werden. Ähnlich kann
für die
vertikale Komponente eine Differenz vor der Codierung berechnet
werden. Bei diesem Beispiel ergibt die Subtraktion des aktuellen
Einzelbildes 1520 von dem vorherigen Einzelbild 1510 ein
Restbild 1530, das die zweite Strichfigur 1532 mit
erhobenen Armen und das Board 1534 enthält. Dieses Restbild 1530 wird
komprimiert und übertragen.
Im Idealfall kann dieses Restbild 1530 weniger kompliziert
codiert werden und nimmt weniger Speicher in Anspruch, als das gesamte
aktuelle Einzelbild 1520 zu komprimieren und zu übertragen.
Nicht jede Makroblocksuche führt
jedoch zu einer akzeptablen Übereinstimmung.
Wenn der Codierer bestimmt, daß es
keine akzeptable Übereinstimmung
gibt, kann der konkrete Makroblock codiert werden.
-
21A–B
zeigen ein aktuelles Einzelbildbeispiel 1601 und ein vorheriges
Einzelbildbeispiel 1650, die während der Bewegungsschätzung verarbeitet
werden. Das vorherige Einzelbild 1640 geht dem aktuellen Einzelbild 1601 in
chronologischer Reihenfolge für
die Videoeinzelbildserie voraus. Jedes Einzelbild besteht aus einer
sehr großen
Anzahl von Pixeln, die sich in horizontaler und vertikaler Richtung über das
Einzelbild erstrecken. Das aktuelle Einzelbild 1601 umfaßt eine
Anzahl von Makroblöcken 1610, 1621–1627,
die horizontal und vertikal angeordnet sind. Bei dieser Ausführungsform
wird das aktuelle Einzelbild 1601 in gleichgroße, sich
nicht überlappende
Makroblöcke 1610, 1621–1627 unterteilt.
Jeder dieser quadratischen Makroblöcke wird weiter in eine gleiche Anzahl
von Zeilen und Spalten unterteilt. Für denselben Makroblock 1610 ist
eine Matrix von acht Zeilen und acht Spalten sichtbar. Jedes Quadrat
eines Makroblocks 1610 entspricht einem einzigen Pixel.
Dieser Probemakroblock 1610 enthält also 64 Pixel. Bei anderen
Ausführungsformen
weisen Makroblöcke
Dimensionen von 16 Zeilen mal 16 Spalten (16×16) auf. Bei einer Ausführungsform
umfassen Daten für
jedes Pixel acht Datenbit oder ein Einzelwort. Bei alternativen
Ausführungsformen
können
Datenpixel andere Größen umfassen,
darunter Nibbles, Wörter,
Doppelwörter,
Quadwörter
usw. Es wird versucht, diese aktuellen Makroblöcke des aktuellen Einzelbildes
zur Bewegungsschätzung
mit Makroblöcken
in dem vorherigen Einzelbild 1650 zu vergleichen.
-
Bei
dieser Ausführungsform
enthält
das vorherige Einzelbild 1650 ein Suchfenster 1651,
in dem ein Teil des Einzelbildes durch das Suchfenster 1651 eingeschlossen
wird. Das Suchfenster 1651 umfaßt den Bereich, in dem versucht
wird, mit einem aktuellen Makroblock aus dem aktuellen Einzelbild 1601 eine Übereinstimmung
zu erzielen. Wie bei dem aktuellen Einzelbild ist das Suchfenster
in eine Anzahl gleichgroßer
Makroblöcke
unterteilt. Es ist hier ein beispielhafter Makroblock 1660 mit
acht Zeilen und acht Spalten dargestellt, obwohl Makroblöcke verschiedene
andere Dimensionen umfassen können,
darunter sechzehn Zeilen und sechzehn Spalten aufweisend. Während des
Bewegungsschätzalgorithmus
einer Ausführungsform
werden alle einzelnen Makroblöcke
aus dem Suchfenster 1651 sequenzgemäß mit einem aktuellen Makroblock
aus dem aktuellen Einzelbild verglichen, um eine akzeptable Übereinstimmung
zu finden. Bei einer Ausführungsform
wird die obere linke Ecke des ersten vorherigen Makroblocks in dem
Suchfenster 1651 mit der oberen linken Ecke des Suchfensters 1651 ausgerichtet.
Während
eines Bewegungsschätzalgorithmus
schreitet die Richtung der Makroblockverarbeitung von der linken
Seite des Suchfensters aus pixelweise in Richtung der rechten Flanke
voran. Also befindet sich die äußerste linke
Flanke des zweiten Makroblocks ein Pixel weiter von der linken Flanke
des Suchfensters aus und so weiter. Am Ende der ersten Pixelzeile
kehrt der Algorithmus zu der linken Flanke des Suchfensters zurück und schreitet
von dem ersten Pixel der nächsten
Zeile aus voran. Dieser Prozeß wiederholt
sich, bis Makroblöcke
für jedes
der Pixel in dem Suchfenster 1651 mit dem aktuellen Makroblock
verglichen wurden.
-
22A–D
zeigen die Operationen der Bewegungsschätzung an Einzelbildern gemäß einer
Ausführungsform
der vorliegenden Erfindung. Bei hier besprochenen Ausführungsformen
der vorliegenden Erfindung kommen Vollsuch-Bewegungsschätzalgorithmen vor. Bei einer
Vollsuche sind Makroblöcke
für alle
Pixelpositionen in einem Suchfenster eines vorherigen (Bezugseinzelbilds)
versuchte Übereinstimmungen
mit einem Makroblock aus dem aktuellen Einzelbild. Bei einer Ausführungsform
verwendet der schnelle Vollsuchbewegungsschätzalgorithmus SIMD-Schiebe-Rechts-Zusammenführungsoperationen,
um gepackte Daten aus Einzelbildern schnell zu verarbeiten. Die
SIMD-Schiebe-Rechts-Zusammenführungsoperationen
einer Ausführungsform
können
auch die Prozessorleistungsfähigkeit
verbessern, indem die Anzahl von Datenladevorgängen, insbesondere unausgerichteten
Speicherladevorgängen,
und anderer Datenmanipulationsanweisungen verringert wird. Im allgemeinen
kann die Bewegungsschätzprozedur
einer Ausführungsform
im Pseudocode folgendermaßen
beschrieben werden:
-
Bei
dieser Ausführungsform
werden also vorherige Makroblöcke
für jede
Pixelposition in dem Suchfenster in Bezug auf einen aktuellen Makroblock
ausgewertet. Wie oben angegeben, wertet diese Ausführungsform
vier benachbarte vorherige Makroblöcke pro Schleife aus. Pixeldaten
werden aus dem Speicher mit speicherausgerichteten Ladevorgängen in
Register geladen. Durch Verwendung der Schiebe-Rechts-Zusammenführungsoperationen
können
diese Pixeldaten manipuliert werden, um verschiedene Kombinationen
geschobener Datensegmente benachbarten Makroblöcken angemessen zu bilden.
Zum Beispiel können
das erste, das zweite, das dritte und das vierte Pixel auf der ersten
Zeile eines ersten vorherigen Makroblocks an den Speicheradressen
0, 1, 2 bzw. 3 starten. Für
das erste Pixel der ersten Zeile eines zweiten vorherigen Makroblocks
beginnt dieses Pixel an der Speicheradresse 1. Eine Rechts-Schiebe-Zusammenführungsoperation
an den Registerdaten kann also diese notwendigen Pixelzeilendaten
für den
zweiten vorherigen Makroblock durch Wiederverwendung bereits aus
dem Speicher für
den ersten vorherigen Makroblock geladener Daten erzeugen, was zu
Zeit- und Betriebsmittelersparnissen führt. Ähnliche Schiebe-Zusammenführungsoperationen
können
die Zeilendaten für
andere benachbarte vorherige Makroblöcke, wie zum Beispiel den dritten,
den vierten und so weiter, erzeugen.
-
Die
Blockübereinstimmungsfindeprozedur
für den
Bewegungsschätzalgorithmus
einer Ausführungsform
kann also im Pseudocode folgendermaßen beschrieben werden:
-
Diese
Prozedur wird nachfolgend weiter beschrieben. Obwohl diese Beispiele
im Hinblick auf das Operieren an vier benachbarten Makroblöcken eines
Suchfensters beschrieben werden, sind alternative Ausführungsformen
der vorliegenden Erfindung nicht dahingehend beschränkt. Ausführungsformen
der vorliegenden Erfindung sind jedoch nicht auf das Operieren an
benachbarten Makroblöcken
beschränkt
oder begrenzt. Und die zusammenverarbeiteten mehreren Bezugsmakroblöcke müssen auch
nicht um eine einzige Pixeldistanz variieren. Bei einer Ausführungsform
können
beliebige Bezugsmakroblöcke
mit einem Pixel, das sich in einem 16-mal-16-Fenster um die spezifische
Pixelposition herum befindet, zusammen verarbeitet werden. Abhängig von
der Menge an Hardwarebetriebsmitteln, wie zum Beispiel verfügbaren Datenregistern
und Ausführungseinheiten,
können
andere Ausführungsformen
Berechnungen des Blockvergleichs und der Summe absoluter Differenzen
an mehr oder weniger Makroblöcken
durchführen.
Zum Beispiel könnte
eine andere Ausführungsform
mit mindestens 8 gepackten Datenregistern zum Halten von 4 verschiedenen
Kombinationen von Pixeldaten, die aus Schiebe-Rechts-Zusammenführungsoperationen
an zwei 8 Datensegmenten breiten Datenstücken erzeugt wurden, an 4 benachbarten
vorherigen Makroblöcken
einfach nur mit zwei ausgerichteten 8 Datensegmente breiten Speicherladevorgängen operieren.
Vier der 8 gepackten Datenregister werden für Berechnungsoverhead benutzt:
Halten der ersten 8 Datensegmente aus dem vorherigen Einzelbild,
der nächsten
8 Datensegmente des vorherigen Einzelbildes, Halten von 8 Datensegmenten
für das
aktuelle Einzelbild und von 8 Datensegmenten aus Schiebe-Rechts-Zusammenführungsoperationen.
Die anderen vier gepackten Datenregister werden zum Akkumulieren
von Gesamtwerten für
Werte der Summe absoluter Differenzen (SAD) für jeden der vier Makroblöcke benutzt.
Es können
jedoch weitere gepackte Datenregister für die SAD-Berechnungen und
Akkumulationen hinzugefügt
werden, um die Anzahl von Bezugsmakroblöcken, die zusammen verarbeitet
werden, zu vergrößern. Wenn
also vier zusätzliche
gepackte Datenregister verfügbar sind,
können
auch vier zusätzliche
vorherige Makroblöcke
verarbeitet werden. Die Anzahl verfügbarer gepackter Datenregister
zum Halten der akkumulierten Summe von Absolutdifferenzen kann bei
einer Ausführungsform
begrenzen, wieviele Makroblöcke
auf einmal verarbeitet werden können.
-
Außerdem weisen
bei bestimmten Prozessorarchitekturen Speicherzugriffe spezifische
Granularitäten auf
und sind mit bestimmten Grenzen ausgerichtet. Zum Beispiel kann
ein Prozessor Speicherzugriffe auf der Basis von 16- oder 32-Byte-Blöcken durchführen. In
diesem Fall könnte
das Zugreifen auf Daten, die nicht an einer 16- oder 32-Byte-Grenze
ausgerichtet sind, einen unausgerichteten Speicherzugriff erfordern,
der im Hinblick auf Ausführungszeit
und Betriebsmittel kostspielig ist. Schlimmer noch kann ein gewünschtes
Datenstück
eine Grenzen überqueren
und sich mit mehreren Speicherblöcken überlappen.
Cache-Linienaufteilungen, die unausgerichtete Ladevorgänge erfordern
würden,
um auf Daten zuzugreifen, die sich auf zwei separaten Cache-Linien
befinden, können
kostspielig sein. Datenlinien, die eine Speicherseitengrenze überqueren, sind
sogar noch ungünstiger.
Bei einem Prozeß,
der mit 8-Byte-Speicherblöcken
arbeitet, und einem Makroblock, der 8 Pixel mit einem Datenbyte
pro Pixel überspannt,
würde zum
Beispiel ein ausgerichteter Speicherladevorgang für diese
Makroblocklinie ausreichen. Für
den nächsten
benachbarten Makroblock (eine Pixelspalte weiter) würden die
für diese
Pixellinie benötigten
Daten jedoch 7 Datenbyte des Speicherblocks aus dem ersten Makroblock überspannen,
aber auch über
eine Speichergrenze für
1 Datenbyte des nächsten Speicherblocks.
Ausführungsformen der
vorliegenden Erfindung verwenden Schiebe-Rechts-Zusammenführungsoperationen, um die Daten
effizient zu verarbeiten. Bei einer Ausführungsform werden zwei aufeinanderfolgende
Speicherblöcke
an ausgerichteten Speichergrenzen geladen und für mehrere Verwendungszwecke in
Registern gehalten. Schiebe-Rechts-Zusammenführungsoperationen können diese
Speicherblöcke
nehmen und die Datensegmente in ihnen um die notwendigen Distanzen
schieben, um die korrekte Datenlinie zu erhalten. Bei diesem Beispiel
kann eine Schiebe-Rechts-Zusammenführungsanweisung also die beiden
bereits geladenen Speicherblöcke
nehmen und ein Datenbyte aus dem zweiten Block schieben und ein
Datenbyte in den zweiten Block aus dem ersten schieben, um die Daten
für die
erste Linie des zweiten Makroblocks zu erzeugen, ohne daß ein unausgerichteter
Ladevorgang durchgeführt
werden muß.
Ausführungsformen
der Bewegungsschätzung
können
auch Abhängigkeitsketten
brechen daraufbasierend, wie der Algorithmus implementiert ist.
Zum Beispiel können
durch Modifizieren der Reihenfolge der Berechnungen Daten-/Anweisungsabhängigkeiten
so entfernt oder geschoben werden, daß bestimmte Berechnungen und
Anweisungen außerhalb
der Reihenfolge ausgeführt
werden können,
wie in dem Prozessor 1000 von 15. Mit
neueren Prozessorarchitekturgenerationen können aufgrund vergrößerter Ausführungslatenzen
und verfügbarer
Berechnungsbetriebsmittel die Verbesserungen der Leistungsfähigkeit
sogar noch größer werden.
Durch Verwendung einer Ausführungsform
der Schiebe-Rechts-Zusammenführungsanweisung
können
bestimmte Abhängigkeiten
in der Blockvergleichssequenz vermieden werden. Zum Beispiel können mehrere
Summe-von-Absolutdifferenzen-Operationen und/oder Akkumulationsoperationen
parallel ausgeführt
werden.
-
22A zeigt den Fortschritt der aktuellen Makroblöcke über das
aktuelle Einzelbild 1701 hinweg. Bei dieser Ausführungsform
wird jeder aktuelle Makroblock 1710 in 16 Zeilen und 16
Spalten aufgeteilt und umfaßt also
256 Einzelpixel. Bei dieser Ausführungsform
werden die Pixel in jedem Makroblock 1710 für eine einzelne Zeile 1711 auf
einmal verarbeitet. Wenn alle 16 Zeilen des aktuellen Blocks gegenüber den
gewünschten
Makroblöcken
in einem Suchfenster verarbeitet wurden, wird der nächste aktuelle
Makroblock verarbeitet. Die Makroblöcke dieser Ausführungsform
werden in einer horizontalen Richtung 1720 von der linken
Seite zur rechten Seite des aktuellen Einzelbildes 1701 in
Schritten der Makroblockgröße verarbeitet.
Anders ausgedrückt überlappen
sich bei dieser Ausführungsform
die aktuellen Makroblöcke
nicht und die aktuellen Makroblöcke
sind so angeordnet, daß jeder
Makroblock neben dem nächsten
sitzt. Zum Beispiel kann sich der erste Makroblock von der Pixelspalte
1 zur Pixelspalte 16 erstrecken. Der zweite Makroblock würde sich
von der Spalte 17 zur Spalte 32 erstrecken und so weiter. Am Ende
der Makroblockzeile kehrt der Prozeß zu der linken Flanke zurück 1722 und
bewegt sich um eine Makroblockhöhe
(in diesem Beispiel 16 Zeilen) nach unten. Die Makroblöcke eine
Makroblockgröße weiter
unten werden dann horizontal 1724 von links nach rechts
verarbeitet, bis versuchte Übereinstimmungen
für das
gesamte Einzelbild 1701 abgeschlossen sind.
-
22B zeigt den Fortschritt der Makroblöcke über das
Suchfenster 1751 eines vorherigen (Bezugs-)Einzelbildes
hinweg. Abhängig
von der konkreten Implementierung kann das Suchfenster 1751 auf
einem bestimmten Bereich fokussiert und somit kleiner als das gesamte
vorherige Einzelbild sein. Bei einer anderen Ausführungsform
kann sich das Suchfenster vollständig
mit dem vorherigen Einzelbild überlappen.
Wie der aktuelle Block wird jeder vorherige Makroblock 1760, 1765, 1770, 1775 in
16 Zeilen und 16 Spalten aufgeteilt, sodaß man insgesamt 256 Pixel in
jedem Makroblock erhält.
Bei dieser Ausführungsform
der vorliegenden Erfindung werden vier vorherige Makroblöcke 1760, 1765, 1770, 1775 des
Suchfensters 1751 parallel gegenüber einem einzigen aktuellen
Block in der Suche nach einer Übereinstimmung
verarbeitet. Im Gegensatz zu den aktuellen Makroblöcken eines
aktuellen Einzelbildes können
sich die vorherigen Makroblöcke 1760, 1765, 1770, 1775 in
einem Suchfenster 1751 wie in diesem Beispiel überlappen
und tuen dies auch. Hierbei wird jeder vorherige Makroblock um eine
Pixelspalte geschoben. Das äußerste linke
Pixel auf der ersten Zeile von BLK 1 ist also das Pixel 1761,
für BLK
2 das Pixel 1766, für
BLK 3 das Pixel 1771 und für BLK 4 das Pixel 1776. Während eines
Bewegungsschätzalgorithmus
wird jede Zeile eines vorherigen Makroblocks 1760, 1765, 1770, 1775 mit
einer entsprechenden Zeile eines aktuellen Blocks verglichen. Zum
Beispiel werden jeweils Zeile 1 von BLK 1 1760, BLK 2 1765,
BLK 3 1770 und BLK 4 1775 mit einer aktuellen
Blockzeile 1 verglichen.
-
Der
zeilenweise Vergleich für
die vier sich überlappenden
benachbarten Makroblöcke
wird fortgesetzt, bis alle 16 Zeilen des Makroblocks fertig sind.
Der Algorithmus dieser Ausführungsform
schiebt sich um vier Pixelspalten weiter, um an den nächsten vier
Makroblöcken
zu operieren. Bei diesem Beispiel waren also Pixel 1796,
Pixel 1797, Pixel 1798 bzw. Pixel 1799 die äußerste linke
erste Pixelspalte für
die nächsten
vier Makroblöcke.
Bei dieser Ausführungsform
wird die vorherige Makroblockverarbeitung nach rechts 1780 über das Suchfenster 1751 hinweg
fortgesetzt, klappt um 1782, um eine Pixelzeile weiter
unten an dem äußersten
linken Pixel des Suchfensters 1751 neu zu starten, bis
das Suchfenster abgeschlossen ist. Während sich die aktuellen Makroblöcke eines
aktuellen Einzelbildes dieser Ausführungsform nicht überlappen
und nächste
einzelne Makroblöcke
die Höhe
oder Breite eines Makroblocks aufweisen, überlappen sich die vorherigen
Makroblöcke eines
vorherigen oder Bezugseinzelbildes jedoch und die nächsten Makroblöcke werden
um eine einzelne Pixelzeile oder -spalte inkrementiert. Obwohl die
vier Bezugsmakroblöcke 1760, 1765, 1770, 1775 dieses
Beispiels benachbart sind und sich um eine einzige Pixelspalte weiter
unterscheiden, kann jeder beliebige Makroblock in dem Suchfenster 1751,
der sich mit einer spezifischen Region um eine gewählte Pixelposition überlappt,
zusammen mit dem Makroblock an dieser Pixelposition verarbeitet
werden. Zum Beispiel wird der Makroblock 1760 an dem Pixel 1796 verarbeitet.
Jeder Makroblock in einem 16×16-Fenster
um das Pixel 1796 kann zusammen mit dem Makroblock 1760 behandelt
werden. Das 16×16-Fenster
dieses Beispiels ist auf die Dimensionen eines Makroblocks und der
Linienbreite einer Zeile zurückzuführen. In
diesem Fall enthält
eine Zeile oder Datenlinie 16 Datenelemente. Da diese Blockvergleichsfunktion
für diese
Ausführungsform
eines Bewegungsschätzalgorithmus
zwei Datenlinien von 16 Datenelementen laden und Schiebe-Rechts-Zusammenführungen
durchführen
kann, um verschiedene Datenlinien mit geschobenen/zusammengeführten Versionen
der beiden Datenlinien zu erzeugen, können andere Makroblöcke, die
sich mit dem 16×16-Fenster überlappen,
für das
Daten für
diesen Makroblock geladen werden, mindestens teilweise diese geladenen
Daten wiederverwenden. Jeder Makroblock, der sich mit dem Makroblock 1760 überlappt,
wie zum Beispiel die Makroblöcke 1760, 1765, 1770, 1775,
oder ein Makroblock, der an der untersten rechten Pixelposition
des Makroblocks 1760 beginnt, kann also zusammen mit dem
Makroblock 1760 verarbeitet werden. Der Unterschied bezüglich der
Menge an Überlappung
hat einen Einfluß auf
die Datenmente, die aus vorherigen Datenladevorgängen wiederverwendet werden
kann.
-
Bei
Ausführungsformen
der Bewegungsschätzung
gemäß der vorliegenden
Erfindung umfaßt
die Makroblockanalyse einen Vergleich zwischen einem vorherigen
(Bezugs-)Makroblock und einem aktuellen Makroblock zeilenweise,
um eine Summe von absoluten Differenzwerten zwischen zwei Makroblöcken zu
erhalten. Die Summe absoluter Differenzenwerte kann angeben, wie
verschieden die Makroblöcke
sind und wie gut sich eine Übereinstimmung
finden läßt. Jeder
vorherige Makroblock kann bei einer Ausführungsform durch einen Wert
representiert werden, der durch Akkumulieren der Summe von absoluten
Differenzen für
alle 16 Zeilen in dem Makroblock erhalten wird. Für den aktuellen
Makroblock, der analysiert wird, wird eine Notation des am besten übereinstimmenden
Makroblocks geführt.
Zum Beispiel wird die minimale akkumulierte Summe absoluter Differenzenwerte
und des Positionsindex für
diesen entsprechenden vorherigen Makroblock verfolgt. Während die
Bewegungsschätzung über das
Suchfenster hinwegschreitet, wird die akkumulierte Summe jedes vorherigen
Makroblocks mit dem Minimalwert verglichen. Wenn der letztere vorherige
Makroblock einen kleineren akkumulierten Differenzenwert als der
des verfolgten Minimalwerts aufweist, wodurch eine bessere Übereinstimmung
als die existierende beste Übereinstimmung
angezeigt wird, dann werden der akkumulierte Differenzenwert und
die Indexinformationen für
diesen letzteren vorherigen Makroblock zu dem neuen minimalen Differenzenwert
und Index. Wenn verfügbare
Makroblöcke
für alle
Pixel in einem Suchfenster bei einer Ausführungsform verarbeitet wurden,
kann der indizierte Makroblock mit dem kleinsten Differenzenwert
verwendet werden, um dabei zu helfen, ein Restbild zur Komprimierung
dieses aktuellen Einzelbildes zu erhalten.
-
22C zeigt die parallele Verarbeitung für vier Bezugsmakroblöcke 1810, 1815, 1820, 1825 für ein gegebenes
Suchfenster in einem aktuellen Block 1840 für eine Ausführungsform
der vorliegenden Erfindung. Bei diesem Beispiel werden die Daten
für die
Pixel in dem Suchfenster folgendermaßen geordnet: „A, B,
C, D, E, F, G, H, I, J, K, L, M, N, O, P" 1860, wobei sich „A" an der untersten
Adressenposition (0) in der Datenmenge und „P" an der höchsten Adressenposition (15)
befindet. Diese Menge von Pixeln 1860 umfaßt zwei
Abschnitte 1681, 1682 mit jeweils acht (m) Datensegmenten.
Die oben beschriebene Verwendung einer Rechts-Schiebe-Zusammenführungsoperation
ermöglicht
es Ausführungsformen
der vorliegenden Erfindung, Operanden mit zwei Datenteilen 1618, 1682 zu
manipulieren und ordnungsgemäß ausgerichtete
Zeilendaten 1830 für
die verschiedenen vorherigen Makroblöcke 1810, 1815, 1820, 1825 zu
erzeugen. Jedes Makroblock (vorherige 1810, 1815, 1820, 1825 und
aktueller 1840) weist eine Größe von m Zeilen mal m Spalten
auf. Zur Besprechung und der Einfachheit halber ist m in diesem
Beispiel gleich acht. Alternative Ausführungsformen können Makroblöcke verschiedener
Größe aufweisen,
wobei m zum Beispiel gleich 4, 16, 32, 64, 128, 256 usw. ist.
-
In
diesem Beispiel wird der Bewegungsschätzalgorithmus auf die erste
Zeile dieser vier vorherigen Blöcke 1810, 1815, 1820, 1825 mit
der des aktuellen Blocks 1840 angewandt. Bei einer Ausführungsform
werden die Pixeldaten, die die beiden Datenteile 1861, 1862 für zwei Makroblockbreiten
(2m) enthalten, mit zwei ausgerichteten Speicherladeoperationen
aus dem Speicher geladen und in temporären Registern gehalten. Schiebe-Rechts-Zusammenführungsoperationen
an diesen beiden Datenteilen 1861, 1862 ermöglichen
die Erzeugung neun möglicher
Kombinationen von Zeilendaten 1830 ohne zahlreiche Speicherzugriffe.
Außerdem können unausgerichtete
Speicherladevorgänge,
die in bezug auf Ausführungszeit
und Betriebsmittel kostspielig sind, vermieden werden. In diesem
Beispiel werden die beiden Datenteile 1861, 1862 mit
Bytegrenzen ausgerichtet. Speicherladevorgänge, die nicht mit einer Adresse
auf einer Bytegrenze, wie zum Beispiel von dem Datensegment B, D
oder D beginnen, würden
in der Regel eine unausgerichtete Speicherladeoperation erfordern.
Die Zeilendaten 1830 für
jeden der Blöcke
lauten wie folgt, wobei das äußerste linke
Datensegment die niedrigste Adresse ist. In BLOCK 1 1810 besteht
ZEILE 1 1811 aus „A,
B, C, D, E, F, G, H".
-
Da
die Daten in ZEILE 1 1811 dieselben wie der erste Datenteil 1861 sind,
ist kein Schieben notwendig. ZEILE 1 1816 von BLOCK 2 1815 umfaßt jedoch „B, C,
D, E, F, G, H, I".
Da der vorherige BLOCK 1 1810 und BLOCK 2 1815 horizontal
durch einen Pixel getrennt sind, beginnt BLOCK 2 1815 mit
Pixeldaten B, während
BLOCK 1 1810 mit Pixeldaten A beginnt, und die zweiten
Pixeldaten sind B. Eine Schiebe-Rechts-Zusammenführung der beiden Datenteile 1861, 1862 mit
einem Schiebezählwert
von 1 würde
also die Daten von BLOCK 2 ZEILE 1 ergeben.
-
Ähnlich liegt
BLOCK 3 1820 einen weiteren Pixel weiter rechts und ZEILE
1 1821 von BLOCK 3 1820 beginnt mit Pixeldaten
C und umfaßt „C, D,
E, F, G, H, I, J".
Eine Schiebe-Rechts-Zusammenführungsoperation an
Operanden der beiden Datenteile 1861, 1862 mit
einem Schiebezählwert
von zwei produziert die Daten von BLOCK 3 ZEILE 1. ZEILE 1 1826 von
BLOCK 4 1825 umfaßt „D, E,
F, G, H, I, J, K".
Diese Daten können
mit einer Schiebe-Rechts-Zusammenführungsoperation
mit Vier-Zählwert
an denselben Datenoperanden produziert werden. Die Verwendung von
Schiebe-Rechts-Zusammenführungsoperationen
an temporär
gesicherten, zuvor geladenen Datenteilen 1861, 1862 ermöglicht also
die Wiederverwendung der Daten bei der Erzeugung von Zeilendaten
für andere
benachbarte Makroblöcke
und die Ersparnis von Zeit/Betriebsmitteln durch Verringern der
Anzahl von Speicherladevorgängen,
insbesondere unausgerichteten Speicherladevorgängen. Man beachte, daß die Pixeldaten
für den
aktuellen Block für
die gesamte Summe von Absolutdifferenzenvergleichen gegen die Bezugsmakroblöcke des
vorherigen Einzelbildes dieselben sind. Es kann ein einziger ausgerichteter
Speicherladevorgang für
die Zeilendaten 1842 des aktuellen Blocks 1840 möglich sein,
da der aktuelle Block 1840 mit Speichergrenzen ausgerichtet
werden kann.
-
Weiter
in bezug auf dieses Beispiel einer Ausführungsform der Bewegungsschätzung wird
jede Zeile eines vorherigen Makroblocks 1810, 1815, 1820, 1825 mit
der entsprechenden Zeile des aktuellen Blocks 1840 verglichen,
um eine Absolutdifferenzenwertsumme zu erhalten. Also wird in einer
Summer-von-Absolutdifferenzen-(SAD-)Operation 1850 ZEILE
1 1811 von BLOCK 1 1810 mit ZEILE 1 1841 des
aktuellen Blocks 1840 verglichen. Dasselbe geschieht mit
den anderen drei Blöcken,
an denen hier gerade operiert wird. Obwohl es scheint, daß gleichzeitig
oder parallel an den vier Makroblöcken 1810, 1815, 1820, 1825 operiert
wird, sind andere Ausführungsformen
der vorliegenden Erfindung dahingehend nicht eingeschränkt. Operationen an
diesen vier Makroblöcken
können
also zeitlich in Reihe stattfinden, aber als eine Sequenz von vier.
Zum Beispiel wird Zeile 1 jedes Bezugsblocks einer SAD-Operation 1850 mit
der des aktuellen Blocks 1840 in der folgenden Reihenfolge
unterzogen: BLOCK 1 1810, BLOCK 2 1815, BLOCK
3 1820 und BLOCK 4 1825. Dann wird Zeile 2 jedes
Bezugsblocks einer SAD-Operation 1850 unterzogen und so
weiter. Nach jeder SAD-Operation 1850 wird in einem temporären Register
ein laufender Gesamtwert für
die Summe von Absolutdifferenzen akkumuliert. Bei diesem Ausführungsbeispiel
akkumulieren also vier Register die Summe von Absolutdifferenzen,
bis alle m Zeilen dieses Makroblocks fertig sind. Der akkumulierte
Wert für
jeden Block wird als Teil der Suche nach einer besten Makroblockübereinstimmung
mit dem existierenden Minimaldifferenzenwert verglichen. Obwohl
dieses Beispiel die Verarbeitung vier benachbarter, sich überlappender
vorheriger Makroblöcke
beschreibt, können
auch andere Makroblöcke,
die sich mit dem ersten Block BLK 1810 in dem Suchfenster überlappen,
zusammen mit den Datenladevorgängen
für BLK 1810 verarbeitet
werden, wenn die Datenlinien relevant sind. Also kann auch ein Makroblock
in einem 16×16-Fenster
um den vorliegenden Makroblock, der gerade verarbeitet wird, verarbeitet
werden.
-
22D zeigt die Summe-von-Absolutdifferenzen-(SAD-)Operationen 1940 und
die Summierung dieser SAD-Werte. Hierbei werden jede der Zeilen
aus ZEILE A bis ZEILE P für
den Bezugsmakroblock BLOCK 1 1900 und ihr Gegenstück für den aktuellen
Makroblock 1920 einer SAD-Operation 1940 unterzogen.
Die SAD-Operation 1940 vergleicht die Daten, die die Pixel
in jeder Zeile darstellen und berechnet einen Wert, der die absoluten
Differenzen zwischen den beiden Zeilen darstellt (eine aus denn
vorherigen Makroblock 1900 und eine aus dem aktuellen Makroblock 1920).
Die Werte aus diesen SAD-Operationen 1940 für alle Zeilen
A bis P werden als eine Blocksumme 1942 aufsummiert.
-
Diese
Blocksumme 1942 liefert einen akkumulierten Wert der Summe
von absoluten Differenzen für den
gesamten vorherigen Makroblock 1900 und den aktuellen Makroblock 1920.
Auf der Basis dieser Blocksumme 1942 kann der Bewegungsschätzalgorithmus
bestimmen, wie ähnlich
oder gut die Übereinstimmung des
vorherigen Makroblocks 1900 im Bezug auf diesen aktuellen
Makroblock 1920 ist.
-
Obwohl
die vorliegende Ausführungsform
an vier Bezugsmakroblöcken
auf einmal operiert, können
alternative Ausführungsformen
abhängig
von der Menge an geladenen Pixeldaten und der Anzahl verfügbarer Register
an einer anderen Anzahl von Makroblöcken arbeiten. Außerdem können während eines
Bewegungsschätzprozesses
vielfältige
Register benutzt werden. Zum Beispiel können erweiterte Register, wie
zum Beispiel mm-Register der MMX-Technologie oder XMM-Register der
SSE2-Technologie zum Halten gepackter Daten, wie zum Beispiel der
Pixeldaten, verwendet werden. Bei einer Ausführungsform kann ein 64 Bit
breites MMX-Register acht Byte halten, oder acht einzelne Pixel,
wenn jedes Pixel acht Datenbit aufweist. Bei einer anderen Ausführungsform
kann ein 128 Bit breites XMM-Register sechzehn Byte halten, oder
sechzehn einzelne Pixel, wenn jedes Pixel acht Datenbit aufweist. Ähnlich können auch
Register anderer Größen, wie
zum Beispiel 32/128/256/512 Bit breite, die gepackte Daten halten
können,
mit Ausführungsformen
der vorliegenden Erfindung verwendet werden. Berechnungen, die kein
gepacktes Datenregister erfordern, wie zum Beispiel reguläre Integer-Operationen,
können
dagegen integer-Register und Integer-Hardware benutzen.
-
23A ist ein Flußdiagramm einer Ausführungsform
eines Verfahrens zum Vorhersagen und Schätzen von Bewegung. Im Block 2002 werden
der verfolgte Minimalwert (Min-Wert) und die Indexposition für diesen
Minimalwert initialisiert. Bei dieser Ausführungsform geben der verfolgte
Min-Wert und der Index an, welcher der verarbeiteten vorherigen
(Bezugs-)Makroblöcke
aus dem Suchfenster die beste Übereinstimmung
mit dem aktuellen Makroblock ist. Im Block 2004 wird geprüft, ob alle
gewünschten
Makroblöcke
in dem aktuellen Einzelbild abgeschlossen wurden. Wenn dies der
Fall ist, ist dieser Teil des Bewegungsschätzalgorithmus fertig. Wenn
nicht alle gewünschten
aktuellen Makroblöcke
verarbeitet wurden, wird im Block 2006 ein unverarbeiteter
aktueller Makroblock für
das aktuelle Einzelbild ausgewählt.
Der Blockvergleich schreitet von der ersten Pixelposition in dem
Suchfenster eines vorherigen (Bezugs-)Einzelbildes im Block 2008 voran.
Im Block 2010 wird geprüft,
ob das Suchfenster abgeschlossen wurde. Mit dem ersten Durchgang
wurde von dem Suchfenster nichts verarbeitet. Mit einem nachfolgenden
Durchgang kehrt jedoch, wenn das gesamte Suchfenster verarbeitet
wurde, der Fluß zum
Block 2004 zurück,
um zu bestimmen, ob weitere aktuelle Makroblöcke verfügbar sind.
-
Wenn
nicht das gesamte Suchfenster analysiert worden ist, wird im Block 2012 geprüft, ob alle
Pixel entlang dieser X-Axenzeile verarbeitet wurden. Wenn diese
Zeile behandelt wurde, erhöht
sich der Zeilenzählwert
auf die nächste
Zeile und der Fluß kehrt
zum Block 2010 zurück,
um zu sehen, ob weitere Makroblöcke an
dieser neuen Zeile in dem Suchfenster verfügbar sind. Wenn jedoch nicht
alle verfügbaren
Makroblöcke
für Pixel
auf der Zeile verarbeitet wurden, wird im Block 2014 geprüft, ob der
Makroblock an dieser Pixelspalte und -zeile verarbeitet wurde. Wenn
der Makroblock verarbeitet wurde, wird der Spaltenzählwert erhöht und der Fluß kehrt
zum Block 2012 zurück,
um zu sehen, ob der Makroblock für
das Pixel an dieser neuen Spalte verarbeitet wurde. Wenn der Makroblock
für das
Pixel an dieser Spalte und Zeile nicht verarbeitet wurde, wird zwischen
diesem Bezugsmakroblock und dem aktuellen Makroblock ein Blockvergleich
durchgeführt.
-
Der
Fluß wird
in diesem Beispiel mit dem Inkrementieren von Zeilen und Spaltenpositionen
für Pixel entlang
der X- und Y-Achse (der Einfachheit halber ein Pixel auf einmal)
beschrieben. Bei einer Ausführungsform
der vorliegenden Erfindung werden jedoch pro Durchgang vier vorherige
Makroblöcke
verarbeitet. Der Spaltenzählwert
entlang der Y-Achse würde
also pro Durchgang um vier Spalten erhöht. Andere Ausführungsformen
können
auch 8, 16, 32 usw. Makroblöcke
auf einmal verarbeiten, und der Spaltenzählwert wird also entsprechend
um 8, 16, 32 usw. Spalten erhöht,
um auf die korrekte Pixelposition für den nächsten Durchgang des Algorithmus
zu zeigen. Obwohl der Blockvergleichsprozeß dieser Ausführungsform
eine Suche entlang der X- und Y-Achse
auf geordnete Weise verwendet, kann der Blockvergleich einer anderen
Ausführungsform einen
anderen Algorithmus verwenden, wie zum Beispiel eine Rautensuche,
die ein verschiedenes Muster verwendet, oder eine Log-Suche.
-
23B ist ein Flußdiagramm, das den Blockvergleich
von 23A weiter beschreibt. Im Block 2222 werden
die Daten für
den Bezugsmakroblock und den aktuellen Makroblock geladen. Bei einer
Ausführungsform
werden die Bezugsmakroblockdaten als zwei gepackte Datenstücke geladen,
einschließlich
Daten für eine
Anzahl aufeinanderfolgender Pixel. Bei einer Ausführungsform
umfaßt
jedes gepackte Datenstück
acht Datenelemente. Im Block 2224 werden je nach Notwendigkeit
Schiebe-Rechts-Zusammenführungsoperationen
an den Datenstücken
durchgeführt,
um das korrekte Datenstück
zu erhalten. Bei der obigen Ausführungsform,
in der vier vorherige Makroblöcke
zusammen verarbeitet werden, können
Schiebe-Rechts-Zusammenführungsoperationen
Datenstücke
entsprechend den in jedem Makroblock befindlichen Linien erzeugen.
Das Datenstück
für jeden
benachbarten Makroblock eine Pixelposition weiter wird auch um eins
weiter geschoben, wobei die Makroblöcke scheinbar ein Pixel auf
einmal für
jede Pixelzeile in dem Suchfenster über ein Suchfenster gleiten.
Die Operationen in den Blöcken 2226, 2228, 2230 und 2232 werden
jeweils auf die vier zusammenverarbeiteten vorherigen Makroblöcke angewandt.
Bei einer Ausführungsform
werden alle vier Makroblöcke
derselben Operation unterzogen, bevor die nächste Operation stattfindet.
Bei einer anderen Ausführungsform
kann ein einzelner vorheriger Makroblock alle Operationen abschließen, bevor
der nächste
vorherige Makroblock mit einem Datenstück, das die entsprechend geschobenen
Datensegmente enthält,
verarbeitet wird.
-
Die
Summe von Absolutdifferenzen zwischen den entsprechenden Linien
des vorherigen Makroblocks und dem aktuellen Makroblock wird in
Block 2226 für
jede Zeile dieser Makroblöcke
berechnet. Im Block 2228 wird die Summe von Absolutdifferenzen
für alle
Linien in dem vorherigen Makroblock aufakkumuliert. Im Block 2230 wird
der akkumulierte Differenzenwert für den vorherigen Makroblock
mit dem derzeitigen Minimalwert verglichen. Wenn der Differenzenwert
für diesen
vorherigen Makroblock im Block 2232 kleiner als der derzeitige
Min-Wert ist, wird der Min-Wert mit diesem neuen Differenzenwert
aktualisiert. Außerdem
wird der Index aktualisiert, um die Position dieses vorherigen Makroblocks
wiederzugeben, um anzugeben, daß dieser
vorherige Makroblock bisher die beste Übereinstimmung ist. Wenn der
neue Differenzenwert im Block 2232 jedoch größer als
der derzeitige Min-Wert ist, dann ist dieser vorherige Block keine
bessere Übereinstimmung als
die bisher gefundene Übereinstimmung.
-
Ausführungsformen
von Bewegungsschätzalgorithmen
gemäß der vorliegenden
Erfindung können auch
die Prozessor- und Systemleistungsfähigkeit mit vorhandenen Hardware-Betriebsmitteln
verbessern. Während
sich die Technologie weiter verbessert, können Ausführungsformen der vorliegenden
Erfindung, wenn sie mit größeren Mengen
an Hardware-Betriebsmitteln und schnelleren effizienteren Logikschaltungen kombiniert
werden, sogar eine noch größere Auswirkung
auf die Verbesserung der Leistungsfähigkeit haben. Somit kann eine
effiziente Ausführungsform
der Bewegungsschätzung über Prozessorgenerationen
hinweg eine verschiedene und größere Auswirkung
haben. Einfach nur mehr Betriebsmittel in modernen Prozessorarchitekturen
hinzuzufügen,
garantiert keine bessere Leistungsfähigkeitsverbesserung. Indem
auch die Effizienz von Anwendungen, wie eine Ausführungsform
der Bewegungsschätz-
und der Schiebe-Rechts-Zusammenführungsanweisung
(PSRMRG), aufrechterhalten wird, können größere Leistungsfähigkeitsverbesserungen möglich sein.
-
Obwohl
die obigen Beispiele allgemein im Kontext von Hardware/Registern/Operanden
mit einer Breite von 64 Bit beschrieben werden, um die Besprechung
zu vereinfachen, verwenden andere Ausführungsformen Hardware/Register/Operanden
mit einer Breite von 128 Bit, um Registerzusammenführungsoperationen, Schiebe-Rechts-Zusammenführungsoperationen
und Bewegungsschätzberechnungen
durchzuführen.
Außerdem
sind Ausführungsformen
der vorliegenden Erfindung nicht auf spezifische Hardware- oder
Technologietypen, wie zum Beispiel MMX/SSE/SSE2-Technologien, beschränkt und
können
auch mit anderen SIMD- Implementierungen
und anderen graphischen Datenmanipulationstechnologien verwendet
werden. Obwohl die oben für 20–23B beschriebenen Bewegungsschätz- und Blockvergleichsausführungsformen
im Kontext von acht Pixelbreiten oder acht Datenelementebreiten
Linien/Zeilen und Makroblöcken
mit einer Größe von acht
Zeilen mal acht Spalten beschrieben werden, enthalten andere Ausführungsformen
andere Dimensionen. Zum Beispiel können Linien/Zeilen sechzehn
Pixel breit oder sechzehn Datenelemente breit sein, und Makroblöcke können sechzehn
Zeilen mal sechzehn Spalten aufweisen.
-
In
der obigen Spezifikation wurde die Erfindung mit Bezug auf spezifische
Ausführungsbeispiele
beschrieben. Es ist jedoch offensichtlich, daß verschiedene Modifikationen
und Änderungen
daran vorgenommen werden können,
ohne von dem allgemeineren Gedanken und Schutzumfang der Erfindung
abzuweichen, der in den angefügten
Ansprüchen
dargelegt wird. Die Spezifikation und die Zeichnungen sind dementsprechend
nicht in einem einschränkenden,
sondern in einem veranschaulichenden Sinne zu betrachten.