DE10297000T5 - Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung - Google Patents

Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung Download PDF

Info

Publication number
DE10297000T5
DE10297000T5 DE10297000T DE10297000T DE10297000T5 DE 10297000 T5 DE10297000 T5 DE 10297000T5 DE 10297000 T DE10297000 T DE 10297000T DE 10297000 T DE10297000 T DE 10297000T DE 10297000 T5 DE10297000 T5 DE 10297000T5
Authority
DE
Germany
Prior art keywords
data
operand
data elements
shift
shifted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE10297000T
Other languages
English (en)
Other versions
DE10297000B4 (de
Inventor
Julien Hillsboro Sebot
William jun. Palo Alto Macy
Eric Santa Clara Debes
Huy Pflugerville Nguyen
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US09/952,891 external-priority patent/US7085795B2/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE10297000T5 publication Critical patent/DE10297000T5/de
Application granted granted Critical
Publication of DE10297000B4 publication Critical patent/DE10297000B4/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

Verfahren mit den folgenden Schritten: Empfangen eines Schiebezählwerts von M;
Schieben eines ersten Operanden mit einer ersten Menge von L Datenelementen nach links um 'L-M' Datenelemente;
Schieben eines zweiten Operanden mit einer zweiten Menge von L Datenelementen nach rechts um M Datenelemente;
Zusammenführen der geschobenen ersten Menge mit der geschobenen zweiten Menge, um ein Resultat mit L Datenelementen zu erzeugen.

Description

  • 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 Patentanmeldung 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 Computern. 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:
    Figure 00020001
    die sehr oft mit k=0 verwendet wird:
    Figure 00020002
  • Im Fall eines Filters f mit N-Abgriffen, das auf einen Vektor V angewandt wird, lautet die zu berechnende Summe S wie folgt:
    Figure 00030001
  • 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.
  • 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-Akkumulations-Anweisung gemäß einer Ausführungsform der vorliegenden Erfindung;
  • 7A7C 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;
  • 8A8D 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.
  • Die vorliegende Erfindung kann als ein Computerprogrammprodukt oder als Software bereitgestellt werden, wozu eine Maschine oder ein computerlesbares Medium mit daraufgespeicherten Anweisungen gehören, die zur Programmierung eines Computers (oder anderen elektronischen Einrichtungen) verwendet werden können, um einen Prozess gemäß der vorliegenden Erfindung durchzuführen. Solche Software kann in einem Speicher in dem System gespeichert sein. Ähnlich kann der Code über ein Netzwerk oder durch andere computerlesbare Medien verteilt werden. Bei dem computerlesbaren Medium handelt es sich zum Beispiel (ohne Einschränkung) um Disketten, optische Datenträger, Compact Disc, Nurlesespeicher (CD-ROMs) und magnetooptische Datenträger, Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAM), löschbare programmierbare Nurlesespeicher (EPROM), elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), magnetische oder optische Karten, Flash-Speicher, eine Übertragung über das Internet oder dergleichen.
  • Folglich schließt das computerlesbare Medium eine beliebige Art von Medien bzw. maschinenlesbare Medien ein, die sich zum Speichern oder Übertragen elektronischer Anweisungen oder Informationen in durch eine Maschine (z.B.
  • einen Computer) lesbarer Form eignen. Darüberhinaus kann die vorliegende Erfindung auch als ein Computerprogrammprodukt heruntergeladen werden. Dementsprechend kann das Programm von einem abgesetzten Computer (z.B. einem Server) zu einem anfordernden Computer (z.B. einem Client) transferiert werden. Der Transfer des Programms kann mittels elektrischer, optischer, akustischer oder anderer Formen von Datensignalen, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsstrecke (z.B. ein Modem, eine Netzwerkverbindung oder dergleichen) enthalten sind, erfolgen.
  • 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 R0212a bis R7212h, 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 wären 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 Speichern 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.
  • 4A4C 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 verschieden viele 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 8A8D 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 7A7C 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 Verfahren 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 7A7C). 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 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
    Figure 00290001
  • 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 hier beschriebene 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-Datenoperanden 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 befänden.
  • 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, 0, 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ührt 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, 0, 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, 0, 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 8x 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, 0 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, 0, 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üllten 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, 0 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 0en 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 Registern 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 dein 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 MM 1 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 Länge-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ätzung 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 wären 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 Chromfinanz 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 Bleichgroß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:
    für jeden aktuellen Block sowohl in x- als auch in y-Richtung{
    für alle Mod-1-Position in der y-Achse des Suchfensters{
    für alle Mod-4-Positionen in der x-Achse des Suchfensters {
    Pixeldaten aus dem Speicher in Register laden;
    Blockübereinstimmungsfindung für 4 benachbarte vorherige Makroblöcke versuchen;
    Minimalwert und Indexposition für diesen vorherigen Makroblock verfolgen; }}}wobei eine Blockübereinstimmungsfindeoperation folgendes mit sich bringt:
    für jede Zeile von 1 bis m {
    für jeden Makroblock, beginnend mit Spalte von 1 bis 4 {
    korrekte Daten für diese vorherige [Zeile] aus in Registern gehaltenen Daten erzeugen;
    Auswerten von Data[line]+=Summe absoluter Differenzen (aktuelle [Zeile], vorherige [Zeile]); }}.
  • 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:
    Blockvergleich für vier benachbarte vorherige Makroblöcke { für jede Zeile von 1 bis m {
    Pixeldaten für eine Zeile des aktuellen Makroblocks laden; Ausgerichtete Speicherladevorgänge zweier aufeinanderfolgender Pixeldatenstücke für eine Zeile des Suchfensters aus Speicher in Register; für jeden der vier benachbarten vorherigen Makroblöcke aus geladenen Daten durch Schiebe-Rechts-Zusammenführungsoperationen ordnungsgemäße Pixeldatenzeilen erzeugen;
    Summe absoluter Differenzen zwischen einer Zeile aus einem vorherigen Makroblock und einer entsprechenden Zeile aus aktuellem Makroblock für jeden von vier benachbarten vorherigen Makroblöcken berechnen; vier einzelne Summe von Absolutdifferenzwerten für jeden von vier benachbarten vorherigen Makroblöcken akkumulieren;
    }}.
  • 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-l6-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 wären 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, 0, 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 Summervon-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 dem 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 2023B 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.
  • Zusammenfassung
  • Ein Verfahren zur Parallel-Schiebe-Rechts-Zusammenführung von Daten. Bei dem Verfahren gemäß einer Ausführungsform wird ein Schiebezählwert von M empfangen. Ein erster Operand mit einem Satz von L Datenelementen wird durch 'L-M' Datenelemente nach links geschoben. Ein zweiter Operand mit einem zweiten Satz von L Datenelementen wird durch M Datenelemente nach rechts geschoben. Der geschobene erste Satz wird mit dem geschobenen zweiten Satz zusammengeführt, um ein Resultat mit L Datenelementen zu erzeugen.

