DE102015014800A1 - Verbesserte SIMD-K-nächste-Nachbarn-Implementierung - Google Patents

Verbesserte SIMD-K-nächste-Nachbarn-Implementierung Download PDF

Info

Publication number
DE102015014800A1
DE102015014800A1 DE102015014800.1A DE102015014800A DE102015014800A1 DE 102015014800 A1 DE102015014800 A1 DE 102015014800A1 DE 102015014800 A DE102015014800 A DE 102015014800A DE 102015014800 A1 DE102015014800 A1 DE 102015014800A1
Authority
DE
Germany
Prior art keywords
processor
simd
knn
logic
operations
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
DE102015014800.1A
Other languages
English (en)
Inventor
Amos Goldman
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102015014800A1 publication Critical patent/DE102015014800A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17375One dimensional, e.g. linear array, ring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • G06F7/023Comparing digital values adaptive, e.g. self learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • G06F7/026Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator

Abstract

Es werden Verfahren und Vorrichtungen betreffend verbesserte SIMD(Single Instruction, Multiple Data)-K-nächste-Nachbarn-Implementierungen beschrieben. Eine Ausführungsform stellt ein Verfahren zum Verbessern von SIMD-Implementierungen der multidimensionalen K-nächste-Nachbarn(KNN)-Verfahren bereit. Eine Ausführungsform ersetzt den nicht SIMD-freundlichen Teil des KNN-Algorithmus durch eine Sequenz von SIMD-Operationen. Zum Beispiel können, um Verzweigungen im Algorithmus-Hotspot (z. B. der inneren Schleife) zu vermeiden, SIMD-Operationen verwendet werden, um die Liste der nächsten Abstände (und Nachbarn) nach jeder Iteration zu aktualisieren. Es werden auch weitere Ausführungsformen offenbart und beansprucht.

