DE102015015182A1 - Systems, devices, and methods for k-nearest neighbor search - Google Patents

Systems, devices, and methods for k-nearest neighbor search Download PDF

Info

Publication number
DE102015015182A1
DE102015015182A1 DE102015015182.7A DE102015015182A DE102015015182A1 DE 102015015182 A1 DE102015015182 A1 DE 102015015182A1 DE 102015015182 A DE102015015182 A DE 102015015182A DE 102015015182 A1 DE102015015182 A1 DE 102015015182A1
Authority
DE
Germany
Prior art keywords
vector
bit
sorting
vectors
distance
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102015015182.7A
Other languages
German (de)
Inventor
Himanshu Kaul
Mark A. Anders
Sanu K. Methew
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/582,607 external-priority patent/US9626334B2/en
Priority claimed from US14/944,828 external-priority patent/US10303735B2/en
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102015015182A1 publication Critical patent/DE102015015182A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer Hardware Design (AREA)
  • Complex Calculations (AREA)

Abstract

Beschrieben sind Systeme, Vorrichtungen und Verfahren für k-Nächste-Nachbarn-(KNN-)Suchen. Insbesondere sind Ausführungsformen eines KNN-Beschleunigers und dessen Verwendungen beschrieben. In manchen Ausführungsformen umfasst der KNN-Beschleuniger eine Vielzahl von Vektorteilabstandsberechnungsschaltungen jeweils zum Berechnen einer Teilsumme, ein Minimumsortiernetzwerk zum Sortieren von Teilsummen aus der Vielzahl von Vektorteilabstandsberechnungsschaltungen, um k-Nächste-Nachbarn-Übereinstimmungen zu finden, und eine globale Steuerschaltung zum Steuern von Aspekten von Vorgängen der Vielzahl von Vektorteilabstandsberechnungsschaltungen.Described are systems, apparatus and methods for k nearest neighbor (KNN) searches. In particular, embodiments of an CNN accelerator and its uses are described. In some embodiments, the CNN accelerator includes a plurality of vector fraction calculation circuits each for calculating a partial sum, a minimum sorting network for sorting partial sums of the plurality of vector partial spacing calculation circuits to find k nearest neighbor matches, and a global control circuit for controlling aspects of Operations of the plurality of vector pitch calculating circuits.

Description

Gebiet der ErfindungField of the invention

Das Gebiet der Erfindung betrifft im Allgemeinen Computerprozessorarchitektur und im Speziellen Nächste-Nachbarn-Suche.The field of the invention generally relates to computer processor architecture, and more particularly to nearest neighbor searching.

Hintergrundbackground

Es gibt zahlreiche Anwendungen, bei denen eine schnelle und effiziente Nächste-Nachbarn-Suche für mehrdimensionale Merkmale (Punkte) eines Datensatzes erstrebenswert sind. Beispielsweise ist diese Art von Suche in den Bereichen wie z. B. Bildrekonstruktion und maschinellem Lernen nützlich. Es gibt mehrere Arten der Nächste-Nachbarn-Datensatzsuche. Beim Suchen nach nächsten Nachbarn wird unter Vorgabe eines Satzes an Punkten in einem Raum und einer Eingabeinstanz (Abfragepunkt) eine Suche durchgeführt, um in einem Satz den der Eingabeinstanz nächstgelegenen Punkt zu finden.There are numerous applications where fast and efficient neighbor neighbor search for multi-dimensional features (points) of a data set is desirable. For example, this type of search in areas such. Image reconstruction and machine learning. There are several types of Next-neighbor record search. When searching for nearest neighbors, a search is made by specifying a set of points in a space and an input instance (query point) to find in a sentence the closest point to the input instance.

Kurzbeschreibung der ZeichnungenBrief description of the drawings

Die vorliegende Erfindung ist in den Figuren der beigeschlossenen Zeichnungen beispielhaft und nicht einschränkend veranschaulicht, wobei gleiche Bezugszeichen gleiche Elemente anzeigen und wobei:The present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings, wherein like numerals indicate like elements, and wherein:

1 eine hochwertige kNN-Beschleunigerorganisation gemäß einer Ausführungsform zeigt. 1 shows a high quality kNN accelerator organization according to one embodiment.

2 eine beispielhafte Vektorteilabstandsberechnungsschaltung gemäß einer Ausführungsform zeigt. 2 an exemplary vector pitch calculation circuit according to one embodiment.

3 eine beispielhafte Vektorteilabstands-Summe-der-Quadratdifferenzen-Datenelementberechnungsschaltung gemäß einer Ausführungsform zeigt. 3 an exemplary vector pitch sum-of-squares difference data element calculation circuit according to one embodiment.

4 eine beispielhafte Vektorteilabstands-Summe-der-absoluten-Differenzen-Datenelementberechnungsschaltung gemäß einer Ausführungsform zeigt. 4 FIG. 10 shows an exemplary vector sub-sum-of-absolute-difference data element calculation circuit according to an embodiment. FIG.

5 eine beispielhafte lokale Steuerschaltung gemäß einer Ausführungsform zeigt. 5 an exemplary local control circuit according to an embodiment shows.

6 eine beispielhafte Manhattan-Abstand-Sortierverarbeitung gemäß einer Ausführungsform zeigt. 6 an exemplary Manhattan distance sorting processing according to an embodiment.

7 eine beispielhafte Datenelement-Euklidischer-Abstand-Sortierverarbeitung gemäß einer Ausführungsform zeigt. 7 an exemplary data element Euclidean distance sorting processing according to an embodiment.

8 einen beispielhaften Sortiervorgang unter Verwendung von Teilabständen gemäß einer Ausführungsform zeigt. 8th shows an example sorting process using pitches according to one embodiment.

9 eine beispielhafte globale Steuerschaltung gemäß einer Ausführungsform zeigt. 9 an exemplary global control circuit according to an embodiment shows.

10 eine beispielhafte Ebene-0-Vergleichsknotenschaltung gemäß einer Ausführungsform zeigt. 10 an exemplary level 0 compare node circuit according to one embodiment.

11 eine beispielhafte Ebene-k-Vergleichsknotenschaltung gemäß einer Ausführungsform zeigt. 11 an exemplary level-k comparison node circuit according to one embodiment.

12 eine beispielhafte 8-Bit/16-Bit-rekonfigurierbare Berechnungsschaltung gemäß einer Ausführungsform zeigt. 12 FIG. 10 shows an exemplary 8-bit / 16-bit reconfigurable computing circuit according to one embodiment. FIG.

13 beispielhafte Teilabstandsberechnungen für Quadratsummen mit 16-Bit-Elementen gemäß einer Ausführungsform zeigt. 13 FIG. 16 shows example pitch-distance calculations for 16-bit squares squares according to one embodiment.

14 eine Kosinus-Ähnlichkeitsberechnungsschaltung (1d Abstand) gemäß einer Ausführungsform und beispielhafte Teilabstandsberechnungen für Skalarprodukte gemäß einer Ausführungsform zeigt. 14 a cosine similarity calculation circuit (1d distance) according to an embodiment and exemplary scalar product pitch calculations according to an embodiment.

15 ein beispielhaftes Verfahren zur kNN-Suche gemäß einer Ausführungsform zeigt. 15 shows an exemplary method for kNN search according to an embodiment.

16A ein Blockschaltbild ist, das sowohl eine beispielhafte In-order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-order-Problem/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt. 16A FIG. 12 is a block diagram showing both an exemplary in-order pipeline and an exemplary register rename out-of-order problem / execution pipeline in accordance with embodiments of the invention. FIG.

16B ein Blockschaltbild ist, das sowohl eine beispielhafte Ausführungsform eines In-order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Problem/Ausführungs-Architekturkern zur Einbindung in einen Prozessor gemäß Ausführungsformen der Erfindung zeigt. 16B 12 is a block diagram showing both an exemplary embodiment of an in-order architecture core and an exemplary register renaming out-of-order problem / execution architecture core for incorporation into a processor in accordance with embodiments of the invention.

die 17A und B ein Blockschaltbild einer konkreteren beispielhaften In-order-Kernarchitektur zeigen, wobei der Kern einer von mehreren Logikblöcken (darunter andere Kerne desselben Typs und/oder unterschiedlicher Typen) in einem Chip wäre.the 17A and Figure B shows a block diagram of a more concrete example in-order core architecture, where the core would be one of several logic blocks (including other cores of the same type and / or different types) in a chip.

18 ein Blockschaltbild eines Prozessors 1800, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung ist. 18 a block diagram of a processor 1800 which may have more than one core, may have an integrated memory controller, and may have integrated graphics in accordance with embodiments of the invention.

die 19 bis 22 Blockschaltbilder beispielhafter Computerarchitekturen sind.the 19 to 22 Block diagrams of exemplary computer architectures are.

23 ein Blockschaltbild ist, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln von Binärbefehlen in einen Quellbefehlssatz binären Befehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. 23 FIG. 12 is a block diagram contrasting the use of a software instruction converter to convert binary instructions into a source instruction set to binary instructions in a target instruction set in accordance with embodiments of the invention. FIG.

Ausführliche BeschreibungDetailed description

In der folgenden Beschreibung sind zahlreiche konkrete Details dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung ohne diese konkreten Details angewandt werden können. In anderen Fällen wurden hinlänglich bekannte Schaltungen, Strukturen und Techniken nicht im Detail dargestellt, um das Verständnis dieser Beschreibung nicht zu erschweren.In the following description, numerous specific details are set forth. It is understood, however, that embodiments of the invention may be practiced without these specific details. In other instances, well-known circuits, structures, and techniques have not been illustrated in detail so as not to obscure the understanding of this description.

Bezugnahmen in der Beschreibung auf „eine Ausführungsform”, „ein Ausführungsbeispiel” etc. zeigen an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder Eigenschaft umfassen kann, aber nicht jede Ausführungsform das bestimmte Merkmal, die bestimmte Struktur oder Eigenschaft zwingend umfassen muss. Außerdem beziehen sich solche Wendungen nicht zwingend auf dieselbe Ausführungsform. Wenn ferner ein bestimmtes Merkmal, eine bestimmte Struktur oder Eigenschaft in Verbindung mit einer Ausführungsform beschrieben ist, versteht sich, dass es Fachleuten zuzutrauen ist, ein solches Merkmal, eine solche Struktur oder Eigenschaft in Verbindung mit anderen Ausführungsformen in Betracht zu ziehen, ob diese(s) nun ausdrücklich beschrieben ist oder nicht.References in the description to "one embodiment", "an embodiment", etc., indicate that the described embodiment may include a particular feature, structure or property, but not every embodiment includes the particular feature that mandatorily includes particular structure or property got to. In addition, such phrases do not necessarily refer to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it will be understood that those skilled in the art will be able to contemplate such feature, structure, or property in conjunction with other embodiments as to whether (FIGS. s) is now explicitly described or not.

Eine Herangehensweise an die Nächste-Nachbarn-Suche besteht darin, einen Abstand von der Eingabeinstanz bis zu jedem Punkt in einem Datensatz zu errechnen und den kürzesten Abstand zu verfolgen. Dieser stark vereinfachte Ansatz kann jedoch für größere Datensätze nicht umsetzbar sein. Die Abstandsberechnung kann unter Verwendung eines k-dimensionalen (k-d) Baumes zur Durchführung einer erschöpfenden Untersuchung sämtlicher Merkmale eines Merkmals auf einmal erfolgen. Daher ist dieser Ansatz langsam und geht zudem mit hohem Energieverbrauch einher.One approach to the nearest neighbor search is to calculate a distance from the input instance to each point in a record and track the shortest distance. However, this simplistic approach may not be feasible for larger data sets. The distance calculation may be performed using a k-dimensional (k-d) tree to perform an exhaustive examination of all features of a feature at once. Therefore, this approach is slow and also involves high energy consumption.

Ein weiterer Nächste-Nachbarn-Ansatz arbeitet mit Voronoi-Diagrammen. Jedes Voronoi-Diagramm zerlegt eine Ebene in Regionen mit gleichen nächsten Nachbarn, die Zellen genannt werden. Dies wird durch eine Vielzahl von Zellen veranschaulicht, die je ein Merkmal (einen Punkt) aufweisen. Theoretisch lässt sich ein „am besten übereinstimmendes” Merkmal für jede Eingabeinstanz unter Verwendung eines Voronoi-Diagramms zur Ortung des Merkmals in einer bestimmten Zelle finden. Wie dargestellt, sind Voronoi-Zellen jedoch sehr unregelmäßig geformt und schwer zu berechnen (sie sind sowohl zeit- als auch prozessorintensiv) und zu verwenden. Anders ausgedrückt bieten sich Voronoi-Diagramme nicht für einfache oder effiziente Nächste-Nachbarn-Merkmalsuchen an.Another neighbor-neighbor approach uses Voronoi diagrams. Each Voronoi diagram decomposes a plane into regions with equal nearest neighbors called cells. This is illustrated by a plurality of cells each having a feature (a dot). Theoretically, a "best matching" feature for each input instance can be found using a Voronoi plot to locate the feature in a particular cell. However, as shown, Voronoi cells are very irregular in shape and difficult to calculate (they are both time and processor intensive) and to use. In other words, Voronoi diagrams do not lend themselves to simple or efficient neighbor neighbor feature searches.

Hierin ausgeführt sind Ausführungsformen von System, Vorrichtungen und Verfahren zur Verwendung in verbesserten Nächste-Nachbarn-Suchen, die die Nachteile der obigen Ansätze überwinden. Kurz gefasst wird anhand einer Eingabe (d. h. einer Beobachtung) eine Suche nach dem am besten übereinstimmenden Merkmal in einem Merkmalsraum (d. h. einem Lexikon von Merkmalen) durchgeführt. Dieser Ansatz eignet sich besonders gut für Merkmalsvektoren, die in einem hochdimensionalen Vektorraum typischerweise spärlich vorkommen (es ist zu beachten, dass Merkmale in dieser Beschreibung Vektoren sind und daher „Merkmal” und „Merkmalsvektor” synonym verwendet werden).Embodied herein are embodiments of system, apparatus, and methods for use in improved neighbor neighbor searches that overcome the disadvantages of the above approaches. Briefly, an input (i.e., an observation) is used to search for the best matching feature in a feature space (i.e., a lexicon of features). This approach is particularly well-suited for feature vectors that are typically sparse in a high-dimensional vector space (note that features in this description are vectors and therefore "feature" and "feature vector" are used interchangeably).

Nachstehend sind Ausführungsformen eines k-Nächste-Nachbarn-(kNN-)Beschleunigers angeführt, der die Genauigkeit der Abstandsberechnungen einstellt, um das zum Finden jedes nächsten Nachbarn erforderliche Maß zu minimieren. Viele Kandidatenvektoren werden aus dem Suchraum unter Einsatz von Berechnungen mit nur geringer Genauigkeit verdrängt, während verbleibende Kandidaten, die näher am nächsten Nachbarn liegen, bei späteren Iterationen unter Einsatz höherer Genauigkeit verdrängt werden, um einen Sieger zu verkünden. Da die Mehrheit der Berechnungen geringere Genauigkeit erfordert und weniger Energie verbraucht, verbessert sich die kNN-Energieeffizienz insgesamt in signifikantem Maße. Typischerweise ist dieser kNN-Beschleuniger Teil eines Hauptprozessors (CPU), eines Grafikprozessors (GPU) etc. Der kNN-Beschleuniger kann sich aber auch außerhalb des CPU, des GPU etc. befinden.Below are embodiments of a k nearest neighbor (kNN) accelerator that adjusts the accuracy of the distance calculations to minimize the amount needed to find each nearest neighbor. Many candidate vectors are displaced out of the search space using only low precision calculations, while remaining candidates closer to the nearest neighbor are displaced in later iterations using higher accuracy to announce a winner. Since the majority of calculations require less accuracy and consume less energy, overall, kNN energy efficiency improves significantly. Typically, this kNN accelerator is part of a main processor (CPU), a graphics processor (GPU), etc. The kNN accelerator may also be located outside the CPU, the GPU, etc.

1 zeigt einen hochwertigen kNN-Beschleuniger gemäß einer Ausführungsform. In diesem Beschleuniger gibt es einige Hauptbauteile, die eine Vielzahl von Vektorteilabstandsberechnungsschaltungen 103_0 bis 103_N, eine globale Steuerschaltung 105 und ein Minimumsortiernetzwerk 107 umfassen. Jedes dieser Bauteile wird unten stehend ausführlich besprochen. 1 shows a high-quality kNN accelerator according to one embodiment. In this accelerator, there are some main components including a plurality of vector pitch calculating circuits 103_0 to 103_N , a global control circuit 105 and a minimum sorting network 107 include. Each of these components will be discussed in detail below.

Ein Abfrageobjektvektor 101 wird zur Teilabstandsberechnung in die Vielzahl von Vektorteilabstandsberechnungsschaltungen 103_0 bis 103_N eingegeben. Nicht dargestellt ist die Speicherung für diesen Objektvektor, die aber vorhanden ist. Die Vektorteilabstandsberechnungsschaltungen 103_0 bis 103_N berechnen Teilabstände für jeden Referenzvektor und einen akkumulierten Abstand und stellen dem Minimumsortiernetzwerk 107 eine gültige Anzeige bereit. Unter Anwendung einer Teilabstandsberechnung mit mehreren Iterationen zwischen einer Abfrage 101 und gespeicherten Vektoren mit geringerer Bitwertgenauigkeit, die sich in jeder Iteration, wie hierin ausgeführt, verbessert, ist energieeffizienter als frühere Ansätze. Teilabstandsberechnung beinhaltet das Berechnen von weniger Bits der vollen Distanz beginnend beim MSB in jeder Iteration für eine andere Abstandsmetrik (wie z. B. der Euklidsche (Quadratsummen-)Abstand und der Manhattan-(Summe-der-absoluten-Differenzen-)Abstand). Das Teilergebnis wird zum akkumulierten ergänzten Abstand mit dem richtigen Wert hinzuaddiert, was zu einer erhöhten Genauigkeit der niedrigerwertigen Bits mit fortschreitenden Berechnungen führt.A query object vector 101 becomes the pitch calculation in the plurality of vector pitch calculating circuits 103_0 to 103_N entered. Not shown is the storage for this object vector, which is present. The vector pitch calculation circuits 103_0 to 103_N calculate pitches for each reference vector and an accumulated distance and put the minimum sorting network 107 a valid ad ready. Using a Partial distance calculation with multiple iterations between a query 101 and stored vectors with lower bit-value accuracy, which improves in each iteration as set forth herein, is more energy efficient than previous approaches. Partial distance calculation involves calculating fewer full distance bits starting at the MSB in each iteration for a different distance metric (such as the Euclidean (square sum) distance and the Manhattan (sum-of-absolute-difference) distance). The sub-result is added to the accumulated complemented distance with the correct value, resulting in increased accuracy of the lower-order bits as the calculations progress.

2 zeigt eine beispielhafte Vektorteilabstandsberechnungsschaltung 203 gemäß einer Ausführungsform. Der Vektor besteht aus vielen Dimensionen, wobei jede in Dimension in diesem Beispiel durch 8b dargestellt ist. Einzelne Abstände in jeder Dimension werden zunächst durch 205 berechnet und dann in 211 addiert, um den Gesamtabstand zu finden. Eine lokale Steuerschaltung 207 stellt eine Anzeige jener Bits bereit, die in den unterschiedlichen Datenelementrechnerschaltungen 205 auszuwählen sind. 2 Fig. 10 shows an exemplary vector pitch calculation circuit 203 according to one embodiment. The vector consists of many dimensions, each in dimension being represented by 8b in this example. Individual distances in each dimension are first through 205 calculated and then in 211 added to find the total distance. A local control circuit 207 provides an indication of those bits that are in the different data element circuits 205 are to be selected.

