DE102022120207A1 - Effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodieren - Google Patents

Effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodieren Download PDF

Info

Publication number
DE102022120207A1
DE102022120207A1 DE102022120207.0A DE102022120207A DE102022120207A1 DE 102022120207 A1 DE102022120207 A1 DE 102022120207A1 DE 102022120207 A DE102022120207 A DE 102022120207A DE 102022120207 A1 DE102022120207 A1 DE 102022120207A1
Authority
DE
Germany
Prior art keywords
transform
phases
transformation
pixel block
rams
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102022120207.0A
Other languages
English (en)
Inventor
Eric Masson
Ankur Saxena
Donald Bittel
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102022120207A1 publication Critical patent/DE102022120207A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/439Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using cascaded computational arrangements for performing a single operation, e.g. filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

Offenbarte Ansätze können nicht-blockierende Videoverarbeitungspipelines bereitstellen, die in der Lage sind, Transformations-Hardwareressourcen effizient gemeinsam zu nutzen. Transformations-Hardwareressourcen können für alle Verarbeitungsparameter gemeinsam genutzt werden, wie etwa Pixelblockabmessungen, Transformationstypen, Bittiefen des Videostroms und/oder mehrere Codierungsformate sowie für die Inter-Frame- und Intra-Frame-Codierung. Die Videoverarbeitungspipeline kann in Phasen unterteilt werden, wobei jede Phase über Half-Butterfly-Schaltungen verfügt, um einen entsprechenden Abschnitt der Berechnungen einer Transformation durchzuführen. Die Phasen können auswählbar und dazu konfigurierbar sein, um Transformationen für mehrere verschiedene Kombinationen der Verarbeitungsparameter durchzuführen. In jeder Konfiguration können die Phasen in der Lage sein, eine Transformation durch einen sequentiellen Durchlauf durch mindestens einige der Phasen durchzuführen, was zu einem hohen Durchsatz führt. Es werden auch Ansätze zur Verbesserung der Leistung und Effizienz von Transponierungsoperationen von Transformationen beschrieben.

