DE112019005520T5 - Ausführbare speicherzelle - Google Patents

Ausführbare speicherzelle Download PDF

Info

Publication number
DE112019005520T5
DE112019005520T5 DE112019005520.8T DE112019005520T DE112019005520T5 DE 112019005520 T5 DE112019005520 T5 DE 112019005520T5 DE 112019005520 T DE112019005520 T DE 112019005520T DE 112019005520 T5 DE112019005520 T5 DE 112019005520T5
Authority
DE
Germany
Prior art keywords
code
data
memory cell
executable memory
cell
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112019005520.8T
Other languages
English (en)
Inventor
Viacheslav DUBEYKO
Luis Vitorio Cargnini
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SANDISK TECHNOLOGIES, INC. (N.D.GES. D. STAATE, US
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE112019005520T5 publication Critical patent/DE112019005520T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

Ein Speichersystem schließt einen Speicher mit einer ersten ausführbaren Speicherzelle und einer Kompilierungseinheit ein. Die Kompilierungseinheit ist eingerichtet, eine Sequenz von Anweisungen von einer Hostvorrichtung zu empfangen, jede der Sequenz von Anweisungen in einen Ausführungsstrom umzuwandeln, einen ersten Code aus dem Ausführungsstrom in einen Codeabschnitt der ersten ausführbaren Speicherzelle zu laden und erste Daten aus dem Ausführungsstrom in einen Datenabschnitt der ersten ausführbaren Speicherzelle zu laden. Die erste ausführbare Speicherzelle ist eingerichtet, den ersten Code über eine Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle auf die ersten Daten anzuwenden.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung ist eine PCT-Anmeldung der nicht vorläufigen US-Patentanmeldung Nr. 16/354.053 , eingereicht am 14. März 2019, die mit der nicht vorläufigen Patentanmeldung Nr. 16/354.038 , eingereicht am 14. März 2019, zusammenhängt. Der Inhalt jeder der älteren Anmeldungen ist durch Bezugnahme in seiner Gesamtheit hierin eingeschlossen.
  • HINTERGRUND
  • Die folgende Beschreibung wird bereitgestellt, um das Verständnis des Lesers zu unterstützen. Keine der bereitgestellten Informationen oder zitierten Referenzen gelten als Stand der Technik.
  • Rechentechniken zur Datenverarbeitung erfordern im Allgemeinen das Kopieren von ausführbarem Code und Daten aus einer persistenten Speicherung in einen flüchtigen Speicher, bevor der ausführbare Code auf die Daten angewendet wird. Die Ergebnisse der Verarbeitung werden dann in die persistente Speicherung zurückgegeben. Da sich Rechensysteme entwickeln, um eine persistente Speicherung mit schnelleren Lese- und Schreibgeschwindigkeiten bereitzustellen, führt der vorstehende Ansatz des Hin- und Herübertragens von Daten zwischen der persistenten Speicherung und dem flüchtigen Speicher zu Verarbeitungsbeschränkungen und wahrnehmbaren Engpässen. Somit weisen die heutigen Rechenmechanismen aufgrund ihrer Konfiguration und ihrer Funktionsweise Einschränkungen auf.
  • KURZDARSTELLUNG
  • Gemäß einigen Gesichtspunkten der vorliegenden Offenbarung wird ein Speichersystem offenbart. Das Speichersystem schließt einen Speicher mit einer ersten ausführbaren Speicherzelle und einer Kompilierungseinheit ein. Die Kompilierungseinheit ist eingerichtet, eine Sequenz von Anweisungen von einer Hostvorrichtung zu empfangen, jede der Sequenz von Anweisungen in einen Ausführungsstrom umzuwandeln, einen ersten Code aus dem Ausführungsstrom in einen Codeabschnitt der ersten ausführbaren Speicherzelle zu laden und erste Daten aus dem Ausführungsstrom in einen Datenabschnitt der ersten ausführbaren Speicherzelle zu laden. Die erste ausführbare Speicherzelle ist eingerichtet, den ersten Code über eine Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle auf die ersten Daten anzuwenden.
  • Gemäß einigen anderen Gesichtspunkten der vorliegenden Offenbarung wird ein anderes Speichersystem offenbart. Das Speichersystem schließt einen Speicher mit einer ersten ausführbaren Speicherzelle und einer Kompilierungseinheit ein. Die Kompilierungseinheit ist eingerichtet, einen Codestrom aus einer Sequenz von Anweisungen zu erzeugen. Der Codestrom schließt eine Vielzahl von Codezellen ein, wobei jede der Vielzahl von Codezellen einen Subcode speichert. Die Kompilierungseinheit ist auch eingerichtet, einen Datenstrom aus der Sequenz von Anweisungen zum Speichern eines ersten Operanden und eines zweiten Operanden zu erzeugen und einen ersten Subcode in die erste ausführbare Speicherzelle zu laden. Der erste Subcode ist in einer ersten Codezelle der Vielzahl von Codezellen gespeichert. Die Kompilierungseinheit ist ferner eingerichtet, den ersten Operanden in die erste ausführbare Speicherzelle zu laden und den ersten Subcode von der ersten Codezelle zu einer zweiten Codezelle der Vielzahl von Codezellen zu verschieben.
  • Gemäß noch weiteren Gesichtspunkten der vorliegenden Offenbarung wird ein nichttransitorischer computerlesbarer Datenträger mit darin eingebetteten computerlesbaren Anweisungen offenbart. Die Anweisungen, wenn sie von einem Prozessor ausgeführt werden, veranlassen den Prozessor, einen Prozess durchzuführen, der das Empfangen einer Sequenz von Anweisungen, das Umwandeln jeder der Sequenz von Anweisungen zum Erzeugen eines Ausführungsstroms, das Laden eines ersten Codes aus dem Ausführungsstrom in einen Codeabschnitt einer ersten ausführbaren Speicherzelle und das Laden erster Daten aus dem Ausführungsstrom in einen Datenabschnitt der ersten ausführbaren Speicherzelle einschließt. Der Prozess schließt auch das Anwenden des ersten Codes auf die ersten Daten durch eine Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle ein.
  • Die vorhergehende Zusammenfassung ist nur veranschaulichend und soll in keiner Weise einschränkend sein. Zusätzlich zu den oben beschriebenen veranschaulichenden Gesichtspunkten, Ausführungsformen und Merkmalen werden weitere Gesichtspunkte, Ausführungsformen und Merkmale unter Bezugnahme auf die folgenden Zeichnungen und die ausführliche Beschreibung deutlich.
  • Figurenliste
    • 1 ist ein beispielhaftes Blockdiagramm eines Rechensystems gemäß einigen Ausführungsformen der vorliegenden Offenbarung.
    • 2 ist ein beispielhaftes Blockdiagramm einer Datenverarbeitungseinheit des Rechensystems von 1 gemäß einigen Ausführungsformen der vorliegenden Offenbarung.
    • 3 ist ein beispielhaftes Blockdiagramm einer Speicherzelle der Datenverarbeitungseinheit von 2 gemäß einigen Ausführungsformen der vorliegenden Offenbarung.
    • 4 ist ein beispielhaftes Flussdiagramm, das eine Ein-Operanden-Operation, die von der Speicherzelle von 3 durchgeführt wird, gemäß einigen Ausführungsformen der vorliegenden Offenbarung zeigt.
    • 5 ist ein beispielhaftes Flussdiagramm, das eine Zwei-Operanden-Operation, die von der Speicherzelle von 3 durchgeführt wird, gemäß einigen Ausführungsformen der vorliegenden Offenbarung zeigt.
    • 6 ist ein weiteres beispielhaftes Flussdiagramm, das die von der Speicherzelle von 3 durchgeführte Zwei-Operanden-Operation gemäß einigen Ausführungsformen der vorliegenden Offenbarung zeigt.
    • 7 ist ein beispielhafter Ausführungsstrom, der aus einer Anweisung erzeugt wird, die durch das Rechensystem von 1 verarbeitet werden soll, gemäß einigen Ausführungsformen der vorliegenden Offenbarung.
    • 8 ist ein beispielhaftes Blockdiagramm, das Operationen zeigt, die unter Verwendung des Ausführungsstroms von 7 gemäß einigen Ausführungsformen der vorliegenden Offenbarung durchgeführt werden.
    • 9 ist ein weiterer beispielhafter Ausführungsstrom, der aus einer Anweisung erzeugt wird, die durch das Rechensystem von 1 verarbeitet werden soll, gemäß einigen Ausführungsformen der vorliegenden Offenbarung.
    • 10 ist ein beispielhaftes Blockdiagramm, das Operationen zeigt, die unter Verwendung des Ausführungsstroms von 9 gemäß einigen Ausführungsformen der vorliegenden Offenbarung durchgeführt werden.
    • 11 ist ein beispielhaftes Flussdiagramm, das Operationen zeigt, die unter Verwendung des Ausführungsstroms von 9 gemäß einigen Ausführungsformen der vorliegenden Offenbarung durchgeführt werden.
  • Die vorstehenden und andere Merkmale der vorliegenden Offenbarung werden aus der folgenden Beschreibung und den beigefügten Ansprüchen in Verbindung mit den beigefügten Zeichnungen ersichtlich. Unter der Voraussetzung, dass diese Zeichnungen nur mehrere Ausführungsformen gemäß der Offenbarung darstellen und daher nicht als Einschränkung ihres Umfangs anzusehen sind, wird die Offenbarung durch Verwendung der beigefügten Zeichnungen spezifischer und detaillierter beschrieben.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden detaillierten Beschreibung wird auf die beigefügten Zeichnungen Bezug genommen, die einen Teil davon bilden. In den Zeichnungen kennzeichnen ähnliche Symbole üblicherweise ähnliche Komponenten, sofern der Kontext nichts anderes vorschreibt. Die in der detaillierten Beschreibung, den Zeichnungen und den Ansprüchen beschriebenen veranschaulichenden Ausführungsformen sind nicht als Einschränkung gedacht. Andere Ausführungsformen können verwendet werden und andere Änderungen können vorgenommen werden, ohne vom Geist oder Umfang des hier präsentierten Gegenstandes abzuweichen. Es versteht sich, dass die Gesichtspunkte der vorliegenden Offenbarung, wie hierin allgemein beschrieben und in den Figuren veranschaulicht, in einer Vielzahl von verschiedenen Konfigurationen angeordnet, ersetzt, kombiniert und gestaltet werden können, die alle ausdrücklich in Betracht gezogen und zum Bestandteil dieser Offenbarung gemacht werden.
  • Moderne Rechentechniken beruhen auf einem zentralisierten Ansatz zum Verarbeiten von Daten. Der zentralisierte Ansatz verwendet eine Hostvorrichtung mit einer zentralen Verarbeitungseinheit (CPU) und einem flüchtigen oder Hauptspeicher, der der CPU zugeordnet ist, sowie eine persistente Speicherung (z. B. nichtflüchtigen Speicher, der der Speichersteuerung zugeordnet ist), von dem Daten und ausführbarer Code an den flüchtigen Speicher zur Verarbeitung von Daten übertragen werden. Sobald die Datenverarbeitung abgeschlossen ist, werden die Ergebnisse der Datenverarbeitung aus dem flüchtigen Speicher zurück in die persistente Speicherung übertragen. Da sich die persistente Speicherungstechnologie dazu entwickelt, Anforderungen mit schnelleren Lese- und Schreibgeschwindigkeiten zu verarbeiten, führt die Hin- und Herübertragung von Daten in dem zentralisierten Ansatz zu Einschränkungen bei der Datenverarbeitung. Diese Einschränkungen werden durch große Datenmengen und steigende Komplexitäten und Anforderungen in der Großdatenverarbeitung verschärft.
  • Ein Mechanismus zur Leistungssteigerung im zentralisierten Ansatz besteht darin, die Anzahl der CPU-Kerne zu erhöhen. Durch die Erhöhung der Anzahl der CPU-Kerne wird jedoch die Datenverarbeitungsleistung nur bis zu einem gewissen Umfang verbessert. Eine Erhöhung der Anzahl von CPU-Kernen reduziert nicht den Overhead, der aus anderen Komponenten resultiert, wie dem Task-Scheduler, dem Kohärenzprotokoll usw., die die Datenverarbeitungsleistung erheblich beeinflussen. Eine Erhöhung der Anzahl von CPU-Kernen behebt auch nicht die Ineffizienzen, die aus der Übertragung von Daten zwischen dem flüchtigen Speicher und der persistenten Speicherung resultieren. Außerdem nutzt das Erhöhen der Anzahl von CPU-Kernen nicht die Verbesserungen in der persistenten Speicherungstechnologie. Während somit die Anzahl von CPU-Kernen bis zu einem gewissen Grad die Leistung verbessern kann, weist dieser Ansatz eine Anzahl von Einschränkungen auf.
  • Dementsprechend stellt die vorliegende Offenbarung technische Lösungen zum Speichern von Daten und Verarbeiten dieser Daten am Speicherungsort bereit. Somit stellt die vorliegende Offenbarung eine Datenverarbeitungseinheit bereit, die eine Vielzahl von ausführbaren Speicherzellen aufweist. Jede der Vielzahl von ausführbaren Speicherzellen hat die Fähigkeit, sowohl Daten zu speichern als auch die darin gespeicherten Daten zu verarbeiten. Insbesondere schließt jede der Vielzahl von ausführbaren Speicherzellen einen Datenabschnitt zum Speichern der Daten, einen Codeabschnitt zum Speichern von Code zum Verarbeiten der Daten und eine Arithmetik- und Logikeinheit zum Durchführen einer Operation oder Anwenden des Codes auf die Daten ein. Durch Speichern und Transformieren von Daten in jeder der Vielzahl von ausführbaren Speicherzellen stellt die vorliegende Offenbarung eine schnellere Datenverarbeitung und eine verbesserte Leistung bereit. Ferner kann jede der Vielzahl von ausführbaren Speicherzellen eine Datenverarbeitung parallel durchführen, wodurch eine gleichzeitige Datenverarbeitung für weitere Leistungsverbesserungen ermöglicht wird. Durch Speichern und Verarbeiten der Daten in derselben ausführbaren Speicherzelle wird die Hin- und Herübertragung von Daten und Code minimiert und die Leistungseffizienz verbessert.
  • Unter Bezugnahme auf 1 wird ein beispielhaftes Blockdiagramm eines Rechensystems 100 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Das Rechensystem 100 schließt eine Host-Vorrichtung 105 ein, die einem nichtflüchtigen Speicherarray 110 zugeordnet ist. Die Host-Vorrichtung 105 kann eingerichtet sein, Eingänge von einer oder mehreren Eingabevorrichtungen 115 zu empfangen und Ausgänge an eine oder mehrere Ausgabevorrichtungen 120 bereitzustellen. Die Host-Vorrichtung 105 kann eingerichtet sein, mit dem nichtflüchtigen Speicherarray 110, den Eingabevorrichtungen 115 und den Ausgabevorrichtungen 120 über geeignete Schnittstellen 125A, 125B bzw. 125C zu kommunizieren. Das Rechensystem 100 kann in einer Vielzahl von Rechenvorrichtungen implementiert sein, wie Computern (z. B. Desktop, Laptop usw.), Tablets, persönlichen digitalen Assistenten, mobilen Vorrichtungen, tragbaren Rechenvorrichtungen wie Smart-Watches, anderen handgeführten oder tragbaren Vorrichtungen oder jeder anderen Recheneinheit, die für die Durchführung von Operationen unter Verwendung der Host-Vorrichtung 105 geeignet ist.
  • Die Eingabevorrichtungen 115 können eine Vielzahl von Eingabetechnologien einschließen, wie Tastatur, Stift, Touchscreen, Maus, Trackball, Tastenfeld, Mikrofon, Spracherkennung, Bewegungserkennung, Fernbedienungen, Eingabesports, eine oder mehrere Schaltflächen, Wählscheiben, Joysticks und jede andere Eingabeperipherievorrichtung, die mit der Host-Vorrichtung 105 assoziiert ist und die einer externen Quelle, wie einem Benutzer, das Eingeben von Informationen (z. B. Daten) in die Host-Vorrichtung und das Senden von Anweisungen an die Host-Vorrichtung ermöglicht. Analog können die Ausgabevorrichtungen 120 eine Vielzahl von Ausgabetechnologien einschließen, wie externe Speicher, Drucker, Lautsprecher, Displays, Mikrofone, Leuchtdioden, Kopfhörer, Plotter, Sprachausgabevorrichtungen, Videovorrichtungen, globale Positionierungssysteme und alle anderen Ausgabeperipherievorrichtungen, die eingerichtet sind, Informationen (z. B. Daten) von der Host-Vorrichtung 105 zu empfangen. Die „Daten“, die entweder in die Host-Vorrichtung 105 eingegeben und/oder von der Host-Vorrichtung ausgegeben werden, können eine Vielzahl von Textdaten, grafischen Daten, Videodaten, Tondaten, Positionsdaten, Kombinationen davon oder andere Arten von analogen und/oder digitalen Daten, die sich für die Verarbeitung unter Verwendung des Rechensystems 100 eignen, einschließen.
  • Die Hostvorrichtung 105 kann eine Datenverarbeitungseinheit 130 einschließen, die eingerichtet ist, Anwendungen 135 ablaufen zu lassen. Die Datenverarbeitungseinheit 130 kann eingerichtet sein, Anweisungen (hierin auch als ausführbarer Code oder Code bezeichnet) zum Ablaufen-Lassen der Anwendungen 135 auszuführen. Die Datenverarbeitungseinheit 130 kann in Hardware, Firmware, Software oder einer beliebigen Kombination davon implementiert sein. „Ausführen einer Anweisung“ bedeutet, dass die Datenverarbeitungseinheit 130 die von dieser Anweisung aufgerufene(n) Operation(en) ausführt. Die Datenverarbeitungseinheit 130 kann eine oder mehrere ausführbare Speicherzellen 140, eine Kompilierungseinheit 145 und eine Verwaltungseinheit 150 einschließen. Die ausführbaren Speicherzellen 140 sind eingerichtet, Daten sowohl zu speichern als auch zu verarbeiten. Mit anderen Worten können die ausführbaren Speicherzellen 140 eingerichtet sein, Daten zu speichern und Operationen durchzuführen, die von einer Anweisung an diesen Daten angefordert werden. Die Kompilierungseinheit 145 wandelt eine Anweisung in eine Form um, die von den ausführbaren Speicherzellen 140 verstanden wird, und stellt einen Ausführungsstrom zur Verwendung durch die ausführbaren Speicherzellen bereit. Die Verwaltungseinheit 150 verwaltet und steuert die Kompilierungseinheit 145 und die Verarbeitung von Daten durch die ausführbaren Speicherzellen 140.
  • Somit kann die Datenverarbeitungseinheit 130 in einigen Ausführungsformen direkt oder indirekt die Anweisungen von der Kompilierungseinheit 145 abrufen, die Anweisungen in einer ausführbaren Form in die ausführbaren Speicherzellen 140 kopieren und diese Anweisungen auf die Daten anwenden, die auch in diesen ausführbaren Speicherzellen gespeichert sind. Die Datenverarbeitungseinheit 130 kann ein Spezialcomputer sein und Logikschaltungen (z. B. arithmetisch-logische Einheit), Hardwareschaltungen usw. zur Ausführung der Anweisungen einschließen. Die Anweisungen, zu deren Ausführung die Datenverarbeitungseinheit 130 eingerichtet ist, können unter Verwendung einer oder mehrerer Programmiersprachen, Skriptsprachen, Assemblersprachen usw. geschrieben werden. In einigen Ausführungsformen können die ausführbaren Speicherzellen 140 Teil des nichtflüchtigen Speicherarrays 110 sein, wobei in diesem Fall die Datenverarbeitungseinheit 130 durch eine konventionelle Zentraleinheit und einen Hauptspeicher in der Hostvorrichtung 105 ersetzt werden kann, und in diesem Fall können die ausführbaren Speicherzellen 140 mit einer eigenen Datenverarbeitungseinheit 130 und anderen unterstützenden Einheiten, wie der Kompilierungseinheit 145 und der Verwaltungseinheit 150, versehen sein, um die hierin beschriebenen Funktionen innerhalb des nichtflüchtigen Speicherarrays 110 auszuführen. In einigen Ausführungsformen können die Datenverarbeitungseinheit 130 mit den ausführbaren Speicherzellen 140 sowie das nichtflüchtige Speicherarray 110 mit einer oder mehreren ausführbaren Speicherzellen (z. B. ähnlich den ausführbaren Speicherzellen 140) verwendet werden. Durch das Speichern der Daten in den ausführbaren Speicherzellen 140 (sei es in der Datenverarbeitungseinheit 130 und/oder in dem nichtflüchtigen Speicherarray 110) sowie die Verarbeitung der Daten an dem Ort, an der die Daten gespeichert sind (z. B. in den ausführbaren Speicherzellen), ist das Rechensystem 100 eingerichtet, die Anwendungen 135 effizienter und schneller ablaufen zu lassen.
  • Jede der Anwendungen 135 ist ein Softwareprogramm oder eine Gruppe von Programmen, das/die eingerichtet ist/sind, eine oder mehrere Operationen zum Erreichen eines oder mehrerer Ziele durchzuführen. Die Anwendungen 135 können für die Verwendung durch Endbenutzer eingerichtet sein. In dieser Hinsicht können die Anwendungen 135 als Endbenutzeranwendungen betrachtet werden. In einigen Ausführungsformen können die Anwendungen 135 System- oder Dienstprogrammanwendungen sein. Die Anzahl und der Typ (z. B. was die Anwendung ausführen soll) der Anwendungen 135 kann von einer Ausführungsform zur anderen in Abhängigkeit von der Umgebung, in der das Rechensystem 100 verwendet wird, variieren. Das Rechensystem 100 kann auch ein Betriebssystem 155 einschließen, das eingerichtet ist, die Ausführung der Anwendungen 135 durch die Datenverarbeitungseinheit 130 zu erleichtern. Das Betriebssystem 155 ist ein Systemsoftwareprogramm, das die verschiedenen Hard- und Softwareressourcen des Rechensystems 100 verwaltet. Insbesondere dient das Betriebssystem 155 als Vermittler zwischen den Hardwareressourcen des Rechensystems 100 und den die Ausführung anfordernden Anwendungen 135. Das Betriebssystem 155 kann eines von einer Vielzahl von Typen von Betriebssystemen sein, wie Microsoft Windows, macOS, iOS, Android, UNIX, Linux usw., die für das Rechensystem 100 geeignet sind.
  • Das nichtflüchtige Speicherarray 110 kann eine von einer Vielfalt von nichtflüchtigen Speichervorrichtungen einschließen, die in der Lage sind, eine Programmierung und Löschung auf auswählbarer Speicherplatzebene durchzuführen, ohne Daten zu ändern, die auf anderen auswählbaren Ebenen gespeichert sind. Zum Beispiel kann jedes Bit in dem nichtflüchtigen Speicherarray 110 unabhängig änderbar sein, ohne Daten zu ändern, die in anderen Bits in dem nichtflüchtigen Speicher gespeichert sind. Somit kann das nichtflüchtige Speicherarray 110 eingerichtet sein, eine „0“ oder eine „1“ eines einzelnen Bits zu schreiben (oder den Speicherungszustand zu ändern), ohne ein anderes zugängliches Bit zu ändern. Das nichtflüchtige Speicherarray 110 kann so eingerichtet sein, dass es byteweise änderbar, wortweise änderbar und/oder in anderen Granularitäten änderbar ist. In einigen Ausführungsformen kann das nichtflüchtige Speicherarray 110 eine von einer Vielfalt von persistenten oder nichtpersistenten Speichervorrichtungen sein, die zur Verwendung in dem Rechensystem 100 geeignet sind. Zum Beispiel kann das nichtflüchtige Speicherarray 110 in einigen Ausführungsformen eine von einer Vielzahl von persistenten Speicherungsvorrichtungen sein, wie beispielsweise Phasenwechselspeichervorrichtungen (PCM-Vorrichtungen), resistive Direktzugriffsspeichervorrichtungen (ReRAM-Vorrichtungen), dynamische Direktzugriffsspeichervorrichtungen (DRAM), magnetoresistive Direktzugriffsspeichervorrichtungen (MRAM-Vorrichtungen), ferroelektrische Direktzugriffsspeichervorrichtungen (FeRAM), holographische Speichervorrichtungen. In anderen Ausführungsformen kann jede andere Art von nichtflüchtiger Speichervorrichtung verwendet werden, die zur Verwendung in dem Rechensystem 100 geeignet ist.
  • Obwohl nicht gezeigt, kann das nichtflüchtige Speicherarray 110 weiterhin eine Speichersteuerung einschließen, um mit der Hostvorrichtung 105 und insbesondere mit dem Betriebssystem 155 zu kommunizieren, um die Ausführung der Anwendungen 135 zu erleichtern.
  • Es versteht sich jedoch, dass nur einige Komponenten des Rechensystems 100 in 1 dargestellt und beschrieben sind. Das Rechensystem 100 kann jedoch auch andere Komponenten wie verschiedene Batterien und Stromquellen, Netzwerkschnittstellen, Router, Schalter, externe Speichersysteme, Steuerungen usw. einschließen. Allgemein kann das Rechensystem 100 eine Vielzahl von Hardware-, Software- und/oder Firmware-Komponenten einschließen, die zur Durchführung der hier beschriebenen Funktionen erforderlich oder als wünschenswert erachtet sind.
  • Nun Bezug nehmend auf 2, ist ein beispielhaftes Blockdiagramm einer Datenverarbeitungseinheit 200 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Die Datenverarbeitungseinheit 200 ist der Datenverarbeitungseinheit 130 von 1 ähnlich. Die Datenverarbeitungseinheit 200 schließt eine Vielzahl von ausführbaren Speicherzellen 205 ein. Jede der Vielzahl von ausführbaren Speicherzellen 205 ist jeder der ausführbaren Speicherzellen 140 von 1 ähnlich. Obwohl nicht gezeigt, schließt die Datenverarbeitungseinheit 200 weiterhin auch eine Kompilierungseinheit (z. B. ähnlich der Kompilierungseinheit 145), eine Verwaltungseinheit (z. B. ähnlich der Verwaltungseinheit 150) und jede andere Komponente ein, die zum Ausführen der hierin beschriebenen Funktionen notwendig oder wünschenswert sein kann. Ferner kann eine Anzahl der Vielzahl von ausführbaren Speicherzellen 205 in der Datenverarbeitungseinheit 200 basierend auf der Anwendung, in der das der Datenverarbeitungseinheit zugeordnete Rechensystem verwendet wird, von einer Ausführungsform zu einer anderen variieren.
  • In einigen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 aus einem der vorstehend in Bezug auf das nichtflüchtige Speicherarray 110 erörterten Speichertypen hergestellt sein. In einigen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 aus statischem Direktzugriffsspeicher (SRAM), dynamischem Direktzugriffsspeicher (DRAM), magnetoresistivem Direktzugriffsspeicher (MRAM), Phasensteuerspeicher (PCM), resistivem Direktzugriffsspeicher (ReRAM), 3D XPoint-Speicher, ferroelektrischem Direktzugriffsspeicher (FeRAM), holographischen Speichervorrichtungen und anderen Arten von byteadressierbaren Speichern hergestellt sein. In einigen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 einen Hybridspeicher einschließen, der einen flüchtigen Speicherabschnitt und einen nichtflüchtigen Speicherabschnitt einschließt. Ferner können in einigen Ausführungsformen alle der Vielzahl von ausführbaren Speicherzellen 205 aus demselben Speichertyp hergestellt sein, während in anderen Ausführungsformen eine oder mehrere der Vielzahl von ausführbaren Speicherzellen aus unterschiedlichen Speichertypen hergestellt sein können.
  • Zusätzlich ist in einigen Ausführungsformen jede der Vielzahl von ausführbaren Speicherzellen 205 eingerichtet, ein Byte binärer Informationen zu speichern. In anderen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 eingerichtet sein, mehr als oder weniger als ein Byte binärer Informationen zu speichern. Somit kann jede der Vielzahl von ausführbaren Speicherzellen 205 eine Single-Level-Zelle oder eine Multi-Level-Zelle sein. In einigen Ausführungsformen kann jede der Vielzahl von ausführbaren Speicherzellen 205 mehrere physische Ebenen (z. B. 256 Ebenen) aufweisen, die zum Implementieren arithmetischer und logischer Operationen darin verwendet werden können. Zum Beispiel können in einigen Ausführungsformen Multiplikations- und Divisionsoperationen innerhalb jeder der Vielzahl von ausführbaren Speicherzellen 205 durch Verschieben der physischen Ebenen nach links (für Multiplikation) und nach rechts (für Division) erleichtert werden. Das Verschieben der physischen Ebenen kann in einigen Ausführungsformen auf dem Umschalten der Zustände einer ausführbaren Speicherzelle durch Anlegen unterschiedlicher Spannungswerte basieren. In ähnlicher Weise können in einigen Ausführungsformen Additions-, Subtraktions- und Logikoperationen durch die Vielzahl von ausführbaren Speicherzellen 205 unter Verwendung von Schiebeoperationen implementiert werden. In anderen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 andere oder zusätzliche Mechanismen implementieren, um Arithmetik- und Logikoperationen zu erleichtern.
  • Ferner können in einigen Ausführungsformen einige der Vielzahl von ausführbaren Speicherzellen 205 zum Durchführen bestimmter arithmetischer und logischer Operationen optimiert werden, während andere der Vielzahl von ausführbaren Speicherzellen zum Durchführen anderer arithmetischer und logischer Operationen optimiert werden können. Somit und allgemein können in Abhängigkeit von der Art des Speichers und der Konfiguration einer bestimmten ausführbaren Speicherzelle die Menge von Informationen, die in jeder der Vielzahl von ausführbaren Speicherzellen 205 gespeichert sind, und die Art von Operationen, die von jeder der Vielzahl von ausführbaren Speicherzellen durchgeführt werden, von einer Ausführungsform zur anderen variieren.
  • Zusätzlich können sich alle der Vielzahl von ausführbaren Speicherzellen 205 auf einem einzigen Speicherchip oder mehreren Speicherchips befinden. Ferner können mindestens einige der Vielzahl von ausführbaren Speicherzellen 205 miteinander verbunden sein. Zum Beispiel können in einigen Ausführungsformen mindestens einige der Vielzahl von ausführbaren Speicherzellen 205 unter Verwendung eines Verbindungsnetzwerks miteinander verbunden sein. Das Verbindungsnetzwerk kann eines von einer Vielzahl von netzwerkbasierten Kommunikationsmechanismen sein, die es der Vielzahl von ausführbaren Speicherzellen 205 ermöglichen, miteinander zu kommunizieren. In einigen Ausführungsformen und insbesondere wenn sich alle der Vielzahl von ausführbaren Speicherzellen 205 auf einem einzigen Speicherchip befinden, kann das Verbindungsnetzwerk eine Netzwerk-On-Chip-(„NoC“)-Verbindung sein. In einigen Ausführungsformen können andere Mechanismen zum Erleichtern der Kommunikation zwischen der Vielzahl von ausführbaren Speicherzellen 205 verwendet werden. Wenn sie sich auf mehreren Chips befinden, kann ein Verbindungsnetzwerk ausgewählt werden, das es der Vielzahl von ausführbaren Speicherzellen 205 ermöglicht zu kommunizieren, sogar während sie sich auf verschiedenen Chips befinden. Ferner kann das Verbindungsnetzwerk es der Vielzahl von ausführbaren Speicherzellen 205 ermöglichen, direkt und/oder indirekt über eine andere Komponente zu kommunizieren.
  • Ferner kann in einigen Ausführungsformen jede der Vielzahl von ausführbaren Speicherzellen 205 einer Instanz der Verwaltungseinheit (z. B. der Verwaltungseinheit 150) zugeordnet sein, während in anderen Ausführungsformen eine Instanz der Verwaltungseinheit eingerichtet sein kann, alle oder mindestens einige der Vielzahl von ausführbaren Speicherzellen zu verwalten. In einigen Ausführungsformen können eine oder mehrere der Vielzahl von ausführbaren Speicherzellen 205 eine Verwaltungseinheit aufweisen, die von der Verwaltungseinheit (z. B. der Verwaltungseinheit 150) des Rechensystems (z. B. des Rechensystems 100) getrennt ist.
  • Unter Bezugnahme nun auf 3 wird ein exemplarisches Blockdiagramm einer ausführbaren Speicherzelle 300 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Die ausführbare Speicherzelle 300 ist den ausführbaren Speicherzellen 140 und der Vielzahl von ausführbaren Speicherzellen 205 ähnlich. Die ausführbare Speicherzelle 300 schließt eine Arithmetik- und Logikeinheit 305 ein, die eingerichtet ist, eine Anweisung auszuführen, einen Codeabschnitt 310, in dem der Code (z. B. ausführbarer Code) gespeichert ist, der ausgeführt wird, und einen Datenabschnitt 315, in dem die Daten gespeichert sind, auf die der Code aus dem Codeabschnitt angewendet wird. Die ausführbare Speicherzelle 300 schließt ebenfalls eine Verwaltungseinheit 320 ein, die die Ausführung in der Arithmetik- und Logikeinheit 305 anhand des im Codeabschnitt 310 gespeicherten Codes und der im Datenabschnitt 315 gespeicherten Daten verwaltet. Die Verwaltungseinheit 320 kann auch eingerichtet sein, den Code im Codeabschnitt 310 über einen Codebus 325 zu laden und die Daten im Datenabschnitt 315 über einen Datenbus 330 zu laden. Die Verwaltungseinheit 320 kann weiterhin eingerichtet sein, das Ergebnis der Ausführung im Codeabschnitt 310, im Datenabschnitt 315 oder in einem anderen dedizierten Ergebnisabschnitt (nicht gezeigt) der ausführbaren Speicherzelle 300 zu speichern. In einigen Ausführungsformen kann die Verwaltungseinheit 320 das Ergebnis der Ausführung an eine andere ausführbare Speicherzelle über den Datenbus 330, an eine andere Komponente der zugeordneten Datenverarbeitungseinheit (z. B. die Datenverarbeitungseinheit 130, 200) und/oder an die Ausgabevorrichtungen 120 senden. Obwohl die Verwaltungseinheit 320 als Teil der ausführbaren Speicherzelle 300 gezeigt ist, kann sich weiterhin die Verwaltungseinheit in einigen Ausführungsformen außerhalb der ausführbaren Speicherzelle befinden (z. B. wie in 1 gezeigt) und die Operationen innerhalb der ausführbaren Speicherzelle verwalten.
  • Ferner können der Codeabschnitt 310 und der Datenabschnitt 315 dedizierte Speicherabschnitte der ausführbaren Speicherzelle 300 sein, die zum Speichern von ausführungsbereitem Code bzw. ausführungsbereiten Daten dediziert sind. In einigen Ausführungsformen können der Codeabschnitt 310 und der Datenabschnitt 315 eingerichtet sein, jeweils ein einzelnes Code- bzw. Datenelement zu speichern, während in anderen Ausführungsformen der Codeabschnitt und/oder der Datenabschnitt mehrere Code- bzw. Datenelemente in Abhängigkeit von ihren jeweiligen Größen speichern können.
  • Die Arithmetik- und Logikeinheit 305 ist eingerichtet, grundlegende Arithmetik- und Logikoperationen durchzuführen. Zum Beispiel kann in einigen Ausführungsformen die Arithmetik- und Logikeinheit 305 eingerichtet sein, Additions-, Subtraktions-, Multiplikations-, Divisions-, logische OR-, NOT-, AND-, XOR-, NOR- und NAND-Operationen durchzuführen. In einigen Ausführungsformen kann die Arithmetik- und Logikeinheit 305 eingerichtet sein, ebenfalls zusätzliche oder andere Operationen durchzuführen. In einigen Ausführungsformen kann die Arithmetik- und Logikeinheit 305 einen Satz von Funktionsblöcken einschließen, wobei jeder Funktionsblock in der Lage ist, eine Operation (OR, XOR, Addition, Subtraktion usw.) auszuführen. Außerdem kann, wie vorstehend erläutert, die Art und Weise, in der die Arithmetik- und Logikeinheit 305 die verschiedenen Arithmetik- und Logikoperationen durchführt, basierend auf dem Speichertyp variieren, der dazu verwendet wird, die ausführbare Speicherzelle und insbesondere den Arithmetik- und Logikeinheitsabschnitt der ausführbaren Speicherzelle zu konstruieren. Zum Beispiel kann die Arithmetik- und Logikeinheit 305 in einigen Ausführungsformen Arithmetik- und Logikoperationen durch Verschieben physischer Ebenen der ausführbaren Speicherzelle 300, Umprogrammieren von Speicherzellen, resistives Schalten, magnetisches Schalten oder unter Verwendung anderer Mechanismen durchführen, die für den Speichertyp geeignet sind, der für die ausführbare Speicherzelle verwendet wird.
  • Nun Bezug nehmend auf 4 wird ein beispielhaftes Flussdiagramm skizziert, das eine Ein-Operand-Operation in einer ausführbaren Speicherzelle 400 ausführt, gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Das Flussdiagramm kann je nach der bestimmten Ausführungsform weitere, zusätzliche oder andere Operationen einschließen. Die ausführbare Speicherzelle 400 ist der ausführbaren Speicherzelle 300 ähnlich. Somit schließt die ausführbare Speicherzelle 400 auch einen Codeabschnitt 405 zum Speichern von Code, einen Datenabschnitt 410 zum Speichern von Daten, eine Arithmetik- und Logikeinheit 415 zum Anwenden des Codes aus dem Codeabschnitt auf die Daten aus dem Datenabschnitt und eine Verwaltungseinheit 420 ein. Die Verwaltungseinheit 420 empfängt und speichert den Code in dem Codeabschnitt 405, empfängt und speichert die Daten in dem Datenabschnitt 410, weist die Arithmetik- und Logikeinheit 415 an, den Code auf die Daten anzuwenden, und empfängt das Ergebnis der Anwendung von der Arithmetik- und Logikeinheit zum Speichern im Datenabschnitt, Codeabschnitt und/oder zum Übertragen außerhalb der ausführbaren Speicherzelle 400 (oder weist die Arithmetik- und Logikeinheit an, das Ergebnis zu speichern/zu übertragen).
  • Bei einer Ein-Operanden-Operation handelt es sich um eine Variable (z. B. ein Datenelement), an dem eine Operation durchgeführt werden soll. Ein Beispiel für eine Ein-Operanden-Operation kann eine NOT-Operation einschließen. Um eine Ein-Operanden-Operation auszuführen, lädt die Verwaltungseinheit 420 die Daten (z. B. den Operanden) bei der Operation 425 in den Datenabschnitt 410 und lädt den Code bei der Operation 430 in den Codeabschnitt 405. In einigen Ausführungsformen kann die Verwaltungseinheit 420 die Daten in den Datenabschnitt 410 laden, bevor der Code in den Codeabschnitt 405 geladen wird. Ferner können die Daten in einigen Ausführungsformen zuvor in dem Datenabschnitt 410 der ausführbaren Speicherzelle 400 gespeichert worden sein. In einem solchen Fall muss die Verwaltungseinheit 420 die Daten im Datenabschnitt 410 möglicherweise nicht zum Zeitpunkt der Durchführung der Operation speichern und kann die Operation 425 überspringen. Um die Daten im Datenabschnitt 410 und den Code im Codeabschnitt 405 zu speichern, kann die Verwaltungseinheit 420 auch die Daten und den Code von einem ausführbaren Strom, der von der Kompilierungseinheit (z. B. der Kompilierungseinheit 145) generiert wird, und/oder von einer anderen ausführbaren Speicherzelle empfangen.
  • Beim Speichern der Daten im Datenabschnitt 410 und des Codes im Codeabschnitt 405 initiiert die Verwaltungseinheit 420 die Ausführung des Codes bei Operation 435. Im Rahmen der Initiierung kann die Verwaltungseinheit 420 einen oder mehrere Funktionsblöcke der Arithmetik- und Logikeinheit 415 oder ein oder mehrere Mikroprogramme der Arithmetik- und Logikeinheit auswählen, die den Code aus dem Codeabschnitt 405 auf die Daten aus dem Datenabschnitt 410 anwenden. In einigen Ausführungsformen kann die Verwaltungseinheit 420 eine spezielle Spannung anlegen, um den/die ausgewählte(n) Funktionsblock(-blöcke) / das/die Mikroprogramm(e) der Arithmetik- und Logikeinheit 415 auszuwählen und den/die ausgewählte(n) Funktionsblock(-blöcke) / das/die Mikroprogramm(e) mit dem Datenabschnitt 410 zu verbinden. Bei Operation 440 wendet die Arithmetik- und Logikeinheit 415 den Code aus dem Codeabschnitt 405 auf die Daten aus dem Datenabschnitt 410 an. Im Einzelnen bilden die Daten aus dem Datenabschnitt 410 den Eingang für den/die ausgewählten Funktionsblock(-blöcke) / das/die Mikroprogramm(e), die die Verwaltungseinheit bei der Operation 435 ausgewählt hat. Bei der Operation 440 werden die Daten durch den/die ausgewählte(n) Funktionsblock(-blöcke) / das/die Mikroprogramm(e) aus dem Datenabschnitt 410 gelegen, die Daten modifiziert und das Ergebnis gespeichert. Der/die ausgewählten Funktionsblock(-blöcke) / das/die Mikroprogramm(e) kann/können das Ergebnis in dem Datenabschnitt 410, in dem Codeabschnitt 405 oder an einer anderen bestimmten Stelle speichern. In einigen Ausführungsformen kann die Verwaltungseinheit 420 auch eingerichtet sein, das Ergebnis in dem Datenabschnitt 410, dem Codeabschnitt 405 zu speichern und/oder das Ergebnis an eine andere Komponente zu senden.
  • Unter Bezugnahme auf 5 wird ein beispielhaftes Flussdiagramm gezeigt, das Operationen zum Durchführen einer Zwei-Operanden-Operation gemäß einigen Ausführungsformen der vorliegenden Offenbarung skizziert. Das Flussdiagramm kann je nach der bestimmten Ausführungsform weitere, zusätzliche oder andere Operationen einschließen. Bei einer Zwei-Operanden-Operation handelt es sich um zwei Variablen (z. B. zwei Datenelemente), an denen eine Operation durchgeführt wird. Insbesondere handelt es sich bei einer Zwei-Operanden-Operation um einen linken Operanden, der von einem rechten Operanden durch einen Operator getrennt ist. Somit handelt es sich bei einer Zwei-Operanden-Operation um zwei ausführbare Speicherzellen - eine erste ausführbare Speicherzelle 500 zum Speichern des linken Operanden und eine zweite ausführbare Speicherzelle 505 zum Speichern des rechten Operanden. In einigen Ausführungsformen kann die erste ausführbare Speicherzelle 500 den rechten Operanden speichern, während die zweite ausführbare Speicherzelle 505 den linken Operanden speichern kann.
  • Die erste ausführbare Speicherzelle 500 und die zweite ausführbare Speicherzelle 505 sind der ausführbaren Speicherzelle 300 ähnlich. Somit schließt jede der ersten ausführbaren Speicherzelle 500 und der zweiten ausführbaren Speicherzelle 505 einen Codeabschnitt zum Speichern von ausführbarem Code, einen Datenabschnitt zum Speichern von Daten, eine Arithmetik- und Logikeinheit zum Anwenden des Codes von dem Codeabschnitt auf die in dem Datenabschnitt gespeicherten Daten und eine Verwaltungseinheit zum Erleichtern der Ausführung ein. Zur Vereinfachung der Erläuterung sind der Codeabschnitt, der Datenabschnitt, die Arithmetik- und Logikeinheit und die Verwaltungseinheit in der ersten ausführbaren Speicherzelle 500 und der zweiten ausführbaren Speicherzelle 505 nicht gezeigt.
  • Um eine Zwei-Operanden-Operation durchzuführen, speichert die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 den ersten Operanden in dem Datenabschnitt der ersten ausführbaren Speicherzelle bei Operation 510. Bei Operation 515 speichert die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 505 den zweiten Operanden im Datenabschnitt der zweiten ausführbaren Speicherzelle. In einigen Ausführungsformen können der erste Operand und/oder der zweite Operand zuvor in den Datenabschnitten der ersten ausführbaren Speicherzelle 500 bzw. der zweiten ausführbaren Speicherzelle 505 gespeichert worden sein. In solchen Fällen kann die Operation 510 und/oder die Operation 515 übersprungen werden. Wenn zum Beispiel der erste Operand zum Zeitpunkt des Durchführens der Zwei-Operanden-Operation bereits in der ersten ausführbaren Speicherzelle 500 gespeichert ist, kann die Operation 510 übersprungen werden. Wenn in ähnlicher Weise der zweite Operand zum Zeitpunkt des Durchführens der Zwei-Operanden-Operation bereits in der zweiten ausführbaren Speicherzelle 505 gespeichert ist, kann die Operation 515 übersprungen werden.
  • Zusätzlich speichert die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 bei Operation 520 einen ersten Code in dem Codeabschnitt der ersten ausführbaren Speicherzelle, und die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 505 speichert bei Operation 525 einen zweiten Code in dem Codeabschnitt der zweiten ausführbaren Speicherzelle. Der erste Code und der zweite Code können Subcodes einer Anweisung sein, die von einer Hostvorrichtung (z. B. der Hostvorrichtung 105) empfangen wird. In einigen Ausführungsformen können der erste Code und der zweite Code eingerichtet sein, in einer bestimmten Sequenz angewendet zu werden. Ferner kann in einigen Ausführungsformen der erste Code identifizieren, dass der erste Operand der linke Operand ist, und der zweite Code kann identifizieren, dass der zweite Operand der rechte Operand ist. In einigen Operationen, wie Subtraktion, Division usw., kann die Reihenfolge der Operanden wichtig sein, um eine Operation korrekt durchzuführen. Wenn beispielsweise die Operanden 5 und 3 sind und der Operator eine Subtraktionsoperation ist, liefern die Funktionen 5-3 und 3-5 unterschiedliche Ergebnisse. Somit können der erste Code und der zweite Code die korrekte Reihenfolge definieren, in der die Operanden in der Operation verwendet werden sollen.
  • Ferner können in einigen Ausführungsformen der erste Code und/oder der zweite Code auch den Operator identifizieren, der auf den ersten Operanden und den zweiten Operanden anzuwenden ist, und/oder definieren, wie das Ergebnis der Operation gehandhabt werden soll. In anderen Ausführungsformen kann die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 und/oder der zweiten ausführbaren Speicherzelle 505 einen dritten Code empfangen, der die Operation (z. B. den Operator) definiert, die auf den ersten Operanden und den zweiten Operanden anzuwenden ist, und/oder definiert, wie das Ergebnis der Operation gehandhabt werden soll. In einigen Ausführungsformen kann die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 und/oder der zweiten ausführbaren Speicherzelle 505 einen vierten Code empfangen, der definiert, wie das Ergebnis der Operation gehandhabt werden soll. Somit kann die Anweisung in einen oder mehrere Subcodes unterteilt werden, die in einer bestimmten Sequenz angewendet werden können, um die Anweisung auszuführen.
  • Ferner können die Operationen 510-525 in beliebiger Reihenfolge durchgeführt werden. Die relative Reihenfolge, in der der erste Operand, der zweite Operand, der erste Code und der zweite Code in die erste ausführbare Speicherzelle 500 und die zweite ausführbare Speicherzelle 505 geladen werden, kann von einer Ausführungsform zur anderen variieren.
  • Nach dem Speichern des ersten Operanden und des ersten Codes in der ersten ausführbaren Speicherzelle 500 beginnt die Operation 530. Bei der Operation 530 weist die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 die Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle an, dass der erste Operand als der linke Operand bestimmt werden soll. Die Verwaltungseinheit kann auch den/die Funktionsblock(-blöcke) / das/die Mikroprogramm(e) in der Arithmetik- und Logikeinheit auswählen, um den ersten Code auf den ersten Operanden anzuwenden. In ähnlicher Weise beginnt die Operation 535 nach dem Speichern des zweiten Operanden und des zweiten Codes in der zweiten ausführbaren Speicherzelle 505. Bei der Operation 535 weist die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 505 die Arithmetik- und Logikeinheit der zweiten ausführbaren Speicherzelle an, dass der zweite Operand als der rechte Operand bestimmt werden soll. Die Verwaltungseinheit kann auch den/die Funktionsblock(-blöcke) / das/die Mikroprogramm(e) in der Arithmetik- und Logikeinheit auswählen, um den zweiten Code auf den zweiten Operanden anzuwenden. Die Operationen 530 und 535 können gleichzeitig ausgeführt werden.
  • Ferner können in einigen Ausführungsformen, in denen zusätzliche Codes (z. B. dritter Code, vierter Code usw.) verwendet werden, die Verwaltungseinheiten der ersten ausführbaren Speicherzelle 500 und der zweiten ausführbaren Speicherzelle 505 nach Abschluss der Operationen 530 und 535 den Code empfangen, der als nächstes anzuwenden ist. Die Verwaltungseinheiten können diese zusätzlichen Codes in den Codeabschnitten ihrer jeweiligen ausführbaren Speicherzellen speichern. Nach dem Empfangen und Speichern der zusätzlichen Codes oder wenn die zusätzlichen ausführbaren Codeabschnitte nicht benötigt werden, überträgt die Verwaltungseinheit einer der ausführbaren Speicherzellen bei Operation 540 den darin gespeicherten Operanden an die andere ausführbare Speicherzelle. In einigen Ausführungsformen kann die ausführbare Speicherzelle, die den linken Operanden speichert, den linken Operanden an die ausführbare Speicherzelle übertragen, die den rechten Operanden speichert. In anderen Ausführungsformen kann die ausführbare Speicherzelle, die den rechten Operanden speichert, den rechten Operanden an die ausführbare Speicherzelle übertragen, die den linken Operanden speichert.
  • Somit überträgt, wie in 5 gezeigt, die zweite ausführbare Speicherzelle 505 den zweiten Operanden an die erste ausführbare Speicherzelle 500, die den ersten Operanden speichert. Beim Empfangen des zweiten Operanden kann die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 den ersten Operanden zu dem Codeabschnitt der ersten ausführbaren Speicherzelle verschieben und den zweiten Operanden in dem Datenabschnitt der ersten ausführbaren Speicherzelle speichern. In einigen Ausführungsformen speichert die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 möglicherweise den zweiten Operanden nicht in dem Datenabschnitt der ersten ausführbaren Speicherzelle. Vielmehr kann die Verwaltungseinheit den zweiten Operanden in dem Codeabschnitt speichern oder den zweiten Operanden direkt mit der arithmetisch-logischen Einheit der ersten ausführbaren Speicherzelle verbinden.
  • Bei Operation 545 weist die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 die Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle an, die Ausführung durchzuführen. Insbesondere kann in einigen Ausführungsformen die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 den/die Funktionsblock(-blöcke) / das/die Mikroprogramm(e) der Arithmetik- und Logikeinheit des ersten ausführbaren Speichers auswählen, die auf den ersten Operanden und den zweiten Operanden anzuwenden sind. Bei Empfang von Anweisungen von der Verwaltungseinheit führt der/die ausgewählten Funktionsblock(-blöcke) / das/die Mikroprogramm(e) der Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle 500 die Operation aus (z. B. wendet den Code auf den ersten Operanden und den zweiten Operanden an) und erhält ein Ergebnis. Die Arithmetik- und Logikeinheit oder die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 kann das Ergebnis in dem Datenabschnitt der ersten ausführbaren Speicherzelle, dem Codeabschnitt der ersten ausführbaren Speicherzelle speichern, das Ergebnis an die zweite ausführbare Speicherzelle 505 übertragen oder das Ergebnis an eine andere Komponente übertragen. In einigen Ausführungsformen kann die Verwaltungseinheit der ersten ausführbaren Speicherzelle 500 nach Abschluss der Operation 545 einen anderen Code empfangen, der definiert, wie das Ergebnis gehandhabt werden soll.
  • Bezug nehmend auf 6 wird ein beispielhaftes Flussdiagramm, das eine weitere Zwei-Operanden-Operation zeigt, gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Das Flussdiagramm kann je nach der bestimmten Ausführungsform weitere, zusätzliche oder andere Operationen einschließen. Ähnlich wie in 5 wird die Zwei-Operanden-Operation von 6 durch zwei ausführbare Speicherzellen durchgeführt - eine erste ausführbare Speicherzelle 600 und eine zweite ausführbare Speicherzelle 605. Die erste ausführbare Speicherzelle 600 und die zweite ausführbare Speicherzelle 605 sind der ausführbaren Speicherzelle 300 ähnlich. Somit schließt, obwohl nicht gezeigt, jede der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 einen Codeabschnitt zum Speichern von Code, einen Datenabschnitt zum Speichern von Daten, eine Arithmetik- und Logikeinheit zum Anwenden des Codes von dem Codeabschnitt auf die Daten von dem Datenabschnitt und eine Verwaltungseinheit zum Erleichtern der Operation ein.
  • Um die Zwei-Operanden-Operation durchzuführen, speichert die Verwaltungseinheit der ersten ausführbaren Speicherzelle 600 den ersten Operanden (z. B. das erste Datenelement) in dem Datenabschnitt der ersten ausführbaren Speicherzelle bei Operation 610. Bei Operation 615 speichert die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 605 den zweiten Operanden (z. B. das zweite Datenelement) im Datenabschnitt der zweiten ausführbaren Speicherzelle. In einigen Ausführungsformen können der erste Operand und/oder der zweite Operand zuvor in der ersten ausführbaren Speicherzelle und/oder der zweiten ausführbaren Speicherzelle gespeichert worden sein. In solchen Fällen kann die Operation 610 und/oder die Operation 615 übersprungen werden.
  • Zusätzlich speichert die Verwaltungseinheit der ersten ausführbaren Speicherzelle 600 bei Operation 620 den ersten Code in dem Codeabschnitt der ersten ausführbaren Speicherzelle, und die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 605 speichert bei Operation 625 den zweiten Code in dem Codeabschnitt der zweiten ausführbaren Speicherzelle. Wiederum kann die relative Reihenfolge, in der das erste Datenelement, das zweite Datenelement, der erste Code und der zweite Code in die erste ausführbare Speicherzelle 600 und die zweite ausführbare Speicherzelle 605 geladen werden, von einer Ausführungsform zur anderen variieren.
  • Ferner kann der erste Code identifizieren, ob der erste Operand der linke Operand oder der rechte Operand ist, und der zweite Code kann identifizieren, ob der zweite Operand der rechte Operand oder der linke Operand ist. Der erste Code und/oder der zweite Code können auch den/die Funktionsblock(-blöcke) / das/die Mikroprogramm(e) der jeweiligen Arithmetik- und Logikeinheit auswählen, die auf den ersten Operanden und den zweiten Operanden anzuwenden sind. In einigen Ausführungsformen kann ein dritter Code verwendet werden, um die Operation zu definieren. Ferner kann in einigen Ausführungsformen ein vierter Code verwendet werden, um das Ergebnis der Operation zu verwalten, wie vorstehend in Bezug auf 5 erörtert.
  • Beim Speichern des ersten Operanden und des ersten Codes in der ersten ausführbaren Speicherzelle 600 weist die Verwaltungseinheit der ersten ausführbaren Speicherzelle bei Operation 630 die Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle an, dass der erste Operand als der linke Operand oder rechte Operand zu bestimmen ist. In ähnlicher Weise beginnt die Operation 635 nach dem Speichern des zweiten Operanden und des zweiten ausführbaren Codes in der zweiten ausführbaren Speicherzelle 605. Bei der Operation 635 weist die Verwaltungseinheit der zweiten ausführbaren Speicherzelle 605 die Arithmetik- und Logikeinheit der zweiten ausführbaren Speicherzelle an, dass der zweite Operand als der rechte Operand oder der linke Operand bestimmt werden soll. Die Operationen 630 und 635 können gleichzeitig ausgeführt werden. Die Operationen 610-635 sind den vorstehend erörterten Operationen 510-535 ähnlich.
  • Ferner können, anstatt die Daten von einer ausführbaren Speicherzelle an eine andere ausführbare Speicherzelle zu senden, wie in Bezug auf 5 erörtert, in einigen Ausführungsformen und wie in 6 erörtert, der erste Code von der ersten ausführbaren Speicherzelle 600 und der zweite Code von der zweiten ausführbaren Speicherzelle 605 miteinander kombiniert werden. In den Ausführungsformen, in denen zusätzliche Codes (z. B. dritter Code, vierter Code usw.) verwendet werden, können die Verwaltungseinheiten der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 nach Abschluss der Operationen 630 und 635 die Codes empfangen, die als nächstes anzuwenden sind, und diese Codes kombinieren.
  • Somit werden bei Operation 640 der erste Code aus der ersten ausführbaren Speicherzelle 600 und der zweite Code aus der zweiten ausführbaren Speicherzelle 605 miteinander kombiniert. Die Kombination kann in einigen Ausführungsformen dadurch erreicht werden, dass die Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle 600 und/oder der zweiten ausführbaren Speicherzelle 605 in die Lage versetzt wird, auf den Datenabschnitt der anderen ausführbaren Speicherzelle zuzugreifen. Zum Beispiel können es in einigen Ausführungsformen die Verwaltungseinheiten der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 der Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle ermöglichen, auf den Datenabschnitt der zweiten ausführbaren Speicherzelle zuzugreifen, um auf den zweiten Operanden zuzugreifen. In anderen Ausführungsformen können es die Verwaltungseinheiten der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 der Arithmetik- und Logikeinheit der zweiten ausführbaren Speicherzelle ermöglichen, auf den Datenabschnitt der ersten ausführbaren Speicherzelle zuzugreifen, um auf den ersten Operanden zuzugreifen. In anderen Ausführungsformen können es die Verwaltungseinheiten der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 der Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle ermöglichen, auf den zweiten Operanden in der zweiten ausführbaren Speicherzelle zuzugreifen, und es der Arithmetik- und Logikeinheit der zweiten ausführbaren Speicherzelle ermöglichen, auf den ersten Operanden in der ersten ausführbaren Speicherzelle zuzugreifen.
  • Die Arithmetik- und Logikeinheit, die Zugriff auf den ersten Operanden und den zweiten Operanden hat, kann dann den Code dazu anwenden, die Zwei-Operanden-Operation durchzuführen. In einigen Ausführungsformen können der/die Funktionsblock(-blöcke) / das/die Mikroprogramm(e) der Arithmetik- und Logikeinheiten der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 kombiniert werden, um ein/en kombinierten/s Funktionsblock/Mikroprogramm zu bilden. Dem kombinierten Funktionsblock/Mikroprogramm kann es ermöglicht werden, auf die Datenabschnitte der ersten ausführbaren Speicherzelle 600 und der zweiten ausführbaren Speicherzelle 605 zuzugreifen, um die Zwei-Operanden-Operation durchzuführen. In einigen Ausführungsformen kann die Kombination des ersten Codes und des zweiten Codes durch eine Schiebeoperation erreicht werden, wie nachstehend ausführlicher erläutert wird. Das Ergebnis der Operation kann auf ähnliche Weise behandelt werden, wie vorstehend in Bezug auf 5 erörtert.
  • Nun Bezug nehmend auf 7 ist ein beispielhafter Ausführungsstrom 700 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Der Ausführungsstrom 700 wird von der Kompilierungseinheit (z. B. der Kompilierungseinheit 145) des Rechensystems (z. B. des Rechensystems 100) generiert. Nach dem Empfangen einer Sequenz von Anweisungen (z. B. um eine der Anwendungen 135) von der Hostvorrichtung (z. B. der Hostvorrichtung 105) ablaufen zu lassen, wandelt die Kompilierungseinheit jede Anweisung in der Sequenz von Anweisungen in eine Form um, die für die ausführbaren Speicherzellen (z. B. die ausführbaren Speicherzellen 140) leicht verständlich und zur Ausführung bereit ist. Somit wandelt die Kompilierungseinheit den Eingangsquellcode in den Zielquellcode um. Der Code, der in die ausführbaren Speicherzellen geladen wird, ist der Zielquellcode.
  • Durch Umwandeln des Eingangsquellcodes in Zielquellcode erzeugt die Kompilierungseinheit einen ausführbaren Binärstrom (z. B. den Ausführungsstrom 700). Als Teil der Umwandlung kann die Kompilierungseinheit in einigen Ausführungsformen eine Anweisung in mehrere Teiloperationen oder Subcodes zerlegen. Zum Beispiel kann, wie vorstehend erörtert, eine Zwei-Operanden-Operation mehrere Codes beinhalten - einen ersten Code zum Identifizieren des linken Operanden, einen zweiten Code zum Identifizieren des rechten Operanden, einen dritten Code zum Anwenden der Operation und einen vierten Code zum Verwalten des Ergebnisses der Operation. Somit kann jeder vorstehende Code als ein Subcode oder eine einstufige Anweisung betrachtet werden. Die Anweisung mit mehreren Subcodes kann ausgeführt werden, indem die Subcodes in einer bestimmten Reihenfolge ausgeführt werden.
  • In einigen Ausführungsformen kann die Kompilierungseinheit (z. B. die Kompilierungseinheit 145) ein Just-in-Time-Compiler sein. In anderen Ausführungsformen kann die Kompilierungseinheit ein anderer Typ von Compiler sein, der zur Verwendung mit den ausführbaren Speicherzellen (z. B. den ausführbaren Speicherzellen 140) geeignet ist. Ferner kann der Ausführungsstrom 700, der von der Kompilierungseinheit generiert wird, als ein unendliches Band einer Turing-Maschine betrachtet werden, das mehrere diskrete Zellen einschließt, wobei in jeder Zelle entweder Code (z. B. Subcode) oder Daten gespeichert ist/sind. Somit kann der Ausführungsstrom 700 eine Vielzahl von Zellen einschließen, die mit Code verschachtelte Daten einschließen. Zum Beispiel kann eine Zelle 705A des Ausführungsstroms 700 Code 1 speichern. Die Daten, auf die Code 1 angewendet werden soll, können in Zelle 710A gespeichert werden. Zelle 705B des Ausführungsstroms 700 kann Code 2 speichern und Zelle 710B kann die Daten speichern, auf die Code 2 angewendet werden soll. Wenn Code 1 ein Subcode einer Anweisung ist, die mehrere Subcodes enthält, dann kann Code 2 ein zweiter nachfolgender Subcode sein, der nach Code 1 auszuführen ist. Wenn Code 1 ein eigenständiger Code ist, dann kann Code 2 ein erster Subcode einer anderen Anweisung sein, die mehrere Subcodes oder einen anderen eigenständigen Code aufweist. Somit erzeugt die Kompilierungseinheit (z. B. die Kompilierungseinheit 145) einen kontinuierlichen Strom von Daten und Code (gleich ob eigenständiger Code oder Subcodes), der von den ausführbaren Speicherzellen (z. B. den ausführbaren Speicherzellen 140) ausgeführt werden soll. Der Ausführungsstrom 700 speichert sowohl Code als auch Daten in einem einzigen Strom. Somit kann der Ausführungsstrom 700 als „einzelner Ausführungsstrom“ betrachtet werden.
  • Obwohl der Ausführungsstrom 700 die Codezellen (z. B. die Zellen 705A, 705B, 705N) rechts von den Datenzellen (z. B. den Zellen 710A, 710B, 710N) zeigt, können sich die Codezellen in einigen Ausführungsformen links von den Datenzellen befinden. Obwohl jede Codezelle (z. B. die Zellen 705A, 705B, 705N) von einer anderen Codezelle durch eine Datenzelle (z. B. die Zellen 710A, 710B, 710N) getrennt ist, können in einigen Ausführungsformen zwei oder mehr Codezellen nebeneinander ohne eine Datenzelle dazwischen angeordnet sein. Ebenso können in einigen Ausführungsformen zwei oder mehr Datenzellen (z. B. die Zellen 710A, 710B, 710N) ohne eine Codezelle (z. B. die Zellen 705A, 705B, 705N) dazwischen nebeneinander angeordnet sein. Allgemein können der Ausführungsstrom 700 und die Platzierung der Codezellen (z. B. der Zellen 705A, 705B, 705N) und der Datenzellen (z. B. der Zellen 710A, 710B, 710N) in dem Ausführungsstrom von der Art der auszuführenden Anweisung und der Anzahl von Subcodes in dieser Anweisung, der Reihenfolge, in der diese Subcodes auszuführen sind, sowie den Daten, auf die die Subcodes anzuwenden sind, abhängig sein.
  • Der Ausführungsstrom 700 kann unter Verwendung eines Zeigers 715 ausgeführt werden. Der Zeiger 715 gibt die aktuell ausgeführte Codezelle des Ausführungsstroms 700 an. Nachdem die Codezelle, auf die der Zeiger 715 zeigt, die Ausführung abgeschlossen hat, geht der Zeiger zur nächsten Codezelle in der Sequenz über. Zum Beispiel kann der Zeiger 715 bei der Zelle 705A beginnen. Wenn der Zeiger 715 auf die Zelle 705A zeigt, wird der Code ausgeführt, der dieser Zelle zugeordnet ist. In einigen Ausführungsformen kann der Code aus der Zelle 705A, auf die der Zeiger 715 zeigt, gelesen und in eine ausführbare Speicherzelle geladen werden. In einigen Ausführungsformen kann die Verwaltungseinheit (z. B. die Verwaltungseinheit 150) der zugeordneten Datenverarbeitungseinheit (z. B. der Datenverarbeitungseinheit 130) den Code aus der Zelle 705A lesen und den Code an eine Verwaltungseinheit einer geeigneten ausführbaren Speicherzelle zum Speichern in dem Codeabschnitt von dieser senden. Die Verwaltungseinheit kann auch die Daten von der Datenzelle 710A, die dem Code in der Codezelle 705A zugeordnet sein kann, an den Datenabschnitt der ausführbaren Speicherzelle senden. Beim Empfangen und Speichern des Codes und der Daten kann die ausführbare Speicherzelle die Ausführung starten, wie vorstehend in Bezug auf 4-6 erläutert.
  • In einigen Ausführungsformen kann der Ausführungsstrom 700 in einer Sequenz ausführbarer Speicherzellen gespeichert werden. Zum Beispiel kann Code von jeder Codezelle (z. B. den Zellen 705A, 705B,... 705N) im Codeabschnitt einer ausführbaren Speicherzelle gespeichert werden und zugeordnete Daten aus jeder Datenzelle (z. B. den Zellen 710A, 71 0B,... 710N) können im Datenabschnitt der ausführbaren Speicherzelle gespeichert werden. Wenn also der Zeiger 715 auf eine bestimmte Codezelle zeigt, können der Code aus dieser Codezelle und Daten aus der zugeordneten Datenzelle bereits in einer ausführbaren Speicherzelle gespeichert sein, und diese ausführbare Speicherzelle kann einfach mit dem Ausführen des Codes beginnen.
  • Obwohl der Zeiger 715 so erläutert wurde, dass er sich von der rechten Seite zur linken Seite des Ausführungsstroms 700 bewegt, kann sich der Zeiger in einigen Ausführungsformen von der linken Seite zur rechten Seite bewegen. Zusätzlich können, obwohl ein einzelner Zeiger gezeigt ist, in einigen Ausführungsformen mehrere Zeiger im Ausführungsstrom 700 verwendet werden, wobei jeder Zeiger für einen Abschnitt des Ausführungsstroms verwendet wird.
  • Aus dem Ausführungsstrom 700 können Ein- und Zwei-Operanden-Operationen durchgeführt werden. Zum Beispiel und unter spezieller Bezugnahme auf 8 werden beispielhafte Operationen, die unter Verwendung eines einzigen Ausführungsstroms 800 durchgeführt werden, gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Ähnlich wie der Ausführungsstrom 700 schließt der Ausführungsstrom 800 diskrete Codezellen 805A, 805B,... 805N und Datenzellen 810A, 810B,... 810N ein. Der Ausführungsstrom 800 kann besonders geeignet sein, um Ein-Operanden-Operationen durchzuführen. Operationen unter Verwendung des Ausführungsstroms 800 können sequenziell oder parallel durchgeführt werden.
  • Um Operationen sequenziell durchzuführen, wird jede Zelle des Ausführungsstroms 800 sequenziell nacheinander durchlaufen. Jede Zelle aus Daten und Code im Ausführungsstrom 800 ist einer ausführbaren Speicherzelle zugeordnet. Ferner können in einigen Ausführungsformen eine Datenzelle und eine Codezelle, die auf diese Daten anzuwenden ist, ein Code/Datenzellenpaar bilden, und dieses Paar kann derselben ausführbaren Speicherzelle zugeordnet sein. Zum Beispiel können in einigen Ausführungsformen der Code von der Codezelle 805A und die Daten von der Datenzelle 810A ein Code/Datenzellenpaar bilden und einer ersten ausführbaren Speicherzelle 815 zugeordnet sein. In ähnlicher Weise können in einigen Ausführungsformen der Code von der Codezelle 805B und die Daten von der Datenzelle 810B ein Code/Datenzellenpaar bilden und einer zweiten ausführbaren Speicherzelle 820 zugeordnet sein und so weiter.
  • Ferner können in einigen Ausführungsformen Code von der Codezelle und Daten von der Datenzelle in einem Code/Datenzellenpaar des Ausführungsstroms 800 in eine ausführbare Speicherzelle geladen werden, wenn der Zeiger 825 des Ausführungsstroms auf diese Codezelle zeigt. Zum Beispiel können Code 1 von der Codezelle 805A und Daten 1 von der Datenzelle 810A in die erste ausführbare Speicherzelle 815 geladen werden, wenn der Zeiger 825 auf die Codezelle zeigt. In anderen Ausführungsformen kann der gesamte (oder mindestens ein Abschnitt des) Ausführungsstrom(s) 800 in ausführbaren Speicherzellen gespeichert werden, bevor die Ausführung der ersten Codezelle (z. B. der Codezelle 805A) beginnt. Insbesondere können Informationen von jedem Code/Datenzellenpaar zuvor in eine ausführbare Speicherzelle geladen werden, und wenn der Zeiger 825 auf die Codezelle des Code/Datenzellenpaars zeigt, kann die ausführbare Speicherzelle mit der Ausführung beginnen. Unabhängig davon, wann der Code und die Daten in den ausführbaren Speicherzellen gespeichert sind, kann für eine sequenzielle Ausführung jedes Code/Datenzellenpaar in einer bestimmten Reihenfolge ausgeführt werden, die durch die Bewegung des Zeigers dargestellt wird. Beispielsweise kann Code 1 von der Codezelle 805A in der ersten Speicherzelle 815 vor dem Code von der Codezelle 805B ausgeführt werden.
  • Eine Ein-Operanden-Operation kann mehrere Subcodes einschließen. Zum Beispiel kann in einigen Ausführungsformen eine Ein-Operanden-Operation zwei Subcodes einschließen: einen ersten Subcode zum Anwenden des Codes auf die Daten und einen zweiten Subcode zum Speichern des Ergebnisses der Operation. Somit kann im Ausführungsstrom 800 der erste Subcode in der Codezelle 805A und der zweite Subcode in der Codezelle 805B gespeichert sein. Die Daten oder der Operand können in der Datenzelle 810A gespeichert sein. Zur Ausführung kann der erste Subcode von der Codezelle 805A im Codeabschnitt der ersten ausführbaren Speicherzelle 815 gespeichert werden und die Daten von der Datenzelle 810A können im Datenabschnitt der ersten ausführbaren Speicherzelle gespeichert werden. Wie vorstehend erörtert, kann das Laden des Codes in den Codeabschnitt und der Daten in den Datenabschnitt durch die Verwaltungseinheit (in 8 nicht gezeigt) der ersten ausführbaren Speicherzelle 815 erleichtert werden. Beim Laden des ersten Subcodes und der Daten und Anwenden des ersten Subcodes auf die Daten kann die erste ausführbare Speicherzelle 815 das Ergebnis im Datenabschnitt der zweiten ausführbaren Speicherzelle 820 speichern. Der Zeiger 825 kann sich zu der Codezelle 805B bewegen, um den zweiten Subcode in den Codeabschnitt der zweiten ausführbaren Speicherzelle 820 zu laden. Somit kann die zweite ausführbare Speicherzelle 820 Daten von der ersten ausführbaren Speicherzelle 815 und den zweiten Subcode von dem Ausführungsstrom 800 empfangen. Die zweite ausführbare Speicherzelle 820 kann dann den zweiten Subcode auf die Daten in dem Datenabschnitt von diesem anwenden. Die Ein-Operanden-Operation kann wie vorstehend in Bezug auf 4 erörtert durchgeführt werden.
  • Um Operationen auf parallele Weise durchzuführen, kann jedes Paar von Daten und Code parallel in eine ausführbare Speicherzelle geladen werden. Somit können mehrere ausführbare Speicherzellen gleichzeitig für eine parallele Ausführung eingesetzt werden. Zum Beispiel können Code 1 von der Codezelle 805A, Code 2 von der Codezelle 805B und Code von der Codezelle 805C parallel in die Codeabschnitte der ersten, zweiten bzw. dritten ausführbaren Speicherzelle geladen werden. In ähnlicher Weise können Daten von der Datenzelle 810A, Daten von der Datenzelle 810B und Daten von der Datenzelle 810C jeweils parallel in den Datenabschnitt der ersten, zweiten und dritten ausführbaren Speicherzelle geladen werden. Jede der ersten, zweiten und dritten ausführbaren Speicherzellen kann somit parallel ausgeführt werden, indem der Code in ihren jeweiligen Codeabschnitten auf die in ihren jeweiligen Datenabschnitten gespeicherten Daten angewendet wird. Eine parallele Operation ist insbesondere dann vorteilhaft, wenn die Codes in den Codezellen 805A, 805B und 805C nicht in einer bestimmten Reihenfolge ausgeführt werden sollen. Wenn zum Beispiel die Ausführung des Codes in der Codezelle 805B nicht den Abschluss der Ausführung des Codes in der Codezelle 805A erfordert, kann eine parallele Ausführung verwendet werden. In einigen Ausführungsformen kann eine parallele Ausführung besonders vorteilhaft sein, wenn derselbe Code auf unterschiedliche Daten angewendet werden soll, sodass derselbe Code in jeder Codezelle des Ausführungsstroms 800 gespeichert werden kann und jede Datenzelle eine Instanz der Daten aufweisen kann, auf die dieser Code angewendet werden soll.
  • In einigen Ausführungsformen kann ein Teil des Ausführungsstroms 800 sequenziell ausgeführt werden, während ein anderer Teil des Ausführungsstroms parallel ausgeführt werden kann. Ferner kann sich in einigen Ausführungsformen, wenn sich der Code und die Daten in jeder Zelle des Ausführungsstroms 800 ändern, auch die Ausführung zwischen sequenziell und parallel ändern. Somit kann basierend auf dem Code, der in dem Ausführungsstrom 800 gespeichert ist, und ob die Ausführung eines bestimmten Codes von dem Abschluss der Ausführung eines anderen Codes abhängig ist, der Ausführungsstrom sequenziell oder parallel ausgeführt werden.
  • Bezug nehmend auf 9 wird ein beispielhafter Ausführungsstrom 900 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. Im Gegensatz zu dem Ausführungsstrom 700, der ein einzelner Ausführungsstrom mit verschachtelten Daten und Code in einem Ausführungsstrom ist, ist der Ausführungsstrom 900 ein dualer Ausführungsstrom mit getrennten Ausführungsströmen für Daten und Code. Somit schließt der Ausführungsstrom 900 einen Datenstrom 905 und einen Codestrom 910 ein. Der Datenstrom 905 ist eingerichtet, Daten zu speichern, und der Codestrom 910 ist eingerichtet, Code zu speichern. Der Ausführungsstrom 900 kann von der Kompilierungseinheit (z. B. der Kompilierungseinheit 145) nach dem Empfangen einer Anweisung von der Hostvorrichtung (z. B. der Hostvorrichtung 105) erzeugt werden.
  • Der Datenstrom 905 und der Codestrom 910 des Ausführungsstroms 900 schließen jeweils eine Vielzahl von diskreten Zellen ein. In einigen Ausführungsformen kann jede Codezelle in dem Codestrom 910 einer Datenzelle in dem Datenstrom 905 zugeordnet sein. Ferner kann in einigen Ausführungsformen ein Codezellen-/Datenzellenpaar einer ausführbaren Speicherzelle zugeordnet sein. Ein Zeiger 915 kann zum Verfolgen der Ausführung des Codestroms 910 verwendet werden. In einigen Ausführungsformen und insbesondere, wenn der Ausführungsstrom 900 zum Durchführen von Operationen durch Verschieben verwendet wird, kann der Zeiger 915 möglicherweise nicht bereitgestellt werden oder - wenn er bereitgestellt wird - nicht verwendet werden. Durch Bereitstellen eines separaten Datenstroms (z. B. des Datenstroms 905) und eines separaten Codestroms (z. B. des Codestroms 910) kann jeder dieser Ströme unabhängig gesteuert werden. Andere Gesichtspunkte des Ausführungsstroms 900 sind dem Ausführungsstrom 700 ähnlich und werden daher nicht nochmals erörtert.
  • Ferner kann, ähnlich dem Ausführungsstrom 800, der Ausführungsstrom 900 verwendet werden, um Operationen in einer sequenziellen oder parallelen Weise durchzuführen, wie in Bezug auf 10 erörtert. Somit zeigt 10 einen beispielhaften Ausführungsstrom 1000 gemäß einigen Ausführungsformen der vorliegenden Offenbarung. Der Ausführungsstrom 1000 schließt einen Datenstrom 1005 und einen Codestrom 1010 ein. Aufgrund der getrennten Datenströme können Daten im Datenstrom 1005 unabhängig vom Code im Codestrom 1010 verwendet werden, wie durch die gestrichelten Kästchen 1015 bzw. 1020 dargestellt. Ähnlich wie beim Ausführungsstrom 800 können auch Operationen unter Verwendung des Ausführungsstroms 1000 sequenziell oder parallel durchgeführt werden.
  • Allgemein ist die sequenzielle und parallele Operation unter Verwendung des Ausführungsstroms 1000 der vorstehend erörterten sequenziellen und parallelen Operation in Bezug auf den Ausführungsstrom 800 ähnlich. Anstatt eine Codezelle und eine Datenzelle desselben Stroms (z. B. des Ausführungsstroms 800) einer ausführbaren Speicherzelle zuzuordnen, ordnet der Ausführungsstrom 1000 eine Codezelle aus dem Codestrom 1010 und eine Datenzelle aus dem Datenstrom 1005 einer ausführbaren Speicherzelle zu. Um beispielsweise eine sequenzielle Ein-Operanden-Operation durchzuführen, kann die Kompilierungseinheit (z. B. die Kompilierungseinheit 145) Daten von der Datenzelle 1025A senden, um in einen Datenabschnitt einer ersten ausführbaren Speicherzelle 1030 geladen zu werden. Die Kompilierungseinheit kann auch Code von der Codezelle 1035A senden, um in einen Codeabschnitt der ersten ausführbaren Speicherzelle 1030 geladen zu werden. In ähnlicher Weise können Daten von der Datenzelle 1025B und Code von der Codezelle 1035B in eine zweite ausführbare Speicherzelle 1040 geladen werden. Die zweite ausführbare Speicherzelle 1040 kann für eine sequenzielle Operation gleich oder verschieden von der ersten ausführbaren Speicherzelle 1030 sein. Somit wird jedes Codezellen-/Datenzellenpaar des Ausführungsstroms 1000 in einer sequenziellen Reihenfolge ausgeführt.
  • Um eine Zwei-Operanden-Operation sequenziell unter Verwendung des Ausführungsstroms 1000 durchzuführen, kann eine Schiebeoperation verwendet werden. Die Schiebeoperation wird weiter unten unter Bezugnahme auf 11 näher erläutert. Zur parallelen Ausführung unter Verwendung des Ausführungsstroms 1000 kann jedes Codezellen-/Datenzellenpaar einer separaten ausführbaren Speicherzelle zugeordnet sein. Eine parallele Ausführung kann vorteilhaft sein, wenn der Code nicht in einer bestimmten Reihenfolge ausgeführt werden soll (z. B. wenn die Ausführung von Code in einer Codezelle nicht von der Ausführung von Code in einer anderen Codezelle abhängig ist). Um den Ausführungsstrom 1000 parallel auszuführen, können die Daten von der Datenzelle 1025A und Code von der Codezelle 1035A in die erste ausführbare Speicherzelle 1030 geladen werden, die Daten von der Datenzelle 1025B und Code von der Codezelle 1035B können parallel in die zweite ausführbare Speicherzelle 1040 geladen werden und so weiter. Die parallele Ausführung des Ausführungsstroms 1000 ist der parallelen Ausführung des vorstehend erörterten Ausführungsstroms 800 ähnlich.
  • Nun Bezug nehmend auf 11 ist ein beispielhafter Ausführungsstrom 1100 gemäß einigen Ausführungsformen der vorliegenden Offenbarung gezeigt. 11 wird in Verbindung mit 5 und 6 erörtert. Der Ausführungsstrom 1100 ist dem Ausführungsstrom 1000 ähnlich. Somit schließt der Ausführungsstrom 1100 einen Datenstrom 1105 und einen Codestrom 1110 ein. Sowohl der Datenstrom 1105 als auch der Codestrom 1110 schließen eine Vielzahl von Zellen zum Speichern von Daten bzw. Code ein. Eine Zwei-Operanden-Operation kann wie vorstehend in Bezug auf 5 und 6 erörtert durchgeführt werden. Insbesondere kann die Zwei-Operanden-Operation von 5 und 6 unter Verwendung einer Schiebeoperation durchgeführt werden. Um die Schiebeoperation durchzuführen, kann der Codestrom 1110 jeweils um eine Codezelle verschoben werden. Wie vorstehend erläutert, kann eine Anweisung für eine Zwei-Operanden-Operation mehrere Subcodes wie folgt einschließen: einen ersten Subcode zum Identifizieren des ersten Operanden als Links/Rechts-Operand, einen zweiten Subcode zum Identifizieren des zweiten Operanden als Links/Rechts-Operand, einen dritten Subcode zum Anwenden des Codes auf den ersten und den zweiten Operanden und einen vierten Subcode zum Verwalten des Ergebnisses der Operation.
  • Somit kann zum Durchführen einer Zwei-Operanden-Operation der erste Operand in der Datenzelle 1115A des Datenstroms 1105 und der zweite Operand in der Datenzelle 1115B des Datenstroms gespeichert werden. In ähnlicher Weise und zu Beginn der Operation kann der erste Subcode in der Codezelle 1120A des Codestroms 1110 gespeichert werden. Die Datenzelle 1115A und die Codezelle 1120A können einer ersten ausführbaren Speicherzelle zugeordnet sein. Die Datenzelle 1115B und die Codezelle 1120B können einer zweiten ausführbaren Speicherzelle zugeordnet sein. Bei Operation 1125 kann der erste Operand von der Datenzelle 1115A in den Datenabschnitt der ersten ausführbaren Speicherzelle geladen werden, und der zweite Operand kann von der Datenzelle 1115B in den Datenabschnitt der zweiten ausführbaren Speicherzelle geladen werden. Zusätzlich kann der erste Subcode in den Codeabschnitt der ersten ausführbaren Speicherzelle geladen werden. Die Operation 1125 führt zu den Operationen 510, 515 und 520 von 5 und den Operationen 610, 615 und 620 von 6. Beim Laden des ersten Operanden und des ersten Subcodes in die erste ausführbare Speicherzelle kann die erste ausführbare Speicherzelle die Operation 530 von 5 und die Operation 630 von 6 durchführen.
  • Nach Abschluss der Ausführung der Operationen 530/640 von 5/6 verschiebt der Ausführungsstrom 1100 den Codestrom 1110 bei Operation 1130 um eine Codezelle. Aufgrund der Schiebeoperation erhält die Codezelle 1120B den ersten Subcode, während der zweite Subcode in die Codezelle 1120A geladen wird. Auch bei der Operation 1130 wird der erste Subcode von der Codezelle 1120B in den Codeabschnitt der zweiten ausführbaren Speicherzelle geladen. Somit führt die Operation 1130 zu der Operation 525 von 5 und der Operation 625 von 6. In einigen Ausführungsformen kann der zweite Operand von der Datenzelle 1115B in die zweite ausführbare Speicherzelle bei der Operation 1130 statt bei der Operation 1125 geladen werden. Zusätzlich wird nun in der Operation 1130 der zweite Subcode von der Codezelle 1120A in den Codeabschnitt der ersten ausführbaren Speicherzelle geladen. Somit speichert bei der Operation 1130 die erste ausführbare Speicherzelle den ersten Operanden und den zweiten Subcode, während die zweite ausführbare Speicherzelle den zweiten Operanden und den ersten Subcode speichert. Die zweite ausführbare Speicherzelle kann die Operation 535 von 5 und die Operation 635 von 6 anwenden.
  • Bei Operation 1135 wird der dritte Subcode in die Codezelle 1120A geladen und der zweite Subcode wird in die Codezelle 1120B verschoben. Außerdem wird in der Operation 1135 der dritte Subcode in die erste ausführbare Speicherzelle geladen und der zweite Subcode in die zweite ausführbare Speicherzelle geladen. Wenn weiterhin der Prozess von 5 zum Durchführen der Zwei-Operanden-Operation verwendet wird, kann die zweite ausführbare Speicherzelle den zweiten Operanden (bei der Operation 540) zu der ersten ausführbaren Speicherzelle auf dieser Stufe übertragen. Wird das Verfahren nach 6 verwendet, weist die erste ausführbare Speicherzelle aufgrund der Schiebeoperation bereits den zweiten Subcode auf. Somit erfolgt die Operation 640 aufgrund der Schiebeoperation. Auch bei der Operation 1135 führt die erste ausführbare Speicherzelle beim Empfangen des dritten Subcodes die Zwei-Operanden-Operation durch, wie bei der Operation 545 von 5 und der Operation 645 von 6 erörtert.
  • Dann wird in Operation 1140 die Codezelle 1120A mit dem vierten Subcode geladen, während der dritte Subcode in die Codezelle 1120B verschoben wird. Somit wird in der Operation 1140 der vierte Subcode in die erste ausführbare Speicherzelle geladen und der dritte Subcode wird in die zweite ausführbare Speicherzelle geladen. Nach dem Empfang des vierten Subcodes speichert die erste ausführbare Speicherzelle das Ergebnis der Zwei-Operanden-Operation gemäß dem vierten Subcode. Bei Operation 1145 wird der vierte Subcode in die Codezelle 1120B verschoben und in die zweite ausführbare Speicherzelle geladen. Das Laden signalisiert der zweiten ausführbaren Speicherzelle, dass die Zwei-Operanden-Operation beendet ist. Somit empfangen für eine Zwei-Operanden-Operation jede der ersten und zweiten ausführbaren Speicherzellen alle der vier Subcodes.
  • Somit stellt die vorliegende Offenbarung eine ausführbare Speicherzelle bereit, die eingerichtet ist, Daten an dem Ort zu verarbeiten, an dem die Daten gespeichert werden. Die vorliegende Offenbarung stellt auch einen Mechanismus zum Umwandeln von Anweisungen in eine Form bereit, die für die ausführbaren Speicherzellen zur Verarbeitung leicht verständlich ist. Es versteht sich, dass alle hierin verwendeten Beispiele lediglich zu Zwecken der Erläuterung dienen und in keiner Weise einschränkend sein sollen.
  • Der hier beschriebene Gegenstand der Erfindung veranschaulicht manchmal unterschiedliche Komponenten, die in unterschiedlichen anderen Komponenten enthalten oder mit ihnen verbunden sind. Es versteht sich, dass solche dargestellten Architekturen nur beispielhaft sind, und dass tatsächlich viele andere Architekturen implementiert werden können, die dieselbe Funktionalität erzielen. In einem konzeptionellen Sinn ist jede Anordnung von Komponenten zum Erzielen derselben Funktionalität tatsächlich „assoziiert“, so dass die gewünschte Funktionalität erzielt wird. Somit können zwei beliebige Komponenten, die hier kombiniert sind, um eine bestimmte Funktionalität zu erzielen, als „miteinander assoziiert“ betrachtet werden, so dass die gewünschte Funktionalität erzielt wird, unabhängig von Architekturen oder medienübergreifenden Komponenten. Gleichermaßen können zwei beliebige so miteinander assoziierte Komponenten auch als „betriebsfähig miteinander verbunden“ oder „betriebsfähig miteinander gekoppelt“ betrachtet werden, um die gewünschte Funktionalität zu erzielen, und zwei beliebige Komponenten, die so miteinander assoziiert werden können, können auch als „betriebsfähig miteinander koppelbar“ betrachtet werden, um die gewünschte Funktionalität zu erzielen. Spezielle Beispiele für betriebsfähig miteinander koppelbar schließen physisch steckbare und/oder physikalisch interagierende Komponenten und/oder drahtlos interagierbare und/oder drahtlos interagierende Komponenten und/oder logisch interagierende und/oder logisch interagierbare Komponenten ein, sind aber nicht darauf beschränkt.
  • Bezüglich der Verwendung von im Wesentlichen jeglicher Ausdrücke im Plural und/oder Singular hierin kann ein Fachmann vom Plural in den Singular und/oder vom Singular in den Plural umwandeln, wie es für den Kontext und/oder die Anwendung geeignet ist. Aus Gründen der Klarheit können die verschiedenen Singular-/Plural-Vertauschungen hier ausdrücklich dargelegt werden.
  • Ein Fachmann wird verstehen, dass die hier verwendeten Ausdrücke im Allgemeinen und insbesondere in den beiliegenden Ansprüchen (z. B. Hauptteile der beigefügten Ansprüche) generell als „offene“ Ausdrücke beabsichtigt sind (d. h. der Begriff „einschließlich“ muss als „einschließlich, aber nicht darauf beschränkt“ ausgelegt werden, der Begriff „weist auf“ muss als „weist mindestens auf“ ausgelegt werden, der Begriff „schließt ein“ muss als „schließt ein, ist aber nicht darauf beschränkt“ usw. ausgelegt werden). Ein Fachmann wird ferner verstehen, dass, falls eine spezielle Anzahl in einer eingeleiteten Anspruchs-Rezitation beabsichtigt ist, eine solche Absicht in dem Anspruch explizit angegeben ist, und wenn eine solche Rezitation fehlt, keine solche Absicht vorhanden ist. Als Hilfe zum Verständnis können zum Beispiel in den folgenden beiliegenden Ansprüchen die einleitenden Formulierungen „mindestens ein/e“ und „ein/e oder mehrere“ verwendet werden, um Anspruchs-Rezitationen einzuleiten. Die Verwendung solcher Formulierungen darf jedoch nicht so ausgelegt werden, dass die Einleitung einer Anspruchs-Rezitation durch die unbestimmten Artikel „ein“ oder „eine“ bedeutet, dass jeder spezielle Anspruch, der eine solche eingeleitete Anspruchs-Rezitation enthält, auf Erfindungen eingeschränkt ist, die nur eine solche Rezitation enthalten, sogar wenn der selbe Anspruch die einleitenden Formulierungen „ein/e oder mehrere“ und „mindestens ein/e“ und unbestimmte Artikel, wie „ein“ oder „eine“ enthält (z. B. muss „ein“ und/oder „eine“ in der Regel so ausgelegt werden, dass es „mindestens ein/e“ oder „ein/e oder mehrere“ bedeutet); Dasselbe gilt auch für die Verwendung von bestimmten Artikeln, die dazu benutzt werden, Anspruchs-Rezitationen einzuleiten. Zusätzlich dazu wird, sogar wenn eine spezielle Anzahl einer eingeleiteten Anspruchs-Rezitation explizit angegeben wird, ein Fachmann erkennen, dass eine solche Rezitation in der Regel so interpretiert werden muss, dass mindestens die angegebene Anzahl gemeint ist (z. B. bedeutet die bloße Rezitation von „zwei Rezitationen“ ohne weitere Modifizierer in der Regel mindestens zwei Rezitationen oder zwei oder mehr Rezitationen). Ferner ist in den Fällen, in denen eine Konvention verwendet wird, die „mindestens ein/e/s von A, B und C, usw.“ entspricht, eine solche Konstruktion im Allgemeinen in dem Sinn beabsichtigt, in dem ein Fachmann die Konvention verstehen würde (z. B. wird „ein System, das mindestens eines von A, B und C aufweist“ Systeme einschließen, die A alleine, B alleine, C alleine, A und B zusammen, A und C zusammen, B und C zusammen und/oder A, B und C zusammen usw. aufweisen, ist aber nicht darauf beschränkt). In diesen Fällen, in denen eine Konvention verwendet wird, die „mindestens einem/einer von A, B oder C, usw.“ entspricht, ist eine solche Konstruktion im Allgemeinen in dem Sinn beabsichtigt, in dem ein Fachmann die Konvention verstehen würde (z. B. würde „ein System, das mindestens eines von A, B oder C aufweist“ Systeme einschließen, die A alleine, B alleine, C alleine, A und B zusammen, A und C zusammen, B und C zusammen und/oder A, B und C zusammen usw. aufweisen, ist aber nicht darauf beschränkt). Ein Fachmann wird ferner verstehen, dass praktisch jedes disjunktive Wort und/oder praktisch jede Formulierung, die zwei oder mehr alternative Begriffe darlegt, in der Beschreibung, den Ansprüchen oder Zeichnungen so verstanden werden sollte, dass die Möglichkeit besteht, dass es einen der Begriffe, einen von beiden Begriffen oder beide Begriffe einschließt. Zum Beispiel wird die Formulierung „A oder B“ so verstanden, dass die Möglichkeiten „A“ oder „B“ oder „A und B“ eingeschlossen sind. Ferner bedeutet die Verwendung der Wörter „ungefähr“, „etwa“, „rund“, „im Wesentlichen“ usw., sofern nicht anders angegeben, ein Plus oder Minus von zehn Prozent.
  • Die vorhergehende Beschreibung der veranschaulichenden Ausführungsformen wurde zu Zwecken der Veranschaulichung und Beschreibung vorgelegt. Sie soll nicht erschöpfend oder beschränkend in Bezug auf die genaue offenbarte Form sein, und Modifikationen und Variationen sind im Lichte der obigen Lehren möglich oder können aus der Praxis der offenbarten Ausführungsformen erlangt werden. Es ist beabsichtigt, dass der Schutzumfang der Erfindung durch die hieran angehängten Ansprüche definiert wird.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 16/354053 [0001]
    • US 16/354038 [0001]

Claims (20)

  1. Speichersystem, aufweisend: einen Speicher, der eine erste ausführbare Speicherzelle aufweist; und eine Kompilierungseinheit, die eingerichtet ist zum: Empfangen einer Sequenz von Anweisungen von einer Host-Vorrichtung; Umwandeln jeder der Sequenz von Anweisungen in einen Ausführungsstrom; Laden eines ersten Codes aus dem Ausführungsstrom in einen Codeabschnitt der ersten ausführbaren Speicherzelle; und Laden von ersten Daten aus dem Ausführungsstrom in einen Datenabschnitt der ersten ausführbaren Speicherzelle; wobei die erste ausführbare Speicherzelle eingerichtet ist, den ersten Code über eine Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle auf die ersten Daten anzuwenden.
  2. Speichersystem gemäß Anspruch 1, wobei der Ausführungsstrom eine Vielzahl von Zellen aufweist, wobei jede der Vielzahl von Zellen entweder Code oder Daten speichert.
  3. Speichersystem gemäß Anspruch 1, wobei der Ausführungsstrom einen Datenstrom zum Speichern von Daten und einen Codestrom zum Speichern von Code aufweist.
  4. Speichersystem gemäß Anspruch 1, wobei die Kompilierungseinheit eingerichtet ist, zu bestimmen, dass eine erste Anweisung in der Sequenz von Anweisungen eine Vielzahl von Subcodes aufweist, und wobei die Kompilierungseinheit ferner eingerichtet ist, jeden der Vielzahl von Subcodes in dem Ausführungsstrom in einer bestimmten Sequenz zu speichern.
  5. Speichersystem gemäß Anspruch 4, wobei jeder der Vielzahl von Subcodes durch die erste ausführbare Speicherzelle in der bestimmten Sequenz ausgeführt wird.
  6. Speichersystem gemäß Anspruch 1, wobei die Kompilierungseinheit ferner eingerichtet ist zum: Empfangen der Angabe, dass die Anwendung des ersten Codes auf die ersten Daten in der ersten ausführbaren Speicherzelle abgeschlossen ist; Laden eines zweiten Codes in den Codeabschnitt einer zweiten ausführbaren Speicherzelle des Rechensystems nach Empfangen der Angabe des Abschlusses; und Laden von zweiten Daten in den Datenabschnitt der zweiten ausführbaren Speicherzelle nach Empfangen der Angabe des Abschlusses.
  7. Speichersystem gemäß Anspruch 1, wobei der Ausführungsstrom eine Vielzahl von Subcodes und eine Vielzahl von Daten aufweist, wobei jeder der Vielzahl von Subcodes einer der Vielzahl von Daten zugeordnet ist, um eine Vielzahl von Code/Daten-Paaren zu bilden, und wobei jedes der Vielzahl von Code/Daten-Paaren einer ausführbaren Speicherzelle in dem Rechensystem zur Ausführung zugeordnet ist.
  8. Speichersystem gemäß Anspruch 7, wobei jedes der Vielzahl von Code/Daten-Paaren sequentiell in einer bestimmten Sequenz ausgeführt wird.
  9. Speichersystem gemäß Anspruch 7, wobei jedes der Vielzahl von Code/Daten-Paaren parallel ausgeführt wird.
  10. Speichersystem gemäß Anspruch 1, wobei eine Zwei-Operanden-Operation unter Verwendung einer Schiebeoperation in dem Ausführungsstrom durchgeführt wird.
  11. Speichersystem, aufweisend: einen Speicher, der eine erste ausführbare Speicherzelle aufweist; und eine Kompilierungseinheit, die eingerichtet ist zum: Erzeugen eines Codestroms aus einer Sequenz von Anweisungen, wobei der Codestrom eine Vielzahl von Codezellen aufweist, wobei jede der Vielzahl von Codezellen einen Subcode speichert; Erzeugen eines Datenstroms aus der Sequenz von Anweisungen zum Speichern eines ersten Operanden und eines zweiten Operanden; Laden eines ersten Subcodes in die erste ausführbare Speicherzelle, wobei der erste Subcode in einer ersten Codezelle der Vielzahl von Codezellen gespeichert ist; Laden des ersten Operanden in die erste ausführbare Speicherzelle; und Verschieben des ersten Subcodes von der ersten Codezelle zu einer zweiten Codezelle der Vielzahl von Codezellen.
  12. Speichervorrichtung gemäß Anspruch 11, wobei die Kompilation ferner eingerichtet ist zum: Laden eines zweiten Subcodes in die erste Codezelle; Laden des zweiten Subcodes in die erste ausführbare Speicherzelle; Laden des ersten Subcodes aus der zweiten Codezelle in eine zweite ausführbare Speicherzelle des Speichers; und Verschieben des zweiten Subcodes in die zweite Codezelle.
  13. Speichersystem gemäß Anspruch 11, wobei die Kompilierungseinheit ferner eingerichtet ist, den zweiten Operanden in eine zweite ausführbare Speicherzelle des Speichers zu laden.
  14. Speichersystem gemäß Anspruch 13, wobei die erste ausführbare Speicherzelle und die zweite ausführbare Speicherzelle zusammen eine Zwei-Operanden-Operation durchführen.
  15. Nichtflüchtiger computerlesbarer Datenträger, der darin eingebettete computerausführbare Anweisungen enthält, die, wenn sie von einem Prozessor ausgeführt werden, bewirken, dass der Prozessor einen Prozess durchführt, aufweisend: Empfangen einer Sequenz von Anweisungen; Umwandeln jeder der Sequenz von Anweisungen, um einen Ausführungsstrom zu erzeugen; Laden eines ersten Codes aus dem Ausführungsstrom in einen Codeabschnitt einer ersten ausführbaren Speicherzelle; Laden erster Daten aus dem Ausführungsstrom in einen Datenabschnitt der ersten ausführbaren Speicherzelle; und Anwenden des ersten Codes auf die ersten Daten durch eine erste Arithmetik- und Logikeinheit der ersten ausführbaren Speicherzelle.
  16. Nichtflüchtiger computerlesbarer Datenträger gemäß Anspruch 15, wobei der Prozess ferner das Erzeugen eines einzelnen Ausführungsstroms aufweist, der mit Daten verschachtelten Code aufweist.
  17. Nichtflüchtiger computerlesbarer Datenträger gemäß Anspruch 15, wobei der Prozess ferner das Erzeugen eines Codestroms zum Speichern von Code und eines Datenstroms zum Speichern von Daten aufweist.
  18. Nichtflüchtiger computerlesbarer Datenträger gemäß Anspruch 15, wobei eine erste Anweisung in der Sequenz von Anweisungen eine Vielzahl von Subcodes aufweist, die in einer bestimmten Sequenz auszuführen sind, und wobei der Ausführungsstrom die Vielzahl von Subcodes in der bestimmten Sequenz speichert.
  19. Nichtflüchtiger computerlesbarer Datenträger gemäß Anspruch 15, wobei der Ausführungsstrom eine Vielzahl von Zellen aufweist und wobei jede der Vielzahl von Zellen einer ausführbaren Speicherzelle zugeordnet ist.
  20. Nichtflüchtiger computerlesbarer Datenträger gemäß Anspruch 15, wobei der Prozess ferner Folgendes aufweist: Laden eines zweiten Codes in den Codeabschnitt einer zweiten ausführbaren Speicherzelle nach Empfangen einer Angabe des Abschlusses einer ersten Operation, die von der ersten ausführbaren Speicherzelle durchgeführt wird; und Laden von zweiten Daten in den Datenabschnitt der zweiten ausführbaren Speicherzelle nach Empfangen der Angabe des Abschlusses der ersten Operation.
DE112019005520.8T 2019-03-14 2019-12-19 Ausführbare speicherzelle Pending DE112019005520T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/354,053 2019-03-14
US16/354,053 US10884664B2 (en) 2019-03-14 2019-03-14 Executable memory cell
PCT/US2019/067660 WO2020185282A1 (en) 2019-03-14 2019-12-19 Executable memory cell

Publications (1)

Publication Number Publication Date
DE112019005520T5 true DE112019005520T5 (de) 2021-09-16

Family

ID=72423446

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112019005520.8T Pending DE112019005520T5 (de) 2019-03-14 2019-12-19 Ausführbare speicherzelle

Country Status (4)

Country Link
US (1) US10884664B2 (de)
CN (1) CN113168399B (de)
DE (1) DE112019005520T5 (de)
WO (1) WO2020185282A1 (de)

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4293733A (en) 1979-11-13 1981-10-06 John A. Weithman Safety cover for electrical outlets
EP0469393B1 (de) 1990-07-30 1999-10-06 Texas Instruments Incorporated Statisches Speicherfeld mit wahlfreiem Zugriff, welches mindestens eine arithmetisch-logische Einheit enthält
EP0584783A3 (en) 1992-08-25 1994-06-22 Texas Instruments Inc Method and apparatus for improved processing
SG74580A1 (en) 1996-03-08 2000-08-22 Hitachi Ltd Semiconductor ic device having a memory and a logic circuit implemented with a single chip
US20030023960A1 (en) 2001-07-25 2003-01-30 Shoab Khan Microprocessor instruction format using combination opcodes and destination prefixes
GB0125711D0 (en) * 2001-10-26 2001-12-19 Ibm In-memory arithmetic
JP2004005287A (ja) 2002-06-03 2004-01-08 Hitachi Ltd コプロセッサを搭載したプロセッサシステム
US8117567B2 (en) 2007-12-03 2012-02-14 International Business Machines Corporation Structure for implementing memory array device with built in computation capability
US8286198B2 (en) * 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US8819651B2 (en) * 2008-07-22 2014-08-26 International Business Machines Corporation Efficient software cache accessing with handle reuse
US8327316B2 (en) * 2008-09-30 2012-12-04 Ics Triplex Isagraf Inc. Compilation model
EP2996035A1 (de) 2008-10-15 2016-03-16 Hyperion Core, Inc. Datenverarbeitungsvorrichtung
US20120017070A1 (en) 2009-03-25 2012-01-19 Satoshi Hieda Compile system, compile method, and storage medium storing compile program
US8234460B2 (en) 2009-06-04 2012-07-31 Micron Technology, Inc. Communication between internal and external processors
US9606807B2 (en) 2009-06-04 2017-03-28 Micron Technology, Inc. Direct communication with a processor internal to a memory device
US8521958B2 (en) 2009-06-04 2013-08-27 Micron Technology, Inc. Internal processor buffer
US9477636B2 (en) 2009-10-21 2016-10-25 Micron Technology, Inc. Memory having internal processors and data communication methods in memory
US8719516B2 (en) 2009-10-21 2014-05-06 Micron Technology, Inc. Memory having internal processors and methods of controlling memory access
US20110314263A1 (en) 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
US20120159193A1 (en) * 2010-12-18 2012-06-21 Microsoft Corporation Security through opcode randomization
US8780634B2 (en) 2012-11-09 2014-07-15 Sandisk Technologies Inc. CAM NAND with OR function and full chip search capability
US20150106574A1 (en) 2013-10-15 2015-04-16 Advanced Micro Devices, Inc. Performing Processing Operations for Memory Circuits using a Hierarchical Arrangement of Processing Circuits
US9189214B2 (en) * 2013-10-30 2015-11-17 International Business Machines Corporation Code stack management
US10223260B2 (en) * 2014-03-19 2019-03-05 International Business Machines Corporation Compiler-generated memory mapping hints
US9710245B2 (en) * 2014-04-04 2017-07-18 Qualcomm Incorporated Memory reference metadata for compiler optimization
US10102158B1 (en) * 2014-04-22 2018-10-16 Accusoft Corporation Methods and apparatus for processing multiple streams of data
US9875358B2 (en) * 2014-06-20 2018-01-23 Microsoft Technology Licensing, Llc Preventing code modification after boot
US9959203B2 (en) * 2014-06-23 2018-05-01 Google Llc Managing storage devices
US10860323B2 (en) 2015-10-16 2020-12-08 Samsung Electronics Co., Ltd. Method and apparatus for processing instructions using processing-in-memory
GB2549775B (en) * 2016-04-28 2018-05-16 Imagination Tech Ltd Directed placement of data in memory
US10198349B2 (en) * 2016-09-19 2019-02-05 Advanced Micro Devices, Inc. Programming in-memory accelerators to improve the efficiency of datacenter operations
US10732866B2 (en) 2016-10-27 2020-08-04 Samsung Electronics Co., Ltd. Scaling out architecture for DRAM-based processing unit (DPU)
US10521229B2 (en) 2016-12-06 2019-12-31 Gsi Technology, Inc. Computational memory cell and processing array device using memory cells
DE102017103347B4 (de) 2017-02-17 2023-07-20 Infineon Technologies Ag Verarbeitung von daten in speicherzellen eines speichers

Also Published As

Publication number Publication date
US10884664B2 (en) 2021-01-05
US20200293223A1 (en) 2020-09-17
CN113168399A (zh) 2021-07-23
WO2020185282A1 (en) 2020-09-17
CN113168399B (zh) 2023-09-19

Similar Documents

Publication Publication Date Title
DE2317870C2 (de) Schaltungsanordnung zur Steuerung der Datenübertragung zwischen dem Hauptspeicher und mindestens einem E/A-Gerät in einer digitalen Datenverarbeitungsanlage
DE1499722C2 (de) Einrichtung zur Modifizierung von Informationswörtern
DE69637020T2 (de) Überpartitionierungssystem und-verfahren zum Erhöhen der Anzahl von Prüfpunkten in komponentenbasierten Parallelanwendungen
DE69101242T2 (de) Reduzierungsprozessor.
DE2555963C2 (de) Einrichtung zur Funktionsmodifizierung
DE68927218T2 (de) Verfahren und Vorrichtung für Zustandskode in einem Zentralprozessor
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE60132633T2 (de) Digitale signalprozessorvorrichtung
DE3689595T2 (de) Datenverarbeitungssystem.
DE10297624T5 (de) Steuerung von Kompatibilitätsgraden von Binärcode-Übersetzungen zwischen Befehlssatzarchitekturen
DE69030931T2 (de) Mehrfachsequenzprozessorsystem
DE2630323B2 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem Hilfsspeicher und einer Vorausschaulogik
DE112012000303T5 (de) Dynamische binäre Optimierung
DE1815078B2 (de) Elektronisches Datenverarbeitungssystem
DE2928488A1 (de) Speicher-subsystem
DE1178623B (de) Programmgesteuerte datenverarbeitende Maschine
DE68929080T2 (de) Anordnung zum Speichern von Informationen für einen Datenanbieterprozessor
EP0097725A1 (de) Einrichtung im Befehlswerk eines mikroprogrammgesteuerten Prozessors zur direkten hardwaregesteuerten Ausführung bestimmter Instruktionen
DE2440628A1 (de) Datenverarbeitungsanlage mit mikroprogrammierung
DE112018004247T5 (de) Datenverarbeitungsauslagerung unter verwendung einer speicherinternen codeausführung
DE102018202446A1 (de) Verfahren zum Modularisieren einer Softwarearchitektur
DE1179027B (de) Speicherprogrammierte digitale Rechenanlage
DE2245284A1 (de) Datenverarbeitungsanlage
DE2136210A1 (de) Zentraleinheit fur eine EDV-Anlage
DE112019005520T5 (de) Ausführbare speicherzelle

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

Representative=s name: MEWBURN ELLIS LLP, DE

R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

R081 Change of applicant/patentee

Owner name: SANDISK TECHNOLOGIES, INC. (N.D.GES. D. STAATE, US

Free format text: FORMER OWNER: WESTERN DIGITAL TECHNOLOGIES, INC., SAN JOSE, CA, US