Wie oben stehend erwähnt, kann es einige unterschiedliche Arten von Abstandsmetriken und daher unterschiedliche Datenelementrechnerschaltungen 205 im Einsatz sein. Wenn eine Summe-der-absoluten-Differenzen-(Manhattan-Abstands-)Metrik angewandt wird, erfolgen eine Auswahl der entsprechenden zwei Bits (2b) aus der absoluten Differenz jedes Vektorelements und deren Summierung in der Vektorteilabstandsberechnungsschaltung 203. 3 zeigt eine beispielhafte Vektorteilabstands-Summe-der-Quadratdifferenzen-(Euklidscher-Abstand-)Elementrechnerschaltung 205 gemäß einer Ausführungsform. Wie dargestellt, weisen ein Abschnitt eines Abfrageobjekts (gemäß Darstellung 8 Bits) und ein Abschnitt eines gespeicherten Objekts (gleiche Anzahl an Bits) eine durch Hardware erstellte Absolute-Differenzen-Berechnung (|a – b|) auf, und bestimmte Bits dieses Ergebnisses werden unter Verwendung von Multiplexer und einem Steuersignal ausgewählt. In manchen Ausführungsformen stellt eine lokale Steuerschaltung das Steuersignal bereit, wie weiter unten ausgeführt wird. Die Ergebnisse des Multiplexens werden multipliziert (ein Paar 2b × 2b-Multiplikationen) und dann addiert. In diesem Beispiel ist das Ergebnis ein 5-Bit-Wert, der einen Teilabstand beim Berechnen des Quadrats der Differenzen darstellt. Diese werden durch den Kompressorbaum 211 addiert, um einen Euklidschen Teilabstand für den gesamten Vektor zu berechnen.As mentioned above, there may be some different types of distance metrics, and therefore different data element computing circuits 205 be in use. When applying a sum-of-absolute differences (Manhattan distance) metric, selection of the corresponding two bits (2b) is made from the absolute difference of each vector element and their summation in the vector sub-distance calculation circuit 203 , 3 Fig. 12 shows an exemplary vector pitch sum-of-square difference (Euclidean distance) element calculator circuit 205 according to one embodiment. As shown, a portion of a query object (8 bits as shown) and a portion of a stored object (equal number of bits) have a hardware-generated absolute-difference calculation (| a-b |) and become certain bits of that result selected using multiplexer and a control signal. In some embodiments, a local control circuit provides the control signal, as discussed below. The results of the multiplexing are multiplied (a pair of 2b × 2b multiplications) and then added. In this example, the result is a 5-bit value representing a pitch in calculating the square of the differences. These are through the compressor boom 211 is added to calculate a Euclidean pitch for the entire vector.

Wenn eine Summe-der-absoluten-Differenzen-(Manhattan-Abstand-)Metrik eingesetzt wird, erfolgt eine Auswahl der entsprechenden zwei Bits (2b) aus der absoluten Differenz jedes Vektorelements und deren Summierung in der Vektorteilabstandsberechnungsschaltung 203. 4 zeigt eine beispielhafte Vektorteilabstands-Summe-der-absoluten-Differenzen-Datenelementrechnerschaltung 205 gemäß einer Ausführungsform. Wie dargestellt, weisen ein Abschnitt eines Abfrageobjekts (gemäß Darstellung 8 Bits) und ein Abschnitt eines gespeicherten Objekts (gleiche Anzahl an Bits) eine durch Hardware erstellte Absolute-Differenzen-Berechnung (|a – b|) auf, und bestimmte Bits dieses Ergebnisses werden unter Verwendung von Multiplexer und einem Steuersignal ausgewählt. In manchen Ausführungsformen stellt eine lokale Steuerschaltung das Steuersignal bereit, wie weiter unten ausgeführt wird. In diesem Beispiel ist das Ergebnis ein 2-Bit-Wert.When a sum-of-absolute-differences (Manhattan distance) metric is employed, selection of the corresponding two bits (2b) is made from the absolute difference of each vector element and their summation in the vector sub-distance calculation circuit 203 , 4 FIG. 10 shows an exemplary vector pitch sum of the absolute difference data element circuit. FIG 205 according to one embodiment. As shown, a portion of a query object (8 bits as shown) and a portion of a stored object (equal number of bits) have a hardware-generated absolute-difference calculation (| a-b |) and become certain bits of that result selected using multiplexer and a control signal. In some embodiments, a local control circuit provides the control signal, as discussed below. In this example, the result is a 2-bit value.

Die Teil-SAD-Berechnung reduziert die Kompressorbaumgröße und einen Faktor vier, während die Teilberechnung der Euklidschen Metrik 8-Bit-×-8-Bit-Multiplikatoren pro Vektorelement durch ein Paar trivialer 2-Bit-Multiplikatoren ersetzt und auch die Fläche des Kompressorbaums 211 um einen Faktor drei reduziert. Diese nicht naheliegende Konstruktion des Euklidschen Abstands gewährleistet, dass nach dem Verarbeiten einer höheren MSB-Position jede nachfolgende niedrigere MSB-Verfeinerung keine Bits höherer Ordnung um mehr als 1 beeinträchtigt, wie unter Bezugnahme auf die 3, 4, 6 und 7 unten besprochen wird. 7 zeigt eine Ausführungsform eines ganzen Differenzquadratvorgangs (zum Berechnen eines Euklidischen Abstands), der in Teilberechnungsiterationen zerlegt wurde, die durch die beispielhafte Schaltung von 3 berechnet werden. 7 zeigt, dass durch Durchführen einer Berechnung und Sortierung in der gezeigten Reihenfolge, ein Berechnungsvorgang von Bits niedrigerer Ordnung die verarbeiteten Bits höherer Ordnung um nicht mehr als 1 stört. 4 zeigt ebenso eine Ausführungsform der Schaltung für jedes Element und 6 zeigt ein Beispiel der entsprechenden Berechnungsvorgänge, die von dieser Schaltung für einen Manhattan-Abstand durchgeführt wurden. 6 zeigt, dass durch Durchführen einer Berechnung und Sortierung in der gezeigten Reihenfolge, Berechnungsvorgänge an Bits niedrigerer Ordnung die verarbeiteten Bits höherer Ordnung um nicht mehr als 1 stören.The sub-SAD calculation reduces the compressor tree size and a factor of four, while the Euclidean Metric sub-calculation replaces 8-bit × 8-bit multipliers per vector element with a pair of trivial 2-bit multipliers and also the area of the compressor tree 211 reduced by a factor of three. This non-obvious construction of the Euclidean distance ensures that, after processing a higher MSB position, any subsequent lower MSB refinement will not affect higher order bits by more than 1, as with reference to FIGS 3 . 4 . 6 and 7 is discussed below. 7 FIG. 12 shows an embodiment of a whole difference square operation (for computing a Euclidean distance) that has been decomposed into subcomputation iterations that are illustrated by the example circuit of FIG 3 be calculated. 7 shows that by performing computation and sorting in the order shown, a lower order bit calculation process disturbs the processed higher order bits by no more than one. 4 also shows an embodiment of the circuit for each element and 6 Fig. 10 shows an example of the corresponding computation operations performed by this circuit for a Manhattan distance. 6 shows that by performing computation and sorting in the order shown, computational operations on lower order bits do not disturb the processed higher order bits by more than one.

In manchen Ausführungsformen wird aufgrund eines gemeinsamen Hardwaredatenpfads eine einzige Schaltung zum Rekonfigurieren zwischen unterschiedlichen Metriken verwendet.In some embodiments, a single hardware data path uses a single circuit to reconfigure between different metrics.

Ein Kompressorbaum 211 addiert die Ergebnisse von jedem der Datenelementabstandsrechner. In einem 256-Dimensionsvektor mit Euklidischem Abstand ist dieses Ergebnis ein 13-Bit-Wert. Das Ergebnis des Kompressorbaums 211 wird an einen Schieber 209 gesendet. Typischerweise ist dieser Schieber ein Rechtsschieber, je nach Endian-Konfiguration kann es aber auch ein Linksschieber sein. Die Schiebemenge wird in den meisten Ausführungsformen durch die lokale Steuerschaltung 207 gesteuert. Der Schieber richtet den Teilabstand im richtigen Wert nach dem akkumulierten Abstand aus.A compressor tree 211 adds the results from each of the data element spacers. In a 256-dimension vector with Euclidean Distance, this result is a 13-bit value. The result of the compressor boom 211 gets to a slider 209 Posted. Typically, this slider is a right-hand slider, but depending on the endian configuration, it can also be a left-hand slider. The amount of shift is in most embodiments by the local control circuit 207 controlled. The slider aligns the pitch with the correct value according to the accumulated distance.

Ein Flipflop 213 speichert den akkumulierten Abstand aus einer vorangegangenen Iteration, während das Ergebnis des Addierers 215 der akkumulierte Abstand in der aktuellen Iteration ist. Zu Beginn der nächsten Iteration wird dieser Wert in das Flipflop 213 eingeschrieben. Der Selektor 219 wählt das 2b aus dem akkumulierten Abstand basierend auf dem globalen Zeiger. Außerdem wählt er die Ausführung an dieser 2b-Position durch Addieren der Teilsumme zu dem vorangegangenen akkumulierten Abstand aus.A flip flop 213 stores the accumulated distance from a previous iteration while the result of the adder 215 is the accumulated distance in the current iteration. At the beginning of the next iteration, this value will be in the flip-flop 213 enrolled. The selector 219 selects 2b from the accumulated distance based on the global pointer. In addition, it selects the execution at this 2b position by adding the partial sum to the previous accumulated distance.

Die lokale Steuerschaltung 207 nimmt psumi als Eingabe auf und modifiziert lediglich das obere Bit, bevor sie es an das Sortiernetzwerk 107 als psum-Wert (z. B. 3 Bits) weiterleitet. Ein gültiges Bit wird auch an das Minimumsortiernetzwerk 107 weitergeleitet. 5 zeigt eine beispielhafte lokale Steuerschaltung gemäß einer Ausführungsform. Die lokale Steuerschaltung steuert mehrere unterschiedliche Aspekte der Vektorteilabstandsberechnungsschaltung wie oben stehend ausgeführt. Diese Schaltung empfängt einen (weiter unten ausgeführten) globalen Zeiger aus einer globalen Steuereinheit zusammen mit einer psumi aus dem Selektor 219 und einer Mindestsumme, einer Adresse und einem genauen Indikator aus dem Minimumsortiernetzwerk 107.The local control circuit 207 takes psumi as input and only modifies the upper bit before sending it to the sorting network 107 as psum value (eg 3 bits). A valid bit is also sent to the minimum sorting network 107 forwarded. 5 shows an exemplary local control circuit according to an embodiment. The local control circuit controls a plurality of different aspects of the vector sub-spacing calculation circuit as set forth above. This circuit receives a global pointer (outlined below) from a global controller along with a psumi from the selector 219 and a minimum sum, an address and an accurate indicator from the minimum sorting network 107 ,

Wie dargestellt nimmt die lokale Steuerschaltung eine Adresse des gerade verarbeiteten Vektors und eine Minimumadresse aus dem Minimumsortiernetzwerk 107 und bestimmt mithilfe einer Vergleichsschaltungsanordnung, ob diese gleich sind. Das Ergebnis aus diesem Vergleich wird mit der Mindestgenauigkeit aus dem Minimumsortiernetzwerk 107 logisch geUNDet, um dazu beizutragen, zu bestimmen, ob der Objektvektor nicht länger verarbeitet werden sollte. Insbesondere wird dieses Ergebnis in der Berechnung eines gültigen Bits eingesetzt, wie z. B. durch das dargestellte UND-Gatter. Die lokale Steuerschaltung verwendet die Mindestsumme psumi und den globalen Zeiger dazu, ein Verdrängungssignal und ein lokales Berechnungssignal (das zum Steuern der unterschiedlichen Datenelementrechnerschaltungen 205 verwendet wird) zu erzeugen, Aus einem von 2 Gründen kann die Vektorverarbeitung angehalten werden: 1) Der aktuelle Vektor wird zum Sieger erklärt, oder: 2) der aktuelle Vektor wird aus dem Suchraum entfernt, wenn er garantiert nicht der nächste Nachbar ist. Die obige Beschreibung dient ersterem und bekräftigt das „Erledigt”-Signal. Die Umkehr dieses Signal (das durch eine Blase in das UND-Gatter 513 eintretend dargestellt ist) beeinträchtigt das gültige Signal. Falls das „Erledigt” bekräftigt ist, verschwindet das gültige Signal. Die verbleibende Logik zur Beeinträchtigung der Gültigkeit bestimmt, ob der Vektor nicht erledigt, sondern weiterhin Teil des Suchraums ist. Das Verdrängungssignal zeigt an, dass der Vektor in der aktuellen Iteration aus dem Suchraum entfernt ist, und diese Information wird von der globalen Steuerung verwendet. Die in 5 dargestellte Schaltung erzeugt auch Takte aus dem globalen CLK-Signal, um die Taktung von Speicherelementen (darunter 213) zu steuern. Die lokale Steuerschaltung empfängt auch „Berechnungssteuerung” von der globalen Steuerschaltung, die sie dann an die Teilabstandsberechnungs- 205 und die Schieberschaltung 209 weiterleitet.As shown, the local control circuit takes an address of the vector being processed and a minimum address from the minimum sort network 107 and determines whether they are equal by means of comparison circuitry. The result of this comparison is with the minimum accuracy from the minimum sorting network 107 logically ENOUGH to help determine whether the object vector should no longer be processed. In particular, this result is used in the calculation of a valid bit, such. B. by the AND gate shown. The local control circuit uses the minimum sum psumi and the global pointer thereto, a displacement signal and a local calculation signal (which is used to control the various data element circuits 205 For one of two reasons, the vector processing can be stopped: 1) the current vector is declared the winner, or: 2) the current vector is removed from the search space if it is guaranteed not to be the nearest neighbor. The above description serves the former and affirms the "done" signal. The reversal of this signal (that through a bubble in the AND gate 513 entering) interferes with the valid signal. If the "done" is affirmed, the valid signal disappears. The remaining invalidation logic determines whether the vector is not done, but still part of the search space. The displacement signal indicates that the vector in the current iteration is removed from the search space, and this information is used by the global controller. In the 5 The circuit shown also generates clocks from the global CLK signal to control the timing of memory elements (including 213 ) to control. The local control circuit also receives "computational control" from the global control circuit, which then sends it to the fractional distance calculation engine. 205 and the slider circuit 209 forwards.

Im Kern stellt die lokale Steuerschaltung eine lokale Zustandssteuerung pro Vektor mit globaler Zustandssteuerung über alle Vektoren bereit, um Abstandsberechnungszustände und Iterationen, in denen sie verdrängt werden, zu verfolgen, was eine Wiederverwendung früherer Abstandsberechnungen und Vergleiche bei Berechnung einer sortierten Liste für k > 1 ermöglicht.In essence, the local control circuit provides a local state control per vector with global state control over all vectors to track distance calculation states and iterations in which they are displaced, allowing reuse of previous distance calculations and comparisons when calculating a sorted list for k> 1 ,

Teilabstandsberechnung und Sortieriterationen werden ineinander verschränkt, wie in den 6 und 7 dargestellt ist. 6 zeigt eine beispielhafte Manhattan-Abstand-Berechnungs- und Sortierverarbeitung gemäß einer Ausführungsform, und 7 zeigt eine beispielhafte Datenelement-Euklidischer-Abstand-Berechnungs- und Sortierverarbeitung gemäß einer Ausführungsform. In diesen Abbildungen sind die Buchstaben (a, b, c und d) 2b-Komponenten der absoluten Differenz zwischen 8b-Elementen der Abfrage- und Referenzvektoren. Wie dargestellt, besteht der typische Vorgang darin, eine Berechnungsiteration durch die Vektorteilabstandsberechnungsschaltungen 103_0 bis 103_N durchzuführen, gefolgt von einer Sortierung im Minimumsortiernetzwerk 107. Es kann jedoch vorkommen, dass Berechnungsiterationen zwischen aufeinanderfolgenden Sortieriterationen fehlen, wie z. B. die in 7 dargestellte.Partial distance calculation and sorting iterations are interlaced, as in the 6 and 7 is shown. 6 FIG. 10 shows exemplary Manhattan distance calculation and sorting processing according to an embodiment; and FIG 7 FIG. 10 illustrates exemplary data element Euclidean distance calculation and sorting processing according to one embodiment. FIG. In these figures, the letters (a, b, c and d) are 2b components of the absolute difference between 8b elements of the interrogation and reference vectors. As illustrated, the typical process is to have a calculation iteration by the vector pitch calculation circuits 103_0 to 103_N followed by sorting in the minimum sorting network 107 , However, it may happen that compilation iterations are missing between successive sort iterations, such as: B. the in 7 shown.

Das Minimumsortiernetzwerk 107 führt fensterbasierte Sortierung durch. Insbesondere verarbeitet dieses Sortiernetzwerk ein viel kleineres Fenster von Bits beginnend beim höchstwertigen Bit (MSB) eines teilweise berechneten Abstands, um viel kleinere Vergleicherschaltungen und eine frühe Verdrängung von Vektorkandidaten zur weiteren Teilberechnung zu ermöglichen.The minimum sorting network 107 performs window-based sorting. In particular, this sorting network processes a much smaller window of bits starting at the most significant bit (MSB) of a partially calculated distance to allow much smaller comparator circuits and early displacement of vector candidates for further sub-computation.

Beispielsweise verarbeitet das Sortiernetzwerk in manchen Ausführungsformen in jeder Iteration ein Fenster von nur 2 Bits der akkumulierten Vektorabstände vom MSB zum LSB (6 und 7). Das ermöglicht eine starke Parallelisierung mit sehr geringer Hardwarekomplexität. Da die Berechnungsverfeinerungen an niedrigeren Bits bereits verarbeitete Bits im MSB um höchstens 1 beeinträchtigen können, muss das Sortiernetzwerk 107 auch die Ausführung verarbeiten, die aus der Berechnungsiteration am aktuellen 2b-Fenster erzeugt wurde. Folglich vergleicht das Sortiernetzwerk 107 z. B. 3b-Zahlen (Ausführung und 2b-Summe) an jedem Knoten 109 und 111. Im Vergleich würde ein herkömmliches Sortiernetzwerk für einen 256-Dimensionsvektorabstandsvergleich (8b pro Element) 24b-Vergleicher an jedem Knoten benötigen.For example, in some embodiments, the sorting network processes in each embodiment a window of only 2 bits of the accumulated vector distances from the MSB to the LSB (FIG. 6 and 7 ). This allows a strong parallelization with very little hardware complexity. Since the lower bit calculation refinements may affect already processed bits in the MSB by no more than 1, the sorting network must 107 also process the execution that was generated from the calculation iteration on the current 2b window. As a result, the sorting network compares 107 z. B. 3b numbers (execution and 2b sum) at each node 109 and 111 , In comparison, a conventional sorting network for a 256-dimension vector distance comparison would require (8b per element) 24b comparators at each node.

Das Sortiernetzwerk 107 überträgt das gefundene Mindest-3b-Ergebnis global, und lokale Steuerung für einzelne Vektorabstandsberechnungen vergleichen ihre 3b psum (Ausführung und 2b-Summe) mit diesem Übertragungsergebnis, um festzustellen, ob dieser bestimmte Vektor aus weiteren Abstandsverfeinerungsberechnungen und Vergleichen unter Verwendung der globalen 105 und der lokalen Steuerschaltungen verdrängt werden kann.The sorting network 107 transmits the found minimum 3b result globally, and local control for individual vector distance calculations compare its 3b psum (execution and 2b sum) with this transmission result to determine if that particular vector is from further distance refinement calculations and comparisons using the global one 105 and the local control circuits can be displaced.

Aufgrund der Eigenschaft, dass niederrangige Berechnungen ein aktuell verarbeitetes Fenster in einer künftigen Iteration um 1 beeinträchtigen können, erfordern sämtliche 3b-Vergleiche in der lokalen Steuerung und dem Sortiernetzwerk 107 eine Differenz von mehr als 1, damit ein Kandidat eliminiert werden kann. Aus dem gleichen Grund berücksichtigt die lokale Steuerung auch, wenn ein bestimmter Vektor um 1 größer war als das Minimum in einer vorangegangenen Iteration. Unter Verwendung genauer Signale zeigt das Sortiernetzwerk 107 an, ob das gefundene Minimum eindeutig ist. Sortieriterationen fahren fort, bis ein eindeutiger nächster Vektor gefunden oder das LSB erreicht ist. Rückmeldung von dem Sortiernetzwerk verdrängt Kandidatenvektoren aus weiterer Abstandsberechnung und Vergleichen, was zu einer bis zu 3fachen Berechnungsreduktion führt.Due to the property that low-order computations can affect a currently processed window in a future iteration by one, all 3b comparisons in the local control and sorting network require 107 a difference of more than 1, so that a candidate can be eliminated. For the same reason, local control also takes into account when a particular vector was 1 larger than the minimum in a previous iteration. Using accurate signals shows the sorting network 107 whether the found minimum is unique. Sort iterations continue until a unique next vector is found or the LSB is reached. Feedback from the sorting network displaces candidate vectors from further distance calculation and comparison, resulting in an up to 3-fold calculation reduction.

8 zeigt den beispielhaften Sortiervorgang unter Verwendung von Teildistanzen gemäß einer Ausführungsform. Da Vektorkandidaten verdrängt werden, während der beste Kandidaten gefunden wird, speichert ihre lokale Zustandssteuerung die Iteration, bei der sie verdrängt werden (in 5 als lptr-Signal und in 8 mit Kästchen dargestellt). 8th shows the exemplary sorting process using partial distances according to an embodiment. Since vector candidates are displaced while the best candidate is found, their local state control stores the iteration at which they are displaced (in 5 as an lptr signal and in 8th with box).

