PatentDe  


Dokumentenidentifikation DE602004006516T2 17.01.2008
EP-Veröffentlichungsnummer 0001656622
Titel PARALLEL-VERARBEITUNGS-ARRAY
Anmelder Koninklijke Philips Electronics N.V., Eindhoven, NL
Erfinder GANGWAL, Om P., NL-5656 AA Eindhoven, NL;
ABBO, Anteneh A., NL-5656 AA Eindhoven, NL;
KLEIHORST, Richard P., NL-5656 AA Eindhoven, NL
Vertreter Eisenführ, Speiser & Partner, 10178 Berlin
DE-Aktenzeichen 602004006516
Vertragsstaaten AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HU, IE, IT, LI, LU, MC, NL, PL, PT, RO, SE, SI, SK, TR
Sprache des Dokument EN
EP-Anmeldetag 03.08.2004
EP-Aktenzeichen 047447206
WO-Anmeldetag 03.08.2004
PCT-Aktenzeichen PCT/IB2004/051372
WO-Veröffentlichungsnummer 2005017765
WO-Veröffentlichungsdatum 24.02.2005
EP-Offenlegungsdatum 17.05.2006
EP date of grant 16.05.2007
Veröffentlichungstag im Patentblatt 17.01.2008
IPC-Hauptklasse G06F 15/80(2006.01)A, F, I, 20061121, B, H, EP

Beschreibung[de]

Die Erfindung betrifft ein Parallel-Verarbeitungs-Array, beispielsweise ein Single Instruction Multiple Data(SIMD)-Verarbeitungs-Array, mit einer Vielzahl von Verarbeitungselementen (processing elements, PEs). Insbesondere betrifft die vorliegende Erfindung ein Parallel-Verarbeitungs-Array, das ausgestaltet ist, die Effizienz des Arrays zu verbessern, wenn datenabhängige Verarbeitungsoperationen gehandhabt werden.

In einem SIMD-Verarbeitungs-Array empfängt jedes Verarbeitungselement (processing element, PE) des Arrays die gleiche Anweisung über einen gemeinsamen Anweisungsstrom und führt die Anweisung basierend auf lokalen Daten aus, die für das Verarbeitungselement eindeutig sind. Parallel-Verarbeitungs-Arrays eignen sich daher gut zur Ausführung sich stark wiederholender Aufgaben, bei denen zur selben Zeit dieselben Operationen für mehrere Daten durchgeführt werden, zum Beispiel solche, die mit Bildverarbeitung verknüpft sind. SIMD stellt daher eine flächeneffiziente, skalierbare, leistungsarme Implementierung bereit. Während SIMD für Anwendungen geeignet ist, die signifikante Wiederholungen in den Daten und in der Verarbeitung von den Daten enthalten, ist SIMD nicht zum Durchführen von datenabhängigen Verarbeitungsoperationen geeignet.

Zum Beispiel sind bei der Videoverarbeitung (z. B. Zeilenentflechtung, Rauschunterdrückung, horizontaler dynamischer Spitzenwertbildung) die meisten Operationen für alle Datenelemente in dem Array exakt gleich und verwenden daher das SIMD-Array auf effiziente Weise. Datenabhängige Verarbeitungsoperationen, wie zum Beispiel Nachschlagetabellen-Operationen oder Multiplikation mit unterschiedlichen Koeffizienten basierend auf der Platzierung von Daten in einem Array, verwenden jedoch ein SIMD-Verarbeitungs-Array nicht effizient.

Ein Beispiel eines parallelen Verarbeitungs-Arrays ist gegeben in „Kestrel: Design of an 8-bit SIMD parallel processor" von D. M. Dahle u.w. in Proceedings of the 17th Conference an Advanced research in VLSI, IEEE Comput. Soc. 1997, Seiten 145-162, das ein SIMD-Verarbeitungs-Array mit gemeinsamen systolischen Registern (systolic shared registers, SSRs) für Inter-PE-Kommunikation offenbart. Jedes PE enthält einen statischen Speicher mit wahlfreiem Zugriff (random access memory), um die Speicherkapazität der SSRs zu ergänzen und um einen lokal adressierbaren Speicher bereitzustellen.