Description

  • GEBIET
  • Die vorliegende Offenbarung betrifft im Allgemeinen das Gebiet der Elektronik. Im Speziellen betrifft eine Ausführungsform verbesserte SIMD(Single Instruction, Multiple Data)-K-nächste-Nachbarn-Implementierungen.
  • HINTERGRUND
  • Im Allgemeinen ist SIMD ein Verfahren, das angewandt wird, um Datenebenenparallelität zu erreichen. Insbesondere können Mehrfachdaten in mehreren zugehörigen Pfaden einer SIMD-Maschine gemäß einem einzigen Befehl verarbeitet werden.
  • SIMD kann verwendet werden, um die Verarbeitung von Grafikdaten zu beschleunigen, einschließlich des K-nächste-Nachbarn(KNN)-Algorithmus. Der KNN-Algorithmus wird im Allgemeinen für die Klassifikations- oder Regressionsanalyse in der Mustererkennung verwendet.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die detaillierte Beschreibung ist unter Bezugnahme auf die beiliegenden Figuren bereitgestellt. In den Figuren kennzeichnet/n die äußerst links befindliche(n) Ziffer(n) eines Bezugszeichens die Figur, in der das Bezugszeichen zum ersten Mal vorkommt. Die Verwendung derselben Bezugszeichen in verschiedenen Figuren bezeichnet ähnliche oder identische Elemente.
  • 1 und 57 veranschaulichen Blockdiagramme von Ausführungsformen von Rechensystemen, die verwendet werden können, um verschiedene hierin diskutierte Ausführungsformen zu implementieren.
  • 2 veranschaulicht ein Blockdiagramm von Teilen eines Prozessorkerns und anderen Komponenten eines Rechensystems gemäß einer Ausführungsform.
  • 3A und 3B veranschaulichen Flussdiagramme von Operationen, die mit dem Durchführen eines verbesserten KNN-Verfahrens zusammenhängen, gemäß manchen Ausführungsformen.
  • 4 veranschaulicht einen Sample-Pseudocode und zugehörige Samplewerte für ein verbessertes KNN-Verfahren gemäß einer Ausführungsform.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden Beschreibung sind zahlreiche spezifische Details dargelegt, um ein gründliches Verständnis verschiedener Ausführungsformen bereitzustellen. Allerdings können verschiedene Ausführungsformen ohne die spezifischen Details durchgeführt werden. In anderen Fällen wurden gut bekannte Verfahren, Operationen, Komponenten und Schaltkreise nicht im Detail beschrieben, um die bestimmten Ausführungsformen nicht unverständlich erscheinen zu lassen. Ferner können verschiedene Aspekte von Ausführungsformen unter Verwendung verschiedener Mittel ausgeführt werden, wie etwa integrierte Halbleiterschaltungen („Hardware”), Computer-lesbare Befehle, die in einem oder mehreren Programmen organisiert sind („Software”) oder eine Kombination von Hardware und Software. Für die Zwecke dieser Offenbarung bedeutet eine Bezugnahme auf „Logik” entweder Hardware, Software oder eine Kombination davon.
  • Manche Ausführungsformen betreffen verbesserte SIMD(Single Instruction, Multiple Data)-K-nächste-Nachbarn(KNN)-Algorithmus-Implementierungen. Eine Ausführungsform stellt ein Verfahren zum Verbessern von SIMD-Implementierungen der multidimensionalen KNN-Verfahren bereit. KNN wird im Allgemeinen in der Computervision und/oder im maschinellen Lernen verwendet und kann beschleunigt werden, indem SIMD-Maschinen wie verschiedene VLIW(Very Long Instruction Word)-Digitalsignalprozessoren (DSPs) und GPUs (Grafikprozessoren) wie die unter Bezugnahme auf die 17 diskutierten Prozessoren verwendet werden. Eine Ausführungsform ersetzt den nicht SIMD-freundlichen Teil des KNN-Algorithmus mit einer Sequenz von SIMD-Operationen. Um Verzweigungen im Algorithmus-Hotspot (z. B. in der inneren Schleife) zu vermeiden, können im Speziellen SIMD-Operationen verwendet werden, um die Liste der nächsten Abstände (und Nachbarn) nach jeder Iteration zu aktualisieren.
  • Außerdem können die hierin diskutierten Verfahren in verschiedenen Rechensystemen verwendet werden (z. B. einer nicht mobilen Vorrichtung wie einem Tischrechner, einem Server, einer Arbeitsstation etc. sowie einer mobilen Vorrichtung wie einem Smartphone, Tablet, UMPC (Ultra-Mobile Personal Computer), Laptoprechner, einer UltrabookTM-Rechenvorrichtung, tragbaren Vorrichtungen (z. B. Smartwatches, Smartglasses) etc.), einschließlich der unter Bezugnahme auf die 17 diskutierten. Im Speziellen veranschaulicht 1 ein Blockdiagramm eines Rechensystems 100 gemäß einer Ausführungsform. Das System 100 kann einen oder mehrere Prozessoren 102-1 bis 102-N (hierin im Allgemeinen als „Prozessoren 102” oder „Prozessor 102” bezeichnet) umfassen. Die Prozessoren 102 können über ein Verbindungssystem oder einen Bus 104 kommunizieren. Jeder Prozessor kann verschiedene Komponenten umfassen, von denen manche der Klarheit halber nur unter Bezugnahme auf den Prozessor 102-1 diskutiert werden. Dementsprechend kann jeder der restlichen Prozessoren 102-2 bis 102-N dieselben oder ähnliche Komponenten umfassen, die unter Bezugnahme auf den Prozessor 102-1 diskutiert werden.
  • In einer Ausführungsform umfasst der Prozessor 102-1 einen oder mehrere Prozessorkerne 106-1 bis 106-M (hierin als „Kerne 106” oder „Kern 106” bezeichnet), einen Cache 108, und/oder einen Router 110. Die Prozessorkerne 106 können auf einem einzelnen Chip einer integrierten Schaltung (IC) implementiert sein. Außerdem kann der Chip einen oder mehrere gemeinsam benutzte und/oder private Caches (wie etwa den Cache 108), Busse oder Verbindungssysteme (wie etwa einen Bus oder ein Verbindungssystem 112), Grafik- und/oder Speichersteuerungen (wie etwa die unter Bezugnahme auf die 57 diskutierten) oder andere Komponenten umfassen.
  • In einer Ausführungsform kann der Router 110 verwendet werden, um zwischen verschiedenen Komponenten des Prozessors 102-1 und/oder Systems 100 zu kommunizieren. Außerdem kann der Prozessor 102-1 mehr als einen Router 110 umfassen. Ferner kann die Vielzahl von Routern 110 in Kommunikation miteinander sein, um Datenrouting zwischen verschiedenen Komponenten innerhalb und außerhalb des Prozessors 102-1 zu ermöglichen.
  • Der Cache 108 kann Daten speichern (z. B. einschließlich Befehlen), die von einer oder mehreren Komponenten des Prozessors 102-1, wie etwa den Kernen 106, verwendet werden. Zum Beispiel kann der Cache 108 Daten lokal cachen, die in einem Speicher 114 für schnelleren Zugriff durch die Komponenten des Prozessors 102 (z. B. schnelleren Zugriff durch die Kerne 106) gespeichert sind. Wie in 1 gezeigt, kann der Speicher 114 mit den Prozessoren 102 über das Verbindungssystem 104 kommunizieren. In einer Ausführungsform kann der Cache 108 (der gemeinsam verwendet werden kann), ein Mid-Level-Cache (MLC), ein Last-Level-Cache (LLC) etc. sein. Ebenso kann jeder dieser Kerne 106 einen Level-1(L1)-Cache (116-1) (hierin im Allgemeinen als „L1-Cache 116” bezeichnet) oder andere Cache-Level wie etwa einen Level-2(L2)-Cache umfassen. Außerdem können verschiedene Komponenten des Prozessors 102-1 mit dem Cache 108 durch einen Bus (z. B. den Bus 112) und/oder eine Speichersteuerung oder einen Knotenpunkt direkt kommunizieren.
  • Wie in 1 gezeigt, kann der Prozessor 102 ferner eine KNN-Logik 160 umfassen, um verbesserte SIMD-basierte KNN-Implementierungen wie hierin diskutiert bereitzustellen. In einer Ausführungsform führt die Logik 160 (oder eine andere Logik im System 100 oder eine mit dem System 100 gekoppelte) das Ersetzen des nicht SIMD-freundlichen Teils des KNN-Algorithmus durch eine Sequenz von SIMD-Operationen herbei. Um Verzweigungen im Algorithmus-Hotspot (z. B. innere Schleife) zu vermeiden, können im Speziellen SIMD-Operationen (deren Erzeugung von der Logik 160 herbeigeführt wird) verwendet werden, um die Liste der nächsten Abstände (und Nachbarn) nach jeder Iteration zu aktualisieren.
  • Ferner kann die Logik 160 Zugriff auf eine oder mehrere hierin diskutierte Speichervorrichtungen (wie etwa Cache 108, L1-Cache 116, Speicher 114 oder einen anderen Speicher im System 100) haben, um Informationen betreffend Operationen der Logik 160 wie Informationen, die mit verschiedenen Komponenten des Systems 100 wie hierin diskutiert kommuniziert werden, zu speichern. Ebenso kann sich die Logik 160 an einer anderen Stelle als der in 1 gezeigten befinden.
  • 2 veranschaulicht ein Blockdiagramm von Teilen eines Prozessorkerns 106 und anderen Komponenten eines Rechensystems gemäß einer Ausführungsform. In einer Ausführungsform veranschaulichen die in 2 gezeigten Pfeile die Flussrichtung von Befehlen durch den Kern 106. Einer oder mehrere Prozessorkerne (wie etwa der Prozessorkern 106) können auf einem einzelnen Chip (oder Nacktchip) einer integrierten Schaltung implementiert sein, wie unter Bezugnahme auf 1 diskutiert. Außerdem kann der Chip einen oder mehrere gemeinsam benutzte und/oder private Caches (z. B. Cache 108 von 1), Verbindungssysteme (z. B. Verbindungssysteme 104 und/oder 112 von 1), Steuereinheiten, Speichersteuerungen und andere Komponenten umfassen.
  • Wie in 2 veranschaulicht, kann der Prozessorkern 106 eine Abrufeinheit 202 zum Abrufen von Befehlen (einschließlich Befehlen mit bedingten Verzweigungen) zur Ausführung durch den Kern 106 umfassen. Die Befehle können von jeder Speichervorrichtung wie etwa dem Speicher 114 und/oder den unter Bezugnahme auf die 57 diskutierten Speichervorrichtungen abgerufen werden. Der Kern 106 kann auch eine Decodiereinheit 204 zum Decodieren des abgerufenen Befehls umfassen. Zum Beispiel kann die Decodiereinheit 204 den abgerufenen Befehl in eine Vielzahl von μops (Mikrooperationen) decodieren. Zusätzlich dazu kann der Kern 106 eine Zeitplaneinheit 206 umfassen. Die Zeitplaneinheit 206 kann verschiedene Operationen im Zusammenhang mit dem Speichern von decodierten Befehlen (z. B. von der Decodiereinheit 204 empfangen) durchführen, bis die Befehle bereit zum Abfertigen sind, z. B. bis alle Quellenwerte eines decodierten Befehls verfügbar werden. In einer Ausführungsform kann die Zeitplaneinheit 206 decodierte Befehle an eine Ausführungseinheit 208 zur Ausführung zeitlich planen und/oder ausgeben (oder abfertigen). Die Ausführungseinheit 208 kann die abgefertigten Befehle ausführen, nachdem sie decodiert (z. B. durch die Decodiereinheit 204) und abgefertigt wurden (z. B. durch die Zeitplaneinheit 206). In einer Ausführungsform kann die Ausführungseinheit 208 mehr als eine Ausführungseinheit umfassen (wie etwa eine Bildberechnungseinheit, eine Grafikberechnungseinheit, eine Allzweckberechnungseinheit etc.). Die Ausführungseinheit 208 kann auch verschiedene arithmetische Operationen wie Addition, Subtraktion, Multiplikation und/oder Division durchführen und kann eine oder mehrere arithmetisch-logische Einheiten (ALUs) umfassen. In einer Ausführungsform kann ein Coprozessor (nicht gezeigt) verschiedene arithmetische Operationen in Verbindung mit der Ausführungseinheit 208 durchführen.
  • Ferner kann die Ausführungseinheit 208 in anderer Reihenfolge Befehle ausführen. So kann der Prozessorkern 106 in einer Ausführungsform ein Prozessorkern sein, der in anderer Reihenfolge arbeitet. Der Kern 106 kann auch eine Rückordnungseinheit 210 umfassen. Die Rückordnungseinheit 210 kann ausgeführte Befehle rückordnen, nachdem sie gültig gemacht wurden. In einer Ausführungsform kann die Rückordnung der ausgeführten Befehle dazu führen, dass der Prozessorzustand von der Ausführung der Befehle gültig gemacht wird, von den Befehlen verwendete physikalische Register freigegeben werden etc.
  • Der Kern 106 kann auch eine Buseinheit 214 umfassen, um Kommunikation zwischen Komponenten des Prozessorkerns 106 und anderen Komponenten (wie etwa den unter Bezugnahme auf 1 diskutierten Komponenten) über einen oder mehrere Busse (z. B. Busse 104 und/oder 112) zu ermöglichen. Der Kern 106 kann auch ein oder mehrere Register 216 umfassen, um Daten zu speichern, auf die von verschiedenen Komponenten des Kerns 106 zugegriffen wird (wie etwa Werte, die von der Logik 160 verwendet werden, um das hierin diskutierte verbesserte KNN-Verfahren zu implementieren, z. B. unter Bezugnahme auf die 3A4).
  • Obwohl 1 die Logik 160 so veranschaulicht, dass sie mit dem Kern 106 über das Verbindungssystem 112 gekoppelt ist (z. B. um KNN-bezogene Operationen an eine andere Einheit wie einen GPU, ASIC (anwendungsspezifische integrierte Schaltung) etc. abzugeben), kann sich die Logik 160 ferner in verschiedenen Ausführungsformen anderswo befinden, wie etwa innerhalb des Kerns 106, gekoppelt mit dem Kern über den Bus 104 etc.
  • In einer Ausführungsform bestimmt die Logik 160 die ”K”-nächsten Datenbanksample (z. B. in einer Liste organisiert) mit dem kürzesten Abstand von einer gegebenen Testsample. Jede der Iterationen des Algorithmus berechnet zuerst den Abstand zwischen dem Testsample und einem der Datenbanksamples. Der berechnete Abstand wird dann mit den „K”-nächsten Abständen der vorherigen Iterationen verglichen. Wenn der neue Abstand kürzer als zumindest einer der K-kürzesten Abstände ist (z. B. wenn die Liste abgerufen wird), dann wird der „längste” Abstand der vorherigen Iterationen durch den neuen Abstand ersetzt. Die Motivation, KNN in SIMD-Maschinen zu beschleunigen, liegt teilweise darin begründet, dass die Abstandsberechnung im Allgemeinen sehr SIMD-freundlich ist. Allerdings kann das Vergleichen der Liste von Abständen mit dem neuen Abstand in einer skalaren „FOR”-Schleife mit zumindest zwei Verzweigungen darin durchgeführt werden. Diese „FOR”-Schleife und die mit ihr verbundenen Verzweigungen sind nicht DSP-freundlich und sie machen aus diesem Teil des Algorithmus den Engpass der Implementierung.
  • Außerdem kann in manchen Lösungen versucht werden, dieses Problem durch Speichern aller Abstände und anschließendes Ordnen zu einem späteren Zeitpunkt zum Filtern der K-kürzesten Abstände zu lösen. Obwohl dieser Ansatz das Hotstop-Problem gewissermaßen bessern kann, ist er aufgrund der Notwendigkeit, alle Abstände im Speicher zu speichern, nur auf sehr kleine Datenbanken/Listen anwendbar. Zusätzlich dazu erhöht er die Anzahl von Lade- und Speicheroperationen, z. B. verlängert er die Verzögerung, verringert die Leistung und/oder erhöht den Energieverbrauch. Ein weiterer Nachteil dieses Ansatzes besteht darin, dass er die SIMD-Fähigkeiten beim Ordnen der Elemente nicht ausnutzt. Dies führt zu einer sehr geringen Vorherrschaft der Ausgabeslots und schließlich zu Ineffizienz.
  • Dementsprechend stellen manche Ausführungsformen ein effizienteres und/oder schnelleres Verfahren zum Ersetzen des Abstandsaktualisierungsteils (und der mit ihm verbundenen Verzweigungen) bei SIMD-Operationen bereit. Dies macht es möglich, die Liste der nächsten Nachbarn ohne Verzweigungen in der Hotspot-Schleife und daher mit viel höherer Residenz, Effizienz, Geschwindigkeit etc. zu aktualisieren. Ferner kann die Verwendung solcher Ausführungsformen mit einem VLIW-DSP zu einer relativ dreifachen Verbesserung im Leistungsverhalten führen (z. B. von etwa 18 Zyklen pro Sample hinunter auf etwa sechs Zyklen pro Sample, abhängig von der VLIW-Architektur, der Anzahl und der Art von Ausgabeslots, der SIMD-Breite und -Nutzlast etc. – daher können verschiedene Kombinationen eine bessere oder schwächere Beschleunigung ergeben).
  • In einer Ausführungsform behält die Logik 160 die Liste der K-kürzesten Abstände in einem SIMD-Register (oder anderen Speichervorrichtung wie etwa die hierin diskutierten, z. B. unter Bezugnahme auf die 12 und 57) und verwendet SIMD-Operationen, um die Liste mit neuen Abständen zu aktualisieren. Dies steht im Gegensatz zur Verwendung von Zählervergleichsoperationen und inneren „FOR”-Schleifen, um für die Aktualisierung zu sorgen. Ebenso optimiert die Verwendung von SIMD-Operationen anstatt von Verzweigungen die Hotspot-Schleife auf zumindest eine der folgenden Weisen: (a) In VLIW-DSPs: Vermeiden der Aktualisierungs-„FOR”-Schleifen ermöglicht es, die innere Hotspot-Schleife zu „entrollen” und „leiten”. Dies verbessert die Ausgabeslotsresidenz drastisch; und (b) In GPUs: Die Verwendung von SIMD-Operationen verhindert den Verlust, der mit Verzweigungen und den falschen Verzweigungsvorhersagen verbunden ist.
  • Wie zuvor erwähnt, können manche Implementierungen der SIMD-KNN-Beschleunigung einen Skalarcode zum Aktualisieren der Liste von Abständen verwenden. Der Skalarcode wird jedoch im Allgemeinen innerhalb des Hotspots verwendet, während in anderen Implementierungen alle Abstände gespeichert und dann später geordnet werden, um die kürzesten „K”-Abstände zu ermitteln. Dieser zweite Ansatz ist besser als der erste, er hat jedoch die folgenden Nachteile gegenüber den hierin diskutierten Ausführungsformen: (1) Während er in manchen Maschinen möglich ist, weisen viele DSPs und GPUs Einschränkungen bezüglich des Abgleichs und der Größe des Speichers auf, der gespeichert und ausgelesen werden kann. (2) Die Notwendigkeit, alle Abstände zu speichern, macht diesen Ansatz nur auf sehr kleine Datenbanken vernünftig anwendbar. Dies ist eine große Einschränkung, da die Datenbanken zwischen Zehntausenden und Millionen von Samplevektoren aufweisen können. (3) Obwohl der Aktualisierungscode den Algorithmus-Hotspot verliert, ist er dennoch ein Skalarcode mit sehr geringer Residenz und geringer Effizienz aufgrund der Verzweigungen. Der SIMD-Code erzielt ein viel besseres Leistungsverhalten. (4) Das Speichern der zeitlichen Abstände und ihr erneutes Auslesen hängt mit zumindest zwei weiteren IO(Eingabe/Ausgabe)-Operationen pro Sample zusammen. Diese Operationen sind eher teuer, sowohl im Hinblick auf die Versorgung als auch auf die Latenzzeit.
  • Im Allgemeinen ist der Wert von K gering (z. B. zwischen 1 und 15) und in den meisten Fällen ist er geringer als die SIMD-Ebene der Maschine. Zu diesem Zweck unterhält eine Ausführungsform eine geordnete Liste der „K”-nächsten Abstände (und Nachbarn) und aktualisiert sie mit neuen Werten unter Verwendung von SIMD-Operationen.
  • 3A veranschaulicht ein Flussdiagramm eines Verfahrens 300, um einen verbesserten KNN gemäß einer Ausführungsform bereitzustellen. In einer Ausführungsform können verschiedene unter Bezugnahme auf die 12 und 57 diskutierte Komponenten (einschließlich zum Beispiel der Logik 160) verwendet werden, um eine oder mehrere der unter Bezugnahme auf 3A diskutierten Operationen durchzuführen.
  • Bezug nehmend auf 3A werden bei der Operation 302 (Initialisierungsstufe) alle Elemente der Liste der Abstände auf „MAX DISTANCE” initialisiert. Anschließend wird die Liste in ein Vektorregister (KD_v) oder eine andere Speichervorrichtung wie die hier diskutierten geladen (Operation 304). In einer Ausführungsform wird dieser Vektor während der Durchführung des KNN-Algorithmusflusses (z. B. während das Verfahren 300 ausgeführt wird) vom größten zum kleinsten sortiert gehalten, zum Beispiel, um die Verweisgeschwindigkeit zu erhöhen.
  • Bei Operation 306 (Schleifenstufe/Hotspot) macht das Verfahren 300 eine Schleife über den Datenbank-/gespeicherten Samplevektoren und vergleicht sie mit den Testvektoren. In jeder Iteration wird der Abstand berechnet und dann mit der Liste der „K”-nächsten Abstände der vorigen Iteration verglichen.
  • 3B veranschaulicht ein Flussdiagramm eines Verfahrens 306, um die Schleifenstufe des KNN-Verfahrens von 3A gemäß einer Ausführungsform bereitzustellen. In einer Ausführungsform können verschiedene unter Bezugnahme auf die 12 und 57 diskutierte Komponenten (einschließlich zum Beispiel die Logik 160) verwendet werden, um eine oder mehrere der unter Bezugnahme auf 3B diskutierten Operationen durchzuführen.
  • Bezug nehmend auf 3B wird bei einer Operation 310 (Schleifenstufe 1) der Abstand (D) zwischen dem Testvektor und dem aktuellen Datenbankvektor berechnet/bestimmt. Diese Stufe wird unter Verwendung von SIMD-Operationen durchgeführt. Bei einer Operation 312 (Schleifenstufe 2) wird der Skalarwert D zu einem neuen Vektorregister (NewD_v) übertragen/gesendet. Diese Operation weist allen Elementen von NewD_v den Wert von D zu.
  • Bei einer Operation 314 (Schleifenstufe 3) werden die Werte KD_v und NewD_v unter Verwendung einer SIMD-Operation verglichen und die Ergebnisse werden in einem Booleschen Vektorregister (M_v) gespeichert. Bei Operation 314 setzt der Vergleich für jeden Index „i” M_v[i] auf „1”, wenn KD_v[i] größer als der NewD_v[i] ist, und ansonsten „0”. Da KD_v in einer Ausführungsform vom größten zum kleinsten geordnet wird und alle Elemente von NewD_v denselben Wert aufweisen, gäbe es höchstens einen Index, bei dem M_v[i] != M_v[i + 1]. Dieser Index (i) ist der neue Index des neuen Werts in der geordneten Liste.
  • Bei einer Operation 316 (Schleifenstufe 4) werden alle Elemente in KD_v, die größer als der neue Abstand waren, unter Verwendung einer SIMD-Operation nach links rotiert (auswählen/Elemente nach links schieben). Dies kann erreicht werden, indem KD_v mit ShiftLeft(KD_v) zusammengeführt wird, und zwar unter Verwendung von M_v als Zusammenführungsmaske oder KD_v[i] = M_v[i] ? KD_v[i + 1]:KD_v[i], wobei sich „?” auf einen speziellen ternären Operator für bedingte Ausdrücke mit einer Funktion bezieht, die durch eine Vorlage wie etwa ”condition ? evaluated-when-true:evaluated-when-false” beschrieben werden kann, und wobei z. B. im zuvor genannten Ausdruck „?” anzeigt, dass KD_v[i] für alle Elementindizes „i” nach links verschoben wird, für die M_v[i] wahr ist (oder 1).
  • Bei einer Operation 318 (Schleifenstufe 5) wird der neue Abstand D im i'ten Element von KD_v gespeichert. Um dies zu tun, wird eine neue Maske (MI_v) durch XOR'ing M_v mit ShiftLeft(M_v) erzeugt. Da es höchstens einen Index (i) geben könnte, bei dem M_v[i] != M_v[i + 1], hätte MI_v höchstens einen Eintrag, der auf „1” festgelegt ist. Der neue Abstand „D” wird dann in KD_v[i] eingefügt, indem KD_v mit NewD_v unter Verwendung von MI_v als Zusammenführungsmaske wie folgt zusammengeführt wird: NewD_v[i] = MI_v[i] ? NewD_v[i]:KD_v[i].
  • Eine Variation des Verfahrens liefert nicht nur die K-kürzesten Abstände, sondern auch die K-Indizes der nächsten Nachbarn zurück. Um dies zu unterstützen, kann die Liste der nächsten Indizes beibehalten werden, indem die M_v- und MI_v-Masken auf dieselbe Weise verwendet werden, wie die Abstände beibehalten werden.
  • 4 veranschaulicht einen Sample-Pseudocode und entsprechende Samplewerte für ein verbessertes KNN-Verfahren gemäß einer Ausführungsform. Im Speziellen zeigt der Pseudocode (auf der linken Seite von 4) Sampleoperationen und Daten für den KNN-Algorithmusfluss und zeigt die Kernregisterwerte nach jeder Stufe (auf der rechten Seite von 4), z. B. wie unter Bezugnahme auf die 3A und 3B diskutiert, gemäß manchen Ausführungsformen. Im Beispiel von 4 ist K (K-nächster Nachbar) 5, D (Abstand) 7 und die SIMD-Länge ist 8.
  • Wie hierin diskutiert, wird KNN in der Computervision und in Lösungen für maschinelles Lernen verwendet. Da die Berechnung des Abstands sehr SIMD-freundlich ist, werden manche Ausführungsformen in GPUs oder in dedizierten VLIW-DSPs beschleunigt. Ebenso würde die Verwendung von Optimierungen, die von manchen Ausführungsformen bereitgestellt werden, den Energieverbrauch und/oder das Leistungsverhalten jeder KNN-Implementierung verbessern, die auf dem GPU oder einem dedizierten DSP läuft.
  • 5 veranschaulicht ein Blockdiagramm eines Rechensystems 500 gemäß einer Ausführungsform. Das Rechensystem 500 kann eine oder mehrere zentrale Verarbeitungseinheit(en) (CPUs) oder Prozessoren 502-1 bis 502-P umfassen (die hierin als „Prozessoren 502” oder „Prozessor 502” bezeichnet werden können). Die Prozessoren 502 können über ein Verbindungssystemnetzwerk (oder einen Bus) 504 kommunizieren. Die Prozessoren 502 können einen Allzweckprozessor, einen Netzwerkprozessor (der Daten verarbeitet, die über ein Rechnernetzwerk 503 kommuniziert werden) oder andere Arten eines Prozessors (einschließlich eines Prozessors eines Rechners mit reduziertem Befehlssatz (RISC) oder eines Rechners mit komplexem Befehlssatz (CISC)) umfassen.
  • Außerdem können die Prozessoren 502 ein Einzelkern- oder Mehrfachkerndesign aufweisen. Die Prozessoren 502 mit einem Mehrfachkerndesign können verschiedene Arten von Prozessorkernen auf demselben Plättchen einer integrierten Schaltung (IC) integrieren. Ebenso können die Prozessoren 502 mit einem Mehrfachkerndesign als symmetrische oder asymmetrische Mehrfachprozessoren implementiert werden. In einer Ausführungsform können einer oder mehrere der Prozessoren 502 gleich oder ähnlich wie die Prozessoren 102 von 1 sein. In manchen Ausführungsformen können einer oder mehrere der Prozessoren 502 einen oder mehrere der Kerne 106 und Logik 160 von 1 umfassen. Ebenso können die unter Bezugnahme auf die 14 diskutierten Operationen von einer oder mehreren Komponenten des Systems 500 durchgeführt werden.
  • Ein Chipsatz 506 kann auch mit dem Verbindungssystemnetzwerk 504 kommunizieren. Der Chipsatz 506 kann ein Grafik- und Speichersteuerungsknotenpunkt (GMCH) 508 umfassen. Das GMCH 508 kann eine Speichersteuerung 510 umfassen, die mit einem Speicher 512 kommuniziert. Der Speicher 512 kann Daten, einschließlich Sequenzen von Befehlen, die durch den Prozessor 502 oder jede andere im Rechensystem 500 enthaltene Vorrichtung ausgeführt werden, speichern. In einer Ausführungsform kann der Speicher 512 eine oder mehrere flüchtige Speicherungs- oder Speichervorrichtungen wie etwa Direktzugriffsspeicher (RAM), dynamische Direktzugriffsspeicher (DRAM), synchrone DRAM (SDRAM), statische RAM (SRAM) oder andere Arten von Speichervorrichtungen umfassen. Es kann auch ein nichtflüchtiger Speicher wie eine Festplatte verwendet werden. Zusätzliche Vorrichtungen können über das Verbindungssystemnetzwerk 504 kommunizieren, wie etwa Mehrfach-CPUs und/oder Mehrfach-Systemspeicher.
  • Das GMCH 508 kann auch eine Grafikoberfläche 514 umfassen, die mit einer Anzeigevorrichtung 516 kommuniziert. In einer Ausführungsform kann die Grafikoberfläche 514 mit der Anzeigevorrichtung 516 über einen Accelerated Graphics Port (AGP) oder Peripheral Component Interconnect (PCI) (oder eine PCI-Express(PCIe)-Schnittstelle) kommunizieren. In einer Ausführungsform kann die Anzeigevorrichtung 516 (wie etwa ein Flachbildschirm, eine Kathodenstrahlröhre (CRT), eine Projektionswand etc.) mit der Grafikoberfläche 514 zum Beispiel durch einen Signalwandler kommunizieren, der eine digitale Darstellung eines Bilds, das in einer Speichervorrichtung wie etwa einem Videospeicher oder Systemspeicher gespeichert ist, in Displaysignale umsetzt, die von der Anzeigevorrichtung 518 ausgewertet und dargestellt werden. Die erzeugten Anzeigesignale können verschiedene Steuerungsvorrichtungen durchlaufen, bevor sie durch die Anzeigevorrichtung 516 ausgewertet und anschließend auf ihr angezeigt werden.
  • Eine Knotenpunktschnittstelle 518 kann es dem GMCH 508 und einem Eingangs-/Ausgangs-Steuerungsknotenpunkt (ICH) 520 ermöglichen zu kommunizieren. Das ICH 520 kann I/O-Vorrichtungen, die mit dem Rechensystem 500 kommunizieren, eine Schnittstelle bereitstellen. Das ICH 520 kann mit einem Bus 522 durch eine periphere Brücke (oder Steuerung) 524, wie etwa eine Peripheral-Component-Interconnect(PCI)-Brücke, eine Universal-Serial-Bus(USB)-Steuerung oder andere Arten von peripheren Brücken oder Steuerungen kommunizieren. Die Brücke 524 kann einen Datenpfad zwischen dem Prozessor 502 und peripheren Vorrichtungen bereitstellen. Es können andere Arten von Topologien verwendet werden. Ebenso können Mehrfachbusse mit dem ICH 520 kommunizieren, z. B. durch Mehrfachbrücken oder -steuerungen. Außerdem können andere Peripherievorrichtungen in Kommunikation mit dem ICH 520 in verschiedenen Ausführungsformen integrierte Treiberelektronik (IDE) oder Small-Computer-System-Interface(SCSI)-Festplatte(n), USB-Schnittstelle(n), eine Tastatur, eine Maus, parallele Schnittstelle(n), serielle Schnittstelle(n), Diskettenlaufwerk(e), Digitalausgabe-Support (z. B. digitale Videoschnittstelle (DVI)) und andere Vorrichtungen umfassen.
  • Der Bus 522 kann mit einer Audiovorrichtung 526, einem oder mehreren Plattenlaufwerk(en) 528 und einer oder mehreren Netzwerkschnittstellenvorrichtung(en) 530 (die in Kommunikation mit dem Rechnernetzwerk 503 ist) kommunizieren. Andere Vorrichtungen können über den Bus 522 kommunizieren. Ebenso können verschiedenen Komponenten (wie etwa die Netzwerkschnittstellenvorrichtung 530) in manchen Ausführungsformen mit dem GMCH 508 kommunizieren. Zusätzlich dazu können der Prozessor 502 und das GMCH 508 kombiniert werden, um einen einzelnen Chip zu bilden. Ferner kann in anderen Ausführungsformen ein Grafikbeschleuniger (z. B. eine AGP- und/oder PCI/PCIe-Grafikvorrichtung) innerhalb des GMCH 508 enthalten sein.
  • Ferner kann das Rechensystem 500 einen flüchtigen und/oder nichtflüchtigen Speicher enthalten. Zum Beispiel kann ein nichtflüchtiger Speicher eines oder mehrere der folgenden Dinge enthalten: Nur-Lese-Speicher (ROM), programmierbarer ROM (PROM), löschbarer PROM (EPROM), elektrisch EPROM (EEPROM), ein Plattenlaufwerk (z. B. 528), eine Diskette, eine Compact-Disk-ROM (CD-ROM), eine Digital Versatile Disk (DVD), Flash-Speicher, eine magneto-optische Diskette oder andere Arten von nichtflüchtigen maschinenlesbaren Medien, die fähig sind, elektronische Daten (z. B. einschließlich Befehlen) zu speichern. In einer Ausführungsform können Komponenten des Systems 500 in einer Point-to-Point(PtP)-Konfiguration angeordnet sein. Zum Beispiel können Prozessoren, Speicher und/oder Eingabe-/Ausgabevorrichtungen durch eine Anzahl von Point-to-Point-Schnittstellen vernetzt sein.
  • 6 veranschaulicht ein Rechensystem 600, das gemäß einer Ausführungsform in einer Point-to-Point(PtP)-Konfiguration angeordnet ist. Im Speziellen zeigt 6 ein System, bei dem Prozessoren, Speicher und Eingabe-/Ausgabevorrichtungen durch eine Anzahl von Point-to-Point-Schnittstellen vernetzt sind. Die unter Bezugnahme auf die 15 diskutierten Operationen können durch eine oder mehrere Komponenten des Systems 600 durchgeführt werden.
  • Wie in 6 veranschaulicht, kann das System 600 verschiedene mehrere Prozessoren umfassen, von denen der Klarheit halber nur zwei, die Prozessoren 602 und 604, dargestellt sind. Die Prozessoren 602 und 604 können jeweils einen lokalen Speichersteuerungsknotenpunkt (MCH) 606 und 608 umfassen, um Kommunikation mit den Speichern 610 und 612 zu ermöglichen. Die Speicher 610 und/oder 612 können verschiedene Daten speichern, wie etwa die unter Bezugnahme auf den Speicher 512 von 5 diskutierten. Ebenso können die Prozessoren 602 und 604 einen oder mehrere der Kerne 106 und Logik 160 von 1 umfassen.
  • In einer Ausführungsform können die Prozessoren 602 und 604 einer der unter Bezugnahme auf 5 diskutierten Prozessoren 502 sein. Die Prozessoren 602 und 604 können über eine Point-to-Point(PtP)-Schnittstelle 614 unter Verwendung der PtP-Schnittstellenschaltungen 616 bzw. 618 Daten austauschen. Ebenso können die Prozessoren 602 und 604 mit einem Chipsatz 620 über die individuellen PtP-Schnittstellen 622 und 624 unter Verwendung der Point-to-Point-Schnittstellenschaltungen 626, 628, 630 und 632 Daten austauschen. Der Chipsatz 620 kann ferner mit einer Hochleistungsgrafikschaltung 634 über eine Hochleistungsgrafikschnittstelle 636 Daten austauschen, z. B. unter Verwendung einer PtP-Schnittstellenschaltung 637.
  • In zumindest einer Ausführungsform können eine oder mehrere unter Bezugnahme auf die 15 diskutierte Operationen von den Prozessoren 602 oder 604 und/oder anderen Komponenten des Systems 600, wie etwa denen, die über einen Bus 640 kommunizieren, durchgeführt werden. Es können jedoch andere Ausführungsformen in anderen Schaltungen, Logikeinheiten oder Vorrichtungen innerhalb des Systems 600 von 6 existieren. Ferner können manche Ausführungsformen auf mehrere in 6 dargestellte Schaltungen, Logikeinheiten oder Vorrichtungen verteilt sein.
  • Der Chipsatz 620 kann mit dem Bus 640 unter Verwendung einer PtP-Schnittstellenschaltung 641 kommunizieren. Der Bus 640 kann eine oder mehrere Vorrichtungen aufweisen, die mit ihm kommunizieren, wie etwa eine Busbrücke 642 und I/O-Vorrichtungen 643. Über einen Bus 644 kann die Busbrücke 642 mit anderen Vorrichtungen kommunizieren, wie etwa einer Tastatur/Maus 645, Kommunikationsvorrichtungen 646 (wie etwa Modems, Netzwerkschnittstellenvorrichtungen oder anderen Kommunikationsvorrichtungen, die mit dem Rechnernetzwerk 503 kommunizieren können), einer Audio-I/O-Vorrichtung und/oder einer Datenspeichervorrichtung 648. Die Datenspeichervorrichtung 648 kann einen Code 649 speichern, der von den Prozessoren 602 und/oder 604 ausgeführt werden kann.
  • In manchen Ausführungsformen können eine oder mehrere der hierin diskutierten Komponenten als eine Ein-Chip-System(SOC)-Vorrichtung ausgeführt sein. 7 veranschaulicht ein Blockdiagramm eines SOC-Pakets gemäß einer Ausführungsform. Wie in 7 veranschaulicht, umfasst das SOC 702 einen oder mehrere zentrale Verarbeitungseinheits(CPU)-Kerne 720, einen oder mehrere Grafikprozessor(GPU)-Kerne 730, eine Eingabe-/Ausgabe(I/O)-Schnittstelle 740 und eine Speichersteuerung 742. Verschiedene Komponenten des SOC-Pakets 702 können mit einem Verbindungssystem oder einem Bus, wie sie etwa hierin unter Bezugnahme auf die anderen Figuren diskutiert werden, gekoppelt sein. Ebenso kann das SOC-Paket 702 mehr oder weniger Komponenten umfassen, wie etwa diejenigen, die hierin unter Bezugnahme auf die anderen Figuren diskutiert werden. Ferner kann jede Komponente des SOC-Pakets 720 eine oder mehrere Komponenten umfassen, z. B. wie sie unter Bezugnahme auf die anderen Figuren hierin diskutiert werden. In einer Ausführungsform ist das SOC-Paket 702 (und seine Komponenten) auf einem oder mehreren Plättchen einer integrierten Schaltung (IC) bereitgestellt, die z. B. in eine einzelne Halbleitervorrichtung eingehaust sind.
  • Wie in 7 veranschaulicht, ist das SOC-Gehäuse 702 über die Speichersteuerung 742 mit einem Speicher 760 gekoppelt (der ähnlich oder gleich wie der hierin unter Bezugnahme auf die anderen Figuren diskutierte Speicher sein kann). In einer Ausführungsform kann der Speicher 760 (oder ein Teil davon) auf dem SOC-Paket 702 integriert sein.
  • Die I/O-Schnittstelle 740 kann mit einer oder mehreren I/O-Vorrichtungen 770 gekoppelt sein, z. B. über ein Verbindungssystem und/oder einen Bus, wie sie hierin unter Bezugnahme auf die anderen Figuren diskutiert werden. Die I/O-Vorrichtung(en) 770 kann/können eines oder mehrere von einer Tastatur, einer Maus, einem Touchpad, einem Display, einer Bild/Video-Aufnahmevorrichtung (wie etwa einer Kamera oder einem Kamerarekorder/Videorekorder), einem Touchscreen, einem Lautsprecher oder dergleichen umfassen. Ferner kann das SOC-Paket 702 in einer Ausführungsform die Logik 160 umfassen/integrieren. Alternativ dazu kann die Logik 160 außerhalb des SOC-Pakets 702 bereitgestellt sein (d. h. als eine diskrete Logik).
  • Die folgenden Beispiele betreffen weitere Ausführungsformen. Beispiel 1 umfasst eine Vorrichtung umfassend: Logik zum Herbeiführen des Ersetzens von einem oder mehreren Nicht-SIMD(Single Instruction, Multiple Data)-Teilen eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen, die zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens, basieren. Beispiel 2 umfasst die Vorrichtung nach Beispiel 1, worin die Logik das Ersetzen des einen Nicht-SIMD-Teils oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens herbeiführt, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden. Beispiel 3 umfasst die Vorrichtung nach Beispiel 1, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen. Beispiel 4 umfasst die Vorrichtung nach Beispiel 1, worin die eine oder mehreren SIMD-Operationen eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisieren. Beispiel 5 umfasst die Vorrichtung nach Beispiel 4, ferner umfassend einen Speicher, um die Liste zu speichern. Beispiel 6 umfasst die Vorrichtung nach Beispiel 1, worin einer von einem VLIW(Very Long Instruction Word)-Digitalsignalprozessor (DSP) oder einem GPU (Grafikprozessor) die Logik umfasst. Beispiel 7 umfasst die Vorrichtung nach Beispiel 1, worin ein Prozessor, der einen oder mehrere Prozessorkerne aufweist, die Logik umfasst. Beispiel 8 umfasst die Vorrichtung nach Beispiel 1, worin die Logik, ein Prozessor, der einen oder mehrere Prozessorkerne aufweist, und ein Speicher auf einer selben integrierten Vorrichtung sind.
  • Beispiel 9 umfasst ein Verfahren umfassend: das Herbeiführen des Ersetzens von einem oder mehreren Nicht-SIMD(Single Instruction, Multiple Data)-Teilen eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen, die zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens, basieren. Beispiel 10 umfasst das Verfahren nach Beispiel 9, ferner umfassend das Herbeiführen des Ersetzens von einem oder mehreren Nicht-SIMD-Teilen des KNN-Verfahrens, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden. Bespiel 11 umfasst das Verfahren nach Beispiel 9, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen. Beispiel 12 umfasst das Verfahren nach Beispiel 9, ferner umfassend die eine oder mehreren SIMD-Operationen, bei denen eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisiert wird. Beispiel 13 umfasst das Verfahren nach Beispiel 12, ferner umfassend das Speichern der Liste im Speicher. Beispiel 14 umfasst das Verfahren nach Beispiel 9, worin die Ersetzungsoperation von einem eines VLIW(Very Long Instruction Word)-Digitalsignalprozessor (DSP) oder einem GPU (Grafikprozessor) durchgeführt wird.
  • Beispiel 15 umfasst ein Computer-lesbares Medium umfassend einen oder mehrere Befehle, die, wenn sie auf einem Prozessor ausgeführt werden, den Prozessor konfigurieren, um eine oder mehrere Operationen durchzuführen, um: das Ersetzen eines oder mehrerer Nicht-SIMD(Single Instruction, Multiple Data)-Teile eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen herbeizuführen, die zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens, basieren. Beispiel 16 umfasst das Computer-lesbare Medium nach Beispiel 15, ferner umfassend einen oder mehrere Befehle, die, wenn sie auf dem Prozessor ausgeführt werden, den Prozessor konfigurieren, um eine oder mehrere Operationen durchzuführen, um das Ersetzen des einen oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens herbeizuführen, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden. Beispiel 17 umfasst das Computer-lesbare Medium nach Beispiel 15, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen. Beispiel 18 umfasst das Computer-lesbare Medium nach Beispiel 15, ferner umfassend einen oder mehrere Befehle, die, wenn sie auf dem Prozessor ausgeführt werden, den Prozessor konfigurieren, um eine oder mehrere Operationen durchzuführen, um die eine oder mehreren SIMD-Operationen zu veranlassen, eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens zu aktualisieren. Beispiel 19 umfasst das Computer-lesbare Medium nach Beispiel 15, ferner umfassend einen oder mehrere Befehle, die, wenn sie auf dem Prozessor ausgeführt werden, den Prozessor konfigurieren, um eine oder mehrere Operationen durchzuführen, die das Speichern der Liste im Speicher veranlassen sollen. Beispiel 20 umfasst das Computer-lesbare Medium nach Beispiel 15, worin die Ersetzungsoperation durch einen eines VLIW(Very Long Instruction Word)-Digitalsignalprozessors (DSP) oder eines GPU (Grafikprozessors) durchgeführt wird
  • Beispiel 21 umfasst ein System umfassend: einen Prozessor, der einen oder mehrere Prozessorkerne aufweist; eine Anzeigevorrichtung, die mit dem Prozessor gekoppelt ist, um eines oder mehrere Bilder anzuzeigen; und eine Logik, um das Ersetzen eines oder mehrerer Nicht-SIMD(Single Instruction, Multiple Data)-Teile eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen herbeizuführen, die zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens, basiert. Beispiel 22 umfasst das System nach Beispiel 21, worin die Logik das Ersetzen des einen oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens herbeiführt, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden. Beispiel 23 umfasst das System nach Beispiel 21, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen. Beispiel 24 umfasst das System nach Beispiel 21, worin die eine oder mehreren SIMD-Operationen eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisieren. Beispiel 25 umfasst das System nach Beispiel 24, ferner umfassend einen Speicher, um die Liste zu speichern. Beispiel 26 umfasst das System nach Beispiel 21, worin einer von einem VLIW(Very Long Instruction Word)-Digitalsignalprozessor (DSP) oder GPU (Grafikprozessor) die Logik umfasst. Beispiel 27 umfasst das System nach Beispiel 21, worin der Prozessor die Logik umfasst. Beispiel 28 umfasst das System nach Beispiel 21, worin die Logik, der Prozessor und der Speicher auf einer selben integrierten Vorrichtung sind.
  • Beispiel 29 umfasst eine Vorrichtung umfassend Mittel, um ein Verfahren auszuführen, wie es in einem vorangegangenen Beispiel dargelegt ist.
  • Beispiel 30 umfasst einen maschinenlesbaren Speicher umfassend maschinenlesbare Befehle, die, wenn sie ausgeführt werden, ein Verfahren implementieren oder eine Vorrichtung realisieren, wie sie in einem vorangegangenen Beispiel dargelegt sind.
  • In verschiedenen Ausführungsformen können die hierin, z. B. unter Bezugnahme auf die 17, diskutierten Operationen als Hardware (z. B. Logikschaltungsanordnung), Software, Firmware oder Kombinationen davon implementiert sein, die als ein Computerprogrammprodukt bereitgestellt sein können, z. B. umfassend ein greifbares maschinenlesbares oder Computer-lesbares Medium, auf dem Befehle (oder Softwareabläufe) gespeichert sind, die verwendet werden, um einen Rechner zu programmieren, um ein hierin diskutiertes Verfahren durchzuführen. Das maschinenlesbare Medium kann eine Speichervorrichtung wie etwa die unter Bezugnahme auf die 17 diskutierten umfassen.
  • Zusätzlich dazu können solche Computer-lesbaren Medien als ein Computerprogrammprodukt heruntergeladen werden, worin das Programm von einem Remoterechner (z. B. einem Server) zu einem anfragenden Rechner (z. B. einem Client) übertragen werden kann, und zwar mittels Datensignalen, die in einer Trägerwelle oder einem anderen Ausbreitungsmedium über eine Kommunikationsverbindung (z. B. einen Bus, ein Modem oder eine Netzwerkverbindung) bereitgestellt sind.
  • Bezugnahme in der Patentschrift auf „eine Ausführungsform” bedeutet, dass eine bestimmte Eigenschaft, Struktur und/oder Merkmal, die in Verbindung mit der Ausführungsform beschrieben sind, in zumindest eine Implementierung aufgenommen werden können. Das mehrfache Vorkommen des Ausdrucks „in einer Ausführungsform” an verschiedenen Stellen der Patentschrift kann sich jeweils auf dieselbe Ausführungsform beziehen oder auch nicht.
  • Ebenso können in der Beschreibung und den Ansprüchen die Begriffe „gekoppelt” und „verbunden” mitsamt ihrer Ableitungen verwendet werden. In manchen Ausführungsformen kann „verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physikalischem oder elektrischem Kontakt miteinander sind. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physikalischem oder elektrischem Kontakt sind. Allerdings kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente möglicherweise nicht in direktem Kontakt miteinander sind, aber dennoch zusammenwirken oder miteinander interagieren.
  • Obwohl Ausführungsformen in einer Sprache, die spezifisch für strukturelle Merkmale und/oder Verfahrensabläufe ist, beschrieben wurden, ist darauf hinzuweisen, dass der beanspruchte Gegenstand nicht auf die beschriebenen spezifischen Merkmale oder Abläufe zu beschränken ist. Vielmehr sind die spezifischen Merkmale und Abläufe als Beispielformen des Implementierens des beanspruchten Gegenstands offenbart.