Gleichzeitig wird mit Vorwärtsbewegung des globalen Steuerzeigers (in Richtung des LSB), wenn sogar ein einzelner Vektor wegfallt, eine 1 in die dazugehörige Bitposition einer globalen Binärmaske eingeschrieben (die in der globalen Steuerschaltung 105 gespeichert ist). Nachdem ein erster Vektor gefunden wurde, zeigt die globale Binärmaske der globalen Steuerlogik 105 an, wohin der globale Zeiger für die Gruppe von Vektoren, die den/die nächstfolgenden nächsten Nachbarn enthält, zurückspringen muss. Dieser Vorgang wird in Iterationen fortgesetzt und ist für die zweite und die dritte Nächste-Nachbarn-Suche in 8 dargestellt. Ist ein globaler Zeiger in Richtung des MSB zurückgesprungen, werden nur jene Vektoren aktiv, deren gespeicherter Iterationszustand mit der Position des globalen Zeigers übereinstimmt. Vektoren, die näher an dem nächsten Nachbarn liegen, werden an einer näheren Position des globalen Zeigers verdrängt. Diese Technik der Aufrechterhaltung von Zuständen weist drei Vorteile gegenüber einer herkömmlichen Sortiertechnik auf, die einfach den nächsten Nachbarn beseitigen und den gesamten Berechnungs- und Sortiervorgang von vorne beginnen würde: (a) Sie verwendet bereits durchgeführte Teilabstandsberechnungen wieder, während sie den vorangegangenen Sortierrang findet, (b) sie reduziert die Anzahl an Vektoren, die verglichen werden müssen, indem sie bereits berechnete Vergleiche nutzt, und (c) erfordert nicht, dass k vordefiniert wird, um Berechnungen und Vergleiche für jedweden sortierten Rang zu minimieren. Vorteile der Wiederverwendung von Berechnungen und Vergleichen mit dieser Steuerung beziffern die wachsenden Kosten des Findens des nächstfolgenden nächsten Nachbarn aus X (z. B. 256) Vektoren (z. B. 256 8-b-Elemente pro Vektor), nachdem bereits 3 nächste Nachbarn gefunden wurden. Eine herkömmliche Sortiertechnik hätte dazu geführt, den nächsten Vektor aus den verbleibenden 253 Kandidatenvektoren zu finden, während die vorgeschlagene Steuerung dazu führt, diesen Suchraum um das Neunzehnfache zu verringern und die dazugehörige Berechnung um das Zwanzigfache.Simultaneously, as the global control pointer (in the direction of the LSB) advances, if even a single vector is dropped, a 1 is written to the associated bit position of a global binary mask (that in the global control circuit 105 is stored). After finding a first vector, the global binary mask shows the global control logic 105 where the global pointer must return for the group of vectors containing the next following neighbor (s). This process continues in iterations and is in for the second and third neighbor neighbor searches 8th shown. If a global pointer has jumped back in the direction of the MSB, only those vectors are active whose stored iteration state matches the position of the global pointer. Vectors closer to the nearest neighbor are displaced at a closer position of the global pointer. This state maintenance technique has three advantages over a conventional sorting technique, which would simply eliminate the nearest neighbor and start the entire calculation and sorting process from scratch: (a) it will reuse already performed part distance calculations while finding the previous sort rank, (b) it reduces the number of vectors that must be compared using already calculated comparisons, and (c) does not require that k be predefined to minimize calculations and comparisons for any sorted rank. Benefits of reusing calculations and comparing with this control quantify the growing cost of finding the next nearest neighbor from X (eg, 256) vectors (eg, 256 8-b elements per vector) after already having 3 nearest neighbors were found. A conventional sorting technique would have led to finding the next vector from the remaining 253 candidate vectors, while the proposed control would reduce that search space tenfold and the associated calculation twentyfold.

In der Darstellung wird ein 2-Bit-Teilabstandsfenster aus den Vektoren verarbeitet. Die Pfeile, die nach rechts zeigen, sind gültige Bits aus einer lokalen Steuerschaltungsanordnung. Im Zyklus 0 weicht der siebente Vergleich um mehr als 1 vom Minimum ab, daher kann dieser Vektor verdrängt werden. Diese Verdrängung wird in der lokalen Steuerschaltungsanordnung gespeichert. Dieser Vorgang geht vonstatten wie oben stehend ausgeführt. Wenn alle Teilsummenberechnungen für alle Vektoren verarbeitet werden, stimmt der resultierende Abstand mit den vollen Abständen überein, die ganz links lediglich als Referenz dargestellt sind.In the illustration, a 2-bit pitch window is processed from the vectors. The arrows pointing to the right are valid bits from local control circuitry. In cycle 0, the seventh comparison deviates by more than 1 from the minimum, so this vector can be displaced. This displacement is stored in the local control circuitry. This process is carried out as stated above. When all subtotal calculations are processed for all vectors, the resulting distance will be the same as the full distances shown on the left-hand side for reference only.

9 zeigt eine beispielhafte globale Steuerschaltung gemäß einer Ausführungsform. Wie in 1 gezeigt, empfängt die globale Steuerschaltung 105 minimale Genauigkeits-, Adress- und Summenwerte für das Minimumsortiernetzwerk 107. Das minimale Genauigkeitssignal wird zusammen mit einem einen globalen Zeiger an der LSB-Position angebenden Signal logisch geODERt und als Auswahlsignal für eine Ausgabe eines globalen Zeigers verwendet, der entweder ein vorangegangener um 1 gesteigerter globaler Zeiger ist oder einer, der von einer globalen Binärmaske wie dargestellt (prioritäts-)kodiert wurde. Die globale Binärmaske wird aus der ODER-Verästelung verdrängter Signale erstellt, die aus der lokalen Steuerschaltungsanordnung 207 empfangen wurde. Berechnungssteuersignale werden unter Verwendung einer Nachschlagtabelle gefunden, wobei der globale Zeiger als Index für diese Tabelle dient. Solange kein eindeutiges Minimum oder LSB gefunden wird, bewegt sich der globale Zeiger bei jeder Iteration weiter in Richtung des LSB (dazu wird der Zeiger um 1 gesteigert). Dieser Zustand wird durch das ODER-Gatter 901 geprüft. Ansonsten rollt der Zeiger zurück auf die nächste 1 in der Binärmaske, um den nächstfolgenden nächsten Nachbarn zu finden. Selbst wenn ein Vektor verdrängt wird, wird eine 1 in die Zeigerposition im Inneren der Binärmaske eingeschrieben, ansonsten wird eine 0 eingeschrieben. Der ODER-Baum 907 detektiert, ob sogar ein Vektor verdrängt wurde (die Verdrängungssignale werden durch alle lokalen Steuerschaltungen erzeugt), der folgende Demultiplexvorgang setzt die Eingabe der entsprechenden Position mithilfe des globalen Zeigers auf 1, und das wird in die (in Speicherung 903 aufbewahrte) globale Binärmaske eingeschrieben, wenn die nächste Iteration beginnt (steigende Flanke von CLK). Die Position der nächsten 1 wird durch den Prioritätskodierer 905 berechnet. Die Berechnungssteuerungsübertragung an alle Vektoren basiert auf der Zeigerposition. Diese kann programmierbar gemacht werden, indem sie in der Nachschlagtabelle 913 gespeichert wird, wobei die entsprechenden Steuersignale basierend auf dem Zeiger gelesen werden. 9 FIG. 12 shows an example global control circuit according to an embodiment. FIG. As in 1 shown receives the global control circuit 105 minimum accuracy, address and summation values for the minimum sorting network 107 , The minimum accuracy signal is logically ORed together with a signal indicating a global pointer at the LSB position and used as a global pointer output signal that is either a previous global pointer incremented by one or one greater than a global pointer global binary mask as shown (priority) coded. The global binary mask is constructed from the OR ramification of displaced signals derived from the local control circuitry 207 was received. Computation control signals are found using a lookup table, with the global pointer serving as the index for that table. As long as no unique minimum or LSB is found, the global pointer will continue to move towards the LSB at each iteration (the pointer will increment by 1). This condition is controlled by the OR gate 901 checked. Otherwise, the pointer rolls back to the next 1 in the binary mask to find the next nearest neighbor. Even if a vector is displaced, a 1 is written to the pointer position inside the binary mask, otherwise a 0 is written. The OR tree 907 detects whether even a vector has been displaced (the displacement signals are generated by all the local control circuits), the following demultiplexing operation sets the input of the corresponding position to 1 by means of the global pointer, and this is put into (in memory 903 stored) global binary mask when the next iteration begins (rising edge of CLK). The position of the next 1 is determined by the priority encoder 905 calculated. The calculation control transfer to all vectors is based on the pointer position. This can be made programmable by looking in the lookup table 913 is stored, wherein the corresponding control signals are read based on the pointer.

Bei genauerer Betrachtung des Minimumsortiernetzwerks 107 gibt es zwei Arten von Vergleichsknoten: Ebene-0- und Ebene-„k”-Knoten. 10 zeigt eine beispielhafte Ebene-0-Vergleichsknotenschaltung gemäß einer Ausführungsform. Wie dargestellt, nimmt die Schaltung gültige Bits auf, die dazu verwendet werden anzuzeigen, ob die psum von einem Vektor stammt, der Teil des Suchraums ist. Falls die zu einer psum gehörige Gültigkeit 0 ist, wird die psum in einem Vergleich an einem Knoten ignoriert.Upon closer inspection of the minimum sorting network 107 There are two types of comparison nodes: level 0 and level "k" nodes. 10 FIG. 12 shows an example level 0 compare node circuit according to one embodiment. FIG. As shown, the circuit receives valid bits used to indicate whether the psum is from a vector that is part of the search space. If the validity associated with a psum is 0, the psum is ignored in a comparison at a node.

Die benachbarten gültigen Bits werden logisch geODERt, um ein gültiges Ebene-0-Bit bereitzustellen. Diese gültigen Bits werden auch X-geODERt, dann mit einem Signal, das angibt, dass die absolute Differenz zwischen den Eingabesummen größer ist als eine Schwelle ε, geODERt, um ein genaues Bit zu erzeugen. Ist ein genaues Bit „1”, bedeutet das, dass kein anderer Vektor in der Nähe ist. Schließlich werden die benachbarten Summe auch miteinander verglichen, wobei das Ergebnis mit einem der gültigen Bits geUNDet wird, um eine Adresse und einen Selektor der auszugebenden Summe auszubilden. Die Gesamtausgabe des Ebene-0-Vergleichsknotens ist eine Adresse, ein gültiges Bit, ein genaues Bit und eine Summe. Die Gültigkeitsausgabe zeigt an, ob das Ergebnis gültig ist (zumindest eine der Eingabegültigkeiten muss stimmen, um diese Bedingungen zu erfüllen). Das Ergebnis des Vergleichs wird zu dem höchstrangigen Bit der Adresse des gefundenen Mindestvektors (Bit [0] in diesem Fall, da es die erste Vergleichsebene ist) hinzuaddiert. Die Ausgabe eines genauen Signals zeigt an, dass die 2 Vektoren nicht gleichwertig oder einander nahe sind (die Differenz ist größer als 1, wenn ε = 1 ist, oder die Differenz ist größer als 0, wenn ε = 0 ist). Die X-ODERung 1003 bekräftigt das genaue Signal, wenn nur eine der Eingaben gültig ist, ungeachtet des Vergleichsergebnisses (da der Vergleich keine Rolle spielt, wenn eine der Summen nicht gültig ist). Das Vergleichsergebnis leitet die kleinere Summe zusammen mit ihrer Eingabeadresse an den nächsten Knoten weiter.The adjacent valid bits are logically ORed to provide a valid level 0 bit. These valid bits are also X-ORed, then with a signal indicating that the absolute difference between the input sums is greater than a threshold ε, ORed to produce an accurate bit. If an exact bit is "1", it means no other vector is nearby. Finally, the adjacent sum are also compared with each other, where the result is extracted with one of the valid bits to form an address and a selector of the sum to be output. The overall output of the level 0 compare node is an address, a valid bit, an exact bit and a sum. The validity issue indicates whether the result is valid (at least one of the input validities must be correct to meet these conditions). The result of the comparison is added to the highest order bit of the minimum vector found address (bit [0] in this case since it is the first compare level). The output of an accurate signal indicates that the 2 vectors are not equal or close to each other (the difference is greater than 1 if ε = 1, or the difference is greater than 0 if ε = 0). The X-ORung 1003 affirms the exact signal if only one of the inputs is valid, regardless of the comparison result (since the comparison does not matter if one of the sums is not valid). The comparison result forwards the smaller sum together with its input address to the next node.

11 zeigt eine beispielhafte Ebene-k-Vergleichsknotenschaltung gemäß einer Ausführungsform. Diese Schaltung nimmt benachbarte Ausgaben von Adresse, gültigem Bit, genauem Bit und einer Summe von der vorausgehenden Ebene (z. B. Ebene 0) auf und setzt diese der dargestellten Schaltungsanordnung aus. Der Vorgang ist ähnlich dem in 10 dargestellten. Das Ergebnis des Vergleichs der Summensignale wählt nun auch aus eingehenden genauen Signalen aus und UNDet das ausgewählte genaue mit dem genauen Signal, das an diesem Knoten berechnet wurde, um das genaue Ausgabesignal zu produzieren. Das genaue Ausgabesignal zeigt an, ob die Ausgabesumme eindeutig ist, d. h. die kleinste mit einem Abstand von mehr als ε von jedwedem nächsten Vektor über alle Vektoren beginnend mit der Ebene 0. 11 FIG. 12 shows an example level-k compare node circuit according to an embodiment. FIG. This circuit receives adjacent outputs of address, valid bit, exact bit, and a sum from the previous level (eg, level 0) and exposes them to the illustrated circuitry. The process is similar to the one in 10 shown. The result of the comparison of the sum signals now also selects from incoming accurate signals and ANDet the selected exact with the exact signal calculated at that node to produce the exact output signal. The exact output signal indicates whether the output sum is unique, ie, the smallest one with a distance of more than ε from any next vector over all vectors starting with the 0 level.

Andere Ausführungsformen des Obigen, beschrieben für den kNN-Beschleuniger, erhöhen die Flexibilität und/oder den Anwendungsraum, in dem der Beschleuniger von Vorteil wäre. Beispielsweise können in manchen Ausführungsformen zum Ermöglichen von Berechnungen auf Vektorelementen, die größer sind als 8b, die für 8b-Elemente ausgelegten Abstandsberechnungsschaltungen für 16b-Elemente wiederverwendet werden, indem Paare von benachbarten 8b-Elementschaltungen kombiniert werden. 12 zeigt eine beispielhafte 8-Bit/16-Bit-rekonfigurierbare Berechnungsschaltung gemäß einer Ausführungsform. In dieser Schaltung überträgt ein Steuersignal zwei Gruppen von Auswahlsignalen für 8b-Berechnungsschaltungen mit geraden/ungeraden Nummern. Für eine feste Schaltungs- und Speicherungsgröße wird die Vektordimension oder die Anzahl gespeicherter Vektoren bei Betrieb im 16b-Modus halbiert. Die Anzahl von Iterationen, die erforderlich sind, um eine vollständige Quadratsumme im 16b-Modus zu berechnen, steigt von 6 (für 8b-Elemente) auf 15. Mehrere Berechnungsiterationen können zwischen aufeinanderfolgenden Sortieriterationen erforderlich sein, um zu gewährleisten, dass höherrangige Bits nicht um mehr als 1 beeinträchtigt werden, wenn niederrangige Bits verarbeitet werden. Selbst im 16b-Modus reduziert eine Sortierung basierend auf Teilberechnungen Berechnungen zum Finden des nächsten Nachbarn erheblich. 13 zeigt beispielhaften Teilabstandsberechnungen für Quadratsummen mit 16-Bit-Elementen gemäß einer Ausführungsform. In manchen Ausführungsformen werden nur 16b-Breiten oder Rekonfigurationen verwendet. Selbstredend können auch andere Bitbreiten oder Rekonfigurationen verwendet werden.Other embodiments of the above described for the kNN accelerator increase the flexibility and / or the application space in which the accelerator would be beneficial. For example, in some embodiments, to facilitate calculations on vector elements greater than 8b, the 16b element distance calculation circuits designed for 8b elements may be reused by combining pairs of adjacent 8b element circuits. 12 FIG. 10 shows an example 8-bit / 16-bit reconfigurable computing circuit according to one embodiment. FIG. In this circuit, a control signal transmits two sets of selection signals for even / odd numbered 8b calculation circuits. For a fixed circuit and storage size, the vector dimension or the number of stored vectors is halved when operating in 16b mode. The number of iterations required to compute a full sum of squares in 16b mode increases from 6 (for 8b elements) to 15. Multiple computational iterations may be required between successive sort iterations to ensure that higher order bits do not translate more than 1 impaired when lower-order bits are processed. Even in 16b mode, sorting based on sub-calculations significantly reduces calculations to find the nearest neighbor. 13 FIG. 12 shows exemplary pitch calculations for 16-bit squares sums according to one embodiment. FIG. In some embodiments, only 16b widths or reconfigurations are used. Needless to say, other bit widths or reconfigurations can also be used.

In manchen Ausführungsformen ist der kNN-Beschleuniger so reproduzierbar, dass er größere Vektordimensionen mit einer zusätzlichen Stufe im Kompressorbaum der Abstandsberechnungseinheit unterstützt, um Ergebnisse aus anderen Abstandsberechnungseinheitsblöcken hinzuzuaddieren. Folglich reduziert sich die Anzahl der gespeicherten Vektoren mit zunehmender Dimension jedes Vektors.In some embodiments, the kNN accelerator is reproducible to support larger vector dimensions with an additional stage in the compressor space of the distance calculation unit to add results from other distance calculation unit blocks. Consequently, the number of stored vectors reduces as the dimension of each vector increases.

In manchen Ausführungsformen wird die Funktionalität des kNN-Beschleunigers erweitert, um einen Betrieb an Datensätzen zu ermöglichen, die größer sind als die Speicherkapazität des Beschleunigers. Sortierte k-nächste Kandidaten aus einer innerhalb des Beschleunigers gespeicherten Datenbank werden zunächst berechnet, verdrängte Kandidaten durch jedwede verbleibende Objektdeskriptoren aus dem Gedächtnis ersetzt und der Vorgang fortgesetzt, bis alle Objektkandidaten durchexerziert wurden, um die insgesamt k-nächsten Deskriptorvektoren zu finden. Für einen Beschleuniger mit einer Kapazität von 256 Objekten und einem 256-dimensionierten Vektor (8b pro Dimension) für jede Objektmerkmalsbeschreibung über eine Objektdatenbankgröße von 512 bis 2048 Objekten ermöglicht der Beschleuniger stetig eine Reduktion der Quadratsummenberechnungen für eine sortierte Liste 16-nächster Kandidaten.In some embodiments, the functionality of the kNN accelerator is expanded to allow operation on data sets larger than the storage capacity of the accelerator. Sorted k-nearest candidates from a database stored within the accelerator are first computed, replaced displaced candidates with any remaining object descriptors from memory, and the process continues until all object candidates have been performed to find the k-nearest descriptor vectors. For an accelerator having a capacity of 256 objects and a 256-dimensioned vector (8b per dimension) for each object feature description over an object database size of 512 to 2048 objects, the accelerator steadily allows a reduction of the squares sums calculations for a sorted list of 16 nearest candidates.

In manchen Ausführungsformen kann zusätzlich zum Finden von Vektoren anhand des Mindestabstands der Beschleuniger für das Finden von Vektoren in absteigender Reihenfolge des Abstands rekonfiguriert werden, indem die Ausgabe der 3b-Vergleicherschaltung innerhalb der Vergleichsknoten des Sortiernetzwerks umgekehrt wird. Alternativ dazu wird die absteigende Reigenfolge durch Subtrahieren der akkumulierten Teildistanzen von der größtmöglichen Distanz und anschließendes Verwenden desselben fensterbasierten Minimumsortiernetzwerks zum Verarbeiten der resultierenden Zahlen berechnet.In some embodiments, in addition to finding vectors based on the minimum distance, the accelerator may be reconfigured for finding vectors in descending order of pitch by reversing the output of the 3b comparator within the collation nodes of the collation network. Alternatively, the descending order of satisfaction is calculated by subtracting the accumulated sub-distances from the greatest possible distance and then using the same window-based minimum sorting network to process the resulting numbers.