1 zeigt eine Schematik eines typischen Verarbeitungselements (PE) 1 in einer Xetal SIMD-Verarbeitungsarchitektur (wobei Xetal ein leistungsarmer Parallelprozessor für digitale Videokameras ist). Das Verarbeitungselement 1 umfasst eine arithmetische logische Einheit (arithmetic logic unit, ALU) 3, einen Multiplexer (MUX) 5, einen Akkumulator (ACCU) 7 und ein Flagregister (FLAG) 9. Das Verarbeitungselement 1 empfängt eine Rundsendeanweisung 10, die von allen anderen Verarbeitungselementen in dem Array (nicht gezeigt) empfangen wird. Die ALU 3 verarbeitet die Anweisung 10 basierend auf lokalen Daten. Der Akkumulator 7 wird zum Speichern eines letzten Ergebnisses bereitgestellt, das als der Operand für die nächste Anweisung 10 benutzt werden kann. Typischer Weise umfasst die ALU 3 einen Addierer und einen Multiplikator, wodurch innerhalb eines Taktzyklus durchzuführende Vergleiche, Addition, Subtraktion, Datengewichtung und Multiplizier-Akkumulier-Operationen ermöglicht werden. Typischer Weise enthält das Flagregister 9 ein 1-Bit-Flag, das entsprechend dem letzten Ergebnis gesetzt wird. Basierend auf diesem Flag-Status sind bedingte Durchlassanweisungen möglich, die eine beschränkte Form der Datenabhängigkeit in den Algorithmen erlauben.

Es sei angemerkt, dass der Multiplexer 5 durch die Rundsendeanweisung 10 gesteuert wird. Bei der Xetal-Architektur empfängt der Multiplexer 5 eine Anzahl von Eingangssignalen, die mit der ALU 3 selektiv verbunden sind. Zum Beispiel empfängt der Multiplexer 5 Daten von einem Teil des Zeilenspeichers 6 und Daten vom linken und rechten Kommunikationskanal 8, 12. Der Multiplexer 5 empfängt ebenfalls Koeffizientendaten (coeff) 16. Auf diese Weise wird das ACCU-Signal 14 aus dem Akkumulator 7 als ein Operand für eine Operation verwendet, und der Multiplexer 5 wählt den zweiten Operanden aus. Daher kann der zweite Operand aus dem linken Kommunikationskanal 8, dem rechten Kommunikationskanal 12 oder dem Zeilenspeicher 6, oder eine „feste" Zahl aus der Koeffizienteneingabe 16 gewählt werden.

Das Durchführen einer datenabhängigen Verarbeitung, zum Beispiel Abfragen eines Wertes aus einer Nachschlagetabelle, oder das Durchführen verschiedener Operationen mit verschiedenen Datenelementen des gleichen Arrays sind bei dieser Art von Prozessoren entweder nicht möglich oder benötigen viele lange und komplizierte Iterationen. Dies führt zu einer schwachen Effizienz des SIMD-Verarbeitungs-Arrays.

Zum Beispiel benötigt das Durchführen einer Multiplikation nach dem Empfangen eines Wertes aus einer Nachschlagetabelle mit zehn Elementen in der in 1 gezeigten Xetal-Architektur vierzig Operationen. Eine den Xetal-Befehlssatz verwendende Implementierung, in der für einen Nachschlagevorgang der Wert mit einer unteren Grenze verglichen werden muss, wird nachfolgend gezeigt: Man nehme an, r0 weist die Datenelemente eines gewünschten Arrays auf.

  • 1. accu=r0; – bewege die Daten zu dem Akkumulator
  • 2. accu=MAX(accu, lower_limit0); – finde das Maximum zwischen r0 und lower_limit0 und speichere es in accu
  • 3. accu=accu·coeff0; – dieses ist die Operation in dem Intervall
  • 4. r1=PASSC(accu, r1); – falls r0 in dem Bereich lag, behalte das Ergebnis, sonst kopiere r1 in das nächste Intervall