Description

  • STAND DER TECHNIK
  • Entscheidend für Hardware-Videocodierer ist die Implementierung effizienter Transformationen zwischen Zeit- und Frequenzbereichen. Für Videocodecs wie AV1 und VP9 sind Vorwärts- und Rückwärtstransformationen sowohl für die Optimierung der Ratenverzerrung (rate-distortion optimization - RDO) als auch für die Rekonstruktion (reconstruction - REC) wesentlich, wobei die Transformationsoperationen durch eine speicherintensive Transponierungsoperation getrennt sind. RDO kann die Optimierung der Ratenverzerrung zur Verbesserung der Qualität beinhalten, indem verschiedene mögliche Kombinationen von Transformationsarten, -formen und/oder - größen für die Codierung eines Superblocks getestet werden. REC kann die Verwendung von Informationen aus RDO beinhalten, um eine Feinabstimmung der Auswahlen vorzunehmen und die Codierung durchzuführen. Die verschiedenen Transformationsarten, -formen und -größen, die von einem Videocodec unterstützt werden können, können zu einem großen Suchraum für RDO führen. Aufgrund der Größe des Suchraums ist es unter Umständen nicht möglich, alle Möglichkeiten zu bewerten, da der Hardware-Durchsatz bestimmt, wie viele Möglichkeiten für einen bestimmten Superblock bewertet werden können. Es ist jedoch eine große Herausforderung, einen hohen Durchsatz zu erreichen und gleichzeitig viele verschiedene Konfigurationen zu unterstützen sowie eine flächen- und energieeffiziente Schaltung zu realisieren.
  • Ein herkömmlicher Ansatz zur Videocodierung kann einen iterativen Ansatz zum Durchführen von Transformationen verwenden, bei dem die Eingabe weiterer Pixel in die Pipeline blockiert wird, während die Pipeline mehrere Datendurchläufe iteriert. Für die Anwendung von Transformationen werden echte Multiplikatoren verwendet, die in Bezug auf Fläche, Stromverbrauch und Zeitaufwand kostspielig sind und daher die Leistung einschränken. Ein anderer herkömmlicher Ansatz kann Berechnungen über mehrere kleine Funktionen iterieren, um eine größere Funktion zu bilden, die die Gesamttransformation ergibt. Dabei kann eine beträchtliche Anzahl von Iterationen erforderlich sein, und die daraus resultierende Blockierung kann bei größeren Transformationsgrößen viele hundert Zyklen betragen. Die Transponierung kann mit einer physischen Transponierungsschaltung durchgeführt werden, die viele Ressourcen benötigt. Aus diesen und anderen Gründen können herkömmliche Ansätze große und ineffiziente Schaltungen erfordern, da sie für einen hohen Durchsatz nicht gut skalierbar sind.
  • ZUSAMMENFASSUNG
  • Ausführungsformen der vorliegenden Offenbarung beziehen sich auf effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodierern. Es werden Systeme und Verfahren offenbart, die verwendet werden können, um Videocodierer oder -decodierer mit hohem Durchsatz bei effizienter Nutzung von Fläche und Leistung bereitzustellen.
  • Neben anderen Aspekten der Offenbarung können offenbarte Ansätze nicht-blockierende Videoverarbeitungspipelines bereitstellen, die in der Lage sind, Transformations-Hardwareressourcen effizient zu nutzen. In mindestens einer Ausführungsform können die Transformations-Hardwareressourcen einer Videoverarbeitungspipeline für alle Verarbeitungsparameter, wie etwa Pixelblockabmessungen, Transformationsarten, Bittiefen des Videostroms und/oder mehrere Codierer sowie für die Inter-Frame- und Intra-Frame-Codierung gemeinsam genutzt werden. Die Videoverarbeitungspipeline kann in eine Vielzahl von Phasen unterteilt werden, wobei jede Phase eine Vielzahl von Halb-Butterfly (HB)-Schaltungen, Addierern und/oder Subtrahierern aufweist, die betreibbar ist, um einen entsprechenden Abschnitt der Berechnungen einer Transformation durchzuführen. Die Phasen können auswählbar und dazu konfigurierbar sein, um Transformationen für mehrere verschiedene Pixelblockdimensionen, Transformationsarten, Videostrom-Bittiefen und/oder mehrere Codierformate sowie für Inter-Frame- und Intra-Frame-Codierung durchzuführen, was eine hohe Wiederverwendung der Transformations-Hardwareressourcen ermöglicht. In jeder Konfiguration können die Phasen in der Lage sein, eine Transformation durch einen sequentiellen Durchlauf durch mindestens einige der Phasen durchzuführen, was zu einem hohen Durchsatz führt.
  • Figurenliste
  • Die vorliegenden Systeme und Verfahren für effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodierern werden im Folgenden unter Bezugnahme auf die beigefügten Figuren detailliert beschrieben, wobei:
    • 1 einen beispielhaften Datenfluss einer Quantisierungs- und Transformationseinheit veranschaulicht, die sich für die Optimierung der Ratenverzerrung und die Rekonstruktion von Videos eignet, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 2 ein Beispiel für einen Schaltkreis zur gemeinsamen Nutzung von Transformations-Hardwareressourcen veranschaulicht, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 3 ein Beispiel einer Tabelle veranschaulicht, die widerspiegelt, wie Transformations-Hardwareressourcen auf Phasen für eine Transformation zugeordnet werden können, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 4A Beispiele für Halb-Butterfly-Schaltungen veranschaulicht, die zur Implementierung von Datenflüssen verwendet werden können, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 4B eine beispielhafte Schaltung zur Umgehung von Eintritts-Pipelinestufen veranschaulicht, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 4C eine beispielhafte Schaltung zur Umgehung von Austritts-Pipelinestufen veranschaulicht, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 5 ein Beispiel für Aspekte einer Transponierungsoperation für einen 8x8-Pixelblock darstellt, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 6 ein Beispiel für ein spiralförmiges Speicherzugriffsmuster zur Transponierung von Pixelblöcken veranschaulicht, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung;
    • 7 ein Flussdiagramm eines Beispiels eines Prozesses ist, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung;
    • 8A ein Flussdiagramm eines Beispiels eines Prozesses beinhaltet, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung;
    • 8B ein Flussdiagramm eines Beispiels eines Prozesses beinhaltet, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung;
    • 9 eine Tabelle beinhaltet, die ein Beispiel dafür veranschaulicht, wie Pixelblöcke unter Verwendung von Versätzen im selben Puffer gespeichert werden können, gemäß mindestens einer Ausführungsform der vorliegenden Offenbarung;
    • 10 ein Beispiel veranschaulicht, wie ein Adressraum in einen Schreibbereich, einen Lesebereich und einen freien Bereich unterteilt werden kann, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung;
    • 11 ein Flussdiagramm ist, das ein Verfahren zum Betrieb einer Videoverarbeitungspipeline unter Verwendung gemeinsam genutzter Hardwareressourcen zeigt, gemäß einigen Ausführungsformen der vorliegenden Offenbarung;
    • 12 ein Blockdiagramm einer beispielhaften Rechenvorrichtung ist, die zur Verwendung bei der Implementierung einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist; und
    • 13 ist ein Blockdiagramm eines beispielhaften Rechenzentrums, das zur Verwendung bei der Implementierung einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist.
  • DETAILLIERTE BESCHREIBUNG
  • Ausführungsformen der vorliegenden Offenbarung beziehen sich auf effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodierern. Es werden Systeme und Verfahren offenbart, die verwendet werden können, um Videocodierer oder -decodierer mit hohem Durchsatz bei effizienter Nutzung von Fläche und Leistung bereitzustellen.
  • Im Gegensatz zu herkömmlichen Ansätzen stellt die vorliegende Offenbarung Transformationspipelines bereit, die in der Lage sind, Transformationen auf Pixelblöcke (die auch als Kachel, Blockpartition oder Teilblock bezeichnet werden können) ohne Blockierung anzuwenden, wobei weder iterative Durchläufe auf den Pixeln noch Iterationen über Rechenressourcen erforderlich sind. Der Durchsatz-PPC kann mit dem Eingangs-PPC gleichwertig sein. Diese Eigenschaften können für eine Vielzahl unterschiedlicher Verarbeitungsparameter gelten, wie etwa Pixelblockabmessungen, Transformationsarten, Bittiefen des Videostroms und/oder mehrere Codierformate sowie für die Inter-Frame- und Intra-Frame-Codierung. Das Bereitstellen eines nicht-blockierenden Designs kann zu einem hohen Durchsatz führen und die Planung erheblich vereinfachen, sodass Einheiten wie Inter-Frame- und Intra-Frame-Codierer leichter denselben Datenfluss 100 nutzen können.
  • Neben anderen Aspekten der Offenbarung können offenbarte Ansätze nicht-blockierende Videoverarbeitungspipelines bereitstellen, die in der Lage sind, Transformations-Hardwareressourcen effizient zu nutzen. In mindestens einer Ausführungsform können die Transformations-Hardwareressourcen einer Videoverarbeitungspipeline für alle Verarbeitungsparameter, wie etwa Pixelblockabmessungen, Transformationsarten, Bittiefen des Videostroms und/oder mehrere Codierer sowie für die Inter-Frame- und Intra-Frame-Codierung gemeinsam genutzt werden. Die Videoverarbeitungspipeline kann in eine Vielzahl von Phasen unterteilt werden, wobei jede Phase eine Vielzahl von Halb-Butterfly (HB)-Schaltungen, Addierern und/oder Subtrahierern aufweist, die betreibbar ist, um einen entsprechenden Abschnitt der Berechnungen einer Transformation durchzuführen. Die Phasen können auswählbar und dazu konfigurierbar sein, um Transformationen für mehrere verschiedene Pixelblockdimensionen, Transformationsarten, Videostrom-Bittiefen und/oder mehrere Codierformate sowie für Inter-Frame- und Intra-Frame-Codierung durchzuführen, was eine hohe Wiederverwendung der Transformations-Hardwareressourcen ermöglicht. In jeder Konfiguration können die Phasen in der Lage sein, eine Transformation durch einen sequentiellen Durchlauf durch mindestens einige der Phasen durchzuführen, was zu einem hohen Durchsatz führt.
  • Die vorgestellten Pipelines können Transformationseinheiten (z. B. eine Vorwärtstransformationsschaltung, eine Rückwärtstransformationsschaltung usw.) unter Verwendung eines Halb-Butterfly-Netzwerks (mit einer Vielzahl von HBs und einer Vielzahl von Addierern), gefolgt von einer Transponierung und einem weiteren Halb-Butterfly-Netzwerk (mit einer Vielzahl von HBs) implementieren. Wie hier verwendet, kann sich ein Halb-Butterfly-Netzwerk auf eine Schaltung beziehen, die eine oder mehrere Halb-Butterfly-Schaltungen enthält, die verwendet werden, um mindestens einen Teil einer Transformationskomposition an Koeffizienten durchzuführen. Ein Halb-Butterfly oder eine Halb-Butterfly-Schaltung kann sich auf eine Schaltung beziehen, die so konfiguriert ist, dass sie eine lineare Kombination von Eingängen (z. B. zwei Eingänge) durch trigonometrische Werte zu einer einzigen Ausgabe skaliert (z. B. unter Verwendung von zwei Multiplikatoren und einer Addition wie in 4A). Halb-Butterfly-Schaltungen können kleinere Operationen an Paaren von Eingängen bilden, die vernetzt werden können, um eine größere Transformation zu erzeugen, wie hierin beschrieben.
  • In mindestens einer Ausführungsform kann ein Halb-Butterfly einem der Ausgänge eines zugehörigen Paares in einem Butterfly-Verarbeitungsablauf entsprechen (z. B. aus schnellen Fourier-Transformationen (FFTs)), bei dem ein Paar von Eingängen linear kombiniert wird, um zwei Ausgänge zu erzeugen. Betrachten wir zum Beispiel eine Abstraktion der Stufe 5 einer FDCT16-Transformation in AV1, bei der die Werte cospi[8] und cospi[40] bekannte trigonometrische Konstanten sind:
    out[4] = half_btf(cospi[56], in[4], cospi[8], in[7]) = cospi[56] * in[4] + cospi[8] * in[7]
    out[5] = half_btf(cospi[24], in[5], cospi[40], in[6]) = cospi[24] * in[5] + cospi[40] * in[6]
    out[6] = half_btf(cospi[24], in[6], -cospi[40], in[5]) = cospi[24] * in[6] + -cospi[40] * in[5]
    out[7] = half_btf(cospi[56], in[7], -cospi[8], in[4]) = cospi[56] * in[7] + -cospi[8] * in[4]
  • Wie dargestellt, sind die Ausgänge 4 bis 7 Linearkombinationen der Eingänge 4 bis 7.
  • Die Begriffe können wie folgt umgeordnet werden,
    // Ein Butterfly
    out[4] = half_btf(cospi[56], in[4], cospi[8], in[7]) = cospi[56] * in[4] + cospi[8] * in[7]
    out[7] = half_btf(cospi[56], in[7], -cospi[8], in[4]) = cospi[56] * in[7] + -cospi[8] * in[4]
    // Ein weiterer Butterfly
    out[5] = half_btf(cospi[24], in[5], cospi[40], in[6]) = cospi[24] * in[5] + cospi[40] * in[6]
    out[6] = half_btf(cospi[24], in[6], -cospi[40], in[5]) = cospi[24] * in[6] + -cospi[40] * in[5]
    wobei in[4] und in[7] linear kombiniert werden, um die Ausgänge out[4] und out[7] zu erzeugen, unabhängig von allen anderen Eingängen. In ähnlicher Weise werden in[5] und in[6] kombiniert, um out[5] und out[6] zu erzeugen. Einer der Ausgänge eines zusammenhängenden Paares, z. B. out[5] aus dem Paar out[5] und out[6], kann sich auf die Hälfte eines Butterfly-Verarbeitungsflusses beziehen und kann als Halb-Butterfly-Schaltung implementiert werden. FFTs, bei denen sich Paare von Eingängen vermischen, um Paare von Ausgängen zu erzeugen, können als Radix-2-Typ betrachtet werden. Radix-2 kann den algorithmischen Faktor darstellen, mit dem eine größere FFT in kleinere FFTs unterteilt und überwunden wird. Die Offenbarung bezieht sich auch auf Radix-Formate, wie z. B. Radix-4, das im Gegensatz dazu den Bereich jeder Ziffer in der Darstellung einer Zahl ausdrückt.
  • In einer oder mehreren Ausführungsformen können vier hocheffiziente Transformationseinheiten mit unterschiedlichen Durchsätzen arbeiten, die sich auf 64 Pixel pro Takt (PPC), 32 PPC und 16 PPC verteilen. Zum Beispiel kann REC mit 32 PPC arbeiten, während RDO mit 64 PPC für die Vorwärtstransformation und 16 PPC für die Rückwärtstransformation arbeitet. Die unterschiedlichen PPC für die einzelnen Transformationseinheiten können auf die Leistungsanforderungen der einzelnen Einheiten zugeschnitten werden, um den Platzbedarf der Schaltkreise zu verringern und die Effizienz zu erhöhen.
  • Ein RDO-Durchsatzdiskrepanz zwischen der Vorwärtstransformation und der Rückwärtstransformation kann sich daraus ergeben, dass die relativen Kosten der Transformationen für RDO im Frequenzbereich und nicht im räumlichen Bereich berechnet werden. Infolgedessen muss die Rückwärtstransformation möglicherweise nur einen kleinen Teil der im Vorwärtsbereich durchgeführten Transformationen verarbeiten, und die durchschnittliche Versuchslatenz kann stark reduziert werden, während die Vorwärtstransformationsschaltung eine höhere Leistung erbringt. Die PPC-Diskrepanz kann im Vergleich zu einem einheitlichen Durchsatz eine erhebliche Flächen- und Leistungsreduzierung ermöglichen, da die Rückwärtstransformation weniger Pixelblocktypen unterstützen kann, z. B. nur einen Transformationstyp und eine Größe.
  • Alle trigonometrischen Transformationskoeffizienten können im sequenziellen Radix-4-Format (oder einem anderen Zahlenformat) vorcodiert werden. Die Vorcodierung kann es ermöglichen, die Transformationsschaltungen ohne Multiplikatoren zu implementieren. So können die Transformationsschaltungen beispielsweise nur auf Multiadditions- (oder Multi-Addierer-) Operationen von minimaler Breite beruhen, bei denen pro Halb-Butterfly eine Multiaddition verwendet wird. Rechteckige Skalierungsoperationen (z. B. von AV1) sind ebenfalls multiplikatorlos, sodass eine gesamte Transformationsschaltung multiplikatorlos sein kann.
  • Eine Pipeline einer Transformation kann die arithmetische Logik für alle unterstützten Transformationsarten und -größen gemeinsam nutzen. ADST4- und IDT-Transformationen können in HB-Operationen abgebildet werden, wobei die Bitgenauigkeit nachweislich erhalten bleibt. Die HB-Netzwerke können über die Pipeline-Phasen hinweg akkordiert werden, um die Gesamtzahl der HB-Operationen zu minimieren, die für eine bestimmte Transformation erforderlich sind. Die Ressourcen können gemeinsam genutzt werden, um für alle Transformationsarten und -größen den gleichen maximalen Durchsatz zu erzielen. So können beispielsweise vier 4x4-Transformationen im selben Taktzyklus einer 64-PPC-Implementierung einer Pipeline verarbeitet werden (4x4/64=1/4), während eine 32x32-Transformation 16 Zyklen (32x32/64=16) pro Dimension benötigt.
  • Rundungs- und Trunkierungsoperationen für unterschiedliche Codierungsformate wie AV1 und VP9 können in die Hochgeschwindigkeits-Multiadditionsschaltungen integriert werden, ohne dass separate Verarbeitungsschaltungen erforderlich sind, selbst wenn es Unterschiede in der Präzision zwischen den Codecs gibt. So kann eine einheitliche Pipeline bereitgestellt werden, in der mehrere Codecs für ihre jeweiligen Bitgenauigkeiten unterstützt werden können, indem gemeinsame HB, Addierer und Subtrahierer verwendet werden. Aspekte der Offenbarung ermöglichen auch die gemeinsame Nutzung von Ressourcen zwischen der VP9-ADST-Arithmetik mit voller Präzision und der entsprechenden AV1-Arithmetik mit abgeschnittener Präzision. Die Multiadditionsschaltungen können auch variable Rundungspositionen aufweisen, die dazu verwendet werden können, die Ausgabebitbreite bestimmter Transformationsoperationen zu verringern. Zum Beispiel können die HB-Operationen der Identitätstransformation die Bitbreite der HB-Operationen anderer Transformationen überschreiten, ohne entsprechend gerundet zu werden.
  • In mindestens einer Ausführungsform kann die Rückwärtstransformationsschaltung für REC für jede unterstützte Codierformat-Transformationspräzision (z. B. sowohl für AV1 als auch für VP9) bitgenau sein. Andere Transformationsschaltungen, z. B. für RDO oder die Vorwärtstransformationsschaltung für REC, können sich den Codierungsformaten annähern, ohne die Bitgenauigkeit beizubehalten, was Einsparungen bei Fläche, Leistung und Komplexität ermöglicht. Die in jeder Phase benötigte Gesamt-Bitgenauigkeit kann auch dadurch minimiert werden, dass eine Wellenfront von Bitbreiten über alle Codecs, Transformationsarten und/oder - größen, die Ressourcen gemeinsam nutzen, weitergegeben wird, was zu Hardware mit minimaler Bitbreite bei allen Berechnungen führt - was wiederum zu Flächen- und Energieeinsparungen führt.
  • Die Bereichsklemmung kann effizient mit einer konfigurierbaren Schaltung durchgeführt werden, die verschiedene mögliche Bereiche pro Klemminstanz gemeinsam nutzt und unterschiedliche Bittiefen und/oder Codecs berücksichtigt. Um die Latenzzeit zu verringern, können eine oder mehrere Pipelinestufen übersprungen werden. Eine oder mehrere Konfigurationsschaltungen können Stufen konfigurieren und auswählen, um die gemeinsame Nutzung von Ressourcen unter Verwendung von One-Hot-Muxen mit geringem Stromverbrauch und einer geringen Anzahl von Auswahlquellen pro Mux zu ermöglichen. Die gemeinsame Nutzung kann über eine einheitliche Pipeline für mehrere Codierungsformate (z. B. sowohl VP9 als auch AV1), alle Bittiefen, alle Transformationsarten und/oder alle Transformationsgrößen durchgeführt werden. So lassen sich die vorgestellten Ansätze problemlos auf größere Transformationsgrößen skalieren, die in zukünftigen Codecs auftreten können (128x128, 256x256 und darüber hinaus).
  • Eine ungeeignete Reihenfolge der Transformationsgrößen kann zu einer Blockierung der Eingänge führen, auch wenn diese bei den vorgestellten Ansätzen gering ist. In mindestens einer Ausführungsform kann eine Blockierung vermieden werden, indem die Tiefe der Transponierungspuffer in einer Pipeline mit ausreichendem Durchsatz eingestellt wird, während die Transformationen in der Reihenfolge einer primär zunehmenden Größe verarbeitet werden. In mindestens einer Ausführungsform können Transponierungsoperationen mit einem FIFO-basierten Ansatz durchgeführt werden, der eine feinkörnige Abstimmung der Transponierungspuffergrößen zwischen den Transformationen ermöglicht. Die Transponierungspuffergrößen können beispielsweise in Faktoren der maximal unterstützten Transformationsgröße eingestellt werden. Zur Transponierung von Transformationen aller Größen können unterschiedliche spiralförmige Lese- und Schreibmuster verwendet werden, wobei eine Mischung aus Interleaving, Deinterleaving und Barrel-Shifting der Transformationsdaten zum Einsatz kommt. Alle Transformationsgrößen können mit maximalem Durchsatz verarbeitet werden, wobei eine Effizienz gewährleistet wird, die den rechnerischen Abschnitten der Transformation entspricht.
  • Offenbarte Ansätze erlauben es außerdem, eine NxN-Transformation mit weniger als N unabhängigen Speichereinheiten, wie z. B. logischen RAMs, zu implementieren. Diese Reduzierung kann beispielsweise durch Zeitmultiplexing, Schreibfreigabe und überschüssige Bandbreite im Verhältnis zur Transformationsgröße erreicht werden. So können die offenbarten Ansätze auf künftige Codecs mit größeren Transformationsgrößen übertragen werden. In einer oder mehreren Ausführungsformen kann ein alternierendes Schema von Lese-/Schreibmustern verwendet werden, um Pufferplatz zu sparen.
  • Einige Codecs, wie etwa VP9, verfügen nicht über eine Ausfallsicherung für stark quantisierte Streams, was zu einem Überlauf der Transformationsarithmetik während der Decodierung führen kann. Offenbarte Ansätze können eine Absicherung bereitstellen, indem sie Driftfehler, die durch Streams außerhalb des Bereichs verursacht werden, einschränken und begrenzen. In mindestens einer Ausführungsform kann ein hardwarebasierter Fehlermeldemechanismus bereitgestellt werden, der es der Firmware ermöglicht, die Codierung mit weniger aggressiven Parametern schnell zu wiederholen. Die Überlauferkennung kann in einer Transformationseinheit implementiert werden, ohne dass das Erkennungsproblem an nachgelagerte Einheiten weitergegeben wird.
  • Offenbarte Ausführungsformen können eine Vielzahl unterschiedlicher Systeme umfassen, wie etwa Kfz-Systeme (z. B. ein Steuersystem für eine autonome oder halbautonome Maschine, ein Wahrnehmungssystem für eine autonome oder halbautonome Maschine), Systeme, die unter Verwendung eines Roboters implementiert werden, Luftfahrtsysteme, mediale Systeme, Bootssysteme, intelligente Bereichsüberwachungssysteme, Systeme zum Durchführen von Deep-Learning-Operationen, Systeme zum Durchführen von Simulationsoperationen, Systeme, die unter Verwendung einer Edge-Vorrichtung implementiert werden, Systeme, die eine oder mehrere virtuelle Maschinen (VMs) enthalten, Systeme, die mindestens teilweise in einem Rechenzentrum implementiert werden, Systeme, die mindestens teilweise unter Verwendung von Cloud-Computing-Ressourcen implementiert werden, und/oder andere Arten von Systemen. Zum Beispiel werden zwar spezifische Beispiele bereitgestellt, diese Beispiele können jedoch über Implementierungsdetails hinaus verallgemeinert werden. Zum Beispiel können die offenbarten Ansätze zwar mit VP9 und AV1 kompatibel sein, aber es können auch andere Codierungsformate implementiert werden. Darüber hinaus können Aspekte der Offenbarung in andere Arten von Pipelines integriert werden, wie etwa Videocodierer und/oder andere Pipelines, die Transformationen und/oder Transponierungen verwenden, während die Videocodierung in erster Linie beschrieben wird.
  • Bezug nehmend auf 1, veranschaulicht 1 einen beispielhaften Datenfluss 100 einer Quantisierungs- und Transformationseinheit, die sich für die Optimierung der Ratenverzerrung und die Rekonstruktion von Videos eignet, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Es versteht sich, dass diese und andere hierin beschriebene Anordnungen nur als Beispiele aufgeführt werden. Andere Anordnungen und Elemente (z. B. Maschinen, Schnittstellen, Funktionen, Ordnungen, Schaltungen, Gruppierungen von Funktionen usw.) können zusätzlich zu oder anstelle der gezeigten verwendet werden, und einige Elemente können ganz weggelassen werden. Darüber hinaus sind einige der hier beschriebenen Elemente funktionale Entitäten oder Einheiten, die als diskrete oder verteilte Komponenten oder in Verbindung mit anderen Komponenten und in jeder geeigneten Kombination und an jeder geeigneten Position implementiert werden können. Verschiedene in diesem Dokument beschriebene Funktionen, die von Entitäten oder Einheiten durchgeführt werden, können von Hardware, Firmware und/oder Software durchgeführt werden. Beispielsweise können verschiedene Funktionen von einem Prozessor durchgeführt werden, der im Speicher und/oder in einer oder mehreren Schaltungen gespeicherte Anweisungen ausführt.
  • Der Datenfluss 100 beinhaltet eine Vorwärtstransformation 102, eine Quantisierung 104, eine Rückwärtsquantisierung 106 und eine Rückwärtstransformation 108. Der Datenfluss 100 wird am Beispiel von RDO veranschaulicht, doch kann, wie hierin beschrieben, ein ähnlicher Datenfluss für die Rekonstruktion verwendet werden. Wie in 1 angedeutet, kann die Vorwärtstransformation 102 auf eine Sequenz von Kacheln oder Pixelblöcken (z. B. eine Partition eines Superblocks) in Form von Restpixeln oder Residuen einwirken, gefolgt von der Quantisierung 104, dann der Rückwärtsquantisierung 106 und schließlich der Rückwärtstransformation 108, um Restpixel der Pixelblöcke zu erzeugen. Wie hierin beschrieben, durchläuft möglicherweise nicht jeder Pixelblock alle Stufen des Datenflusses 100 (z. B. bei RDO). Wenn der Datenfluss 100 jedoch für die Intra-Frame-Prädiktion bei RDO verwendet wird, können Restpixel aus der Rückwärtstransformation 108 als Feedback für bestimmte Pixelblöcke verwendet werden. Ebenfalls wie gezeigt können bei RDO die Ausgaben der Quantisierung 104 und der Rückwärtsquantisierung 106 verwendet werden, um Bitraten und Verzerrungen von Pixelblöcken zu berechnen, die zur Berechnung von RDO-Metriken verwendet werden. Ähnliche Ausgaben können auch zur Erleichterung der Rekonstruktion verwendet werden.
  • Wie gezeigt, beinhaltet die Vorwärtstransformation 102 eine Vorwärtsspaltentransformation 102A, eine Vorwärtstransponierung 102B und eine Vorwärtszeilentransformation 102C. Die Rückwärtstransformation 108 beinhaltet eine Rückwärtszeilentransformation 108A, eine Rückwärtstransponierung 108B und eine Rückwärtsspaltentransformation 108C. Wenn der Datenfluss 100 zur Rekonstruktion verwendet wird, können ähnliche Komponenten enthalten sein. Diese Komponenten können jedoch mit einer anderen PPC als der in 1 gezeigten operieren (z. B. mit einer niedrigeren maximalen PPC, wie z. B. einer konstanten 32 PPC im gesamten Datenfluss 100). Darüber hinaus zeigt 1 einen Rückwärtstransformationstrichter 114, der in der Quantisierungs- und Transformationseinheit, die für die Rekonstruktion bereitgestellt wird, nicht verwendet werden kann.
  • Pipeline zur gemeinsamen Nutzung von Ressourcen
  • Der Datenfluss 100 kann ohne Blockierung implementiert werden, wobei weder iterative Durchläufe über Pixel noch Iterationen über Rechenressourcen verwendet werden. Somit kann der Durchsatz-PPC gleich dem Eingangs-PPC sein. Das Bereitstellen eines nicht-blockierenden Designs kann die Planung erheblich vereinfachen und ermöglicht es unter anderem, dass sich Inter-Frame- und Intra-Frame-Codierer leichter denselben Datenfluss 100 teilen können. Die Bereitstellung eines solchen nicht-blockierenden Designs mit der Fähigkeit, die Transformations-Hardwareressourcen für eine Vielzahl unterschiedlicher Verarbeitungsparameter, wie Pixelblockdimensionen, Transformationsarten, Videostrom-Bittiefen und/oder mehrere Codierformate, sowie für Inter-Frame- und Intra-Frame-Codierer effizient gemeinsam zu nutzen, ist jedoch eine große Herausforderung.
  • Gemäß einer oder mehrerer Ausführungsformen kann ein Scheduler 116 dem Datenfluss 100 Pixelblöcke mit einer Vielzahl unterschiedlicher potenzieller Abmessungen bereitstellen, die zu verschiedenen Formen und Größen von Restpixelblöcken führen (z. B. quadratische und nicht-quadratische wie Rechtecke unterschiedlicher Größe). Beispiele beinhalten 64x64, 64x32, 32x64, 32x32, 32x16, 16x32, 16x16, 16x8, 8x16, 8x8, 8x4, 4x8 oder 4x4, die alle von dem Datenfluss 100 verarbeitet werden können. In mindestens einer Ausführungsform kann der Scheduler 116 eine beliebige Kombination von Schaltkreisen darstellen, die eine Planungsstrategie implementieren, wie z. B. das allgemeine Bereitstellen von Pixelblöcken für den Datenfluss 100, die von kleineren Transformationsgrößen zu größeren Transformationsgrößen übergehen. Wie hierin beschrieben, können einige Ausnahmen von der Scheduler-Strategie das sparsame Einfügen von 16x16-Transformationen (deren Größe für verschiedene Implementierungen der Pipeline unterschiedlich sein kann) in RDO beinhalten, damit die Rückkopplungstransformationen rechtzeitig Daten zur Verfügung haben, um zukünftige Lücken in der Planung zu vermeiden. Zum Beispiel kann der Scheduler 116 mit Hilfe eines linearen Ganzzahl-Programms implementiert werden.
  • Der Datenfluss 100 kann auch mehrere Transformationsarten unterstützen, wie etwa die diskrete Kosinustransformation (discrete cosine transform - DCT), die Identifizierungstransformation (IDT), die asymmetrische diskrete Sinustransformation (ADST) und/oder Flip-AST. Ferner kann der Datenfluss 100 verschiedene potenzielle Bittiefen des Videostroms unterstützen, wie zum Beispiel und ohne Einschränkung 8, 10 und/oder 12. Der Datenfluss 100 kann auch mehrere Codierungsformate unterstützen, wie zum Beispiel und ohne Einschränkung AOMedia-Video 1 (AV1) und/oder Videoprädiktor 9 (VP9).
  • In mindestens einer Ausführungsform kann jeder Prozess im Datenfluss 100 einem entsprechenden Taktzyklus entsprechen. So kann der Datenfluss 100 neun Taktzyklen für die RDO-Vorwärtsspaltentransformation und neun Taktzyklen für die Zeilentransformation (ohne die Latenzzeit der Transponierungseinheit, die gemäß der Transformationsgröße variieren kann) und neun Taktzyklen für die Rekonstruktion umfassen. Wie dargestellt, führt der Datenfluss 110 die Vorwärtsspaltentransformation 102A, die Vorwärtstransponierung 102B, die Rückwärtszeilentransformation 102C, die Quantisierung 104 und die Rückwärtsquantisierung 106 im selben PPC aus. Im vorliegenden Beispiel beträgt der PPC 64 PPC, was zwar nicht für jeden Schritt schnell genug ist, um bestimmte Pixelblöcke in einem einzigen Zyklus vollständig zu verarbeiten, aber ein kleineres und effizienteres Hardwaredesign ermöglicht. Zum Beispiel kann ein 4x4-Pixelblock nur 16 PPC benötigen, um in einem Zyklus pro Schritt verarbeitet zu werden, aber ein 32x32-Pixelblock kann 1024 PPC benötigen, um in einem Zyklus pro Schritt verarbeitet zu werden. Somit kann die Verarbeitung eines Pixelblocks, wie z. B. eines Blocks, der mehr Pixeln als den PPC des Datenflusses 100 entspricht, auf mehrere Zyklen aufgeteilt werden.
  • Die Vorwärtsspaltentransformation 102A der Vorwärtstransformation 102 kann eine Vorwärtsspaltentransformation an einer oder mehreren Spalten eines Pixelblocks durchführen. Die Verarbeitung kann an einer oder mehreren Spalten des Pixelblocks durchgeführt werden. Zum Beispiel kann die Vorwärtsspaltentransformation 102A an allen vier Spalten eines 4x4-Pixelblocks in einem Zyklus arbeiten. Bei einem 32x32-Pixelblock kann die Vorwärtsspaltentransformation 102A auf einer Menge von Spalten in einem Zyklus operieren, sodass die Gesamtzahl der Elemente kleiner oder gleich der PPC ist. Beispielsweise können zwei Spalten eines 32x32-Pixel-Blocks in das 64-PPC-Beispiel passen. In einer oder mehreren Ausführungsformen ist der Datenfluss 100 so konfiguriert, dass er auf ebenso vielen Spalten und/oder Elementen eines Pixelblocks in einem Zyklus arbeitet, die in die PPC-Konfiguration passen. Ferner können Abschnitte eines Pixelblocks seriell durch die Schritte des Datenflusses 100 verarbeitet werden (innerhalb der Schritte kann eine parallele Verarbeitung verwendet werden). Zum Beispiel kann nach den ersten beiden Spalten des 32x32-Pixelblocks die Vorwärtsspaltentransformation 102A an den nächsten beiden Spalten des 32x32-Pixelblocks arbeiten, während die Vorwärtstransponierung 102B an den vorherigen beiden Spalten des 32x32-Pixelblocks arbeitet, wobei 16 Zyklen für einen Schritt verwendet werden, um den gesamten Pixelblock mit 64 PPC zu verarbeiten.
  • Die Vorwärtstransponierung 102B der Vorwärtstransformation 102 kann eine Vorwärtstransponierung an einer oder mehreren Spalten aus der Vorwärtsspaltentransformation 102A durchführen. Zum Beispiel kann die Vorwärtstransponierung 102B eine Operation der Matrixtransponierung verwenden, um die Spalten in eine Reihe zu verschieben. Die Vorwärtszeilentransformation 102C kann dann eine Vorwärtstransformation für die Zeilen durchführen. Die Rückwärtstransformation 108 kann ähnlich wie die Vorwärtstransformation 102 arbeiten, aber möglicherweise mit anderen PPC (z. B. für RDO, wie hierin beschrieben).
  • Wie hierin beschrieben, kann der Datenfluss 100 eine Vielzahl unterschiedlicher Verarbeitungsparameter unterstützen, wie z. B. Pixelblockabmessungen, Transformationsarten, Bittiefen des Videostroms und/oder mehrere Codierungsformate. In mindestens einer Ausführungsform können ein oder mehrere Signale für einen Pixelblock bereitgestellt werden, um den Datenfluss 100 für die Verarbeitung des Pixelblocks zu konfigurieren. Insbesondere kann der Datenfluss 100 jede dieser verschiedenen Kombinationen von Parametern unter Verwendung gemeinsam genutzter Hardware unterstützen, und es können Signale bereitgestellt werden, um die Hardware zu konfigurieren, wie etwa die Angabe einer oder mehrerer Pixelblockdimensionen, des Transformationstyps, der Bittiefe, des Eingangsformats (z. B. ob ein Eingang eine Zeile oder eine Spalte ist), der Pixelblockform und des Codierungsformats. Zum Beispiel kann dasselbe Netzwerk für die Verarbeitung von Pixelblöcken gemäß einer beliebigen Kombination dieser verschiedenen Konfigurationen verwendet werden.
  • Nun Bezug nehmend auf 2, veranschaulicht 2 ein Beispiel für einen Schaltkreis 200 zur gemeinsamen Nutzung von Transformations-Hardwareressourcen 204, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Die Schaltung 200 beinhaltet einen oder mehrere Konfigurationsschaltkreise 202, die betreibbar sind, um die Transformations-Hardwareressourcen 204 gemäß einem oder mehreren Verarbeitungsparametern 206 zu konfigurieren. Wie gezeigt, beinhalten die Transformations-Hardwareressourcen 204 mehrere Phasen, wie eine Phase 208A, eine Phase 208B, eine Phase 208C, eine Phase 208D, eine Phase 208E, eine Phase 208F, eine Phase 208G, eine Phase 208H und eine Phase 208I (die gemeinsam als „Phasen 208“ oder einzeln als „Phase 208“ bezeichnet werden können). In mindestens einer Ausführungsform können für jede Transformation entsprechende Transformations-Hardwareressourcen 204 bereitgestellt werden. Zum Beispiel können Transformations-Hardwareressourcen 204 für die Vorwärtstransformation 102 und die Rückwärtstransformation 108 sowohl für die RDO als auch für die Rekonstruktion bereitgestellt werden, obwohl nur ein Satz von Phasen 208 gezeigt wird (die jeweils durch die Konfigurationsschaltungen 202 konfiguriert werden können).
  • Transformationen, die dazu dienen, eine endliche Sequenz von Datenpunkten durch eine Summe von Wellenfunktionen auszudrücken, können als eine Sequenz von Stufen ausgedrückt werden. Zum Beispiel wird die Spezifikation für DCT durch zehn Berechnungsstufen ausgedrückt. In mindestens einer Ausführungsform kann jede Stufe als eine oder mehrere Half-Butterfly-Operationen und Additions- oder Subtraktionsoperationen mit zwei (oder mehr) Operanden implementiert werden, auch wenn die Spezifikation für die Transformation eine solche Darstellung nicht bereitstellt. Insbesondere kann jede Half-Butterfly-Operation zwei Multiplikatoren und eine Addition beinhalten, die in Butterfly-DCT (a*b + c*d) zu finden sind. In mindestens einer Ausführungsform können die Half-Butterflies in einer Multiadditions-Operation (die zwei Multiplikatoren und einen Addierer umfasst), wie hierin beschrieben, durch Vorcodierung der trigonometrischen Multiplikanden implementiert werden.
  • In mindestens einer Ausführungsform kann die Konfigurationsschaltung 202 konfigurieren, welche Phasen 208 welche Stufen und/oder Abschnitte einer Stufe gemäß den Verarbeitungsparametern 206 verarbeiten. Für Transformationen, die nicht jede Phase 208 benötigen, kann die Schaltung 202 die Transformations-Hardwareressourcen 204 so konfigurieren, dass eine oder mehrere der Phasen 208 umgangen und/oder umgangen werden. Durch Zuordnung von Transformationsstufen zu einer oder mehreren entsprechenden Phasen der Transformations-Hardwareressourcen 204 basierend auf den Verarbeitungsparametern 206 kann die Schaltung 202 bestimmen, welche Abschnitte der Transformations-Hardwareressourcen 204 entsprechende Sequenzen von Berechnungen an Pixelblöcken durchführen, wodurch eine effiziente gemeinsame Nutzung der Ressourcen ermöglicht wird.
  • In mindestens einer Ausführungsform kann jede Phase ein Netzwerk von Half-Butterflies beinhalten, die parallel betrieben werden und dazu konfiguriert sind, mindestens einen Abschnitt der Transformationskomposition an Koeffizienten eines Pixelblocks durchzuführen (z. B. Ergebnisse zu erzielen, die einer Matrixmultiplikation unter Verwendung einer Komposition von Funktionen entsprechen). Eine Phase kann mindestens einen Abschnitt der Half-Butterfly-Operationen einer Stufe unter Verwendung einer Multiadditionsschaltung und ohne Verwendung von Multiplikatoren implementieren. Eine Multiadditionsschaltung kann einen binären Addierer am Ende der Half-Butterflies beinhalten, der die Bits vom niedrigstwertigen Bit zum höchstwertigen Bit propagiert, wenn ein Zahlenpaar addiert wird, um die Ausgabe einer Multiadditionsoperation zu erzeugen. Es kann jeder geeignete Addierer verwendet werden, wie z. B. ein Ripple-Addierer oder ein Look-Ahead-Carry-Addierer. Wie hierin beschrieben, kann für jede Multiadditionsoperation (in Ausführungsformen, die Multiaddierer verwenden) nur ein einziger Binäraddierer erforderlich sein, der nach der Rekombination der Mehrfachterme zu zwei Operanden auftreten kann. Ferner können die Half-Butterflies der Phasen 208 unabhängig davon sein, wo sie im Datenfluss 100 platziert sind, was eine große Flexibilität bei der Reihenfolge und/oder Sequenz ermöglicht, die die Konfigurationsschaltung 202 einer bestimmten Phase 208 bei der Verarbeitung einer Transformation zuweist.
  • In mindestens einer Ausführungsform können die Ressourcen für denselben maximalen Durchsatz für alle unterstützten Transformationsarten und - größen, alle Bittiefen und alle Codierungsformate gemeinsam genutzt werden. Zum Beispiel können vier 4x4-Transformationen im selben Taktzyklus der 64PPC-Pipeline verarbeitet werden (4x4/64=1/4), während für eine 32x32-Transformation 16 Zyklen (32x32/64=16) pro Dimension erforderlich sein können. In einer Transformationsinstanz kann die Anzahl der instanziierten Half-Butterflies 264 betragen, wobei 4224 Multiadditionen durchgeführt werden (z. B. unter Verwendung von 264 Multiadditionsschaltungen, die beim Durchlaufen jeder Spalte oder Zeile durch die Pipeline wiederholt werden) für eine vollständige 2D-DCT32 32x32 bei 64PPC. Dies ist für einen 64PPC-Durchsatz minimal, da es mindestens einen Transformationstyp gibt, nämlich DCT32x32, für den so viele Half-Butterflies erforderlich sein können.
  • Die Konfigurationsschaltungen 202 können sich im Allgemeinen auf eine beliebige Kombination von Schaltkreisen beziehen, die in der Lage sind, den Datenfluss 100 und/oder die Phasen 208 zu konfigurieren (z. B. einschließlich zentralisierter und/oder verteilter Schaltkreise im gesamten System, die mit anderen Schaltkreisen integriert sein können oder nicht). In mindestens einer Ausführungsform können Daten, die zur Umsetzung eines oder mehrerer Aspekte der Konfiguration verwendet werden, zusammen mit den Daten vom oberen Ende der Pipeline übertragen werden (z. B. als In-Band-Pakete). Zum Beispiel kann die Konfiguration vor den Phasen 208 ausgegeben und in jeder Phase 208 neu registriert werden. Dieser Ansatz kann den Betrieb von zwei verschiedenen Phasen 208 mit verschiedenen Transformationstypen vereinfachen. Eine lokale Kopie der Konfiguration für jede Phase 208 kann auch die Last reduzieren, die die Konfigurationsschaltungen 202 betreiben müssen, was wiederum die Einhaltung von Zeitvorgaben erleichtert. Zum Beispiel können Transformationsgröße und -typ zusammen mit den Koeffizientendaten über die Pipeline übermittelt werden. Dies kann zwei oder mehr verschiedenen Transformationstypen ermöglichen, die gleichzeitig durch die Pipeline fließen. In mindestens einer Ausführungsform können ein oder mehrere Konfigurationsaspekte von einer zentralen Konfigurationseinheit übertragen werden. Zum Beispiel kann die Auswahl des Codecs oder des Codierungsformats (z. B. AV1 oder VP9) direkt an den Schaltkreis für die Transponierung gesendet werden, ohne den Daten durch die Leitung zu folgen. Dieser Ansatz kann verwendet werden, um zu vermeiden, dass die Konfigurationsdaten über die Puffer (z. B. FIFO-Puffer) in der Transponierung geleitet werden.
  • Nun Bezug nehmend auf 3, veranschaulicht 3 ein Beispiel einer Tabelle 300, die widerspiegelt, wie Transformations-Hardwareressourcen auf Phasen für eine Transformation zugeordnet werden können, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. In mindestens einer Ausführungsform kann die Konfigurationsschaltung 202 dazu konfiguriert sein, die Transformations-Hardwareressourcen 204 den Phasen 208 gemäß der Tabelle 300 zuzuordnen. Beispielhaft und ohne Einschränkung gilt die Tabelle 300 für eine 1-D-DCT-Transformation. Ähnliche Zuordnungen können jedoch auch für andere Transformationen bereitgestellt werden.
  • In 3 kann sich N auf die Dimensionen des Pixelblocks beziehen, der mit den Transformations-Hardwareressourcen 204 verarbeitet werden soll. Somit kann die Spalte 302 Zuordnungsinformationen für einen 64x64-Pixelblock enthalten. Die Spalte 304 stellt verschiedene Aspekte der Phasenaufschlüsselungsinformationen bereit, die für verschiedene Pixelblockabmessungen bereitgestellt werden. Zum Beispiel beinhalten die Phasenaufschlüsselungsinformationen für eine Phase und Pixelblockdimensionen eine Stufe, die auf die Phase abgebildet wird. Somit wird die Stufe 2 der 1-D-DCT der Phase 208A für einen 64x64-Pixelblock zugeordnet. Bei anderen Pixelblockabmessungen kann die Phase 208A als Passthrough verwendet werden, wie in 3 angegeben. Ferner kann bei einigen Phasen eine Stufe auf mehrere Phasen 208 aufgeteilt werden. Zum Beispiel kann die Stufe 4 über die Phasen 208F und 208G für eine 1-D DCT 16X16 bereitgestellt werden, wie in Spalte 306 angegeben.
  • Die Phasenaufschlüsselungsinformationen für eine Phase und Pixelblockdimensionen beinhalten auch r/c berechnet, was die Anzahl der von der Phase 208 berechneten Zeilen oder Spalten angibt. Zum Beispiel werden alle Phasen 208 für einen 64x64-Pixelblock in der Spalte 302 als Verarbeitung einer Zeile oder Spalte angegeben. In den Phasenaufschlüsselungsinformationen (±, hb) pro r/c gibt ± die Anzahl der Addierer pro Phase und hb die Anzahl der mit Half-Butterflies implementierten Multiplikatoren pro Phase für jede Zeile oder Spalte an. Somit kann die Phase 208D für einen 64x64-Pixelblock 44 Addierer/Subtrahierer (z. B. mit zwei Argumenten) und 10 Half-Butterflies (z. B. je zwei Multiplikatoren und einen Addierer, oder Multiaddierer) beinhalten, wie in Spalte 302 angegeben. In ähnlicher Weise gibt ± in der Phasenaufschlüsselungsinformation (±, hb) all r/c Gesamtzahl der Addierer/Subtrahierer pro Phase und hb die Gesamtzahl der mit Half-Butterflies implementierten Multiplikatoren pro Phase für alle Zeilen oder Spalten an. Alle Additionen innerhalb eines Half-Butterflies können Additionen sein, wobei jede Negation durch negative konstante Koeffizienten behandelt wird. In mindestens einer Ausführungsform wird die Bindung zwischen Addition und Subtraktion nicht dynamisch durchgeführt. Additionsoperationen können nur mit anderen Additionsoperationen und Subtraktionsoperationen mit anderen Subtraktionsoperationen gemeinsam genutzt werden, ohne dass eine spontane Auswahl zwischen Addition und Subtraktion für eine Ressource erfolgt. Dieser Ansatz kann zu kleinerer, schnellerer und energieeffizienterer Hardware führen, da der Addierer und der Subtrahierer nur für eine Art von Operation zuständig sind. Dies kann auch erreicht werden, ohne dass zusätzliche Addierer- oder Subtrahierer-Ressourcen aufgrund einer möglichen Diskrepanz in einer bestimmten Phase 208 erforderlich sind.
  • Spalte 308 zeigt die maximale Anzahl von Addierern und Multiplikatoren, die für jede Phase benötigt werden, und Spalte 310 zeigt das Delta zwischen den Maximalwerten im Verhältnis zu N=64 für DCT64. Wie angegeben, kann die Phase 208F eine begrenzte Anzahl zusätzlicher Multiplikatoren erfordern, was auf eine hocheffiziente gemeinsame Nutzung von Ressourcen hinweist. Während Zuordnungen für verschiedene Dimensionen gezeigt werden, müssen nicht alle Transformationsgrößen im Datenfluss 100 implementiert werden. Zum Beispiel kann in mindestens einer Ausführungsform N=64 nicht verwendet werden, wobei die maximale Transformationsgröße N=32 ist. In einem solchen Beispiel wäre das Delta zwischen den Maximalwerten relativ zu N=32 gleich 0.
  • In mindestens einer Ausführungsform kann die Konfigurationsschaltungen 202 die Eingänge und Ausgänge der Phasen 208 für die Verarbeitung einer bestimmten Transformation unter Verwendung von Muxen zwischen Eingängen und Ausgängen der Half-Butterflies konfigurieren. Die Phasenaufschlüsselungsinformation beinhaltet auch die Spalte 312, die die Anzahl der Mux-Eingänge angibt, die für die Konfigurationsschaltungen 202 benötigt werden, um die Phase zu implementieren. Wie bereits erwähnt, ist die Anzahl der Mux-Eingänge minimal, was die Anzahl der Transformationen angibt, die ein HB im schlimmsten Fall ausführt. Andere Half-Butterflies können jedoch weniger Muxing erfordern, da sie weniger Transformationen aufweisen. Für verschiedene Phasen sind keine Multiplexer erforderlich, was den Vorteil hat, dass den Addierern Additionsterme bereitgestellt werden, die nicht gemuxed sind.
  • In mindestens einer Ausführungsform können Muxes, die von den Konfigurationsschaltungen 202 zur Konfiguration der Transformations-Hardwareressourcen 204 verwendet werden, unter Verwendung von Hot-Selects implementiert werden, wodurch ein stromsparendes Design bereitgestellt wird. Das gesamte Muxing kann unter Verwendung direkter UND-ODER-Ausdrücke für Hochgeschwindigkeits-Muxing mit einer Hot-Select-Funktion implementiert werden. Zusätzlich zur Schnelligkeit können solche Muxes 0 als Standardwert erzeugen, wenn kein Fall erfüllt ist, und 0 kann die Annihilator-Operation für die Multiplikation und der Identitätsoperator für die Addition sein, was sie zu einem idealen Standardwert für eine solche Implementierung macht. Eine solche Mux-Struktur kann auch eine geringe Abhängigkeit davon haben, dass die Auswahlen eine natürliche Zweierpotenz ergeben (2x1, 4x1 usw.) und kann auch dann effizient sein, wenn die Auswahlen keine natürliche Zweierpotenz sind.
  • Transformations-Hardwareressource-Sharing für ADST
  • Die Codec-Standards AV1 und VP9 spezifizieren ADST4 und IDT nicht in Form von Half-Butterflies, sodass ihre Hardware nicht mit anderen Transformationen gemeinsam genutzt werden kann. Offenbarte Ansätze stellen eine Zuordnung von ADST4 und IDT zu Half-Butterflies oder Additions-/Subtraktionsoperationen mit zwei Operanden unter Beibehaltung der Bitgenauigkeit bereit, sodass diese Transformationen die Hardware direkt mit anderen Transformationen teilen können, wodurch ein separater Schaltungspfad nur für diese Transformationen vermieden wird.
  • Bei der Zuordnung von ADST ergeben sich verschiedene Herausforderungen, von denen Beispiele im Zusammenhang mit ADST4 beschrieben werden. Ein Problem ist, dass ADST4 mehr als vier Ausgänge auf einigen Berechnungsstufen hat. Andere Transformationen DCT-N und ADST-N der Größe N haben genau N Ausgänge. Dies macht die Verwaltung von Flops kompliziert und die gemeinsame Nutzung von Hardware schwieriger. Ein weiteres Problem ist, dass alle Half-Butterfly-Operationen Runden und Trunkieren können, um die Bitbreite der Ergebnisse in Grenzen zu halten. Eine ADST4-Transformation behält jedoch die volle Breite ihrer Multiplikationsergebnisse bis zur letzten Ausgangsstufe bei (ähnlich wie VP9-ADST-Transformationen anderer Größen, was bei AV1 nicht der Fall ist). Außerdem können Additions- und Subtraktionsoperationen in ADST4 drei Operanden aufweisen. Alle anderen Transformationen können mit zwei Operanden addieren und subtrahieren, und die Bitbreite der Addierer ist aufgrund des vorgenannten Problems viel größer. Darüber hinaus besteht der Unterschied zwischen Vorwärts- und Rückwärtstransformationen in der Regel in einer Umkehrung der Stufen. Bei ADST4 ist dies nicht der Fall, und in der Anfangsphase ist der Multiplikator für beide Stufen sehr stark, sodass für beide Stufen unterschiedliche Designs erforderlich sind. Zudem ist die Zeilenrate aufgrund der hohen Multiplikatorkosten, die nicht mit der Hardware für andere Transformationen geteilt werden können, schwer zu erreichen.
  • Um verschiedene Probleme im Zusammenhang mit ADST zu vermeiden, können herkömmliche Begriffe von ADST neu formuliert und umstrukturiert werden, sodass sie in ähnlicher Weise wie andere Transformationen ausgedrückt werden können und somit eine gemeinsame Nutzung von Ressourcen ermöglichen. Zum Beispiel kann die Vorwärts-ADST4 (FADST4) in Form von Half-Butterflies und zwei Operanden-AddierernZ-Subtrahierern ausgedrückt werden. Tabelle 1 verdeutlicht die Schritte beim Refactoring von FADST4:
    Schritt Pseudocode zur Darstellung von vp9_fadst4 in transform_vp9.cpp in libav1
    1 // Ki definieren = Runden[ (2/3)*sqrt(2)*sin( i*pi/9)], 0 < = ich < = 4 wobei Ki
    < = cos(pi/18) < 1.0
    // Stufe 0
    // Stufe 1
    x0 = Eingang[0]
    x1 = Eingang[1]
    x2 = Eingang[2]
    x3 = Eingang[3]
    // Stufe 2
    s0 = K1*x0
    s1 = K4*x0
    s2 = K2*x1
    s3 = K 1 *x 1
    s4 = K3*x2
    s5 = K4*x3
    s6 = K2*x3
    s7 = x0 + x1 - x3;
    // Stufe 3
    t0 = s0 + s2 + s5
    t1 = K3*s7
    t2 = s1 - s3 + s6
    t3 = s4
    // Stufe 4
    y0 = t0 + t3
    y1 = t1
    y2 = t2 - t3
    y3 = t2 - t0 + t3
    2 // Jetzt Erweitern von t0,...,t3 und y0,...,y3 in Bezug auf x0,...,x3
    // Stufe 3
    t0 = s0 + s2 + s5 = K1 *x0 + K2*x1 + K4*x3
    t1 = K3*s7 = K3*x0 + K3*x1 - K3*x3
    t2 = s1 - s3 + s6 = K4*x0 - K1*x1 + K2*x3
    t3 = s4 = K3*x2
    // Stufe 4
    y0 = t0 + t3 = K1*x0 + K2*x1 + K4*x3 + K3*x2
    y1 = t1 = K3*x0 + K3*x1 - K3*x3
    y2 = t2 - t3 = K4*x0 - K1*x1 + K2*x3 - K3*x2
    y3 = t2 - t0 + t3 = K4*x0 - K1*x1 + K2*x3 - K1*x0 - K2*x1 - K4*x3 + K3*x2
    3 // Reorganisieren der Terme und Erinnern, dass K0=0
    y0 = (K1*x0 + K2*x1) + (K3*x2 + K4*x3)
    y1 = (K3*x0 + K3*x1) + (K0*x2 - K3*x3)
    y2 = (K4*x0 - K1 *x1) + (-K3*x2 + K2*x3)
    y3 = ((K4-K1)*x0 + (-K2-K1)*x1) + (K3*x2 + (K2-K4)*x3)
    4 // Beachten, dass K1 + K2 == K4, um y3 zu vereinfachen, auch im angenäherten Fixpunkt
    // Anordnen, sodass die Hälfte der Operationen Addierer, die andere Hälfte Subtrahierer sind, wie bei anderen Transformationen
    y0 = (K1*x0 + K2*x1) + (K3*x2 + K4*x3)
    y1 = (K3*x0 + K3*x1) - (K0*x2 + K3*x3)
    y2 = (K4*x0 - K1*x1) - (K3*x2 - K2*x3)
    y3 = (K2*x0 - K4*x1) + (K3*x2 - K1*x3)
  • Die obige Tabelle drückt FADST4 in Form von Half-Butterflies und zwei Operanden-Addierern aus. Der ursprüngliche VP9/AV1-Code führt die Berechnungen mit voller Präzision durch und rundet und schneidet erst nach der letzten Addition ab. Eine genaue Annäherung kann jedoch ausreichen, indem die Runden durchgeführt, die Half-Butterflies abgeschnitten und die Addierer am Ende geklemmt werden, da der Unterschied in der Präzision gering sein kann.
  • Tabelle 2 zeigt eine FADST-Implementierung mit Half-Butterflies und zwei Operanden-Addierern:
    // Stufe 0
    // Stufe 1
    Stufe++;
    // triviale Identitätspermutation - nichts erledigt
    x0 = Eingang[0];
    x1 = Eingang[1];
    x2 = Eingang[2];
    x3 = Eingang[3];
    // Stufe 2
    Stufe++;
    // Implementieren von 8 Half-Butterflies auf x0 und x1, Beibehalten von x2 und x3 für Half-Butterflies der nächsten Stufe
    // Im Gegensatz zu anderen Transformationen hat diese Stufe mehr Ausgänge als ihre 1-d-Transformationsgröße: 8 > 4=N.
    // Die Half-Butterflies runden und trunkieren, da die Bitgenauigkeit bei der RECON-Vorwärtstransformation nicht entscheidend ist.
    v0 = half_btf(sinpi[1], x0, sinpi[2], x1, sin_bit);
    v1 = half_btf(sinpi[3], x2, sinpi[4], x3, sin_bit);
    v2 = half_btf(sinpi[3], x0, sinpi[3], x1, sin_bit);
    v3 = ha!f_btf(sinpi[0], x2, sinpi[3], x3, sin_bit);
    v4 = half_btf(sinpi[4], x0,-sinpi[1], x1, sin_bit);
    v5 = half_btf(sinpi[3], x2,-sinpi[2], x3, sin_bit);
    v6 = half_btf(sinpi[2], x0,-sinpi[4], x1, sin_bit);
    v7 = half_btf(sinpi[3], x2,-sinpi[1], x3, sin_bit);
    // Stufe 3
    Stufe++;
    // Eine reguläre Addiererstufe mit geklammerten Werten, kein Runden und Abschneiden, da bereits in Stufe 2 geschehen
    // Hier stimmt die Anzahl der Additionen mit der Anzahl der Subtraktionen überein. Klemmgröße wird durch Codec bestimmt.
    Ausgang[0] = Klemm_Wert(v0 + v1, Codec);
    Ausgang[1] = Klemm_Wert(v2 - v3, Codec);
    Ausgang[2] = Klemm_Wert(v4 - v5, Codec);
    Ausgang[3] = Klemm_Wert(v6 + v7, Codec);
  • In mindestens einer Ausführungsform können alle acht Half-Butterflies in einer Stufe untergebracht werden, im Gegensatz zu zwei Half-Butterflies in zwei Stufen, um die Zahl der zusätzlichen Ausgänge so schnell wie möglich zu reduzieren, da die zweite Stufe acht statt vier Ausgänge hat. Dies kann auch die Anzahl der insgesamt benötigten zusätzlichen Addierer reduzieren.
  • Ausdrücken der Rückwärts-ADST4 in Form von Half-Butterflies und zwei Operanden-Addierern/-Subtrahierern kann komplizierter sein, um die Bitgenauigkeit bei der Rekonstruktion zu erreichen. Tabelle 3 verdeutlicht die Schritte beim Refactoring von IADST4:
    Schritt Pseudocode zur Darstellung von vp9_iadst4 in transform_vp9.cpp in libavl
    1 // Ki definieren = Runden[(2/3)*sqrt(2)*sin(i*pi/9)], 0 < = ich < = 4 wobei Ki < = cos(pi/18) < 1.0
    // Stufe 0
    // Stufe 1
    x0 = Eingang[0]
    x1 = Eingang[1]
    x2 = Eingang[2]
    x3 = Eingang[3]
    // Stufe 2
    s0 = K1*x0
    s1 = K2*x0
    s2 = K3*x1
    s3 = K4*x2
    s4 = K 1 *x2
    s5 = K2*x3
    s6 = K4*x3
    s7 = x0 - x2 + x3
    // Stufe 3
    t0 = s0 + s3 + s5
    t1 = s1 - s4 - s6
    t2 = K3*s7
    t3 = s2
    // Stufe 4 - Ignorieren der Klemm- und Rundungsoperation
    y0 = t0 + t3
    y1 = t1 + t3
    y2 = t2
    y3 = t0 + t1 - t3
    2 // Jetzt Erweitern von t0,...,t3 und y0,...,y3 in Bezug auf x0,...,x3
    // Stufe 3
    t0 = s0 + s3 + s5 = K1*x0 + K4*x2 + K2*x3
    t1 = s1 - s4 - s6 = K2*x0 - K1*x2 - K4*x3
    t2 = K3*s7 = K3*x0 - K3*x2 + K3*x3
    t3 = s2 = K3*x1
    // Stufe 4 - Ignorieren der Klemm- und Rundungsoperation
    y0 = t0 + t3 = K1*x0 + K4*x2 + K2*x3 + K3*x1
    y1 = t1 + t3 = K2*x0 - K1*x2 - K4*x3 + K3*x1
    y2 = t2 = K3*x0 - K3*x2 + K3*x3
    y3 = t0 + t1 - t3 = K1*x0 + K4*x2 + K2*x3 + K2*x0 - K1*x2 - K4*x3 - K3*x1
    3 // Reorganisieren der Terme und Erinnern, dass K0=0
    y0 = (K1*x0 + K4*x2) + (K3*x1 + K2*x3)
    y1 = (K2*x0 - K1*x2) + (K3*x1 - K4*x3)
    y2 = (K3*x0 - K3*x2) + (K0*x1 + K3*x3)
    y3 = ((K1 +K2)*x0 + (K4-K1)*x2) + (-K3*x1 + (K2-K4)*x3)
    4 // Beachten, dass K1 + K2 == K4, um y3 zu vereinfachen, auch im angenäherten Fixpunkt.
    // Bewahren aller als Ergänzungen, dies sind breite Addierer, die Klemmen, Runden & Trunkieren. Nicht leicht geteilt.
    y0 = (K1 *x0 + K4*x2) + (K3*x1 + K2*x3)
    y1 = (K2*x0 - K1*x2) + (K3*x1 - K4*x3)
    y2 = (K3*x0 - K3*x2) + (K0*x1 + K3*x3)
    y3 = (K4*x0 + K2*x2) + (-K3*x1 - K1*x3)
  • Tabelle 4 zeigt eine IADST-Implementierung mit Half-Butterflies und zwei Operanden-Addierern:
    // Stufe 0
    // Stufe 1
    Stufe++;
    // Identitätspermutation - nichts erledigt
    x0 = Eingang[0];
    x1 = Eingang[1];
    x2 = Eingang[2];
    x3 = Eingang[3];
    // Stufe 2
    Stufe++;
    // Implementieren von 8 Half-Butterflies auf x0 und x1, Beibehalten von x2 und x3 für Half-Butterflies der nächsten Stufe
    // Im Gegensatz zu anderen Transformationen hat diese Stufe mehr Ausgänge als ihre
    1-d-Transformationsgröße: 8 > 4=N.
    // Die Half-Butterflies runden und trunkieren, da die Bitgenauigkeit bei der RECON-Vorwärtstransformation nicht entscheidend ist.
    v0 = half_btf(sinpi[1], x0, sinpi[2], x1, sin_bit);
    v1 = half_btf(sinpi[3], x2, sinpi[4], x3, sin_bit);
    v2 = half_btf(sinpi[3], x0, sinpi[3], x1, sin_bit);
    v3 = half_btf(sinpi[0], x2, sinpi[3], x3, sin_bit);
    v4 = half_btf(sinpi[4], x0,-sinpi[1], x1, sin_bit);
    v5 = half_btf(sinpi[3], x2,-sinpi[2], x3, sin_bit);
    v6 = half_btf(sinpi[2], x0,-sinpi[4], x1, sin_bit);
    v7 = half_btf(sinpi[3], x2,-sinpi[1], x3, sin_bit);
    // Stufe 3
    Stufe++;
    // Eine reguläre Addiererstufe mit geklammerten Werten, kein Runden und Abschneiden, da bereits in Stufe 2 geschehen
    // Hier stimmt die Anzahl der Additionen mit der Anzahl der Subtraktionen überein. Klemmgröße wird durch Codec bestimmt.
    Ausgang[0] = Klemm_Wert(v0 + v1, Codec);
    Ausgang[1] = Klemm_Wert(v2 - v3, Codec);
    Ausgang[2] = Klemm_Wert(v4 - v5, Codec);
    Ausgang[3] = Klemm_Wert(v6 + v7, Codec);
  • Die Half-Butterflies mit voller Präzision können mit den Half-Butterfly-Operationen geteilt werden, die ebenfalls Runden und Trunkieren. Vor dem Trunkieren und Runden kann der Ausgang mit voller Präzision berechnet werden. Eine spezielle Version des Half-Butterflies zum Trunkieren und Runden kann so implementiert werden, dass der Ausgang mit voller Präzision als zweiter Ausgang erzeugt wird. Darüber hinaus kann, ebenfalls zu geringen Kosten, ein einzelnes Bit zur Auswahl des Rundungsmodus am Eingang bereitgestellt werden. Mit diesen zusätzlichen Funktionen können die Half-Butterflies von IADST4 mit denen anderer Transformationen gemeinsam genutzt werden.
  • Vorberechnete trigonometrische Koeffizienten
  • Das Implementieren einer Multiplikation unter Verwendung eines Multiplikatorsist in der Regel hardwareintensiv. Offenbarte Ansätze ermöglichen eine multiplikatorlose Implementierung des Datenflusses 100. Zum Beispiel können keine Multiplikatoren benötigt werden, um Transformationen sowohl für rechteckige Skalierung als auch für Half-Butterflies durchzuführen. Bei der rechteckigen Skalierung kann die Operation auf eine Multiaddition reduziert werden. Half-Butterflies können auch als Multiadditionsoperationen implementiert werden (z. B. eine pro Half-Butterfly) und können zwei Multiplikationen und eine Addition emulieren, ohne Multiplikatoren zu verwenden. Bei den Half-Butterflies ist für die Anwendung einer bestimmten Transformation üblicherweise ein reeller Multiplikator erforderlich, um die trigonometrischen Koeffizienten für den Multiplikanden in Radix-4, Radix-8 oder einem anderen Zahlenformat zu codieren und die Additionskoeffizienten für die Transformation zu tabellieren. Neben anderen Problemen erfordert dieses Verfahren langsame und große XOR-Gatter.
  • Wie in 1 angedeutet und gemäß den Aspekten der Offenbarung können vorcodierte trigonometrische Koeffizienten 120 der Transformationen bereitgestellt werden, zum Beispiel im Radix-4-Format. Während das Radix-4-Format beschrieben wird, können auch andere Transformationsformate geeignet sein, wie z. B. Radix-8- oder Booth-Formate. Zum Beispiel kann ein Radix-4-Format mit Vorzeichen die Zahlen {0, 1, 2, 3} als {-2, -1, 0, 1, 2} darstellen. Anstatt Multiplikationsoperationen in vollem Umfang innerhalb des Half-Butterflies durchzuführen, können zur Erzeugung der Multiplikationsterme der Half-Butterfly-Operation die vorcodierten trigonometrischen Koeffizienten 120 (z. B. vorcodierte vorzeichenbehaftete trigonometrische Radix-4-Koeffizienten 120) verwendet werden, sodass nur eine Hochgeschwindigkeitsaddition erforderlich ist, um die Operation (z. B. in einem einzigen Zyklus) durchzuführen. Daher ist für die Half-Butterfly-Operation nur ein einziger Binäraddierer erforderlich, um den Ausgang zu erzeugen. Darüber hinaus kann die serielle Codierung mit Radix vier im Gegensatz zur parallelen Codierung verwendet werden, um bei der Operation 1 Bit in der Breite einzusparen. Insbesondere kann 1 Bit in der Breite verloren gehen, weil Cosinus/Sinus eine gerade Anzahl von Bits in AV1/VP9 aufweisen. In anderen Fällen ist es möglich, stattdessen einen Additionsterm wegzulassen (z. B. unter Beibehaltung der seriellen Codierung).
  • In mindestens einer Ausführungsform können die vorcodierten trigonometrischen Koeffizienten 120 auf dem Chip gespeichert werden, wobei ein beliebiger geeigneter Ansatz verwendet werden kann (Berechnung auf dem Chip oder extern), und der geeignete Satz von Koeffizienten für eine Transformation kann von der Konfigurationsschaltung 202 gemäß den Verarbeitungsparametern 206 ausgewählt werden. Beispielhaft und ohne Einschränkung können für AV1- und VP9-Implementierungen 12-Bit-AV1- und 14-Bit-VP9-Kosinus- und Sinustabellen im Voraus in Radix-4 umgewandelt werden. Wenn eine eindimensionale Transformation sowohl AV1 als auch VP9 unterstützt, kann eine 14-Bit-Darstellung von AV1 anstelle einer 12-Bit-Darstellung verwendet werden, sodass AV1 und VP9 je nach verwendetem Codec dieselbe Half-Butterfly-Logik nutzen können.
  • Ohne Berücksichtigung der Konstanten ergibt die Trigonometrie mit 12-Bit-Präzision 7-stellige Radix-4-Zahlen mit 20 Bits (sechs Zahlen mit 3 Bits (-2,-1,0,+1,+2) und eine führende Zahl mit 2 Bits (-1,0,+1)), während die 14-Bit-Präzision 8-stellige Radix-4-Zahlen mit 23 Bits (sechs Zahlen mit 3 Bits und eine führende Zahl mit 2 Bits) erfordert. Die nachstehende Tabelle 5 stellt einige Beispiele für Kosinuszahlen im Radix-4-Format bereit:
    const
    TRIG_RADIX4_TABLE_DTYPEcos_radix4_table[COS_RADIX4 TABLE SIZE] =
    // HW14: 14 Bit Präzision in Hardware
    // Positiver cos der Präzision 14 in HW-Präzision 14, Skala 1
    // Versatz= 0, 4^7=16384 4^7 4^6 4^5 4^4 4^3 4^2 4^1 4^0
    , 0x403612 // 8: 16069 = (+1, +0, +0, -1, -1, +0, +1, +1)
    , 0x41c8c4 // 9: 15986 = (+1, +0, -1, +2, +2, -1, +0, +2)
    , 0x41c092 // 10: 15893 = (+1, +0, -1, +2, +0, +1, +1, +1)
    // HW12: 12 Bit Präzision in Hardware
    // Positiver cos der Präzision 12 in HW-Präzision 12
    // Versatz= 640, 4^6=4096 4^6 4^5 4^4 4^3 4^2 4^1 4^0
    ...
    , 0x0806c2 // 8 : 4017 = (+1, +0, +0, -1, -1, +0, +1)
    , 0x083918 // 9 : 3996 = (+1, +0, -1, +2, +2, -1, +0)
    , 0x083812 // 10 : 3973 = (+1, +0, -1, +2, +0, +1, +1)
  • Mehrere Transformationstypen können sich dieselbe Half-Butterfly-Schaltung teilen. Dies kann z. B. dadurch erreicht werden, dass die Konfigurationsschaltung 202 muxen kann, welcher der Koeffizienten gerade verwendet wird, da in einem bestimmten Taktzyklus möglicherweise nur ein Transformationstyp durchgeführt wird.
  • Werden die Konstanten und Rundungsterme ignoriert, so erfordert jeder Half-Butterfly (X*cos A + Y*cos B) in der AV1 12-Bit-Trigonometrie bis zu 14 Additionsterme: 7 für den linken Operanden (X*cos A) und 7 für den rechten Operanden (Y*cos B). Bei der 14-Bit-Trigonometrie mit VP9 beträgt die Anzahl der Additionsterme 16 (ebenfalls ohne Konstanten und Rundungsterme). Jede Radix-4-Ziffer stellt einen Additionsterm dar, aber es gilt: Jeder Radix-4-Koeffiziententerm, der 0 ist, bedeutet einen zu addierenden Term weniger. Daher kann in mindestens einer Ausführungsform die Anzahl der Radix-4-Koeffizienten Null in den Half-Butterflies maximiert werden, um Fläche und Leistung zu reduzieren und gleichzeitig das Timing zu verbessern. In Ausführungsformen, in denen eine Half-Butterfly-Operation von mehreren Transformationstypen gemeinsam genutzt wird, kann ein Additionsterm eliminiert werden, indem die Konfigurationsschaltung 202 trigonometrische Koeffizienten multiplexiert, die alle 0-Koeffizienten an ähnlichen Positionen aufweisen.
  • Tabelle 6 veranschaulicht Beispiele für Additionsterme mit übereinstimmenden Nullen:
    // Versatz= 640, 4^6=4096 4^6 4^5 4^4 4^3 4^2 4^1 4^0
    , 0x0806c2 // 8 : 4017 = (+1, +0, +0, -1, -1, +0, +1)
    , 0x083918 // 9 : 3996 = (+1, +0, -1, +2, +2, -1, +0)
    , 0x083812 // 10 : 3973 = (+1, +0, -1, +2, +0, +1, +1)
  • In dem Beispiel der Tabelle 6 haben die 4^5-Koeffizienten eine übereinstimmende 0 für 4017, 3996 und 3973. Somit können alle drei Eingänge in einem gemeinsamen Half-Butterfly zusammengeschaltet werden, was zu einem Additionsterm weniger im gemeinsamen Multiplikator führt.
  • Reduzierte PPC für Intra-Frame-Prädiktions-Feedback
  • Üblicherweise werden die Daten nach der Quantisierung und Rückwärtsquantisierung von einer Quantisierungs- und Transformationseinheit vom Frequenzbereich zurück in den Raum- oder Zeitbereich konvertiert. Mit den in den räumlichen Bereich umgewandelten Daten können dann RDO-Berechnungen durchgeführt werden, die auch als Feedback für die Intra-Frame-Prädiktion verwendet werden können. Somit kann eine Rückwärtstransformation an den Daten durchgeführt werden, um die RDO zu berechnen. Um den PPC der Pipeline beizubehalten und die Konstruktion zu vereinfachen, kann die Rückwärtstransformation mit demselben PPC durchgeführt werden wie die Vorwärtstransformation, wobei dieselbe Hardwarekonstruktion verwendet wird.
  • Offenbarte Ansätze können RDO-Berechnungen (z. B. zur Berechnung von RDO-Kosten für einen Pixelblock) unter Verwendung von Daten durchführen, die sich noch im Frequenzbereich befinden. Somit muss zur Berechnung der RDO keine Rückwärtstransformation an den Daten durchgeführt werden. Darüber hinaus kann nur eine Teilmenge der Pixelblöcke, für die die Vorwärtstransformation 102 dazu konfiguriert ist, als Feedback für die Intra-Frame-Prädiktion bereitgestellt werden (z. B. für die Berechnung der ungefähren Nachbarn). Außerdem können die Pixelblöcke, die zur Bereitstellung von Feedback für die Intra-Frame-Prädiktion verwendet werden, kleiner sein als der größte Pixelblock, für den die Vorwärtstransformation 102 dazu konfiguriert ist, zu operieren. Zum Beispiel kann der Rückwärtstransformationstrichter 114 Pixelblöcke herausfiltern, die nicht zum Bereitstellen des Feedbacks verwendet werden. Somit kann die Rückwärtstransformation 108 mit einer niedrigeren PPC arbeiten als die Vorwärtstransformation 102, die Quantisierung 104 und die Rückwärtsquantisierung 106, während andere Daten in den Datenfluss 100 eingespeist werden können. Somit kann die Rückwärtstransformation 108 unter Verwendung eines kleineren und stromsparenden Designs mit reduzierter durchschnittlicher Latenzzeit implementiert werden.
  • In mindestens einer Ausführungsform kann der Scheduler 116 dazu konfiguriert sein, dem Datenfluss 100 Pixelblöcke bereitzustellen, die nicht durch den langsameren Schaltkreis der Rückwärtstransformation 108 blockiert oder verzögert werden. Dies kann beinhalten, dass der Scheduler 116 Pixelblöcke auswählt, die nicht unter Verwendung der Rückwärtstransformation 108 bearbeitet werden müssen (z. B. nicht für Feedback verwendet werden), und/oder Pixelblöcke beabstandet, die unter Verwendung der Rückwärtstransformation 108 bearbeitet werden müssen, um mindestens eine Anzahl von Zyklen, die erforderlich ist, um den Unterschied in PPC als Rückwärtstransformationstrichter 114 zu berücksichtigen (z. B. mit Lücken, die dem Verhältnis der Verarbeitungsgeschwindigkeit zwischen den Abschnitten des Datenflusses 100 entsprechen, das im vorliegenden Beispiel ungefähr ¼ betragen kann).
  • Der Rückwärtstransformationstrichter 114 kann die Teilmenge der Pixelblöcke anhand verschiedener möglicher Kriterien auswählen. In mindestens einer Ausführungsform können die Auswahlkriterien auf mindestens einer oder mehreren Dimensionen eines Pixelblocks basieren. Zum Beispiel kann der Rückwärtstransformationstrichter 114 so konfiguriert sein, dass er Pixelblöcke auswählt, die kleiner sind als der größte Pixelblock, für dessen Betrieb die Vorwärtstransformation 102 konfiguriert ist. In mindestens einer Ausführungsform kann der Rückwärtstransformationstrichter 114 nur den Betrieb eines Pixelblocks mit einer bestimmten Größe und/oder Abmessung unter Verwendung der Rückwärtstransformation 108 zulassen. Zum Beispiel kann der Rückwärtstransformationstrichter 114 nur den Betrieb von 16x16-Pixelblöcken unter Verwendung der Rückwärtstransformation 108 erlauben (z. B. nur einen Transformationstyp und eine Größe unterstützen). Im Beispiel der 16x16-Pixelblöcke können die Randpixel eines Pixelblocks von ausreichender Qualität sein, um eine Rückmeldung für die Intra-Frame-Prädiktion bereitzustellen, die für nachfolgende Transformationen (die für unterschiedliche Transformationsgrößen sein können) verwendet werden kann, ohne dass die Rückwärtstransformation 108 für den Pixelblock mit der größten Größe durchgeführt werden muss.
  • Ferner muss der Scheduler 116 die 16x16-Pixelblöcke, die mit der Rückwärtstransformation 108 bearbeitet werden sollen, nur um mindestens eine Schwellenzahl von Taktzyklen beabstanden, um ein Verzögern zu vermeiden, während die Flexibilität bei der Planung der übrigen Pixelblöcke erhalten bleibt. Zum Beispiel kann der Scheduler 116 für eine Inter-Frame-Codiereinheit Pixelblöcke für den Datenfluss 100 bereitstellen, wenn diese verfügbar sind, ohne dass eine Blockierung zu befürchten ist, da ihre Pixelblöcke nicht unter Verwendung der Rückwärtstransformation 108 bearbeitet werden, solange der Scheduler 116 für die Intra-Frame-Codiereinheit sicherstellt, dass Pixelblöcke, die unter Verwendung der Rückwärtstransformation 108 bearbeitet werden (z. B. die Teilmenge, die den oberen und linken Grenzen entspricht, die zum Bestimmen eines anderen Pixelblocks verwendet werden), ausreichend beabstandet sind, um eine Blockierung zu vermeiden. In mindestens einer Ausführungsform kann der Scheduler 116 für jede Einheit Blöcke für die Pipeline bereitstellen, basierend auf einer Reihenfolge von kleinen zu großen Pixelblöcken (z. B. alle 4x4 gefolgt von allen 8x4, 4x8, 8x8 usw.), wobei einige der 16x16 für die Anwendung der Rückwärtstransformation 108 nicht in Frage kommen. Somit können sich die Einheiten die Pipeline teilen, ohne dass für jede Einheit eine eigene Pipeline erforderlich ist.
  • Der Rückwärtstransformationstrichter 114 kann mit einer Schaltung implementiert werden, die einen großen PPC-Eingang in einen kleineren PPC-Ausgang umwandelt. In mindestens einer Ausführungsform wird der Rückwärtstransformationstrichter 114 mit einem First-In-First-Out-Puffer (FIFO) implementiert. Im Beispiel von 1 kann der FIFO-Puffer drei 64 PPC-Einträge mit je vier Zeilen und einen Ausgang für eine einzelne 16PPC-Zeile beinhalten. Wenn der Ausgang der Schaltung gefloppt ist, kann es eine Zyklusverzögerung vom ersten Eingang zum ersten Ausgang geben. Ein gefloppter Ausgang kann wünschenswert sein, wenn die Rückwärtszeilentransformation 108A mit Half-Butterflies im ersten Zyklus implementiert wird.
  • Variable Klemmung und Präzision der Addiererausgänge
  • Eine Transformation kann mit einer Reihe von aufeinander folgenden Netzwerken, wie Half-Butterfly-Netzwerken, durchgeführt werden. Jedes aufeinanderfolgende Netzwerk kann durch die Einbeziehung von Additions- und Multiplikationsoperationen Bitgewinne bewirken. Zum Beispiel kann jedes Mal, wenn Zahlen addiert werden, ein Bit gewonnen werden, und die Multiplikation kann zu einem noch größeren Bitgewinn führen. Während es wünschenswert wäre, die Schritte des Datenflusses 100 mit unendlicher Präzision zu impellieren, kann aus praktischen Gründen, wie z. B. zur Begrenzung der Größe der Schaltung, die Anzahl der Bits, die zur Darstellung der Eingänge und Ausgänge von Berechnungen verwendet werden, eingeschränkt werden. Daher können Klemmung und Runden verwendet werden, um die Präzision zu begrenzen und das Bitwachstum einzuschränken.
  • Damit der Datenfluss 100 konforme Videoströme erzeugen kann, sollten die Videoströme an jedem Zielort identisch decodiert werden. Um dies zu erreichen, müssen die Entwürfe für die Rückwärtstransformation rechnerisch bitgenau für die verwendeten Codec-Spezifikationen sein. Es kann wünschenswert sein, Bittiefen von 8, 10 oder 12 zu unterstützen, was jeweils unterschiedliche geklemmte Bereiche für die Berechnungen erfordert. Diese Bereiche können zwischen verschiedenen Codierungsformaten wie AV1 und VP9 unterschiedlich sein, sodass bei einer bestimmten Operation bis zu sechs Klemmungen möglich sind. Auch die geklemmten Bereiche selbst können an verschiedenen Stellen der Verarbeitung variieren. Auch die Anforderungen an die Präzision der Codierungsformate können unterschiedlich sein. Zum Beispiel sind für einige VP9-Berechnungen bis zu 37 Bit volle Präzision erforderlich. Ferner muss bei ADST-Transformationen die volle VP9-Präzision über mehrere Schritte übertragen werden.
  • Um unterschiedlichen Bittiefen und Codierungsformaten Rechnung zu tragen, können herkömmliche Ansätze die Arithmetik auf der Hardware des maximal großen Ausdrucks über alle Transformationen hinweg in einer Transformationspipeline durchführen. Unterschiedliche gebrochene Präzisionen, die zwischen VP9 und AV1 verwendet werden, können ineffizient durch separate Verschiebe- und Rundungsoperationen berücksichtigt werden, die zusätzliche Rechenschritte sowie zusätzliche binäre Additionen erfordern. Die Klemmung der Bittiefe auf verschiedene Bereiche kann von Fall zu Fall direkt durchgeführt werden. Daher ist das resultierende Design möglicherweise nicht förderlich für Skalierung, Hochgeschwindigkeitstaktung, Flächenfreundlichkeit und kurze Latenzzeiten.
  • Im Gegensatz zu konventionellen Ansätzen stellen die offenbaren Ansätze variable Bitbreite, Präzision und Rundung im gesamten Datenfluss 100 bereit, was die Größe der Schaltung und den Stromverbrauch drastisch reduzieren kann. Während bei konventionellen Ansätzen die größtmögliche Operatorgröße in der gesamten Pipeline verwendet wird, brauchen die offenbaren Ansätze, da die Bits für jede Transformation wachsen und sich fortpflanzen, nur die maximale Größe für eine bestimmte Transformation zu haben, die an einer Stelle in der Pipeline gemeinsam genutzt wird (d. h. die minimale Bitbreite, die für die unterstützten Transformationen benötigt wird). Codierungsformate werden typischerweise mit Ganzzahl-Mathematik spezifiziert. Gemäß den Aspekten der Offenbarung kann die Klemmung nach einer Multiplikation verwendet werden, die mit Festkomma-Präzision auf Ganzzahl-Eingängen durchgeführt wird, sodass mindestens ein Teil der gebrochenen Präzision entfallen kann. Das Klemmen kann durch Trunkieren begleitet werden, um Bits zu verwerfen, sowie durch Breitenrundung, um die Präzision zu erhalten, die beim Verwerfen von Bits möglich ist.
  • Die Bereichsklemmung kann effizient durchgeführt werden, indem ein konfigurierbarer Schaltkreis (z. B. Bound Everywhere) verwendet wird, der mehrere mögliche Bereiche pro Klemminstanz teilt (z. B. alle erforderlichen Bereiche, wie z. B. 6 für 3 Bittiefen bei Verwendung von AV1 und VP9) und unterschiedliche Bittiefen und Codecs berücksichtigt. Unter Verwendung der offenbarten Ansätze kann die in jeder Stufe benötigte Gesamt-Bitpräzision durch Propagierung einer Wellenfront von Bitbreiten über alle Codecs, Transformationstypen und Größen, die sich Ressourcen teilen, minimiert werden, was bei jeder Berechnung zu Hardware mit minimaler Bitbreite führt.
  • Darüber hinaus können Rundung und Trunkierung für die unterstützten Codierungsformate in schnelle Multiaddition-Operationen der Half-Butterflies integriert werden, ohne dass separate Schritte erforderlich sind, wobei die Unterschiede in der Präzision zwischen den Codecs berücksichtigt werden. Somit kann eine einheitliche Pipeline bereitgestellt werden, in der jeder Codec für seine jeweiligen Bitgenauigkeiten unterstützt werden kann, indem Half-Butterflies, Addierer und Subtrahierer gemeinsam genutzt werden. Die Ressourcen können von der VP9 ADST-Arithmetik mit voller Präzision und der entsprechenden AV1-trunkierten Arithmetik gemeinsam genutzt werden. Die Multiadditionsschaltungen können eine variable Rundungsposition beinhalten, die dazu verwendet werden kann, die Ausgangsbitbreite von Identitätstransformationsoperationen zu reduzieren. Andernfalls können die Half-Butterfly-Operationen der Identitätstransformation die Bitbreite der Half-Butterfly-Operationen anderer Transformationen überschreiten. In mindestens einer Ausführungsform ist nur eine der vier Transformationseinheiten sowohl auf die AV1- als auch auf die VP9-Transformationspräzision bitgenau (die Rückwärtstransformation 108 der Rekonstruktion). Jede der drei anderen Transformationen kann sich VP9 mit AV1 annähern, was zu Einsparungen bei Fläche, Leistung und Komplexität führt.
  • Während der Transformationen können am Ausgang der Addierer Klemmen angebracht werden, um das Bitwachstum während der Transformation zu kontrollieren. Diese Klemmen können als „Addierer-Klemmen“ bezeichnet werden, die zusätzlich zu den Klemmen auch runden und trunkieren können. Darüber hinaus kann es am Ende jeder 1D-Transformation Schaltungen geben, die Präzision durch Runden, Verschieben und anschließendes Klemmen entfernen. Die Klemmen in diesen Schaltungen können als „Round-Shift-Klemmen“ bezeichnet werden.
  • Rechteck- und Identitätstransformationen beinhalten ähnliche Skalierungsoperationen in Bezug auf √2 und Codecs spezifizieren sie als separate Skalierungsoperationen, jede mit ihren eigenen Rundungs- und Trunkierungsschritten. Aufgrund der Art des Rundens und Trunkierens kann jede Operation separat implementiert werden, um bitgenau zu sein, was zu einer sehr großen Anzahl von Skalierungsmultiplikatoren führen würde, und die zur Unterstützung dieser Funktionen anfallenden Flächenkosten wären hoch. Offenbarte Ansätze können vorhandene Ressourcen wiederverwenden, wenn auch nur für Fälle, die nicht bitgenau sein müssen.
  • In den Fällen, in denen Bitgenauigkeit erforderlich ist, kann die Skalierung in mehreren expliziten Schritten durchgeführt werden. Unter Verwendung der offenbarten Ansätze können in Fällen, in denen keine Bitgenauigkeit erforderlich ist, die Schritte zu einer einzigen Multiplikationsoperation zusammengefasst werden, wodurch die Hardware reduziert wird. Auf der Eingangsseite der Rückwärtstransformation kann es einen Mux zwischen einem Passthrough (1) und einer Multiplikation mit einer konstanten ( 1 2 )
    Figure DE102022120207A1_0001
    oder ( 2 )
    Figure DE102022120207A1_0002
    rechteckigen Skalierung auf der Ausgangsseite der Vorwärtstransformation geben (es kann kein Bit-Wachstum geben, wenn der Multiplikator ( 1 2
    Figure DE102022120207A1_0003
    ist). Es kann möglicherweise keinen Bit-Zuwachs durch den konstanten Multiplikator geben, da 1 2 < 1.
    Figure DE102022120207A1_0004
     
    Figure DE102022120207A1_0005
    Schließlich ist die Ausgangsstufe, die eine Skalierung aus einer Zweierpotenz ist, eine einfache Operation mit variabler Länge, die fünf Möglichkeiten bietet.
  • Bei einem 64PPC-Durchsatz kann die Anzahl der zusätzlichen Multiplikatoren, die für die rechteckige Skalierung benötigt werden, in der Größenordnung von 64 liegen. Alle anderen Multiplikationsressourcen (Half-Butterflies) können verwendet werden. Nehmen wir den Fall an, dass beide 1-D-Transformationen während einer 32x16-Rechtecktransformation DCT sind. Die meisten vorhandenen Half-Butterflies können für die DCT-Berechnungen belegt sein, sodass nur wenige Multiplikationsressourcen übrig bleiben, um die rechteckige Skalierung durchzuführen, und es wäre sehr schwierig, diese Ressourcen gemeinsam zu nutzen. Daher kann bei anderen offenbaren Ansätzen eine Pipe-Stufe mit 64 Multiplikatoren für 64 PPC oder eine mit 32 Multiplikatoren für 32 PPC hinzugefügt werden. Alternativ können diese Skalare auch in eine bestehende Pipe-Stufe integriert werden, wenn die Taktung ausreichend Spielraum lässt. Um den Bereich und das Timing zu verbessern, kann ein Argument dieser zusätzlichen Multiplikatoren konstant 1 2
    Figure DE102022120207A1_0006
    oder ( 2 )
    Figure DE102022120207A1_0007
    sein. Daher können zusätzliche konstante Multiplikatoren zum Zweck der rechtwinkligen Skalierung hinzugefügt werden. In mindestens einer Ausführungsform können die konstanten Multiplikatoren als Multiadditionen implementiert werden und können eine andere Stufe als die für Half-Butterflies verwendeten verwenden.
  • Bei IDT ermöglicht die Verwendung variabler Rundungspositionen die Ausführung von Identifizierungstransformationen im gebrochenen Teil der Schaltung, um die Anzahl der Ganzzahl-Bits am Ausgang zu begrenzen. Zum Beispiel können Viertel-Rundungspositionen verwendet werden, um den Bedarf an breiteren MultiadditionsSchaltungen für die Half-Butterflies zu reduzieren. In mindestens einer Ausführungsform kann anstelle der Rundung am ersten Punkt nach dem Binärpunkt der 8. Punkt verwendet werden, wodurch am Ende 2 Bits in der Multiplikatorbreite für IDT eingespart werden. Dies würde ausreichen, um ein Wachstum der Ganzzahl-Bits zu vermeiden, selbst für IDT64, dem größten Multiplikator dieser Art, was bedeutet, dass er für alle Fälle ausreichen kann.
  • Bezug nehmend auf 4A veranschaulicht 4A Beispiele für Half-Butterfly-Schaltungen 400A und 400B, die zum Implementieren des Datenflusses 100 verwendet werden können, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Die Half-Butterfly-Schaltung 400A kann verwendet werden, wenn keine Bitgenauigkeit erforderlich ist. Beispielhaft und ohne Einschränkung kann die Half-Butterfly-Schaltung 400A verwendet werden, um die Vorwärtstransformation 102 und die Rückwärtstransformation 108 für RDO sowie die Vorwärtstransformation 102 für die Rekonstruktion zu implementieren. Die Half-Butterfly-Schaltung 400B kann verwendet werden, wenn Bitgenauigkeit erforderlich ist. Beispielhaft und ohne Einschränkung kann die Half-Butterfly-Schaltung 400B verwendet werden, um die Rückwärtstransformation 108 für die Rekonstruktion zu implementieren. Wie in 4A angedeutet, kann die Bitgenauigkeit für IADST4 bedeuten, dass die volle Präzision der Half-Butterfly-Schaltung aus der Half-Butterfly-Schaltung für einen zusätzlichen Ausgang durchgeführt werden muss, der alle Nachkommastellen der Multiplikator-Additionsoperation (Multiadditionsoperation) enthält. Volle Präzision kann auch bedeuten, dass am Ausgang nicht gerundet wird. Die Bitgenauigkeit für IDCT16 kann bedeuten, dass die Half-Butterfly-Schaltung eine andere Teilmenge von Ausgangsbits als die reguläre Half-Butterfly-Schaltung verwenden muss, sowie eine andere Rundungsposition.
  • Überlaufbehandlung und Fehlerresistenz
  • Einige Codecs wie VP9 verfügen über keine Ausfallsicherung für stark quantisierte Streams, was dazu führen kann, dass die Transformationsarithmetik während des Decodierens überläuft (und damit gegen die Bitbreitenregeln verstößt), was zu einer deutlich sichtbaren Bildverfälschung führt. Wenn nichts unternommen wird, führen einige Hardware-Überläufe zu großen Fehlern aufgrund des Umschlagens von positiven in negative Werte oder umgekehrt. Üblicherweise können einige Überläufe erkannt werden, indem die Schaltung so ausgelegt wird, dass sie in solchen Situationen einen großen Fehler im endgültigen Ausgangssignal erzeugt, indem sie die entsprechenden Pixel beschädigt. Offenbarte Ansätze können einen Schutz vor Überläufen bereitstellen, indem sie jeden Driftfehler, der durch Streams außerhalb des Bereichs verursacht wird, klemmen und einschränken, wodurch der Fehler im Signal minimiert wird und ein saubereres Bild entsteht. Ein effizienter Hardware-Fehlermeldemechanismus kann mit Hilfe von Interrupts implementiert werden, sodass die Firmware schnell eine Codierung für diesen Codec mit weniger aggressiven Parametern erneut versuchen kann. Darüber hinaus können Formeln implementiert werden, um die Erkennung von Überläufen auf die Transformationseinheit zu beschränken, ohne dass das Erkennungsproblem auf nachgelagerte Einheiten propagiert wird, was sonst der Fall wäre.
  • In mindestens einer Ausführungsform kann ein Überlaufsignal für die Klemme eines Addierers gemeldet werden, wenn eine Klemme der Transformationseinheit eine Klemme anlegt. Darüber hinaus kann es am Ende jeder 1D-Transformation Schaltungen geben, die Präzision durch Runden, Verschieben und anschließendes Klemmen entfernen. Die Klemmen in diesen Schaltungen können als „Round-Shift-Klemmen“ bezeichnet werden. Wenn Round-Shift-Klemmen angewendet werden, kann ein Round-Shift-Klemmen-Überlaufsignal gemeldet werden. Jede 1D-Transformation kann sowohl ein Überlaufsignal für die Addierer-Klemme als auch ein Überlaufsignal für die Round-Shift-Klemme bereitstellen. Zum Beispiel kann RDO vier 1D-Transformationen beinhalten, und daher können 4 Addierer-Klemmen-Überlaufsignale und 4 Round-Shift-Klemmen-Überlaufsignale erzeugt werden, was insgesamt 8 Überlaufsignale über RDO ergibt. Einige der Überlaufsignale können erwartet werden, und daher können diese Signale lediglich zur Meldung eines Status verwendet werden, der ignoriert oder maskiert werden kann. Es gibt jedoch Fälle, in denen Überläufe bei einem legalen Videobitstrom nie erwartet werden, und in solchen Fällen kann die Schaltung dazu konfiguriert sein, eine Unterbrechung zu erzeugen.
  • In jeder 1D-Transformation kann es so viele Quellen für einen Überlauf der Addiererklemme geben, wie es Addierer mit Klemmen gibt, sodass es Hunderte sein können, wenn der PPC groß ist. Für Round-Shift-Klemmen-Überlaufsignale kann es so viele geben wie die PPC (z. B. 64, 32 oder 16, je nach Transformation). In mindestens einer Ausführungsform darf ein Interrupt nur dann deklariert werden, wenn das Verhalten der Hardware unerwartet und daher undefiniert ist. Bei AV1 sind die Klemmen direkt im Protokoll festgelegt, sodass eine auftretende Klemme nicht zu einer Unterbrechung führen kann. Für VP9 sind keine Klemmen direkt im Protokoll angegeben, sondern nur Prüfungen, die ein unerwartetes Verhalten im Entwurf anzeigen. Mit Ausnahme der IDCT-Rekonstruktion können alle VP9-1D-Transformationen durch AV1-Berechnungen angenähert werden. Somit können nur die Rückwärtszeilentransformation 108A und die inverse Spaltentransformation 108C zur Rekonstruktion echte VP9-1D-Transformationen implementieren. Als solche können diese Einheiten eine Unterbrechung bei Addierer-Klemmen und Round-Shift-Klemmen erzeugen, wenn VP9 verarbeitet wird. Andere Überläufe können herausgefiltert werden.
  • Der VP9-Codec legt fest, dass keine Additionsstufe der Rückwärtstransformation (Rekonstruktions-IDCT) mehr als 16 Bit für einen Pixelstrom der Bittiefe 8, keine mehr als 18 Bit für einen Pixelstrom der Bittiefe 10 und keine mehr als 20 Bit für einen Pixelstrom der Bittiefe 12 betragen darf. Dasselbe gilt für den Ausgang der Rückwärtsquantisierung (inverse quantization - IQ). Die Rückwärtstransformationseinheit kann solche Bitbreitenüberschreitungen erkennen und über einen Interrupt melden. In mindestens einer Ausführungsform kann die Erkennung von Überläufen basierend auf der Erkennung vordefinierter Fälle implementiert werden. Zum Beispiel findet am Ende jeder 1D-Transformationspipeline eine Round-Shift-Operation statt, sowohl für VP9 als auch für AV1, um die Präzision auf eine besser handhabbare Anzahl von Bits zu reduzieren. Der Round-Shift am Ende der Rückwärtstransformationen der Rekonstruktion kann zur Auslösung von Interrupts verwendet werden. In mindestens einer Ausführungsform können Überläufe erkannt und Interrupts für bestimmte Kombinationen von Überlaufprüfungs-Bitbreiten C, Mengen von Bits, auf die ein Round-Shift angewendet wird S, und/oder den eingehenden Pixelwert vor dem Round-Shift ausgelöst werden. In mindestens einer Ausführungsform können bestimmte C-, S-Kombinationen jeweils mit einem oder mehreren Bereichen eingehender Pixelwerte definiert werden, die einen Interrupt auslösen sollen, falls vorhanden. Statusbits können verwendet werden, um zu bestimmen, welche 1D-Transformationsschaltung die Quelle eines unerwarteten Interrupts ist, und entsprechende Abhilfemaßnahmen einzuleiten. Dieselben Prüfungen für C,S können Überlaufprüfungen auf den Transformationsblock selbst beschränken, ohne dass zusätzliche Überlaufprüfungen für nachgelagerte Blöcke erforderlich werden, die ansonsten für VP9 erforderlich wären.
  • Überspringen von Pipelinestufen
  • Latenzzeit der Transformations- und Quantisierungseinheit kann eine wichtige Rolle bei der Rekonstruktionsleistung spielen. In mindestens einer Ausführungsform kann zur Verbesserung der Transformationsleistung die Latenzzeit durch Überspringen von Transformationsphasen verbessert werden, wenn kleinere Transformationen vom Datenfluss 100 verarbeitet werden. Zum Beispiel können eine oder mehrere Eintrittspipeline-Phasen umgangen oder übersprungen werden. In mindestens einer Ausführungsform kann der Scheduler 116 und/oder die Schaltungskonfiguration, die gemäß dem Datenfluss verschiedene Bereitschafts- und Gültigkeitssignale vorgibt, den Schaltkreis veranlassen, zu warten, bis eine oder mehrere Anfangsphasen leer sind, und dann den Pixelblock direkt an die verbleibenden ein oder mehreren Phasen (z. B. die minimale Anzahl von Phasen) bereitzustellen, die erforderlich sind, um die Verarbeitung des Pixelblocks ohne Blockierung zu ermöglichen. In mindestens einer Ausführungsform können auch eine oder mehrere Austritts-Pipelinestufen umgangen oder durchlaufen werden. In mindestens einer Ausführungsform kann der Scheduler 116 und/oder die Schaltungskonfiguration nach der vollständigen Verarbeitung eines Pixelblocks bewirken, dass der Schaltkreis wartet, bis eine oder mehrere verbleibende Phasen leer sind, und dann die aktuelle Phase unter Umgehung aller verbleibenden Phasen entleert.
  • 4B veranschaulicht eine beispielhafte Schaltung 410 zur Umgehung von Eintritts-Pipelinestufen, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. 4C veranschaulicht eine beispielhafte Schaltung 412 zur Umgehung von Austritts-Pipelinestufen, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. In den 4B und 4C können sich die Muxes 414, 416 und 418 jeweils im Datenpfad befinden und aus mehreren Bits bestehen. In mindestens einer Ausführungsform kann die Umgehung verwendet werden, um Energie zu sparen (z. B. den Flop-Energieverbrauch zu reduzieren).
  • Wie in 4B gezeigt, kann die Schaltung 410 bei einem eingehenden 1D-DAT der Größe 4 warten, bis die Phasen A bis D leer sind, und dann zur Phase E übergehen, während die Phasen A-D umgangen werden. Wenn das eingehende 1D-DAT eine Größe von 8, 16 oder 32 hat, kann die Schaltung 410 warten, bis die Phasen A und B leer sind, und dann zu Phase C gehen, während sie die Phasen A und B umgeht. Wenn das eingehende 1D-DAT eine Größe von 64 hat, kann die Schaltung 410 Daten in Phase A schieben, ohne irgendwelche Phasen zu umgehen.
  • Wie in 4C dargestellt, kann die Schaltung 410, wenn das eingehende 1D-DAT in Phase G die Größe 4 hat, warten, bis die Phasen H und J leer sind, und sie dann umgehen. Andernfalls kann die Schaltung 410 die Daten nacheinander die Phasen G, H und J durchlaufen lassen.
  • Pufferung der Transponierungseinheit
  • Die Transponierungseinheit, die die Transponierungsoperationen des Datenflusses 100 durchführt, kann bereitgestellt werden, um variable Latenzzeiten in Bezug auf die Transformationsgröße zu berücksichtigen. Zum Beispiel kann eine ungeeignete Sequenz für die Transformationsgröße zu einer Blockierung des Eingangs führen. Eine Blockierung ist jedoch vermeidbar, wenn die Tiefe der Transponierungspuffer innerhalb einer Pipe einen ausreichenden Durchsatz aufweist. Zudem kann der Scheduler 116, der Transformationen zur Verarbeitung in der Reihenfolge einer allgemein ansteigenden Größe bereitstellt, das Blockieren abmildern.
  • Die Vorwärtstransformationstransponierung kann einen Satz von Spalteneingängen nehmen und Zeilenausgänge erzeugen (und umgekehrt für die Rückwärtstransformation), was die Wiederaufnahme von einer 1d Operation zur nächsten ermöglicht. 5 stellt ein Beispiel für Aspekte einer Transponierungsoperation 500 für einen 8x8-Pixelblock dar, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Die Spalten kommen über 8 Zyklen an: a mal t0, t1, t2, ..., t7, wobei die Pixel P00 bis P07 die erste Spalte darstellen, die zum Zeitpunkt t0 ankommt. Dann werden sie über acht Zyklen gelesen: a mal u0, u1, ..., u7, wobei bei u0 die erste Zeile von P00 bis P70 gelesen wird. Der Einfachheit halber können in der Diskussion die Spalten- und Zeilenkoordinaten (Pxy) anstelle der linear geordneten Pixelzahlen von 0, 1, ..., 63 verwendet werden.
  • Wenn in jedem Zyklus eine Spalte gesendet wird, kann es sein, dass die erste Zeile erst verarbeitet werden kann, nachdem die letzte Spalte eingetroffen ist. Angenommen, eine Matrix Q, die NxN ist, folgt auf P (ein NxN-Pixelblock, der von Spalten in Zeilen transponiert wird) in die Transponierungs-Operationseinheit. Davon ausgehend, dass es keine Speicherverdoppelung gibt, dass nur N2 Pixel Speicherplatz für die Transponierung zur Verfügung stehen und dass Q demselben festen Speicherzugriffsmuster folgt wie P. Dann muss die erste Spalte von Q warten, bis die letzte Zeile von P ausgelesen ist, bevor Daten aus Q in den Puffer für die Transponierung gelangen können. Daraus ergibt sich, dass es nach dem Eintreffen der ersten Spalte mindestens N Zyklen dauern kann, bevor Zeilen ausgegeben werden können, da die Ankunftsrate von Spalten bestenfalls eine Spalte pro Zyklus beträgt, was der minimalen Latenzzeit von der ersten Spalte bis zur ersten Zeile des Ausgangs entspricht. Darüber hinaus kann es bei einer Transponierung, sofern keine Speicherverdoppelung vorliegt, zu mindestens N Zyklen von Verzögerungen für den nächsten Block kommen, während die Transponierung des ersten Blocks ausgelesen wird.
  • Ein Ansatz zur Beseitigung solcher Verzögerungen kann darin bestehen, den Speicher in einem Ping-Pong-Puffer zu duplizieren. Bei einem herkömmlichen Ping-Pong-Puffer wird die eine Hälfte des Puffers beschrieben, während die andere Hälfte gelesen werden kann und beim nächsten Durchlauf umgekehrt. Der Ping-Pong-Puffer kann das Verzögern abmildern, wenn die Reihenfolge der Pixelblockgrößen verwaltet wird. Allerdings kann die Latenzzeit für einen NxN-Block 2N betragen (N zum Schreiben von N Spalten, dann N zum Lesen von Zeilen), was ausreichend sein kann, aber wie hierin beschrieben verbessert werden könnte.
  • Der Hauptfaktor, der die Größe des Puffers für die Transponierung bestimmt, kann die maximale Pixel-Blockgröße sein, die in der Pipeline toleriert wird. Bei der Angabe von Beispielen wird 64x64 als maximale Pixelblockgröße diskutiert, da dies der härteste Fall für AV1 ist. Es kann jedoch jede geeignete Maximalgröße verwendet werden, wie z. B. 32x32, was sich aus dem hierin beschriebenen Fall 64x64 ableiten lässt.
  • Ziel kann es sein, die Transponierung eines Pixelblocks von 64x64 in der Größenordnung von einer Spalte pro Taktzyklus zu verarbeiten und einen Ausgang von einer Zeile pro Zyklus zu erhalten, was einen Durchsatz von 1 ergibt. Dies kann mit einem großen Array von Flops und Muxing erreicht werden. Für die Transponierung können jedoch auch RAMs (z. B. auf der Basis von Latches und Flops) verwendet werden. Zum Beispiel würde ein Ping-Pong-Puffer, wenn jedes Pixel 20 Bit hat, 2x64x64x20=163840 Bit bedeuten. Dies würde eine erhebliche Anzahl von Flops bedeuten, sodass in einigen Ausführungsformen RAMs verwendet werden können. In mindestens einer Ausführungsform können mindestens N RAMs für einen NxN-Pixelblock verwendet werden. Während in den nachstehenden Beispielen RAMs verwendet werden, können sie auf Speicher oder Speichereinheiten verallgemeinert werden.
  • Nun Bezug nehmend auf 6, veranschaulicht 6 ein Beispiel für ein spiralförmiges Speicherzugriffsmuster zur Transponierung von Pixelblöcken, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung. Das Beispiel wird für eine 8x8-Transponierung bereitgestellt und kann für ein RAM-Zugriffsmuster mit 8 RAMs geeignet sein, kann aber für verschiedene Pixelblockgrößen und Speichertypen verallgemeinert werden. Es wird ein Array von 8 RAMs mit insgesamt 8x8=64 Einträgen gezeigt, wobei jedes RAM die gleiche Adresstiefe oder den gleichen Speicherplatz hat. Ferner wird in dem Beispiel versucht, die geschriebenen Daten so zu organisieren, dass das Lesen aller RAMs an Adresse 0 die Zeile 0 zum Zeitpunkt u0 bereitstellt, das Lesen aller RAMs an Adresse 1 die Zeile 1 zum Zeitpunkt u1 und so weiter, bis alle RAMs an Adresse 7 die Zeile 7 zum Zeitpunkt u7 bereitstellen. Diese Eigenschaft kann für elastische Speicherkonzepte, wie hierin beschrieben, genutzt werden.
  • Diagramm 600 veranschaulicht die Ankunftszeiten der Pixelspalten p00-p77 vom Zeitpunkt t0 bis zum Zeitpunkt t7 im Speicher, was dem mit den Diagrammen 602-604 veranschaulichten Speicherzugriffsmuster entsprechen kann. Das Diagramm 602 zeigt ein Schreibmuster für die Pixel p00-p07 zum Zeitpunkt t0. Die Diagramme 602-604 veranschaulichen die Speicheradressen A0-A7 und die Speichereinheiten oder RAMs RAM0-RAM7. Zum Zeitpunkt t0 wird P00 an die Adresse A0 von RAM0 geschrieben, da es sich in Zeile 0 befindet. P01 wird an die Adresse A1 geschrieben, da es sich in Zeile 1 befindet, aber RAM1 wird als Schreibanschluss verwendet, da RAM0 an Adresse A0 bereits belegt sein kann, und so weiter, bis P07 an die Adresse A7 von RAM7 geschrieben wird, da es sich in Zeile 7 befindet. Diagramm 604 zeigt ein Schreibmuster für Pixel p10-p17 zum Zeitpunkt t1. Hier wird Pixel p10 in Adresse A0 gespeichert, da es sich in Zeile 0 befindet, aber in RAM1, da RAM0 an Adresse A0 möglicherweise nicht verfügbar ist (da es möglicherweise P00 speichert). Wird diesem Schreibmuster unter Verwendung derselben Pixel- und Adressreihenfolge gefolgt, wobei jedoch der RAM-Speicher bei jedem Schreiben inkrementiert wird, ergibt sich das Diagramm 604, das nach der Zeit t7 einen vollen Speicher zeigt. Die Diagramme 602-604 zeigen auch die Zeiten u0-u7. Das Lesen aller RAMs an der Adresse A0 kann zum Zeitpunkt u0 die Zeile 0 ergeben, das Lesen aller RAMs an der Adresse A1 kann zum Zeitpunkt u1 die Zeile 1 ergeben, allerdings mit einer zirkulären Verschiebung von 1, und so weiter bis zur Adresse A7.
  • In mindestens einer Ausführungsform kann das Barber-Pole- oder Helix-Füllmuster von 6 unter Verwendung von Barrel-Shiftern implementiert werden, um die zirkulären Verschiebungen auszugleichen. Nun Bezug nehmend auf 7, ist 7 ein Flussdiagramm eines Beispiels eines Prozesses 700, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung. Der Prozess 700 kann eine Spalte COL zum Zeitpunkt t empfangen und ein Barrel-Shift 702 kann an der Spalte durchgeführt werden. Im Beispiel des 8x8-Pixelblocks kann ein Barrel-Shift 8 durchgeführt werden. Zum Zeitpunkt t kann ein Datenschreiben WD durchgeführt werden, der verkettete Daten für RAMs 704 (z. B. für acht Dual-Port-RAMs in diesem Beispiel) bereitstellt. WA (m, t) bezeichnet eine Schreibadresse RAM m, die den RAMs 704 zum Zeitpunkt t bereitgestellt wird, und RA(m, u) bezeichnet eine Leseadresse RAM m, die den RAMs 704 zum Zeitpunkt u bereitgestellt wird. Zum Zeitpunkt u kann ein Datenlesen RD durchgeführt werden, der verkettete Daten für die RAMs 704 bereitstellt. Der Prozess 700 kann eine Zeile ROW zum Zeitpunkt u unter Verwendung eines Barrel-Shifts 706 (z. B. Barrel-Shift 8) bereitstellen.
  • Hier haben alle acht RAMs die Adresstiefe 8, um die 8x8 zu transponieren. In mindestens einer Ausführungsform könnte der Puffer mindestens verdoppelt werden, um Verzögerungen für Ping-Pong-Pufferung zu beheben. Ein alternativer Ansatz besteht jedoch darin, den Adressraum mindestens zu verdoppeln (in diesem Beispiel von 8 auf 16). Bei Dual-Port-RAMs ist es möglich, eine Lese- und eine Schreiboperation im selben Zyklus durchzuführen. Bei einem herkömmlichen Ping-Pong-Verfahren kann dann der untere Teil des Adressraums (0-7) zum Schreiben verwendet werden, während der obere Teil des Adressraums zum Lesen verwendet werden kann (8-15), und umgekehrt, wenn der nächste 8x8-Pixelblock kommt. Dies kann sicherstellen, dass es nie einen Lese-/Schreibkonflikt für dieselbe Adresse gibt und dass das höchstwertige Bit für die Schreib- und Leseadressen immer entgegengesetzt sind. Auf diese Weise kann die Anzahl der RAMs auch nach dem Hinzufügen der doppelten Pufferung gleich bleiben. Während im vorliegenden Beispiel Konflikte zwischen der oberen und der unteren Hälfte des Adressraums durch die Verwendung eines ersten MSB für Leseadressen und eines zweiten MSB für Schreibadressen vermieden werden können, ist dies nicht als Einschränkung zu verstehen, und es können viele andere Ansätze und Konfigurationen verwendet werden, um solche Konflikte zwischen den Abschnitten des Adressraums zu vermeiden.
  • Reduzieren der RAM-Anzahl und -Fläche
  • Bei Anwendung des am Beispiel eines 8x8-Pixelblocks erläuterten Ansatzes werden für 64x64-Pixelblöcke mindestens 64 separate RAMs benötigt. Um die Anzahl der RAMs zu reduzieren, können die Operationen und Annahmen für diesen Ansatz gelockert werden. Zunächst wird eine mögliche Lösung untersucht, bei der zusätzlicher Speicherplatz durch Verwendung eines Schieberegisters der Tiefe S für die eingehenden Spalten genutzt wird. Nun Bezug nehmend auf 8A, beinhaltet 8A ein Flussdiagramm eines Beispiels eines Prozesses 800, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung. Der Prozess 800 beinhaltet ein Schieberegister 802, das in jedem Zyklus 64 Einträge in Spalten empfängt. Das Schieberegister 802 kann S-1 Stufen für 64 Elemente (Teilzeilen) beinhalten, wobei S eine Potenz von 2 ist, die die Akkumulation einiger Spalten ermöglicht, sodass beim Schreiben in den RAM immer mehrere Einträge aus derselben Zeile verfügbar sind. Ein Interleaver 804 kann eine Interleaver-Permutation an 64*S Elementen durchführen, die von der Pixelblockgröße abhängig sein kann. Insbesondere kann die Interleaving-Permutation zur unterschiedlichen Behandlung verschiedener Blockgrößen verwendet werden, wobei jede unterschiedliche Pixelblockgröße ein anderes Interleaving-Muster aufweisen kann. Ein Barrel-Shifter 806 kann den Ausgang des Interleavers 804 empfangen und eine Größe von 64/S über 64*S Elemente in Gruppen von S haben. Die RAMs 808, die 64/S RAMs beinhalten können, können alle S Zyklen 64*S Elemente empfangen. Die Adresstiefe der RAMs 808 kann 128/S mit Ping-Pong oder 64/S ohne Ping-Pong mit 1 Wort pro Adresse und einer Wortbitbreite von Elementbreite*S2 betragen.
  • Ein Lesen von 64*S Elementen kann alle S-Zyklen durchgeführt und einem Multiplexer 810 bereitgestellt werden, der ein Sx1-Multiplexer mit 64*S Eingangselementen und einem Ausgang von 64 Elementen sein kann. Es kann eine Auswahl von Zeitmultiplexen bereitgestellt werden: 0, 1, ..., S-1. Der Multiplexer 810 kann in jedem Zyklus 64 Elemente für einen Barrel-Shifter 812 bereitstellen. Der Barrel-Shifter 812 kann eine Größe von 64/S über 64 Elemente in Gruppen von S haben. Ein Deinterleaver 814 kann den Ausgang des Barrel-Shifters 812 empfangen und eine Deinterleaver-Permutation an 64 Elementen durchführen, die von der Pixelblockgröße abhängig sein kann. Insbesondere kann die Deinterleaving-Permutation zur unterschiedlichen Behandlung verschiedener Blockgrößen verwendet werden, wobei jede unterschiedliche Pixelblockgröße ein anderes Deinterleaving-Muster aufweisen kann.
  • Unter Verwendung des Ansatzes von 8A kann die Anzahl der RAMs um einen Faktor S reduziert werden. Jeder RAM kann einmal alle S Zyklen beschrieben und alle S Zyklen gelesen werden. Vorteilhafterweise kann das Schieberegister für die Transponierung kleinerer Pixelblöcke, wie z. B. 16x8 oder 8x16, unter Umgehung der RAMs 808 umfunktioniert werden. Der Prozess 800 von 8A kann für RAMs verwendet werden, die keine Schreibfreigaben haben. Schreibfreigaben können jedoch verwendet werden, um die Last des Schreib-Muxing auf die RAMs zu übertragen. Mit einem solchen Ansatz können die RAMs 808 in jedem Zyklus beschrieben werden, während der Interleaver 804 und der Barrel-Shifter 806, die den RAMs 800 vorgeschaltet sind, nicht um den Faktor S vergrößert werden. Außerdem kann durch die Verwendung von Schreibfreigaben auf ein Schieberegister verzichtet werden, dessen Beispiel in 8B beschrieben ist. Wenn RAMs mit Schreibfreigaben verfügbar sind, kann die Verwendung der Schreibfreigaben im Vergleich zur Verwendung eines Schieberegisters die Anzahl der RAMs reduzieren.
  • Zusätzlich zu oder anstelle der Verwendung eines Schieberegisters oder von RAMs mit Schreibfreigabe besteht eine weitere Möglichkeit zur Einsparung von RAMs 808 darin, eine höhere PPC-Pipeline (z. B. 64PPC) zu verwenden, wenn die maximale 1D-Dimension kleiner ist (z. B. DTC32 (32<64)). Eine solche Konfiguration kann so aufgebaut sein, dass sie einem Schieberegister entspricht, mit dem Unterschied, dass die verschobenen Daten innerhalb eines Zyklus direkt aus der Pipe verfügbar sind. Dabei kann in jedem Zyklus ein Schreiben durchgeführt und in jedem Zyklus ein Lesen durchgeführt werden, um die Pipe mit mehreren Spalten und Zeilen der Daten vollständig zu belegen. In mindestens einer Ausführungsform kann dieser Ansatz verwendet werden, um die Speicheranzahl weiter zu reduzieren.
  • Wie hierin beschrieben, kann die Verwendung von Schreibfreigaben die Notwendigkeit eines Schieberegisters beseitigen. Zum Beispiel kann das Schieberegister 802 entfernt werden, da ein Abschnitt der RAM-Zellen der RAMs 808 bei jedem Zyklus geschrieben werden kann, wobei die RAMs 808 als physisches Schieberegister fungieren, wie in 8B. Nun Bezug nehmend auf 8B, beinhaltet 8B ein Flussdiagramm eines Beispiels eines Prozesses 820, der verwendet werden kann, um das spiralförmige Speicherzugriffsmuster von 6 zu implementieren, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung. Der Prozess 820 kann unter Verwendung eines Puffers oder superelastischen Puffers implementiert werden und kann denselben Barrel-Shifter für alle Pixelblocktypen wiederverwenden. Der Prozess 820 kann ein Schreibmuster verwenden, bei dem 2 von 4 in den Speicher geschriebenen Wörtern immer ein Duplikat der beiden anderen sind. Jedoch kann ein abwechselndes Muster aus ungeraden und geraden Zyklen an den Schreibfreigabeeingängen der RMAs 808 sicherstellen, dass nur eine notwendige Teilmenge der Datenwörter in den adressierten Speichereintrag geschrieben wird. Der Prozess 820 kann ein Lesemuster verwenden, das ein einfaches Muxen der Ausgangsdatenbits des RAM 808 bei ungeraden und geraden Zyklen für regelmäßige Pixelblöcke ermöglicht. Um den Puffer superelastisch zu machen, kann dieselbe Leseadresse für alle RAMs gemeinsam genutzt und bei jedem zweiten Zyklus inkrementiert werden, wenn ein Pixelblock mehr als einen Zyklus in Anspruch nimmt.
  • Das Beispiel in 8B bezieht sich auf S=2, wobei der Interleaver 804 eine Interleaving-Permutation an 64 Elementen durchführen kann, die von der Größe des Pixelblocks abhängen kann. Die 64 verschachtelten Elemente können dem Barrel-Shifter 806 bereitgestellt werden, der eine Größe von 32 (auf der Lese- und Schreibseite) über 64 paarweise gruppierte Elemente haben kann. Ein Schreiben von 64 Elementen kann in jedem Zyklus in die RAMs 808 durchgeführt werden, wobei eine Adresstiefe von 64, 4 Wörter pro Adresse mit Schreibfreigabe und eine Wortbitbreite von 20, die eine Platzhalterbreite sein kann, verwendet werden. Ein Lesen von 128 Elementen alle 2 Zyklen aus den RAMs 808 kann durchgeführt werden, um 128 Eingänge für den Mux 810 bereitzustellen. Der Mux 810 kann einen 2x1-Mux für 32 Ausgänge und einen 3x1-Mux für 32 Ausgänge beinhalten, der 64 Elemente pro Zyklus bereitstellt. Der Barrel-Shifter 812 kann eine Größe von 32 (auf der Lese- und Schreibseite) über 64 paarweise gruppierte Elemente haben und 64 Elemente zum Deinterleaven bereitstellen. Der Deinterleaver 814 kann eine Deinterleaving-Permutation an den 64 Elementen durchführen, die von der Größe des Pixelblocks abhängen kann und in jedem Zyklus 64 Elemente in Zeilen bereitstellt.
  • In mindestens einer Ausführungsform kann ein einzelner Pixelblock so klein sein, dass die Pixelelemente des Pixelblocks nicht eine einzige Adresse in einem RAM füllen, was dazu führt, dass die RAM-Zelle nur spärlich gefüllt ist. Unter Verwendung des obigen Beispiels können bei S=2 8x8-Pixelblöcke spärlich gefüllte Pixelblöcke und bei S=4 8x8-, 8x16- und 16x8-Pixelblöcke spärliche Pixelblöcke sein. Um dies zu berücksichtigen, kann der leseseitige Multiplexer 810 einen leichten Overhead beinhalten, um diese Fälle zu berücksichtigen. Zum Beispiel kann für S=2 ein 3x1-Mux verwendet werden. Der 3x1-Mux kann in eine 2x1-Mux-Stufe, gefolgt von einer weiteren 2x1-Stufe, zerlegt werden. Die erste 2x1-Mux-Stufe kann zwischen ungeraden und geraden RAM-Einträgen für nicht-dichte Blöcke wählen und einen Ausgang N erzeugen. Der zweite 2x1-Mux kann den ersten Mux für ungerade Zyklen umgehen. Zum Beispiel kann der Bypass verwendet werden, wenn keine Notwendigkeit besteht, die gelesenen Daten in zwei Zyklen zu senden (da sie in einen Zyklus passen) (z. B. bei spärlichen Pixelblöcken). In anderen Ausführungsformen kann den RAM-Eingangsdaten ein schreibseitiger Mux hinzugefügt werden. Bei spärlichen Pixelblöcken kann ein Barrel-Shift überflüssig sein, da sie so klein sind, dass sie vollständig in eine einzige Adresse für alle RAMs passen. Als weiteres Beispiel kann in mindestens einer Ausführungsform der Transponierungspuffer mit spärlichen Blöcken umgangen werden. Da alle Daten in einem Zyklus zur Verfügung stehen, kann eine Transponierung auch durch Swizzling der Daten in einem Zyklus erreicht werden (obwohl die Scheduler schwieriger werden können).
  • Elastischer Ping-Pong-Puffer
  • Der Puffer der Transponierungseinheit kann in Fällen, in denen verschiedene Pixelblockgrößen in der Pipeline vermischt sind, verbessert werden, indem vermieden wird, dass der aktuelle Pixelblock am Eingang der Transponierung verzögert wird, wenn der Puffer durch zuvor gesendete Pixelblöcke noch stark ausgelastet ist. In mindestens einer Ausführungsform können Transponierungsoperationen unter Verwendung eines elastischen Ping-Pong-Puffers durchgeführt werden, der einen FIFO-basierten Ansatz implementiert, der eine feinkörnige Abstimmung der Puffergrößen zwischen 1D-Transformationen ermöglicht. In mindestens einer Ausführungsform können die Puffergrößen in feinkörnigen Faktoren der maximal unterstützten Transformationsgröße, zum Beispiel 1,375, einstellbar sein. Beispielhaft und ohne Einschränkung können Puffergrößenfaktoren von 1,0 (für 16 PPC/32 PPC-Pipes) und 2,0 (für eine 64 PPC-Pipe) verwendet werden, um den Durchsatz und die Belegung anzupassen, die von den Rechenpipes für 32x32-Transformationen benötigt werden.
  • Unter Verwendung eines elastischen Ping-Pong-Puffers kann der RAM in einen Adressbereich zum Lesen gespeicherter Pixelblöcke, die vollständig geschrieben, aber noch nicht vollständig gelesen wurden, einen Schreibadressbereich, der aus teilweise gespeicherten Daten für den aktuell zu schreibenden Pixelblock besteht, und einen leeren Speicherbereich, der für die kommenden Pixelblöcke zur Verfügung steht, unterteilt werden. Wenn ein Pixelblock vollständig gelesen wurde, kann der Pixelblock an den freien Adressbereich des leeren Speichers zurückgegeben werden. Die Verwendung sich gegenseitig ausschließender Bereiche kann einen gleichzeitigen Lese- und Schreibkonflikt an derselben Adresse verhindern. Ein solcher Ansatz kann den doppelten Adressraum nutzen, der für die Speicherung eines einzelnen Pixelblocks der größten Größe verwendet wird, um die Anzahl der RAMs zu verringern, wie hierin beschrieben.
  • In mindestens einer Ausführungsform kann ein Transponierungspuffer mit Hilfe von Lese- und Schreibzeigern ähnlich einem synchronen FIFO-Verfahren elastisch gemacht werden, was als superelastischer Puffer oder Speicher bezeichnet werden kann. Die Latenzzeit eines Puffers für die Transponierung kann gemäß der Pixelblockgröße variabel sein. In einem herkömmlichen Ping-Pong-Puffer kann es beim Wechsel der Pixelblockgröße in einer Sequenz von Pixelblöcken zu einem Nachteil kommen. Kleinere Blöcke müssen warten, bis der größere Block geleert ist, bevor sie fortfahren können, und auf jeder Seite des Ping-Pong-Puffers kann nur ein Block gespeichert werden. Um den Effekt des Oszillierens zwischen kleineren und größeren Größen zu reduzieren, können offenbarte Ansätze die hierin beschriebene Organisation der Schreib- und Leseadressen nutzen, die alle zu schreibenden Pixelblöcke auf einen begrenzten Adressraum, beginnend bei 0, begrenzen kann. In mindestens einer Ausführungsform können, bis der Puffer auf der Schreibseite vollständig gefüllt ist, Daten für zusätzliche Pixelblöcke geschrieben werden, wenn noch genügend Platz vorhanden ist, solange die Daten früherer Pixelblöcke im selben Puffer nicht überschrieben werden. Dies kann erreicht werden, indem eine Tabelle der geschriebenen Pixelblöcke geführt wird, die auf die Leseseite übertragen werden sollen. Der erste Pixelblock im Schreibpuffer kann bei Versatz 0 beginnen. Der zweite kann bei einem Versatz beginnen, der der Adresstiefe (address depth - AD) des ersten Pixelblocks entspricht. Jeder weitere Pixelblock kann mit einem Versatz beginnen, der der Summe der Adresstiefen der vorherigen Pixelblöcke entspricht.
  • Bezug nehmend auf 9 beinhaltet 9 eine Tabelle 900, die ein Beispiel dafür veranschaulicht, wie Pixelblöcke mit Hilfe von Versätzen im selben Puffer gespeichert werden können. Der Versatz kann durch eine von der Hardware verwaltete Zählung realisiert werden. Die Zählung kann einer laufenden Summe der Adresstiefen des vorherigen Pixelblocks entsprechen. Jedes Mal, wenn ein Pixelblock vollständig geschrieben ist, kann eine Prüfung durchgeführt werden, um festzustellen, ob der Puffer auf der Leseseite noch belegt ist. Wenn die Prüfung ergibt, dass der Puffer auf der Leseseite nicht belegt ist, kann der Puffer zum Schreiben geschlossen und auf die Leseseite übertragen werden. Wie aus dem Beispiel hervorgeht, können mit einer einzigen Transponierung etwa dreißig Zyklen eingespart werden. Derselbe Betrag kann nochmals eingespart werden, wenn IDCT verarbeitet wird. Auf der Leseseite kann jeder Eintrag der Tabelle vollständig geleert werden, um zu melden, dass er nicht belegt ist. Es kann immer noch möglich sein, dass der Puffer den Eingang auf der Schreibseite anhält, wenn im Puffer nicht genug Platz für die Adresstiefe des eingehenden Pixelblocks vorhanden ist.
  • Wenn Versätze verwendet werden, verhält sich der Puffer wie ein FIFO, sodass die 4x4-, 4x8-, 8x4- und 8x8-Blöcke den Ping-Pong-Puffer durchlaufen können, anstatt ihn zu umgehen. Andernfalls können diese Blöcke verzögern, bis der Ping-Pong frei wird.
  • Tabelle 7 stellt eine verallgemeinerte Versatz-Formulierung bereit, die verwendet werden kann:
    Pixelblockgröße Versatz
    C1×R1 0
    C2×R2 AD(C1×R1)
    C3×R3 AD(C1×R1)+AD(C2×R2)
    C4×R4 AD(C1×R1)+AD(C2×R2)+AD(C3×R3)
    ... ...
    Cn×Rn AD(C1×R1)+AD(C2×R2)+...+AD(C(n-1)×R(n-1))
  • Es kann bereitgestellt werden, dass AD(C1×R1)+AD(C2×R2)+...+AD(C(n-1)×R(n-1))+AD(Cn×Rn) < = AD(ExE).
  • Das Konzept der Lese- und Schreibversätze kann auf Lese- und Schreibzeiger erweitert werden. Gemäß mindestens einer Ausführungsform kann, anstatt die Adressen bei jedem Pixelblock auf 0 zurückzusetzen, das Zeigeradressierungsschema verwendet werden, das den Adressraum AS des Puffers umschließt. Auf diese Weise kann eine harte Trennung zwischen den beiden Seiten des RAM entfallen. Wie bei den vorherigen Beispielen kann der Transponierungspuffer immer noch als Ping-Pong betrachtet werden, da ein Pixelblock vollständig geschrieben wird (Ping), bevor er im Transponierungsformat gelesen wird (Pong). Der verfügbare Platz im Puffer kann als elastisch bezeichnet werden, da der Puffer nicht in Teile fester Größe unterteilt ist, in denen ein Lesen oder Schreiben stattfinden muss. Superelastizität kann dadurch entstehen, dass während des Auslesens eines Pixelblocks nach und nach Platz für den Schreibzugriff freigesetzt wird. Ein Pixelblock muss nicht vollständig ausgelesen werden, bevor der Pixelblockspeicher wieder frei wird.
  • In mindestens einer Ausführungsform unterteilen die Zeiger den Adressraum in einen Schreibbereich, in den ein Pixelblock geschrieben wird, einen leeren oder freien Bereich, in dem Einträge vorhanden sind, die gefüllt werden können, und einen Lesebereich, in dem gefüllte Einträge zu lesen und zu senden sind. Nun Bezug nehmend auf 10, veranschaulicht 10 ein Beispiel, wie der Adressraum in einen Schreibbereich, einen Lesebereich und einen freien Bereich unterteilt werden kann, gemäß mindestens einigen Ausführungsformen der vorliegenden Offenbarung. In 10 ist ‚%‘ ein Modulo-Operator, und AS bezieht sich auf den Adressraum der RAMs. Die Bereichsschreibweise ‚[]‘ umschließt den AS, was [A, B] bedeutet, wenn A<B [A, AS-1] U [0, B] impliziert.
  • 10 zeigt auch Beispiele für die Zeiger, die einen Schreibbereichszeiger wr_ptr, einen Lesebereichszeiger rd_ptr und einen Freibereichszeiger wr_ptr_nxt beinhalten können. Der Schreibzeiger wr_ptr kann zum freien Bereichszeiger wr_ptr_nxt weitergeschaltet werden, wenn die letzten Pixel/Koeffizienten eines Pixelblocks geschrieben werden. Jedes Mal, wenn der physische RAM-Speicher gelesen wird, kann der Lesezeiger rd_ptr vorgerückt werden. Der superelastische Speicher kann mit der Zeit voll werden, vor allem, wenn es einen Rückstau gibt, der Leseoperationen verzögert. Umgekehrt wird der Puffer für die Transponierung leer, wenn keine Daten ankommen. Voll- und Leerzustände können zur Steuerung von Lesen und Schreiben unter Verwendung des Puffers verwendet werden und können mit Hilfe eines Bits oder Flags verfolgt werden, um Schreib- und Lesefreigaben während RAM-Operationen zu steuern. In mindestens einer Ausführungsform kann ein elastischer Ping-Pong-Puffer oder Speicher als voll gemeldet werden, wenn sich der Schreibbereich eines eingehenden Pixelblocks mit einem Lesebereich überschneidet und der Speicher nicht leer ist, was bedeutet, dass die Adresse des Lesezeigers in den Schreibbereich fällt und nicht genügend freier Platz für den gesamten zu schreibenden Pixelblock vorhanden ist. In mindestens einer Ausführungsform kann der Lesezeiger rd_ptr gleich dem Schreibzeiger wr_ptr sein, was bedeutet, dass der Puffer entweder voll oder leer ist. Wenn dieser Zustand durch eine Änderung des Lesezeigers rd_ptr verursacht wurde, kann dies bedeuten, dass der Puffer voll ist, da das Schreiben das Lesen eingeholt hat. Andernfalls, wenn dieser Zustand durch eine Änderung des Schreibzeigers wr_ptr verursacht wurde, kann dies bedeuten, dass der Puffer leer ist, da das Schreiben das Lesen überholt.
  • Während im Beispiel von 6 die Schreiboperationen für den 8x8-Pixelblock spiralförmig verlaufenden Adressen folgen und die Leseadressen für alle acht RAMs gleich sind, muss dies nicht für alle 8x8 gelten, die in den Speicher geschrieben werden. Zum Beispiel wird eine Sequenz von 8x8-Pixelblöcken angenommen, die in den Puffer gelangen. Für gerade 8x8-Pixelblöcke in der Sequenz kann das Schreiben unter Verwendung eines spiralförmigen Adressmusters durchgeführt werden und das Lesen unter Verwendung eines einheitlichen Adressmusters, wie in 6 beschrieben. Für die ungeraden 8x8-Pixelblöcke, die in den Puffer gelangen, kann das Schreiben jedoch unter Verwendung eines einheitlichen Adressmusters durchgeführt werden, und das Lesen kann unter Verwendung eines spiralförmigen Adressmusters erfolgen. Somit kann sich das Lese- und Schreibmuster für jeden zweiten in den Puffer eintretenden Pixelblock umkehren. Dieses Schema erfordert möglicherweise nur eine Puffergröße von 1x und vermeidet gleichzeitig Blockierungen. Sobald eine Datenspalte oder -zeile ausgelesen ist, kann das nächste Schreiben die soeben gelesenen Einträge füllen, indem dasselbe Adressierungsschema verwendet wird, das gerade für das Lesen verwendet wurde, ohne zu warten.
  • Optimierung von Fläche, Leistung und Timing durch Minimierung der Additionsterme
  • Wie hierin beschrieben, kann die Anzahl der Half-Butterflies, die zur Implementierung des Datenflusses 100 verwendet werden, reduziert werden, indem sie in geeigneter Weise auf die Phasen 208 verteilt werden. Die Anzahl der Additionsterme innerhalb einer Phase 208 kann auch mit den hierin beschriebenen Ansätzen reduziert werden. Parameter einer Phase 208 können H beinhalten, das sich auf die Anzahl der in der Phase 208 verwendeten Half-Butterflies bezieht, T, die Anzahl der Transformationen, die Half-Butterflies innerhalb einer Phase 208 verwenden (AV1- und VP9-Transformationen desselben Typs können getrennt gezählt werden, wenn beide implementiert sind), und ht, wobei t ein Index ist, der den in der Phase 208 unterstützten Transformationstypen gegeben wird, wobei 1 ≤ t ≤ T und ht die Anzahl der Half-Butterflies ist, die diese Transformation t innerhalb der Phase 208 verwendet. Daraus folgt, dass 1 ≤ t ≤ T 1 <_ ht ≤ H und es mindestens eine Transformation s geben muss, sodass hs = H andernfalls würde die Phase 208 weniger Half-Butterflies erfordern.
  • Angesichts der Parameter einer Phase 208 kann die Größe des Raums, in dem die Additionsterme minimiert werden, geschätzt werden. Jede gemeinsam genutzte Half-Butterfly-Schaltung kann zwei Multiplexer beinhalten. Ein Mux kann den linken cos A von (X*cos A + Y*cos B) auswählen, der andere den rechten cos B. Da die Addition kommutativ ist, können diese linken und rechten Terme getauscht werden, wodurch viele mögliche Anordnungen entstehen. Wenn eine Transformation ht Half-Butterflies erfordert, dann ist die Links-Rechts-Kombination ihrer Terme 2ht . Betrachten wir alle T-Transformationen, so erweitern sich die möglichen Kombinationen gemäß Gleichung (1): 2 h 1 2 h 2 2 h T = 2 Σ t = 1 T h t .
    Figure DE102022120207A1_0008
  • Angesichts von H Half-Butterflies kann für einen bestimmten Transformationstyp-Index t eine Teilmenge von ht Half-Butterflies gewählt werden, um sie zu verteilen. Die Anzahl der möglichen Teilmengen i kann der Gleichung (2) entsprechen: ( H h t ) = H ! ( H h t ) ! h t ! .
    Figure DE102022120207A1_0009
  • Die gewählte Teilmenge i der Half-Butterflies kann auf ht! Weisen permutiert werden, wobei eine Reihe von Kombinationen für die Transformation übrig bleibt, die Gleichung (3) entsprechen können: 2 h t ( H h t ) h t ! = 2 h t H ! h t ! ( H h t ) ! h t ! = 2 h t H ! ( H h t ) ! .
    Figure DE102022120207A1_0010
  • Um diesen Raum zu verkleinern, kann eine der Transformationen beliebig gewählt und ihre Half-Butterflies in der Reihenfolge ihrer Half-Butterflies sowie in der Links-Rechts-Verteilung ihrer Argumente fixiert werden. Zum Beispiel kann eine Transformation gewählt werden, die die maximale Anzahl von Half-Butterflies H verwendet, sodass die obigen Kombinationen durch geteilt werden können: 2HH!. Dies kann zu einer Anzahl von Kombinationen für eine bestimmte Phase 208 führen, die Gleichung (4) entspricht: 2 Σ t = 1 T h t 2 H H ! t = 1 T H ! ( H h t ) !
    Figure DE102022120207A1_0011
  • Bei diesen Kombinationen kann die Anzahl der von Null verschiedenen Additionsterme minimiert werden, indem eine Suche über die Kombinationen durchgeführt wird. In mindestens einer Ausführungsform kann ein computergestütztes Entwurfswerkzeug (computer-aided design - CAD) für den Entwurf von Schaltungen den obigen Ansatz oder die Heuristik implementieren, um die Anzahl der Addierer zu bestimmen und/oder zu reduzieren.
  • Nun Bezug nehmend auf 11, umfasst jeder Block des Verfahrens 1100 und anderer hierin beschriebener Verfahren einen Rechenprozess, der unter Verwendung einer beliebigen Kombination von Hardware, Firmware und/oder Software durchgeführt werden kann. Beispielsweise können verschiedene Funktionen von einem Prozessor durchgeführt werden, der im Speicher und/oder in einer oder mehreren Schaltungen gespeicherte Anweisungen ausführt. Die Verfahren können auch, mindestens teilweise, als computerverwendbare Anweisungen, die auf Computerspeichermedien gespeichert sind, durchgeführt werden. Die Verfahren können durch eine eigenständige Anwendung, einen Dienst oder einen gehosteten Dienst (alleinstehend oder in Kombination mit einem anderen gehosteten Dienst) oder ein Plug-In für ein anderes Produkt bereitgestellt sein, um nur einige zu nennen. Die Verfahren können zusätzlich oder alternativ von einem System oder einer Kombination von Systemen durchgeführt werden, einschließlich, aber nicht beschränkt auf die hier beschriebenen.
  • 11 ist ein Flussdiagramm, das ein Verfahren 1100 zum Betrieb einer Videoverarbeitungspipeline von Phasen unter Verwendung gemeinsam genutzter Hardwareressourcen zeigt, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Das Verfahren 1100 beinhaltet im Block B1102 das Bereitstellen eines Pixelblocks für eine Videoverarbeitungspipeline. Zum Beispiel kann der Scheduler 116 einen Pixelblock an einem Eingang einer Quantisierungs- und Transformationseinheit bereitstellen, die den Datenfluss 100 von 1 implementiert. Das Verfahren 1100 beinhaltet im Block B1104 das Auswählen und Konfigurieren eines Satzes von Phasen, um eine Transformation an dem Pixelblock basierend auf einem oder mehreren Verarbeitungsparametern durchzuführen. Zum Beispiel können die Konfigurationsschaltungen 202 einen Satz der Phasen 208 auswählen und konfigurieren, um eine Transformation an dem Pixelblock basierend auf einem oder mehreren der Verarbeitungsparameter 206 durchzuführen. Das Verfahren 1100 beinhaltet im Block B1104 das Durchführen der Transformation unter Verwendung des Satzes der Phasen. Zum Beispiel kann die Quantisierungs- und Transformationseinheit die Transformation unter Verwendung des Satzes der Phasen 208 durchführen, die unter Verwendung der Konfigurationsschaltungen 202 ausgewählt und dazu konfiguriert sind.
  • BEISPIELHAFTE RECHENVORRICHTUNG
  • 12 ist ein Blockdiagramm einer beispielhaften Rechnervorrichtung 1200, das zur Verwendung bei der Umsetzung einiger Ausführungsformen der vorliegenden Offenbarung geeignet ist. Rechnervorrichtung 1200 kann Verbindungssystem 1202 enthalten, das die folgenden Geräte direkt oder indirekt koppelt: Speicher 1204, einen oder mehrere Zentralprozessoren (CPUs) 1206, einen oder mehrere Grafikprozessoren (GPUs) 1208, eine Kommunikationsschnittstelle 1210, Eingangs-/Ausgangs (E/A)-Ports 1212, Eingabe-/Ausgabekomponenten 1214, ein Netzteil 1216, eine oder mehrere Darstellungskomponenten 1218 (z. B. Displays) und eine oder mehrere Logikeinheiten 1220. In mindestens einer Ausführungsform kann/können die Rechenvorrichtung(en) 1200 eine oder mehrere virtuelle Maschinen (VM) umfassen und/oder jede ihrer Komponenten kann aus virtuellen Komponenten bestehen (z. B. virtuelle Hardwarekomponenten).Nicht einschränkende Beispiele können eine oder mehrere GPUs 1208 eine oder mehrere vGPUs umfassen, eine oder mehrere CPUs 1206 können eine oder mehrere vCPUs umfassen und/oder eine oder mehrere Logikeinheiten 1220 können eine oder mehrere virtuelle Logikeinheiten umfassen. Die Rechenvorrichtung 1200 kann diskrete Komponenten (z. B. eine vollständigen, der Rechenvorrichtung 1200 zugeordneten GPU), virtuelle Komponenten (z. B. einen Teil einer der Rechenvorrichtung 1200 zugeordneten GPU) oder eine Kombination davon beinhalten.
  • Obwohl die verschiedenen Blöcke der 12 als über Verbindungssystem 1202 mit Leitungen verbunden angezeigt werden, soll dies nicht als einschränkend gedacht sein und dient nur der Übersichtlichkeit. In einigen Ausführungsformen kann beispielsweise eine Darstellungskomponente 1218, wie z. B. ein Anzeigegerät, als E/A-Komponente 1214 betrachtet werden (z. B. wenn es sich bei dem Display um einen Touchscreen handelt). Als weiteres Beispiel können die CPUs 1206 und/oder GPUs 1208 Speicher enthalten (z. B. kann der Speicher 1204 neben dem Speicher der GPUs 1208, der CPUs 1206 und/oder anderer Komponenten repräsentativ für ein Speichergerät sein). Mit anderen Worten ist die Rechenvorrichtung aus 12 lediglich veranschaulichend. Es wird nicht zwischen Kategorien wie „Workstation“, „Server“, „Laptop“, „Desktop“, „Tablet“, „Client-Gerät“, „Mobilgerät“, „Handheld-Gerät“, „Spielkonsole“, „elektronisches Steuergerät (electronic control unit - ECU)“, „Virtual-Reality-System“ und/oder anderen Geräte- oder Systemtypen unterschieden, da alle im Rahmen der Rechenvorrichtung aus 12 in Betracht gezogen werden.
  • Das Verbindungssystem 1202 kann eine oder mehrere Verbindungen oder Busse darstellen, wie beispielsweise einen Adressbus, einen Datenbus, einen Steuerbus oder eine Kombination davon. Das Verbindungssystem 1202 kann einen oder mehrere Bus- oder Verbindungstypen beinhalten, wie beispielsweise einen Bus mit Industriestandardarchitektur (industry standard architecture - ISA), einen Bus mit erweiterter Industriestandardarchitektur (extended industry standard architecture - EISA), einen Bus der Video Electronic Standards Association (VESA), einen Bus für Verschaltung einer Periphärkomponente (PCI), ein Bus für Expressverschaltung einer Periphärkomponente (PCle) und/oder eine andere Art von Bus oder Verbindung. In einigen Ausführungsformen gibt es direkte Verbindungen zwischen Komponenten. Als Beispiel kann die CPU 1206 direkt an den Speicher 1204 angeschlossen werden. Außerdem kann die CPU 1206 direkt an die GPU 1208 angeschlossen werden. Wo eine direkte oder Punkt-zu-Punkt-Verbindung zwischen Komponenten besteht, kann das Verbindungssystem 1202 eine PCIe-Verbindung beinhalten, um die Verbindung auszuführen. In diesen Beispielen muss kein PCI-Bus in der Rechenvorrichtung 1200 beinhaltet sein.
  • Der Speicher 1204 kann beliebige von vielfältigen computerlesbaren Medien beinhalten. Die computerlesbaren Medien können beliebige verfügbare Medien sein, auf die durch die Rechenvorrichtung 1200 zugegriffen werden kann. Die computerlesbaren Medien können sowohl flüchtige als auch nichtflüchtige Medien sowie entfernbare und nicht entfernbare Medien beinhalten. Beispielhaft und nicht einschränkend können die computerlesbaren Medien Computerspeichermedien und Kommunikationsmedien umfassen.
  • Das Computerspeichermedium kann sowohl flüchtige als auch nichtflüchtige Medien und/oder wechselbare und nicht wechselbare Medien enthalten, die in jedem Verfahren oder Technologie zur Speicherung von Informationen wie computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen und/oder andere Datentypen implementiert sind. Zum Beispiel kann der Speicher 1204 computerlesbare Anweisungen speichern (die z. B. ein Programm(e) und/oder ein Programmelement(e) darstellen), wie etwa ein Betriebssystem. Zu den Speichermedien für Computer gehören unter anderem RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, Digital Versatile Disks (DVD) oder andere optische Datenträger, Magnetkassetten, Magnetband, Magnetplattenspeicher oder andere magnetische Speichergeräte, oder jedes andere Medium, das zum Speichern der gewünschten Informationen verwendet werden kann und auf das die Rechenvorrichtung 1200 zugreifen kann. Im hierin verwendeten Sinne umfassen Computerspeichermedien keine Signale an sich.
  • Die Computerspeichermedien können computerlesbare Anweisungen, Datenstrukturen, Programmmodule und/oder andere Datentypen in einem modulierten Datensignal wie etwa einer Trägerwelle oder einem anderen Transportmechanismus verkörpern und beinhalten beliebige Informationsliefermedien. Der Begriff „moduliertes Datensignal“ kann sich auf ein Signal beziehen, bei dem eine oder mehrere seiner Eigenschaften so eingestellt oder geändert wurden, dass Informationen in dem Signal codiert sind. Als Beispiel und nicht einschränkend können die Computerspeichermedien drahtgebundene Medien beinhalten, wie etwa ein drahtgebundenes Netzwerk oder eine direkte drahtgebundene Verbindung, und drahtlose Medien, wie beispielsweise akustische, RF-, Infrarot- und andere drahtlose Medien. Kombinationen aller Vorstehenden sollen ebenfalls im Umfang computerlesbarer Medien eingeschlossen sein.
  • Die CPU(s) 1206 können so konfiguriert werden, dass sie mindestens einige der computerlesbaren Anweisungen zur Steuerung einer oder mehrerer Komponenten des Rechners 1200 durchführen, um eine oder mehrere der hier beschriebenen Methoden und/oder Prozesse durchzuführen. Die CPU(s) 1206 kann bzw. können jeweils einen oder mehrere Kerne (z. B. einen, zwei, vier, acht, achtundzwanzig, zweiundsiebzig usw.) beinhalten, die dazu in der Lage sind, eine Mehrzahl von SoftwareThreads gleichzeitig zu verarbeiten. Die CPU(s) 1206 können jede Art von Prozessor enthalten und je nach Art der implementierten Rechnervorrichtung 1200 verschiedene Typen von Prozessoren enthalten (z. B. Prozessoren mit weniger Kernen für Mobilgeräte und Prozessoren mit mehr Kernen für Server). Je nach Rechnervorrichtung 1200 kann es sich beispielsweise um einen Advanced RISC Machine (ARM)-Prozessor mit reduziertem Instruction Set Computing (RISC) oder einen x86-Prozessor mit komplexem Instruction Set Computing (CISC) handeln. Die Rechnervorrichtung 1200 kann zusätzlich zu einem oder mehreren Mikroprozessoren oder zusätzlichen Koprozessoren, wie z. B. mathematischen Koprozessoren, eine oder mehrere CPUs 1206 enthalten.
  • Die GPU(s) 1208 können darüber hinaus oder alternativ von den CPU(s) 1206 so konfiguriert werden, dass sie mindestens einige computerlesbaren Anweisungen zur Steuerung einer oder mehrerer Komponenten des Rechners 1200 durchführen, um eine oder mehrere der hier beschriebenen Methoden und/oder Prozesse durchzuführen. Eine oder mehrere GPU(s) 1208 können eine integrierte GPU (z. B. mit einer oder mehreren CPU(s) 1206) sein und/oder eine oder mehrere GPU(s) 1208 können eine separate GPU sein. In Ausführungsformen können eine oder mehrere GPU(s) 1208 ein Coprozessor einer oder mehrerer CPU(s) 1206 sein. Die GPU(s) 1208 können von der Rechnervorrichtung 1200 zum Rendern von Grafiken (z. B. 3D-Grafiken) oder Durchführen allgemeiner Berechnungen verwendet werden. Zum Beispiel können die GPU(s) 1208 für Universalberechnungen auf GPUs (GPGPU) verwendet werden. Die GPU(s) 1208 können Hunderte oder Tausende von Kernen beinhalten, die in der Lage sind, Hunderte oder Tausende von Softwarethreads gleichzeitig zu handhaben. Die GPU(s) 1208 können als Reaktion auf Rendering-Befehle (z. B. Rendering-Befehle von den CPU(s) 1206, die über eine Host-Schnittstelle empfangen wurde) Pixeldaten für Ausgabebilder generieren. Die GPU(s) 1208 können Grafikspeicher beinhalten, wie etwa Anzeigespeicher, um Pixeldaten oder andere geeignete Daten zu speichern, wie etwa GPGPU-Daten. Der Displayspeicher kann als Teil des Speichers 1204 enthalten sein. Die GPU(s) 1208 kann bzw. können zwei oder mehr GPUs beinhalten, die parallel arbeiten (z. B. über eine Verbindung). Der Link kann die GPUs direkt verbinden (z. B. unter Verwendung von NVLINK) oder kann die GPUs über ein Switch verbinden (z. B. unter Verwendung von NVSwitch). Wenn sie miteinander kombiniert werden, kann jede GPU 1208 Pixeldaten oder GPGPU-Daten für verschiedene Abschnitte einer Ausgabe oder für verschiedene Ausgaben (z. B. eine erste GPU für ein erstes Bild und eine zweite GPU für ein zweites Bild) erzeugen. Jede GPU kann ihren eigenen Speicher beinhalten oder kann Speicher mit anderen GPUs teilen.
  • Die Logikeinheiten 1220 können darüber hinaus oder alternativ von den CPU(s) 1206 und/oder den GPU(s) 1208 so konfiguriert werden, dass sie mindestens einige computerlesbaren Anweisungen zur Steuerung einer oder mehrerer Komponenten des Rechners 1200 durchführen, um eine oder mehrere der hier beschriebenen Methoden und/oder Prozesse durchzuführen. In Ausführungsformen können die CPU(s) 1206, die GPU(s) 1208 und/oder die Logikeinheiten 1220 diskret oder gemeinsam jede beliebige Kombination der Verfahren, Prozesse und/oder Teile davon durchführen. Eine oder mehrere der Logikeinheiten 1220 können Teil einer oder mehrerer CPU(s) 1206 und/oder GPU(s) 1208 sein und/oder eine oder mehrere der Logikeinheiten 1220 können diskrete Komponenten oder auf andere Weise außerhalb der CPU(s) 1206 und/oder der GPU(s) 1208 sein. In Ausführungsformen können eine oder mehrere Logikeinheiten 1220 ein Coprozessor einer oder mehrerer CPU(s) 1206 und/oder einer oder mehrerer GPU(s) 1208 sein.
  • Beispiele für die Logikeinheiten 1220 enthalten einen oder mehrere Prozessorkerne und/oder Komponenten davon, wie Datenverarbeitungseinheiten (data processing units - DPUs), Tensor Cores (TCs), Tensor Processing Units (TPUs), Pixel Visual Cores (PVCs), Vision Processing Units (VPUs), Graphics Processing Clusters (GPCs), Texture Processing Clusters (TPCs), Streaming Multiprozessoren (Streaming Multiprocessors - SMs), Tree Traversal Units (TTUs), Artificial Intelligence Accelerators (AIAS), Deep Learning Accelerators (DLAs), Arithmetic-Logic Units (ALUs), Application-Specific Integrated Circuits (ASICs), Floating Point Units (FPUs), Eingabe/Ausgabe (E/A)-Elemente (input/output - I/O), Peripheral Component Interconnect (PCI)- oder Peripheral Component Interconnect Express (PCIe)-Elemente und/oder ähnliches.
  • Die Kommunikationsschnittstelle 1210 kann einen oder mehrere Empfänger, Sender und/oder Transceiver umfassen, die es der Rechnervorrichtung 1200 ermöglichen, über ein elektronisches Kommunikationsnetzwerk, einschließlich drahtgebundener und/oder drahtloser Kommunikation, mit anderen Rechnervorrichtungen zu kommunizieren. Die Kommunikationsschnittstelle 1210 kann Komponenten und Funktionalität beinhalten, um eine Kommunikation über eine Anzahl unterschiedlicher Netzwerke zu ermöglichen, wie etwa drahtlose Netzwerke (z. B. Wi-Fi, Z-Wave, Bluetooth, Bluetooth LE, ZigBee usw.), drahtgebundene Netzwerke (z. B. Kommunikation über Ethernet oder InfiniBand), Weitverkehrsnetzwerke mit geringer Leistung (z. B. LoRaWAN, SigFox usw.) und/oder das Internet. In einer oder mehreren Ausführungsformen können Logikeinheiten 1220 und/oder Kommunikationsschnittstelle 1210 eine oder mehrere Datenverarbeitungseinheiten (DPUs) umfassen, um über ein Netzwerk und/oder durch das Verbindungssystem 1202 direkt zu (z. B. einem Speicher von) einer oder mehreren GPU(s) 1208 empfangene Daten zu übermitteln.
  • Die E/A-Ports 1212 können ermöglichen, dass die Rechnervorrichtung 1200 logisch mit anderen Geräten gekoppelt wird, einschließlich der E/A-Komponenten 1214, der Darstellungskomponente(n) 1218 und/oder anderen Komponenten, von denen einige in die Rechnervorrichtung 1200 eingebaut (z. B. integriert) sein können. Die E/A-Komponenten 1214 umfassen ein Mikrofon, eine Maus, eine Tastatur, einen Joystick, ein Gamepad, Gamecontroller, Satellitenschüssel, Scanner, Drucker, drahtloses Gerät, usw. Die E/A-Komponenten 1214 können eine natürliche Benutzeroberfläche (natural user interface - NUI) bereitstellen, die Luftgesten, Stimme oder andere physiologische Eingaben verarbeitet, die von einem Benutzer generiert werden. In einigen Fällen können Eingaben zur weiteren Verarbeitung an ein geeignetes Netzwerkelement übertragen werden. Eine NUI kann eine beliebige Kombination aus Spracherkennung, Tasterkennung, Gesichtserkennung, biometrischer Erkennung, Gestenerkennung sowohl auf dem Bildschirm als auch in der Nähe des Bildschirms, Luftgesten, Kopf- und Augenverfolgung und Touch-Erkennung (wie unten näher beschrieben) implementieren, die mit einem Display der Rechenvorrichtung 1200 verbunden ist. Die Rechenvorrichtung 1200 kann Tiefenkameras umfassen, wie stereoskopische Kamerasysteme, Infrarotkamerasysteme, RGB-Kamerasysteme, Touchscreen-Technologie und Kombinationen davon, zur Gestendetektion und -erkennung. Zusätzlich kann die Rechenvorrichtung 1200 Beschleunigungsmesser oder Gyroskope (z. B. als Teil einer Trägheitsmesseinheit (inertia measurement unit - IMU)) beinhalten, die eine Detektion von Bewegung ermöglichen. In einigen Beispielen kann die Ausgabe der Beschleunigungsmesser oder Gyroskope von der Rechenvorrichtung 1200 verwendet werden, um immersive Augmented Reality oder Virtual Reality darzustellen.
  • Die Stromversorgung 1216 kann eine fest verdrahtete Stromversorgung, eine Batteriestromversorgung oder eine Kombination davon beinhalten. Das Netzteil 1216 kann die Rechnervorrichtung 1200 mit Strom versorgen, damit die Komponenten der Rechnervorrichtung 1200 funktionieren können.
  • Die Darstellungskomponente(n) 1218 kann bzw. können eine Anzeige (z. B. einen Monitor, einen Touchscreen, einen Fernsehbildschirm, eine Heads-up-Anzeige (HUD), andere Anzeigetypen oder eine Kombination davon), Lautsprecher und/oder andere Darstellungskomponenten beinhalten. Die Darstellungskomponenten 1218 können Daten von anderen Komponenten (z. B. GPU(s) 1208, CPU(s) 1206, DPUs, usw.) empfangen und die Daten ausgeben (z. B. als Bild, Video, Ton usw.).
  • BEISPIELHAFTES RECHENZENTRUM
  • 13 veranschaulicht ein beispielhaftes Rechenzentrum 1300, das in mindestens einer Ausführungsform der vorliegenden Offenbarung verwendet werden kann. Das Rechenzentrum 1300 kann eine Rechenzentrumsinfrastrukturschicht 1310, eine Framework-Schicht 1320, eine Softwareschicht 1330 und/oder eine Anwendungsschicht 1340 beinhalten.
  • Wie in 13 gezeigt, kann die Infrastrukturschicht des Rechenzentrums 1310 einen Ressourcen-Orchestrator 1312, gruppierte Rechenressourcen 1314 und Knoten-Rechenressourcen (node computing ressources - „Knoten C.R.s“) 1316(1)-1316(N) beinhalten, wobei „N“ eine beliebige ganze, positive Zahl darstellt. In mindestens einer Ausführungsform können die Knoten-C.R.s 1316(1)-1316(N) eine beliebige Anzahl von Zentraleinheiten (CPUs) oder anderen Prozessoren (einschließlich DPUs, Beschleunigern, feldprogrammierbaren Gate-Arrays (FPGAs), Grafikprozessoren oder Grafikverarbeitungseinheiten (GPUs) usw.), Speichervorrichtungen (z. B. dynamischen Festwertspeicher), Speichervorrichtungen (z. B. Festkörper- oder Festplattenlaufwerke), Netzwerk-Eingangs-/Ausgangsvorrichtungen („NW E/A“), Netzwerk-Switches, virtuelle Maschinen („VMs“), Leistungsmodule und/oder Kühlmodule usw. beinhalten, sind aber nicht darauf beschränkt. In einigen Ausführungsformen können ein oder mehrere Knoten-C.R.s unter den Knoten-C.R.s 1316(1)-1316(N) ein Server mit einer oder mehreren der oben genannten Rechenleistungen sein. Darüber hinaus können in einigen Ausführungsformen die Knoten C.R.s 1316(1)-13161(N) eine oder mehrere virtuelle Komponenten beinhalten, wie vGPUs, vCPUs und/oder dergleichen, und/oder einer oder mehrere der Knoten C.R.s 1316(1)-1316(N) können einer virtuellen Maschine (VM) entsprechen.
  • In mindestens einer Ausführungsform können die gruppierten Rechenressourcen 1314 separate Gruppierungen von Knoten-C.R.s 1316 beinhalten, die in einem oder mehreren Racks (nicht gezeigt) oder in vielen Racks in Datenzentren an verschiedenen geografischen Standorten (ebenfalls nicht gezeigt) untergebracht sind. Separate Gruppierungen von Knoten-C.R.s 1316 innerhalb der gruppierten Rechenressourcen 1314 gruppierte Rechen-, Netzwerk-, Speicher- oder Storage-Ressourcen beinhalten, die dazu konfiguriert oder zugewiesen sein können, eine oder mehrere Arbeitslasten zu unterstützen. In mindestens einer Ausführungsform können mehrere Knoten-C.R.s 1316, die CPUs, GPUs, DPUs und/oder andere Prozessoren beinhalten, in einem oder mehreren Racks gruppiert werden, um Rechenressourcen zur Unterstützung einer oder mehrerer Arbeitslasten bereitzustellen. Das eine oder mehrere Racks können auch eine beliebige Anzahl von Leistungsmodulen, Kühlmodulen und Netz-Switches in beliebiger Kombination beinhalten.
  • Der Ressourcenorchestrator 1312 kann einen oder mehrere Knoten C.R.s 1316(1)-1316(N) und/oder gruppierte Rechenressourcen 1314 konfigurieren oder anderweitig steuern. In mindestens einer Ausführungsform kann der Ressourcenorchestrator 1312 eine Software-Design-Infrastruktur (SDI) Verwaltungseinheit für das Rechenzentrum 1300 beinhalten. Der Ressourcenorchestrator 1312 kann Hardware, Software oder einer Kombination davon beinhalten.
  • In mindestens einer Ausführungsform, wie in 13 gezeigt, kann die Framework-Schicht 1320 einen Job-Scheduler 1344, einen Konfigurationsmanager 1334, einen Ressourcenmanager 1336 und/oder ein verteiltes Dateisystem 1338 beinhalten. Die Framework-Schicht 1320 kann ein Framework zur Unterstützung der Software 1332 der Softwareschicht 1330 und/oder einer oder mehrerer Anwendungen 1342 der Anwendungsschicht 1340 beinhalten. Die Software 1332 bzw. die Anwendung 1342 können webbasierte Dienstsoftware oder Anwendungen beinhalten, wie sie von Amazon Web Services, Google Cloud und Microsoft Azure bereitgestellt werden. Die Framework-Schicht 1320 kann eine Art von freiem und quelloffenem Software-Webanwendungs-Framework sein, wie z. B. Apache Spark™ (im Folgenden „Spark“), das ein verteiltes Dateisystem 1338 für die Verarbeitung großer Datenmengen (z. B. „Big Data“) nutzen kann, ist aber nicht darauf beschränkt. In mindestens einer Ausführungsform kann der Job-Scheduler 1344 einen Spark-Treiber beinhalten, um die Planung von Arbeitslasten zu erleichtern, die von verschiedenen Schichten des Rechenzentrums 1300 unterstützt werden. Der Konfigurationsmanager 1334 in der Lage sein, verschiedene Schichten zu konfigurieren, wie z. B. die Softwareschicht 1330 und die Framework-Schicht 1320, die Spark und ein verteiltes Dateisystem 1338 zur Unterstützung einer groß angelegten Datenverarbeitung beinhaltet. Der Ressourcenverwalter 1336 kann in der Lage sein, geclusterte oder gruppierte Rechenressourcen zu verwalten, die zur Unterstützung des verteilten Dateisystems 1338 und des Schedulers 1344 zugeordnet sind. In mindestens einer Ausführungsform können geclusterte oder gruppierte Berechnungsressourcen eine gruppierte Berechnungsressource 1314 auf der Rechenzentrumsinfrastrukturschicht 1310 beinhalten. Der Ressourcenverwalter 1336 kann sich mit dem Ressourcenorchestrator 1312 abstimmen, um diese zugeordneten oder zugewiesenen Computerressourcen zu verwalten.
  • In mindestens einer Ausführungsform kann die in der Softwareschicht 1330 beinhaltete Software 1332 Software beinhalten, die mindestens von Teilen der Knoten C.R.s 1316(1)-1316(N), den gruppierten Rechenressourcen 1314 und/oder dem verteilten Dateisystem 1338 der Framework-Schicht 1320 verwendet wird. Zu einem oder mehreren Typen von Software können Software zum Durchsuchen von Internet-Webseiten, Software zum Scannen von E-Mails auf Viren, Datenbank-Software und Software für Streaming-Videoinhalte gehören, ohne darauf beschränkt zu sein.
  • In mindestens einer Ausführungsform kann/können die Anwendung(en) 1342, die in der Anwendungsschicht 1340 enthalten ist/sind, eine oder mehrere Arten von Anwendungen beinhalten, die von mindestens Teilen der Knoten-C.R.s 1316(1)-1316(N), gruppierten Berechnungsressourcen 1314 und/oder dem verteilten Dateisystem 1338 der Frameworkschicht 1320 verwendet werden. Eine oder mehrere Arten von Anwendungen können eine beliebige Anzahl einer Genomikanwendung, einer kognitiven Rechenanwendung und einer maschinellen Lernanwendung umfassen, die Trainings- oder Ableitungssoftware beinhaltet, Framework-Software des maschinellen Lernens (z. B. PyTorch, TensorFlow, Caffe usw.) oder andere maschinelle Lernanwendungen beinhalten, ohne darauf beschränkt zu sein, die in Verbindung mit einer oder mehreren Ausführungsformen verwendet werden.
  • In mindestens einer Ausführungsform können Konfigurationsverwalter 1334, Ressourcenverwalter 1336 und Ressourcenorchestrierer 1312 eine beliebige Anzahl und Art von selbstmodifizierenden Handlungen auf Grundlage einer beliebigen Menge und Art von Daten umsetzen, die auf jede technisch machbare Weise erfasst werden. Selbstmodifizierende Handlungen können einen Rechenzentrumsbetreiber des Rechenzentrums 1300 dahingehend entlasten, möglicherweise schlechte Konfigurationsentscheidungen zu treffen und möglicherweise nicht ausgelastete und/oder schlecht funktionierende Abschnitte eines Rechenzentrums zu vermeiden.
  • Das Rechenzentrum 1300 kann Werkzeuge, Dienste, Software oder andere Ressourcen beinhalten, um ein oder mehrere Modelle des maschinellen Lernens zu trainieren oder Informationen unter Verwendung eines oder mehrerer Modelle des maschinellen Lernens gemäß einer oder mehreren in dieser Schrift beschriebenen Ausführungsformen vorherzusagen oder abzuleiten. Zum Beispiel kann/können ein Modell(e) für maschinelles Lernen trainiert werden, indem Gewichtungsparameter gemäß einer Architektur eines neuronalen Netzes unter Verwendung von Software und/oder Rechenressourcen berechnet werden, die vorstehend in Bezug auf das Rechenzentrum 1300 beschrieben sind. In mindestens einer Ausführungsform können trainierte oder eingesetzte Modelle für maschinelles Lernen, die einem oder mehreren neuronalen Netzen entsprechen, verwendet werden, um Informationen unter Verwendung der vorstehend in Bezug auf das Rechenzentrum 1300 beschriebenen Ressourcen zu inferenzieren oder vorherzusagen, indem Gewichtungsparameter verwendet werden, die durch eine oder mehrere hierin beschriebene Trainingstechniken berechnet werden, sind aber nicht darauf beschränkt.
  • In mindestens einer Ausführungsform kann das Rechenzentrum 1300 CPUs, anwendungsspezifische integrierte Schaltungen (ASICs), GPUs, FPGAs und/oder andere Hardware (oder entsprechende virtuelle Rechenressourcen) verwenden, um das Training und/oder die Inferenzierung mit den oben beschriebenen Ressourcen durchzuführen. Darüber hinaus können eine oder mehrere der vorstehend beschriebenen Software- und/oder Hardware-Ressourcen als Dienst konfiguriert sein, um Benutzern das Trainieren oder Durchführen des Inferenzierens von Informationen zu ermöglichen, wie etwa Bilderkennung, Spracherkennung oder andere Dienste der künstlichen Intelligenz.
  • BEISPIELHAFTE NETZWERKUMGEBUNGEN
  • Netzwerkumgebungen, die für die Implementierung von Ausführungsformen der Offenbarung geeignet sind, können ein oder mehrere Client-Geräte, Server, N Attached Storage (NAS), andere Backend-Geräte und/oder andere Gerätetypen beinhalten. Die Client-Vorrichtungen, Server und/oder andere Vorrichtungstypen (z. B. jede Vorrichtung) können auf einer oder mehreren Instanzen der Rechenvorrichtung 1200 von 12 implementiert werden - z. B. kann jede Vorrichtung ähnliche Komponenten, Merkmale und/oder Funktionen der Rechenvorrichtung 1200 beinhalten. Zusätzlich können, wenn Backend-Vorrichtungen (z. B. Server, NAS usw.) implementiert sind, die Backend-Vorrichtungen als Teil eines Rechenzentrums 1300 enthalten sein, von dem ein Beispiel hierin in Bezug auf 13 ausführlicher beschrieben ist.
  • Komponenten einer Netzwerkumgebung können miteinander über ein oder mehrere Netzwerke kommunizieren, die drahtgebunden, drahtlos oder beides sein können. Das Netzwerk kann mehrere Netzwerke oder ein Netzwerk von Netzwerken beinhalten. Beispielsweise kann das Netzwerk ein oder mehrere Weitverkehrsnetzwerke (WAN), ein oder mehrere lokale Netzwerke (LANs), ein oder mehrere öffentliche Netzwerke wie das Internet und/oder ein öffentliches Telefonvermittlungsnetz (publich switched telephone network - PSTN) und/oder ein oder mehrere private Netzwerke beinhalten. Wenn das Netzwerk ein drahtloses Telekommunikationsnetz beinhaltet, können Komponenten wie eine Basisstation, ein Kommunikationsturm oder sogar Zugangspunkte (sowie andere Komponenten) eine drahtlose Konnektivität bereitstellen.
  • Kompatible Netzwerkumgebungen können eine oder mehrere Peer-to-Peer-Netzwerkumgebungen umfassen - in diesem Fall ist ein Server möglicherweise nicht in einer Netzwerkumgebung enthalten - und eine oder mehrere Client-Server-Netzwerkumgebungen - in diesem Fall können ein oder mehrere Server in einer Netzwerkumgebung enthalten sein. In Peer-to-Peer-Netzwerkumgebungen kann die hierin in Bezug auf einen oder mehrere Server beschriebene Funktionalität auf einer beliebigen Anzahl von Client-Vorrichtungen implementiert sein.
  • In mindestens einer Ausführungsform kann eine Netzwerkumgebung eine oder mehrere Cloud-basierte Netzwerkumgebungen, eine verteilte Rechenumgebung, eine Kombination davon usw. beinhalten. Eine Cloud-basierte Netzwerkumgebung kann eine Framework-Schicht, einen Job-Scheduler, einen Ressourcenmanager und ein verteiltes Dateisystem beinhalten, die auf einem oder mehreren Servern implementiert sind, die einen oder mehrere Kernnetzwerkserver und/oder Edge-Server beinhalten können. Eine Framework-Schicht kann ein Framework zur Unterstützung von Software einer Software-Schicht und/oder einer oder mehrerer Anwendungen einer Anwendungsschicht beinhalten. Die Software oder Anwendung(en) können jeweils Webbasierte Dienstsoftware oder Anwendungen beinhalten. In Ausführungsformen können eine oder mehrere der Client-Vorrichtungen die Web-basierte Dienstsoftware oder Anwendungen verwenden (z. B. durch Zugreifen auf die Dienstsoftware und/oder Anwendungen über eine oder mehrere Anwendungsprogrammierschnittstellen (API)). Bei der Framework-Schicht kann es sich um eine Art freies und quelloffenes Software-Webanwendungs-Framework handeln, das etwa ein verteiltes Dateisystem für die Verarbeitung großer Datenmengen (z. B. „Big Data“) verwenden kann, ist aber nicht darauf beschränkt.
  • Eine Cloud-basierte Netzwerkumgebung kann Cloud-Computing und/oder Cloud-Speicher bereitstellen, die eine beliebige Kombination von hierin beschriebenen Rechen- und/oder Datenspeicherfunktionen (oder einen oder mehrere Teile davon) ausführen. Jede dieser verschiedenen Funktionen kann über mehrere Standorte von zentralen oder Kernservern (z. B. von einem oder mehreren Rechenzentren, die über einen Staat, eine Region, ein Land, den Globus usw. verteilt sein können) verteilt sein. Wenn eine Verbindung zu einem Benutzer (z. B. einer Client-Vorrichtung) relativ nahe bei einem oder mehreren Edge-Servern ist, können ein oder mehrere Core-Server dem oder den Edge-Servern mindestens einen Teil der Funktionalität zuweisen. Eine Cloud-basierte Netzwerkumgebung kann privat sein (z. B. auf eine einzelne Organisation beschränkt), kann öffentlich sein (z. B. für viele Organisationen verfügbar) und/oder eine Kombination davon sein (z. B. eine Hybrid-Cloud-Umgebung).
  • Die Client-Vorrichtungen können mindestens einige der Komponenten, Merkmale und Funktionalitäten der hier in Bezug auf 12 beschriebenen Rechenvorrichtungen 1200 beinhalten. Als Beispiel und nicht einschränkend kann eine Client-Vorrichtung als Personal Computer (PC), Laptop-Computer, mobile Vorrichtung, Smartphone, Tablet-Computer, Smartwatch, tragbarer Computer, Personal Digital Assistant (PDA), MP3-Player, Virtual-Reality-Headset, System oder Vorrichtung zur globalen Positionsbestimmung (GPS), Videoplayer, Videokamera, Überwachungsvorrichtung oder -system, Fahrzeug, Boot, Flugschiff, virtuelle Maschine, Drohne, Roboter, tragbare Kommunikationsvorrichtung, Vorrichtung in einem Krankenhaus, Spielgerät oder -system, Unterhaltungssystem, Fahrzeugcomputersystem, eingebetteter Systemcontroller, Fernbedienung, Haushaltsgerät, Unterhaltungselektronikgerät, Workstation, Edge-Vorrichtung, eine beliebige Kombination dieser skizzierten Vorrichtungen oder jede andere geeignete Vorrichtung verkörpert sein.
  • Die Offenbarung kann im allgemeinen Kontext von Computercode- oder maschinenverwendbaren Anweisungen, einschließlich computer-ausführbarer Anweisungen wie Programmmodulen, die von einem Computer oder einem anderen Computer, wie einem Personal Data Assistent oder einem anderen Handheld-Gerät, ausgeführt werden, beschrieben werden. Im Allgemeinen beziehen sich Programmmodule einschließlich Routinen, Programme, Objekte, Komponenten, Datenstrukturen usw. auf Code, der bestimmte Aufgaben ausführt oder bestimmte abstrakte Datentypen implementiert. Die Offenbarung kann in einer Vielzahl von Systemkonfigurationen praktiziert werden, einschließlich Handheld-Vorrichtungen, Unterhaltungselektronik, Allzweckcomputern, spezielleren Rechenvorrichtungen usw. Die Offenbarung kann auch in verteilten Rechenumgebungen praktiziert werden, in denen Aufgaben von entfernten Verarbeitungsvorrichtungen, die über ein Kommunikationsnetz verbunden sind, durchgeführt werden.
  • Wie hier verwendet, sollte eine Nennung von „und/oder“ in Bezug auf zwei oder mehr Elemente so interpretiert werden, dass nur ein Element oder eine Kombination von Elementen gemeint ist. Zum Beispiel kann „Element A, Element B und/oder Element C“ nur Element A, nur Element B, nur Element C, Element A und Element B, Element A und Element C, Element B und Element C oder Elemente enthalten A, B und C. Außerdem kann „mindestens eines von Element A oder Element B“ mindestens eines von Element A, mindestens eines von Element B oder mindestens eines von Element A und mindestens eines von Element umfassen B. Ferner kann „mindestens eines von Element A und Element B“ mindestens eines von Element A, mindestens eines von Element B oder mindestens eines von Element A und mindestens eines von Element B beinhalten.
  • Der Gegenstand der vorliegenden Offenbarung wird hier mit Spezifität beschrieben, um die gesetzlichen Anforderungen zu erfüllen. Die Beschreibung selbst soll jedoch den Umfang dieser Offenbarung nicht einschränken. Vielmehr haben die Erfinder in Erwägung gezogen, dass der beanspruchte Gegenstand auch auf andere Weise verkörpert werden könnte, um andere Schritte oder Kombinationen von Schritten ähnlich den in diesem Dokument beschriebenen in Verbindung mit anderen gegenwärtigen oder zukünftigen Technologien einzuschließen. Obwohl die Begriffe „Schritt“ und/oder „Block“ hierin verwendet werden können, um verschiedene Elemente der verwendeten Verfahren zu bezeichnen, sollten die Begriffe darüber hinaus nicht so ausgelegt werden, dass sie eine bestimmte Reihenfolge zwischen oder zwischen verschiedenen hierin offenbarten Schritten implizieren, es sei denn, die Reihenfolge ist der einzelnen Schritte ist explizit beschrieben.

Claims (26)

  1. Verarbeitungsschaltung, umfassend: eine Videoverarbeitungspipeline von Phasen, wobei jede Phase eine Vielzahl von Half-Butterfly-Schaltungen (HB) aufweist, wobei die Phasen auswählbar und konfigurierbar sind, um Transformationen für eine Vielzahl von Transformationstypen an Pixelblöcken einer Vielzahl von Größen unter Verwendung der HB-Schaltungen durchzuführen, und jede Transformation durch einen sequentiellen Durchlauf durch mindestens einige der Phasen durchgeführt wird; und Konfigurationsschaltkreise, um einen Satz der Phasen auszuwählen und zu konfigurieren, um eine Transformation der Transformationen an einem Pixelblock basierend auf mindestens einer oder mehreren Dimensionen des Pixelblocks und einem Transformationstyp der Transformation durchzuführen.
  2. System nach Anspruch 1, wobei jeder Transformationstyp Stufen von Berechnungen für den Transformationstyp definiert und eine Phase der Phasen mindestens einen Abschnitt einer Stufe der Stufen für eine Vielzahl der Transformationstypen implementiert.
  3. System nach Anspruch 1 oder 2, wobei der Konfigurationsschaltkreis ferner dazu dient, den Satz der Phasen so zu konfigurieren, dass die Transformation basierend auf mindestens einer dem Pixelblock zugeordneten Bittiefe und einem dem Pixelblock zugeordneten Codierungsformat durchgeführt wird.
  4. System nach einem der vorhergehenden Ansprüche, wobei der Konfigurationsschaltkreis ferner dazu dient, einen oder mehrere Klemmbereiche eines Ausgangs einer oder mehrerer der Phasen zu konfigurieren, um die Transformation basierend auf mindestens einem Codierungsformat und einer Bittiefe, die dem Pixelblock zugeordnet sind, durchzuführen.
  5. System nach einem der vorhergehenden Ansprüche, wobei der Konfigurationsschaltkreis ferner dazu dient, eine Rundungsposition eines Ausgangs einer oder mehrerer der Phasen zu konfigurieren, um die Transformation basierend auf mindestens einer Bittiefe, die dem Pixelblock zugeordnet ist, durchzuführen.
  6. System nach einem der vorhergehenden Ansprüche, wobei die Videoverarbeitungspipeline Folgendes beinhaltet: eine Transformationsschaltung zum Durchführen einer Vorwärtstransformation an den Pixelblöcken, wobei ein oder mehrere Ratenverzerrungsoptimierungskosten aus Daten in einem Frequenzbereich berechnet werden, wobei die Daten dem Ausgang der Vorwärtstransformation entsprechen; eine Trichterschaltung zum Herausfiltern eines oder mehrerer der Pixelblöcke vor einer Rückwärtstransformationsschaltung der Videoverarbeitungspipeline basierend auf mindestens einer oder mehreren Dimensionen der Pixelblöcke; die Rückwärtstransformationsschaltung zum Durchführen einer Rückwärtstransformation an einer Teilmenge der Pixelblöcke basierend auf der Teilmenge, die die Filterung durch die Trichterschaltung durchläuft, wobei die Rückwärtstransformation mit einem geringeren Durchsatz als die Vorwärtstransformation durchgeführt wird; und eine Intra-Frame-Prädiktionsschaltung zum Durchführen einer Intra-Frame-Prädiktion unter Verwendung einer Rückkopplung, die einem Ausgang der Rückwärtstransformation entspricht.
  7. System nach einem der vorhergehenden Ansprüche, wobei die Transformationen unter Verwendung vorberechneter trigonometrischer Koeffizienten durchgeführt werden.
  8. System nach einem der vorhergehenden Ansprüche, wobei die Transformation eine asymmetrische diskrete Sinustransformation oder eine Identifizierungstransformation ist, die der Vielzahl von HB einer oder mehrerer der Phasen zugeordnet ist.
  9. System nach einem der vorhergehenden Ansprüche, wobei die Videoverarbeitungspipeline Folgendes beinhaltet: eine Addierer-Klemme, um ein erstes oder mehrere Überlaufsignale zu erzeugen, die mindestens auf dem Klemmen einer oder mehrerer Berechnungen der Transformation basieren; und eine Round-Shift-Klemme zum Erzeugen eines zweiten oder mehrerer Überlaufsignale basierend mindestens auf dem Runden eines Ausgangs der Transformation, wobei die Videoverarbeitungspipeline einen Interrupt basierend mindestens auf dem ersten oder den mehreren Überlaufsignalen und dem zweiten oder den mehreren Überlaufsignalen erzeugen soll.
  10. System nach einem der vorhergehenden Ansprüche, wobei der Schaltkreis für die Konfiguration eine Vielzahl von One-Hot-Multiplexern mit Auswahlquellen beinhaltet, die der einen oder mehreren Dimensionen und dem Transformationstyp entsprechen, um die Auswahl und Konfiguration des Satzes der Phasen durchzuführen.
  11. System nach einem der vorhergehenden Ansprüche, wobei der Konfigurationsschaltkreis eine oder mehrere Eintritts- oder Austrittsphasen der Phasen basierend auf mindestens einer Größe des Pixelblocks umgeht.
  12. System nach einem der vorhergehenden Ansprüche, umfassend einen Scheduler, der dazu konfiguriert ist, die Pixelblöcke der Videoverarbeitungspipeline in einer Reihenfolge bereitzustellen, die den Größen der Pixelblöcke entspricht, wobei die Größen primär entlang der Reihenfolge zunehmen.
  13. System nach einem der vorhergehenden Ansprüche, wobei die Transformationen ohne Verwendung echter Multiplikatoren angewendet werden.
  14. Verfahren, umfassend: Bereitstellen eines Pixelblocks an einem Eingang einer Videoverarbeitungspipeline von Phasen, wobei jede Phase eine Vielzahl von Half-Butterfly-Schaltungen, HB-Schaltungen, aufweist, wobei die Phasen auswählbar und konfigurierbar sind, um Transformationen für eine Vielzahl von Transformationstypen an Pixelblöcken einer Vielzahl von Größen unter Verwendung der HB-Schaltungen durchzuführen, und jede Transformation durch einen sequentiellen Durchlauf durch mindestens einige der Phasen durchgeführt wird; Auswählen und Konfigurieren, unter Verwendung eines Konfigurationsschaltkreises, eines Satzes der Phasen zum Durchführen einer Transformation der Transformationen an einem Pixelblock basierend auf mindestens einer oder mehreren Dimensionen des Pixelblocks und einem Transformationstyp der Transformation; und Durchführen der Transformation unter Verwendung des Satzes der Phasen, die unter Verwendung des Konfigurationsschaltkreises ausgewählt und dazu konfiguriert sind.
  15. Verfahren nach Anspruch 14, wobei die Videoverarbeitungspipeline eine Transponierungsschaltung mit einem elastischen Ping-Pong-Puffer beinhaltet, um mindestens einen Abschnitt des Pixelblocks gleichzeitig mit mindestens einem Abschnitt eines anderen Pixelblocks der Pixelblöcke zu speichern.
  16. Verfahren nach Anspruch 14 oder 15, wobei die Videoverarbeitungspipeline eine Transponierungsschaltung beinhaltet, um spiralförmige Speicher-Lese- und Schreibmuster durchzuführen, um Transponierungsoperationen der Transformation unter Verwendung von Interleaving, Deinterleaving und Barrel-Shifting durchzuführen.
  17. Verfahren nach einem der Ansprüche 14 bis 16, wobei eine Menge von Direktzugriffsspeichern (RAMs), die verwendet werden, um eine Transponierung der Transformation zu verarbeiten, kleiner ist als die eine oder mehrere Dimensionen des Pixelblocks, und die Transponierung das Schreiben in einen Abschnitt der RAMs mit einer ersten Zyklusrate unter Verwendung eines Schieberegisters und das Lesen aus den RAMs unter Verwendung von Zeitmultiplexing mit einer zweiten Zyklusrate beinhaltet, die einer Tiefe des Schieberegisters entspricht.
  18. Verfahren nach einem der Ansprüche 14 bis 17, wobei eine PPC der Videoverarbeitungspipeline höher ist als eine maximale 1 D-Dimension der Transformationstypen, die von der Videoverarbeitungspipeline unterstützt werden, sodass ein Schreiben in Direktzugriffsspeicher (RAMs), die verwendet werden, um eine Transponierung der Transformation zu verarbeiten, in jedem Zyklus durchgeführt werden kann und ein Lesen aus den RAMs in jedem Zyklus durchgeführt werden kann, um die RAMs mit mehreren Spalten und Zeilen von einem oder mehreren der Pixelblöcke zu belegen.
  19. Verfahren nach einem der Ansprüche 14 bis 18, wobei Direktzugriffsspeicher (RAMs), die zur Verarbeitung einer Transponierung der Transformation verwendet werden, ein abwechselndes Muster an Schreibfreigabeeingängen bereitstellen, um in einen Abschnitt der RAMs mit einer ersten Zyklusrate zu schreiben und aus den RAMs unter Verwendung von Zeitmultiplexing mit einer zweiten Zyklusrate zu lesen.
  20. Verfahren nach einem der Ansprüche 14 bis 19, umfassend das Abwechseln zwischen einem ersten Lese-/Schreibmuster des Schreibens in Direktzugriffsspeicher (RAMs), die zur Verarbeitung der Transponierungen verwendet werden, unter Verwendung eines spiralförmigen Adressmusters und des Lesens aus den RAMs unter Verwendung eines einheitlichen Adressmusters, und einem zweiten Lese-/Schreibmuster des Schreibens in die RAMs unter Verwendung eines einheitlichen Adressmusters und des Lesens aus den RAMs unter Verwendung eines spiralförmigen Adressmusters.
  21. Verfahren nach einem der Ansprüche 14 bis 20, umfassend: Durchführen einer Vorwärtstransformation an den Pixelblöcken, wobei ein oder mehrere Ratenverzerrungsoptimierungskosten aus Daten in einem Frequenzbereich berechnet werden, wobei die Daten dem Ausgang der Vorwärtstransformation entsprechen; Herausfiltern eines oder mehrerer der Pixelblöcke vor einer Rückwärtstransformationsschaltung der Videoverarbeitungspipeline basierend auf mindestens einer oder mehreren Dimensionen der Pixelblöcke; Durchführen einer Rückwärtstransformation an einem Satz der Pixelblöcke basierend auf dem Durchlaufen der Filterung durch die Trichterschaltung, wobei die Rückwärtstransformation mit einem geringeren Durchsatz als die Vorwärtstransformation durchgeführt wird; und Durchführen einer Intra-Frame-Prädiktion unter Verwendung einer Rückkopplung, die einem Ausgang der Rückwärtstransformation entspricht.
  22. Verfahren nach einem der Ansprüche 14 bis 21, wobei eine Menge von Additionstermen, die in mindestens einer Phase der Phasen enthalten sind, mindestens basierend auf der Minimierung von Nicht-Null-Additionstermen eines Transformationstyps auf der Grundlage von Links-Rechts-Kombinationen der Additionsterme des Transformationstyps geschätzt wird, wobei der Transformationstyp eine maximale Anzahl von HBs der Vielzahl von Transformationstypen aufweist, die von der Phase unterstützt werden.
  23. System, umfassend: eine Vorwärtstransformationsschaltung mit ersten Phasen, wobei jede erste Phase eine erste Vielzahl von Half-Butterfly-Schaltungen, HB-Schaltungen, aufweist, wobei die ersten Phasen auswählbar und konfigurierbar sind, um Vorwärtstransformationen für eine Vielzahl von Transformationstypen an Pixelblöcken einer Vielzahl von Größen unter Verwendung der ersten HB-Schaltungen auszuführen, und jede Vorwärtstransformation durch einen sequentiellen Durchlauf durch mindestens einige der ersten Phasen durchgeführt wird; eine Rückwärtstransformationsschaltung mit zweiten Phasen, wobei jede zweite Phase eine zweite Vielzahl von HB-Schaltungen aufweist, wobei die zweiten Phasen auswählbar und konfigurierbar sind, um Rückwärtstransformationen an mindestens einigen der Pixelblöcke unter Verwendung der zweiten HB-Schaltungen durchzuführen, und jede Rückwärtstransformation durch einen sequentiellen Durchlauf durch mindestens einige der zweiten Phasen durchgeführt wird; und eine oder mehrere Konfigurationsschaltungen zum Auswählen und Konfigurieren eines ersten Satzes der ersten Phasen und eines zweiten Satzes der zweiten Phasen, um eine Vorwärtstransformation und eine Rückwärtstransformation an einem Pixelblock der Pixelblöcke basierend auf mindestens einer oder mehreren Dimensionen des Pixelblocks durchzuführen.
  24. System nach Anspruch 23, wobei die Schaltung für die Rückwärtstransformation die Rückwärtstransformation an einer Teilmenge der Pixelblöcke basierend auf mindestens den Größen der Pixelblöcke ausführt.
  25. System nach Anspruch 23 oder 24, wobei die Schaltung für die Rückwärtstransformation die Rückwärtstransformationen mit einem geringeren Durchsatz als die Schaltung für die Vorwärtstransformation ausführt.
  26. System nach einem der Ansprüche 23 bis 25, wobei jede HB-Schaltung der Vielzahl von HB-Schaltungen mindestens der zweiten Phasen eine jeweilige minimale Bitbreite aufweist, die erforderlich ist, um die durch ein oder mehrere Codierungsformate für jeden der Vielzahl von Transformationstypen spezifizierte Bitpräzision zu unterstützen.
DE102022120207.0A 2021-08-16 2022-08-10 Effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodieren Pending DE102022120207A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/403,054 2021-08-16
US17/403,054 US11647227B2 (en) 2021-08-16 2021-08-16 Efficient transforms and transposes for rate-distortion optimization and reconstruction in video encoders

Publications (1)

Publication Number Publication Date
DE102022120207A1 true DE102022120207A1 (de) 2023-02-16

Family

ID=85040031

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022120207.0A Pending DE102022120207A1 (de) 2021-08-16 2022-08-10 Effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodieren

Country Status (3)

Country Link
US (1) US11647227B2 (de)
CN (1) CN115706799A (de)
DE (1) DE102022120207A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230169143A1 (en) * 2021-11-30 2023-06-01 Seung Pil Kim Method and apparatus for efficient multidimensional fast fourier transforms
CN116506628B (zh) * 2023-06-27 2023-10-24 苇创微电子(上海)有限公司 一种基于像素块的编码预测器方法、编码系统及编码装置
CN117319591B (zh) * 2023-09-25 2024-03-12 深圳市厚朴科技开发有限公司 一种视频传输方法、装置、计算机可读存储介质及设备
CN117828247B (zh) * 2024-03-05 2024-05-03 北京思凌科半导体技术有限公司 快速傅里叶变换的处理方法、集成电路及电子设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452466A (en) * 1993-05-11 1995-09-19 Teknekron Communications Systems, Inc. Method and apparatus for preforming DCT and IDCT transforms on data signals with a preprocessor, a post-processor, and a controllable shuffle-exchange unit connected between the pre-processor and post-processor
US5778190A (en) * 1995-07-21 1998-07-07 Intel Corporation Encoding video signals using multi-phase motion estimation
US10572824B2 (en) * 2003-05-23 2020-02-25 Ip Reservoir, Llc System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines
US9378185B2 (en) * 2010-09-30 2016-06-28 Texas Instruments Incorporated Transform and quantization architecture for video coding and decoding
US10812829B2 (en) * 2012-10-03 2020-10-20 Avago Technologies International Sales Pte. Limited 2D block image encoding
GB2514099B (en) * 2013-05-07 2020-09-09 Advanced Risc Mach Ltd A data processing apparatus and method for performing a transform between spatial and frequency domains when processing video data
US20160021369A1 (en) * 2014-07-15 2016-01-21 Shreyas HAMPALI Video coding including a stage-interdependent multi-stage butterfly integer transform
US10448053B2 (en) * 2016-02-15 2019-10-15 Qualcomm Incorporated Multi-pass non-separable transforms for video coding
US10567800B2 (en) * 2016-11-29 2020-02-18 Qualcomm Incorporated Transform hardware architecture for video coding
CN112866695B (zh) * 2021-01-07 2023-03-24 上海富瀚微电子股份有限公司 一种视频编码器

Also Published As

Publication number Publication date
CN115706799A (zh) 2023-02-17
US11647227B2 (en) 2023-05-09
US20230062352A1 (en) 2023-03-02

Similar Documents

Publication Publication Date Title
DE102022120207A1 (de) Effiziente Transformationen und Transponierungen zur Optimierung der Ratenverzerrung und Rekonstruktion in Videocodieren
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
Peterka et al. A configurable algorithm for parallel image-compositing applications
DE102021120605A1 (de) Effiziente softmax-berechnung
DE102018126342A1 (de) Transformieren von faltenden neuronalen netzen zum lernen von visuellen sequenzen
DE102019130702A1 (de) Stilbasierte architektur für generative neuronale netzwerke
Ho et al. Parallelization of cellular neural networks on GPU
DE112017004246T5 (de) Cache- und komprimierungsinteroperabilität in einer grafikprozessorpipeline
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102013018915A1 (de) Ein Ansatz zur Leistungsreduzierung in Gleitkommaoperationen
DE102013017640A1 (de) Verteilte gekachelte Zwischenspeicherung
DE102021119722A1 (de) Feingranulare pro-vektor-skalierung für neuronale netzwerkquantisierung
DE102020114310A1 (de) Beschleuniger für neuronale netze mit logarithmischbasierter arithmetik
DE102013017639A1 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichen L2-Cache-Speicher mit Oberflächenkomprimierung
DE19920214A1 (de) Verfahren und Einrichtung zum Konvertieren einer Zahl zwischen einem Gleitkommaformat und einem Ganzzahlformat
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102021107586A1 (de) Spekulatives training unter verwendung der aktualisierung partieller gradienten
DE102023105565A1 (de) VERFAHREN UND VORRICHTUNG FÜR EFFIZIENTEN ZUGRIFF AUF MEHRDIMENSIONALE DATENSTRUKTUREN UND/ODER ANDERE GROßE DATENBLÖCKE
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
Nonaka et al. 234Compositor: A flexible parallel image compositing framework for massively parallel visualization environments
DE102023105568A1 (de) Programmatisch gesteuertes daten-multicasting über mehrere rechen-engines
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
DE102020108411A1 (de) Mechanismus zum durchführen von erweiterten mathematischen gleitkommaoperationen mit einfacher genauigkeit
Dimakis et al. KdV soliton interactions: a tropical view

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication