-
RÜCKVERWEISUNG AUF VERWANDTE ANMELDUNGEN
-
Diese Anmeldung beansprucht die Priorität der vorläufigen
US-Patentanmeldung Nr. 62/702.713 , eingereicht am 24. Juli 2018, und bezieht sich auf eine Anmeldung mit dem Titel „Realization of Neural Networks with Ternary Inputs and Binary Weights in NAND Memory Arrays“, eingereicht von Hoang et al., die gleichzeitig eingereicht wurde mit der vorliegenden Anmeldung, auf die beide hiermit ausdrücklich Bezug genommen wird.
-
HINTERGRUND
-
Künstliche neuronale Netze finden zunehmend Verwendung künstlichen Intelligenz- und maschinellen Lernanwendungen. In einem künstlichen neuronalen Netz wird ein Satz von Eingängen durch eine oder mehrere dazwischenliegende oder verborgene Schichten verbreitet, um einen Ausgang zu erzeugen. Die Schichten, die den Eingang mit dem Ausgang verbinden, sind durch Sätze von Gewichten verbunden, die in einer Trainings- oder Lernphase erzeugt werden, indem ein Satz mathematischer Manipulationen bestimmt wird, um den Eingang in den Ausgang umzuwandeln, wobei durch die Schichten die Wahrscheinlichkeit jeden Ausgangs berechnet wird. Sobald die Gewichte festgelegt sind, können sie in der Inferenzphase verwendet werden, um den Ausgang von einer Reihe von Eingängen zu bestimmen. Obwohl solche neuronalen Netze hochgenaue Ergebnisse liefern können, sind sie äußerst rechenintensiv, und die Datenübertragungen, die beim Lesen der Gewichte, die die verschiedenen Schichten aus dem Speicher verbinden und sie in die Verarbeitungseinheiten einer Verarbeitungseinheit übertragen, involviert sind, können ziemlich intensiv sein.
-
Figurenliste
-
Gleich nummerierte Elemente beziehen sich auf gemeinsame Komponenten in den verschiedenen Figuren.
- 1 ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems darstellt, das mit dem Host verbunden ist.
- 2 ist ein Blockdiagramm einer Ausführungsform einer Front-End-Prozessorschaltung. In einigen Ausführungsformen ist die Front-End-Prozessorschaltung Teil einer Steuerung.
- 3 ist ein Blockdiagramm einer Ausführungsform einer Back-End-Prozessorschaltung. In einigen Ausführungsformen ist die Back-End-Prozessorschaltung Teil einer Steuerung.
- 4 ist ein Blockdiagramm einer Ausführungsform eines Speicherpakets.
- 5 ist ein Blockdiagramm einer Ausführungsform eines Speicherchips.
- 6 zeigt ein einfaches Beispiel eines künstlichen neuronalen Netzes.
- 7A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Trainieren eines neuronalen Netzes beschreibt, um einen Satz von Gewichten zu erzeugen.
- 7B ist ein Flussdiagramm, das eine Ausführungsform eines Inferenzprozesses unter Verwendung eines neuronalen Netzes beschreibt.
- 8 ist eine schematische Darstellung der Verwendung einer Matrixmultiplikation in einem neuronalen Netz.
- 9 ist eine Tabelle zur Darstellung des Ausgangs eines binären neuronale Netzes als Reaktion auf die verschiedenen Eingang-Gewicht-Kombinationen.
- 10 zeigt eine Ausführungsform für eine Einheitssynapse-Zelle zum Speichern eines binären Gewichts in einem Paar von in Reihe geschalteten Speicherzellen.
- 11 zeigt die Verteilung von Schwellenspannungen zum Speichern von Datenzuständen in einem Binär- oder Einpegel-Zellenspeicher (SLC).
- 12 und 13 zeigen eine Ausführungsform zur Implementierung eines binären neuronalen Netzes, das ein Paar von in Reihe geschalteten der SLC-Speicherzellen als Einheitssynapse verwendet.
- 14 zeigt die Eingliederung der Einheitssynapsen in ein NAND-Array.
- 15 und 16 betrachten ein Beispiel der Berechnung eines Skalarprodukts für die binäre neuronale Netz-Algebra und wie dies unter Verwendung einer zählerbasierten summierenden digitalen Schaltung für eine Ausführungsform eines SLC NAND binären neuronalen Netzes (BNN) zu implementieren ist.
- 17 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines binären neuronalen Netzes als Inferenz.
- 18 zeigt eine Ausführungsform einer Summationsschaltung für ein SLC NAND-Array zur Unterstützung von binären neuronalen Netzen.
- 19 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines ternären binären neuronalen Netzes als Inferenz, wie in den Tabellen der 15 und 16 und der Array-Architektur 18 dargestellt.
- 20 und 21 zeigen ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array.
- 22 veranschaulicht ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array zur Erzielung einer hohen Parallelität über NAND-Blöcke durch das Ausnutzen mehrerer Blöcke in einer einzigen Ebene.
- 23 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung ähnlich zu 17, die jedoch die in 27 dargestellte Mehrblockparallelität enthält.
- 24 zeigt zusätzliche Ausführungsformen, die gleichzeitig über mehrere Ebenen auf die Eingänge eines neuronalen Netzes schließen können.
- 25 zeigt eine Ausführungsform einer planaren Leitung für verschiedene neuronale Netzschichten.
- 26 zeigt eine Ausführungsform, bei der Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder beiden gespeichert werden können.
-
DETAILLIERTE BESCHREIBUNG
-
Um die Rechenkomplexität zu reduzieren und die Speicheranforderungen neuronaler Netze zu lockern, wurden binäre neuronale Netze (BNNs) eingeführt. In BNNs werden die Gewichte und Eingänge des neuronalen Netzes in Binärwerte (-1, +1) gekürzt, und die Binärarithmetik vereinfacht die Multiplikation und Addition zu XNOR- und Bitzähloperationen. Die folgende Offenbarung präsentiert Techniken zum Ausnutzen der Struktur eines NAND-Speichers zum Speichern der Gewichte von binären neuronalen Netzen und zum Ausführen der Multiplikations- und Akkumulationsoperationen innerhalb des NAND-Speichers.
-
Jedes binäre Gewicht wird in einer Einheitssynapse gespeichert, die aus einem Paar von in Reihe geschalteten binären Speicherzellen gebildet wird, wie etwa einem Paar benachbarter Speicherzellen auf einer NAND-Kette, wobei sich eine der Speicherzellen in einem programmierten Zustand und die andere in einem gelöschten Zustand befindet. Abhängig davon, welche Speicherzelle der Einheitssynapse sich in dem programmierten und welche Speicherzelle sich in dem gelöschten Zustand befindet, wird die Einheitssynapse entweder in dem Gewicht -1 oder dem +1 sein. Der Binäreingang wird dann als ein Spannungsmuster an die entsprechenden Wortleitungen angelegt, in denen sich eine der Wortleitungspaare auf einer Lesespannung befindet (für die nur die Speicherzelle mit gelöschtem Zustand leitet) und die andere des Wortleitungspaares liegt auf einer Durchlassspannung (für die eine Speicherzelle in einem der beiden Zustände leitet). Abhängig davon, welche Wortleitung des Wortleitungspaares bei welchem Wert ist, wird der Eingang entweder eine -1 oder eine +1 sein. Durch Anwenden des Eingangs auf das Wortleitungspaar wird die Einheitssynapse (und die entsprechende NAND-Kette) entweder leiten oder nicht, abhängig davon, ob der Eingang und das Gewicht übereinstimmen oder nicht. Das Ergebnis kann durch einen Abtastverstärker bestimmt werden, der mit einer entsprechenden Bitleitung verbunden ist. Durch Anwenden der Eingangs/Einheitssynapsen-Paare entlang einer NAND-Kette und Akkumulieren der Ergebnisse des Abtastverstärkers, können die Multiplikations- und Akkumulationsoperationen des Ausbreitens eines Eingangs durch eine Schicht eines neuronalen Netzes durchgeführt werden. Da die Wortleitungen des Arrays mehrere NAND-Ketten überspannen, kann die Operation gleichzeitig für die Binärgewichte von mehreren Einheitssynapsen durchgeführt werden.
-
Der Grad der Parallelität kann durch die Einführung von Mehrbit-Abtastverstärkern erhöht werden, sodass die Einheitssynapse von verschiedenen Speicherblöcken des Arrays gleichzeitig abgetastet werden kann. Weitere Erhöhungen der Parallelität können durch gleichzeitiges Abtasten auf mehreren Ebenen und Pipelining des Ausgangs einer Ebene, die einer Schicht eines neuronalen Netzes entspricht, zum Eingang einer anderen Ebene werden, die der nachfolgenden Schicht eines neuronalen Netzes entspricht.
-
1 ist ein Blockdiagramm, das eine Ausführungsform eines Speichersystems 100 darstellt, das mit dem Host 120 verbunden ist. Das Speichersystem 100 kann die hierin vorgeschlagene Technologie implementieren, wobei die neuronalen Netzeingänge oder andere Daten von dem Host 120 empfangen werden. Abhängig von der Ausführungsform können die Eingänge von dem Host 120 empfangen und dann den Speicherpaketen 104 bereitgestellt werden, um auf die Gewichte zu schließen, die zuvor in die Speicherfelder der Speicherpakete 104 programmiert wurden. Viele unterschiedliche Arten von Speichersystemen können mit der hier vorgeschlagenen Technologie verwendet werden. Beispielspeichersysteme umfassen Festkörperlaufwerke („SSDs“), Speicherkarten und eingebettete Speichervorrichtungen; es können jedoch auch andere Arten von Speichersystemen verwendet werden.
-
Das Speichersystem 100 von 1 umfasst eine Steuerung 102, einen nichtflüchtigen Speicher 104 zum Speichern von Daten und einen lokalen Speicher (z. B. DRAM/ReRAM) 106. Die Steuerung 102 umfasst eine Front-End-Prozessor (FEP) -Schaltung 110 und eine oder mehrere Back-End-Prozessor (BEP) -Schaltungen 112. In einer Ausführungsform ist die FEP-Schaltung 110 auf einem ASIC implementiert. In einer Ausführungsform ist jede BEP-Schaltung 112 auf einem separaten ASIC implementiert. In anderen Ausführungsformen kann eine einheitliche ASIC-Steuerung sowohl die Front-End- als auch die Back-End-Funktionen kombinieren. Die ASICs für jede der BEP-Schaltungen 112 und die FEP-Schaltung 110 sind auf dem gleichen Halbleiter implementiert, sodass die Steuerung 102 als ein System auf einem Chip („SoC“) hergestellt wird. Die FEP-Schaltung 110 und die BEP-Schaltung 112 enthalten beide ihre eigenen Prozessoren. In einer Ausführungsform arbeiten die FEP-Schaltung 110 und die BEP-Schaltung 112 als Master-Slave-Konfiguration, wobei die FEP-Schaltung 110 der Master ist und jede BEP-Schaltung 112 ein Slave ist. Beispielsweise implementiert die FEP-Schaltung 110 eine Flash-Übersetzungsschicht (FTL) oder eine Medienverwaltungsschicht (MML), die eine Speicherverwaltung (z. B. Speicherbereinigung, Abnutzungsnivellierung usw.), eine Übersetzung von logischen zu physikalischen Adressen, eine Kommunikation mit dem Host, eine Verwaltung von DRAM (lokaler flüchtiger Speicher) und eine Verwaltung des Gesamtbetriebs der SSD (oder eines anderen nichtflüchtigen Speichersystems) durchführt. Die BEP-Schaltung 112 verwaltet Speicheroperationen in den Speicherpaketen/-chip auf Anforderung der FEP-Schaltung 110. Zum Beispiel kann die BEP-Schaltung 112 die Lese -, Lösch- und Programmierprozesse ausführen. Zusätzlich kann die BEP-Schaltung 112 eine Pufferverwaltung durchführen, spezifische Spannungspegel einstellen, die von der FEP-Schaltung 110 benötigt werden, eine Fehlerkorrektur (ECC) durchführen, die Toggle-Modus-Schnittstellen zu den Speicherpaketen steuern usw. In einer Ausführungsform ist jede BEP-Schaltung 112 für ihren eigenen Satz von Speicherpaketen verantwortlich.
-
In einer Ausführungsform umfasst der nichtflüchtige Speicher 104 eine Mehrzahl von Speicherpaketen. Jedes Speicherpaket enthält einen oder mehrere Speicherchips. Daher ist die Steuerung 102 mit einem oder mehreren nichtflüchtigen Speicherchips verbunden. In einer Ausführungsform verwendet jeder Speicherchip in den Speicherpaketen 104 einen NAND-Flash-Speicher (einschließlich eines zweidimensionalen NAND-Flash-Speichers und/oder eines dreidimensionalen NAND-Flash-Speichers). In anderen Ausführungsformen kann das Speicherpaket andere Speichertypen umfassen.
-
Die Steuerung 102 kommuniziert mit dem Host 120 über eine Schnittstelle 130, die NVM-Express (NVMe) über PCI-Express (PCle) implementiert. Für die Zusammenarbeit mit dem Speichersystem 100 schließt der Host 120 einen Host-Prozessor 122, einen HostSpeicher 124 und eine PCIe-Schnittstelle 126 ein, die entlang dem Bus 128 angeschlossen ist. Der Hostspeicher 124 ist der physikalische Speicher des Hosts und kann ein DRAM, ein SRAM, ein nichtflüchtiger Speicher oder ein anderer Speichertyp sein. Host 120 ist extern und getrennt von dem Speichersystem 100. In einer Ausführungsform ist das Speichersystem 100 in den Host 120 eingebettet.
-
2 ist ein Blockdiagramm einer Ausführungsform der FEP-Schaltung 110. 2 zeigt eine PCIe-Schnittstelle 150 zum Kommunizieren mit dem Host 120 und einen Hostprozessor 152 in Kommunikation mit dieser PCIe-Schnittstelle. Der Hostprozessor 152 kann jeder in der Technik bekannte Prozessortyp sein, der für die Implementierung geeignet ist. Der Hostprozessor 152 kommuniziert mit einem Network-On-Chip (NOC) 154. Ein NOC ist ein Kommunikationsuntersystem auf einer integrierten Schaltung, typischerweise zwischen Kernen in einem SoC. NOCs können synchrone und asynchrone Taktdomänen umspannen oder eine ungetaktete asynchrone Logik verwenden. Die NOC-Technologie wendet Netzwerktheorie und -verfahren auf On-Chip-Kommunikationen an und liefert beträchtliche Verbesserungen gegenüber herkömmlichen Bus- und Crossbar-Verbindungen. NOC verbessert die Skalierbarkeit von SoCs und die Leistungseffizienz komplexer SoCs im Vergleich zu anderen Designs. Die Drähte und die Verbindungen des NOC werden von vielen Signalen gemeinsam genutzt. Eine hohe Parallelität wird erreicht, da alle Verbindungen in dem NOC gleichzeitig an unterschiedlichen Datenpaketen arbeiten können. Daher liefert ein NOC, wenn die Komplexität integrierter Subsysteme wächst, eine verbesserte Leistung (wie Durchsatz) und Skalierbarkeit im Vergleich zu früheren Kommunikationsarchitekturen (z. B. dedizierten Punkt-zu-Punkt-Signaldrähten, gemeinsam genutzten Bussen oder segmentierten Bussen mit Brücken). Verbunden mit und in Kommunikation mit NOC 154 ist der Speicherprozessor 156, SRAM 160 und eine DRAM-Steuerung 162. Die DRAM-Steuerung 162 wird verwendet, um mit dem DRAM (z. B. DRAM 106) zu arbeiten und damit zu kommunizieren. SRAM 160 ist ein lokaler RAM-Speicher, der von dem Speicherprozessor 156 verwendet wird. Der Speicherprozessor 156 wird verwendet, um die FEP-Schaltung zu betreiben und die verschiedenen Speicheroperationen auszuführen. In Kommunikation mit dem NOC stehen auch zwei PCIe-Schnittstellen 164 und 166. In der Ausführungsform von 2 umfasst der SSD-Controller zwei BEP-Schaltungen 112; daher gibt es zwei PCIe-Schnittstellen 164/166. Jede PCIe-Schnittstelle kommuniziert mit einer der BEP-Schaltungen 112. In anderen Ausführungsformen können mehr oder weniger als zwei BEP-Schaltungen 112 vorhanden sein; daher kann es mehr als zwei PCIe-Schnittstellen geben.
-
Die FEP-Schaltung 110 kann auch eine Flash-Übersetzungsschicht (FTL) oder, allgemeiner, eine Medienverwaltungsschicht (MML) 158 enthalten, die eine Speicherverwaltung (z.B. Speicherbereinigung, Abnutzungsnivellierung, Lastausgleich usw.), eine Übersetzung von logischen zu physikalischen Adressen, eine Kommunikation mit dem Host, eine Verwaltung von DRAM (lokaler flüchtiger Speicher) und eine Verwaltung des Gesamtbetriebs der SSD oder eines anderen nichtflüchtigen Speichersystems durchführt. Die Medienverwaltungsschicht MML 158 kann als Teil der Speicherverwaltung integriert sein, die Speicherfehler behandeln und mit dem Host interagieren kann. Insbesondere kann MML ein Modul in der FEP-Schaltung 110 sein und für die Interna der Speicherverwaltung verantwortlich sein. Insbesondere kann die MML 158 einen Algorithmus in der Firmware der Speichervorrichtung enthalten, der Schreibvorgänge vom Host in Schreibvorgänge in die Speicherstruktur (z.B. 326 von 5 weiter unten) eines Chips übersetzt. MML 158 kann erforderlich sein, weil: 1) der Speicher eine begrenzte Haltbarkeit aufweisen kann; 2) die Speicherstruktur nur in Vielfachen von Seiten beschrieben werden kann; und/oder 3) die Speicherstruktur nicht beschrieben werden kann, falls sie nicht als Block gelöscht wird. Die MML 158 versteht diese potentiellen Begrenzungen der Speicherstruktur, die für den Host möglicherweise nicht sichtbar sind. Dementsprechend versucht die MML 158, die Schreibvorgänge vom Host in Schreibvorgänge in die Speicherstruktur zu übersetzen.
-
3 ist ein Blockdiagramm einer Ausführungsform einer BEP-Schaltung 112. 3 zeigt eine PCIe Schnittstelle 200 zum Kommunizieren mit der FEP-Schaltung 110 (z.B., in Verbindung mit einer der PCIe-Schnittstellen 164 und 166 von 2). Die PCIe-Schnittstelle 200 ist in Verbindung mit zwei NOCs, 202 und 204. In einer Ausführungsform können die beiden NOCs in ein großeß NOC kombiniert werden. Jeder NOC (202/204) ist über eine XOR-Maschine (224/254) und eine ECC-Maschine (226/256) mit dem SRAM (230/260), einem Puffer (232/262), einem Prozessor (220/250) und einer Datenpfadsteuerung (222/252) verbunden. Die ECC-Maschinen 226/256 werden verwendet, um eine Fehlerkorrektur durchzuführen, wie in der Technik bekannt ist. Die XOR-Maschinen 224/254 werden zum XOR der Daten verwendet, sodass Daten auf eine Weise kombiniert und gespeichert werden können, die im Falle eines Programmierfehlers wiederhergestellt werden kann. Die Datenpfadsteuerung 222 ist mit einem Schnittstellenmodul verbunden, um über vier Kanäle mit Speicherpaketen zu kommunizieren. Somit ist der obere NOC 202 einer Schnittstelle 228 für vier Kanäle zur Kommunikation mit Speicherpaketen zugeordnet, und der untere NOC 204 ist einer Schnittstelle 258 für vier zusätzliche Kanäle zur Kommunikation mit Speicherpaketen zugeordnet. Jede Schnittstelle 228/258 enthält vier Toggle-Mode-Schnittstellen (TM-Schnittstelle), vier Puffer und vier Scheduler. Für jeden Kanal gibt es einen Scheduler, einen Puffer und eine TM-Schnittstelle. Der Prozessor kann irgendein Standardprozessor sein, der in der Technik bekannt ist. Die Datenpfadsteuerungen 222/252 können ein Prozessor, ein FPGA, ein Mikroprozessor oder eine andere Art von Steuerung sein. Das XOR-Maschinen 224/254 und ECC-Maschinen 226/256 sind dedizierte HardwareSchaltungen, bekannt als Hardware-Beschleuniger. In anderen Ausführungsformen können die XOR-Maschinen 224/254 und ECC-Maschinen 226/256 in Software implementiert sein. Die Scheduler, Puffer und TM-Schnittstellen sind Hardwareschaltungen.
-
4 ist ein Blockdiagramm einer Ausführungsform eines Speicherpakets 104, das eine Mehrzahl von Speicherchips 292 umfasst, die mit einem Speicherbus 294 (Datenleitungen und Chipfreigabeleitungen) verbunden sind. Der Speicherbus 294 ist mit einer Toggle-Mode-Schnittstelle 296 zur Kommunikation mit der TM-Schnittstelle einer BEP-Schaltung 112 (siehe z. B. 3) verbunden. In einigen Ausführungsformen kann das Speicherpaket eine kleine Steuerung einschließen, die mit dem Speicherbus und der TM-Schnittstelle verbunden ist. Das Speicherpaket kann einen oder mehrere Speicherchips aufweisen. In einer Ausführungsform schließt jedes Speicherpaket acht oder 16 Speicherchips ein; andere Anzahlen von Speicherchips können jedoch ebenfalls implementiert werden. Die hierin beschriebene Technologie ist nicht auf eine spezifische Anzahl von Speicherchips beschränkt.
-
5 ist ein Funktionsblockdiagramm einer Ausführungsform eines Speicherchips 300. Die in 5 dargestellten Komponenten sind elektrische Schaltungen. In einer Ausführungsform beinhaltet jeder Speicherchip 300 eine Speicherstruktur 326, eine Steuerschaltung 310 und Lese/Schreibschaltungen 328. Die Speicherstruktur 126 ist durch Wortleitungen über einen Zeilen-Decoder 324 und durch Bitleitungen über einen Spalten-Decoder 332 adressierbar. Die Lese-/Schreibschaltungen 328 beinhalten mehrere Leseblöcke 350 einschließlich SB1, SB2, ..., SBp (Messschaltung) und ermöglichen das parallele Lesen oder Programmieren einer Seite von Speicherzellen. Befehle und Daten werden zwischen der Steuereinheit und dem Speicherchip 300 über Signalleitungen 318 übertragen. In einem Ausführungsbeispiel schließt der Speicherchip 300 einen Satz von Eingangs- und/oder Ausgangs(I/O)-Stiften ein, die mit Leitungen 318 verbunden sind.
-
Die Steuerschaltung 310 arbeitet mit den Lese-/Schreibschaltungen 328 zusammen, um Speicheroperationen (z. B. Schreiben, Lesen und andere) auf der Speicherstruktur 326 auszuführen, und beinhaltet eine Zustandsmaschine 312, einen chipinternen Adressdecoder 314 und eine Leistungssteuerungsschaltung 316. Die Zustandsmaschine 312 stellt eine Chippegelsteuerung von Speichervorgängen bereit. In einer Ausführungsform ist die Zustandsmaschine 312 durch Software programmierbar. In anderen Ausführungsformen verwendet die Zustandsmaschine 312 keine Software und ist vollständig in Hardware (z. B. elektrischen Schaltungen) implementiert. In einer anderen Ausführungsform wird die Zustandsmaschine 312 durch einen Mikrocontroller ersetzt. In einer Ausführungsform beinhaltet die Steuerschaltung 310 Puffer, wie etwa Register, ROM-Sicherungen und andere Speichervorrichtungen zum Speichern von Vorgabewerten wie Basisspannungen und anderen Parametern.
-
Der On-Chip-Adressdecodierer 314 stellt eine Adressschnittstelle zwischen Adressen, die von einer Steuerung 102 verwendet werden, zu der Hardwareadresse, die von den Decodierern 324 und 332 verwendet wird, bereit. Das Leistungssteuermodul 316 steuert die Leistung und Spannungen, mit denen die Wortleitungen und Bitleitungen bei Speicheroperationen versorgt werden. Das Leistungssteuermodul 316 kann Ladungspumpen zum Erzeugen von Spannungen einschließen. Die Leseblöcke schließen Bitleitungstreiber ein.
-
Für die Zwecke dieses Dokuments, bezieht sich der Begriff „eine oder mehrere Steuerschaltungen“ auf eine Steuerung, eine Zustandsmaschine, einen Mikrocontroller und/oder die Steuerschaltung 310, oder andere analoge Schaltungen, die verwendet werden, um nichtflüchtige Speicher zu steuern.
-
In einer Ausführungsform weist die Speicherstruktur
326 ein dreidimensionales Array von nichtflüchtigen Speicherzellen auf, auf denen mehrere Speicherstufen über einem einzigen Substrat, wie z. B. einem Wafer, ausgebildet sind. Die Speicherstruktur kann jede Art von nichtflüchtigem Speicher aufweisen, der monolithisch in einer oder mehreren physischen Ebenen von Speicherzellen ausgebildet ist, die einen aktiven Bereich aufweisen, der über einem Silizium-(oder anderen Typ von) Substrat angeordnet ist. In einem Beispiel umfassen die nichtflüchtigen Speicherzellen vertikale NAND-Ketten mit ladungseinfangendem Material, wie es zum Beispiel im
US-Patent 9.721.662 beschrieben ist, auf das hier in seiner Gesamtheit Bezug genommen wird.
-
In einer anderen Ausführungsform weist die Speicherstruktur
326 ein zweidimensionales Speicher-Array von nichtflüchtigen Speicherzellen auf. In einem Beispiel, sind die nichtflüchtigen Speicherzellen NAND-Flash-Speicherzellen unter Verwendung von Floating-Gates wie beschrieben, zum Beispiel, im
U.S. Patentschrift 9.082.502 , hierin durch Bezugnahme in seiner Gesamtheit aufgenommen. Andere Arten von Speicherzellen (z. B. NOR-Typ-Flashspeicher) können ebenfalls verwendet werden.
-
Der exakte Typ der Speicher-Array-Architektur oder Speicherzelle, die in der Speicherstruktur 326 beinhaltet ist, ist nicht auf die obigen Beispiele beschränkt. Viele unterschiedliche Typen von Speicher-Array-Architekturen oder Speichertechnologien können verwendet werden, um die Speicherstruktur 326 zu bilden. Keine spezielle nichtflüchtige Speichertechnologie ist für die Zwecke der neuen beanspruchten Ausführungsformen, die hier vorgeschlagen werden, erforderlich. Andere Beispiele geeigneter Technologien für Speicherzellen der Speicherstruktur 326 beinhalten ReRAM-Speicher, magnetoresistive Speicher (z. B. MRAM, Spin Transfer Torque MRAM, Spin Orbit Torque MRAM), Phasenwechselspeicher (z. B. PCM) und dergleichen. Beispiele von geeigneten Technologien für die Speicherzellen-Architekturen der Speicherstruktur 126 beinhalten zweidimensionale Arrays, dreidimensionale Arrays, KreuzpunktArrays, gestapelte zweidimensionale Arrays, vertikale Bitleitungs-Arrays und dergleichen.
-
Ein Beispiel eines ReRAM- oder PCMRAM-Kreuzpunktspeichers beinhaltet reversible Widerstandsschaltelemente, die in Kreuzpunktarrays angeordnet sind, auf die durch X-Leitungen und Y-Leitungen (z. B. Wortleitungen und Bitleitungen) zugegriffen wird. In einer anderen Ausführungsform können die Speicherzellen leitfähige Brückenspeicherelemente beinhalten. Ein leitfähiges Brückenspeicherelement kann auch als programmierbare Metallisierungszelle bezeichnet werden. Ein leitfähiges Brückenspeicherelement kann als Zustandsänderungselement basierend auf der physikalischen Verlagerung von Ionen innerhalb eines Festelektrolyten verwendet werden. In einigen Fällen kann ein leitfähiges Brückenspeicherelement zwei feste Metallelektroden beinhalten, eine relativ inerte (z. B. Wolfram) und eine elektrochemisch aktive (z. B. Silber oder Kupfer), mit einem dünnen Film des Festelektrolyten zwischen den beiden Elektroden. Mit steigender Temperatur steigt auch die Mobilität der Ionen, so dass die Programmierschwelle für die leitfähige Brückenspeicherzelle abnimmt. Somit kann das leitfähige Brückenspeicherelement einen weiten Bereich von Programmschwellenwerten als Funktion der Temperatur aufweisen.
-
Ein magnetoresistiver Speicher (MRAM) speichert Daten durch Magnetspeicherelemente. Die Elemente sind aus zwei ferromagnetischen Platten gebildet, von denen jede eine Magnetisierung halten kann, die durch eine dünne Isolierschicht getrennt ist. Eine der beiden Platten ist ein Permanentmagnet, der auf eine bestimmte Polarität eingestellt ist; die Magnetisierung der anderen Platte kann so geändert werden, dass sie der eines externen Felds entspricht, um Speicher zu speichern. Eine Speichervorrichtung ist aus einem Gitter solcher Speicherzellen aufgebaut. Bei einer Ausführungsform zum Programmieren liegt jede Speicherzelle zwischen einem Paar von Schreibleitungen, die in rechten Winkeln zueinander parallel zu der Zelle, eine über und eine unter der Zelle angeordnet sind. Wenn Strom durch sie fließt, wird ein Induktionsmagnetfeld erzeugt.
-
Phasenwechselspeicher (PCM) nutzt das einzigartige Verhalten von Chalkogenidglas aus. Eine Ausführungsform verwendet ein GeTe-Sb2Te3-Übergitter, um nicht-thermische Phasenänderungen zu erreichen, indem einfach der Koordinationszustand der Germaniumatome mit einem Laserimpuls (oder Lichtimpuls von einer anderen Quelle) geändert wird. Daher sind die Dosen der Programmierung Laserimpulse. Die Speicherzellen können gesperrt werden, indem die Speicherzellen daran gehindert werden, das Licht zu empfangen. In anderen PCM-Ausführungsformen werden die Speicherzellen durch Stromimpulse programmiert. Es sei darauf hingewiesen, dass die Verwendung von „Impuls“ in diesem Dokument keinen Rechteckimpuls erfordert, sondern eine (kontinuierliche oder nicht kontinuierliche) Schwingung oder einen Stoß eines Schalls, Stroms, Spannungslichts oder einer anderen Welle beinhaltet.
-
Ein Fachmann in der Technik wird erkennen, dass die hierin beschriebene Technologie nicht auf eine einzige spezifische Speicherstruktur beschränkt ist, sondern viele relevante Speicherstrukturen gemäß dem Geist und Umfang der Technologie, wie hierin beschrieben und wie einem Fachmann der Technik bekannt, abdeckt.
-
Wenn wir uns nun den Datentypen zuwenden, die auf nichtflüchtigen Speichervorrichtungen gespeichert werden können, ist ein spezielles Beispiel für den in der folgenden Diskussion interessierenden Datentyp das in tiefen neuronalen Netzen verwendetes Gewicht. Ein künstliches neuronales Netz wird aus einer oder mehreren Zwischenschichten zwischen einer Eingangsschicht und einer Ausgangsschicht gebildet. Das neuronale Netz findet eine mathematische Manipulation, um den Eingang in den Ausgang umzuwandeln, wobei es sich durch die Schichten bewegt und die Wahrscheinlichkeit jeden Ausgangs berechnet. 6 zeigt ein einfaches Beispiel eines künstlichen neuronalen Netzes.
-
In 6 ist ein künstliches neuronales Netz als eine durch die Kreise dargestellte verbundene Gruppe von Knoten oder künstlichen Neuronen und eine Reihe von Verbindungen vom Ausgang eines künstlichen Neurons zum Eingang eines anderen dargestellt. Das Beispiel zeigt drei Eingangsknoten (I1 , I2 , I3 ) und zwei Ausgangsknoten (O1 , O2 ), mit einer Zwischenschicht aus vier verborgenen- oder Zwischenknoten (H1 , H2 , H3 , H4 ). Die Knoten, oder künstlichen Neuronen/Synapsen, des künstlichen neuronalen Netzes werden durch logische Elemente von einem Host oder eine anderer Verarbeitungssysteme als eine mathematische Funktion implementiert, die eine oder mehrere Eingänge empfängt und diese summiert, um einen Ausgang zu erzeugen. Üblicherweise wird jeder Eingang separat gewichtet, und die Summe wird durch die mathematische Funktion des Knotens geleitet, um den Ausgang des Knotens bereitzustellen.
-
In üblichen Implementierungen von künstlichen neuronalen Netzen, ist das Signal an einer Verbindung zwischen Knoten (künstlichen Neuronen/Synapsen) eine reelle Zahl, und der Ausgang jedes künstlichen Neurons wird durch eine nichtlineare Funktion der Summe seiner Eingänge berechnet. Knoten und deren Verbindungen haben normalerweise ein Gewicht, das sich im Verlauf des Lernprozesses anpasst. Das Gewicht erhöht oder verringert die Stärke des Signals an einer Verbindung. Knoten können eine Schwelle aufweisen, sodass das Signal nur gesendet wird, wenn das Summensignal diesen Schwellenwert kreuzt. Typischerweise werden die Knoten in Schichten aggregiert. Unterschiedliche Schichten können unterschiedliche Arten von Transformationen an ihren Eingängen durchführen. Die Signale wandern von der ersten Schicht (der Eingangsschicht) zur letzten Schicht (der Ausgangsschicht), möglicherweise nachdem die Schichten mehrmals durchlaufen wurden. Obwohl 6 nur eine einzelne Zwischen- oder versteckte Schicht zeigt, kann ein komplexes tiefes neuronales Netz (DNN) viele derartige Zwischenschichten aufweisen.
-
Ein künstliches neuronales Netz wird „trainiert“, indem Eingänge bereitgestellt und anschließend die Ausgänge überprüft und korrigiert werden. Zum Beispiel verarbeitet ein neuronales Netz, das trainiert ist, Hunderassen zu erkennen, einen Satz von Bildern und berechnet die Wahrscheinlichkeit, dass der Hund in einem Bild einer bestimmten Rasse angehört. Ein Benutzer kann die Ergebnisse durchsehen und auswählen, welche Wahrscheinlichkeiten das Netz anzeigen sollte (über einem bestimmten Schwellenwert usw.) und das vorgeschlagene Etikett zurückgeben. Jede mathematische Manipulation als solche wird als Schicht betrachtet, und komplexe neuronale Netze haben viele Schichten. Aufgrund der Tiefe, die durch eine große Anzahl von Zwischen- oder versteckten Schichten bereitgestellt wird, können neuronale Netze komplexe nichtlineare Beziehungen modellieren, wenn sie trainiert werden.
-
7A ist ein Flussdiagramm, das eine Ausführungsform eines Prozesses zum Trainieren eines neuronalen Netzes beschreibt, um einen Satz von Gewichten zu erzeugen. Der Trainingsprozess wird häufig in der Cloud durchgeführt, wodurch eine zusätzliche oder leistungsfähigere Verarbeitung des Zugriffes ermöglicht wird. In Schritt 701 wird der Eingang, wie beispielsweise ein Satz von Bildern, an den Eingangsknoten empfangen (z.B. I1 , I2 , I3 in 6). In Schritt 703 wird die Eingang unter Verwendung des aktuellen Satzes von Gewichten durch die Knoten der verborgenen Zwischenschichten (z.B. H1 , H2 , H3 , H4 in 6) weitergeleitet. Der Ausgang des neuronalen Netzes wird dann in Schritt 705 an den Ausgangsknoten (z.B. O1 , O2 in 6) empfangen. In dem Hunderassenbeispiel des vorhergehenden Absatzes wäre der Eingang die Bilddaten einer Anzahl von Hunden, und die Zwischenschichten verwenden die aktuellen Gewichtswerte, um die Wahrscheinlichkeit zu berechnen, dass der Hund in einem Bild eine bestimmte Rasse, mit dem vorgeschlagenen Hunderassenetikett, zurückgegeben in Schritt 705. Ein Benutzer kann dann die Ergebnisse in Schritt 707 überprüfen, um auszuwählen, welche Wahrscheinlichkeiten das neuronale Netz zurückgeben soll, und um zu entscheiden, ob der aktuelle Satz von Gewichten eine ausreichend genaue Kennzeichnung liefert, und wenn dies der Fall ist, ist das Training abgeschlossen (Schritt 711). Wenn das Ergebnis nicht genau genug ist, stellt das neuronale Netz die Gewichte in Schritt 709 auf der Grundlage der Wahrscheinlichkeiten ein, die der Benutzer ausgewählt hat, und kehrt dann zu Schritt 703 zurück, um die Eingangsdaten erneut mit den eingestellten Gewichten auszuführen. Sobald der Satz von Gewichten des neuronalen Netzes bestimmt wurde, kann mit „Inferenz“ gefolgert werden. Hierbei handelt es sich um den Prozess der Verwendung der bestimmten Gewichte, um ein Ausgangsergebnis aus Daten zu generieren, die in das neuronale Netz eingegeben wurden. Sobald die Gewichte in Schritt 711 bestimmt worden sind, können sie für eine spätere Verwendung in einem nichtflüchtigen Speicher gespeichert werden, wobei die Speicherung dieser Gewichte in einem nichtflüchtigen Speicher nachstehend ausführlicher erörtert wird.
-
7B ist ein Flussdiagramm, das einen Prozess für die Inferenzphase des überwachten Lernens unter Verwendung eines neuronalen Netzes beschreibt, um die „Bedeutung“ der Eingangsdaten unter Verwendung einer geschätzten Genauigkeit vorherzusagen. Je nach Fall kann das neuronale Netz sowohl in der Cloud als auch durch den Prozessor eines Edge-Geräts (z.B. Smartphone, Automobilprozess, Hardwarebeschleuniger) abgeleitet werden. In Schritt 721 wird der Eingang empfangen, beispielsweise das Bild eines Hundes in dem oben verwendeten Beispiel. Wenn die zuvor bestimmten Gewichte nicht in dem Gerät vorhanden sind, auf dem die neuronale Netzanwendung ausgeführt wird, werden sie in Schritt 722 geladen. Beispielsweise könnte auf einem Host-Prozessor, der das neuronale Netz ausführt, das Gewicht aus einer SSD ausgelesen werden, in der es gespeichert und in den RAM auf der Host-Vorrichtung geladen werden. In Schritt 723 werden die Eingangsdaten dann durch die Schichten des neuronalen Netzes weitergegeben. Schritt 723 wird dem Schritt 703 von 7B ähneln, wobei nun jedoch die Gewichte verwendet werden, die am Ende des Trainingsprozesses in Schritt 711 eingerichtet werden. Nach der Weitergabe des Eingangs durch die Zwischenschicht wird der Ausgang dann in Schritt 725 bereitgestellt.
-
Neuronale Netze sind typischerweise Feedforward-Netze, in denen Daten von der Eingangsschicht durch die Zwischenschichten und zur Ausgangsschicht fließen, ohne sich zurückzuschleifen. Zunächst erstellt das neuronale Netz in der Trainingsphase des überwachten Lernens, wie in 7A dargestellt, eine Karte virtueller Neuronen und weist diesen Verbindungen zufällige numerische Werte oder „Gewichte“ zu. Die Gewichte und Eingänge werden multipliziert und geben einen Ausgang zwischen 0 und 1 zurück. Wenn das Netz ein bestimmtes Muster nicht genau erkennt, stellt ein Algorithmus die Gewichte ein. Auf diese Weise kann der Algorithmus bestimmte Parameter einflussreicher (durch Erhöhen des entsprechenden Gewichts) oder weniger einflussreich (durch Verringern des Gewichts) machen und die Gewichte entsprechend anpassen, bis er einen Satz von Gewichten bestimmt, der eine ausreichend korrekte mathematische Manipulation liefert, um die Daten vollständig zu verarbeiten.
-
8 ist eine schematische Darstellung der Verwendung einer Matrixmultiplikation in einem neuronalen Netz. Die Matrixmultiplikation oder MatMul ist ein häufig verwendeter Ansatz sowohl in der Trainings- als auch in der Inferenzphase für neuronale Netze und wird in Kernel-Methoden für maschinelles Lernen verwendet. 8 ist oben ähnlich zu 6, wo nur eine einzige verborgene Schicht zwischen der Eingangsschicht und der Ausgangsschicht gezeigt wird. Die Eingangsdaten werden als Vektor einer Länge dargestellt, die der Anzahl von Eingangsknoten entspricht. Die Gewichte werden in einer Gewichtsmatrix dargestellt, wobei die Anzahl der Spalten der Anzahl der Zwischenknoten in der verborgenen Schicht und die Anzahl der Zeilen der Anzahl der Eingangsknoten entspricht. Der Ausgang wird durch eine Matrixmultiplikation des Eingangsvektors und der Gewichtungsmatrix bestimmt, wobei jedes Element des Augangsvektors ein Skalarprodukt des Vektors der Eingangsdaten mit einer Spalte der Gewichtungsmatrix ist.
-
Eine übliche Technik zum Ausführen der Matrixmultiplikationen ist die Verwendung eines Multiplizierer-Akkumulators (MAC oder MAC-Einheit). Dies hat jedoch eine Reihe von Problemen. Unter erneuter Bezugnahme auf 7B lädt die Inferenzphase in Schritt 722 die Gewichte des neuronalen Netzes, bevor die Matrixmultiplikationen durch die Ausbreitung in Schritt 723 durchgeführt werden. Da jedoch die Menge der involvierten Daten extrem groß sein kann, hat die Verwendung eines Multipliziererakkumulators für das Umfolgern mehrere Probleme, die sich auf das Laden von Gewichten beziehen. Einer davon ist eine hohe Energiedissipation, da große MAC-Arrays mit der erforderlichen Bitbreite verwendet werden müssen. Ein weiteres Problem ist die hohe Verlustleistung aufgrund der begrenzten Größe der MAC-Arrays, was zu einer hohen Datenbewegung zwischen Logik und Speicher und einer weitaus höheren Verlustleistung führt, als sie bei den Logikberechnungen selbst verwendet wird.
-
Um dabei zu helfen, diese Einschränkungen zu vermeiden, kann die Verwendung eines Multipliziererakkumulator-Arrays durch andere Speichertechnologien ersetzt werden. Beispielsweise kann die Matrixmultiplikation in einem Speicher-Array berechnet werden, indem die Eigenschaften des Speicherklassenspeichers (SCM) genutzt werden, z.B. diejenigen, die auf ReRAM-, PCM- oder MRAM-basierten Speicherzellen basieren. Dies ermöglicht, dass die neuronalen Netzeingänge über Lesebefehle bereitgestellt werden und die neuronalen Gewichte zum Umfolgern vorgeladen werden. Durch die Verwendung von In-Memory-Computing kann die Notwendigkeit einer Logik zum Durchführen der Matrixmultiplikation im MAC-Array und das Verschieben von Daten zwischen dem Speicher und dem MAC-Array entfallen.
-
Das Folgende betrachtet Ausführungsformen, die auf Speicher-Arrays basieren, die Architekturen vom NAND-Typ verwenden, wie beispielsweise Flash-NAND-Speicher, die Speicherzellen mit einem Ladungsspeicherbereich verwenden. Flash-NAND-Speicher können implementiert werden, indem sowohl Multi-Level-Zellen (MLC) -Strukturen als auch Single-Level-Zellen (SLC)-Strukturen verwendet werden, wobei im Folgenden hauptsächlich Ausführungsformen betrachtet werden, die auf einem SLC-Flash-Speicher basieren. Im Gegensatz zur MAC-Array-Logik weist die Verwendung eines SLC-Flash-Speichers mehrere Vorteile auf, einschließlich eines viel höheren Bereichs/Bit-Werts, einer viel höheren Durchsatzrate und einer signifikanten Verringerung des Energieverbrauchs aufgrund der Minimierung der Datenbewegung durch Multiplikation innerhalb des Arrays. Darüber hinaus ist die NAND-Flash-Struktur hochgradig skalierbar und unterstützt tiefe und breite neuronale Netze.
-
Eine Technik, die verwendet werden kann, um die Rechenkomplexität des Inferenzprozesses zu verringern, ist die Verwendung eines Binären neuronalen Netzes (BNN), bei dem ein neuronales Netz mit binären Gewichten und Aktivierungen arbeitet. Ein BNN (auch XNOR-Netz genannt) berechnet die Matrix-Vektor-Multiplikation mit „binären“ Eingängen {-1, 1} und „binären“ Gewichten {-1, 1}. 9 ist eine Tabelle zur Darstellung des Ausgangs eines binären neuronale Netzes als Reaktion auf die verschiedenen Eingang-Gewicht-Kombinationen. Wie in der Spalte ganz rechts gezeigt, ist der Ausgang 1, wenn Eingang und Gewicht übereinstimmen; und wenn sich der Eingang und das Gewicht unterscheiden, ist der Ausgang -1. 10-13 zeigen eine Ausführungsform der Realisierung eines neuronalen Netzes mit binären Eingängen und binären Gewichten in einem SLC-NAND-Array.
-
10 zeigt eine Ausführungsform für eine Einheitssynapse-Zelle zum Speichern eines binären Gewichts in einem Paar von in Reihe geschalteten Speicherzellen FG1 und FG2. In diesem Beispiel ist jede der Speicherzellen eine SLC-Zelle, die einen von zwei Zuständen speichert und Teil einer größeren NAND-Kette sein kann. Die Speicherzellen FG1 und FG2 können Flash-Speicherzellen sein und werden durch jeweiliges Hinzufügen oder Entfernen von Elektronen von einer Ladungsspeicherschicht oder einem Floating-Gate programmiert oder gelöscht und werden durch Anlegen entsprechender Spannungen V1 und V2 an ihre Steuergates abgetastet. Wenn die Speicherzellen FG1 und FG2 Teil einer größeren NAND-Kette sind, die zusätzliche Einheitssynapsenzellen oder andere Speicherzellen enthält, kann das Paar von Speicherzellen auf der NAND-Kette benachbart sein oder durch andere Speicherzellen getrennt sein, welche die NAND-Kette bilden. In der folgenden Erörterung werden die einzelnen Speicherzellen einer Einheitssynapse-Zelle als benachbart dargestellt, jedoch sind je nach Ausführungsform andere Anordnungen möglich. Beispielsweise könnte die obere Hälfte einer NAND-Kette die erste Speicherzelle jeder Einheitssynapse enthalten, während sich die zweite Speicherzelle jeder Einheitssynapse in der unteren Hälfte der NAND-Kette befindet. Bei jeder dieser Anordnungen werden beim Abtasten einer gegebenen Einheitssynapse die anderen Speicherzellen und Auswahlgatter auf derselben NAND-Kette so vorgespannt, dass sowohl die Speicherzellen der nicht ausgewählten Einheitssynapsen und alle anderen Speicherzellen leiten, zusammen mit den Auswahlgattern, leitend sind.
-
11 zeigt die Verteilung von Schwellenspannungen zum Speichern von Datenzuständen in einem SLC-Speicher. In dieser Ausführungsform wird der gelöschte negative Schwellenzustand als „1“-Zustand und der positive Schwellenzustand als „0“-Zustand angenommen. 10 zeigt eine typische Verteilung der Schwellenspannung der Speicherzellen eines Satzes von Speicherzellen, beispielsweise eines Löschblocks oder eines gesamten Arrays, nachdem die Speicherzellen gelöscht wurden (hier dem Zustand „1“ zugewiesen) und die Speicherzellen auf die positiven Schwellenzustände programmiert werden (hier dem Zustand „0“ zugewiesen). Wie unter Bezugnahme auf die 12 und 13 weiter erläutert, hat ein binäres Gewicht eine Speicherzelle einer Einheitssynapse im „0“-Zustand und die andere Speicherzelle im „1“ -Zustand. Allgemeiner gesagt, muss der „1“-Zustand kein negativer Schwellenzustand sein, solange die beiden Zustände einem unteren Schwellenzustand entsprechen, hier als der „1“-Zustand definiert, und einem höheren Schwellenzustand, hier definiert als der „0“-Zustand.
-
Zum Abtasten der Speicherzellen mit der in 11 dargestellten Schwellenverteilung wird ein erster Spannungspegel Vread verwendet, um zwischen den Datenzuständen zu unterscheiden, sodass die Speicherzelle, wenn sie an das Steuergate einer Speicherzelle angelegt wird, im „1“-Zustand leitet und im „0“-Zustand nicht leitet. Wenn zum Beispiel die „1“ Zustände ein negativer Schwellenspannungszustand sind und die „0“ Zustände ein positiver Schwellenspannungszustand sind, könnte Vread als 0 V genommen werden. Eine zweite Abtastungsspannung Vpass ist hoch genug, sodass eine Speicherzelle in jedem Zustand leiten wird. Beispielsweise könnte Vpass einige Volt betragen. Im Folgenden wird Vread als Eingangsspannungswert „0“ und Vpass als Eingangsspannungswert „1“ definiert.
-
Bei Implementierungen eines NAND-Flash-Speichers werden häufig eine Reihe unterschiedlicher Spannungspegel für Abtastoperationen sowohl bei Programmverifizierungsals auch bei Leseoperationen für SLC- und MLC-Speicher verwendet. Beispielsweise kann ein Programmierprüfpegel für einen gegebenen Datenzustand von dem Lesespannungspegel für denselben Datenzustand versetzt sein. Es können auch verschiedene Pegel zum Durchlassen von Spannungen bei verschiedenen Operationen und Bedingungen verwendet werden, um eine Speicherzelle unabhängig von ihrem gespeicherten Datenzustand in einen leitenden Zustand zu versetzen. Zur Vereinfachung der folgenden Diskussion wird nur die einzelne Vread-Spannung verwendet, um zwischen den Datenzuständen zu unterscheiden, und nur die einzelne Vpass-Spannung wird verwendet, wenn eine Speicherzelle oder ein Auswahlgatter für alle gespeicherten Datenzustandswerte in einen leitenden Zustand versetzt werden soll.
-
12 und 13 zeigen eine Ausführungsform zur Implementierung eines binären neuronalen Netzes, das ein Paar von in Reihe geschalteten der SLC-Speicherzellen als eine Einheitssynapse verwendet. Insbesondere zeigt 13 eine Ausführungsform für die Entsprechung zwischen der Eingangslogik, der Gewichtslogik und der Ausgangslogik von 9 und den Eingangsspannungsmustern, der Schwellenspannung Vth der Speicherzellen der Einheitssynapse bzw. der Ausgangsspannung. 12 ist eine schematische Darstellung der Antwort einer Einheitssynapse auf die verschiedenen Fälle.
-
In den 12 und 13 entspricht ein logischer Eingang von -1 dem Eingangsspannungsmuster von V1=Vpass=„1“, V2=Vread=„0“; und ein logischer Eingang von +1 entspricht dem Eingangsspannungsmuster von V1= Vread=„0“, V2= Vpass=„1“. Eine Gewichtslogik von -1 entspricht dem Zustand der Speicherzelle FG1 „0“ (programmiert) und dem Zustand von FG2 „1“ (gelöschter Zustand); und eine Gewichtslogik von +1 entspricht dem Zustand der Speicherzelle FG1 „1“ und dem Zustand von FG2 „0“. Eine Ausgangslogik von +1 entspricht der Einheitssynapse, die einen Strom Icell leitet, was zu einem Ausgangsspannungsabfall von ΔV über der Einheitssynapse führt; und eine Ausgangslogik von -1 entspricht der Einheitssynapse, die nicht leitet, was zu einem geringen oder keinem Ausgangsspannungsabfall über der Einheitssynapse führt.
-
12 zeigt schematisch die vier Fälle von Eingangs-Gewichtspaaren. Im Fall 1 stimmen der Eingang und das Gewicht beide mit den Werten von -1 überein. Das angelegte Eingangsspannungsmuster wendet die höhere Eingangsspannung von Vpass, oder „1“, an die obere Zelle mit dem höheren Vth „0“-Datenzustand und die niedrigere Eingangsspannung von Vread, oder „0“, an die niedrigere Zelle mit dem niedrigeren Wert an Vth „1“-Datenzustand an, sodass Zellen leitend sind und einen Strom von Icell durchlassen. In Fall 2 ist das Eingangsspannungsmuster in Bezug auf Fall 1 umgekehrt, wobei die Eingangslogik jetzt bei +1 liegt, während das Gewicht bei -1 liegt. Dies führt zu einem niedrigeren Vpass, oder „0“, -Spannungspegel, der an die obere Zelle mit höherem Vth angelegt wird, was folglich nicht leitend ist (wie durch das X unter der Speicherzelle angezeigt), und es fließt kein nennenswerter Strom durch das Paar.
-
Für die Fälle 3 und 4 unten in 12 beträgt der Gewichtswert jetzt +1, wobei der untere Vth-Status „1“ in der oberen Zelle und der obere Vth-Status „0“ in der unteren Zelle programmiert ist. In Fall 3 wird das Eingangsspannungsmuster -1 an die Einheitssynapse angelegt, was dazu führt, dass die untere Zelle nicht leitet, wenn sie den unteren Spannungspegel Vread, oder „0“, empfängt. In Fall 4 wird nun der höhere Vpass- oder „1“ -Eingang an die niedrigere Speicherzelle angelegt, die folglich leitet, und die Einheitssynapse leitet den Strom Icell weiter.
-
Wie in der Ausführungsform von 12 und 13 dargestellt, kann die Verwendung eines Paares von in Reihe geschalteten Speicherzellen von 10 als Einheitssynapse verwendet werden, um die binäre neuronale Netz-Logiktabelle von 9 zu implementieren. Die Einheitensynapsen können in größere NAND-Folgen mehrerer solcher in Reihe geschalteter Einheitensynapsen integriert werden. Wenn eine ausgewählte Einheitssynapse auf einer NAND-Kette abgetastet wird, können andere Einheitssynapsen auf derselben NAND-Kette unter Verwendung einer Vpass-Spannung vorgespannt werden, wobei die NAND-Ketten-Auswahlgatter ebenfalls vorgespannt werden.
-
Die Verwendung eines NAND-Flash-Speichers zum Speichern des Gewichts und zum Berechnen der Skalarprodukte von Eingängen und Gewichten im Array kann sowohl in der Trainings- als auch in der Inferenzphase verwendet werden. Die Trainingsphase kann wie in dem Ablauf von 7A fortgesetzt werden, wobei Schritt 709 die Gewichte nach Bedarf löschen und neu programmieren würde, um die Gewichte einzustellen, bis in Schritt 707 festgestellt wird, dass sie ausreichend genau sind. Die vorliegende Diskussion konzentriert sich hauptsächlich auf die Inferenzphase, in der die Gewichte zuvor in einem Trainingsprozess bestimmt und dann durch Programmieren der Einheitssynapsen auf die bestimmten binären Gewichtswerte in einen NAND-Speicher geladen wurden.
-
14 zeigt die Eingliederung der Einheitssynapsen in ein NAND-Array, wie in der Speicherstruktur 326 von 5. 14 zeigt einen Block eines möglicherweise größeren Arrays aus vielen Blöcken mit jeweils mehreren NAND-Ketten, die zwischen eine Source-Leitung 1415 und eine entsprechende Bitleitung BLi 1403i geschaltet sind. Ein typisches NAND-Speicher-Array wird aus vielen solchen Speicherblöcken gebildet. Jede NAND-Kette besteht aus einer Anzahl von Reihenspeicherzellen, die in Reihe, zwischen einem Source-seitigen Auswahlgatter SSLi 1409i geschaltet sind, über das die NAND-Kette mit der Source-Leitung 1415 verbunden ist, und einem Drain-seitigen Auswahlgatter DSLi 1407i, über das die NAND-Kette mit der entsprechenden Bitleitung BLi 1403i verbunden ist.
-
Die Speicherzellen entlang jeder NAND-Kette sind zu Einheitssynapsen eines Paares von Speicherzellen gepaart, die ein Gewicht Wi,j speichern, wie es durch die Einheitssynapse von 10 dargestellt ist. Jede der NAND-Ketten kann eine oder mehrere Einheitssynapsen aufweisen, die in Reihe geschaltet sind, wobei die Ausführungsform von 14 pro NAND-Kette 32 Einheitssynapsen zeigt. Jede Einheitssynapse kann ein binäres Gewicht speichern und ist entlang eines Paares von Wortleitungen WL<j> 1405j und WL'<j> 1405'j verbunden, die einen entsprechenden Logikeingang Input<j> empfangen, der den Spannungen von 13 entspricht. Die Wortleitungspaare WL<j> 1405j und WL'<j> 1405'j überspannen die Spalten der NAND-Ketten des Blocks. In der Ausführungsform von 14 sind die Speicherzellen einer Einheitssynapse auf der NAND-Kette benachbart, aber andere Anordnungen können verwendet werden, sodass die Speicherzellen der Synapsen verschachtelt sind, anstatt zusammenhängend zu sein; und obwohl sich die Diskussion hier auf binäre Gewichte unter Verwendung von zwei SLC-Speicherzellen pro Synapse konzentriert, können andere Ausführungsformen mehr Speicherzellen pro Synapseneinheit, mehrstufige Speicherzellen oder beides verwenden, um neuronale Netzgewichte mit mehr als den zwei Werten das binären Beispiels speichern. Obwohl die NAND-Ketten in der gezeigten Ausführungsform aus ladungsspeichernden Flash-Speicherzellen bestehen, können auch andere Speicherzellen mit der gleichen Array-Architektur verwendet werden.
-
Die Bestimmung des Ausgangs einer Einheitssynapse 1401i,j, die das Gewicht Wi,j speichert, kann durch Anlegen eines logischen Eingangsspannungsmusters an den entsprechenden Eingang am Input<j> bestimmt werden, während die anderen Speicherzellen und Auswahlgatter der ausgewählten NAND-Kette als EIN vorgespannt sind. Basierend auf der Eingangslogik und der Gewichtungslogik wird die Einheitssynapse, die 1401i,j Gewicht Wi,j speichert, entweder leiten oder nicht, wie in der Tabelle von 15 dargestellt, die durch den entsprechenden Abtastverstärker SAi 1411i bestimmt werden kann. Wie weiter unten diskutiert, kann für jede Bitleitung eine entsprechende digitale Summierschaltung CSCi 1413i auf Zählerbasis verfolgen, wie viele der Einheitssynapsen entlang des Bitleitung in Reaktion auf die Eingänge leiten, diese Werte summieren, wobei die Abtastverstärker und Summierschaltungen Teil der Abtastblöcke 350 von 5 sein können. Der gleiche Eingang<j> wird gleichzeitig an alle Einheitssynapsen 1401i angelegt, wobei j das Gewicht Wi,j für alle Bitleitungen BLi 1403i speichert, wodurch die Auswahlgatter der entsprechenden Auswahlgatter SSLi 1409i und DSLi 1407i vorgespannt sind. Folglich kann derselbe Eingang gleichzeitig auf mehrere Synapsen angewendet werden. Die verschiedenen Synapsen entlang der NAND-Ketten können sequentiell zum Abtasten ausgewählt werden, wobei die Ergebnisse entlang jeder Bitleitung BLi 1403i durch CSCi 1413i akkumuliert werden. In einem NAND-Speicher ist eine Seite die Einheit von Lesen und Programmieren, wobei die gelesene Seite und die programmierte Seite normalerweise als gleich angesehen werden, wie beispielsweise die Gesamtheit der Speicherzellen, die entlang einer Wortleitung oder eines Teils der Speicherzellen, die entlang einer gemeinsamen Wortleitung verbunden sind. Zum Programmieren würden die Daten der Einheitssynapsen entlang einer einzelnen Wortleitung immer noch Wortleitung für Wortleitung programmiert; jedoch, bezogen auf eine Standard-NAND-Speicheroperation, bei der das Ziel, den Dateninhalt der einzelnen Speicherzellen zu bestimmen ist, wird das Lesen einer Seite der binären Gewichtseinheitssynapsen in Wortleitungspaaren durchgeführt, sodass die gelesene Seite in diesem Fall entsprechend einem Wortleitungspaar genommen werden kann.
-
Unter erneuter Bezugnahme auf 8 ist die Matrixmultiplikation eine Mehrfachsummenproduktberechnung (Skalarprodukt) für Eingangs-Gewichtungsvektorpaare (Zeile-Spalte von Eingangsmatrizen), die zum Umfolgern in einem neuronalen Netz verwendet werden. 15 und 16 betrachten ein Beispiel der Berechnung eines Skalarprodukts für die binäre neuronale Netz-Algebra und wie dies unter Verwendung einer zählerbasierten summierenden digitalen Schaltung für eine Ausführungsform eines SLC NAND BNN zu implementieren ist. Genauer gesagt, obwohl ein binäres neuronales Netz, das auf der in der Tabelle von 8 dargestellten Logik basiert, auf den Gewichten, Eingängen und Ausgängen mit den Werten von entweder +1 oder -1 basiert, wenn es durch ein NAND-Array implementiert wird, wie In 14 dargestellt, wird ein Abtastverstärker entweder als leitend („1“) oder nicht leitend („0“) registriert. Folglich erfordern die zählerbasierten digitalen Summationsschaltungen CSCi 1413i, um die Ergebnisse zum Berechnen des Skalarprodukts der Matrixmultiplikation zu akkumulieren, eine Umwandlung der (+1, -1) -basierten Werte in eine (1,0) -Basis, wobei die -1-Werte durch 0 ersetzt werden.
-
Die Tabelle von 15 betrachtet das Skalarprodukt des Beispiels eines Eingangsvektors Ibnn eines binären neuronalen Netzes mit 8 Elementen über die obere Zeile und eines Gewichtsvektors Wbnn eines binären neuronalen Netzes mit 8 Elementen in der zweiten Zeile, wenn alle Vektorelemente auf -1/+1 quantisiert sind. Die dritte Zeile veranschaulicht das Elementfür-Element-Produkt von Ibnn und Wbnn, gleich +1, wenn die beiden übereinstimmen, und -1, wenn sich diese unterscheiden. Das Skalarprodukt basiert dann auf dem Summieren dieser Bit-für-Bit-Produkte, um das Skalarprodukt Pbnn_dec der beiden Vektoren zu erzeugen. Im dezimalen System, wird das letzte korrekte Ergebnis der Addition dieser Werte als Pbnn_dec = 2 berechnet.
-
In den oberen beiden Zeilen der Tabelle von 16 werden der Eingangsvektor Ibnn und der Gewichtsvektor Wbnn für die gleichen Vektoren wie in 15 in die 1/0-Binärbasis umgewandelt. Die dritte Zeile von 16 zeigt den entsprechenden Abtastverstärkerausgang, welcher der bitweise XNOR-Wert der beiden Vektoren ist, welcher 1 ist, wenn die Werte übereinstimmen, und 0 ist, wenn sich die Werte unterscheiden. Indem diese Werte von den Abtastverstärkern SAi 1411i in den entsprechenden Summierschaltungen CSCi 1413i akkumuliert werden, um ihre Summe zu bestimmen, erzeugt dies einen Popcount CNTbnn_out, der den Werten der Zahl 1 entspricht. In dem Beispiel von 16 ist CNTbnn_out = 5, was sich vom Wert Pbnn_dec = 2 von 15 als Ergebnis einer Nichtübereinstimmung in dem Eingang unterscheidet und das Gewicht ist nun eine 0 anstelle von einer -1.
-
Um dies zu korrigieren und P
bnn_dec im Binärsystem zu bestimmen, kann eine Substitution des Ausgangs des Popcount-Operanden CNT
bnn_out in Gl. 1 verwendet werden, um ein abgeleitetes P
bnn_dec zu erhalten;
wobei S die Größe des Vektors ist. In diesem Beispiel ist S = 8, sodass P
bnn_dec = 2*5 - 8 =2 ist, was genau P
bnn_dec=2 für das Skalarprodukt von
15 ist.
-
17 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines binären neuronalen Netzes als Inferenz, wie es in den 15 und 16 dargestellt ist. In Schritt 1701 wird ein erster Eingangswert an ein Gewicht einer ersten Einheitssynapse angelegt, um eine Multiplikation innerhalb des Arrays durchzuführen. Unter erneuter Bezugnahme auf 14 entspricht dies dem Anlegen eines Eingangswertes<j> an eine entsprechende ausgewählte Einheitssynapse 1401i, wobei j das Gewicht Wi,j auf einer Bitleitung BLi 1403i speichert, beispielsweise Eingang<0>, angewandt an die unterste Einheitssynapse auf BL0. In Schritt 1703 bestimmt der entsprechende Abtastverstärker SAi 1411i, ob die NAND-Kette leitet (1) oder nicht (0), entsprechend einer XNOR-Verknüpfung der Eingangs- und Gewichtungswerte. Schritt 1705 führt die Akkumulation durch, wobei das Abtastergebnis zu einem CNTbnn_out-Wert addiert wird, der durch den Zähler CSCi 1413i aufrechterhalten wird. In Schritt 1707 wird bestimmt, ob es mehr Eingangs-/Gewichtspaare gibt, die zu dem Skalarprodukt beitragen sollen, entsprechend einem anderen Eingangs-/Gewichtspaar für das NAND (oder für andere NAND-Ketten auf anderen Blöcken, die entlang der Bitleitung verbunden sind) und wenn ja, wird zu Schritt 1701 zurückgekehrt. Wenn alle Eingangs-/Gewichtungs-Paare für CNTbnn_out des Skalarprodukts berechnet und summiert wurden, geht der Ablauf zu Schritt 1709 weiter, um den Popcount-CNTbnn_out-Wert zum Skalarprodukt Pbnn_dec umzuwandeln, unter Verwendung von Gl. 1. In dem Beispiel der Tabellen der 15 und 16 wäre der Wert „S“ für die Gleichung 1 gleich 8, während für eine gesamte NAND-Kette, wie in 14 dargestellt, S=32. Es sei angemerkt, dass die NAND-Array-Struktur von 14 die Berechnung eines Skalarprodukts gemäß dem Ablauf von 17 ermöglicht, das gleichzeitig entlang jeder Bitleitung ausgeführt wird.
-
18 zeigt eine Ausführungsform der Summationsschaltung für ein SLC NAND-Array zur Unterstützung von binären neuronalen Netzen. Insbesondere wiederholt 18 viele der Elemente von 16 in einer etwas vereinfachten Form, zeigt jedoch auch einen Wortleitungs-Decodiererblock 1811. Der Wortleitungs-Decodierer 1811 empfing die Eingänge, entweder einen -1- oder einen +1-Eingang für eine ausgewählte Einheitssynapse, die dann in das entsprechende Spannungsmuster für die Wortleitungspaare WL<j>, WL'<j> übersetzt werden und an ausgewählte Einheitssynapse eines der Wortleitungspaare angelegt werden (die der ausgewählten Einheitssynapse). Für nicht ausgewählte Einheitensynapsen auf der NAND-Kette und für die Auswahlgatter werden die Wortleitungen und Auswahlleitungen eingeschaltet, beispielsweise auf dem Spannungspegel von Vpass. Basierend auf diesen Eingängen können die auf Zählern basierenden digitalen Summationsschaltungen CSCi 1413i jeder der Bitleitungen den Zählwert, basierend auf dem Ausgang des Abtastverstärkers SAi 1411i im Akkumulationsprozess, erhöhen.
-
19 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung unter Verwendung eines binären neuronalen Netzes als Inferenz, wie es in den Tabellen der 15 und 16 und der Array-Architektur der 18 dargestellt ist. Beginnend mit Schritt 1901 und unter Bezugnahme auf 18 empfängt das Speicherarray einen Eingang Input<j> und übersetzt diesen in einen Satz von Spannungswerten, die einem -1, oder +1 -Eingangswert entspricht; und legt in Schritt 1903 den Spannungspegel an ein Wortleitungspaar WL<j>, WL'<j> 1405j, 1405'j an. Da die Wortleitungen die NAND-Kette des ausgewählten Blocks überspannen, kann der Prozess von 19 gleichzeitig für jede der NAND-Ketten für die Einheitssynapsen ausgeführt werden, die entlang des Wortleitungspaares WL<j>, WL'<j> 1405j, 1405'j verbunden sind. Zusätzlich sind in der NAND-Struktur die anderen Elemente einer ausgewählten NAND-Kette (SSLi 1409i, DSLi 1407i und die nicht ausgewählten Speicherzellen der NAND-Kette) als eingeschaltet vorgespannt, wie z. B. das Anwenden von Vpass in Schritt 1905. Obwohl in 19 als geordneter Satz von getrennten Schritten aufgelistet, werden die Schritte 1903 und 1905 typischerweise gleichzeitig vom Wortleitungs-Decodierer 1811 ausgeführt.
-
Schritt 1907 bestimmt die Leitfähigkeit des Satzes von Speicherzellen der ausgewählten Einheitssynapse. Wie in der Tabelle von 15 dargestellt, entspricht die Leitfähigkeit der NAND-Kette dem Ausgangslogikwert der Einheitssynapse als Reaktion auf den Eingang und kann durch den Abtastverstärker SAi 1411i bestimmt werden. Basierend auf dem Leitfähigkeitszustand der Einheitssynapse wird in Schritt 1909 der Zählwert des entsprechenden CSCi 1413i entweder inkrementiert oder nicht, wie oben in Bezug auf Gl. 1 und der Tabelle von 16 diskutiert.
-
Schritt 1911 bestimmt, ob es mehr Eingänge, Gewichtspaare gibt, die zum Skalarprodukt hinzugefügt werden sollen, und wenn dies der Fall ist, kehrt der Ablauf zu Schritt 1901 zurück. Sobald die Beiträge aller Eingänge, Gewichtspaare zu den Skalarprodukten bestimmt worden sind, kann das Skalarprodukt in Schritt 1913 bereitgestellt werden. Der in Schritt 1913 bestimmte Satz von Skalarprodukten kann dann als Eingang für eine nachfolgende neuronale Netzschicht oder als Ausgang des Inferenzprozesses dienen.
-
20 und 21 zeigen ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array. In dem oben mit Bezug auf 19 beschriebenen Prozess wird die Antwort auf einen Eingang einer Einheitssynapse entlang jeder Bitleitung basierend darauf bestimmt, ob der entsprechende Abtastverstärker bestimmt, dass die Einheitssynapse leitet oder nicht. Für einen gegebenen Block wird der Beitrag jedes der Synapsen entlang einer NAND-Kette sequentiell durch die Abtastverstärker bestimmt.
-
20 zeigt ein Beispiel von drei vollständig verbundenen Schichten mit jeweils vier Knoten, sodass die Gewichtsmatrix zwischen den Schichten eine 4x4-Matrix ist. In
20 sind die Eingänge an den Knoten mit I
l, i, n bezeichnet, wobei I der Schichtindex ist, i der Eingangsindex ist und n der Neuronenindex ist. In dem Beispiel von
20 sind drei Schichten gezeigt, I=(0,1,2), und jede hat vier Knoten, n=(0,1,2,3). (Der Eingangsindex wird in einigen der folgenden Beispiele für erhöhte Parallelität verwendet.) Die Gewichtsmatrizen W
l,n,n, die die Schichten verbinden, sind dann 4x4, wobei die Matrixmultiplikation zur Bildung der Skalarprodukte von den Eingängen einer Schicht zur nächsten ist:
-
Die Eingänge einer Schicht werden als Spannungsmuster auf den Wortleitungspaaren an die Einheitssynapsen angelegt, um Skalarporduktwerte zu erzeugen, die die Eingänge der nächsten Schicht sind.
-
21 ist eine schematische Darstellung davon, wie diese Gewichtungsmatrizen in den Einheitssynapsen eines NAND-Arrays für die In-Array-Berechnungen der Matrixmultiplikation gespeichert werden. In Bezug auf 18 wird der Block (hier mit Block 0 bezeichnet) in Form der in den Einheitssynapsen gespeicherten Gewichte dargestellt, anstelle der entsprechenden Speicherzellenpaare. Die Spannungspegel-Eingangsmuster werden als einzelner Eingang angezeigt, anstelle der an die entsprechenden Wortleitungspaare angelegten Spannungspegel. Die Gewichtsmatrix zwischen einem Paar von Schichten wird dann in einer Anzahl von Einheitensynapsen entlang einer Anzahl von NAND-Ketten gespeichert, wobei die Anzahl von Einheitensynapsen pro NAND-Kette und die Anzahl von NAND-Ketten der Größe der Gewichtsmatrix entspricht. In diesem Beispiel für 4x4-Gewichtsmatrizen entspricht dies 4 Einheitssynapsen entlang 4 NAND-Ketten. Wie in 21 dargestellt, sind dies 4 benachbarte Einheitssynapsen auf 4 benachbarten Bitleitungen, aber diese können abhängig von der Ausführungsform unterschiedlich über den Block verteilt sein.
-
In Bezug auf die Darstellung von 20 ist eine Gewichtsmatrix in transponierter Form auf dem NAND-Array gespeichert. Zum Beispiel werden die Gewichte von den verschiedenen Eingängen der ersten Schicht von 20 in dem oberen Knoten 2001 der zweiten Schicht entlang der ersten NAND-Kette gespeichert, die mit BL0 verbunden ist; und die Gewichte in dem unteren Knoten 2003 werden entlang der vierten NAND-Kette gespeichert, die mit BL3 verbunden ist. Um die Übereinstimmung zu zeigen, werden in 21 auch die Bezugszeichen 2001 und 2003 verwendet, um die Platzierung der entsprechenden Gewichte in diesen Knoten zu zeigen.
-
Um die verschiedenen Skalarprodukte der Matrixmultiplikation zu berechnen, werden die Dateneingänge in einer Folge von Lesebefehlen bereitgestellt. Um den Ausgang einer einzelnen Schicht zu berechnen, werden die Seiten von Gewichten dann sequentiell durch die Abtastverstärker über, in diesem Beispiel, vier Zyklen gelesen:
- Zyklus 1: erreicht I0,0,0*W0,0,0
- Zyklus 2: erreicht I0,0,1*W0,0,1
- Zyklus 3: erreicht I0,0,2*W0,0,2
- Zyklus 4: erreicht I0,0,3*W0,0,3,
wobei jeder der Zyklen einer Schleife in dem Ablauf von 19 entspricht und unterschiedliche Abtastreihenfolgen in unterschiedlichen Ausführungsformen verwendet werden können. Die Ergebnisse der Zyklen werden von dem Abtastverstärker SA auf jeder der Bitleitungen abgetastet und in den CSCs akkumuliert, wobei die Latenz des Akkumulationsprozesses unter den gleichzeitigen Multiplikationsoperationen für die folgenden gelesenen Zyklen verborgen ist. Der Ausgang Pn von jeder Bitleitung wird dann die Eingänge Il+1,i,n der nächsten Schicht sein.
-
22 veranschaulicht ein Beispiel eines neuronalen Netzes und dessen Implementierung durch ein NAND-Array zur Erzielung einer hohen Parallelität über NAND-Blöcke durch das Ausnutzen mehrerer Blöcke in einer einzigen Ebene. In dem oben mit Bezug auf die 19 und 21 beschriebenen Prozess wird die Antwort auf einen Eingang einer Einheitssynapse entlang jeder Bitleitung basierend darauf bestimmt, ob der entsprechende Abtastverstärker bestimmt, dass die Einheitssynapse leitet oder nicht. 22 betrachtet eine Ausführungsform, die einen Multibit-Abtastverstärker verwendet, wie z. B. einen, der zwischen verschiedenen Strompegeln unterscheiden kann, wodurch ermöglicht wird, dass mehrere Blöcke in einer einzelnen Ebene gleichzeitig abgetastet werden.
-
Bei einer Standardleseoperation, bei der es das Ziel ist, den in einer Speicherzelle gespeicherten Datenzustand zu bestimmen, wird die Bestimmung durch einen Abtastverstärker basierend auf einem Strom- oder Spannungspegel entlang einer Bitleitung basierend darauf vorgenommen, ob die ausgewählte Speicherzelle leitend ist oder nicht. Wenn mehrere Zellen entlang einer gemeinsamen Bitleitung gleichzeitig abgetastet würden, wobei einige leiten und andere nicht leiten, wäre es nicht möglich zu bestimmen, welcher der einzelnen Speicher die leitenden Zellen der Speicherzellen sind, und ihre entsprechenden Datenzustände herzustellen. Für den Ausgang des Zählers Pn aus der Matrixmultiplikation ist jedoch nur die Summe der Anzahl der Einheitensynapsen, die als Reaktion auf die Eingänge leiten, von Bedeutung, nicht jedoch, welche der einzelnen Synapsen dazu beitragen. Infolgedessen kann die Antwort mehrerer Einheitssynapsen auf verschiedene Blöcke als Reaktion auf einen entsprechenden Satz von Eingängen gleichzeitig bestimmt werden, wodurch die Parallelität erhöht wird, wenn der Abtastverstärker die Anzahl der leitenden Synapsen bestimmen kann. Durch die Integration von Mehrfachabtastverstärkern ermöglicht die Ausführungsform von 22, dass Mehrfacheinheitssynapsen entlang einer gemeinsamen Bitleitung von unterschiedlichen Blöcken parallel abgetastet werden.
-
22 ist ähnlich wie in 21 angeordnet und ist wiederum so dargestellt, dass sie die gleiche 4x4-Gewichtsmatrix speichert, welche die ersten zwei Schichten von 20 verbindet. 22 unterscheidet sich von 21 darin, dass die Gewichte jetzt auf zwei verschiedene Blöcke verteilt sind, hier mit Block 0 und Block 1 bezeichnet. Diese können jedoch auch zwei beliebige Blöcke derselben Ebene sein, und die Diskussion kann auf mehr als zwei Blöcke ausgedehnt werden, um die Parallelität weiter zu erhöhen. Wie oben unter Bezugnahme auf die 20 und 21 erläutert, wird die Gewichtsmatrix wieder in einer transponierten Form gespeichert.
-
Um eine Matrixmultiplikation durchzuführen, werden Dateneingänge in einer Folge von Lesebefehlen bereitgestellt, aber um den Ausgang einer einzelnen Schicht zu berechnen, werden jetzt mehrere Blöcke parallel gelesen (eine Seite mit Einheitensynapsen pro Block). In dem Beispiel von 22 für die Matrizen von 20, in denen zwei Blöcke gleichzeitig aktiviert sind, kann ein Ausgang einer Schicht innerhalb einer Latenz von 2 Zyklen berechnet werden:
- Zyklus 1: erreicht I0,0,0*W0,0,0 + I0,0,2*W0,0,2
- Zyklus 2: erreicht I0,0,1*W0,0,1 + I0,0,3*W0,0,3
wobei Zyklus 2 akkumuliert wird, während der Ausgang für Zyklus 1 berechnet wird, sodass die Akkumulationslatenz unter gleichzeitigen Multiplikationsoperationen verborgen bleibt.
-
23 ist ein Flussdiagramm für eine Ausführungsform einer Skalarproduktberechnung, ähnlich wie in 17, die jedoch die in 22 dargestellte Mehrblockparallelität enthält. In Bezug auf Schritt 1701 kann das parallele Abtasten mehrerer Blöcke in Schritt 2301 nun mehrere Eingänge gleichzeitig in jeder Schleife anwenden. In Schritt 2303 ist das Ausgangssignal des Abtastverstärkers nun ein Multibit-Wert anstelle des Binärwerts von Schritt 1703 und entspricht der Anzahl der leitenden Einheitssynapsen entlang einer Bitleitung. Der Multibit-Wert wird dann in Schritt 2305 akkumuliert, wobei die Schritte 2305, 2307 und 2309 den Schritten 1705, 1707 und 1709 von 17 entsprechen.
-
Um die Parallelität weiterhin zu erhöhen, kann die Anzahl der gleichzeitig abgetasteten Blöcke über die beiden im Beispiel von 22 gezeigten hinaus bis zur Gesamtzahl der Eingänge für die Schicht erhöht werden. Der Grad der Parallelität kann auf Überlegungen basieren, einschließlich der Menge des resultierenden Stroms, der gezogen werden würde, und des Auflösungsniveaus, das vernünftigerweise von den Mehrbit-Abtastverstärkern aus dem verfügbaren Stromfenster erreicht werden kann.
-
24 zeigt zusätzliche Ausführungsformen, welche die Parallelität weiterhin erhöhen können, indem eine Architektur verwendet wird, die gleichzeitig über mehrere Ebenen auf die Eingänge eines neuronalen Netzes schließen kann. Die Implementierung auf mehreren Ebenen kann zum Abtasten eines einzelnen Blocks gleichzeitig in jeder Ebene (wie in 21) oder für mehrere Blöcke gleichzeitig in jeder Ebene (wie in 22) verwendet werden. Das Beispiel von 24 basiert wiederum auf dem Beispiel des Netzes von 20 und verwendet zwei Ebenen und zwei Blöcke in jeder Ebene, obwohl sowohl die Anzahl der Ebenen als auch die der Blöcke erweitert werden können.
-
24 zeigt zwei Ebenen, Ebene 0 und Ebene 1, für eine Ausführungsform, bei der zwei Blöcke pro Ebene gleichzeitig abgetastet werden, wobei sich die Ebenen auf einem gemeinsamen Chip oder auf einem anderen Chip befinden können. Sowohl für Ebene 0 als auch für Ebene 1 werden die Gewichte wie in 22 gespeichert und die anderen Elemente werden ebenfalls aus 22 wiederholt. Wenn sich die Ebenen unterscheiden, ist dies der Eingangsindex für die beiden Ebenen mit den Eingängen I0,0,n für Ebene 0 und dem nachfolgenden Satz von Eingängen für die Ebene von I0,1,n für Ebene 1.
-
Bei der Parallelität auf Blockebene kann der Speicher mehrere Blöcke einer einzelnen Ebene verwenden, um einen Ausgang einer einzelnen Schicht zu berechnen, wobei die Lesebefehle parallel ausgegeben werden können, um auf mehrere Blöcke zuzugreifen, wie in Bezug auf 22 Figur beschrieben, mit einer Seite (der Einheitensynapsen) auf die pro Block in einem Zyklus zugegriffen wird. Durch Hinzufügen der Parallelität auf Ebenenebene von 24 können mehrere Ebenen verwendet werden, um mehrere Ausgänge einer einzelnen Schicht zu berechnen, indem dieselbe Gewichtsmatrix in beiden Ebenen gespeichert wird und Daten für beide Ebenen parallel bereitgestellt werden können. In der Ausführungsform von 24 können unter Verwendung von 2 Ebenen mit 2 Blöcken/Ebene parallel die zwei Ausgänge einer einzelnen Schicht innerhalb einer Latenz von 2 Zyklen berechnet werden, wobei die Akkumulationslatenz unter Multiplikation verborgen wird (Lesebefehl).
-
Die Parallelität kann auch durch die Verwendung von Ebenen-Pipelining erhöht werden, wobei der Ausgang einer Ebene (entsprechend der Matrixmultiplikation zwischen einem Knotensatz) als Eingang einer anderen Ebene verwendet werden kann (entsprechend der Matrixmultiplikation zwischen dem nächsten Knotensatz). Das Ebenen-Pipelining kann ferner mit Parallelität auf Blockebene, Parallelität auf Ebenenstufe oder beidem kombiniert werden, um noch größere Parallelitätsstufen zu erzielen.
-
25 zeigt eine Ausführungsform einer planaren Leitung für verschiedene neuronale Netzschichten. Unter erneuter Bezugnahme auf das Beispiel von 20 speichert die erste Stufe in der Pipeline die Gewichtsmatrix zwischen den Schichten 0 und 1 und die nächste Stufe speichert die mit der Gewichtsmatrix verbundenen Schichten 1 und 2. Das Beispiel von 25 gilt für zwei Stufen und enthält auch die 2-Ebenen-Parallelität und 2-Block-Parallelität, aber dies sind jeweils unabhängige Aspekte, und es können auf ähnliche Weise mehr Pipeline-Stufen implementiert werden, und der Grad der Parallelität beider Ebenen auf Blockebene ist höher, wenn zusätzliche Parallelität inkludiert wird. Die Ebenen können auf einem einzelnen Chip oder auf mehreren Chips ausgebildet sein.
-
Oben in 25 sind Ebene 0,0 und Ebene 0,1 als Ebene 0 und Ebene 1 für die Ausführungsform von 24 angeordnet und empfangen die Eingänge I0,0,n für Ebene 0,0 und I0,1,n für Ebene 0,1. Ebene 0,0 und Ebene 0,1 berechnen die Ausgänge der 0-Schicht unter Verwendung von Parallelität auf Block- und Ebenenniveau, um die Eingänge I1,0,n und I1,1,n für die nächsten Stufen in der Pipeline von Ebene 1,0 und Ebene 1,1 zu generieren. Unten in 25 sind Ebene 1,0 und Ebene 1,1 wie in der vorherigen Pipelinestufe in Ebene 0,0 und Ebene 0,1 angeordnet, speichern jedoch jetzt die Gewichtsmatrixeinträge W1,n,n (erneut in transponierter Form gespeichert) der zweiten statt der W0,n,n-Einträge der ersten Schicht. Durch Zuführen der Ausgänge der ersten Stufe zur zweiten Stufe und Anlegen der Eingänge I1,0,n und I1,1,n an die Matrixeinträge der Schicht-1 werden dann die Ausgänge der Schicht-1 berechnet.
-
Es ist anzumerken, dass die Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder beiden gespeichert werden können, obwohl dies den Grad der Parallelität verringert, da die Matrixmultiplikation der verschiedenen Schichten nicht gleichzeitig durchgeführt werden würde. Dies wird durch die Ausführungsform von 26 gezeigt.
-
26 zeigt eine Ausführungsform, bei der Gewichte verschiedener Schichten in demselben Block, derselben Ebene oder, in diesem Fall, beiden gespeichert werden können. Insbesondere zeigt 26 eine Ebene mit den Eingängen für zwei Schichten in einer Ebene mit Gewichten für jede in demselben Block. In diesem Beispiel befinden sich die Gewichte von Schicht 1, die in Ebene 1,0 von 25 waren, jetzt in denselben Blöcken wie die Gewichte von Schicht 0, die in Ebene 0,0 der 25 waren. Somit enthält Block 0 in 26 die Gewichte für Eingang<0> und Eingang<1> sowohl für Schicht 0 als auch für Schicht 1, und Block 1 enthält die Gewichte für Eingang<2> und Eingang<3> sowohl für Schicht 0 als auch für Schicht 1. Die Eingänge I0,0,n für die Schicht 0 erzeugen die Ausgänge Pn von I1,0,n für die Schicht 0, können dann, wie in Bezug auf 22 beschrieben, in einem ersten Satz von Lesevorgängen berechnet werden. Die I1,0,n dienen dann als Eingang für Schicht 1, wiederum wie mit Bezug auf 22 beschrieben, jedoch mit den Schicht 1-Gewichtungsmatrixwerten W1,n,n, um die Schicht 1-Ausgänge in einem zweiten Satz von Lesevorgängen zu erzeugen.
-
Die obigen Ausführungsformen präsentieren Verfahren und Architekturen zum Realisieren der Inferenzphase eines binären neuronalen Netzes mit binären Eingängen und binären Gewichten in einer NAND-Speicherstruktur. Durch Verwendung von zwei seriell verbundenen Speicherzellen als eine Einheitssynapse können Binärgewichte von neuronalen Netzen codiert und in einem NAND-Speicherarray gespeichert werden. Diese Techniken ermöglichen In-Array-Implementierungen der Matrixmultiplikation mit verbesserter Inferenzgenauigkeit, wenn binäre neuronale Netze für große Datensätze und komplizierte tiefe neuronale Netzstrukturen (DNN) angewendet werden.
-
In Bezug auf eine Standard-NAND-basierte Architektur geben die beschriebenen Ausführungsformen einige kleine Merkmalsänderungen für die vorhandene NAND-Speicherarchitektur vor, um verschiedene Stufen der Rechenparallelität zu unterstützen. Für die Programmier- und Löschvorgänge sind keine Schaltkreisänderungen erforderlich. Eine Modifikation wird an Zeilen-, Block- und/oder Ebenendecodierern eingeführt, um Leseoperationen zu steuern, um auf den Zwei-Zellen-Einheitssynapsen gespeicherte Gewichte abzutasten, da diese eine Doppelwortleitungsauswahl mit unterschiedlicher Spannungssteuerung und für Mehrblockausführungsformen mehrere Blockauswahlen verwenden. Um 0-Eingänge zu erfassen, wird eine modifizierte digitale Summationsschaltung auf Zählerbasis zusammen mit einer Null-Eingangserfassungsschaltung eingeführt. Durch die Einführung eines Multibit-Abtastverstärkers kann auch eine parallele Berechnung über Blöcke und Ebenen hinweg verwendet werden.
-
Gemäß einem ersten Satz von Aspekten beinhaltet eine Vorrichtung ein Array von nichtflüchtigen Speicherzellen und eine oder mehrere Steuerschaltungen, die mit dem Array von nichtflüchtigen Speicherzellen verbunden sind. Das Array von nichtflüchtigen Speicherzellen sind als NAND-Ketten angeordnet und konfiguriert, um eine Vielzahl von Gewichten eines neuronalen Netzes zu speichern, wobei jedes Gewicht in einer Vielzahl von nichtflüchtigen Speicherzellen auf einer gemeinsamen NAND-Kette gespeichert ist. Die eine oder die mehreren Steuerschaltungen sind konfiguriert, um eine Vielzahl von Eingängen für eine Schicht eines neuronalen Netzwerk zu empfangen, die Vielzahl von Eingängen in eine entsprechende Vielzahl von Spannungsmustern umzuwandeln, die Vielzahl von Spannungsmustern an das Array von nichtflüchtigen Speicherzellen anzulegen um dadurch eine In-Array-Multiplikation der Vielzahl von Eingängen mit den Gewichten durchzuführen und Ergebnisse der In-Array-Multiplikation zu akkumulieren.
-
In zusätzlichen Aspekten beinhaltet eine Vorrichtung ein Array von Speicherzellen, einen Wortleitungs-Decodierer und einen Multibit-Abtastverstärker. Das Array von Speicherzellen enthält: eine Bitleitung; eine Sourceleitung; und eine Vielzahl von NAND-Ketten, die jeweils eine Vielzahl von Speicherzellen enthalten und jeweils zwischen die Bitleitung und die Sourceleitung geschaltet sind. Der Wortleitungs-Decodierer ist mit den Speicherzellen verbunden und konfiguriert, um eine erste Mehrzahl von NAND-Ketten vorzuspannen, um eine gleichzeitige Abtastoperation an der ersten Mehrzahl von NAND-Ketten durchzuführen. Der Multibit-Abtastverstärker ist mit der Bitleitung verbunden und konfiguriert, um die Anzahl der ersten Vielzahl von NAND-Ketten zu bestimmen, die bei der gleichzeitigen Leseoperation leiten.
-
Weitere Aspekte beibehalten ein Verfahren, welches das Empfangen einer Vielzahl von Eingangswerten und das Übersetzen jedes der Vielzahl von Eingangswerten, die in ein entsprechendes Spannungsmuster eingegeben werden, beinhaltet. Jedes Spannungsmuster ist eines von mehreren Spannungsmustern, die einen Satz von N Spannungswerten aufweisen. Die Vielzahl von Spannungsmustern wird an eine oder mehrere NAND-Ketten angelegt, die mit einer gemeinsam genutzten Bitleitung verbunden sind. Nicht mehr als eines der Spannungsmuster wird gleichzeitig an eine einzelne der NAND-Ketten angelegt, und der Satz von N-Spannungswerten wird von jedem der Spannungsmuster an entsprechende N-Speicherzellen einer NAND-Kette angelegt, an die das Spannungsmuster angelegt wird. Die Häufigkeit, mit der die eine oder die mehreren NAND-Ketten leiten, wird als Reaktion auf die Vielzahl von Spannungsmustern bestimmt, die an eine oder mehrere NAND-Ketten angelegt werden, die mit der gemeinsam genutzten Bitleitung verbunden sind.
-
Für die Zwecke dieses Dokuments kann eine Bezugnahme in der Beschreibung auf „eine Ausführungsform“, „einige Ausführungsformen“ oder „eine andere Ausführungsform“ verwendet werden, um verschiedene Ausführungsformen oder dieselbe Ausführungsform zu beschreiben.
-
Für die Zwecke dieses Dokuments kann eine Verbindung eine direkte Verbindung oder eine indirekte Verbindung sein (z. B. über einen oder mehrere andere Teile). In einigen Fällen, wenn ein Element als mit einem anderen Element verbunden oder gekoppelt bezeichnet wird, kann das Element direkt mit dem anderen Element verbunden sein oder indirekt über zwischenliegende Elemente mit dem anderen Element verbunden sein. Wenn ein Element als direkt mit einem anderen Element verbunden bezeichnet wird, gibt es keine Zwischenelemente zwischen dem Element und dem anderen Element. Zwei Vorrichtungen sind „in Kommunikation“, wenn sie direkt oder indirekt miteinander verbunden sind, so dass sie elektronische Signale untereinander übertragen zu können.
-
Für die Zwecke dieses Dokumentes kann der Begriff „basierend auf“ als „zumindest teilweise basierend auf“ gelesen werden.
-
Für die Zwecke dieses Dokuments impliziert ohne zusätzlichen Kontext die Verwendung numerischer Ausdrücke, wie z. B. ein „erstes“ Objekt, ein „zweites“ Objekt und ein „drittes“ Objekt möglicherweise keine Sortierung von Objekten, sondern kann stattdessen zu Identifikationszwecken verwendet werden, um verschiedene Objekte zu identifizieren.
-
Für die Zwecke dieses Dokuments kann sich der Ausdruck „Satz“ von Objekten auf einen „Satz“ von einem oder mehreren der Objekte beziehen.
-
Die vorstehende detaillierte Beschreibung wurde zum Zwecke der Veranschaulichung und Beschreibung vorgelegt. Sie soll nicht erschöpfend sein oder die genaue offenbarte Form einschränken. Viele Modifikationen und Variationen sind unter Berücksichtigung der vorstehend genannten Lehre möglich. Die beschriebenen Ausführungsformen wurden gewählt, um die Prinzipien der vorgeschlagenen Technologie und ihre praktische Anwendung am besten zu erläutern und damit anderen Fachleuten die Möglichkeit zu geben, sie in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, die für die jeweilige vorgesehene Verwendung geeignet sind, am besten zu nutzen. Es ist beabsichtigt, dass der Umfang durch die hier beigefügten 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 62702713 [0001]
- US 9721662 [0019]
- US 9082502 [0020]