Wie oben gezeigt, müssen für alle Einträge in der Nachschlagetabelle (LUT), zum Beispiel zehn in dem oben bereitgestellten Beispiel, alle vier der obigen Operationen durchgeführt werden. Das bedeutet, dass für ein Zehn-Element-LUT vierzig Operationen benötigt werden.

Die Aufgabe der vorliegenden Erfindung ist es, ein Parallel-Verarbeitungs-Array bereitzustellen, das nicht die oben stehenden Nachteile hat, wenn datenabhängige Operationen durchgeführt werden.

In Übereinstimmung damit wird das vorgenannte Problem gemäß den unabhängigen Ansprüchen gelöst.

Das oben definierte Verarbeitungs-Array hat den Vorteil, dass es effizienter als ein herkömmliches Verarbeitungs-Array ist, wenn datenabhängige Verarbeitungsoperationen durchgeführt werden.

Zum besseren Verständnis der vorliegenden Erfindung und um deutlicher zu zeigen, wie diese verwirklicht werden kann, wird im Folgenden beispielhaft Bezug auf die beigefügten Zeichnungen genommen, in denen:

1 ein schematisches Diagramm eines Verarbeitungselements eines Parallel-Verarbeitungs-Arrays gemäß dem Stand der Technik zeigt; und

2 ein schematisches Diagramm eines Verarbeitungselements eines Parallel-Verarbeitungs-Arrays gemäß der vorliegenden Erfindung zeigt.

2 zeigt ein Verarbeitungselement 1 eines Verarbeitungs-Arrays gemäß der vorliegenden Erfindung. Wie oben in 1 gezeigt, umfasst das Verarbeitungselement 1 eine arithmetische logische Einheit (ALU) 3, einen Multiplexer (MUX) 5, einen Akkumulator (ACCU) 7 und ein Flagregister (FLAG) 9. Der Betrieb dieser Elemente für eine „herkömmliche" Verarbeitung, d.h. nicht datenabhängige Verarbeitung, entspricht genau dem oben in Bezug auf 1 beschriebenen.

Gemäß der Erfindung umfasst das Verarbeitungselement ferner ein Speicherelement (SE) 11, das die Verarbeitung einer lokal angepassten (d.h. datenabhängigen) Verarbeitung in dem Verarbeitungselement 1 unterstützt.

Das Speicherelement 11 umfasst eine Anzahl von Speicherplätzen SE1 bis SEN. Die Anzahl von Speicherplätzen wird in dem Entwurfsprozess in Abhängigkeit von der bestimmten Anwendung ausgewählt und kann eine beliebige ganze Zahl sein. Das Speicherelement 11 empfängt Eingangsdaten 13 (data_in) über einen Multiplexer 15. Der Multiplexer 15 ist verschaltet, um Akkumulatordaten 14 von dem Ausgang des Akkumulators 7 und Koeffizientendaten 16 (coeff) aus einem Koeffizientenport des Verarbeitungselements 1 zu empfangen. Der Multiplexer 15 ist ausgestaltet, die Akkumulatordaten 14 oder Koeffizientendaten 16 als die Eingangsdaten 13 dem Speicherelement 11 selektiv unter Steuerung durch ein Steuerungssignal 17 bereitzustellen, das von der Rundsendeanweisung 10 herrührt oder einen Teil der Rundsendeanweisung 10 bildet.

Das Speicherelement 11 empfängt auch ein Indexsignal 19, das mit dem Ausgang eines Multiplexers 21 verbunden ist. Der Multiplexer 21 ist auch verschaltet, um Akkumulatordaten 14 von dem Akkumulator 7 und Koeffizientendaten 16 (coeff) von dem Koeffizientenport des Verarbeitungselements 1 zu empfangen. Der Multiplexer 21 wird ebenfalls durch das Steuerungssignal 17 gesteuert, das von der Rundsendeanweisung 10 herrührt oder einen Teil der Rundsendeanweisung 10 bildet. Ausgangsdaten 22 (data_out) aus dem Speicherelement 11 werden mit dem Eingang des Multiplexers 5 des Verarbeitungselements 1 verbunden. Zwischen dem Ausgang des Speicherelements 11 und dem Multiplexer 5 wird vorzugsweise ein Register 23 (curr_se) bereitgestellt, das zum Speichern eines Werts des Speicherelements 11 verwendet werden kann, wie später in der Anmeldung näher beschrieben wird.