Claims (44)

  1. Verfahren mit den folgenden Schritten: Empfangen eines Schiebezählwerts von M; Schieben eines ersten Operanden mit einer ersten Menge von L Datenelementen nach links um 'L-M' Datenelemente; Schieben eines zweiten Operanden mit einer zweiten Menge von L Datenelementen nach rechts um M Datenelemente; Zusammenführen der geschobenen ersten Menge mit der geschobenen zweiten Menge, um ein Resultat mit L Datenelementen zu erzeugen.
  2. Verfahren nach Anspruch 1, wobei das Schieben des ersten Operanden die geschobene erste Menge mit M Datenelementen, die mit einer linken Flanke des ersten Operanden ausgerichtet sind, erzeugt.
  3. Verfahren nach Anspruch 2, wobei das Linksschieben die 'L-M' Datenelemente aus dem ersten Operanden entfernt und wobei an der rechten Flanke des ersten Operanden Nullen eingefügt werden, um durch die 'L-M' Datenelemente, die herausgeschoben werden, freiwerdenden Raum zu ersetzen.
  4. Verfahren nach Anspruch 3, wobei das Schieben des zweiten Operanden die geschobene zweite Menge mit 'L-M' Datenelementen, die mit einer rechten Flanke des zweiten Operanden ausgerichtet sind, erzeugt.
  5. Verfahren nach Anspruch 4, wobei das Rechtsschieben die M Datenelemente aus dem ersten Operanden entfernt und wobei an der linken Flanke des zweiten Operanden Nullen eingefügt werden, um durch die herausgeschobenen M Datenelemente freiwerdenden Raum zu ersetzen.
  6. Verfahren nach Anspruch 5, wobei das Zusammenführen das Durchführen einer logischen OR-Operation an der verschobenen ersten Menge und der verschobenen zweiten Menge umfaßt.
  7. Verfahren nach Anspruch 6, wobei das Resultat aus den M Datenelementen aus der geschobenen ersten Menge und den 'L-M' Datenelementen aus der geschobenen zweiten Menge besteht und wobei sich die M Datenelemente aus der geschobenen ersten Menge nicht mit den 'L-M' Datenelementen aus der geschobenen zweiten Menge überlappen.
  8. Verfahren nach Anspruch 7, wobei der erste Operand, der zweite Operand und das Resultat gepackte Datenoperanden sind.
  9. Verfahren nach Anspruch 8, wobei jedes Datenelement ein Byte Daten ist.
  10. Verfahren nach Anspruch 9, wobei L gleich 8 ist.
  11. Verfahren nach Anspruch 10, wobei M einen Wert in einem Bereich von 0 bis 15 annimmt.
  12. Verfahren nach Anspruch 9, wobei L gleich 16 ist.
  13. Verfahren nach Anspruch 12, wobei M eine Zahl in einem Bereich von 0 bis 31 ist.
  14. Verfahren mit den folgenden Schritten: Empfangen einer Schiebe-Rechts-Zusammenführungsanweisung, eines Zählwerts, eines ersten Datenoperanden, der eine erste Menge von Datenelementen enthält, und eines zweiten Datenoperanden, der eine zweite Menge von Datenelementen enthält; Schieben der ersten Menge von Datenelementen nach links, bis eine Anzahl von Datenelementen, die in dem ersten Datenoperanden verbleibt, gleich dem Zählwert ist; Schieben der zweiten Menge von Datenelementen nach rechts, um eine Anzahl zu entfernen, die gleich dem Zählwert von Datenelementen aus dem zweiten Datenoperanden ist; und Zusammenführen der geschobenen ersten Menge von Datenelementen und der geschobenen zweiten Menge von Datenelementen, um ein Resultat zu erhalten, das Elemente sowohl aus dem ersten Datenoperanden als auch dem zweiten Datenoperanden enthält.
  15. Verfahren nach Anspruch 14, wobei das Linksschieben der ersten Menge von Datenelementen das Entfernen von Datenelementen von einer linken Flanke des ersten Datenoperanden und das Einfügen von Nullen an der rechten Flanke des ersten Datenoperanden umfaßt, um durch die entfernten Datenelemente freigewordene Stellen zu füllen.
  16. Verfahren nach Anspruch 15, wobei das Rechtsschieben der zweiten Menge von Datenelementen das Entfernen von Datenelementen von einer rechten Flanke des zweiten Datenoperanden und das Einfügen von Nullen an der rechten Flanke des zweiten Datenoperanden umfaßt, um durch die entfernten Datenelemente freigewordene Stellen zu füllen.
  17. Verfahren nach Anspruch 16, wobei das Zusammenführen ein logisches OR-Verknüpfen der geschobenen ersten Menge von Datenelementen und der geschobenen zweiten Menge von Datenelementen umfaßt.
  18. Verfahren nach Anspruch 17, wobei der erste Operand und der zweite Operand mit Daten aus benachbarten Speicherstellen eines zusammenhängenden Datenblocks geladen werden und wobei sich die erste Menge von Datenelementen und die zweite Menge von Datenelementen nicht überlappen.
  19. Verfahren mit den folgenden Schritten: Empfangen einer Schiebe-Zusammenführungsanweisung und eines Schiebezählwerts von M; Verketten eines ersten Operanden mit einer ersten Menge von L Datenelementen mit einem zweiten Operanden mit einer zweiten Menge von L Datenelementen zur Bildung eines 2L langen Blocks von Datenelementen; Schieben des Blocks nach Rechts um M Positionen, wobei die äußersten rechten M Datenelemente fallengelassen werden; und Ausgeben der äußersten rechten L Datenelemente aus dem geschobenen Block als Resultat für die Schiebe-Zusammenführungsanweisung.
  20. Verfahren nach Anspruch 19, wobei das Rechtsschieben weiterhin das Einfügen von Nullen an der äußersten linken Flanke des Blocks zum Füllen des durch die M Datenelemente freigewordenen Raums umfaßt.
  21. Verfahren nach Anspruch 20, wobei der erste Operand und der zweite Operand gepackte Datenoperanden sind.
  22. Verfahren nach Anspruch 21, wobei jedes Datenelement ein Byte Daten umfaßt.
  23. Verfahren nach Anspruch 22, wobei L gleich 8 ist.
  24. Verfahren nach Anspruch 23, wobei M einen Wert in einem Bereich von 0 bis 15 annimmt.
  25. Verfahren nach Anspruch 24, wobei der Block in einem temporären gepackten Datenregister mit Platz für 2L Datenelementen gehalten wird.
  26. Vorrichtung, umfassend: einen Decodierer zum Decodieren einer Schiebe-Rechts-Zusammenführungsanweisung; einen Scheduler zum Abfertigen der Anweisung zur Ausführung mit einem ersten Operanden, der aus einer ersten Menge von L Datenelementen besteht, einem zweiten Operanden, der aus einer zweiten Menge von L Datenelementen besteht, und einem Schiebezählwert von M; und eine Ausführungseinheit zum Ausführen der Anweisung, wobei die Anweisung bewirkt, daß die Ausführungseinheit folgendes durchführt: Schieben des ersten Operanden nach links um 'L-M' Datenelemente; Schieben des zweiten Operanden nach rechts um M Datenelemente; Zusammenführen des geschobenen ersten Operandens mit dem geschobenen zweiten Operanden, um ein Resultat mit L Datenelementen zu erzeugen.
  27. Vorrichtung nach Anspruch 26, wobei die Schiebe-Rechts-Zusammenführungsanweisung aus einer Mikroanweisung (uop) besteht.
  28. Vorrichtung nach Anspruch 27, wobei das Linksschieben des ersten Operanden eine geschobene erste Menge von Daten erzeugt, die aus M Datenelementen besteht, die mit einer äußersten linken Flanke des ersten Operanden ausgerichtet sind.
  29. Vorrichtung nach Anspruch 28, wobei das Linksschieben 'L-M' Datenelemente aus dem ersten Operanden entfernt und wobei an einer rechten Flanke des ersten Operanden Nullen eingefügt werden, um durch die herausgeschobenen 'L-M' Datenelemente freigewordenen Raum zu ersetzen.
  30. Vorrichtung nach Anspruch 29, wobei das Rechtsschieben des zweiten Operanden die geschobene zweite Menge erzeugt, die 'L-M' Datenelemente umfaßt, die mit einer rechten Flanke des zweiten Operanden ausgerichtet sind.
  31. Vorrichtung nach Anspruch 30, wobei das Rechtsschieben die M Datenelemente aus dem zweiten Operanden entfernt und wobei Nullen an der linken Flanke des zweiten Operanden eingefügt werden, um durch die herausgeschobenen M Datenelemente freigewordenen Raum zu ersetzen.
  32. Vorrichtung nach Anspruch 31, wobei der erste Operand, der zweite Operand und das Resultat gepackte Datenregister sind.
  33. Vorrichtung nach Anspruch 32, wobei jedes Datenelement ein Byte Daten ist.
  34. Vorrichtung nach Anspruch 33, wobei L gleich 8 ist.
  35. Vorrichtung nach Anspruch 34, wobei M einen Wert in einem Bereich von 0 bis 15 annimmt.
  36. Vorrichtung nach Anspruch 35, wobei die Vorrichtung eine 64-Bit-Architektur umfaßt.
  37. Vorrichtung nach Anspruch 33, wobei L gleich 16 ist, M ein Wert im Bereich von 0 bis 31 ist und die Vorrichtung eine 128-Bit-Architektur umfaßt.
  38. System, umfassend: einen Speicher zum Speichern von Daten und Anweisungen; einen auf einem Bus an den Speicher angekoppelten Prozessor, wobei der Prozessor betreibbar ist, um eine Schiebe-Rechts-Zusammenführungsoperation durchzuführen, wobei der Prozessor folgendes umfaßt: eine Buseinheit zum Empfangen einer Anweisung aus dem Speicher; einen Decodierer zum Decodieren einer Anweisung zur Durchführung einer Schiebe-Rechts-Zusammenführung des Schiebezählwerts M an einem ersten Operanden mit einer ersten Menge von K Datenelementen und einem zweiten Operanden mit einer zweiten Menge von L Datenelementen; einen Scheduler zum Abfertigen der decodierten Anweisung zur Ausführung; eine Ausführungseinheit zur Ausführung der decodierten Anweisung, wobei die decodierte Anweisung verursacht, daß die Ausführungseinheit folgendes durchführt: Schieben des ersten Operanden nach links um 'K-M' Datenelemente; Schieben des zweiten Operanden nach rechts um M Datenelemente; Zusammenführen des geschobenen ersten Operanden mit dem geschobenen zweiten Operanden, um ein Resultat mit K Datenelementen zu erzeugen.
  39. System nach Anspruch 38, wobei K gleich L ist und K und L beide 8 betragen.
  40. System nach Anspruch 38 wobei: das Linksschieben 'K-M' Datenelemente aus dem ersten Operanden entfernt und wobei an der rechten Flanke des ersten Operanden Nullen eingefügt werden, um durch die herausgeschobenen 'K-M' Datenelemente freigewordenen Raum zu ersetzen; und das Rechtsschieben die M Datenelemente aus dem zweiten Operanden entfernt und wobei an einer linken Flanke des zweiten Operanden Nullen eingefügt werden, um durch die herausgeschobenen M Datenelemente freigewordenen Raum zu ersetzen.
  41. System nach Anspruch 3 8, wobei jedes Datenelement ein Byte Daten umfaßt und der erste Operand und die zweiten Operanden gepackte Datenoperanden sind.
  42. Maschinenlesbares Medium, auf dem ein Computerprogramm realisiert ist, wobei das Computerprogramm durch eine Maschine ausführbar ist, um ein Verfahren mit den folgenden Schritten durchzuführen: Empfangen eines Schiebezählwerts von M; Schieben eines ersten Operanden mit einer ersten Menge von L Datenelementen nach links um 'L-M' Datenelemente; Schieben eines zweiten Operanden mit einer zweiten Menge von L Datenelementen nach rechts um M Datenelemente; Zusammenführen der geschobenen ersten Menge mit der geschobenen zweiten Menge, um ein Resultat mit L Datenelementen zu erzeugen.
  43. Maschinenlesbares Medium nach Anspruch 42, wobei: das Linksschieben 'L-M' Datenelemente aus dem ersten Operanden entfernt und wobei an der rechten Flanke; des ersten Operanden Nullen eingefügt werden, um durch die herausgeschobenen 'L-M' Datenelemente freigewordenen Raum zu ersetzen; und das Rechtsschieben die M Datenelemente aus dem zweiten Operanden entfernt und wobei an einer linken Flanke des zweiten Operanden Nullen eingefügt werden, um durch die herausgeschobenen M Datenelemente freigewordenen Raum zu ersetzen; und wobei das Zusammenführen das Durchführen einer logischen OR-Operation an der geschobenen ersten Menge und geschobenen zweiten Menge umfaßt.
  44. Verfahren nach Anspruch 43, wobei der erste Operand, der zweite Operand und das Resultat gepackte Datenoperanden sind.
