DE102020122174A1 - Berechne-in/nahe speicher- (cim) schaltungsarchitektur für vereinheitlichte matrix-matrix- und matrix-vektor-berechnungen - Google Patents

Berechne-in/nahe speicher- (cim) schaltungsarchitektur für vereinheitlichte matrix-matrix- und matrix-vektor-berechnungen Download PDF

Info

Publication number
DE102020122174A1
DE102020122174A1 DE102020122174.6A DE102020122174A DE102020122174A1 DE 102020122174 A1 DE102020122174 A1 DE 102020122174A1 DE 102020122174 A DE102020122174 A DE 102020122174A DE 102020122174 A1 DE102020122174 A1 DE 102020122174A1
Authority
DE
Germany
Prior art keywords
memory
mac
array
cnm
mux
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
DE102020122174.6A
Other languages
English (en)
Inventor
Huseyin SUMBUL
Gregory Chen
Phil Knag
Raghavan Kumar
Ram Krishnamurthy
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102020122174A1 publication Critical patent/DE102020122174A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7825Globally asynchronous, locally synchronous, e.g. network on chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4981Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/498Computations with decimal numbers radix 12 or 20. using counter-type accumulators
    • G06F7/4983Multiplying; Dividing
    • 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
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Logic Circuits (AREA)

Abstract

Eine Speicherschaltung umfasst eine Anzahl (X) von Multiplizieren-Akkumulieren- (MAC) Schaltungen, die dynamisch konfigurierbar sind. Die MAC-Schaltungen können entweder eine Ausgabe basierend auf Berechnungen von X Elementen des Eingangsvektors mit dem Gewichtungsvektor berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Elements des Eingangsvektors mit dem Gewichtungsvektor berechnen, wobei jedes Element eine Ein-Bit- oder Multi-Bit-Länge aufweist. Ein erster Speicher kann den Eingangsvektor umfassen, der eine Breite von X Elementen aufweist, und ein zweiter Speicher kann den Gewichtungsvektor speichern. Die MAC-Schaltungen umfassen ein MAC-Array-auf-Chip mit dem ersten Speicher.

