DE112009000741B4 - Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen - Google Patents

Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen Download PDF

Info

Publication number
DE112009000741B4
DE112009000741B4 DE112009000741.4T DE112009000741T DE112009000741B4 DE 112009000741 B4 DE112009000741 B4 DE 112009000741B4 DE 112009000741 T DE112009000741 T DE 112009000741T DE 112009000741 B4 DE112009000741 B4 DE 112009000741B4
Authority
DE
Germany
Prior art keywords
mask
vector
memory
simd
data
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.)
Active
Application number
DE112009000741.4T
Other languages
English (en)
Other versions
DE112009000741T5 (de
Inventor
Mikhail Smelyanskiy
Sanjeev Kumar
Daehyun Kim
Victor W. Lee
Anthony D. Nguyen
Yen-Kuang Chen
Christopher Hughes
Changkyu Kim
Jatin Chhugani
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112009000741T5 publication Critical patent/DE112009000741T5/de
Application granted granted Critical
Publication of DE112009000741B4 publication Critical patent/DE112009000741B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/40Image enhancement or restoration by the use of histogram techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/40Picture signal circuits
    • H04N1/407Control or modification of tonal gradation or of extreme levels, e.g. background level
    • H04N1/4072Control or modification of tonal gradation or of extreme levels, e.g. background level dependent on the contents of the original
    • H04N1/4074Control or modification of tonal gradation or of extreme levels, e.g. background level dependent on the contents of the original using histograms

Abstract

Prozessor, der Folgendes umfasst:Logik zum Empfangen eines ersten Vektorbefehls, einer Vielzahl von Adressen, jede zu einer Speicherstelle mit einem entsprechenden Datenelement eines Vektors mit einer Vielzahl von Datenelementen, und von Maskeninformationen, die dem Vektor zugeordnet sind, und zum Laden eines Datenelements, das aus der Speicherstelle erhalten wird, die jeder aus der Vielzahl von Adressen entspricht, wie durch die Maskeninformationen angezeigt, und zum Reservieren der Speicherstellen für eine nachfolgende Operation durch Setzen einer Reservierungsstelle für jedes der geladenen Datenelemente durch Speichern eines ersten Zeigers auf eine inhaltsadressierbare Speicherstruktur, wobei die Logik eingerichtet ist zum Empfangen eines zweiten Vektorbefehls, einer zweiten Vielzahl von Adressen, jede zu einer Speicherstelle mit einem entsprechenden Datenelement des Vektors, und von zweiten Maskeninformationen und zum bedingten Schreiben eines Datenelements aus einem Quellspeicher an die Speicherstelle, die jeder aus der zweiten Vielzahl von Adressen entspricht, wie durch die zweiten Maskeninformationen angezeigt, wenn die entsprechende Speicherstelle noch reserviert ist, aufgrund eines Vergleichs eines zweiten Zeigers, der aus einem Vektorspeicheroperanden erzeugt ist, mit einem entsprechenden ersten Zeiger, der in der inhaltsadressierbaren Speicherstruktur gespeichert ist.

Description

  • Hintergrund
  • Zahlreiche Anwendungen weisen einen hohen Grad an Parallelverarbeitung auf Datenebene auf und sollten in der Lage sein, von einer Einzelbefehl-Mehrfachdaten (Single-Instruction Multiple-Data, SIMD)-Unterstützung zu profitieren. Bei einer SIMD-Ausführung arbeitet ein einzelner Befehl auf mehreren Datenelementen gleichzeitig. Dies wird typischerweise durch ein Erweitern der Breite von verschiedenen Ressourcen implementiert, wie z. B. Registern und arithmetisch logische Einheiten (ALUs), das ihnen erlaubt, mehrere Datenelemente zu halten bzw. auf ihnen zu arbeiten. Jedoch verbringen viele dieser Anwendungen eine bedeutende Zeitmenge mit atomaren Operationen auf einem Satz von dünnbesetzten Stellen und sehen somit einen beschränkten Vorteil durch SIMD, da aktuelle Architekturen atomare Vektoroperationen nicht unterstützen.
  • In zahlreichen Anwendungen werden oft Synchronisationsprimitive und parallele Reduktionsoperationen in Multiprozessorsystemen durchgeführt. Sychronisationsprimitive stellen sicher, dass ein Programm in einer korrekten Reihenfolge ausgeführt wird, wenn mehrere Threads zusammenwirkend arbeiten. Diese Primitive sind oft unter Verwendung einer atomaren Read-Modify-Write-Operation implementiert. Eine Reduktion ist eine gebräuchliche Operation, die in vielen wissenschaftlichen Anwendungen zu finden ist. Wenn mehrere Threads parallele Reduktionen durchführen, werden typischerweise atomare Read-Modify-Write-Sequenzen verwendet, um die Korrektheit in Wettlaufsituationen sicherzustellen.
  • Moderne parallele Architekturen werden mit SIMD-Einheiten ausgerüstet, um die Leistungsfähigkeit von vielen Anwendungen mit Parallelverarbeitung auf Datenebene zu verbessern. Um die SIMD-Effizienz aufrechtzuerhalten erlauben solche Architekturen nicht nur SIMD-Arithmetikoperationen, sondern auch SIMD-Speicherlesevorgänge (Memory Reads) und -schreibvorgänge (Writes) (durch Gather-Scatter-Einheiten). Jedoch unterstützt keine dieser Architekturen atomare SIMD-Operationen. Das Ergebnis besteht darin, dass diese atomaren Operationen nicht vektorisiert werden können und deshalb unter Verwendung von skalarem Code implementiert werden müssen. Dies kann die SIMD-Effizienz beträchtlich degradieren, insbesondere dann, wenn die SIMD-Breite, d.h. die Anzahl von gleichzeitig verarbeiteten Elementen, groß ist (z. B. 16).
  • Scatter-Reduktionen sind gebräuchliche Operationen in vielen Anwendungen. Eine Scatter-Add-Operation kann z. B. verwendet werden, um zu ermöglichen, dass mehrere Werte eines ersten Arrays reduziert werden in (d.h. addiert werden zu) ausgewählte(n) Elemente(n) eines zweiten Arrays gemäß einer Verteilung von Indices, die oft zufällig sein kann. Aufgrund dessen ist es schwierig, mehrere Elemente nebenläufig (d.h. im SIMD-Modus) effizient zu verarbeiten.
  • US 5,872,987 A offenbart einen stark parallelisierten Computer mit einem Hilfsvektorprozessor. Der Hilfsprozessor ist mit einem Speichermodul verbunden. Bei einem Speicherzugriff führt der Hilfsprozessor eine Speicherzugriffsoperation durch zum Speichern von Daten, die von einem anderen Prozessorkern empfangen worden sind, oder der Hilfsprozessor erlangt Daten von dem Speichermodul zur Übertragung an den anderen Prozessorknoten. Ferner wird eine Vektormaske verwendet, um die Lade/Speicher-Operationen durchzuführen.
  • US 2007/0283127 A1 offenbart ein Verfahren und eine Vorrichtung zum Laden/Addieren/Speichern von Vektoren in einem indirekt adressierten Speicher.
  • Histogrammberechnungen sind gebräuchliche Operationen in vielen Bildverarbeitungsanwendungen. Ein Histogramm wird z.B. verwendet, um die Verteilung von Farbwerten von Pixeln in einem Bild zu verfolgen. Jedoch können Aktualisierungen des Histogramm-Arrays abhängig von Eingabedaten für ein Array zufällig sein. Insbesondere können Indices von benachbarten Elementen auf dasselbe Histogramm-Bin zeigen. Diese Bedingung macht es sehr schwierig, mehrere Daten nebenläufig (d.h. im SIMD-Modus) zu verarbeiten.
  • KURZFASSUNG DER ERFINDUNG
  • Um atomare Operationen auf mehreren nicht zusammenhängenden Speicherstellen in einer SIMD-Weise effizient zu unterstützen, stellt die vorliegende Erfindung einen Prozessor nach Anspruch 1, eine Vorrichtung nach Anspruch 5 und ein System nach Anspruch 8 zur Verfügung.
  • Kurzbeschreibung der Zeichnungen
    • 1A ist ein Blockdiagramm eines Prozessorkerns in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung.
    • 1B ist eine beispielhafte Repräsentation einer Gather/Scatter-Einheit in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung.
    • 2 ist ein Flussdiagramm zum Durchführen von atomaren Vektoroperationen in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung.
    • 3 ist ein Blockdiagramm eines Systems in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung.
  • Detaillierte Beschreibung
  • Ausführungsformen können eine Scatter-Gather-Speicherfunktionalität erweitern, um eine Unterstützung von atomaren Vektoroperationen bereitzustellen. In verschiedenen Ausführungsformen können SIMD-Befehle bereitgestellt sein, um atomare Operationen zu ermöglichen. Speziell können ein sogenannter Gather-Linked-Vektorbefehl und ein Scatter-Conditional-Vektorbefehl bereitgestellt sein, um atomare Operationen auf mehreren nicht zusammenhängenden Speicherstellen in einer SIMD-Weise effizient zu unterstützen. Beachte, dass die Begriffe „Vektor“ und „SIMD“, so wie sie hier verwendet werden, als miteinander vertauschbar verwendet werden, um mehrere Datenelemente zu beschreiben, auf die durch einen einzelnen Befehl eingewirkt wird. Auf diese Weise können diese Befehle ermöglichen, dass atomare SIMD-Operationen Synchronisationprimitive und parallele Reduktionsoperationen effizienter implementieren. Des Weiteren können andere Vektorbefehle eine Prozessorunterstützung für prozessorinterne Reduktionsoperationen und Histogrammberechnungen bereitstellen.
  • In einer Ausführungsform kann eine Gather-Scatter-Einheit eingerichtet sein, atomare SIMD-Speicheroperationen zu erlauben. Ein effizientes Verwenden von SIMD in Anwendungen, in denen Datenstrukturen Elemente aufweisen, auf die indirekt (z. B. A[B[i]]) statt zusammenhängend zugegriffen wird, erfordert oft ein Neuanordnen von Daten, das zu einem substantiellen Overhead führen kann. Um diesen Overhead anzusprechen, kann eine Hardware-Unterstützung bereitgestellt sein, um Laden und Speichern von nicht zusammenhängenden Datenelementen in einer SIMD-Weise zu ermöglichen, um Gather/Scatter-Operationen durchzuführen. Namentlich liest (sammelt) eine Gather-Operation mehrere Datenelemente von indirekt addressierten Stellen basierend auf Adressen, die in dem SIMD-Quellregister enthalten sind, und packt sie in ein einziges SIMD-Register. Umgekehrt entpackt eine Scatter-Operation die Elemente in einem SIMD-Registers und schreibt (streut) sie in einen Satz von indirekt adressierten Stellen.
  • Speziell enthält ein Gather-Linked-Befehl in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung Reservierungen für die Stellen, die gesammelt werden, und ein Scatter-Conditional-Befehl in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung wird nur Werte auf Elemente streuen, deren entsprechende Reservierungen noch gehalten werden. Da ein Scatter-Conditional nur für eine Untermenge der Elemente (oder für überhaupt keines) erfolgreich sein kann, hat der Befehl eine Ausgabemaske, die analog zu der Ausgabe eines Store-Conditionals Erfolg oder Fehlschlag anzeigt. Eine Ausgabemaske für den Gather-Linked-Befehl kann mehr Flexibilität bei Hardware-Implementierungen erlauben. Ausführungsformen können skalare atomare Speicheroperationen erweitern, namentlich ein Paar von skalaren Befehlen, die Load-Linked (LL) und Store-Conditional (SC) genannt werden. LL gibt den Wert zurück, der an einer gemeinsamen Stelle gespeichert ist, und setzt einen Reservierungsindikator, der der Stelle zugeordnet ist. SC prüft den Reservierungsindikator. Falls er gültig ist, wird ein neuer Wert auf die Stelle geschrieben und die Operation gibt Erfolg zurück, sonst wird der Wert nicht geschrieben und die Operation gibt ein Flag zurück, das Fehlschlag anzeigt. Konzeptuell ist dort für jede gemeinsame Speicherstelle, für jeden Hardware-Kontext, ein Reservierungsbit vorhanden; die Reservierungsbits, die einer gemeinsamen Speicherstelle zugeordnet sind, werden gelöscht, wenn auf diese Stelle durch einen beliebigen Hardware-Kontext geschrieben wird. Eine Verwendung von LL und SC besteht beim Implementieren von Synchronisationsprimitiven einer höheren Ebene, wie z. B. Lock und Unlock. Locks werden verwendet, um Atomarität von Zugriffen auf gemeinsamen Daten durch mehrere Threads sicherzustellen. Jedoch arbeiten diese Befehle nur auf einem einzigen Element zur gleichen Zeit. Ausführungsformen können verwendet werden, um diese Beschränkung dieser Befehle zu überwinden.
  • In einer SIMD-Architektur können bis zu VLEN (SIMD-Vektorlänge)-Aktualisierungen von VLEN Stellen unter Verwendung von SIMD parallel ausgeführt werden, wenn von ihnen bekannt ist, dass sie unterschiedliche Speicherstellen aktualisieren. Jedoch erfordert ein Garantieren der Atomarität von VLEN gleichzeitigen Aktualisierungen ein Erlangen und Freigeben von VLEN Locks. Wenn skalare Instruktionen verwendet werden, werden VLEN Iterationen einer Schleife ausgeführt, um VLEN Datenelemente zu detektieren, zu erlangen, zu aktualisieren und die Locks freizugeben, und verschiedene Overheads sind solchen Operationen zugeordnet.
  • Eine andere gebräuchliche Operation in vielen Anwendungen ist eine Reduktionsoperation. In Multiprozessorsystemen kann eine Reduktion durch mehrere Threads durchgeführt werden, um die Leistungsfähigkeit zu verbessern. Jedoch wird in einer parallelen Implementierung ein atomarer Zugriff auf eine gemeinsame Datenstruktur verwendet, um die Korrektheit sicherzustellen, wenn mehrere Threads gleichzeitig dieselbe Speicherstelle aktualisieren. Somit kann eine Reduktionsoperation skalare Load-Linked- und Store-Conditional-Befehle verwenden, um Atomarität von gleichzeitigen Aktualisierungen sicherzustellen; jedoch können solche Operationen ohne eine Ausführungsform der vorliegenden Erfindung nicht in einer SIMD-Weise ausgeführt werden.
  • Effiziente SIMD-freundliche Implementierungen von Synchronisationsprimitiven und paralleler Reduktion können in verschiedenen Ausführungsformen durch Bereitstellen einer SIMD-Unterstützung für LL- und SC-Befehle realisiert sein. Um die SIMD-Effizienz von Synchronisationsprimitiven und parallelen Reduktionen zu verbessern, können, genauer gesagt, zwei Befehle, ein Gather-Linked (vgatherlink)-Befehl und ein Scatter-Conditional (vscattercond)-Befehl, Load-Linked- und Store-Conditional-Operationen für SIMD-Architekturen ermöglichen. Zusätzlich können ein Gather-Vektorbefehl (vgather) und ein Scatter (vscatter)-Vektorbefehl, die in einer SIMD-Architektur verfügbar sind, wirksam eingesetzt werden. Der Gather-Vektorbefehl kann wie folgt sein:
    • vgather base, Addr, Dst
    • welcher verursacht, dass VLEN Datenelemente aus VLEN (nicht notwendigerweise zusammenhängenden und möglicherweise duplizierten) Speicherstellen gesammelt werden, deren Adressen aus base und Addr (base[Addr[0]], ..., base[Addr[VLEN-1]]) berechnet werden und
    • zusammenhängend in das Ziel, Dst, gespeichert werden. Beachte, dass Addr und Dst entweder im Speicher oder einem SIMD-Register sein können. Der Scatter-Vektorbefehl kann wie folgt sein:
      • vscatter base, Addr, Src
  • Dieser Befehl streut VLEN zusammenhängende Datenelemente aus einer Quelle, Scr, in VLEN (nicht notwendigerweise zusammenhängende, jedoch eindeutige) Speicherstellen, deren Adressen in einem Adressoperanden, Addr, gespeichert sind. Wie im Fall des vgather-Befehls können Addr und Src entweder im Speicher oder in einem SIMD-Register sein.
  • Basierend auf diesen zwei Vektorbefehlen und skalaren LL- und SC-Befehlen kann somit ein Gather-Linked-Vektorbefehl, vgatherlink, wie folgt definiert sein:
    Opcode Ziel Basis Quelle ask
    vgatherlink Dst Speicher Addr
  • Dieser Befehl wird tätig, um mehrere Datenelemente zu sammeln und zu verlinken und ebenfalls um die Speicherstellen der gesammelten Datenelemente, die von einem späteren Scatter-Conditional-Befehl verwendet werden sollen, zu reservieren. Der Befehl versucht somit, bis zu VLEN Speicherstellen, memory[Addr[0]], memory[Addr[VLEN-1]], in ein Ziel, Dst, gemäß einer Maske zu sammeln und zu verlinken. Er kann beim Sammeln und Verlinken einiger der Datenelemente fehlschlagen. Falls dem so ist, sammelt er und verlinkt nur eine Untermenge von VLEN Speicherstellen und setzt die entsprechenden Bits der Maske F auf einen gültigen Zustand, z. B. einen „1"-Zustand. Die fehlgeschlagenen Elemente werden ihre entsprechende Maske F auf einen ungültigen Zustand, z. B. einen „0“-Zustand, gesetzt haben.
  • Ähnlich kann vscattercond wie folgt definiert sein:
    Opcode Quelle Basis Ziel ask
    vscattercond Src Speicher Addr
  • Dieser Befehl wird tätig, um mehrere Datenelemente auf einen Speicher bedingt zu streuen, und insbesondere nur auf die Speicherstellen, die von dem vgatherlink-Befehl reserviert sind und deren Reservierungen noch gültig sind (d.h., seit dem vgatherlink fanden keine Schreibvorgänge auf diese Stelle statt). Der Befehl streut somit bedingt bis zu VLEN Datenelemente aus einer Quelle, Src, in VLEN Speicherstellen, memory[Addr[0]], ..., memory[Addr[VLEN-1]], gemäß einer Maske, F. Für alle Elemente gemäß der Maske, für die die individuelle Scatter-Conditional-Operation fehlgeschlagen ist, werden die entsprechenden Elemente der Maske F auf einen ungültigen Zustand, z. B. einen „0“-Zustand, gesetzt.
  • Unter Verwendung einer Kombination von vgatherlink- und vscattercond-Befehlen und Maskenmanipulationen (siehe unten), kann eine Untermenge von VLEN atomaren Operationen (z. B. Erlangen einer Untermenge von VLEN Locks) durchgeführt werden und die entsprechenden Maskenelemente auf 1 gesetzt werden. Diese Maske kann verwendet werden, um sicher im SIMD-Bereich auszuführen, da nur die Untermenge von SIMD-Elementen gemäß der Maske, die den erfolgreichen atomaren Operationen entsprechen, aktiviert sein wird. Nun Bezug nehmend auf Tabelle 1 wird ein Beispiel-Code-Segment gezeigt, das vgatherlink und vscattercond verwendet, um eine Untermenge von VLEN Locks zu erlangen und freizugeben.
    Figure DE112009000741B4_0001
    Figure DE112009000741B4_0002
    Der obige Code aktualisiert eine Untermenge von VLEN SIMD-Elementen gemäß einer Maske in jeder Iteration der While-Schleife, bis alle VLEN Elemente aktualisiert sind. Die SIMD-Elemente gemäß der Maske werden automatisch aktualisiert. Beachte, dass es möglich ist, dass aufgrund einer Lock-Konkurrenzsituation mit anderen Threads keine Locks in einer gegebenen Iteration der While-Schleife erlangt werden. Dies wird dazu führen, dass der SIMD_update-Bereich gemäß einer Maske ausführt, in der sich alle Elemente in einem „ungültig“-Zustand befinden, als eine No-Operation (NOP) tätig sind. Da nur eine Untermenge von Locks gemäß einer Maske erlangt wird, ist kein Sortieren von Locks erforderlich. Das Sortieren von Locks würde typischerweise in der entsprechenden seriellen Implementierung des kritischen Abschnitts verwendet werden, um Deadlocks zu vermeiden. Das Sortieren von Locks kann in der seriellen Implementierung auf Kosten von komplizierterem und ineffizienterem Code vermieden werden. In dem obigen Code kann ein Deadlock lediglich durch ein Erlangen von nicht umkämpften Locks und ein Fortschreiten mit der Ausführung verhindert werden. Eine beispielhafte Implementierung dieses Codes wird unten mit Bezug auf 2 beschrieben.
  • Beachte, dass die Definition der vgatherlink- und vscattercond-Befehle flexibel ist und unterschiedliche Verwendungsszenarien ermöglichen kann. Wir könnten z. B. stattdessen in dem obigen Code zuerst iterieren, um die Locks zu erlangen, bis alle VLEN Locks erlangt wurden, und dann alle VLEN Aktualisierungen gleichzeitig durchführen.
  • Beachte, dass während ein skalarer Load-Linked-Befehl immer erfolgreich ist, ist einem vgatherlink-Befehl in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung erlaubt, auf einer Untermenge von Adressen fehlzuschlagen. Ein Fehlschlag kann aus zahlreichen Gründen erfolgen, z. B.: (1) andere Threads haben die Untermenge von Adressen verlinkt; (2) ein Konflikt im Cache: falls der einzige Weg, eine neue Zeile herzubringen, darin besteht, eine andere verlinkte Zeile hinauszuwerfen (z. B. aufgrund von eingeschränkter Assoziativität); und (3) die Zeile ist an einer entfernten Stelle oder im Speicher und wird eine lange Latenz beanspruchen, um geholt zu werden (z. B. ein Cache-Miss tritt auf).
  • Es gibt dort zahlreiche andere Situationen, in denen ein Designer vorziehen kann, dass ein vgatherlink-Befehl fehlschlägt. Das Erlauben eines Fehlschlags kann potentiell die Anzahl von Konkurrenzsituationen reduzieren, während es die Effizienz verbessert. Namentlich kann ein Warten darauf, dass ein vgatherlink-Befehl für VLEN Adressen erfolgreich ist, die Konkurrenzsituationen erhöhen, während ein unmittelbares Ausgeben von vscattercond-Befehlen nur auf die Untermenge von erfolgreich verlinkten Adressen die Anzahl von Konkurrenzsituationen reduziert.
  • In der obigen Diskussion wird angenommen, dass alle Lock-Stellen eindeutig sind. Diese Beschränkung zwingt einen Programmierer dazu, die Locks in Untermengen von eindeutigen Locks vor einem Eintreten in die While-Schleife zu partitionieren, was eine potentiell teure Berechnung ist. Wenn z. B. VLEN Elemente gleichzeitig in einen Baum eingefügt werden, hätte der Programmierer keine Möglichkeit zur Compile-Zeit zu wissen, welche Elemente eindeutig sind.
  • Das Partitionieren von Locks in eindeutige Untermengen in Software ist teuer. Jedoch sind die Semantiken von vgatherlink- und vscattercond-Befehlen derart, dass ein Partitionieren nicht erforderlich ist. Diese Befehle unterscheiden sich von Scatter-Conditional- und gewöhnlichen Scatter-Operationen in ihrer Handhabung von Element-Aliasing, wobei eine einzelne SIMD-Operation versucht, mehrere Werte an dieselbe Stelle zu schreiben. Eines und nur eines der Aliasing-Elementaktualisierungen wird Erfolg haben, angezeigt durch die Ausgabemaske. In verschiedenen Ausführungsformen kann ein Hardware-Designer wählen, da sowohl Gather-Linked- als auch Scatter-Conditional-Befehle Ausgabemasken haben, die Aliasing-Detektion und -Resolution als Teil von einem der Befehle zu implementieren. Da vgahterlink- oder vscattercond-Befehle nur eine Untermenge von eindeutigen Adressen in Addr verarbeiten, garantiert dies, dass nur eindeutige Locks in einer gegebenen Iteration der While-Schleife erlangt werden, und der SIMD_update-Befehl wird nur auf den eindeutigen Elementen innerhalb der Gruppe von VLEN Elementen durchgeführt.
  • Während sich die obige Diskussion auf das Erlangen von Locks konzentriert, haben vgatherlink und vscattercond mindestens ein weiteres Verwendungsszenario: parallele Reduktionen. In zahlreichen Anwendungen führt der SIMD update-Befehl kein Zugreifen auf andere Objekte im gemeinsamen Speicher nach sich. Deshalb müssen solche Objekte nicht einen Lock erhalten haben, um Atomarität der Aktualisierung zu garantieren. Stattdessen können die vgatherlink- und vscattercond-Befehle auf den Daten, die aktualisiert werden, verwendet werden, wie aus Tabelle 2 folgt:
    Figure DE112009000741B4_0003
  • In diesem Code sammelt der vgatherlink-Befehl Datenelemente aus der globalen Datenstruktur (glb_data) in das Vektorregister V. Er setzt ebenfalls die Bits des Maskenregisters F auf 0, die den fehlgeschlagenen gesammelten Elementen entsprechen. Der SIMD update-Befehl aktualisiert das Vektorregister V. Dann streut der vscattercond-Befehl das Vektorregister V auf die globale Datenstruktur und setzt ebenfalls die Bits des Maskenregisters F auf 0, die den fehlgeschlagenen gestreuten Elementen entsprechen. Nach dem vscattercond-Befehl enthält das Maskenregister F eine 1 für jedes Element, das in dieser Iteration erfolgreich aktualisiert wurde. Eine Exklusiv-ODER (XOR)-Operation mit F 1 löscht diese Maskenbits und setzt die Bits in der Maske auf 1, die den Elementen entsprechen, die bisher nicht aktualisiert wurden.
  • Das direkte Anwenden der vgatherlink- und vscattercond-Befehle, um parallele Reduktionen durchzuführen, kann mehrere Vorteile mit sich bringen. Erstens ist der Code effizienter, da keine Notwendigkeit besteht, sich Locks zu greifen und sie freizugeben (d.h., der Code in Tabelle 2 ist wesentlich kürzer als der Code in Tabelle 1). Zweitens ist das Speicherverhalten besser, da keine Notwendigkeit besteht, für die Lock-Variablen auf den Speicher zuzugreifen.
  • Die hier beschriebenen Vektorbefehle können auf unterschiedliche Arten implementiert werden. Solche Befehle können verschiedene SIMD-Hardware-Ressourcen wirksam einsetzen, die eine Reservierungsstelle für jedes Element in den vgatherlink- und vscattercond-Operationen aufweisen. In einer Ausführungsform kann eine Granularität einer Reservierungsstelle pro 32-Bit-Element verwendet werden. Jedoch können andere Ausführungsformen eine kleinere oder größere Granularität haben. Die Anzahl von Elementen, die in einer einzelnen Iteration ein vgatherlink-Befehl sammelt und vscattercond streut kann ein Entwurfsparameter sein, da das Erlauben, dass eine größere Anzahl von Elementen gesammelt und gestreut wird, zwar eine bessere Leistungsfähigkeit bereitstellt, jedoch mehr Ressourcen erfordert.
  • In einer Ausführungsform können die vgatherlink- und vscattercond-Befehle das im Anhang I bzw. II gezeigte externe Verhalten aufweisen.
  • Ausführungsformen können somit eine effiziente Unterstützung für atomare Operationen in einer SIMD-Architektur bereitstellen. Auf diese Art und Weise kann die Notwendigkeit, atomare Zugriffe auf mehrere Speicherstellen zu serialisieren, unter Verwendung der hier beschriebenen Befehle vermieden werden, um einen Zugriff auf solche mehreren Stellen unter Verwendung einer effizienten Schleifenkonstruktion, z.B. einer Do-While-Schleife, zu ermöglichen.
  • Ausführungsformen der Befehle können in verschiedenen Anwendungen verwendet werden. Für die Verwendung von Locks können z. B. die beschriebenen Befehle verwendet werden, um Operationen in verschiedenen Anwendungen, wie z. B. Anwendungen für physikalische Simulation, durchzuführen. In ähnlicher Weise können die beschriebenen Befehle für Reduktionsoperationen in Verbindung mit verschiedenen Anwendungen verwendet werden, z. B. Bildverarbeitungsanwendungen und Anwendungen, die dünnbesetze Primitive der linearen Algebra verwenden. Selbstverständlich ist der Umfang der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt und die hier beschriebenen Befehle können in anderen Anwendungen verwendet werden.
  • Nun Bezug nehmend auf 1A ist ein Blockdiagramm eines Prozessorkerns in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 1A gezeigt, kann ein Prozessorkern 10 ein einzelner Kern eines Mehrfachkernprozessors sein, der eine Vielzahl von Kernen aufweist, die ähnlich zu dem des Kerns 10 konfiguriert sind. Wie in 1A gezeigt, kann der Kern 10 aus einer Architektur sein, die SIMD-Operationen unterstützt. Zum Beispiel können verschiedene Komponenten von Pipeline-/funktionalen Einheiten 20 erweitert werden, um Vektorunterstützung bereitzustellen, z. B. durch erweiterte Register und funktionale Einheiten, wie z. B. ALUs usw.
  • Weiterhin Bezug nehmend auf 1A können die Pipeline-/funktionalen Einheiten 20 mit einer Lade/Speichereinheit (LSU) 30 und einer Gather/Scatter-Einheit (GSU) 40 gekoppelt sein. Die LSU 30 kann die Ausführung von Lese- und Speicherbefehlen mit einem Cache-Speicher 50 handhaben, der in einer Ausführungsform ein Level-1 (L1)-Cache sein kann. Ähnlicherweise kann die GSU 40 die Ausführung von Gather- und Scatter-Befehlen handhaben, wie z. B. den hier beschriebenen Gather-Linked-Vektor- und Scatter-Conditional-Vektorbefehlen.
  • Während diese Einheiten auf unterschiedliche Art und Weise konfiguriert sein können, ist nun Bezug nehmend auf 1B eine beispielhafte Repräsentation einer Gather/Scatter-Einheit in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 1B gezeigt, kann die GSU 40 eine Steuerlogik 42 aufweisen, die verschiedene Hardware, Firmware und Software oder Kombinationen davon aufweisen kann, um die Ausführung von verschiedenen Vektorbefehlen zu handhaben, wie z. B. den hier beschriebenen Befehlen. Um solche Operationen herbeizuführen, kann die Steuerlogik 42 in Kommunikation mit einem Maskenspeicher 44 sein, der eine oder mehrere Speicherstellen aufweisen kann, um Speicherung von Maskeninformationen, z. B. in der Form einer Vektormaske, bereitzustellen, die als Eingabe- und/oder Ausgabemasken für die unterschiedlichen hier beschriebenen Befehle verwendet werden können. Des Weiteren kann die Steuerlogik 42 in Kommunikation mit einem Vektorspeicher 46 stehen, der eine Vektorregisterdatei oder ein anderer temporärer Speicher sein kann, um Speicherung von Vektordatenelementen bereitzustellen, die als Operanden für die verschiedenen hier beschriebenen Befehle verwendet werden. Des Weiteren kann eine Mischlogik 48 bereitgestellt sein, um ein Mischen von verschiedenen Datenelementen gemäß Vektormischbefehlen, wie z. B. den hier beschriebenen, bereitzustellen, die von der Steuerlogik 42 implementiert sein können. Wie des Weiteren in 1B gezeigt ist, kann die Steuerlogik 42 wiederum mit Upstream-Abschnitten eines Kerns, z. B. den Pipeline-/funktionalen Einheiten 20 aus 1A, und einem Downstream-Abschnitt des Kerns kommunizieren, z. B. dem Cache-Speicher 50. Während sie in dieser bestimmten Implementierung in der Ausführungsform aus 1B gezeigt ist, sollte verständlich sein, dass der Umfang der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist.
  • In einer Ausführungsform kann die GSU 40 eine Gather-Linked-Vektoroperation genauso handhaben, wie eine Gather-Operation, außer dass sie Load-Linked-Anfragen an den Speicher 50 erzeugt und sendet. Ähnlicherweise kann die GSU 40 Store-Conditional-Anfragen an den L1-Cache statt des normalen Speichers senden. Zusätzlich baut die GSU 40 die Ausgabemaske für diese Operationen basierend auf Erfolg oder Fehlschlag der individuellen Anfragen auf und speichert sie.
  • In einer Ausführungsform kann eine Cache-Tag-Struktur des Cache-Speichers 50 einen sogenannten Gather-Load-Control-Store (GLSC)-Eintrag pro Cache-Zeile aufweisen, um Gather-Linked- und Scatter-Conditional-Befehle zu unterstützen. Ein GLSC-Eintrag kann zwei Felder enthalten: ein Gültigkeitsbit und einen Hardware-Thread-Identifikator (ID) (um zwischen den gleichzeitigen Multithreaded (SMT)-Threads auf demselben Kern zu unterscheiden). Während die GSU 40 Load-Linked-Anfragen an den Cache-Speicher 50 sendet, können für Gahter-Linked-Operationen einige der Anfragen fehlschlagen, während andere Anfragen erfolgreich sein werden. Für jede Anfrage, die erfolgreich ist, aktualisiert der Cache den entsprechenden GLSC-Eintrag (z. B. wird das Gültigkeitsbit gesetzt und die Thread-ID des Anfragers wird gefüllt), die GSU 40 setzt das entsprechende Bit in der Ausgabemaske und die GSU 40 platziert die Daten in das Zielregister. Für Scatter-Conditional-Operationen sendet die GSU 40 einen Satz von Store-Conditional-Anfragen an den Cache-Speicher 40. Eine individuelle Store-Conditional-Anfrage ist erfolgreich, wenn das entsprechende Gültigkeitsbit des GLSC-Eintrags gesetzt ist und die Thread-ID des GLSC-Eintrags mit der Thread-ID des Anfragers übereinstimmt. In einer Ausführungsform wird dies wahr sein, wenn die entsprechende Cache-Zeile nicht durch einen eingreifenden Schreibvorgang modifiziert wurde oder hinausgeworfen wurde, da sie erfolgreich durch eine übereinstimmende Load-Linked-Anfrage von einer Gather-Linked-Operation verlinkt wurde. Wenn eine individuelle Store-Conditional-Anfrage erfolgreich ist, löscht der Cache das GLSC-Gültigkeitsflag, modifiziert die Daten in der Cache-Zeile und die GSU 40 setzt das entsprechende Bit in der Ausgabemaske.
  • Nun Bezug nehmend auf 2 ist ein Flussdiagramm zum Durchführen von atomaren Vektoroperationen in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 2 gezeigt, kann ein Verfahren 100 Gather-Linked-Vektorbefehle und Scatter-Conditional-Vektorbefehle verwenden, um atomare Aktualisierungen von Vektordatenelementen zu ermöglichen. Beachte, dass obwohl sie mit dieser bestimmten Implementierung in der Ausführungsform aus 2 gezeigt ist, der Umfang der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt ist. Wie in 2 gezeigt, kann das Verfahren 100 in Block 110 beginnen, wobei eine Vektormaske auf einen gültigen Zustand gesetzt werden kann und Vektorindexinformationen erhalten werden können. Solche Operationen können durchgeführt werden, um somit eine Eingabemaske auf einen gültigen Zustand zu setzen und um Indexindices für SIMD-Datenelemente zu berechnen (d.h., Adressen zu erhalten).
  • Die Steuerung gibt dann weiter zu Block 120 ab, wo eine Schleife initiiert werden kann, die iteriert wird, bis alle SIMD-Elemente aktualisiert worden sind. Diese Schleife kann mit einem Durchführen eines Gather-Linked-Vektorbefehls beginnen, um Vektor-Lock-Informationen zu erhalten. Insbesondere kann dieser Gather-Linked somit verwendet werden, um bis zu VLEN Lock-Werte zu erhalten. Falls er für ein gegebenes Datenelement nicht erfolgreich ist, wie bei Raute 125 bestimmt, die anzeigt, dass ein Lock für ein gegebenes Datenelement nicht verfügbar ist, gibt die Steuerung zu Block 130 ab, wo ein entsprechender Vektormaskenindikator für den nicht verfügbaren Lock auf einen ungültigen Zustand gesetzt werden kann. Falls stattdessen ein gegebener Lock verfügbar ist, kann ein Scatter-Conditional-Vektorbefehl ausgeführt werden, um zu versuchen, solche verfügbaren Datenelemente zu verriegeln (Block 140). Für beliebige erfolgreiche Operationen, die einen Lock erhalten, kann eine Ausgabemaske, die dem Scatter-Conditional-Vektorbefehl zugeordnet ist, gesetzt bleiben, während für einen beliebigen solcher Locks, die nicht in der Lagen waren, erhalten zu werden, die Maske stattdessen auf einen ungültigen Zustand gesetzt werden kann. Die Steuerung gibt dann zu Block 150 ab, wo eine SIMD-Aktualisierung auf einer Untermenge der Datenelemente durchgeführt werden kann. Insbesondere kann die SIMD-Aktualisierung für beliebige Datenelemente, für die der Lock bei Block 140 erhalten wurde, durchgeführt werden. Die Steuerung gibt dann zu Block 160 ab, wo ein Scatter-Vektorbefehl ausgeführt werden kann, um die aktualisierten Datenelemente zu entriegeln. Danach kann bei Raute 170 bestimmt werden, ob zusätzliche Vektordatenelemente verbleiben, um aktualisiert zu werden. Falls dem so ist, gibt die Steuerung zurück zum Block 120 ab. Sonst kann das Verfahren 100 enden. Während sie in dieser bestimmten Implementierung in der Ausführungsform aus 2 gezeigt ist, ist der Umfang der vorliegenden Erfindung in dieser Hinsicht nicht beschränkt.
  • Ausführungsformen können ferner verwendet werden, um Scatter-Reduktionen in einem SIMD-Modus zu ermöglichen. Die Ausführungsformen unterteilen konzeptuell eine Scatter-Reduktionsoperation in drei Operationen. Erstens, partitioniere ein erstes Array in Chunks einer Länge, die der SIMD-Breite gleicht. Dieses Array kann ein Array aus ganzzahligen oder Fliesskommawerten gegebener Längen sein, z. B. ein erstes Array, ein sogenanntes C-Array mit Werten der Länge N. Beachte, dass ein weiteres Array, auf das als ein sogenanntes B-Array Bezug genommen wird, ein ganzzahliges Index-Array der Länge N sein kann, dessen Elemente im Bereich [1... M] liegen und das die Abbildung von jedem Element des C-Arrays auf ein anderes Array, A, der Länge M definiert. Beachte, dass die Verteilung von Indices (d.h. der Inhalte des Arrays B) oft zufällig ist. Darüber hinaus können mehrere Einträge des B-Arrays denselben Wert haben, was verursachen kann, dass mehrere Werte des C-Arrays in dasselbe Element des A-Arrays reduziert werden sollen. Zweitens, führe eine lokale Reduktion innerhalb jedes Chunks durch (von dem angenommen wird, dass er in SIMD-Registem ist); am Ende von jeder dieser Operationen wird ein SIMD-Register Werte halten, die eindeutigen Elementen von A innerhalb des Chunks entsprechen (d.h., keine zwei Werte innerhalb des Registers müssen auf dasselbe Element des Arrays reduziert werden), und alle duplizierten Werte wurden in dieses eindeutige Element reduziert. Drittens, führe eine Gather-Update-Scatter-Speicheroperation für jeden Chunk durch, um die Reduktion des Chunks abzuschlie-ßen.
  • Ausführungsformen können noch einen weiteren Vektorbefehl bereitstellen, um beim Durchführen von SIMD-Reduktionen in Registern zu unterstützen. Insbesondere kann der Befehl verwendet werden, um die eindeutigen Eintragungen in einem ersten SIMD-Register zu finden, und eine Mischsteuerung für die duplizierten Eintragungen zu erzeugen. Nach solchen Operationen kann die Mischsteuerung verwendet werden, um ein zweites SIMD-Register aus dem ersten SIMD-Register derart zu produzieren, dass sich Paare von duplizierten Elementen in ihrem jeweiligen SIMD-Register in sich entsprechenden Stellen befinden. Ferner wird eine Akkumulation von diesen zwei Vektorregistern durchgeführt, um entsprechende duplizierte Elemente aus jedem Paar in ein Zielvektorregister zu „reduzieren“. Die gesamte Sequenz wird wiederholt bis die verbleibenden Elemente alle auf unterschiedliche Elemente von A abbilden. Diese Sequenz akkumuliert so viele Paare von duplizierten Elementen wie möglich in jeder Iteration, um die Anzahl von Iterationen zu minimieren. Alternative Ausführungsformen können lediglich eine Untermenge der Paare von Duplikaten akkumulieren, um die Implementierungskosten zu reduzieren.
  • Vor dem Start der obigen zweiten Operation können die Arrays B und C in verschiedene Chunks (wie in der ersten Operation) aufgeteilt werden. Die Chunks werden in zwei SIMD-Register geladen (wir werden diese Register einfachheitshalber Vb und Vc nennen). Die zweite Operation kombiniert Elemente aus Vc, die denselben Wert in den entsprechenden Elementen aus Vb haben. Um diese dritte Operation durchzuführen, kann eine Sequenz von Befehlen verwendet werden, um jedes Element aus Vb gegen andere Elemente in Vb seriell zu prüfen, um zu bestimmen, ob dort irgendeine Übereinstimmung vorliegt. Falls Übereinstimmungen gefunden werden, werden die entsprechenden Elemente in Vc reduziert. Die folgende Tabelle 3 ist der Pseudo-Code dieser zweiten Operation:
    Figure DE112009000741B4_0004
    Figure DE112009000741B4_0005
  • Diese serielle Implementierung weist jedoch eine Komplexität von O(N2) auf. Entsprechend können Ausführungsformen der vorliegenden Erfindung einen Vektorbefehl bereitstellen, auf den hier als ein Shuffle-to-Reduce-Vektorbefehl, vshuf2reduce, Bezug genommen wird, um die Komplexität dieser Operation auf O(logN) zu reduzieren. Dieser Vshuf2reduce-Befehl nimmt eine Quelle Vb und eine Eingabemaske (die anzeigt, welche Elemente gültig sind) und erzeugt eine Mischsteuerung (in einem skalaren Register) und aktualisiert das Maskenregister. In einer Ausführungsform hat der Befehl das folgende Format:
    Opcode Ziel Quelle Maske Beschreibung
    vshuf2reduce Dst Vb F Vergleicht Elemente in Vb (alle mit allen) und erzeugt baumförmig eine Mischsteuerung zum Kombinieren von Elementen, die denselben Wert in Vb haben
  • Somit führt dieser vshuf2reduce-Befehl Alle-mit-Allen-Vergleiche von Elementen in Vb gegen andere Elemente in Vb, um eine Mischsteuerung für Vc zu erzeugen. Die Mischsteuerung wird als eine Eingabe für einen Mischbefehl verwendet, um in einer paarweisen Form Elemente in Vc mit anderen Elementen in Vc aufzureihen, die denselben Index-Wert in Vb haben. Zusätzlich wird die Maske F zurückgegeben, in der ein Element, das einem der zwei Eintragungen von jedem Paar entspricht, auf gültig gesetzt ist.
  • Die dritte obige Operation ist dazu bestimmt, die Ausgabe der zweiten Operation, Voutput, mit den aktuellen Inhalten von C zu kombinieren. Dies involviert ein Lesen der Elemente von C, die Voutput entsprechen, ein Akkumulieren dieser Elemente mit Voutput und dann ein Speichern der neu akkumulierten Werte zurück an ihre entsprechenden Stellen in C.
  • Die folgende Tabelle 4 ist ein Pseudo-Code eines Durchführens einer Scatter-Reduktion unter Verwendung dieses Befehls:
    Figure DE112009000741B4_0006
    Figure DE112009000741B4_0007
  • Der vshuf2reduce-Befehl erzeugt Mischsteuerungen für eine Baumreduktion. Das heißt, dass von der While-Schleife erwartet wird, dass sie innerhalb von O(log(VLEN))) Schritten im Worst-Case abschließt (wenn alle Elemente gleich sind und somit in ein einziges Element reduzieren), was die Leistungsfähigkeit der zweiten Operation der oben beschriebenen Scatter-Reduktionsoperation signifikant verbessert. Falls alle Elemente von Vc eindeutige Werte von Vb haben, kann die Schleife in einer einzigen Iteration abschließen.
  • In einer Ausführungsform kann der vshuf2reduce-Befehl basierend auf dem folgenden Pseudo-Code aus Tabelle 5 implementiert sein:
    Figure DE112009000741B4_0008
  • Der elementweise Alle-mit-Allen-Vergleich kann in Stufen implementiert sein und die Mischsteuerung kann in einer Ausführungsform durch Verwenden einer vorprogrammierten Lookup-Tabelle erzeugt werden.
  • Anhang III zeigt eine Verwendung dieses Befehls für die zweite Operation einer skalaren Reduktion.
  • Ausführungsformen können einen weiteren Befehl bereitstellen, um eine effiziente SIMD-Ausführung von Histogrammberechnungen zu ermöglichen durch effiziente Behandlung des Falls, in dem mehrere Indices in einem SIMD-Register gleich sind. Ein solcher Befehl kann die Populationsanzahl von eindeutigen ganzzahligen Werten in einem SIMD-Quellregister berechnen. Die Ausgaben sind ein SIMD-Register, das die Populationsanzahl der eindeutigen Elemente hält, und ein Maskenregister, das anzeigt, welche Elemente eindeutig sind. In einer Ausführungsform kann dieser Befehl, auf den als vitemcount Bezug genommen wird, das folgende Format haben:
    Opcode Ziel Quelle Maske Beschreibung
    vitemcount Vd Vd F Identifiziert und zählt die identischen Elemente in Vektor Vs und speichert die Anzahl in Vd. Setzt die Schreibmaske F, die eindeutigen Elementen von Vs entspricht.
  • Als ein Arbeitsbeispiel nehme einen initialen Zustand wie folgt an (wobei „-“ bedeutet, dass die Werte egal sind):
    7 6 5 4 3 2 1 0
    Vs: 15 10 15 0 10 15 10 1
    Vd: - - - - - - - -
    Fmask 1 1 0 1 1 1 1 1
  • Nach den vitemcount-Befehlen ist der Zustand wie folgt:
    7 6 5 4 3 2 1 0
    Vs: 15 10 15 0 10 15 10 1
    Vd: - - - 1 - 2 3 1
    Fmask 0 0 0 1 0 1 1 1
  • Die Populationsanzahl von jedem Element Vs[i] von Vs wird in Vd[i] gespeichert. Die eindeutigen Indices in Vs haben ihre entsprechende Schreibmaske in Fmask gesetzt.
  • Mit diesem vitemcount-Befehl kann eine SIMD-Histogrammberechnung wie in Tabelle 6 folgt, bereitgestellt werden:
    Figure DE112009000741B4_0009
    Figure DE112009000741B4_0010
  • Wie in Tabelle 6 gezeigt, führt diese Berechnung in vier Stufen aus. In der ersten Stufe werden das Quellregister Vs und die Maske F aus einer Vektorregisterdatei (VRF) bzw. einer Maskenregisterdatei (RF) gelesen. In der zweiten Stufe wird ein Alle-mit-Allen-Vergleich durchgeführt, um eindeutige Elemente in Vs zu identifizieren. Das Ergebnis der zweiten Stufe ist ein 4-Bit-Tag, das jedem Element Vs[i] von Vs zugeordnet ist, so dass eine Gruppe von zwei oder mehr identischen Elementen dasselbe Tag hat. Die dritte Pipeline-Stufe verwendet die 4-Bit-Tags, um die Zahl von Elementen in jeder Gruppe von identischen Elementen zu zählen. In der vierten und letzten Stufe werden der Anzahlvektor und die Maske in Vd bzw. F geschrieben. In einigen Implementierungen wird dieser Befehl parallele Histogrammberechnungen ermöglichen und kann eine Beschleunigung gegenüber einer seriellen Implementierung bereitstellen.
  • Ausführungsformen können in zahlreichen unterschiedlichen Systemtypen implementiert sein. Nun Bezug nehmend auf 3 ist ein Blockdiagramm eines Systems in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 3 gezeigt, ist ein Multiprozessorsystem 500 ein Punkt-zu-Punkt-Interconnect-System und weist einen ersten Prozessor 570 und einen zweiten Prozessor 580 auf, die über einen Punkt-zu-Punkt-Interconnect 550 gekoppelt sind. Wie in 3 gezeigt, kann jeder der Prozessoren 570 und 580 ein Mehrfachkernprozessor sein, aufweisend erste und zweite Prozessorkerne (d.h. Prozessorkerne 574a und 574b und Prozessorkerne 584a und 584b). Jeder Prozessorkern kann eine Logik, wie z. B. in den 1A und 1B gezeigt, aufweisen, um die Ausführung von Einzelbefehl-Vektoroperationen in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung zu ermöglichen. Auf diese Weise können atomare Vektoroperationen durchgeführt werden und verschiedener Code kann ausgeführt werden, um die hier beschriebenen Vektorbefehle wirksam einzusetzen.
  • Weiterhin Bezug nehmend auf 3 weist der erste Prozessor 570 ferner einen Speicher-Controller-Hub (MCH) 572 und Punkt-zu-Punkt (P-P)-Schnittstellen 576 und 578 auf. Ähnlicherweise weist der zweite Prozessor 580 einen MCH 582 und P-P-Schnittstellen 586 und 588 auf. Wie in 4 gezeigt, koppeln die MCHs 572 und 582 die Prozessoren an jeweilige Speicher, namentlich an einen Speicher 532 und einen Speicher 534, die Teile eines Hauptspeichers sein können (z.B. ein dynamischer Direktzugriffsspeicher (DRAM)), der an die jeweiligen Prozessoren lokal angeschlossen ist. Der erste Prozessor 570 und der zweite Prozessor 580 können an einen Chipsatz 590 über P-P-Interconnects 552 bzw. 554 gekoppelt sein. Wie in 3 gezeigt, weist der Chipsatz 590 P-P-Schnittstellen 594 und 598 auf.
  • Ferner weist der Chipsatz 590 eine Schnittstelle 592 auf, um den Chipsatz 590 mit einer Hochleistungsgrafik-Engine 538 zu koppeln. Der Chipsatz 590 kann wiederum an einen ersten Bus 516 über eine Schnittstelle 596 gekoppelt sein. Wie in 3 gezeigt, können verschiedene I/O-Vorrichtungen 514 an den ersten Bus 516 gekoppelt sein, zusammen mit einer Bus-Bridge 518, die den ersten Bus 516 an einen zweiten Bus 520 koppelt. Verschiedene Vorrichtungen können an den zweiten Bus 520 gekoppelt sein, aufweisend z. B. eine Tastatur/Maus 522, Kommunikationsvorrichtungen 526 und eine Datenspeichereinheit 528, wie z. B. ein Plattenlaufwerk oder andere Massenspeichervorrichtungen, die in einer Ausführungsform Code 530 aufweisen können. Ferner kann eine Audio-I/O 524 an den zweiten Bus 520 gekoppelt sein.
  • Ausführungsformen können als Code implementiert sein und können auf einem Speichermedium gespeichert sein, das darauf Befehle gespeichert hat, die verwendet werden können, um ein System zu programmieren, diese Befehle durchzuführen. Das Speichermedium kann aufweisen, ist jedoch nicht beschränkt auf einen beliebigen Typ von Platten, aufweisend Floppy-Disks, optische Platten, Compact Disk Read-Only Memories (CD-ROMs), Compact Disk Rewritables (CD-RWs) und magneto-optische Platten, Halbleitervorrichtungen, wie z. B. Nurlesespeicher (ROMs), Direktzugriffsspeicher (RAMs), wie z. B. dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare programmierbare Nurlesespeicher (EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nurlesespeicher (EEPROMs), magnetische oder optische Karten oder ein beliebiger anderer Medientyp, der zum Speichern von elektronischen Befehlen geeignet ist.
  • Während die vorliegende Erfindung mit Bezug auf eine beschränkte Zahl von Ausführungsformen beschrieben worden ist, wird sich der Fachmann zahlreicher Modifikationen und Variationen hiervon bewusst sein. Es ist beabsichtigt, dass die angefügten Ansprüche alle solche Modifikationen und Variationen abdecken, die dem wahren Wesen der vorliegenden Erfindung entsprechen und in den Umfang der vorliegenden Erfindung fallen.
    Figure DE112009000741B4_0011
  • Anhang II
  • Der vscattercond sollte das folgende externe Verhalten haben.
    Figure DE112009000741B4_0012
  • Anhang III
  • Initialer Zustand („-“ bedeutet, dass die Werte egal sind), SC = Shuffle_Control ist ein skalarer Operand, der hier jedoch zur Vereinfachung des Verständnisses als ein Vektor repräsentiert wird.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 15,0 14,0 13,0 12,0 11,0 10,0
    F: 1 1 1 1 1 1 1 1
    F1: 1 1 1 1 1 1 1 1
    Vtmp: - - - - - - - -
    SC Identität Identität Identität Identität Identität Identität Identität Identität
    L1: vshuf2reduce SC,, Vb, F aktualisiert F und SC
    7 7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 15,0 14,0 13,0 12,0 11,0 10,0
    F: 0 1 1 1 0 0 1 1
    F1: 1 1 1 1 1 1 1 1
    Vtmp: - - - - - - - -
    SC 7->5 Identität Identität Identität 3->1 2->0 Identität Identität
  • Falls die initialen Werte von Vb alle eindeutig sind, werden an diesem Punkt die F-Masken weiterhin alle 1sen sein. Es wird effektiv gleich der F1-Maske sein und die While-Schleife (L4 bis L9) würde nicht ausgeführt werden und Operation 2 würde abschließen. In diesem Beispiel ist die F-Maske nicht gleich wie die F 1-Maske, da einige Elemente von Vb identisch sind. Somit werden wir die Schleife (L4 bis L9) ausführen L4: Vshuffle. aktualisiert Vtmp.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 15,0 14,0 13,0 12,0 11,0 10,0
    F: 0 1 1 1 0 0 1 1
    F1: 1 1 1 1 1 1 1 1
    Vtmp: - - 17,0 - - - 13,0 12,0
    SC 7->5 Identität Identität Identität 3->1 2->0 Identität Identität
    L5: Vadd aktualisiert Vc.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 1 1 0 0 1 1
    F1: 1 1 1 1 1 1 1 1
    Vtmp: - - 17,0 - - - 13,0 12,0
    SC 7->5 Identität Identität Identität 3->1 2->0 Identität Identität
  • In der Schleife zwischen L4 und L9 werden die vshuf2reduce, vshuffle und vadd wiederholt aufgerufen, bis sich die Maske nicht mehr ändert. Dies bedeutet das Ende der Reduktionsoperation. L6: F1 = F aktualisiert F 1
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 1 1 0 0 1 1
    F1: 0 1 1 1 0 0 1 1
    Vtmp: - - 17,0 - - - 13,0 12,0
    SC 7->5 Identität Identität Identität 3->1 2->0 Identität Identität
    L7: vshuf2reduce SC, , Vb, F aktualisiert F und SC
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 1 1 0 0 1 1
    Vtmp: - - 17,0 - - - 13,0 12,0
    SC - Identität 5->0 Identität - - Identität Identität
  • L9 schleift zurück zu L4. Da F und F1 weiterhin unterschiedlich sind, müssten wir die Schleife für eine weitere Iteration ausführen. L4: Vshuffle. aktualisiert Vtmp.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 1 1 0 0 1 1
    Vtmp: - - - - - - - 32,0
    SC - Identität 5->0 Identität - - Identität Identität
    L5: Vadd aktualisiert Vc.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 54,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 1 1 0 0 1 1
    Vtmp: - - - - - - - 32,0
    SC - Identität 5->0 Identität - - Identität Identität
    L6: F1 = F aktualisiert F 1
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 0 1 0 0 1 1
    Vtmp: - - - - - - - 32,0
    SC - Identität 5->0 Identität - - Identität Identität
  • L7: vshuf2reduce SC, , Vb, F findet keine weiteren Elemente des Vb-Vektors, die gleich sind. Somit aktualisiert es weder F noch SC.
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 22,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 0 1 0 0 1 1
    Vtmp: - - 17,0 - - - 13,0 12,0
    SC - Identität - Identität - - Identität Identität
  • L9: Rückschleife zum Anfang der While-Schleife, um die Bedingungen zu testen. Diesmal sind F und F1 gleich und die Schleife wird verlassen. Die Endzustände der Variablen sind wie folgt:
    7 6 5 4 3 2 1 0
    Vb: 15 13 15 0 10 15 10 15
    Vc: 17,0 16,0 32,0 14,0 13,0 12,0 24,0 54,0
    F: 0 1 0 1 0 0 1 1
    F1: 0 1 0 1 0 0 1 1

Claims (11)

  1. Prozessor, der Folgendes umfasst: Logik zum Empfangen eines ersten Vektorbefehls, einer Vielzahl von Adressen, jede zu einer Speicherstelle mit einem entsprechenden Datenelement eines Vektors mit einer Vielzahl von Datenelementen, und von Maskeninformationen, die dem Vektor zugeordnet sind, und zum Laden eines Datenelements, das aus der Speicherstelle erhalten wird, die jeder aus der Vielzahl von Adressen entspricht, wie durch die Maskeninformationen angezeigt, und zum Reservieren der Speicherstellen für eine nachfolgende Operation durch Setzen einer Reservierungsstelle für jedes der geladenen Datenelemente durch Speichern eines ersten Zeigers auf eine inhaltsadressierbare Speicherstruktur, wobei die Logik eingerichtet ist zum Empfangen eines zweiten Vektorbefehls, einer zweiten Vielzahl von Adressen, jede zu einer Speicherstelle mit einem entsprechenden Datenelement des Vektors, und von zweiten Maskeninformationen und zum bedingten Schreiben eines Datenelements aus einem Quellspeicher an die Speicherstelle, die jeder aus der zweiten Vielzahl von Adressen entspricht, wie durch die zweiten Maskeninformationen angezeigt, wenn die entsprechende Speicherstelle noch reserviert ist, aufgrund eines Vergleichs eines zweiten Zeigers, der aus einem Vektorspeicheroperanden erzeugt ist, mit einem entsprechenden ersten Zeiger, der in der inhaltsadressierbaren Speicherstruktur gespeichert ist.
  2. Prozessor nach Anspruch 1, wobei die Logik eingerichtet ist zum Aktualisieren der Maskeninformationen mit einem Ungültigkeitsindikator, der jedem der Datenelemente entspricht, das nicht erfolgreich erhalten wurde.
  3. Prozessor nach Anspruch 2, wobei die Logik eingerichtet ist zum Laden und Reservieren einer Untermenge der Vielzahl von Datenelementen, die den Datenelementen entspricht, die erfolgreich erhalten wurden.
  4. Prozessor nach Anspruch 1, wobei die Logik eingerichtet ist zum Erzeugen einer Ausgabemaske aus den zweiten Maskeninformationen mit einem Ungültigkeitsindikator, der jeder der Speicherstellen entspricht, die nicht mehr reserviert ist.
  5. Vorrichtung, die Folgendes umfasst: eine Einzelbefehl-Mehrfachdaten (Single Instruction Multiple Data, SIMD)-Einheit zum Durchführen von Operationen auf einer Vielzahl von Datenelementen als Reaktion auf einen einzelnen Befehl; und eine Steuereinheit, die an die SIMD-Einheit gekoppelt ist, zum Bereitstellen der Vielzahl von Datenelementen für die SIMD-Einheit, wobei die Steuereinheit eingerichtet ist zum Ermöglichen, dass eine atomare SIMD-Operation auf mindestens einigen aus der Vielzahl von Datenelementen durchgeführt wird als Reaktion auf einen ersten SIMD-Befehl, der gemäß einer ersten Maske ausgeführt werden soll, und einen zweiten SIMD-Befehl, der gemäß einer zweiten Maske ausgeführt werden soll, wobei der erste SIMD-Befehl eingerichtet ist zum Erhalten der Vielzahl von Datenelementen aus ersten Speicherstellen und zum Reservieren der ersten Speicherstellen laut einer Eingabemaske, die der ersten Maske entspricht, wobei die ersten Speicherstellen reserviert werden durch Setzen einer Reservierungsstelle durch Speichern eines ersten Zeigers auf einer inhaltsadressierbaren Speicherstruktur für jedes der mehreren Datenelemente, wobei der zweite SIMD-Befehl eingerichtet ist zum Speichern einer zweiten Vielzahl von Datenelementen aus einer Quellstelle an die ersten Speicherstellen, die reserviert sind, aufgrund eines Vergleichs eines zweiten Zeigers, der aus einem Vektorspeicheroperanden erzeugt ist, mit einem entsprechenden ersten Zeiger, der in der inhaltsadressierbaren Speicherstruktur gespeichert ist, laut einer Eingabemaske, die der zweiten Maske entspricht, und wobei der erste SIMD-Befehl eingerichtet ist, um eine Erzeugung der zweiten Maske hervorzurufen.
  6. Vorrichtung nach Anspruch 6, wobei die Steuereinheit eingerichtet ist zum Ermöglichen, dass die SIMD-Einheit einen dritten SIMD-Befehl durchführt zum Vergleichen eines zweiten Vektors mit einer zweiten Vielzahl von Datenelementen und zum Ausgeben einer Mischsteuerung, um Gruppen der Datenelemente mit gleichen Werten anzuzeigen, und zum Setzen von Indikatoren einer dritten Maske, um die nicht eindeutigen Datenelemente anzuzeigen.
  7. Vorrichtung nach Anspruch 6, wobei die Steuereinheit eingerichtet ist zum Ermöglichen, dass die SIMD-Einheit einen vierten SIMD-Befehl durchführt zum Erzeugen einer Zählung von identischen Elementen eines dritten Vektors mit einer dritten Vielzahl von Datenelementen und zum Speichern der Zählung für jedes eindeutige Element in einen Zielspeicher und zum ferner Schreiben eines Indikators einer vierten Maske, um jedes eindeutige Element anzuzeigen.
  8. System, das Folgendes umfasst: einen Prozessor, der Logik umfasst zum Ausführen eines ersten Einzelbefehl-Mehrfachdaten (Single Instruction Multiple Data, SIMD)-Befehls laut einer ersten Maske, um mindestens eine Untermenge von Datenelementen eines Vektors aus einer entsprechenden Vielzahl von möglicherweise nicht zusammenhängenden Quellstellen zu erhalten und um die möglicherweise nicht zusammenhängenden Quellstellen der Untermenge für eine nachfolgende Operation zu reservieren durch Setzen einer Reservierungsstelle für jedes des wenigstens einen Datenelements durch Speichern eines ersten Zeigers auf einer inhaltsadressierbaren Speicherstruktur, zum Durchführen einer atomaren SIMD-Operation unter Verwendung der Untermenge von Datenelementen und zum Ausführen eines zweiten SIMD-Befehls laut einer zweiten Maske, um mindestens eine zweite Untermenge von Datenelementen an die entsprechende Vielzahl von möglicherweise nicht zusammenhängenden Quellstellen zu schreiben, die noch reserviert sind, aufgrund eines Vergleichs eines zweiten Zeigers, der aus einem Vektorspeicheroperanden erzeugt ist, mit einem entsprechenden ersten Zeiger, der in der inhaltsadressierbaren Speicherstruktur gespeichert ist; und einen dynamischen Direktzugriffsspeicher (DRAM), der an den Prozessor gekoppelt ist.
  9. System nach Anspruch 8, wobei der Prozessor eingerichtet ist zum Aktualisieren der ersten Maske mit einem Ungültigkeitsindikator, der jedem der Datenelemente entspricht, das nicht erfolgreich erhalten wurde.
  10. System nach Anspruch 8, wobei der Prozessor eingerichtet ist zum Ausführen eines dritten SIMD-Befehls zum Analysieren eines zweiten Vektors mit einer zweiten Vielzahl von Datenelementen und zum Ausgeben einer Mischsteuerung, um Gruppen der zweiten Vielzahl von Datenelementen mit dem gleichen Wert anzuzeigen, und zum Setzen von Indikatoren einer dritten Maske, um die nicht eindeutigen Datenelemente anzuzeigen.
  11. System nach Anspruch 8, wobei der Prozessor eingerichtet ist zum Ausführen eines vierten SIMD-Befehls zum Erzeugen einer Zählung von identischen Elementen eines dritten Vektors mit einer dritten Vielzahl von Datenelementen und zum Speichern der Zählung für jedes eindeutige Element in einen Zielspeicher.
DE112009000741.4T 2008-03-28 2009-03-27 Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen Active DE112009000741B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/079,774 2008-03-28
US12/079,774 US9513905B2 (en) 2008-03-28 2008-03-28 Vector instructions to enable efficient synchronization and parallel reduction operations
PCT/US2009/038596 WO2009120981A2 (en) 2008-03-28 2009-03-27 Vector instructions to enable efficient synchronization and parallel reduction operations

Publications (2)

Publication Number Publication Date
DE112009000741T5 DE112009000741T5 (de) 2012-01-26
DE112009000741B4 true DE112009000741B4 (de) 2023-11-30

Family

ID=41114780

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112009000741.4T Active DE112009000741B4 (de) 2008-03-28 2009-03-27 Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen

Country Status (5)

Country Link
US (2) US9513905B2 (de)
JP (2) JP5455936B2 (de)
CN (2) CN103970506B (de)
DE (1) DE112009000741B4 (de)
WO (1) WO2009120981A2 (de)

Families Citing this family (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2477109B1 (de) 2006-04-12 2016-07-13 Soft Machines, Inc. Vorrichtung und Verfahren zur Verarbeitung einer Anweisungsmatrix zur Spezifizierung von parallelen und abhängigen Betriebsabläufen
US8677105B2 (en) 2006-11-14 2014-03-18 Soft Machines, Inc. Parallel processing of a sequential program using hardware generated threads and their instruction groups executing on plural execution units and accessing register file segments using dependency inheritance vectors across multiple engines
US20090138680A1 (en) * 2007-11-28 2009-05-28 Johnson Timothy J Vector atomic memory operations
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8904153B2 (en) 2010-09-07 2014-12-02 International Business Machines Corporation Vector loads with multiple vector elements from a same cache line in a scattered load operation
EP3156896B1 (de) 2010-09-17 2020-04-08 Soft Machines, Inc. Mehrfach verzweigte einzelzyklusvorhersage mit einem latenten cache für frühe und entfernte verzweigungsvorhersage
CN102004672B (zh) * 2010-11-25 2012-12-05 中国人民解放军国防科学技术大学 一种可配置归约目标自增间隔的归约装置
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
KR101638225B1 (ko) 2011-03-25 2016-07-08 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101636602B1 (ko) 2011-03-25 2016-07-05 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
EP2691849B1 (de) * 2011-03-30 2014-12-03 Intel Corporation Ganzzahlige simd-addition mit mathematischer operation auf masken
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
CN102156637A (zh) * 2011-05-04 2011-08-17 中国人民解放军国防科学技术大学 向量交叉多线程处理方法及向量交叉多线程微处理器
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US8521705B2 (en) * 2011-07-11 2013-08-27 Dell Products L.P. Accelerated deduplication
US20130080738A1 (en) * 2011-09-23 2013-03-28 Qualcomm Incorporated Processor configured to perform transactional memory operations
GB2508533B (en) 2011-09-26 2020-01-01 Intel Corp Instruction and logic to provide vector scatter-op and gather-op functionality
US9804844B2 (en) 2011-09-26 2017-10-31 Intel Corporation Instruction and logic to provide stride-based vector load-op functionality with mask duplication
CN106293631B (zh) * 2011-09-26 2020-04-10 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
CN104040492B (zh) * 2011-11-22 2017-02-15 索夫特机械公司 微处理器加速的代码优化器和依赖性重排序方法
EP2783280B1 (de) 2011-11-22 2019-09-11 Intel Corporation Beschleunigter codeoptimierer für einen mehrmotor-mikroprozessor
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
WO2013081588A1 (en) * 2011-11-30 2013-06-06 Intel Corporation Instruction and logic to provide vector horizontal compare functionality
US10318291B2 (en) 2011-11-30 2019-06-11 Intel Corporation Providing vector horizontal compare functionality within a vector register
US9436469B2 (en) * 2011-12-15 2016-09-06 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table
US20140108480A1 (en) * 2011-12-22 2014-04-17 Elmoustapha Ould-Ahmed-Vall Apparatus and method for vector compute and accumulate
WO2013095672A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Multi-register gather instruction
CN104025022B (zh) * 2011-12-23 2017-09-19 英特尔公司 用于具有推测支持的向量化的装置和方法
US10055225B2 (en) * 2011-12-23 2018-08-21 Intel Corporation Multi-register scatter instruction
CN104137054A (zh) * 2011-12-23 2014-11-05 英特尔公司 用于执行从索引值列表向掩码值的转换的系统、装置和方法
US10678541B2 (en) * 2011-12-29 2020-06-09 Intel Corporation Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions
WO2013101234A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Unique packed data element identification processors, methods, systems, and instructions
US9575753B2 (en) 2012-03-15 2017-02-21 International Business Machines Corporation SIMD compare instruction using permute logic for distributed register files
US9298456B2 (en) * 2012-08-21 2016-03-29 Apple Inc. Mechanism for performing speculative predicated instructions
US9400650B2 (en) * 2012-09-28 2016-07-26 Intel Corporation Read and write masks update instruction for vectorization of recursive computations over interdependent data
JP6020091B2 (ja) 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US10545757B2 (en) * 2012-12-28 2020-01-28 Intel Corporation Instruction for determining equality of all packed data elements in a source operand
US9804839B2 (en) * 2012-12-28 2017-10-31 Intel Corporation Instruction for determining histograms
US9411584B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US9372692B2 (en) 2012-12-29 2016-06-21 Intel Corporation Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality
US9411592B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
US9639503B2 (en) * 2013-03-15 2017-05-02 Qualcomm Incorporated Vector indirect element vertical addressing mode with horizontal permute
CN105210040B (zh) 2013-03-15 2019-04-02 英特尔公司 用于执行分组成块的多线程指令的方法
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
KR20150130510A (ko) 2013-03-15 2015-11-23 소프트 머신즈, 인크. 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9513907B2 (en) 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9552205B2 (en) * 2013-09-27 2017-01-24 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
JP6329412B2 (ja) * 2014-03-26 2018-05-23 株式会社メガチップス Simdプロセッサ
US20160026607A1 (en) * 2014-07-25 2016-01-28 Qualcomm Incorporated Parallelization of scalar operations by vector processors using data-indexed accumulators in vector register files, and related circuits, methods, and computer-readable media
JPWO2016136197A1 (ja) * 2015-02-25 2017-12-14 日本電気株式会社 データ処理装置、データ処理方法及びコンピュータ・プログラム
US20170046156A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Table lookup using simd instructions
CN105159766B (zh) * 2015-08-31 2018-05-25 安一恒通(北京)科技有限公司 数据的同步访问方法和同步访问装置
WO2017087001A1 (en) * 2015-11-20 2017-05-26 Hewlett Packard Enterprise Development Lp Distributed data shuffling
CN105487839A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 一种面向连续不对界向量数据访问的编译优化方法
US10152321B2 (en) * 2015-12-18 2018-12-11 Intel Corporation Instructions and logic for blend and permute operation sequences
GB2546510B (en) * 2016-01-20 2018-09-26 Advanced Risc Mach Ltd Vector atomic memory update instruction
US10248419B2 (en) * 2016-03-09 2019-04-02 International Business Machines Corporation In-memory/register vector radix sort
JP6231155B2 (ja) * 2016-05-02 2017-11-15 インテル・コーポレーション ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US10564964B2 (en) 2016-08-23 2020-02-18 International Business Machines Corporation Vector cross-compare count and sequence instructions
CN109844730B (zh) 2016-09-12 2023-06-13 甲骨文国际公司 用于评估数据库查询的方法、计算机系统、介质和装置
CN107844359A (zh) * 2016-09-20 2018-03-27 杭州华为数字技术有限公司 一种仿真方法及装置
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
US10474461B2 (en) 2016-09-22 2019-11-12 Qualcomm Incorporated Instruction-based synchronization of operations including at least one SIMD scatter operation
US10268479B2 (en) * 2016-12-30 2019-04-23 Intel Corporation Systems, apparatuses, and methods for broadcast compare addition
CN108416730B (zh) * 2017-02-09 2020-11-10 深圳市中兴微电子技术有限公司 一种图像处理方法及装置
US10360034B2 (en) 2017-04-18 2019-07-23 Samsung Electronics Co., Ltd. System and method for maintaining data in a low-power structure
US10437593B2 (en) * 2017-04-27 2019-10-08 Nvidia Corporation Techniques for comprehensively synchronizing execution threads
US11436010B2 (en) 2017-06-30 2022-09-06 Intel Corporation Method and apparatus for vectorizing indirect update loops
US11042375B2 (en) * 2017-08-01 2021-06-22 Arm Limited Counting elements in data items in a data processing apparatus
US11675761B2 (en) 2017-09-30 2023-06-13 Oracle International Corporation Performing in-memory columnar analytic queries on externally resident data
US10133573B1 (en) * 2017-12-12 2018-11-20 Google Llc Multivalue reductions using serial initial reductions in multiple register spaces and parallel subsequent reductions in a single register space
US10713046B2 (en) * 2017-12-20 2020-07-14 Exten Technologies, Inc. System memory controller with atomic operations
US10831500B2 (en) 2018-06-10 2020-11-10 International Business Machines Corporation Adaptive locking in elastic threading systems
JP7124608B2 (ja) * 2018-09-28 2022-08-24 日本電気株式会社 計算機および計算方法
US10929145B2 (en) * 2018-12-28 2021-02-23 Intel Corporation Mask generation using reduction operators and scatter use thereof
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
EP4002106A4 (de) * 2020-03-18 2022-11-16 NEC Corporation Informationsverarbeitungsvorrichtung und informationsverarbeitungsverfahren
CN112215986A (zh) * 2020-09-09 2021-01-12 苏州工业园区凌志软件股份有限公司 一种智能锁的物联网控制系统及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872987A (en) 1992-08-07 1999-02-16 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
US20070283127A1 (en) 2003-08-18 2007-12-06 Cray Inc. Method and apparatus for indirectly addressed vector load-add-store across multi-processors
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5513353A (en) * 1987-09-30 1996-04-30 Kabushiki Kaisha Toshiba Cache control system which permanently inhibits local but not global parameter data writes to main memory
US4953101A (en) 1987-11-24 1990-08-28 Digital Equipment Corporation Software configurable memory architecture for data processing system having graphics capability
JPH05108699A (ja) 1991-10-15 1993-04-30 Hitachi Ltd 共有データのベクトル処理方法
EP0733233A4 (de) * 1993-12-12 1997-05-14 Asp Solutions Usa Inc Vorrichtung und verfahren zur signalverarbeitung
JPH07271764A (ja) * 1994-03-24 1995-10-20 Internatl Business Mach Corp <Ibm> 計算機プロセッサ及びシステム
JP3179290B2 (ja) * 1994-07-28 2001-06-25 シャープ株式会社 ディジタル画像形成装置
US5818443A (en) * 1996-05-06 1998-10-06 Cognex Corporation Single step coarse registration and inspection of circular objects
JP3869947B2 (ja) 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
US6865295B2 (en) * 2001-05-11 2005-03-08 Koninklijke Philips Electronics N.V. Palette-based histogram matching with recursive histogram vector generation
US7032082B1 (en) 2001-08-31 2006-04-18 Juniper Networks, Inc. Centralized memory allocation with write pointer drift correction
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US6944744B2 (en) 2002-08-27 2005-09-13 Advanced Micro Devices, Inc. Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor
US20040236920A1 (en) 2003-05-20 2004-11-25 Sheaffer Gad S. Methods and apparatus for gathering and scattering data associated with a single-instruction-multiple-data (SIMD) operation
CN100502511C (zh) 2004-09-14 2009-06-17 华为技术有限公司 用于分数像素精度运动预测的插值图像内存组织方法
WO2006033056A2 (en) 2004-09-21 2006-03-30 Koninklijke Philips Electronics N.V. Micro processor device and method for shuffle operations
US7433513B2 (en) * 2005-01-07 2008-10-07 Hewlett-Packard Development Company, L.P. Scaling an array of luminace values
JP2007334563A (ja) 2006-06-14 2007-12-27 Nec Corp マスク付きベクトル演算処理装置
DE602006006990D1 (de) 2006-06-28 2009-07-09 St Microelectronics Nv SIMD-Prozessorarchitektur mit gruppierten Verarbeitungseinheiten
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8081823B2 (en) * 2007-11-20 2011-12-20 Seiko Epson Corporation Segmenting a string using similarity values
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872987A (en) 1992-08-07 1999-02-16 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
US20070283127A1 (en) 2003-08-18 2007-12-06 Cray Inc. Method and apparatus for indirectly addressed vector load-add-store across multi-processors
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
HE, Bingsheng [u.a.]: Efficient gather and scatter operations on graphics processors. Proceedings of the 2007 ACM/IEEE conference on Supercomputing. Reno, Nevada : ACM, 2007. S. 46:1-46:12. - ISBN 978-1-59593-764-3. http://doi.acm.org/10.1145/1362622.1362684 [abgerufen am 03.12.2012]
JUNG HO AHN; EREZ, M.; DALLYy, W.J.: Scatter-add in data parallel architectures. In: 11th International Symposium on High-Performance Computer Architecture, 2005. HPCA-11, 2005, S. 132-142. - ISSN 1530-0897. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4429976 [abgerufen am 03.12.2012]
SCHEUERMANN, T.; HENSLEY, J.: Efficient histogram generation using scattering on GPUs. Proceedings of the 2007 symposium on Interactive 3D graphics and games. Seattle, Washington : ACM, 2007. S. 33-37. - ISBN 978-1-59593-628-8. http://doi.acm.org/10.1145/1230100.1230105 [abgerufen am 03.12.2012]
SHAHBAHRAMI, A.; JUURLINK, B.; VASSILIADIS, S.: SIMD Vectorization of Histogram Functions. In: IEEE International Conf. on Application -specific Systems, Architectures and Processors, 2007. ASAP, 2007, S. 174-179. - ISSN 2160-0511. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4429976 [abgerufen am 03.12.2012]

Also Published As

Publication number Publication date
US9513905B2 (en) 2016-12-06
WO2009120981A3 (en) 2009-12-17
CN103970506A (zh) 2014-08-06
DE112009000741T5 (de) 2012-01-26
CN101978350B (zh) 2014-06-11
JP5902209B2 (ja) 2016-04-13
US20140068226A1 (en) 2014-03-06
JP2011514598A (ja) 2011-05-06
JP2014099194A (ja) 2014-05-29
CN101978350A (zh) 2011-02-16
US9678750B2 (en) 2017-06-13
WO2009120981A2 (en) 2009-10-01
CN103970506B (zh) 2017-07-14
US20090249026A1 (en) 2009-10-01
JP5455936B2 (ja) 2014-03-26

Similar Documents

Publication Publication Date Title
DE112009000741B4 (de) Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen
DE112005000706B4 (de) Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE69909829T2 (de) Vielfadenprozessor für faden-softwareanwendungen
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE102008061062A1 (de) Befehle und Logik zum Durchführen von Maskenlade- und -speicheroperationen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112015004983T5 (de) Parallel-Slice-Prozessor mit einer Lade-Speicher-Umlaufwarteschlange für eine schnelle Freigabe von Einträgen in einer Ausgabewarteschlange
DE112005003339T5 (de) Transaktionsgestützter Verarbeitungsbetrieb mit gemeinsam genutzten Daten in einer Multiprozessorumgebung
DE112007000812T5 (de) Transaktionalspeicher in Out-of-Order-Prozessoren
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102013114072A1 (de) System und Verfahren zum Hardware-Scheduling von indexierten Barrieren
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE102012222394A1 (de) Verfahren und Vorrichtung zum Sammelzwischenspeichern von Quelloperanden
DE4301417A1 (de)
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit

Legal Events

Date Code Title Description
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division