DE60316151T2 - Zugriff zum breiten speicher - Google Patents

Zugriff zum breiten speicher Download PDF

Info

Publication number
DE60316151T2
DE60316151T2 DE60316151T DE60316151T DE60316151T2 DE 60316151 T2 DE60316151 T2 DE 60316151T2 DE 60316151 T DE60316151 T DE 60316151T DE 60316151 T DE60316151 T DE 60316151T DE 60316151 T2 DE60316151 T2 DE 60316151T2
Authority
DE
Germany
Prior art keywords
data
register
memory
vector
processing system
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.)
Expired - Lifetime
Application number
DE60316151T
Other languages
English (en)
Other versions
DE60316151D1 (de
Inventor
Cornelis H. Van Berkel
Patrick P. Meuwissen
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.)
NXP BV
Original Assignee
NXP BV
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 NXP BV filed Critical NXP BV
Publication of DE60316151D1 publication Critical patent/DE60316151D1/de
Application granted granted Critical
Publication of DE60316151T2 publication Critical patent/DE60316151T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Saccharide Compounds (AREA)
  • Static Random-Access Memory (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Image Input (AREA)
  • Executing Machine-Instructions (AREA)

Description

  • Gebiet der Erfindung
  • Die Erfindung betrifft ein Verarbeitungssystem.
  • Hintergrund der Erfindung
  • Mobilfunkstandards der dritten Generation, wie UMTS-FDD, UMTS-TDD, IS2000 und TD-SCDMA, arbeiten mit sehr hohen Frequenzen. Modems (Transceiver) für 3G-Mobilfunkstandards, wie UMTS, machen eine ungefähr 100-fach höhere, digitale Signalverarbeitungsleistung als GSM erforderlich. Für derartige Standards besteht der Wunsch, einen Transceiver unter Verwendung einer programmierbaren Architektur einzuführen, um mit unterschiedlichen Standards umgehen und sie flexibel an neue Standards anpassen zu können. Eine bekannte Verfahrensweise zur Verbesserung der Leistung besteht darin, mehrere Datenelemente (Skalare) in einer Zeile eines Speichers zu speichern und mehr als ein Datenelement gleichzeitig zu verarbeiten. Solche Systeme sind z. B. unter der Bezeichnung SIMD (single instruction, multiple data [ein Befehl, mehrere Daten]) oder MIMD (multiple instruction, multiple data [viele Befehle, viele Daten]) bekannt. Ein Beispiel für einen SIMD-Prozessor ist ein Vektorprozessor. In typischen Fällen besitzt ein breiter Speicher einen Port, um den Lese- und Schreibzugriff auf Einheiten mindestens einer Speicherzeile zu ermöglichen. Bei dem Beispiel, in dem der Speicher eine Zeilenbreite zum Speichern eines Vektors hat, können ein Vektor oder mehrere Vektoren gleichzeitig gelesen oder geschrieben werden. Es gibt keine besondere Vorkehrung, um auf kleinere Einheiten als einen Vektor zugreifen zu können. Um einen Speicher auf optimale Weise nutzen zu können, ist es wünschenswert, auch auf noch kleinere Datenelemente als jene zugreifen zu können, die auf effiziente Weise die volle Breite einer Speicherzeile einnehmen. Normalerweise kann eine derartige kleinere Einheit in einer Zeile des Speichers gespeichert werden, in der ein Teil der Zeile nicht genutzt wird, wodurch die Speicherkosten steigen. Als Alternative dazu können kleinere Einheiten in einer Zeile in verketteter Form gespeichert werden, wobei eine ganze Zeile gelesen oder geschrieben werden muss und zusätzliche Verarbeitungsanweisungen und -zyklen erforderlich sind, um eine gewünschte kleinere Einheit zu entnehmen oder einzufügen, die die gesamte Speicherzeile bildet. Das senkt die Leistungsfähigkeit.
  • Diese Probleme werden akuter, wenn die Breite des Speichers die Größe der kleineren Einheit beträchtlich übersteigt. Zum Beispiel sind Datenelemente, die Bestandteile eines Sprachelement vektors für die Spracherkennung speichern, typischerweise 8 bis 16 Bits breit. Für den Fern sprechverkehr sind die kodierten/modulierten Datenelemente gewöhnlich 8 Bits groß (oder 2·8 Bits für komplexe Werte). Es besteht keine Notwendigkeit, diese Größe zu erhöhen. Für neuere Fernsprechsysteme oder für eine gesteigerte Spracherkennungsleistung ist es wünschenswert, die Verarbeitungsgeschwindigkeit zu verbessern. Die Verwendung breiterer Speicher zur Steigerung der Verarbeitungsgeschwindigkeit kann ohne besondere Maßnahmen die Größe des Speichers erhöhen, der zum Speichern der Daten benötigt wird, oder sogar bestimmte Formen des oben beschriebenen Speicherzugriffs verlangsamen.
  • Das US-Patent Nr. 4.949.247 offenbart einen Multiplexer, der durch eine Vektorsteuereinheit gesteuert wird, um ausgewählte Vektorelemente in den als Ausgangspunkt dienenden Zwischenregistern (d. h. in jedem Register ausgewählte Operanden mit einfacher Genauigkeit oder doppelter Genauigkeit von den bis zu 16 Operanden) über einen Bus an einen Gleitpunktprozessor zu koppeln. Es offenbart außerdem, dass während anschließender Taktintervalle (d. h. sobald die vektorielle Rechenoperation beginnt) ein Element des Vektors A und ein entsprechendes Element des Vektors B über den Multiplexer an den Gleitpunktprozessor angelegt und verarbeitet werden (z. B. zusammenaddiert) und das Ergebnis über den Multiplexer als ein Element in das Zwischenspeicher-Zielregister geladen wird. Dort werden die Ergebnisse aufeinander folgender Operationen gesammelt, bis das Zwischenspeicher-Zielregister gefüllt ist (d. h. mit 8 Ergebnissen). Die Ergebnisse werden dann im Vektor-RAM gespeichert.
  • Das US-Patent Nr. 5.689.653 offenbart eine Vektor-Vorabrufeinheit, die drei Vektorpuffer umfasst, zu denen ein erster Ladevektorpuffer, ein zweiter Ladevektorpuffer und ein Speichervektorpuffer gehören. Die Vektorpuffer können jeweils eine Mehrzahl von Datenelementen speichern. Die Daten werden zwischen den Vektorpuffern und den Prozessorregistern übertragen. Die Übertragungen zwischen den Vektorpuffern und den Prozessorregistern erfolgen Element für Element. Ein Befehl gibt zwei Register an, in die die nächsten Elemente aus den La devektorpuffern zu übertragen sind, sowie ein Register, aus dem das nächste Element des Speichervektorpuffers übertragen wird.
  • Zusammenfassung der Erfindung
  • Der Zweck der Erfindung besteht darin, eine Prozessorarchitektur zu schaffen, die auch für kleinere Datenelemente einen schnellen Speicherzugriff auf einen breiten Speicher gewährleisten kann.
  • Um diese Aufgabe in einem Verarbeitungssystem mit einem Prozessor und einem reellen bzw. physischen Speicher mit einem Speicherport einer einzigen Größe für den Zugriff auf die im Speicher befindlichen Daten zu erfüllen, wird der Prozessor dafür eingerichtet, Daten mindestens einer ersten Datenmenge und einer kleineren zweiten Datenmenge zu bearbeiten, wobei die erste Datenmenge gleich oder kleiner als die Größe des Speicherports ist und zu dem Verarbeitungssystem mindestens ein Datenregister der ersten mit dem Speicherport verbundenen Datenmenge und mindestens ein Datenport der zweiten mit dem Datenregister verbundenen Datenmenge sowie der Prozessor zur Aktivierung des Zugriffs auf die Datenelemente der zweiten Menge gehören.
  • Auf diese Weise kann ein konventioneller Speicher mit einer Wortlänge verwendet werden. Das hält die Kosten des Speichers niedrig. Typischerweise entspricht die Speicherwortlänge der größten Wortlänge des Prozessors. Um den Zugriff auf kleinere Datenelemente zu ermöglichen, wird ein Zwischenregister verwendet. Ein zusätzlicher Port wird hinzugefügt, der den Zugriff auf ein kleineres Datenelement in dem Register aktiviert. Die Verwendung des Zwischenregisters kann völlig transparent sein. Für den Prozessorkern und den Programmierer sieht es so aus, als hätte der Speicher Ports mit verschiedenen Größen. Auf diese Weise kann ohne zusätzlichen zeitlichen Befehlsaufwand schnell auf kleine Datenelemente zugegriffen werden, wie z. B. die Auswahl und/oder Verschiebung von großen Datenelementen, um auf ein kleineres Datenelement zugreifen zu können, das Teil des größeren Datenelements ist.
  • Wie im abhängigen Patentanspruch 2 beschrieben, ist die Größe des Speicherports mindestens zweimal so groß wie die zweite Datenmenge. Auf diese Weise kann das Register mindestens zwei kleine Datenelemente speichern. Besonders in dem Fall, in dem sequentiell auf die kleinen Datenelemente zugegriffen wird, ermöglicht ein Zugriff auf den reellen Speicher einen schnellen Zugriff auf mindestens zwei sequentielle kleinere Datenelemente. Das reduziert die beim Zugriff auf den reellen Speicher verlorene Zeit.
  • Wie im abhängigen Patentanspruch 3 beschrieben, wird für einen Lese-Datenport ein Multiplexer verwendet, um ein Datenelement der zweiten Datenmenge aus dem leseadressengesteuerten Datenregister auszuwählen und herauszuziehen. Zum Beispiel kann der signifikanteste Teil der Leseadresse benutzt werden, um zu überprüfen, ob sich das Datenelement bereits im Register befindet (und falls nicht, kann dieser Teil benutzt werden, um es aus dem reellen Speicher abzurufen), während der am wenigsten signifikante Teil benutzt werden kann, um das Datenelement in dem Register auszuwählen.
  • Wie im abhängigen Patentanspruch 4 beschrieben, wird Wir einen Schreib-Datenport ein Demultiplexer verwendet, um ein Datenelement der zweiten Datenmenge an einer auswählbaren Speicherstelle in das schreibadressengesteuerte Datenregister einzufügen. Die Auswahl kann in ähnlicher Weise erfolgen, wie sie für den Leseport beschrieben wurde.
  • Wie im abhängigen Patentanspruch 5 beschrieben, kann das Verarbeitungssystem eine Mehrzahl von mit dem Prozessor verbundenen Datenports der zweiten Datenmenge sowie für jeden der Datenports ein dazugehöriges entsprechendes Datenregister enthalten, das mit dem jeweiligen Datenport und einem Port des reellen Speichers verbunden ist. Auf diese Weise kann die durchschnittliche Zeit für einen Zugriff auf Daten noch weiter reduziert werden. Zum Beispiel kann, wenn ein Algorithmus zwei sequentielle Datenströme verarbeitet, jeder der Ströme eines der Register und Datenports nutzen. Jeder Strom kann dann auf mindestens zwei sequentielle Datenelemente zugreifen und dabei nur einen Zugriff auf den reellen Speicher nutzen.
  • Wie in dem abhängigen Patentanspruch 6 beschrieben, wird eine Überprüfung auf mögliche Übereinstimmungskonflikte durchgeführt, die durch die Register ausgelöst werden, die eine 'Kopie' der Daten im Speicher und/oder in mehr als einem Register enthalten. Das System ermöglicht es, aktualisierte Daten im Register aufzubewahren, so dass die Aktualisierung eines kleinen Datenelements nicht immer eine Schreiboperation in den reellen Speichers auslöst. Außerdem wird dadurch auch ermöglicht, das aktualisierte kleine Datenelement direkt aus dem Register abzurufen, wodurch beim Speicherzugriff noch weitere Zeit eingespart wird. Für Schreib-Datenports (und folglich das dazugehörige Register, das den Schreibzugriff ermöglicht) speichert der Prozessor in einem zusätzlichen Übereinstimmungsregister Informationen über die Daten, die im Register gespeichert sind. Diese Daten werden dafür verwendet, um zu überprüfen, ob die Daten, die abgerufen werden (aus dem reellen Speicher oder aus einem der Register), auf Daten zugreifen, die verändert worden sind (aber möglicherweise noch nicht auf den neuesten Stand des Speichers oder der Leseregister gebracht worden sind). Vorzugsweise ist die Kennzeichnungsinformation eine physische Adresse, um auf ein Wort im reellen Speicher zugreifen zu können, in dem das Wort die Breite des Speicherports hat. Auf diese Weise lässt es sich leicht prüfen, ob bei einem Konflikt mit den in den Registern gespeicherten Daten ein direkter Zugriff auf den reellen Speicher möglich ist.
  • Wie im abhängigen Patentanspruch 8 beschrieben, enthält der Kohärenzprüfer einen Konfliktlöser, um als Reaktion auf die Erkennung eines möglichen Übereinstimmungskonfliktes Korrekturmaßnahmen zu treffen. Auf diese Weise wird der Programmierer davon befreit, solche Maßnahmen während der Entwicklung des Programms treffen zu müssen. Eine Möglichkeit, solche Korrekturmaßnahmen zu treffen, wie sie im abhängigen Patentanspruch 9 beschrieben werden, besteht darin, das Datenregister für den Lesezugriff als ungültig zu kennzeichnen, was als Reaktion auf einen Lesezugriff das Datenregister ein erneutes Laden des Inhalts des Datenregisters aus dem Speicher auslöst.
  • Als Alternative, wie im abhängigen Patentanspruch 10 beschrieben, enthält der Kohärenzprüfer ein Kohärenzregister für jedes entsprechende Datenregister zur Speicherung von Informationskennungsdaten, die in dem entsprechenden Datenregister gespeichert sind, und den Korrektor, der als Antwort auf den Schreibzugriff auf eines der Datenregister und/oder auf den Schreibzugriff auf den reellen Speicher dafür eingerichtet ist, Korrekturmaßnahmen zu treffen, indem er den in das Datenregister oder in den Speicher eingeschriebenen Inhalt in alle anderen Datenregister und/oder auf einen Speicherplatz kopiert, der gemäß der Kennungsinformation die gleichen Daten speichert. Bei dieser Ausführungsform werden aktualisierte Daten in alle Register kopiert, die entsprechend den Kohärenzregistern die gleichen Daten speichern sollten Wenn ein direkter Zugriff auf den reellen Speicher gestattet wird, gehört dazu auch das Kopieren der Daten in den reellen Speicher. Vorzugsweise erfolgt der direkte Zugriff auf den reellen Speicher für die großen Datenelemente auch über ein Zwischenregister, wobei das Einschreiben in ein Register nicht automatisch einen Schreibzugriff auf den Speicher erforderlich macht.
  • Wie im abhängigen Patentanspruch 11 beschrieben, ist mindestens eines der Datenregister (im Weiteren als „Leseregister” bezeichnet) mit einem Lese-Datenport verbunden und ist mindestens eines der Datenregister (im weiteren als „Schreibregister” bezeichnet) mit einem Schreib-Datenport verbunden; und der Prozessor enthält einen Umgehungsweg, um Daten aus dem Schreibregister dem Lese-Datenport wählbar zur Verfügung zu stellen; wobei der Kohärenzprüfer für jedes entsprechende Datenregister ein Kohärenzregister zur Speicherung von Informationskennungsdaten enthält, die im zugehörigen Datenregister gespeichert sind; und der Konfliktlöser dafür eingerichtet ist, Korrekturmaßnahmen als Reaktion auf das Einschreiben von Daten in das Schreibregister durch das Aktivieren des Umgehungsweges für einen sukzessiven Lesezugriff auf das Leseregister zu treffen, falls das Leseregister entsprechend der Kennungsinformation das gleiche Datenelement speichern sollte. Durch die Nutzung eines Umgehungsweges braucht ein Leseregister nicht erneut geladen zu werden, sobald ein Schreibregister mit dem gleichen Inhalt aktualisiert worden ist. Stattdessen werden die Daten dann direkt aus dem aktualisierten Schreibregister abgerufen. Auf diese Weise wird der Zugriff auf den reellen Speicher gering gehalten. Das kann manchmal eine Verzögerung beim Zugriff auf das Schreibregister verursachen.
  • Vorzugsweise stützt sich der reelle Speicher auf ein SRAM mit einem einzigen Zugriffskanal, der kostengünstig ist. Um einen kostengünstigen, breiten reellen Speicher zur Verfügung zu haben, so dass viele kleine Datenelemente in einem Speicherwort gespeichert werden können, bevorzugt man die Verwendung eines reellen Speichers, der durch eine Vielzahl parallel angeordneter Bereiche eines RAM gebildet wird. Dabei ist die Variante zu bevorzugen, bei der der Speicher in den Prozessor eingebaut ist.
  • Die beschriebene Architektur kann in vorteilhafter Weise in einem Skalar-/Vektorprozessor verwendet werden, in dem das Vektorsegment Vektoren der ersten Datenmenge und das Skalarsegment Skalare der zweiten Datenmenge bearbeitet, wobei die erste Datenbreite mindestens zweimal so groß wie die zweite Datenbreite ist. Bei solch einer Anordnung kann der gleiche Speicher für das Speichern von Vektoren und Skalaren verwendet werden. Das macht es auch leicht, skalare Rechenoperationen an Elementen des Vektors durchzuführen.
  • Diese und andere Aspekte der Erfindung gehen offensichtlich aus den im Weiteren beschriebenen Ausführungsformen hervor und werden unter Bezugnahme auf sie erläutert werden.
  • Kurze Beschreibung der Zeichnungen
  • Auf den Zeichnungen:
  • Zeigt 1 eine bevorzugte Konfiguration, in der der erfindungsgemäße Skalar-/Vektorprozessor verwendet werden kann;
  • Zeigt 2 die Hauptstruktur des erfindungsgemäßen Skalar-/Vektorprozessors;
  • Zeigt 3 unterstützte Datenbreiten und Datentypen;
  • Zeigt 4 ein Blockdiagramm der Vektorspeichereinheit; und
  • Veranschaulicht 5 die Verwendung von Zwischenregistern und zwei Portgrößen.
  • Detaillierte Beschreibung der bevorzugten Ausführungsform
  • Die Address Generation Unit (AGU) und Speichereinheit werden vorzugsweise in eifern Prozessor verwendet, der für die Signalverarbeitung optimiert ist. Solch ein Prozessor kann ein DSP oder irgendein anderer geeigneter Prozessor/Mikrokontroller sein. Im übrigen Teil der Beschreibung wird die Verwendung der Einheiten in einem äußerst leistungsfähigen Skalar-/Vektorprozessor beschrieben. Solch ein Prozessor kann selbstständig zum Einsatz kommen oder in Kombination mit einem anderen Prozessor. 1 zeigt eine bevorzugte Konfiguration, in der der Skalar-/Vektorprozessor verwendet werden kann. Bei dieser Konfiguration sind drei Hauptbestandteile über einen Datenbus 110 miteinander verbunden. Der Datenbus 110, der diese drei Bestandteile miteinander verbindet, kann jeder geeignete Bus sein, wie z. B. der AMBA Hochgeschwindigkeitsbus (AHB). Die Hauptbestandteile sind:
    • – der programmierbare Skalar-/Vektorprozessor 120, der Funktionseinheiten und einen lokalen Datenspeicher umfasst (in 1 als Vektorspeicher bezeichnet),
    • – ein Mikrokontroller oder DSP-Teilsystem 130, zu dem ein begrenztes Programm auf einem Chip und ein Datenspeicher gehören;
    • – ein Schnittstellenblock 140.
  • Der Skalar-/Vektorprozessor 120 wird hauptsächlich für die reguläre ?hochleistungsfähige? Verarbeitung verwendet, insbesondere für die Verarbeitung von inneren Schleifen. Der Skalar-/Vektorprozessor besitzt die funktionelle Fähigkeit zur Vektorverarbeitung. Als solcher gewährleistet er eine umfangreiche Parallelverarbeitung für den vektorisierbaren Teil des auszuführenden Codes. Der größte Teil der gesamten Signalverarbeitung wird durch das Vektorsegment des Skalar-/Vektorprozessors ausgeführt. Mit einer Matrix von z. B. 32 identischen Verarbeitungselementen, die den gleichen Befehl ausführen, gewährleistet es eine beachtliche Parallelverarbeitung. Kombiniert mit einer 32-Wort-breiten Speicherschnittstelle ermöglicht dies ein beispielloses programmierbares Leistungsniveau bei geringen Kosten und moderatem Stromverbrauch. Es ist aber nicht immer machbar, diese Möglichkeit zur Parallelverarbeitung vollständig auszunutzen, da viele Algorithmen keine ausreichende Fähigkeit zur Daten-Parallelverarbeitung in der richtigen Form besitzen. Gemäß dem Amdahlschen Gesetz wird nach der Vektorisierung des direkt vektorisierbaren Teils des Codes die meiste Zeit mit dem restlichen Code verbracht. Der restliche Code kann in vier Kategorien unterteilt werden:
    • – adressenbezogene Befehle (z. B. Inkrementierung eines Zeigers in einen Ringpuffer unter Verwendung einer Moduloadressierung),
    • – regelmäßige skalare Rechenoperationen (d. h. eine skalare Rechenoperation, die der Hauptschleife des Vektorprozessors entspricht),
    • – Schleifendurchlauf,
    • – unregelmäßige skalare Rechenoperationen.
  • Die Anteile des Codes für jede dieser Kategorien hängen in hohem Maße vom ausgeführten Algorithmus ab. Z. B. bedarf der Golay-Korrelator (genutzt für das P-SCH-Suchen) einer großen Menge adressenbezogener Befehle, aber bei anderen Algorithmen, wie z. B. dem Rake, ist das nicht der Fall. Die Leistung adressenbezogener Befehle und der Schleifendurchlauf können durch die Verwendung der erfindungsgemäßen AGU/Speichereinheit optimiert werden. Die Funktionsweise der regelmäßigen skalaren Rechenoperation kann durch eine straff integrierende Skalar- und Vektorverarbeitung in einem Prozessor optimiert werden. Eine Untersuchung aller für 3G-Modems relevanten Algorithmen durch die Erfinder hat gezeigt, dass der Anteil unregelmäßiger skalarer Rechenoperationen sehr beschränkt ist. Diese Eigenschaft ermöglicht die Aufteilung der Aufgaben zwischen dem Skalar-/Vektorprozessor 120 und dem Mikrokontroller oder DSP 130, wobei der separate Mikrokontroller oder DSP 130 die unregelmäßigen Aufgaben erfüllt und vorzugsweise auch den Skalar-/Vektorprozessor steuert. Bei dieser bevorzugten Konfiguration fungiert der Skalar-/Vektorprozessor 120 als programmierbarer Koprozessor (im restlichen Teil auch als CVP [Co-Vector-Processor] bezeichnet). Die Schnittstelle zwischen dem Skalar-/Vektorprozessor 120 und dem Mikrokontroller 130 befasst sich mit der Kommunikation (z. B. durch einen gemeinsam genutzten Speicher) und Synchronisation (z. B. durch einen gemeinsam genutzten Speicher und Zustandssignale). Die Schnittstelle ist vorzugsweise speicherabbildgetreu.
  • Der Schnittstellenblock 140 ermöglicht den Prozessoren das Zusammenwirken mit dem restlichen Teil des Systems. Bei der bevorzugten Ausführungsform wird der Skalar-/Vektorprozessor als Softwaremodem (Transceiver) für die Mobilfunknetze 2G/3G genutzt. Für solch eine Softwaremodem-Funktion kann der Schnittstellenblock 140 eine spezielle Hardware als Eingangsteil enthalten, deren Hauptaufgabe darin besteht, mittels Steuerung durch den Mikrokontroller 130 Steuerworte und Datenworte zum Vektorspeicher (z. B. DMA) zu übermitteln. Die Daten im Vektorspeicher werden dann durch den Skalar-/Vektorprozessor verarbeitet.
  • Der Skalar-/Vektorprozessor 120 kann dem Datenbus 110 untergeordnet sein, während der Mikrokontroller 130 und der Schnittstellenblock 140 (welcher eine DMA-Einheit enthalten kann) übergeordnet fungieren können. Die gesamte Kommunikation mit dem CVP, sei es Programm, Daten oder Steuerung, erfolgt vorzugsweise speicherabbildgetreu. Der Speicher kann ein DRAM sein, der sich nicht auf einem Chip befindet, und dieser DRAM kann auch durch den Skalar-/Vektorprozessor als (Ent-)Verschachtelungsspeicher genutzt werden.
  • In der Beschreibung wird hauptsächlich der Ausdruck „Address Calculation Unit” bzw. ACU verwendet. Für den Zweck der Beschreibung ist dieser Ausdruck als gleichbedeutend mit „Address Generation Unit” bzw. AGU anzusehen. Die Beschreibung konzentriert sich auf die Verwendung solcher Einheiten für das Berechnen von Datenadressen. Fachleute werden in der Lage sein, die gleiche Funktionalität auch für das Berechnen von Befehlsadressen („Schleifensteuerung”) zu nutzen.
  • 2 zeigt die Hauptstruktur des Prozessors gemäß der Erfindung. Der Prozessor enthält einen gepipelineten Vektorverarbeitungsteil 210. Um die Funktionsweise des Vektorsegments zu unterstützen, enthält der Skalar-/Vektorprozessor einen Skalarverarbeitungsteil 220, der für die parallele Arbeit mit dem Vektorsegment eingerichtet ist. Vorzugsweise ist auch der Skalarverarbeitungsteil gepipelinet. Um die Funktionsweise des Vektorsegments zu unterstützen, gewährleistet mindestens eine Funktionseinheit des Vektorsegments auch die Funktionalität des entsprechenden Teils des Skalarsegments. Z. B. kann das Vektorsegment einer Verschiebungsfunktionseinheit in funktioneller Hinsicht dort einen Vektor verschieben, wo eine Skalarkomponente durch das Skalarsegment der Verschiebungsfunktionseinheit eingegeben (oder zum Skalarsegment geliefert) wird. Als solche deckt die Verschiebungsfunktionseinheit sowohl das Vektorsegment als auch das Skalarsegment ab. Aus diesem Grunde haben mindestens einige Funktionseinheiten nicht nur ein Vektorsegment, sondern auch ein Skalarsegment, wo das Vektorsegment und Skalarsegment durch den Austausch von Skalardaten zusammenarbeiten können. Das Vektorsegment einer Funktionseinheit gewährleistet die Rohdaten-Verarbeitungsleistung, während das entsprechende Skalarsegment (d. h. das Skalarsegment der gleichen Funktionseinheit) die Arbeit des Vektorsegments durch das Eingeben und/oder Verbrauchen von Skalardaten unterstützt. Die Vektordaten für die Vektorsegmente werden über eine Vektor-Pipeline geliefert.
  • Bei der bevorzugten Ausführungsform in 2 umfasst der Skalar-/Vektorprozessor die folgenden sieben spezialisierten Funktionseinheiten.
  • Befehlsverteilereinheit (IDU 250). Die IDU enthält den Programmspeicher 252, liest aufeinander folgende VLIW2-Befehle und verteilt die 7 Segmente jedes Befehls auf die 7 Funktionseinheiten. Vorzugsweise enthält sie eine Schleifeneinheit, die bis zu drei verschachtelte Ebenen eines Zero-Overhead Loopings unterstützt. Bei der bevorzugten Ausführungsform unterstützt sie keine Verzweigungen, Sprünge oder Unterbrechungen. Der Startprogrammschrittzähler wird aus dem Arbeitspensum-Deskriptor geladen, der weiter unten ausführlicher beschrieben wird.
  • Vektorspeichereinheit (VMU 260). Die VMU enthält den Vektorspeicher (in 2 nicht abgebildet). Während jedes Befehls kann sie eine Zeile oder einen Vektor aus dem Vektorspeicher senden oder im Vektorspeicher eine Zeile empfangen. Der gleiche Befehl kann außerdem eine Skalarsendeoperation und/oder -empfangsoperation festlegen. Die VMU ist die einzige Funktionseinheit, die mit der Außenwelt verbunden ist, d. h. mit dem Außenbus 110.
  • Die Codeerzeugungseinheit (CGU 262). Die CGU ist auf die Arithmetik mit endlichem Feld spezialisiert. Z. B. kann die CGU zur Erzeugung von Vektoren der CDMA-Codechips und damit zusammenhängender Funktionen verwendet werden, wie z. B. die Kanalcodierung und CRC.
  • ALU-MAC-Einheit (AMU 264). Die AMU ist auf die reguläre Festkommaarithmetik und Festpunktarithmetik spezialisiert. Sie unterstützt vektorübergreifende Rechenoperationen, bei denen die Arithmetik elementweise an mehreren Vektoren durchgeführt wird. Bei einer bevorzugten Ausführungsform gewährleistet die AMU auch einige vektorinterne Rechenoperationen, bei denen die Arithmetik an den Elementen im Rahmen eines einzigen Vektors durchgeführt wird.
  • Mischungseinheit (SFU 266). Die SFU kann Elemente eines Vektors nach einem vorgegebenen Mischungsmuster neu anordnen.
  • Linksverschiebungseinheit (SLU 268). Die SLU kann die Elemente des Vektors durch eine Einheit, wie z. B. ein Wort, ein Doppelwort oder ein Quadwort, nach links verschieben. Der erzeugte Skalar wird ihrem Skalarsegment angeboten. In Abhängigkeit vom Typ der ausgegebenen SLU-Vektoroperation ist der in Anspruch genommene Skalar entweder gleich Null oder ihrem Skalarsegment entnommen.
  • Rechtsverschiebungseinheit (SRU 270). Die SRU ähnelt der SLU, verschiebt aber nach rechts. Außerdem besitzt sie die Fähigkeit, fortlaufende Ergebnisse aus vektorinternen Rechenoperationen in der AMU zusammenzuführen.
  • Die folgende Tabelle zeigt, dass alle FU ein Funktionsvektorsegment 210 haben, wobei einige kein Steuersegment 230 oder Skalarsegment 220 aufweisen.
    Funktionseinheit Steuerung Skalar Vektor
    Befehlsverteilereinheit Folgesteuerung, Schleifendurchlauf Befehlsverteilung
    Vektorspeichereinheit Adressenberechnung E/A Skalar E/A Vektor
    Codeerzeugungseinheit Codevektorerzeugung
    ALU-MAC-Einheit Indizieren Übermitteln Vektorübergreifend: ALU, MAC; multipliz, ...
    Segmentierung Vektorintern: add, max
    Mischungseinheit Vektormischung
    Linksverschiebungseinheit E/A Skalar Vektorverschiebung
    Rechtsverschiebungseinheit E/A Skalar Vektorverschiebungt
  • Der erfindungsgemäße Skalar-/Vektorprozessor wendet die Parallelverarbeitung der Befehlsebenen bei zwei großen Verfahrensweisen an:
    Vektorverarbeitung, wo ein einziger Befehl Vektoren von (skalaren) Daten veraibeitet. Diese Verfahrensweise ist auch als Einzelbefehlsstrom und Mehrfachdatenstrom bzw. SIMD bekannt.
  • Parallele Verarbeitung der Multifunktionseinheiten, wobei jede von ihnen Vektoren verarbeitet. Das kann als eine (beschränkte) Form der Parallelverarbeitung der VLIW-Befehlsebene gesehen werden.
  • Es sollte beachtet werden, dass diese beiden Formen der Parallelverarbeitung auf einer Befehlsebene selbstständig sind, und dass ihre Auswirkungen kumulativ sind.
  • Kommunikation zwischen den FU
  • Die Funktionseinheiten (FU) arbeiten parallel. Jede FU ist in der Lage, Vektordaten zu empfangen und zu senden. Viele FU sind auch in der Lage, Skalardaten zu empfangen und zu senden.
    FU Quelle VMU CGU AMU SFU SLU SRU
    Ziel # Eingaben
    vmu 1 | | | | | |
    cgu 1 | | | | |
    amu 2 | | | | | |
    sfu 1 | | | | | |
    slu 1 | | | | |
    sru 1 | | | | |
  • Alle Funktionseinheiten arbeiten parallel. Beim Empfang ihres Befehlssegments geben sie Daten ein, verarbeiten sie und geben sie aus, sowohl Vektor- als auch – wo zutreffend – Skalardaten. Bei den FU erfolgt die Kommunikation strikt zwischen den Skalarsegmenten oder zwischen den Vektorsegmenten (Kommunikation zwischen den FU). Das heißt, dass die Vektorsegmente aller FU – mit Ausnahme der IDU – durch eine Pipeline miteinander verbunden sind. Bei einer bevorzugten Ausführungsform ist diese Pipeline auf Befehlsbasis konfigurierbar. Zu diesem Zweck werden vorzugsweise die FU durch ein Verbindungsnetz miteinander verbunden, was im Prinzip jedem Vektorsegment ermöglicht, einen Vektor von irgendeinem der anderen Vektorsegmente während jedes Zyklus zu empfangen. Diese Eigenschaft ermöglicht – unter anderem – die Schaffung beliebiger Pipelines der FU (mit Ausnahme der IDU). Die sechs Funktionseinheiten, die die Vektorbahn beeinflussen, können einen Vektor ausgeben und ihn parallel während jedes Taktzyklus zu anderen Einheiten senden. Sie können auch einen Vektor von einer anderen Einheit empfangen. Das Netz ist fast vollständig angeschlossen. Nur die Netzverbindungen, die keine Bedeutung haben, sind ausgelassen worden. Die AMU kann zwei Vektoren gleichzeitig empfangen. Wie in 2 zu sehen ist, wird das Netz vorzugsweise durch jede Funk tionseinheit gebildet, die als Signalquelle (durch eine Scheibe angezeigt) mit einem Netzpfad verbunden ist. Es ist mit allen anderen Pfaden als Signalempfänger (durch ein Dreieck angezeigt) verbunden. Der Abschnitt des VLIW-Befehls für die Funktionseinheiten zeigt an, von welchem Pfad es einen Vektor in Anspruch nehmen sollte. Auf diese Weise kann die Pipeline auf der Grundlage eines Befehls konfiguriert werden. Jeder Pfad kann einen vollständigen Vektor übertragen, z. B. unter Verwendung von 256 parallelen Leitungen. In ähnlicher Weise sind mindestens einige der Skalarsegmente der FU durch eine separate Pipeline miteinander verbunden. Vorzugsweise ist diese Pipeline auch auf der Befehlsgrundlage konfigurierbar. Das Verbindungsnetz zwischen den Skalarsegmenten der FU kann in dem Sinne unvollständig sein, dass kein Skalar zu einem Skalarsegment mindestens einer FU gesendet oder von dort empfangen werden kann. Folglich können weniger Pipelineausrichtungen vorgegeben werden. Die Skalar- und Vektor-Pipelines können selbstständig konfiguriert werden. Dies geschieht z. B., indem im einschlägigen VLIW-Segment angezeigt wird, dass sowohl die Skalar-Pipeline als auch die Vektor-Pipeline durch die Funktionseinheit zu lesen sind.
  • Es gibt keine Verknüpfbarkeit, die zwischen den Steuersegmenten der unterschiedlichen Funktionseinheiten vorgeschrieben ist. Diese Steuersegmente empfangen ein Segment des VLIW-Befehls von der IDU, aktualisieren ihren eigenen Funktionszustand und steuern ihre entsprechenden Skalar- und Vektorsegmente.
  • Kommunikation innerhalb der FU
  • Innerhalb einer FU besteht ein enges Zusammenwirken zwischen diesen Segmenten (Kommunikation innerhalb der FU). Das Zusammenwirken ist ein untrennbarer Bestandteil der Funktionsweise der FU. Beispiele dafür sind die SLU und SRU, in denen der erzeugte und/oder in Anspruch genommene Skalar zum entsprechenden Skalarsegment der Funktionseinheit geliefert/aus ihm entnommen wird.
  • Befehle werden normalerweise in einem einzelnen Zyklus ausgeführt. Ausnahmen werden durch Überlastung im Vektorspeicher bedingt und zeigen sich als Stillstandszyklen.
  • Datenbreiten
  • Bei einer bevorzugten Ausführungsform unterstützt der Skalar-/Vektorprozessor eine Mehrzahl von Datenbreiten und Datentypen, wie in 3 zu sehen ist. Der Grundbaustein der Speicheradressierung ist ein Wort, das auch als Einzelwort bezeichnet wird. Vorzugsweise kann die Datenbreite ein Einzelwort (W), Doppelwort (DW oder 2 W = 16 Bits) oder Quadwort (QW oder 4 W = 32 Bits) sein. Die Größe eines Worts ist W = 8 Bits. Vorzugsweise erscheinen Skalare in drei Größen: (einzelne) Worte, Doppelworte und Quadworte. Ein Vektor hat eine feststehende Größe von PQ Quadworten. Er kann vorzugsweise in einem der drei folgenden Formate strukturiert sein:
    • – PQ Elemente in der Größe eines Quadwortes,
    • – PD = 2PQ Elemente mit der Größe eines Doppelwortes,
    • – PS = 2PD = 4PQ Elemente mit der Größe eines (einzelnen) Wortes.
  • Der Indexierbereich eines Vektorelements ist [0 ... 4PQ – 1]. Daher haben Doppelworte geradzahlige Indizes und die Indizes von Quadworten sind Vielfache von Vier. 3 gibt einen Überblick über die Datenmengen. Die Struktur ist völlig skalierbar in PQ und wird für jede Vektorgröße PQ = 1 definiert. Jedoch für die meisten Situationen wird es bevorzugt, eine Leistung von 2 für PQ zu wählen. Bei der bevorzugten Ausführungsform ist PQ gleich 8, was eine Datenwegbreite und Speicherbreite von 32 Worten zur Folge hat.
  • Befehle
  • Ein CVP-Befehl ist entweder ein Steuerbefehl oder ein VLIW-Befehl. Steuerbefehle können z. B. eine Zero-Overhead-Loop-Initialisierungsein. Es gibt keine Verzweigungen, Sprünge oder Unterprogramme. Ein VLIW-Befehl wird in Segmente unterteilt, bei denen jedes Befehlssegment die durch die entsprechende Funktionseinheit auszuführende(n) Operation(en) vorschreibt. Das Segment kann noch weiter in einen Teil für das Vektorsegment und das Skalarsegment (falls vorhanden) unterteilt werden. Das Segment enthält auch für beide Teile Informati onen darüber, welcher Netzteil für den Datenempfang zu benutzen ist (ein Vektor oder mehrere Vektoren für das Vektorsegment und ein Skalar oder mehrere Skalare für das Skalarsegment).
  • Zustand des Skalar- bzw. Vektorprozessors
  • Der Zustand des CVP besteht aus den kombinierten Zuständen seiner Funktionseinheiten. Bei der bevorzugten Ausführungsform umfasst er:
    • – den Vektorspeicher (Teil der VMU);
    • – den Programmspeicher (Teil der DU);
    • – Vektorregister (alle Funktionseinheiten);
    • – Skalarregister (die meisten Funktionseinheiten);
    • – Steuerregister, einschließlich der Programmschrittzähler und Adressenversatzregister.
  • Zusätzlich zu den Registern, die für Programmierer sichtbar sind, enthält eine CVP-Ausführung in typischen Fällen zusätzliche Register (Vektor-, Skalar- und Steuerregister) für das Pipelining und die Cachespeicherung. Diese sind keine Bestandteile der Befehlslistenarchitektur der CVP.
  • Einige der (Vektor-, Skalar- und Steuer-)Register sind so genannte Konfigurationsregister. Der Inhalt eines Konfigurationsregisters kann nur aus dem Vektorspeicher geladen werden. Es gibt keine andere Möglichkeit, seinen Wert zu verändern. Ein Konfigürationsregister unterstützt die Konfiguration von Funktionseinheiten und definiert in typischer Weise einen Funk tionsparameter. Durch das Speichern dieser „halbkonstanten” Funktionsparameter in Konfigurationsregistern werden sowohl die Befehlsbreite als auch der Speicherdatenverkehr beträchtlich reduziert.
  • Ein Überblick über die Bestandteile des CVP-Funktionszustandes wird in der unten gezeigten Tabelle gegeben.
    FU Steuerweg Skalarweg Vektorweg
    Daten Konfiguration Daten Konfiguration Daten Konfiguration
    VMU Versatz 5 Adressen-CU 8 Datenspeicher 2048
    CGU Zähler 3 Codes 3 Zustand 6 Masken 2
    Polynome 2
    AMU 1 Empfangen 1 Segmentgröße 1 Registerdatei 16
    SFU Register 1 Shufflemuster 4
    SLU Empfangen 1 Registerdatei 2
    SRU Empfangen 1 Registerdatei 2
    IDU PC 1 Schleifen-CU 2 Programmspeicher 2048
  • Alle Register, die für den Programmierer sichtbar sind, können aus dem Vektorspeicher geladen werden. Alle Register außer den Konfigurationsregistern können im Vektorspeicher gespeichert werden. Durch das Speichern der CVP-Register am Ende eines Arbeitspensums und durch ihre Wiederherstellung zu einem späteren Zeitpunkt kann der CVP die Erfüllung einer bestimmten Aufgabe fortsetzen, als wenn in der Zwischenzeit keine anderen Arbeitspensa ausgeführt worden wären. Diese Arbeitsgänge zur Speicherung und Wiederherstellung sind der freien Auswahl und vielleicht der Vorliebe des Nutzers überlassen und müssen ausdrücklich einprogrammiert werden.
  • Die Speichereinheit
  • 4 zeigt ein Blockdiagramm der Speichereinheit (VMU 400), in der die erfindungsgemäße Speicheranordnung verwendet wird. Bei der unten beschriebenen, bevorzugten Ausführungsform wird die Speichereinheit in einem Vektorprozessor in Verbindung mit einem reellen Speicher mit einer Verarbeitungsbreite verwendet, die einen ganzen Vektor speichern kann. Man wird anerkennen, dass das gleiche Konzept auch Anwendung auf solche Skalarprozessoren finden kann, wie z. B. die herkömmlichen DSP. Die VMU enthält und steuert den Vek torspeicher 410, der den anderen Funktionseinheiten eine enorme Datenbandbreite zur Verfügung stellt. Der reelle Vektorspeicher 410 stützt sich vorzugsweise auf einen SRAM mit einem Zugriffskanal. Da integrierte SRAMs, die Ps·W breit sind, nicht überall erhältlich sind, kann der reelle Speicher durch ein oder mehrere Registerbereiche breite Random Access Memories (RAM) gebildet werden, die parallel angeordnet sind. Vorzugsweise werden die Skalardaten im gleichen Speicher wie dem gespeichert werden, der für die Speicherung der Vektordaten genutzt wird. In solch einem System können Skalare mit Vektoren vermischt werden, denen sie entsprechen. Aus Gründen der Kosteneffektivität und der Gewährleistung einer optimalen Speicherzugriffszeit ermöglicht der Speicher vorzugsweise nur das Lesen und Schreiben vollständiger Vektorlinien. Als solcher besteht der reelle Speicher logischerweise aus Linien, die jeweils die Größe eines Vektors haben. Um das Lesen und Schreiben der Skalare zu unterstützen, wird zusätzliche Hardware (Linien-Cache-Speicher 430 und Unterstützung 440 für die Skalarauswahl im Rahmen einer Linie) genutzt, um Zugriff auf den reellen Speicher mit Vektorbreite in skalarer Form zu haben.
  • 5 zeigt mehr Details der Anordnung. Sie zeigt den reellen Speicher 500 mit einem vollbreiten Port 505 (bei diesem Beispiel mit der Breite eines Vektors). In der Figur wird aber nur ein Leseport gezeigt. Fachleute können ohne weiteres die ähnliche Anordnung für das Schreiben von Daten erkennen. Zu dieser Anordnung zählt mindestens ein Register der gleichen Breite, wie sie der Port 505 des reellen Speichers aufweist. Zu sehen sind vier Register 510, 512, 514, 516. Alle Register sind wahlweise an den Leseport 505 für den Datenempfang anschließbar. In der Figur ist ein Register 514 für das Lesen kleinerer Datenelemente reserviert, bei diesem Beispiel: ein Skalar. Vorzugsweise passen mindestens zwei der kleineren Datenelemente in das Register. Das Datenregister 514 ist mit einem Leseport 525 verbunden, der an eine Verarbeitungseinheit (oder allgemeiner: an eine Datensenke) gekoppelt ist. Vorzugsweise wird ein Multiplexer 520 an das Register 514 gekoppelt, um die relevanten skalaren Daten aus dem Register auszuwählen. Der Multiplexer kann durch die Nummer des Skalars im Register gesteuert werden, die durch die niedrigstwertigen Bits der Adresse vorgegeben ist (z. B. bei Verwen dung eines 256-Bit-Vektors mit 32 8-Bit-Worten wird der Skalar durch die fünf niedrigstwertigen Bits gekennzeichnet). Multiplexer sind bekannt und werden deshalb nicht weiter beschrieben. Das Register ist an den Leseport 505 des reellen Speichers für den Datenempfang (volle Breite) angeschlossen. Im Allgemeinen kann es Nr-Skalar-Leseports geben, die jeweils an ein Register mit Vektorbreite angeschlossen sind. Das können separate Register oder sogar das gleiche sein. Die Register sind Bestandteil des Cache-Speichers 430 aus 4. Die Multiplexer sind Bestandteil des Skalarauswahlblocks 440. In ähnlicher Weise kann es dort aber auch Nw-Skalar-Schreibports mit Nw-vektorbreiten Registern (nicht abgebildet) geben, die im Cache-Speicher 430 zur Verfügung stehen. Für jeden Skalar-Schreibport ist das entsprechende Register im Cache-Speicher 430 an einen vektorbreiten Demultiplexer von Nw-Eingabedaten angeschlossen, um so auswählen zu können, welche Cache-Zeile in den reellen Speicher eingespeichert wird. Wenn ein VMU-Befehl verlangt, dass mehrere Cache-Zeilen einzuspeichern sind, erfolgt das sequentiell, indem alle anderen Funktionseinheiten solange angehalten werden, bis alle Schreiboperationen beendet worden sind. Bei Zugriffen auf unterschiedliche Schreibports (aber im gleichen Befehl) ist es nicht gestattet, auf die gleiche Zeile im reellen Speicher zuzugreifen. Wenn man von der Annahme einer räumlich-nahen Lage bei aufeinander folgenden Skalarzugriffen ausgeht (z. B. aufeinander folgende Skalare, die zu einer Verarbeitungsschleife gehören, werden im Wesentlichen hintereinander im reellen Speicher 410 gespeichert), kann die Häufigkeit des Zugriffs auf den reellen Speicher 410 zum Laden/Speichern dieser Register erheblich unter der Häufigkeit des skalaren Zugriffs auf diese Register liegen.
  • Bei der bevorzugten Ausführungsform muss ein Vektor nicht auf Vektorgrenzen im Speicher ausgerichtet werden. Als solcher kann ein Vektor, der aus PS Worten besteht, eine beliebige Speicheradresse aufweisen. Eine Speicherzeile hat die gleiche Größe, ihre Startadresse ist aber definitionsgemäß ein Vielfaches von PS. (Um Zugriff auf die Zeilen zu haben, werden die niedrigstwertigen 2log PS-Bits der Adresse ignoriert.) Durch das Ermöglichen einer beliebigen Ausrichtung der Vektoren (normalerweise eine Ausrichtung auf die kleinste Wortgrenze) kann der Speicher besser genutzt werden, d. h. mit weniger leeren Speicherplätzen. Es werden Maß nahmen getroffen, um dem Skalar-/Vektorprozessor zu ermöglichen, einzelne Vektoren zu lesen/schreiben, während der Vektor in zwei aufeinander folgenden Zeilen des reellen Speichers gespeichert werden kann. Dafür wird eine Ausrichtungseinheit für Vektorsendeoperationen benutzt. Die Ausrichtungseinheit wird im Block 440 in 4 gezeigt. Mehr Details werden in 5 gezeigt. Die Ausrichtungseinheit 530 ist an die zwei Zeilen-Cachespeicher 510 und 512 angeschlossen (d. h. an zwei Register mit Vektorbreite), die beide Zeilen enthalten, die vom angeforderten Vektor überspannt werden. Wenn der Zugriff auf aufeinander folgende Vektoren erfolgt, ist nur eine neue Zeile aus dem reellen Speicher abzurufen, da die andere noch in einem dieser Zeilen-Cachespeicher vorhanden ist. Die Teile der beiden im Cache abgespeicherten Zeilen, die den angeforderten Vektor bilden, werden mit einem aus Multiplexer 530 bestehenden Netz verbunden und dann in einem vektorbreiten Pipelineregister gespeichert. Das Pipelineregister empfangt die Daten über einen Vektorleseport 535. Aus dem Pipelineregister wird der Wert auf der Datensammelleitung der VMU überlagen.
  • 5 zeigt auch ein weiteres vektorbreites Register 516 und einen dazugehörigen vektorbreiten Leseport 540, der das direkte Abrufen einer Zeile aus dem Speicher aktiviert, in dem das Register als Cache-Speicher fungiert.
  • Vorzugsweise bleibt die Cachespeicherung rund um den Vektorspeicher dem Programmierer verborgen. Trotz der Verwendung von Cache-Speichern zur Emulation eines Mehrkanal-Vektorspeichers mit einem SRAM, der nur über einen Zugriffskanal verfügt, kann der Programmierer dann einen kohärenten Vektorspeicher voraussetzen. Da jedes Register eine Kopie der möglicherweise gleichen Daten im reellen Speicher enthalten kann, sollte dann die Kohärenz automatisch aufrechterhalten werden, anstatt den Programmierer auf die Kohärenz aufpassen zu lassen. Zu diesem Zweck erfolgt eine Überprüfung auf Adressenkonflikte, d. h. es wird der Frage nachgegangen, ob es zu einer Schreiboperation auf ein Register für eine Zeilenadresse gekommen ist, bei der die gleiche Zeile auch in einem der anderen Register gespeichert wird. Für eine solche Überprüfung reicht es aus, bei jedem einzelnen Register die Zeilenadresse (den bedeutsamsten Teil der Adresse) der in dem Register gespeicherten Zeile zu speichern.
  • Wenn ein möglicher Konflikt festgestellt wird, kann eine Korrekturmaßnahme getroffen werden. Ein Leseregister wird zum Beispiel als ungültig markiert, sobald eine Schreiboperation in einem Register mit der gleichen Zeile vorgekommen ist. Von diesem Register kann kein weiterer Gebrauch gemacht werden, wenn es nicht erneut aus dem reellen Speicher ausgelesen worden ist (nachdem das Schreibregister zuerst in den Speicher zurück geschrieben worden ist). Als Alternative dazu kann der Inhalt eines Schreibregisters auf alle Leseregister mit der gleichen Zeile kopiert werden, nachdem eine Schreiboperation auf das Schreibregister erfolgt ist. Eine dritte Möglichkeit besteht darin, bei den Lese- und Schreibports die Register gemeinsam zu benutzen. Diese letztgenannte Verfahrensweise bedarf zusätzlicher vektorbreiter Multiplexer, wodurch zwar die Kosten steigen, aber auch ein Leistungsvorteil entsteht. Tatsächlich wird hier eine Umgehung geschaffen, bei der ein an Leseports angeschlossenes Leseregister umgangen wird und die Daten in Wirklichkeit aus einem Schreibregister über den Leseport ausgelesen werden. All diese Korrekturmaßnahmen erfolgen unter Nutzung einer Funktionsfähigkeit, die insgesamt als 'Kohärenzprüfer' bezeichnet wird. Um festzustellen, wo möglicherweise Daten in kopierter Form gespeichert sind (mit einem möglichen Übereinstimmungsproblem), werden Kohärenzregister verwendet, die Informationen über den Inhalt speichern, der in dem Datenregister gespeichert ist, mit dem das Kohärenzregister verbunden ist. Das Kohärenzregister speichert vorzugsweise die physische Adresse der Daten, die in dem entsprechenden Datenregister gespeichert sind. Die gleichen Kohärenzprüfungen und Maßnahmen können statt nur für den Zugriff auf Skalare auch für Vektorleseoperationen durchgeführt werden, bei denen der Vektor (teilweise) in einem Register gespeichert wird, das zu einem Schreibport gehört. Vorzugsweise erfolgt eine Zeilenlese- oder Zeilenschreiboperation auf den reellen Speicher in einem einzigen Taktzyklus durch einen einzigen Zugriff auf den reellen Speicher 510.
  • Die Vektorspeichereinheit kann bei einem einzigen VMU-Befehl bis zu vier gleichzeitige „Teiloperationen” unterstützen:
    einen Vektor senden oder eine Zeile senden oder eine Zeile von/auf einem VM-Platz empfangen;
    einen Skalar aus einem VM-Platz senden;
    einen Skalar auf einem VM-Platz empfangen;
    den Funktionszustand/die Leistung einer Adressrechnungseinheit modifizieren.
    VMU_cmd = (vopc, aid_v, ainc_v, sopc, aid_s, ainc_s, size, srcv, aid_r, ainc_r, aopc, aid_a, imm_addr)
    vopc = NOP|SENDL|SBNDV|RCVL_CGU|RCVL_AMU|RCVL_SFU|RCVL_SLU|RCVL_SRU
    Aid_v = {0, ..., 7}
    Ainc_v = NOP|INC
    sopc = NOP|SEND
    aid_s = {0, ..., 7}
    ainc_s = NOP|INC
    size = WORD|DWORD|QWORD
    srcv = NONE|VMU|AMU|SLU|SRU
    aid_r = {0, ..., 7}
    ainc_r = NOP|INC
    aopc = NOP|IMM|LDBASB|LDOFFS|LDINCR|LDBOUND
    aid_a = {0, ..., 7}
    imm_addr = {0.0, ..., 524288.31}|{–262144.0, ..., 262143.31}
  • Der Befehl der VMU kann in Abhängigkeit von der Anzahl der Teiloperationen und der Kontinuität der Adressfolgen eine variable Anzahl von Taktzyklen in Anspruch nehmen.
  • Die VMU-Eingaben/Ausgaben sind folgende:
    Eingabe Erläuterung
    Cmd VMU Befehl
    rcv_amu AMU Vektorempfangsbus
    rcv_cgu CGU Vektorempfangsbus
    rcv_sfu SFU Vektorempfangsbus
    rcv_slu SLU Vektorempfangsbus
    rcv_sru SRU Vektorempfangsbus
    s_rcv_amu AMU Skalarempfangsbus
    s_rcv_slu SLU Skalarempfangsbus
    s_rcv_sru SRU Skalarempfangsbus
    Ausgabe Erläuterung
    Snd VMU Vektorergebnis
    s_snd VMU Skalarergebnis
  • Außerdem gibt es zwei Skalarports (einen zum Senden, einen zum Empfangen), die mit dem externen Bus zu verbinden sind. Die Aufgabe des Mikrokontrollers 130 besteht darin, diese Speicherzugriffsmöglichkeiten mit CVP-Befehlen zu synchronisieren.
  • Das Vektorsegment der VMU enthält den reellen Vektorspeicher 510:
    Bezeichnung Erläuterung
    mem [4096][32] Vektorspeicher: 4096 Zeilen mit jeweils 32 Worten
  • Es ist zu beachten, dass Vektorteiloperationen nicht auf den Skalarspeicher zugreifen können. Deshalb wird das bedeutsamste Adressenbit für Vektorteiloperationen ignoriert. Das Vektorsegment der VMU unterstützt sieben Teiloperationen, die in dem Befehlsfeld VOPC kodiert sind: Vektor senden (SENDV), Zeile senden (SENDL) sowie fünf Teiloperationen „Zeile empfangen„ (RCVL_CGU, RCVL_AMU, RCVL_SFU, RCVL_SLU und RCVL_SRU). Die Funktionseinheit, die der Ausgangspunkt für den Empfang ist, wird ausdrücklich in der entsprechenden Teiloperation „Zeile empfangen„ kodiert. Die Leseadresse oder Schreibadresse für jede Teiloperation wird durch eine entsprechende Adressrechnungseinheit vorgegeben. Das Befehlsfeld AINC_V wird von allen Vektorteiloperationen gemeinsam benutzt. Es wird zu der im Befehlsfeld AID_V kodierten ACU weitergeleitet. Das Befehlsfeld AINC_V gibt an, ob die betroffene Adressrechnungseinheit eine Nachinkrementierungsoperation durchführen sollte.
    Schutz Übergang
    vopc = NOP None
    vopc = SENDL snd = mem.line[acu[aid_v].out]
    vopc = SENDV snd = mem.vector[acu[aid_v].out]
    vopc = RCVL_CGU mem.line[acu[aid_v].out] = rcv_cgu
    vopc = RCVL_AMU mem.line[acu[aid_v].out] = rcv_amu
    vopc = RCVL_SFU mem.line[acu[aid_v].out] = rcv_sfu
    vopc = RCVL_SLU mem.line[acu[aid_v].out] = rcv_slu
    vopc = RCVL_SRU mem.line[acu[aid_v].out] = rcv_sru
  • Es ist zu beachten, dass die Operationen als Sendeaktionen-(oder Empfangsaktionen) und nicht als Ladeaktionen (oder Speicheraktionen) gedacht sind, die einen Zielort (oder Ausgangsort) haben. Die letztgenannten werden von Operationen in anderen Funktionseinheiten vorgegeben. Eine „Zeile senden” entspricht in funktioneller Hinsicht „Vektor senden” mit der gleichen Adresse. Die Teiloperationen „Zeile senden” werden normalerweise genutzt, um Funk tionseinheiten zu konfigurieren oder den Zustand einer Aufgabe in den verschiedenen Registern wiederherzustellen. Durch Einführung einer speziellen Betriebsart für die Teiloperation „Zeile senden”, können die Zugriffszeiten aufeinander folgender Vektorsendungen („vector streaming”) durch den effizienten Einsatz von Cache-Speichern optimiert werden.
  • Die skalare Teiloperation der VMU wird im Befehlsfeld SOPC kodiert. Sie unterstützt nur die Teiloperation: Skalar senden (SEND). Die Leseadresse wird von der Adressrechnungseinheit vorgegeben, die in dem Befehlsfeld AID_S angegeben ist. Das Befehlsfeld AINC_S gibt an, ob diese Adressrechnungseinheit eine Nachinkrementierungsoperation durchführen sollte. Der Operand SIZE (WORD, DWORD oder QWORD) der skalaren Teiloperation wird durch das Befehlsfeld SIZE determiniert.
    Schutz Übergang
    sopc = NOP None
    sopc = SEND && size = WORD S_snd = mem.word[acu[aid_s].out]
    sopc = SEND && size = DWORD S_snd = mem.dword[acu[aid_s].out]
    sopc = SEND && size = QWORD S_snd = mem.qword[acu[aid_s].out]
  • Die Teiloperation „Skalar empfangen” der VMU wird im Befehlsfeld SRCV kodiert. Wenn der Wert gleich NONE ist, wird kein „Skalar empfangen” durchgeführt. Ansonsten bestimmt das Befehlsfeld SRCV, welche Funktionseinheit als Ausgangsort für die Teiloperation „Skalar empfangen” dienen wird. Die Schreibadresse wird von der Adressrechnungseinheit vorgegeben, die im Befehlsfeld AID_R angegeben ist. Das Befehlsfeld AINC_R gibt an, ob diese Adressrechnungseinheit eine Nachinkrementierungsoperation durchführen sollte. Die Größe des Operanden (WORD, DWORD oder QWORD) der Teiloperation „Skalar empfangen” wird von der Größe des Ausgangsskalars bestimmt.
    Schutz Übergang
    srcv = NONE None
    srcv = VMU mem.scalar[acu[aid_r].out] = s_rcv_vmu
    srcv = AMU mem.scalar[acu[aid_r].out] = s_rcv_amu
    srcv = SLU mem.scalar[acu[aid_r].out] = s_rcv_slu
    srcv = SRU mem.scalar[acu[aid_r].out] = s_rcv_sru
  • Die Telloperationen Senden und Empfangen können zu einer Skalarübertragungsoperation von einem Vektorspeicherplatz zum anderen verknüpft werden. Die Adresse für jeden Zugriff wird von einer entsprechenden Adressrechnungseinheit vorgegeben.
  • Das Steuersegment der VMU 550 ist hauptsächlich eine Gruppe von Address-Computation Units (ACU) oder Address Generation Units (AGU), die solche Adressierungsarten unterstützen, wie jene in den herkömmlichen DSP. Eine solche Einheit führt eine oder mehrere Adressenberechnungen pro Befehl durch, ohne den Hauptdatenweg des Prozessors zu benutzen. Zum Beispiel kann die Adresse eines Skalars nach jedem skalaren Lesezugriff nachinkrementiert werden. Das macht es möglich, dass die Adressenberechnung parallel zu Rechenoperationen an Daten erfolgt, wodurch die Leistung des Prozessors verbessert wird. In Abhängigkeit von der unterstützten Gruppe der Adressierungsarten braucht solch eine ACU den Zugriff auf eine Anzahl von Registern. Zum Beispiel:
    • – Eine relative Adressierung, d. h. die Adressierung in Bezug auf eine so genannte Basisadresse, bedarf eines Basisregisters base.
    • – Der Versatz in Bezug auf die Basisadresse wird in einem Versatzregister offs gespeichert.
    • – Vor- bzw. Nachinkrementierung des Versatzes durch einen Wert, der in einem Inkrementierungsregister incr gespeichert wird.
    • – Moduloadressierung in Bezug auf eine Adresse, die in einem Begrenzungsregister bound gespeichert wird.
  • Mit dieser Gruppe von Adressierungsarten kann Folgendes unterstützt werden. Gehen Sie von der Annahme eines Versatzregisters offs aus. Nach jedem Speicherzugriff (Lesen oder Schreiben) auf die Adresse base + offs wird das Register offs entsprechend dem offs = (offs + incr) Modulo bound aktualisiert. Daher verändert sich offs häufig (nach jedem Zugriff), während die bei base, incr und bound gespeicherten Werte sich nicht häufig verändern. In typischen Fällen werden jene drei letztgenannten Register vor einer Programmschleife initialisiert. Die Rechenoperation der ACU wird hier nicht im Detail beschrieben.
  • Es sollte beachtet werden, dass die oben erwähnten Ausführungsformen die Erfindung mehr veranschaulichen als eingrenzen, und Fachleute werden in der Lage sein, viele alternative Ausführungsformen zu ersinnen, ohne vom Schutzumfang der beigefügten Patentansprüche abzuweichen. In den Patentansprüchen dürfen alle in Klammern gesetzten Bezugszeichen nicht als Einschränkung des Anspruchs ausgelegt werden. Die Wörter „umfassend” und „einschließlich” schließen neben den in einem Anspruch genannten Elementen und Verfahrensschritten nicht das Vorhandensein anderer Element oder Verfahrensschritte aus.
  • Datenmenge zu bearbeiten, wobei die erste Datenbreite mindestens zweimal so groß wie die zweite Datenbreite ist.
  • 15. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass der Speicher in den Prozessor eingebaut ist.
  • Übersetzung der Zeichnungen
  • Fig. 1
    rf control = radio frequency control Hochfrequenzregelung bzw. -steuerung
    if/rf = intermediate frequency/radio
    frequency Zwischenfrequenz/Hoch- bzw.
    Funkfrequenz,
    interface Schnittstelle
    DSP or Digitaler Signalprozessor oder
    μ controller Mikrokontroller
    vector memory Vektorspeicher
    CVP (Co-Vector-Processor) Konvektorprozessor
    functional units Funktionseinheiten
    Fig. 2
    control section Steuersegment
    scalar section Skalarsegment
    vector section Vektorsegment
    ctrl = control Steuerung bzw. Regelung
    Fig. 4
    ACU = address computation unit Adressrechnungseinheit
    address Adresse
    physical memory Reeler Speicher
    AMDC SRAM SRAM von AMDC
    256 b wide data path 256-Bit-breiter Datenweg
    arbitration + control Ausgleich + Steuerung
    line caches Zeilen-Cachespeicher
    vector alignment Vektorausrichtung
    scalar selection Skalarauswahl
    cmd = command Befehl
    external bus (32 b) externer Datenbus (32 Bit)
    scalar receive Skalar empfangen
    scalar send Skalar senden
    vector/line acc. Vektor-/Zeilenzugriff

Claims (14)

  1. Verarbeitungssystem mit einem Prozessor (120) und einem reellen Speicher (500) mit einem Speicherport (505) fester Größe, um Zugang zu den Daten im Speicher zu haben; wobei der Prozessor dafür eingerichtet ist, Daten mindestens einer ersten Datenmenge (210) und einer kleineren zweiten Datenmenge (220) zu bearbeiten; wobei die erste Datenmenge gleich der Größe oder kleiner als die Größe des Speicherports (505) ist und das Verarbeitungssystem mindestens ein mit dem Speicherport (505) verbundenes Datenregister (514) und mindestens einen Datenport (525) der zweiten mit dem Datenregister (514) verbundenen Datenmenge sowie den Prozessor (120) zur Ermöglichung des Zugangs zu den Datenelementen der zweiten Datenmenge enthält; dadurch gekennzeichnet, dass das Datenregister (514) der ersten Datenmenge zugehörig ist und das Verarbeitungssystem Mittel (520) zur Auswahl eines Datenelements der zweiten Datenmenge aus dem adressengesteuerten Datenregister (514) enthält.
  2. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass die Größe des Speicherports mindestens zweimal so groß wie die zweite Datenmenge ist.
  3. Verarbeitungssystem nach Anspruch 2, dadurch gekennzeichnet, dass der Datenport ein Lesekanal ist und das Verarbeitungssystem einen Multiplexer zum Auswählen und Extrahieren eines Datenelements der zweiten Datenmenge aus dem leseadressengesteuerten Datenregister enthält.
  4. Verarbeitungssystem nach Anspruch 2, dadurch gekennzeichnet, dass der Datenport ein Schreibkanal ist und der Prozessor einen Demultiplexer zum Einfügen eines Datenelements der zweiten Datenmenge an einem auswählbaren Platz im schreibadressengesteuerten Datenregister enthält.
  5. Verarbeitungssystem nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass das Verarbeitungssystem eine Mehrzahl von Datenports der mit dem Prozessor verbundenen zweiten Datenmenge und ein dazugehöriges entsprechendes Datenregister für jeden der Daten ports umfasst, das mit dem jeweiligen Datenport und einem Port des reellen Speichers verbunden ist.
  6. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass der Datenport ein Lesekanal ist und das Verarbeitungssystem einen Kohärenzprüfer enthält, der für das Datenregister ein dazugehöriges Kohärenzregister zum Speichern von Informationskennungsdaten enthält, die im Datenregister gespeichert werden; wobei der Kohärenzprüfer in der Lage ist, nachzuprüfen, ob die Daten, die aus dem Speicher gelesen werden sollen, mit den Daten übereinstimmen, die im Datenregister gespeichert sind, indem eine Leseadresse für den Zugriff zum Speicher mit der Kennungsinformation verglichen wird, die im Kohärenzregister gespeichert ist.
  7. Verarbeitungssystem nach Anspruch 6, dadurch gekennzeichnet, dass die Kennungsinformation eine physikalische Adresse für den Zugriff auf ein Wort im reellen Speicher enthält, wo das Wort eine Breite des Speicherports hat.
  8. Verarbeitungssystem nach Anspruch 6, dadurch gekennzeichnet, dass der Kohärenzprüfer einen Konfliktlöser enthält, um als Reaktion auf die Erkennung eines möglichen Übereinstimmungskonfliktes Korrekturmaßnahmen zu treffen.
  9. Verarbeitungssystem nach Anspruch 8, dadurch gekennzeichnet, dass der Konfliktlöser dafür eingerichtet ist, Korrekturmaßnahmen zu treffen, indem das Datenregister als ungültig für den Lesezugriff gekennzeichnet wird, was ein erneutes Laden des Inhalts des Datenregisters aus dem Speicher auslöst, und zwar als Reaktion auf einen Lesezugriff auf das Datenregister.
  10. Verarbeitungssystem nach Anspruch 8, dadurch gekennzeichnet, dass das Verarbeitungssystem eine Mehrzahl von Datenports der mit dem Prozessor verbundenen zweiten Datenmenge und für jeden der Datenports ein zugehöriges entsprechendes Datenregister enthält, das mit dem entsprechenden Datenport und einem Port des reellen Speichers verbunden ist; und der Kohärenzprüfer enthält ein Kohärenzregister für jedes entsprechende Datenregister zur Speicherung von Informationskennungsdaten, die in dem entsprechenden Datenregister ge speichert werden; und der Konfliktlöser ist dafür eingerichtet, um als Reaktion auf einen Schreibzugriff auf eines der Datenregister und/oder auf einen Schreibzugriff auf den reellen Speicher Korrekturmaßnahmen zu treffen, indem der in das Datenregister oder in den Speicher ein geschriebene Inhalt auf alle anderen Datenregister und/oder auf einen Platz im Speicher kopiert wird, der entsprechend der Kennungsinformation die gleichen Daten speichert.
  11. Verarbeitungssystem nach Anspruch 8, dadurch gekennzeichnet, dass das Verarbeitungssystem eine Mehrzahl von Datenports der mit dem Prozessor verbundenen, zweiten Datenmenge und für jeden der Datenports ein zugehöriges entsprechendes Datenregister enthält, das mit dem entsprechenden Datenport und einem Port des reellen Speichers verbunden ist; und mindestens eines der Datenregister, das im weiteren als „Leseregister” bezeichnet wird, ist mit einem Lese-Datenport verbunden, und mindestens eines der Datenregister, das im weiteren als „Schreibregister” bezeichnet wird, ist mit einem Schreib-Datenport verbunden; und der Prozessor enthält einen Nebenweg, um wählbar Daten aus dem Schreibregister dem Lese-Datenport zur Verfügung zu stellen; wobei der Kohärenzprüfer für jedes entsprechende Datenregister ein Kohärenzregister zur Speicherung von Informationskennungsdaten enthält, die im zugehörigen Datenregister gespeichert sind; und der Konfliktlöser dafür eingerichtet ist, Korrekturmaßnahmen zu treffen, und zwar als Reaktion auf das Einschreiben von Daten in das Schreibregister, das den Nebenweg für einen sukzessiven Lesezugriff zum Leseregister aktiviert, falls das Leseregister entsprechend der Kennungsinformation das gleiche Datenelement speichern sollte.
  12. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass der reelle Speicher sich auf einen statischen Schreib-Lese-Speicher (RAM) stützt.
  13. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass der reelle Speicher durch eine Mehrzahl von parallel angeordneten Bereichen eines Schreib-Lese-Speichers (RAM) gebildet wird.
  14. Verarbeitungssystem nach Anspruch 1, dadurch gekennzeichnet, dass der Prozessor dafür eingerichtet ist, Vektoren der ersten Datenmenge sowie Skalare der zweiten
DE60316151T 2002-05-24 2003-05-07 Zugriff zum breiten speicher Expired - Lifetime DE60316151T2 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
EP02077034 2002-05-24
EP02077034 2002-05-24
EP02078618 2002-09-04
EP02078618 2002-09-04
PCT/IB2003/001891 WO2003100599A2 (en) 2002-05-24 2003-05-07 Access to a wide memory

Publications (2)

Publication Number Publication Date
DE60316151D1 DE60316151D1 (de) 2007-10-18
DE60316151T2 true DE60316151T2 (de) 2009-10-22

Family

ID=29585702

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60316151T Expired - Lifetime DE60316151T2 (de) 2002-05-24 2003-05-07 Zugriff zum breiten speicher

Country Status (9)

Country Link
US (1) US7430631B2 (de)
EP (1) EP1512068B1 (de)
JP (1) JP2005527035A (de)
CN (1) CN1656445B (de)
AT (1) ATE372542T1 (de)
AU (1) AU2003222411A1 (de)
DE (1) DE60316151T2 (de)
TW (1) TWI291096B (de)
WO (1) WO2003100599A2 (de)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7725745B2 (en) * 2006-12-19 2010-05-25 Intel Corporation Power aware software pipelining for hardware accelerators
WO2008126041A1 (en) * 2007-04-16 2008-10-23 Nxp B.V. Method of storing data, method of loading data and signal processor
US20090198910A1 (en) * 2008-02-01 2009-08-06 Arimilli Ravi K Data processing system, processor and method that support a touch of a partial cache line of data
US8117401B2 (en) 2008-02-01 2012-02-14 International Business Machines Corporation Interconnect operation indicating acceptability of partial data delivery
US8108619B2 (en) * 2008-02-01 2012-01-31 International Business Machines Corporation Cache management for partial cache line operations
US8140771B2 (en) * 2008-02-01 2012-03-20 International Business Machines Corporation Partial cache line storage-modifying operation based upon a hint
US8255635B2 (en) * 2008-02-01 2012-08-28 International Business Machines Corporation Claiming coherency ownership of a partial cache line of data
US7958309B2 (en) 2008-02-01 2011-06-07 International Business Machines Corporation Dynamic selection of a memory access size
US8024527B2 (en) * 2008-02-01 2011-09-20 International Business Machines Corporation Partial cache line accesses based on memory access patterns
US8250307B2 (en) * 2008-02-01 2012-08-21 International Business Machines Corporation Sourcing differing amounts of prefetch data in response to data prefetch requests
US8266381B2 (en) * 2008-02-01 2012-09-11 International Business Machines Corporation Varying an amount of data retrieved from memory based upon an instruction hint
US8035537B2 (en) * 2008-06-13 2011-10-11 Lsi Corporation Methods and apparatus for programmable decoding of a plurality of code types
US7895381B2 (en) * 2009-02-16 2011-02-22 Himax Media Solutions, Inc. Data accessing system
US8117390B2 (en) * 2009-04-15 2012-02-14 International Business Machines Corporation Updating partial cache lines in a data processing system
US8176254B2 (en) * 2009-04-16 2012-05-08 International Business Machines Corporation Specifying an access hint for prefetching limited use data in a cache hierarchy
US8140759B2 (en) * 2009-04-16 2012-03-20 International Business Machines Corporation Specifying an access hint for prefetching partial cache block data in a cache hierarchy
CN101986287B (zh) * 2010-11-25 2012-10-17 中国人民解放军国防科学技术大学 用于向量数据流的重整理缓冲器
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
JP5971635B2 (ja) * 2011-01-25 2016-08-17 エヌエックスピー カナダ インコーポレイテッド ベクトルユニット共有の装置および方法
CN107092465B (zh) * 2011-12-23 2021-06-29 英特尔公司 用于提供向量混合和置换功能的指令和逻辑
US9342479B2 (en) 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US9411592B2 (en) 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
CN104679584B (zh) * 2013-11-28 2017-10-24 中国航空工业集团公司第六三一研究所 矢量上下文切换方法
CN107077381B (zh) 2014-10-09 2020-04-28 华为技术有限公司 异步指令执行装置和方法
CN105337995B (zh) * 2015-11-29 2019-06-21 恒宝股份有限公司 一种智能卡快速个人化方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4949247A (en) * 1988-02-23 1990-08-14 Stellar Computer, Inc. System for transferring multiple vector data elements to and from vector memory in a single operation
US5379393A (en) * 1992-05-14 1995-01-03 The Board Of Governors For Higher Education, State Of Rhode Island And Providence Plantations Cache memory system for vector processing
US5426754A (en) * 1992-05-26 1995-06-20 International Business Machines Corporation Cross-interrogate method and means for combined scaler and vector processing system
US5537606A (en) * 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US5689653A (en) * 1995-02-06 1997-11-18 Hewlett-Packard Company Vector memory operations
US6006315A (en) * 1996-10-18 1999-12-21 Samsung Electronics Co., Ltd. Computer methods for writing a scalar value to a vector
US5928350A (en) * 1997-04-11 1999-07-27 Raytheon Company Wide memory architecture vector processor using nxP bits wide memory bus for transferring P n-bit vector operands in one cycle

Also Published As

Publication number Publication date
AU2003222411A1 (en) 2003-12-12
EP1512068B1 (de) 2007-09-05
TW200407705A (en) 2004-05-16
ATE372542T1 (de) 2007-09-15
AU2003222411A8 (en) 2003-12-12
CN1656445B (zh) 2010-05-05
DE60316151D1 (de) 2007-10-18
WO2003100599A3 (en) 2004-07-22
US20050240729A1 (en) 2005-10-27
JP2005527035A (ja) 2005-09-08
WO2003100599A2 (en) 2003-12-04
TWI291096B (en) 2007-12-11
EP1512068A2 (de) 2005-03-09
US7430631B2 (en) 2008-09-30
CN1656445A (zh) 2005-08-17

Similar Documents

Publication Publication Date Title
DE60316151T2 (de) Zugriff zum breiten speicher
DE19735348B4 (de) Vektorprozessor zur Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern und zugehöriges Verfahren zum Betreiben desselben
DE19815865B4 (de) Kompiliersystem und Verfahren zum rekonfigurierbaren Rechnen
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE19735350B4 (de) Vektorprozessor zum Ausführen paralleler Operationen und Verfahren hierfür
DE69724355T2 (de) Erweiterte symmetrische Multiprozessorarchitektur
DE60118622T2 (de) Benutzer-konfigurierbares on-chip speichersystem
DE19526007C2 (de) Horizontal partitionierter Befehls-Cache-Speicher
DE69822534T2 (de) Gemeinsame Speicherbenutzung mit variablen Blockgrössen für symmetrische Multiporzessor-Gruppen
DE2716369C2 (de)
DE60008139T2 (de) Cachespeicheranordnung für einen digitalen signalprozessor
DE112008001679T5 (de) Cache-Speicher mit konfigurierbarer Assoziativität
DE19545179A1 (de) Vektorspeicheroperationen
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE4218003A1 (de) Sekundaeres cache-speichersystem
DE19914210A1 (de) Verfahren und Vorrichtung für eine gestaffelte Ausführung einer Anweisung
DE69826404T2 (de) Datenverarbeitungssystem mit mehreren Prozessoren, die eine Registerbank gemeinsam benutzen
DE112013004770T5 (de) Lese- und -Schreibmaskenaktualisierungsbefehl zur Vektorisierung rekursiver Berechnungen über unabhängige Daten
DE60225473T2 (de) Verfahren zur datenverarbeitung
EP1599794B1 (de) Prozessor mit verschiedenartigen steuerwerken für gemeinsam genutzte ressourcen
DE60034998T2 (de) Verbesserungen in oder bezüglich von Mikroprozessoren
DE102014002510A1 (de) Präzise Ausnahmesignalisierung für Mehrfachdatenarchitektur
DE19908618A1 (de) Gemeinsam genutzter Hochleistungscachespeicher
DE3114921A1 (de) Datenverarbeitungssystem
DE102005037219A1 (de) Vorrichtung und Verfahren zur Speicherung von Daten und/oder Befehlen in einem Rechnersystem mit wenigstens zwei Verarbeitungseinheiten und wenigstens einem ersten Speicher oder Speicherbereich für Daten und/oder Befehle

Legal Events

Date Code Title Description
8364 No opposition during term of opposition