Description

  • GEBIET
  • Beschreibungen beziehen sich im Allgemeinen auf Berechne-In/Nahe-Speicher (CIM; compute in/near memory), und genauere Beschreibungen beziehen sich auf ein dynamisches Schalten zwischen Matrix-Matrix-Berechnungen und Matrix-Vektor-Berechnungen mit gemeinsamer CIM-Hardware.
  • HINTERGRUND
  • Die künstliche Intelligenz (KI) von Computern wurde auf maschinellem Lernen aufgebaut, insbesondere unter Verwendung von Deep-Learning-Techniken. Mit Deep Learning berechnet ein als neuronales Netz organisiertes Rechensystem eine statistische Wahrscheinlichkeit einer Übereinstimmung von Eingangsdaten mit zuvor berechneten Daten. Ein neuronales Netz bezieht sich auf eine Mehrzahl von verbundenen Verarbeitungsknoten, die die Analyse von Daten ermöglichen, um einen Eingang mit „trainierten“ Daten zu vergleichen. Trainierte Daten beziehen sich auf die rechnerische Analyse von Eigenschaften bekannter Daten, um Modelle zur Verwendung zum Vergleichen von Eingangsdaten zu entwickeln.
  • Bestimmte Deep-Learning-Anwendungen, wie beispielsweise diejenigen, die Einzel- oder Klein-Batch- MLPs (multi-layer-perceptrons; mehrschichtige Perzeptronen), RNNs (recursive neural networks; rekursive neuronale Netze) und LSTMs (Long Short Short Term Memory - ein rekursives neuronales Netz mit Rückkopplung) anwenden, führen üblicherweise Matrix-Vektor- (M×V) Multiplikationen aus, wobei ein Vektor (oder eine schmale Matrix) von Neuronenaktivierungen mit einer Neuronales-Netz-Gewichtungsmatrix multipliziert wird.
  • Andere Deep-Learning-Anwendungen, wie z. B. diejenigen, die CNNs (Convolution Neural Networks; neuronale Convolution-Netze, wie sie z. B. für die Bildverarbeitung, Videoverarbeitung oder für Berechnungen oder die Klassifizierung eines zweidimensionalen (2D-) Bildes verwendet werden) oder Groß-Batch- MLPs anwenden, werden im Allgemeinen auf Matrix-Matrix- (M×M) Multiplikationen abgebildet, wobei eine Matrix mit einer Neuronales-Netz-Gewichtungsmatrix multipliziert wird.
  • Punktprodukt-Operationen für sowohl MxV als auch für MxM werden durch Verwendung eines Arrays von Multiplizieren-Akkumulieren- (MAC; multiply-accumulate) arithmetischen Einheiten ausgeführt. Ein zweidimensionales (2D) systolisches Array von MAC-Einheiten kann eine Hardware-Lösung mit guter Performance und Datenwiederverwendung für M×M-Operationen bereitstellen. Ein eindimensionaler (1D) Rechen-Array-Ansatz ist besser geeignet, um die Datenwiederverwendung von Vektorelementen zu maximieren, als ein 2D-systolisches Array. Somit stellt ein ID-Rechen-Array eine gute Performance für MxV-Operationen bereit. Daher bilden M×V-Multiplikationen üblicherweise sehr gut auf ID-Rechen-Arrays ab, während M×M-Multiplikationen üblicherweise gut auf 2D-Rechen-Arrays abbilden.
  • Die Ausführung von MxV auf einem 2D-systolischen Array verursacht jedoch, dass das Verhältnis von Rechen-zu-Speicher-Bandbreite (BW; bandwidth) drastisch sinkt. In ähnlicher Weise serialisiert die Ausführung von MxM auf einem ID-Array die hochgradig parallelisierbare Aufgabe des Punktprodukts, was Performance- und Energieprobleme verursacht. Infolgedessen müssen traditionelle Hardware-Ansätze auf die auszuführenden primären Operationen zugeschnitten werden, was entweder ein Optimieren für eine MxM-Operation oder MxV-Operation bedeutet. Einige Systemimplementierungen führen beide Arten von Operationen aus, was zu einem Performance-Verlust führt, da die Hardwarelösung für die nicht optimierte Arbeitslast nicht die maximale Performance bereitstellen kann.
  • Figurenliste
  • Die folgende Beschreibung umfasst eine Erörterung von Figuren, die Darstellungen aufweisen, die beispielhaft für eine Implementierung gegeben werden. Die Zeichnungen sollten beispielhaft und nicht einschränkend verstanden werden. Wie hierin verwendet, sind Bezugnahmen auf ein oder mehrere Beispiele so zu verstehen, dass sie ein bestimmtes Merkmal, eine Struktur oder eine Charakteristik, umfasst in zumindest einer Implementierung der Erfindung, beschreiben. Ausdrücke wie „bei einem Beispiel“ oder „bei einem alternativen Beispiel“, die hierin erscheinen, stellen Beispiele für Implementierungen der Erfindung bereit und beziehen sich nicht notwendigerweise alle auf die gleiche Implementierung. Sie schließen sich jedoch auch nicht notwendigerweise gegenseitig aus.
    • 1 ist ein Blockdiagramm eines Beispiels eines Berechne-In/Nahe-Speicher-Systems, das Berechnungen mit dynamisch konfigurierbaren Berechne-Nahe-Speicher- (CNM; compute near memory) Schaltungen ausführt.
    • 2 ist ein Blockdiagramm eines Beispiels eines dynamisch konfigurierbaren CNM-Kerns.
    • 3A ist ein Blockdiagramm eines Beispiels einer Rechenoperation für einen dynamisch konfigurierbaren CNM-Kern, der für Matrix-Matrix-Berechnungen konfiguriert ist.
    • 3B ist ein Blockdiagramm eines Beispiels einer Rechenoperation für einen dynamisch konfigurierbaren CNM-Kern, der für Matrix-Vektor-Berechnungen konfiguriert ist.
    • 4A ist ein schematisches Beispiel von Zyklen von Rechenoperationen mit einem dynamisch konfigurierbaren CNM-Kern, der für Matrix-Matrix-Berechnungen konfiguriert ist.
    • 4B ist ein schematisches Beispiel von Zyklen von Rechenoperationen mit einem dynamisch konfigurierbaren CNM-Kern, der für Matrix-Vektor-Berechnungen konfiguriert ist.
    • 5 ist ein Blockdiagramm eines Beispiels eines Systems mit einem Prozessor und einer dynamisch konfigurierbaren Berechne-In/Nahe-Speicher-Schaltungsanordnung.
    • 6 ist ein Flussdiagramm eines Beispiels eines Prozesses für In-/Nahe-Speicher-Berechnung mit einer Architektur, die entweder Matrix-Matrix- oder Matrix-Vektor-Berechnungen dynamisch berechnen kann.
    • 7 ist ein Blockdiagramm eines Beispiels eines Rechensystems, in dem Berechne-In/Nahe-Speicher- (CIM) Operationen mit einem dynamisch konfigurierbaren MAC-Array implementiert werden können.
    • 8 ist ein Blockdiagramm eines Beispiels eines Mehrknoten-Netzwerks, in dem Berechne-In/Nahe-Speicher- (CIM) Operationen mit einem dynamisch konfigurierbaren MAC-Array implementiert werden können.
  • Es folgen Beschreibungen bestimmter Details und Implementierungen, umfassend nicht einschränkende Beschreibungen der Figuren, die einige oder alle Beispiele darstellen können, sowie andere potenzielle Implementierungen.
  • DETAILLIERTE BESCHREIBUNG
  • Wie hierin beschrieben, umfasst eine Speicher- (memory) Schaltung eine Anzahl von Multiplizieren-Akkumulieren- (MAC) Schaltungen, die dynamisch konfigurierbar sind. Die MAC-Schaltungen oder MAC-arithmetischen Einheiten können konfiguriert sein, entweder eine Ausgabe basierend auf Berechnungen von X Bits eines Eingangsvektors mit einem Gewichtungsvektor zu berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Bits des Eingangsvektors mit dem Gewichtungsvektor zu berechnen. Ein erster Speicher stellt den Eingangsvektor bereit und ein zweiter Speicher stellt den Gewichtungsvektor bereit. Sowohl der Eingangsvektor als auch der Gewichtungsvektor können die gleiche Anzahl von Bits aufweisen (z.B. X Bits), und die Bits werden in Abhängigkeit von der Konfiguration in unterschiedlichen Kombinationen bereitgestellt und gegeneinander berechnet. Die MAC-Schaltungen sind in einem Array konfiguriert, und die Konfiguration kann die Operation des Arrays bestimmen. Bei einem Beispiel ist das Array konfiguriert, um eine MxV- (Matrix-Vektor) Berechnung zu berechnen. Bei einem Beispiel ist dasselbe Array konfiguriert, um eine MxM- (Matrix-Matrix) Berechnung zu berechnen.
  • Die dynamische Konfigurierbarkeit des MAC-Arrays ermöglicht derselben Schaltungsanordnung eine Optimierung entweder für eine MxM- oder MxV-Operation. Es wird darauf hingewiesen, dass sich Ausdrücke, die sich auf Optimierung oder optimieren beziehen, auf die Verbesserung der Performance relativ zu anderen Konfigurationen der Schaltungsanordnung beziehen. Solche Ausdrücke beziehen sich weder notwendigerweise auf absolute Optimen noch weisen sie darauf hin, dass keine zusätzlichen Verbesserungen durchgeführt werden könnten. Die Optimierung für eine MxM-Operation bezieht sich beispielsweise auf eine Konfiguration des MAC-Arrays, die die Performance des Arrays relativ zu einer Konfiguration verbessert, die die Performance für eine MxM-Operation verbessert. Alternativ kann man sagen, dass eine bestimmte Konfiguration sich auf eine Operationsart oder die andere fokussiert oder dass eine Konfiguration auf eine Operation einer bestimmten Art gerichtet ist. Mit einer solchen Konfigurierbarkeit kann dieselbe Schaltungsanordnung für beide Operationsarten eine hohe Performance bereitstellen. Es entsteht ein Aufwand für die Konfiguration, was die Performance im Vergleich zu einer Schaltungsanordnung, die ausschließlich für eine spezielle Operationsart optimiert ist, verringern können, die jedoch relativ zu einer Schaltungsanordnung, die für eine Operationsart konfiguriert ist und die andere Operationsart ausführt, eine bessere Performance bietet. Bei einem Beispiel wird die rekonfigurierbare MAC-Array-Hardware auf dedizierter Hardware wie beispielsweise einem dedizierten Prozessor oder Beschleuniger implementiert.
  • Somit kann dieselbe Schaltungsanordnung eine 2D-Array-Konfiguration für eine 2D-Operation bereitstellen, um Deep-Learning-Matrix-Operations-Arbeitslasten für große Mengen von Parametern neuronaler Netze (NN; neural networks) entweder für Inferenz- oder Trainingsaufgaben zu berechnen. In ähnlicher Weise kann dieselbe Schaltungsanordnung eine ID-Array-Konfiguration bereitstellen, die 1D-Rechenoperationen begünstigt. Die Berechnungen können 1D-Berechnungen für Einzel- oder Klein-Chargen-MLPs, RNNs und LSTMs umfassen, wobei ein Vektor (oder eine schmale Matrix) von Neuronenaktivierungen mit NN-Gewichtungen multipliziert wird. Die Berechnungen können 2D-Berechnungen für CNNs oder Groß-Chargen-MLPs umfassen. Bei einem Beispiel kann die Array-Konfiguration entweder für die 2D-Operation oder die ID-Operation in Form eines systolischen Arrays sein.
  • Systolische Arrays werden in der Technik als modulare Arrays von gleichen Elementen mit einer Architektur zum Ausbreiten von Daten und Ergebnissen durch die Elemente des Arrays verstanden, bevor sie zu einer primären Verarbeitungseinheit oder einem Speicher zurückkehren, und werden nicht im Detail beschrieben. Viele Beschreibungen beziehen sich auf systolische Arrays, die als Beispiele verstanden werden. Systolisches-Array-Architekturen können in bestimmten Implementierungen eine verbesserte Performance gegenüber Nicht-Systolisches-Array-Architekturen bereitstellen und werden daher verwendet, um unten stehende Beispiele zu beschreiben. Andere Architekturen als systolische Arrays können verwendet werden. Solche Architekturen können verschiedene Arten von Elementen oder verschiedene Anordnungen der Elemente verwenden.
  • Traditionelle Ansätze zur Berechnung neuronaler Netze umfassen Allzweck-Mehrkern-Hardware oder dedizierte Beschleuniger. Allzweck-Mehrkern-Ansätze verwenden üblicherweise SIMD-(Single Instruction Multiple Data) Typ vektorisierte, verteilte Lösungen für die Handhabung von Matrix-Operationen wie beispielsweise auf GPU- (Graphics Processing Unit; Graphikverarbeitungseinheit) Hardware oder Koprozessor-Hardware. Allzweck-Ansätze stellen eine angemessene Rechen-/Bandbreiteneffizienz für Matrix-Operationen bereit; sie liefern jedoch eine geringere Performance im Vergleich zu dedizierten Prozessoren.
  • Dedizierte Beschleuniger (wie beispielsweise eigenständige Chips, Beschleuniger, FPGA- (Field Programmable Gate Array) Plattformen oder andere dedizierte Hardware) verwenden abhängig von der gewählten Aufgabe und Arbeitslast üblicherweise angeordnete Multiplizierer wie ein 2D-systolisches Array oder ein ID-Rechen-Array. Traditionelle Beschleunigerlösungen erreichen eine sehr hohe Energieeffizienz für eine ausgewählte Aufgabe; sie erfahren jedoch Beschränkungen der Recheneffizienz oder der Energieeffizienz sowie Bandbreitenbeschränkungen beim Schalten zu einer anderen Aufgabe, z. B. beim Schalten von MxM- zu MxV-Operationen. Die beschränkte Effizienz bedeutet, dass bei vielen Implementierungen beide Arten von dedizierter Hardware verwendet werden, was den Aufwand erhöht und die Gesamteffizienz verringert, da bestimmte Hardware bei bestimmten Operationen zwangsläufig ungenutzt bleibt.
  • Mit dem konfigurierbaren MAC-Array kann ein System einen modularen Berechne-Nahe-Speicher- (CNM) Schaltungsblock als einheitliche Lösung sowohl für M×M- als auch für M×V-Operationen implementieren, was eine hohe Energieeffizienz und ein gutes Rechen-/Bandbreitenverhältnis bereitstellt. Der CNM-Schaltungsblock ist ein Beispiel einer „Berechne-In/Nahe-Speicher“- (CIM) Schaltung. Die Schaltung kann eine Berechne-In-Speicher-Schaltung sein, die einen Speicher zum Ausführen einer Berechnung umfasst. Eine Berechne-Nahe-Speicher-Schaltung bezieht sich genauer auf eine CIM-Schaltung, bei der der Speicher ein naher Speicher einer Multi-Ebenen-Speicherarchitektur ist, die zumindest eine Ebene von flüchtigem Speicher mit schnellerem Zugriff als eine Ferner-Speicher-Ebene von flüchtigem oder nichtflüchtigem Speicher umfasst. Eine CIM-Schaltung ist eine Schaltungsanordnung, die die Operation einer Berechnung in einer Speicherschaltung ermöglicht, ohne die Daten an den Prozessor senden zu müssen. Ein CIM-Beschleuniger führt grundlegende Operationen wie beispielsweise das Punktprodukt und die absolute Differenz von Vektoren innerhalb des Speicher-Arrays direkt aus, was die Notwendigkeit, Daten für eine Berechnung an eine Rechenmaschine oder einen Prozessor zu übertragen, reduziert. Die Reduzierung der Datenbewegung zwischen Speicher- und Verarbeitungseinheiten kann zur Beschleunigung von Algorithmen verwendet werden, deren Speicherbandbreite beschränkt ist. Die Reduzierung der Datenbewegung kann auch den Datenübertragungs-Energie-Overhead verringern. CIM-Beschleuniger, die auf analogen Operationen basieren, erlauben eine kostengünstigere Berechnung und eine höhere effektive Speicherbandbreite von Multibit-Datenauslesung pro S paltenzugriff.
  • Die Integration leichtgewichtiger Rekonfigurierbarkeitsschaltungen in CNM-Modulen mit einem kleinen nahen Speicher und einem Array von MAC-Einheiten ermöglicht zwei separate Matrix-Zugriffsmuster. Infolgedessen kann ein Array von CNM-Kernen dynamisch konfiguriert werden, um als 2D-Array für MxM-Operationen und als ID-Rechen-Array für MxV-Operationen auszuführen. Die Lokalisierung der Berechnung in der Nähe einer Speicherpartition maximiert die verfügbare lokale Speicherbandbreite und minimiert den Energieaufwand für die Übertragung von Bits für die Berechnung. Die Rekonfigurierbarkeit der modularen CNM-MAC-Einheiten ermöglicht ein Ausgleichen der Eingangs-, Gewichtungs- und Ausgangs-Wiederverwendung basierend auf einer ausgewählten Hardware-Konfiguration oder DNN- (Deep Neural Network; tiefes neuronales Netz) Charakteristika oder beidem, was hohe Energieeffizienzsteigerungen für eine Vielzahl von Anwendungsfällen ermöglicht.
  • Der modulare Charakter des beschriebenen CNM-Arrays ermöglicht eine konfigurierbare Operation sowie konfigurierbare Größen für verschiedene Anwendungen. Das konfigurierbare Array kann in irgendeiner Anzahl von Rechenvorrichtungen angewendet werden, die von Servern bis hin zu Edge-Vorrichtungen reichen. Das Array ist für verschiedene Anwendungen skalierbar und flexibel für unterschiedliche Systemnutzungen.
  • 1 ist ein Blockdiagramm eines Beispiels eines Berechne-In-Speicher-Systems, das Berechnungen mit dynamisch konfigurierbaren Berechne-Nahe-Speicher- (CNM) Schaltungen ausführt. System 100 stellt ein Beispiel für Komponenten eines Systems bereit, das MAC-Operationen auf konfigurierbarer Hardware implementieren kann. System 100 umfasst den gemeinsamen Knoten 110 und ein CNM-Array, dargestellt durch die zwei dargestellten CNM-Einheiten.
  • Bei einem Beispiel umfasst der gemeinsame Knoten 110 den fernen Speicher 112, der eine Speicherressource ist, die eine längere Zugriffszeit als der nahe Speicher aufweist. Der nahe Speicher ist mit der Hardware ko-positioniert, die die Berechnungen ausführt, und der ferne Speicher weist eine längere Zugriffszeit für die Rechen-Hardware auf als der nahe Speicher. Üblicherweise ist der ferne Speicher 112 größer als der nahe Speicher.
  • Bei einem Beispiel ist der ferne Speicher 112 eine SRAM- (Synchronous Random Access Memory; synchroner Direktzugriffspeicher) Vorrichtung. Bei einem Beispiel ist jeder nahe Speicher 130 eine SRAM-Vorrichtung. Bei einem Beispiel ist der nahe Speicher 130 eine Registerdatei einer Speichervorrichtung.
  • Bei einem Beispiel umfasst der gemeinsame Knoten 110 Steuerschaltungen und verschiedene sonstige arithmetische Logik oder Matrix-Operationslogik oder eine Kombination aus arithmetischer und Matrix-Logik. Die Logik kann als eigenständige Hardware oder als Teil eines Prozessors oder eines programmierbaren Logik-Arrays implementiert werden. Die Steuerung 114 stellt die Logik- und Steuerschaltungen dar. Die Steuerung 114 kann Schnittstellen mit der Berechne-In/Nahe-Speicher- (CIM) Hardware des CNM-Arrays umfassen. CIM OUT 116 stellt eine Schnittstelle dar, um eine Steuerung (CTRL; control) und Daten (X) von dem fernen Speicher 112 bereitzustellen. Daten X aus dem fernen Speicher 112 stellen einen der Operanden für die durch das CNM-Array auszuführenden Matrix-Berechnungen dar. CIM IN 118 stellt eine Schnittstelle zum Empfang von Daten (Y) von dem CNM-Array dar. Die Daten Y stellen das Berechnungsergebnis dar. Die Daten können in dem fernen Speicher 112 gespeichert werden.
  • Der gemeinsame Knoten 110 umfasst eine relativ große Speichervorrichtung wie den fernen Speicher 112 zum Speichern von X und Y. Der nahe Speicher 130 ist kleiner als der ferne Speicher 112. Die Steuerung 114 kann einen oder mehrere Steuerblöcke für die Datenkommunikation und den Zugriff auf Speicher sowie verschiedene arithmetische Operationen sein oder umfassen, die zur Implementierung des Deep-Neural-Network- (DNN) maschinellen Lernens erforderlich sind. Die arithmetischen Operationen mit gemeinsamen Knoten können, abhängig von den Ziel-Arbeitslasten, elementweise arithmetische Operationen, Reduktion, Pooling, Nicht-Linearitäts-Operationen, Matrix-Transponierung, Datenumformung, Komprimierung oder eine Kombination derselben oder andere Operationen umfassen, sind aber nicht darauf beschränkt. Die Verwendung eines konfigurierbaren CNM-Arrays ist mit irgendeiner Entwurfsauswahl des gemeinsamen Knotens 110 und irgendeiner arithmetischen Operation, die in dem gemeinsamen Knoten 110 implementiert ist, kompatibel, solange die Downstream- und Upstream-Steuerung mit den CNM-Kernen implementiert ist.
  • Das CNM-Array umfasst mehrere CNM-Einheiten oder CNM-Kerne, die als CNM 120 identifiziert sind. Das System 100 stellt ein Obere-Ebene-Layout für CNM-Blöcke bereit. Für irgendeine Problemgröße können Matrizen und Vektoren gemäß der CNM-Kachelgröße (tile-size) in Kacheln geteilt werden, um MxV / MxM mit höchstmöglicher Verwendungsrate zu implementieren. Die Kachelgröße von CNM 120 bezieht sich auf die Anzahl der umfassten MAC-Einheiten. Somit ist das Beispiel von 2 mit 4 MAC-Einheiten, was eine Kachelgröße von 4 und einen Wert von M=4 ergibt. V ist kleiner als M, wie beispielsweise V=1.
  • CNM bezieht sich auf eine Berechne-Nahe-Speicher-Ressource, bei der Recheneinheiten direkt an dem Speicher oder sehr nah an dem Speicher integriert sind. Die in der Nähe des Speichers positionierten Recheneinheiten stellen feinkörnige verteilte Rechen- und Speicherarrays bereit. Während ein typischer Zugriff auf den Speicher einen Befehl senden und auf Datenergebnisse an einem Verarbeitungskern warten würde, der alle Berechnungen ausgeführt hat, können bestimmte Berechnungen mit der CNM-Architektur direkt an dem Speicher ausgeführt werden, wodurch die Menge an Daten, die von dem Speicher zu dem Prozessor übertragen werden müssen, reduziert wird. Vielmehr weist der Speicher selbst Rechenressourcen auf, die ein Ergebnis einer Berechnung zurückgeben können, anstatt einfach nur in einer Berechnung zu verwendende Daten.
  • Bei der Konfiguration von System 100 verteilt das System Gewichtungen an nahe Speicher 130 auf CNM-Kerne von CNMs 120. Bei einem Beispiel speichert der ferne Speicher 112 des gemeinsamen Knotens 110 die Eingangsmatrix (X). Ähnlich wird die Ausgangs-Y-Matrix an den gemeinsamen Knoten 110 zurück gesendet, um verarbeitet oder in dem fernen Speicher 112 gespeichert zu werden. Bei einem Beispiel werden alle Speicherzugriffe innerhalb des Systems 100 gekachelt, wobei die gleichen Adressen für alle nahen Speicher 130 in jeder CNM 120 verwendet werden. Bei einem Beispiel erzeugt der gemeinsame Knoten 110 die Adressen oder Adressinformationen zu nahen Speichern 130.
  • Bei einem Beispiel sendet das System 100 eine kleine Anzahl von Adress- und Lese-/Schreib-Steuerbits zusammen mit dem einen oder den mehreren Eingangs-X-Vektoren an den Downstream-Datentransfer. Bei einem Beispiel leiten die CNMs 120 dieselben Daten in einem 1D-systolischen Array downstream weiter. Als Ergebnis des Weiterleitens der gleichen Daten downstream würde der CNM-Kern nur leichtgewichtige Steuerschaltungen benötigen, um die Steueroperationen zu implementieren.
  • Die CNMs 120 umfassen einen Eingangspuffer (In Buff; input buffer) 124 für die Downstream-Kommunikation und umfassen einen Ausgangspuffer (Out Buff; output buffer) 126 für die Upstream-Kommunikation. Die Downstream-Kommunikation bezieht sich auf die Kommunikation von dem gemeinsamen Knoten 110 zu den CNM-Kernen oder von einem CNM-Kern, der näher an dem gemeinsamen Knoten 110 ist, zu einem CNM-Kern, der weiter von dem gemeinsamen Knoten 110 entfernt ist. Ähnlich bezieht sich die Upstream-Kommunikation auf eine Kommunikation von den CNM-Kernen zu dem gemeinsamen Knoten 110 oder von einem CNM-Kern, der weiter von dem gemeinsamen Knoten 110 entfernt ist, zu einem CNM-Kern, der näher an dem gemeinsamen Knoten 110 ist. Bei einem Beispiel wird die 1D-Systolisches-Array-Kommunikation downstream und upstream zwischen CNMs 120 in einer Flop-to-Flop-Weise implementiert. Daher kann der Eingangspuffer 124 für zwei Zwecke verwendet werden: zum Speichern des einen oder der mehreren Eingangs-X-Vektoren und zum Übertragen des einen oder der mehreren Eingangs-X-Vektoren an den nächsten CNM-Kern downstream. Bei einem Beispiel umfasst CNM 120 zusätzliche Flops in dem CMD (command; Befehl) 122 neben dem Eingangspuffer 124, um die Adress- und Steuerbits zu halten und downstream zu übertragen.
  • CTRL von CIM OUT 116 stellt Steuerbits oder Befehlsbits von dem gemeinsamen Knoten 110 dar. CNM 120 umfasst CMD oder Befehl 122, der einen Puffer für die Steuersignale darstellt. Die Pufferung und Weiterleitung der Befehle kann ähnlich zu dem vorangehend im Hinblick auf den Eingangspuffer 124 und den Eingang X Beschriebenen sein. Bei einem Beispiel können ein oder mehrere Eingangs-X-Vektoren von dem Eingangspuffer 124 an die als Config array 132 angezeigte Steuerhardware bereitgestellt werden. Bei einem Beispiel verursacht der Befehl, dass der nahe Speicher 130 Gewichtungsmatrixdaten W an das Config array 132 erzeugt.
  • Config array 132 konfiguriert das MAC-Array 134 für die ausgewählte, durch den gemeinsamen Knoten 110 angefragte Operation. Config array 132 kann die Akkumulationsoperation des MAC-Arrays 134 konfigurieren. Die Akkumulationsoperation verursacht, dass das MAC-Array die Akkumulation für eine bestimmte Anzahl von Operationen ausführt, bevor es ein finales Akkumulationsteilprodukt zum Schreiben an den PSUM-Buff (partial sum buff; Teilsummenpuffer) 136 sendet. Der PSUM-Puffer 136 ermöglicht das Senden der Teilsummen upstream.
  • Das Senden der Teilsummen upstream erfolgt gemäß dem Zugriffsmuster für die Art der Operation (Matrix-Vektor oder Matrix-Matrix). CNM 120 überträgt die Teilsummen upstream über einen Ausgangs-Y-Port. Bei einem Beispiel wird der Ausgangs-Y-Port durch einen Mux (Multiplexer) 128 getrieben, der entweder eine lokale Teilsumme von dem PSUM Buff 136 oder die Teilsumme einer Downstream-CNM, empfangen an dem OUT Buff 126, auswählt. Bei einem Beispiel sendet CNM 120 die Teilsummen unmittelbar nach 1 Taktzyklus ansprechend auf ein Akkumulationssignal (Teil der Steuersignale - nicht speziell in System dargestellt, aber in System 200 gezeigt). Bei einem Beispiel sendet CNM 120 Teilsummen nach einer Anzahl von Taktzyklen, entsprechend einem Wert, der einen Ort der CNM-Einheit in dem Array anzeigt. Der Wert, der den Ort einer bestimmten CNM-Einheit anzeigt, kann durch eine Zahl angezeigt werden, die auch die Anzahl von MAC-Einheiten in einem MAC-Array innerhalb jeder CNM anzeigt (bei einer Implementierung kann er als „Kachelgröße“ bezeichnet werden). Nach der Array-Größen- oder Kachelgrößen-Anzahl von Taktzyklen kann die CNM-Einheit ihre Teilsummen ausgeben.
  • Nachdem die finale Akkumulation abgeschlossen ist, sendet CNM 120 bei einem Beispiel den Inhalt ihres PSUM Buff 136 und setzt den PSUM Buff auf 0 zurück. Das Zurücksetzen nach dem Aussenden des Inhalts ermöglicht es CNM 120, zu Beginn des nächsten Taktzyklus unmittelbar für einen neuen Satz von Akkumulationsoperationen bereit zu sein. Somit kann das MAC-Array 134 in jedem Taktzyklus verwendet werden, solange es Eingänge aus der Eingangs-Pipeline gibt. Eingangssignale werden in dem IN Buff 124 gepuffert und Ausgangssignale werden in dem OUT Buff 126 gepuffert, was es dem Array von CNM 120 ermöglicht, in einer Pipeline-Weise mit einer Betriebsverzögerung von einem Taktzyklus zwischen benachbarten CNM-Kernen in einem 1D-systolischen-Array zu arbeiten. Bei einem Beispiel, wenn in jeder CNM 120 eine ausreichende Menge von In-Place-Akkumulationen ausgeführt wird, ist die Ausgangsdaten-Übertragung kollisionsfrei und es ist keine zusätzliche Kommunikationssteuerung erforderlich.
  • Der nahe Speicher 130 umfasst ein Array von Speicherzellen oder Bitzellen. Bei einem Beispiel basiert das Array auf einer Dynamischer-Direktzugriffsspeicher- (DRAM; Dynamic Random Access Memory) Technologie. Bei einem Beispiel basiert das Array auf einer resistiv-basierten Direktzugriffsspeicher (RAM; random access memors) Zelle, wie beispielsweise resistivem RAM (ReRAM; resistive RAM), magnetoresistivem RAM (MRAM; magnetoresistive RAM), ferroelektrischem RAM (FeRAM; ferroelectric RAM), dielektrischem RAM oder einem anderen Speicher, einem dreidimensionalen (3D) Crosspoint (3DXP; three dimensional crosspoint) Phasenänderungs-basierten RAM oder einer anderen byteadressierbaren Direktzugriffsspeicher-Technologie. Bei einem Beispiel basiert der ferne Speicher 112 auf SRAM. Bei einem Beispiel basiert der ferne Speicher 112 auf einer der anderen vorstehend identifizierten Technologien.
  • Bei einem Beispiel ist der gemeinsame Knoten 110 eine Hardware-Plattform umfassend Speicher und eine Schaltungsanordnung in der Nähe eines Prozessors. Somit kann das, was als ferner Speicher 112 in System 100 bezeichnet wird, ein Cache- oder Notizblockspeicher für den Prozessor sein. Der ferne Speicher 112 ist in System 100 „fern“ relativ zu den MAC-Berechnungen, ausgeführt durch den lokalen Speicher oder den nahen Speicher 130, der in der Nähe des MAC-Arrays 134 positioniert ist. Als Cache oder Notizblockspeicher könnte der ferne Speicher 112 tatsächlich ein „naher Speicher“ im Hinblick auf den Host-Prozessor oder die Host-Verarbeitungseinheit einer Rechenvorrichtung sein, in die das System 100 eingebracht ist.
  • Ein Cache-Speicher kann sich auf eine Speicherebene in einer Speicherhierarchie beziehen. Der Zugriff auf einen Cache-Speicher kann durch ein Protokoll eingeschränkt werden, das definiert, wie auf den Speicher zugegriffen werden kann, sowie wann und wo der Zugriff erfolgen kann. Ein Notizblockspeicher kann sich auf einen Speicher beziehen, der einem Cache ähnlich ist, auf den jedoch jederzeit zufällig durch den Prozessor zugegriffen werden kann, ohne spezifische Zugriffsbeschränkungen, die auf einen Cache anwendbar sein können (z. B. Anweisungssatz-Architektur-(ISA; instruction set architecture) Regeln). Die Anwendung einer CNM, wie beschrieben, kann sich entweder auf einen Cache- oder einen Notizblockspeicher beziehen. Es wird darauf hingewiesen, dass die Anwendung einer CNM auf einen Cache die Anwendung bestimmter Cache-Zugriffsregeln umfassen kann.
  • Bei einem Beispiel ist das System 100 auf einem gemeinsamen Die mit dem Host-Prozessor integriert, wobei CNM 120 und ihr zugeordneter Speicher und MAC-Einheiten Teil einer Hardware-Beschleunigungsschaltung sind. Anstatt auf einem Host-Prozessor-Die integriert zu sein, kann das Array von CNM 120 auf einem Hardware-Beschleuniger-Die integriert sein, der entweder auf einem gemeinsamen Substrat oder einer Hauptplatine mit dem Host-Prozessor eingebracht ist oder in einem System-auf-einem-Chip mit dem Host-Prozessor umfasst ist. Somit können die MAC-Arrays mit dem Host-Prozessor auf einen Die eingebracht werden oder können chipextern von dem Prozessor als Hardware-Beschleuniger implementiert werden.
  • 2 ist ein Blockdiagramm eines Beispiels eines dynamisch konfigurierbaren CNM-Kerns. Das System 200 stellt ein Beispiel eines Systems gemäß System 100 von 1 dar. Der CNM-Kern 210 stellt eine CNM-Einheit oder einen CNM-Kern gemäß CNM 120 von 1 dar. Bei einem Beispiel kann CNM 210 mit einem größeren Speicher integriert sein, wie beispielsweise SRAM (static random access memory; statischer Direktzugriffspeicher), DRAM (dynamic random access memory, dynamischer Direktzugriffspeicher) oder einem anderen Speichertyp.
  • Der CNM-Kern 210 stellt Details eines Beispiels einer modularen CNM-Kern-Schaltung dar. Der CNM-Kern 210 umfasst einen Eingangspuffer 212 und einen Eingangs-Mux oder Eingangsselektor 214 zum Empfangen und Verteilen des Eingangsvektors. Der CNM-Kern 210 umfasst die Steuerung (CTRL) 216, um die Operation des CNM-Kerns gemäß den empfangenen Steuersignalen zu konfigurieren. Der CNM-Kern 210 umfasst einen nahen Speicher (near mem; near memory) 220 zum lokalen Speichern von Gewichtsungsdaten (W; weight data) und einen Mux 222 zum Bereitstellen ausgewählter Bits an das MAC-Array. Der CNM-Kern 210 umfasst das MAC-Array 230 und den Teilsummen-Puffer (PSUM) 232. Die Teilsummen können in das MAC-Array 230 zurückgeführt oder an den Ausgang bereitgestellt werden, wenn die Berechnungen abgeschlossen sind. Der CNM-Kern 210 umfasst einen Ausgangspuffer 240 zum Empfangen und Puffern von Ausgangsdaten von downstream und Selektoren oder Ausgangs-Muxes 242, um entweder die lokalen Berechnungen weiterzuleiten oder die von downstream empfangenen Daten weiterzuleiten. Die Steuerung (CTRL) 244 stellt die Steuerfunktionalität zum Konfigurieren des Betriebs von Ausgangs-Muxes 242 dar.
  • Bei einem Beispiel umfasst das MAC-Array 230 mehrere MAC-Einheiten. Bei einem Beispiel, wenn das System 200 in einen Deep-Learning-Beschleuniger, ausgerichtet für Inferenz-Arbeitslasten, eingebracht wird, werden die MAC-Einheiten und die Akkumulation mit Ganzzahl-Arithmetik implementiert. Bei einem Beispiel, wenn das System 200 in einen Deep-Learning-Beschleuniger eingebracht ist, der für Trainings-Arbeitslasten ausgerichtet ist, werden die CNM-Recheneinheiten mit Fließkomma-Arithmetik gebaut. Abhängig von den Ziel-Deep-Learning-Arbeitslasten kann eine einzelne Auswahl von Bitpräzision (z. B. INT32, Voll-Präzisions-Fließkomma oder andere feste Bitpräzision), rekonfigurierbarer Bitpräzision (z. B. INT8/4/2/1 oder andere rekonfigurierbare Präzision) oder gemischter Präzision (z. B. bfloat16/INT8 oder andere) arithmetisch basierte MAC-Einheiten in dem MAC-Array 230 implementiert werden.
  • Wie dargestellt, sind der Eingangspuffer 212, der nahe Speicher 220, das MAC-Array 230, die Akkumulations- („Teilsummen“ oder „PSUM“) Puffer 232 und die Upstream-Ausgangspuffer 240 an die Entwurfsauswahl von M=4 angepasst, gezeigt als Vektoren von 4 Elementen. Die 4 Elemente können als Kachelgröße bezeichnet werden, was ein Wert ist, der mit der Eingangsbreite und der Ausgangs-Array-Größe konsistent sein kann. Während das Beispiel mit 4 MAC-Elementen oder M=4 bereitgestellt wird, wird darauf hingewiesen, dass das System skalierbar ist und mit mehr oder weniger Elementen durchgeführt werden kann. Die Verwendung von binären Zahlen in dem Array kann eine verbesserte Effizienz bereitstellen (z. B. aufweisend M=2, 4, 8, 16, 32, ...). Die Verwendung einer binären Zahl ist nicht erforderlich, und was beschrieben ist, sollte auf jeden ganzzahligen Wert größer als 1 anwendbar sein. Bei einem Beispiel gibt es eine Anzahl von CNM-Kernen, die mit der Anzahl der MAC-Elemente in dem MAC-Array innerhalb jedes CNM-Kerns 210 übereinstimmt. Somit stellt System 200 ein Beispiel von Vektor-von-4-Elementen für den Eingang X[3:0], gespeicherte Daten W[3:0] und ein MAC-Array, das sich auf Teilsummen Psum[3:0] akkumuliert, mit einem Ausgang Y[3:0] dar, wobei M=4 und die anderen Elemente im Allgemeinen die Form [(M-1):0] aufweisen. Wenn eine unterschiedliche Anzahl von MAC-Elementen verwendet wird, ist der Wert von M entsprechend unterschiedlich. Bei einem Beispiel ist ein Element ein Bit. Bei einem Beispiel ist ein Element ein Multi-Bit-Element. Als allgemeines Beispiel gibt es für X MACs ein Paar von X Elementen, wobei jedes Element ein einzelnes Bit oder mehrere Bits sein kann.
  • Der Eingangspuffer 212 empfängt und speichert einen Eingangsvektor „X“, dargestellt als Eingang X[3:0]. Die Daten werden als Downstream-Daten bezeichnet, weil sie von der Quelle des Befehls und der Quelle des Eingangsvektors downstream fließen. Bei einem Beispiel empfängt der erste CNM-Kern in dem ID-Array den Eingang X von dem fernen Speicher und leitet die Daten an den nächsten Kern weiter, der wiederum die Daten in einer ID-systolischen Weise an den nachfolgenden Kern downstream weiterleitet. Der Eingangsvektor X kann in dem Eingangspuffer 212 gespeichert werden, der bei einem Beispiel ein Array von Flip-Flops (FF) sein kann. Wenn der Eingangspuffer als ein Array von Flip-Flops implementiert ist, kann der CNM-Kern 210 den Eingang X in einer Flop-zu-Flop-Weise downstream zu dem nächsten CNM-Kern weiterleiten. Bei einem Beispiel ist der Eingangspuffer 212 als ein Array von Latches oder ein Speicher kleiner Größe (wie beispielsweise eine Registerdatei oder SRAM) implementiert. Die Implementierung des Eingangspuffers 212 hängt von den Hardware-Anforderungen, den Matrix-Größen und dem verfügbaren Hardware-Budget ab. Bei einem Beispiel kann der Eingangspuffer 212 als paralleler Eingangspuffer implementiert werden. Bei einem alternativen Beispiel kann der Eingangspuffer 212 als serieller Eingangs-FIFO (first in, first out) Puffer implementiert werden, abhängig von der Auswahl der Pufferschaltung, der Bandbreite und den verfügbaren Hardware-Ressourcen. In dem Diagramm stellen die durchgezogenen Linien den Eingang dar, die zu dem Eingangspuffer 212 und dem Mux/Selektor 214 läuft. Die gestrichelten Linien stellen dar, dass die Signale auch an einen Eingangsdurchgang weitergeleitet werden, um downstream zu senden.
  • Der nahe Speicher 220 speichert einen Vektor lokaler Gewichtungen „W“, der ausgebildet ist, in dem Lese-Port des Speichers gepuffert zu werden. Bei einem Beispiel ist der nahe Speicher 220 als ein Speicher kleiner Größe mit hoher lokaler Bandbreite implementiert. Beispiele für Speicher mit hoher lokaler Bandbreite können eine Registerdatei (RF; register file) oder einen kleinen SRAM umfassen. Der nahe Speicher 220 kann abhängig von Hardware- und Arbeitslast-Spezifikationen eine Einzelzugriffsfähigkeit oder eine Multiport-Zugriffsfähigkeit aufweisen. Somit kann der nahe Speicher 220 irgendeines von einer Vielzahl von Arten von RF umfassen, wie z. B. 1RW, 1R1W oder andere Multiport-Speicher. Der nahe Speicher 220 kann alternativ irgendeines von einer Vielzahl von kleinen SRAM-Varianten sein, wie z. B. 1RW, 1R1W oder ein anderer Multiport- Speicher.
  • Bei einem Beispiel funktioniert der nahe Speicher 220 als eine sequentielle Schaltung synchron mit den Flops des Eingangspuffers 212, um die MAC-Operation zu pipelinen. Bei einem Beispiel ist das Mux-Array 214 mit dem Eingangspuffer 212 verbunden und das Mux-Array 222 ist mit dem nahen Speicher 220 verbunden. Bei einem Beispiel ist der Eingang zu den Mux-Arrays ein Vektor mit einer Anzahl von Elementen gleich der Kachelgröße. Die Ausgabe des Mux-Arrays kann ein Vektor der gleichen Länge sein.
  • Der CNM-Kern 210 empfängt Steuer- (CTRL) Bits, wie z. B. ein Gültig-Signal, ein Akkumulations- (ACC; accumulate) Signal, ein Adress- (ADR; address) Signal und ein oder mehrere andere Konfigurations- (CONFIG; configuration) Bits. Das Gültig-Signal kann als „Go“- (Start) Signal für die Hardware zum Ausführen einer Operation betrachtet werden. Das ACC-Signal kann als „Done“- (Fertig) Signal betrachtet werden, was bedeutet, dass die Operation abgeschlossen ist und das akkumulierte Ergebnis gesendet werden kann. Das ADR-Signal zeigt eine Adresse eines Speicherortes an, der bei den Berechnungsoperationen verwendet werden soll. Die CONFIG-Bits können sich auf irgendwelche anderen Signale beziehen, die zur Konfiguration des Konfigurations-Arrays verwendet werden. Das Konfigurations-Array bezieht sich auf die Komponenten, die den Fluss der Bits zu dem MAC-Array 230 steuern.
  • Für CNM 210 muss das System die Schaltungsanordnung nicht per se „konfigurieren“. Bei einem Beispiel ändert sich mit der Einstellung eines oder mehrerer Konfigurations- oder Steuersignale der Fluss von Bits von dem Eingang und dem nahen Speicher zu dem MAC-Array, was die durch das MAC-Array ausgeführte Operation ändert. Der Fluss von Bits in das MAC-Array 230 als Eingänge, auf denen berechnet werden soll, ändert die logische Operation, die durch das MAC-Array ausgeführt wird, selbst wenn die MAC-Array-Operation in jedem Fall die gleiche ist. Die als Eingänge verwendeten Bits und die Anzahl der zur Berechnung verwendeten Zyklen können den Unterschied zwischen einer MxV- und einer MxM-Operation bestimmen. Bei einem Beispiel kann die MxM-Operation auf mehrere unterschiedliche Arten ausgeführt werden. Beispielsweise kann die Konfiguration des CNM-Kerns 210 eingestellt werden, um unterschiedliche Bits für jeden Operationszyklus an das MAC-Array bereitzustellen. Als Alternative kann die Operation einer MxV-Operation erweitert werden, indem das MxV-Operationsmuster mehrere Male wiederholt wird, um eine MxM-Ausgabe zu erzeugen. Die Flexibilität des Ansatzes erlaubt eine Anpassung von Größe und Operation des Arrays abhängig von den Problemgrößen und Hardware-Budgets, um dieselbe Hardware für unterschiedliche Operationen zu verwenden.
  • Bei einem Beispiel steuert das Konfigurationssignal (ein Konfigurationsbit oder -bits) das Zugriffsmuster der Mux-Arrays. Der CNM-Kern 210 empfängt die Steuerbits bei der Steuerung (CTRL) 216, um die Steuersignale zu verteilen. Die Logik für die Steuerung 216 kann eine einfache Routing-Schaltungsanordnung oder eine kleine Steuerung oder eine andere Schaltungsanordnung mit Zeitgebungssteuerung für die Steuersignale sein. Bei einem Beispiel leitet die Steuerung 216 ein Freigabesignal (EN; enable signal) an das Eingangs-Array 212 und den nahen Speicher 220 weiter. Das Freigabesignal ermöglicht die Operation des Eingangspuffers und des nahen Speichers und kann ansprechend auf ein Gültig-Signal erzeugt werden, das von upstream durchgesetzt wird. Das Freigabesignal kann auch die Operation des Teilsummen-Puffers 232 ermöglichen.
  • Die Steuerung 216 stellt auch Adressinformationen (ADR) an den nahen Speicher 220 bereit, um die Adresse des aus dem Speicher zu lesenden Vektors oder Bits zu identifizieren. Bei einem Beispiel stellt die Steuerung 216 ein Akkumulationssignal (ACC) an die Steuerung 244 bereit, um die Operation des Mux-Arrays 242 zu steuern. Bei einem Beispiel kann die Steuerung 244 Teil der Steuerung 216 sein. Bei einem Beispiel stellt die Steuerung 216 eine Konfiguration an die Mux-Arrays 214 und 222 gemäß der auszuführenden Operation bereit, nämlich die Mux-Arrays zu konfigurieren, um Ausgangsvektoren basierend auf einer M×M-Operation oder einer MxV-Operation zu kombinieren.
  • Bei einem Beispiel implementieren die Mux-Arrays 214 und 222 ansprechend auf das eine oder die mehreren Konfigurationssignale zwei spezifische Zugriffsmuster: „Alle-auf-Alle“ und „Eins-auf-Alle“. Diese zwei spezifischen Zugriffsmuster werden sowohl bei M×M- als auch bei M×V-Operationen verwendet. Bei einem Beispiel bewirkt die „Alle-auf-Alle“-Zugriffskonfiguration, dass das Mux-Array den Vektor so, wie er ist, an seinen Ausgang weiterleitet. Das Weiterleiten des Vektors so, wie er ist, überträgt unterschiedliche Gewichtungen an unterschiedliche MAC-Einheiten. Wenn z. B. die Kachelgröße für einen Eingangsvektor von [X0, X1, X2, X3] als 4 gewählt wird, ist der Ausgangsvektor des Mux-Arrays gleich [X0, X1, X2, X3]. Bei einem Beispiel verursacht die „Eins-auf-Alle“-Zugriffskonfiguration, dass das Mux-Array ein einzelnes ausgewähltes Element an alle Ausgangselemente weiterleitet. Das Weiterleiten eines einzelnen ausgewählten Elements kann als Rundsenden bezeichnet werden, wobei das Element durch ein Auswahlbit „S“ der Bitbreite log2(tile_size) ausgewählt und an alle Recheneinheiten übertragen wird. Wenn z. B. die Kachelgröße für einen Eingangsvektor von [X0, X1, X2, X3] und „S=01“ zum Auswählen eines Elements [X1] an Position <1> als 4 gewählt wird, ist der Ausgangsvektor des Mux-Arrays [X1, X1, X1, X1].
  • Bei einem Beispiel umfasst die Steuerung 216 einen Zähler 218, um von 0 bis „tile_size-1“ zu zählen. Bei einem Beispiel verwendet der CNM-Kern 210 den Zähler 218 als Elementzeiger, der die Auswahlbits „S“ der Mux-Arrays steuert. Bei einem Beispiel für ein M×V-Zugriffsmuster implementiert der Zähler 218 einen Zeiger für das Mux-Array 214, verbunden mit dem Eingangspuffer 212. Bei einem Beispiel für das MxV-Zugriffsmuster greift der CNM-Kern bei jedem Zyklus auf den nahen Speicher 220 zu. Bei einem Beispiel für ein M×M-Zugriffsmuster implementiert der Zähler 218 Elementzeiger für den W-Vektor an dem Auslese-Port des Mux-Arrays 222, verbunden mit dem nahen Speicher 220. Bei einem Beispiel für das M×M-Zugriffsmuster greift der CNM-Kern nur einmal für alle Zyklen der Operation auf den nahen Speicher 220 zu und greift weiterhin auf den nahen Speicher 220 in einer zusammenhängenden Weise zu, während in jedem Zyklus weiterhin neue Eingang-X-Vektoren ankommen, bis eine Akkumulation auslöst, dass der CNM-Kern 210 die Ergebnisse upstream weiterleitet.
  • Bei einem Beispiel pipelinet das System 200 die Ausgabe von CNM 210, um eine Akkumulation an einem gemeinsamen Knoten des Ausgangs des spezifischen CNM-Kerns mit Ergebnissen von den Downstream-CNM-Kernen zu ermöglichen. Somit kann das System 200 mehrere CNM-Kerne 210 oder ein Array von Kernen verwenden, um die Ergebnisse einer Operation bereitzustellen. Der gemeinsame Knoten ist in System 200 nicht speziell gezeigt, sondern koppelt mit dem Array von CNM-Kernen. Mit entsprechender Hardware in jedem CNM-Kern könnte die Akkumulation von downstream in jedem CNM-Kern auftreten. Es wird darauf hingewiesen, dass eine solche Implementierung eine zusätzliche Schaltungsanordnung in jedem Kern erfordert, um die Akkumulation auszuführen. Solche Hardware wird in den CNM-Kernen nicht benötigt, wenn der gemeinsame Knoten die Ausgaben von jedem CNM-Kern empfängt und die Akkumulation aller Ergebnisse ausführt. Jeder CNM-Kern kann für eine 1D- und 2D-Operation konfiguriert werden, gemäß dem, was beschrieben ist. Üblicherweise sind in einem Array von CNM-Kernen 210 alle für die gleichen Operationsart konfiguriert. Mit dem CNM-Kern 210 kann ein einzelner Hardware-Kern entweder für MxV- oder MxM-Probleme verwendet werden. Bei beiden Konfigurationen kann der CNM-Kern 210 das MAC-Array 230 vollständig verwenden. Ein Verwenden aller MAC-Einheiten in jedem CNM-Kern 210 für jeden Berechnungszyklus maximiert die OPs/W (Operationen pro Sekunde pro Watt) für die Operation des Systems 200.
  • Der CNM-Kern 210 ermöglicht eine Rekonfiguration zwischen 2D- und 1D-Matrix-Operationen auf einem gemeinsamen Hardware-Beschleuniger. Das MAC-Array 230 ist ein rekonfigurierbares MAC-Array mit Berechne-Nahe-Speicher 220. Der nahe Speicher 220 ist für die Energieeffizienz nahe (ko-positioniert) zu den MAC-Schaltungen. Bei einem Beispiel umfasst das MAC-Array 230 digitale Standardzellen-MAC-Einheiten. Bei einem Beispiel umfasst das MAC-Array 230 analoge Vervielfacher-Schaltungen.
  • Bei einem Beispiel kann das System 200 den CNM-Kern 210 als ID-systolisches Array für die MxV-Operation rekonfigurieren. Das Array ist nicht notwendigerweise systolisch. Bei einem Beispiel kann das System 200 den CNM-Kern 210 als 2D-systolisches Array für die M×M-Operation rekonfigurieren. Das Array ist nicht notwendigerweise systolisch. Die Rekonfiguration kann durch Konfigurieren des Mux-Arrays 214, das mit dem Eingangspuffer 212 verbunden ist, und des Mux-Arrays 222, das mit dem Auslesen des nahen Speichers 220 verbunden ist, wie vorangehend beschrieben, implementiert sein. Die Konfiguration für „Eins-auf-Alle“ und „Alle-auf-Alle“ kann in einer sich gegenseitig ausschließenden Weise implementiert werden. Die Steuerung 216 kann die Konfiguration an die Mux-Arrays oder andere Selektor-Hardware bereitstellen.
  • Wie oben erwähnt, können die MAC-Einheiten des MAC-Arrays 230 sowohl in M×M- als auch in MxV-Konfigurationen vollständig verwendet werden, und der Akkumulationspuffer oder PSUM-Puffer 232 akkumuliert das Punktprodukt. Bei einem Beispiel ist der PSUM-Puffer 232 mit Flip-Flops implementiert. Bei einem Beispiel ist der PSUM-Puffer 232 mit Latches implementiert. Die Akkumulations-Bitbreite oder die Breite des PSUM-Puffers 232 wird gemäß den Zielproblemgrößen gewählt. Während 4 Elemente in System 200 dargestellt sind, wird darauf hingewiesen, dass der PSUM-Puffer 232 breiter als die Anzahl der Eingangsbits sein kann. Somit könnten die 4 dargestellten Elemente jeweils mehrere Bits umfassen. Als spezielles Beispiel könnten die 4 Elemente des PSUM-Puffers 232 32 Bits für den in System 200 dargestellten 4-Bit-Eingang umfassen.
  • Zusätzlich zu den Standard-Akkumulationsschaltungen umfasst der CNM-Kern 210 bei einem Beispiel zusätzliche Quantisierungsschaltungen, wenn die Ausgangs-Bitbreite kleiner als die Eingangselemente ist. In einem solchen Fall können, sobald die Akkumulationen abgeschlossen sind, die Teilsummen direkt an das Upstream-CNM-Modul oder den gemeinsamen Knoten übertragen werden. Um sicherzustellen, dass die Datenübertragung ohne Kollision erfolgt, wird bei einem Beispiel der an dem Ausgangs-Port 240 empfangene Ausgangs-Y-Vektor gepuffert. Der Ausgangs-Port 240 kann als Upstream-Eingangspuffer für Downstream-Einheiten arbeiten, und der Upstream-Ausgang wird mit dem Mux-Array 242, den Teilsummen des aktuellen Kerns und dem Eingangs-Upstream-Akkumulationsvektor gemuxt.
  • Bei einem Beispiel kann die Verdrahtung und die Datenübertragungs-Energie minimiert werden, indem die Upstream-Daten reduziert werden, um nur ein Element pro Zyklus aus dem Kern zu senden. Eine solche Konfiguration reduziert die Verdrahtungskomplexität des Entwurfs des Systems 200. Bei einer solchen Implementierung müsste der CNM-Kern 210 vor dem Zurückschreiben der Ausgangsdaten auf den Speicher mehr In-Place-Akkumulation ausführen, um eine vollständige Verwendung des MAC-Arrays 230 zu erreichen.
  • Bei einem Beispiel kann ein Einzelbit-Gültig-Signal ein Lesefreigabebit für den nahen Speicher 220 und eine Schreibfreigabe für den Eingangspuffer 212 steuern. Bei einem Beispiel, bei dem CNM 210 zusätzliche Flops oder Puffer für Adressbits umfasst, kann das Gültig-Signal auch die Schreibfreigabe für die Adressbits steuern. Bei einem Beispiel zeigt das Gültig-Bit einen eingehenden Datentransfer (Eingang X und Adressbits) an, wenn das Gültig-Bit hoch ist. Die gestrichelte Linie von dem Steuerbit-Eingang des CNM-Kerns 210 zu dem Steuerbit-Ausgang des CNM-Kerns 210 zeigt an, dass die Steuerbits, einschließlich des Gültig-Bits, ähnlich wie die Eingangspuffer gepuffert werden können, was eine Kern-zu-Kern-Übertragung der Bits in dem System 200 ermöglicht.
  • Bei einem Beispiel wird das Akkumulationssignal auch als Einzelbit empfangen, ähnlich zu dem Gültig-Bit. Bei einem Beispiel zeigt das Akkumulationssignal an, dass die finale Akkumulation des Punktprodukts ausgeführt werden soll. Sobald das ACC-Signal empfangen wird, führt der CNM-Kern 210 seine finale Akkumulation gemäß dem konfigurierten Zugriffsmuster (M×V, MxM) aus und überträgt die Teilsummen an den Upstream-Ausgangs-Y-Port. Für M×M werden bei einem Beispiel die Teilsummen unmittelbar nach 1 Taktzyklus ausgesendet, wenn das ACC empfangen wird. Für MxV werden bei einem Beispiel die Teilsummen nach Auftreten der tile size-Anzahl der Taktzyklen (z. B. wie durch den Zähler 218 gezählt) ausgesendet.
  • Bei einem Beispiel agiert das ACC-Signal als Mux-Steuerung für die Upstream-Muxes des Mux-Arrays 242, um die Kollision für die Upstream-Kommunikation zu steuern. Bei einem Beispiel erzeugt das ACC-Signal ein Gültig-Signal für die Ausgangs-Y-Datenübertragung, in einer ähnlichen Weise, wie das Eingangs-Gültig-Signal die Übertragung der Downstream-Kommunikation steuert. Bei einem Beispiel steuert das Upstream-Gültig-Signal die Schreibfreigabe für die Ausgangspuffer. Da Eingangs- und Ausgangssignale gepuffert werden, können die Kerne, wie z. B. der CNM-Kern 210, in einer Pipeline-Weise arbeiten. Mit der Operation in Pipeline-Weise kann das System 200 eine Betriebsverzögerung von einem Taktzyklus zwischen benachbarten CNM-Kernen in dem ID-Array von Kernen des Systems 200 aufweisen. Wenn eine ausreichende Anzahl von In-Place-Akkumulationen in jedem CNM-Kern ausgeführt ist, dann ist die Ausgangsdaten-Übertragung kollisionsfrei und es wäre keine zusätzliche Kommunikationssteuerung erforderlich.
  • 3A ist ein Blockdiagramm eines Beispiels einer Rechenoperation für einen dynamisch konfigurierbaren CNM-Kern, der für Matrix-Matrix-Berechnungen konfiguriert ist. Das System 302 stellt ein zweidimensionales (2D) systolisches Array für eine M×M-Operation für ein System gemäß System 100 von 1 dar. Die 2D-systolische Konfiguration von System 302 ist eine Konfiguration modularer, rekonfigurierbarer Hardware gemäß System 200 von 2.
  • Das System 302 umfasst einen großen fernen Speicher 310 zum Speichern von Matrixoperanden (X) und Matrixergebnissen (Y). Die Steuerung 330 konfiguriert CNMs 320 für die MxM-Operation in dem System 302. MxM config stellt ein oder mehrere Steuersignale dar, die Hardware von CNM 320 steuern, um die Operation der MAC-Einheiten ansprechend auf die Eingänge zu steuern. Die Steuerung 330 stellt die Hardware zum Bereitstellen der Konfiguration an die CNMs 320 dar. Es wird darauf hingewiesen, dass die Steuerung 330 zumindest teilweise innerhalb von CNM 320 implementiert werden kann.
  • Der ferne Speicher 310 sendet die Elemente X zeilen- und spaltenweise an das 2D-Array der CNMs 320. Das Rundsenden von X wird durch separate durchgezogene Linien zu jeder MAC-Einheit 324 dargestellt. Zusätzlich wird W von dem nahen Speicher 322 an alle MAC-Einheiten 324 weitergeleitet. Die auf der Steuerung 330 basierende Konfiguration verursacht, dass die CNMs die Eingänge in MxM-Weise empfangen und auf denselben arbeiten. Die Elemente von X können als Eingangsaktivierungsdaten bezeichnet werden. Die Zeilen-/Spaltenelemente werden in derselben zeilen-/spaltenweisen Richtung von einer CNM 320 zur nächsten weitergeleitet, um die Datenwiederverwendung zu maximieren und den hohen Energieaufwand der Speicherzugriffe zu amortisieren.
  • Jede Recheneinheit-CNM 320 führt MAC-Operationen mit MAC-Einheiten 324 aus, während die MACs Teilsummen akkumulieren. Die MAC-Einheiten 324 stellen ein Array von parallelen MAC-arithmetischen Einheiten dar. CNM 320 führt die MAC-Operationen an X, empfangen von dem fernen Speicher 310, und W, worauf von dem nahen Speicher 322 zugegriffen wird, aus. W stellt lokal gespeicherte Gewichtungsdaten dar. In dem System 302 führen die CNMs 320 MAC-Operationen als 2D-Array aus, wobei ein einzelnes W-Element innerhalb des CNM-Kerns an alle MAC-Einheiten 324 rundgesendet und mit mehreren X-Elementen multipliziert wird. Bei einem Beispiel wird auf den nahen Speicher 322 nur einmal für eine kachelgroße Anzahl von empfangenen X-Vektoren zugegriffen und auf die gleiche Weise wiederholt, bis die finale Akkumulation ausgeführt und Y an den fernen Speicher 310 gesendet ist.
  • Es wird darauf hingewiesen, dass die MAC-Einheiten 324 Akkumulationsschaltungen umfassen, die in dem System 302 nicht speziell gezeigt sind. Nach vielen Akkumulationen senden die MAC-Einheiten 324 die finalen Punktprodukt-Ergebnisse zum Speichern zurück an den fernen Speicher 310. Das System 302 ist mit irgendeiner von einer Vielzahl von verschiedenen arithmetischen Entwurfsauswahlen kompatibel, sei es durch Auswahl des Systementwicklers oder zur Erfüllung von Anwendungsanforderungen. Beispielsweise können die MAC-Einheiten 324 mit Ganzzahl-Arithmetik oder Fließkomma-Arithmetik implementiert werden, und die MAC-Einheiten 324 können auf einer festen Bitgenauigkeit, einer rekonfigurierbaren Bitgenauigkeit oder einer gemischten Genauigkeit basieren. Die MAC-Einheiten 324 werden als MACs ohne definitive Bitgenauigkeit dargestellt. Ähnlich ist das System 302 mit unterschiedlichen Vektorgrößen kompatibel, und es wird angenommen, dass die Bitbreite des X-Vektors und des W-Vektors mit dem arithmetischen Standard übereinstimmen, der als Entwurfsauswahl für die Recheneinheiten spezifiziert wird und nicht speziell angezeigt wird.
  • 3B ist ein Blockdiagramm eines Beispiels einer Rechenoperation für einen dynamisch konfigurierbaren CNM-Kern, der für Matrix-Vektor-Berechnungen konfiguriert ist. Das System 304 stellt ein eindimensionales (1D) systolisches Array für eine M×V-Operation für ein System gemäß System 100 von 1 dar. Die ID-systolische Konfiguration des Systems 304 ist eine Konfiguration rekonfigurierbarer Hardware gemäß System 200 von 2. Das System 304 ist eine alternative Konfiguration der Hardware von System 302. Somit werden die Beschreibungen der Hardware des fernen Speichers 310, von CNM 320, des nahen Speichers 322, des MAC 324 und der Steuerung 330 hier nicht wiederholt, sondern es wird davon ausgegangen, dass sie die gleichen sind wie für das System 302.
  • Die Steuerung 330 konfiguriert CNMs 320 für eine MxV-Operation in dem System 304. MxV config stellt ein oder mehrere Steuersignale dar, die die Hardware von CNM 320 steuern, um die Operation der MAC-Einheiten ansprechend auf die Eingänge zu steuern. Während System 302 als 2D-Array konfiguriert ist, ist System 304 als ID-Array für M×V-Operationen konfiguriert. Der ID-Array-Ansatz kann die Datenwiederverwendung von Vektorelementen maximieren. Der ferne Speicher 310 sendet die Elemente X an das ID-Array der CNMs 320. Die MAC-Einheiten 324 führen Berechnungen basierend auf X aus dem fernen Speicher 310 und Matrixoperanden aus, auf die von den lokalen Speicherbänken des nahen Speichers 322 zugegriffen wird. Die MAC-Einheiten 324 sind ein ID-Rechen-Array zum Ausführen von MAC-Operationen, wobei Teilsummen akkumuliert werden und das finale Punktprodukt zum Speichern an den fernen Speicher 310 zurückgesendet wird.
  • Bei einem Beispiel für die MxV-Konfiguration des Systems 304 konfiguriert die Steuerung 330 die CNMs 320, um als ein 1D-Rechen-Array auszuführen, wobei mehrere W-Elemente, die aus dem nahen Speicher 322 gelesen werden, auf parallele MAC-Einheiten 324 verteilt und mit einem einzelnen X-Element multipliziert werden, das von dem fernen Speicher 310 empfangen wird. Die einzelne X-Linien von dem fernen Speicher 310 zu den CNMs 320 stellt die Verwendung der einzelnen X-Linie dar, im Gegensatz zu verschiedenen X-Linien wie in dem System 302. Das System 304 kann unterschiedliche W-Elemente für den Betrieb auf die MAC-Einheiten verteilen, wie durch die parallelen W-Linien gezeigt. Wie bei der 2D-Konfiguration von System 302 kann die ID-Konfiguration von System 304 die MAC-Einheiten vollständig verwenden.
  • Jede Recheneinheit-CNM 320 führt MAC-Operationen mit MAC-Einheiten 324 aus, während die MACs Teilsummen akkumulieren. Die MAC-Einheiten 324 stellen ein Array von parallelen MAC-arithmetischen Einheiten dar. CNM 320 führt die MAC-Operationen an X, empfangen von dem fernen Speicher 310, und W, worauf von dem nahen Speicher 322 zugegriffen wird, aus. W stellt lokal gespeicherte Gewichtungsdaten dar.
  • Die MAC-Einheiten 324 stellen die MAC-Einheiten und die Akkumulationsschaltungen zum Ausführen der Berechnung und Akkumulation dar. Nach vielen Akkumulationen senden die MAC-Einheiten 324 die finalen Punktprodukt-Ergebnisse zum Speichern zurück an den fernen Speicher 310. Das System 304 ist mit irgendeinem von einer Vielzahl von verschiedenen arithmetischen Entwurfsauswahlen kompatibel, sei es durch Auswahl des Systementwicklers oder zur Erfüllung von Anwendungsanforderungen. Beispielsweise können die MAC-Einheiten 324 mit Ganzzahl-Arithmetik oder Fließkomma-Arithmetik implementiert werden, und die MAC-Einheiten 324 können auf einer festen Bitgenauigkeit, einer rekonfigurierbaren Bitgenauigkeit oder einer gemischten Genauigkeit basieren. Die MAC-Einheiten 324 werden als MACs ohne definitive Bitgenauigkeit dargestellt. Ähnlich ist das System 304 mit unterschiedlichen Vektorgrößen kompatibel, und es wird angenommen, dass die Bitbreite des X-Vektors und des W-Vektors mit dem arithmetischen Standard übereinstimmen, der als Entwurfsauswahl für die Recheneinheiten spezifiziert wird und nicht speziell angezeigt wird.
  • Die Anwendung der Konfiguration von System 302 oder der Konfiguration von System 304 hängt von der zu berechnenden spezifischen Arbeitslast ab. Es wird darauf hingewiesen, dass die unterschiedlichen Konfigurationen abhängig von der Operation unterschiedliche Leistungsergebnisse aufweisen. Die unterschiedlichen Konfigurationen stellen unter unterschiedlichen Umständen eine bessere Performance bereit.
  • Die ausgeführten Operationen erzeugen entweder eine Ausgangsspalte (bei MxM-Operationen) pro Eingang oder eine Ausgangszeile (bei MxV-Operationen) pro Eingang. Trotz der unterschiedlichen Ausgänge wird darauf hingewiesen, dass die Hardware keine Ausrichtung hat. Vielmehr erzeugt die Hardware einfach Ausgaben ansprechend auf Eingänge, und die Ausgaben können basierend auf der Art der auszuführenden Operation interpretiert werden.
  • Es wird darauf hingewiesen, dass für die Hardware der Systeme 302 und 304 im Vergleich zu traditionellen Schaltungen, die nur MxM- oder MxV-Operationen ausführen, ein Nachteil. Beispielsweise ist eine Schaltung, die nur MxM-Operationen ausführt, für M×M-Operationen effizienter als das System 302, obwohl es weniger effizient wäre, wenn MxV-Operationen ausgeführt werden müssten, während das System 302 für MxV-Operationen zu System 304 rekonfiguriert werden könnte. Alternativ ist eine Schaltung, die nur MxV-Operationen ausführt, für MxV-Operationen effizienter als das System 304, obwohl es weniger effizient wäre, wenn MxM-Operationen durchgeführt werden müssten, während das System 304 für M×M-Operationen zu System 302 umkonfiguriert werden könnte.
  • 4A ist ein schematisches Beispiel von Zyklen von Rechenoperationen mit einem dynamisch konfigurierbaren CNM-Kern, der für Matrix-Matrix-Berechnungen konfiguriert ist. Tabelle 400 stellt MxM-Zugriffsmuster für einen rekonfigurierbaren CNM-Kern gemäß System 100 und System 200 dar.
  • Tabelle 400 zeigt Zugriffsmusterkonfigurationen für MxM-Operationen für eine beispielhafte Kachelgröße von 4. Elemente des Eingangs X werden in einem Eingangspuffer gespeichert und auf W wird von dem nahen Speicher zugegriffen. Die Teilsummen werden an dem PSUM-Puffer akkumuliert. Das dargestellte Beispiel führt MxM-Operationen der Form [4×4] * [4×4] = [4×4] aus, wobei der Eingang X, der in dem Eingangspuffer Spalte für Spalte empfangen wird, eine Matrix der Größe [4×4] ist, die Gewichtungsmatrix, auf die aus dem nahen Speicher zugegriffen wird, die Größe [4×4] aufweist und der Ausgang Y, der auf dem PSUM-Puffer Spalte für Spalte akkumuliert wird, eine Matrix der Größe [4×4] ist.
  • Die MxM-Operation ist auf das entgegengesetzte Zugriffsmuster von M×V konfiguriert, wie in Tabelle 410 von 4B dargestellt. Bei einem Beispiel wird ein Mux-Array, das mit dem Eingangspuffer verbunden ist, auf ein Alle-auf-Alle-Zugriffsmuster konfiguriert. Wenn die CNM-Kerne angeordnet sind, konfiguriert das Zugriffsmuster das CNM-Array als ein 2D-Array. Für die beispielhafte Kachelgröße von 4 zeigt Tabelle 400 das Punktprodukt einer einzelnen Spalte der Ausgang-Y-Matrix während der MxM-Operation in 4 Taktzyklen. In Zyklus 0 wird die Spalte 0 des Eingangs X mit Bit 0 des Gewichtungsvektors W multipliziert. In Zyklus 1 wird die Spalte 1 des Eingangs X mit Bit 1 des Gewichtungsvektors W multipliziert. In Zyklus 2 wird die Spalte 2 des Eingangs X mit Bit 2 des Gewichtungsvektors W multipliziert. In Zyklus 3 wird die Spalte 3 des Eingangs X mit Bit 3 des Gewichtungsvektors W multipliziert. Für dieses Beispiel wird auf die Spalte 0 der W-Matrix, die in dem nahen Speicher gespeichert ist, einmal bei dem anfänglichen Takt zugegriffen und sie wird für 4 Zyklen wiederverwendet. Infolgedessen wird bei jedem Zyklus eine Spalte der X-Matrix als Vektor an MAC-Arrays gesendet.
  • Somit implementiert jeder Taktzyklus ein Multiplizieren und Akkumulieren eines einzelnen W-Elements mit einer Spalte der X-Matrix. Teilsummen werden in dem PSUM-Puffer am Ende jedes Zyklus akkumuliert. Infolgedessen wird das Produkt [4×4] * [4×1] = [4×1] bei 4 Taktzyklen in dem CNM-Kern implementiert, wobei das MAC-Array bei jedem Zyklus vollständig verwendet wird. Für dieses Beispiel wird die Ausgangsmatrix Y in 16 Zyklen berechnet, indem die in 4A gezeigte 4-Taktzyklen-Operation für benachbarte W-Spalten wiederholt wird, um benachbarte Spalten der Ausgangsmatrix Y zu berechnen, da nachfolgende Taktzyklen den Eingang mit verschiedenen Elementen des nahen Speichers berechnen würden, bis die gesamte Matrix berechnet ist. Zum Beispiel würden die Zyklen 4-7 die zweite Spalte des Ausgangs Y mit den nächsten Elementen von W berechnen und bis zum Abschluss der Berechnung fortfahren.
  • 4B ist ein schematisches Beispiel von Zyklen von Rechenoperationen mit einem dynamisch konfigurierbaren CNM-Kern, der für Matrix-Vektor-Berechnungen konfiguriert ist. Tabelle 410 stellt MxV-Zugriffsmuster für einen rekonfigurierbaren CNM-Kern gemäß System 100 und System 200 dar.
  • Tabelle 410 zeigt Zugriffsmusterkonfigurationen für MxV-Operationen für eine beispielhafte Kachelgröße von 4. Elemente des Eingangs X werden an einem Eingangspuffer gespeichert und auf W wird von dem nahen Speicher zugegriffen. Die Teilsummen werden an dem PSUM-Puffer akkumuliert. Das dargestellte Beispiel führt MxV-Operationen der Form [1×4] * [4×4] = [1×4] aus, wobei der Eingang X ein Vektor der Größe [1×4] ist, die Gewichtungsmatrix, auf die von dem nahen Speicher zugegriffen wird, die Größe [4×4] aufweist und der Ausgang Y, der auf dem PSUM-Puffer akkumuliert wird, die Größe [1×4] aufweist.
  • Die MxV-Operation ist auf das entgegengesetzte Zugriffsmuster von M×M konfiguriert, wie in Tabelle 400 von 4A dargestellt. Bei einem Beispiel wird ein Mux-Array, das mit dem Eingangspuffer verbunden ist, auf ein Eins-auf-Alle-Zugriffsmuster konfiguriert. Wenn CNM-Kerne angeordnet sind, konfiguriert dieses Zugriffsmuster das CNM-Array als ID-Array. Für die beispielhafte Kachelgröße von 4 zeigt Tabelle 410 die in dem CNM-Kern implementierte M×V-Operation bei 4 Taktzyklen. Bei einem Beispiel wird auf die Eingang-X-Vektorelemente in 4 aufeinanderfolgenden Zyklen zugegriffen und sie werden an die MAC-Arrays rundgesendet. Bei einem Beispiel wird die W-Matrix im Zeilen-Hauptformat gespeichert, und ein einzelnes Auslesen aus dem nahen Speicher stellt eine Zeile der W-Matrix bereit, die ein W-Zeilen-Vektor der Größe [1× tile_size=4] ist. Daher wird bei jedem aufeinanderfolgenden Zyklus eine Zeile der W-Matrix ausgelesen und an das MAC-Array gesendet.
  • In Zyklus 0 wird ein Bit des Eingangs X mit Zeile 0 des Gewichtungsvektors W multipliziert. In Zyklus 1 wird ein Bit des Eingangs X mit Zeile 1 des Gewichtungsvektors W multipliziert. In Zyklus 2 wird ein Bit des Eingangs X mit Zeile 2 des Gewichtungsvektors W multipliziert. In Zyklus 3 wird ein Bit des Eingangs X mit Zeile 3 des Gewichtungsvektors W multipliziert. Infolgedessen wird das Produkt [1×4] * [4×4] = [1×4] bei 4 Taktzyklen in dem CNM-Kern implementiert, wobei das MAC-Array bei jedem Zyklus vollständig verwendet wird. Für dieses Beispiel greift der Eingang X in jedem Taktzyklus auf ein Element zu, während derselbe bei dem anfänglichen Taktzyklus empfangene Eingang-X-Vektor wiederverwendet wird.
  • Es wird beobachtet, dass die in Tabelle 410 gezeigte MxV-Operation wiederholt werden kann, um auch die M×M-Operation zu implementieren. Die Energie-Vorteile und Kosten der Ausführung wiederholter M×V-Operationen versus MxM-Operationen gemäß Tabelle 400 hängen von spezifischen Hardware-Entscheidungen ab, wie z. B. den Größen des nahen Speichers 130 von CNM und des fernen Speichers 112 des gemeinsamen Knotens, verfügbare BW, Anzahl der CNM-Kerne in dem ID-Array, Parameter tiefer neuronaler Netze und andere Überlegungen.
  • 5 ist ein Blockdiagramm eines Beispiels eines Systems mit einem Prozessor und einer dynamisch konfigurierbaren Berechne-In/Nahe-Speicher-Schaltungsanordnung. Das System 500 kann eine CIM-Schaltung mit einer rekonfigurierbaren CNM-Schaltungsanordnung gemäß irgendeinem vorangehend beschriebenen Beispiel umfassen. Die CIM-Schaltung kann ein CIM-Beschleuniger für maschinelles Lernen oder andere rechenintensive Operationen sein. Ein Beschleuniger kann als Koprozessor bezeichnet werden.
  • Das System 500 umfasst den Prozessor 510, der eine Allzweck-CPU (central processing unit; zentrale Verarbeitungseinheit), eine GPU (graphics processing unit; Graphikverarbeitungseinheit), ein DSP- (digital signal processor; digitaler Signalprozessor) Array oder ein anderer Prozessor sein oder umfassen kann. Der Prozessor 510 stellt einen digitalen Prozessor dar und kann als Host-Prozessor bezeichnet werden. Bei einem Beispiel umfasst das Prozessor 510 mehrere Kerne 512. Der Prozessor 510 führt Anwendungen oder Softwareprogramme aus, die auf Daten für rechenintensive Operationen zugreifen.
  • Bei einem Beispiel umfasst der Prozessor 510 den Erste-Ebene-Cache 514, der Caching-Ressourcen innerhalb des Prozessor-Dies oder Prozessor-SOC (System-auf-einem-Chip) darstellt, der physisch nahe Speicherungs- (storage) Ressourcen für heiße Daten bereitstellt. Bei einem Beispiel umfasst der Prozessor 510 mehrere Ebenen von chipinternem/lokalem Cache, die nicht explizit gezeigt sind. Es wird darauf hingewiesen, dass Cache-Ressourcen lokal zu einem spezifischen Kern 512, durch mehrere Kerne 512 gemeinschaftlich verwendet oder eine Kombination aus gemeinschaftlich verwendeten Cache-Ressourcen und lokalisierten Cache-Ressourcen sein können.
  • Das System 500 umfasst den Letzte-Ebene-Cache 520. Bei einem Beispiel ist der Letzte-Ebene-Cache 520 auch auf dem Prozessor 510. Bei einem Beispiel ist der Letzte-Ebene-Cache 520 chipextern von dem Prozessor 510. Der Letzte-Ebene-Cache 520 ist größer als der Erste-Ebene-Cache 514, es dauert jedoch länger, darauf zuzugreifen. Es kann irgendeine Anzahl von anderen Cache-Ebenen zwischen dem Erste-Ebene-Cache 514 und dem Letzte-Ebene-Cache 520 geben.
  • Der Hauptspeicher 550 stellt den System-Hauptspeicher dar. Der Hauptspeicher 550 ist üblicherweise um Größenordnungen größer als die Cache-Ressourcen, es dauert aber relativ zu den Cache-Ressourcen viel länger, darauf zuzugreifen. Der Hauptspeicher 550 kann flüchtige Speicherressourcen umfassen, die einen unbestimmten Zustand aufweisen, wenn die Leistung unterbrochen wird. Der Hauptspeicher 550 kann nichtflüchtige Speicherressourcen umfassen, die ihren Zustand beibehalten, auch wenn die Leistung zu dem Speicher unterbrochen wird. Caching-Ressourcen sind üblicherweise flüchtig, können aber nichtflüchtige Speicher-Ressourcen umfassen.
  • Das System 500 umfasst eine Darstellung einer Anweisungsausführungs-Pipeline für den Kern 512. Bei einem Beispiel kann jeder Kern 512 mehrere Ausführungs-Pipelines umfassen (z. B. Multithreading). Die Anweisungs-Pipeline ist als eine allgemeine Erläuterung zu verstehen, und spezifische Details sind nicht bereitgestellt. Bei einem Beispiel umfasst die Anweisungs-Pipeline den Anweisungsabruf 562, wobei der Kern die auszuführende Anweisung abruft. Die Anweisungsdecodierung 564 stellt die Decodierung der Anweisung durch den Kern zur Vorbereitung der Prozessorschaltungsanordnung für die Ausführung dar. Bei einem Beispiel identifiziert die Anweisungsdecodierung 564 die Anweisung als Teil eines Befehls, der die Verwendung einer CIM-Schaltung für den Betrieb auslöst.
  • Operandenabruf 566 stellt das Abrufen oder Erhalten der Operanden dar, auf denen für die Anweisung ausgeführt werden soll. Bei einem Beispiel ist der Operand ein Gewichtungsvektor für ein neuronales Netz oder ein anderer Operand einer mathematischen Funktion. Bei einem Beispiel sind die Operanden in Registerraum, der der Ausführungs-Pipeline zugeordnet ist, oder sind in demselben platziert. Ausführen 568 stellt die Ausführung der Anweisung auf oder mit dem einen oder den mehreren Operanden dar. Bei einem Beispiel kann die Ausführung ein Senden der Operation an eine CIM-Schaltungsanordnung zur Ausführung umfassen. Bei einem Beispiel wird der Befehl an eine Prozessor-ALU (arithmetic logic unit; arithmetische Logikeinheit) gesendet, die die Ausführung durch den CIM-Beschleuniger auslösen kann. Zurückschreiben 570 bezieht sich auf ein Schreiben von Ausführungsergebnissen in ein Ergebnisregister zur Rückkehr zu dem Speicher oder zum Weiterleiten an ein anderes Register für eine andere Ausführung. Im Falle der Verwendung einer CIM-Schaltungsanordnung kann die Ausführung 568 und das Zurückschreiben 570 ein Senden der Operation an die CIM-Schaltungsanordnung umfassen, die die Operation ausführt und eine funktionale Ausgabe zurückgibt, die dann zurückgeschrieben werden kann. Die Ausführung kann eine Konfiguration der CNM-Schaltungsanordnung gemäß irgendeinem hierin beschriebenen Beispiel umfassen. Somit kann die Anweisung, die traditionell ein Laden von Operanden in eine ALU oder eine andere Rechen-Engine innerhalb des Prozessors 510 erfordern würde, an die CIM-Schaltungsanordnung gesendet werden, ohne aus dem Speicher lesen zu müssen, und dann ein Berechnungsergebnis von der CIM-Schaltungsanordnung anstatt von der lokalen Rechen-Engine empfangen.
  • CIM 530 stellt eine CIM-Schaltungsanordnung dar, die in dem Letzte-Ebene-Cache 520 implementiert ist. CIM 530 kann der gesamte oder ein Teil des Letzte-Ebene-Caches 520 sein. In einem Beispiel umfasst der Letzte-Ebene-Cache 520 ein Speicherarray, das als eine CIM-Schaltung konfiguriert ist, und ein Speicherarray, das keine CIM-Schaltungsanordnung umfasst. Das System kann zur CIM-Beschleunigung Daten selektiv in dem CIM-fähigen Speicherarray speichern.
  • CIM 540 stellt eine CIM-Schaltungsanordnung dar, die von der Cache-Architektur des Systems 500 getrennt ist. Somit stellt CIM 540 eine Speicherressource dar, die für die Ausführung von CIM-beschleunigten Operationen zweckgebunden ist. Ein solcher CIM-Speicher kann immer noch traditionelle Zugriffs-Hardware umfassen, um ein Lesen aus dem Speicher zu ermöglichen, ohne eine Berechnung auszuführen. CIM 530 und CIM 540 umfassen CIM-Hardware, um funktionale Lesevorgänge gemäß irgendeinem hier beschriebenen Beispiel zu ermöglichen.
  • CIM 530 und CIM 540 umfassen Zugriffspfade von dem Prozessor 510. Wenn sie Teil der Cache-Architektur wie CIM 530 ist, kann die Verbindungs-Hardware die gleiche sein wie die Verbindungs-Hardware für die Cache-Vorrichtungen. Wenn sie nicht Teil der Cache-Architektur wie CIM 540 ist, kann die CIM-Verbindung ähnlich oder gleich einer Cache-Vorrichtung oder einer Hauptspeichervorrichtung oder einem anderen mit dem Prozessor 510 gekoppelten Speicher sein. CIM 530 und CIM 540 sind mit dem Hauptspeicher 550 (nicht speziell gezeigt) gekoppelt, um Operanden für CIM-Beschleunigungsoperationen zu laden.
  • Bei einem Beispiel löst ein Aufruf einer rechenintensiven Funktion ein Weiterleiten von Befehlen an den CIM-Beschleuniger aus. Beispielsweise kann der Prozessor 510 eine Unterstützung in seiner Anweisungssatz-Architektur (ISA; instruction set architecture) für bestimmte Befehle zum Auslösen des Betriebs eines CIM-Beschleunigers umfassen. Bei einem Beispiel kann einem Aufrufen des CIM-Beschleunigers ein Laden von Konfigurationsinformationen in den Beschleuniger vorausgehen oder zugeordnet sein. Solche Konfigurationsinformationen können z. B. Gewichtungen von Internodalverbindungen definieren, auszuführende mathematische Funktionen oder andere Konfigurationen definieren. Das System 500 kann Konfigurationsinformationen aus dem Systemhauptspeicher oder aus einer nichtflüchtiger Massenspeicherung oder einer Kombination laden.
  • Bei einem Beispiel kann die CIM-Schaltungsanordnung von entweder CIM 530 oder CIM 540 oder beiden eine oder mehrere Ebenen eines neuronalen Netzes umfassen. Bei einem Beispiel wendet die Anweisungs-Pipeline nach der Konfiguration der CIM-Schaltungsanordnung Eingangswerte zur Verarbeitung auf das konfigurierte neuronale Netz an. Die CIM-Schaltungsanordnung erzeugt eine in den Registerraum oder den Systemspeicher zurückzuschreibende Resultierende, und die CIM-Schaltungsanordnung kann dem ausführenden Thread, der die CIM-Schaltungsanordnung aufgerufen hat, den Abschluss der Verarbeitung anzeigen. Bei einem Beispiel, wenn die Anzahl der Neuronales-Netz-Ebenen oder der Neuronen pro Ebene, die physisch in der CIM-Schaltungsanordnung implementiert sind, geringer ist als die Anzahl der Ebenen/Neuronen des zu verarbeitenden neuronalen Netzes, kann die Verarbeitung durch das neuronale Netz wiederholt werden, indem die CIM-Schaltungsanordnung wiederholt zur Verarbeitung geladen wird, bis alle Ebenen des neuronalen Netzes verarbeitet wurden.
  • 6 ist ein Flussdiagramm eines Beispiels eines Prozesses für In-Speicher-Berechnung mit einer Architektur, die entweder Matrix-Matrix- oder Matrix-Vektor-Berechnungen dynamisch berechnen kann. Der Prozess 600 stellt einen Prozess für MAC-Berechnungen mit einem konfigurierbaren MAC-Array gemäß irgendeiner Beschreibung hierin dar. Bei einem Beispiel bestimmt ein System umfassend das konfigurierbare MAC-Array, ob M×M- oder MxV-Berechnungen ausgeführt werden sollen, Block 602. Die Bestimmung kann gemäß der Matrix-Arbeitslast für die auszuführenden Neuronales-Netz-Operationen sein. Bei einem Beispiel erzeugt das System Konfigurations-Bits, Block 604, wie beispielsweise mit einer primären Steuerung, die Steuer-Bits sendet, die die Steuerlogik auf den CNM-Kernen zur Konfiguration der Operationen verwendet.
  • Bei einem Beispiel konfigurieren die CNM-Einheiten das MAC-Array ansprechend auf die Konfigurations-Bits, Block 606. Die CNM-Einheit greift auf ein oder mehrere Ferner-Speicher-Bit oder Bits zu, Eingang X, Block 608. Die CNM-Einheit hat auch auf ein oder mehrere Naher-Speicher-Bit oder Bits zugegriffen, Eingang W, Block 610. Die CNM-Einheit berechnet ein Produkt von X*W mit dem konfigurierten MAC-Array, Block 612.
  • Bei einem Beispiel führt das MAC-Array weiterhin Multiplizieren- und Akkumulieren-Operationen aus, bis ein Abschlusssignal empfangen wird. Wenn die CNM-Einheit ausgebildet ist, weiterhin Teilsummeninformationen zu akkumulieren, Block 614 JA-Zweig, führt die MAC-Einheit die Akkumulation aus, Block 616, und kehrt zum Zugriff auf das eine oder die mehreren Ferner-Speicher-Bit oder Bits zurück, Block 608. Es wird darauf hingewiesen, dass bei der Wiederholung nach der Akkumulation der Zugriff auf den fernen Speicher oder den nahen Speicher sich auf ein Zugreifen auf die Daten aus einem Puffer beziehen könnte, anstatt erneut auf die spezifische Speichervorrichtung zuzugreifen.
  • Sobald alle Akkumulationsoperationen abgeschlossen sind, Block 614 NEIN-Zweig, kann die CNM-Einheit die Ergebnisdaten-Bits, Vektor Y, upstream senden, Block 618. Das System kann die Ergebnis-Bits für finale Operationen anwenden, um die gewünschte Ausgabe zu erzeugen, Block 620.
  • 7 ist ein Blockdiagramm eines Beispiels eines Rechensystems, in dem Berechne-In-Speicher- (CIM) Operationen mit einem dynamisch konfigurierbaren MAC-Array implementiert werden können. Das System 700 stellt eine Rechenvorrichtung gemäß irgendeinem Beispiel hierin dar und kann ein Laptop-Computer, ein Desktop-Computer, ein Tablet-Computer, ein Server, ein Spiel- oder Unterhaltungs-Steuerungssystem, ein Scanner, Kopierer, Drucker, eine Routing- oder Schaltvorrichtung, eine eingebettete Rechenvorrichtung, ein Smartphone, eine tragbare Vorrichtung, eine Internet-der-Dinge-Vorrichtung oder eine andere elektronische Vorrichtung sein.
  • Bei einem Beispiel umfasst das System 700 eine CIM-Schaltungsanordnung. Die CIM-Schaltungsanordnung umfasst eine rekonfigurierbare CNM-Schaltungsanordnung gemäß irgendeinem hierin beschriebenen Beispiel. Ein Beispiel für eine CIM-Schaltungsanordnung kann CIM 792, dargestellt als CIM-Schaltungsanordnung, umfasst in dem Prozessor SOC 710, sein. CIM 792 kann eine CIM-Schaltungsanordnung in einer Speichervorrichtung auf dem Prozessor-SOC-Substrat oder -Die sein oder umfassen. Beispielsweise kann CIM 792 Teil eines Caches auf dem Prozessor SOC 710 sein. Ein anderes Beispiel für eine CIM-Schaltungsanordnung kann CIM 794, dargestellt als CIM-Schaltungsanordnung, umfasst in dem Speicher- (memory) Teilsystem 720, sein. Genauer gesagt wird CIM 794 als Teil des Speichers 730 dargestellt, der sich auf die Speicherressourcen von System 700 bezieht. CIM 794 stellt die CIM-Schaltungsanordnung dar, die als Speicherressource umfasst sein kann, an die der Prozessor SOC 710 rechenintensive Operationen abgeben kann. Die rechenintensiven Operationen können M×M-Operationen und MxV-Operationen umfassen. Die konfigurierbare CNM-Schaltungsanordnung ermöglicht es, dass CIM 792 oder CIM 794 für beide Arten von Arbeitslasten konfigurierbar sind. Die Schaltungsanordnung wird gemäß den auszuführenden Operationen dynamisch konfiguriert.
  • Das System 700 umfasst einen Prozessor SOC 710 (nachfolgend als „Prozessor 710“ bezeichnet), der eine Verarbeitung, eine Betriebsverwaltung und eine Ausführung von Anweisungen für das System 700 bereitstellt. Der Prozessor 710 kann irgendeine Art von Mikroprozessor, zentraler Verarbeitungseinheit (CPU; central processing unit), Graphikverarbeitungseinheit (GPU; graphics processing unit), Verarbeitungskern oder anderer Verarbeitungshardware umfassen, um die Verarbeitung für das System 700 oder eine Kombination von Prozessoren bereitzustellen. Der Prozessor 710 kann einen einzelnen Kern oder mehrere Kerne umfassen. Der Prozessor 710 steuert den Gesamtbetrieb des Systems 700 und kann ein oder mehrere programmierbare Allzweck- oder Spezialzweck-Mikroprozessoren, digitale Signalprozessoren (DSPs; digital signal processors), programmierbare Steuerungen, anwendungsspezifische integrierte Schaltungen (ASICs; application specific integrated circuits), programmierbare Logikbauelemente (PLDs; programmable logic devices) oder dergleichen oder eine Kombination solcher Bauelemente sein oder umfassen.
  • Bei einem Beispiel umfasst das System 700 eine Schnittstelle 712, die mit einem Prozessor 710 gekoppelt ist, was eine Schnittstelle mit höherer Geschwindigkeit oder eine Schnittstelle mit hohem Durchsatz für Systemkomponenten darstellen kann, die Verbindungen mit höherer Bandbreite benötigen, wie beispielsweise ein Speicherteilsystem 720 oder Graphikschnittstellen-Komponenten 740. Die Schnittstelle 712 stellt eine Schnittstellenschaltung dar, die eine eigenständige Komponente oder auf einem Prozessor-Die integriert sein kann. Falls vorhanden, bildet eine Graphikschnittstelle 740 eine Schnittstelle mit Graphikkomponenten, um einem Nutzer des Systems 700 eine visuelle Anzeige bereitzustellen. Bei einem Beispiel kann die Graphikschnittstelle 740 eine hochauflösende (HD; high definition) Anzeige antreiben, die einem Nutzer eine Ausgabe bereitstellt. Hochauflösend kann sich auf eine Anzeige beziehen, die eine Pixeldichte von ungefähr 100 PPI (pixels per inch; Pixel pro Zoll) oder größer aufweist, und kann Formate wie beispielsweise Full HD (z. B. 1080p), Retina-Displays (Retina-Anzeigen), 4K (ultra high definition oder UHD; ultrahochauflösend) oder andere umfassen. Bei einem Beispiel kann die Anzeige eine Touchscreen-Anzeige umfassen. Bei einem Beispiel erzeugt die Graphikschnittstelle 740 eine Anzeige basierend auf Daten, die in dem Speicher 730 gespeichert sind, oder basierend auf Operationen, die der Prozessor 710 ausführt, oder beidem. Bei einem Beispiel erzeugt die Graphikschnittstelle 740 eine Anzeige basierend auf Daten, die in dem Speicher 730 gespeichert sind oder basierend auf Operationen, die der Prozessor 710 ausführt oder beidem.
  • Ein Speicherteilsystem 720 stellt den Hauptspeicher des Systems 700 dar und stellt Speicherung für einen Code, der durch den Prozessor 710 ausgeführt werden soll, oder für Datenwerte, die bei der Ausführung einer Routine verwendet werden sollen, bereit. Das Speicherteilsystem 720 kann eine oder mehrere Speichervorrichtungen 730 umfassen, wie beispielsweise Nurlesespeicher (ROM; read-only memory), Flash-Speicher, eine oder mehrere Varianten eines Direktzugriffsspeichers (RAM; random access memory) wie beispielsweise DRAM, oder andere Speichervorrichtungen, oder eine Kombination solcher Vorrichtungen. Ein Speicher 730 speichert und hostet unter anderem ein Betriebssystem (OS; operating system) 732, um eine Softwareplattform für die Ausführung von Anweisungen in dem System 700 bereitzustellen. Zusätzlich können Anwendungen 734 auf der Software-Plattform des OS 732 von dem Speicher 730 ausgeführt werden. Die Anwendungen 734 stellen Programme dar, die ihre eigene operative Logik zur Ausführung einer oder mehrerer Funktionen aufweisen. Prozesse 736 stellen Mittel oder Routinen dar, die Hilfsfunktionen an das OS 732 oder eine oder mehrere Anwendungen 734 oder eine Kombination bereitstellen. Das OS 732, die Anwendungen 734 und die Prozesse 736 stellen Software-Logik bereit, um Funktionen für das System 700 bereitzustellen. Bei einem Beispiel umfasst das Speicherteilsystem 720 eine Speichersteuerung 722, die eine Speichersteuerung zum Erzeugen und Erteilen von Befehlen an den Speicher 730 ist. Es wird darauf hingewiesen, dass die Speichersteuerung 722 ein physikalischer Teil des Prozessors 710 oder ein physikalischer Teil der Schnittstelle 712 sein könnte. Zum Beispiel kann die Speichersteuerung 722 eine integrierte Speichersteuerung sein, die auf einer Schaltung mit dem Prozessor 710 integriert ist.
  • Auch wenn nicht speziell dargestellt, versteht es sich, dass das System 700 einen oder mehrere Busse oder Bussysteme zwischen Bauelementen umfassen kann, wie beispielsweise einen Speicherbus, einen Graphikbus, Schnittstellenbusse oder andere. Busse oder andere Signalleitungen können Komponenten kommunikativ oder elektrisch miteinander koppeln, oder die Komponenten sowohl kommunikativ als auch elektrisch koppeln. Busse können physikalische Kommunikationsleitungen, Punkt-zu-Punkt-Verbindungen, Brücken, Adapter, Steuerungen oder eine andere Schaltungsanordnung oder eine Kombination umfassen. Busse können zum Beispiel einen oder mehrere von einem Systembus, einem Peripheriekomponentenverbindungs-Bus (PCI; peripheral component interconnect), einem Hyper Transport- oder Industry Standard Architecture- (ISA) Bus, einem Small Computer System Interface- (SCSI) Bus , einem Universellen-Seriellen-Bus (USB; universal serial bus) oder einem Institute of Electrical and Electronics Engineers- (IEEE) Standard 1394-Bus umfassen.
  • Bei einem Beispiel umfasst das System 700 eine Schnittstelle 714, die mit der Schnittstelle 712 gekoppelt sein kann. Die Schnittstelle 714 kann eine Schnittstelle mit geringerer Geschwindigkeit als die Schnittstelle 712 sein. Bei einem Beispiel stellt die Schnittstelle 714 eine Schnittstellenschaltung dar, die eigenständige Komponenten und eine integrierte Schaltungsanordnung umfassen kann. Bei einem Beispiel koppeln mehrere Nutzerschnittstellenkomponenten oder Peripheriekomponenten oder beide mit der Schnittstelle 714. Eine Netzwerkschnittstelle 750 stellt dem System 700 die Möglichkeit bereit, über eines oder mehrere Netzwerke mit entfernten Bauelementen (z. B. Servern oder anderen Rechenvorrichtungen) zu kommunizieren. Die Netzwerkschnittstelle 750 kann einen Ethernet-Adapter, drahtlose Verbindungskomponenten, zelluläre Netzwerk-Verbindungskomponenten, USB (Universal Serial Bus) oder andere drahtgebundene oder drahtlose standard-basierte oder proprietäre Schnittstellen umfassen. Die Netzwerkschnittstelle 750 kann Daten mit einer entfernten Vorrichtung austauschen, was ein Senden von in dem Speicher gespeicherten Daten oder ein Empfangen von in dem Speicher zu speichernden Daten umfassen kann.
  • Bei einem Beispiel umfasst das System 700 eine oder mehrere Eingangs-/Ausgangs- (I/O; Input/Output) Schnittstelle(n) 760. Eine I/O-Schnittstelle 760 kann eine oder mehrere Schnittstellenkomponenten umfassen, durch die ein Nutzer mit dem System 700 interagiert (z. B. Audio-, alphanumerische, tastbare/berührbare oder andere Schnittstellen). Eine Peripherieschnittstelle 770 kann irgendeine Hardwareschnittstelle umfassen, die oben nicht ausdrücklich erwähnt wurde. Peripherievorrichtungen beziehen sich im Allgemeinen auf Vorrichtungen, die abhängig von dem System 700 verbinden. Eine abhängige Verbindung ist eine, bei der das System 700 die Software-Plattform oder Hardware-Plattform oder beide bereitstellt, auf der die Operation ausgeführt wird und mit der ein Nutzer interagiert.
  • Bei einem Beispiel umfasst das System 700 ein Speicherungs- (storage) Teilsystem 780, um Daten in einer nichtflüchtigen Weise zu speichern. Bei einem Beispiel können in bestimmten Systemimplementierungen zumindest bestimmte Komponenten einer Speicherung 780 mit Komponenten des Speicherteilsystems 720 überlappen. Das Speicherungsteilsystem 780 umfasst eine oder mehrere Speicherungsvorrichtungen 784, die irgendein herkömmliches Medium zum Speichern großer Datenmengen auf nichtflüchtige Weise sein oder umfassen können, wie beispielsweise eine oder mehrere magnetische, Festkörper- oder optisch-basierte Platten oder eine Kombination. Die Speicherung 784 umfasst Code oder Anweisungen und Daten 786 in einem dauerhaften Zustand (d. h. der Wert bleibt trotz Unterbrechung der Leistung zu dem System 700 erhalten). Die Speicherung 784 kann allgemein als ein „Speicher“ betrachtet werden, obwohl der Speicher 730 üblicherweise der Ausführungs- oder Betriebsspeicher ist, um dem Prozessor 710 Anweisungen bereitzustellen. Während die Speicherung 784 nichtflüchtig ist, kann der Speicher 730 flüchtigen Speicher umfassen (d. h. der Wert oder Zustand der Daten ist unbestimmt, wenn die Leistung zu dem System 700 unterbrochen ist). Bei einem Beispiel umfasst das Speicherungsteilsystem 780 eine Steuerung 782, um eine Schnittstelle mit der Speicherung 784 zu bilden. Bei einem Beispiel ist die Steuerung 782 ein physikalischer Teil der Schnittstelle 714 oder des Prozessors 710 oder kann Schaltungen oder Logik sowohl in dem Prozessor 710 als auch in der Schnittstelle 714 umfassen.
  • Eine Leistungsquelle 702 stellt den Komponenten des Systems 700 Leistung bereit. Genauer gesagt bildet eine Leistungsquelle 702 üblicherweise eine Schnittstelle mit einer oder mehreren Leistungsversorgungen 704 in dem System 700, um den Komponenten des Systems 700 Leistung bereitzustellen. Bei einem Beispiel umfasst die Leistungsversorgung 704 einen AC-zu-DC- (Wechselstrom-zu-Gleichstrom) Adapter zum Einstecken in eine Steckdose. Eine solche Wechselstrom-Leistung kann eine erneuerbare Energie- (z. B. Sonnenenergie) Leistungsquelle 702 sein. Bei einem Beispiel umfasst eine Leistungsquelle 702 eine Gleichstrom-Leistungsquelle, wie beispielsweise einen externen AC-zu-DC-Wandler. Bei einem Beispiel umfasst eine Leistungsquelle 702 oder Leistungsversorgung 704 drahtlose Ladehardware zum Aufladen über die Nähe zu einem Ladefeld. Bei einem Beispiel kann die Leistungsquelle 702 eine interne Batterie oder eine Brennstoffzellenquelle umfassen.
  • 8 ist ein Blockdiagramm eines Beispiels eines Mehrknoten-Netzwerks, in dem Berechne-in-Speicher- (CIM) Operationen mit einem dynamisch konfigurierbaren MAC-Array implementiert werden können. Das System 800 stellt ein Netzwerk von Knoten gemäß irgendeinem hierin beschriebenen Beispiel dar. Bei einem Beispiel stellt das System 800 ein Rechenzentrum dar. Bei einem Beispiel stellt das System 800 eine Serverfarm dar. Bei einem Beispiel stellt das System 800 eine Daten-Cloud oder eine Verarbeitungs-Cloud dar.
  • Der Knoten 830 umfasst den Speicher 840, der bei einem Beispiel CIM 842 umfasst. Die CIM-Schaltungsanordnung umfasst eine rekonfigurierbare CNM-Schaltungsanordnung gemäß irgendeinem hierin beschriebenen Beispiel. Mit CIM 842 wird der Speicher 840 eine Berechnungsressource für den Knoten 830. Genauer gesagt ermöglicht es CIM 842 dem Knoten 830, eine verbesserte Verarbeitung von Arbeitslasten bereitzustellen, die sowohl speicher-/datenintensiv als auch rechenintensiv sind. Anstatt Daten von dem Speicher zu dem Prozessor hin und her zu bewegen, ermöglicht CIM 842 dem Speicher, Berechnungen auszuführen und ein funktionales Ergebnis an den aufrufenden Prozessor 832 zurückzugeben. CIM 842 kann als eigenständige Ressource innerhalb des Speichers 840 oder als Beschleuniger implementiert werden. Bei einem Beispiel ist CIM 842 als Cache auf dem Prozessor 832 implementiert. Bei einem Beispiel ist CIM 842 ein separates Blade als Beschleuniger für ein Blade von Prozessorressourcen. Die konfigurierbare CNM-Schaltungsanordnung ermöglicht es CIM 842, abhängig von der Art der auszuführenden Arbeitslast entweder für MxM-Operationen oder MxV-Operationen konfiguriert zu sein. Die Schaltungsanordnung wird gemäß den auszuführenden Operationen dynamisch konfiguriert.
  • Ein oder mehrere Clients 802 stellen Anfragen über das Netzwerk 804 an das System 800. Das Netzwerk 804 stellt ein oder mehrere lokale Netzwerke oder weite Netzwerke oder eine Kombination dar. Die Clients 802 können menschliche oder maschinelle Clients sein, die Anfragen für die Ausführung von Operationen durch das System 800 erzeugen. Das System 800 führt Anwendungen oder Datenberechnungsaufgaben aus, die durch die Clients 802 angefordert werden.
  • Bei einem Beispiel umfasst das System 800 ein oder mehrere Racks, die strukturelle und Verbindungsressourcen darstellen, um mehrere Berechnungsknoten zu häusen und zu verbinden. Bei einem Beispiel umfasst das Rack 810 mehrere Knoten 830. Bei einem Beispiel hostet das Rack 810 mehrere Blade-Komponenten 820. Hosting bezieht sich auf die Bereitstellung von Leistung, struktureller oder mechanischer Unterstützung und Verbindung. Die Blades 820 können sich auf Rechenressourcen auf gedruckten Schaltungsplatinen (PCBs; printed circuit boards) beziehen, wobei eine PCB die Hardwarekomponenten für einen oder mehrere Knoten 830 häust. Bei einem Beispiel umfassen die Blades 820 kein(e) Gehäuse oder Einhausung oder andere „Box“ als die durch das Rack 810 bereitgestellte. Bei einem Beispiel umfassen die Blades 820 ein Gehäuse mit freigelegtem Verbinder zum Verbinden in das Rack 810. Bei einem Beispiel umfasst das System 800 kein Rack 810, und jedes Blade 820 umfasst ein Gehäuse oder eine Einhausung, das/die gestapelt oder anderweitig in unmittelbarer Nähe zu anderen Blades vorliegen kann und die Verbindung von Knoten 830 ermöglichen kann.
  • Das System 800 umfasst die Struktur 870, die eine oder mehrere Verbinder für die Knoten 830 darstellt. Bei einem Beispiel umfasst die Struktur 870 mehrere Schalter 872 oder Router oder andere Hardware, um Signale zwischen den Knoten 830 zu routen. Zusätzlich kann die Struktur 870 das System 800 mit dem Netzwerk 804 für den Zugriff durch Clients 802 koppeln. Zusätzlich zu der Routing-Ausrüstung kann die Struktur 870 auch als die Kabel oder Ports oder andere Hardware-Ausrüstung zum Koppeln der Knoten 830 miteinander betrachtet werden. Bei einem Beispiel weist die Struktur 870 ein oder mehrere zugeordnete Protokolle auf, um das Routen von Signalen durch das System 800 zu verwalten. Bei einem Beispiel sind das Protokoll oder die Protokolle zumindest teilweise abhängig von der in dem System 800 verwendeten Hardware-Ausrüstung.
  • Wie dargestellt, umfasst das Rack 810 N Blades 820. Bei einem Beispiel umfasst das System 800 zusätzlich zu dem Rack 810 das Rack 850. Wie dargestellt, umfasst das Rack 850 M Blades 860. M ist nicht notwendigerweise das gleiche wie N; daher wird darauf hingewiesen, dass verschiedene unterschiedliche Hardware-Ausrüstungskomponenten verwendet und über die Struktur 870 in das System 800 miteinander gekoppelt werden könnten. Die Blades 860 können gleich oder ähnlich zu den Blades 820 sein. Die Knoten 830 können irgendeine Art von Knoten sein, und sind nicht notwendigerweise alle die gleiche Art von Knoten. Das System 800 ist weder darauf beschränkt, homogen zu sein, noch ist es darauf beschränkt, nicht homogen zu sein.
  • Der Einfachheit halber wird nur der Knoten in Blade 820[0] detailliert dargestellt. Andere Knoten in dem System 800 können jedoch gleich oder ähnlich sein. Zumindest einige Knoten 830 sind Berechnungsknoten, mit Prozessor (proc; processor) 832 und Speicher 840. Ein Berechnungsknoten bezieht sich auf einen Knoten mit Verarbeitungsressourcen (z. B. einen oder mehrere Prozessoren), der ein Betriebssystem ausführt und eine oder mehrere Aufgaben empfangen und verarbeiten kann. Bei einem Beispiel sind zumindest einige Knoten 830 Serverknoten mit einem Server als Verarbeitungsressourcen, dargestellt durch Prozessor 832 und Speicher 840. Ein Speicherungsserver bezieht sich auf einen Knoten mit mehr Speicherungsressourcen als ein Berechnungsknoten, und anstatt Prozessoren für die Ausführung von Aufgaben aufzuweisen, umfasst ein Speicherungsserver Verarbeitungsressourcen zum Verwalten des Zugriffs auf die Speicherungsknoten innerhalb des Speicherungsservers.
  • Bei einem Beispiel umfasst der Knoten 830 die Schnittstellensteuerung 834, die Logik darstellt, um den Zugriff durch den Knoten 830 auf die Struktur 870 zu steuern. Die Logik kann Hardware-ressourcen zur Verbindung mit der physischen Verbindungs-Hardware umfassen. Die Logik kann Software- oder Firmware-Logik zum Verwalten der Verbindung umfassen. Bei einem Beispiel ist oder umfasst die Schnittstellensteuerung 834 eine Host-Struktur-Schnittstelle, die eine Struktur-schnittstelle gemäß irgendeinem hierin beschriebenen Beispiel sein kann.
  • Der Prozessor 832 kann einen oder mehrere separate Prozessoren umfassen. Jeder separate Prozessor kann eine einzelne Verarbeitungseinheit, eine Multikern-Verarbeitungseinheit oder eine Kombination umfassen. Die Verarbeitungseinheit kann ein primärer Prozessor wie z. B. eine CPU (central processing unit; zentrale Verarbeitungseinheit), ein Peripherieprozessor wie z. B. eine GPU (graphics processing unit; Graphikverarbeitungseinheit), oder eine Kombination davon sein. Der Speicher 840 kann Speichervorrichtungen und eine Speichersteuerung sein oder umfassen.
  • Eine Bezugnahme auf Speichervorrichtungen kann für unterschiedliche Speicherarten gelten. Speichervorrichtungen beziehen sich im Allgemeinen auf flüchtige Speichertechnologien. Ein flüchtiger Speicher ist ein Speicher, dessen Zustand (und damit die darin gespeicherten Daten) unbestimmt ist, wenn die Leistung zu der Vorrichtung unterbrochen wird. Ein nichtflüchtiger Speicher bezieht sich auf einen Speicher, dessen Zustand bestimmt ist, auch wenn die Leistung zu der Vorrichtung unterbrochen wird. Ein dynamischer flüchtiger Speicher erfordert ein Aktualisieren der Daten, die in der Vorrichtung gespeichert sind, um den Zustand aufrechtzuerhalten. Ein Beispiel für einen dynamischen flüchtigen Speicher umfasst DRAM (Dynamic Random Access Memory; dynamischen Direktzugriffsspeicher) oder eine Variante wie beispielsweise einen synchronen DRAM (SDRAM; Synchronous DRAM). Ein Speicherteilsystem, wie hierin beschrieben, kann mit einer Reihe von Speichertechnologien kompatibel sein, wie beispielsweise DDR3 (Double Data Rate Version 3, JESD79-3, ursprüngliche Herausgabe durch JEDEC (Joint Electronic Device Engineering Council) im Juni 2007), DDR4 (DDR Version 4, JESD79-4, erste Spezifikation veröffentlicht im September 2012 von JEDEC), LPDDR3 (Low Power DDR Version 3, JESD209-3, August 2013 von JEDEC), LPDDR4 (LPDDR-Version 4, JESD209-4, ursprünglich veröffentlicht im August 2014), WIO2 (Wide I/O Version 2 (WideIO2), JESD229-2, ursprünglich veröffentlicht von JEDEC im August 2014), HBM (High Bandwidth Memory, JESD235, ursprünglich veröffentlicht von JEDEC im Oktober 2013), DDR5 (DDR Version 5, derzeit in Diskussion von JEDEC), LPDDR5 (LPDDR Version 5, JESD209-5, ursprünglich herausgegeben von JEDEC im Februar 2019), HBM2 (HBM Version 2, derzeit in Diskussion von JEDEC) oder andere oder Kombinationen von Speichertechnologien, und Technologien, die auf Herleitungen oder Erweiterungen solcher Spezifikationen basieren.
  • Im Allgemeinen umfasst bei einem Beispiel eine Vorrichtung im Hinblick auf die Beschreibungen hierin: einen ersten Speicher zum Bereitstellen eines Eingangsvektors, der eine Breite von X Elementen aufweist; und ein Multiplizieren-Akkumulieren- (MAC) Array-auf-Chip mit dem ersten Speicher, das MAC-Array umfassend einen zweiten Speicher zum Speichern eines Gewichtungsvektors; und X MAC-Schaltungen, dynamisch konfigurierbar, um entweder eine Ausgabe basierend auf Berechnungen der X Elemente des Eingangsvektors mit dem Gewichtungsvektor zu berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Elements des Eingangsvektors mit dem Gewichtungsvektor zu berechnen.
  • Bei einem Beispiel umfasst der erste Speicher einen statischen Direktzugriffsspeicher (SRAM). Bei einem Beispiel umfasst der zweite Speicher eine Registerdatei. Bei einem Beispiel umfasst der zweite Speicher einen statischen Direktzugriffsspeicher (SRAM). Bei einem Beispiel ist das MAC-Array auf einem gemeinsamen Speicher-Die mit dem ersten Speicher, wobei der erste Speicher ein Cache-Speicher für einen Prozessor ist. Bei einem Beispiel ist das MAC-Array auf einem gemeinsamen Speicher-Die mit dem ersten Speicher, wobei der erste Speicher ein Notizblockspeicher für einen Prozessor ist. Bei einem Beispiel ist das MAC-Array innerhalb eines Systems-auf-einem-Chip mit dem ersten Speicher, wobei der erste Speicher ein Cache-Speicher für einen Prozessor ist. Bei einem Beispiel ist das MAC-Array innerhalb eines Systems-auf-einem-Chip mit dem ersten Speicher, wobei der erste Speicher ein Notizblockspeicher für einen Prozessor ist. Bei einem Beispiel umfasst das MAC-Array ferner: einen Multiplexer (Mux) zum Bereitstellen alternativer Pfade zwischen dem ersten Speicher und dem MAC-Array; und eine Mux-Steuerung zum Steuern des Mux zum Auswählen zwischen den alternativen Pfaden. Bei einem Beispiel ist die Mux-Steuerung ausgebildet, den Mux für ein Eingangsvektorelement an alle X MAC-Schaltungen für eine eindimensionale (1D) MxV-Berechnung zu steuern. Bei einem Beispiel ist die Mux-Steuerung ausgebildet, den Mux jeweils für X verschiedene Eingangsvektorelemente zu den X MAC-Schaltungen für eine zweidimensionale (2D) MxM-Berechnung zu steuern.
  • Im Allgemeinen umfasst bei einem Beispiel ein System im Hinblick auf die Beschreibungen hierin: einen Notizblockspeicher einer Verarbeitungseinheit zum Bereitstellen eines Eingangsvektors, der eine Breite von X Elementen aufweist; und einen Hardware-Beschleuniger, der mit dem Notizblockspeicher der Verarbeitungseinheit gekoppelt ist, umfassend eine Berechne-In/Nahe-Speicher- (CIM) Schaltungsanordnung, die ein Multiplizieren-Akkumulieren- (MAC) Array aufweist, das MAC-Array umfassend einen lokalen Speicher zum Speichern eines Gewichtungsvektors; und X MAC-Schaltungen, dynamisch konfigurierbar, um entweder eine Ausgabe basierend auf Berechnungen der X Elemente des Eingangsvektors mit dem Gewichtungsvektor zu berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Elements des Eingangsvektors mit dem Gewichtungsvektor zu berechnen.
  • Bei einem Beispiel umfasst der Cache oder Notizblockspeicher einen statischen Direktzugriffsspeicher (SRAM). Bei einem Beispiel umfasst der lokale Speicher eine Registerdatei. Bei einem Beispiel umfasst der lokale Speicher einen statischen Direktzugriffsspeicher (SRAM). Bei einem Beispiel ist der Hardware-Beschleuniger auf einem gemeinsamen Speicher-Die mit dem Cache oder Notizblockspeicher integriert. Bei einem Beispiel ist der Hardware-Beschleuniger auf einem System-auf-einem-Chip mit dem Cache oder Notizblockspeicher integriert. Bei einem Beispiel, das MAC-Array ferner umfassend: einen Multiplexer (Mux) zum Bereitstellen alternativer Pfade zwischen dem Cache oder Notizblockspeicher und dem MAC-Array; und eine Mux-Steuerung zum Steuern des Mux zum Auswählen zwischen den alternativen Pfaden. Bei einem Beispiel ist die Mux-Steuerung ausgebildet, den Mux für ein Eingangsvektorelement an alle X MAC-Schaltungen des MAC-Arrays für eine eindimensionale (1D) MxV-Berechnung zu steuern. Bei einem Beispiel ist die Mux-Steuerung ausgebildet, den Mux jeweils für X verschiedene Eingangsvektorelemente zu den X MAC-Schaltungen des MAC-Arrays für eine zweidimensionale (2D) M×M-Berechnung zu steuern. Bei einem Beispiel, wobei: die Verarbeitungseinheit eine Mehrkern-Host-Prozessor-Vorrichtung umfasst; das System ferner eine Anzeige umfasst, die kommunikativ mit einem Host-Prozessor gekoppelt ist; das System ferner eine Netzwerkschnittstelle umfasst, die kommunikativ mit einem Host-Prozessor gekoppelt ist; oder das System ferner eine Batterie umfasst, um das System mit Leistung zu versorgen.
  • Hierin dargestellte Flussdiagramme stellen Beispiele von Sequenzen von verschiedenen Prozessaktionen bereit. Die Flussdiagramme können sowohl Operationen, die durch eine Software- oder Firmware-Routine ausgeführt werden sollen, als auch physikalische Operationen anzeigen. Ein Flussdiagramm kann ein Beispiel der Implementierung von Zuständen einer finiten Zustandsmaschine (FSM; finite state machine) darstellen, die in Hardware und/oder Software implementiert sein kann. Obwohl sie in einer bestimmten Sequenz oder Reihenfolge dargestellt sind, kann die Reihenfolge der Aktionen modifiziert werden, soweit nicht anders angegeben. Somit sollen die dargestellten Diagramme nur als Beispiele verstanden werden, und der Prozess kann in einer unterschiedlichen Reihenfolge ausgeführt werden, und einige Aktionen können parallel ausgeführt werden. Zusätzlich können eine oder mehrere Aktionen ausgelassen werden; somit führen nicht alle Implementierungen alle Aktionen aus.
  • Soweit hierin verschiedene Operationen oder Funktionen beschrieben sind, können sie als Softwarecode, Anweisungen, Konfiguration und/oder Daten beschrieben oder definiert werden. Der Inhalt kann direkt ausführbar („Objekt“ oder „ausführbare“ Form), ein Quellcode oder ein Differenzcode („Delta“ oder „Patch“ Code) sein. Der Softwareinhalt des hierin Beschriebenen kann über einen Herstellungsartikel mit dem darauf gespeicherten Inhalt bereitgestellt werden, oder über ein Verfahren zum Betreiben einer Kommunikationsschnittstelle, um Daten über die Kommunikationsschnittstelle zu senden. Ein maschinenlesbares Speicherungsmedium kann verursachen, dass eine Maschine die beschriebenen Funktionen oder Operationen ausführt und umfasst irgendeinen Mechanismus, der Informationen in einer durch eine Maschine zugänglichen Form (z. B. Rechenvorrichtung, elektronisches System etc.) speichert, wie beispielsweise beschreibbare/nicht beschreibbare Medien (z. B. Nur-Lese-Speicher (ROM; read only memory), Direktzugriffsspeicher (RAM; random access memory), Magnetplattenspeicherungdmedien, optische Speicherungsmedien, Flash-Speichervorrichtungen, etc.). Eine Kommunikationsschnittstelle umfasst irgendeinen Mechanismus, der mit irgendeinem aus einem fest verdrahteten, drahtlosen, optischen usw. Medium verbunden ist, um mit einer anderen Vorrichtung zu kommunizieren, wie beispielsweise eine Speicherbusschnittstelle, eine Prozessorbusschnittstelle, eine Internetverbindung, eine Festplattensteuerung usw. Die Kommunikationsschnittstelle kann durch Bereitstellen von Konfigurationsparametern und/oder Senden von Signalen konfiguriert sein, um die Kommunikationsschnittstelle vorzubereiten, ein Datensignal bereitzustellen, das den Softwareinhalt beschreibt. Auf die Kommunikationsschnittstelle kann über einen oder mehrere Befehle oder Signale zugegriffen werden, die an die Kommunikationsschnittstelle gesendet werden.
  • Verschiedene hierin beschriebene Komponenten können ein Mittel zum Durchführen der beschriebenen Operationen oder Funktionen sein. Jede hierin beschriebene Komponente umfasst Software, Hardware oder eine Kombination dieser. Die Komponenten können als Softwaremodule, Hardwaremodule, Spezialzweck-Hardware (z. B. anwendungsspezifische Hardware, anwendungsspezifische integrierte Schaltungen (ASICs; application specific integrated circuits), digitale Signalprozessoren (DSPs; digital signal processors) etc.), eingebettete Steuerungen, fest verdrahtete Schaltungsanordnungen etc. implementiert sein.
  • Abgesehen von dem, was hierin beschrieben ist, können verschiedene Modifikationen an dem, was offenbart ist, und Implementierungen der Erfindung vorgenommen werden, ohne von deren Schutzbereich abzuweichen. Daher sollten die Darstellungen und Beispiele hierin in einem veranschaulichenden und nicht in einem einschränkenden Sinne ausgelegt werden. Der Schutzbereich der Erfindung sollte ausschließlich durch Bezugnahme auf die folgenden Ansprüche gemessen werden.