In manchen Ausführungsformen wird diversen Abstandsmetriken entsprochen, indem nur die 1D-Abstandsschaltung in dem Netzwerk rekonfiguriert wird. Neben Euklidschen und Manhattan-Abständen ist eine weitere beliebte Metrik zum Finden der nächsten Übereinstimmung mit einem Vektor die Kosinus-Ähnlichkeit, die den Winkelabstand zwischen Vektoren dazu verwendet, die nächste Übereinstimmung zu finden. Der Kosinus des Winkels zwischen zwei Vektoren A und B wird als [Σ(ai·bi)]/[(Σai 2)1/2·(Σbi 2)1/2] berechnet, wobei ein kleinerer Winkel zu einem größeren Kosinus führt. Im Sinne der kosinusbasierten Ähnlichkeit ist keine Normalisierung erforderlich, falls die gespeicherte Datenbank bereits normalisiert und ist die Optimierung dann in ein Finden des Vektors umgewandelt wird, die das Skalarprodukt Σ(ai·bi) mit der größten Größe ergibt. Das Skalarprodukt zwischen Abfrage- und gespeicherten Objekten kann unter Verwendung der für die Euklidsche Metrik verwendeten bestehenden 2b-Multiplikatoren teilweise berechnet werden.In some embodiments, various distance metrics are met by reconfiguring only the 1D distance circuitry in the network. Besides Euclidean and Manhattan distances, another popular metric for finding the closest match to a vector is cosine similarity, which uses the angular distance between vectors to find the closest match. The cosine of the angle between two vectors A and B is calculated as [Σ (a i * b i )] / [(Σ a i 2 ) 1/2 * (Σb i 2 ) 1/2 ], where a smaller angle to a larger cosine leads. In terms of cosine-based similarity, no normalization is required if the stored database is already normalized and then the optimization is converted to finding the vector that yields the largest-scalar product Σ (a i * b i ). The scalar product between query and stored objects can be partially calculated using the existing 2b multipliers used for the Euclidean metric.

14 zeigt eine Kosinus-Ähnlichkeitsberechnungsschaltung (1d Abstand) gemäß einer Ausführungsform und beispielhafte Teilabstandsberechnungen für Skalarprodukte gemäß einer Ausführungsform. Mehrere Berechnungsiterationen können zwischen aufeinanderfolgenden Sortieriterationen erforderlich sein, um zu gewährleisten, dass höherrangige Bits nicht um mehr als 1 beeinträchtigt werden, wenn niederrangige Bits verarbeitet werden. Für Skalarprodukte mit signierten Elementen erfordert jede Berechnungsiteration 2 Schritte: zuerst das Summieren aller positiven Produkte zu der akkumulierten Teildistanz und dann das Subtrahieren der Summe aller negativen Produkte von der akkumulierten Teildistanz. 14 FIG. 10 illustrates a cosine similarity calculation circuit (1d distance) according to an embodiment and exemplary scalar product pitch calculations according to an embodiment. FIG. Multiple compilation iterations may be required between successive sort iterations to ensure that higher order bits are not compromised by more than 1 when processing lower order bits. For scalar products with signed elements, each calculation iteration requires 2 steps: first summing all the positive products to the accumulated sub-distance and then subtracting the sum of all negative products from the accumulated sub-distance.

In manchen Ausführungsformen können mit fortschreitenden Iterationen Kandidatenvektoren basierend auf einem Vergleich des akkumulierten Teilabstands zu einer vorbestimmten absoluten Schwelle auch früher verdrängt werden. Außerdem muss die Verkündung eines siegreichen Vektors nicht exakt sein, und Iterationen zur Bestimmung eines Siegers können entweder basierend auf einer vorbestimmten relativen Genauigkeit (unter Verwendung der Position des globalen Zeigers) oder basierend auf der absoluten akkumulierten Teildistanz früher angehalten werden. Ein solches Schema würde den Energieverbrauch für Algorithmen senken, die für ungefähre Nächste-Nachbarn-(ANN-)Suchen optimiert sind.In some embodiments, with progressive iterations, candidate vectors may be displaced earlier based on a comparison of the accumulated pitch to a predetermined absolute threshold. In addition, the promulgation of a winning vector does not have to be exact, and iterations for determining a winner can be stopped earlier either based on a predetermined relative accuracy (using the position of the global pointer) or based on the absolute accumulated sub-distance. Such a scheme would reduce power consumption for algorithms optimized for approximate nearest neighbor (ANN) searches.

15 zeigt ein beispielhaftes Verfahren zur kNN-Suche gemäß einer Ausführungsform unter Verwendung von Ausführungsformen des oben stehend ausgeführten kNN-Beschleunigers. Auf einer hohen Ebene umfasst das Verfahren zur kNN-Suche das Berechnen von Teilabständen, das Akkumulieren dieser Abstände und das Sortieren dieser akkumulierten Abstände auf verschränkte Weise. Unten stehend findet sich eine ausführlichere Beschreibung dieses Vorgangs. 15 FIG. 12 illustrates an example method of kNN searching according to an embodiment using embodiments of the above-described kNN accelerator. FIG. At a high level, the kNN search method involves calculating pitches, accumulating those pitches, and sorting those accumulated pitches in an entangled manner. Below is a more detailed description of this process.

In manchen Ausführungsformen werden eine oder mehrere Variablen zurückgesetzt. Beispielsweise ein akkumulierter Abstand für jeden Referenzvektor, ein globaler Zeiger, eine globale Binärmaske, ein k-Wert, ein Gültigkeitsbit für jeden Referenzvektor (auf 1 gesetzt), ein „done”-Bit für jeden Referenzvektor (auf 0 gesetzt) und ein lokaler Zeiger für jeden Referenzvektor.In some embodiments, one or more variables are reset. For example, an accumulated distance for each reference vector, a global pointer, a global binary mask, a k-value, a valid bit for each reference vector (set to 1), a "done" bit for each reference vector (set to 0), and a local pointer for each reference vector.

Bei 1501 wird für jeden Referenzvektor und jedes Element dieses Referenzvektors eine absolute Differenz zwischen diesem Element und einem entsprechenden Element in dem Abfragevektor erstellt.at 1501 For each reference vector and element of this reference vector, an absolute difference is made between that element and a corresponding element in the query vector.

Bei 1503 wird eine Vergleichsschwelle basierend auf dem globalen Zeiger festgelegt.at 1503 a comparison threshold is set based on the global pointer.

Eine Bestimmung, ob ein Teilabstand zu berechnen ist, wird bei 1505 vorgenommen. Soll der Teilabstand berechnet wird, wird für jeden Referenzobjektvektor mit einem auf 1 (was Gültigkeit anzeigt) gesetzten gültigen Bit ein Teilabstand berechnet (z. B. unter Verwendung der Schaltungen in den 3 und 4 und des Kompressorbaums 211) und verschoben und bei 1507 zu einem akkumulierten Abstand hinzuaddiert.A determination of whether to calculate a pitch is included 1505 performed. If the pitch is calculated, a pitch is calculated for each reference object vector with a valid bit set to 1 (indicating validity) (eg, using the circuitry in FIGS 3 and 4 and the compressor tree 211 ) and moved and at 1507 added to an accumulated distance.

Soll der Teilabstand nicht berechnet werden oder nachdem 1507 erfolgt ist, wird bei 1509 für jeden Referenzobjektvektor mit einem auf 1 (was Gültigkeit anzeigt) gesetzten gültigen Bit ein vom globalen Zeiger abhängiger Teilsatz von Bits (psum) des akkumulierten Abstands an das Minimumsortiernetzwerk gesendet.If the pitch is not calculated or after 1507 is done is at 1509 for each reference object vector with a valid bit set to 1 (indicating validity), a global pointer dependent subset of bits (psum) of the accumulated distance are sent to the minimum sort network.

Das Sortiernetzwerk findet bei 1511 ein globales Minimum und ein zweites Minimum.The sorting network finds 1511 a global minimum and a second minimum.

Eine Bestimmung, ob das globale Minimum abzüglich des zweiten Minimums größer ist als die festgelegte Schwelle, wird bei 1513 vorgenommen. Falls ja, wird die Genauigkeit auf 1 gesetzt. Ist die Genauigkeit 1 oder ist der globale Zeiger das LSB des akkumulierten Abstands, wird das gefundene Minimum bei 1515 auf 1 gesetzt.A determination of whether the global minimum minus the second minimum is greater than the specified threshold is included 1513 performed. If so, the accuracy is set to 1. If the precision is 1 or the global pointer is the LSB of the accumulated distance, the found minimum will be added 1515 set to 1.

Bei 1517 wird typischerweise parallel zu 1513 für jeden Referenzobjektvektor mit einer Gültigkeit gleich 1 ein Vergleich der psum mit dem globalen Minimum basierend auf der festgelegten Schwelle und einem Vergleich einer vorangegangenen Iteration vorgenommen. Basierend auf diesem Vergleich und dem genauen Bit wird das gültige Bit aktualisiert, sodass es entweder auf 1 verbleibt auf 0 verschwindet. Wird die Gültigkeit in der aktuellen Iteration auf eine 0 aktualisiert, wird der aktuelle globale Zeiger in die mit diesem Referenzvektor verbundene Lokalzeigerspeicherung eingeschrieben und wird eine 1 in die globale Binärmaske eine 1 an der Position des globalen Zeigers eingeschrieben.at 1517 is typically parallel to 1513 for each reference object vector with a validity equal to 1, a comparison of the psum with the global minimum based on the specified threshold and a comparison of a previous iteration. Based on this comparison and the exact bit, the valid bit is updated so that it either remains at 1 and goes to zero. When the validity in the current iteration is updated to a 0, the current global pointer is written to the local pointer storage associated with this reference vector, and a 1 in the global binary mask is written to a 1 at the location of the global pointer.

Bei 1519 wird eine Bestimmung vorgenommen, ob das gefundene Minimum gleich 1 ist. Falls ja, wird k bei 1521 um 1 gesteigert. Für den globalen Miniumvektor wird bei 1521 außerdem Done auf 1 gesetzt und Valid auf 0 gesetzt. Falls nicht, wird der globale Zeiger bei 1527 um 1 gesteigert und die Vergleichsschwelle wird wieder gesetzt.at 1519 a determination is made as to whether the found minimum is equal to one. If so, k will join 1521 increased by 1. For the global minium vector is added 1521 Done also set to 1 and Valid set to 0. If not, the global pointer is included 1527 increased by 1 and the comparison threshold is set again.

Nachdem k gesteigert wurde, wird der globale Zeiger bei 1523 auf eine 1 am nächsten gelegene Position in der globalen Binärmaske reduziert. Im Wesentlichen wird ein Zurücksetzen des globalen Zeigers auf eine letzte Position vorgenommen, an der ein Referenzobjektvektor aus dem Suchraum verdrängt wurde.After k has been increased, the global pointer will be added 1523 reduced to a position closest to 1 in the global binary mask. Essentially, a reset of the global pointer is made to a last position at which a reference object vector has been displaced from the search space.

Bei 1525 wird für jeden Referenzobjektvektor, falls der lokale Zeiger größer oder gleich dem globalen Zeiger ist und das Done-Bit gleich 0 ist, das gültige Bit auf 1 gesetzt und die Vergleichsschwelle neu festgelegt. Dadurch wird ein Referenzvektor neu in den Suchraum eingesetzt, wenn die nächstgelegenen Vektoren zu berechnen sind.at 1525 For each reference object vector, if the local pointer is greater than or equal to the global pointer and the done bit is equal to 0, the valid bit is set to 1 and the comparison threshold is reset. As a result, a reference vector is newly inserted into the search space when the nearest vectors are to be calculated.

Wenngleich die oben stehend beschriebene Sortierung und Berechnung, die für alle Referenzvektoren parallel durchgeführt wird, können diese Vorgänge serieller gestaltet werden, indem der Berechnungs- und der Sortiervorgang für unterschiedliche Vektoren auf derselben Schaltung durchgeführt werden, um Platz zu sparen.Although the sorting and computation described above, which is performed in parallel for all reference vectors, these operations can be made more serial by performing the computation and the sorting operation for different vectors on the same circuit to save space.

Die oben stehend beschriebenen Systeme, Verfahren und Vorrichtungen sind dazu einsetzbar, zahlreiche Vorteile bereitzustellen. Der Abstand zwischen Vektoren wird wiederholt berechnet, sodass in aufeinanderfolgenden Iterationen die Genauigkeit des berechneten Abstands sich vom MSB zum LSB verbessert. In jeder Iteration dient die Berechnung einer Teildistanz für einen Vektor dem Zweck der Verbesserung der Genauigkeit des vollen (akkumulierten) Abstands an einem bestimmten Wert oder einer bestimmten Bitposition. Die Berechnung des vollen Abstands wird in eine Anzahl von Teilabstandsberechnungen für unterschiedliche Metriken, wie z. B. Euklid, Manhattan oder Skalarprodukt, unterteilt, sodass nach dem Berechnen der höheren Bits eine Genauigkeitsverbesserung an niederrangigen Bitpositionen über aufeinanderfolgende Iterationen nie die höherrangigen Bits über eine bestimmte Schwelle hinaus verändert.The above-described systems, methods, and apparatus are operable to provide numerous advantages. The distance between vectors is calculated repeatedly so that in consecutive iterations the accuracy of the calculated distance improves from MSB to LSB. In each iteration, the calculation of a partial distance for a vector serves the purpose of improving the accuracy of the full (accumulated) distance at a particular value or bit position. The calculation of the full distance is divided into a number of part distance calculations for different metrics, such as: Euclid, Manhattan or scalar product, so that after computing the higher bits, accuracy improvement on lower order bit positions over successive iterations never alters the higher order bits beyond a certain threshold.

Obigen wird mithilfe (i) von Teilabstandsberechnungsschaltungen mit Schaltungen zur 1D-Berechnung unter Verwendung von Steuersignalen zum Berechnen des richtigen Teilabstands und angeordnet gemäß der Dimensionalität des Vektors, (ii) der unter Verwendung eines Kompressorbaumes summierten Teilabstände aller 1D-Berechnungen und (iii) eines Akkumulators mit Speicherung für den aktuellen akkumulierten Abstand, zu dem der Teilabstand hinzuaddiert wird, mit einem entsprechenden Wert unter Verwendung eines Schiebers erreicht.The above is accomplished by (i) dividing distance calculation circuits with circuits for 1D calculation using control signals to calculate the correct pitch and arranged according to the dimensionality of the vector, (ii) the partial distances of all 1D calculations summed using a compressor tree, and (iii) a Accumulator with storage for the current accumulated distance to which the pitch is added, having reached a corresponding value using a slider.

Die Sortierung an diesen akkumulierten Vektorabständen wartet nicht ab, dass der volle Abstand berechnet wurde – die Sortierung kann mit Abständen mit geringer Genauigkeit beginnen. Die Sortierung berücksichtigt nicht alle Bits der akkumulierten Abstände – sie erfolgt in Iterationen mit nur einem kleinen Fenster von Bits vom MSB bis zum LSB. Das Sortiernetzwerk verwendet eine programmierbare Schwelle (im Beispielfall ist es 1 oder 0), um zu erklären, ob das in jedem Vergleich und im gesamten Sortiernetzwerk in einer Iteration gefundene Minimum um mehr als diese Schwelle kleiner ist als jedwede andere Zahl.Sorting at these accumulated vector spacings does not wait for the full distance to be calculated - sorting can begin at low accuracy intervals. Sorting does not take into account all the bits of the accumulated distances - it is done in iterations with only a small window of bits from the MSB to the LSB. The sorting network uses a programmable threshold (in the example, it is 1 or 0) to explain whether the minimum found in each comparison and in the entire sort network in an iteration is smaller than any other number by more than this threshold.

Die Berechnung und die Sortierung werden vom MSB bis zum LSB verschränkt, sodass viele Referenzvektoren mit Abstandsberechnungen mit geringer Genauigkeit aus dem Suchraum verdrängt werden, während nur verbleibende Vektoren zur nächsten Iteration übergehen, um die Genauigkeit niedrigerer Bits zur Bestimmung des nächsten Nachbarn zu verbessern.The computation and sorting are interleaved from the MSB to the LSB so that many reference vectors with low accuracy distance computations are displaced out of the search space while only remaining vectors transition to the next iteration to improve the lower bit accuracy for closest neighbor determination.

Berechnungen im Zusammenhang mit jedem Vektor weisen eine lokale Steuerung auf, die Ergebnisse des Sortiernetzwerks dazu verwendet zu bestimmen, ob Berechnung und Sortierung für diesen Vektor zur nächsten Iteration übergehen oder ob er aus dem Suchraum entfernt wird.Computations related to each vector have a local control that uses results from the sorting network to determine whether calculation and sorting for that vector will proceed to the next iteration or be removed from the search space.

Lokale Steuerung und Abstandsakkumulatoren in jeder Berechnung halten einen Zustand selbst nach der Verdrängung aus dem Suchraum aufrecht Beim Finden des nächstfolgenden nächsten Nachbarn kann die lokale Steuerung den Vektor (basierend auf dem globalen Zeiger) wieder in den Suchraum einsetzen und etwaige frühere Berechnungen bis zum Moment der früheren Verdrängung wiederverwenden.Local control and space accumulators in each calculation maintain a state even after displacement from the search space. In finding the next nearest neighbor, the local controller can reinsert the vector (based on the global pointer) into the search space and any previous calculations up to the moment reuse earlier repression.

Die globale Steuerung koordiniert die Aktivität jener Bits in den akkumulierten Abständen, die an das Sortiernetzwerk gesendet werden, unter Verwendung eines globalen Zeigers, der an alle Vektoren übertragen wird.The global controller coordinates the activity of those bits in the accumulated distances sent to the sorting network using a global pointer that is transmitted to all vectors.

Steuersignale für die iterationsabhängige Teilabstandsberechnung werden auch an alle Vektoren aus der globalen Steuerung übertragen. Diese Steuersignale können in einer programmierbaren Nachschlagtabelle, auf die der globale Zeiger referenziert, oder als Logik mit fixer Funktion gespeichert werden.Control signals for the iteration-dependent partial distance calculation are also transmitted to all vectors from the global control. These control signals may be stored in a programmable look-up table referenced by the global pointer or as a fixed-function logic.

Die globale Steuerung verfolgt Iterationen, in denen Vektoren aus dem Suchraum verdrängt werden, wenn ein nächster Nachbar gefunden wird. Die globale Steuerung springt zurück auf den nächsten Iterationszustand, in dem Vektoren verdrängt wurden, um die Suche nur mit diesen verdrängten Vektoren im Suchraum zu beginnen und so den nächstfolgenden nächsten Nachbarn zu finden.The global controller tracks iterations in which vectors are forced out of the search space when a next neighbor is found. Global control jumps back to the next iteration state where vectors have been displaced to begin searching only with those displaced vectors in the search space to find the next nearest neighbor.

Der kNN-Beschleuniger kann programmierbar gemacht werden, um die Reihenfolge der Sortierung zu ändern.The kNN accelerator can be made programmable to change the order of sorting.

Jedwede Anzahl von Bitgrößen, Dimensionen oder jedwede Anzahl von Vektoren ist unterstützbar. Zusätzlich dazu ist in manchen Ausführungsformen der kNN-Beschleuniger so programmierbar, dass die Bitgrößen pro Dimension, Dimensionalität oder Anzahl der Referenzvektoren programmiert wird.Any number of bit sizes, dimensions, or any number of vectors is supportable. Additionally, in some embodiments, the kNN accelerator is programmable to program the bit sizes per dimension, dimensionality, or number of reference vectors.

Der Vorgang kann seriell gemacht werden, sodass eine Berechnung und eine Sortierung für unterschiedliche Referenzvektoren unter Verwendung gemeinsamer Teilabstandsberechnungs- und Sortierschaltungen durchgeführt werden.The process can be made serial such that computation and sorting for different reference vectors are performed using common pitch calculation and sort circuits.