DE10297000T 2001-10-29 2002-10-28 Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung Expired - Lifetime DE10297000B4 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US09/952,891 2001-10-29
US09/952,891 US7085795B2 (en) 2001-10-29 2001-10-29 Apparatus and method for efficient filtering and convolution of content data
US10/280,612 2002-10-25
US10/280,612 US7685212B2 (en) 2001-10-29 2002-10-25 Fast full search motion estimation with SIMD merge instruction
PCT/US2002/034404 WO2003038601A1 (en) 2001-10-29 2002-10-28 Method and apparatus for parallel shift right merge of data

Publications (2)

Publication Number Publication Date
DE10297000T5 true DE10297000T5 (de) 2004-07-01
DE10297000B4 DE10297000B4 (de) 2008-06-05

Family

ID=26960393

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10297000T Expired - Lifetime DE10297000B4 (de) 2001-10-29 2002-10-28 Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung

Country Status (8)

Country Link
US (1) US7685212B2 (de)
JP (2) JP4623963B2 (de)
KR (1) KR100602532B1 (de)
CN (1) CN1269027C (de)
DE (1) DE10297000B4 (de)
HK (1) HK1068985A1 (de)
RU (1) RU2273044C2 (de)
WO (1) WO2003038601A1 (de)

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7685212B2 (en) 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7739319B2 (en) * 2001-10-29 2010-06-15 Intel Corporation Method and apparatus for parallel table lookup using SIMD instructions
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US7340495B2 (en) 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US7272622B2 (en) 2001-10-29 2007-09-18 Intel Corporation Method and apparatus for parallel shift right merge of data
US20040054877A1 (en) 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7624138B2 (en) * 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US7725521B2 (en) * 2001-10-29 2010-05-25 Intel Corporation Method and apparatus for computing matrix transformations
US7631025B2 (en) * 2001-10-29 2009-12-08 Intel Corporation Method and apparatus for rearranging data between multiple registers
CN1297887C (zh) * 2003-11-28 2007-01-31 凌阳科技股份有限公司 可跨边界对齐复数暂存器资料的处理器及其方法
GB2411978B (en) * 2004-03-10 2007-04-04 Advanced Risc Mach Ltd Inserting bits within a data word
US7630585B2 (en) * 2004-06-25 2009-12-08 Intel Corporation Image processing using unaligned memory load instructions
JP4488805B2 (ja) * 2004-06-25 2010-06-23 パナソニック株式会社 動きベクトル検出装置および方法
KR100774068B1 (ko) * 2004-09-14 2007-11-06 마츠시타 덴끼 산교 가부시키가이샤 배럴시프트장치
JP4453518B2 (ja) * 2004-10-29 2010-04-21 ソニー株式会社 符号化及び復号装置並びに符号化及び復号方法
JP5748935B2 (ja) * 2004-11-03 2015-07-15 インテル コーポレイション Simd命令をサポートするプログラマブルデータ処理回路
US20070073925A1 (en) * 2005-09-28 2007-03-29 Arc International (Uk) Limited Systems and methods for synchronizing multiple processing engines of a microprocessor
US9432679B2 (en) * 2005-11-01 2016-08-30 Entropic Communications, Llc Data processing system
JP5145659B2 (ja) * 2006-06-19 2013-02-20 日本電気株式会社 ベクトルリネーミング方式およびベクトル型計算機
US8250618B2 (en) * 2006-09-18 2012-08-21 Elemental Technologies, Inc. Real-time network adaptive digital video encoding/decoding
JP4686435B2 (ja) * 2006-10-27 2011-05-25 株式会社東芝 演算装置
WO2008079041A1 (en) * 2006-12-27 2008-07-03 Intel Corporation Methods and apparatus to decode and encode video information
KR101520027B1 (ko) * 2007-06-21 2015-05-14 삼성전자주식회사 움직임 추정 방법 및 장치
US8184715B1 (en) 2007-08-09 2012-05-22 Elemental Technologies, Inc. Method for efficiently executing video encoding operations on stream processor architectures
JP2009055291A (ja) * 2007-08-27 2009-03-12 Oki Electric Ind Co Ltd 動き検出回路
US8121197B2 (en) * 2007-11-13 2012-02-21 Elemental Technologies, Inc. Video encoding and decoding using parallel processors
US20120027262A1 (en) * 2007-12-12 2012-02-02 Trident Microsystems, Inc. Block Matching In Motion Estimation
US8078836B2 (en) 2007-12-30 2011-12-13 Intel Corporation Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
EP2424243B1 (de) * 2010-08-31 2017-04-05 OCT Circuit Technologies International Limited Bewegungsschätzung mithilfe der integralen Projektion
US20120254589A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
DE102011075261A1 (de) * 2011-05-04 2012-11-08 Robert Bosch Gmbh Verfahren zum Bearbeiten von Videodaten und eine Anordnung zur Durchführung des Verfahrens
US9823928B2 (en) * 2011-09-30 2017-11-21 Qualcomm Incorporated FIFO load instruction
US9715383B2 (en) * 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
JP5730812B2 (ja) * 2012-05-02 2015-06-10 日本電信電話株式会社 演算装置、その方法およびプログラム
US8767252B2 (en) 2012-06-07 2014-07-01 Xerox Corporation System and method for merged image alignment in raster image data
CN103489427B (zh) * 2012-06-14 2015-12-02 深圳深讯和科技有限公司 Yuv转换成rgb以及rgb转换成yuv的方法和系统
US9195521B2 (en) * 2012-07-05 2015-11-24 Tencent Technology (Shenzhen) Co., Ltd. Methods for software systems and software systems using the same
US9395988B2 (en) * 2013-03-08 2016-07-19 Samsung Electronics Co., Ltd. Micro-ops including packed source and destination fields
CN104243085A (zh) * 2013-06-08 2014-12-24 阿尔卡特朗讯 用于编码重组位数据的方法、装置和基站控制器
US9880845B2 (en) * 2013-11-15 2018-01-30 Qualcomm Incorporated Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods
EP3001307B1 (de) * 2014-09-25 2019-11-13 Intel Corporation Bit-Shuffle-Prozessoren, Verfahren, Systeme und Anweisungen
US20160125263A1 (en) 2014-11-03 2016-05-05 Texas Instruments Incorporated Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
CA3038967A1 (en) 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
EP3336692B1 (de) * 2016-12-13 2020-04-29 Arm Ltd Replikatpartitionsanweisung
JP6733569B2 (ja) * 2017-02-06 2020-08-05 富士通株式会社 シフト演算回路およびシフト演算方法
US10481870B2 (en) 2017-05-12 2019-11-19 Google Llc Circuit to perform dual input value absolute value and sum operation
US11360744B2 (en) * 2017-06-29 2022-06-14 Beijing Qingying Machine Visual Technology Co., Ltd. Two-dimensional data matching method, device and logic circuit
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
CN108540799B (zh) * 2018-05-16 2022-06-03 重庆堂堂网络科技有限公司 一种可以精确表示一个视频文件两帧图像之间差异的压缩方法
CN110221807B (zh) * 2019-06-06 2021-08-03 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质
JP6979987B2 (ja) * 2019-07-31 2021-12-15 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
US11601656B2 (en) * 2021-06-16 2023-03-07 Western Digital Technologies, Inc. Video processing in a data storage device
US20230205528A1 (en) * 2021-12-23 2023-06-29 Intel Corporation Apparatus and method for vector packed concatenate and shift of specific portions of quadwords
CN114816531B (zh) * 2022-04-18 2023-05-02 海飞科(南京)信息技术有限公司 使用窄加法数据通道实现大位宽加操作数取数加操作的方法
US11941397B1 (en) * 2022-05-31 2024-03-26 Amazon Technologies, Inc. Machine instructions for decoding acceleration including fuse input instructions to fuse multiple JPEG data blocks together to take advantage of a full SIMD width of a processor
GB2620381A (en) * 2022-06-30 2024-01-10 Advanced Risc Mach Ltd Vector extract and merge instruction