Als Nächstes wird das Betreiben des Ausführungsbeispiels nach 2 in Bezug auf das Speichern verschiedener Koeffizienten in jedem PE beschrieben, um Multiplikation (oder jede andere Operation) mit einem jeweils anderen Koeffizienten pro Dateneintrag in dem Array und das Durchführen einer Nachschlagetabellenoperation bereitzustellen, obwohl die für alle PE verwendete Anweisung dieselbe bleibt.

Wenn das Speicherelement 11 zum Speichern verschiedener Koeffizienten verwendet wird, werden die Koeffizientendaten 16 als ein Index für die Speicherelementtabelle verwendet, und die Akkumulatordaten 14 aus dem Akkumulator 7 oder dem Zeilenspeicher werden an einem entsprechenden Speicherplatz SEY in dem Speicherelement 11 gespeichert. Mit anderen Worten, der Multiplexer 15 wird gesteuert, um die Akkumulatordaten 14 als die Eingangsdaten 13 an das Speicherelement 11 weiterzuleiten, während der Multiplexer 21 gesteuert wird, um die Koeffizientendaten 16 weiterzuleiten, die als der Index 19 für den entsprechenden Speicherplatz SEY agieren, in dem die Daten zu speichern sind. Dieses ermöglicht das Speichern der korrekten Werte in den korrekten Plätzen SE1-SEN des Speicherelements 11. Alternativ, falls erwünscht, können die Koeffizienten durch Anlegen der Koeffizientendaten an dem Eingang 13 und durch Verwenden der Akkumulatordaten als der Index 19 gespeichert werden.

Wenn ein Wert aus dem Speicherelement 11 in ähnlicher Weise wie oben geladen wird, werden die Koeffizientendaten 16 als ein Index 19 verwendet, um einen Wert aus dem entsprechenden Speicherplatz des Speicherelements 11 an dem Ausgang verfügbar zu machen, wodurch die durchzuführende Multiplikation mit den Daten in dem Akkumulator 7 ermöglicht wird. Mit anderen Worten, wenn Daten aus dem Speicherelement 11 geladen werden, wird der Multiplexer 21 ausgestaltet, die Koeffizientendaten 16 als den Index 19 an das Speicherelement 11 weiterzuleiten, wodurch die entsprechenden Ausgangsdaten 22 aus dem Speicherelement 11 ausgegeben werden. Die Ausgangsdaten aus dem Speicherelement 11 werden über den Multiplexer 5 an die ALU 3 zum Multiplizieren mit den Daten aus dem Akkumulator 7 weitergeleitet.

Wenn das Speicherelement als eine Nachschlagetabelle (look-up-table, LUT) in jedem PE verwendet wird, gibt es eine Anzahl von alternativen Vorgehensweisen zum Speichern der korrekten Werte (lower_limit, Ergebniswert) in dem Speicherelement 11.

Eine Vorgehensweise ist es, einen Teil des coeff-Eingangs als den Index und den anderen Teil als den zu speichernden Wert zu verwenden. Mit anderen Worten, ein Teil der Koeffizientendaten 16 wird von dem Multiplexer 21 als der Index 19 an das Speicherelement 11 weitergeleitet, während der andere Teil der Koeffizientendaten 16 von dem Multiplexer 15 als der zu speichernde Wert weitergeleitet wird. Obwohl das Verfahren den Nachteil des Vergrößerns der Breite des Koeffizientendatensignals hat, weist es den Vorteil des Speicherns von Werten in einem Zyklus auf.