Claims (16)

  1. Eine Vorrichtung für eine Multiplizieren-Akkumulieren- (MAC) Operation, umfassend: einen ersten Speicher zum Bereitstellen eines Eingangsvektors, der eine Breite von X Elementen aufweist; und ein Multiplizieren-Akkumulieren- (MAC) Array auf einem Chip mit dem ersten Speicher, das MAC-Array umfassend einen zweiten Speicher zum Speichern eines Gewichtungsvektors; und X MAC-Schaltungen, dynamisch konfigurierbar, um entweder eine Ausgabe basierend auf Berechnungen der X Elemente des Eingangsvektors mit dem Gewichtungsvektor zu berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Elements des Eingangsvektors mit dem Gewichtungsvektor zu berechnen.
  2. Die Vorrichtung gemäß Anspruch 1, wobei das MAC-Array auf einem gemeinsamen Speicher-Die mit dem ersten Speicher ist, wobei der erste Speicher ein Cache-Speicher für einen Prozessor ist.
  3. Die Vorrichtung gemäß einem der vorangehenden Ansprüche, wobei das MAC-Array auf einem gemeinsamen Speicher-Die mit dem ersten Speicher ist, wobei der erste Speicher ein Notizblockspeicher für einen Prozessor ist.
  4. Die Vorrichtung gemäß einem der vorangehenden Ansprüche, wobei das MAC-Array innerhalb eines Systems-auf-einem-Chip mit dem ersten Speicher ist, wobei der erste Speicher ein Cache-Speicher für einen Prozessor ist.
  5. Die Vorrichtung gemäß einem der vorangehenden Ansprüche, wobei das MAC-Array innerhalb eines Systems-auf-einem-Chip mit dem ersten Speicher ist, wobei der erste Speicher ein Notizblockspeicher für einen Prozessor ist.
  6. Die Vorrichtung gemäß einem der Ansprüche 1 bis 5, das MAC-Array ferner umfassend: einen Multiplexer (Mux) zum Bereitstellen alternativer Pfade zwischen dem ersten Speicher und dem MAC-Array; und eine Mux-Steuerung zum Steuern des Mux zum Auswählen zwischen den alternativen Pfaden.
  7. Die Vorrichtung gemäß Anspruch 6, wobei die Mux-Steuerung ausgebildet ist, den Mux für ein Eingangsvektorelement an alle X MAC-Schaltungen für eine eindimensionale (1D) MxV-Berechnung zu steuern.
  8. Die Vorrichtung gemäß Anspruch 6 oder 7, wobei die Mux-Steuerung ausgebildet ist, den Mux jeweils für X verschiedene Eingangsvektorelemente zu den X MAC-Schaltungen für eine zweidimensionale (2D) MxM-Berechnung zu steuern.
  9. Die Vorrichtung gemäß einem der Ansprüche 1 bis 8, wobei der erste Speicher einen statischen Direktzugriffsspeicher (SRAM) umfasst.
  10. Die Vorrichtung gemäß einem der Ansprüche 1 bis 9, wobei der zweite Speicher eine Register-Datei umfasst.
  11. Die Vorrichtung gemäß einem der Ansprüche 1 bis 10, wobei der zweite Speicher einen statischen Direktzugriffsspeicher (SRAM) umfasst.
  12. Ein System für eine Multiplizieren-Akkumulieren- (MAC) Operation, umfassend: einen Notizblockspeicher einer Verarbeitungseinheit zum Bereitstellen eines Eingangsvektors, der eine Breite von X Elementen aufweist; und einen Hardware-Beschleuniger, der mit dem Notizblockspeicher der Verarbeitungseinheit gekoppelt ist, umfassend eine Berechne-In/Nahe-Speicher- (CIM) Schaltungsanordnung, die ein Multiplizieren-Akkumulieren- (MAC) Array aufweist, das MAC-Array umfassend einen lokalen Speicher zum Speichern eines Gewichtungsvektors; und X MAC-Schaltungen, dynamisch konfigurierbar, um entweder eine Ausgabe basierend auf Berechnungen der X Elemente des Eingangsvektors mit dem Gewichtungsvektor zu berechnen oder die Ausgabe basierend auf Berechnungen eines einzelnen Elements des Eingangsvektors mit dem Gewichtungsvektor zu berechnen.
  13. Das System gemäß Anspruch 12, das MAC-Array ferner umfassend: einen Multiplexer (Mux) zum Bereitstellen alternativer Pfade zwischen dem Notizblockspeicher und dem MAC-Array; und eine Mux-Steuerung zum Steuern des Mux zum Auswählen zwischen den alternativen Pfaden.
  14. Das System gemäß Anspruch 13, wobei die Mux-Steuerung ausgebildet ist, den Mux für ein Eingangsvektorelement an alle X MAC-Schaltungen des MAC-Arrays für eine eindimensionale (1D) MxV-Berechnung zu steuern.
  15. Das System gemäß Anspruch 13 oder 14, wobei die Mux-Steuerung ausgebildet ist, den Mux jeweils für X verschiedene Eingangsvektorelemente an die X MAC-Schaltungen des MAC-Arrays für eine zweidimensionale (2D) MxM-Berechnung zu steuern.
  16. Das System gemäß Anspruch 12, 13, 14 oder 15, wobei: die Verarbeitungseinheit eine Mehrkern-Host-Prozessor-Vorrichtung umfasst; das System ferner eine Anzeige umfasst, die kommunikativ mit einem Host-Prozessor gekoppelt ist; das System ferner eine Netzwerkschnittstelle umfasst, die kommunikativ mit einem Host-Prozessor gekoppelt ist; oder das System ferner eine Batterie umfasst, um das System mit Leistung zu versorgen.