Claims (24)

  1. Vorrichtung, umfassend: Logik zum Herbeiführen des Ersetzens eines oder mehrerer Nicht-SIMD(Single Instruction, Multiple Data)-Teile eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen, basierend zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens.
  2. Vorrichtung nach Anspruch 1, worin die Logik das Ersetzen des einen oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens herbeiführt, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden.
  3. Vorrichtung nach Anspruch 1 oder 2, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen.
  4. Vorrichtung nach einem der vorhergehenden Ansprüche, worin die eine oder mehreren SIMD-Operationen eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisieren.
  5. Vorrichtung nach Anspruch 4, ferner umfassend einen Speicher, um die Liste zu speichern.
  6. Vorrichtung nach einem der vorhergehenden Ansprüche, worin einer von einem VLIW(Very Long Instruction Word)-Digitalsignalprozessor (DSP) oder GPU (Grafikprozessor) die Logik umfasst.
  7. Vorrichtung nach einem der vorhergehenden Ansprüche, worin ein Prozessor, der einen oder mehrere Prozessorkerne aufweist, die Logik umfasst.
  8. Vorrichtung nach einem der vorhergehenden Ansprüche, worin die Logik, ein Prozessor, der einen oder mehrere Prozessorkerne aufweist, und ein Speicher auf einer selben integrierten Vorrichtung sind.
  9. Verfahren, umfassend: das Herbeiführen des Ersetzens eines oder mehrerer Nicht-SIMD(Single Instruction, Multiple Data)-Teile eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen, basierend zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens.
  10. Verfahren nach Anspruch 9, ferner umfassend das Herbeiführen des Ersetzens des einen oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden.
  11. Verfahren nach Anspruch 9 oder 10, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen.
  12. Verfahren nach einem der Ansprüche 9 bis 11, ferner umfassend die eine oder mehreren SIMD-Operationen, die eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisieren.
  13. Verfahren nach Anspruch 12, ferner umfassend das Speichern der Liste in einem Speicher.
  14. Verfahren nach einem der Ansprüche 9 bis 13, worin die Ersetzungsoperation von einem eines VLIW(Very Long Instruction Word)-Digitalsignalprozessors (DSP) oder GPU (Grafikprozessors) durchgeführt wird.
  15. System, umfassend: einen Prozessor, der einen oder mehrere Prozessorkerne aufweist; eine Anzeigevorrichtung, die mit dem Prozessor gekoppelt ist, um eines oder mehrere Bilder anzuzeigen; und eine Logik zum Herbeiführen des Ersetzens von einem oder mehreren Nicht-SIMD(Single Instruction, Multiple Data)-Teilen eines K-nächste-Nachbarn(KNN)-Verfahrens durch eine oder mehrere SIMD-Operationen, basierend zumindest teilweise auf einem Vergleich eines ersten Abstands, entsprechend einer aktuellen Iteration des KNN-Verfahrens, mit einem zweiten Abstand, entsprechend einem kürzesten Abstand einer vorherigen Iteration des KNN-Verfahrens.
  16. System nach Anspruch 15, worin die Logik das Ersetzen des einen oder der mehreren Nicht-SIMD-Teile des KNN-Verfahrens herbeiführt, um Verzweigungen in einer inneren Schleife des KNN-Verfahrens zu vermeiden.
  17. System nach Anspruch 15 oder 16, worin der eine oder die mehreren Nicht-SIMD-Teile des KNN-Verfahrens eine oder mehrere Skalaroperationen umfassen.
  18. System nach einem der Ansprüche 15 bis 17, worin die eine oder mehreren SIMD-Operationen eine Liste von nächsten Abständen nach jeder Iteration des KNN-Verfahrens aktualisieren sollen.
  19. System nach Anspruch 18, ferner umfassend einen Speicher, um die Liste zu speichern.
  20. System nach einem der Ansprüche 15 bis 19, worin einer von einem VLIW(Very Long Instruction Word)-Digitalsignalprozessor (DSP) oder GPU (Grafikprozessor) die Logik umfasst.
  21. System nach einem der Ansprüche 15 bis 20, worin der Prozessor die Logik umfasst.
  22. System nach einem der Ansprüche 15 bis 21, worin die Logik, der Prozessor und der Speicher auf einer selben integrierten Vorrichtung sind.
  23. Computer-lesbares Medium, umfassend einen oder mehrere Befehle, die, wenn sie auf einem Prozessor ausgeführt werden, den Prozessor konfigurieren, um eine oder mehrere Operationen nach einem der Ansprüche 9 bis 14 durchzuführen.
  24. Vorrichtung, umfassend Mittel zum Durchführen einer Methode, wie in einem der Ansprüche 9 bis 14 dargelegt.