Eine andere Vorgehensweise ist das Generieren der Adresse oder des Index 19 mit Hilfe des Akkumulators 7 und/oder der ALU 3, was das Generieren von verschiedenen Adressen ermöglicht und als Folge das Speichern der gleichen Werte an verschiedenen Plätzen in Speicherelementen von PEs durch Anlegen der Adresse an das Speicherelement 11 mit einer Speicheranweisung, so dass der Wert der Koeffizientendaten 16 in dem entsprechenden Speicherplatz SEY des Speicherelements 11 gespeichert wird. In dieser Anordnung ist der Multiplexer 15 ausgestaltet, die Koeffizientendaten 16 weiterzuleiten, während der Multiplexer 21 einen Index 19 bereitstellt, der von dem Akkumulator 7 und/oder ALU 3 generiert worden ist. Diese Vorgehensweise hat den Vorteil, dass ein schmaleres Koeffizientendatensignal erforderlich ist, hat aber den Nachteil, dass eine zusätzliche Verarbeitungsoperation benötigt wird.

Zum Laden eines Werts aus dem Speicherelement 11 wird der Wert des Akkumulators 7 als der Index 19 verwendet und der nachgeschlagene Wert aus dem Speicherelement 11 wird in dem Register 23 (curr_se) für eine weitere Verwendung gespeichert. Mit anderen Worten, die Akkumulatordaten 14 aus dem Akkumulator 7 werden von dem Multiplexer 21 weitergeleitet, um dem Speicherelement 11 einen Index 19 bereitzustellen. Der entsprechende Wert aus dem entsprechenden Speicherplatz SEY bildet die Ausgangsdaten 22 des Speicherelements 11 und wird entweder an den Multiplexer 5 direkt weitergereicht oder in dem Register 23 für eine spätere Verwendung gespeichert. Es wird angemerkt, dass das Register 23 (curr_se) bei einem Betrieb mit niedriger Frequenz überbrückt werden kann, um Operationen in einem Zyklus durchzuführen.

Die oben beschriebene Erfindung stellt ein verbessertes Verarbeitungs-Array bereit, da diese den Verarbeitungselementen ermöglicht, auf jede der folgenden Weisen betrieben zu werden:

  • a) jedes PE führt die gleiche Operation basierend auf einer Rundsendeanweisung aus, (d.h. „normaler" Betrieb)
  • b) ein PE verwendet einen anderen Koeffizienten basierend auf den zu verarbeitenden Daten, um die gleiche Rundsendeoperation auszuführen, oder
  • c) bei einer Rundsendung an alle PE, LUT-Operationen durchzuführen, führt das PE eine Funktion aus, die in einer Nachschlagetabelle beschrieben worden ist.

In einer Videoverarbeitungsanwendung können beispielsweise die meisten Funktionen mit einer zeilenbasierten Verarbeitung (zum Beispiel Zeilenentflechtung, Rauschunterdrückung, horizontale dynamische Spitzenwertbildung) durchgeführt werden oder können im Sinne der zeilenbasierten Verarbeitung ausgedrückt werden (zum Beispiel kann ein Aufwärtswandler mit 2×2 Blockgröße auf Zeilenbasis verarbeitet werden durch Akkumulieren von 2×2 Blöcken als zwei Zeilen und Durchführen einer zeilenbasierten Verarbeitung). Das bedeutet, dass die meisten Operationen für alle Datenelemente in dem Array exakt dieselben sind und daher unter Verwendung des „normalen", oben in (a) beschriebenen PE-Betriebs durchgeführt werden können.

Wenn jedoch Aufgaben wie zum Beispiel eine Multiplikation (oder andere Operanden) mit unterschiedlichen Koeffizienten basierend auf Platzierung der Daten in einem Array durchgeführt werden, wird das Verarbeitungselement gemäß der vorliegenden Erfindung ausgestaltet, wie oben in (b) beschrieben betrieben zu werden.

Ähnlich wird bei der LUT-Operation das Verarbeitungselement ausgestaltet, wie oben in (c) beschrieben betrieben zu werden.