Family Cites Families (75)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3711692A (en) 1971-03-15 1973-01-16 Goodyear Aerospace Corp Determination of number of ones in a data field by addition
US3723715A (en) 1971-08-25 1973-03-27 Ibm Fast modulo threshold operator binary adder for multi-number additions
US4139899A (en) 1976-10-18 1979-02-13 Burroughs Corporation Shift network having a mask generator and a rotator
US4161784A (en) 1978-01-05 1979-07-17 Honeywell Information Systems, Inc. Microprogrammable floating point arithmetic unit capable of performing arithmetic operations on long and short operands
US4418383A (en) 1980-06-30 1983-11-29 International Business Machines Corporation Data flow component for processor and microprocessor systems
US4393468A (en) 1981-03-26 1983-07-12 Advanced Micro Devices, Inc. Bit slice microprogrammable processor for signal processing applications
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
US4498177A (en) 1982-08-30 1985-02-05 Sperry Corporation M Out of N code checker circuit
US4569016A (en) 1983-06-30 1986-02-04 International Business Machines Corporation Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system
US4707800A (en) 1985-03-04 1987-11-17 Raytheon Company Adder/substractor for variable length numbers
JPS6297060A (ja) 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US4989168A (en) 1987-11-30 1991-01-29 Fujitsu Limited Multiplying unit in a computer system, capable of population counting
US5019968A (en) 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
DE68925666T2 (de) 1988-10-07 1996-09-26 Ibm Prozessoren für wortorganisierte Daten
US4903228A (en) 1988-11-09 1990-02-20 International Business Machines Corporation Single cycle merge/logic unit
KR920007505B1 (ko) 1989-02-02 1992-09-04 정호선 신경회로망을 이용한 곱셈기
US5081698A (en) 1989-02-14 1992-01-14 Intel Corporation Method and apparatus for graphics display data manipulation
US5497497A (en) 1989-11-03 1996-03-05 Compaq Computer Corp. Method and apparatus for resetting multiple processors using a common ROM
US5168571A (en) 1990-01-24 1992-12-01 International Business Machines Corporation System for aligning bytes of variable multi-bytes length operand based on alu byte length and a number of unprocessed byte data
US5268995A (en) 1990-11-21 1993-12-07 Motorola, Inc. Method for executing graphics Z-compare and pixel merge instructions in a data processor
US5680161A (en) 1991-04-03 1997-10-21 Radius Inc. Method and apparatus for high speed graphics data compression
US5187679A (en) 1991-06-05 1993-02-16 International Business Machines Corporation Generalized 7/3 counters
US5321810A (en) 1991-08-21 1994-06-14 Digital Equipment Corporation Address method for computer graphics system
US5423010A (en) 1992-01-24 1995-06-06 C-Cube Microsystems Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words
US5426783A (en) 1992-11-02 1995-06-20 Amdahl Corporation System for processing eight bytes or less by the move, pack and unpack instruction of the ESA/390 instruction set
US5408670A (en) 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
US5465374A (en) 1993-01-12 1995-11-07 International Business Machines Corporation Processor for processing data string by byte-by-byte
US5524256A (en) 1993-05-07 1996-06-04 Apple Computer, Inc. Method and system for reordering bytes in a data stream
JPH0721034A (ja) * 1993-06-28 1995-01-24 Fujitsu Ltd 文字列複写処理方法
US5625374A (en) 1993-09-07 1997-04-29 Apple Computer, Inc. Method for parallel interpolation of images
US5390135A (en) 1993-11-29 1995-02-14 Hewlett-Packard Parallel shift and add circuit and method
US5487159A (en) 1993-12-23 1996-01-23 Unisys Corporation System for processing shift, mask, and merge operations in one instruction
US5781457A (en) 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
US5594437A (en) 1994-08-01 1997-01-14 Motorola, Inc. Circuit and method of unpacking a serial bitstream
US5579253A (en) 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
US6275834B1 (en) 1994-12-01 2001-08-14 Intel Corporation Apparatus for performing packed shift operations
ZA9510127B (en) 1994-12-01 1996-06-06 Intel Corp Novel processor having shift operations
US6738793B2 (en) 1994-12-01 2004-05-18 Intel Corporation Processor capable of executing packed shift operations
US5636352A (en) * 1994-12-16 1997-06-03 International Business Machines Corporation Method and apparatus for utilizing condensed instructions
GB9509989D0 (en) 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
US6381690B1 (en) 1995-08-01 2002-04-30 Hewlett-Packard Company Processor for performing subword permutations and combinations
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6385634B1 (en) 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US7085795B2 (en) 2001-10-29 2006-08-01 Intel Corporation Apparatus and method for efficient filtering and convolution of content data
CN101794212B (zh) 1995-08-31 2015-01-07 英特尔公司 控制移位分组数据的位校正的装置
US5819117A (en) 1995-10-10 1998-10-06 Microunity Systems Engineering, Inc. Method and system for facilitating byte ordering interfacing of a computer system
US5880979A (en) 1995-12-21 1999-03-09 Intel Corporation System for providing the absolute difference of unsigned values
US5793661A (en) 1995-12-26 1998-08-11 Intel Corporation Method and apparatus for performing multiply and accumulate operations on packed data
US5838984A (en) 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6223277B1 (en) 1997-11-21 2001-04-24 Texas Instruments Incorporated Data processing circuit with packed data structure capability
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6041404A (en) 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6211892B1 (en) 1998-03-31 2001-04-03 Intel Corporation System and method for performing an intra-add operation
US6418529B1 (en) 1998-03-31 2002-07-09 Intel Corporation Apparatus and method for performing intra-add operation
US6288723B1 (en) 1998-04-01 2001-09-11 Intel Corporation Method and apparatus for converting data format to a graphics card
US6115812A (en) 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
US6098087A (en) * 1998-04-23 2000-08-01 Infineon Technologies North America Corp. Method and apparatus for performing shift operations on packed data
US6263426B1 (en) 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US20020002666A1 (en) 1998-10-12 2002-01-03 Carole Dulong Conditional operand selection using mask operations
US6484255B1 (en) 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6546480B1 (en) 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
US6430684B1 (en) 1999-10-29 2002-08-06 Texas Instruments Incorporated Processor circuits, systems, and methods with efficient granularity shift and/or merge instruction(s)
US20050188182A1 (en) 1999-12-30 2005-08-25 Texas Instruments Incorporated Microprocessor having a set of byte intermingling instructions
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
WO2001067235A2 (en) 2000-03-08 2001-09-13 Sun Microsystems, Inc. Processing architecture having sub-word shuffling and opcode modification
WO2001069938A1 (en) * 2000-03-15 2001-09-20 Digital Accelerator Corporation Coding of digital video with high motion content
US7155601B2 (en) 2001-02-14 2006-12-26 Intel Corporation Multi-element operand sub-portion shuffle instruction execution
KR100446235B1 (ko) * 2001-05-07 2004-08-30 엘지전자 주식회사 다중 후보를 이용한 움직임 벡터 병합 탐색 방법
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US7685212B2 (en) 2001-10-29 2010-03-23 Intel Corporation Fast full search motion estimation with SIMD merge instruction
US7272622B2 (en) 2001-10-29 2007-09-18 Intel Corporation Method and apparatus for parallel shift right merge of data
US7340495B2 (en) 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US6914938B2 (en) * 2002-06-18 2005-07-05 Motorola, Inc. Interlaced video motion estimation

