DE112011105774B4 - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt - Google Patents
Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt Download PDFInfo
- Publication number
- DE112011105774B4 DE112011105774B4 DE112011105774.1T DE112011105774T DE112011105774B4 DE 112011105774 B4 DE112011105774 B4 DE 112011105774B4 DE 112011105774 T DE112011105774 T DE 112011105774T DE 112011105774 B4 DE112011105774 B4 DE 112011105774B4
- Authority
- DE
- Germany
- Prior art keywords
- memory
- data
- data structure
- relocatable
- operator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C15/00—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
- G11C15/04—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores using semiconductor elements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C19/00—Digital stores in which the information is moved stepwise, e.g. shift registers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C19/00—Digital stores in which the information is moved stepwise, e.g. shift registers
- G11C19/18—Digital stores in which the information is moved stepwise, e.g. shift registers using capacitors as main elements of the stages
- G11C19/182—Digital stores in which the information is moved stepwise, e.g. shift registers using capacitors as main elements of the stages in combination with semiconductor elements, e.g. bipolar transistors, diodes
- G11C19/188—Organisation of a multiplicity of shift registers, e.g. regeneration, timing or input-output circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C19/00—Digital stores in which the information is moved stepwise, e.g. shift registers
- G11C19/28—Digital stores in which the information is moved stepwise, e.g. shift registers using semiconductor elements
- G11C19/287—Organisation of a multiplicity of shift registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Power Engineering (AREA)
- Dram (AREA)
- Static Random-Access Memory (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Read Only Memory (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
einen Speicher (110) mit eingebauter Verschiebungsfähigkeit, um einen zusammenhängenden Teilsatz der Daten von einem ersten Ort an einen zweiten Ort in dem Speicher (110) zu verschieben, wobei der zusammenhängende Datenteilsatz eine Größe aufweist, die kleiner als eine Gesamtgröße des Speichers (110) ist, wobei die eingebaute Verschiebungsfähigkeit nur Daten des zusammenhängenden Teilsatzes verschiebt; und
eine Datenstruktur (120; 530), die auf dem Speicher (110) definiert ist, um Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit die Bewegung der Daten, das Einfügen der Daten und/oder das Löschen der Daten in der Datenstruktur (120; 530) erleichtert,
wobei die eingebaute Verschiebungsfähigkeit das Sortieren von Daten der Datenstruktur (120; 530) und/oder das Bewahren einer sortierten Reihenfolge der Daten in der Datenstruktur (120; 530) erleichtert;
wobei die Datenstruktur (120; 530), die auf dem Speicher (110) definiert ist, sich in sowohl dem Speicher (110) mit eingebauter Verschiebungsfähigkeit als auch einem anderen, nicht verschiebbaren Speicher befindet.
Description
- HINTERGRUND
- Moderne Computer und zugehörige Verarbeitungssysteme weisen in der Regel einen Prozessor und eine Form von Speicher auf. Der Prozessor ist im Allgemeinen für das Durchführen der verschiedenen Rechenaufgaben des Computers verantwortlich, während der Speicher Daten speichert, die in den Rechenaufgaben verwendet und von diesen erzeugt werden. Die Aufteilung der Architektur in Bezug auf das Verarbeiten durch den Prozessor und die Datenspeicherung durch den Speicher hat sich in nahezu der gesamten Geschichte derartiger Systeme als erfolgreich erwiesen.
- Ein typischer Universalcomputer beispielsweise weist gewöhnlich eine Zentraleinheit (central processing unit, CPU) und einen Hauptspeicher auf, die über einen oder mehrere Kommunikationskanäle (z. B. Daten-, Befehls- und Adressbusse) miteinander kommunizieren. In der Regel stellt die CPU Einrichtungen bereit, um verschiedene arithmetische und logische Operationen durchzuführen, eine Arbeitsablaufsteuerung bereitzustellen und anderweitig Aspekte des Universalcomputers zu steuern. Praktisch alle CPU stellen beispielsweise Funktionen oder Operationen zum Lesen von Daten aus einem Speicher, Schreiben von Daten in einen Speicher und Ausführen von Programmen bereit, die einen Satz Anweisungen umfassen, der die Daten nutzt, um eine vorher definierte Aufgabe durchzuführen. Darüber hinaus können CPU Ein-/Ausgabe (E/A) abwickeln, was eine Kommunikation mit peripheren Geräten sowie Subsystemen außerhalb des Universalcomputers ermöglicht. CPU können sogar in einigen Beispielen eine Grafikverarbeitung bereitstellen, um das Erzeugen und Aktualisieren einer grafischen Anzeigeeinheit (z. B. eines Monitors) abzuwickeln.
- Im Gegensatz dazu stellt der Hauptspeicher moderner Computer, der einen statischen Direktzugriffspeicher (static random access memory, SRAM), einen dynamischen Direktzugriffsspeicher (dynamic random access memory, DRAM), einen Festwertspeicher (read-only memory, ROM), einen programmierbaren Festwertspeicher (programmable read-only memory, PROM), einen Flash-Speicher und/oder eine Vielfalt anderer Speichertypen beinhalten kann, in der Regel einen verhältnismäßig begrenzten Satz von Fähigkeiten bereit. Die Hauptfähigkeit dieser Fähigkeiten ist das Speichern von Computerprogrammen und Daten, die von der CPU ausgeführt und verwendet werden. Zu anderen eingeschränkten Fähigkeiten, die in dem Hauptspeicher moderner Computer vorgefunden werden können oder oftmals mit diesem assoziiert sind, zählen bestimmte Speicherverwaltungsfunktionen. DRAM-Speichersubsysteme eines Hauptspeichers können beispielsweise über Schaltkreise zum automatischen Auffrischen von darin gespeicherten Daten verfügen.
- Die historische Aufteilung der Architektur in Bezug auf das Verarbeiten im Prozessor und die Speicherung im Speicher erzeugt jedoch bestimmte Probleme und wirft praktische Probleme zur Implementierung auf, die mit der Zeit zunehmend offensichtlich werden. Insbesondere kann die herkömmliche Aufteilung der Architektur, die die gesamte Verarbeitung in der CPU zentralisiert, während der Hauptspeicher dazu degradiert wird, die Speicherung bereitzustellen, Probleme aufweisen und tut dies auch, insbesondere bei Betrachtung von unter Verwendung von Datenstrukturen gespeicherten und bearbeiteten Daten.
- Die
US 5,504,919 beschreibt einen verschiebbaren Speicher mit einer Vielzahl von Prozesselementen, die in Reihe geschaltet sind. Jedes Prozesselement beinhaltet eine Sortiereinheit zur Speicherung eines sortierten Elements und eine mit der Sortiereinheit gekoppelte Vergleichs-/Steuereinheit. In diesem Sortierer werden alle sortierten Elemente gleichzeitig mit dem Eingangselement verglichen und dann in eine LE-Gruppe, in der die sortierten Elemente kleiner oder gleich dem Eingangselement sind, und eine G-Gruppe, in der die sortierten Elemente größer als das Eingangselement sind, unterteilt. Beim Einfügen werden die sortierten Elemente in der LE-Gruppe gleichzeitig nach rechts verschoben und das Eingabeelement an der Position zwischen der LE-Gruppe und der G-Gruppe geladen. Beim Löschvorgang werden nur die sortierten Positionen in der LE-Gruppe gleichzeitig nach links verschoben. - Die Erfindung sieht einen verschiebbaren Speicher gemäß Anspruch 1, ein verschiebbares Speichersystem gemäß Anspruch 9 und ein Verfahren gemäß Anspruch 11 vor. Ausgestaltungen sind in den abhängigen Ansprüchen angegeben.
- Figurenliste
- Verschiedene Merkmale von Beispielen gemäß den hierin beschriebenen Grundsätzen können unter Bezugnahme auf die folgende ausführliche Beschreibung in Verbindung mit den begleitenden Zeichnungen einfacher verstanden werden, wobei gleiche Bezugsziffern gleiche Strukturelemente bezeichnen und wobei in den Zeichnungen:
-
1A ein Beispiel einer Downshift (Verschiebung nach unten) eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel gemäß den hierin beschriebenen Grundsätzen darstellt. -
1B stellt ein Beispiel einer Upshift (Verschiebung nach oben) eines zusammenhängenden Datensatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel gemäß den hierin beschriebenen Grundsätzen dar. -
2 stellt ein Blockdiagramm eines verschiebbaren Speichers, der In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) unterstützt, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. -
3 stellt eine Wahrheitstabelle eines erweiterten Decodierers gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. -
4A stellt ein schematisches Diagramm eines Teils eines beispielhaften B+-Baums gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. -
4B stellt den beispielhaften B+-Baum von4A gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar. -
5A stellt ein Blockdiagramm eines verschiebbaren Speichersystems mit In-Memory-Datenstruktur-Unterstützung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. -
5B stellt ein Blockdiagramm eines verschiebbaren Speichersystems mit In-Memory-Datenstruktur-Unterstützung gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar. -
6 stellt ein schematisches Diagramm einer In-Memory-Datenstruktur vor und nach Datendrehung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. -
7 stellt ein Ablaufschema eines Verfahrens eines verschiebbaren Speichers mit In-Memory-Datenstrukturen gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. - Bestimmte Beispiele haben andere Merkmale, die zusätzlich zu und anstelle von den in oben angeführten Figuren dargestellten Merkmalen sind. Diese und andere Merkmale sind im Folgenden unter Bezugnahme auf die oben angeführten Figuren ausführlich beschrieben.
- AUSFÜHRLICHE BESCHREIBUNG
- Beispiele gemäß den hierin beschriebenen Grundsätzen stellen In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) und damit assoziierte Datenstruktur-Operationen in einem Speicher mit eingebauter Datenverschiebungsfähigkeit bereit. Insbesondere ist die Datenverschiebungsfähigkeit gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze im Wesentlichen in den Speicher eingebaut. Die eingebaute Datenverschiebungsfähigkeit stellt eine Umsetzung oder Verschiebung (Shift) eines zusammenhängenden Datenteilsatzes, der in dem Speicher gespeichert ist, bereit, während die Datenstruktur eine Organisierung der gespeicherten Daten bereitstellt, die durch die Datenstruktur-Operationen bearbeitet werden. Beispiele gemäß den hierin beschriebenen Grundsätzen finden Anwendung auf eine Vielfalt von Datenverarbeitungssystemen.
- Gemäß verschiedenen Beispielen kann der zusammenhängende Teilsatz gespeicherter Daten (z. B. Datenwörter) in dem Speicher von einem ersten oder Anfangsort des Speichers zu einem zweiten oder Endort in dem Speicher verschieben werden. Die Daten bewahren gemäß einigen Beispielen eine geordnete Beziehung in dem zusammenhängenden Teilsatz, wenn sie an den zweiten Ort verschoben werden. Darüber hinaus findet die Verschiebung komplett in dem Speicher statt und die Verschiebung wird im Allgemeinen ohne Verwendung von Ressourcen, wie einem Prozessor, die sich außerhalb des Speichers befinden, erzielt. Des Weiteren beinhaltet die Verschiebung gemäß verschiedenen Beispielen kein Bewegen von Daten zwischen einem Prozessor und dem Speicher. Infolgedessen wird der Speicher mit eingebauter Verschiebungsfähigkeit hierin als „verschiebbarer Speicher“ bezeichnet.
- In einigen Beispielen kann die Verschiebung, die hierin von dem verschiebbaren Speicher bereitgestellt wird, dazu eingesetzt werden, einen Ort in dem Speicher zu „öffnen“, in den neue Daten eingefügt werden können. Insbesondere kann während einer Operation an einer Datenstruktur ein Speicherort entweder über oder unter dem zusammenhängenden Teilsatz gespeicherter Daten zur Dateneinfügung verfügbar gemacht werden, wenn der zusammenhängende Teilsatz gespeicherter Daten durch die Verschiebung in dem verschiebbaren Speicher bewegt wird. Dann können Daten beispielsweise als ein weiterer Teil der Datenstruktur-Operation in die Öffnung hinzugefügt oder eingefügt werden.
- Gemäß anderen Beispielen kann die Verschiebung dazu verwendet werden, Daten zu löschen oder zu „überschreiben“, die über einem Beginn des zusammenhängenden Teilsatzes oder unter einem Ende des zusammenhängenden Teilsatzes gespeichert sind. Insbesondere können während einer Datenstruktur-Operation die Daten, die über oder unter dem zusammenhängenden Teilsatz gespeichert sind, mit einem Teil des zusammenhängenden Teilsatzes selbst überschrieben werden, wenn die zusammenhängenden Daten durch den verschiebbaren Speicher verschoben werden. Wenn beispielsweise der zusammenhängende Teilsatz gespeicherter Daten Teil einer größeren Datenstruktur (z. B. eines Felds von Datenwörtern) in dem verschiebbaren Speicher ist, kann die Verschiebung die Wirkung des Löschens eines Teils der Daten (z. B. ein oder mehrere Datenwörter) in der größeren Datenstruktur als Teil der Datenstruktur-Operation haben.
- Gemäß einigen Beispielen kann das Verschieben von Daten, um entweder Daten in dem verschiebbaren Speicher einzufügen oder zu löschen, in weniger Zeit und in einigen Beispielen in erheblich weniger Zeit erzielt werden, als im Allgemeinen ohne Verwenden eines verschiebbaren Speichers möglich ist. Im Gegensatz dazu erfordert ein herkömmlicher Speicher, der sich auf einen Prozessor stützt, um beispielsweise eine Verschiebung durchzuführen, im Allgemeinen einen Zeitraum, der proportional zu einer Menge der verschobenen Daten ist. Das Verschieben von Daten in einem herkömmlichen Speicher beinhaltet beispielsweise in der Regel, dass der Prozessor die zu verschiebenden Daten liest und dann die Daten zurück in den Speicher an einem anderen Ort schreibt. Das Lesen und das Schreiben können von dem Prozessor beispielsweise auf einer Wort-für-Wort-Basis aufgrund der Struktur und der Funktionalität des herkömmlichen Speichers durchgeführt werden. Da jedes Datenwort in den verschobenen Daten erst durch den Prozessor aus dem herkömmlichen Speicher gelesen und dann anschließend zurück in den herkömmlichen Speicher geschrieben wird, ist die Zeit zum Verschieben der Daten beispielsweise im Allgemeinen proportional zu der Menge oder der Länge der verschobenen Daten (z. B. Anzahl der Datenwörter). Je größer die Datenmenge ist, desto länger dauert die Verschiebungsoperation.
- Darüber hinaus stützt ein herkömmlicher Speicher sich auf eine Ressource (z. B. den Prozessor), der zu dem herkömmlichen Speicher extern ist, um das Lesen und das Schreiben beim Verschieben der Daten durchzuführen. Da die Ressource, die die Verschiebung durchführt, zu dem herkömmlichen Speicher extern ist, muss jedes der Datenwörter, das an der Wort-für-Wort-Verschiebung beteiligt ist, zwischen der externen Ressource und dem herkömmlichen Speicher durch eine Form von Datenbus oder einem ähnlichen Kommunikationskanal laufen. Der Datenbus oder der ähnliche Kommunikationskanal kann eine Geschwindigkeit der Lese- und Schreibeoperationen und infolgedessen eine Gesamtgeschwindigkeit der Verschiebung wesentlich begrenzen. Somit kann das Verschieben großer Datenteilsätze in Bezug auf die Verarbeitungszeit aufgrund eines oder beider der Wirkungen der Datenbusgeschwindigkeit und der proportionalen Zeitaspekte des Durchführens einer Verschiebung unter Verwendung eines herkömmlichen Speichers unerschwinglich teuer werden.
- Gemäß den hierin beschriebenen Grundsätzen hat ein verschiebbarer Speicher eine eingebaute Verschiebungsfähigkeit, so dass beispielsweise Daten nicht von einer externen Ressource gelesen und dann geschrieben werden müssen, um eine Verschiebung durchzuführen. Der zusammenhängende Teilsatz gespeicherter Daten wird zu dem verschiebbaren Speicher identifiziert (z. B. unter Verwendung einer Adresse und einer Länge) und der verschiebbare Speicher wird angewiesen, den zusammenhängenden Teilsatz zu verschieben. Die Verschiebung wird dann von dem verschiebbaren Speicher vorgenommen und findet komplett in diesem statt. Geschwindigkeitsbegrenzungen, die mit dem Übertragen von Daten an und von einer externen Ressource assoziiert werden, werden gemäß den Beispielen der hierin beschriebenen Grundsätze durch den verschiebbaren Speicher im Wesentlichen eliminiert. Darüber hinaus kann die Zeit zum Verschieben beispielsweise im Wesentlichen von der Länge des zusammenhängenden Teilsatzes unabhängig sein.
- Gemäß verschiedenen Beispielen kann das Verschieben in dem verschiebbaren Speicher mit Schaltkreisen des verschiebbaren Speichers selbst implementiert werden. Dadurch erfordert das Verschieben unter Verwendung eines verschiebbaren Speichers kein aufeinander folgendes Lesen und Schreiben jedes Datenworts des zusammenhängenden Teilsatzes. Das Verschieben unter Verwendung eines verschiebbaren Speichers kann beispielsweise alle Daten in dem zusammenhängenden Teilsatz auf eine im Wesentlichen gleichzeitige Weise verschieben. Dadurch kann der verschiebbare Speicher das Verschieben des zusammenhängenden Teilsatzes innerhalb einer Zeit implementieren, die im Wesentlichen von der Länge des zusammenhängenden Teilsatzes unabhängig ist.
- In einigen Beispielen kann der verschiebbare Speicher die Verschiebung gemäß den beschriebenen Grundsätzen in einer im Wesentlichen konstanten Zeit durchführen. Mit „konstante Zeit“ ist gemeint, dass eine im Wesentlichen ähnliche Zeitdauer erforderlich ist, um den zusammenhängenden Teilsatz gespeicherter Daten zu verschieben, ungeachtet der Länge des zusammenhängenden Teilsatzes. Ein zusammenhängender Teilsatz willkürlicher Länge kann beispielsweise gemäß einigen Beispielen innerhalb eines einzigen Taktzyklus verschoben werden. In einem anderen Beispiel kann ein kürzerer zusammenhängender Teilsatz nur einen einzigen Taktzyklus benötigen, während ein längerer zusammenhängender Teilsatz zwei oder mehr Taktzyklen erfordern kann. Obwohl der verschiebbare Speicher mehr Zeit für längere Teilsätze als für verhältnismäßig kürzere Teilsätze anwenden kann, wird die Verschiebung dennoch immer noch innerhalb einer im Wesentlichen konstanten Zeit durchgeführt, da die erforderliche Zeit nicht strikt proportional zu der Länge des zusammenhängenden Teilsatzes ist.
- Hierin bezieht sich der Begriff „Speicher“ auf eine beliebige Art von Speicher, der Daten empfangen und speichern kann. Der Speicher stimmt im Allgemeinen mit einem Speicher überein, der beispielsweise von einem Computerprozessor oder in einem Computersystem eingesetzt wird. Insbesondere bezieht sich Speicher definitionsgemäß hierin auf eine beliebige Art von Speicher, der während einer Operation des Computers, der den Speicher einsetzt, beschrieben und gelesen werden kann. Der Speicher kann beispielsweise einen Direktzugriffsspeicher (random access memory, RAM) umfassen. Der Direktzugriffsspeicher kann beispielsweise ein statischer RAM (SRAM) sein. Andere Arten von Speicher beinhalten, sind jedoch nicht darauf beschränkt, einen dynamischen Direktzugriffsspeicher (dynamic random access memory, DRAM), einen Flash- und ähnliche nichtflüchtige Speicher, die während einer Operation des Computers beschreibbar sind, verschiedene Formen eines optischen Speichers (z. B. wiederbeschreibbare optische Platten), ein magnetischer Speicher (z. B. Computerfestplatten) und verschiedene Speicherstrukturen, die auf Signalspeichern, bistabilen Kippschaltungen (Flipflops) und anderen bistabilen Konstrukten basieren.
- Ein Speicher kann außerdem hierin definitionsgemäß eine Vielzahl von Gruppen von Speicherzellen umfassen. Eine Vielzahl von Speicherzellen kann auch gemäß einigen Beispielen als ein Feld angeordnet sein. Die Speicherzellen können beispielsweise als ein lineares Feld angeordnet sein. In einem anderen Beispiel sind die Speicherzellen in einem zweidimensionalen Feld (2D-Feld) angeordnet. Felder höherer Ordnung (z. B. drei oder mehr Dimensionen) können auch eingesetzt werden. In einigen Beispielen ist ein Feld niederer Ordnung (z. B. ein lineares Feld) auf einem Feld mit einer größeren Dimension (z. B. 2D-Feld) definiert. Ein lineares Feld kann beispielsweise durch eine Adressieranordnung auf einem rechteckigen 2D-Feld von Speicherzellen definiert sein. Darüber hinaus können Felder in Teilfelder aufgeteilt werden. Ein 2D-Feld kann beispielsweise in Quadranten als vier Teilfelder aufgeteilt werden. Gemäß verschiedenen Beispielen kann das Feld entweder ein physisches Feld oder ein logisches Feld sein. Ein physisches Feld umfasst Speicherzellen, die gemäß dem Feld oder wie von dem Feld definiert zueinander physisch organisiert oder lokalisiert sind. Ein logisches Feld umfasst eine logische Anordnung der Speicherzellen als ein Feld. In einem logischen Feld kann eine physische Anordnung der Speicherzellen beispielsweise sich von der logischen Anordnung, die von dem Feld definiert wird, unterscheiden. Logische Felder können unter Verwendung von beispielsweise Adressenindirektion definiert werden.
- Eine Speicherzelle ist eine Schaltung oder ein verwandtes Konstrukt, das Daten fasst oder speichert, wie hierin definiert und eingesetzt. Des Weiteren können Speicherzellen definitionsgemäß hierin ein oder mehrerer „Bits“ Daten speichern. Das Bit kann beispielsweise ein Binärwert (z. B. ,,0" oder „1“) sein und die Speicherzelle kann ein einziges Bit fassen. In einem anderen Beispiel kann die Speicherzelle eine Vielzahl von Binärwert-Bits fassen. Insbesondere kann die Speicherzelle ein komplettes Datenwort, das die Vielzahl von Bits umfasst, fassen oder speichern, wie hierin definiert. Eine Speicherzelle kann beispielsweise 4, 8, 16, 32 oder 64 binäre Bits fassen. In noch einem anderen Beispiel kann die Speicherzelle Daten in einer anderen Form (z. B. einem hexadezimalen Wert, einem Analogwert usw.) fassen. Insbesondere sind Speicherzellen wie hierin definiert nicht darauf beschränkt, Daten in einem binären Format zu speichern, sondern können in einigen Beispielen ein willkürliches Datenkonstrukt fassen oder speichern. Zu Erörterungszwecken hierin werden binäre Daten jedoch im Allgemeinen überall beispielhaft und nicht beschränkend eingesetzt, sofern nicht anderweitig festgelegt.
- Wie hierin verwendet ist ein „Register“ oder gleichbedeutend „Speicherregister“ als eine Sammlung oder Gruppierung von Speicherzellen definiert. Des Weiteren kann ein Register, das eine Gruppierung von Speicherzellen umfasst, hierin Daten (z. B. eine Vielzahl von Datenbits) fassen, die das Datenwort eines bestimmten Computersystems darstellen. Somit wird der Inhalt eines Registers hierin im Allgemeinen als ein „Datenwort“ bezeichnet. In einigen Beispielen sind die Speicherzellen eines Speicherregisters physisch zueinander benachbart. Eine erste Speicherzelle eines Speicherregisters kann sich beispielsweise unmittelbar neben einer zweiten Speicherzelle des Speicherregisters befinden. In anderen Beispielen sind die Speicherzellen eines Speicherregisters logisch miteinander in Verbindung anstelle von oder zusätzlich zur physischen gemeinsamen Anordnung. Insbesondere sind benachbarte Speicherzellen möglicherweise in einigen Beispielen nicht unbedingt physisch benachbart, um logisch benachbart zu sein.
- Speicherzellen werden auch oftmals hierin als „Speicherorte“ bezeichnet. Genau genommen handelt es sich bei einem Speicherort um eine bzw. mehrere Speicherzellen an einem bestimmten Ort innerhalb des Speichers, wobei der Ort durch eine Adresse bezeichnet oder identifiziert wird. Auf die Speicherzelle wird beispielsweise unter Verwendung der Adresse zugegriffen. Der Einfachheit der Erörterung hierin halber werden Speicherzellen jedoch im Allgemeinen als eine Adresse aufweisend oder sich an einer Adresse befindend bezeichnet. Adressen oder Orte können beispielsweise mit einer verschiebbaren Einheit (z. B. einem Datenwort) des Speichers assoziiert sein. Somit können „Ort“ und Adresse hierin austauschbar eingesetzt werden. Darüber hinaus kann „Ort“ gemäß einigen Beispielen dazu verwendet werden, auf einen Ort eines zusammenhängenden Datensatzes zu verweisen, der durch eine Startadresse und eine Endadresse bezeichnet wird. In anderen Beispielen kann der Ort des zusammenhängenden Satzes durch eine Startadresse (oder eine Endadresse) und eine Länge des zusammenhängenden Satzes bezeichnet werden.
- Wie durch benachbarte Speicherorte definierte benachbarte Speicherzellen können definitionsgemäß hierin physisch benachbart (d. h. sich nebeneinander befinden) oder logisch benachbart sein. Logische Adjazenz kann gemäß einigen Beispielen durch eine darüber liegende logische Speicherstruktur (z. B. unter Verwendung von Indirektion) festgestellt werden. Logisch benachbarte Speicherzellen können beispielsweise physisch voneinander getrennt sein, aber immer noch in Bezug auf eine darüber liegende Speicherstruktur, die Verschachtelung einsetzt, als benachbart betrachtet werden. Ebenso kann der zusammenhängende Teilsatz physisch zusammenhängend (d. h. sich in physisch benachbarten Speicherzellen befinden) oder logisch zusammenhängend sein. Insbesondere eignet der zusammenhängende Datenteilsatz - wie in den benachbarten Speicherzellen des verschiebbaren Speichers gespeichert - sich definitionsgemäß hierin eine Nachbarschaft an, die zu der Adjazenz der Speicherzellen analog ist und von dieser bestimmt wird.
- Des Weiteren hierin und wie oben angemerkt ist eine Verschiebung, wie sie von einem verschiebbaren Speicher durchgeführt wird, als eine Umsetzung eines zusammenhängenden Datenteilsatzes definiert, der in dem Speicher gespeichert ist, sofern nicht anderweitig festgelegt. Insbesondere stellt eine Verschiebung unter Verwendung eines verschiebbaren Speichers definitionsgemäß hierin die Umsetzung (z. B. in einem Feld nach oben oder nach unten) der gespeicherten Daten (z. B. Datenwörter) innerhalb des zusammenhängenden Teilsatzes von einem ersten Ort an einen zweiten Ort innerhalb des Speichers dar. Darüber hinaus setzt die Verschiebung bei Anwendung auf den zusammenhängenden Teilsatz gespeicherter Daten alle gespeicherten Daten innerhalb des zusammenhängenden Teilsatzes um. Darüber hinaus führt die Verschiebung durch einen verschiebbaren Speicher definitionsgemäß hierin nicht zu einer Umsetzung oder Verschiebung von Daten außerhalb des Datenteilsatzes, der an der Verschiebung beteiligt ist. Im Allgemeinen kann die Verschiebung die Daten um eine Entfernung von einem oder mehreren Speicherorten oder Speicheradressen bewegen. Die Verschiebung kann beispielsweise die Daten um einen einzigen Speicherort innerhalb des Speichers nach oben oder nach unten bewegen.
- Hierin ist die Richtung „nach oben“ in Bezug auf Speicherorte in dem verschiebbaren Speicher als eine Richtung zu Orten mit kleineren Adressen definiert. Die Richtung „nach unten“ ist als eine Richtung zu Orten mit größeren Adressen definiert. Folglich ist eine „Verschiebung nach oben“ (Upshift) als die Daten zu einem zweiten Ort mit einer kleineren Adresse als eine Adresse eines ersten oder Ausgangsorts bewegend oder verschiebend definiert. Umgekehrt ist eine „Verschiebung nach unten“ (Downshift) als die Daten von einem ersten Ort mit einer kleineren Adresse zu einem zweiten Ort mit einer größeren Adresse bewegend oder verschiebend definiert. Obwohl die Verschiebungsrichtung gemäß einigen Beispielen steuerbar oder auswählbar ist, kann die Verschiebungsrichtung (z. B. nach oben oder nach unten) jedoch vollständig willkürlich sein, wie hierin eingesetzt. Des Weiteren ist die spezifische Verwendung von „Upshift“ und „Downshift“ hierin zu Erörterungszwecken und nicht einschränkend.
-
1A stellt ein Beispiel einer Downshift eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere stellt1A eine Vielzahl von Speicherzellen dar, von denen jede ein Datenwort speichern kann. Die Datenwörter können beispielsweise acht binäre Bits umfassen, wobei jedes Bit (z. B. entweder eine „1“ oder „0“) in einer separaten von acht Speicherzellen gespeichert ist. Des Weiteren wird - wie dargestellt - jede der dargestellten Speicherzellen durch eine Adresse identifiziert, die von 00 bis 11 reicht. Eine linke Seite von1A stellt die Vielzahl von Speicherzellen vor der Downshift dar, während eine rechte Seite dieselbe Vielzahl von Speicherzellen nach der Downshift darstellt. - Wie dargestellt umfasst die beispielhafte Downshift innerhalb des verschiebbaren Speichers das Auswählen eines zusammenhängenden Teilsatzes gespeicherter Datenwörter, der beispielsweise mit einer Speicherzelle an Adresse
04 startet und mit einer Speicherzelle an Adresse08 endet. Der ausgewählte zusammenhängende Teilsatz enthält Datenwörter {11001010, 01001010, 11111011, 0000001, 11011011} in dem dargestellten Beispiel. Der verschiebbare Speicher verschiebt den ausgewählten zusammenhängenden Teilsatz von Datenwörtern dann nach unten (Downshift), indem die gespeicherten Datenwörter einen Adressenort nach unten bewegt werden, wie in der rechten Seite von1A dargestellt. Die Downshift bewahrt eine Reihenfolge der Datenwörter in dem zusammenhängenden Teilsatz und legt den zusammenhängenden Teilsatz in Speicherzellen zwischen der Adresse05 und der Adresse09 ab. Das Verschieben der gespeicherten Daten nach unten überschreibt den Inhalt einer Speicherzelle unmittelbar unter dem zusammenhängenden Teilsatz (d. h. an Adresse09 ) und ersetzt den Inhalt dieser Speicherzelle durch ein letztes Datenwort (d. h. „11011011“) des nach unten verschobenen zusammenhängenden Teilsatzes. Des Weiteren wird die Speicherzelle an Adresse04 , die ursprünglich den ersten Datenwert des zusammenhängenden Teilsatzes aufwies, unbestimmt gemacht, wie durch das „X“ angezeigt. Gemäß verschiedenen Beispielen kann die Speicherzelle an Adresse04 eine Kopie des Datenworts (z. B. „11001010“) aufbewahren, das vor der Downshift vorlag, oder kann nach der Downshift gelöscht (z. B. auf „00000000“ gesetzt) werden. - In einigen Beispielen kann die Speicherzelle an Adresse
04 beispielsweise zum Einfügen eines Datenworts von einer externen Quelle verfügbar sein. Ein Datenwort kann gemäß einigen Beispielen in die Speicherzelle an Adresse04 eingefügt werden, indem nacheinander einzelne Bits des eingefügten Datenworts in die Speicherzellen der Speicherzelle an Adresse04 präsentiert und getaktet oder verschoben werden (z. B. ein serielles Schreiben). -
1B stellt ein Beispiel einer Upshift eines zusammenhängenden Datenteilsatzes, der in einem linearen Feld in einem verschiebbaren Speicher gespeichert ist, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere stellt1B eine Vielzahl von Speicherzellen dar, von denen jede ein Datenwort (z. B. „abc“, „def“ usw.) speichert. Des Weiteren wird - wie dargestellt - jede der dargestellten Speicherzellen durch eine Adresse identifiziert, die von 00 bis 11 reicht. Eine linke Seite von1B stellt die Vielzahl von Speicherzellen vor der Upshift dar, während eine rechte Seite dieselbe Vielzahl von Speicherzellen nach der Upshift darstellt. - Wie in
1B dargestellt umfasst die Upshift in einem verschiebbaren Speicher das Auswählen eines zusammenhängenden Teilsatzes gespeicherter Datenwörter, der beispielsweise mit einer Speicherzelle an Adresse03 startet und mit einer Speicherzelle an Adresse06 endet. Der verschiebbare Speicher verschiebt dann den ausgewählten zusammenhängenden Teilsatz nach oben (Upshift), indem die gespeicherten Datenwörter in dem ausgewählten zusammenhängenden Teilsatz um einen Adressenort nach oben bewegt werden, wie in der rechten Seite von1B dargestellt. Die Upshift bewahrt eine Reihenfolge der Wörter in dem zusammenhängenden Teilsatz und legt den zusammenhängenden Teilsatz in Speicherzellen zwischen der Adresse02 und der Adresse05 ab. Das Verschieben der gespeicherten Datenwörter nach oben überschreibt den Inhalt einer Speicherzelle unmittelbar über dem zusammenhängenden Teilsatz (d. h. an Adresse02 ), wodurch der Inhalt dieser Speicherzelle durch ein erstes Datenwort (d. h. „jkl“) des nach oben verschobenen zusammenhängenden Teilsatzes ersetzt wird. Des Weiteren wird die Speicherzelle an Adresse06 , die ursprünglich das letzte Wort des zusammenhängenden Teilsatzes aufwies, unbestimmt gemacht, wie durch das „X“ angezeigt. Gemäß einigen Beispielen kann die Speicherzelle an Adresse06 eine Kopie des Datenworts (z. B. „stu“) aufbewahren, das vor der Upshift vorlag, oder kann nach der Upshift gelöscht (z. B. auf „000“ gesetzt) werden. In einigen Beispielen kann die Speicherzelle an Adresse06 beispielsweise zum Einfügen von Daten von einer externen Quelle verfügbar sein. - Gemäß verschiedenen Beispielen kann der verschiebbare Speicher ein Teil eines Hauptspeichers eines Universalcomputersystems sein. Der verschiebbare Speicher kann beispielsweise einen Teilsatz des Speichers darstellen, der den Hauptspeicher ausmacht. Darüber hinaus unterscheidet sich der verschiebbare Speicher gemäß verschiedenen Beispielen von Speicherzellen, einem Cachespeicher oder anderen verhältnismäßig kleinen Speicherstrukturen, die oftmals beispielsweise zusammen mit anderen Komponenten (z. B. einer Arithmetik-Logik-Einheit, einem Controller usw.) in einen Mikroprozessor integriert vorgefunden werden. Insbesondere ist ein verschiebbarer Speicher definitionsgemäß hierin Teil des Hauptspeichers und somit gemäß verschiedenen Beispielen von einem Prozessor eines Universalcomputersystems oder eines verwandten Verarbeitungssystems getrennt. Darüber hinaus enthält ein verschiebbarer Speicher gemäß einigen Beispielen in der Regel eine Größenordnung oder mehr Speicherplatz als in dem Prozessor vorliegt oder vorliegen kann. Ein verschiebbarer Speicher kann beispielsweise viele Megabytes oder sogar Gigabytes Speicherplatz aufweisen, wohingegen ein Prozessorspeicherplatz in der Regel auf weniger als einige wenige zehn Bytes (z. B. Prozessorregister) bis einige Megabytes (z. B. Ll-Cachespeicher, L2-Cachespeicher usw.) begrenzt ist. Gemäß einigen Beispielen kann der verschiebbare Speicher ein spezialisierter Teil des Hauptspeichers oder ein Untersystem davon sein.
- Hierin ist eine „Datenstruktur“ als eine Struktur in einem Speicher definiert, die Daten, die in dem Speicher gespeichert sind, enthält und eine Organisierung dieser bereitstellt. Beispiele von Datenstrukturen beinhalten, sind jedoch nicht darauf beschränkt, Felder und Listen, Strings, Baumstrukturen (z. B. B-Bäume, B+-Bäume usw.), Haufen, Hash-Tabellen, Stapel, Datengrafiken, Warteschlangen und Hybride davon. Datenstrukturen wie hierin definiert können beispielsweise verschiedene Hybriddatenstrukturen beinhalten, wie eine Hash-Tabelle mit Speicherbereichen, die ausgeglichene Bäume sind, einen Baum mit Knoten, die Hash-Tabellen sind, usw., sind jedoch nicht darauf beschränkt. In einigen Beispielen können die Datenstrukturen weiterhin als Strukturen definiert sein, die Daten enthalten, die gemäß einer spezifischen Regel oder eines spezifischen Konstrukts sortiert oder anderweitig organisiert sind. Ein B+-Baum kann beispielsweise Datensätze enthalten, die in einer aufsteigenden Weise oder einer absteigenden Weise gemäß entweder einem Wert des Datensatzes selbst oder einem Schlüssel, der den Satz identifiziert, sortiert sind. Ein B+-Baum kann dazu verwendet werden, beispielsweise Namen und assoziierte Telefonnummern (d. h. Datensätze) zu enthalten, die auf der Basis der Namen alphabetisch sortiert sind.
- Hierin bezieht sich eine „Datenstruktur-Operation“ auf und ist definiert als eine Operation oder eine Aktion, die an einer Datenstruktur oder genauer an Daten, die von oder in einer Datenstruktur umfasst werden bzw. enthalten sind, durchgeführt wird. Ein „Datenstruktur-Operator“ ist definitionsgemäß ein Operator, der eine Datenstruktur-Operation durchführt oder implementiert. Eine Datenstruktur-Operation kann beispielsweise eine Suche nach einem spezifischen Datensatz in einer Vielzahl von Datensätzen, die von einer Datenstruktur umfasst werden, umfassen. Ebenso ist beispielsweise ein Such-Operator, der eine Operation an der Datenstruktur durchführt, ein Datenstruktur-Operator. In einem anderen Beispiel ist ein Verschiebungsoperator (Shift-Operator), der bewirkt, dass Daten innerhalb der Datenstruktur verschoben (z. B. nach oben verschoben oder nach unten verschoben) werden, ein Datenstruktur-Operator, während die Verschiebung selbst als eine Datenstruktur-Operation erachtet wird. Man beachte, dass eine Unterscheidung zwischen einem Operator, der eine Aktion bewirkt oder initiiert, und einem Mittel zum Durchführen der Aktion gemacht wird. Ein Verschiebungsoperator kann beispielsweise eine Verschiebung von Daten in einer Datenstruktur initiieren, während ein verschiebbarer Speicher, auf dem die Datenstruktur definiert ist, für das tatsächliche Durchführen der Verschiebung, die von dem Verschiebungsoperator initiiert wurde, verantwortlich sein kann.
- Des Weiteren soll der Artikel „ein/eine/einer“ wie hierin verwendet seine übliche Bedeutung in der Patenttechnik haben, nämlich „ein/eine/einer oder mehrere“. Eine „Speicherzelle“ bedeutet beispielsweise eine oder mehrere Speicherzellen und somit bedeutet „die Speicherzelle“ hierin „die Speicherzelle(n)“. Außerdem soll jede Bezugnahme hierin auf „oben“, „unten“, „obere“, „untere“, „nach oben“, „nach unten“, „vorne“, „hinten“, „links“ oder „rechts“ hierin keine Einschränkung sein. Hierin bedeutet der Begriff „etwa“, wenn er auf einen Wert angewendet wird, im Allgemeinen innerhalb des Toleranzbereichs der Ausrüstung, die zum Produzieren des Werts verwendet wird, oder bedeutet in einigen Beispielen plus oder minus 10 % oder plus oder minus 5 % oder plus oder minus 1 %, sofern nicht ausdrücklich anderweitig angegeben. Darüber hinaus sollen Beispiele hierin nur veranschaulichend sein und werden zu Erörterungszwecken und nicht einschränkend dargelegt.
-
2 stellt ein Blockdiagramm eines verschiebbaren Speichers100 , der In-Memory-Datenstrukturen (im Speicher befindliche Datenstrukturen) unterstützt, gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Der verschiebbare Speicher100 stellt ein Bewegen oder Verschieben eines zusammenhängenden Datenteilsatzes in dem verschiebbaren Speicher100 bereit. Das Verschieben von Daten durch den verschiebbaren Speicher100 verschiebt nur die Daten in dem zusammenhängenden Teilsatz und keine anderen Daten außerhalb des zusammenhängenden Teilsatzes. Wenn der verschiebbare Speicher100 eine Verschiebung des zusammenhängenden Teilsatzes durchführt, werden insbesondere gemäß verschiedenen Beispielen nur Daten des zusammenhängenden Teilsatzes beeinflusst. Die Verschiebung verschiebt keine anderen Daten, die sich beispielsweise außerhalb des zusammenhängenden Teilsatzes befinden. Des Weiteren bewegt die Verschiebung gemäß einigen Beispielen den zusammenhängenden Datenteilsatz, ohne eine Reihenfolge der Daten in dem zusammenhängenden Datensatz wesentlich zu ändern oder anderweitig zu beeinflussen. Darüber hinaus unterstützt der verschiebbare Speicher100 eine oder mehrere In-Memory-Datenstrukturen, die auf dem verschiebbaren Speicher100 definiert sind. Die Datenstruktur kann gemäß verschiedenen Beispielen die Datenverarbeitung und -bearbeitung unter Einsatz der Verschiebung, die von dem verschiebbaren Speicher100 bereitgestellt wird, erleichtern. - Mit „definiert auf“ ist definitionsgemäß hierin gemeint, dass die Datenstruktur einen Speicher einsetzt, der den verschiebbaren Speicher
100 umfasst, um Daten der Datenstruktur zu speichern. Des Weiteren bedeutet „In-Memory“ definitionsgemäß hierin, dass die Datenstruktur sich in einem Speicher befindet (d. h. Daten in einem Speicher speichert) und dass der Speicher den verschiebbaren Speicher100 umfasst. Die In-Memory-Datenstruktur kann beispielsweise gemäß einigen Beispielen Daten in sowohl dem verschiebbaren Speicher100 als auch einem herkömmlichen oder „nicht verschiebbaren“ Speicher speichern. - In einigen Beispielen übermittelt eine externe Ressource (z. B. ein Prozessor) Daten mittels eines Datenbusses (Daten-E/A)
102 an den und von dem verschiebbaren Speicher100 . Daten, die in dem verschiebbaren Speicher100 gespeichert werden sollen, können beispielsweise von der externen Ressource mittels des Datenbusses102 an den verschiebbaren Speicher100 übermittelt werden. Auf ähnliche Weise können beispielsweise Daten, die in dem verschiebbaren Speicher100 gespeichert sind und anschließend aus diesem gelesen werden, von dem verschiebbaren Speicher100 mittels des Datenbusses102 an die externe Ressource übermittelt werden. Informationen, die zum Steuern einer Operation des verschiebbaren Speichers100 verwendet werden, wie eine Adresse und eine Länge des zusammenhängenden Teilsatzes, jedoch nicht darauf beschränkt, können gemäß einigen Beispielen unter Verwendung eines Adressbusses (ADDR)104 und eines Längenbusses (LEN)106 an den verschiebbaren Speicher100 übermittelt werden. Ein einziger Adressbus, der sowohl die Adresse als auch die Länge oder alternativ dazu ein Adressenpaar trägt, kann in anderen Beispielen (nicht dargestellt) eingesetzt werden. - Wie dargestellt umfasst der verschiebbare Speicher
100 , der In-Memory-Datenstrukturen unterstützt, einen Speicher110 zum Speichern von Daten. Der Speicher110 weist eine eingebaute Verschiebungsfähigkeit auf, um einen zusammenhängenden Teilsatz der Daten von einem ersten Ort an einen zweiten Ort in dem Speicher zu verschieben. Insbesondere ist die eingebaute Verschiebungsfähigkeit dazu konfiguriert, den zusammenhängenden Datenteilsatz im Wesentlichen innerhalb des Speichers110 zu verschieben. Während der Verschiebung werden die Daten gemäß verschiedenen Beispielen nicht aus dem Speicher110 heraus übertragen, um die Verschiebung zu erzielen. Der zweite Ort kann beispielsweise eine Verschiebung einer einzigen Dateneinheit (z. B. eines Datenworts) in Bezug auf den ersten Ort darstellen. Die Verschiebung kann beispielsweise durch Bewegen von Daten entlang Pfaden innerhalb des Speichers110 von dem ersten Ort zu einem benachbarten Ort des Speichers110 , der den zweiten Ort darstellt, erzielt werden. - Das Bewegen von Daten zu dem benachbarten Ort wird hierin als eine „Übertragung an einen benachbarten Ort“ bezeichnet. In einem anderen Beispiel kann die Verschiebung den zusammenhängenden Datenteilsatz um mehr als eine Dateneinheit (z. B. zwei oder mehr Datenwörter) bewegen. Eine Verschiebung von zwei oder mehr Dateneinheiten kann beispielsweise durch eine direkte Verschiebung unter Verwendung interner Datenpfade des Speichers
110 von dem ersten Ort an den zweiten Ort erzielt werden, der zwei oder mehr Dateneinheiten von dem ersten Ort entfernt ist. In anderen Beispielen kann der Speicher110 mit eingebauter Verschiebungsfähigkeit die Daten in einer Reihe kleinerer Schritte (z. B. eine Vielzahl Übertragungen an einen benachbarten Ort) bewegen, um die Verschiebung um mehr als eine Dateneinheit zu erzielen. In jedem Beispiel erzielt eine eingebaute Verschiebungsfähigkeit des Speichers110 jedoch gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze die Verschiebung im Wesentlichen, ohne sich auf eine Übertragung der Daten in den Speicher110 und aus diesem heraus zu stützen oder eine solche einzusetzen. - Gemäß einigen Beispielen umfasst der Speicher
110 eine Vielzahl von Speicherzellen112 , die als ein Verbund zum Speichern von Daten konfiguriert sind. In einigen Beispielen können die gespeicherten Daten einem Datenwort entsprechen. In einigen Beispielen sind die Speicherzellen112 dazu konfiguriert, binäre Daten zu speichern. In einigen Beispielen ist jede Speicherzelle112 dazu konfiguriert, ein einziges Bit von binären Daten (z. B. als eine „1“ oder „0“) zu speichern. In anderen Beispielen ist jede Speicherzelle112 dazu konfiguriert, eine Vielzahl von binären Datenbits zu speichern. Jede Speicherzelle112 kann beispielsweise ein Datenwort speichern. Insbesondere umfasst jede Speicherzelle112 gemäß einigen Beispielen eine Vielzahl von Speicherorten, die als ein Verbund zum Speichern von Datenbits, die dem Datenwort entsprechen, konfiguriert sind. Die Vielzahl von Datenbits des Datenworts definiert eine Breite der Speicherzelle112 . In anderen Beispielen kann die Speicherzelle112 die Daten in einer Form speichern, bei der es sich nicht um ein oder mehrere binäre Bits handelt. - Gemäß verschiedenen Beispielen kann der Speicher
110 unter Verwendung von im Wesentlichen einer beliebigen Speichertechnologie implementiert werden. Speicherzellen des Speichers110 können beispielsweise unter Verwendung von Speicherzellen110 eines statischen Direktzugriffsspeichers (static random access memory, SRAM) implementiert werden. In einem anderen Beispiel können ein oder mehrere bistabile Kippschaltungen (Flipflops), wie ein D-Flipflop, jedoch nicht darauf beschränkt, eingesetzt werden, um die Speicherzellen112 des Speichers110 zu implementieren. In anderen Beispielen kann noch eine andere Speichertechnologie (z. B. DRAM, Memristoren usw.) dazu verwendet werden, die Speicherzellen112 des Speichers110 zu implementieren. - Gemäß einigen Beispielen umfasst der Speicher
110 weiterhin einen Controller114 . Der Controller120 ist dazu konfiguriert, einen zusammenhängenden Teilsatz der gespeicherten Daten auszuwählen. Der Controller124 ist weiterhin dazu konfiguriert, die Verschiebung des ausgewählten zusammenhängenden Teilsatzes von einem ersten Ort an einen zweiten Ort in dem Speicher110 zu steuern. Der ausgewählte zusammenhängende Teilsatz weist gemäß verschiedenen Beispielen der hierin beschriebenen Grundsätze eine Länge auf, die geringer als eine Gesamtlänge des Speichers110 ist. Unter Verwendung eines oder mehrerer Steuersignale kann der Controller120 beispielsweise bewirken, dass der Speicher110 den ausgewählten zusammenhängenden Teilsatz verschiebt, indem er den Speicher110 anweist, die Verschiebung durchzuführen. - In verschiedenen Beispielen erleichtert der Speicher
110 oder allgemeiner der verschiebbare Speicher100 eine Upshift (Verschiebung nach oben) und/oder eine Downshift (Verschiebung nach unten) des zusammenhängenden Teilsatzes von Daten (z. B. Datenwörtern). Insbesondere kann eine Speicherzelle112 des zweiten Orts in dem Speicher110 sich entweder über oder unter einer entsprechenden Speicherzelle112 des ersten Orts je nach einer Richtung der Verschiebung befinden. In einigen Beispielen ist die Speicherzelle112 des zweiten Orts eine einzige Speicherzelle (oder ein einziger Speicherort), entfernt von der entsprechenden Speicherzelle112 des ersten Orts. Anders ausgedrückt, die Verschiebung stellt eine Bewegung des zusammenhängenden Teilsatzes gespeicherter Daten durch einen einzigen Speicherort oder eine einzige Adresse dar. In anderen Beispielen stellt der zweite Ort eine Bewegung von mehr als einer einzigen Speicherzelle112 dar. Die Daten in der Form von Datenwörtern können beispielsweise als ein lineares Feld von Bits in dem verschiebbaren Speicher gespeichert werden und die Verschiebung kann eine Anzahl von Bits sein, die einer Länge des Datenworts in Bits entspricht. - In einigen Beispielen wird der ausgewählte zusammenhängende Teilsatz von sowohl einer Adresse einer ersten Speicherzelle
112 des zusammenhängenden Teilsatzes als auch einer Adresse einer letzten Speicherzelle112 in dem zusammenhängenden Teilsatz spezifiziert. Die Adresse der ersten Speicherzelle und die Adresse der letzten Speicherzelle werden dem Controller114 übermittelt (z. B. mittels eines Adressbusses), um das Auswählen des zusammenhängenden Teilsatzes zu erleichtern. Die Adresse der ersten Speicherzelle und die Adresse der letzten Speicherzelle können gemäß verschiedenen Beispielen entweder nacheinander als eine erste Adresse, gefolgt von einer zweiten Adresse über einen einzigen Bus (z. B. ADDR104 ) übermittelt werden. Alternativ dazu können die erste und die letzte Adresse beispielsweise parallel als zwei zeitgleiche Adressen entweder über zwei Busse oder über zwei Teile eines einzigen, breiten Busses übermittelt werden. - In einem anderen Beispiel wird der ausgewählte zusammenhängende Teilsatz von einer Adresse der ersten Speicherzelle
112 und einer Länge des zusammenhängenden Teilsatzes (z. B. ADDR104 und LEN106 , wie dargestellt) spezifiziert. In einigen dieser Beispiele kann die Länge die Länge des zusammenhängenden Teilsatzes sein, die der ersten Speicherzelle112 folgt, so dass die Adresse der letzten Speicherzelle durch eine Summe der Adresse der ersten Speicherzelle und der Länge angegeben wird. In anderen Beispielen beinhaltet die Länge die erste Speicherzelle112 , so dass die Adresse der letzten Speicherzelle durch die Adresse der ersten Speicherzelle plus der Länge minus eins angegeben wird. Andere Beispiele können beispielsweise die Adresse der letzten Speicherzelle und die Länge des zusammenhängenden Teilsatzes, die der letzten Speicherzelle vorangeht, sowie andere Schemata spezifizieren. - In einigen Beispielen umfasst der Controller
144 einen erweiterten Decodierer. Der erweiterte Decodierer setzt Informationen in Bezug auf die Adresse und die Länge (oder alternativ dazu die Adressen der ersten und der letzten Speicherzelle) ein, um den ausgewählten Teilsatz gespeicherter Daten auszuwählen. In einigen Beispielen verwendet der erweiterte Decodierer die Informationen (z. B. Adresse und Länge des zusammenhängenden Teilsatzes) dazu, eine Ausgabe durchzusetzen (zu aktivieren), die jeder der Speicherzellen des ausgewählten Teilsatzes in dem Speicher110 entspricht. Das Durchsetzen einer Ausgabe kann beispielsweise das Ausgeben einer logischen „1“ auf einem Verbindungspfad oder -draht (z. B. einer Wortleitung W) zwischen dem erweiterten Decodierer und der Vielzahl von Speicherzellen112 umfassen. Somit kann der erweiterte Decodierer eine logische „1“ auf einer Vielzahl von Wortleitungen des Speichers110 ausgeben, wobei die Wortleitungen den Speicherzellen112 entsprechen, die die gespeicherten Daten des ausgewählten zusammenhängenden Teilsatzes enthalten. Die Wortleitungen können beispielsweise mit einer Ladefreigabe-Eingabe (LE-Eingabe) oder einer Auswahl-Eingabe (SEL-Eingabe) der Speicherzellen verbunden sein. In anderen Beispielen umfasst das Durchsetzen einer Ausgabe das Ausgeben einer logischen „0“. Das Durchsetzen einer logischen „0“ kann beispielsweise verwendet werden, wenn die Speicherzellen112 eine „Nicht“-Ladefreigabe-Eingabe (LE -Eingabe) oder eine „Nicht“-Auswahl-Eingabe (SEL -Eingabe) aufweisen. - In einigen Beispielen ist der erweiterte Decodierer weiterhin dazu konfiguriert, eine zusätzliche Ausgabe durchzusetzen, die einer Speicherzelle
112 , die benachbart zu und unmittelbar über dem ausgewählten zusammenhängenden Teilsatz ist, oder einer Speicherzelle112 , die benachbart zu und unmittelbar unter dem ausgewählten zusammenhängenden Teilsatz ist, entspricht. Die zusätzliche Ausgabe, die der Speicherzelle112 , die unmittelbar über dem ausgewählten zusammenhängenden Teilsatz ist, entspricht, kann durchgesetzt werden, wenn die gespeicherten Daten innerhalb des Speichers110 nach oben verschoben werden sollen. Die zusätzliche Ausgabe, die der Speicherzelle112 , die unmittelbar unter dem ausgewählten zusammenhängenden Teilsatz ist, entspricht, kann beispielsweise durchgesetzt werden, wenn die gespeicherten Daten innerhalb des Speichers110 nach unten verschoben werden sollen. Insbesondere kann die zusätzliche Ausgabe dazu verwendet werden, die Speicherzelle112 , die gespeicherte Daten von entweder der ersten Speicherzelle112 oder der letzten Speicherzelle112 des zusammenhängenden Datenteilsatzes empfängt, zu aktivieren. -
3 stellt eine Wahrheitstabelle eines erweiterten Decodierers gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere ist der erweiterte Decodierer, der der dargestellten Wahrheitstabelle entspricht, dazu konfiguriert, den zusammenhängenden Teilsatz in einem beispielhaften Speicher110 mit acht Speicherzellen auszuwählen. Die Wahrheitstabelle weist drei Adressen-Eingaben (ADDR), eine Längen-Eingabe (LEN-Eingabe) und acht Wortleitungen W (d. h. W0 - W7) auf. Die acht Wortleitungen W können beispielsweise Ladefreigabe-Eingaben (LE-Eingaben) von acht Speicherzellen in dem beispielhaften Speicher110 entsprechen. Wie in der Wahrheitstabelle zu sehen ist, funktioniert der erweiterte Decodierer für einen Wert von LEN, der gleich „00“ ist, im Wesentlichen ähnlich einem herkömmlichen Decodierer (d. h. nur eine Wortleitung W erfolgt jeweils). Eine Vielzahl von Wortleitungen W werden jedoch für alle anderen Werte von LEN durchgesetzt, um eine zeitgleiche Aktivierung einer entsprechenden Vielzahl von Speicherzellen112 zu erleichtern, die den ausgewählten zusammenhängenden Teilsatz gespeicherter Daten, die verschoben werden sollen, fassen oder speichern. - In einigen Beispielen kann der erweiterte Decodierer unter Verwendung eines Festwertspeichers (read only memory, ROM) implementiert werden. Der ROM wird mit einer Wahrheitstabelle programmiert, die die Funktionalität des erweiterten Decodierers spezifiziert. Ein Decodierer des ROM decodiert beispielsweise eine Eingabe (z. B. ADDR und LEN) und die programmierten Verbindungen in dem ROM erweitern die Ausgabe des ROM-Decodierers, um die Funktionalität des erweiterten Decodierers zu ergeben. In einem anderen Beispiel kann ein herkömmlicher Decodierer mit einer Ausgabeschaltung erweitert werden, bei denen es sich nicht um die programmierten Verbindungen handelt, um den erweiterten Decodierer zu implementieren. In noch einem anderen Beispiel kann der erweiterte Decodierer unter Verwendung einer zwischengespeicherten Welligkeitskaskade implementiert werden.
- Der verschiebbare Speicher
100 , der In-Memory-Datenstrukturen unterstützt, umfasst weiterhin eine Datenstruktur120 . Insbesondere ist die Datenstruktur120 auf dem Speicher100 definiert und ist dazu konfiguriert, Daten zu enthalten. Die Daten, die von der Datenstruktur120 umfasst werden, umfassen gemäß verschiedenen Beispielen den zusammenhängenden Teilsatz. In einigen Beispielen umfasst die Datenstruktur weiterhin Daten, die nicht Teil des zusammenhängenden Teilsatzes sind, sich jedoch immer noch in dem Speicher110 befinden. - In einigen Beispielen umfasst die Datenstruktur
120 weiterhin Daten, die außerhalb des Speichers110 gespeichert sind. Die Datenstruktur120 kann beispielsweise sowohl einen herkömmlichen Speicher als auch den Speicher110 des verschiebbaren Speichers100 umfassen oder umspannen. In einigen Beispielen kann die Datenstruktur120 sich im Wesentlichen in einem herkömmlichen, nicht verschiebbaren Speicher befinden, wobei Teile der Daten, die in der Datenstruktur gespeichert sind, in den verschiebbaren Speicher100 bewegt (z. B. vorübergehend bewegt) werden. Die Daten können beispielsweise zum Zwecke des Verschiebens des zusammenhängenden Teilsatzes bewegt werden. Nach dem Verschieben können Daten, die einen Teil oder den gesamten verschobenen zusammenhängenden Datenteilsatz umfassen, beispielsweise von dem verschiebbaren Speicher100 zurück in einen herkömmlichen Speicher bewegt werden. - Gemäß einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des Speichers
110 dazu konfiguriert, das Bewahren einer im Wesentlichen sortierten Reihenfolge der Daten zu erleichtern. In einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des Speichers110 weiterhin dazu konfiguriert, das Sortieren der Daten in einer im Wesentlichen sortierten Reihenfolge zu erleichtern. Insbesondere ist die eingebaute Verschiebungsfähigkeit in einigen Beispielen dazu konfiguriert, das Einfügen der Daten und/oder das Löschen der Daten bereitzustellen. Das Einfügen und das Löschen, die bereitgestellt werden, können beispielsweise dazu eingesetzt werden, die Daten zu sortieren und/oder dann eine Reihenfolge (d. h. die sortierte Reihenfolge) der Daten, sobald diese sortiert sind, im Wesentlichen zu bewahren. Selbstverständlich können das Sortieren und das Bewahren der sortierten Reihenfolge gemäß verschiedenen Beispielen im Allgemeinen andere Operationen (z. B. Suchen, Vergleichen usw.) neben dem Einfügen und dem Löschen, die von dem Speicher110 bereitgestellt werden, einsetzen. - In einigen Beispielen enthält die Datenstruktur
120 Daten, die Datensätze umfassen. Datensätze können als die „tatsächlichen“ Daten betrachtet werden, die in der Datenstruktur gespeichert sind und von dieser organisiert werden, wie hierin eingesetzt. Die „tatsächlichen“ Daten, die von einem Datensatz in Bezug zu einer Einzelperson dargestellt werden, können beispielsweise einen oder mehrere eines Namens der Person, einer Telefonnummer, eines Geburtsdatums, einer Adresse usw. umfassen. In anderen Beispielen umfassen die Daten Zeiger auf Datensätze. Die Zeiger sind Daten, die auf einen Ort anderer Daten (z. B. ein anderer Zeiger, ein bestimmter Datensatz usw.) „zeigen“ oder einen solchen bereitstellen. In einigen Beispielen umfassen die Daten eine Kombination von Zeigern und Datensätzen. - In einigen Beispielen umfassen die Daten der Datenstruktur
120 oder umfassen weiterhin einen Geisterdatensatz. Ein Geisterdatensatz ist ein pseudogelöschter Datensatz, der einen physischen Raum oder physische Räume in der Datenstruktur120 belegt, jedoch keinen tatsächlichen oder bestehenden Datensatz darstellt. Somit wirkt sich ein Geisterdatensatz im Allgemeinen nicht auf den Dateninhalt der Datenstruktur120 aus. Gemäß einigen Beispielen können Geisterdatensätze einen „leichten“ Mechanismus zum logischen Löschen eines oder mehrerer Datensätze mit minimaler Auswirkung auf eine physische Struktur oder physische Strukturen eines Datenbanksystems bereitstellen. Geisterdatensätze können beispielsweise einer Transaktion dabei zu helfen sicherzustellen, dass weder Raumzuteilung noch Schlüsselbeschränkungen versagen werden, wenn Datensatzlöschoperationen zurückgesetzt werden. Gemäß einigen Beispielen besteht eine Grundtechnik zum Erstellen eines Geisterdatensatzes darin, einen gelöschten Datensatz als ungültig zu markieren (z. B. durch Umdrehen eines einzigen Statusbits in einem Datensatzkopf), während der physische Datensatz und dessen zugehöriger Schlüssel bewahrt werden (z. B. in einem B-Baum). Der Datensatz und sein Schlüssel können beispielsweise gesperrt bleiben, bis die Löschtransaktion verübt wird. Somit kann der Geisterdatensatz in einigen Beispielen in einen Datensatz umgewandelt werden und umgekehrt, indem ein Bit des Geisterdatensatzes bzw. des Datensatzes geändert wird. Geisterdatensätze können gemäß einigen Beispielen das Suchen innerhalb einer Datenstruktur120 erleichtern. Geisterdatensätze können beispielsweise in einer Datenstruktur120 dazu verwendet werden, eine Leistung einer Interpolationssuche zu verbessern, indem beispielsweise eine im Wesentlichen gleichmäßige Verteilung von Datensätzen in der Datenstruktur120 erleichtert wird. - Die Daten der Datenstruktur
120 können auch oder alternativ dazu weiterhin Datensatzlücken oder einfach „Lücken“ umfassen. Wie hierin verwendet ist eine „Datensatzlücke“ eine absichtlich eingeführte Lücke zwischen verwandten Datensätzen der Datenstruktur120 . Die Datensatzlücke kann beispielsweise am Ende eines ersten Datensatzes eingeführt werden, um einen Puffer zwischen dem ersten Satz und einem folgenden zweiten Satz bereitzustellen. Der Puffer kann beispielsweise einen Raum in dem ersten Datensatz zum Einfügen neuer Daten bereitstellen, ohne dass eine Datenübertragung zwischen dem ersten Satz und dem zweiten Satz erforderlich ist. Datensatzlücken können gemäß einigen Beispielen dazu eingesetzt werden, das Sortieren (z. B. mittels einer Bibliothekssortierung) zu erleichtern. - In einigen Beispielen umfasst die Datenstruktur
120 eine Baumdatenstruktur oder einfach einen „Datenbaum“. Der Datenbaum kann beispielsweise ein so genannter B-Baum sein. Insbesondere kann die Datenstruktur120 gemäß einigen Beispielen einen B+-Baum umfassen. In einigen Beispielen umfasst die Datenstruktur120 eine Hash-Tabelle oder eine Hash-Karte. Andere Beispielen der Datenstruktur120 beinhalten, sind jedoch nicht darauf beschränkt, eine Warteschlange, einen Stapel, einen Haufen, einen Container (z. B. einen sortierten Container), eine verknüpfte Liste, eine Karte und einen Graph. -
4A stellt ein schematisches Diagramm eines Teils eines beispielhaften B+-Baums400 gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.4B stellt den beispielhaften B+-Baum400 von4A gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar. Ein B+-Baum, der auch als ein „B-plus-Baum“ bezeichnet wird, ist eine Datenstruktur, die eine Vielzahl von Knoten410 umfasst, die sortierte Daten gemeinsam organisieren. Einzigartige Schlüssel identifizieren im Allgemeinen die sortierten Daten in einem B+-Baum. Endknoten410' werden manchmal als Astknoten oder einfach „Äste“ bezeichnet, während andere Knoten310 als Innen- oder Zweigknoten410 bezeichnet werden können. In einem B+-Baum werden im Gegensatz zu einem B-Baum alle Datensätze in dem Endknoten oder in der Astebene gespeichert. Nur Schlüssel werden gemäß einigen Beispielen von Innenknoten410 gespeichert. - Das Einfügen eines neuen Datensatzes
412 in den beispielhaften B+-Baum 400 umfasst das Lokalisieren eines entsprechenden Astes410' sowie einer Einfügestelle, wie durch einen leeren Pfeil in4A dargestellt. Eine Suchoperation kann beispielsweise zum Lokalisieren des entsprechenden Astes410' und der Einfügestelle verwendet werden. Ein Teil der Daten des identifizierten Astes410' unter der Einfügestelle wird dann verschoben, um Platz für den neuen Datensatz410 in dem Ast410' zu schaffen. Das Verschieben wird in4A beispielsweise durch horizontale Pfeile dargestellt. Darüber hinaus ist der eingefügte neue Datensatz412 in4B als in den Ast410' eingefügt dargestellt. Gemäß verschiedenen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers110 dazu eingesetzt werden, die Datensätze unter die Einfügestelle zu verschieben (z. B. nach unten verschieben), um Platz für das Einfügen des neuen Datensatzes412 zu schaffen. Der zusammenhängende Teilsatz kann gemäß verschiedenen Beispielen die Datensätze des Datenteils unter der Einfügestelle in dem Ast410' umfassen. - Das Löschen eines existierenden Datensatzes erfordert auf ähnliche Weise das Lokalisieren eines entsprechenden Astes
410" sowie das Lokalisieren eines bestimmten Datensatzes412" zum Löschen, wie in den4A und4B dargestellt. Sobald sie lokalisiert wurden, können gemäß einigen Beispielen die Datensätze des Astes410" , die nicht gelöscht werden (z. B. restliche Datensätze), verschoben werden, um den Datensatz412" zu überschreiben, der zur Löschung gekennzeichnet ist. Das Verschieben ist wie oben in4B durch horizontale Pfeile angezeigt. Gemäß verschiedenen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers110 dazu eingesetzt werden, die Verschiebung (z. B. eine Upshift) der restlichen Datensätze bereitzustellen, um den zur Löschung gekennzeichneten Datensatz412" aus dem Ast410" zu entfernen. Der zusammenhängende Teilsatz kann beispielsweise die restlichen Datensätze umfassen, die verschoben werden, um sich auf die Löschung des zur Löschung gekennzeichneten Datensatzes412" auszuwirken. - In einigen Beispielen kann das Verschieben zu der Erzeugung eines neuen Astes
410' und/oder eines neuen Knotens führen oder auch nicht, je nachdem, ob ein bestimmter Ast410' „voll“ ist oder nicht. In einigen Beispielen kann die Löschung eines Astes410' die Löschung eines Astes410' und/oder eines Knotens410 erfordern oder zu dieser führen. Geisterdatensätze420 und/oder eine Datensatzlücke430 am Ende des Astes410' können beispielsweise dazu verwendet werden, eine Wahrscheinlichkeit zu verringern, dass der Ast voll ist. Geisterdatensätze420 und Datensatzlücken sind in den4A und4B beispielhaft dargestellt. - Wieder unter Bezugnahme auf die
2 umfasst der verschiebbare Speicher100 , der In-Memory-Datenstrukturen unterstützt, in einigen Beispielen weiterhin einen Datenstruktur-Operator130 . Der Datenstruktur-Operator130 ist dazu konfiguriert, eine Operation an der Datenstruktur120 in dem Speicher110 durchzuführen. Insbesondere führt der Datenstruktur-Operator130 eine Datenstruktur-Operation an den Daten der Datenstruktur120 durch. Des Weiteren ist die eingebaute Verschiebungsfähigkeit dazu konfiguriert, das Einfügen der Daten und/oder das Löschen der Daten in Verbindung mit dem Datenstruktur-Operator130 bereitzustellen. - Der Datenstruktur-Operator
130 kann beispielsweise einen Bibliothekssortierungsoperator umfassen. Der Bibliothekssortierungsoperator ist dazu konfiguriert, eine Bibliothekssortierung der Daten der Datenstruktur130 durchzuführen. In einem anderen Beispiel kann der Datenstruktur-Operator130 einen Drehungsoperator umfassen. Der Drehungsoperator ist gemäß einigen Beispielen dazu konfiguriert, einen ausgewählten Teil (z. B. den zusammenhängenden Teilsatz) der Daten in der Datenstruktur130 zu drehen. Die Drehung kann eine Datenverschiebung entweder nach links (z. B. eine Linksdrehung) oder nach rechts (z. B. eine Rechtsdrehung) mit Daten umfassen, die beispielsweise aus oder von einem Ende des ausgewählten Teils verschoben werden, um in ein entgegengesetztes Ende wieder eingefügt zu werden, um die Datendrehung hervorzurufen. Die Datenverschiebung kann beispielsweise von der eingebauten Verschiebungsfähigkeit des Speichers110 bereitgestellt werden. Andere Beispiele des Datenstruktur-Operators130 beinhalten, sind jedoch nicht darauf beschränkt, einen Interpolationssuchoperator, einen binären Suchoperator und einen sequentiellen Suchoperator. - In einigen Beispielen ist der Datenstruktur-Operator
130 als Software oder Firmware (z. B. Computercode oder Anweisungen) implementiert, die in einem computerlesbaren Medium gespeichert ist und von einem Prozessor ausgeführt wird. Das computerlesbare Medium kann eine oder mehrere verschiedene Formen eines Computerspeichers (z. B. RAM, ROM, Flash-Speicher usw.), eine Magnetplatte und eine optische Platte eines Computersystems beinhalten, ist jedoch nicht darauf beschränkt. - In einem anderen Beispiel ist der Datenstruktur-Operator
130 in Hardware implementiert. Der Datenstruktur-Operator130 kann beispielsweise als eine Maschinencodeanweisung eines Prozessors (z. B. eines Mikroprozessors) implementiert werden, der den verschiebbaren Speicher100 einsetzt. In einem anderen Beispiel kann der Datenstruktur-Operator130 in Schaltkreisen des verschiebbaren Speichers100 selbst implementiert und/oder mit diesen gemeinsam angeordnet sein. Der Datenstruktur-Operator130 kann beispielsweise als logische Schaltungen implementiert sein, die Teil des Controllers114 sind. In einem anderen Beispiel ist der Datenstruktur-Operator als eine anwendungsspezifische integrierte Schaltung (application-specific integrated circuit, ASIC) implementiert, die beispielsweise Seite an Seit mit dem Controller114 arbeitet. In noch anderen Beispielen kann der Datenstruktur-Operator130 als Teil eines Speichercontrollers (nicht dargestellt) implementiert sein, der eine Schnittstelle zu dem verschiebbaren Speicher100 als Teil eines Speicheruntersystems unterstützt und bereitstellt. Obwohl der Datenstruktur-Operator130 entfernt von anderen Teilen des verschiebbaren Speichers100 implementiert werden kann, wird der Datenstruktur-Operator130 dennoch als ein Element des verschiebbaren Speichers100 betrachtet, da er gemäß einigen Beispielen auf dem Speicher110 definiert ist und dazu konfiguriert ist, an einem zusammenhängenden Datenteilsatz innerhalb des Speichers110 zu arbeiten. - In einigen Beispielen kann die eingebaute Verschiebungsfähigkeit des Speichers
110 , die von dem verschiebbaren Speicher100 bereitgestellt wird, Datenstrukturen120 mit größeren Unterstrukturen (Knoten, Äste usw.) erleichtern, als mit einem herkömmlichen (nicht verschiebbaren) Speicher praktisch sein könnte. Die Verwendung der eingebauten Verschiebung des Speichers110 kann beispielsweise die Umsetzung eines B+-Baums mit größeren Ästen410' ermöglichen, als sie ohne den Speicher110 praktisch sind. Die größeren Äste410' können beispielsweise aufgrund von Effizienzen praktisch sein, die dem Einfügen und dem Löschen von Daten assoziiert werden, die von der im Wesentlichen konstanten Zeitdatenverschiebung bereitgestellt werden, die von der eingebauten Verschiebungsfähigkeit geliefert wird. Gemäß einigen Beispielen können größere Äste410' eine gleichzeitige Verringerung einer Tiefe des B+-Baums und eine Erhöhung einer Datenmenge, die gespeichert werden kann, bereitstellen. In einigen Beispielen können effiziente Einfügungen und Löschungen, die von der eingebauten Verschiebungsfähigkeit bereitgestellt werden, dazu ausreichen, Datenstrukturen120 mit den größeren Unterstrukturen zu erleichtern. In anderen Beispielen kann das effiziente Einfügen und Löschen von Daten in der Datenstruktur120 gesteigert werden, indem ausgewählte Datenstruktur-Operatoren130 verwendet werden. - Die Datenstruktur
120 kann beispielsweise unter Verwendung eines bis zu vielleicht einer verhältnismäßig kleinen Anzahl beträchtlich großer Felder (z. B. Äste, Knoten usw.) konstruiert werden, um die Daten zu fassen. Datensatzlücken können während der Konstruktion vorher entlang der Felder eingefügt werden. Die Datensatzlücken können beispielsweise vorher zufällig, regelmäßig und/oder strategisch auf der Basis eines Charakteristikums der Daten eingefügt werden (z. B. auf der Basis bekannter oder erwarteter Frequenzcharakteristika der einzufügenden Daten). Gemäß verschiedenen Beispielen können die Datensatzlücken eine Größe aufweisen, die zufällig gemäß einer vorherbestimmten Formel (z. B. periodische Lückengrößenverdoppelung) und/oder strategisch auf der Basis der gespeicherten Daten bestimmt wird. In einigen Beispielen können auch Geisterdatensätze vorher eingefügt werden. Geisterdatensätze können beispielsweise eingebunden werden, um eine Leistung eines Datenstruktur-Operators130 , wie eines Interpolationssuchoperators, ist jedoch nicht darauf beschränkt, zu erleichtern oder zu verbessern. - Der Speicher
110 mit eingebauter Verschiebungsfähigkeit kann dazu verwendet werden, ein effizientes Einfügen von Daten bereitzustellen und/oder ein effizientes Löschen von Daten in den beträchtlich großen Feldern bereitzustellen. Das Vorliegen von Datensatzlücken und/oder Geisterdatensätzen kann gemäß einigen Beispielen die Verschiebung durch den Speicher110 steigern, indem eine durchschnittliche Größe des zusammenhängenden Teilsatzes verringert wird, der verschoben werden muss, um einer bestimmten Einfügung oder Löschung Rechnung zu tragen. Um beispielsweise einen Datensatz an einer bestimmten Einfügestelle in ein Feld einzufügen, müssen nur jene existierenden Datensätze in dem Feld bis zu einer nächsten Datensatzlücke unter der Einfügestellte in den zusammenhängenden Teilsatz eingebunden werden, der von dem Speicher110 verschoben wird. Die Datensätze in dem zusammenhängenden Teilsatz, die in die nächste Datensatzlücke verschoben werden, können beispielsweise wirksam von der Datensatzlücke absorbiert werden (was z. B. zu einer Größenverringerung der Datensatzlücke führt. Die Verwendung derartiger Datensatzlücken während des Einfügens und des Löschens wird von einem Datenstruktur-Operator130 verkörpert, wie einem Bibliothekssortierungsoperator, ist jedoch nicht darauf beschränkt. - Das Lokalisieren und Identifizieren von Datensätzen in den beträchtlich großen Feldern, die gelöscht oder als Einfügestellen dienen sollen, kann unter Verwendung eines Datenstruktur-Operators
130 erzielt werden, der eine Suche durchführt. Datenstruktur-Operatoren130 , die die beträchtlich großen Felder effizient durchsuchen können, um einen bestimmten Datensatz zu lokalisieren und zu identifizieren, beinhalten, sind jedoch nicht darauf beschränkt, einen Interpolationssuchoperator, einen binären Suchoperator und einen sequentiellen Suchoperator. Die eingebaute Verschiebungsfähigkeit des Speichers1100 kann auch dazu eingesetzt werden, das Einfügen und das Anpassen von Datensatzlücken und Geisterdatensätzen zu erleichtern, um eine Leistung der Suchdatenstruktur-Operatoren130 zu steigern. Die eingebaute Verschiebung kann beispielsweise dazu verwendet werden, Datensatzlücken und Geisterdatensätze neu zu verteilen und wieder einzuführen, um Suchleistungsniveaus aufrechtzuerhalten. -
5A stellt ein Blockdiagramm eines verschiebbaren Speichersystems500 mit In-Memory-Datenstruktur-Unterstützung mit einer Datenstruktur in einem verschiebbaren Speicher gemäß einem Beispiel der hierin beschriebenen Grundsätze dar.5B stellt ein Blockdiagramm eines verschiebbaren Speichersystems500 mit In-Memory-Datenstruktur-Unterstützung mit einem verschiebbaren Speicher in einer Datenstruktur gemäß einem anderen Beispiel der hierin beschriebenen Grundsätze dar. Insbesondere umfasst das verschiebbare Speichersystem500 , das in den5A und5B dargestellt ist, einen verschiebbaren Speicher510 . Gemäß einigen Beispielen umfasst der verschiebbare Speicher510 eine Vielzahl von Speicherzellen512 mit eingebauter Verschiebungsfähigkeit. Die eingebaute Datenverschiebung ist dazu konfiguriert, einen zusammenhängenden Datenteilsatz, der in den Speicherzellen512 gespeichert ist, von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher510 zu verschieben. Der zusammenhängende Datenteilsatz weist eine Größe (z. B. eine Länge) auf, die kleiner als eine Gesamtgröße des verschiebbaren Speichers510 ist. In einigen Beispielen ist der verschiebbare Speicher510 dem oben in Bezug auf den verschiebbaren Speicher100 beschriebenen Speicher110 im Wesentlichen ähnlich. - Des Weiteren, wie in den
5A und5B dargestellt, umfasst das verschiebbare Speichersystem500 eine In-Memory-Datenstruktur530 . Gemäß einigen Beispielen kann die In-Memory-Datenstruktur530 sich vollständig in dem verschiebbaren Speicher510 befinden, wie in5A dargestellt. In anderen Beispielen befindet sich nur ein Teil der In-Memory-Datenstruktur530 in dem verschiebbaren Speicher510 , wie in5B dargestellt. Ein Teil der Daten in der In-Memory-Datenstruktur530 kann sich beispielsweise in dem verschiebbaren Speicher510 befinden, während ein restlicher Teil der Daten sich in einem anderen Speicher (nicht dargestellt) befinden kann. Der andere Speicher kann beispielsweise ein herkömmlicher oder im Wesentlichen nicht verschiebbarer Speicher sein. Wenn nur ein Teil der In-Memory-Datenstruktur530 in dem verschiebbaren Speicher510 ist, kann das verschiebbare Speichersystem500 beispielsweise als den verschiebbaren Speicher510 in der Datenstruktur530 aufweisend betrachtet werden. - In einigen Beispielen kann sich der Teil der Daten, der sich in dem verschiebbaren Speicher
510 befindet von Zeit zu Zeit ändern. Daten können beispielsweise von dem anderen Speicher (z. B. nicht verschiebbaren Speicher) in den verschiebbaren Speicher510 und dann zurück in den anderen Speicher bewegt werden. Die Daten können beispielsweise für eine Verschiebungsoperation, eine Einfügeoperation, eine Löschoperation und/oder eine beliebige einer Vielfalt anderer Operationen, die eine Datenverschiebung einsetzen, in den verschiebbaren Speicher510 bewegt werden. Eine derartige Anordnung des verschiebbaren Speichers510 und des anderen Speichers kann als eine Hierarchie von Speichermedien bezeichnet werden. Neben dem verschiebbaren Speicher510 kann die Hierarchie von Speichermedien gemäß verschiedenen Beispielen einen anderen Speicher beinhalten, der einen Cachespeicher (z. B. L1-Cachespeicher, L2-Cachespeicher usw.), einen RAM, eine Platte (z. B. magnetisch, optisch usw.) und/oder einen Flash-Speicher umfasst. - Die In-Memory-Datenstruktur
530 kann beispielsweise ein B-Baum sein, in dem im Wesentlichen alle B-Baum-Ebenen mit Ausnahme der Astknoten oder Seiten in einen Pufferpool in einem RAM-Speicher (z. B. dem anderen Speicher) passen können. Für die Astseiten könnte ein Pufferpool beispielsweise LRU-Ersatzrichtlinie (LRU = least recently used, am längsten unbenutzt) einsetzen. Darüber hinaus können Astseiten, während Daten häufig in den Astseiten aktualisiert werden können, regelmäßig in den verschiebbaren Speicher510 bewegt werden, während sie bearbeitet werden. Folglich ist bei Suchen mit Zufallssuchschlüsseln beispielsweise nur eine einzige E/A-Operation erforderlich, ähnlich einem Hash-Index, falls ein solcher verfügbar ist. Es versteht sich, dass gemäß verschiedenen Beispielen andere Kriterien in der Auswahl verwendet werden können, welche Teile der Datenstrukturen in den verschiebbaren Speicher510 und aus diesem heraus bewegt werden sollen. - Das verschiebbare Speichersystem
500 , das in den5A und5B dargestellt ist, umfasst weiterhin einen Datenstruktur-Operator520 . Der Datenstruktur-Operator520 ist auf dem verschiebbaren Speicher510 definiert und ist dazu konfiguriert, an der In-Memory-Datenstruktur530 zu arbeiten. Die In-Memory-Datenstruktur530 ist in einigen Beispielen dazu konfiguriert, Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen. Gemäß einigen Beispielen ist die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers510 dazu konfiguriert, das Sortieren zu erleichtern, und/oder dazu konfiguriert, eine im Wesentlichen sortierte Reihenfolge der Daten in der Datenstruktur in Verbindung mit dem Datenstruktur-Operator520 zu bewahren. In einigen Beispielen ist der Datenstruktur-Operator520 im Wesentlichen dem Datenstruktur-Operator130 ähnlich, der oben in Bezug auf den verschiebbaren Speicher100 beschrieben ist. - Insbesondere umfasst der Datenstruktur-Operator
520 in einigen Beispielen einen Suchoperator. Der Datenstruktur-Operator520 kann beispielsweise einen Interpolationssuchoperator, einen binären Suchoperator und/oder einen sequentiellen Suchoperator umfassen. In einigen Beispielen umfasst der Datenstruktur-Operator520 einen Sortierungsoperator. Der Datenstruktur-Operator520 kann beispielsweise einen Bibliothekssortierungsoperator umfassen. In einem anderen Beispiel umfasst der Datenstruktur-Operator520 einen Drehungsoperator. -
6 stellt ein schematisches Diagramm einer In-Memory-Datenstruktur530 vor und nach Datendrehung gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Wie in einem oberen Teil der6 dargestellt, enthält die In-Memory-Datenstruktur530 einen Acht-Zeichen-String „ABCDEFGH“ vor Datendrehung durch einen Datenstruktur-Operator520 . Ein unterer Teil der6 stellt beispielsweise den Acht-Zeichen-String nach einem Beispiel einer linksgerichteten Drehung eines Vier-Zeichen-Segments532 in dem String dar. Der Datenstruktur-Operator520 kann beispielsweise einen Drehungsoperator umfassen, um die Datendrehung bereitzustellen. Nach der Datendrehung ist der Acht-Zeichen-String ein gedrehter String „ABDEFCGH“, wie dargestellt. - Insbesondere beginnt das Vier-Zeichen-Segment
532 zunächst mit einem Zeichen „C“, während das Vier-Zeichen-Segment532 nach Drehung mit einem Zeichen „D“ beginnt, wie dargestellt. Gemäß einigen Beispielen kann die Ausführung des Drehungsoperators, um die Datendrehung hervorzurufen, das Kopieren des Zeichens „C“ zu einem vorübergehenden Speicherort (nicht dargestellt), das Verschieben der Zeichen „DEF“ nach links und dann das Einfügen des zuvor gespeicherten Zeichens „C“ zurück in den Acht-Zeichen-String umfassen. Insbesondere wird das Zeichen „C“ in eine Position eingefügt, die durch die Verschiebung an einem Ende des gedrehten Strings zwischen dem Zeichen „F“ und einem Zeichen „G“ geöffnet wurde. Das Vier-Zeichen-Segment532 kann gemäß verschiedenen Beispielen der zusammenhängende Teilsatz sein und die Verschiebung kann durch die Verschiebungsfähigkeit des verschiebbaren Speichersystems500 durchgeführt werden. Wie dargestellt, stellt ein gebogener Pfeil in6 eine Bewegung des Zeichens „C“ von einem Beginn zu einem Ende des gedrehten Strings während der Datendrehung dar. - Wieder unter Bezugnahme auf die
5A und5B kann die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers510 gemäß verschiedenen Beispielen das Einfügen und/oder das Löschen von Datensätzen der Datenstruktur530 erleichtern. In einigen Beispielen umfasst die Datenstruktur530 ein im Wesentlichen sortiertes Feld von Datensätzen. In einigen Beispielen umfassen Daten der Datenstruktur530 Geisterdatensätze und/oder Datensatzlücken. -
7 stellt ein Ablaufschema eines Verfahrens600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen gemäß einem Beispiel der hierin beschriebenen Grundsätze dar. Wie dargestellt, umfasst das Verfahren600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen das Definieren610 einer Datenstruktur in Speicherzellen des verschiebbaren Speichers. Der verschiebbare Speicher weist eine Vielzahl von Speicherzellen mit eingebauter Verschiebungsfähigkeit auf, um einen zusammenhängenden Datenteilsatz in der Datenstruktur von einem ersten Ort an einen zweiten Ort zu verschieben. In einigen Beispielen ist der verschiebbare Speicher im Wesentlichen dem Speicher110 mit eingebauter Verschiebungsfähigkeit ähnlich, der oben in Bezug auf den verschiebbaren Speicher100 beschrieben wurde. Insbesondere ist eine Größe des zusammenhängenden Datenteilsatzes des verschiebbaren Speichers gemäß verschiedenen Beispielen kleiner als eine Gesamtgröße des verschiebbaren Speichers und die eingebaute Verschiebung umfasst eine Upshift (Verschiebung nach oben) und/oder eine Downshift (Verschiebung nach unten). - Das Verfahren
600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen umfasst weiterhin das Ausführen620 eines Datenstruktur-Operators. Der Datenstruktur-Operator führt bei Ausführung620 eine Operation an der Datenstruktur durch. Die Datenstruktur umfasst den zusammenhängenden Datenteilsatz. In einigen Beispielen ist der Datenstruktur-Operator dazu konfiguriert, die Daten zu sortieren, und/oder dazu konfiguriert, eine sortierte Reihenfolge der Daten der Datenstruktur unter Verwendung der eingebauten Verschiebungsfähigkeit des verschiebbaren Speichers im Wesentlichen zu bewahren. In einigen Beispielen ist die Datenstruktur im Wesentlichen der Datenstruktur120 ähnlich, die oben in Bezug auf den verschiebbaren Speicher100 beschrieben wurde. Des Weiteren ist der Datenstruktur-Operator in einigen Beispielen im Wesentlichen dem Datenstruktur-Operator130 ähnlich, der oben in Bezug auf den verschiebbaren Speicher100 beschrieben wurde. - In einigen Beispielen umfasst das Ausführen
620 des Datenstruktur-Operators das Durchführen einer Sortierung der Daten der Datenstruktur und/oder das Durchführen einer Suche an der Datenstruktur. In verschiedenen Beispielen wird die eingebaute Verschiebungsfähigkeit dazu verwendet, den zusammenhängenden Datenteilsatz nach unten zu verschieben, um das Einfügen von Daten in die Datenstruktur zu erleichtern, und/oder den zusammenhängenden Datenteilsatz nach oben zu verschieben, um das Löschen von Daten aus der Datenstruktur zu erleichtern. In einigen Beispielen umfasst das Verfahren600 zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen weiterhin das Einfügen von Geisterdatensätzen und/oder Datensatzlücken in die Daten der Datenstruktur.
Claims (12)
- Verschiebbarer Speicher (100; 510), der In-Memory-Datenstrukturen unterstützt und Folgendes umfasst: einen Speicher (110) mit eingebauter Verschiebungsfähigkeit, um einen zusammenhängenden Teilsatz der Daten von einem ersten Ort an einen zweiten Ort in dem Speicher (110) zu verschieben, wobei der zusammenhängende Datenteilsatz eine Größe aufweist, die kleiner als eine Gesamtgröße des Speichers (110) ist, wobei die eingebaute Verschiebungsfähigkeit nur Daten des zusammenhängenden Teilsatzes verschiebt; und eine Datenstruktur (120; 530), die auf dem Speicher (110) definiert ist, um Daten zu enthalten, die den zusammenhängenden Teilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit die Bewegung der Daten, das Einfügen der Daten und/oder das Löschen der Daten in der Datenstruktur (120; 530) erleichtert, wobei die eingebaute Verschiebungsfähigkeit das Sortieren von Daten der Datenstruktur (120; 530) und/oder das Bewahren einer sortierten Reihenfolge der Daten in der Datenstruktur (120; 530) erleichtert; wobei die Datenstruktur (120; 530), die auf dem Speicher (110) definiert ist, sich in sowohl dem Speicher (110) mit eingebauter Verschiebungsfähigkeit als auch einem anderen, nicht verschiebbaren Speicher befindet.
- Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 1 , wobei die Datenstruktur (120; 530) einen Datenbaum umfasst. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 2 , wobei der Datenbaum einen B+-Baum umfasst. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 1 , wobei die Datenstruktur (120; 530) eine Hash-Tabelle umfasst. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 1 , wobei die Daten der Datenstruktur (120; 530) Geisterdatensätze und/oder Datensatzlücken umfassen. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 1 , der weiterhin einen Datenstruktur-Operator (130; 520) umfasst, um eine Operation an der Datenstruktur (120; 530) in dem Speicher durchzuführen. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 6 , wobei die eingebaute Verschiebungsfähigkeit in Verbindung mit dem Datenstruktur-Operator (130; 520) das Sortieren von Daten der Datenstruktur (120; 530) und/oder das Bewahren einer sortierten Reihenfolge der Daten in der Datenstruktur (120; 530) bereitstellt. - Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt, nach
Anspruch 6 , wobei der Datenstruktur-Operator (130; 520) einen Bibliothekssortierungsoperator, Interpolationssuchoperator, einen binären Suchoperator und/oder einen sequentiellen Suchoperator umfasst. - Verschiebbares Speichersystem mit In-Memory-Datenstruktur-Unterstützung, das Folgendes umfasst: einen verschiebbaren Speicher (100; 510), der eine Vielzahl von Speicherzellen (112; 512) mit eingebauter Verschiebungsfähigkeit umfasst, um einen zusammenhängenden Datenteilsatz, der in den Speicherzellen (112; 512) gespeichert ist, von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher (100; 510) zu verschieben, wobei eine Größe des zusammenhängenden Teilsatzes kleiner als eine Gesamtgröße des verschiebbaren Speichers (100; 510) ist; und einen Datenstruktur-Operator (130; 520) , der auf dem verschiebbaren Speicher (100; 510) definiert ist, um eine Operation an einer In-Memory-Datenstruktur (120; 530) durchzuführen, wobei die In-Memory-Datenstruktur (120; 530) Daten enthält, die den zusammenhängenden Teilsatz umfassen, wobei der Datenstruktur-Operator (130; 520) einen Drehungsoperator; einen Interpolationssuchoperator; einen binären Suchoperator und/oder einen sequentiellen Suchoperator aufweist; wobei die eingebaute Verschiebungsfähigkeit in Verbindung mit dem Datenstruktur-Operator (130; 520) das Bewegen von Datensätzen der Datenstruktur (120; 530), das Einfügen von Datensätzen der Datenstruktur (120; 530) und/oder das Löschen von Datensätzen der Datenstruktur (120; 530) erleichtert.
- Verschiebbares Speichersystem nach
Anspruch 9 , wobei der Datenstruktur-Operator (130; 520) einen Sortierungsoperator zum Sortieren der Daten in der Datenstruktur (120; 530) und/oder Bewahren einer sortierten Reihenfolge der Daten in der Datenstruktur (120; 530) umfasst, wobei die Datenstruktur (120; 530) ein sortiertes Feld von Datensätzen umfasst. - Verfahren zum Verwenden eines verschiebbaren Speichers (100; 510) mit In-Memory-Datenstrukturen (120; 530), wobei das Verfahren Folgendes umfasst: Definieren einer Datenstruktur (120; 530), die Speicherzellen (112; 512) des verschiebbaren Speichers (100; 510) umfasst, wobei der verschiebbare Speicher (100; 510) eine Vielzahl von Speicherzellen (112; 512) mit eingebauter Verschiebungsfähigkeit aufweist, um einen zusammenhängenden Datenteilsatz von einem ersten Ort an einen zweiten Ort in dem verschiebbaren Speicher (100; 510) zu verschieben, wobei eine Größe des zusammenhängenden Datenteilsatzes kleiner als eine Gesamtgröße des verschiebbaren Speichers (100; 510) ist; Einfügen von Geisterdatensätzen und/oder Datensatzlücken in die Daten der Datenstruktur (120; 530); und Ausführen eines Datenstruktur-Operators (130; 520), um eine Operation an der Datenstruktur (120; 530) durchzuführen, wobei die Datenstruktur (120; 530) Daten enthält, die den zusammenhängenden Datenteilsatz umfassen, wobei die eingebaute Verschiebungsfähigkeit des verschiebbaren Speichers (100; 510) das Ausführend des Datenstruktur-Operators (130; 520) durch Bereitstellen eines oder beides von einer Downshift (Verschiebung nach unten) einer Upshift (Verschiebung nach oben) des zusammenhängenden Teilsatzes erleichtert;
- Verfahren zum Verwenden eines verschiebbaren Speichers mit In-Memory-Datenstrukturen nach
Anspruch 11 , wobei das Ausführen eines Datenstruktur-Operators (130; 520) weiterhin Folgendes umfasst: Durchführen einer Suche an den Daten der Datenstruktur (120; 530), wobei die eingebaute Verschiebungsfähigkeit das Sortieren der Daten der Datenstruktur (120; 530) und/oder das Bewahren einer sortierten Reihenfolge der Daten der Datenstruktur (120; 530) erleichtert.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/058185 WO2013062562A1 (en) | 2011-10-27 | 2011-10-27 | Shiftable memory supporting in-memory data structures |
Publications (2)
Publication Number | Publication Date |
---|---|
DE112011105774T5 DE112011105774T5 (de) | 2014-08-07 |
DE112011105774B4 true DE112011105774B4 (de) | 2019-02-28 |
Family
ID=48168231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE112011105774.1T Active DE112011105774B4 (de) | 2011-10-27 | 2011-10-27 | Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt |
Country Status (5)
Country | Link |
---|---|
US (1) | US9606746B2 (de) |
CN (1) | CN103890856B (de) |
DE (1) | DE112011105774B4 (de) |
GB (1) | GB2509423B (de) |
WO (1) | WO2013062562A1 (de) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2727114B1 (de) | 2011-06-28 | 2020-04-22 | Hewlett-Packard Enterprise Development LP | Umschaltbarer speicher |
KR101847684B1 (ko) * | 2011-10-27 | 2018-04-10 | 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 | 링 레지스터를 사용하는 시프트 가능형 메모리 |
US9576619B2 (en) | 2011-10-27 | 2017-02-21 | Hewlett Packard Enterprise Development Lp | Shiftable memory supporting atomic operation |
US9589623B2 (en) | 2012-01-30 | 2017-03-07 | Hewlett Packard Enterprise Development Lp | Word shift static random access memory (WS-SRAM) |
WO2013130109A1 (en) | 2012-03-02 | 2013-09-06 | Hewlett-Packard Development Company L.P. | Shiftable memory defragmentation |
US9384824B2 (en) * | 2012-07-10 | 2016-07-05 | Hewlett Packard Enterprise Development Lp | List sort static random access memory |
US9378304B2 (en) * | 2013-01-16 | 2016-06-28 | Google Inc. | Searchable, mutable data structure |
CN107992294A (zh) * | 2017-12-20 | 2018-05-04 | 成都优易数据有限公司 | 一种通用的信息表达和信息传递的超级数据结构 |
GB201903513D0 (en) | 2019-03-14 | 2019-05-01 | Blueshift Memory Ltd | Moving data in a memory and command for memory control |
US11228443B2 (en) * | 2019-03-25 | 2022-01-18 | Micron Technology, Inc. | Using memory as a block in a block chain |
JP2022533622A (ja) | 2019-05-16 | 2022-07-25 | ゼナージック エービー | シフト可能メモリ、およびシフト可能メモリを動作させる方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5504919A (en) | 1993-02-19 | 1996-04-02 | National Science Council | Sorter structure based on shiftable content memory |
Family Cites Families (73)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3449887A (en) | 1967-03-29 | 1969-06-17 | American Tech Mach Co | Automatic heat sealing device |
US3708690A (en) | 1971-02-22 | 1973-01-02 | Mos Technology Inc | Shift register |
JPS5130978B1 (de) | 1971-03-05 | 1976-09-03 | ||
US3670313A (en) | 1971-03-22 | 1972-06-13 | Ibm | Dynamically ordered magnetic bubble shift register memory |
US3893088A (en) | 1971-07-19 | 1975-07-01 | Texas Instruments Inc | Random access memory shift register system |
US3797992A (en) | 1972-12-15 | 1974-03-19 | Combustion Unltd Inc | Crude oil burner |
US3812336A (en) | 1972-12-18 | 1974-05-21 | Ibm | Dynamic address translation scheme using orthogonal squares |
US4037205A (en) | 1975-05-19 | 1977-07-19 | Sperry Rand Corporation | Digital memory with data manipulation capabilities |
JPS5369545A (en) | 1976-12-03 | 1978-06-21 | Hitachi Ltd | Shift-register-type memory unit |
US4322635A (en) | 1979-11-23 | 1982-03-30 | Texas Instruments Incorporated | High speed serial shift register for MOS integrated circuit |
US4504925A (en) | 1982-01-18 | 1985-03-12 | M/A-Com Linkabit, Inc. | Self-shifting LIFO stack |
US4521874A (en) | 1982-09-28 | 1985-06-04 | Trw Inc. | Random access memory device |
US4532606A (en) | 1983-07-14 | 1985-07-30 | Burroughs Corporation | Content addressable memory cell with shift capability |
JPH0754638B2 (ja) | 1986-02-18 | 1995-06-07 | 松下電子工業株式会社 | シフトレジスタ |
US4864544A (en) | 1986-03-12 | 1989-09-05 | Advanced Micro Devices, Inc. | A Ram cell having means for controlling a bidirectional shift |
US4813015A (en) | 1986-03-12 | 1989-03-14 | Advanced Micro Devices, Inc. | Fracturable x-y storage array using a ram cell with bidirectional shift |
JPS63231798A (ja) | 1987-03-20 | 1988-09-27 | Fujitsu Ltd | 2次元シフトレジスタ |
US4903240A (en) | 1988-02-16 | 1990-02-20 | Tektronix, Inc. | Readout circuit and method for multiphase memory array |
US4873665A (en) | 1988-06-07 | 1989-10-10 | Dallas Semiconductor Corporation | Dual storage cell memory including data transfer circuits |
CA1286803C (en) | 1989-02-28 | 1991-07-23 | Benoit Nadeau-Dostie | Serial testing technique for embedded memories |
US5153846A (en) | 1990-07-30 | 1992-10-06 | At&T Bell Laboratories | Digital shift register using random access memory |
JPH0566921A (ja) | 1991-09-10 | 1993-03-19 | Fujitsu Ltd | データシフト回路 |
WO1993014459A1 (en) | 1992-01-17 | 1993-07-22 | Caelum Research Corporation | Modular parallel processing system |
US5313433A (en) | 1992-09-11 | 1994-05-17 | Micron Technology, Inc. | Windowed flash write circuit |
WO1994022090A1 (en) | 1993-03-23 | 1994-09-29 | David Siu Fu Chung | Intelligent memory architecture |
JP2970389B2 (ja) | 1994-03-30 | 1999-11-02 | 日本電気株式会社 | フリップ・フロップ回路 |
US5698997A (en) | 1995-09-28 | 1997-12-16 | Mayo Foundation For Medical Education And Research | Resonant tunneling diode structures for functionally complete low power logic |
EP0827156B1 (de) | 1996-08-26 | 2003-02-26 | Texas Instruments Incorporated | Schieberegister mit negativen Widerstandselementen |
JP3284491B2 (ja) | 1997-07-08 | 2002-05-20 | 達治 増田 | Srフリップ・フロップ |
US5930323A (en) | 1997-08-26 | 1999-07-27 | Texas Instruments Incorporation | Ultra fast shift register using resonant tunnel diodes |
JP3157753B2 (ja) | 1997-09-30 | 2001-04-16 | 日本電気アイシーマイコンシステム株式会社 | 半導体記憶回路 |
JP3037252B2 (ja) | 1998-01-28 | 2000-04-24 | 日本電気アイシーマイコンシステム株式会社 | アドレス選択回路 |
US6526505B1 (en) | 1998-07-20 | 2003-02-25 | Koninklijke Philips Electronics N.V. | DES encryption system |
US6061417A (en) | 1998-12-03 | 2000-05-09 | Xilinx, Inc. | Programmable shift register |
US6362660B1 (en) | 1999-07-13 | 2002-03-26 | Texas Instruments Incorporated | CMOS latch and register circuitry using quantum mechanical tunneling structures |
JP3744285B2 (ja) | 1999-10-29 | 2006-02-08 | 日本電気株式会社 | シフトレジスタ及びその制御方法 |
US6519204B2 (en) | 2000-11-03 | 2003-02-11 | Broadcom Corporation | Very small swing high performance CMOS static memory (multi-port register file) with power reducing column multiplexing scheme |
US6625057B2 (en) | 2000-11-17 | 2003-09-23 | Kabushiki Kaisha Toshiba | Magnetoresistive memory device |
US6515895B2 (en) | 2001-01-31 | 2003-02-04 | Motorola, Inc. | Non-volatile magnetic register |
US7051153B1 (en) | 2001-05-06 | 2006-05-23 | Altera Corporation | Memory array operating as a shift register |
JP4856848B2 (ja) | 2001-10-11 | 2012-01-18 | アルテラ コーポレイション | プログラマブルロジックリソース上のエラー検出 |
KR100481175B1 (ko) | 2002-08-08 | 2005-04-07 | 삼성전자주식회사 | 시프트 리던던시 회로들을 가지는 반도체 메모리 장치 |
GB2393277B (en) | 2002-09-17 | 2006-01-18 | Micron Europe Ltd | Method for manipulating data in a group of processing elements to perform a reflection of the data |
US7139946B2 (en) | 2002-12-18 | 2006-11-21 | Logicvision, Inc. | Method and test circuit for testing memory internal write enable |
CN100485817C (zh) | 2003-03-14 | 2009-05-06 | Nxp股份有限公司 | 二维数据存储器 |
JP2004287165A (ja) | 2003-03-24 | 2004-10-14 | Seiko Epson Corp | 表示ドライバ、電気光学装置、電子機器及び表示駆動方法 |
JP2004296040A (ja) | 2003-03-28 | 2004-10-21 | Renesas Technology Corp | 半導体記憶装置 |
US6834005B1 (en) | 2003-06-10 | 2004-12-21 | International Business Machines Corporation | Shiftable magnetic shift register and method of using the same |
JP4350459B2 (ja) | 2003-08-26 | 2009-10-21 | 株式会社ルネサステクノロジ | 不揮発性半導体記憶装置 |
US7260757B2 (en) | 2003-11-25 | 2007-08-21 | International Business Machines Corporation | System and method for testing electronic devices on a microchip |
US7330369B2 (en) | 2004-04-06 | 2008-02-12 | Bao Tran | NANO-electronic memory array |
DE102005023118B3 (de) | 2005-05-19 | 2006-12-21 | Infineon Technologies Ag | Schaltungsanordnung zum Zuführen von Konfigurationsdaten in FPGA-Einrichtungen |
KR101102157B1 (ko) | 2005-09-16 | 2012-01-02 | 삼성전자주식회사 | 금속 나노 입자를 이용한 휘발성 음저항 소자 |
KR100719310B1 (ko) | 2005-09-23 | 2007-05-17 | 한국과학기술원 | 셋/리셋 래치 회로, 시미트 트리거 회로 및 셋/리셋 래치회로를 이용한 모바일 기반의 d형 플립 플롭 회로와주파수 분배기 회로 |
JP4950490B2 (ja) | 2005-12-28 | 2012-06-13 | 株式会社東芝 | 不揮発性スイッチング素子およびその製造方法ならびに不揮発性スイッチング素子を有する集積回路 |
DE102006007023B3 (de) | 2006-02-15 | 2007-03-22 | Infineon Technologies Ag | Halbleiterspeicher-Vorrichtung mit einer Wortleitungsansteuerung |
US7743202B2 (en) | 2006-03-09 | 2010-06-22 | Mediatek Inc. | Command controller, prefetch buffer and methods for accessing a serial flash in an embedded system |
JP4229140B2 (ja) | 2006-06-16 | 2009-02-25 | ソニー株式会社 | 集積回路チップ、データ読み出し方法、データ書き込み方法、icカード、および携帯電話機 |
KR100864827B1 (ko) | 2006-11-02 | 2008-10-23 | 한국전자통신연구원 | Mit 소자를 이용한 논리회로 |
US7508701B1 (en) | 2006-11-29 | 2009-03-24 | The Board Of Trustees Of The Leland Stanford Junior University | Negative differential resistance devices and approaches therefor |
US7944727B2 (en) | 2006-12-22 | 2011-05-17 | Sidense Corp. | Mask programmable anti-fuse architecture |
JP5066921B2 (ja) | 2007-01-17 | 2012-11-07 | 横浜ゴム株式会社 | 空気入りタイヤ |
CN101162471B (zh) | 2007-11-15 | 2010-12-15 | 华为技术有限公司 | 一种插入排序的方法和装置 |
US20090193384A1 (en) | 2008-01-25 | 2009-07-30 | Mihai Sima | Shift-enabled reconfigurable device |
US8283730B2 (en) | 2008-05-27 | 2012-10-09 | Shu-Lu Chen | Negative differential resistance device with high PVCR and fast switching speed and memory using the same |
CN101383188B (zh) | 2008-07-16 | 2011-02-16 | 南京航空航天大学 | 一种胚胎电子系统 |
TWI416529B (zh) | 2008-09-26 | 2013-11-21 | Ind Tech Res Inst | 磁性移位暫存記憶體以及操作方法 |
US9442846B2 (en) | 2009-03-17 | 2016-09-13 | Cisco Technology, Inc. | High speed memory systems and methods for designing hierarchical memory systems |
CN101594319B (zh) * | 2009-06-26 | 2011-09-14 | 华为技术有限公司 | 表项查找方法和装置 |
US8275728B2 (en) | 2009-11-05 | 2012-09-25 | The United States Of America As Represented By The Secretary Of The Air Force | Neuromorphic computer |
US8189408B2 (en) | 2009-11-17 | 2012-05-29 | Freescale Semiconductor, Inc. | Memory device having shifting capability and method thereof |
US8525146B2 (en) | 2010-12-06 | 2013-09-03 | Hewlett-Packard Development Company, L.P. | Electrical circuit component |
EP2727114B1 (de) * | 2011-06-28 | 2020-04-22 | Hewlett-Packard Enterprise Development LP | Umschaltbarer speicher |
-
2011
- 2011-10-27 WO PCT/US2011/058185 patent/WO2013062562A1/en active Application Filing
- 2011-10-27 DE DE112011105774.1T patent/DE112011105774B4/de active Active
- 2011-10-27 US US14/349,113 patent/US9606746B2/en active Active
- 2011-10-27 CN CN201180074415.8A patent/CN103890856B/zh active Active
- 2011-10-27 GB GB1405179.1A patent/GB2509423B/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5504919A (en) | 1993-02-19 | 1996-04-02 | National Science Council | Sorter structure based on shiftable content memory |
Also Published As
Publication number | Publication date |
---|---|
CN103890856A (zh) | 2014-06-25 |
US20140297985A1 (en) | 2014-10-02 |
US9606746B2 (en) | 2017-03-28 |
WO2013062562A1 (en) | 2013-05-02 |
GB2509423A (en) | 2014-07-02 |
GB2509423B (en) | 2016-03-09 |
CN103890856B (zh) | 2017-07-11 |
GB201405179D0 (en) | 2014-05-07 |
DE112011105774T5 (de) | 2014-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112011105774B4 (de) | Verschiebbarer Speicher, der In-Memory-Datenstrukturen unterstützt | |
DE69635663T2 (de) | vERFAHREN FÜR DAS EINSPEICHERN VON DATEN IN EINEM FLASH-EEPROM-HAUPTSPEICHER IN EINEM RECHNERSYSTEM | |
DE112011105670B4 (de) | Verschiebbarer Speicher, der Ringregister verwendet | |
DE112010002663B4 (de) | Speichermanagementsysteme, Verfahren zur Verbesserung der Schreib-Lösch-Ausdauerlebenszeit von Speichervorrichtungen und Computerprogrammprodukt | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE102015101414A1 (de) | Verbesserter Rücksprungstapelpuffer | |
DE69636761T2 (de) | Speichern und wiederauffinden von geordneten schlüsselmengen in einem kompakten 0-kompletten baum | |
DE2515696C2 (de) | Datenverarbeitungssystem | |
DE60319407T2 (de) | Verfolgen der am häufigsten gelöschten blöcke eines nichtflüchtigen speichersystems | |
DE112017005868T5 (de) | Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem | |
CN106339324B (zh) | 一种选择垃圾回收块的方法及装置 | |
DE112015004536T5 (de) | Hardware-Automatisierung für Speicherverwaltung | |
DE102015100705A1 (de) | Vorhersage von werten stapelgespeicherter variablen | |
DE102017120787A1 (de) | Verfahren und Vorrichtung zum Entladen von Datenverarbeitung in Hybrid-Speichervorrichtungen | |
DE112012004571T5 (de) | Unterstützen von unvollständigen Datensegmenten in Flash-Cache-Speichern | |
DE112010004667T5 (de) | Speichervorrichtung und Speichersteuerung | |
DE102013013137A1 (de) | Mehrstufige registerumbenennung durch entfernen von abhängigkeiten | |
DE602004007925T2 (de) | Verwalten einer beziehung zwischen einem zielvolumen und einem quellenvolumen | |
DE112012002452T5 (de) | Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten | |
DE102020106200A1 (de) | Technologien für effiziente assoziative stochastische suchvorgänge mit fehlerkorrekturcode | |
DE69922238T2 (de) | Mechanismus zur blockierung von ladeoperationen auf adressengeneration von speicherbefehlen und universeller abhängigkeitsvektor | |
DE112020000748T5 (de) | Adresserzeugung zur hochleistungsverarbeitung von vektoren | |
DE102018109929A1 (de) | NAND-Flash-Speichervorrichtung mit NAND-Puffer | |
DE112017004916T5 (de) | Verwendung von Kompression zur Kapazitätserhöhung eines speicherseitigen Caches mit grosser Blockgrösse | |
DE102013200030A1 (de) | Hash-basiertes verwalten von speicher-ids |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R012 | Request for examination validly filed | ||
R081 | Change of applicant/patentee |
Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOU, US Free format text: FORMER OWNER: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., HOUSTON, TEX., US |
|
R082 | Change of representative |
Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE Representative=s name: SCHOPPE, ZIMMERMANN, STOECKELER, ZINKLER, SCHE, DE |
|
R082 | Change of representative |
Representative=s name: BOEHMERT & BOEHMERT ANWALTSPARTNERSCHAFT MBB -, DE |
|
R016 | Response to examination communication | ||
R018 | Grant decision by examination section/examining division | ||
R020 | Patent grant now final | ||
R081 | Change of applicant/patentee |
Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, SPR, US Free format text: FORMER OWNER: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, HOUSTON, TEX., US |
|
R082 | Change of representative |
Representative=s name: PROCK, THOMAS, DR., GB |