Die Erfindung hat den Vorteil des Verwendens der Eigenschaften der SIMD-Verarbeitung, wobei dennoch ein effizienteres Betreiben bereitgestellt wird, wenn datenabhängige Verarbeitungsoperationen durchgeführt werden müssen. Zum Beispiel würde in der vorliegenden Erfindung die Verarbeitung einer Multiplikation mit einem nachgeschlagenen Wert etwa zwei Operationen (abhängig von der Implementierungswahl für eine LUT-Operation) benötigen, was ungefähr nur 5% des früher beschriebenen Verfahrens ausmacht, das vierzig Instruktionen benötigte.

Daher stellt die Erfindung einen indirekt adressierbaren Speicher pro Verarbeitungselement bereit, der für datenabhängige Operationen verwendet werden kann, wie zum Beispiel Nachschlagetabellenoperationen, und zum Zugreifen auf unterschiedliche Koeffizienten, die mit der gleichen Anweisung für alle PEs verwendet werden können.

Es sei angemerkt, dass der erweiterte Bereich, der für ein Verarbeitungselement aufgrund des Speicherelements benötigt wird, kein nachteiliger Faktor ist, da der Zwischenverbindungsbereich der dominierende Faktor auf einem Chip wie diesem ist. Somit vermeidet das Plazieren der Speicherelemente in der Nähe der arithmetischen logischen Einheit (ALU) ein weiteres Überlasten des Kommunikationsnetzwerks (d. h. Verdrahtungsoverhead).

Obwohl das bevorzugte Ausführungsbeispiel in Bezug auf Videoverarbeitung beschreiben wurde, ist für eine Fachperson ersichtlich, dass das erfindungsgemäße Verarbeitungselement auch für andere Funktionen verwendet werden kann.

Obwohl das bevorzugte Ausführungsbeispiel in Bezug auf die Xetal-Architektur beschrieben wurde, ist die Erfindung ferner auf andere Ausgestaltungen der parallelen Verarbeitungsarchitektur in gleicher Weise anwendbar.


Anspruch[de]
Parallel-Verarbeitungs-Array, mit einer Vielzahl von Verarbeitungselementen (1), wobei jedes Verarbeitungselement (1) ausgestaltet ist, eine gemeinsame Anweisung zu empfangen, und umfasst:

eine arithmetische logische Einheit (3) zum Verarbeiten der gemeinsamen Anweisung in Verbindung mit einem Akkumulator (7) und einem Flagregister (9); und einen Multiplexer (5), der ausgestaltet ist, eine Anzahl von Eingangssigna

len zu empfangen und die arithmetische logische Einheit (3) selektiv unter Steuerung der gemeinsamen Anweisung mit einem der Eingangssignale zu verbinden;

wobei eines oder mehrere der Verarbeitungselemente (1) in dem Verarbeitungs-Array ferner ein Speicherelement (11) umfassen, das einen Eingangsdatenport (13), einen Ausgangsport (22) und zumindest einen Speicherplatz aufweist, wobei das Speicherelement ausgestaltet ist, indirekt durch die empfangene Anweisung adressierbar zu sein;

dadurch gekennzeichnet, dass:

der Eingangsdatenport (13) des Speicherelements geschaltet ist, um Daten von einem Eingangsmultiplexer (15) zu empfangen, wobei der Eingangsmultiplexer (15) ausgestaltet ist, Akkumulatordaten oder Koeffizientdaten an das Speicherelement (11) weiterzuleiten; und