DE102020122174.6A 2019-09-27 2020-08-25 Berechne-in/nahe speicher- (cim) schaltungsarchitektur für vereinheitlichte matrix-matrix- und matrix-vektor-berechnungen Pending DE102020122174A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/586,648 US11347477B2 (en) 2019-09-27 2019-09-27 Compute in/near memory (CIM) circuit architecture for unified matrix-matrix and matrix-vector computations
US16/586,648 2019-09-27

Publications (1)

Publication Number Publication Date
DE102020122174A1 true DE102020122174A1 (de) 2021-04-01

Family

ID=69161884

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020122174.6A Pending DE102020122174A1 (de) 2019-09-27 2020-08-25 Berechne-in/nahe speicher- (cim) schaltungsarchitektur für vereinheitlichte matrix-matrix- und matrix-vektor-berechnungen

Country Status (3)

Country Link
US (1) US11347477B2 (de)
CN (1) CN112579043A (de)
DE (1) DE102020122174A1 (de)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200066953A (ko) 2018-12-03 2020-06-11 삼성전자주식회사 Pim을 채용하는 반도체 메모리 장치 및 그 동작 방법
CN111382094B (zh) * 2018-12-29 2021-11-30 深圳云天励飞技术有限公司 一种数据处理方法及装置
US11455368B2 (en) 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
US11908541B2 (en) * 2020-01-07 2024-02-20 SK Hynix Inc. Processing-in-memory (PIM) systems
US11249723B2 (en) * 2020-04-02 2022-02-15 Micron Technology, Inc. Posit tensor processing
US20210320967A1 (en) * 2020-04-09 2021-10-14 Micron Technology, Inc. Edge Server with Deep Learning Accelerator and Random Access Memory
US11442881B2 (en) * 2020-04-18 2022-09-13 Flex Logix Technologies, Inc. MAC processing pipelines, circuitry to control and configure same, and methods of operating same
US11450672B2 (en) 2020-04-27 2022-09-20 Intel Corporation Ultra-deep compute static random access memory with high compute throughput and multi-directional data propagation
US11216373B2 (en) * 2020-05-29 2022-01-04 Advanced Micro Devices, Inc. Memory access commands with near-memory address generation
US11347652B2 (en) * 2020-08-31 2022-05-31 Microsoft Technology Licensing, Llc Banked memory architecture for multiple parallel datapath channels in an accelerator
TWI777645B (zh) * 2020-09-08 2022-09-11 旺宏電子股份有限公司 記憶體裝置及其操作方法
US11809838B2 (en) 2020-09-08 2023-11-07 Macronix International Co., Ltd. Memory device and operation method thereof
EP4229572A1 (de) * 2020-10-15 2023-08-23 Ascenium, Inc. Parallelverarbeitungsarchitektur mit hintergrundlasten
US11513893B2 (en) 2020-12-21 2022-11-29 Intel Corporation Concurrent compute and ECC for in-memory matrix vector operations
US20220244916A1 (en) * 2021-01-29 2022-08-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute in memory
TWI775402B (zh) * 2021-04-22 2022-08-21 臺灣發展軟體科技股份有限公司 資料處理電路及故障減輕方法
TWI796977B (zh) * 2021-11-22 2023-03-21 旺宏電子股份有限公司 記憶體裝置及其操作方法
US20230177106A1 (en) * 2021-12-08 2023-06-08 Tenstorrent Inc. Computational circuit with hierarchical accumulator
US20230195618A1 (en) * 2021-12-21 2023-06-22 Advanced Micro Devices, Inc. Approach for performing efficient memory operations using near-memory compute elements
US20230266968A1 (en) * 2022-02-21 2023-08-24 Flex Logix Technologies, Inc. Broadcast data, shared weight multiply-accumulate
CN115658013B (zh) * 2022-09-30 2023-11-07 杭州智芯科微电子科技有限公司 向量乘加器的rom存内计算装置和电子设备

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8832530B2 (en) 2012-09-26 2014-09-09 Intel Corporation Techniques associated with a read and write window budget for a two level memory system
BR112015032519B1 (pt) 2013-07-26 2021-11-09 Intel Corporation Método e aparelho para interface de memória não volátil
US11055063B2 (en) * 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
US10509738B2 (en) * 2016-07-01 2019-12-17 Intel Corporation Remote memory operations
WO2019114842A1 (zh) * 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
US11580353B2 (en) * 2018-05-04 2023-02-14 Apple Inc. Neural network processor for handling differing datatypes
US11262982B2 (en) * 2018-07-23 2022-03-01 SK Hynix Inc. Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same
US10754649B2 (en) * 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
US10748603B2 (en) * 2018-09-28 2020-08-18 Intel Corporation In-memory multiply and accumulate with global charge-sharing
KR20200097396A (ko) * 2019-02-08 2020-08-19 삼성전자주식회사 메모리 장치 및 이를 이용한 컴퓨팅 장치
US20190227750A1 (en) * 2019-03-29 2019-07-25 Intel Corporation Technologies for performing tensor operations in memory
US11531898B2 (en) * 2019-05-16 2022-12-20 International Business Machines Corporation Training of artificial neural networks
KR20210006120A (ko) * 2019-07-08 2021-01-18 에스케이하이닉스 주식회사 데이터 저장 장치, 데이터 처리 시스템 및 이를 위한 가속 장치
US10977002B2 (en) * 2019-07-15 2021-04-13 Facebook Technologies, Llc System and method for supporting alternate number format for efficient multiplication
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays
US11726950B2 (en) * 2019-09-28 2023-08-15 Intel Corporation Compute near memory convolution accelerator