DE102015014800.1A 2014-12-15 2015-11-13 Verbesserte SIMD-K-nächste-Nachbarn-Implementierung Pending DE102015014800A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/570,413 2014-12-15
US14/570,413 US10042813B2 (en) 2014-12-15 2014-12-15 SIMD K-nearest-neighbors implementation

Publications (1)

Publication Number Publication Date
DE102015014800A1 true DE102015014800A1 (de) 2016-06-16

Family

ID=56082628

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015014800.1A Pending DE102015014800A1 (de) 2014-12-15 2015-11-13 Verbesserte SIMD-K-nächste-Nachbarn-Implementierung

Country Status (4)

Country Link
US (1) US10042813B2 (de)
CN (1) CN105700855B (de)
DE (1) DE102015014800A1 (de)
TW (1) TWI587137B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10042813B2 (en) 2014-12-15 2018-08-07 Intel Corporation SIMD K-nearest-neighbors implementation

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023030745A (ja) * 2021-08-24 2023-03-08 富士通株式会社 計算機および計算方法
US11729273B2 (en) * 2022-01-05 2023-08-15 International Business Machines Corporation Adjusting idle timeout for a session

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
US6374349B2 (en) * 1998-03-19 2002-04-16 Mcfarling Scott Branch predictor with serially connected predictor stages for improving branch prediction accuracy
US6173388B1 (en) * 1998-04-09 2001-01-09 Teranex Inc. Directly accessing local memories of array processors for improved real-time corner turning processing
US6594392B2 (en) * 1999-05-17 2003-07-15 Intel Corporation Pattern recognition based on piecewise linear probability density function
DE10234086B4 (de) * 2002-07-26 2004-08-26 Koenig & Bauer Ag Verfahren zur Signalauswertung eines elektronischen Bildsensors bei der Mustererkennung von Bildinhalten eines Prüfkörpers
US7219213B2 (en) * 2004-12-17 2007-05-15 Intel Corporation Flag bits evaluation for multiple vector SIMD channels execution
JP2009151896A (ja) * 2007-12-21 2009-07-09 Sony Corp 画像処理装置、動画再生装置、これらにおける処理方法およびプログラム
US8150902B2 (en) 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
US20120179704A1 (en) 2009-09-16 2012-07-12 Nanyang Technological University Textual query based multimedia retrieval system
US8775153B2 (en) * 2009-12-23 2014-07-08 Intel Corporation Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment
US9235801B2 (en) 2013-03-15 2016-01-12 Citrix Systems, Inc. Managing computer server capacity
US9152860B2 (en) * 2013-05-10 2015-10-06 Tantrum Street LLC Methods and apparatus for capturing, processing, training, and detecting patterns using pattern recognition classifiers
US10042813B2 (en) 2014-12-15 2018-08-07 Intel Corporation SIMD K-nearest-neighbors implementation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10042813B2 (en) 2014-12-15 2018-08-07 Intel Corporation SIMD K-nearest-neighbors implementation