der Ausgangsport (22) des Speicherelements (11) mit dem Multiplexer (5) gekoppelt ist, um dadurch das Verarbeiten von datenabhängigen Operationen durch das Verarbeitungselement (1) unter Verwendung der Akkumulatordaten oder Koeffizientdaten aus dem Speicherelement (11) zu ermöglichen.
Parallel-Verarbeitungs-Array nach Anspruch 1, wobei das Speicherelement (11) auf ein Indexsignal zum Adressieren eines Speicherplatzes in dem Speicherelement (11) anspricht. Parallel-Verarbeitungs-Array nach Anspruch 2, wobei das Indexsignal von einem Indexmultiplexer (21) empfangen wird, wobei der Indexmultiplexer (21) ausgestaltet ist, Akkumulatordaten oder Koeffizientdaten, oder einen Teil der empfangenen Anweisung selektiv weiterzuleiten. Parallel-Verarbeitungs-Array nach Anspruch 3, wobei der Eingangsmultiplexer (15) und/oder Indexmultiplexer (21) durch die empfangene Anweisung gesteuert wird. Parallel-Verarbeitungs-Array nach einem der vorangehenden Ansprüche, wobei das Speicherelement (11) ausgestaltet ist, dem Verarbeitungselement (1) einen Koeffizienten basierend auf den zu verarbeitenden Daten bereitzustellen. Parallel-Verarbeitungs-Array nach Anspruch 5, wobei der Eingangsmultiplexer (15) ausgestaltet ist, Akkumulatordaten an das Speicherelement (11) weiterzuleiten, wenn Koeffizientdaten gespeichert werden, wobei die Koeffizientdaten in einem durch das Indexsignal definierten Speicherplatz gespeichert werden. Parallel-Verarbeitungs-Array nach Anspruch 5, wobei der Eingangsmultiplexer (15) ausgestaltet ist, Koeffizientdaten an das Speicherelement (11) weiterzuleiten, gespeichert in einem durch das Indexsignal definierten Speicherplatz. Parallel-Verarbeitungs-Array nach Anspruch 6 oder 7, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Koeffizientdaten definiert ist. Parallel-Verarbeitungs-Array nach einem der Ansprüche 6 oder 7, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Akkumulatordaten definiert ist. Parallel-Verarbeitungs-Array nach einem der vorangehenden Ansprüche, wobei das Speicherelement (11) ausgestaltet ist, eine lokale Nachschlagetabelle für das Verarbeitungselement (1) bereitzustellen. Parallel-Verarbeitungs-Array nach Anspruch 10, wobei der Eingangsmultiplexer (15) ausgestaltet ist, Koeffizientdaten an das Speicherelement (11) zum Speichern in einem durch das Indexsignal definierten Platz weiterzuleiten. Parallel-Verarbeitungs-Array nach Anspruch 11, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Akkumulatordaten definiert ist. Parallel-Verarbeitungs-Array nach Anspruch 10, wobei der Eingangsmultiplexer (15) ausgestaltet ist, einen ersten Teil der Koeffizientdaten als die in dem Speicherelement (11) zu speichernden Daten weiterzuleiten, und wobei der Indexmultiplexer (21) ausgestaltet ist den anderen Teil der Koeffizientdaten als das die Speicheradresse definierende Indexsignal weiterzuleiten. Parallel-Verarbeitungs-Array nach einem der vorangehenden Ansprüche, ferner umfassend ein Register (23) zum Speichern von Daten zwischen dem Ausgang (22) des Speicherelements (11) und dem Eingang des Multiplexers (5). Parallel-Verarbeitungs-Array nach einem der vorangehenden Ansprüche, wobei das Verarbeitungs-Array ein Single Instruction Multiple Data (SIMD)-Verarbeitungs-Array ist. Verfahren des Verarbeitens von Daten in einem Parallel-Verarbeitungs-Array, mit einer Vielzahl von Verarbeitungselementen (1), wobei jedes Verarbeitungselement (1) eine gemeinsame Anweisung empfängt und eine arithmetische logische Einheit (3) zum Verarbeiten der gemeinsamen Instruktion in Verbindung mit einem Akkumulator (7) und einem Flagregister (9) umfasst; und einem Multiplexer (5), der ausgestaltet ist, eine Anzahl von Eingangssignalen zu empfangen und die arithmetische logische Einheit (3) mit einem der Eingangssignale unter Steuerung der gemeinsamen Instruktion zu verbinden, wobei das Verfahren die Schritte umfasst:

– Bereitstellen eines Speicherelements (11), das einen Eingangsdatenport (13) und einen Ausgangsport (22) aufweist, in einem oder mehreren der Verarbeitungselemente in dem Verarbeitungs-Array, wobei das Speicherelement (11) zumindest einen Speicherplatz aufweist; und