Also Published As

Publication number Publication date
RU2003137531A (ru) 2005-05-27
WO2003038601A1 (en) 2003-05-08
KR20040038922A (ko) 2004-05-08
JP2005508043A (ja) 2005-03-24
JP2009009587A (ja) 2009-01-15
HK1068985A1 (en) 2005-05-06
JP4750157B2 (ja) 2011-08-17
JP4623963B2 (ja) 2011-02-02
DE10297000B4 (de) 2008-06-05
KR100602532B1 (ko) 2006-07-19
CN1269027C (zh) 2006-08-09
CN1522401A (zh) 2004-08-18
US20030123748A1 (en) 2003-07-03
RU2273044C2 (ru) 2006-03-27
US7685212B2 (en) 2010-03-23

Similar Documents

Publication Publication Date Title
DE10297000B4 (de) Verfahren und Vorrichtung zur parallelen Datenverschiebung nach rechts mit Datenzusammenfügung
US7272622B2 (en) Method and apparatus for parallel shift right merge of data
US7085795B2 (en) Apparatus and method for efficient filtering and convolution of content data
DE102007045496B4 (de) Anweisung und Logik zum Bearbeiten von Textstrings
DE60318494T2 (de) Verfahren, einrichtung und system zur durchführung von kalkulationsoperationen
DE112005001277B4 (de) Verfahren und Vorrichtung zum Vektorisieren mehrerer Eingabebefehle
DE102008059371B9 (de) Funktionseinheit für verschmolzenes Multiplizieren und Addieren
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE69432659T2 (de) Rotationsregister zur orthogonalen Datentransformation
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE19920214C2 (de) Verfahren und Einrichtung zum Konvertieren einer Zahl zwischen einem Gleitkommaformat und einem Ganzzahlformat
DE112007002101T5 (de) Instruktion und Logik zur Durchführung einer Skalarprodukt-Operation
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE112010004887T5 (de) Verfahren und Vorrichtung zur Durchführung einer Verschiebe- und Exklusiv-ODER-Operation in einer einzelnen Instruktion
DE10297581T5 (de) Lade/Übertrage- und Duplizier-Anweisungen für einen Prozessor
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE19983870B4 (de) Berechnung impliziter Datentypbits für Simd-Operationen
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE102007036508A1 (de) Datenverarbeitungseinheit und Verfahren zur parallelen Vektordatenverarbeitung
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
DE112020004266T5 (de) Kompressionsunterstützungsanweisungen
KR19990011774A (ko) 비디오 압축 및 해제를 위한 벡터 프로세서 명령어

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 10297000

Country of ref document: DE

Date of ref document: 20040701

Kind code of ref document: P

8364 No opposition during term of opposition
R071 Expiry of right