DE112010003308T5 - Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code - Google Patents

Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code Download PDF

Info

Publication number
DE112010003308T5
DE112010003308T5 DE112010003308T DE112010003308T DE112010003308T5 DE 112010003308 T5 DE112010003308 T5 DE 112010003308T5 DE 112010003308 T DE112010003308 T DE 112010003308T DE 112010003308 T DE112010003308 T DE 112010003308T DE 112010003308 T5 DE112010003308 T5 DE 112010003308T5
Authority
DE
Germany
Prior art keywords
code
exception
value
command
instruction
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.)
Ceased
Application number
DE112010003308T
Other languages
English (en)
Inventor
Alexandre Eichenberger
Alan Gara
Michael Gschwind
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112010003308T5 publication Critical patent/DE112010003308T5/de
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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
    • 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/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/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • 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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

Es werden Mechanismen zum Einfügen von angegebenen Befehlen bereitgestellt, um Ausnahmebedingungen bei der Ausführung von vektorisiertem Code zurückzuverfolgen und anzugeben. Ein Teil des ersten Codes (620) wird zum Übersetzen empfangen. Der Teil des ersten Codes (620) wird ausgewertet, um nichtspekulative Befehle, die festgelegte nichtspekulative Operationen in dem ersten Code (620) durchführen, zu ermitteln, welche für den Ersatz durch Ersetzungsoperation-und-Angeben-Befehle in Frage kommen, die die festgelegten nichtspekulativen Operationen durchführen und des Weiteren eine Angabe-Operation durchführen, um den Ersetzungsoperation-und-Angeben-Befehlen (1020) jedwede Ausnahmebedingungen anzugeben, die speziellen Ausnahmebedingungswerten (840) entsprechen, welche in Eingängen eines Vektorregisters vorhanden sind. Der Ersetzungsvorgang wird durchgeführt (1080), und auf der Grundlage des Ersetzens des mindestens einen nichtspekulativen Befehls wird zweiter Code (630) erzeugt. Das Datenverarbeitungssystem (100), das den übersetzten Code (630) ausführt, ist so konfiguriert, dass es als Reaktion auf einen spekulativen Befehl, der eine Ausnahmebedingung erzeugt, ohne die Ausnahmebedingungsbehandlung zu starten, spezielle Ausnahmebedingungswerte (840) in Vektor-Ausgaberegistern speichert.