Also Published As

Publication number Publication date
US11347477B2 (en) 2022-05-31
US20200026498A1 (en) 2020-01-23
CN112579043A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
DE102020122174A1 (de) Berechne-in/nahe speicher- (cim) schaltungsarchitektur für vereinheitlichte matrix-matrix- und matrix-vektor-berechnungen
Keuper et al. Distributed training of deep neural networks: Theoretical and practical limits of parallel scalability
DE69827589T2 (de) Konfigurierbare Verarbeitungsanordnung und Verfahren zur Benutzung dieser Anordnung, um eine Zentraleinheit aufzubauen
DE3751235T2 (de) Vielfachknotenrechner mit rekonfigurierbarer Pipelinestruktur.
DE102018119513A1 (de) Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden
DE3856015T2 (de) Berechnungseinrichtung für Parallelprozessoren
EP0875031B1 (de) Prozessor zur bildverarbeitung
DE102018005181A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Leistungs-, Richtigkeits- und Energiereduktionsmerkmalen
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
TW201928701A (zh) 用於計算的系統及方法
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
US20170060811A1 (en) Matrix operands for linear algebra operations
DE19722365A1 (de) Rekonfigurierbares Rechenbauelement
DE3049437A1 (de) Matrixanordnung einer vielzahl von verarbeitungselementen fuer parallelprozessoren
DE112012005991T5 (de) Skalierbare gemeinsame Referenztaktungsarchitektur unter Verwendung einer getrennten, einzigen Taktquelle für Blade- und Rack-Server
DE102010044531A1 (de) Autonome Speicherarchitektur
DE102009012409A1 (de) Systeme und Verfahren zum Zusammenfügen von Speicherzugriffen von parallelen Threads
CN109863477A (zh) 具有本地化存储器的矩阵处理器
DE102021107509A1 (de) Multi-modell-trainingspipeline in verteilten systemen
EP3729261B1 (de) Zentralisierte verteilte mischorganisation eines gemeinsam genutzten speichers für verarbeitung von neuronalem netz
DE102017120965A1 (de) Prozessor in nichtflüchtigem Ablagespeicher
DE112021001470T5 (de) Konfigurieren von datenverarbeitungsknoten in einer dreidimensionalen netztopologie
DE102021123703A1 (de) Flexibler beschleuniger für eine tensor-arbeitslast
DE102022127894A1 (de) Durchgehender schutz von daten für rechnen in speicher (cim)/rechnen in nahspeicher (cnm)