Beispielhafte Kernarchitekturen, Prozessoren und ComputerarchitekturenExemplary core architectures, processors, and computer architectures

Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren implementiert werden. Beispielsweise umfassen Implementierungen solcher Kerne Folgendes: 1) einen In-order-Allzweckkern, der zur Allzweckberechnung vorgesehen ist; 2) einen Hochleistungs-Out-of-order-Allzweckkern, der zur Allzweckberechnung vorgesehen ist; 3) einen Spezialzweckkern, der in erster Linie für Grafik und/oder zur wissenschaftlichen (Durchsatz-)Berechnung vorgesehen ist. Implementierungen unterschiedlicher Prozessoren können Folgendes umfassen: 1) einen Hauptprozessor, der eine oder mehrere In-order-Allzweckkerne, die zur Allweckberechnung vorgesehen sind, und/oder einen oder mehrere Out-of-order-Allzweckkerne, die zur Allweckberechnung vorgesehen sind; und 2) einen Koprozessor, der einen oder mehrere Spezialzweckkerne umfasst, die in erster Linie für Grafik und/oder zur wissenschaftlichen (Durchsatz-)Berechnung vorgesehen ist. Solche unterschiedlichen Prozessoren ziehen unterschiedliche Computersystemarchitekturen nach sich, die Folgendes umfassen können: 1) den Koprozessor auf einem anderen Chip als den Hauptprozessor; 2) den Koprozessor auf einem anderen Nacktchip im selben Gehäuse wie einen Hauptprozessor; 3) den Koprozessor auf demselben Nacktchip wie einen Hauptprozessor (wobei in diesem Fall ein Koprozessor manchmal als Spezialzwecklogik bezeichnet wird, z. B. als integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik oder als Allzweckkerne); und 4) ein Ein-Chip-System, das auf demselben Nacktchip den beschriebenen Hauptprozessor (der manchmal als der/die Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet wird), den oben stehend beschriebenen Koprozessor und zusätzliche Funktionen umfassen kann. Beispielhafte Kernarchitekturen sind nachstehend beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.Processor cores can be implemented in different ways, for different purposes, and in different processors. For example, implementations of such cores include: 1) an in-order general purpose kernel intended for general purpose computing; 2) a high performance out-of-order general purpose kernel intended for general purpose computing; 3) a special purpose kernel intended primarily for graphics and / or scientific (throughput) computation. Implementations of different processors may include: 1) a main processor having one or more in-order general purpose cores intended for general purpose computing and / or one or more out-of-order general purpose cores intended for general purpose computation; and 2) a coprocessor comprising one or more special purpose cores intended primarily for graphics and / or for scientific (throughput) computation. Such different processors entail different computer system architectures that may include: 1) the coprocessor on a different chip than the main processor; 2) the coprocessor on another nude chip in the same housing as a main processor; 3) the coprocessor on the same die as a main processor (in which case a coprocessor is sometimes referred to as special purpose logic, e.g., as integrated graphics and / or scientific (throughput) logic or general purpose cores); and 4) a one-chip system running on the same die described main processor (sometimes referred to as the application core (s) or application processor (s)) may include the coprocessor described above and additional functions. Exemplary core architectures are described below, followed by descriptions of exemplary processors and computer architectures.

Beispielhafte KernarchitekturenExemplary core architectures

Blockschaltbild von In-order- und Out-of-order-KernenBlock diagram of in-order and out-of-order cores

16A ist ein Blockschaltbild, das sowohl eine beispielhafte In-order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-order-Problem/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt. 16B ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform eines In-order-Architekturkerns als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Problem/Ausführungs-Architekturkern zur Einbindung in einen Prozessor gemäß Ausführungsformen der Erfindung zeigt. Die mit durchgezogenen Linien umrahmten Kästchen in den 16A und B zeigen die In-order-Pipeline und den In-order-Kern, während die optionale Ergänzung, die mit gestrichelten Linien umrahmten Kästchen, die Registerumbenennungs-Out-of-order-Problem/Ausführungs-Pipeline bzw. den entsprechenden Kern zeigen. Davon ausgehend, dass der In-order-Aspekt eine Untermenge des Out-of-order-Aspekt ist, wird der Out-of-order-Aspekt beschrieben. 16A FIG. 10 is a block diagram showing both an exemplary in-order pipeline and an exemplary register rename out-of-order problem / execution pipeline in accordance with embodiments of the invention. FIG. 16B FIG. 12 is a block diagram illustrating both an exemplary embodiment of an in-order architecture core and an exemplary register renaming out-of-order problem / execution architecture core for incorporation into a processor in accordance with embodiments of the invention. The boxes framed by solid lines in the 16A and B show the in-order pipeline and the in-order core, while the optional complement, the boxes framed with dashed lines, show the register renaming out-of-order problem / execution pipeline or kernel. Assuming that the in-order aspect is a subset of the out-of-order aspect, the out-of-order aspect is described.

In 16A umfasst eine Prozessorpipeline 1600 eine Ladestufe 1602, eine Längendekodierstufe 1604, eine Dekodierstufe 1606, eine Zuweisungsstufe 1608, eine Umbenennungsstufe 1610, eine Ablaufplanungsstufe (auch als Abfertigungs- oder Problemstufe bekannt) 1612, eine Registerlese-/Speicherlesestufe 1614, eine Ausführungsstufe 1616, eine Rückschreib-/Speicherschreibstufe 1618, eine Ausnahmehandhabungsstufe 1622 und eine Verpflichtungsstufe 1624.In 16A includes a processor pipeline 1600 a charge level 1602 a length decoding stage 1604 , a decoding stage 1606 , an assignment level 1608 , a renaming level 1610 , a scheduling level (also known as the check-in or problem level) 1612 , a register read / memory read stage 1614 , an execution stage 1616 , a writeback / memory write stage 1618 , an exception handling level 1622 and a commitment level 1624 ,

16B zeigt einen Prozessorkern 1690, der eine mit einer Ausführungsmaschineneinheit 1650 gekoppelte Vorschalteinheit 1630 umfasst, und beide sind mit einer Speichereinheit 1670 gekoppelt. Der Kern 1690 kann ein Reduced-Instruction-Set-Computing-(RISC-)Kern, ein Complex-Instruction-Set-Computing-(CISC-)Kern, ein Very-Long-Instruction-Word-(VLIW-)Kern oder ein Hybrid oder ein alternativer Kerntyp sein. Als wieder weitere Option kann der Kern 1690 ein Spezialzweckkern sein, wie z. B. ein Netzwerk- oder Kommunikationskern, eine Kompressionsmaschine, ein Koprozessorkern, ein Allzweckcomputergrafikprozessor-(GPGPU-)Kern, ein Grafikkern oder dergleichen. 16B shows a processor core 1690 , one with an execution engine unit 1650 coupled ballast unit 1630 includes, and both are with a storage unit 1670 coupled. The core 1690 may be a reduced instruction set computing (RISC) core, a complex instruction set computing (CISC) core, a very long instruction word (VLIW) core, or a hybrid or a be alternative core type. As again another option may be the core 1690 be a special purpose core, such. A network or communication kernel, a compression engine, a coprocessor core, a general purpose computer graphics processor (GPGPU) core, graphics core, or the like.

Die Vorschalteinheit 1630 umfasst eine mit einer Befehlscacheeinheit 1634 gekoppelte Zweigvorhersageeinheit 1632, die mit einem Befehlsübersetzungspuffer (TLB) 1636 gekoppelt ist, der mit einer Befehlsladeeinheit 1638 gekoppelt ist, die mit einer Dekodiereinheit 1640 gekoppelt ist. Die Dekodiereinheit 1640 (oder der Dekodierer) kann Befehle dekodieren und als Ausgabe eine oder mehrere Micro-ops, Mikrocodeeingangspunkte, Mikrobefehle, sonstige Befehle oder sonstige Steuersignale erzeugen, die aus den ursprünglichen Befehlen dekodiert werden oder diese ansonsten widerspiegeln oder von diesen stammen. Die Dekodiereinheit 1640 kann unter Anwendung diverser unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, ohne auf diese beschränkt zu sein, Nachschlagtabellen, Hardwareimplementierungen, programmierbare Logikanordnungen (PLA), Mikrocode-Nur-Lese-Speicher (ROM) etc. In einer Ausführungsform umfasst der Kern 1690 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für bestimmte Makrobefehle (z. B. in der Dekodiereinheit 1640 oder ansonsten innerhalb der Vorschalteinheit 1630) speichert. Die Dekodiereinheit 1640 ist mit einer Umbenennungs-/Zuweisungseinheit 1652 in der Ausführungsmaschineneinheit 1650 gekoppelt.The ballast unit 1630 includes one with a command cache unit 1634 coupled branch prediction unit 1632 using a command translation buffer (TLB) 1636 coupled with an instruction loading unit 1638 coupled with a decoding unit 1640 is coupled. The decoding unit 1640 (or the decoder) may decode instructions and generate as output one or more micro-ops, microcode entry points, micro-instructions, other instructions, or other control signals that are decoded from, or otherwise reflect or originate from, the original instructions. The decoding unit 1640 can be implemented using a variety of different mechanisms. Examples of suitable mechanisms include, but are not limited to, lookup tables, hardware implementations, programmable logic arrays (PLA), microcode read only memory (ROM), etc. In one embodiment, the core comprises 1690 a microcode ROM or other medium containing the microcode for certain macroinstructions (e.g., in the decode unit 1640 or otherwise within the ballast unit 1630 ) stores. The decoding unit 1640 is with a rename / assignment unit 1652 in the execution machine unit 1650 coupled.

Die Ausführungsmaschineneinheit 1650 umfasst die Umbenennungs-/Zuweisungseinheit 1652 mit einer Ruheeinheit 1654 und einem Satz aus einer oder mehreren Ablaufplanereinheiten 1656. Die eine oder die mehreren Ablaufplanereinheiten 1656 stehen für jedwede Anzahl an unterschiedlichen Ablaufplanern, darunter Reservierungsstationen, zentrales Befehlsfenster etc. Die eine oder die mehreren Ablaufplanereinheiten 1656 sind mit der/den physikalischen Registersatzeinheit(en) 1658 gekoppelt. Jede der Registersatzeinheiten 1658 steht für einen oder mehrere physikalische Registersätze, von denen unterschiedliche einen oder mehrere unterschiedliche Datentypen speichern, wie z. B. skalare ganze Zahl, skalares Gleitkomma, eingehauste ganze Zahl, eingehaustes Gleitkomma, ganze Vektorzahl, Vektorgleitkomma, Status (z. B. ein Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. In einer Ausführungsform umfasst die eine oder umfassen die mehreren physikalischen Registersätze 1658 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten stellen Architekturvektorregister, Vektormaskenregister und Allzweckregister bereit. Die eine oder die mehreren physikalischen Registersatzeinheiten 1658 überlappt sich mit der Ruheeinheit 1654, um diverse Arten zu veranschaulichen, wie Registerumbenennung und Out-of-order-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und eines oder mehrerer Ruheregistersätze; unter Verwendung eines oder mehrerer Zukunftssätze, Verlaufspuffer und Ruheregistersätze; unter Verwendung einer Registerkarte und eines Pools von Registern; etc.). Die Ruheeinheit 1654 und die eine oder die mehreren physikalischen Registersatzeinheiten 1658 sind mit dem einen oder den mehreren Ausführungsclustern 1660 gekoppelt. Der eine oder die mehreren Ausführungscluster 1660 umfassen einen Satz einer oder mehrerer Ausführungseinheiten 1662 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 1664. Die Ausführungseinheiten 1662 können diverse Vorgänge (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an diversen Arten von Daten durchführen (z. B. am skalaren Gleitkomma, an der eingehausten ganzen Zahl, am eingehausten Gleitkomma, an der ganzen Vektorzahl, am Vektorgleitkomma). Zwar können solche Ausführungsformen eine Reihe von Ausführungseinheiten umfassen, die konkreten Funktionen oder Funktionengruppen zugeordnet sind, andere Ausführungsformen können aber nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die allesamt alle Funktionen ausüben. Die eine oder die mehreren Ablaufplanereinheiten 1656, die eine oder die mehreren physikalischen Registersatzeinheiten 1658 und die eine oder die mehreren Ausführungscluster 1660 sind als möglicherweise in der Mehrzahl dargestellt, da bestimmte Ausführungsformen gesonderte Pipelines für bestimmte Arten von Daten/Vorgängen erzeugen (z. B. eine Pipeline für skalare ganze Zahlen, eine Pipeline für skalare Gleitkommata/eingehauste ganze Zahlen/eingehauste Gleitkommata/ganze Vektorzahlen/Vektorgleitkommata und/oder eine Speicherzugriffspipeline, die jeweils ihre eigene Ablaufplanereinheit, eine oder mehrere physikalische Registersatzeinheiten und/oder Ausführungscluster aufweisen – und im Falle einer gesonderten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, in denen nur der Ausführungscluster dieser Pipeline die eine oder die mehreren Speicherzugriffseinheiten 1664 aufweist). Es versteht sich also auch, dass, wenn gesonderte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Out-of-order-Problem/Ausführung und der Rest In-order sein kann.The execution machine unit 1650 includes the rename / assignment unit 1652 with a rest unit 1654 and a set of one or more scheduler units 1656 , The one or more scheduler units 1656 stand for any number of different schedulers, including reservation stations, central command window, etc. The one or more scheduler units 1656 are with the physical register unit (s) 1658 coupled. Each of the registry units 1658 stands for one or more physical register sets, each of which stores one or more different types of data, such as: Scalar integer, scalar floating point, encoded integer, floating floating point, integer vector number, vector floating point, status (eg, an instruction pointer which is the address of the next instruction to execute), etc. In one embodiment, the one or more comprises several physical register sets 1658 a vector register unit, a write mask register unit and a scalar register unit. These register units provide architectural vector registers, vector mask registers, and general-purpose registers. The one or more physical register data units 1658 overlaps with the rest unit 1654 to illustrate various ways in which register renaming and out-of-order execution may be implemented (eg, using one or more reordering buffers and one or more idle register sets using one or more Future sets, history buffers, and idle register sets; using a tab and a pool of registers; Etc.). The resting unit 1654 and the one or more physical register data units 1658 are with the one or more execution clusters 1660 coupled. The one or more execution clusters 1660 comprise a set of one or more execution units 1662 and a set of one or more memory access units 1664 , The execution units 1662 can carry out various operations (eg shifts, addition, subtraction, multiplication) and on various types of data (eg at the scalar floating point, at the integer integer, at the floating floating point, at the whole vector number, at the vector floating point) , While such embodiments may include a number of execution units associated with particular functions or groups of functions, other embodiments may include only one or more execution units, all of which perform all functions. The one or more scheduler units 1656 containing one or more physical register data units 1658 and the one or more execution clusters 1660 are presented as possibly in the plural, as certain embodiments generate separate pipelines for certain types of data / operations (eg, a scalar integer pipeline, a scalar floating point / integer integer / hopped floating / integer vector / floating point) and / or a memory access pipeline each having its own scheduler unit, one or more physical register unit units and / or execution clusters - and in the case of a separate memory access pipeline, certain embodiments are implemented in which only the execution cluster of that pipeline is the one or more memory access units 1664 having). Thus, it will also be understood that if separate pipelines are used, one or more of these pipelines may be out-of-order problem / execution and the remainder in-order.

Der Satz Speicherzugriffseinheiten 1664 ist mit der Speichereinheit 1670 gekoppelt, die eine Daten-TLB-Einheit 1672 umfasst, die mit einer Datencacheeinheit 1674 gekoppelt ist, die mit einer Ebene-2-(L2-)Cacheeinheit 1676 gekoppelt ist. In einem Ausführungsbeispiel können die Speicherzugriffseinheiten 1664 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 1672 in der Speichereinheit 1670 gekoppelt sind. Die Befehlscacheeinheit 1634 ist ferner mit einer Ebene-2-(L2-)Cacheeinheit 1676 in der Speichereinheit 1670 gekoppelt. Die L2-Cacheeinheit 1676 ist mit einer oder mehreren anderen Cacheebenen und letztendlich mit einem Hauptspeicher gekoppelt.The set of storage access units 1664 is with the storage unit 1670 coupled to a data TLB unit 1672 includes with a data cache unit 1674 coupled with a level 2 (L2) cache unit 1676 is coupled. In one embodiment, the memory access units 1664 a load unit, a memory address unit, and a memory data unit, each associated with the data TLB unit 1672 in the storage unit 1670 are coupled. The command cache unit 1634 is further provided with a level 2 (L2) cache unit 1676 in the storage unit 1670 coupled. The L2 cache unit 1676 is coupled to one or more other cache levels and ultimately to a main memory.

Beispielsweise kann die beispielhafte Registerumbenennungs-Out-of-order-Problem/Ausführungs-Kernarchitektur die Pipeline 1600 wie folgt implementieren: 1) der Ladebefehl 1638 führt die Lade- und die Längendekodierstufe 1602 bzw. 1604 durch; 2) die Dekodiereinheit 1640 führt die Dekodierstufe 1606 durch; 3) die Umbenennungs-/Zuweisungseinheit 1652 führt die Zuweisungsstufe 1608 und die Umbenennungsstufe 1610 durch; 4) die eine oder die mehreren Ablaufplanereinheiten 1656 führen die Ablaufplanungsstufe 1612 durch; 5) die eine oder die mehreren physikalischen Registersatzeinheiten 1658 und die Speichereinheit 1670 führen die Registerlese-/Speicherlesestufe 1614 durch; der Ausführungscluster 1660 führt die Ausführungsstufe 1616 durch; 6) die Speichereinheit 1670 und die eine oder die mehreren physikalischen Registersatzeinheiten 1658 führen die Rückschreib-/Speicherschreibstufe 1618 durch; 7) diverse Einheiten können an der Ausnahmenhandhabungsstufe 1622 beteiligt sein; und 8) die Ruheeinheit 1654 und die eine oder die mehreren physikalischen Registersatzeinheiten 1658 führen die Verpflichtungsstufe 1624 durch.For example, the exemplary register renaming out-of-order problem / execution core architecture may be the pipeline 1600 implement as follows: 1) the load instruction 1638 performs the load and length decode stages 1602 respectively. 1604 by; 2) the decoding unit 1640 performs the decode stage 1606 by; 3) the rename / assignment unit 1652 performs the assignment stage 1608 and the renaming level 1610 by; 4) the one or more scheduler units 1656 lead the scheduling stage 1612 by; 5) the one or more physical register data units 1658 and the storage unit 1670 carry the register read / memory read stage 1614 by; the execution cluster 1660 leads the execution stage 1616 by; 6) the storage unit 1670 and the one or more physical register data units 1658 perform the writeback / memory write stage 1618 by; 7) Diverse units can be at the exception handling level 1622 be involved; and 8) the rest unit 1654 and the one or more physical register data units 1658 lead the commitment level 1624 by.

Der Kern 1690 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die mit neueren Versionen hinzugefügt wurden); den Befehlssatz MIPS von MIPS Technologies in Sunnyvale, Kalifornien; den Befehlssatz ARM (mit optionalen zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings in Sunnyvale, Kalifornien), einschließlich des einen oder der mehreren hierin beschriebenen Befehle, umfassen. In einer Ausführungsform umfasst der Kern 1690 Logik zum Unterstützen einer eingehausten Datenbefehlssatzerweiterung (z. B. AVX1, AVX2), was ermöglicht, dass die von vielen multimedialen Anwendungen verwendeten Vorgänge unter Verwendung eingehauster Daten ausgeführt werden.The core 1690 may include one or more sets of instructions (e.g., the x86 instruction set (with some extensions added with newer versions); the MIPS instruction set from MIPS Technologies of Sunnyvale, California, the ARM instruction set (with optional additional extensions, such as the. NEON) from ARM Holdings in Sunnyvale, California), including the one or more commands described herein. In an embodiment, the core comprises 1690 Logic to support a cached data instruction set extension (e.g., AVX1, AVX2), which allows the operations used by many multimedia applications to be performed using cached data.

Es versteht sich, dass der Kern Mehrsträngigkeit (das Ausführen von zwei oder mehreren parallelen Gruppen von Vorgängen oder Strängen) unterstützen kann, und zwar auf vielerlei Arten, darunter Zeitscheibenmehrsträngigkeit, gleichzeitige Mehrsträngigkeit (wobei ein einziger physikalischer Kern einen logischen Kern für jeden der Stränge bereitstellt, an denen dieser Kern gleichzeitig Mehrsträngigkeit anwendet) oder eine Kombination davon (z. B. ein Laden und Dekodieren in Zeitscheiben und danach gleichzeitige Mehrsträngigkeit, wie z. B. bei der Hyperthreading-Technologie von Intel®).It should be understood that the core can support multi-strandedness (carrying out two or more parallel groups of processes or strands) in a variety of ways, including time-slicing, simultaneous multi-stranding (where a single physical core provides a logical core for each of the strands in which this core multithreading same applies) or a combination thereof (eg. as a loading and decoding in time slices and then simultaneous multithreading, such as. for example, in the Hyper-Threading technology from Intel ®).

Zwar wird die Registerumbenennung im Kontext der Out-of-order-Ausführung beschrieben, dennoch versteht sich, dass Registerumbenennung auch bei einer In-order-Architektur zum Einsatz kommen kann. Zwar umfasst die gezeigte Ausführungsform des Prozessors auch gesonderte Befehls- und Datencacheeinheiten 1634/1674 und eine gemeinsame L2-Cacheeinheit 1676, aber alternative Ausführungsformen können einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie z. B. einen internen Ebene-1-(L1-)Cache oder mehrere Ebenen internen Caches. In manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, die außerhalb des Kerns und/oder des Prozessors liegt. Alternative dazu kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors liegen.Although register renaming is described in the context of out-of-order execution, it should be understood that register renaming may also be used in an in-order architecture. Although the illustrated embodiment of the processor also includes separate command and Data cache units 1634 / 1674 and a common L2 cache unit 1676 However, alternative embodiments may include a single internal cache for both instructions and data, such as: An internal level 1 (L1) cache or multiple levels of internal cache. In some embodiments, the system may include a combination of an internal cache and an external cache that is external to the core and / or the processor. Alternatively, the entire cache may be external to the core and / or the processor.