Description

  • Diese Erfindung entstand mit Unterstützung der Regierung der Vereinigten Staaten im Rahmen des von der US-Energiebehörde (Department of Energy) vergebenen Auftrags Nr. B554331. DIE REGIERUNG DER VEREINIGTEN STAATEN HAT BESTIMMTE RECHTE AN DIESER ERFINDUNG.
  • TECHNISCHES GEBIET
  • Die vorliegende Anmeldung betrifft allgemein eine verbesserte Datenverarbeitungsvorrichtung und ein verbessertes Datenverarbeitungsverfahren und insbesondere Mechanismen zum Einfügen von Operation-und-Angeben-Befehlen für einen optimierten Single-Instruction-Multiple-Data-(SIMD-)Code.
  • STAND DER TECHNIK
  • Multimedia Extensions (MMEs) sind zu einer der beliebtesten Erweiterungen für Mehrzweckprozessoren geworden. Vorhandene Multimedia-Erweiterungen können als Single-Instruction-Multiple-Data-(SIMD-)Pfadeinheiten beschrieben werden, die verpackte Vektoren fester Länge unterstützen. Das herkömmliche Programmiermodell für Multimedia-Erweiterungen ist die explizite Vektorprogrammierung, wobei entweder (Inline-)Assembler- oder grundlegenden Funktionen verwendet werden, die in einer Programmiersprache der höheren Ebene eingebunden sind. Die explizite Vektorprogrammierung ist zeitaufwendig und fehleranfällig. Eine vielversprechende Alternative ist die Nutzung der Vektorisierungstechnologie, um SIMD-Codes automatisch aus Programmen zu erzeugen, die in Standard-Hochsprachen geschrieben wurden.
  • Zwar hat man sich mit der Vektorisierung bereits vor Jahrzehnten für herkömmliche Vektorprozessoren eingehend beschäftigt, jedoch hat die Vektorisierung für SIMD-Architekturen aufgrund von mehreren grundlegenden Unterschieden zwischen den beiden Architekturen neue Fragen aufgeworfen. Um zwischen den beiden Arten der Vektorisierung zu unterscheiden, wird Letztere als SIMD-Vektorisierung oder SIMDisierung bezeichnet. Einer dieser grundlegenden Unterschiede rührt von der Speichereinheit her. Die Speichereinheit eines typischen SIMD-Prozessors hat mehr Ähnlichkeit mit der eines großen Skalarprozessors als mit der eines herkömmlichen Vektorprozessors. Bei dem VMX-Befehlssatz, den man beispielsweise auf bestimmten PowerPC-Mikroprozessoren (die von der International Business Machines Corporation mit Sitz in Armonk, New York hergestellt werden) vorfindet, lädt ein Ladebefehl einen zusammenhängenden 16-Byte-Speicherbereich aus dem an 16 Byte ausgerichteten Speicher, wobei die letzten 4 Bits der Speicheradresse in dem Befehl ignoriert werden. Dasselbe gilt für Speicherbefehle.
  • In jüngster Zeit ist das Interesse an Compiler-Techniken zur automatischen Entnahme von SIMD-Parallelität aus Programmen sprunghaft angestiegen. Dieser starke Anstieg wurde durch die zunehmende Verbreitung von SIMD-Architekturen in Multimedia-Prozessoren und die hochleistungsfähige Datenverarbeitung befördert. Diese Prozessoren verfügen über mehrere Funktionseinheiten wie z. B. Gleitkomma-Einheiten, Festkomma-Einheiten, Ganzzahleinheiten usw., die mehr als einen Befehl in demselben Maschinenzyklus ausführen können, um die Leistungsfähigkeit von Einprozessor-Systemen zu erhöhen. Die Funktionseinheiten in diesen Prozessoren arbeiten üblicherweise im Pipeline-Verfahren.
  • Bei der Durchführung von auf einem Compiler beruhenden Schleifentransformationen zur Entnahme von SIMD-Parallelität ist unbedingt die Sicherheit der Array-Referenz zu gewährleisten. Das heißt, dass der Compiler während des Übersetzens des Quellcodes zur Ausführung durch eine SIMD-Architektur verschiedene Optimierungen einschließlich des Feststellens von Teilen von Code, die zur Ausführung durch die SIMD-Architektur parallelisiert werden können, vornehmen kann. Diese Parallelisierung beinhaltet üblicherweise die Vektorisierung oder SIMD-Vektorisierung oder SIMDisierung des Teils des Codes. Eine solche Optimierung schließt die Umwandlung von Verzweigungen im Code in mit Prädikaten versehene Operationen ein, um die negativen Auswirkungen bei Verzweigungsvorhersagefehlern zu vermeiden, mit denen im Pipeline-Verfahren arbeitende Funktionseinheiten konfrontiert werden. Diese Optimierung beinhaltet die Umwandlung von bedingten Verzweigungen im Quellcode in mit Prädikaten versehenen Code mit Prädikatenoperationen, wobei Vergleichsbefehle verwendet werden, um Boolesche Prädikate, die den Verzweigungsbedingungen entsprechen, festzulegen. Die Prädikate, die nun über die Befehle wachen, führen folglich entsprechend dem Wert des Prädikats den Befehl entweder aus oder machen ihn ungültig, ein Prozess, der üblicherweise als ”If-Conversion” (Vektorisierung bedingter Anweisungen) bezeichnet wird.
  • Kurz gesagt, mit Prädikaten versehener Code, der mittels herkömmlicher If-Conversion erzeugt wurde, erzeugt einen Straight-Line-Code (Code ohne Verzweigung, Iteration, Rekursion, Datenstrukturen), indem er Befehle von zwei sich gegenseitig ausschließenden Ausführungspfaden ausführt, wobei Befehle unterdrückt werden, die einem der beiden sich gegenseitig ausschließenden Pfade entsprechen. Es ist durchaus üblich, dass einer dieser sich gegenseitig ausschließenden Pfade eine Vielzahl von unerwünschten fehlerhaften Wirkungen bei der Ausführung und insbesondere unzulässige Speicherverweise erzeugt, wenn dieser Pfad nicht dem gewählten Pfad entspricht. Folglich könnte eine ”If-Conversion” fehlerhafte Ausführungen zur Folge haben, gäbe es da nicht die Ungültigmachung von nicht ausgewählten, mit Prädikaten versehenen Befehlen gemäß der ”If-Conversion” und insbesondere Speicherverweis-Befehle in dem einer If-Conversion unterzogenen Code.
  • Gschwind u. a. führen in "Synergistic Processing in Cell's Multicore Architecture", IEEE Micro, März 2006, das Konzept einer datenparallelen If-Conversion ein, das zur Kompilierung für datenparallele SIMD-Architekturen in immer größeren Umfang übernommen wird. Im Gegensatz zur herkömmlichen skalaren If-Conversion zielt die datenparallele If-Conversion üblicherweise auf die Erzeugung von Code mit datenparalleler Auswahl ab, die von vielen SIMD-Architekturen unterstützt wird, wie in der ebenfalls anhängigen und an Gschwind u. a. gemeinsam übertragenen US-Patentschrift mit dem Titel ”Method and Apparatus for Generating Data Parallel Select Operations in a Pervasively Data Parallel System”, Veröffentlichungsnummer US20080034357A1 , eingereicht am 4. August 2006, beschrieben ist, da datenparallele SIMD-Architekturen normalerweise keine mit Prädikaten versehene Ausführung bieten.
  • Die herkömmliche If-Conversion wacht also über jeden Befehl mit einem Prädikat, das die Ausführung oder Nichtausführung eines jeden Befehls angibt, der dem einen oder anderen von sich gegenseitig ausschließenden Pfaden entspricht. Die datenparallele If-Conversion mit datenparalleler Auswahl, die in der veröffentlichten Patentanmeldung von Gschwind u. a. beschrieben ist, führt Befehle von beiden Pfaden ohne ein Prädikat aus und verwendet datenparallele Auswahlbefehle, um ein Ergebnis auszuwählen, das einem unbedingt ausgeführten Pfad in dem kompilierten Code genau entspricht, wenn es einem in dem ursprünglichen Quellcode genommenen Pfad entspricht. Während die datenparallele Auswahl somit zur Durchführung einer Ergebnisauswahl auf der Grundlage von Informationen über den genommenen Pfad verwendet werden kann, ist die datenparallele If-Conversion mit datenparalleler Auswahl nicht für eine Ungültigmachung von Befehlen ausgelegt. Dies ist deshalb so, weil es bei einem Vektorbefehl vorkommen kann, dass ein Teil seines Ergebnisvektors ausgewählt wird, während ein anderer Teil seines Ergebnisvektors nicht ausgewählt wird, was die herkömmliche Befehlsprädikation unpraktisch macht.
  • Die Unterschiede zwischen der herkömmlichen If-Conversion und der datenparallelen If-Conversion, die datenparallele Auswahloperationen verwendet, lässt sich gegebenenfalls mit Bezug auf den folgenden in der QPX-Assembler-Sprache angegebenen Beispiel-Code besser verstehen:
    a[i] = b[i] /= 0 ? 1/b[i] : DEFAULT;
  • Die herkömmliche If-Conversion würde diesen Code in der folgenden Form ausführen:
  • Figure 00050001
  • Figure 00060001
  • Wie zu sehen ist, werden das Ergebnis und alle damit verbundenen Nebeneffekte, wie zum Beispiel Ausnahmebedingungen, unterdrückt, wenn die Prädikatsbedingung angibt, dass die Befehle nicht ausgeführt werden sollen. Der FRE-Befehl erzeugt entweder ein einziges Ergebnis, wobei das Ergebnis in diesem Fall geschrieben und gegebenenfalls eine Ausnahmebedingung aktiviert wird, oder der FRE-Befehl schreibt das einzige Ergebnis nicht, wobei das Ergebnis in diesem Fall nicht geschrieben und keine Ausnahmebedingung aktiviert wird.
  • Betrachten wir nun den von der SIMD-Vektorisierung und der datenparallelen If-Conversion erzeugten Code durch Nutzung der datenparallelen Auswahl, beispielsweise an einem beispielhaften 4-Element-Vektor:
  • Figure 00060002
  • Gemäß diesem Beispiel ist der QVFRE-Befehl nicht mit Prädikaten versehen und schreibt immer ein Ergebnis. Wie vorstehend erwähnt wurde, schreibt der FRE-Befehl entweder sein Ergebnis, da er ein einziges Ergebnis erzeugt, wobei das Ergebnis in diesem Fall geschrieben und gegebenenfalls eine Ausnahmebedingung aktiviert wird, oder der FRE-Befehl schreibt das einzige Ergebnis nicht, wobei das Ergebnis in diesem Fall nicht geschrieben und keine Ausnahmebedingung aktiviert wird. Im Gegensatz zum FRE-Befehl kann der QVFRE-Befehl 0, 1, 2, 3 oder 4 Ergebnisse erzeugen, die in den Vektor a[i:i+3] zurückgeschrieben werden sollen. Über die Kenntnis, ob ein Ergebnis verwendet werden wird, verfügt der QVFRE-Befehl jedoch nicht und folglich kann er nicht den richtigen Satz von Ausnahmebedingungen erzeugen.
  • Bei der Verwendung der datenparallelen If-Conversion durch Compiler, um SIMDizierten Code zur Ausführung in einer SIMD-Prozessorarchitektur zu erzeugen, werden Ausnahmebedingungen folglich unterdrückt, um unechte Fehler zu vermeiden. Es ist jedoch wichtig, das Verhalten der Anwendung, selbst die Erzeugung von Ausnahmebedingungen, aufrechterhalten zu können.
  • BESCHREIBUNG DER ERFINDUNG
  • In einer der Veranschaulichung dienenden Ausführungsform wird ein Verfahren in einem Datenverarbeitungssystem bereitgestellt, um bei der Ausführung von vektorisiertem Code angegebene Befehle zum Rückverfolgen und Angeben von Ausnahmebedingungen einzufügen. Das Verfahren umfasst den Empfang eines Teils des ersten Codes in einem Compiler, der auf einem Prozessor des Datenverarbeitungssystems Operationen ausführt. Das Verfahren umfasst des Weiteren das Auswerten des Teils des ersten Codes durch den Compiler, welcher auf dem Prozessor Operationen ausführt, um mindestens einen nichtspekulativen Befehl, der eine festgelegte nichtspekulative Operation in dem ersten Code durchführt, zu ermitteln, welcher für den Ersatz durch einen Ersetzungsoperation-und-Angeben-Befehl in Frage kommt, der die festgelegte nichtspekulative Operation durchführt und des Weiteren eine Angabe-Operation durchführt, um dem Ersetzungsoperation-und-Angeben-Befehl jedwede Ausnahmebedingungen anzugeben, die speziellen Ausnahmebedingungswerten entsprechen, welche in Eingängen eines Vektorregisters vorhanden sind. Das Verfahren umfasst auch das Ersetzen, durch den Compiler, der auf dem Prozessor Operationen ausführt, des mindestens einen nichtspekulativen Befehls, welcher eine festgelegte nichtspekulative Operation in dem ersten Code durchführt, durch den Ersetzungsoperation-und-Angeben-Befehl. Das Verfahren umfasst darüber hinaus das Erzeugen, durch den Compiler, der auf dem Prozessor Operationen ausführt, von zweitem Code auf der Grundlage des Ersetzens des mindestens einen nichtspekulativen Befehls. Das Datenverarbeitungssystem ist so konfiguriert, dass es als Reaktion darauf, dass ein spekulativer Befehl eine Ausnahmebedingung erzeugt, ohne die Ausnahmebedingungsbehandlung zu starten, die speziellen Ausnahmebedingungswerte in Vektor-Ausgaberegistern speichert.
  • In anderen der Veranschaulichung dienenden Ausführungsformen wird ein Rechnerprogrammprodukt bereitgestellt, das einen von einem Rechner nutzbaren oder lesbaren Datenträger umfasst, welcher über ein rechnerlesbares Programm verfügt. Das rechnerlesbare Programm bewirkt, wenn es auf einer Rechnereinheit ausgeführt wird, dass die Rechnereinheit verschiedene einzelne Operationen sowie Kombinationen der Operationen durchführt, die vorstehend mit Bezug auf die das Verfahren veranschaulichende Ausführungsform aufgezeigt wurden.
  • In noch einer weiteren der Veranschaulichung dienenden Ausführungsform wird ein System/eine Vorrichtung bereitgestellt. Das System/die Vorrichtung kann einen oder mehrere Prozessoren und eine Vektorregister-Datei, welche an den einen oder die mehreren Prozessoren gekoppelt ist, umfassen. Der eine oder die mehreren Prozessoren sind so konfiguriert, dass sie den einen oder die mehreren Prozessoren veranlassen, verschiedene einzelne Operationen sowie Kombinationen der Operationen durchzuführen, die vorstehend mit Bezug auf die das Verfahren veranschaulichende Ausführungsform aufgezeigt wurden.
  • Diese und andere Merkmale und Vorteile der vorliegenden Erfindung werden in der folgenden ausführlichen Beschreibung der beispielhaften Ausführungsformen der vorliegenden Erfindung dargelegt oder sind für den Fachmann daraus ersichtlich.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung sowie eine bevorzugte Verwendungsart und weitere Aufgaben und Vorteile der Erfindung lassen sich am besten durch Bezugnahme auf die folgende ausführliche Beschreibung von der Veranschaulichung dienenden Ausführungsformen, wenn diese in Verbindung mit den beigefügten Zeichnungen gelesen werden, verstehen, bei denen:
  • 1 ein beispielhaftes Blockschaltbild eines heterogenen Mehrprozessorsystems auf einem Chip ist, in dem beispielhafte Erscheinungsformen der der Veranschaulichung dienenden Ausführungsformen realisiert werden können;
  • 2 ein Blockschaltbild einer bekannten Prozessorarchitektur ist, die zum Zweck der Erörterung der Verbesserungen gezeigt wird, welche von einigen der Veranschaulichung dienenden Ausführungsformen erzielt werden;
  • 3 ein beispielhaftes Blockschaltbild einer geänderten Form der in 2 gezeigten Prozessorarchitektur ist, in der beispielhafte Erscheinungsformen der der Veranschaulichung dienenden Ausführungsformen realisiert werden können;
  • die 4A und 4B beispielhafte Schaubilder sind, welche eine Ausführung einer datenparallelen Auswahloperation darstellen, die an einem oder mehreren Vektorelementen Operationen durchführt, wobei ein Wert einer Ausnahmebedingung in dem Vektorelement gespeichert und gemäß einer der Veranschaulichung dienenden Ausführungsform weitergegeben wird;
  • 5 ein beispielhaftes Schaubild ist, das einen Speichern-und-Angeben-Befehl (store-und-indicate instruction) gemäß einer der Veranschaulichung dienenden Ausführungsform zeigt;
  • 6 ein beispielhaftes Schaubild eines Compiler gemäß einer der Veranschaulichung dienenden Ausführungsform ist;
  • 7A ein beispielhaftes Schaubild ist, das einen Satz von Bedingungen zeigt, für die ein Test auf einen Überlauf an einem Divisorregister durchgeführt werden kann, um verloren gegangene Ausnahmebedingungen gemäß einer der Veranschaulichung dienenden Ausführungsform festzustellen;
  • 7B ein beispielhaftes Schaubild ist, das einen Satz von Bedingungen zeigt, für die ein Test auf einen Überlauf an einem Operandenregister durchgeführt werden kann, um eine Überlauf-zu-NaN-Änderungsbedingung gemäß einer der Veranschaulichung dienenden Ausführungsform festzustellen;
  • 8 ein Ablaufplan ist, der einen Überblick über eine beispielhafte Operation zum Setzen eines Werts eines Vektorelements gemäß einer der Veranschaulichung dienenden Ausführungsform gibt;
  • 9 ein Ablaufplan ist, der einen Überblick über eine beispielhafte Operation zum Erzeugen einer Ausnahmebedingung gemäß einer der Veranschaulichung dienenden Ausführungsform gibt;
  • 10 ein Ablaufplan ist, der einen Überblick über eine beispielhafte Operation zum Einfügen von Angeben-Befehlen in einen SIMD-vektorisierten Code durch einen Compiler gemäß einer der Veranschaulichung dienenden Ausführungsform gibt;
  • die 11A bis 11C beispielhafte Schaubilder sind, die den Unterschied zwischen prüfbaren und unprüfbaren Teilen des SIMD-Codes gemäß den Kriterien von einer der Veranschaulichung dienenden Ausführungsform aufzeigen;
  • die 12A bis 12C beispielhafte Schaubilder sind, die Einfügestellen zum Einfügen von Angeben-Befehlen gemäß einer der Veranschaulichung dienenden Ausführungsform zeigen; und
  • die 13A bis 13C beispielhafte Schaubilder sind, die Einfügestellen zum Einfügen von Angeben-Befehlen gemäß einer anderen der Veranschaulichung dienenden Ausführungsform zeigen.
  • BESTE BETRIEBSARTEN FÜR DIE DURCHFÜHRUNG DER ERFINDUNG
  • Die der Veranschaulichung dienenden Ausführungsformen sehen Mechanismen für die datenpfadinterne Rückverfolgung von Gleitkomma-Ausnahmebedingungen sowie die Angabe von speicherbasierten Ausnahmebedingungen vor. Mit den Mechanismen der der Veranschaulichung dienenden Ausführungsformen werden spezielle Werte in Vektorelementen gespeichert, wenn Ausnahmebedingungen angetroffen werden, wie beispielsweise während der spekulativen Ausführung eines Befehls oder dergleichen. Die spekulative Ausführung von Befehlen als Teil von Ausführungs-Threads ist ein Optimierungsverfahren, mittels dem die frühe Ausführung eines Threads, dessen Ergebnisse zu einem späteren Zeitpunkt gegebenenfalls benötigt werden, vorgenommen wird, um eine höhere Leistungsfähigkeit zu erzielen, falls die Ergebnisse dieses Threads während der Ausführung des Codes benötigt werden sollten, d. h., falls der Thread einen Übergang aus einem spekulativen Zustand in einen nichtspekulativen Zustand, in dem die Ergebnisse verwendet werden, erfahren sollte. Die speziellen Werte der der Veranschaulichung dienenden Ausführungsformen geben die Ausnahmebedingung an, rufen aber nicht die entsprechende Behandlungsroutine für Ausnahmebedingungen auf. Diese speziellen Werte werden durch die Ausführung des Rechnerprogramms und durch die Prozessorarchitektur mit dem Vektor weitergegeben, bis der Vektor im Speicher belassen werden soll, beispielsweise über einen nichtspekulativen Befehl, z. B. eine Speicheroperation, oder eine Verschiebeoperation, um Daten in dem Vektor aus dem Vektorregister in ein anderes Vektorregister zu verschieben. Wenn solch ein nichtspekulativer Befehl ausgeführt wird, werden die eigentliche Ausnahmebedingung erzeugt und eine geeignete Behandlung der Ausnahmebedingung durchgeführt. Auf diese Weise werden die Feststellung der Ausnahmebedingung und die Behandlung der Ausnahmebedingung voneinander entkoppelt, so dass eine Ausnahmebedingung an einem Punkt in der Ausführungs-Pipeline festgestellt werden kann und dies eine zu behandelnde Ausnahmebedingung nur auslöst, wenn sich die Ausnahmebedingung tatsächlich auf die Ausführung des Rechnerprogramms auswirkt, wie beispielsweise in dem Fall, in dem die Ausführung eines spekulativen Befehls oder einer Gruppe von spekulativen Befehlen nichtspekulativ wird.
  • Die Mechanismen der der Veranschaulichung dienenden Ausführungsformen werden vorzugsweise in Verbindung mit einem Compiler realisiert, der Quellcode in Code zur Ausführung auf einem oder mehreren Prozessoren umwandelt, die vektorisierte Befehle, z. B. Single-Instruction-Multiple-Data-(SIMD-)Befehle, ausführen können. Mit den Mechanismen von den der Veranschaulichung dienenden Ausführungsformen werden bei der Umwandlung des Quellcodes, z. B. eines skalaren Codes, in SIMD-vektorisierten Code Operation-und-Angeben-Befehle, wie zum Beispiel Verschieben-und-Angeben-Befehle, Speichern-und-Angeben-Befehle oder dergleichen (die unter dem Sammelbegriff ”Angeben”-Befehle zusammengefasst sind), an geeigneten Stellen in den Code eingefügt, um die Verwendung der speziellen Werte, die das Eintreten einer Ausnahmebedingung kennzeichnen, vorteilhaft zu nutzen. Der Compiler legt den geeigneten Einfügepunkt in Übereinstimmung mit einer oder mehreren methodischen Vorgehensweisen auf der Grundlage fest, ob ein interessierender Wert prüfbar ist, was nachstehend definiert wird. Bei einem methodischen Ansatz können Teile des SIMD-Codes, die nicht geprüft werden können, durch die Verwendung von Maskierungsmechanismen in prüfbaren SIMD-Code umgewandelt werden. Bei einem methodischen Ansatz können die Angeben-Befehle nach jeder Berechnung eingefügt werden, die einen interessierenden Wert, z. B. eine Matrix aus interessierenden Werten, einschließt. Bei einem anderen methodischen Ansatz wird eine sehr kleine Anzahl von Prüfbefehlen an geeigneten Stellen eingefügt, um jeden lebendigen Ausgabewert zu prüfen, wobei ein Wert lebendig ist, wenn er sich letztendlich auf das Speicherabbild oder den Entscheidungsprozess des Codes auswirkt (oder eine nachfolgende Berechnung verwendet das Ergebnis, um letztendlich das Speicherabbild oder den Entscheidungsprozess des Codes zu beeinflussen).
  • Ein Beispiel eines Datenverarbeitungssystems, in dem SIMD-fähige Prozessoren bereitgestellt werden, ist die von der International Business Machines Corporation mit Sitz in Armonk, New York, angebotene Cell Broadband Engine (CBE). Zwar geht die folgende Beschreibung davon aus, dass eine CBE-Architektur zur Durchführung der Mechanismen der der Veranschaulichung dienenden Ausführungsformen verwendet wird, es sollte jedoch als vorteilhaft erkannt werden, dass die vorliegende Erfindung nicht auf eine Verwendung mit der CBE-Architektur beschränkt ist. Die Mechanismen der der Veranschaulichung dienenden Ausführungsformen können vielmehr mit jeder beliebigen Architektur verwendet werden, bei der eine Analyse der Sicherheit der Array-Referenz mit von einem Compiler durchgeführten Umwandlungen zur Anwendung kommen kann. Die CBE-Architektur wird nachstehend lediglich als ein Beispiel für eine Art eines Datenverarbeitungssystems bereitgestellt, in dem die Mechanismen der der Veranschaulichung dienenden Ausführungsformen verwendet werden können, und sie ist in Bezug auf die Mechanismen der der Veranschaulichung dienenden Ausführungsformen nicht als Einschränkung zu verstehen.
  • Der Fachmann wird als vorteilhaft erkennen, dass die vorliegende Erfindung als ein System, ein Verfahren oder ein Rechnerprogrammprodukt realisiert werden kann. Folglich können Erscheinungsformen der vorliegenden Erfindung die Form einer ganz in Hardware realisierten Ausführung, einer ganz in Software realisierten Ausführung (darunter Firmware, residente Software, Microcode usw.) oder einer Ausführung annehmen, die Software- und Hardware-Erscheinungsformen kombiniert, die hier alle allgemein als eine ”Schaltung”, ein ”Modul” oder ein ”System” bezeichnet werden können. Überdies können Erscheinungsformen der vorliegenden Erfindung die Form eines Rechnerprogrammprodukts annehmen, das sich auf einem oder mehreren beliebigen rechnerlesbaren Datenträgern befindet, auf dem bzw. denen sich von einem Rechner nutzbarer Programmcode befindet.
  • Jede beliebige Kombination aus einem oder mehreren rechnerlesbaren Datenträgern kann verwendet werden. Bei dem rechnerlesbaren Datenträger kann es sich um ein rechnerlesbaren Signaldatenträger oder ein rechnerlesbares Speichermedium handeln. Ein rechnerlesbares Speichermedium kann zum Beispiel, ohne auf diese beschränkt zu sein, ein(e) elektronische(s), magnetische(s), optische(s), elektromagnetische(s), Infrarot- oder Halbleitersystem, -vorrichtung, -einheit oder eine beliebige geeignete Kombination des Vorstehenden sein. Zu konkreteren Beispielen (wobei die Liste keinen Anspruch auf Vollständigkeit erhebt) für den rechnerlesbaren Datenträger würden folgende gehören: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine Diskette eines tragbaren Rechners, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer Compact-Disk-Nur-Lese-Speicher (CDROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder jede beliebige geeignete Kombination des Vorstehenden. Im Kontext dieses Schriftstücks kann ein rechnerlesbares Speichermedium jedes physisch greifbare Medium sein, das ein Programm zur Verwendung durch oder zur Verwendung in Verbindung mit einem Befehlsausführungssystem, einer Befehlsausführungsvorrichtung oder -einheit enthalten oder speichern kann.
  • Ein rechnerlesbarer Signaldatenträger kann ein übertragenes Datensignal mit einem darin enthaltenen rechnerlesbaren Programmcode, beispielsweise in einem Basisband oder als Teil einer Trägerwelle, enthalten. Solch ein übertragenes Signal kann eine beliebige einer Vielfalt von Formen annehmen, darunter elektromagnetische, optische Formen oder jede beliebige geeignete Kombination dieser Formen, ohne auf diese beschränkt zu sein. Bei einem rechnerlesbaren Signaldatenträger kann es sich um jeden beliebigen rechnerlesbaren Datenträger handeln, der kein rechnerlesbares Speichermedium ist und der ein Programm zur Verwendung durch oder zur Verwendung in Verbindung mit einem Befehlsausführungssystem, einer Befehlsausführungsvorrichtung oder -einheit übertragen, weiterleiten oder transportieren kann.
  • Auf einem rechnerlesbaren Datenträger enthaltener Rechnercode kann mittels eines beliebigen geeigneten Mediums übertragen werden, z. B. drahtlos, über Leitungen, Lichtwellenleiterkabel, Hochfrequenz (HF) oder jede beliebige geeignete Kombination dieser Medien, ohne auf diese beschränkt zu sein.
  • Rechnerprogrammcode zur Durchführung von Operationen für Erscheinungsformen der vorliegenden Erfindung kann in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sein, darunter eine objektorientierte Programmiersprache wie beispielsweise JavaTM, SmalltalkTM, C++ oder dergleichen, sowie herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache ”C” oder ähnliche Programmiersprachen. Die Ausführung des Programmcodes kann komplett auf dem Rechner des Benutzers, teilweise auf dem Rechner des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Rechner des Benutzers und teilweise auf einem fernen Rechner oder komplett auf dem fernen Rechner oder Server erfolgen. Im letzteren Szenario kann der ferne Rechner mit dem Rechner des Benutzers über jede beliebige Art eines Netzwerks einschließlich eines lokalen Netzwerks (LAN) oder eines Weitverkehrsnetzes (WAN) verbunden werden oder die Verbindung kann über einen externen Rechner (zum Beispiel über das Internet mittels eines Internet-Diensteanbieters) vorgenommen werden.
  • Erscheinungsformen der vorliegenden Erfindung werden nachstehend mit Bezug auf Darstellungen in Ablaufplänen und/oder Blockschaltbildern/Schaubildern von Verfahren, Vorrichtungen (Systemen) und Rechnerprogrammprodukten gemäß den der Veranschaulichung dienenden Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Darstellungen in den Ablaufplänen und/oder den Blockschaltbildern/Schaubildern sowie Kombinationen aus Blöcken in den Darstellungen der Ablaufpläne und/oder den Blockschaltbildern/Schaubildern mittels Rechnerprogrammbefehlen realisiert werden können. Diese Rechnerprogrammbefehle können einem Prozessor eines Mehrzweckrechners, eines Rechners für spezielle Anwendungen oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die Befehle, die über den Prozessor des Rechners oder einer anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, ein Mittel zur Ausführung der Funktionen/Vorgänge erzeugen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaltbilds/Schaubilds angegeben sind.
  • Diese Rechnerprogrammbefehle können auch auf einem rechnerlesbaren Datenträger gespeichert werden, der einen Rechner, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten anweisen kann, auf eine bestimmte Art und Weise zu funktionieren, so dass die auf dem rechnerlesbaren Datenträger gespeicherten Befehle einen Herstellungsgegenstand erzeugen, der Befehle enthält, die die Funktion/den Vorgang ausführen, welche bzw. welcher in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaltbilds/Schaubilds angegeben ist/sind.
  • Die Rechnerprogrammbefehle können auch auf einen Rechner oder eine andere programmierbare Datenverarbeitungsvorrichtung oder auf andere Einheiten geladen werden, um die Ausführung einer Reihe von Betriebsschritten auf dem Rechner, einer anderen programmierbaren Vorrichtung oder auf anderen Einheiten zu bewirken, um einen von einem Rechner ausgeführten Prozess zu erzeugen, so dass die Befehle, die auf dem Rechner oder einer anderen programmierbaren Vorrichtung ausgeführt werden, Prozesse zur Ausführung der Funktionen/Vorgänge ermöglichen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaltbilds/Schaubilds angegeben sind.
  • Die Ablaufpläne und die Blockschaltbilder/Schaubilder in den Figuren zeigen die Architektur, die Funktionalität und die Betriebsweise von möglichen Ausführungsarten von Systemen, Verfahren und Rechnerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block in dem Ablaufplan oder den Blockschaltbildern/Schaubildern ein Modul, Segment oder einen Code-Teil darstellen, das bzw. der einen oder mehrere ausführbare Befehle zur Ausführung der angegebenen logischen Funktion(en) umfasst. Es sei auch angemerkt, dass die in dem Block angegebenen Funktionen in manchen alternativen Ausführungsarten nicht in der in den Figuren angegebenen Reihenfolge auftreten können. In Abhängigkeit von der mit ihnen verbundenen Funktionalität können beispielsweise zwei Blöcke, die als aufeinanderfolgende Blöcke dargestellt sind, tatsächlich weitgehend gleichzeitig ausgeführt werden oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden. Man wird auch feststellen, dass jeder Block der Blockschaltbilder/Schaubilder und/oder der Darstellungen in den Ablaufplänen sowie Kombinationen aus Blöcken in den Blockschaltbildern/Schaubildern und/oder den Darstellungen der Ablaufpläne von auf Hardware beruhenden Systemen für spezielle Anwendungen, welche die angegebenen Funktionen oder Vorgänge durchführen, oder von Kombinationen aus Hardware für spezielle Anwendungen und Rechnerbefehlen ausgeführt werden können.
  • 1 ist ein beispielhaftes Blockschaltbild eines Datenverarbeitungssystems, in dem Erscheinungsformen der vorliegenden Erfindung realisiert werden können. Das in 1 gezeigte beispielhafte Datenverarbeitungssystem ist ein Beispiel des Datenverarbeitungssystems mit der Bezeichnung Cell Broadband Engine (CBE). Während die CBE in der Beschreibung der bevorzugten Ausführungsformen der vorliegenden Erfindung verwendet wird, ist die vorliegende Erfindung nicht auf dieses System beschränkt, wie der Fachmann beim Lesen der nachstehenden Beschreibung ohne Weiteres erkennen wird.
  • Wie in 1 gezeigt ist, enthält die CBE 100 ein Leistungsprozessorelement (power processor element (PPE)) 110, das über einen Prozessor (PPU) 116 und dessen L1- und L2-Cachespeicher 112 und 114 verfügt, sowie mehrere synergistische Prozessorelemente (synergistic processor elements (SPEs)) 120 bis 134, von denen jedes über seine eigene synergistische Prozessoreinheit (synergistic processor unit (SPU)) 140 bis 154 verfügt, die Speicherflusssteuerung 155 bis 162, den lokalen Speicher (local store (LS)) 163 bis 170 und die Busschnittstelleneinheit (bus interface unit (BIU)) 180 bis 194, bei der es sich beispielsweise um eine Kombination aus Direktspeicherzugriffs-(DMA-)Einheit, Speicherverwaltungseinheit (memory management unit (MMU)) und Busschittstelleneinheit handeln kann. Ein interner Element-Verbindungsbus (element interconnect bus (EIB)) hoher Bandbreite 196, eine Busschnittstellensteuereinheit (bus interface controller, BIC)) 197 und eine Speicherschnittstellen-Steuereinheit (memory interface controller (MIC)) 198 werden ebenfalls bereitgestellt.
  • Der lokale Speicher (LS) 163 bis 170 ist ein nicht zusammenhängender adressierbarer Teil einer großen Speichertabelle (memory map), der physisch in Form von kleinen mit den SPUs 140 bis 154 verbundenen Speichern bereitgestellt werden kann. Die lokalen Speicher 163 bis 170 können verschiedenen Adressräumen zugeordnet werden. Diese Adressbereiche sind in einer Konfiguration ohne Zuordnung von Aliasnamen fortlaufend. Ein lokaler Speicher 163 bis 170 wird seiner entsprechenden SPU 140 bis 154 und seinem entsprechenden SPE 120 bis 134 über seinen Adressenplatz, wie beispielsweise über das SPU-Identifikationsregister, das nachstehend ausführlicher beschrieben wird, zugeordnet. Jede Ressource in dem System hat Schreib-/Lesezugriff auf den lokalen Speicher 163 bis 170, solange der lokale Speicher nicht in eine sichere Betriebsart versetzt wird, wobei in diesem Fall nur die zugehörige SPU auf den lokalen Speicher 163 bis 170 oder einen festgelegten gesicherten Teil des lokalen Speichers 163 bis 170 zugreifen kann.
  • Bei der CBE 100 kann es sich um ein auf einem Chip befindliches System handeln, so dass jedes der in 1 gezeigten Elemente auf einem einzelnen Mikroprozessor-Chip bereitgestellt werden kann. Ferner stellt die CBE 100 eine heterogene Verarbeitungsumgebung dar, in der jede der SPUs verschiedene Befehle von jeder der anderen SPUs in dem System empfangen kann. Darüber hinaus unterscheidet sich der Befehlssatz für die SPUs von dem Befehlssatz der PPU, beispielsweise kann die PPU auf einem Rechner mit verringerten Befehlssatz (Reduced Instruction Set Computer (RISC)) beruhende Befehle ausführen, während die SPU Vektorbefehle ausführt. In einer anderen Erscheinungsform der CBE-Architektur unterstützt die PPU die datenparallelen SIMD-Erweiterungen der Power Instruction Set Architecture (ISA).
  • Die SPEs 120 bis 134 sind miteinander und mit dem L2-Cachespeicher 114 über den EIB 196 verbunden. Überdies sind die SPEs 120 bis 134 mit der MIC 198 und der BIC 197 über den EIB 196 verbunden. Die MIC 198 stellt eine Übertragungsschnittstelle zum gemeinsam genutzten Speicher 199 bereit. Die BIC 197 stellt eine Übertragungsschnittstelle zwischen der CBE 100 und anderen externen Bussen und Einheiten bereit.
  • Das PPE 110 ist ein PPE 110 mit zwei Threads. Durch die Kombination dieses PPE 110 mit zwei Threads und den acht SPEs 120 bis 134 kann die CBE 100 10 gleichzeitige Threads und über 128 ausstehende Speicheranforderungen verarbeiten. Das PPE 110 übernimmt die Funktion einer Steuereinheit für die anderen acht SPEs 120 bis 134, die den Großteil des Datenverarbeitungsaufwands abwickeln. Das PPE 110 kann zur Ausführung von herkömmlichen Betriebssystemen verwendet werden, während die SPEs 120 bis 134 beispielsweise vektorisierten Gleitkomma-Code ausführen.
  • Die SPEs 120 bis 134 umfassen eine synergistische Verarbeitungseinheit (SPU) 140 bis 154, die Speicherfluss-Steuereinheiten 155 bis 162, einen lokalen Speicher 163 bis 170 und eine Schnittstelleneinheit 180 bis 194. Der lokale Speicher 163 bis 170 umfasst in einer beispielhaften Ausführungsform einen 256-KByte-Befehls- und Datenspeicher, der für das PPE 110 sichtbar ist und direkt von Software adressiert werden kann.
  • Das PPE 110 kann kleine Programme oder Threads in die SPEs 120 bis 134 laden, wobei die SPEs zur Abwicklung eines jeden Schritts in einer komplexen Operation miteinander verkettet werden. Ein Aufsatzgerät (Set-Top-Box), das die CBE 100 enthält, kann Programme zum Lesen einer DVD, zur Decodierung von Video- und Audiosignalen sowie zur Anzeige laden, und die Daten würden von SPE zu SPE weitergereicht werden, bis sie schließlich auf den Ausgabebildschirm gelangten. Bei 4 GHz erzielt jedes SPE 120 bis 134 eine theoretische Leistungsfähigkeit von 32 GFLOPS, wobei das PPE 110 ein ähnliches Leistungsniveau aufweist.
  • Die Speicherfluss-Steuereinheiten (MFCs) 155 bis 162 dienen als Schnittstelle für eine SPU zum restlichen System und zu anderen Elementen. Die MFCs 155 bis 162 stellen den Hauptmechanismus für die Datenübertragung, den Datenschutz und die Datensynchronisation zwischen dem Hauptspeicher und den lokalen Speichern 163 bis 170 bereit. Für jede SPU in einem Prozessor gibt es logischerweise eine MFC. Manche Ausführungsarten können Ressourcen einer einzigen MFC zwischen mehreren SPUs aufteilen. In solch einem Fall müssen alle für die MFC angegebenen Einrichtungen und Befehle der Software für jede SPU unabhängig erscheinen. Die Auswirkungen der gemeinsamen Nutzung einer MFC sind auf Einrichtungen und Befehle beschränkt, die von der jeweiligen Ausführung abhängen.
  • Bei dem Datenverarbeitungssystem 100 von 1 kann der Prozessor 106 über Einrichtungen zur Verarbeitung sowohl von ganzzahligen (skalaren) als auch Gleitkomma-(Vektor-)Befehlen sowie zur Ausführung von Operationen an beiden Datenarten verfügen. Gemäß den der Veranschaulichung dienenden Ausführungsformen kann der Prozessor 106 jedoch über Hardware-Einrichtungen verfügen, um SIMD-Befehle und SIMD-Daten als nur für Gleitkomma-Operationen ausgelegte SIMD-Befehle und -Daten zu verarbeiten. Die skalaren Einrichtungen werden für die Verarbeitung von ganzen Zahlen und in Verbindung mit der nur für Gleitkomma-Operationen ausgelegten SIMD-Architektur unter anderem für die Schleifensteuerung und die Speicherzugriffssteuerung verwendet.
  • 2 ist ein Blockschaltbild einer Prozessorarchitektur, die zum Zweck der Erörterung der Verbesserungen gezeigt wird, welche von den der Veranschaulichung dienenden Ausführungsformen erzielt werden. Die in 2 gezeigte bestimmte Prozessorarchitektur ist eine für die Mikroprozessoren vom Typ PowerPCTM 970 entwickelte Architektur, welche von der International Business Machines Corporation mit Sitz in Armonk, New York, angeboten werden und in dem Redbook von Gibbs u. a. mit dem Titel ”IBM eServer BladeCenter JS20 PowerPC 970 Programming Environment,” Januar 2005 (erhältlich unter www.redbooks.ibm.com/redpapers/pdfs/redp3890.pdf) beschrieben sind.
  • Wie in 2 gezeigt ist, beinhaltet die Prozessorarchitektur einen Befehls-Cachespeicher 202, eine Befehlsabrufeinheit 204, eine Befehls-Decodiereinheit 206 und einen Zuteilungspufferspeicher (dispatch buffer) 208. Befehle werden von der Befehlsabrufeinheit 204 aus dem Befehls-Cachespeicher 202 abgerufen und der Befehls-Decodiereinheit 206 bereitgestellt. Die Befehls-Decodiereinheit 206 decodiert den Befehl und stellt den decodierten Befehl dem Zuteilungspufferspeicher 208 bereit. Die Ausgabe der Decodiereinheit 206 wird sowohl den Registermatrizen 210 als auch der globalen Abarbeitungstabelle 212 bereitgestellt. Die Registermatrizen 210 nehmen Abbildungen auf eine(s) oder mehrere der Mehrzweckregister (general purpose registers GPRs)), Gleitkommaregister (floating point registers (FPRs)), Vektorregisterdateien (vector register files (VRF)) und dergleichen vor. Die Befehle werden dann in Abhängigkeit von dem Befehlstyp, der durch die von der Befehlsdecodiereinheit 206 und den Registermatrizen 210 durchgeführte Decodierung und Abbildung ermittelt wird, einer geeigneten der Absetz-Warteschlangen (issue queues) 220 bis 232 bereitgestellt. Die Absetz-Warteschlangen 220 bis 232 stellen verschiedenen der Ausführungseinheiten 240 bis 258 Eingaben bereit. Die Ausgaben der Ausführungseinheiten 240 bis 258 gehen an verschiedene der Registerdateien 260 bis 272. Daten zur Verwendung mit den Befehlen können über den Daten-Cachespeicher 280 beschafft werden.
  • Es sei insbesondere angemerkt, dass in der dargestellten Architektur zu sehen ist, dass es getrennte Absetz-Warteschlangen und Ausführungseinheiten für Gleitkomma-Befehle, Vektorbefehle und Festkomma- oder Ganzzahlbefehle in dem Prozessor gibt. Wie gezeigt ist, gibt es eine einzige Gleitkommaeinheit-(FPU-)Absetz-Warteschlange 224, die zwei Ausgabeanschlüsse zu zwei Gleitkomma-Ausführungseinheiten 244 bis 246 hat, welche wiederum Ausgabeanschlüsse zu einer Gleitkomma-Registerdatei 264 haben. Eine einzige Vektorpermutations-Absetz-Warteschlange (vector permute issue queue) 226 verfügt über einen einzigen Ausgabeanschluss zu einer Vektorpermutations-Ausführungseinheit 248, die wiederum einen Anschluss für den Zugriff auf eine Vektorregisterdatei (VRF) 266 hat. Die Absetz-Warteschlange 228 des Vektor-Rechenwerks (arithmetic logic unit (ALU)) hat einen Absetz-Anschluss zum Absetzen von Befehlen an die Vektor-ALU 250, die einen Anschluss für den Zugriff auf die Vektorregisterdatei 268 hat. Es dürfte klar sein, dass all diese Absetz-Warteschlangen, Ausführungseinheiten und Registerdateien Ressourcen, Fläche und Energie in Anspruch nehmen.
  • Bei der Bereitstellung von Mechanismen für eine nur für Gleitkomma-Operationen ausgelegte SIMD-Architektur werden bei manchen von den der Veranschaulichung dienenden Ausführungsformen diese Absetz-Einheiten 224 bis 228, die Ausführungseinheiten 244 bis 250 und die Registerdateien 264 bis 268 durch eine einzige Absetz-Warteschlange, Ausführungseinheit und Registerdatei ersetzt. 3 ist ein beispielhaftes Blockschaltbild, das die alternative Prozessorarchitektur gemäß einer bestimmten der Veranschaulichung dienenden Ausführungsform zeigt. Die in 3 gezeigte Prozessorarchitektur stellt eine abgeänderte Form der in 2 gezeigten Architektur des PowerPCTM 970 dar, und folglich werden Elemente, die gleich den Elementen von 2 sind, mit gleichen Bezugszahlen gezeigt. Es sollte sich verstehen, dass die abgeänderte Architektur lediglich ein Beispiel darstellt und dass an anderen Prozessorarchitekturen ähnliche Änderungen vorgenommen werden können, um die Anzahl der in diesen anderen Architekturen realisierten Absetz-Einheiten, Ausführungseinheiten und Registerdateien zu verringern. Die Mechanismen der der Veranschaulichung dienenden Ausführungsformen sind folglich nicht auf die Realisierung in einer abgeänderten Form der Architektur des PowerPCTM 970 beschränkt.
  • Wie in 3 gezeigt ist, ersetzt die in 3 gezeigte abgeänderte Architektur die Absetz-Einheiten 224 bis 228 durch eine einzige Absetz-Einheit 310 einer Vierfachverarbeitungs-Ausführungseinheit (quad-processing execution unit (QPU)). Ferner werden die Ausführungseinheiten 244 bis 250 durch die einzige Vierfachverarbeitungs-Ausführungseinheit (QPU) 320 ersetzt. Darüber hinaus werden die Registerdateien 264 bis 268 durch eine einzige Vierfachvektor-Registerdatei (quad-vector register file (QRF)) 330 ersetzt. Da die Vierfach-Verarbeitungseinheit (QPU) bis zu 4 Datenelemente gleichzeitig mit einem einzigen Befehl ausführen kann, verringert diese abgeänderte Architektur nicht nur die in Anspruch genommenen Ressourcen sowie die in Anspruch genommene Fläche und Energie, während sie gleichzeitig die Ausgestaltung des Prozessors vereinfacht, sondern sie erhöht auch dessen Leistungsfähigkeit.
  • Es sei angemerkt, dass die abgeänderte Prozessorarchitektur in 3 nach wie vor über die Festkommaeinheiten (fixed point units (FXUs)) verfügt, die skalare Ganzzahlen verarbeiten. Solche skalaren Ganzzahlen werden hauptsächlich für Steueroperationen wie zum Beispiel Schleifeniterationen und dergleichen verwendet. Alle anderen Befehle haben das Gleitkomma- oder Vektorformat. Genauer gesagt, im Gegensatz zu dem gemischten Gleitkomma- und Ganzzahl-Ausführungsrepertoire des VMX-Befehlssatzes führen die QPX-Befehle im Allgemeinen nur an Gleitkommadaten Operationen, insbesondere arithmetische Operationen, durch. Der einzige Speicher von Daten des ganzzahligen Typs ist der Umwandlung von Daten in ein ganzzahliges Format zugehörig, um solche ganzen Zahlen zu laden und zu speichern oder um ein Steuerwort in das und aus dem Gleitkammastatus- und Steuerregister (floating point status and control register (FPSCR)) zu schieben. Das Verringern von Operationen auf ein Format nur für Gleitkommazahlen verbessert die Wirksamkeit der Gleitkomma-Verarbeitung, da ungeachtet der Bedürfnisse von arithmetischen Ganzzahloperationen, logischen Operationen und anderen solchen Operationen eine geeignete interne Darstellung, die für die Darstellung und Verarbeitung von Gleitkommazahlen optimiert ist, gewählt werden kann.
  • Gemäß einer der Veranschaulichung dienenden Ausführungsform besteht bei der nur für Gleitkomma ausgelegten SIMD-ISA keine Notwendigkeit, die Codierung von ganzen Zahlen zu unterstützen, um Ergebnisse von Vergleichen, Boolesche Operationen, Auswahloperationen sowie die Datenausrichtung zu speichern, was bei den bisher bekannten ISAs erforderlich ist. Die nur für Gleitkomma (FP) ausgelegte SIMD-ISA ermöglicht es, weitgehend alle Daten als Gleitkommadaten zu speichern. Folglich gibt es nur einen Datentyp, der in der Vektorregisterdatei 330 in 3 gespeichert wird.
  • Gemäß einer der Veranschaulichung dienenden Ausführungsform sieht die nur für Gleitkomma ausgelegte SIMD-ISA die Möglichkeit vor, Gleitkomma-Vektoren zu vergleichen und Ergebnisse von Vergleichen in einem Gleitkomma-Vektorregister der Vektorregisterdatei 330 zu speichern. Überdies stellt die nur für Gleitkomma ausgelegte SIMD-ISA ein Codierschema für Auswahloperationen und Boolesche Operationen bereit, das die Durchführung der Auswahloperationen und der logischen Booleschen Operationen unter Verwendung von Darstellungen von Gleitkommadaten ermöglicht.
  • In einer der Veranschaulichung dienenden Ausführungsform verwendet die nur für Gleitkomma ausgelegte SIMD-ISA einen nur für Gleitkomma ausgelegten SIMD-Vektor doppelter Genauigkeit mit vier Elementen, d. h. einen Vierfachvektor für Vierfach-Ausführung durch die QPU 320. SIMD-Vektoren einfacher Genauigkeit werden während Lade- und Speicheroperationen automatisch in und aus SIMD-Vektoren doppelter Genauigkeit umgewandelt. Zwar wird hier eine SIMD-Ausführung mit einem Vektor doppelter Genauigkeit beschrieben, doch sind die der Veranschaulichung dienenden Ausführungsformen nicht auf diese und andere Genauigkeiten einschließlich einfacher Genauigkeit, erweiterter Genauigkeit, dreifacher Genauigkeit, ohne auf diese beschränkt zu sein, limitiert, und selbst eine nur für Dezimalgleitkomma ausgelegte SIMD-Ausführung kann verwendet werden, ohne vom Wesen und Umfang der der Veranschaulichung dienenden Ausführungsformen abzuweichen.
  • In einer der Veranschaulichung dienenden Ausführungsform werden die Mechanismen dieser Ausführungsform zur Realisierung der nur für Gleitkomma ausgelegten SIMD-ISA hauptsächlich als Logikelemente in der QPU 320 bereitgestellt. Zusätzliche Logik kann, soweit erforderlich, in einer oder mehreren der Speichereinheiten LS1 und LS2 bereitgestellt werden. In anderen der Veranschaulichung dienenden Ausführungsformen können die Mechanismen dieser Ausführungsformen als Logik in anderen Elementen der in 3 gezeigten abgeänderten Architektur realisiert werden, beispielsweise verteilt unter einer Vielzahl der in 3 gezeigten Elemente oder in einem oder in mehreren eigens dafür vorgesehenen Logikelementen, die mit einem oder mehreren in 3 gezeigten Elementen verbunden sind. Um ein Beispiel für die Realisierung der der Veranschaulichung dienenden Ausführungsformen zu geben, wird zum Zweck dieser Beschreibung davon ausgegangen, dass die Mechanismen der der Veranschaulichung dienenden Ausführungsformen als Logik in der QPU 320 ausgeführt sind, sofern nichts anderes angegeben ist. Für eine ausführlichere Erklärung einer der Veranschaulichung dienenden Ausführungsform der Logik in der QPU 320 sollte Bezug auf den Anhang A genommen werden, in dem die Architektur der QPU 320 spezifiziert ist.
  • Als Teil der nur für Gleitkomma ausgelegten SIMD-ISA der der Veranschaulichung dienenden Ausführungsformen werden Funktionen bereitgestellt, um Gleitkomma-Vektoren zu vergleichen und Ergebnisse der Vergleiche in der Gleitkomma-Vektorregisterdatei 330 zu speichern. Vergleichsauswahlen werden mit Hilfe von Gleitkomma-Werten, die Booleschen Werten entsprechen, codiert. Beispielsweise wird in einer der Veranschaulichung dienenden Ausführungsform bei einer Ausgabe ”TRUE” (”wahr”), d. h., die Bedingungen des Vergleichs sind erfüllt und ein Ergebnis ”TRUE” wird erzeugt, die Ausgabe als ein Gleitkomma-Wert von 1.0 dargestellt. Bei einer Ausgabe ”FALSE” (”falsch”), d. h., die Bedingungen des Vergleichs sind nicht erfüllt und eine Ausgabe ”FALSE” wird erzeugt, wird die Ausgabe als ein Gleitkomma-Wert von –1.0 dargestellt. Zu Funktionen, die solche Gleitkomma-Werte auf der Grundlage, ob Bedingungen eines Vergleichs erfüllt sind, erzeugen, gehören die Funktion QVFCMPEQ, die zwei Gleitkomma-Werte vergleicht, um festzustellen, ob sie gleich sind, die Funktion QVFCMPGT, die zwei Gleitkomma-Werte vergleicht, um festzustellen, ob ein erster Gleitkomma-Wert größer als ein zweiter Gleitkomma-Wert ist, und die Funktion QVFCMPLT, die zwei Gleitkomma-Werte vergleicht, um festzustellen, ob der erste Gleitkomma-Wert kleiner als der zweite Gleitkomma-Wert ist. Darüber hinaus wird eine Testfunktion, d. h. QVTSTNAN, bereitgestellt, um eine Prüfung auf eine Bedingung ”Not a Number” (NaN) durchzuführen. Die Ausgabe dieser Funktionen ist entweder 1.0 für TRUE oder –1.0 für FALSE.
  • Zusätzlich zu diesen Vergleichsfunktionen wird in der nur für Gleitkomma ausgelegten SIND-ISA der der Veranschaulichung dienenden Ausführungsformen eine Übereinstimmungsauswahl-Funktionalität bereitgestellt. Diese Vierfachvektor-Gleitkomma-Auswahl- oder QVFSEL-Funktion hat das Format qvfsel QRT, QRA, QRC, QRB. Bei dieser Vierfachvektor-Gleitkomma-Auswahlfunktion wird der Gleitkomma-Operand in jedem Doppelwort-Platz des Registers QRA mit dem Wert null verglichen, um einen Wert ”TRUE” oder ”FALSE” zu ermitteln. Wenn der Operand größer oder gleich null ist (d. h. TRUE ist), wird der entsprechende Platz des Registers QRT auf den Inhalt des Registers QRC gesetzt. Wenn der Operand kleiner null ist oder den Wert NaN hat, wird das Register QRT auf den Inhalt des Registers QRB gesetzt. Der Vergleich ignoriert das Vorzeichen von null, d. h., er betrachtet +0.0 als gleich –0.0. Folglich bewirkt jedes positive Vergleichsergebnis dieser Übereinstimmungsauswahl-Funktion, dass das Gleitkomma-SIMD-Vektorelement des QRT-Registers das entsprechende Gleitkomma-SIMD-Vektorelement des QRC-Registers nimmt. Andernfalls bewirkt jeder negative oder NaN-Wert, dass das Gleitkomma-SIMD-Vektorelement des QRT-Registers die Werte des entsprechenden Gleitkomma-SIMD-Vektorelements im QRB-Register nimmt.
  • Gemäß einer der Veranschaulichung dienenden Ausführungsform werden verschiedene Definitionen von TRUE und FALSE als Darstellungen der Eingabe und der Ausgabe verwendet, wobei die Darstellung der Ausgabe (d. h. des Werts, der erzeugt wird, um TRUE oder FALSE als das Ergebnis einer Berechnung darzustellen) eine Teilgruppe des Bereichs der TRUE- und FALSE-Werte ist, die als Darstellung der Eingabe verwendet werden. Im Einzelnen werden die in Tabelle 1 gezeigten Darstellungen verwendet:
    TRUE FALSE
    Darstellung der Ausgabe +1.0 –1.0
    Darstellung der Eingabe ≥ +0.0 < ±0.0 oder NaN
    Tabelle 1 – Darstellungen der Eingabe/Ausgabe
  • Gemäß einer Erscheinungsform einer der Veranschaulichung dienenden Ausführungsform verhindert diese Auswahl der Eingabe-/Ausgabe-Darstellungen ein unbestimmtes Verhalten. Gemäß einer anderen Erscheinungsform einer der Veranschaulichung dienenden Ausführungsform bietet diese Auswahl auch Kompatibilität einer ”Auswahl”-Funktion mit einer älteren ”Auswahl”-Funktion, die auf einem Gleitkomma-Vorzeichen gemäß mindestens einem älteren Befehlssatz beruht, der nicht die Möglichkeit bietet, als Gleitkommazahlen codierte Boolesche Werte zu speichern und Vergleiche und Boolesche Operationen durchzuführen. Gemäß einer noch weiteren Erscheinungsform einer der Veranschaulichung dienenden Ausführungsform vereinfacht diese Auswahl die Decodierung von Booleschen Werten, wenn diese als Eingabe in Befehle verwendet werden, welche Boolesche Eingabe-Operanden lesen.
  • Ferner werden bei der nur für Gleitkomma ausgelegten SIMD-ISA der der Veranschaulichung dienenden Ausführungsformen auch Vierfachvektor-Gleitkomma-Logikfunktionen definiert, so dass Vektor-Ausgaben erzeugt werden. Beispielsweise werden logische Funktionen für UND-, ODER-, EXKLUSIV-ODER-(XOR-), NAND-Operationen usw. in Bezug auf Boolesche Werte der nur für Gleitkomma ausgelegten SIMD-ISA festgelegt, z. B., 1.0 für TRUE und –1.0 für FALSE. Eine UND-Operation beispielsweise wird von der nur für Gleitkomma ausgelegten SIMD ISA so definiert, dass 1.0 UND 1.0 eine Ausgabe von 1.0 zum Ergebnis hat, andernfalls ist die Ausgabe von UND mit mindestens einem negativen Operanden –1.0.
  • Im Allgemeinen kann die Funktionsweise einer beispielhaften Booleschen Gleitkomma-UND-Operation für jede Vektorposition des SIMD-Vektors gemäß einer Ausführungsform der vorliegenden Erfindung gemäß Tabelle 2 beschrieben werden.
    Eingabe 1\Eingabe 2 ≥ ±0.0 < ±0.0 oder NaN
    ±0.0 +1.0 –1.0
    < ±0.0 oder NaN –1.0 –1.0
    Tabelle 2 – Beispielhafte Ausführungsform für eine Boolesche Gleitkomma-UND-Funktion
  • Ebenso definiert die nur für Gleitkomma ausgelegte SIMD-ISA bei einer ODER-Operation 1.0 ODER 1.0, –1.0 ODER 1.0 und 1.0 ODER –1.0 so, dass es eine Ausgabe von 1.0 zum Ergebnis hat und –1.0 ODER –1.0 eine Ausgabe von –1.0 ergibt.
  • Im Allgemeinen kann die Funktionsweise einer beispielhaften Booleschen Gleitkomma-ODER-Operation für jede Vektorposition des SIMD-Vektors gemäß einer Ausführungsform der vorliegenden Erfindung gemäß Tabelle 3 beschrieben werden.
    Eingabe 1\Eingabe 2 ≥ ±0.0 < ±0.0 oder NaN
    ≥ ±0.0 +1.0 +1.0
    < ±0.0 oder NaN +1.0 –1.0
    Tabelle 3 – Beispielhafte Ausführungsform einer Booleschen Gleitkomma-ODER-Funktion
  • Der Fachmann ist ebenso in der Lage, weitere Boolesche Funktionen auf der Grundlage eines festgelegten Satzes von Eingabe- und Ausgabe-Darstellungen der Werte von TRUE und FALSE gemäß den im Vorstehenden und im Umfang der vorliegenden Erfindung enthaltenen Lehren zu definieren.
  • Gemäß einer beispielhaften Ausführungsform dieser Erfindung wird ein ”flogischer” Befehl bereitgestellt. Der ”flogische” Befehl codiert eine ”Wahrheitstabelle” unter Verwendung von 4 Bits (d. h. einer Codierung einer beliebigen Booleschen Logikfunktion mit bis zu 2 Eingaben), wobei zwei als Gleitkommawerte codierte Boolesche Operanden verwendet werden, um einen Indexlauf in dieser Tabelle durchzuführen und ein Boolesches Ergebnis zu erhalten. Das Boolesche Ergebnis wird dann entsprechend den Mechanismen der der Veranschaulichung dienenden Ausführungsformen als ein Boolescher Gleitkomma-(FP-)Wert codiert und in der Registerdatei gespeichert. Im Rahmen einer SIMD-Vektorarchitektur ist der ”flogische” Befehl ein ”qvflogischer” Vektorbefehl. In solch einem Fall werden die Booleschen Werte an jedem Platz unabhängig voneinander verwendet, um selbstständig ein Ausgabeergebnis abzuleiten, das für jede Vektorposition als ein Boolescher Gleitkomma-(FP-)Wert codiert wird.
  • Weitere Einzelheiten einer nur für Gleitkomma ausgelegten SIMD-ISA, die mit der vorstehend in 3 beschriebenen SIMD-Architektur verwendet werden kann, sind in der gemeinsam übertragenen und ebenfalls anhängigen US-Patentanmeldung 2010/0 095 097 (Anmelde-Nr. 12/250 575 mit dem Titel ”Floating Point Only Single Instruction Multiple Data Instruction Set Architecture”, eingereicht am 14. Oktober 2008, angegeben, die durch Bezugnahme Bestandteil hiervon ist.
  • Nochmals Bezug nehmend auf 1 können die SPEs 120 bis 134 und/oder das PPE 110 der CBE 100 von einer nur für Gleitkomma ausgelegten SIMD-Architektur, wie sie beispielsweise in 3 gezeigt ist, Gebrauch machen, und sie können Vektorbefehle, z. B. SIMD-Befehle, verwenden. Alternativ können andere SIMD-Architekturen verwendet werden, bei denen die Prozessoren Vektorbefehle, die Vektorelemente haben, verwenden. Folglich kann der Quellcode von einem Compiler zur Ausführung auf diesen SPEs 120 bis 134 oder dem PPE 110 mit Power-ISA-Erweiterungen oder Erweiterungen einer nur für Gleitkomma ausgelegten SIMD-ISA optimiert werden, indem dem Quellcode Parallelität entnommen und der Quellcode neu konfiguriert oder umgewandelt wird, um diese Parallelität vorteilhaft nutzen zu können. Bei der Auswertung des Quellcodes für eine Optimierung und Umwandlung in SIMD-vektorisierten Code kann der Compiler ”If-Conversion”-Operationen durchführen. Eine solche If-Conversion kann beispielsweise mit Hilfe von datenparallelen If-Conversion-Mechanismen und datenparallelen Auswahloperationen durchgeführt werden, wie sie bereits vorstehend erörtert wurden.
  • Wir vorstehend erklärt wurde, treten bei der Behandlung von Ausnahmebedingungen, die für den ursprünglichen mit Prädikaten versehenen Code normalerweise kein Problem darstellen, Probleme auf, wenn Code SIMDisiert, d. h. zur Ausführung auf einem SIMD-fähigen Prozessor vektorisiert, wird. Wie vorstehend erwähnt wurde, schreiben die mit einem Prädikat versehenen Code-Befehle entweder ihr Ergebnis, da die Befehle ein einziges Ergebnis erzeugen, wobei das Ergebnis in diesem Fall geschrieben und gegebenenfalls eine Ausnahmebedingung aktiviert wird, oder die Befehle schreiben das einzige Ergebnis nicht, wobei das Ergebnis in diesem Fall nicht geschrieben und keine Ausnahmebedingung aktiviert wird. Bei SIMD-vektorisierten Befehlen können diese Befehle jedoch eine Vielzahl von Ergebnissen erzeugen, ohne zu wissen, ob ein bestimmtes Ergebnis verwendet werden wird, d. h., ob ein Wert spekulativ ist, und folglich kann nicht festgestellt werden, welches der richtige Satz von zu erzeugenden Ausnahmebedingungen ist. In bekannten SIMD-Architekturen werden Ausnahmebedingungen folglich entweder aktiviert, wobei in diesem Fall unechte Ausnahmebedingungen selbst in Ausführungspfaden erzeugt und behandelt werden können; die von den Prozessoren gar nicht ausgeführt werden, d. h. in spekulativen Ausführungspfaden, was vergeudete Zyklen zur Folge hat, oder Ausnahmebedingungen werden unterdrückt, wobei zu einem viel späteren Zeitpunkt festgestellt wird, dass ein Problem aufgetreten ist, was komplexe Rückverfolgungsoperationen für Mechanismen zur Fehlersuche und -beseitigung erforderlich macht.
  • Statt Ausnahmebedingungen unterdrücken zu müssen, weil kein geeigneter Satz von Ausnahmebedingungen für datenparallele, einer If-Conversion unterzogene Schleifen festgelegt werden kann, ermöglichen die Mechanismen der der Veranschaulichung dienenden Ausführungsformen die vektorelementweise Rückverfolgung von Ausnahmebedingungen in einer datenflussgesteuerten Art und Weise. Bei dieser vektorelementweisen Rückverfolgung werden Ausnahmebedingungen in den Vektorelementen als spezielle erkennbare Zeichen oder Bitmuster erfasst, die später zur Erzeugung einer Ausnahmebedingung verwendet werden können, wobei die zugehörige Ausnahmebedingungsbehandlung durchgeführt wird, wie beispielsweise, wenn festgestellt wird, welcher Ausführungspfad bei der Ausführung von vektorisiertem SIMD-Code genommen wurde. Anders ausgedrückt, Ausnahmebedingungen in spekulativen Ausführungspfaden werden bis zu einem Punkt verzögert, an dem der spekulative Ausführungspfad nicht spekulativ wird, wie beispielsweise bei einem Speicher- oder Verschiebebefehl, der bewirkt, dass spekulative Daten nicht spekulativ werden.
  • Darüber hinaus stellen die der Veranschaulichung dienenden Ausführungsformen eine Funktion bereit, um Informationen über Ausnahmebedingungen weiterzugeben und zu ersetzen. Das heißt, die Informationen über Ausnahmebedingungen können weitergegeben werden, bis festgestellt wird, ob ein Ausführungspfad genommen wird, der diese Ausnahmebedingung einschließt. Wenn ein anderer Ausführungspfad genommen wird, kann eine Ausnahmebedingung ersetzt werden, d. h., die speziellen Zeichen oder Bitmuster können ignoriert werden und erzeugen gegebenenfalls keine Ausnahmebedingung, die eine Ausnahmebedingungsbehandlung erforderlich macht. Alternativ dazu können, wenn ein Ausführungspfad ein Vektorelement mit einem darin gespeicherten speziellen Zeichen oder Bitmuster einschließt, die entsprechende Ausnahmebedingung erzeugt und die Ausnahmebedingungsbehandlung zu dem Zeitpunkt durchgeführt werden, zu dem festgestellt wird, dass der Ausführungspfad nicht mehr spekulativer Natur ist.
  • Es sei beispielsweise angemerkt, dass die datenparallele Auswahloperation – bei datenparallelen Auswahloperationen, wie zum Beispiel den vorstehend beschriebenen – Ergebnisse von mehreren Pfaden verknüpft. Wenn die datenparallele Auswahloperation kein Vektorelement auswählt, das über die speziellen Zeichen oder das Bitmuster verfügt, die bzw. das einen Wert einer Ausnahmebedingung angeben/angibt, verschwindet die Ausnahmebedingung aus einem Satz von Ergebnis-Ausnahmebedingungen für diesen Vektorplatz. Auf diese Weise werden Ausnahmebedingungen für jeden Vektorplatz auf der Grundlage des Datenflusses weitergegeben.
  • Darüber hinaus sehen die Mechanismen der der Veranschaulichung dienenden Ausführungsformen eine Möglichkeit zur Speicherung von Informationen über Vektor-Ausnahmebedingungen in Vektorelementen und zur Aktivierung der Ausnahmebedingungen durch bestimmte Operationen wie zum Beispiel einen Speichern-und-Angeben-Befehl und/oder einen Verschieben-und-Angeben-Befehl vor, um die Ausführung an eine geeignete Behandlungsroutine für Ausnahmebedingungen zu übertragen. Mit diesen Mechanismen der der Veranschaulichung dienenden Ausführungsformen wird das Erkennen der Ausnahmebedingungen im Grunde von der eigentlichen Behandlung der Ausnahmebedingungen entkoppelt, wobei Mechanismen bereitgestellt werden, um diese Ausnahmebedingungen aufgrund der Entkopplung zurückzuverfolgen.
  • In einer der Veranschaulichung dienenden Ausführungsform nutzen die Mechanismen dieser Ausführungsform die Codierung von Gleitkommazahlen, um Ausnahmebedingungen für Überlaufbedingungen und unzulässige Operationen zu diagnostizieren und zurückzuverfolgen. Die der Veranschaulichung dienende Ausführungsform verwendet Werte des Institute of Electrical and Electronics Engineers (IEEE), um Ausnahmebedingungen anzugeben, beispielsweise stellt ein Unendlichkeitswert (”infinity”) eine Überlaufbedingung dar und ein NaN-(Not-a-Number-)Wert gibt eine unzulässige Operation an. Diese IEEE-Werte werden in den Fällen, in denen eine entsprechende Ausnahmebedingung auftritt, in einem Vektorelement und nicht in einem Datenelement gespeichert.
  • Diese IEEE-Werte werden dann als das Vektorelement weitergegeben, bis das Vektorelement beibehalten, z. B. gespeichert, oder von einem Register in ein anderes Register verschoben werden soll. Spezielle Speichern-und-Angeben- und/oder Verschieben-und-Angeben-Befehle werden bereitgestellt, um diese speziellen IEEE-Werte in Vektorelementen zu erkennen und die entsprechenden Ausnahmebedingungen zur Behandlung durch entsprechende Behandlungsroutinen für Ausnahmebedingungen zu erzeugen. Wenn diese Speichern-und-Angeben- oder Verschieben-und-Angeben-Befehle während des Ausführungsflusses also nicht angetroffen werden, werden diese Ausnahmebedingungen nicht erzeugt.
  • Bei den Mechanismen der der Veranschaulichung dienenden Ausführungsformen führt der Compiler, wenn er Code optimiert und umwandelt, eine datenparallele If-Conversion aus, um eine SIMD-ISA oder eine nur für Gleitkomma ausgelegte SIMD-ISA zu realisieren, indem er if-Befehle in datenparallele Auswahloperationen übersetzt, d. h. eine gleitkommaorientierte datenparallele If-Conversion durchführt. Überdies sieht der Compiler Unterstützung für die Speicherung von Werten von Ausnahmebedingungen, d. h. von speziellen Zeichen oder Bitmustern, in den Vektorelementen von einer solchen datenparallelen Auswahloperation vor, wenn die mit den Vektorelementen verbundenen Berechnungen dazu führen, dass eine Ausnahmebedingung erzeugt wird. Diese speziellen Zeichen, Werte oder Bitmuster erzeugen die Ausnahmebedingung nicht sofort, sondern zeigen einfach an, dass eine Ausnahmebedingung erzeugt worden wäre und zu einem späteren Zeitpunkt erzeugt werden sollte, wenn der Ausführungspfad, oder der Datenpfad, der dem Vektorelement entspricht, für eine Beibehaltung ausgewählt wird, indem sein Zustand von einem spekulativen Zustand in einen nichtspekulativen Zustand umgewandelt wird. Wenn eine Berechnung eine Überlaufbedingung zum Ergebnis hat, speichert das entsprechende Vektorelement folglich einen Unendlichkeitswert, ein Bitmuster oder dergleichen, um anzugeben, dass eine Überlauf-Ausnahmebedingung eintreten sollte, wenn diesem Datenpfad oder Ausführungspfad gefolgt wird. Wenn eine Berechnung eine unzulässige Operation zum Ergebnis hat, wird überdies ein NaN-Wert, ein Bitmuster oder dergleichen in dem entsprechenden Vektorelement gespeichert, um anzugeben, dass eine Ausnahmebedingung für eine unzulässige Operation eintreten sollte, wenn diesem Datenpfad oder Ausführungspfad gefolgt wird. Eine solche Unterstützung, um solche Werte anstelle von Datenwerten in den Vektorelementen zu speichern, kann beispielsweise in der QPU 320 in 3 vorgesehen werden.
  • Die 4A und 4B sind beispielhafte Schaubilder, welche eine datenparallele Auswahloperation darstellen, die an einem oder mehreren Vektorelementen Operationen durchführt, in dem beziehungsweise in denen gemäß einer der Veranschaulichung dienenden Ausführungsform ein Wert einer Ausnahmebedingung gespeichert wird. 4A ist ein Beispiel eines Codes, der eine datenparallele Auswahloperation durchführt, während 4B eine grafische Darstellung des Codes in 4A ist, welche die Vektorwerte zeigt, die infolge der Befehle in dem Code erzeugt werden, und die auch zeigt, wie sich diese Vektorwerte gemäß den der Veranschaulichung dienenden Ausführungsformen ändern. Im Falle des in 4A gezeigten Codes ist die datenparallele Auswahloperation der Befehl ”QVFSEL”, der in den Code 4A beispielsweise durch eine Optimierung des Compiler eingefügt werden kann, wie vorstehend erwähnt wurde. 4B zeigt, wie die datenparallele Auswahloperation die speziellen Codes der der Veranschaulichung dienenden Ausführungsformen weitergeben kann, statt zu veranlassen, dass eine Ausnahmebedingung ausgeworfen wird, und wie sie verwendet werden kann, um Bedingungen zu ignorieren, die dazu führen könnten, dass in Fällen, in denen dem Ausführungspfad oder dem Datenpfad von der Ausführung des Codes nicht gefolgt wird, eine Ausnahmebedingung ausgeworfen wird. 4B zeigt darüber hinaus, wie diese speziellen Codes, die sich in dem ausgewählten Ausführungspfad befinden, weitergegeben werden, bis ein nichtspekulativer Befehl bewirkt, dass diese speziellen Codes im Speicher, in einem Vektorregister oder dergleichen belassen werden, was dann dazu führt, dass die Ausnahmebedingung ausgeworfen und die Ausnahmebedingungsbehandlung aufgerufen wird. Bei der Beschreibung der Funktionsweise der der Veranschaulichung dienenden Ausführungsformen wird hier auf die 4A und 4B in ihrer Gesamtheit Bezug genommen.
  • Es sei angemerkt, dass davon ausgegangen wird, dass die in den 4A und 4B gezeigten Befehle in einem spekulativen Zustand ausgeführt werden, bis die Ergebnisse dieser Befehle im Speicher belassen oder andernfalls als Teil einer Ausführung eines nichtspekulativen Befehls in einem anderen Vektorregister belassen werden. In den hier aufgezeigten Beispielen der der Veranschaulichung dienenden Ausführungsformen gehören zu solch nichtspekulativen Befehlen ein Speicherbefehl und ein Verschiebebefehl, die nachstehend ausführlicher erklärt werden.
  • Wie in den 4A und 4B für diesen Teil des SIMD-vektorisierten Codes gezeigt ist, lädt der Vierfachvektor-Gleitkommadaten-Lade-(QVLFD-)Befehl 410, der vier Datenwerte in vier Plätze eines Vektorregisters lädt, einen ersten Satz von Werten des Vektors QBI. Wie in 4B dargestellt ist, sind die vier Werte für QBI, die in das Vektorregister geschrieben werden, in dem gezeigten Beispiel {b0, 0, b2, 0}. Durch die Ausführung des QVFRE-Befehls 420 wird ein Vierfachvektor-Gleitkomma-Kehrwert erzeugt, der die Werte {1/b0, NaN, 1/b2, NaN} ergibt. Die Not-a-Number-(NaN-)Werte werden durch den Kehrwert von 0, d. h. 1/0, erzeugt, was in der IEEE-Norm einen Non-a-Number-Wert erzeugt. Wenn ein solches NaN-Ergebnis erzeugt wird, wird normalerweise ein Fehler gemeldet, d. h., eine Ausnahmebedingung wird ausgeworfen, die bewirkt, dass die Ausführung des Codes zu einer Behandlungsroutine für Ausnahmebedingungen verzweigt, die vorher festgelegte Operationen zur Behandlung der Art der Ausnahmebedingung durchführt. Da die Ausführung des Befehls 420 spekulativ ist, ist nicht gewährleistet, dass einer der NaN-Werte in dem Vektorregister von einem nichtspekulativen Befehl tatsächlich im Speicher oder in einem Vektorregister belassen wird, und folglich führt die Verzweigung zu einer Behandlungsroutine für Ausnahmebedingungen dazu, dass Prozessorzyklen und Ressourcen vergeudet werden.
  • Bei den Mechanismen der der Veranschaulichung dienenden Ausführungsformen wird jedoch nicht sofort eine Ausnahmebedingung erzeugt, die eine Behandlung durch eine Behandlungsroutine für Ausnahmebedingungen erforderlich macht, sondern die Ausnahmebedingung wird vorübergehend unterdrückt oder verzögert, bis der tatsächliche Wert der Ausnahmebedingung, in diesem Fall der NaN-Wert, im Speicher belassen, von einem Vektorregister in ein anderes verschoben oder in anderer Weise von einem nicht spekulativen Befehl verwendet wird. Auf diese Weise wird der Wert der Ausnahmebedingung einfach durch den Ausführungsfluss weitergegeben, bis er von einem nichtspekulativen Befehl verwendet wird, wobei die Ausnahmebedingung in diesem Fall ausgeworfen und die Ausnahmebedingungsbehandlung aufgerufen wird. Wenn der Wert der Ausnahmebedingung nie von einem nichtspekulativen Befehl verwendet wird, wird die Ausnahmebedingung nie ausgeworfen und wirkt sich nicht negativ auf den Ausführungsfluss aus.
  • Nochmals zu dem in den 4A und 4B gezeigten Beispiel zurückkehrend, wird der von dem QVLFD-Befehl 410 geladene Vektor auch in den Vierfachvektor-Gleitkomma-Vergleichs-(QVFCMP-)Befehl 430 eingegeben, der die Werte der Plätze in dem Vektor mit einem Vektor, der den Wert null hat, d. h. {0, 0, 0, 0}, vergleicht. Im Grunde stellt der QVFCMP-Befehl 430 fest, ob ein Wert in dem geladenen Vektor {b0, 0, b2, 0} ungleich null ist. Wenn dies der Fall ist, wird ein Wert ”TRUE” erzeugt; andernfalls wird ein Wert ”FALSE” erzeugt. Die Werte ”TRUE” oder ”FALSE” für jeden Vektorwert in dem Vektor {b0, 0, b2, 0} werden in diesem Fall dann in einem Vektor {t, f, t, f} gespeichert. Dieser Vektor wird zusammen mit dem Vektor {1/b0, NaN, 1/b2, NaN}, der vom QVFRE-Befehl 420 ausgegeben wird, in einen datenparallelen Auswahlbefehl, den QVFSEL-Befehl 440, eingegeben. Ein dritter Vektor {d, d, d, d} wird als Eingabe in den QVFSEL-Befehl 440 zur Lieferung von Standardwerten bereitgestellt.
  • Der QVFCMP-Befehl 430 erzeugt im Wesentlichen einen Maskenvektor {t, f, t, f}, um die Null-Werte in dem geladenen Vektor {b0, 0, b2, 0} zu maskieren, wenn sie aufgrund des QVFRE-Befehls 420 einen NaN-Wert zum Ergebnis haben. Das heißt, der QVFSEL-Befehl 440 legt für jeden Platz in dem Vektor {1/b0, NaN, 1/b2, NaN}, der an den QVFSEL-Befehl 440 weitergegeben wird, fest, ob entweder der Wert von dem Vektor {1/b0, NaN, 1/b2, NaN} oder ein Standardwert von dem Standardvektor {d, d, d, d} ausgewählt wird. Diese Festlegung erfolgt auf der Grundlage, ob an einem entsprechenden Platz des Ausgabevektors des QVFCMP-Befehls 430, d. h. {t, f, t, f} in diesem Beispiel, ein Wert ”TRUE” vorhanden ist. Als Folge, dass der QVFSEL-Befehl 440 Operationen an den drei Vektoren {1/b0, NaN, 1/b2, NaN}, {d, d, d, d} und {t, f, t, f) durchführt, wird somit der Vektorwert {1/b0, d, 1/b2, d} erzeugt. Man kann sehen, dass die NaN-Werte an diesem Punkt in dem Ausführungsfluss kein Problem mehr darstellen. Wenn auf der Grundlage der Operation des QVFRE-Befehls 420 eine Ausnahmebedingung erzeugt worden wäre, wie es bei dem bekannten Mechanismus der Fall ist, hätte die Ausnahmebedingungsbehandlung dazu geführt, dass bei der Behandlung einer Ausnahmebedingung, die den letztendlichen Ausführungsfluss des Rechnercodes nicht beeinflusst hat, da der Wert der Ausnahmebedingung in keiner Weise verwendet wurde, Ressourcen und Prozessorzyklen vergeudet worden wären. Wenn dies die letzte Ausgabe des Codes wäre und wenn der Vektorwert {1/b0, d, 1/b2, d} von einem nichtspekulativen Befehl verwendet würde, wie zum Beispiel, indem der Vektor mit Hilfe eines Vierfachvektor-Gleitkommadaten-Speicher-(QVSTFD-)Befehls im Speicher belassen würde, würde keine Ausnahmebedingung je ausgeworfen werden, und folglich wird die Ausnahmebedingungsbehandlung vermieden, da der von dem nichtspekulativen Befehl verwendete Vektor keine speziellen Ausnahmebedingungswerte enthält, die eine Ausnahme- oder eine Fehlerbedingung anzeigen, welche behandelt werden muss.
  • In dem gezeigten Beispiel ist der Vektorwert {1/b0, d, 1/b2, d} jedoch nicht das letzte Ergebnis, sondern er wird vielmehr zu der Ausgabe eines anderen Vierfachvektor-Gleitkommadaten-Ladebefehls 450 addiert, der einen Vektor {c0, c1, NaN, c3} lädt. Der Vierfachvektor-Additions-(QVADD-)Befehl 460 addiert den Vektor {c0, c1, NaN, c3} zu dem Vektor {1/b0, d, 1/b2, d}, was die Vektorausgabe {1/b0+c0, d+c1, NaN, d+c3} ergibt. Diese Vektorausgabe wird einem nichtspekulativen Vierfachvektor-Gleitkommadaten-Speicher-(QVSTFD-)Befehl 470 bereitgestellt, der die Vektorausgabe {1/b0+c0, d+c1, NaN, d+c3} im Speicher belässt. Da ein nichtspekulativer Befehl 470 nun einen Vektor verwendet, der einen speziellen Wert einer Ausnahmebedingung, NaN, hat, wird ein Fehler gemeldet, d. h. eine Ausnahmebedingung wird ausgeworfen, die dazu führt, dass der Ausführungsfluss zu einer Routine zur Behandlung der Fehlerbedingung, d. h. zu einer Ausnahmebedingungs-Behandlungsroutine, verzweigt. Während die NaN-Werte in der Ausgabe des QVFRE-Befehls 420 nicht zu einer Ausnahmebedingung in der letzten von dem QVSTFD-Befehl 470 empfangenen Ausgabe geführt haben, hat der NaN-Wert in der Ausgabe des QVLFD-Befehls 450 dazu geführt, dass ein Ausnahmebedingungswert den Ausführungsfluss hinab zu dem nichtspekulativen Befehl 470 weitergegeben wurde und dadurch bewirkt hat, dass eine verzögerte Ausnahmebedingung ausgeworfen wurde.
  • Wie vorstehend erwähnt wurde, wäre in bekannten Systemen unmittelbar nachdem der QVLFD-Befehl 450 das NaN-Ergebnis erzeugt hätte, eine Ausnahmebedingung ausgeworfen worden, und die Ausführung wäre zu der Behandlungsroutine für Ausnahmebedingungen verzweigt. In den der Veranschaulichung dienenden Ausführungsformen wird der NaN-Wert jedoch weitergegeben, bis er entweder ersetzt wird, wie beispielsweise im Fall des QVFSEL-Befehls 440 des gezeigten Beispiels, oder bis er von einem nichtspekulativen Befehl verwendet wird und dadurch bewirkt, dass die Ausnahmebedingung ausgeworfen wird. Auf diese Weise kann die Behandlung der Ausnahmebedingung verzögert werden, bis festgestellt wird, dass die Behandlung der Ausnahmebedingung notwendig ist, und es ermöglicht, die Ausnahmebedingung in Fällen zu ersetzen, in denen sich die Ausnahmebedingung nicht auf den Ausführungsfluss auswirkt.
  • Nochmals Bezug nehmend auf 3 dürfte es sich verstehen, dass die vorstehend beschriebenen Speicher-Vektoroperationen, z. B. Lade- und Speicheroperationen, von den Lade-/Speichereinheiten LS1 254 und LS2 258 in 3 ausgeführt werden können, wobei Werte in die Vektorregisterdatei 330 geschrieben und aus ihr gelesen werden. Andere Nicht-Speicher-Vektoroperationen wie zum Beispiel Berechnungen und dergleichen können durch die Absetz-Einheit 310 der Vierfachverarbeitungseinheit (QPU) und die QPU 320 ausgeführt werden, wobei die Ergebnisse in die Vektorregisterdatei 330 geschrieben werden. Ein Compiler kann Rechnercode so optimieren und SIMD-vektorisieren, dass die Mechanismen für die Weitergabe von Werten von Ausnahmebedingungen mit verzögerter Ausnahmebedingungsbehandlung in dem übersetzten Code durchgeführt werden, welcher von diesen Mechanismen der Prozessorarchitektur in 3 ausgeführt wird.
  • Statt Ausnahmebedingungen zu erzeugen und diese Ausnahmebedingungen in Ausführungspfaden, denen die Ausführung des Programms gar nicht folgt, behandeln zu müssen, entkoppeln die Mechanismen der der Veranschaulichung dienenden Ausführungsformen vielmehr die Feststellung der Ausnahmebedingung von der tatsächlichen Behandlung der Ausnahmebedingung, so dass nur diejenigen Ausnahmebedingungen, auf die der Ausführungsfluss des Programms tatsächlich stößt, auch tatsächlich behandelt werden. Folglich werden für die Behandlung von Ausnahmebedingungen, die sich gar nicht auf die Ausführung des Programms auswirken, keine Prozessorzyklen vergeudet.
  • Um diese Entkopplung zu ermöglichen, wird Unterstützung bereitgestellt, um als Reaktion auf eine Feststellung einer Ausnahmebedingung die speziellen Werte in den Vektorelementen zu setzen, wie vorstehend beschrieben wurde. Darüber hinaus sind spezielle Befehle vorgesehen, um diese speziellen Werte zu erkennen und die entsprechenden Ausnahmebedingungen zu erzeugen, falls diese speziellen Werte in den Vektorelementen während der Ausführung des Programms angetroffen werden, d. h., falls ein Datenpfad oder Ausführungspfad ausgewählt wird, wie zum Beispiel durch eine datenparallele Auswahloperation, der dieses Vektorelement einschließt. In einer der Veranschaulichung dienenden Ausführungsform sind diese speziellen Befehle ein Speichern-und-Angeben-Befehl und ein Verschieben-und-Angeben-Befehl. Ein Compiler kann bei der Optimierung und Umwandlung eines ursprünglichen Teils des Codes für eine SIMD-vektorisierte Ausführung normale Speicher- oder Verschiebebefehle des ursprünglichen Teils des Codes durch solche Speichern-und-Angeben- oder Verschieben-und-Angeben-Operationen ersetzen.
  • In den der Veranschaulichung dienenden Ausführungsformen werden zwar Speichern-und-Angeben- und Verschieben-und-Angeben-Befehle verwendet, doch dürfte es sich verstehen, dass die der Veranschaulichung dienenden Ausführungsformen nicht auf diese Befehle beschränkt sind. Vielmehr kann jeder nichtspekulative Befehl eine entsprechende X-und-Angeben-Version dieses nichtspekulativen Befehls haben, wobei ”X” für eine bestimmte, von dem nichtspekulativen Befehl durchgeführte Operation steht. Die Speichern-und-Angeben- und Verschieben-und-Angeben-Befehle sind lediglich Beispiele für die Arten von nichtspekulativen Befehlen, die gemäß den der Veranschaulichung dienenden Ausführungsformen verwendet werden können, um Hinweise auf Ausnahmebedingungen vorzusehen.
  • 5 ist ein beispielhaftes Schaubild, das einen Speichern-und-Angeben-Befehl gemäß einer der Veranschaulichung dienenden Ausführungsform zeigt. Wie in 5 gezeigt ist, stellt der Speichern-und-Angeben-Befehl, der in 5 als der einfach indexierte Vierfachvektor-Gleitkomma-Speichern-und-Angeben-Befehl (quad-vector store floating point single indexed and indicate instruction) bezeichnet wird, fest, ob Bytes der Vektorelemente eines Vierfachvektorregisters (QRS) einen Not-a-Number-(NaN-) oder einen Unendlichkeits-(Inf-)Wert angeben. Besonders anzumerken in 5 ist, dass der einfach indexierte Vierfachvektor-Gleitkomma-Speichern-und-Angeben-Befehl einen Code, 31, enthält, der von der Prozessorarchitektur verwendet wird, um den Befehl als einen einfach indexierten Vierfachvektor-Gleitkomma-Speichern-und-Angeben-Befehl, einen Eingabevektor in ein Vierfachvektarregister QRS sowie als Kennzeichner von Skalarregistern RA und RB zu erkennen, die die Werte halten, welche zur Berechnung der effektiven Adresse für das Ergebnis des Befehls verwendet werden.
  • In dem gezeigten Beispiel entspricht ein erstes Vektorelement des Vierfachvektorregisters QRS den Bytes 0:7, ein zweites Vektorelement entspricht den Bytes 8:15, ein drittes Vektorelement entspricht den Bytes 16:23, und ein viertes Vektorelement entspricht den Bytes 24:31. Wenn beliebige dieser Vektorelemente einen NaN-Wert oder einen INF-Wert angeben, ist dies ein Hinweis auf eine QPU-Ausnahmebedingung. Es sei angemerkt, dass in 5 zwar ein Speichern-und-Angeben-Befehl gezeigt ist, jedoch ein ähnlicher Verschieben-und-Angeben-Befehl vorgesehen werden kann, der solche Prüfungen auf NaN- und INF-Werte in den Vektorelementen vornimmt.
  • Wie in 5 gezeigt ist, werden diese Prüfungen nur durchgeführt, wenn ein entsprechender Wert QPU_enable_indicate_NaN oder QPU_enable_indicate_Infinity auf einen geeigneten Wert gesetzt ist. Diese Werte können beispielsweise in geeigneten Steuerregistern der QPU 320 in 3 gesetzt werden. Die Werte in diesen Steuerregistern können angeben, ob die QPU 320 eine Überwachung auf NaN- oder auf Unendlichkeitswerte (Infinity) vornehmen und diese zum Rückverfolgen von Ausnahmebedingungen verwenden soll. Nur wenn diese Werte in den Steuerregistern gesetzt sind, führt die QPU 320 in 3 die Funktionen der Speicherung eines speziellen Ausnahmebedingungswerts, der ein Hinweis auf eine Ausnahmebedingung in den Vektorelementen ist, und der Durchführung der Prüfungen auf diese speziellen Werte in den Vektorelementen mit den Speichern-und-Angeben- oder Verschieben-und-Angeben-Befehlen tatsächlich durch.
  • 6 ist ein beispielhaftes Schaubild eines Compiler gemäß einer der Veranschaulichung dienenden Ausführungsform. Wie in 6 gezeigt ist, empfängt der Compiler 610 den ursprünglichen Quellcode 620, der gemäß den der Veranschaulichung dienenden Ausführungsformen ausgewertet wird, für die der Compiler 610 konfiguriert ist. Das heißt, der Compiler 610 ermittelt Teile des Quellcodes 620, die beim bedingten Steuerungsfluss Schleifen haben, welche für eine SIMD-Ausführung oder für eine nur für Gleitkomma ausgelegte SIMD-vektorisierte Ausführung geändert werden können. Solche Teile des Quellcodes 620 können durch eine datenparallele ”If-Conversion” unter Verwendung von datenparallelen Auswahloperationen umgewandelt werden, welche die Mechanismen der der Veranschaulichung dienenden Ausführungsformen durchführen, um Werte von Ausnahmebedingungen in Vektorelementen zu speichern und um Ausnahmebedingungen nur dann zu erzeugen, wenn ein Datenpfad oder ein Ausführungspfad, der dem Vektorelement entspricht, ausgewählt wird und der Wert des Vektorelements gespeichert oder verschoben wird. Der Compiler 610 kann Speicher- und/oder Verschiebebefehle des ursprünglichen Quellcodes 620 durch Speichern-und-Angeben- und/oder Verschieben-und-Angeben-Befehle ersetzen, die solche Werte von Ausnahmebedingungen in Vektorelementen erkennen und dementsprechend Befehle erzeugen. In anderen der Veranschaulichung dienenden Ausführungsformen können andere Arten von nichtspekulativen Befehlen durch entsprechende Versionen dieser Befehle ersetzt werden, die abgeändert werden, um eine Operation vom Typ X-und-Angeben zu unterstützen, bei der der nichtspekulative Befehl seine normale Operation durchführt, dann aber auch einen Hinweis auf Ausnahmebedingungen gibt, die in der Architektur aktiviert werden und bei denen festgestellt wird, dass sie in den Eingaben in die Befehle vom Typ X-und-Angeben vorhanden sind.
  • Das Ergebnis der von dem Compiler durchgeführten Optimierung und Umwandlung ist ein optimierter/umgewandelter Code 630, der die Optimierungen und Umwandlungen der der Veranschaulichung dienenden Ausführungsformen vornimmt. Der optimierte/umgewandelte Code 630 wird dann dem Bindeeditor 640 zugeführt, der Bindeeditor-Operationen, die in der Technik allgemein gekannt sind, durchführt, um dadurch ausführbaren Code 650 zu erzeugen. Der ausführbare Code 650 kann dann von dem Prozessor 660, bei dem es sich beispielsweise um einen Prozessor in der CBE 100 von 1 handeln kann, oder von einer anderen Architektur eines Datenverarbeitungssystems ausgeführt werden.
  • Es sei erwähnt, dass es Fälle gibt, in denen Ausnahmebedingungen verloren gehen können oder in denen Ausnahmebedingungen vor der Ausführung eines Speichern-und-Angeben-Befehls oder eines Verschieben-und-Angeben-Befehls geändert werden können. In der QPU 320 in 3 können Tests vorgesehen werden, um auf Wunsch eine Prüfung auf solche Bedingungen vorzunehmen. Beispielsweise können Bedingungen eintreten, bei denen ein Vektorelement mit einem Unendlichkeitswert (INF) eingegeben wird, die Ausgabe der Berechnung aber eine ”0” ist. Wenn eine solche Bedingung erkannt werden muss, kann die QPU 320 den Divisor auf eine Überlaufbedingung prüfen, d. h., die QPU 320 kann über Logik verfügen, um das Divisorregister auf den speziellen Wert von ”Inf” zu prüfen. Wenn ein solcher spezieller Wert festgestellt wird, kann eine Überlauf-Ausnahmebedingung immer noch erzeugt werden, wenn die Ausführung des Programms auf eine solche Bedingung stößt. 7A ist ein beispielhaftes Schaubild, das einen Satz von Bedingungen zeigt, für die ein Test auf einen Überlauf an einem Divisorregister durchgeführt werden kann, um verloren gegangene Ausnahmebedingungen gemäß einer der Veranschaulichung dienenden Ausführungsform festzustellen. Wie aus 7A ersichtlich ist, tritt diese Bedingung ein, bei der der Divisor einen Wert von ”INF” und der Operand einen Wert von –1, –0, 0 oder 1 hat.
  • Eine andere Bedingung, bei der Ausnahmebedingungen verloren gehen können, ist die Bedingung, unter der eine Überlaufbedingung (INF) in eine Bedingung aufgrund von einer unzulässigen Operation (NaN) umgewandelt wird. Solche Situationen treten ein, wenn Berechnungen INF – INF, 0·INF oder andere Berechnungsarten dieser Sorte einschließen. Häufig reicht die bloße Feststellung, dass eine Ausnahmebedingung vorhanden ist, aus, und es ist nicht wichtig, ob die Ausnahmebedingung eine Überlauf-Ausnahmebedingung oder eine Ausnahmebedingung aufgrund von einer unzulässigen Operation ist, so zum Beispiel, wenn beide Arten von Ausnahmebedingungen durch das Setzen der Steuerregister-Werte-QPU_enable_indicate_NaN und QPU_enable_indicate_Infinity aktiviert werden. In anderen Fällen jedoch, beispielsweise wenn nur eine Art einer Ausnahmebedingung aktiviert wird, kann es wichtig sein, zwischen den Arten der Ausnahmebedingungen zu unterscheiden. In solchen Situationen sollte unbedingt eine Prüfung auf Bedingungen vorgenommen werden, unter denen eine Überlauf-Ausnahmebedingung in eine Ausnahmebedingung aufgrund von einer unzulässigen Operation umgewandelt werden kann.
  • Wenn solch ein Test erforderlich ist, kann die QPU 320 mit Logik ausgestattet werden, um das Operanden- und/oder Divisorregister auf einen Überlaufwert zu prüfen. 7B ist ein beispielhaftes Schaubild, das einen Satz von Bedingungen zeigt, für die ein Test auf einen Überlauf an einem Operandenregister durchgeführt werden kann, um eine Überlauf-zu-NaN-Änderungsbedingung gemäß einer der Veranschaulichung dienenden Ausführungsform festzustellen. Wie in 7B gezeigt ist, können die Werte des Operanden- und Divisorregisters für eine Additions- oder Subtraktionsoperation auf Überlaufbedingungen geprüft werden, und wenn beide INF-Werte haben, kann eine Überlauf-Ausnahmebedingung anstelle der andernfalls angegebenen Ausnahmebedingung aufgrund einer unzulässigen Operation erzeugt werden, wie in 7B angegeben ist. Überdies kann bei einer Multiplikationsoperation, wenn das Divisorregister einen Überlaufwert und das Operandenregister einen Wert 0 hat, eine Überlauf-Ausnahmebedingung anstelle der andernfalls angegebenen Ausnahmebedingung aufgrund einer unzulässigen Operation erzeugt werden. Ähnlich kann bei einer Divisionsoperation, wenn das Divisorregister einen Überlaufwert und das Operandenregister einen Überlaufwert hat, eine Überlauf-Ausnahmebedingung anstelle der andernfalls angegebenen Ausnahmebedingung aufgrund einer unzulässigen Operation erzeugt werden. 8 ist ein Ablaufplan, der einen Überblick über eine beispielhafte Operation zum Setzen eines Werts eines Vektorelements gemäß einer der Veranschaulichung dienenden Ausführungsform gibt. Wie in 8 gezeigt ist, beginnt die Operation, indem eine Operation an einem Vektorelement eines Zielvektors durchgeführt wird (Schritt 810). Es wird festgestellt, ob während der Berechnung eine Ausnahmebedingung angetroffen wird (Schritt 820). Wenn nicht, wird der berechnete Ergebnisdatenwert in dem Vektorelement gespeichert (Schritt 830). Wenn eine Ausnahmebedingung angetroffen wird, wird ein spezieller Ausnahmebedingungswert, der der Ausnahmebedingung entspricht, in dem Vektorelement gespeichert, ohne dass die Behandlungsroutine für Ausnahmebedingungen aufgerufen wird (Schritt 840). Der spezielle Ausnahmebedingungswert wird in dem Vektorelement durch die Prozessorarchitektur weitergegeben, bis eine Speicher-/Verschiebeoperation angetroffen wird, oder der spezielle Ausnahmewert wird entsprechend der verwendeten Befehlssatz-Architektur ersetzt (Schritt 850). Es sei erwähnt, dass die Weitergabe des speziellen Ausnahmebedingungswerts in manchen Fällen das Ersetzen dieses Werts einschließen kann, so dass der Ausnahmebedingungswert in dem Ausführungsfluss praktisch verschwindet. Wie vorstehend erwähnt wurde, bewirkt der vorstehend in dem Beispiel der 4A und 4B beschriebene datenparallele Auswahlbefehl beispielsweise, dass der Ausnahmebedingungswert die Weitergabe in Fällen beendet, in denen die Ausnahmebedingung maskiert wird oder in denen sie nicht von einem nicht spekulativen Befehl verwendet wird.
  • Es wird festgestellt, ob ein nichtspekulativer Befehl, wie zum Beispiel ein Speichern-und-Angeben-Befehl oder ein Verschieben-und-Angeben-Befehl, während der Ausführung des Rechnerprogramms angetroffen wird, der auf den Vektor abzielt, in dem sich das Vektorelement befindet (Schritt 860). Wenn nicht, wird die Ausnahmebedingung ignoriert (Schritt 880). Wenn ein Speichern-und-Angeben-Befehl oder ein Verschieben-und-Angeben-Befehl angetroffen wird, wird eine Ausnahmebedingung erzeugt und an die Behandlungsroutine für Ausnahmebedingungen gesendet (Schritt 870). Daraufhin wird die Operation beendet.
  • 9 ist ein Ablaufplan, der einen Überblick über eine beispielhafte Operation zum Erzeugen einer Ausnahmebedingung gemäß einer der Veranschaulichung dienenden Ausführungsform gibt. Wie in 9 gezeigt ist, beginnt die Operation mit der Ausführung eines Speichern-und-Angeben-Befehls oder eines Verschieben-und-Angeben-Befehls an einem Vektor (Schritt 910). Es wird festgestellt, ob ein entsprechender enable_indicate_NaN-Wert in einem Steuerregister gesetzt ist (Schritt 920). Wenn ja, wird festgestellt, ob eines der Vektorelemente des Vektors einen NaN-Wert hat (Schritt 930). Wenn ja, wird eine Ausnahmebedingung aufgrund einer unzulässigen Operation erzeugt und an eine geeignete Behandlungsroutine für Ausnahmebedingungen gesendet (Schritt 940).
  • Andernfalls oder wenn der enable_indicate_NaN-Wert nicht in dem Steuerregister gesetzt ist, wird festgestellt, ob in einem entsprechenden Steuerregister ein enable_indicate_Inf-Wert gesetzt ist (Schritt 950). Wenn ja, wird festgestellt, ob ein Vektorelement des Vektors einen INF-Wert hat (Schritt 960). Wenn ja, wird eine Überlauf-Ausnahmebedingung erzeugt, und die Ausführung verzweigt zu der entsprechenden Behandlungsroutine für Ausnahmebedingungen (Schritt 970). Wenn ein Vektorelement keinen Inf-Wert hat oder wenn der enable_indicate_Inf-Wert in dem Steuerregister nicht gesetzt ist, wird der Vektor anschließend gespeichert/verschoben (Schritt 980), und die Operation wird beendet.
  • Es sei erwähnt, dass die NaN- und INF-Werte lediglich als Beispiele für spezielle Ausnahmebedingungswerte verwendet werden, die von den Mechanismen der der Veranschaulichung dienenden Ausführungsformen zur Feststellung von Ausnahmebedingungen genutzt werden können, welche möglicherweise einer Ausnahmebedingungsbehandlung bedürfen. Eine ähnliche Operation kann in Bezug auf jede andere Art von speziellen Angabewerten durchgeführt werden, die zur Angabe einer Ausnahmebedingung verwendet werden können, welche während einer spekulativen Ausführung von Befehlen angetroffen wurde, ohne vom Wesen und Umfang der der Veranschaulichung dienenden Ausführungsform abzuweichen.
  • Folglich sehen die der Veranschaulichung dienenden Ausführungsformen Mechanismen vor, um Ausnahmebedingungen festzustellen und einen speziellen Ausnahmebedingungswert weiterzugeben, der ein Hinweis auf die Ausnahmebedingung als Teil eines entsprechenden Vektorelements eines Vektors ist, ohne gleich eine Behandlungsroutine für Ausnahmebedingungen aufzurufen. Nur wenn der spezielle Ausnahmebedingungswert tatsächlich als Teil der Ausführung des Rechnerprogramms angetroffen wird, wird die entsprechende Ausnahmebedingung erzeugt und die Ausführung zu der Behandlungsroutine für Ausnahmebedingungen verzweigt. Auf diese Weise werden die Feststellung von Ausnahmebedingungen und die Behandlung von Ausnahmebedingungen voneinander entkoppelt, wodurch Ausnahmebedingungen in Ausführungszweigen, die nicht Teil des von dem Rechnerprogramm genommenen tatsächlichen Ausführungspfades sind, ignoriert werden können. Die Mechanismen der der Veranschaulichung dienenden Ausführungsformen ermöglichen SIMDisiertem Code, Ausnahmebedingungen zu aktivieren, während sie unechte Ausnahmebedingungen und die Behandlung von Ausnahmebedingungen in Ausführungszweigen, denen der Ausführungspfad des Rechnerprogramms gar nicht folgt, auf ein Minimum herabsetzen.
  • Die Beschreibung der vorstehenden der Veranschaulichung dienenden Ausführungsformen erfolgt auf der Grundlage, dass man den Compiler die Umwandlung von vorhandenen Speicher- oder Verschiebebefehlen in Speichern-und-Angeben- oder Verschieben-und-Angeben-Befehle durchführen lässt. Es dürfte sich jedoch verstehen, dass es nicht notwendig ist, dass der Compiler jeden Speicher- oder Verschiebebefehl in einen Speichern-und-Angeben- oder einen Verschieben-und-Angeben-Befehl umwandelt. Gemäß weiteren der Veranschaulichung dienenden Ausführungsformen kann der Compiler im Gegensatz dazu mit Logik ausgestattet werden, um geeignete Stellen im Code auszuwählen, an denen Speicher- oder Verschiebebefehle in Speichern-und-Angeben- oder Verschieben-und-Angeben-Befehle umgewandelt werden sollen. Wie vorstehend erwähnt wurde, sind die der Veranschaulichung dienenden Ausführungsformen darüber hinaus nicht nur auf Speichern-und-Angeben- oder Verschieben-und-Angeben-Befehle beschränkt, sondern der Compiler kann vielmehr jeden Befehl vom Typ X-und-Angeben verwenden, wobei X für eine bestimmte durchzuführende Operation, z. B. Addieren-und-Angeben oder dergleichen, steht. Somit kann der Compiler geeignete Stellen für solche Befehle vom Typ X-und-Angeben auf der Grundlage der Logik, mit der er ausgestattet ist, auswählen, wenn der Compiler Quellcode, z. B. einen skalaren Code, in SIMD-vektorisierten Code umwandelt.
  • Mit den Mechanismen der der Veranschaulichung dienenden Ausführungsformen werden bei der Umwandlung des Quellcodes, z. B. eines skalaren Codes, in SIMD-vektorisierte Code X-und-Angeben-Befehle, wie zum Beispiel ein Verschieben-und-Angeben-Befehl, ein Speichern-und-Angeben-Befehl oder dergleichen (die unter dem Sammelbegriff ”Angeben”-Befehle zusammengefasst sind), an geeigneten Stellen in den Code eingefügt, um die Verwendung der speziellen Werte, die das Eintreten einer Ausnahmebedingung kennzeichnen, vorteilhaft zu nutzen. Der Compiler legt den geeigneten Einfügepunkt in Übereinstimmung mit einer oder mehreren methodischen Vorgehensweisen auf der Grundlage, ob ein interessierender Wert prüfbar ist, wie nachstehend definiert ist, fest. Bei einem methodischen Ansatz können Teile des SIMD-Codes, die nicht geprüft werden können, durch die Verwendung von Maskierungsmechanismen in prüfbaren SIMD-Code umgewandelt werden. Bei einem methodischen Ansatz können die Angeben-Befehle nach jeder Berechnung eingefügt werden, die einen interessierenden Wert, z. B. eine Matrix aus interessierenden Werten, einschließt. Bei einem anderen methodischen Ansatz wird eine sehr kleine Anzahl von Prüfbefehlen an geeigneten Stellen eingefügt, um jeden lebendigen Ausgabewert zu prüfen, wobei ein Wert lebendig ist, wenn er sich letztendlich auf das Speicherabbild oder den Entscheidungsprozess des Codes auswirkt (oder eine nachfolgende Berechnung verwendet das Ergebnis, um letztendlich das Speicherabbild oder den Entscheidungsprozess des Codes zu beeinflussen).
  • Um eine beispielhafte Ausführungsform der Logik zu veranschaulichen, die von dem Compiler bei der Ermittlung, wo solche X-und-Angeben-Befehle in Code, der von dem Compiler optimiert und übersetzt wird, eingefügt werden sollen, eingesetzt werden kann, wird zunächst ein Überblick über den Logikfluss gegeben, wobei die Einzelheiten einer jeden der in diesem Ablauf aufgezeigten Operationen anschließend dargelegt werden. Es dürfte sich verstehen, dass der Ablauf und die anschließend aufgezeigten Einzelheiten lediglich ein Beispiel der Logik darstellen, die zum Einfügen von Befehlen vom Typ X-und-Angeben verwendet werden kann, und dass Compiler, welche die Mechanismen der der Veranschaulichung dienenden Ausführungsformen durchführen, auch andere Logik einsetzen können, ohne vom Wesen und Umfang der der Veranschaulichung dienenden Ausführungsformen abzuweichen.
  • 10 ist ein Ablaufplan, der einen Überblick über eine beispielhafte Operation zum Einfügen von Angeben-Befehlen in einen SIMD-vektorisierten Code durch einen Compiler gemäß einer der Veranschaulichung dienenden Ausführungsform gibt. Die Operation von 10 geht davon aus, dass von dem Compiler für einen bestimmten Teil des Codes, der von dem Compiler geprüft werden soll, ein Abhängigkeitsgraph erzeugt worden ist. Der Teil des Codes kann ein Basisblock, eine Anweisung, ein Ausdruck oder jede andere Arbeitseinheit oder Codeeinheit sein, an der der Compiler Operationen durchführen kann. Die Erzeugung von Abhängigkeitsgraphen durch Compiler für einen Teil eines Codes, der von dem Compiler geprüft werden soll, ist in der Technik allgemein bekannt, so dass hier keine ausführliche Beschreibung erfolgt. Wie in der Technik allgemein bekannt ist, umfasst ein Abhängigkeitsgraph Knoten und Bögen zwischen Knoten, wobei die Bögen Abhängigkeiten zwischen Teilen des Codes darstellen, z. B. Befehle, die von anderen Befehlen abhängig sind.
  • Wie in 10 gezeigt ist, wird für eine Arbeitseinheit, die von dem Compiler geprüft werden soll, in Bezug auf einen Satz von Werten, die von dem Compiler zu prüfen sind, eine Feststellung getroffen (Schritt 1010). Für jeden Wert, der geprüft werden muss, wird der Abhängigkeitsgraph ausgewertet, um eine Gruppe von Stellen, d. h. Knoten, in dem Abhängigkeitsgraphen zu ermitteln, die eine gleichwertige Erfassung ermöglichen, d. h. eine Stelle, an der eine Prüfung durchgeführt werden kann, die einer Prüfung an jedem Knoten des Graphen, der diesen Wert einschließt, gleichkommt (Schritt 1020).
  • Betrachten wir beispielsweise die Berechnung ”c[i] = (a[i]+b[i])+1”, bei der man eine Not-a-Number-(NaN-)Ausnahmebedingung feststellen möchte. Dazu muss man anhand einer Prüfung feststellen, dass der von a[i] erzeugte Eingabewert kein NaN-Wert ist. Folglich könnte man den Ausgang der Ladeoperation prüfen, bei der der a[i]-Wert aus dem Speicher in die Registerdatei geladen wird. Wenn man jedoch berücksichtigt, dass das Addieren einer Zahl zu einem NaN-Wert auch einen NaN-Wert erzeugt, ermöglicht die Prüfung des Ergebnisses von ”a[i]+b[i]” eine gleichwertige Erfassung (aus der Sicht der Prüfung, ob a[i] einen NaN-Wert erzeugt). Tatsächlich ist die Prüfung von ”a[i] + b[i]” nutzbringender, da sie auch prüft, ob der b[i]-Wert ein NaN-Wert ist. Der Prüfung des Wertes von a[i] entspricht darüber hinaus die Prüfung der folgenden Stellen: ”a[i],” ”a[i]+b[i],” ”a[i]+b[i]+1.” Zwar sind all diese Stellen gleichwertig, doch ist es in solchen Fällen eindeutig von Nutzen, die zweite oder die dritte Stelle zu prüfen, da dabei auch der Wert von ”b[i]” geprüft wird. Das Prüfen der letzten Stelle ist am günstigsten, da man die Speicherung des berechneten Werts von ”a[i]+b[i]+1” am Speicherplatz ”c[i]” in eine Speichern-und-Angeben-Operation umwandeln kann.
  • Wenn die Arbeitseinheit größer als eine Anweisung ist, kann es gleichwertige Stellen geben, die sich auf mehrere Anweisungen erstrecken. Betrachten wir die Anweisung ”c[i] = (a[i]+b[i])+1”, auf die eine andere Anweisung ”d[i] = c[i] + e[i]” unbedingt folgt. In einem solchen Fall kann man die Stelle ”c[i]” und die Stelle ”c[i]+d[i]” als gleichwertige Stellen addieren, um zu prüfen, ob a[i] ein NaN-Wert ist.
  • Es wird festgestellt, ob eine oder mehrere dieser ermittelten Stellen geprüft werden können (siehe die nachfolgende Definition eines ”prüfbaren” Werts oder einer ”prüfbaren” Stelle) (Schritt 1030). Wenn ja, wird die beste dieser prüfbaren Stellen ausgewählt (Schritt 1040).
  • Wenn es an den ermittelten Stellen keine prüfbaren Stellen gibt (Schritt 1030), wird festgestellt, ob es eine oder mehrere Stellen gibt, die in eine prüfbare Form umgewandelt werden können (Schritt 1050). Wenn ja, wird die beste Stelle für eine solche Prüfung ausgewählt (Schritt 1060), und die Stelle wird so umgewandelt, dass der unprüfbare Teil der Stelle von dem prüfbaren Teil getrennt wird, z. B., indem der unprüfbare Teil der Registerwerte des Ausgaberegisters an der Stelle mit sicheren Werten maskiert wird, Schleifen geschält werden oder dergleichen (Schritt 1070). Im Anschluss an die Operationen 1040 oder 1070 wird ein Operation-und-Angeben-Befehl (der einfach auch als ein ”Angeben”-Befehl bezeichnet wird) an die ausgewählte Stelle eingefügt (Schritt 1080). Dieser Angeben-Befehl führt im Wesentlichen eine Prüfung auf einen speziellen Wert durch, der ein Hinweis auf eine Ausnahmebedingung ist, die aufgrund von vorherigen Berechnungen eingetreten sein kann, wobei die Behandlung dieser Ausnahmebedingung aber in der zuvor beschriebenen Art und Weise verzögert worden ist. Wenn solch ein spezieller Wert vorhanden ist, wird die Ausnahmebedingung von dem X-und-Angeben-Befehl angegeben, und die Behandlung der Ausnahmebedingung kann gestartet werden.
  • Wenn es keine prüfbaren Stellen und keine Stellen gibt, die so umgewandelt werden können, dass ein Teil prüfbar ist, wird die Wertberechnung, die dem Wert entspricht, als skalar gekennzeichnet (Schritt 1090). Es wird festgestellt, ob andere Werte in der Arbeitseinheit geprüft werden müssen (Schritt 1095). Wenn ja, kehrt die Operation zum Schritt 1020 zurück, und die Operation wird für einen nächsten ausgewählten Wert wiederholt. Andernfalls wird die Operation beendet. Man beachte, dass in der vorstehenden Ausführungsform der Schritt 1050 feststellt, ob es mindestens eine umwandelbare Stelle gibt. Wenn dies der Fall ist, wird der Code umgewandelt, damit er prüfbar wird. In einer anderen Ausführungsform prüft der Schritt 1050 auch, ob der Code nutzbringend umgewandelt werden kann. Tatsächlich kann es Fälle geben, in denen die zusätzlichen Kosten für die Umwandlung des SIMD-Codes, damit dieser prüfbar wird, den Nutzen der SIMDisierung dieser Anweisung übersteigen können. In solchen Fällen kann es vorteilhafter sein, wenn man sich einfach dafür entscheidet, zum Schritt 1090 zu schalten, statt den Code in einen SIMD-Code umzuwandeln.
  • Wie vorstehend beschrieben wurde, ist bei dem Prozess der Feststellung, wo Angeben-Befehle eingefügt werden sollen, eine der wichtigsten vom Compiler getroffenen Feststellungen diejenige, welche Stellen in dem Abhängigkeitsgraphen prüfbar sind. Bei der Feststellung, ob eine Stelle in dem Abhängigkeitsgraphen ”prüfbar” ist, schaut sich der Compiler das Register an, das den resultierenden Ausgabewert des SIMD-Vektors von der Stelle in dem Abhängigkeitsgraphen speichert, und stellt fest, ob der in dem Register gespeicherte Wert ”prüfbar” ist. Ein Wert an einem Platz eines Vektorregisters ist prüfbar, wenn er (1) einen Gleitkommawert enthält, der lebendig ist, und der Wert tatsächlich berechnet wurde; oder wenn (2) von dem Wert bekannt ist, dass er eine Gleitkommadarstellung hat, bei der gewährleistet ist, dass sie keine Ausnahmebedingung verursacht. Mit Bezug auf (1) oben, ist ein Gleitkommawert, wie zuvor erwähnt wurde, ”lebendig”, wenn sich der Gleitkommawert letztlich auf das Speicherabbild, d. h. die im Speicher abgelegten Daten, oder auf den Entscheidungsprozess des Codes auswirkt, z. B. wenn er Einfluss darauf hat, welche Ausführungsverzweigungen während der Ausführung des Codes genommen werden. Alternativ dazu wird der Wert auch als ”lebendig” betrachtet, wenn eine nachfolgende abhängige Berechnung den Wert verwendet und sich diese Berechnung auf das Speicherabbild oder den Entscheidungsprozess auswirkt. Der Wert muss auch tatsächlich berechnet werden, d. h. nicht in das Register kopiert oder verschoben werden, sondern er ist tatsächlich das Ergebnis einer Berechnung. Dies schließt Daten aus, die einfach aus dem Speicher gelesen werden, um beispielsweise in die Berechnungen eingefügt zu werden.
  • Mit Bezug auf (2) oben, kann der Benutzer oder ein Compiler bestimmte Werte angeben, bei denen gewährleistet ist, dass sie keine Ausnahmebedingung verursachen. Der Compiler kann zum Beispiel bestimmte Gruppen von großen Werten auf null setzen. In solch einem Fall kann der Compiler angeben, dass Werte von null bei solchen Gruppen von großen Werten keine Ausnahmebedingung verursachen. Wenn sich ein solcher Wert an einem Platz eines SIMD-Vektorregisters befindet, kann dieser Wert somit als prüfbar betrachtet werden. Ebenso kann ein Benutzer bestimmte Werte als Werte angeben, die keine Ausnahmebedingungen verursachen, und solche Werte können, wenn sie angetroffen werden, ebenfalls prüfbar sein. Eine Berechnung kann beispielsweise Daten aus einer kleinen Koeffiziententabelle enthalten, die mit bekannten Werten gefüllt wird. Ein Berechnung kann beispielsweise wiederholt sin(x)-Werte verwenden, wobei x ein Vielfaches von 10 Grad ist. Ein Benutzer kann die Werte sin(0), sin(10), ... sin(350) vorab berechnen, ihre Ergebnisse in einer kleinen Matrix speichern und diese Werte dann für diese Matrix lesen, statt den Wert sin(x) jedes Mal zu berechnen. Da der Benutzer vollständige Kontrolle über diese Tabelle hatte und weiß, dass ihre Werte zwischen –1.0 und +1.0 liegen, kann der Benutzer dem Compiler bestätigen (über eine Direktive, ein Pragma, eine Kennzeichnung des Compiler oder ein anderes Mittel zum Austausch von Informationen mit dem Compiler), dass gewährleistet ist, dass diese Tabelle weder einen NaN-Wert, einen negativen Unendlichkeitswert oder einen positiven Unendlichkeitswert darstellt.
  • Ein SIMD-Vektorregister wird selbst als prüfbar betrachtet, wenn jeder seiner Plätze einen Gleitkommawert speichert, der prüfbar ist, d. h. einen Gleitkommawert, der ”lebendig” ist und tatsächlich berechnet wird oder von dem man weiß, dass er keine Ausnahmebedingung erzeugt. In der zuvor erörterten beispielhaften Architektur umfasst jedes SIMD-Vektorregister zum Beispiel 4 Plätze oder Werte. Bei einer solchen Architektur muss jeder der 4 Plätze einen Wert speichern, der gemäß der vorstehend angegebenen Definition von ”prüfbar” prüfbar ist.
  • Die 11A bis 11C sind beispielhafte Schaubilder, die den Unterschied zwischen prüfbaren und unprüfbaren Teilen des SIMD-Codes gemäß den Kriterien von einer der Veranschaulichung dienenden Ausführungsform aufzeigen. In einem ersten Beispiel, das in 11A gezeigt ist, ist die Arbeitseinheit oder der Teil des Codes, die bzw. der von dem Compiler geprüft wird, die Anweisung d[i] = (a[i]>0.0) ? b[i] : c[i]. Der resultierende Abhängigkeitsgraph dieser Anweisung ist in 11A gezeigt, wie er von einem Compiler bei der Übersetzung dieser Anweisung in einer Art und Weise, die in der Technik allgemein bekannt ist, erzeugt würde. Gemäß den Mechanismen der der Veranschaulichung dienenden Ausführungsformen können Knoten des Abhängigkeitsgraphen in Bezug auf die Werte der Arbeitseinheit, d. h. in diesem Beispiel die Anweisung, die von dem Compiler geprüft wird, jedoch in ”prüfbar” und ”nicht prüfbar” kategorisiert werden.
  • Wie in 11A gezeigt ist, ist die Ausgabe der Befehle im Teil 1120 des Abhängigkeitsgraphen prüfbar, da sich der Wert a[i] auf einen Entscheidungsprozess des Knotens, d. h. die ”Auswahl”-Operation in dem SIMD-Code, auswirkt, der auf dem Vergleich von a[i] mit dem Wert ”0.0.” beruht. Im Grunde führt der Vergleich von a[i] mit dem Wert ”0.0.” eine Maskierung durch, bei der von dem folgenden ”Auswahl”-Befehl ein erster Wert, z. B. b[i] genommen wird, wenn der Wert der Maskierung 1 ist, und bei der ein zweiter Wert genommen wird, z. B. c[i], wenn der Wert der Maskierung 0 ist. Folglich wirkt sich der Wert a[i] auf den Wert in dem Speicherbefehl st d[i] aus, der damit lebendig ist und von dem Auswahlbefehl tatsächlich berechnet wird.
  • Andererseits ist die Ausgabe der Ladebefehle für die Ladeoperationen von b[i] und c[i] im Teil 1110 des Abhängigkeitsgraphen nicht prüfbar, da nicht gewährleistet ist, dass die Ergebnisse dieser Ladeoperationen tatsächlich in irgendeiner Weise verwendet werden. Es ist bekannt, dass einer der Werte, die von diesen Ladeoperationen erzeugt werden, verwendet wird, doch kann der Compiler zum Zeitpunkt der Übersetzung nicht wissen, welche Werte verwendet werden, d. h., b[i] oder c[i] könnten während der Ausführung jederzeit verwendet oder auch nicht verwendet werden. Diese Werte sind in ihrem aktuellen Zustand vom Compiler somit nicht prüfbar.
  • Als ein weiteres Beispiel betrachten wir die Anweisung d[2i] = a[i] + b[i], für die der Abhängigkeitsgraph 1125 und Registerwerte für die Plätze des SIMD-Vektorregisters d[i] 1130 in 11B gezeigt sind. Wie in 11B gezeigt ist, ist gemäß der hier angegebenen Definition von ”prüfbar” der Teil 1140 des Abhängigkeitsgraphen 1120 prüfbar, während der Teil 1150 des Abhängigkeitsgraphen 1120 nicht prüfbar ist. Der Teil 1140 ist prüfbar, weil bekannt ist, dass die Werte a[i] und b[i] verwendet werden, um den von dem Speicherbefehl st d[i] gespeicherten Wert zu beeinflussen, d. h., sie sind lebendig, und die Werte, die verwendet werden, um den im Speicher abgelegten Wert d[i] zu beeinflussen, werden von dem Additionsbefehl berechnet. Der Teil 1150 ist nicht prüfbar, da nicht gewährleistet ist, dass alle Ergebnisse des Ladebefehls ld d[i] bei der Speicherung von d[i] verwendet werden. Dies ist in dem Beispiel des Vektorregisters d[i] 1130 gezeigt, in dem ein erster Wert am Platz 0, wobei i=0, ein Wert a[0]+b[0] ist. Ein zweiter Wert am Platz 1 ist der ursprüngliche Wert d[i], der von dem Befehl ld d[i] an diesen Platz geladen wurde, da, wenn i=1, der Wert der Anweisung d[2] = a[1]+b[1] ist und der Platz d[2] folglich aktualisiert wird, um den Wert a[1]+b[1] zu speichern. Beim Platz d[3] ist der gespeicherte Wert ebenso der ursprüngliche Wert, der von dem Befehl ld d[i] geladen wurde. Daher verknüpft der Entpackungsbefehl beide Werte, die über den Befehl ld d[i] (der die Werte nicht wirklich berechnet, sondern sie lediglich lädt). geladen wurden, und Werte, die auf der Grundlage der Vektoren a[i] und b[i] von dem Additionsbefehl berechnet werden. Da manche Werte prüfbar sind und andere nicht, ist das Ergebnis des Entpackungsbefehls gemäß der Definition eines prüfbaren Registers, bei dem alle Plätze prüfbare Werte speichern müssen, nicht prüfbar. Folglich ist der Speicherbefehl st d[i) nicht prüfbar. Dies kann sich jedoch ändern, falls festgestellt wird, dass alle Werte in d[i], die von dem Befehl ld d[i] geladen wurden, Werte sind, bei denen gewährleistet ist, dass sie keine Ausnahmebedingungen erzeugen.
  • 11C zeigt ein weiteres Beispiel für einen prüfbaren und einen unprüfbaren SIMD-Code gemäß den der Veranschaulichung dienenden Ausführungsformen. Das in 11C gezeigte Beispiel gilt für die Anweisung (i=0; i<65; i++) a[i+2) = b[i+1] + c[i+3], bei der es sich um eine Lesen-Ändern-Schreiben-Operation handelt. Wie in 11C gezeigt ist, sind die Eingabevektoren a[i], b[i] und c[i], wobei der Vektor-Wert a[i] aus dem Speicher 1160 gelesen, durch die Addition von b[i+1] + c[i+3] geändert und dann in den Speicher 1160 zurückgeschrieben wird. Da die SIMD-Architektur in diesem Beispiel an Vektoren von 4 Plätzen Operationen durchführt, wird, wenn ein Wert a[2] der Gegenstand einer Lesen-Ändern-Schreiben-Operation ist, eine Vektor-Ladeoperation 1162 durchgeführt, um den Wert abzurufen, der a[2] entspricht. Dies schließt das Lesen des Werts [a0, a1, a2 und a3] aus dem Speicher 1160 ein. Der Wert von a[2] entspricht einem Wert von i=0 in der obigen Anweisung, die ausgewertet wird, um die Werte [*, *, b1+c3, b2+c4] zu speichern. Diese beiden Vektoren werden in eine Auswahloperation 1164 eingegeben, die für jeden Platz des Ausgabevektorregisters 1166 entweder den ursprünglichen Wert, der von dem Vektor-Ladebefehl 1162 geladen wurde, oder den neuen Wert, der von der Anweisung berechnet wurde, auswählt. Da die Operation eine Lesen-Ändern-Schreiben-Operation an dem Wert a[2] ist, werden in diesem Fall die ursprünglichen Werte a0 und a1 für die ersten beiden Plätze des Ausgabevektorregisters 1166 ausgewählt, und die berechneten Werte b1+c3 und b2+c4 werden für die letzten beiden Plätze des Ausgabevektorregisters 1166 ausgewählt.
  • Die ursprünglichen Werte a0 und a1 sind nicht prüfbar, da der Compiler nicht im Voraus weiß, ob diese Werte tatsächlich verwendet werden, und diese Werte werden nicht wirklich berechnet, sondern vielmehr nur aus dem Speicher geladen. Somit sind diese Werte a0 und a1 gemäß der vorstehenden Definition nicht ”lebendig” und folglich nicht prüfbar. Andererseits sind die berechneten Werte b1+c3 und b2+c4 prüfbar, da sie berechnet wurden und sich auf das Speicherabbild auswirken, und folglich sind sie ”lebendig”.
  • Wie vorstehend erwähnt wurde, müssen, damit ein SIMD-Vektorregister prüfbar ist, alle an den Plätzen des Vektorregisters gespeicherten Werte prüfbar sein. Folglich ist das Ausgabevektorregister 1166 nicht prüfbar, da mindestens ein Wert des Ausgabevektorregisters 1166 nicht prüfbar ist, d. h., die Plätze, die die Werte a0 und a1 speichern, sind nicht prüfbar. Bei dem Vektorspeicherbefehl 1170 jedoch ist das Vektorregister, dessen Werte in den Speicher 1160 geschrieben werden, prüfbar, da jeder Platz in dem Vektorregister einen Wert speichert, der gemäß der Anweisung berechnet wird, also einen ”lebendigen” Wert speichert.
  • Nochmals zu der in 10 skizzierten Operation zurückkehrend, stellt die Operation, wie vorstehend erwähnt wurde, Stellen fest, die eine gleichwertige Erfassung ermöglichen. Von dieser Stellen wird festgestellt, ob eine der Stellen prüfbar ist, d. h., ob ein Ausgaberegister des entsprechenden Befehls prüfbar ist. Beim Treffen einer solchen Feststellung kann die Logik des Compiler die vorstehend aufgezeigten Kriterien anwenden, um festzustellen, ob das Ausgaberegister des entsprechenden Befehls prüfbar ist. Der Compiler kann mittels dieser Kriterien jede ermittelte Stelle auswerten und feststellen, welche Stellen prüfbar sind.
  • Wie in 10 gezeigt ist, wird, wenn keine der Stellen prüfbar ist, eine Feststellung getroffen, ob eine der Stellen in eine prüfbare Stelle umgewandelt werden kann. Im Grunde ist dies eine Feststellung, bei der das Ausgaberegister ausgewertet wird, um festzustellen, ob einer der Plätze in dem Ausgaberegister geprüft werden kann. Wenn ja, werden die Plätze im Ausgaberegister, die geprüft werden können, ermittelt, und eine Maske kann erzeugt werden, um die nicht prüfbaren Plätze im Ausgaberegister zu maskieren. Die nicht prüfbaren Plätze im Ausgaberegister können maskiert werden, indem diese Werte durch Werte ersetzt werden, von denen man weiß, dass sie keine Ausnahmebedingung erzeugen, z. B. durch einen Wert von 0 oder einen anderen sicheren Wert, der keine Ausnahmebedingung erzeugt. Die Maske kann vor der Durchführung der Prüfoperation, die von einem eingefügten X-und-Angeben-Befehl durchgeführt wird, angewendet werden, wie nachstehend beschrieben ist. Die Maske kann zwecks der Operation des X-und-Angeben-Befehls angewendet werden. Diese Maskierungsaktion ändert jedoch nicht das Verhalten der Anwendung (abgesehen von der möglichen, von der X-und-Angeben-Operation erzeugten Ausnahmebedingung), da die Werte von Registern, die später von dem Compiler für seine Berechnungen verwendet werden, nicht geändert werden. Anders ausgedrückt, für das zu prüfende Register werden die nicht prüfbaren Werte in einem anderen Vektorregister, das nur von der X-und-Angeben-Operation verwendet wird, maskiert (indem sie durch sichere Werte ersetzt werden). Wenn die Prüfung durch eine Speichern-und-Angeben-Operation erfolgt, wird der maskierte Wert in einem Speicherplatz abgelegt, der von dem ursprünglichen Programm nie gelesen wird. Beispielsweise kann ein Speicherplatz im Stapelspeicher nur für einen solchen Zweck reserviert werden. Wenn eine Verschieben-und-Angeben-Operation verwendet wird, können die maskierten Werte, die sich beispielsweise im Register Y befinden, in eben dieses Register Y (oder in irgendein anderes Register, das gerade nicht verwendet wird) verschoben werden. Egal welche Operation verwendet wird, sie hat einen Speicher oder ein Register zum Ziel, der bzw. das von der Anwendung gerade nicht verwendet wird und der/das folglich das Verhalten der Anwendung in keiner Weise ändern wird (mit Ausnahme der möglichen Erzeugung einer Ausnahmebedingung aufgrund des Vorhandenseins eines NaN-Werts, eines Unendlichkeitswerts oder anderer von der Ausnahmebedingung geprüfter Werte). Auf diese Weise können somit Stellen, die andernfalls nicht prüfbar wären, zum Zweck des Einfügens eines X-und-Angeben-Befehls in prüfbare Stellen umgewandelt werden.
  • Wie in 10 gezeigt ist, wird, wenn es mindestens eine prüfbare Stelle oder eine Stelle, die in eine prüfbare Stelle umgewandelt werden kann, gibt, wieder die beste Stelle zum Einfügen eines X-und-Angeben-Befehls ausgewählt. Die Auswahl der besten Stelle zum Einfügen hängt von der gewünschten jeweiligen Stufe der Erfassung von Ausnahmebedingungen ab. Das heißt, in einer ersten Stufe der Erfassung von Ausnahmebedingungen wird ein geringer Aufwand ohne unechte Ausnahmebedingungen, aber mit nur einer teilweisen Erfassung der Ausnahmebedingungen erzielt, d. h. nur eine teilweise Feststellung von Unterlauf- und Überlaufbedingungen, aber eine vollständige Erfassung von NaN-Bedingungen wird ermöglicht. In einer zweiten Stufe der Erfassung von Ausnahmebedingungen wird bei einer vollständigen Erfassung der Ausnahmebedingungen ein höherer Aufwand ebenfalls ohne unechte Ausnahmebedingungen erzielt. In noch einer dritten Stufe der Erfassung von Ausnahmebedingungen wird sowohl die eine als auch die andere der ersten beiden Stufen der Erfassung von Ausnahmebedingungen erreicht, wobei möglicherweise unechte Ausnahmebedingungen in Software korrigiert werden. Die Auswahl der besten Stelle für das Einfügen eines X-und-Angeben-Befehls gemäß einer jeden dieser drei Stufen der Erfassung von Ausnahmebedingungen wird nachstehend mit Bezug auf die 12A bis 12C und 13A bis 13C ausführlicher beschrieben.
  • Die 12A bis 12C sind beispielhafte Schaubilder, die Einfügestellen zum Einfügen von Angeben-Befehlen gemäß einer der Veranschaulichung dienenden Ausführungsform zeigen. In dieser der Veranschaulichung dienenden Ausführungsform wird eine erste Stufe der Erfassung von Ausnahmebedingungen verwendet, d. h. eine, bei der Ausnahmebedingungen nur teilweise erfasst werden. Bei dieser der Veranschaulichung dienenden Ausführungsform wird eine sehr kleine Anzahl von X-und-Angeben-Befehlen eingefügt, um jeden lebendigen Ausgabewert zu prüfen. Als Teil dieser der Veranschaulichung dienenden Ausführungsform schließt das Auswählen der besten Stelle(n) für das Einfügen des X-und-Angeben-Befehls das im Anschluss an das Erkennen eines jeden prüfbaren Vektorregisters in einer Berechnung erfolgende Erkennen der sehr kleinen Anzahl von Stellen ein, die jeden lebendigen Ausgaberegisterwert prüfen, welcher von der Berechnung berechnet wird, sowie das Einfügen eines entsprechenden X-und-Angeben-Befehls, z. B. eines Speichern-und-Angeben-, Verschieben-und-Angeben-, Addieren-und-Angeben- oder eines anderen X-und-Angeben-Befehls ein, der dem Befehl an der ermittelten Stelle entspricht.
  • Die Auswahl der sehr kleinen Anzahl von Stellen, um jeden lebendigen Ausgaberegisterwert zu prüfen, kann zum Beispiel das Auswählen von einer oder mehreren prüfbaren Stellen beinhalten, so dass keine weiteren Berechnungen einen Speicherbefehl erreichen können, ohne von einem X-und-Angeben-Befehl geprüft zu werden. Es ist wünschenswert, solche Werte so früh wie möglich in der Ausführung der Arbeitseinheit oder an einem Punkt, an dem die geringsten Kosten für den zusätzlichen Aufwand entstehen, zu fangen. Dies kann noch weiter erleichtert werden, wenn es mehrere Anweisungen in einer Arbeitseinheit gibt, z. B. wenn der Compiler an einem Basisblock oder dergleichen Operationen durchführt. Nehmen wir beispielsweise an, der Compiler arbeitet an einem Basisblock, der einen Befehl, welcher einen Wert für einen Vektor a[i] setzt, z. B. a[i] = ..., und einen Befehl, der den Vektorwert a[i], z. B. = ... a[i] ... verwendet, umfasst. In solch einem Fall braucht der Compiler nur einen X-und-Angeben-Befehl an eine Stelle einzufügen, die dem zweiten Befehl entspricht, da a[i] in dem ersten Befehl, der einen speziellen Wert speichert, welcher auf eine Ausnahmebedingung hinweist, bedeutet, dass a[i] in dem zweiten Befehl auch den speziellen Wert ergibt, der auf die Ausnahmebedingung hinweist, z. B. bewirkt ein NaN-Wert in dem ersten Befehl einen NaN-Wert in dem zweiten Befehl.
  • Nochmals Bezug nehmend auf die 12A bis 12C zeigt 12A ein erstes Beispiel für das Einfügen eines X-und-Angeben-Befehls gemäß der ersten Stufe der Erfassung von Ausnahmebedingungen. Dieses erste Beispiel bezieht sich auf die Anweisung d[i] = (a[i] > 0.0) ? b[i] : c[i]. Wie in 12A gezeigt ist, ist der Teil 1210 gemäß den zuvor beschriebenen Kriterien nicht prüfbar und der Teil 1220 ist prüfbar. Die frühestmögliche Einfügestelle in dem Abhängigkeitsgraphen, an der alle lebendigen Ausgabewerte von einem eingefügten X-und-Angeben-Befehl geprüft werden können, befindet sich an dem Speicherbefehl st d[i]. Das heißt, der erste Knoten in dem Abhängigkeitsgraphen, an dem alle lebendigen Werte in der Arbeitseinheit, in diesem Fall der Anweisung, geprüft werden können, ist der Knoten nach der Auswahloperation, in der lebendige Werte, die bei der Änderung des Speicherabbilds verwendet werden sollen, ausgewählt werden. Somit kann in diesem Fall ein Speichern-und-Angeben-Befehl an der Stelle des Speicherknotens eingefügt werden, um den ursprünglichen Speicherbefehl zu ersetzen. Man beachte, dass man in diesem Beispiel auch den Wert von ”a[i]” auf mögliche NaN-Zahlen prüfen muss. Der Grund für diese Prüfung ist, dass Vergleichsoperationen (wie zum Beispiel ”größer als” oder hier ”>”) als Operationen definiert sind, die einen Wert ”FALSE” zurückliefern, wenn irgendwelche ihrer Eingaben NaN-Werte sind. Wenn man bei den ”a[i]”-Werten eine Prüfung auf Ausnahmebedingungen durchführen müsste und wenn es an einem bestimmten Platz des Vektorregisters einen NaN-Wert gäbe, würde bei der Prüfung somit immer der Wert ”c[i]” für diesen Platz ausgewählt werden. Da der Wert ”c[i]” gegebenenfalls kein NaN-Wert ist, würde eine Prüfung auf den Wert ”c[i]” während der Ausführung des Speichern-und-Angeben-Befehls nicht den NaN-Wert offenlegen, der in dem ”a[i]”-Wert vorhanden war. Bei diesem Beispiel muss man folglich den Wert ”a[i]” auf NaN prüfen.
  • 12B zeigt ein zweites Beispiel für das Einfügen eines X-und-Angeben-Befehls für die beispielhafte Anweisung d[2i] = a[i] + b[i]. Der Teil 1230 des Abhängigkeitsgraphen für die Anweisung ist gemäß der vorstehend genannten Definition dieser Bedingungen prüfbar, und der Teil 1240 ist nicht prüfbar. In diesem Beispiel befindet sich die erste Stelle in dem Abhängigkeitsgraphen, an der alle lebendigen Werte geprüft werden können, an dem Additionsbefehl. Folglich kann als Ersatz für den ursprünglichen Additionsbefehl ein Addieren-und-Angeben-Befehl in diesen Knoten eingefügt werden. Auf einer Plattform, auf der es keinen Addieren-und-Angeben-Befehl gibt, kann man einen zusätzlichen Verschieben-und-Angeben-Befehl verwenden, wobei das Register, welches das Ergebnis der Additionsoperation hält, nur zu dem Zweck, eine Angeben-Operation auf das Ergebnis der Additionsoperation anzuwenden, an ein anderes nicht verwendetes Register (das später nicht verwendet wird) verschoben wird. Ebenso könnte man auch einen Speichern-und-Angeben-Befehl verwenden, um das Ergebnis der Addition an einem nicht verwendeten Speicherplatz zu speichern, ebenfalls nur zu dem Zweck, eine Angeben-Operation auf das Ergebnis der Additionsoperation anzuwenden.
  • 12C zeigt ein drittes Beispiel für das Einfügen eines X-und-Angeben-Befehls für den beispielhaften Basisblock, der aus den Anweisungen d[2i] = a[i] + b[i] und e[i] = d[i] + 1.0 besteht. Wie in 13C gezeigt ist, ist der Abhängigkeitsgraph für die erste Anweisung im Basisblock gleich dem in 13B gezeigten Abhängigkeitsgraphen, und folglich hat er denselben prüfbaren Teil 1230 und nicht prüfbaren Teil 1240. Der Abhängigkeitsgraph für die zweite Anweisung ist vollständig prüfbar. Statt jedoch den X-und-Angeben-Befehl in den Additionsknoten des Abhängigkeitsgraphen der ersten Anweisung einfügen zu müssen, da die zweite Anweisung das Ergebnis der ersten Anweisung verwendet und folglich spezielle Werte, die auf eine Ausnahmebedingung hinweisen, welche von der ersten Anweisung erzeugt wird, an die zweite Anweisung weitergegeben werden, ist es ausreichend, bei der Ausführung der zweiten Anweisung eine Prüfung auf diese speziellen Werte vorzunehmen, indem in den Abhängigkeitsgraphen der zweiten Anweisung ein X-und-Angeben-Befehl eingefügt wird. In dem gezeigten Beispiel befindet sich die optimale Stelle für das Einfügen des X-und-Angeben-Befehls, um alle lebendigen Werte des Basisblocks zu erfassen, an dem Speicherbefehl st e[i] in dem Abhängigkeitsgraphen der zweiten Anweisung.
  • Bei der ersten Stufe der Erfassung von Ausnahmebedingungen wird somit eine sehr kleine Anzahl von X-und-Angeben-Befehlen in den Code eingefügt. Dadurch wird der Code im Hinblick auf seine Ausführungszeit leistungsfähiger, jedoch können bestimmte Ausnahmebedingungen nur teilweise erkannt werden. Um dies näher zu veranschaulichen, betrachten wir nachstehende Tabelle:
    Regel Operation Ergebnis
    1 N/0 infinity
    2 –N/0 –infinity
    3 infinity + N infinity
    4 infinity + infinity infinity
    5 –infinity – infinity –infinity
    6 infinity·N infinity
    7 –infinity·N –infinity
    8 infinity/N infinity
    9 –infinity/N –infinity
    10 0/0 NaN
    11 infinity/infinity NaN
    12 –infinity/infinity NaN
    13 infinity – infinity NaN
    14 infinity·0 NaN
  • Aus dieser Tabelle geht hervor, dass bei den meisten Operationen Eingaben mit einem positiven oder negativen Unendlichkeitswert (”infinity”) die Ausgabe einer Operation zum Ergebnis haben können, die entweder einen positiven oder einen negativen Unendlichkeitswert oder einen Not-a-Number-(NaN-)Wert hat. Betrachten wir zum Beispiel die Additionsoperation, z. B. ”c[i] = (a[i]–1) + (b[i]–1)”. Nach der vorstehenden Regel 3 ergibt das Addieren einer endlichen positiven Zahl N zu ”infinity” das Ergebnis ”infinity”; ebenso ergibt das Addieren von ”infinity” zu ”infinity” gemäß der vorstehenden Regel 4 ebenfalls ”infinity”. Gemäß der vorstehenden Regel 13 ergibt das Addieren eines negativen Unendlichkeitswerts (”minus infinity”) zu einem positiven Unendlichkeitswert (”positive infinity”) NaN. Wenn der Benutzer also davon ausgeht, dass die korrekten Ausnahmebedingungen gemeldet werden, d. h., wenn der Benutzer davon ausgeht, dass das Programm eine Ausnahmebedingung ”infinity” meldet, wenn eine ”infinity”-Zahl angetroffen wird, und eine NaN-Ausnahmebedingung, wenn ein NaN-Wert angetroffen wird, genügt es nicht, den Wert zu prüfen, der gespeichert wird (”c[i]” in dem vorstehenden Beispiel), da die Speichern-und-Angeben-Operation einen NaN-Wert melden kann, wenn ”(a[i]–1)” tatsächlich vielleicht einen positiven Unendlichkeitswert (”positive infinity”) und ”(b[i]–1)” einen negativen Unendlichkeitswert (”negative infinity”) aufwies. Um Ausnahmebedingungen in solch einem Fall wahrheitsgemäß zu melden, muss man zusätzlich zur Ausgabe der Operation (da der Vorgang der Addition zu einer sehr großen endlichen Zahl zur Erzeugung der Darstellung einer positiven unendlichen Zahl führen kann) folglich auch die Eingabe in die Additionsoperation prüfen (um sicherzustellen, das es keinen NaN- und/oder positiven/negativen Unendlichkeitswert gibt). Man stelle dies einer Prüfung auf nur einen NaN-Wert gegenüber. Da eine Addition einen NaN-Wert zum Ergebnis hat, wenn sowohl die eine als auch die andere Eingabe ein NaN-Wert ist, ist es ausreichend, nach der Addition eine Prüfung auf Ausnahmebedingungen vorzunehmen, da die Werte in dem vorstehenden Beispiel in ”c[i]” gespeichert werden.
  • Wie vorstehend erwähnt wurde, ist auch eine zweite Stufe der Erfassung von Ausnahmebedingungen möglich, bei der Ausnahmebedingungen vollständig erfasst werden, d. h., alle Unterlauf- und Überlauf-Ausnahmebedingungen werden von den Mechanismen der der Veranschaulichung dienenden Ausführungsformen festgestellt. Bei dieser zweiten Stufe der Erfassung von Ausnahmebedingungen wird eine Prüfung auf spezielle Werte, die auf eine Ausnahmebedingung hinweisen, nach jeder Berechnung durchgeführt, die eine Unterlauf-, Überlauf- oder NaN-Bedingung erzeugen kann. Arithmetische Operationen beispielsweise können diese speziellen Ausnahmebedingungen und Werte erzeugen, aber andere Operationen, wie z. B. Auswahl-, Ausrichte-, Vergleichs- und logische Operationen erzeugen keine solchen speziellen Ausnahmebedingungen und Werte.
  • Die 13A bis 13C sind beispielhafte Schaubilder, die Einfügestellen für das Einfügen von Angeben-Befehlen gemäß dieser anderen der Veranschaulichung dienenden Ausführungsform zeigen, bei der eine zweite Stufe der Erfassung von Ausnahmebedingungen wünschenswert ist. Die in den 13A bis 13C gezeigten Beispiele gelten für dieselben Anweisungen und Basisblöcke, die in den 12A bis 12C gezeigt sind, und folglich sind auch die Abhängigkeitsgraphen gleich. Darüber hinaus ergeben die 13A und 13B ähnliche Einfügepunkte für das Einfügen der X-und-Angeben-Befehle, da die Anweisung in 13A keine Berechnung einschließt und der ”Additions”-Berechnungspunkt in dem Beispiel von 13B, an dem bei dieser zweiten Stufe der Erfassung von Ausnahmebedingungen der Einfügevorgang durchgeführt wird, derselbe Punkt ist, an dem der Einfügevorgang für die erste Stufe der Erfassung von Ausnahmebedingungen nach seinen Kriterien durchgeführt wird. Der Unterschied tritt in dem in 13C gezeigten Beispiel in Erscheinung, in dem es zwei Einfügepunkte anstelle des einen in 12C gezeigten Einfügepunkts gibt. Da in dem ersten Abhängigkeitsgraphen eine Berechnung stattfindet, wird an dem ”Additions”-Befehlsknoten in dem ersten Abhängigkeitsgraphen ein zusätzlicher Einfügepunkt für das Einfügen eines X-und-Angeben-Befehls festgestellt, wobei der zweite Einfügepunkt der Speicherbefehl st e[i] ist, der ähnlich dem Speicherbefehl in der Ausführungsform mit der ersten Stufe der Erfassung von Ausnahmebedingungen ist.
  • Wie vorstehend erwähnt wurde, können manche Umwandlungen in Situationen, in denen es keine Stellen in einem Abhängigkeitsgraphen einer Arbeitseinheit, z. B. einer Anweisung, eines Basisblocks usw. gibt, die prüfbar sind, durchgeführt werden, um eine nicht prüfbare Stelle in eine prüfbare Stelle umzuwandeln. Eine Umwandlung besteht, wie vorstehend erwähnt wurde, in der Verwendung einer Maske, um unprüfbare Werte in einem Vektorregister zu maskieren und dann die anderen Werte zu prüfen. Eine andere Umwandlung kann die Deaktivierung der SIMD-Vektorisierung von unprüfbaren Werten und das Aufteilen einer Schleife in mehrere Schleifen einschließen, um prüfbare und unprüfbare Anweisungen zusammenzufassen. Eine Schleifenschäl-Operation kann beispielsweise verwendet werden, um Iterationen einer Schleife, die unprüfbare Werte einschließen, von Iterationen einer Schleife, die prüfbare Werte einschließen, durch Schälen zu trennen. Eine solche Situation kann eintreten, wenn es am Anfang und/oder am Ende einer Schleife, wie es zum Beispiel in 11C oben gezeigt ist, eine Lesen-Ändern-Schreiben-Operation gibt.
  • In einer dritten Stufe der Erfassung von Ausnahmebedingungen kann sowohl die eine als auch die andere der ersten beiden Stufen der Erfassung von Ausnahmebedingungen verwendet und um eine empirische Feststellung hinsichtlich der Frage erweitert werden, ob ein unprüfbarer Wert als ein Wert bekannt ist, der selten eine Ausnahmebedingung auslöst. Das heißt, man kann den unprüfbaren Wert spekulativ prüfen und eine benutzerspezifische Ausnahmebedingungs-Behandlungsroutine für einen ungültigen Wert verwenden, die feststellt, ob eine tatsächliche Ausnahmebedingung eingetreten ist oder ob es sich bei der Ausnahmebedingung aufgrund der Prüfung eines Werts, der eigentlich nicht hätte geprüft werden sollen, um eine unechte Ausnahmebedingung handelt. Wenn Letzteres der Fall ist, kann das Vektor-Ausgaberegister von der Ausnahmebedingungs-Behandlungsroutine für einen ungültigen Wert als prüfbar behandelt werden. Andernfalls, wenn die unprüfbaren Werte zu tatsächlichen Ausnahmebedingungen führen, werden die unprüfbaren Teile des Vektor-Ausgaberegisters als skalar behandelt und die SIMD-Ausführung der Befehle an diesem Vektor-Ausgaberegister wird aus SIMD zurück in eine skalare Ausführung gewandelt.
  • Die Ausnahmebedingungs-Behandlungsroutine für einen ungültigen Wert kann erkennen, wo solche Ausnahmebedingungen eintreten, Masken berechnen, um festzustellen, welche Ausnahmebedingungen in einem Register als unechte Ausnahmebedingungen ignoriert und welche nicht ignoriert werden können. Die Ausnahmebedingungs-Behandlungsroutine für einen ungültigen Wert kann dann zu der Anwendung zurückkehren, wenn die Ausnahmebedingung unecht war, oder die Ausnahmebedingung melden, wenn die Ausnahmebedingung nicht unecht war. Sehen wir uns noch einmal das Beispiel an, das wir bereits vorstehend betrachtet haben, nämlich ”c[i] = (a[i]–1) + (b[i]–1)”. Wie vorstehend erörtert wurde, wurden, um eine zweite Stufe der Erfassung von Ausnahmebedingungen vorzusehen, in der alle positiven und negativen Unendlichkeitswerte gemeldet wurden, zwei Verschieben-und-Angeben-Operationen eingefügt, um durch eine Prüfung sicherzustellen, dass es keinen Fall gibt, in dem ”a[i]–1” einen positiven Unendlichkeitswert und ”b[i]–1” einen negativen Unendlichkeitswert (oder umgekehrt) darstellt. Es sei daran erinnert, dass es notwendig war, eine Prüfung auf diesen Fall vorzunehmen, da das Addieren eines positiven Unendlichkeitswerts zu einem negativen Unendlichkeitswert einen NaN-Wert ergibt, der eine andere Ausnahmebedingung zur Folge hat als der positive oder der negative Unendlichkeitswert. Nehmen wir nun weiter an, dass der Fall, in dem eine der Eingaben in die Additionsoperation ein positiver Unendlichkeitswert und die andere Eingabe in die Additionsoperation ein negativer Unendlichkeitswert ist, tatsächlich sehr selten auftritt. In einem solchen Fall kann beschlossen werden, solche Prüfungen nach den Operationen ”a[i]–1” und ”b[i]–1” nicht hinzuzufügen und die Ergebnisse nur mit einem Speichern-und-Angeben-Befehl zu prüfen. Unter der Annahme, dass eine NaN-Ausnahmebedingung angetroffen wird, ist nun nicht bekannt, ob eine Ausnahmebedingung aufgrund dessen, dass einer von beiden oder aber beide a[i]- oder b[i]-Werte selbst NaN sind, oder aufgrund der Addition eines positiven Unendlichkeitswerts zu einem negativen Unendlichkeitswert erzeugt wird. In einem solchen Fall wiederholt die Ausnahmebedingungs-Behandlungsroutine in dieser dritten Stufe der Erfassung von Ausnahmebedingungen die Berechnungen und stellt nach jedem Schritt fest, ob ein positiver Unendlichkeitswert, ein negativer Unendlichkeitswert oder einen NaN-Wert berechnet wird. Mit einem solchen Schema lässt sich folglich dieselbe Meldungsstufe für Ausnahmebedingungen deutlich kostengünstiger erzielen, wenn man zunächst einmal davon ausgeht, dass Ausnahmebedingungen sehr selten eintreten.
  • Es sei angemerkt, dass die jeweilige gewünschte Stufe der Erfassung von Ausnahmebedingungen vor dem Start der Übersetzung des Quellcodes oder mindestens eines Teils des Quellcodes als ein Konfigurationsparameter an den Compiler übergeben werden kann. Ein Benutzer kann zum Beispiel die gewünschte Stufe der Erfassung von Ausnahmebedingungen angeben, indem er einen Wert eines Parameters an den Compiler übergibt, der daraufhin auf der Grundlage des Parameters die geeignete Logik zur Anwendung auf die Arbeitseinheiten, die von dem Compiler verarbeitet werden, auswählen kann. Alternativ kann der Compiler auf der Grundlage von vorhergesagten oder empirisch ermittelten Ausführungszeiten für die Arbeitseinheiten im Vergleich zu einem vorher festgelegten Schwellenwert dynamisch auswählen, welche Stufe der Erfassung von Ausnahmebedingungen verwendet wird. Der Compiler kann beispielsweise die Anzahl der Prozessorzyklen schätzen, die notwendig sind, um den geänderten SIMD-Code im Vergleich zu dem ursprünglichen skalaren Code auszuführen, und wenn der Unterschied höher als ein vorher festgelegter Schwellenwert ist, z. B. wenn der prozentuale Unterschied größer als ein annehmbarer Prozentsatz ist, kann eine andere Stufe der Erfassung von Ausnahmebedingungen verwendet werden, bei der man davon ausgeht, dass sie ein in Bezug auf die Prozessorzyklen effizienteres Ergebnis erzielt.
  • Mit den Mechanismen der der Veranschaulichung dienenden Ausführungsformen kann ein Compiler somit beim Optimieren und Übersetzen von ursprünglichem Quellcode, der für eine skalare Ausführung geschrieben ist, den ursprünglichen Quellcode in SIMD-vektorisierten Code umwandeln und dabei von den verschiedenen vorstehend genannten Mechanismen zum Verzögern von Ausnahmebedingungen und gegebenenfalls dem Einfügen von X-und-Angeben-Befehlen Gebrauch machen, um eine Prüfung auf spezielle Werte vorzunehmen, die ein Hinweis darauf sind, dass eine verzögerte Ausnahmebedingung eingetreten ist. Der Compiler kann einen beliebigen oder eine Kombination der verschiedenen vorstehend genannten Mechanismen verwenden, um eine optimale Leistungsfähigkeit des Codes zu erzielen. Insbesondere kann der Compiler die Logik verwenden, die einen oder mehrere der vorstehend mit Bezug auf die 10 bis 13C aufgezeigten Mechanismen durchführt, um in einer Arbeitseinheit einen Einfügepunkt für das Einfügen eines X-und-Angeben-Befehls auszuwählen, um eine Prüfung auf einen speziellen Wert vorzunehmen, der ein Hinweis auf eine verzögerte Ausnahmebedingung ist. Eine solche Auswahl eines Einfügepunkts verwendet die jeweilige Definition von ”lebendigen” Werten sowie ”prüfbaren” und ”unprüfbaren” oder ”nicht prüfbaren” Werten, die vorstehend angegeben wurde.
  • Wie vorstehend erwähnt wurde, sollte es sich verstehen, dass die der Veranschaulichung dienenden Ausführungsformen die Form einer ganz in Hardware realisierten Ausführung, einer ganz in Software realisierten Ausführung oder einer Ausführung annehmen können, die sowohl Hardware- als auch Software-Elemente enthält. In einer beispielhaften Ausführungsform werden die Mechanismen der der Veranschaulichung dienenden Ausführungsformen in Software oder Programmcode ausgeführt, die beziehungsweise der Firmware, residente Software, Microcode usw. beinhaltet, jedoch nicht darauf beschränkt ist.
  • Ein Datenverarbeitungssystem, das zur Speicherung und/oder Ausführung von Programmcode geeignet ist, enthält mindestens einen Prozessor, der über einen Systembus direkt oder indirekt mit Speicherelementen verbunden ist. Die Speicherelemente können einen lokalen Speicher, der während der tatsächlichen Ausführung des Programmcodes verwendet wird, einen Massenspeicher und Cachespeicher beinhalten, die eine vorübergehende Speicherung von mindestens einem Teil des Programmcodes ermöglichen, um die Häufigkeit zu verringern, mit der Code während der Ausführung aus dem Massenspeicher abgerufen werden muss.
  • Eingabe-/Ausgabe- oder E/A-Einheiten (darunter Tastaturen, Bildschirme, Zeigegeräte usw., jedoch nicht auf diese beschränkt) können entweder direkt oder über dazwischenliegende E/A-Steuereinheiten mit dem System verbunden werden. Netzwerkadapter können ebenfalls mit dem System verbunden werden, damit das Datenverarbeitungssystem mit anderen Datenverarbeitungssystemen oder fernen Druckern oder Speichereinheiten über dazwischenliegende private oder öffentliche Netzwerke verbunden werden kann. Modems, Kabelmodems und Ethernet-Karten sind nur einige der aktuell verfügbaren Arten von Netzwerkadaptern.
  • Die Beschreibung der vorliegenden Erfindung erfolgte zum Zweck der Veranschaulichung und Erläuterung, und sie erhebt keinen Anspruch auf Vollständigkeit und ist auch nicht als auf die Erfindung in der beschriebenen Form beschränkt zu verstehen. Für den Fachmann sind viele Ab- und Veränderungen erkennbar. Die Ausführungsform wurde gewählt und beschrieben, um die Grundgedanken der Erfindung und die praktische Anwendung bestmöglich zu erklären und um anderen Fachleuten das Verständnis der Erfindung hinsichtlich verschiedener Ausführungsformen mit verschiedenen Änderungen, wie sie für die jeweilige vorgesehene Verwendung geeignet sind, zu ermöglichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 20080034357 A1 [0008]
  • Zitierte Nicht-Patentliteratur
    • Gschwind u. a. führen in ”Synergistic Processing in Cell's Multicore Architecture”, IEEE Micro, März 2006 [0008]
    • www.redbooks.ibm.com/redpapers/pdfs/redp3890.pdf [0057]

Claims (20)

  1. Verfahren in einem Datenverarbeitungssystem (100) zum Einfügen von Befehlen in Code (620), um eine Prüfung auf datenpfadinterne spezielle Ausnahmebedingungswerte (840) vorzunehmen, die ein Hinweis auf verzögerte Ausnahmebedingungen sind, wobei das Verfahren Folgendes umfasst: Auswerten eines Teils eines ersten Codes (620) durch einen Compiler (610), welcher auf einem Prozessor (110, 120 bis 134) des Datenverarbeitungssystems (100) Operationen ausführt, um mindestens einen nichtspekulativen Befehl, der eine festgelegte nichtspekulative Operation in dem ersten Code (620) durchführt, zu ermitteln, welcher für den Ersatz durch einen Operation-und-Angeben-Befehl in Frage kommt, der die festgelegte nichtspekulative Operation durchführt und des Weiteren eine Angabe-Operation durchführt, um dem Operation-und-Angeben-Befehl (1020) jedwede Ausnahmebedingungen anzugeben, die datenpfadinternen speziellen Ausnahmebedingungswerten (840) entsprechen, welche in Vektorplätzen von Eingängen eines Vektorregisters vorhanden sind; Ersetzen, durch den Compiler (610), der auf dem Prozessor (110, 120 bis 134) Operationen ausführt, des mindestens einen nichtspekulativen Befehls, welcher eine festgelegte nichtspekulative Operation in dem ersten Code durchführt, durch den Operation-und-Angeben-Befehl (1080); und Erzeugen, durch den Compiler (610), der auf dem Prozessor (110, 120 bis 134) Operationen ausführt, von zweitem Code (630) auf der Grundlage des Ersetzens des mindestens einen nichtspekulativen Befehls in dem ersten Code (620).
  2. Verfahren nach Anspruch 1, wobei der Operation-und-Angeben-Befehl (1080) entweder ein Speichern-und-Angeben-Befehl, der eine Speicheroperation in den Speicher (163 bis 170, 199) durchführt und eine Ausnahmebedingung angibt, die einem datenpfadinternen speziellen Ausnahmebedingungswert (840), sofern vorhanden, entspricht, ein Verschieben-und-Angeben-Befehl, der eine Vektoreingabe aus einem Vektorregister in ein anderes Vektorregister verschiebt und eine Ausnahmebedingung angibt, die einem datenpfadinternen speziellen Ausnahmebedingungswert (840), sofern vorhanden, entspricht, oder ein Berechnung-und-Angeben-Befehl ist, der eine Berechnungsoperation an Eingabevektoren durchführt, eine Vektorausgabe erzeugt und eine Ausnahmebedingung angibt, die einem datenpfadinternen speziellen Ausnahmebedingungswert (840), sofern vorhanden, entspricht.
  3. Verfahren nach Anspruch 1, wobei der erste Code (620) einen Single-Instruction-Multiple-Data-(SIMD-)Code beinhaltet.
  4. Verfahren nach Anspruch 1, wobei das Auswerten des Teils des ersten Codes (620) das Auswerten eines Abhängigkeitsgraphen (1125) des Teils des ersten Codes (620) umfasst, um einen Knoten in dem Abhängigkeitsgraphen (1125) zu ermitteln, an dem ein Operation-und-Angeben-Befehl als Ersatz für einen Befehl, der dem Knoten entspricht, eingefügt werden kann.
  5. Verfahren nach Anspruch 4, wobei das Auswerten des Teils des ersten Codes (620) des Weiteren die Feststellung umfasst, ob ein Vektor-Ausgaberegister (1130) des Befehls, der dem Knoten entspricht, prüfbar oder unprüfbar ist, wobei: ein Vektor-Ausgaberegister (1130) prüfbar ist, wenn jeder Wert, der in jedem Platz des Vektor-Ausgaberegisters (1130) gespeichert ist, prüfbar ist, ein Wert prüfbar ist, wenn er ein Gleitkommawert ist, der lebendig ist und tatsächlich berechnet wurde oder wenn gewährleistet ist, dass der Wert keine Ausnahmebedingung verursacht, und ein Wert lebendig ist, wenn sich der Wert auf ein Speicherabbild eines Speichers (163 bis 170, 199) des Datenverarbeitungssystems (100) oder auf einen Entscheidungsprozess des ersten Codes (620) auswirkt oder wenn sich eine nachfolgende Berechnung, die den Wert verwendet, auf das Speicherabbild oder den Entscheidungsprozess auswirkt.
  6. Verfahren nach Anspruch 5, wobei das Ersetzen des mindestens einen nichtspekulativen Befehls durch den Operation-und-Angeben-Befehl (1080) das Einfügen des Operation-und-Angeben-Befehls an einem Knoten in dem Abhängigkeitsgraphen (1125) des Teils des ersten Codes (620) umfasst, an dem lebendige Gleitkommawerte der Vektor-Ausgaberegister (1130) des Teils des ersten Codes (620) auf den datenpfadinternen speziellen Ausnahmebedingungswert (840) geprüft werden.
  7. Verfahren nach Anspruch 5, wobei das Ersetzen des mindestens einen nichtspekulativen Befehls durch den Operation-und-Angeben-Befehl das Einfügen des Operation-und-Angeben-Befehls (1080) an jedem Knoten in dem Abhängigkeitsgraphen (1125) des Teils des ersten Codes (620) umfasst, an dem eine Berechnung durchgeführt wird.
  8. Verfahren nach Anspruch 5, wobei das Auswerten des Teils des ersten Codes (620) des Weiteren Folgendes umfasst: Feststellen, ob es mindestens einen Knoten in dem Abhängigkeitsgraphen gibt, der einem Befehl zugehörig ist, dessen Ausgabe-Vektorregister prüfbar ist (1030); als Reaktion auf die Feststellung, dass es nicht mindestens einen Knoten in dem Abhängigkeitsgraphen (1125) gibt, der einem Befehl zugehörig ist, dessen Ausgabe-Vektorregister (1130) prüfbar ist, Feststellen, ob mindestens ein Knoten in dem Abhängigkeitsgraphen (1125) ein umwandelbarer Knoten ist, der einem Befehl zugehörig ist, dessen Ausgabe-Vektorregister (1130) in ein prüfbares Ausgabe-Vektorregister (1050) umgewandelt werden kann; und Umwandeln des Befehls, der dem mindestens einen umwandelbaren Knoten (1070) zugehörig ist, so dass das Ausgabe-Vektorregister (1130) des Befehls, der dem mindestens einen umwandelbaren Knoten zugehörig ist, prüfbar ist.
  9. Verfahren nach Anspruch 8, wobei das Umwandeln des Befehls, der dem mindestens einen umwandelbaren Knoten (1070) zugehörig ist, das Maskieren von nicht prüfbaren Werten in dem Ausgabe-Vektorregister umfasst.
  10. Verfahren nach Anspruch 8, wobei das Umwandeln des Befehls, der dem mindestens einen umwandelbaren Knoten (1070) zugehörig ist, das Durchführen eines Schleifenschälvorgangs umfasst, so dass das Ausgabe-Vektorregister nur prüfbare Werte speichert.
  11. Verfahren nach Anspruch 8, das des Weiteren Folgendes umfasst: Feststellen, ob Kosten, die der Umwandlung des Befehls zugehörig sind, welcher dem mindestens einen umwandelbaren Knoten zugehörig ist, einen Schwellenwert übersteigen; und als Reaktion darauf, dass die Kosten den Schwellenwert übersteigen, Nichtdurchführen der Umwandlung des Befehls, welcher dem mindestens einen umwandelbaren Knoten zugehörig ist.
  12. Verfahren nach Anspruch 11, wobei, wenn die Kosten den Schwellenwert übersteigen, die Vektorisierung des zweiten Codes (630) zumindest teilweise rückgängig gemacht wird.
  13. Verfahren nach Anspruch 1, wobei das Datenverarbeitungssystem (100) so konfiguriert ist, dass es als Reaktion darauf, dass ein spekulativer Befehl eine Ausnahmebedingung (820) erzeugt, ohne die Ausnahmebedingungsbehandlung (840) zu starten, die datenpfadinternen speziellen Ausnahmebedingungswerte in Vektor-Ausgaberegistern (1130) speichert.
  14. Verfahren nach Anspruch 1, wobei das Ersetzen des mindestens einen nichtspekulativen Befehls durch den Operation-und-Angeben-Befehl (1080) das Einfügen des Operation-und-Angeben-Befehls an einem Knoten in dem Abhängigkeitsgraphen (1125) des Teils des ersten Codes (620) umfasst, an dem eine Vergleichsoperation durchgeführt wird.
  15. Verfahren nach Anspruch 1, wobei die datenpfadinternen speziellen Ausnahmebedingungswerte mindestens ein Not-a-Number-(NaN-)Wert (920), ein positiver Unendlichkeitswert (950) oder ein negativer Unendlichkeitswert (950) sind.
  16. Verfahren nach Anspruch 15, wobei die datenpfadinternen speziellen Ausnahmebedingungswerte, die von dem Operation-und-Angeben-Befehl ermittelt werden, von einer Konfigurationseinstellung einer Rechnereinheit gesteuert werden, auf der der zweite Code (630) ausgeführt wird, wobei die Konfigurationseinstellung einen oder mehrere der folgenden Werte als zur Ermittlung durch den Operation-und-Angeben-Befehl aktivierte Werte angibt: der NaN-Wert (920), der positive Unendlichkeitswert (950) oder der negativen Unendlichkeitswert (950).
  17. Verfahren nach Anspruch 1, wobei das Erzeugen des zweiten Codes (630) das Erzeugen von spekulativen Befehlen in dem zweiten Code (630) umfasst, die Ausnahmebedingungen verzögern, indem sie einen datenpfadinternen speziellen Ausnahmebedingungswert (840) in ein Vektorelement eines entsprechenden Vektorregisters (1130) einfügen, das später von dem Operation-und-Angeben-Befehl geprüft wird.
  18. Verfahren nach Anspruch 5, das des Weiteren Folgendes umfasst: Bereitstellen einer Unterbrechungsbehandlungsroutine, die erkennt, ob eine Unterbrechung auf einen prüfbaren Wert oder auf einen nicht prüfbaren Wert in einem Vektor-Ausgaberegister zurückzuführen ist, wobei die Unterbrechungsbehandlungsroutine Operationen durchführt, um die Unterbrechung als Reaktion darauf zu behandeln, dass die Unterbrechung auf einen prüfbaren Wert zurückzuführen ist, und wobei die Unterbrechungsbehandlungsroutine die Unterbrechung als Reaktion darauf, dass die Unterbrechung auf einen nicht prüfbaren Wert zurückzuführen ist, ignoriert.
  19. Rechnerprogrammprodukt, das ein rechnerlesbares Speichermedium mit einem darauf aufgezeichneten rechnerlesbaren Programm umfasst, wobei das rechnerlesbare Programm, wenn es auf einer Rechnereinheit (100) ausgeführt wird, bewirkt, dass die Rechnereinheit (100) Folgendes durchführt: Auswerten eines Teils eines ersten Codes (620), um mindestens einen nichtspekulativen Befehl, der eine festgelegte nichtspekulative Operation in dem ersten Code (620) durchführt, zu ermitteln, welcher für den Ersatz durch einen Operation-und-Angeben-Befehl in Frage kommt, der die festgelegte nichtspekulative Operation durchführt und des Weiteren eine Angabe-Operation durchführt, um dem Operation-und-Angeben-Befehl (1020) jedwede Ausnahmebedingungen anzugeben, die datenpfadinternen speziellen Ausnahmebedingungswerten (840) entsprechen, welche in Vektorplätzen von Eingängen eines Vektorregisters vorhanden sind; Ersetzen des mindestens einen nichtspekulativen Befehls, der eine festgelegte nichtspekulative Operation in dem ersten Code (620) durchführt, durch den Operation-und-Angeben-Befehl (1080); und Erzeugen von zweitem Code (630) auf der Grundlage des Ersetzens des mindestens einen nichtspekulativen Befehls.
  20. Verfahren in einem Datenverarbeitungssystem (100) zum Einfügen von Befehlen in Code, um eine Prüfung auf spezielle Werte (840) vorzunehmen, die ein Hinweis auf verzögerte Ausnahmebedingungen sind, wobei das Verfahren Folgendes umfasst: Auswerten eines ersten Codes (620) durch einen Prozessor (110, 120 bis 134) des Datenverarbeitungssystems (100), um mindestens einen nichtspekulativen Befehl, der eine festgelegte nichtspekulative Operation in dem ersten Code (620) durchführt, zu ermitteln, welcher für den Ersatz durch einen Operation-und-Angeben-Befehl in Frage kommt, der die festgelegte nichtspekulative Operation durchführt und des Weiteren eine Angabe-Operation durchführt, um dem Operation-und-Angeben-Befehl (1020) jedwede Ausnahmebedingungen anzugeben, die datenpfadinternen speziellen Ausnahmebedingungswerten (840) entsprechen, welche in Vektorplätzen von Eingängen eines Vektorregisters vorhanden sind; Ersetzen, durch den Prozessor (110, 120 bis 134), des mindestens einen nichtspekulativen Befehls, der eine festgelegte nichtspekulative Operation in dem ersten Code (620) durchführt, durch den Operation-und-Angeben-Befehl (1080); Erzeugen, durch den Prozessor (110, 120 bis 134), von zweitem Code (630) auf der Grundlage des Ersetzens des mindestens einen nichtspekulativen Befehls; Ausführen des zweiten Codes (630) in dem Prozessor (110, 120 bis 134) oder in einem anderen Prozessor (110, 120 bis 134) des Datenverarbeitungssystems (100) oder in einer anderen Rechnereinheit; Zurückverfolgen von Ausnahmebedingungen während der Ausführung von spekulativen Befehlen in dem zweiten Code (630) unter Verwendung von speziellen Werten (840), die ein Hinweis auf die Ausnahmebedingungen sind, ohne eine Behandlungsroutine für Ausnahmebedingungen aufzurufen; und Ausführen des Operation-und-Angeben-Befehls in dem zweiten Code (630), um die speziellen Werte (840) festzustellen und um die Operation-und-Angabe-Operation durchzuführen, wobei die Angabe-Operation bewirkt, dass die Behandlungsroutine für Ausnahmebedingungen aufgerufen wird.
DE112010003308T 2009-08-19 2010-07-19 Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code Ceased DE112010003308T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/543,628 US8458684B2 (en) 2009-08-19 2009-08-19 Insertion of operation-and-indicate instructions for optimized SIMD code
US12/543,628 2009-08-19
PCT/US2010/042377 WO2011022142A1 (en) 2009-08-19 2010-07-19 Insertion of operation-and-indicate instructions for optimized simd code

Publications (1)

Publication Number Publication Date
DE112010003308T5 true DE112010003308T5 (de) 2012-06-21

Family

ID=43606222

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112010003308T Ceased DE112010003308T5 (de) 2009-08-19 2010-07-19 Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code

Country Status (6)

Country Link
US (1) US8458684B2 (de)
JP (1) JP5583770B2 (de)
CN (1) CN102473104B (de)
DE (1) DE112010003308T5 (de)
GB (1) GB2486117B (de)
WO (1) WO2011022142A1 (de)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7779399B2 (en) * 2005-05-16 2010-08-17 Armorize Technologies, Inc. System and method for securing web application code and verifying correctness of software
US8327344B2 (en) * 2008-10-14 2012-12-04 International Business Machines Corporation Array reference safety analysis in the presence of loops with conditional control flow
US8423983B2 (en) * 2008-10-14 2013-04-16 International Business Machines Corporation Generating and executing programs for a floating point single instruction multiple data instruction set architecture
US9652231B2 (en) * 2008-10-14 2017-05-16 International Business Machines Corporation All-to-all permutation of vector elements based on a permutation pattern encoded in mantissa and exponent bits in a floating-point SIMD architecture
US9727336B2 (en) 2011-09-16 2017-08-08 International Business Machines Corporation Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers
US9411585B2 (en) 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
US8892946B2 (en) * 2011-12-15 2014-11-18 International Business Machines Corporation Verifying speculative multithreading in an application
US9632980B2 (en) * 2011-12-23 2017-04-25 Intel Corporation Apparatus and method of mask permute instructions
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
WO2013095620A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method of improved insert instructions
US9268569B2 (en) * 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
EP2757468A1 (de) * 2013-01-22 2014-07-23 Siemens Aktiengesellschaft Vorrichtung und Verfahren zur Verwaltung eines Softwareentwicklungs- und -wartungssystems
US9823924B2 (en) * 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US20140244987A1 (en) * 2013-02-22 2014-08-28 Mips Technologies, Inc. Precision Exception Signaling for Multiple Data Architecture
CN103207786B (zh) * 2013-04-28 2016-03-23 中国人民解放军信息工程大学 渐进式智能回溯向量化代码调优方法
US9659046B2 (en) * 2013-07-31 2017-05-23 Oracle Inernational Corporation Probing a hash table using vectorized instructions
US9256631B2 (en) 2013-07-31 2016-02-09 Oracle International Corporation Building a hash table using vectorized instructions
US20150052400A1 (en) * 2013-08-19 2015-02-19 Concurix Corporation Breakpoint Setting Through a Debugger User Interface
CA2831711A1 (en) * 2013-10-31 2015-04-30 Ibm Canada Limited - Ibm Canada Limitee Performing safe conditional-load and conditional-store operations
US20150205609A1 (en) 2013-12-11 2015-07-23 Mill Computing, Inc. Computer Processor Employing Operand Data With Associated Meta-Data
US9501268B2 (en) * 2013-12-23 2016-11-22 International Business Machines Corporation Generating SIMD code from code statements that include non-isomorphic code statements
US9594696B1 (en) * 2014-12-09 2017-03-14 Parallel Machines Ltd. Systems and methods for automatic generation of parallel data processing code
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9696992B2 (en) 2014-12-23 2017-07-04 Intel Corporation Apparatus and method for performing a check to optimize instruction flow
US9880821B2 (en) * 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9720691B2 (en) * 2015-09-23 2017-08-01 Qualcomm Incorporated Speculative scalarization in vector processing
GB2543302B (en) * 2015-10-14 2018-03-21 Advanced Risc Mach Ltd Vector load instruction
US10671398B2 (en) * 2017-08-02 2020-06-02 International Business Machines Corporation Low-overhead, low-latency operand dependency tracking for instructions operating on register pairs in a processor core
US10534609B2 (en) * 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11176084B2 (en) * 2017-11-09 2021-11-16 International Business Machines Corporation SIMD instruction sorting pre-sorted source register's data elements into a first ascending order destination register and a second descending destination register
WO2019241979A1 (en) * 2018-06-22 2019-12-26 Huawei Technologies Co., Ltd. Method of deadlock detection and synchronization-aware optimizations on asynchronous processor architectures
US11169804B2 (en) * 2018-09-24 2021-11-09 Oracle International Corporation Method for vectorizing d-heaps using horizontal aggregation SIMD instructions
CN109947479A (zh) * 2019-01-29 2019-06-28 安谋科技(中国)有限公司 指令执行方法及其处理器、介质和系统
CN110806897B (zh) * 2019-10-29 2022-02-01 中国人民解放军战略支援部队信息工程大学 面向多代码粒度的向量并行性发掘方法
JP7295469B2 (ja) 2020-01-07 2023-06-21 富士通株式会社 関数生成プログラム、関数生成方法、及び情報処理装置
US11222070B2 (en) 2020-02-27 2022-01-11 Oracle International Corporation Vectorized hash tables
US11630864B2 (en) 2020-02-27 2023-04-18 Oracle International Corporation Vectorized queues for shortest-path graph searches
US11461297B1 (en) 2021-06-09 2022-10-04 T-Mobile Usa, Inc. Ensuring database integrity using a data flow in a graph, such as for use by a wireless telecommunications service provider
CN117472388B (zh) * 2023-12-28 2024-04-05 睿思芯科(深圳)技术有限公司 一种优化程序性能的方法、系统及相关设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080034357A1 (en) 2006-08-04 2008-02-07 Ibm Corporation Method and Apparatus for Generating Data Parallel Select Operations in a Pervasively Data Parallel System

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
US5778219A (en) * 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US5386563A (en) * 1992-10-13 1995-01-31 Advanced Risc Machines Limited Register substitution during exception processing
EP0678813B1 (de) * 1994-03-07 1997-10-15 Nec Corporation Gleitkommamultiplizierer
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5644742A (en) * 1995-02-14 1997-07-01 Hal Computer Systems, Inc. Processor structure and method for a time-out checkpoint
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5748936A (en) * 1996-05-30 1998-05-05 Hewlett-Packard Company Method and system for supporting speculative execution using a speculative look-aside table
US5915117A (en) * 1997-10-13 1999-06-22 Institute For The Development Of Emerging Architectures, L.L.C. Computer architecture for the deferral of exceptions on speculative instructions
US6301705B1 (en) * 1998-10-01 2001-10-09 Institute For The Development Of Emerging Architectures, L.L.C. System and method for deferring exceptions generated during speculative execution
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
JP3334658B2 (ja) * 1999-01-07 2002-10-15 三菱マテリアル株式会社 無線通信処理装置およびその記録媒体
US6519694B2 (en) * 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US6675292B2 (en) * 1999-08-13 2004-01-06 Sun Microsystems, Inc. Exception handling for SIMD floating point-instructions using a floating point status register to report exceptions
US20020083311A1 (en) * 2000-12-27 2002-06-27 Paver Nigel C. Method and computer program for single instruction multiple data management
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
DE10206764A1 (de) * 2002-02-19 2003-08-28 Bosch Gmbh Robert Verfahren zum Einparken eines Fahrzeugs
AU2003286131A1 (en) * 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7613950B2 (en) * 2004-02-27 2009-11-03 Hewlett-Packard Development Company, L.P. Detecting floating point hardware failures
US7826380B2 (en) * 2005-03-30 2010-11-02 International Business Machines Corporation Apparatus, system, and method for data tracking
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
CN100555240C (zh) * 2007-01-16 2009-10-28 国际商业机器公司 用于诊断应用程序的方法和系统
US8103858B2 (en) * 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080034357A1 (en) 2006-08-04 2008-02-07 Ibm Corporation Method and Apparatus for Generating Data Parallel Select Operations in a Pervasively Data Parallel System

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Gschwind u. a. führen in "Synergistic Processing in Cell's Multicore Architecture", IEEE Micro, März 2006
www.redbooks.ibm.com/redpapers/pdfs/redp3890.pdf

Also Published As

Publication number Publication date
GB2486117A (en) 2012-06-06
GB2486117B (en) 2017-03-22
WO2011022142A1 (en) 2011-02-24
CN102473104B (zh) 2015-05-20
JP2013502648A (ja) 2013-01-24
US20110047359A1 (en) 2011-02-24
CN102473104A (zh) 2012-05-23
US8458684B2 (en) 2013-06-04
JP5583770B2 (ja) 2014-09-03
GB201204358D0 (en) 2012-04-25

Similar Documents

Publication Publication Date Title
DE112010003308T5 (de) Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code
EP3651017B1 (de) Systeme und verfahren zum ausführen von 16-bit-gleitkomma-matrix-punkt-produktanweisungen
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
DE102018005169A1 (de) Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018006735A1 (de) Prozessoren und Verfahren für konfigurierbares Clock-Gating in einem räumlichen Array
DE102018006889A1 (de) Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array
DE102018126650A1 (de) Einrichtung, verfahren und systeme für datenspeicherkonsistenz in einem konfigurierbaren räumlichen beschleuniger
US8327344B2 (en) Array reference safety analysis in the presence of loops with conditional control flow
EP0682309A2 (de) Datenverarbeitungssystem, geeignet zur Verzweigung eines Einzelbefehls durch mehrere Bedingungscodes aus mehreren Verarbeitungselementen
EP3289444B1 (de) Explizite befehlsplanerstatusinformationen für einen prozessor
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102008061062A1 (de) Befehle und Logik zum Durchführen von Maskenlade- und -speicheroperationen
DE102013111605A1 (de) Reduzierung des Leistungsverbrauchs in einer fusionierten Multiplizier-Addier-(FMA)-Einheit in Reaktion auf Eingangsdatenwerte
EP3757769B1 (de) Systeme und verfahren zum überspringen von inkonsequenten matrixoperationen
CN107810486B (zh) 锁定用于原子地执行的指令组的操作数的值
DE112013003741T5 (de) Systeme, Vorrichtungen und Verfahren zum Durchführen einer Konfliktdetektion unf einer Übertragung von Inhalten eines Registers an Datenelementpositionen eines anderen Registers
EP3716054A2 (de) Verschachtelte pipeline von gleitkomma-addern
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten

Legal Events

Date Code Title Description
R163 Identified publications notified
R012 Request for examination validly filed
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R016 Response to examination communication
R003 Refusal decision now final