Also Published As

Publication number Publication date
US20160170771A1 (en) 2016-06-16
TWI587137B (zh) 2017-06-11
TW201633147A (zh) 2016-09-16
US10042813B2 (en) 2018-08-07
CN105700855A (zh) 2016-06-22
CN105700855B (zh) 2018-09-21

Similar Documents

Publication Publication Date Title
DE102012216029B4 (de) Ein skalierbares anpassungsfähiges map-reduce-rahmenwerk mit verteilten daten
DE102018129692A1 (de) Tiefgehendes Lernen anhand von Ausführungsverlaufsdaten zur Erkennung von Exploits
DE112016005536T5 (de) Bestimmen von reihenfolgen einer ausführung eines neuronalen netzes
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE112015004983T5 (de) Parallel-Slice-Prozessor mit einer Lade-Speicher-Umlaufwarteschlange für eine schnelle Freigabe von Einträgen in einer Ausgabewarteschlange
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE102014003689A1 (de) Verfolgung des kontrollflusses von befehlen
DE102014003790A1 (de) Parallelvorrichtung für hochkomprimierte Hochgeschwindigkeits-LZ77-Tokenisierung und Huffman-Codierung für Deflate-Komprimierung
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE112011104555T5 (de) Vektorkonfliktinstruktionen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE112017004911T5 (de) Anweisung und Logik für die Erkennung eines numerischen Ansammlungsfehlers
DE112013004770T5 (de) Lese- und -Schreibmaskenaktualisierungsbefehl zur Vektorisierung rekursiver Berechnungen über unabhängige Daten
DE112013004867T5 (de) Befehl und Logik zum Bereitstellen von Push-Puffer-Kopier- und Speicher-Funktionalität
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
DE102018124919A1 (de) Skalierbare speicheroptimierte Hardware für Matrix-Solve
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102020112826A1 (de) Verfahren zur effizienten durchführung von datenreduktionen in parallelverarbeitungseinheiten
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE102015014800A1 (de) Verbesserte SIMD-K-nächste-Nachbarn-Implementierung
DE202016009013U1 (de) Befehle und Logik für Vektorpermutation
DE112017001704T5 (de) Arbiterbasierte Serialisierung von Prozessor-System-Management-Interrupt-Ereignissen
DE112017001012T5 (de) Prozessoren, verfahren und systeme zum einstellen maximaler taktfrequenzen basierend auf dem befehlstyp

Legal Events

Date Code Title Description
R012 Request for examination validly filed