Konkrete beispielhafte In-order-KernarchitekturConcrete exemplary in-order core architecture

Die 17A und B zeigen ein Blockschaltbild einer konkreteren beispielhaften In-order-Kernarchitektur, wobei der Kern einer von mehreren Logikblöcken (darunter andere Kerne desselben Typs und/oder unterschiedlicher Typen) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Zwischenverbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einer Logik mit fixer Funktion, Speicher-I/O-Schnittstellen und sonstiger notwendiger I/O-Logik, je nach Anwendung.The 17A and Figure B show a block diagram of a more concrete example in-order core architecture, where the core would be one of several logic blocks (including other cores of the same type and / or different types) in a chip. The logic blocks communicate through a high bandwidth interconnect network (eg, a ring network) with fixed-function logic, memory I / O interfaces, and other necessary I / O logic, depending on the application.

17A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit dessen Verbindung mit dem nacktchipinternen Zwischenverbindungsnetzwerk 1702 und mit dessen lokaler Untermenge auf dem Ebene-2-(L2-)Cache 1704 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdekodierer 1700 den x86-Befehlssatz mit einer eingehausten Datenbefehlssatzerweiterung. Ein L1-Cache 1706 ermöglicht Zugriffe auf Cachespeicher in die skalaren und Vektoreinheiten mit niedriger Latenz. Zwar verwenden in einer Ausführungsform (zur Vereinfachung der Auslegung) eine Skalareinheit 1708 und eine Vektoreinheit 1710 jeweils gesonderte Registersätze (nämlich die skalaren Register 1712 bzw. die Vektorregister 1714) und werden die zwischen ihnen übertragenen Daten dem Speicher eingeschrieben und dann aus einem Ebene-1-(L1-)Cache 1706 zurückgelesen, aber alternative Ausführungsformen der Erfindung können auf einen anderen Ansatz zurückgreifen (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad einbinden, der ermöglicht, dass Daten zwischen den beiden Registersätzen übertragen werden, ohne eingeschrieben und zurückgelesen zu werden). 17A Figure 4 is a block diagram of a single processor core along with its connection to the bare-chip interconnect network 1702 and with its local subset at the level 2 (L2) cache 1704 according to embodiments of the invention. In one embodiment, a command decoder supports 1700 the x86 instruction set with a purged data instruction set extension. An L1 cache 1706 allows accesses to caches in the low latency scalar and vector units. While in one embodiment (to simplify the design), a scalar unit is used 1708 and a vector unit 1710 separate register sets (namely the scalar registers 1712 or the vector registers 1714 ) and the data transferred between them are written to the memory and then from a level 1 (L1) cache 1706 but alternative embodiments of the invention may use a different approach (eg, use a single set of registers or include a communication path that allows data to be transferred between the two sets of registers without being written in and read back).

Der lokale Teilsatz des L2-Caches 1704 ist Teil eines globalen L2-Caches, der in getrennte lokale Teilsätze unterteilt ist, einen pro Prozessorkern. Jeder Prozessorkern weist einen Zufallszugriffspfad auf ihren eigenen Teilsatz des L2-Caches 1704 auf. Durch einen Prozessorkern gelesene Daten werden in ihrem L2-Cache-Teilsatz 1704 gespeichert, und es kann schnell auf sie zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre jeweils eigenen lokalen L2-Cache-Teilsätzen zugreifen. Durch einen Prozessorkern eingeschriebene Daten werden in dessen eigenem L2-Cache-Teilsatz 1704 gespeichert und erforderlichenfalls aus anderen Teilsätzen herausgespült. Das Ringnetzwerk gewährleistet Kohärenz für gemeinsame Daten. Das Ringnetzwerk ist bidirektional, damit Agenten wie Prozessorkerne, L2-Caches und andere Logikblöcke innerhalb des Chips miteinander kommunizieren können. Jeder Ringdatenpfad ist in jede Richtung 1012 Bits breit.The local subset of the L2 cache 1704 is part of a global L2 cache that is divided into separate local subsets, one per processor core. Each processor core has a random access path on its own subset of the L2 cache 1704 on. Data read by a processor core becomes in its L2 cache subset 1704 are stored, and can be accessed quickly, in parallel with other processor cores accessing their own local L2 cache subsets. Data written by a processor core becomes its own L2 cache subset 1704 stored and if necessary rinsed out of other subsets. The ring network ensures coherence for shared data. The ring network is bidirectional so that agents such as processor cores, L2 caches, and other logic blocks within the chip can communicate with each other. Each ring data path is in each direction 1012 Bits wide.

17B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns aus 17A gemäß Ausführungsformen der Erfindung. 17B umfasst einen L1-Datencache, der Teil des L1-Caches 1704 ist, sowie mehr Details zur Vektoreinheit 1710 und zu den Vektorregistern 1714. Konkret ist die Vektoreinheit 1710 ein Vektorprozessor (VPU) der Breite 16 (siehe die ALU 1728 mit Breite 16), der einen oder mehrere der Befehle ganze Zahl, Gleitkomma mit einfacher Genauigkeit und Gleitkomma mit doppelter Genauigkeit ausführt. Der VPU unterstützt das Mischen der Registereingaben mit der Mischeinheit 1720, numerische Umrechnung mit den numerischen Umrechnungseinheiten 1722A und B und Replizierung mit der Replizierungseinheit 1724 auf der Speichereingabe. Schreibmaskenregister 1726 ermöglichen das Vorhersagen von resultierenden Vektorschreibvorgängen. 17B is an enlarged view of a portion of the processor core 17A according to embodiments of the invention. 17B includes an L1 data cache that is part of the L1 cache 1704 is, as well as more details about the vector unit 1710 and to the vector registers 1714 , Concrete is the vector unit 1710 a vector processor (VPU) of width 16 (see the ALU 1728 width 16) that executes one or more of the integer, single precision, and double precision floating point commands. The VPU supports mixing the register inputs with the mixing unit 1720 , numerical conversion with the numerical conversion units 1722a and B and replication with the replication unit 1724 on the storage input. Write mask registers 1726 allow for predicting resulting vector writes.

Prozessor mit integrierter Speichersteuerung und GrafikProcessor with integrated memory control and graphics

18 ist ein Blockschaltbild eines Prozessors 1800, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die mit durchgezogenen Linien umrahmten Kästchen in 18 zeigen einen Prozessor 1800 mit einem Einzelkern 1802A, einem Systemagenten 1810, einer Gruppe von einer oder mehreren Bussteuerungseinheiten 1816, während die zusätzliche Ergänzung, die mit gestrichelten Linien umrahmten Kästchen, einen alternativen Prozessor 1800 mit mehreren Kernen 1802A bis N, einer Gruppe von einer oder mehreren integrierten Speichersteuerungseinheiten 1814 in der Systemagenteneinheit 1810 und Spezialzwecklogik 1808 zeigt. 18 is a block diagram of a processor 1800 which may have more than one core, may have an integrated memory controller and may have integrated graphics, according to embodiments of the invention. The boxes framed by solid lines in 18 show a processor 1800 with a single core 1802A , a system agent 1810 , a group of one or more bus control units 1816 while the extra complement, the boxed framed boxes, an alternative processor 1800 with several cores 1802A to N, a group of one or more integrated memory control units 1814 in the system agent unit 1810 and special purpose logic 1808 shows.

So können unterschiedliche Implementierungen des Prozessors 1800 Folgendes umfassen: 1) einen Hauptprozessor, bei dem die Spezialzwecklogik 1808 integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik (die eine oder mehrere Kerne umfassen kann) ist und die Kerne 1802A bis N ein oder mehrere Allzweckkerne sind (z. B. Allzweck-In-order-Kerne, Allzweck-Out-of-order-Kerne, eine Kombination dieser beiden); 2) einen Koprozessor, bei dem die Kerne 1802A bis N eine große Anzahl von Spezialzweckkernen sind, die in erster Linie für Grafik und/oder wissenschaftliche (Durchsatz-)Logik vorgesehen sind; und 3) einen Koprozessor, bei dem die Kerne 1802A bis N eine große Anzahl an Allzweck-In-order-Kernen sind. So kann der Prozessor 1800 ein Allzweckprozessor, ein Koprozessor oder ein Spezialzweckprozessor, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, ein GPGPU (Allzweckgrafikprozessor), ein Hochdurchsatz-Many-Integrated-Core-(-MIC-)Koprozessor (der 30 oder mehr Kerne umfasst), ein eingebetteter Prozessor oder dergleichen, sein. der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 1800 kann Teil von einem oder mehreren Substraten und/oder auf diesen unter Anwendung jedweder aus einer Reihe von Verfahrenstechnologien implementiert sein, wie z. B. BiCMOS, CMOS oder NMOS.So can different implementations of the processor 1800 The following comprise: 1) a main processor, where the special purpose logic 1808 integrated graphics and / or scientific (throughput) logic (which may include one or more cores) and the cores 1802A until N is one or more general purpose cores (e.g., general-purpose in-order cores, general-purpose out-of-order cores, a combination of these two); 2) a coprocessor, in which the cores 1802A to N a large number of Special purpose cores intended primarily for graphics and / or scientific (throughput) logic; and 3) a coprocessor in which the cores 1802A until N are a large number of general-purpose in-order cores. So can the processor 1800 a general purpose processor, a coprocessor or a special purpose processor such as A network or communications processor, a compression engine, a graphics processor, a GPGPU (general purpose graphics processor), a high-throughput many-integer-core (- MIC) coprocessor (comprising 30 or more cores), an embedded processor or the like, be. the processor may be implemented on one or more chips. The processor 1800 may be part of and / or implemented on one or more substrates using any of a variety of process technologies, such as: B. BiCMOS, CMOS or NMOS.

Die Speicherhierarchie umfasst eine oder mehrere Cacheebenen innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsame Cacheeinheiten 1806 und (nicht dargestellten) externen Speicher, der mit dem Satz integrierter Speichersteuerungseinheiten 1814 gekoppelt ist. Der Satz gemeinsamer Cacheeinheiten 1806 kann einen oder mehrere Mittelebenencaches umfassen, wie z. B. Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cacheebenen, einen Last-Level-Cache (LLC) und/oder Kombinationen davon. Während in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 1812 die integrierte Grafiklogik 1808, den Satz gemeinsamer Cacheeinheiten 1806 und die Systemagenteneinheit 1810/die eine oder die mehreren integrierten Speichersteuerungseinheiten 1814 miteinander verbindet, können alternative Ausführungsformen jedwede Anzahl hinlänglich bekannter Verfahren zur Verbindung solcher Einheiten verwenden. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cache-Einheiten 1806 und den Kernen 1802-A–N aufrechterhalten.The memory hierarchy includes one or more cache levels within the cores, a set, or one or more shared cache units 1806 and external memory (not shown) coupled to the set of integrated memory control units 1814 is coupled. The set of shared cache units 1806 may include one or more center-level caches, such as Level 2 (L2), Level 3 (L3), Level 4 (L4) or other cache levels, a Last Level Cache (LLC), and / or combinations thereof. While in one embodiment, a ring-based interconnect unit 1812 the integrated graphics logic 1808 , the set of shared cache units 1806 and the system agent unit 1810 the one or more integrated memory controllers 1814 alternate embodiments may use any number of well-known methods for connecting such devices. In one embodiment, coherency between one or more cache units becomes 1806 and the cores 1802-A -N maintained.

In manchen Ausführungsformen ist einer oder sind mehrere der Kerne 1802A bis N zu Mehrsträngigkeit in der Lage. Der Systemagent 1810 umfasst jene Komponenten, die die Kerne 1802A bis N koordinieren und betreiben. Die Systemagenteneinheit 1810 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und oder zur Regelung des Leistungszustands der Kerne 1802A bis N und der integrierten Grafiklogik 1808 benötigte Komponenten sein oder umfassen. Die Anzeigeeinheit dient dem Betrieb einer oder mehrerer extern verbundener Anzeigen.In some embodiments, one or more of the cores 1802A to N to multi-stranded in the situation. The system agent 1810 includes those components that are the cores 1802A to coordinate and operate N. The system agent unit 1810 can z. A power control unit (PCU) and a display unit. The PCU may be logic and or for regulating the power state of the cores 1802A to N and the integrated graphics logic 1808 be required components or include. The display unit is used to operate one or more externally connected displays.

Die Kerne 1802A bis N können ihren Architekturbefehlssatz betreffend homogen oder heterogen sein; d. h. zwei oder mehrere der Kerne 1802A bis können zur Ausführung desselben Befehlssatzes in der Lage sein, während andere in der Lage sein können, nur ein Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.The cores 1802A to N may be homogeneous or heterogeneous in their architectural instruction set; ie two or more of the cores 1802A to may be capable of executing the same instruction set while others may be capable of executing only a subset of that instruction set or other instruction set.

Beispielhafte ComputerarchitekturenExemplary Computer Architectures

Die 19 bis 22 sind Blockschaltbilder beispielhafter Computerarchitekturen. Auch andere fachbekannte Auslegungen und Konfigurationen für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, Technikarbeitsplätze, Server, Netzwerkvorrichtungen, Netzwerkknoten, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrocontroller, Handys, tragbare Mediaplayer, Handheldvorrichtungen und diverse andere elektronische Vorrichtungen sind geeignet. Im Allgemeinen ist eine gigantische Vielzahl an Systemen oder elektronischen Vorrichtungen allgemein geeignet, die in der Lage sind, einen Prozessor und/oder sonstige Ausführungslogik wie hierin offenbart zu umfassen.The 19 to 22 are block diagrams of exemplary computer architectures. Also other well-known designs and configurations for laptops, desktops, handheld PCs, personal digital assistants, engineering workstations, servers, network devices, network nodes, switches, embedded processors, digital signal processors (DSP), graphics devices, video game devices, set-top boxes, microcontrollers, Cell phones, portable media players, handheld devices, and various other electronic devices are suitable. In general, a gigantic variety of systems or electronic devices capable of incorporating a processor and / or other execution logic as disclosed herein are generally suitable.

Unter nunmehriger Bezugnahme auf 19 ist ein Blockschaltbild eines Systems 1900 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 1900 kann einen oder mehrere Prozessoren 1910, 1915 umfassen, die mit einem Steuerungsnetzknoten 1920 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungsnetzknoten 1920 einen Grafikspeichersteuerungsnetzknoten (GMCH) 1990 und einen Eingabe-/Ausgabe-Netzknoten (IOH) 1950 (die jeweils auf gesonderten Chips sein können); der GMCH 1990 umfasst Speicher- und Grafiksteuerungen, mit denen ein Speicher 1940 und ein Koprozessor 1945 gekoppelt sind; der IOH 1950 koppelt Eingabe-/Ausgabe-(I/O-)Vorrichtungen 1960 mit dem GMCH 1990. Alternativ dazu ist einer oder sind beide von Speicher- und Grafiksteuerung in den Prozessor (wie hierin beschrieben) integriert, sind der Speicher 1940 und der Koprozessor 1945 direkt mit dem Prozessor 1910 gekoppelt und der Steuerungsnetzknoten 1920 mit dem IOH 1950 in einem einzigen Chip.Referring now to 19 is a block diagram of a system 1900 according to an embodiment of the present invention. The system 1900 can be one or more processors 1910 . 1915 include with a control hub 1920 are coupled. In an embodiment, the control node comprises 1920 a graphics memory control hub (GMCH) 1990 and an input / output network node (IOH) 1950 (which may each be on separate chips); the GMCH 1990 includes memory and graphics controls that use a memory 1940 and a coprocessor 1945 coupled; the IOH 1950 couples input / output (I / O) devices 1960 with the GMCH 1990 , Alternatively, one or both of memory and graphics controllers are integrated into the processor (as described herein) are the memory 1940 and the coprocessor 1945 directly with the processor 1910 coupled and the control network node 1920 with the IOH 1950 in a single chip.

Dass zusätzliche Prozessoren 1915 optional sind, wird in 19 durch unterbrochene Linien angedeutet. Jeder Prozessor 1910, 1915 kann einen oder mehrere der hierin beschriebenen Prozessorkerne umfassen und die eine oder andere Version des Prozessors 1800 sein.That extra processors 1915 are optional, will be in 19 indicated by broken lines. Every processor 1910 . 1915 may include one or more of the processor cores described herein and one or the other version of the processor 1800 be.

Der Speicher 1940 kann z. B. ein dynamischer Direktzugriffsspeicher (DRAM), ein Phasenänderungsspeicher (PCM) oder eine Kombination dieser beiden sein. Zumindest für eine Ausführungsform kommuniziert der Steuerungsnetzknoten 1920 mit dem einen oder den mehreren Prozessoren 1910, 1915 über einen Multidrop-Bus, wie z. B. einen Front-Side-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1995.The memory 1940 can z. Dynamic random access memory (DRAM), phase change memory (PCM), or a combination of both. For at least one embodiment, the control node communicates 1920 with the one or more processors 1910 . 1915 via a multidrop bus, such. B. a front-side bus (FSB), a point-to-point interface, such as For example, QuickPath Interconnect (QPI) or a similar connection 1995 ,

In einer Ausführungsform ist der Koprozessor 1945 ein Spezialzweckprozessor, wie z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, ein GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsnetzknoten 1920 einen integrierten Grafikbeschleuniger umfassen.In one embodiment, the co-processor is 1945 a special purpose processor, such as A high-throughput MIC processor, a network or communications processor, a compression engine, a graphics processor, a GPGPU, an embedded processor, or the like. In one embodiment, the control node may be 1920 include an integrated graphics accelerator.

Im Sinne eines nützlichen Metrikspektrums kann es vielerlei Unterschiede zwischen den physikalischen Ressourcen 1910, 1915 geben, etwa architektonische, mikroarchitektonische, temperaturbezogene, Leistungsverbrauchseigenschaften und dergleichen.In terms of a useful metric spectrum, there can be many differences between physical resources 1910 . 1915 such as architectural, microarchitectural, temperature related, power consumption characteristics, and the like.

In einer Ausführungsform führt der Prozessor 1910 Befehle aus, die Datenverarbeitungsvorgänge einer allgemeinen Art steuern. In die Befehle können Koprozessorbefehle eingebettet sein. Der Prozessor 1910 erkennt diese Koprozessorbefehle als solche von einer Art, die durch den angeschlossenen Koprozessor 1945 ausgeführt werden sollten. Dementsprechend richtet der Prozessor 1910 diese Koprozessorbefehle (oder Koprozessorbefehle darstellenden Steuersignale) auf einem Koprozessorbus oder einer sonstigen Zwischenverbindung an den Koprozessor 1945. Der eine oder die mehreren Koprozessoren 1945 nehmen die empfangenen Koprozessorbefehle an und führen sie aus.In one embodiment, the processor performs 1910 Commands that control data processing operations of a general type. Coprocessor instructions may be embedded in the instructions. The processor 1910 recognizes these coprocessor instructions as such of a type that is provided by the attached coprocessor 1945 should be executed. Accordingly, the processor judges 1910 these coprocessor instructions (or coprocessor instructions representing control signals) on a coprocessor bus or other interconnect to the coprocessor 1945 , The one or more coprocessors 1945 accept and execute the received coprocessor instructions.

Unter nunmehriger Bezugnahme auf 20, ist ein Blockschaltbild eines ersten konkreteren beispielhaften Systems 2000 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 20 dargestellt, ist das Mehrprozessorsystem 2000 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 2070 und einen zweiten Prozessor 2080, die über eine Punkt-zu-Punkt-Zwischenverbindung 2050 miteinander gekoppelt sind. Jeder der Prozessoren 2070 und 2080 kann die eine oder andere Version des Prozessors 1800 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 2070 und 280 jeweils die Prozessoren 1910 bzw. 1915, während der Koprozessor 2038 der Koprozessor 1945 ist. In einer weiteren Ausführungsform sind die Prozessoren 2070 und 2080 jeweils der Prozessor 1910 bzw. der Koprozessor 1945.Referring now to 20 Figure 13 is a block diagram of a first more concrete exemplary system 2000 according to an embodiment of the present invention. As in 20 is the multiprocessor system 2000 a point-to-point interconnect system and includes a first processor 2070 and a second processor 2080 that have a point-to-point link 2050 coupled together. Each of the processors 2070 and 2080 can be one or the other version of the processor 1800 be. In one embodiment of the invention, the processors are 2070 and 280 each of the processors 1910 respectively. 1915 while the coprocessor 2038 the coprocessor 1945 is. In another embodiment, the processors are 2070 and 2080 each processor 1910 or the coprocessor 1945 ,