– Konfigurieren des Speicherelements so, dass es durch die empfangene Anweisung indirekt adressierbar ist;

gekennzeichnet durch:

– Schalten des Eingangsdatenports des Speicherelements (11), um Daten von einem Eingangsmultiplexer (15) zu empfangen;

– Konfigurieren des Eingangsmultiplexers (15), um Akkumulatordaten oder Koeffizientdaten an das Speicherelement (11) weiterzuleiten; Koppeln des Ausgangsports (22) des Speicherelements (11) mit dem Multiplexer (5); und

– Verarbeiten von datenabhängigen Operationen unter Verwendung der Akkumulatordaten oder Koeffizientdaten aus dem Speicherelement (11).
Verfahren nach Anspruch 16, ferner umfassend den Schritt des Bereitstellens eines Indexsignals zum Adressieren eines Speicherplatzes in dem Speicherelement (11). Verfahren nach Anspruch 16 oder 17, ferner umfassend den Schritt des Bereitstellens eines Indexmultiplexers (21) zum Bereitstellen des Indexsignals, und des Konfigurierens des Indexmultiplexers (21), um Akkumulatordaten oder Koeffizientdaten, oder einen Teil der empfangenen Instruktion selektiv weiterzuleiten. Verfahren nach Anspruch 17 oder 18, ferner umfassend den Schritt des Steuerns des Eingangsmultiplexers (15) und/oder des Indexmultiplexers (21) mit der empfangenen Anweisung. Verfahren nach einem der Ansprüche 16 bis 19, ferner umfassend den Schritt des Konfigurierens des Speicherelements (11), um dem Verarbeitungselement (1) einen Koeffizient basierend auf den zu verarbeitenden Daten bereitzustellen. Verfahren nach Anspruch 20, ferner umfassend den Schritt des Konfigurierens des Eingangsmultiplexers (15), um Akkumulatordaten an das Speicherelement (11) weiterzuleiten, wenn die Koeffizientdaten gespeichert werden, wobei die Koeffizientdaten in einem durch das Indexsignal definierten Speicherplatz gespeichert werden. Verfahren nach Anspruch 20, ferner umfassend den Schritt des Konfigurierens des Eingangsmultiplexers (15), um Koeffizientdaten an das Speicherelement (11) weiterzuleiten, und des Speicherns der Koeffizientdaten in einem durch das Indexsignal definierten Speicherplatz. Verfahren nach Anspruch 21 oder 22, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Koeffizientdaten definiert wird. Verfahren nach Anspruch 21 oder 22, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Akkumulatordaten definiert wird. Verfahren nach einem der Ansprüche 16 bis 24, ferner umfassend den Schritt des Konfigurierens des Speicherelements (11), um eine Nachschlagetabelle für das Verarbeitungselement (1) bereitzustellen. Verfahren nach Anspruch 25, wobei der Eingangsmultiplexer (15) konfiguriert wird, um Koeffizientdaten an das Speicherelement (11) zum Speichern in einem durch das Indexsignal definierten Platz zu übergeben. Verfahren nach Anspruch 26, wobei das Indexsignal durch von dem Indexmultiplexer (21) empfangene Akkumulatordaten definiert wird. Verfahren nach Anspruch 26, ferner umfassend den Schritt des Konfigurierens des Eingangsmultiplexers (15), um einen ersten Teil der Koeffizientdaten als die in dem Speicherelement (11) zu speichernden Daten zu übergeben, und des Ausgestaltens des Indexmultiplexers (21), den anderen Teil der Koeffizientdaten als das die Speicheradresse definierende Indexsignal weiterzuleiten. Verfahren nach einem der Ansprüche 16 bis 28, ferner umfassend den Schritt des Bereitstellens eines Registers (23) zum Speichern von Daten zwischen dem Ausgangsport (22) des Speicherelements (11) und dem Eingang des Multiplexers (5). Verfahren nach einem der Ansprüche 16 bis 29, wobei das Verarbeitungs-Array ein Single Instruction Multiple Data (SIMD)-Verarbeitungs-Array ist.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com