Die Prozessoren 2070 und 2080 sind einschließlich integrierter Speichersteuerungs-(IMC-)Einheiten 2072 bzw. 2982 dargestellt. Der Prozessor 2070 umfasst als Teil seiner Bussteuerungseinheiten auch Punkt-zu-Punkt-(P-P-)Schnittstellen 2076 und 2078; analog dazu umfasst der zweite Prozessor 2080 die P-P-Schnittstellen 2086 und 2088. Die Prozessoren 2070, 2080 können über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 2050 unter Verwendung der P-P-Schnittstellenschaltungen 2078, 2088 Informationen austauschen. Wie in 20 dargestellt, koppeln die IMC 2072 und 2082 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 2032 und einem Speicher 2034, die Abschnitte eines lokal an die jeweiligen Prozessoren angeschlossenen Hauptspeichers sein können.The processors 2070 and 2080 including integrated memory control (IMC) units 2072 respectively. 2982 shown. The processor 2070 also includes point-to-point (PP) interfaces as part of its bus control units 2076 and 2078 ; Analogously, the second processor comprises 2080 the PP interfaces 2086 and 2088 , The processors 2070 . 2080 can use a point-to-point (PP) interface 2050 using the PP interface circuits 2078 . 2088 Exchange information. As in 20 shown, couple the IMC 2072 and 2082 the processors with respective memories, namely a memory 2032 and a memory 2034 which may be sections of a main memory locally connected to the respective processors.

Die Prozessoren 2070, 2080 können über einzelne P-P-Schnittstellen 2052, 2054 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 2076, 2094, 2086, 2098 jeweils Informationen mit einem Chipsatz 2090 austauschen. Der Chipsatz 2090 kann gegebenenfalls über eine Hochleistungsschnittstelle 2039 Informationen mit dem Koprozessor 2038 austauschen. In einer Ausführungsform ist der Koprozessor 2038 ein Spezialzweckprozessor, wie z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, ein GPGPU, ein eingebetteter Prozessor oder dergleichen.The processors 2070 . 2080 can via individual PP interfaces 2052 . 2054 using the point-to-point interface circuits 2076 . 2094 . 2086 . 2098 each information with a chipset 2090 change. The chipset 2090 may optionally have a high performance interface 2039 Information with the coprocessor 2038 change. In one embodiment, the co-processor is 2038 a special purpose processor, such as A high-throughput MIC processor, a network or communications processor, a compression engine, a graphics processor, a GPGPU, an embedded processor, or the like.

Ein (nicht dargestellter) gemeinsamer Cache kann in einem der beiden Prozessoren eingebunden oder außerhalb von beiden Prozessoren, aber mit den Prozessoren über eine P-P-Zwischenverbindung verbunden sein, sodass die lokalen Cacheinformationen eines oder beider Prozessoren in dem gemeinsamen Cache gespeichert werden können, falls ein Prozessor in einen Niedrigleistungsmodus versetzt wird.A shared cache (not shown) may be included in either or both of the two processors, but connected to the processors via a PP interconnect, such that the local cache information of one or both processors may be stored in the shared cache, if any Processor is placed in a low power mode.

Der Chipsatz 2090 kann über eine Schnittstelle 2096 mit einem ersten Bus 2016 gekoppelt sein. In einer Ausführungsform kann der erste Bus 2016 ein Peripheral-Component-Interconnect-(PCI-)Bus oder ein Bus wie ein PCI-Express-Bus oder ein sonstiger I/O-Zwischenverbindungsbus der dritten Generation sein, wenngleich der Schutzumfang der vorliegenden Erfindung nicht auf diese beschränkt ist.The chipset 2090 can via an interface 2096 with a first bus 2016 be coupled. In an embodiment, the first bus 2016 a Peripheral Component Interconnect (PCI) bus or a bus such as a PCI Express bus or other third generation I / O interconnect bus, although the scope of the present invention is not limited thereto.

Wie in 20 dargestellt, können diverse I/O-Vorrichtungen 2014 mit einem ersten Bus 2016 zusammen mit einer Busbrücke 2018 gekoppelt sein, die den ersten Bus 2016 mit einem zweiten Bus 2020 koppelt. In einer Ausführungsform ist einer oder sind mehrere zusätzliche Prozessoren 2015, wie z. B. Koprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPU, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs-(DSP-)Einheiten), feldprogrammierbare Gate-Anordnungen oder jedweder sonstiger Prozessor, mit dem ersten Bus 2015 gekoppelt. In einer Ausführungsform kann der zweite Bus 2020 ein Low-Pin-Count-(LPC-)Bus sein. Diverse Vorrichtungen können in einer Ausführungsform mit einem zweiten Bus 2020 gekoppelt sein, darunter z. B. eine Tastatur und/oder eine Maus 2022, Kommunikationsvorrichtungen 2027 und eine Speicherungseinheit 2028, wie z. B. ein Laufwerk oder eine sonstige Massenspeicherungsvorrichtung, die Befehle/Code und Daten 2030 umfassen kann. Ferner kann eine Audio-I/O 2024 mit dem zweiten Bus 2020 gekoppelt sein. Es ist zu beachten, dass auch andere Architekturen möglich sein. Beispielsweise kann anstelle einer Punkt-zu-Punkt-Architektur aus 20 ein System einen Multidrop-Bus oder eine sonstige derartige Architektur implementieren.As in 20 shown, various I / O devices 2014 with a first bus 2016 together with a bus bridge 2018 be coupled to the first bus 2016 with a second bus 2020 coupled. In one embodiment, one or more additional processors 2015 , such as Coprocessors, high-throughput MIC processors, GPGPU, accelerators (such as graphics accelerators or digital signal processing (DSP) units), field programmable gate arrays, or any other processor with the first bus 2015 coupled. In one embodiment, the second bus 2020 be a low pin count (LPC) bus. Various devices may in one embodiment with a second bus 2020 be coupled, including z. As a keyboard and / or a mouse 2022 , Communication devices 2027 and a storage unit 2028 , such as B. a drive or any other mass storage device containing commands / code and data 2030 may include. Furthermore, an audio I / O 2024 with the second bus 2020 be coupled. It should be noted that other architectures may be possible. For example, instead of using a point-to-point architecture 20 a system implementing a multidrop bus or other such architecture.

Unter nunmehriger Bezugnahme auf 21, ist ein Blockschaltbild eines zweiten, konkreteren beispielhaften Systems 2100 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Gleiche Elemente in den 20 und 21 tragen gleiche Bezugszeichen, und bestimmte Aspekte aus 20 fehlen in 21, um ein Verunklaren anderer Aspekte von 21 zu vermeiden.Referring now to 21 Figure 13 is a block diagram of a second, more concrete exemplary system 2100 according to an embodiment of the present invention. Same elements in the 20 and 21 carry the same reference numerals, and certain aspects 20 missing in 21 to obscure other aspects of 21 to avoid.

21 zeigt, dass die Prozessoren 2070, 2080 integrierte Speicher- und I/O-Steuerlogik („CL”) 2072 bzw. 2082 umfassen können. So umfassen die CL 2072, 2082 integrierte Speichersteuerungseinheiten und umfassen I/O-Steuerlogik. 21 zeigt, dass nicht nur die Speicher 2032, 2034 mit der CL 2072, 2082 gekoppelt sind, sondern dass auch I/O-Vorrichtungen 2114 mit der Steuerlogik 2072, 2082 gekoppelt sind. Ältere I/O-Vorrichtungen 2115 sind mit Chipsatz 2090 gekoppelt. 21 shows that the processors 2070 . 2080 integrated memory and I / O control logic ("CL") 2072 respectively. 2082 may include. So include the CL 2072 . 2082 integrated memory control units and include I / O control logic. 21 shows that not only the memory 2032 . 2034 with the CL 2072 . 2082 but also I / O devices 2114 with the control logic 2072 . 2082 are coupled. Older I / O devices 2115 are with chipset 2090 coupled.

Unter nunmehriger Bezugnahme auf 22 ist ein Blockschaltbild eines Ein-Chip-Systems 220 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 18 tragen gleiche Bezugszeichen. Außerdem sind mit gestrichelten Linien umrahmte Kästchen optionale Merkmale auf weiter fortgeschrittenen Ein-Chip-Systemen. In 22 ist eine oder sind mehrere Zwischenverbindungseinheiten 2202 mit Folgendem gekoppelt: einem Anwendungsprozessor 2210, der einen Satz eines oder mehrerer Kerne 202A bis N und eine oder mehrere gemeinsame Cacheeinheiten 1806 umfasst; einer Systemagenteneinheit 1810; einer oder mehreren Bussteuerungseinheiten 1816; einer oder mehreren integrierten Speichersteuerungseinheiten 1814; einem Satz eines oder mehrerer Koprozessoren 2220, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; eine statische Direktzugriffsspeicher-(SRAM-)Einheit 2230; eine Direktspeicherzugriffs-(DMA-)Einheit 2232; und eine Anzeigeeinheit 2240 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst der eine oder umfassen die mehreren Koprozessoren 2220 einen Spezialzweckprozessor, wie z. B. einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, einen GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.Referring now to 22 is a block diagram of a one-chip system 220 according to an embodiment of the present invention. Similar elements in 18 bear the same reference numerals. In addition, boxes framed with dashed lines are optional features on more advanced one-chip systems. In 22 is one or more interconnecting units 2202 coupled with: an application processor 2210 , which is a set of one or more cores 202A to N and one or more shared cache units 1806 includes; a system agent unit 1810 ; one or more bus control units 1816 ; one or more integrated memory control units 1814 ; a set of one or more coprocessors 2220 which may include integrated graphics logic, an image processor, an audio processor, and a video processor; a static random access memory (SRAM) unit 2230 ; a direct memory access (DMA) unit 2232 ; and a display unit 2240 for pairing with one or more external displays. In an embodiment, the one or more coprocessors 2220 a special purpose processor, such as A network or communications processor, a compression engine, a GPGPU, a high-throughput MIC processor, an embedded processor, or the like.

Ausführungsformen der hierin offenbarten Mechanismen können in Hardware-, Software-, Firmware- oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausführen, die zumindest einen Prozessor, ein Speicherungssystem (einschließlich von flüchtigem und nicht flüchtigem Speicher und/oder Speicherungselementen), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassen.Embodiments of the mechanisms disclosed herein may be implemented in hardware, software, firmware, or a combination of such implementation approaches. Embodiments of the invention may be implemented as computer programs or program code executing on programmable systems including at least one processor, a storage system (including volatile and nonvolatile memory and / or storage elements), at least one input device, and at least one output device.

Programmcode, wie z. B. der in 20 dargestellte Code 2030 kann angewandt werden, um Befehle zur Durchführung der hierin beschriebenen Funktionen einzugeben und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf bekannte Weise auf eine oder mehrere Ausgabevorrichtungen angewandt werden. Für die Zwecke dieser Anwendung umfasst ein Verarbeitungssystem jedwedes System, das einen Prozessor aufweist, wie z. B.: einen digitalen Signalprozessor (DSP), einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.Program code, such as. B. the in 20 represented code 2030 may be applied to input instructions for performing the functions described herein and to generate output information. The output information may be applied in known manner to one or more output devices. For the purposes of this application, a processing system includes any system having a processor, such as a processor. A digital signal processor (DSP), a microcontroller, an application specific integrated circuit (ASIC) or a microprocessor.

Der Programmcode kann in einer hochwertigen verfahrens- oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann, sofern das erwünscht ist, auch in einer Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hierin beschriebenen Mechanismen in ihrem Umfang auf keine bestimmte Programmiersprache beschränkt. Jedenfalls kann die Sprache eine kompilierte oder interpretierte Sprache sein.The program code may be implemented in a high-quality procedural or object-oriented programming language to communicate with a processing system. The program code may also be implemented in assembler or machine language, if desired. In fact, the mechanisms described herein are not limited in their scope to any particular programming language. Anyway, the language can be a compiled or interpreted language.

Ein oder mehrere Aspekte zumindest einer Ausführungsform können durch repräsentative Befehle implementiert werden, die auf einem maschinenlesbaren Medium gespeichert sind, das für diverse Logik innerhalb des Prozessors steht, die, wenn sie von einer Maschine gelesen wird, die Maschine dazu bringt, Logik zu fertigen, um die hierin beschriebenen Techniken anzuwenden. Solche Darstellungen, bekannt als „IP-Kerne”, können können auf einem konkreten, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen weitergeleitet werden, um diese in die Maschinenfabrikate zu laden, die die eigentliche Logik oder den Prozessor ausmachen.One or more aspects of at least one embodiment may be implemented by representative instructions stored on a machine-readable medium representing various logic within the processor that, when read by a machine, causes the machine to produce logic. to apply the techniques described herein. Such representations, known as "IP cores," may be stored on a tangible, machine readable medium and forwarded to various customers or manufacturing facilities to load them into the machine makes that make up the actual logic or processor.

Solche maschinenlesbaren Speichermedien können, ohne Beschränkung, nichtvorübergehende, konkrete Anordnungen von Fabrikaten umfassen, die von einer Maschine oder einer Vorrichtung hergestellt wurden, einschließlich Speichermedien wie Festplatten, jeder anderen Art von Datenscheiben wie Disketten, optische Disketten, Kompaktdisketten-Nur-Lese-Speicher (CD-ROM), überschreibbare Kompaktdisketten (CD-RW) und magnetoptische Disketten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM) wie dynamische Direktzugriffsspeicher (DRAM), statische Direktzugriffsspeicher (SRAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medium, das zum Speichern von elektronischen Befehlen geeignet ist.Such machine-readable storage media may include, without limitation, non-transitory, specific arrangements of manufactured goods manufactured by a machine or device, including storage media such as hard disks, any other type of data disks such as floppy disks, optical disks, compact disk read only memories ( CD-ROM), rewritable compact disks (CD-RW) and magneto-optical disks, semiconductor devices such as read only memory (ROM), random access memory (RAM) such as dynamic random access memory (DRAM), static random access memory (SRAM), erasable programmable read only memory Memory (EPROM), phase change memory (PCM), magnetic or optical cards or any other type of medium suitable for storing electronic commands.

Dementsprechend umfassen Ausführungsformen der Erfindung ebenfalls nichtvorübergehende, konkrete maschinenlesbare Medien, die Befehle oder Konstruktionsdaten enthalten, wie Hardware Description Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemeigenschaften definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.Accordingly, embodiments of the invention also include non-transitory, tangible, machine-readable media containing instructions or design data, such as hardware description language (HDL), that defines structures, circuits, devices, processors, and / or system features described herein. Such embodiments may also be referred to as program products.

Emulation (einschließlich binärer Übersetzung, Code-Morphing etc.)Emulation (including binary translation, code morphing, etc.)

In manchen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl von einem Quellenbefehlssatz in einen Zielbefehlssatz zu konvertieren. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere andere Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung, einschließlich einer dynamischen Kompilation), morphen, nachbilden oder anderweitig konvertieren, die von dem Kern zu verarbeiten sind. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus ausgeführt werden. Der Befehlsumwandler kann sich auf einem Prozessor, nicht auf einem Prozessor, teilweise auf und teilweise außerhalb eines Prozessors befinden.In some cases, a command converter can be used to convert a command from a source command set to a target command set. For example, the command converter may translate, morph, mimic, or otherwise convert a command into one or more other commands (eg, using a static binary translation, a dynamic binary translation, including dynamic compilation) to be processed by the core , The command converter can be executed in software, hardware, firmware or a combination thereof. The command converter may reside on a processor, not on a processor, partially on and partially off a processor.

23 ist ein Blockschaltbild, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln von Binärbefehlen in einen Quellbefehlssatz von Binärbefehlen in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, obwohl der Befehlsumwandler alternativ dazu in Software, Firmware, Hardware oder Kombinationen daraus implementiert sein kann. 23 zeigt, dass ein Programm in einer höheren Programmiersprache 2302 mit Hilfe eines x86-Compilers 2304 kompiliert werden kann, um Binärcode x86 2306 zu erzeugen, der von einem Prozessor mit zumindest einem x86-Befehlssatzkern 2316 nativ ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 2316 stellt einen beliebigen Prozessor dar, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausführen, indem er (1) einen wesentlichen Anteil des Befehlssatzes des Intel x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die für die Ausführung auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern ausgerichtet ist, kompatibel ausführt oder anderweitig verarbeitet, um im Wesentlichen dasselbe Ergebnis wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern zu erreichen. Der x86-Compiler 2304 stellt einen Compiler dar, der zum Erzeugen von Binärcode x86 2306 (z. B. Objektcode) betätigbar ist, der mit oder ohne zusätzlicher Verlinkungsbearbeitung auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 2316 ausgeführt werden kann. 23 zeigt ebenso, dass das Programm in der höheren Programmiersprache unter Verwendung eines alternativen Befehlssatz-Compilers 2308 kompiliert werden kann, um einen alternativen Befehlssatzbinärcode 2310 zu erzeugen, der von einem Prozessor ohne zumindest einen x86-Befehlssatzkern 2314 (z. B. ein Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies in Sunnyvale, Kalifornien, ausführen und/oder die den ARM-Befehlssatz von ARMS Holdings in Sunnyvale, Kalifornien, ausführen) nativ ausgeführt werden kann. Der Befehlsumwandler 2312 wird verwendet, um den Binärcode x86 2306 in Code umzuwandeln, der von dem Prozessor ohne einen x86-Befehlssatzkern 2314 nativ ausgeführt werden kann. Dieser umgewandelte Code ist vermutlich nicht derselbe wie der alternative Befehlssatzbinärcode 2310, weil ein Befehlsumwandler, der dazu in der Lage ist, schwierig herzustellen ist; jedoch wird der umgewandelte Code den allgemeinen Vorgang bewerkstelligen und wird aus Befehlen vom alternativen Befehlssatz bestehen. Somit stellt der Befehlsumwandler 2312 Software, Firmware, Hardware oder eine Kombination daraus dar, die durch es einem Prozessor oder einer anderen elektronischen Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, durch Emulation, Simulation oder jeden anderen Prozess den Binärcode x86 2306 auszuführen. 23 FIG. 10 is a block diagram contrasting the use of a software instruction converter to convert binary instructions into a source instruction set of binary instructions in a target instruction set in accordance with embodiments of the invention. In the illustrated embodiment, the instruction converter is a software instruction converter, although the instruction converter may alternatively be implemented in software, firmware, hardware, or combinations thereof. 23 shows that a program in a higher-level programming language 2302 using an x86 compiler 2304 can be compiled to binary x86 2306 to be generated by a processor with at least one x86 instruction set kernel 2316 can be carried out natively. The processor with at least one x86 instruction set core 2316 represents any processor that performs substantially the same functions as an Intel processor with at least one x86 instruction set kernel by (1) allocating a substantial portion of the instruction set of the Intel x86 instruction set kernel or (2) object code versions of applications or other software, which is designed to execute on an Intel processor having at least one x86 instruction set core, compatibly executes, or otherwise processes to achieve substantially the same result as an Intel processor having at least one x86 instruction set core. The x86 compiler 2304 represents a compiler that is used to generate binary code x86 2306 (eg, object code) operable with or without additional linking processing on the processor with at least one x86 instruction set core 2316 can be executed. 23 also shows that the program in the higher-level programming language using an alternative instruction set compiler 2308 can be compiled to an alternative instruction set binary code 2310 to be generated by a processor without at least one x86 instruction set kernel 2314 (eg, a processor having cores executing the MIPS instruction set from MIPS Technologies of Sunnyvale, California and / or executing the ARM instruction set from ARMS Holdings of Sunnyvale, California) may be natively executed. The command converter 2312 is used to binary code x86 2306 to convert that code from the processor without an x86 command set core 2314 can be carried out natively. This converted code is probably not the same as the alternative instruction set binary code 2310 because a command converter capable of doing so is difficult to manufacture; however, the converted code will accomplish the general operation and will consist of instructions from the alternative instruction set. Thus, the command converter 2312 Software, firmware, hardware, or a combination thereof, which through a processor or other electronic device that does not have an x86 instruction set processor or core, emulate, simulate, or otherwise process the x86 binary code 2306 perform.

Claims (22)

Vorrichtung, die Folgendes umfasst: mindestens eine Vektorteilabstandsberechnungsschaltung zum Berechnen einer Teilsumme und eines akkumulierten Abstands für einen Satz Vektoren in einem Suchraum; ein Minimumsortiernetzwerk, um einen ausgewählten Satz an Bits aus den akkumulierten Abständen zu sortieren und ein Minimum der ausgewählten Sätze an Bits von Vektoren im Suchraum anzugeben und ob das Minimum eindeutig ist; und eine globale Steuerschaltung zum Empfangen einer Ausgabe des Minimumsortiernetzwerks und zum Steuern von Aspekten von Vorgängen der mindestens einen Vektorteilabstandsberechnungsschaltung.An apparatus, comprising: at least one vector pitch calculation circuit for calculating a partial sum and an accumulated distance for a set of vectors in a search space; a minimum sorting network for sorting a selected set of bits from the accumulated distances and specifying a minimum of the selected sets of bits of vectors in the search space and whether the minimum is unique; and a global control circuit for receiving an output of the minimum sorting network and for controlling aspects of operations of at least one vector pitch calculation circuit. Vorrichtung nach Anspruch 1, worin jede Vektorteilabstandsberechnungsschaltung Folgendes umfasst: eine Vielzahl von Datenelementrechnerschaltungen; eine Kompressorbaumschaltung zum Hinzufügen jedes Ergebnisses der Vielzahl von Datenelementrechnerschaltungen; eine lokale Steuerschaltung zum Ausgeben eines kleineren Fensters von Bits aus dem akkumulierten Abstand und zum Verwenden eines Ergebnisses des Minimumsortiernetzwerks, um zu bestimmen, wann eine Berechnung und Sortierung für einen Vektor mit einer nächsten Iteration fortfahren soll oder aus dem Suchraum entfernt wird; und einen Akkumulator, zum Hinzufügen von Ergebnissen der Teilabstände in einer aktuellen Iteration, worin eine korrekte Signifikanz von einem Schieber bereitgestellt wird, um den Teilabstand vor dem Hinzufügen zu dem über frühere Iterationen akkumulierten Abstand zu verschieben.The apparatus of claim 1, wherein each vector pitch calculation circuit comprises: a plurality of data element processing circuits; a compressor tree circuit for adding each result of the plurality of data element computer circuits; a local control circuit for outputting a smaller window of bits from the accumulated distance and using a result of the minimum sorting network to determine when calculation and sorting for a vector is to proceed with a next iteration or is removed from the search space; and an accumulator for adding results of the pitches in a current iteration, wherein correct significance is provided by a shifter to shift the pitch prior to adding to the accumulated distance over previous iterations. Vorrichtung nach Anspruch 1, worin das Minimumsortiernetzwerk Folgendes umfasst: eine Vielzahl von erste-Ebenen-Vergleichsknoten zum Empfangen einer Teilsumme und eines gültigen Bits aus benachbarten Vektorteilabstandsberechnungsschaltungen und zum Ausgeben eines gültigen Bits, eines genauen Bits, einer Adresse und einer Summe, worin die erste-Ebenen-Vergleichsknoten dazu dienen, die empfangenen benachbarten gültigen Bits logisch zu ODERn, um das ausgegebene gültige Bit bereitzustellen, die benachbarten gültigen Bits exklusiv zu ODERn, ein Ergebnis des exklusiven ODERs mit einer Ausgabe einer Summe möglicher Differenzen des Vergleichs benachbarter Summen logisch zu ODERn, um das ausgegebene genaue Bit zu erzeugen, worin das genaue Bit 1 ist, um anzuzeigen, ob eine Differenz zwischen den beiden Eingaben größer ist als eine programmierbare Schwelle oder ob beide Eingaben nicht gültig sind; und eine Vielzahl von zweite-Ebenen-Vergleichsknoten zum Empfangen einer Teilsumme, eines gültigen Bits, einer Adresse und eines genauen Bits von benachbarten Vergleichsknoten und zum Ausgeben eines gültigen Bits, eines genauen Bits, einer Adresse und einer Summe als Ergebnis eines Vergleichs der empfangenen Summen zum Auswählen aus eingehenden genauen Signalen und zum logischen UNDen der ausgewählten genauen Bits mit dem an diesem Knoten berechneten genauen Signal, um das ausgegebene genaue Signal zu produzieren, das anzeigt, ob die ausgegebene Summe eindeutig ist, wobei das Ergebnis des Vergleichs das Ausbilden eines Bit höchster Ordnung der Adresse ist.The apparatus of claim 1, wherein the minimum sorting network comprises: a plurality of first level compare nodes for receiving a partial sum and a valid bit from adjacent vector pitch calculation circuits and outputting a valid bit, an accurate bit, an address, and a sum, wherein the first level compare nodes serve logically OR the received adjacent valid bits to provide the issued valid bit, the adjacent valid bits exclusive to ORn, logically ORing a result of the exclusive OR with an output of a sum of possible differences in the comparison of adjacent sums to produce the output exact bit, wherein the exact bit is 1, to indicate whether a difference between the two inputs is greater than a programmable one Threshold or whether both inputs are not valid; and a plurality of second-level compare nodes for receiving a partial sum, a valid bit, an address, and an accurate bit from adjacent compare nodes, and outputting a valid bit, an accurate bit, an address, and a sum as a result of comparing the received sums to Selecting from incoming accurate signals and logically ANDing the selected exact bits with the exact signal calculated at that node to produce the output accurate signal indicative of whether the output sum is unique, the result of the comparison being one bit highest Order of the address is. Vorrichtung nach Anspruch 3, worin die globale Steuerschaltung Folgendes umfasst: einen ODER-Baum zum Empfangen und ODERn einer Vielzahl von Verdrängungsbits aus einer Vielzahl von lokalen Steuerschaltungen; eine globale Maske zum Anzeigen an die globale Steuerlogik, wo ein globaler Zeiger auf die Gruppe von Vektoren zurückspringen muss, die den nächstfolgenden nächsten Nachbarn enthält; einen Selektor zum Auswählen des globalen Zeigers aus einem um eins gesteigerten vorangegangenen globalen Zeiger und einer Ausgabe aus einem mit der globalen Maske gekoppelten Prioritätskodierer.The apparatus of claim 3, wherein the global control circuit comprises: an OR-tree for receiving and ORing a plurality of displacement bits from a plurality of local control circuits; a global mask for indicating to the global control logic where a global pointer must return to the group of vectors containing the next nearest neighbor; a selector for selecting the global pointer from a one-incremented previous global pointer and an output from a global encoder coupled priority encoder. Vorrichtung nach Anspruch 1, worin eine Bitgröße pro Dimension, eine Dimensionalität und eine Anzahl von Referenzen rekonfigurierbar sind.The apparatus of claim 1, wherein a bit size per dimension, a dimensionality and a number of references are reconfigurable. Vorrichtung nach Anspruch 2, worin jede aus der Vielzahl von Datenelementrechnerschaltungen eine Teilabstands-Berechnungssumme-der-absoluten-Differenzen-Schaltung ist.An apparatus according to claim 2, wherein each of said plurality of data element processing circuits is a partial distance calculation sum of said absolute difference circuit. Vorrichtung nach Anspruch 2, worin jede aus der Vielzahl von Datenelementrechnerschaltungen eine Teilabstands-Berechnung-Quadratsummen-Schaltung ist.The apparatus of claim 2, wherein each of the plurality of data element computing circuits is a pitch calculation squaring circuit. Vorrichtung nach Anspruch 2, worin jede aus der Vielzahl von Datenelementrechnerschaltungen rekonfigurierbar ist, um als ein Teil einer größeren Datenelementrechnerschaltung für eine Vielzahl von Datenelementbitbreiten zu funktionieren.The apparatus of claim 2, wherein each of the plurality of data element computing circuits is reconfigurable to function as part of a larger data element computing circuit for a plurality of data element bit-widths. Vorrichtung nach Anspruch 2, worin jede aus der Vielzahl von Datenelementrechnerschaltungen eine Teilabstands-Berechnung-Skalarproduktschaltung ist.The apparatus of claim 2, wherein each of the plurality of data element computing circuits is a pitch calculation scalar product circuit. Vorrichtung nach Anspruch 1, worin die globale Steuerschaltung dazu dient, die Aktivität der Bits in den akkumulierten Abständen, die an das Sortiernetzwerk gesendet werden, unter Verwendung eines globalen Zeigers, der an alle Vektoren übertragen wird, zu koordinieren, Steuersignale zur iterationsabhängigen Teilabstandsberechnung an alle Vektoren zu übertragen und Iterationen zu verfolgen, mit denen Vektoren aus dem Suchraum verdrängt werden, wenn sie einen nächsten Nachbarn finden.The apparatus of claim 1, wherein the global control circuit is operative to coordinate the activity of the bits in the accumulated distances sent to the sorting network using a global pointer transmitted to all the vectors, control signals for iteration-dependent fractional distance calculation to all Transfer vectors and track iterations that displace vectors from the search space when they find a nearest neighbor. Vorrichtung nach Anspruch 10, worin die Steuersignale in einer programmierbaren Nachschlagtabelle zu speichern sind, auf die vom globalen Zeiger referenziert wird.The apparatus of claim 10, wherein the control signals are to be stored in a programmable look-up table referenced by the global pointer. Vorrichtung nach Anspruch 2, worin die lokalen Steuerschaltungen und Abstandsakkumulatoren in jeder Vektorteilabstandsberechnungsschaltung dazu dienen, einen Zustand selbst nach seiner Verdrängung aus dem Suchraum aufrechtzuerhalten und die lokalen Steuerschaltungen in der Lage sind, den Vektor wieder in den Suchraum einzusetzen, beim Finden des nächstfolgenden nächsten Nachbarn und etwaige frühere Berechnungen bis zu dem Punkt früherer Verdrängung wiederzuverwenden, worin die lokalen Steuerschaltungen die Ausgabe des Minimumsortiernetzwerks verwenden, um zu bestimmen, wann die Berechnung und Sortierung für einen Vektor mit einer nächsten Iteration fortfahren soll oder aus dem Suchraum entfernt werden soll.An apparatus according to claim 2, wherein the local control circuits and distance accumulators in each vector pitch calculation circuit serve to maintain a state even after being displaced from the search space, and the local control circuits are capable of reentering the vector into the search space, reusing the next nearest neighbor, and reusing any previous calculations up to the point of previous repression, wherein the local control circuits use the output of the minimum sorting network to determine when the calculation is done and sorting for a vector should continue with a next iteration or be removed from the search space. Vorrichtung nach Anspruch 1, worin die Vorrichtung zum Sortieren mit zunehmendem Abstand konfigurierbar ist.The device of claim 1, wherein the sorting device is configurable with increasing distance. Vorrichtung nach Anspruch 1, worin die Vorrichtung zum Ändern einer Reihenfolge des Sortierens konfigurierbar ist.The apparatus of claim 1, wherein the means for changing an order of sorting is configurable. Vorrichtung nach Anspruch 1, worin die Vorrichtung an Datensätzen, die größer als die Speicherkapazität der Vorrichtung sind, arbeiten soll, sortierte k-nächste Nachbarn-Kandidaten mit der Vorrichtung aus einer Datenbank berechnen soll, verdrängte Kandidaten durch verbleibende Objektdeskriptoren im Gedächtnis ersetzen soll und wiederholt arbeiten soll, bis alle Objektkandidaten durchexerziert wurden, um die insgesamt k-nächste-Nachbarn-Deskriptorvektoren zu finden.The apparatus of claim 1, wherein the device is to operate on data sets larger than the memory capacity of the device, to compute sorted k nearest neighbor candidates with the device from a database, to replace displaced candidates with remaining object descriptors in memory, and to repeat until all object candidates have been worked through to find the k-nearest neighbor descriptor vectors. Verfahren, das Folgendes umfasst: das Durchführen fortlaufender Iterationen des Verwendens mindestens einer Vektorteilabstandsberechnungsschaltung zum Berechnen von Teilabständen für eine Vielzahl von Vektoren in Bezug auf einen Abfragevektor, Verschieben der berechneten Teilabstände und Akkumulieren der verschobenen berechneten Teilabstände, und des Verwendens eines Minimum-Sortiernetzwerks zum Sortieren dieser akkumulierten Abstände beginnend bei einem höchstwertigen Bit bis hin zu einem niedrigstwertigen Bit.A method comprising: performing continuous iterations using at least one vector pitch calculation circuit for calculating pitches for a plurality of vectors with respect to a query vector, shifting the calculated pitches and accumulating the shifted calculated pitches, and using a minimum sorting network to sort these accumulated distances, starting from a most significant bit to a least significant bit. Verfahren nach Anspruch 16, worin jede fortlaufende Iteration eine Genauigkeit des berechneten Teilabstands von einem höchstwertigen Bit bis zu einem niedrigstwertigen Bit verbessert.The method of claim 16, wherein each consecutive iteration improves accuracy of the calculated fractional distance from a most significant bit to a least significant bit. Verfahren nach Anspruch 16, worin das Sortieren dieser akkumulierten Abstände beginnend bei einem höchstwertigen Bit bis hin zu einem niedrigstwertigen Bit mit Abständen mit geringer Genauigkeit beginnt und nur verbleibende Vektoren mit einer nächsten Iteration fortfahren, um die geringere Bitgenauigkeit zur Bestimmung des nächsten Nachbarn zu verbessern.The method of claim 16, wherein the sorting of these accumulated distances begins from a most significant bit to a least significant bit with low precision intervals, and only remaining vectors continue with a next iteration to improve the lower bit accuracy for determining the nearest neighbor. Verfahren nach Anspruch 16, worin das Sortiernetzwerk die Sortierung unter Verwendung einer programmierbaren Schwelle durchführt, um zu verkünden, wenn ein in jedem Vergleich und in einem gesamten Sortiernetzwerk gefundenes Minimum in einer Iteration um mehr als diese Schwelle geringer ist als jede andere Zahl.The method of claim 16, wherein the sorting network performs the sorting using a programmable threshold to announce when a minimum found in each comparison and in an entire sorting network is less than any other number in an iteration by more than that threshold. Verfahren nach Anspruch 16, worin die Berechnung der akkumulierten Abstände in eine Anzahl von Teilabstandsberechnungen für unterschiedliche Metriken zerlegt wird, sodass nach dem Berechnen der oberen Bits die Genauigkeitsverbesserung an Bitpositionen niederer Ordnung Bits höherer Ordnung nie über eine Schwelle hinaus ändert.The method of claim 16, wherein the calculation of the accumulated distances is decomposed into a number of sub-distance calculations for different metrics, such that after computing the upper bits, the accuracy improvement at lower-order bit positions never changes higher-order bits beyond a threshold. Verfahren nach Anspruch 16, worin das Berechnen von Teilabständen für eine Vielzahl von Vektoren in Bezug auf einen Abfrageobjektvektor Folgendes umfasst: das Verwenden von Schaltungen mit Schaltungen zur 1D-Berechnung unter Verwendung von Steuersignalen zum Berechnen des richtigen Teilabstands und geordnet nach der Dimensionalität des Vektors; das Summieren der Teilabstände sämtlicher 1D-Berechnungen unter Verwendung eines Kompressorbaumes; und das Hinzufügen der summierten Teilabstände zu einem aktuellen akkumulierten Abstand.The method of claim 16, wherein calculating fractional distances for a plurality of vectors with respect to a query object vector comprises: using circuits with circuits for 1D computation using control signals to calculate the correct pitch and ordered by the dimensionality of the vector; summing the pitches of all 1D calculations using a compressor tree; and adding the summed separations to a current accumulated distance. Verfahren nach Anspruch 16, worin jede Iteration gemeinsam durch die mindestens eine Vektorteilabstandsberechnungs- und Minimumsortiernetzwerkschaltungen durchgeführt wird.The method of claim 16, wherein each iteration is performed in concert by the at least one vector pitch calculation and minimum sort network circuits.
DE102015015182.7A 2014-12-24 2015-11-24 Systems, devices, and methods for k-nearest neighbor search Pending DE102015015182A1 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/582,607 US9626334B2 (en) 2014-12-24 2014-12-24 Systems, apparatuses, and methods for K nearest neighbor search
US14/582,607 2014-12-24
US14/944,828 US10303735B2 (en) 2015-11-18 2015-11-18 Systems, apparatuses, and methods for K nearest neighbor search
US14/944,828 2015-11-18

Publications (1)

Publication Number Publication Date
DE102015015182A1 true DE102015015182A1 (en) 2016-06-30

Family

ID=56116747

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015015182.7A Pending DE102015015182A1 (en) 2014-12-24 2015-11-24 Systems, devices, and methods for k-nearest neighbor search

Country Status (3)

Country Link
CN (1) CN105740200B (en)
DE (1) DE102015015182A1 (en)
TW (1) TWI604379B (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113705858A (en) * 2021-08-02 2021-11-26 西安交通大学 Shortest path planning method, system, equipment and storage medium for multi-target area

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10649770B2 (en) * 2017-01-31 2020-05-12 Facebook, Inc. κ-selection using parallel processing
CN110019657B (en) * 2017-07-28 2021-05-25 北京搜狗科技发展有限公司 Processing method, apparatus and machine-readable medium
CN108182401B (en) * 2017-12-27 2021-09-03 武汉理工大学 Safe iris identification method based on aggregated block information
CN112749238A (en) * 2020-12-30 2021-05-04 北京金堤征信服务有限公司 Search ranking method and device, electronic equipment and computer-readable storage medium

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69430528T2 (en) * 1994-07-28 2003-01-02 Ibm Search / sort circuit for neural networks
GB2476800A (en) * 2010-01-07 2011-07-13 Linear Algebra Technologies Ltd Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations
CN103136535A (en) * 2011-11-29 2013-06-05 南京理工大学常熟研究院有限公司 K nearest neighbor search method for point cloud simplification
US9405538B2 (en) * 2012-12-28 2016-08-02 Intel Corporation Functional unit having tree structure to support vector sorting algorithm and other algorithms

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113705858A (en) * 2021-08-02 2021-11-26 西安交通大学 Shortest path planning method, system, equipment and storage medium for multi-target area
CN113705858B (en) * 2021-08-02 2023-07-11 西安交通大学 Shortest path planning method, system, equipment and storage medium for multiple target areas

Also Published As

Publication number Publication date
TWI604379B (en) 2017-11-01
TW201636823A (en) 2016-10-16
CN105740200B (en) 2019-07-30
CN105740200A (en) 2016-07-06

Similar Documents

Publication Publication Date Title
DE102015015182A1 (en) Systems, devices, and methods for k-nearest neighbor search
DE112013004783T5 (en) Read and write masks controlled vector move command
DE102018006015A1 (en) Global and local time-stepping schemes for neural networks
DE102020126212A1 (en) Apparatus, methods and systems for matrix operations accelerator instructions
DE102015109124B4 (en) Cache way prediction
DE112013005188B4 (en) PROCESSOR AND METHOD OF VECTORIZING MERGED MULTIPLE NESTING LOOPS
DE102018005105A1 (en) COMMANDS FOR REMOTE ATOMIC OPERATIONS
DE112013004770T5 (en) Read and Write Message Update Command for vectoring recursive independent data calculations
DE112013003743T5 (en) Accelerated cross-track vector reduction commands
DE102014003790A1 (en) Parallel device for high-compression high speed LZ77 tokenization and Huffman encoding for deflate compression
DE102018125257A1 (en) DEFRAGMENTED AND EFFICIENT MICROOPERATION CAKE
DE112012007088B4 (en) APPARATUS, METHOD AND SYSTEM WITH AN INSTRUCTION FOR REDUCE ELEMENTS IN A VECTOR REGISTER WITH A STEP-BY-STEP ACCESS PATTERN
DE102014003689A1 (en) TRACKING THE CONTROL FLOW OF COMMANDS
DE102014003671A1 (en) PROCESSORS, METHODS AND SYSTEMS FOR RELAXING THE SYNCHRONIZATION OF ACCESS TO A SHARED MEMORY
DE112017003340T5 (en) INTERRUPTABLE AND RESTORABLE MATRIX MULTIPLICATION INSTRUCTIONS, PROCESSORS, METHODS, AND SYSTEMS
DE112013004751T5 (en) Multi-core processor, shared core extension logic, and shared core extension usage commands
DE112013004800T5 (en) Bit shift instruction to the left, pulling ones to lower bits
DE112016004356T5 (en) SYSTEMS, METHODS, AND DEVICES FOR COMPRESSION USING HARDWARE AND SOFTWARE
DE112020003165T5 (en) Video interpolation using one or more neural networks
DE112017001700T5 (en) Processors, procedures, systems, and instructions for retrieving data at the specified cache level with guaranteed completion
DE112020005020T5 (en) POSITION DETERMINATION USING ONE OR MORE NEURAL NETWORKS
DE112016007516T5 (en) DEVICES AND METHOD FOR A PROCESSOR ARCHITECTURE
DE112016004324T5 (en) Heterogeneous compression architecture for optimized compression ratio
DE102020128808A1 (en) Device and method for adaptive planning of work on heterogeneous processing resources
DE102015002254A1 (en) Method and apparatus for efficiently performing hash operations

Legal Events

Date Code Title Description
R012 Request for examination validly filed