US20220156161A1 - Memory-based distributed processor architecture - Google Patents
Memory-based distributed processor architecture Download PDFInfo
- Publication number
- US20220156161A1 US20220156161A1 US17/649,975 US202217649975A US2022156161A1 US 20220156161 A1 US20220156161 A1 US 20220156161A1 US 202217649975 A US202217649975 A US 202217649975A US 2022156161 A1 US2022156161 A1 US 2022156161A1
- Authority
- US
- United States
- Prior art keywords
- memory
- processor
- bank
- data
- logic
- 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.)
- Abandoned
Links
- 230000015654 memory Effects 0.000 title claims abstract description 964
- 238000012545 processing Methods 0.000 claims abstract description 289
- 239000000758 substrate Substances 0.000 claims abstract description 123
- 238000004364 calculation method Methods 0.000 claims description 34
- 239000004065 semiconductor Substances 0.000 claims description 11
- 238000013473 artificial intelligence Methods 0.000 claims description 4
- 238000000034 method Methods 0.000 abstract description 100
- 230000000875 corresponding effect Effects 0.000 description 93
- 238000012546 transfer Methods 0.000 description 71
- 238000012360 testing method Methods 0.000 description 66
- 230000008569 process Effects 0.000 description 53
- 210000004027 cell Anatomy 0.000 description 30
- 230000006870 function Effects 0.000 description 23
- 230000004913 activation Effects 0.000 description 22
- 238000004891 communication Methods 0.000 description 22
- 230000002950 deficient Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 21
- 239000013598 vector Substances 0.000 description 21
- 230000009849 deactivation Effects 0.000 description 18
- 238000004519 manufacturing process Methods 0.000 description 14
- 238000013528 artificial neural network Methods 0.000 description 13
- 230000007246 mechanism Effects 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000005457 optimization Methods 0.000 description 7
- 230000004044 response Effects 0.000 description 7
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000008520 organization Effects 0.000 description 6
- 238000003860 storage Methods 0.000 description 6
- 238000003491 array Methods 0.000 description 5
- 238000007667 floating Methods 0.000 description 5
- 210000002569 neuron Anatomy 0.000 description 5
- 230000003362 replicative effect Effects 0.000 description 5
- 229910052710 silicon Inorganic materials 0.000 description 5
- 239000010703 silicon Substances 0.000 description 5
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000007792 addition Methods 0.000 description 4
- 230000003321 amplification Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 4
- 239000003990 capacitor Substances 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000003199 nucleic acid amplification method Methods 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 3
- 238000013073 enabling process Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000013307 optical fiber Substances 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000010998 test method Methods 0.000 description 3
- 230000003213 activating effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000013523 data management Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 238000012956 testing procedure Methods 0.000 description 2
- 238000012384 transportation and delivery Methods 0.000 description 2
- 206010010904 Convulsion Diseases 0.000 description 1
- 241000403522 Dinochloa Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 239000005387 chalcogenide glass Substances 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000036461 convulsion Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000003792 electrolyte Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002459 sustained effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1658—Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/102—Error in check bits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/1608—Error detection by comparing the output signals of redundant hardware
- G06F11/1616—Error detection by comparing the output signals of redundant hardware where the redundant component is an I/O device or an adapter therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1657—Access to multiple memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8038—Associative processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/02—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
- G11C11/16—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
- G11C11/165—Auxiliary circuits
- G11C11/1653—Address circuits or decoders
- G11C11/1655—Bit-line or column circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/02—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
- G11C11/16—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
- G11C11/165—Auxiliary circuits
- G11C11/1653—Address circuits or decoders
- G11C11/1657—Word-line or row circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/02—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
- G11C11/16—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
- G11C11/165—Auxiliary circuits
- G11C11/1675—Writing or programming circuits or methods
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/4076—Timing circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/408—Address circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/409—Read-write [R-W] circuits
- G11C11/4093—Input/output [I/O] data interface arrangements, e.g. data buffers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1072—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F2015/761—Indexing scheme relating to architectures of general purpose stored programme computers
- G06F2015/765—Cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Definitions
- the present disclosure relates generally to apparatuses for facilitating memory-intensive operations.
- the present disclosure relates to hardware chips that include processing elements coupled to dedicated memory banks.
- the von Neumann bottleneck results from throughput limitations resulting from conventional computer architecture.
- data transfer from memory to the processor is often bottlenecked compared to actual computations undertaken by the processor.
- the number of clock cycles to read and write from memory increases significantly with memory-intensive processes.
- These clock cycles result in lower effective processing speeds because reading and writing from memory consumes clock cycles that cannot be used for performing operations on data.
- the computational bandwidth of the processor is generally larger than the bandwidth of the buses that the processor uses to access the memory.
- New data resources can be massive, sometimes in the order of peta- to zettabytes. Moreover, the growth rate of these data resources may exceed data processing capabilities. Therefore, data scientists have turned to parallel data processing techniques, to tackle these challenges. In an effort to increase computation power and handle the massive amount of data, scientists have attempted to create systems and methods capable of parallel intensive computing. But these existing systems and methods have not kept up with the data processing requirements, often because the techniques employed are limited by their demand of additional resources for data management, integration of segregated data, and analysis of the sectioned data.
- new semiconductor processors or chips may be designed specifically for data intensive tasks by incorporating memory and processing functions in a single substrate fabricated in technologies more fitting for memory operations rather than arithmetic computation.
- integrated circuits specifically designed for data-intensive tasks it is possible to meet the new data processing requirements.
- this new approach to tackle data processing of large data sets requires solving new issues in chip design and fabrication. For instance, if the new chips designed for data intensive tasks are manufactured with fabrication techniques and architectures used for common chips, they would have a poor performance and/or unacceptable yields.
- the new chips are designed to operate with current data handling methods, they will have poor performance because current methods can limit the chip's ability to handle parallel operations.
- the present disclosure describes solutions for mitigating or overcoming one or more of the problems set forth above, among other problems in the prior art.
- Embodiments consistent with the present disclosure provide apparatuses including hardware processing chips.
- the disclosed embodiments may use dedicated memory banks paired with processing elements to provide more efficient effective processing speeds than conventional processors.
- the disclosed chips may include dedicated buses between each processing element and its corresponding memory banks.
- the disclosed chips may be free of arbiters and/or other hardware that controls timing of data transfers between the processing elements.
- Other disclosed non-transitory computer-readable media may store instructions for compiling higher-level instructions to lower-level instructions executed by hardware chips disclosed herein.
- Some embodiments of the present disclosure include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; a first plurality of buses, each connecting one of the plurality of processor subunits to its corresponding, dedicated memory bank; and a second plurality of buses, each connecting one of the plurality of processor subunits to another of the plurality of processor subunits.
- a memory chip comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; a processing array disposed on the substrate, the processing array including a plurality of address generators, each one of the address generators being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each connecting one of the plurality of address generators to its corresponding, dedicated memory bank.
- a distributed processor comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks, wherein each of the discrete memory banks has a capacity greater than one megabyte; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- Still other embodiments consistent with the present disclosure may include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits, wherein the plurality of buses are free of timing hardware logic components such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by timing hardware logic components.
- a distributed processor on a memory chip comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated one of the plurality of discrete memory banks, wherein the plurality of buses are free of timing hardware logic components such that data transfers between a processor subunit and a corresponding, dedicated one of the plurality of discrete memory banks and across a corresponding one of the plurality of buses are uncontrolled by timing hardware logic components.
- a distributed processor comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits, wherein the plurality of processor subunits are configured to execute software that controls timing of data transfers across the plurality of buses to avoid colliding data transfers on at least one of the plurality of buses.
- a distributed processor on a memory chip comprising: a substrate; a plurality of processor subunits disposed on the substrate, each processor subunit being configured to execute a series of instructions independent from other processor subunits, each series of instructions defining a series of tasks to be performed by a single processor subunit; a corresponding plurality of memory banks disposed on the substrate, each one of the plurality processor subunits being connected to at least one dedicated memory bank not shared by any others of the plurality of processor subunits; and a plurality of buses, each of the plurality of buses connecting one of the plurality of processor subunits to at least one other of the plurality of processor subunits, wherein data transfers across at least one of the plurality of buses are predefined by the series of instructions included in a processor subunit connected to the at least one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks, and wherein each memory bank of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein at least some of the data stored in one particular memory bank from among the plurality of memory banks comprises a duplicate of data stored in at least another one of the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks, and wherein each memory bank of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein at least some of the data stored in one particular memory bank from among the plurality of memory banks comprises a duplicate of data stored in at least another one of the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a non-transitory computer-readable medium storing instructions for compiling a series of instructions for execution on a memory chip comprising a plurality of processor subunits and a plurality of memory banks, wherein each processor subunit from among the plurality of processor subunits is connected to at least one corresponding, dedicated memory bank from among the plurality of memory banks, the instructions causing at least one processor to: divide the series of instructions into a plurality of groups of sub-series instructions, the division comprising: assigning tasks associated with the series of instructions to different ones of the processor subunits, wherein the processor subunits are spatially distributed among the plurality of memory banks disposed on the memory chip; generating tasks to transfer data between pairs of the processor subunits of the memory chip, each pair of processor subunits being connected by a bus, and grouping the assigned and generated tasks into the plurality of groups of sub-series instructions, wherein each of the plurality of groups of sub-series instructions corresponds to a different one of the plurality of processor sub-
- FIG. 1 may include a memory chip, comprising: a plurality of memory banks, each memory bank having a bank row decoder, a bank column decoder, and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank, each memory sub-bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells, wherein the sub-bank row decoders and the sub-bank column decoders are connected to the bank row decoder and the bank column decoder.
- a memory chip comprising: a plurality of memory banks, each memory bank having a bank controller and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank, each memory sub-bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells, wherein the sub-bank row decoders and the sub-bank column decoders process read and write requests from the bank controller.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a having a bank controller for processing reads and writes to locations on the memory bank, each memory bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells and having a mat row decoder and a mat column decoder, wherein the mat row decoders and the mat column decoders process read and write requests from the sub-bank controller.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a bank controller, a row decoder, and a column decoder for allowing reads and writes to locations on the memory bank; and a plurality of buses connecting each controller of the plurality of bank controllers to at least one other controller of the plurality of bank controllers.
- One aspect of the present disclosure is directed to a memory device including a substrate; a plurality of memory banks on the substrate; a plurality of primary logic blocks on the substrate, each of the plurality of primary logic blocks being connected to at least one of the plurality of memory banks; a plurality of redundant blocks on the substrate, each of the plurality of redundant blocks being connected to at least one of the memory banks, each of the plurality of redundant blocks replicating at least one of the plurality of primary logic blocks; and a plurality of configuration switches on the substrate, each one of the plurality of the configuration switches being connected to at least one of the plurality of primary logic blocks or to at least one of the plurality of redundant blocks.
- a first configuration switch of the plurality of configuration switches may be configured to disable the one of the plurality of primary logic blocks
- a second configuration switch of the plurality of configuration switches may be configured to enable one of the plurality of redundant blocks that replicates the one of the plurality of primary logic blocks.
- Another aspect of the present disclosure is directed to a distributed processor on a memory chip including a substrate; an address manager on the substrate; a plurality of primary logic blocks on the substrate, each of the plurality of primary logic blocks being connected to at least one of the plurality of memory banks; a plurality of redundant blocks on the substrate, each of the plurality of redundant blocks being connected to at least one of the plurality of memory banks, each of the plurality of redundant blocks replicating at least one of the plurality of primary logic blocks; and a bus on the substrate connected to each of the plurality of primary logic blocks, each of the plurality of redundant blocks, and the address manager.
- processor may assign running ID numbers to blocks in the plurality of primary logic blocks that pass a testing protocol; assign illegal ID numbers to blocks in the plurality of primary logic blocks that do not pass the testing protocol; and assign running ID numbers to blocks in the plurality of redundant blocks that pass the testing protocol.
- Yet another aspect of the present disclosure is directed to a method for configuring a distributed processor on a memory chip.
- the method may include: testing each one of a plurality of primary logic blocks on the substrate of the memory chip for at least one circuit functionality; identifying at least one faulty logic block in the plurality of primary logic blocks based on the testing results, the at least one faulty logic block being connected to at least one memory bank disposed on the substrate of the memory chip; testing at least one redundant block on the substrate of the memory chip for the at least one circuit functionality, the at least one redundant block replicating the at least one faulty logic block and being connected to the at least one memory bank; disabling the at least one faulty logic block by applying an external signal to a deactivation switch, the deactivation switch being connected with the at least one faulty logic block and being disposed on the substrate of the memory chip; and enabling the at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip.
- the method may include enabling a plurality of primary logic blocks and a plurality of redundant blocks on the substrate of the memory; testing each one of the plurality of primary logic blocks on the substrate of the memory chip for at least one circuit functionality; identifying at least one faulty logic block in the plurality of primary logic blocks based on the testing results, the at least one faulty logic block being connected to at least one memory bank disposed on the substrate of the memory chip; testing at least one redundant block on the substrate of the memory chip for the at least one circuit functionality, the at least one redundant block replicating the at least one faulty logic block and being connected to the at least one memory bank; and disabling at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip.
- the processing device may include a substrate; a plurality of memory banks on the substrate; a memory controller on the substrate connected to each one of the plurality of memory banks; and a plurality of processing units on the substrate, each one of the plurality of processing units being connected to the memory controller, the plurality of processing units including a configuration manager.
- the configuration manager is configured to receive a first indication of a task to be performed, the task requiring at least one computation; signal at least one selected processing unit from the plurality of processing units based upon a capability of the selected processing unit for performing the at least one computation; and transmitting a second indication to the at least one selected processing unit
- the memory controller is configured to route data from at least two memory banks to the at least one selected processing unit using at least one communication line, the at least one communication line being connected to the at least two memory banks and the at least one selected processing unit via the memory controller.
- the method may include: compiling, by a compiler, a task for the distributed memory device, the task requiring at least one computation, the compiling may include determining a number of words that are required simultaneously to perform the task, and providing instructions for writing words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously; receiving, by a configuration manager disposed on the substrate, an indication to perform the task; and in response to receiving the indication, configuring a memory controller disposed in the substrate to: within a first line access cycle: access at least one first word from a first memory bank from the plurality of memory banks using a first memory line, send the at least one first word to at least one processing unit, and open a first memory line in the second memory bank to access a second address from the second memory bank from the plurality of memory
- Yet another aspect of the present disclosure is directed to a non-transitory computer-readable medium that stores instructions that, when executed by at least one processor, cause the at least one processor to determine a number of words that are required simultaneously to perform a task, the task requiring at least one computation; write words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously; transmit an indication to perform the task to a configuration manager disposed on the substrate; and transmit instructions to configure a memory controller disposed on the substrate to, within a first line access cycle: access at least one first word from a first memory bank from the plurality of memory banks using a first memory line, send the at least one first word to at least one processing unit, and open a first memory line in the second memory bank to access a second address from the second memory bank from the plurality of memory banks, and within a second line access cycle: access at least one second word from the
- non-transitory computer-readable storage media may store program instructions, which are executed by at least one processing device and perform any of the methods described herein.
- FIG. 1 is a diagrammatic representation of a central processing unit (CPU).
- CPU central processing unit
- FIG. 2 is a diagrammatic representation of a graphics processing unit (GPU).
- GPU graphics processing unit
- FIG. 3A is a diagrammatic representation of an embodiment of an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 3B is a diagrammatic representation of another embodiment of an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 4 is a diagrammatic representation of a generic command executed by an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 5 is a diagrammatic representation of a specialized command executed by an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 6 is a diagrammatic representation of a processing group for use in an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 7A is a diagrammatic representation of a rectangular array of processing groups consistent with the disclosed embodiments.
- FIG. 7B is a diagrammatic representation of an elliptical array of processing groups consistent with the disclosed embodiments.
- FIG. 7C is a diagrammatic representation an array of hardware chips consistent with the disclosed embodiments.
- FIG. 7D is a diagrammatic representation another array of hardware chips consistent with the disclosed embodiments.
- FIG. 8 is a flowchart depicting an exemplary method for compiling a series of instructions for execution on an exemplary hardware chip consistent with the disclosed embodiments.
- FIG. 9 is a diagrammatic representation of a memory bank.
- FIG. 10 is a diagrammatic representation of a memory bank.
- FIG. 11 is a diagrammatic representation of an embodiment of an exemplary memory bank with sub-bank controls consistent with the disclosed embodiments.
- FIG. 12 is a diagrammatic representation of another embodiment of an exemplary memory bank with sub-bank controls consistent with the disclosed embodiments.
- FIG. 13 is a block diagram of an exemplary memory chip, consistent with disclosed embodiments.
- FIG. 14 is a block diagram of an exemplary redundant logic block set, consistent with disclosed embodiments.
- FIG. 15 is a block diagram for an exemplary logic block, consistent with disclosed embodiments.
- FIG. 16 are block diagrams of exemplary logic blocks connected with a bus, consistent with disclosed embodiments.
- FIG. 17 is a block diagram for exemplary logic blocks connected in series, consistent with disclosed embodiments.
- FIG. 18 is a block diagram of exemplary logic blocks connected in a two-dimension array, consistent with disclosed embodiments.
- FIG. 19 is a block diagram for exemplary logic blocks in a complex connection, consistent with disclosed embodiments.
- FIG. 20 is an exemplary flow chart illustrating a redundant block enabling process, consistent with disclosed embodiments.
- FIG. 21 is an exemplary flow chart illustrating an address assignment process, consistent with disclosed embodiments.
- FIG. 22 provides block diagrams for exemplary processing devices, consistent with disclosed embodiments.
- FIG. 23 is a block diagram of an exemplary processing device, consistent with disclosed embodiments.
- FIG. 24 includes exemplary memory configuration diagrams, consistent with disclosed embodiments.
- FIG. 25 is an exemplary flowchart illustrating a memory configuration process, consistent with disclosed embodiments.
- FIG. 26 is an exemplary flowchart illustrating a memory read process, consistent with disclosed embodiments.
- FIG. 27 is an exemplary flowchart illustrating a process execution, consistent with disclosed embodiments.
- the term “hardware chip” refers to a semiconductor wafer (such as silicon or the like) on which one or more circuit elements (such as transistors, capacitors, resistors, and/or the like) are formed.
- the circuit elements may form processing elements or memory elements.
- a “processing element” refers to one or more circuit elements that, together, perform at least one logic function (such as an arithmetic function, a logic gate, other Boolean operations, or the like).
- a processing element may be a general-purpose processing element (such as a configurable plurality of transistors) or a special-purpose processing element (such as a particular logic gate or a plurality of circuit elements designed to perform a particular logic function).
- a “memory element” refers to one or more circuit elements that can be used to store data.
- a “memory element” may also be referred to as a “memory cell.”
- a memory element may be dynamic (such that electrical refreshes are required to maintain the data store), static (such that data persists for at least some time after power loss), or non-volatile memories.
- Processing elements may be joined to form processor subunits.
- a “processor subunit” may thus comprise a smallest grouping of processing elements that may execute at least one task or instructions (e.g., of a processor instruction set).
- a subunit may comprise one or more general-purpose processing elements configured to execute instructions together, one or more general-purpose processing elements paired with one or more special-purpose processing elements configured to execute instructions in a complementary fashion, or the like.
- the processor subunits may be arranged on a substrate (e.g., a wafer) in an array.
- the “array” may comprise a rectangular shape, any arrangement of the subunits in the array may be formed on the substrate.
- Memory elements may be joined to form memory banks.
- a memory bank may comprise one or more lines of memory elements linked along at least one wire (or other conductive connection).
- the memory elements may be linked along at least one addition wire in another direction.
- the memory elements may be arranged along wordlines and bitlines, as explained below.
- the memory bank may comprise lines, any arrangement of the elements in the bank may be used to form the bank on the substrate.
- one or more banks may be electrically joined to at least one memory controller to form a memory array.
- the memory array may comprise a rectangular arrangement of the banks, any arrangement of the banks in the array may be formed on the substrate.
- a “bus” refers to any communicative connection between elements of a substrate.
- a wire or a line forming an electrical connection
- an optical fiber forming an optical connection
- any other connection conducting communications between components may be referred to as a “bus.”
- Conventional processors pair general-purpose logic circuits with shared memories.
- the shared memories may store both instruction sets for execution by the logic circuits as well as data used for and resulting from execution of the instruction sets.
- some conventional processors use a caching system to reduce delays in performing pulls from the shared memory; however, conventional caching systems remain shared.
- Conventional processors include central processing units (CPUs), graphics processing units (GPUs), various application-specific integrated circuits (ASICs), or the like.
- FIG. 1 shows an example of a CPU
- FIG. 2 shows an example of a GPU.
- a CPU 100 may comprise a processing unit 110 that includes one or more processor subunits, such as processor subunit 120 a and processor subunit 120 b. Although not depicted in FIG. 1 , each processor subunit may comprise a plurality of processing elements. Moreover, the processing unit 110 may include one or more levels of on-chip cache. Such cache elements are generally formed on the same semiconductor die as processing unit 110 rather than being connected to processor subunits 120 a and 120 b via one or more buses formed in the substrate containing processor subunits 120 a and 120 b and the cache elements. An arrangement directly on the same die, rather than being connected via buses, is common for both first-level (L1) and second-level (L2) caches in conventional processors.
- L1 first-level
- L2 second-level
- L2 caches were shared amongst processor subunits using back-side buses between the subunits and the L2 caches.
- Back-side buses are generally larger than front-side buses, described below. Accordingly, because cache is to be shared with all processor subunits on the die, cache 130 may be formed on the same die as processor subunits 120 a and 120 b or communicatively coupled to processor subunits 120 a and 120 b via one or more back-side buses. In both embodiments without buses (e.g., cache is formed directly on-die) as well as embodiments using back-side buses, the caches are shared between processor subunits of the CPU.
- processing unit 110 communicates with shared memory 140 a and memory 140 b.
- memories 140 a and 140 b may represent memory banks of shared dynamic random access memory (DRAM). Although depicted with two banks, most conventional memory chips include between eight and sixteen memory banks.
- processor subunits 120 a and 120 b may use shared memories 140 a and 140 b to store data that is then operated upon by processor subunits 120 a and 120 b.
- This arrangement results in the buses between memories 140 a and 140 b and processing unit 110 acting as a bottleneck when the clock speeds of processing unit 110 exceed data transfer speeds of the buses. This is generally true for conventional processors, resulting in lower effective processing speeds than the stated processing speeds based on clock rate and number of transistors.
- a GPU 200 may comprise a processing unit 210 that includes one or more processor subunits (e.g., subunits 220 a, 220 b, 220 c, 220 d, 220 e, 220 f, 220 g, 220 h, 220 i, 220 j, 220 k, 220 l, 220 m, 220 n, 220 o, and 220 p ).
- the processing unit 210 may include one or more levels of on-chip cache and/or register files. Such cache elements are generally formed on the same semiconductor die as processing unit 210 . Indeed, in the example of FIG.
- cache 210 is formed on the same die as processing unit 210 and shared amongst all of the processor subunits, while caches 230 a, 230 b, 230 c, and 230 d are formed on a subset of the processor subunits, respectively, and dedicated thereto.
- processing unit 210 communicates with shared memories 250 a, 250 b, 250 c, and 250 d.
- memories 250 a, 250 b, 250 c, and 250 d may represent memory banks of shared DRAM.
- the processor subunits of processing unit 210 may use shared memories 250 a, 250 b, 250 c, and 250 d to store data that is then operated upon by the processor subunits. This arrangement, however, results in the buses between memories 250 a, 250 b, 250 c, and 250 d and processing unit 210 acting as a bottleneck, similar to the bottleneck described above for CPUs.
- FIG. 3A is a diagrammatic representation of an embodiment depicting an exemplary hardware chip 300 .
- Hardware chip 300 may comprise a distributed processor designed to mitigate the bottlenecks described above for CPUs, GPUs, and other conventional processors.
- a distributed processor may include a plurality of processor subunits distributed spatially on a single substrate. Moreover, as explained above, in distributed processors of the present disclosure, corresponding memory banks are also spatially distributed on the substrate.
- a distributed processor may be associated with a set of instructions, and each one of the processor subunits of the distributed processor may be responsible for performing one or more tasks included in the set of instructions.
- hardware chip 300 may comprise a plurality of processor subunits, e.g., logic and control subunits 320 a, 320 b, 320 c, 320 d, 320 e, 320 f, 320 g, and 320 h. As further depicted in FIG. 3A , each processor subunit may have a dedicated memory instance.
- processor subunits e.g., logic and control subunits 320 a, 320 b, 320 c, 320 d, 320 e, 320 f, 320 g, and 320 h.
- each processor subunit may have a dedicated memory instance.
- logic and control subunit 320 a is operably connected to dedicated memory instance 330 a
- logic and control subunit 320 b is operably connected to dedicated memory instance 330 b
- logic and control subunit 320 c is operably connected to dedicated memory instance 330 c
- logic and control subunit 320 d is operably connected to dedicated memory instance 330 d
- logic and control subunit 320 e is operably connected to dedicated memory instance 330 e
- logic and control subunit 320 f is operably connected to dedicated memory instance 330 f
- logic and control subunit 320 g is operably connected to dedicated memory instance 330 g
- logic and control subunit 320 h is operably connected to dedicated memory instance 330 h.
- FIG. 3A depicts each memory instance as a single memory bank
- hardware chip 300 may include two or more memory banks as a dedicated memory instance for a processor subunit on hardware chip 300 .
- FIG. 3A depicts each processor subunit as comprising both a logic component and a control for the dedicated memory bank(s)
- hardware chip 300 may use controls for the memory banks that are separate, at least in part, from the logic components.
- two or more processor subunits and their corresponding memory banks may be grouped, e.g., into processing groups 310 a, 310 b, 310 c, and 310 d.
- a “processing group” may represent a spatial distinction on a substrate on which hardware chip 300 is formed.
- a processing group may include further controls for the memory banks in the group, e.g., controls 340 a, 340 b, 340 c, and 340 d.
- a “processing group” may represent a logical grouping for the purposes of compiling code for execution on hardware chip 300 .
- a compiler for hardware chip 300 may divide an overall set of instructions between the processing groups on hardware chip 300 .
- host 350 may provide instructions, data, and other input to hardware chip 300 and read output from the same. Accordingly, a set of instructions may be executed entirely on a single die, e.g., the die hosting hardware chip 300 . Indeed, the only communications off-die may include the loading of instructions to hardware chip 300 , any input sent to hardware chip 300 , and any output read from hardware chip 300 . Accordingly, all calculations and memory operations may be performed on-die (on hardware chip 300 ) because the processor subunits of hardware chip 300 communicate with dedicated memory banks of hardware chip 300 .
- FIG. 3B is a diagrammatic representation of an embodiment depicting another exemplary hardware chip 300 ′. Although depicted as an alternative to hardware chip 300 , the architecture depicted in FIG. 3B may be combined, at least in part, with the architecture depicted in FIG. 3A .
- hardware chip 300 ′ may comprise a plurality of processor subunits, e.g., processor subunits 350 a, 350 b, 350 c, and 350 d.
- each processor subunit may have a plurality of dedicated memory instances.
- processor subunit 350 a is operably connected to dedicated memory instances 330 a and 330 b
- processor subunit 350 b is operably connected to dedicated memory instances 330 c and 330 d
- processor subunit 350 c is operably connected to dedicated memory instances 330 e and 330 f
- processor subunit 350 d is operably connected to dedicated memory instances 330 g and 330 h.
- the processor subunits and their corresponding memory banks may be grouped, e.g., into processing groups 310 a, 310 b, 310 c, and 310 d.
- a “processing group” may represent a spatial distinction on a substrate on which hardware chip 300 ′ is formed and/or a logical grouping for the purposes of compiling code for execution on hardware chip 300 ′.
- processor subunits may communicate with each other via buses.
- processor subunit 350 a may communicate with processor subunit 350 b via bus 360 a, with processor subunit 350 c via bus 360 c, and with processor subunit 350 d via bus 360 f.
- processor subunit 350 b may communicate with processor subunit 350 a via bus 360 a (as described above), with processor subunit 350 c via bus 360 e, and with processor subunit 350 d via bus 360 d.
- processor subunit 350 c may communicate with processor subunit 350 a via bus 360 c (as described above), with processor subunit 350 b via bus 360 e (as described above), and with processor subunit 350 d via bus 360 b.
- processor subunit 350 d may communicate with processor subunit 350 a via bus 360 f (as described above), with processor subunit 350 b via bus 360 d (as described above), and with processor subunit 350 c via bus 360 b (as described above).
- bus 360 f as described above
- processor subunit 350 b via bus 360 d
- processor subunit 350 c via bus 360 b
- bus 360 e may be eliminated such that communications between processor subunit 350 b and 350 c pass through processor subunit 350 a and/or 350 d
- bus 360 f may be eliminated such that communications between processor subunit 350 a and processor subunit 350 d pass through processor subunit 350 b or 350 c.
- processor subunits may additionally or alternatively form part of controllers for corresponding dedicated memory banks, part of controllers for memory mats of corresponding dedicated memory, or the like.
- hardware chips 300 and 300 ′ may provide significant increases in efficiency for memory-intensive tasks as compared with traditional architectures.
- database operations and artificial intelligence algorithms are examples of memory-intensive tasks for which traditional architectures are less efficient than hardware chips 300 and 300 ′.
- hardware chips 300 and 300 ′ may be referred to as database accelerator processors and/or artificial intelligence accelerator processors.
- the hardware chip architecture described above may be configured for execution of code.
- each processor subunit may individually execute code (defining a set of instructions) apart from other processor subunits in the hardware chip. Accordingly, rather than relying on an operating system to manage multithreading or using multitasking (which is concurrency rather than parallelism), hardware chips of the present disclosure may allow for processor subunits to operate fully in parallel.
- each processor subunit may be overlapping.
- a plurality of processor subunits on a distributed processor may execute overlapping instructions as, for example, an implementation of an operating system or other management software, while executing non-overlapping instructions in order to perform parallel tasks within the context of the operating system or other management software.
- FIG. 4 depicts an exemplary process 400 for executing a generic command with processing group 410 .
- processing group 410 may comprise a portion of a hardware chip of the present disclosure, e.g., hardware chip 300 , hardware chip 300 ′, or the like.
- a command may be sent to processor subunit 430 , which is paired with dedicated memory instance 420 .
- An external host e.g., host 350
- host 350 may have sent an instruction set including the command for storage in memory instance 420 such that processor subunit 430 may retrieve the command from memory instance 420 and execute the retrieved command
- the command may be executed by processing element 440 , which is a generic processing element configurable to execute the received command.
- processing group 410 may include a control 460 for memory instance 420 . As depicted in FIG.
- control 460 may perform any reads and/or writes to memory instance 420 required by processing element 440 when executing the received command
- processing group 410 may output the result of the command, e.g., to the external host or to a different processing group on the same hardware chip.
- processor subunit 430 may further include an address generator 450 .
- An “address generator” may comprise a plurality of processing elements that are configured to determine addresses in one or more memory banks for performing reads and writes and may also perform operations on the data located at the determined addresses (e.g., addition, subtraction, multiplication, or the like).
- address generator 450 may determine addresses for any reads or writes to memory.
- address generator 450 may increase efficiency by overwriting a read value with a new value determined based on the command when the read value is no longer needed.
- address generator 450 may select available addresses for storage of results from execution of the command This may allow for scheduling of result read-off for a later clock cycle, when it is more convenient for the external host.
- address generator 450 may determine addresses to read from and write to during a multi-cycle calculation, such as a vector or matrix multiply-accumulate calculation. Accordingly, address generator 450 may maintain or calculate memory addresses for reading data and writing intermediate results of the multi-cycle calculation such that processor subunit 430 may continue processing without having to store these memory addresses.
- FIG. 5 depicts an exemplary process 500 for executing a specialized command with processing group 510 .
- processing group 510 may comprise a portion of a hardware chip of the present disclosure, e.g., hardware chip 300 , hardware chip 300 ′, or the like.
- a specialized command (e.g., a multiply-accumulate command) may be sent to processing element 530 , which is paired with dedicated memory instance 520 .
- An external host e.g., host 350
- processing element 530 may retrieve the command from memory instance 520 for execution.
- processing element 530 is a multiply-accumulate (MAC) circuit configured to execute MAC commands received from the external host or retrieved from memory instance 520 .
- MAC multiply-accumulate
- processing group 410 may output the result of the command, e.g., to the external host or to a different processing group on the same hardware chip.
- processing group 410 may output the result of the command, e.g., to the external host or to a different processing group on the same hardware chip.
- MAC circuit Although depicted as a MAC circuit in FIG. 5 , additional or alternative specialized circuits may be included in processing group 510 .
- a MAX-read command (which returns the max value of a vector)
- a MAXO-read command (a common function also termed a rectifier, which returns the entire vector but also does MAX with 0), or the like may be implemented.
- a generic processor subunit may be coupled to one or more specialized processor subunits to form a processor subunit. Accordingly, the generic processor subunit may be used for all instructions not executable by the one or more specialized processor subunits.
- neural network implementation and other memory-intensive tasks may be handled with specialized logic circuits. For example, database queries, packet inspection, string comparison, and other functions may increase in efficiency if executed by the hardware chips described herein.
- dedicated buses may transfer data between processor subunits on the chip and/or between the processor subunits and their corresponding dedicated memory banks.
- the use of dedicated buses may reduce arbitration costs because competing requests are either not possible or easily avoided using software rather than hardware.
- FIG. 6 schematically depicts a diagrammatic representation of a processing group 600 .
- Processing group 600 may be for use in a hardware chip, e.g., hardware chip 300 , hardware chip 300 ′, or the like.
- Processor subunit 610 may be connected via buses 630 to memory 620 .
- Memory 620 may comprise a Randomly Accessible Memory (RAM) element that stores data and code for execution by processor subunit 610 .
- RAM Randomly Accessible Memory
- memory 620 may be an N-Way memory (wherein N is a number equal to or larger than 1 that implies the number of segments in an interleaved memory 620 ). Because processor subunit 610 is coupled to memory 620 dedicated to processor subunit 610 via bus 630 , N may be kept relatively small without compromising the execution performance. This represents an improvement over conventional multiway register files or caches where a lower N generally results in lower execution performance, and a higher N generally results in large area and power loss.
- Memory element 620 may comprise one or more types of memory known in the art, e.g., volatile memory (such as RAM, DRAM, SRAM, phase-change RAM (PRAM), magnetoresistive RAM (MRAM), resistive RAM (ReRAM), or the like) or non-volatile memory (such as flash or ROM). According to some embodiments, a portion of memory element 620 may comprise a first memory type, while another portion may comprise another memory type.
- volatile memory such as RAM, DRAM, SRAM, phase-change RAM (PRAM), magnetoresistive RAM (MRAM), resistive RAM (ReRAM), or the like
- non-volatile memory such as flash or ROM.
- a portion of memory element 620 may comprise a first memory type, while another portion may comprise another memory type.
- the code region of a memory element 620 may comprise a ROM element, while a data region of the memory element 620 may comprise a DRAM element.
- Another example for such partitioning is storing the weights of a neural network in flash while storing the data for calculation in DRAM.
- Processor subunit 610 comprises a processing element 640 that may comprise a processor.
- the processor can be pipelined or not pipelined, a customized Reduced Instruction Set Computing (RISC) element or other processing scheme, implemented on any commercial Integrated Circuit (IC) known in the art (such as ARM, ARC, RISC-V, etc.), as appreciated by one of ordinary skill
- Processing element 640 may comprise a controller that, in some embodiments, includes an Arithmetic Logic Unit (ALU) or other controller.
- ALU Arithmetic Logic Unit
- processing element 640 which executes received or stored code, may comprise a generic processing element and, therefore, be flexible and capable of performing a wide variety of processing operations.
- Non-dedicated circuitry typically consumes more power than specific-operation-dedicated circuitry when comparing the power consumed during performance for a specific operation. Therefore, when performing specific complex arithmetic calculations, processing element 640 may consume more power and perform less efficiently than dedicated hardware. Therefore, according to some embodiments, a controller of processing element 640 may be designed to perform specific operations (e.g., addition or “move” operations).
- the specific operations may be performed by one or more accelerators 650 .
- Each accelerator may be dedicated and programmed to perform a specific calculation (such as multiplication, floating point vector operations, or the like). By using accelerator(s), the average power consumed per calculation per processor subunit may be lowered, and the calculation throughput henceforth increases.
- Accelerator(s) 650 may be chosen according to an application that the system is designed to implement (e.g., execution of neural networks, execution of database queries, or the like). Accelerator(s) 650 may be configured by processing element 640 and may operate in tandem therewith for lowering power consumption and accelerating calculations and computations.
- the accelerators may additionally or alternatively be used to transfer data between memory and MUXs/DEMUXs/input/output ports (e.g., MUX 650 and DEMUX 660 ) of processing group 600 , such as a smart DMA (direct memory access) peripheral.
- MUXs/DEMUXs/input/output ports e.g., MUX 650 and DEMUX 660
- processing group 600 such as a smart DMA (direct memory access) peripheral.
- Accelerator(s) 650 may be configured to perform a variety of functions. For instance, one accelerator may be configured to perform 16-bit floating point calculation or 8-bit integer calculations, which are often used in neural networks. Another example of an accelerator function is a 32-bit floating point calculation, which is often used during a training stage of a neural network. Yet another example of an accelerator function is query processing, such as that used in databases. In some embodiments, accelerator(s) 650 may comprise specialized processing elements to perform these functions and/or may be configured according to configuration data, stored on the memory element 620 , such that it may be modified.
- Accelerator(s) 650 may additionally or alternatively implement a configurable scripted list of memory movements to time movements of data to/from memory 620 or to/from other accelerators and/or inputs/outputs. Accordingly, as explained further below, all the data movement inside the hardware chip using processing group 600 may use software synchronization rather than hardware synchronization. For example, an accelerator in one processing group (e.g., group 600 ) may transfer data from its input to its accelerator every tenth cycle and then output data at the next cycle, thereby letting the information flow from the memory of the processing group to another one.
- group 600 may transfer data from its input to its accelerator every tenth cycle and then output data at the next cycle, thereby letting the information flow from the memory of the processing group to another one.
- processing group 600 may further comprise at least one input multiplexer (MUX) 660 connected to its input port and at least one output DEMUX 670 connected to its output port.
- MUXs/DEMUXs may be controlled by control signals (not shown) from processing element 640 and/or from one of accelerator(s) 650 , determined according to a current instruction being carried out by processing element 640 and/or the operation executed by an accelerator of accelerator(s) 650 .
- processing group 600 may be required (according to a predefined instruction from its code memory) to transfer data from its input port to its output port.
- one or more of the input MUXs may be directly connected via one or more buses to an output DEMUX (e.g., DEMUX 670 ), in addition to each of the DEMUXs/MUXs being connected to processing element 640 and accelerator(s) 650 .
- the processing group 600 of FIG. 6 may be arrayed to form a distributed processor, for example, as depicted in FIG. 7A .
- the processing groups may be disposed on substrate 710 to form an array.
- substrate 710 may comprise a semiconductor substrate, such as silicon. Additionally or alternatively, substrate 710 may comprise a circuit board, such as a flexible circuit board.
- substrate 710 may include, disposed thereon, a plurality of processing groups, such as processing group 600 .
- substrate 710 includes a memory array that includes a plurality of banks, such as banks 720 a, 720 b, 720 c, 720 d, 720 e, 720 f, 720 g, and 720 h.
- substrate 710 includes a processing array that may include a plurality of processor subunits, such as subunits 730 a, 730 b, 730 c, 730 d, 730 e, 730 f, 730 g, and 730 h.
- each processing group may include a processor subunit and one or more corresponding memory banks dedicated to the processor subunit.
- each subunit is associated with a corresponding, dedicated memory bank, e.g.: Processor subunit 730 a is associated with memory bank 720 a, processor subunit 730 b is associated with memory bank 720 b, processor subunit 730 c is associated with memory bank 720 c, processor subunit 730 d is associated with memory bank 720 d, processor subunit 730 e is associated with memory bank 720 e, processor subunit 730 f is associated with memory bank 720 f, processor subunit 730 g is associated with memory bank 720 g, processor subunit 730 h is associated with memory bank 720 h.
- substrate 710 may include a first plurality of buses connecting one of the processor subunits to its corresponding, dedicated memory bank(s).
- bus 740 a connects processor subunit 730 a to memory bank 720 a
- bus 740 b connects processor subunit 730 b to memory bank 720 b
- bus 740 c connects processor subunit 730 c to memory bank 720 c
- bus 740 d connects processor subunit 730 d to memory bank 720 d
- bus 740 e connects processor subunit 730 e to memory bank 720 e
- bus 740 f connects processor subunit 730 f to memory bank 720 f
- bus 740 g connects processor subunit 730 g to memory bank 720 g
- bus 740 h connects processor subunit 730 h to memory bank 720 h.
- substrate 710 may include a second plurality of buses connecting one of the processor subunits to another of the processor subunits.
- bus 750 a connects processor subunit 730 a to processor subunit 750 e
- bus 750 b connects processor subunit 730 a to processor subunit 750 b
- bus 750 c connects processor subunit 730 b to processor subunit 750 f
- bus 750 d connects processor subunit 730 b to processor subunit 750 c
- bus 750 e connects processor subunit 730 c to processor subunit 750 g
- bus 750 f connects processor subunit 730 c to processor subunit 750 d
- bus 750 g connects processor subunit 730 d to processor subunit 750 h
- bus 750 h connects processor subunit 730 h to processor subunit 750 g
- bus 750 i connects processor subunit 730 g
- the plurality of logic processor subunits is arranged in at least one row and at least one column.
- the second plurality of buses connect each processor subunit to at least one adjacent processor subunit in the same row and to at least one adjacent processor subunit in the same column.
- FIG. 7A may be referred to as a “partial tile connection.”
- a full tile connection includes additional buses connecting diagonal processor subunits.
- the second plurality of buses may include additional buses between processor subunit 730 a and processor subunit 730 f, between processor subunit 730 b and processor subunit 730 e, between processor subunit 730 b and processor subunit 730 g, between processor subunit 730 c and processor subunit 730 f, between processor subunit 730 c and processor subunit 730 h, and between processor subunit 730 d and processor subunit 730 g.
- a full tile connection may be used for convolution calculations, in which data and results stored in a near processor subunit are used.
- each processor subunit may receive a tile of the image (such as a pixel or a group of pixels).
- each processor subunit may acquire data from all eight adjacent processor subunits, each of which have received a corresponding tile.
- the data from the diagonal adjacents may be passed through other adjacent processor subunits connected to the processor subunit.
- the distributed processor on a chip may be an artificial intelligence accelerator processor.
- an N ⁇ M image may be divided across a plurality of processor subunits.
- Each processor subunit may perform a convolution with an A ⁇ B filter on its corresponding tile.
- the code generated for each processor subunit configures the subunit to calculate the convolutions and pull from one of the second plurality of buses whenever data is needed from an adjacent subunit.
- Corresponding commands to output data to the second plurality of buses are provided to the subunits to ensure proper timing of needed data transfers.
- the partial tile connection of FIG. 7A may be modified to be an N-partial tile connection.
- the second plurality of buses may further connect each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits) in the four directions along which the buses of FIG. 7A run (i.e., up, down, left, and right).
- a similar modification may be made to the full-tile connection (to result in an N-full tile connection) such that the second plurality of buses further connects each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits) in the four directions along which the buses of FIG. 7A run in additional to the two diagonal directions.
- bus 750 a connects processor subunit 730 a to processor subunit 730 d
- bus 750 b connects processor subunit 730 a to processor subunit 730 b
- bus 750 c connects processor subunit 730 b to processor subunit 730 c
- bus 750 d connects processor subunit 730 c to processor subunit 730 d.
- the plurality of processor subunits is arranged in a star pattern.
- the second plurality of buses connect each processor subunit to at least one adjacent processor subunit within the star pattern.
- a neighbor connection arrangement may be used such that the plurality of processor subunits is arranged in one or more lines (e.g., similar to that depicted in FIG. 7A ).
- the second plurality of buses connect each processor subunit to a processor subunit to the left in the same line, to a processor subunit to the right in the same line, to the processor subunits both to the left and to the right in the same line, etc.
- an N-linear connection arrangement may be used.
- the second plurality of buses connect each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits).
- the N-linear connection arrangement may be used with the line array (described above), the rectangular array (depicted in FIG. 7A ), the elliptical array (depicted in FIG. 7B ), or any other geometrical array.
- an N-log connection arrangement may be used.
- the second plurality of buses connect each processor subunit to processor subunits within a threshold power of two distance of the processor subunit (e.g., within 2 n processor subunits).
- the N-log connection arrangement may be used with the line array (described above), the rectangular array (depicted in FIG. 7A ), the elliptical array (depicted in FIG. 7B ), or any other geometrical array.
- connection schemes described above may be combined for use in the same hardware chip.
- a full tile connection may be used in one region while a partial tile connection is used in another region.
- an N-linear connection arrangement may be used in one region while an N-full tile connection is used in another region.
- one or more shared buses may be used to interconnect all (or a subset of) the processor subunits of a distributed processor. Collisions on the shared buses may still be avoided by timing data transfers on the shared buses using code executed by the processor subunits, as explained further below.
- configurable buses may be used to dynamically connect processor subunits to form groups of processors units connected to separated buses.
- the configurable buses may include transistors or other mechanisms that may be controlled by processor subunit to direct data transfers to a selected processor subunit.
- the plurality of processor subunits of the processing array is spatially distributed among the plurality of discrete memory banks of the memory array.
- the plurality of processor subunits may be clustered in one or more regions of the substrate, and the plurality of memory banks may be clustered in one or more other regions of the substrate.
- a combination of spatial distribution and clustering may be used (not shown).
- one region of the substrate may include a cluster of processor subunits
- another region of the substrate may include a cluster of memory banks
- yet another region of the substrate may include processing arrays distributed amongst memory banks.
- arraying processor groups 600 on a substrate is not an exclusive embodiment.
- each processor subunit may be associated with at least two dedicated memory banks.
- processing groups 310 a, 310 b, 310 c, and 310 d of FIG. 3B may be used in lieu of or in combination with processing group 600 to form the processing array and the memory array.
- Other processing groups including, for example, three, four, or more dedicated memory banks (not shown) may be used.
- Each of the plurality of processor subunits may be configured to execute software code associated with a particular application independently, relative to other processor subunits included in the plurality of processor subunits. For example, as explained below, a plurality of sub-series of instructions may be grouped as machine code and provided to each processor subunit for execution.
- each dedicated memory bank comprises at least one dynamic random access memory (DRAM).
- the memory banks may comprise a mix of memory types, such as static random access memory (SRAM), DRAM, Flash or the like.
- shared memory In conventional processors, data sharing between processor subunits is usually performed with shared memory. Shared memory typically requires a large portion of chip area and/or performed a bus that is managed by additional hardware (such as arbiters). The bus results in bottlenecks, as described above.
- the shared memory which may be external to the chip, typically includes cache coherency mechanisms and more complex caches (e.g., L1 cache, L2 cache, and shared DRAM) in order to provide accurate and up-to-date data to the processor subunits.
- the dedicated buses depicted in FIGS. 7A and 7B allow for hardware chips that are free of hardware management (such as arbiters).
- the use of dedicated memories as depicted in FIGS. 7A and 7B allow for the elimination of complex caching layers and coherency mechanism.
- buses are provided whose timing is performed dynamically using code individually executed by each processor subunit. This allows for elimination of most, if not all, bus management hardware as conventionally used. Moreover, complex caching mechanisms are replaced with direct transfers over these buses, resulting in lower latency times during memory reads and writes.
- a memory chip of the present disclosure may operate independently.
- memory chips of the present disclosure may be operably connected with one or more additional integrated circuits, such as a memory device (e.g., one or more DRAM banks), a system-on-a-chip, a field-programmable gate array (FPGA), or other processing and/or memory chip.
- additional integrated circuits such as a memory device (e.g., one or more DRAM banks), a system-on-a-chip, a field-programmable gate array (FPGA), or other processing and/or memory chip.
- tasks in a series of instructions executed by the architecture may be divided (e.g., by a compiler, as described below) between processor subunits of the memory chip and any processor subunits of the additional integrated circuit(s).
- the other integrated circuits may comprise a host (e.g., host 350 of FIG. 3A ) that inputs instructions and/or data to the memory chip and receives output therefrom.
- the memory chip may include a memory interface, such as a memory interface complying with a Joint Electron Device Engineering Council (JEDEC) standard or any of its variants.
- JEDEC Joint Electron Device Engineering Council
- the one or more additional integrated circuits may then connect to the memory interface. Accordingly, if the one or more additional integrated circuits are connected to a plurality of memory chips of the present disclosure, data may be shared between the memory chips through the one or more additional integrated circuits.
- the one or more additional integrated circuits may include buses to connect to buses on the memory chips of the present disclosure such that the one or more additional integrated circuits may execute code in tandem with the memory chips of the present disclosure. In such embodiments, the one or more additional integrated circuits further assist with distributed processing even though they may be on different substrates than the memory chips of the present disclosure.
- memory chips of the present disclosure may be arrayed in order to form an array of distributed processors.
- one or more buses may connect a memory chip 770 a to an additional memory chip 770 b, as depicted in FIG. 7C .
- memory chip 770 a includes processor subunits with one or more corresponding memory banks dedicated to each processor subunit, e.g.: Processor subunit 730 a is associated with memory bank 720 a, processor subunit 730 b is associated with memory bank 720 b, processor subunit 730 e is associated with memory bank 720 c, and processor subunit 730 f is associated with memory bank 720 d. Buses connect each processor subunit to its corresponding memory bank.
- bus 740 a connects processor subunit 730 a to memory bank 720 a
- bus 740 b connects processor subunit 730 b to memory bank 720 b
- bus 740 c connects processor subunit 730 e to memory bank 720 c
- bus 740 d connects processor subunit 730 f to memory bank 720 d
- bus 750 a connects processor subunit 730 a to processor subunit 750 e
- bus 750 b connects processor subunit 730 a to processor subunit 750 b
- bus 750 c connects processor subunit 730 b to processor subunit 750 f
- bus 750 d connects processor subunit 730 e to processor subunit 750 f.
- Other arrangements of memory chip 770 a may be used, for example, as described above.
- memory chip 770 b includes processor subunits with one or more corresponding memory banks dedicated to each processor subunit, e.g.: Processor subunit 730 c is associated with memory bank 720 e, processor subunit 730 d is associated with memory bank 720 f, processor subunit 730 g is associated with memory bank 720 g, and processor subunit 730 h is associated with memory bank 720 h. Buses connect each processor subunit to its corresponding memory bank.
- bus 740 e connects processor subunit 730 c to memory bank 720 e
- bus 740 f connects processor subunit 730 d to memory bank 720 f
- bus 740 g connects processor subunit 730 g to memory bank 720 g
- bus 740 h connects processor subunit 730 h to memory bank 720 h.
- bus 750 g connects processor subunit 730 c to processor subunit 750 g
- bus 750 h connects processor subunit 730 d to processor subunit 750 h
- bus 750 i connects processor subunit 730 c to processor subunit 750 d
- bus 750 j connects processor subunit 730 g to processor subunit 750 h.
- Other arrangements of memory chip 770 b may be used, for example, as described above.
- bus 750 e may connect processor subunit 730 b of memory chip 770 a and processor subunit 730 c of memory chip 770 b
- bus 750 f may connect processor subunit 730 f of memory chip 770 a and processor subunit 730 c of memory 770 b
- bus 750 e may serve as an input bus to memory chip 770 b (and thus an output bus for memory chip 770 a )
- bus 750 f may serve as an input bus to memory chip 770 a (and thus an output bus for memory chip 770 b ) or vice versa.
- buses 750 e and 750 f may both server as two-way buses between memory chips 770 a and 770 b.
- Buses 750 e and 750 f may include direct wires or may be interleaved on a high-speed connection in order to reduce the pins used for the inter-chip interface between memory chip 770 a and integrated circuit 770 b.
- any of the connection arrangements described above used in the memory chip itself may be used to connect the memory chip to one or more additional integrated circuits.
- memory chip 770 a and 770 b may be connected using a full-tile or partial-tile connection rather than only two buses as shown in FIG. 7C .
- architecture 760 may include fewer buses or additional buses.
- a single bus between processor subunits 730 b and 730 c or between processor subunits 730 f and 730 c may be used.
- additional buses e.g., between processor subunits 730 b and 730 d, between processor subunits 730 f and 730 d, or the like, may be used.
- memory chips 770 a, 770 b, 770 c, and 770 d are connected in an array.
- Each memory chip includes processor subunits and dedicated memory banks similar to the memory chips described above. Accordingly, a description of these components is not repeated here.
- memory chips 770 a, 770 b, 770 c, and 770 d are connected in a loop. Accordingly, bus 750 a connects memory chips 770 a and 770 d, bus 750 c connects memory chips 770 a and 770 b, bus 750 e connects memory chips 770 b and 770 c, and bus 750 g connects memory chips 770 c and 770 d. Although memory chips 770 a, 770 b, 770 c, and 770 d may be connected with full-tile connections, partial-tile connections, or other connection arrangements, the example of FIG. 7C allows for fewer pin connections between memory chips 770 a, 770 b, 770 c, and 770 d.
- Embodiments of the present disclosure may use dedicated memories of relatively large size as compared with shared memories of conventional processors.
- the use of dedicated memories rather than shared memories allows for gains in efficiency to continue without tapering off with memory increases. This allows for memory-intensive tasks such as neural network processing and database queries to be performed more efficiently than in conventional processors, where the efficiency gains of increasing shared memory taper off due to the von Neumann bottleneck.
- a memory array disposed on the substrate of the distributed processor may include a plurality of discrete memory banks.
- Each of the discrete memory banks may have a capacity greater than one megabyte, as well as a processing array disposed on the substrate, including a plurality of processor subunits.
- each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- the plurality of processor subunits may be spatially distributed among the plurality of discrete memory banks within the memory array.
- the distributed processors of the present disclosure gain efficiencies that are not possible in conventional systems due to the von Neumann bottleneck in CPUs and GPUs.
- each dedicated memory bank may comprise at least one DRAM bank.
- each dedicated memory bank may comprise at least one static random access memory bank.
- different types of memories may be combined on a single hardware chip.
- each dedicated memory may be at least one megabyte. Accordingly, each dedicated memory bank may be the same size or at least two of the plurality of memory banks may have different sizes.
- the distributed processor may include a first plurality of buses, each connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank and a second plurality of buses, each connecting one of the plurality of processor subunits to another one of the plurality of processor subunits.
- hardware chips of the present disclosure may manage data transfers using software rather than hardware.
- hardware chips of the present disclosure may execute code to prevent collisions on the buses. Accordingly, hardware chips of the present disclosure may avoid hardware mechanisms conventionally used to manage data transfers (such as network controllers within in a chip, packet parsers and packets transferors between processor subunits, bus arbitrators, a plurality of buses to avoid arbitration, or the like).
- embodiments of the present disclosure may use a bus that is only a wire, an optical cable, or the like between processor subunits, where the processor subunits individually execute code to avoid collision on the buses. Accordingly, embodiments of the present disclosure may preserve space on the substrate as well as materials cost and efficiency losses (e.g., due to power and time consumption by arbitration). The efficiency and space gains are even greater when compared to other architectures using first-in-first-out (FIFO) controllers and/or mailboxes.
- FIFO first-in-first-out
- each processor subunit may include one or more accelerators in addition to one or more processing elements.
- the accelerator(s) may read and write from the buses rather than the processing element(s).
- additional efficiency may be obtained by allowing the accelerator(s) to transmit data during the same cycle in which the processing element(s) perform one or more calculations.
- Such embodiments require additional materials for the accelerator(s). For example, additional transistors may be required for fabrication of the accelerator(s).
- the code also may account for the internal behavior, including timing and latencies, of the processor subunits (e.g., including the processing elements and/or accelerators forming part of the processor subunit).
- a compiler as described below may perform pre-processing that accounts for the timing and latencies when generating the sub-series of instructions that control the data transfers.
- a plurality of processor subunits may be assigned a task of calculating a neural network layer containing a plurality of neurons fully-connected to a previous layer of a larger plurality of neurons. Assuming data of the previous layer is evenly spread between the plurality of processor subunits, one way to perform the calculation may be to configure each processor subunit to transmit the data of the previous layer to the main bus in turn and then each processor subunit will multiply this data by the weight of the corresponding neuron that the subunit implements. Because each processor subunit calculates more than one neuron, each processor subunit will transmit the data of the previous layer a number of times equal to the number of neurons. Thus, the code of each processor subunit is not the same as the code for other processor subunits because the subunits will transmit at different times.
- a distributed processor may comprise a substrate (e.g., a semiconductor substrate, such as silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks, and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in FIGS. 7A and 7B .
- each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits.
- the plurality of buses may be controlled in software. Accordingly, the plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by timing hardware logic components. In one example, the plurality of buses may be free of bus arbiters such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by bus arbiters.
- the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank. Similar to the plurality of buses described above, the second plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by timing hardware logic components. In one example, the second plurality of buses may be free of bus arbiters such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by bus arbiters.
- the phrase “free of” does not necessarily imply the absolute absence of components, such as timing hardware logic components (e.g., bus arbiters, arbitration trees, FIFO controllers, mailboxes, or the like). Such components may still be included in a hardware chip described as “free of” those components. Instead, the phrase “free of” refers to the function of the hardware chip; that is, a hardware chip “free of” timing hardware logic components controls the timing of its data transfers without use of the timing hardware logic components, if any, included therein. For example, a hardware chip that executes code including sub-series of instructions that control data transfers between processor subunits of the hardware chip, even if the hardware chip includes timing hardware logic components as a secondary precaution to protect against collisions due to errors in the executed code.
- timing hardware logic components e.g., bus arbiters, arbitration trees, FIFO controllers, mailboxes, or the like.
- Such components may still be included in a hardware chip described as “free of” those components.
- the phrase “free of” refer
- the plurality of buses may comprise at least one of wires or optical fibers between corresponding ones of the plurality of processor subunits.
- a distributed processor free of timing hardware logic components may include only wires or optical fibers without bus arbiters, arbitration trees, FIFO controllers, mailboxes, or the like.
- the plurality of processor subunits is configured to transfer data across at least one of the plurality of buses in accordance with code executed by the plurality of processor subunits.
- a compiler may organize sub-series of instructions, each sub-series comprising code executed by a single processor subunit.
- the sub-series instructions may instruct the processor subunit when to transfer data onto one of the buses and when to retrieve data from the buses.
- the timing of transfers between the processor subunits may be governed by the instructions to transfer and retrieve included in the sub-series.
- the code dictates timing of data transfers across at least one of the plurality of buses.
- the compiler may generate code to be executed by a single processor subunit.
- the compiler may generate code to be executed by groups of processor subunits.
- the compiler may treat all the processor subunits together as if they were one super-processor (e.g., a distributed processor), and the compiler may generate code for execution by that defined super-processor/distributed processor.
- the plurality of processor subunits may be spatially distributed among the plurality of discrete memory banks within the memory array.
- the plurality of processor subunits may be clustered in one or more regions of the substrate, and the plurality of memory banks may be clustered in one or more other regions of the substrate.
- a combination of spatial distribution and clustering may be used, as explained above.
- a distributed processor may comprise a substrate (e.g., a semiconductor substrate, including silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks.
- a processing array may also be disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in FIGS. 7A and 7B .
- each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated one of the plurality of discrete memory banks.
- the plurality of buses may be controlled in software. Accordingly, the plurality of buses may be free of timing hardware logic components such that data transfers between a processor subunit and a corresponding, dedicated one of the plurality of discrete memory banks and across a corresponding one of the plurality of buses are not controlled by timing hardware logic components. In one example, the plurality of buses may be free of bus arbiters such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by bus arbiters.
- the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits Similar to the plurality of buses described above, the second plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by timing hardware logic components. In one example, the second plurality of buses may be free of bus arbiters such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by bus arbiters.
- the distributed processor may use a combination of software timing with hardware timing components.
- a distributed processor may comprise a substrate (e.g., a semiconductor substrate, including silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks.
- a processing array may also be disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in FIGS. 7A and 7B .
- each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- FIGS. 7A and 7B As depicted, e.g., in FIGS.
- the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits.
- the plurality of processor subunits may be configured to execute software that controls timing of data transfers across the plurality of buses to avoid colliding data transfers on at least one of the plurality of buses.
- the software may control the timing of the data transfers, but the transfers themselves may be controlled, at least in part, by one or more hardware components.
- the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank Similar to the plurality of buses described above, the plurality of processor subunits may be configured to execute software that controls timing of data transfers across the second plurality of buses to avoid colliding data transfers on at least one of the second plurality of buses.
- the software may control the timing of the data transfers, but the transfers themselves may be controlled, at least in part, by one or more hardware components.
- hardware chips of the present disclosure may execute code in parallel across processor subunits included on a substrate forming the hardware chip. Additionally, hardware chips of the present disclosure may perform multitasking. For example, hardware chips of the present disclosure may perform area multitasking, in which one group of processor subunits of the hardware chip execute one task (e.g., audio processing) while another group of processor subunits of the hardware chip execute another task (e.g., image processing). In another example, hardware chips of the present disclosure may perform timing multitasking, in which one or more processor subunits of the hardware chip execute one task during a first period of time and another task during a second period of time.
- one task e.g., audio processing
- another task e.g., image processing
- timing multitasking in which one or more processor subunits of the hardware chip execute one task during a first period of time and another task during a second period of time.
- a combination of area and timing multitasking may also be used such that one task may be assigned to a first group of processor subunits during a first period of time while another task may be assigned to a second group of processor subunits during the first period of time, after which a third task may be assigned to processor subunits included in the first group and the second group during a second period of time.
- a processor on a memory chip may comprise a substrate and a plurality of processor subunits disposed on the substrate.
- the memory chip may further comprise a corresponding plurality of memory banks disposed on the substrate, each one of the plurality processor subunits being connected to at least one dedicated memory bank not shared by any other processor subunit of the plurality of processor subunits.
- Each processor subunit on the memory chip may be configured to execute a series of instructions independent from other processor subunits.
- Each series of instructions may be executed by configuring one or more general processing elements of the processor subunit in accordance with code defining the series of instructions and/or by activating one or more special processing elements (e.g., one or more accelerators) of the processor subunit in accordance with a sequence provided in the code defining the series of instructions.
- special processing elements e.g., one or more accelerators
- each series of instructions may define a series of tasks to be performed by a single processor subunit.
- a single task may comprise an instruction within an instruction set defined by the architecture of one or more processing elements in the processor subunit.
- the processor subunit may include particular registers, and a single task may push data onto a register, pull data from a register, perform an arithmetic function on data within a register, perform a logic operation on data within a register, or the like.
- the processor subunit may be configured for any number of operands, such as a 0-operand processor subunit (also called a “stack machine”), a 1-operand processor subunit (also called an accumulator machine), a 2-operand processor subunit (such as a RISC), a 3-operand processor subunit (such as a complex instruction set computer (CISC)), or the like.
- the processor subunit may include one or more accelerators, and a single task may activate an accelerator to perform a specific function, such as a MAC function, a MAX function, a MAX-0 function, or the like.
- the series of instructions may further include tasks for reading and writing from the dedicated memory banks of the memory chip.
- a task may include writing a piece of data to a memory bank dedicated to the processor subunit executing the task, reading a piece of data from a memory bank dedicated to the processor subunit executing the task, or the like.
- the reading and writing may be performed by the processor subunit in tandem with a controller of the memory bank.
- the processor subunit may execute a read or write task by sending a control signal to the controller to perform the read or write.
- the control signal may include a particular address to use for reads and writes.
- the processor subunit may defer to the memory controller to select an available address for the reads and writes.
- the reading and writing may be performed by one or more accelerators in tandem with a controller of the memory bank.
- the accelerators may generate the control signals for the memory controller, similar to how the processor subunit generates control signals, as described above.
- an address generator may also be used to direct the reads and writes to specific addresses of a memory bank.
- the address generator may comprise a processing element configured to generate memory addresses for reads and writes.
- the address generator may be configured to generate addresses in order to increase efficiency, e.g., by writing results of a later calculation to the same address as the results of a former calculation that are no longer needed.
- the address generator may generate the controls signals for the memory controller, either in response to a command from the processor subunit (e.g., from a processing element included therein or from one or more accelerator(s) therein) or in tandem with the processor subunit.
- the address generator may generate the addresses based on some configuration or registers for example generating a nested loop structure to iterate on certain addresses in the memory at a certain pattern.
- each series of instructions may comprise a set of machine code defining a corresponding series of tasks. Accordingly, the series of tasks described above may be encapsulated within machine code comprising the series of instructions.
- the series of tasks may be defined by a compiler configured to distribute a higher-level series of tasks amongst the plurality of logic circuits as a plurality of series of tasks. For example, the compiler may generate the plurality of series of tasks based on the higher-level series of tasks such that the processor subunits, executing each corresponding series of tasks in tandem, perform the same function as outlined by the higher-level series of tasks.
- the higher-level series of tasks may comprise a set of instructions in a human-readable programming language.
- the series of tasks for each processor subunit may comprise lower-level series of tasks, each of which comprises a set of instructions in a machine code.
- the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to at least one other of the plurality of processor subunits.
- data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across at least one of the plurality of buses may be predefined by the series of instructions included in a processor subunit connected to the at least one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses.
- Such tasks may be executed by a processing element of the processor subunit or by one or more accelerators included in the processor subunit.
- the processor subunit may perform a calculation or send a control signal to a corresponding memory bank in the same cycle during which accelerator(s) pull data from or place data on one of the buses.
- the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a sending task that comprises a command for the processor subunit connected to the at least one of the plurality of buses to write data to the at least one of the plurality of buses. Additionally or alternatively, the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a receiving task that comprises a command for the processor subunit connected to the at least one of the plurality of buses to read data from the at least one of the plurality of buses.
- a distributed processor on a memory chip may comprise a plurality of processor subunits disposed on the memory chip and a plurality of memory banks disposed on the memory chip.
- Each one of the plurality of memory banks may be configured to store data independent from data stored in other ones of the plurality of memory banks, and each one of the plurality of processor subunits may be connected to at least one dedicated memory bank from among the plurality of memory banks.
- each processor subunit may have access to one or more memory controllers of one or more corresponding memory banks dedicated to the processor subunit, and no other processor subunit may have access to these corresponding one or more memory controllers.
- the data stored in each memory bank may be unique to the dedicated processor subunit.
- the data stored in each memory bank may be independent of the memory stored in other memory banks because no memory controllers may be shared between memory banks
- the data stored in each of the plurality of memory banks may be defined by a compiler configured to distribute data amongst the plurality of memory banks.
- the compiler may be configured to distribute data defined in a higher-level series of tasks amongst the plurality of memory banks using a plurality of lower-level tasks distributed amongst corresponding processor subunits.
- the higher-level series of tasks may comprise a set of instructions in a human-readable programming language.
- the series of tasks for each processor subunit may comprise lower-level series of tasks, each of which comprises a set of instructions in a machine code.
- the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks Moreover, as explained above, data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across a particular one of the plurality of buses may be controlled by a corresponding processor subunit connected to the particular one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses. As explained above, such tasks may be executed by (i) a processing element of the processor subunit or (ii) one or more accelerators included in the processor subunit. In the latter embodiment, the processor subunit may perform a calculation or use buses connecting the processor subunit to other processor subunits in the same cycle during which accelerator(s) pull data from or place data on one of the buses connected to the one or more corresponding, dedicated memory banks.
- the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a sending task.
- the sending task may comprise a command for the processor subunit connected to the at least one of the plurality of buses to write data to the at least one of the plurality of buses for storage in the one or more corresponding, dedicated memory banks.
- the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a receiving task.
- the receiving task may comprise a command for the processor subunit connected to the at least one of the plurality of buses to read data from the at least one of the plurality of buses for storage in the one or more corresponding, dedicated memory banks.
- the sending and receiving tasks in such embodiments may comprise control signals that are sent, along the at least one of the plurality of buses, to one or more memory controllers of the one or more corresponding, dedicated memory banks.
- the sending and receiving tasks may be executed by one portion of the processing subunit (e.g., by one or more accelerators thereof) concurrently with a calculation or other task executed by another portion of the processing subunit (e.g., by one or more different accelerators thereof).
- An example of such a concurrent execution may include a MAC-relay command, in which receiving, multiplying, and sending are executed in tandem.
- a distributed processor on a memory chip may comprise a plurality of processor subunits disposed on the memory chip and a plurality of memory banks disposed on the memory chip.
- Each one of the plurality of processor subunits may be connected to at least one dedicated memory bank from among the plurality of memory banks, and each memory bank of the plurality of memory banks may be configured to store data independent from data stored in other ones of the plurality of memory banks.
- at least some of the data stored in one particular memory bank from among the plurality of memory banks may comprise a duplicate of data stored in at least another one of the plurality of memory banks.
- a number, string, or other type of data used in the series of instructions may be stored in a plurality of memory banks dedicated to different processor subunits rather than being transferred from one memory bank to other processor subunits in the memory chip.
- parallel string matching may use data duplication described above. For example, a plurality of strings may be compared to the same string. A conventional processor would compare each string in the plurality to the same string in sequence. On a hardware chip of the present disclosure, the same string may be duplicated across the memory banks such that the processor subunits may compare a separate string in the plurality to the duplicated string in parallel.
- the at least some data duplicated across the one particular memory bank from among the plurality of memory banks and the at least another one of the plurality of memory banks is defined by a compiler configured to duplicate data across memory banks.
- the compiler may be configured to duplicate the at least some data using a plurality of lower-level tasks distributed amongst corresponding processor subunits.
- Duplication of data may be useful for certain tasks that re-use the same portions of data across different calculations.
- the different calculations may be distributed amongst processor subunits of the memory chip for parallel execution while each processor subunit may store the portions of data in, and access the stored portions from, a dedicated memory bank (rather than pushing and pulling the portions of data across buses connecting the processor subunits).
- the at least some data duplicated across the one particular memory bank from among the plurality of memory banks and the at least another one of the plurality of memory banks may comprise weights of a neural network.
- each node in the neural network may be defined by at least one processor subunit from among the plurality of processor subunits.
- each node may comprise machine code executed by the at least one processor subunit defining the node.
- duplication of the weights may allow each processor subunit to execute machine code to effect, at least in part, a corresponding node while only accessing one or more dedicated memory banks (rather than performing data transfers with other processor subunits). Because the timing of reads and writes to the dedicated memory bank(s) are independent of other processor subunits while the timing of data transfers between processor subunits requires timing synchronization (e.g., using software, as explained above), duplication of memory to avoid data transfers between processor subunits may produce further efficiencies in overall execution.
- the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks Moreover, as explained above, data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across a particular one of the plurality of buses may be controlled by a corresponding processor subunit connected to the particular one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses. As explained above, such tasks may be executed by (i) a processing element of the processor subunit or (ii) one or more accelerators included in the processor subunit. As further explained above, such tasks may include a sending task and/or a receiving tasks that comprise control signals that are sent, along the at least one of the plurality of buses, to one or more memory controllers of the one or more corresponding, dedicated memory banks.
- FIG. 8 depicts a flowchart of a method 800 for compiling a series of instructions for execution on an exemplary memory chip of the present disclosure, e.g., as depicted in FIGS. 7A and 7B .
- Method 800 may be implemented by any conventional processor, whether generic or special-purpose.
- Method 800 may be executed as a portion of a computer program forming a compiler.
- a “compiler” refers to any computer program that converts a higher-level language (e.g., a procedural language, such as C, FORTRAN, BASIC, or the like; an object-oriented language, such as Java, C++, Pascal, Python, or the like; etc.) to a lower-level language (e.g., assembly code, object code, machine code, or the like).
- the compiler may allow a human to program a series of instructions in a human-readable language, which is then converted to a machine-executable language.
- the processor may assign tasks associated with the series of instructions to different ones of the processor subunits.
- the series of instructions may be divided into subgroups, the subgroups to be executed in parallel across the processor subunits.
- a neural network may be divided into its nodes, and one or more nodes may be assigned to separate processor subunits.
- each subgroup may comprise a plurality of nodes connected across different layers.
- a processor subunit may implement a node from a first layer of the neural network, a node from a second layer connected to the node from the first layer implemented by the same processor subunit, and the like.
- the processor subunits may be spatially distributed among the plurality of memory banks disposed on the memory chip. Accordingly, the assignment of tasks may be, at least in part, a spatial divisional as well as a logical division.
- the processor may generate tasks to transfer data between pairs of the processor subunits of the memory chip, each pair of processor subunits being connected by a bus.
- the data transfers may be controlled using software.
- processor subunits may be configured to push and pull data on buses at synchronized times.
- the generated tasks may thus include tasks for performing this synchronized pushing and pulling of data.
- step 820 may include pre-processing to account for the internal behavior, including timing and latencies, of the processor subunits.
- the processor may use known times and latencies of the processor subunits (e.g., the time to push data to a bus, the time to pull data from a bus, the latency between a calculation and a push or pull, or the like) to ensure that the generated tasks synchronize. Therefore, the data transfers comprising at least one push by one or more processor subunits and at least one pull by one or more processor subunits may occur simultaneously rather than incurring a delay due to timing differences between the processor subunits, latencies of the processor subunits, or the like.
- the processor may group the assigned and generated tasks into the plurality of groups of sub-series instructions.
- the sub-series instructions may each comprise a series of tasks for execution by a single processor subunit. Therefore, each of the plurality of groups of sub-series instructions may correspond to a different one of the plurality of processor sub-units. Accordingly, steps 810 , 820 , and 830 may result in dividing the series of instructions into a plurality of groups of sub-series instructions. As explained above, step 820 may ensure that any data transfers between the different groups are synchronized.
- the processor may generate machine code corresponding to each of the plurality of groups of subs-series instructions.
- the higher-level code representing sub-series instructions may be converted to lower-level code, such as machine code, executable by corresponding processor subunits.
- the processor may assign the generated machine code corresponding to each of the plurality of groups of subs-series instructions to a corresponding one of the plurality of processor subunits in accordance with the division. For example, the processor may label each sub-series instructions with an identifier of the corresponding processor subunit. Thus, when the sub-series instructions are uploaded to a memory chip for execution (e.g., by host 350 of FIG. 3A ), each sub-series may configure a correct processor subunit.
- assigning tasks associated with the series of instructions to the different ones of the processor subunits may depend, at least in part, on a spatial proximity between two or more of the processor subunits on the memory chip. For example, as explained above, efficiency may be increased by lessening the number of data transfers between processor subunits. Accordingly, the processor may minimize data transfers that move data across more than two of processor subunits. Therefore, the processor may use a known layout of the memory chip in combination with one or more optimization algorithms (such as a greedy algorithm) in order to assign sub-series to processor subunits in a way that maximizes (at least locally) adjacent transfers and minimizes (at least locally) transfers to non-neighboring processor subunits.
- optimization algorithms such as a greedy algorithm
- Method 800 may include further optimizations for the memory chips of the present disclosure.
- the processor may group data associated with the series of instructions based on the division and assign the data to the memory banks in accordance with the grouping.
- the memory banks may hold data used for the sub-series instructions assigned to each processor subunit to which each memory bank is dedicated.
- grouping the data may include determining at least a portion of the data to duplicate in two or more of the memory banks. For example, as explained above, some data may be used across more than one sub-series instructions. Such data may be duplicated across the memory banks dedicated to the plurality of processor subunits to which the different sub-series instructions are assigned. This optimization may further reduce data transfers across processor subunits.
- the output of method 800 may be input to a memory chip of the present disclosure for execution.
- a memory chip may comprise a plurality of processor subunits and a corresponding plurality of memory banks, each processor subunit being connected to at least one memory bank dedicated to the processor subunit, and the processor subunits of the memory chip may be configured to execute the machine code generated by method 800 .
- host 350 may input the machine code generated by method 800 to the processor subunits for execution.
- controllers are provided at the bank level.
- Each bank includes a plurality of mats, which are typically arranged in a rectangular manner but may be arranged in any geometrical shape.
- Each mat includes a plurality of memory cells, which are also typically arranged in a rectangular manner but may be arranged in any geometrical shape.
- Each cell may store a single bit of data (e.g., depending on whether the cell is retained at a high voltage or a low voltage).
- FIGS. 9 and 10 An example of this conventional architecture is depicted in FIGS. 9 and 10 .
- a plurality of mats e.g., mats 930 - 1 , 930 - 2 , 940 - 1 , and 940 - 2
- bank 900 may be controlled across global wordlines (e.g., wordline 950 ) and global bitlines (e.g., bitline 960 ).
- row decoder 910 may select the correct wordline based on an incoming control signal (e.g., a request for a read from an address, a request for a write to an address, or the like) and global sense amplifier 920 (and/or a global column decoder, not shown in FIG. 9 ) may select the correct bitline based on the control signal.
- Amplifier 920 may also amplify any voltage levels from a selected bank during a read operation.
- a bank may additionally or alternatively use a column decoder for initial selecting and perform amplification along rows.
- FIG. 10 depicts an example of a mat 1000 .
- mat 1000 may form a portion of a memory bank, such as bank 900 of FIG. 9 .
- a plurality of cells e.g., cells 1030 - 1 , 1030 - 2 , and 1030 - 3
- Each cell may comprise a capacitor, a transistor, or other circuitry that stores at least one bit of data.
- a cell may comprise a capacitor that is charged to represent a ‘1’ and discharged to represent a ‘0’ or may comprise a flip-flop having a first state representing a ‘1’ and a second state representing a ‘0.’
- a conventional mat may comprise, for example, 512 bits by 512 bits.
- a cell may comprise a transistor, resistor, capacitor or other mechanism for isolating an ion or portion of a material that stores at least one bit of data.
- a cell may comprise an electrolyte ion, a portion of chalcogenide glass, or the like, having a first state representing a ‘1’ and a second state representing a ‘0.’
- mat 1000 may be controlled across local wordlines (e.g., wordline 1040 ) and local bitlines (e.g., bitline 1050 ).
- wordline drivers e.g., wordline driver 1020 - 1 , 1020 - 2 , . . . , 1020 - x
- wordline driver 1020 - 1 , 1020 - 2 , . . . , 1020 - x may control the selected wordline to perform a read, write, or refresh based on a control signal from a controller associated with the memory bank of which mat 1000 forms a part (e.g., a request for a read from an address, a request for a write to an address, a refresh signal).
- local sense amplifiers e.g., local amplifiers 1010 - 1 , 1010 - 2 , . . . , 1010 - x
- local column decoders may control the selected bitline to perform a read, write, or refresh.
- the local sense amplifiers may also amplify any voltage levels from a selected cell during a read operation.
- a mat may instead use a bitline driver for initial selecting and perform amplification along rows.
- Memory banks may be grouped to form a memory chip.
- a memory chip may comprise eight to thirty-two memory banks. Accordingly, pairing processor subunits with memory banks on a conventional memory chip may result in only eight to thirty-two processor subunits. Accordingly, embodiments of the present disclosure may include memory chips with additional sub-bank hierarchy. These memory chips of the present disclosure may then include processor subunits with memory sub-banks used as the dedicated memory banks paired with the processor subunits allowing for a larger number of sub processors, which may then achieve higher parallelism and performance of in-memory computing.
- the global row decoder and global sense amplifier of bank 900 may be replaced with sub-bank controllers. Accordingly, rather than sending control signals to a global row decoder and a global sense amplifier of the memory bank, a controller of the memory bank may direct the control signal to the appropriate sub-bank controller. The direction may be controlled dynamically or may be hard-wired (e.g., via one or more logic gates).
- fuses may be used to indicate the controller of each sub bank or mat whether to block or pass the control signal to the appropriate sub-bank or mat. In such embodiments, faulty sub-banks may thus be deactivated using the fuses.
- a memory chip may include a plurality of memory banks, each memory bank having a bank controller and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank.
- Each sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells and may have internally local row decoders, column decoders, and/or local sense amplifiers.
- the sub-bank row decoders and the sub-bank column decoders may process read and write requests from the bank controller or from a sub-bank processor subunit used for in memory computations on the sub-bank memory, as described below.
- each memory sub-bank may further have a controller configured to determine whether to process read requests and write requests from the bank controller and/or to forward them to the next level (e.g., of row and column decoders on a mat) or to block the requests, e.g., to allow an internal processing element or processor subunit to access the memory.
- the bank controller may be synchronized to a system clock.
- the sub-bank controllers may be not synchronized to the system clock.
- each sub-bank may further have a processor subunit using the sub-bank as a dedicated memory.
- the processor subunit may comprise a RISC, a CISC, or other general-purpose processing subunit and/or may comprise one or more accelerators.
- the processor subunit may include an address generator, as explained above.
- each processor subunit may be configured to access a sub-bank dedicated to the processor subunit using the row decoder and the column decoder of the sub-bank without using the bank controller.
- the processor sub-unit associated with the sub-bank may also handle the memory mats (including the decoder and memory redundancy mechanisms, described below) and/or determine whether a read or write request from an upper level (e.g., the bank level or the memory level) is forwarded and handled accordingly.
- an upper level e.g., the bank level or the memory level
- the sub-bank controller may further include a register that stores a state of the sub-bank. Accordingly, the sub-bank controller may return an error if the sub-bank controller receives a control signal from the memory controller while the register indicates that the sub-bank is in use.
- the register may indicate an error if the processor subunit in the sub-bank is accessing the memory in conflict with an external request from the memory controller.
- FIG. 11 shows an example of another embodiment of a memory bank using sub-bank controllers.
- bank 1100 has a row decoder 1110 , a column decoder 1120 , and a plurality of memory sub-banks (e.g., sub-banks 1170 a, 1170 b, and 1170 c ) with sub-bank controllers (e.g., controllers 1130 a, 1130 b, and 1130 c ).
- the sub-bank controllers may include address resolvers (e.g., resolvers 1140 a, 1140 b, and 1140 c ), which may determine whether to pass a request to one or more sub-banks controlled by the sub-bank controller.
- the sub-bank controllers may further include one or more logic circuits (e.g., logic 1150 a, 1150 b, and 1150 c ).
- a logic circuit comprising one or more processing elements may allow for one or more operations, such as refreshing of cells in the sub-bank, clearing of cells in the sub-bank, or the like, to be performed without processing requests externally from bank 1100 .
- the logic circuit may comprise a processor subunit, as explained above, such that the processor sub-unit has any sub-banks controlled by the sub-bank controller as corresponding, dedicated memory. In the example of FIG.
- logic 1150 a may have sub-bank 1170 a as a corresponding, dedicated memory
- logic 1150 b may have sub-bank 1170 b as a corresponding, dedicated memory
- logic 1150 c may have sub-bank 1170 c as a corresponding, dedicated memory.
- the logic circuits may have buses to the sub-banks, e.g., buses 1131 a, 1131 b, or 1131 c. As further depicted in FIG.
- the sub-bank controllers may each include a plurality of decoders, such as a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes, either by a processing element or processor subunit or by a higher-level memory controller issuing commands, to locations on the memory sub-bank(s).
- sub-bank controller 1130 a includes decoders 1160 a, 1160 b, and 1160 c
- sub-bank controller 1130 b includes decoders 1160 d, 1160 e, and 1160 f
- sub-bank controller 1130 c includes decoders 1160 g, 1160 h, and 1160 i.
- the sub-bank controllers may, based on a request from bank row decoder 1110 , select a wordline using the decoders included in the sub-bank controllers.
- the described system may allow a processing element or processor subunit of the sub-bank to access the memory without interrupting other banks and even other sub-banks, thereby allowing each sub-bank processor subunit to perform memory computations in parallel with the other sub-bank processor subunits.
- each sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells.
- sub-bank 1170 a includes mats 1190 a - 1 , 1190 a - 2 , . . . , 1190 a - x
- sub-bank 1170 b includes mats 1190 b - 1 , 1190 b - 2 , . . . , 1190 b - x
- sub-bank 1170 c includes mats 1190 c - 1 , 1190 c - 2 , . . . , 1190 c - 3 .
- each sub-bank may include at least one decoder.
- sub-bank 1170 a includes decoder 1180 a
- sub-bank 1170 b includes decoder 1180 b
- sub-bank 1170 c includes decoder 1180 c.
- bank column decoder 1120 may select a global bitline (e.g., bitline 1121 a or 1121 b ) based on external requests while the sub-bank selected by bank row decoder 1110 may use its column decoder to select a local bitline (e.g., bitline 1181 a or 1181 b ) based on local requests from the logic circuit to which the sub-bank is dedicated.
- each processor subunit may be configured to access a sub-bank dedicated to the processor subunit using the row decoder and the column decoder of the sub-bank without using the bank row decoder and the bank column decoder.
- each processor subunit may access a corresponding sub-bank without interrupting other sub-banks.
- sub-bank decoders may reflect accessed data to the bank decoders when the request to the sub-bank is external to the processor subunit.
- the local bitlines may be the bitlines of the mat rather than bitlines of the sub-bank.
- a combination of embodiments using sub-bank row decoders and sub-bank column decoders with the embodiment depicted in FIG. 11 may be used.
- the bank row decoder may be eliminated but the bank column decoder retained and local bitlines used.
- FIG. 12 shows an example of an embodiment of a memory sub-bank 1200 having a plurality of mats.
- sub-bank 1200 may represent a portion of sub-bank 1100 of FIG. 11 or may represent an alternative implementation of a memory bank.
- sub-bank 1200 includes a plurality of mats (e.g., mats 1240 a and 1240 b ).
- each mat may include a plurality of cells.
- mat 1240 a includes cells 1260 a - 1 , 1260 a - 2 , . . . , 1260 a - x
- mat 1240 b includes cells 1260 b - 1 , 1260 b - 2 , . . . , 1260 b - x.
- Each mat may be assigned a range of addresses that will be assigned to the memory cells of the mat. These addresses may be configured at production such that mats may be shuffled around and such that faulted mats may be deactivated and left unused (e.g., using one or more fuses, as explained further below).
- Sub-bank 1200 receives read and write requests from memory controller 1210 .
- requests from memory controller 1210 may be filtered through a controller of sub-bank 1200 and directed to an appropriate mat of sub-bank 1200 for address resolution.
- at least a portion (e.g., higher bits) of an address of a request from memory controller 1210 may be transmitted to all mats of sub-bank 1200 (e.g., mats 1240 a and 1240 b ) such that each mat may process the full address and the request associated with the address only if the mat's assigned address range includes the address specified in the command Similar to the sub-bank direction described above, the mat determination may be dynamically controlled or may be hardwired.
- fuses may be used to determine the address range for each mat, also allowing for disabling of faulty mats by assigning an illegal address range. Mats may additionally or alternatively be disabled by other common methods or connection of fuses.
- each mat of the sub-bank may include a row decoder (e.g., row decoder 1230 a or 1230 b ) for selection of a wordline in the mat.
- each mat may further include fuses and comparators (e.g., 1220 a and 1220 b ).
- the comparators may allow each mat to determine whether to process an incoming request, and the fuses may allow each mat to deactivate if faulty.
- row decoders for the bank and/or sub-bank may be used rather than a row decoder in each mat.
- a column decoder included in the appropriate mat may select a local bitline (e.g., bitline 1251 or 1253 ).
- the local bitline may be connected to a global bitline of the memory bank.
- the local bitline of the cell may be further connected to the local bitline of the sub-bank.
- data in the selected cell may be read through the column decoder (and/or sense amplifier) of the cell, then through the column decoder (and/or sense amplifier) of the sub-bank (in embodiments including a sub-bank column decoder and/or sense amplifier), and then through the column decoder (and/or sense amplifier) of the bank.
- Mat 1200 may be duplicated and arrayed to form a memory bank (or a memory sub-bank).
- a memory chip of the present disclosure may comprise a plurality of memory banks, each memory bank having a plurality of memory sub-banks, and each memory sub-bank having a sub-bank controller for processing reads and writes to locations on the memory sub-bank.
- each memory sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells and having a mat row decoder and a mat column decoder (e.g., as depicted in FIG. 12 ).
- the mat row decoders and the mat column decoders may process read and write requests from the sub-bank controller.
- the mat decoders may receive all requests and determine (e.g., using a comparator) whether to process the request based on a known address range of each mat, or the mat decoders may only receive requests within the known address range based on selection of a mat by the sub-bank (or bank) controller.
- a memory chip of the present disclosure may comprise a plurality of memory banks (e.g., an SRAM bank, a DRAM bank, or the like), each memory bank having a bank controller, a row decoder, and a column decoder for allowing reads and writes to locations on the memory bank, as well as a plurality of buses connecting each controller of the plurality of bank controllers to at least one other controller of the plurality of bank controllers.
- the plurality of buses may be similar to the buses connecting the processing subunits, as described above, but connecting the bank controllers directly rather than through the processing subunits.
- buses may additionally or alternatively connect sub-bank controllers and/or mat controllers.
- the plurality of buses may be accessed without interruption of data transfers on main buses of the memory banks connected to one or more processor subunits. Accordingly, a memory bank (or sub-bank) may transmit data to or from a corresponding processor subunit in the same clock cycle as transmitting data to or from a different memory bank (or sub-bank).
- the controllers may be configurable for selection of one other of the other controllers for sending or receiving of data.
- each controller may be connected to at least one neighboring controller (e.g., pairs of spatially adjacent controllers may be connected to one another).
- the disclosure is generally directed to a memory chip with primary logic portions for on-chip data processing.
- the memory chip may include redundant logic portions, which may replace defective primary logic portions to increase the fabrication yield of the chip.
- the chip may include on-chip components that allow a configuration of logic blocks in the memory chip based on individual testing of the logic portions. This feature of the chip may increase yields because a memory chip with larger areas dedicated to logic portions is more susceptible to fabrication failures.
- DRAM memory chips with large redundant logic portions may be susceptible to fabrication issues that reduce yield.
- implementing redundant logic portions may result in increased yield and reliability because it provides a manufacturer or user of DRAM memory chips to turn on or off full logic portions while maintaining the ability of high parallelism.
- memory types such as DRAM
- DRAM dynamic random access memory
- FIG. 13 is a block diagram of an exemplary memory chip 1300 , consistent with disclosed embodiments.
- Memory chip 1300 may be implemented as a DRAM memory chip.
- Memory chip 1300 may also be implemented as any type of memory volatile or non-volatile, such as Flash, SRAM, ReRAM, PRAM, and/or MRAM, etc.
- Memory chip 1300 may include a substrate 1301 in which an address manager 1302 , a memory array 1304 including a plurality of memory banks, 1304 ( a,a ) to 1304 ( z,z ), a memory logic 1306 , a business logic 1308 , and a redundant business logic 1310 are disposed.
- Memory logic 1306 and business logic 1308 may constitute primary logic blocks, while redundant business logic 1310 may constitute redundant blocks.
- memory chip 1300 may include configuration switches, which may include deactivation switches 1312 , and an activation switches 1314 . Deactivation switches 1312 and activation switches 1314 may also be disposed in the substrate 1301 .
- memory logic 1306 , business logic 1308 , and redundant business logic 1310 may also be collectively referred to as the “logic blocks.”
- Address manager 1302 may include row and column decoders or other type of memory auxiliaries. Alternatively, or additionally, address manager 1302 may include a microcontroller or processing unit.
- memory chip 1300 may include a single memory array 1304 that may arrange the plurality of memory blocks in a two-dimensional array on substrate 1301 . In other embodiments, however, memory chip 1300 may include multiple memory arrays 1304 and each of the memory arrays 1304 may arrange memory blocks in different configurations. For example, memory blocks in at least one of the memory arrays (also known as memory banks) may be arranged in a radial distribution to facilitate routing between address manager 1302 or memory logic 1306 to the memory blocks.
- Business logic 1308 may be used to do the in-memory computation of an application that is not related to the logic used to manage the memory itself.
- business logic 1308 may implement functions related to AI such as floating, integer, or MAC operations used as activation functions.
- business logic 1308 may implement data base related functions like min, max, sort, count, among others.
- Memory logic 1306 may perform tasks related to memory management, including (but not limited to) read, write, and refresh operations. Therefore, business logic may be added in one or more of the bank level, mats level, or a group of mats level.
- Business logic 1308 may have one or more address outputs and one or more data inputs/outputs. For instance, business logic 1308 can address by row ⁇ column lines to address manager 1302 . In certain embodiments, however, the logic blocks may be additionally or alternatively addressed via data inputs ⁇ outputs.
- Redundant business logic 1310 may be a replicate of business logic 1308 .
- redundant business logic 1310 may be connected to deactivation switches 1312 and/or activation switches 1314 , which may include small fuse ⁇ anti-fuse, and used for logic disabling or enabling one of the instances (e.g., an instance which is connected by default) and enable one of the other logic blocks (e.g., an instance which is disconnected by default).
- the redundancy of blocks may be local within a logic block, such as business logic 1308 .
- the logic blocks in memory chip 1300 may be connected to subsets of memory array 1304 with dedicated buses.
- a set of memory logic 1306 , business logic 1308 , and redundant business logic 1310 may be connected to the first row of memory blocks in memory array 1304 (i.e., memory blocks 1304 ( a,a ) to 1304 ( a,z )).
- the dedicated buses may allow associated logic blocks to quickly access data from the memory blocks without requirements of opening communication lines through, for example, address manager 1302 .
- Each of the plurality of primary logic blocks may be connected to at least one of the plurality of memory banks 1304 .
- redundant blocks such as redundant business block 1310
- Redundant blocks may replicate at least one of the plurality of primary logic blocks, such as memory logic 1306 or business logic 1308 .
- Deactivation switches 1312 may be connected to at least one of the plurality of primary logic blocks and activation switches 1314 may be connected to at least one of the plurality of redundant blocks.
- deactivation switches 1312 may be configured to disable the one of the plurality of primary logic blocks.
- activation switches 1314 may be configured to enable one of the plurality of redundant blocks, such as redundant logic block 1310 , that replicates the one of the plurality of primary logic blocks.
- activation switches 1314 and deactivation switches 1312 may include an external input to configure the status of the switch.
- activation switches 1314 may be configured so an activation signal in the external input causes a closed switch condition
- deactivation switches 1312 may be configured so a deactivation signal in the external input causes an open switch condition.
- all configuration switches in 1300 may be deactivated by default and become activated or enabled after a test indicates an associated logic block is functional and a signal is applied in the external input.
- all configuration switches in 1300 may be enabled by default and may be deactivated or disabled after a test indicates an associated logic block is not functional and a deactivation signal is applied in the external input.
- the configuration switch may disable the associated logic block.
- the state of the configuration switch may be changed to disabled in order to disable the associated logic block.
- the state of the configuration switch may be left in its disabled state in order to disable the associated logic block. For example, the result of an operability test may indicate that a certain logic block is nonoperational or that it fails to operate within certain specifications. In such cases, the logic block may be disabled my not enabling its corresponding configuration switch.
- configuration switches may be connected to two or more logic blocks and may be configured to choose between different logic blocks.
- a configuration switch may be connected to both business logic 1308 and redundant logic block 1310 .
- Configuration switch may enable redundant logic block 1310 while disabling business logic 1308 .
- At least one of the plurality of primary logic blocks may be connected to a subset of the plurality of memory banks or memory instances 1304 with a first dedicated connection.
- at least one of the plurality of redundant blocks (such as redundant business logic 1310 ), which replicates the at least one of the plurality of primary logic blocks, may be connected to the subset of the same plurality of memory banks or instances 1304 with a second dedicated connection.
- memory logic 1306 may have different functions and capabilities than business logic 1308 .
- memory logic 1306 may be designed to enable read and write operations in the memory bank 1304
- business logic 1308 may be designed to perform in-memory computations. Therefore, if the business logic 1308 includes a first business logic block, and the business logic 1308 includes a second business logic block (like redundant business logic 1310 ), it is possible to disconnect defective business logic 1308 and reconnect redundant business logic 1310 without missing any capability.
- configuration switches may be implemented with a fuse, an anti-fuse, or a programmable device (including a one-time programmable device), or other form of non-volatile memory.
- FIG. 14 is a block diagram of an exemplary redundant logic block set 1400 , consistent with disclosed embodiments.
- redundant logic block set 1400 may be disposed in substrate 1301 .
- Redundant logic block set 1400 may include at least one of business logic 1308 , and redundant business logic 1310 , connected to switches 1312 and 1314 , respectively.
- business logic 1308 and redundant business logic 1310 may be connected to an address bus 1402 and a data bus 1404 .
- the switches 1312 and 1314 may connect logic blocks to a clock node. In this way, the configuration switches may engage or disengage the logic blocks from the clock signal, effectively activating or deactivating the logic blocks. In other embodiments, however, switches 1312 and 1314 may connect logic blocks to other nodes for activation or deactivation. For instance, configuration switches may connect logic blocks to a voltage supply node (e.g., VCC) or to the ground node (e.g., GND) or clock signal. In this way, the logic blocks may be enabled or disabled by the configuration switches because they would create an open circuit or cut-off the logic block power supply.
- VCC voltage supply node
- GND ground node
- address bus 1402 and data bus 1404 may be in opposite sides of the logic blocks, which are connected in parallel to each one of the buses. In this way, routing of the different on-chip components may be facilitated by the logic block set 1400 .
- each one of the plurality of deactivation switches 1312 couple at least one of the plurality of primary logic blocks with a clock node
- each one of the plurality of activation switches 1314 may be couple at least one of the plurality of redundant blocks with the clock node allowing to connect ⁇ disconnect the clock as a simple activation ⁇ deactivation mechanism.
- Redundant business logic 1310 of redundant logic block set 1400 allows the designer to choose, based on area and routing, the blocks that are worth duplication. For example, a chip designer may select larger blocks for duplication because larger blocks may be more error prone. Thus, a chip designer may decide to duplicate large logic blocks. On the other hand, a designer may prefer to duplicate smaller logic blocks because they are easily duplicated without a significant loss of space. Moreover, using the configuration in FIG. 14 , a designer may easily choose to duplicate logic blocks depending on the statistics of errors per area.
- FIG. 15 is a block diagram for an exemplary logic block 1500 , consistent with disclosed embodiments.
- the logic block may be business logic 1308 and/or redundant business logic 1310 . In other embodiments, however, the exemplary logic block may describe memory logic 1306 or other component of memory chip 1300 .
- Logic block 1500 presents yet another embodiment where the logic redundancy is used within a small processor pipeline.
- the logic block 1500 may include a register 1508 , a fetch circuit 1504 , decoder 1506 , and a write-back circuit 1518 .
- logic block 1500 may include a computation unit 1510 and a duplicated computing unit 1512 .
- logic block 1500 may include other units that do not comprise a controller pipeline but include sporadic processing elements that comprise a required business logic.
- Computation unit 1510 and duplicated computation unit 1512 may include a digital circuit capable of performing digital calculations.
- computation unit 1510 and duplicated computation unit 1512 may include an arithmetic logic unit (ALU) to perform arithmetic and bitwise operations on binary numbers.
- ALU arithmetic logic unit
- computation unit 1510 and duplicated computation unit 1512 may include a floating-point unit (FPU), which operates on floating point numbers.
- computation unit 1510 and duplicated computation unit 1512 may implement data base related functions like min, max, count, and compare operations, among others.
- computation unit 1510 and duplicated computation unit 1512 may be connected to switching circuits 1514 and 1516 . When activated the switching circuits may enable or disable the computing units.
- the duplicated computation unit 1512 may replicate the computation unit 1510 .
- register 1508 , fetch circuit 1504 , decoder 1506 , and write-back circuit 1518 may be smaller in size than the computation unit 1510 . Because larger elements are more prone to issues during fabrication, a designer may decide to replicate larger units (such as computation unit 1510 ) instead of smaller units (such as the local logic units). Depending on historic yields and error rates, however, a designed may elect to duplicate local logic units additionally or alternatively to large units (or the entire block).
- computation unit 1510 may be larger, and thus more error prone, than register 1508 , fetch circuit 1504 , decoder 1506 , and write-back circuit 1518 .
- a designer may choose to duplicate computation unit 1510 instead of the other elements in logic block 1500 or the whole block.
- Logic block 1500 may include a plurality of local configuration switches, each one of the plurality of local configuration switches being connected to at least one of the at least one of computation unit 1510 or duplicated computation unit 1512 .
- Local configuration switches may be configured to disable computation unit 1510 and enable duplicated computation unit 1512 when a fault is detected in the computation unit 1510 .
- FIG. 16 shows block diagrams of exemplary logic blocks connected with a bus, consistent with disclosed embodiments.
- logic blocks 1602 (which may represent memory logic 1306 , business logic 1308 , or redundant business logic 1310 ) may be independent of each other, may be connected via a bus, and may be activated externally by addressing them specifically.
- memory chip 1300 may include many logic blocks, each logic block having an ID number.
- logic blocks 1602 may represent larger units comprised of a plurality one or more of memory logic 1306 , business logic 1308 , or redundant business logic 1310 .
- each one of logic blocks 1602 may be redundant with the other logic blocks 1602 .
- This complete redundancy, in which all blocks may operate as primary or redundant blocks, may improve fabrication yields because a designer may disconnect faulty units while maintaining functionality of the overall chip. For example, a designer may have the ability to disable logic areas that are prone to errors but maintain similar computation capabilities because the all duplicate blocks may be connected to the same address and data buses. For example, the initial number of logic blocks 1602 may greater than a target capability. Then, disabling some logic blocks 1602 would not affect the target capability.
- a bus connected to the logic blocks may include address bus 1614 , command lines 1616 , and data lines 1618 . As shown in FIG. 16 , each one of the logic blocks may be connected independently from each line in the bus. In certain embodiments, however, logic blocks 1602 may be connected in a hierarchical structure to facilitate routing. For instance, each line in the bus may be connected to a multiplexer that routes the line to different logic blocks 1602 .
- each one of the logic blocks may include Fused IDs such as fused identification 1604 .
- Fused identification 1604 may include an array of switches (like fuses) that determine an ID and may be connected to a managing circuit.
- fused identification 1604 may be connected to address manager 1302 .
- fused identification 1604 may be connected to higher memory address units.
- fused identification 1604 may be configurable to for a specific address.
- fused identification 1604 may include a programmable, non-volatile device that determines a final ID based on instructions received form a managing circuit.
- a distributed processor on a memory chip may be designed with the configuration depicted in FIG. 16 .
- a testing procedure executed as BIST at chip wakeup or at factory testing may assign running ID numbers to blocks in the plurality of primary logic blocks (memory logic 1306 and business logic 1308 ) that pass a testing protocol.
- a testing procedure may also assign illegal ID numbers to blocks in the plurality of primary logic blocks that do not pass the testing protocol.
- the test procedure may also assign running ID numbers to blocks in the plurality of redundant blocks (redundant logic block 1310 ) that pass the testing protocol. Because redundant blocks replace failing primary logic blocks, the blocks in the plurality of redundant blocks assigned running ID numbers may be equal to, or greater than, the blocks in the plurality of primary logic blocks assigned illegal ID numbers, thereby disabling the block.
- each one of the plurality of primary logic blocks and each one of the plurality of redundant blocks may include at least one fused identification 1604 .
- the bus connecting logic blocks 1602 may include a command line, a data line, and an address line.
- all logic blocks 1602 that are connected to the bus will start disabled and with no ID number. Tested one by one, each good logic block will get a running ID number, and those logic blocks not working will remain with illegal ID, which would disable these blocks. In this manner, redundant logic blocks may improve the fabrication yields by replacing blocks that are known to be defective during the testing process.
- Address bus 1614 may couple a managing circuit to each one of the plurality of memory banks, each one of the plurality of primary logic blocks, and each one of the plurality of redundant blocks. These connections allow the managing circuit to, upon detection of the fault associated with a primary logic blocks (such as business logic 1308 ), assign an invalid address to the one of the plurality of primary logic blocks and assign a valid address to the one of the plurality of redundant blocks.
- a primary logic blocks such as business logic 1308
- illegal IDs are configured to all logic blocks 1602 ( a )-( c )—(e.g., address 0xFFF). After testing logic blocks 1602 ( a ) and 1602 ( c ) are verified to be functional while logic block 1602 ( b ) is not functional.
- unshaded logic blocks may represent logic blocks that passed the functionality test successfully, while shaded logic blocks may represent logic blocks that failed the test for functionality. Then, the test procedure changes the illegal IDs to legal IDs for logic blocks that are functional while leaving the illegal IDs for logic blocks that are not functional.
- FIG. 16A illegal IDs are configured to all logic blocks 1602 ( a )-( c )—(e.g., address 0xFFF). After testing logic blocks 1602 ( a ) and 1602 ( c ) are verified to be functional while logic block 1602 ( b ) is not functional.
- unshaded logic blocks may represent logic blocks that passed the functionality test successfully, while shaded logic blocks may represent logic blocks that failed the test
- the address for logic blocks 1602 ( a ) and 1602 ( c ) is changed from 0xFFF to 0x001 and 0x002, respectively.
- the address for logic block 1602 ( b ) remains the illegal address 0xFFF.
- the ID is changed by programming a corresponding fused identification 1604 .
- FIG. 16B Different results from the testing of logic blocks 1602 may result in a different configuration. For example, as shown in FIG. 16B , address manager 1302 may initially assign illegal IDs to all logic blocks 1602 (i.e., 0xFFF). The testing results, however, may indicate that both logic blocks 1602 ( a ) and 1602 ( b ) are functional. In these cases, testing of logic block 1602 ( c ) may not be necessary because memory chip 1300 may require only two logic blocks. Therefore, to minimize testing resources, logic blocks may be tested only according to the minimum number of functional logic blocks needed by the product definition of 1300 , leaving other logic blocks untested. FIG. 16B also shows unshaded logic blocks, which represent tested logic blocks that passed the test for functionality, and shaded logic blocks, which represent untested logic blocks.
- a production tester (external or internal, automatic or manual) or a controller executing a BIST at startup, may change illegal IDs to running IDs for tested logic blocks that are functional while leaving the illegal IDs to untested logic blocks.
- the address for logic blocks 1602 ( a ) and 1602 ( b ) is changed from 0xFFF to 0x001 and 0x002, respectively.
- the address for untested logic block 1602 ( c ) remains with the illegal address 0xFFF.
- FIG. 17 is a block diagram for exemplary units 1702 and 1712 connected in series, consistent with disclosed embodiments.
- FIG. 17 may represent an entire system or chip.
- FIG. 17 may represent a block in a chip containing other functional blocks.
- Units 1702 and 1712 may represent complete units that include a plurality of logic blocks such as memory logic 1306 and/or business logic 1308 . In these embodiments units 1702 and 1712 may also include elements required to perform operations such as address manager 1302 . In other embodiments, however, units 1702 and 1712 may represent logic units such as business logic 1308 or redundant business logic 1310 .
- FIG. 17 presents embodiments in which units 1702 and 1712 may need to communicate between themselves.
- units 1702 and 1712 may be connected in series.
- a non-working unit may break the continuity between the logic blocks. Therefore, the connection between units may include a bypass option when a unit needs to be disabled due to a defect.
- the bypass option can also be a part of the bypassed unit itself.
- units may be connected in series (e.g., 1702 ( a )-( c )), and a failing unit (e.g., 1702 ( b )) may be bypassed when it is defective.
- the units may further be connected in parallel with switching circuits.
- units 1702 and 1712 may be connected with switching circuits 1722 and 1728 , as depicted in FIG. 17 .
- unit 1702 ( b ) is defective.
- unit 1702 ( b ) does not pass a test for a circuit functionality. Therefore, unit 1702 ( b ) may be disabled using, for example, activation switches 1314 (not shown in FIG. 17 ) and/or switching circuit 1722 ( b ) may be activated to bypass unit 1702 ( b ) and sustain the connectivity between logic blocks.
- each one of the plurality of units may be connected in parallel with a parallel switch.
- the parallel switch connected to the one of the plurality of units may be activated to connect two of the plurality of units.
- switching circuits 1728 may include a sampling point or more that would cause a cycle or cycles delay maintaining synchronization between different lines of units.
- a unit When a unit is disabled, shorting the connection between adjacent logic blocks may generate synchronization errors with other calculations. For example, if a task requires data from both A and B lines, and each of A and B is carried by an independent series of units, disabling a unit would cause a desynchronization between the lines that would require further data management.
- sample circuits 1730 may simulate the delay caused by the disabled unit 1712 ( b ). Nonetheless, in some embodiments, the parallel switch may include an anti-fuse instead of a sampling circuit 1730 .
- FIG. 18 is a block diagram of exemplary units connected in a two-dimension array, consistent with disclosed embodiments.
- FIG. 18 may represent an entire system or chip.
- FIG. 18 may represent a block in a chip containing other functional blocks.
- Units 1806 may represent autonomous units that include a plurality of logic blocks such as memory logic 1306 and/or business logic 1308 . However, in other embodiments units 1806 may represent logic units such as business logic 1308 . Where convenient, discussion of FIG. 18 may refer to elements identified in FIG. 13 (e.g., memory chip 1300 ) and discussed above.
- units may be arranged in a two-dimensional array in which units 1806 (which may include or represent one or more of memory logic 1306 , business logic 1308 , or redundant business logic 1310 ) are interconnected via switching boxes 1808 and connection boxes 1810 .
- the two-dimensional array may include I/O blocks 1804 in the periphery of the two-dimensional array.
- Connection boxes 1810 may be programmable and reconfigurable devices that may respond to signals inputted from the I/O blocks 1804 .
- connection boxes may include a plurality of input pins from units 1806 and may also be connected to switching boxes 1808 .
- connection boxes 1810 may include a group of switches connecting pins of programmable logic cells with routing tracks, while switching boxes 1808 may include a group of switches connecting different tracks.
- connection boxes 1810 and switching boxes 1808 may be implemented with configuration switches such as switches 1312 and 1314 .
- connection boxes 1810 and switching boxes 1808 may be configured by a production tester or a BIST executed at chip startup.
- connection boxes 1810 and switching boxes 1808 may be configured after units 1806 are tested for a circuit functionality.
- I/O blocks 1804 may be used to send testing signals to units 1806 .
- I/O blocks 1804 may send programming signals that configure connection boxes 1810 and switching boxes 1808 in a manner disabling the units 1806 that fail the testing protocol and enabling units 1806 that pass the testing protocol.
- the plurality of primary logic blocks and the plurality of redundant blocks may be disposed on the substrate in a two-dimensional grid. Therefore, each one of the plurality of primary units 1806 and each one of the plurality of redundant blocks, such as redundant business logic 1310 , may be interconnected with switching boxes 1808 , and an input block may be disposed in the periphery of each line and each column of the two-dimensional grid.
- FIG. 19 is a block diagram for exemplary units in a complex connection, consistent with disclosed embodiments.
- FIG. 19 may represent an entire system.
- FIG. 19 may represent a block in a chip containing other functional blocks.
- the complex connection of FIG. 19 includes units 1902 ( a )-( f ) and configuration switches 1904 ( a )-( h ).
- Units 1902 may represent autonomous units that include a plurality of logic blocks such as memory logic 1306 and/or business logic 1308 . However, in other embodiments units 1902 may represent logic units such as memory logic 1306 , business logic 1308 , or redundant business logic 1310 .
- Configuration switches 1904 may include any of deactivation switches 1312 and activation switches 1314 .
- the complex connection may include units 1902 in two planes.
- the complex connection may include two independent substrates separated in the z-axis.
- units 1902 may be arranged in two surfaces of a substrate.
- substrate 1301 may be arranged in two overlapping surfaces and connected with configuration switches 1904 arranged in three dimensions.
- Configuration switches may include deactivation switches 1312 and/or activation switches 1314 .
- a first plane of the substrate may include “main” unit 1902 . These blocks may be enabled by default.
- a second plain may include “redundant” unit 1902 . These units may be disabled by default.
- configuration switches 1904 may include anti-fuses.
- the blocks may be connected in a tile of functional units by switching certain anti-fuses to “always-on” and disable selected units 1902 , even if they are in a different plane.
- one of the ‘main’ units (unit 1902 ( e )) is not working.
- FIG. 19 may represent nonfunctional or untested blocks as shaded blocks while tested or functional blocks may be unshaded. Therefore, configuration switches 1904 are configured so one of the logic blocks in a different plane (e.g., unit 1902 ( f )) becomes active. In this way even though one of the main logic blocks was defective, the memory chip is still working by replacing a spare logic unit.
- FIG. 19 additionally shows that one of the units 1902 (i.e., 1902 ( c )) in the second plane is not tested or enabled because the main logic blocks are functional.
- the main logic blocks are functional.
- both main units 1902 ( a ) and 1902 ( d ) passed a test for functionality.
- units 1902 ( c ) was not tested or enabled. Therefore, FIG. 19 shows the ability to specifically select the logic blocks that become active depending on testing results.
- not all units 1902 in a first plain may have a corresponding spare or redundant blocks. However, in other embodiments, all units may be redundant with each other for complete redundancy where all units are both primary or redundant.
- all implementations may follow the star network topology depicted in FIG. 19 , other implementation may use parallel connections, serial connections, and/or couple the different elements with configuration switches in parallel or in series.
- FIG. 20 is an exemplary flowchart illustrating a redundant block enabling process 2000 , consistent with disclosed embodiments.
- the enabling process 2000 may be implemented for memory chip 1300 and specially for DRAM memory chips.
- process 2000 may include steps of testing each one of a plurality of logic blocks on the substrate of the memory chip for at least one circuit functionality, identifying faulty logic blocks in the plurality of primary logic blocks based on the testing results, testing at least one redundant or additional logic block on the substrate of the memory chip for the at least one circuit functionality, disabling the at least one faulty logic block by applying an external signal to a deactivation switch, and enabling the at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip.
- FIG. 20 further elaborates on each step of process 2000 .
- Process 2000 may include testing a plurality of logic blocks (step 2002 ), such as business block 1308 and a plurality of redundant blocks (e.g., redundant business block 1310 ). The testing may be before packaging using, for example, probing stations for on-wafer testing. Step 2000 , however, may also be performed after packaging.
- a plurality of logic blocks such as business block 1308 and a plurality of redundant blocks (e.g., redundant business block 1310 ).
- the testing may be before packaging using, for example, probing stations for on-wafer testing.
- Step 2000 may also be performed after packaging.
- the testing in step 2002 may include applying a finite sequence of testing signals to every logic block in memory chip 1300 or a subset of logic blocks in memory chip 1300 .
- the testing signals may include requesting a computation that is expected to yield a 0 or a 1.
- the testing signal may request reading a specific address in a memory bank or writing in a specific memory bank.
- Testing techniques may be implemented to test the response of the logic blocks under iterative processes in step 2002 .
- the test may involve testing logic blocks by transmitting instructions to write data in a memory bank and then verifying the integrity of the written data.
- the testing may include repeating the algorithm with data inversed.
- the testing of step 2002 may include running a model of the logic blocks to generate a target memory image based on a set of testing instructions. Then, the same sequence of instructions may be executed to the logic blocks in the memory chip, and the results may be recorded. The residual memory image of the simulation may also be compared to the image taken from the test, and any mismatch may be flagged as a failure.
- testing may include shadow modeling, where a diagnostic is generated but the results are not necessarily predicted.
- the test using shadow modeling may be run in parallel on both the memory chip and a simulation. For example, when the logic blocks in the memory chip complete an instruction or task, the simulation may be signaled to execute the same instruction. Once the logic blocks in the memory chip finalize the instructions, the two models' architectural states may be compared. If there is a mismatch, then a failure is flagged.
- all logic blocks may be tested in step 2002 .
- only subsets of the logic blocks may be tested in different testing rounds. For example, in a first round of testing only memory logic 1306 and associated blocks may be tested. In a second round, only business logic 1308 and associated blocks may be tested. In a third round, depending on the results of the first two rounds, logic blocks associated with redundant business logic 1310 may be tested.
- Process 2000 may continue to step 2004 .
- faulty logic blocks may be identified, and faulty redundant blocks may also be identified.
- logic blocks that do not pass the testing of step 2002 may be identified as faulty blocks in step 2004 .
- only certain faulty logic blocks may be initially identified.
- only logic blocks associated with business logic 1308 may be identified, and faulty redundant blocks are only identified if they are required for substituting a faulty logic block.
- identifying faulty blocks may include writing on a memory bank or a nonvolatile memory the identification information of the identified faulty blocks.
- faulty logic blocks may be disabled.
- the faulty logic blocks may be disabled by disconnecting them from clock, ground, and/or power nodes.
- faulty logic blocks may be disabled by configuring connection boxes in an arrangement that avoids the logic blocks.
- faulty logic blocks may be disabled by receiving an illegal address from address manager 1302 .
- step 2008 redundant blocks that duplicate the faulty logic blocks may be identified.
- redundant blocks that are available and can duplicate faulty logic blocks may be identified. For example, if a logic block that performs multiplications of vectors is determined to be faulty, in step 2008 , an address manager 1302 or an on-chip controller may identify an available redundant logic block that also performs multiplication of vectors.
- the redundant blocks identified in step 2008 may be enabled.
- the identified redundant blocks may be enabled by connecting them to clock, ground, and/or power nodes.
- identified redundant blocks may be enabled by configuring connection boxes in an arrangement that connects the identified redundant blocks.
- identified redundant blocks may be enabled by receiving a running address at the test procedure execution time.
- FIG. 21 is an exemplary flow chart illustrating an address assignment process 2100 , consistent with disclosed embodiments.
- the address assignment process 2100 may be implemented for memory chip 1300 and specially for a DRAM memory chips.
- logic blocks in memory chip 1300 may be connected to a data bus and have an address identification.
- Process 2100 describes an address assignment method that disables faulty logic blocks and enables logic blocks that pass a test. The steps described in process 2100 will be described as being performed by a production tester or a BIST executed at chip startup; however, other components of memory chip 1300 and/or external devices may also perform one or more steps of process 2100 .
- the tester may disable all logic and redundant blocks by assigning an illegal identification to each logic block at a chip level.
- the tester may execute a testing protocol of a logic block.
- the tester may run testing methods described in step 2002 for one or more of the logic blocks in memory chip 1300 .
- step 2106 depending on the results of the test in step 2104 , the tester may determine whether the logic block is defective. If the logic block is not defective (step 2106 : no), address manager may assign a running ID to the tested logic block in step 2108 . If the logic block is defective (step 2106 : yes), address manager 1302 may leave the illegal ID for the defective logic block in step 2110 .
- address manager 1302 may select a redundant logic block that replicates the defective logic block.
- the redundant logic block that replicates the defective logic block may have the same components and connections to the defective logic blocks. In other embodiments, however, the redundant logic block may have different components and/or connections to the defective logic blocks but be able to perform an equivalent operation. For example, if the defective logic block is designed to perform multiplication of vectors, the selected redundant logic block would also be capable of performing multiplication of vectors, even if it does not have the same architecture as the defective unit.
- address manager 1302 may test the redundant block. For instance, the tester may apply the testing techniques applied in step 2104 to the identified redundant block.
- step 2116 based on the results of testing in step 2114 , the tester may determine whether the redundant block is defective. In step 2118 , if the redundant block is not defective (step 2116 : no), the tester may assign a running ID to the identified redundant block. In some embodiments, process 2100 may return to step 2104 after step 2118 , creating an iteration loop to test all logic blocks in the memory chip.
- step 2120 the tester may determine if additional redundant blocks are available. For example, the tester may query a memory bank with information regarding available redundant logic blocks. If redundant logic blocks are available (step 2120 : yes), the tester may return to step 2112 and identify a new redundant logic block replicating the defective logic block. If redundant logic blocks are not available (step 2120 : no), in step 2122 , the tester may generate an error signal. The error signal may include information of the defective logic block and the defective redundant block.
- the presently disclosed embodiments also include a distributed high-performance processor.
- the processor may include a memory controller that interfaces memory banks and processing units.
- the processor may be configurable to expedite delivery of data to the processing units for calculations. For example, if a processing unit requires two data instances to perform a task, the memory controller may be configured so communication lines independently provide access to the information from two data instances.
- the disclosed memory architecture seeks to minimize hardware requirements that are associated with complex cache memory and complex register files schemes. Normally, processor chips include cache hierarchies that allow cores to work directly with registers. However, the cache operations require significant die area and consume additional power.
- the disclosed memory architecture avoids the use of a cache hierarchy by adding logic components in the memory.
- the disclosed architecture also enables strategic (or even optimized) placement of data in memory banks. Even if the memory banks have a single port and high latency, the disclosed memory architecture may enable high performance and avoid memory accessing bottlenecks by strategically positioning data in different blocks of memory banks.
- a compilation optimization step may determine how data should be stored in memory banks for specific or generic tasks. Then, the memory controller, which interfaces processing units and memory banks, may be configured to grant access to specific processing units when they require data to perform operations.
- the configuration of the memory chip may be performed by a processing unit (e.g., a configuration manager) or an external interface.
- the configuration may be also written by a compiler or other SW tool.
- the configuration of the memory controller may be based on the available ports in the memory banks and the organization of data in the memory banks. Accordingly, the disclosed architecture may provide processing units with a constant flow of data or simultaneous information from different memory blocks. In this way, computation tasks within the memory may be quickly processed by avoiding latency bottlenecks or cache memory requirements.
- data stored in the memory chip may be arranged based on compilation optimization steps.
- the compilation may allow for building of processing routines in which the processor efficiently assigns tasks to processing units without memory latency associated delays.
- the compilation may be performed by a compiler and transmitted to a host connected to an external interface in the substrate. Normally, high latency for certain access patterns and/or low numbers of ports would result in data bottlenecks for processing units requiring the data.
- the disclosed compilation may position data in memory banks in a way that enables processing units to continuously receive data even with disadvantageous memory types.
- a configuration manager may signal required processing units based on computations that are required by a task.
- Different processing units or logic blocks in the chip may have specialized hardware or architectures for different tasks. Therefore, depending on the task that will be performed, a processing unit, or a group of processing units, may be selected to perform the task.
- the memory controller on the substrate may be configurable to route data, or grant access, according to the selection of processing subunits to improve data transfer rates. For example, based on the compilation optimization and the memory architecture, processing units may be granted access to memory banks when they are required to perform a task.
- the chip architecture may include on-chip components that facilitate transfer of data by reducing the time required to access data in the memory banks. Therefore, the present disclosure describes chip architecture(s), along with a compilation optimization step, for a high-performance processor capable of performing specific or generic tasks using simple memory instances.
- the memory instances may have high latency in random access and/or low number of ports, such as those used in a DRAM device or other memory-oriented technologies, but the disclosed architecture may overcome these shortcomings by enabling a continuous (or nearly continuous) flow of data from memory banks to processing units.
- simultaneous communication may refer to communication within a clock cycle.
- simultaneous communication may refer to sending information within a predetermine amount of time.
- simultaneous communication may refer to communication within a few nanoseconds.
- FIG. 22 provides block diagrams for exemplary processing devices, consistent with disclosed embodiments.
- FIG. 22A shows a first embodiment of a processing device 2200 in which a memory controller 2210 connects a first memory block 2202 and a second memory block 2204 using multiplexers. Memory controller 2210 may also connect at least a configuration manager 2212 , a logic block 2214 , and multiple accelerators 2216 ( a )-( n ).
- FIG. 22B shows a second embodiment of processing device 2200 in which memory controller 2210 connects memory blocks 2202 and 2204 using a bus that connects memory controller 2210 with at least a configuration manager 2212 , a logic block 2214 , and multiple accelerators 2216 ( a )-( n ).
- host 2230 may be external and connected to processing device 2200 through, for example, an external interface.
- Memory blocks 2202 and 2204 may include a DRAM mats or group of mats, DRAM banks, MRAM ⁇ PRAM ⁇ RERAM ⁇ SRAM units, Flash mats, or other memory technologies. Memory blocks 2202 and 2204 may alternatively include non-volatile memories, a flash memory device, a Resistive Random Access Memory (ReRAM) device, or a Magnetoresistive Random Access Memory (MRAM) device.
- ReRAM Resistive Random Access Memory
- MRAM Magnetoresistive Random Access Memory
- Memory blocks 2202 and 2204 may additionally include a plurality of memory cells arranged in rows and columns between a plurality of word lines (not shown) and a plurality of bit lines (not shown). The gates of each row of memory cells may be connected to a respective one of the plurality of word lines. Each column of memory cells may be connected to a respective one of the plurality of bit lines.
- a memory area (including memory blocks 2202 and 2204 ) is built from simple memory instances.
- the term “memory instance” may be used interchangeably with the term “memory block.”
- the memory instances (or blocks) may have poor characteristics.
- the memories may be only one port memories and may have high random-access latency.
- the memories may be inaccessible during column and line changes and face data access problems related to, for example, capacity charging and/or circuitry setups. Nonetheless, the architecture presented in FIG. 22 still facilitates parallel processing in the memory device by allowing dedicated connections between memory instances and processing units and arranging the data in a certain manner that takes the characteristics of the blocks into account.
- memory instances may include several ports, facilitating the parallel operations. Nonetheless, in such embodiments, the chip may still achieve an improved performance when data is compiled and organized based on the chip architecture.
- a compiler may improve the efficiency of access in the memory area by providing instructions and organizing data placement, so it can be readily access even using one-port memories.
- memory blocks 2202 and 2204 may be multiple types for memory in a single chip.
- memory blocks 2202 and 2204 may be eFlash and eDRAM.
- memory blocks may include DRAM with instances of ROM.
- Memory controller 2210 may include a logic circuit to handle the memory access and return the results to the rest of the modules.
- memory controller 2210 may include an address manager and selection devices, such as multiplexers, to route data between the memory blocks and processing units or grant access to the memory blocks.
- Memory controller 2210 may include double data rate (DDR) memory controllers used to drive DDR SDRAM, where data is transferred on both rising and falling edges of the system's memory clock.
- DDR double data rate
- memory controller 2210 may constitute Dual Channel memory controllers.
- the incorporation of dual channel memory may facilitate control of parallel access lines by memory controller 2210 .
- the parallel access lines may be configured to have identical lengths to facilitate synchronization of data when multiple lines are used in conjunction.
- the parallel access lines may allow access of multiple memory ports of the memory banks.
- processing device 2200 may include one or more muxes that may be connected to processing units.
- the processing units may include configuration manager 2212 , logic block 2214 , and accelerators 2216 , which may be connected directly to the mux.
- memory controller 2210 may include at least one data input from a plurality of memory banks or blocks 2202 and 2204 and at least one data output connected to each one of the plurality of processing units. With this configuration, memory controller 2210 may simultaneously receive data from memory banks or memory blocks 2202 and 2204 via the two data inputs, and simultaneously transmits data received via to the at least one selected processing unit via the two data outputs.
- the at least one data input and at least one data output may be implemented in a single port allowing only read or write operations.
- the single port may be implemented as a data bus including data, address, and command lines.
- Memory controller 2210 may be connected to each one of the plurality of memory blocks 2202 and 2204 , and may also connect to processing units via, for example, a selection switch. Also processing units on the substrate, including configuration manager 2212 , logic block 2214 , and accelerators 2216 , may be independently connected to memory controller 2210 . In some embodiments, configuration manager 2212 may receive an indication of a task to be performed and, in response, configure memory controller 2210 , accelerators 2216 , and/or logic blocks 2214 according to a configuration stored in memory or supplied externally. Alternatively, memory controller 2210 may be configured by an external interface. The task may require at least one computation that may be used to select at least one selected processing unit from the plurality of processing units.
- the selection may be based at least in part upon a capability of the selected processing unit for performing the at least one computation.
- memory controller 2210 may grant access to the memory banks, or route data between the at least one selected processing unit and at least two memory banks, using dedicated buses and/or in a pipelined memory access.
- first memory block 2202 of at least two memory blocks may be arranged on a first side of the plurality of processing units; and second memory bank 2204 of the at least two memory banks may be arranged on a second side of the plurality of processing units opposite to the first side.
- a selected processing unit to perform the task for instance accelerator 2216 ( n ) may be configured to access second memory bank 2204 during a clock cycle in which a communication line is opened to the first memory bank or first memory block 2202 .
- the selected processing unit may be configured to transfer data to second memory block 2204 during a clock cycle in which a communication line is opened to first memory block 2202 .
- memory controller 2210 may be implemented as an independent element, as shown in FIG. 22 . In other embodiments, however, memory controller 2210 may be embedded in the memory area or may be disposed along accelerators 2216 ( a )-( n ).
- a processing area in processing device 2200 may include configuration manager 2212 , logic block 2214 , and accelerators 2216 ( a )-( n ).
- Accelerators 2216 may include multiple processing circuits with pre-defined functions and may be defined by a specific application.
- an accelerator may be a vector multiply accumulate (MAC) unit or a Direct Memory Access (DMA) unit handling memory moving between modules.
- Accelerators 2216 may also be able to calculate their own address and request the data from memory controller 2210 or write data to it.
- configuration manager 2212 may signal at least one of accelerators 2216 that he can access the memory bank. Then accelerators 2216 may configure memory controller 2210 to route data or grant access to themselves.
- accelerators 2216 may include at least one arithmetic logic unit, at least one vector handling logic unit, at least one string compare logic unit, at least one register, and at least one direct memory access.
- Configuration manager 2212 may include digital processing circuits to configure accelerators 2216 and instructs execution of tasks.
- configuration manager 2212 may be connected to memory controller 2210 and each one of the plurality of accelerators 2216 .
- Configuration manager 2212 may have its own dedicated memory to hold the configurations of accelerators 2216 .
- Configuration manager 2212 may use the memory banks to fetch commands and configurations via memory controller 2210 .
- configuration manager 2212 may be programmed through an external interface.
- configuration manager 2212 may be implemented with an on-chip reduced instruction set computer (RISC) or an on-chip complex CPU with its own cache hierarchy.
- RISC reduced instruction set computer
- configuration manager 2212 may also be omitted and the accelerators can be configured through an external interface.
- Processing device 2200 may also include an external interface (not shown).
- the external interface allows access to the memory from an upper level, such a memory bank controller which receives the command from external host 2230 or on-chip main processor or access to the memory from external host 2230 or on-chip main processor.
- the external interface may allow programming of the configuration manager 2212 and the accelerators 2216 by writing configurations or code to the memory via memory controller 2210 to be used later by configuration manager 2212 or the units 2214 and 2216 themselves.
- the external interface may also directly program processing units without being routed through memory controller 2210 .
- configuration manager 2212 is a microcontroller
- configuration manager 2212 may allow loading of code from a main memory to the controller local memory via the external interface.
- Memory controller 2210 may be configured to interrupt the task in response to receiving a request from the external interface.
- the external interface may include multiple connectors associated with logic circuits that provide a glue-less interface to a variety of elements on the processing device.
- the external interface may include: Data I/O Inputs for data reads and output for data writes; External address outputs; External CEO chip select pins; Active-low chip selectors; Byte enable pins; a pin for wait states on the memory cycle; a Write enable pin; an Output enable-active pin; and read-write enable pin. Therefore, the external interface has the required inputs and outputs to control processes and obtain information from the processing device.
- the external interface may conform to JEDEC DDR standards.
- external interface may conform to other standards such as SPI ⁇ OSPI or UART.
- the external interface may be disposed on the chip substrate and may be connected external host 2230 .
- the external host may gain access to memory blocks 2202 and 2204 , memory controller 2210 , and processing units via the external interface.
- external host 2230 may read and write to the memory or may signal configuration manager 2212 , through read and write commands, to perform operations such as starting a process and/or stopping a process.
- external host 2230 may configure the accelerators 2216 directly.
- external host 2230 be able to perform read/write operations directly on memory blocks 2202 and 2204 .
- configuration manager 2212 and accelerators 2216 may be configured to connect the device area with the memory area using direct buses depending on the target task. For example, a subset of accelerators 2216 may connect with memory instances 2204 when the subset of accelerators has the capability to perform computations required to execute the task. By doing such a separation, it is possible to assure that dedicated accelerators get the bandwidth (BW) needed to memory blocks 2202 and 2204 . Moreover, this configuration with dedicated buses may allow splitting a large memory to smaller instances or blocks because connecting memory instances to memory controller 2210 allows quick access to data in different memories even with high row latency time. To achieve the parallelization of connection, memory controller 2210 may be connected to each of the memory instances with data, address, and/or control buses.
- memory controller 2210 may eliminate the requirement of a cache hierarchy or complex register file in the processing device.
- the cache hierarchy can be added to give added capabilities, the architecture in processing device processing device 2200 may allow a designer to add enough memory blocks or instances based on the processing operations and manage the instances accordingly without a cache hierarchy.
- the architecture in processing device processing device 2200 may eliminate requirements of a cache hierarchy by implementing a pipelined memory access. In the pipelined memory access, processing units may receive a sustaining flow of data in every cycle certain data lines may be opened (or activated) while other data lines receive or transmit data. The sustained flow of data using independent communication lines may allow an improved execution speed and minimum latency due to line changes.
- a compiler may communicate host 2230 the organization of, or a method to organize, data in memory banks to facilitate access to data during a given task.
- configuration manager 2212 may define which memory banks, and in some cases which ports of the memory banks, may be accessed by the accelerators. This synchronization between the location of data in memory banks and the access method to data, improves computing tasks by feeding data to the accelerators with minimum latency.
- configuration manager 2212 includes a RISC ⁇ CPU
- the method may be implemented in offline software (SW) and then the configuration manager 2212 may be programmed to execute the method.
- SW offline software
- the method may be developed in any language executable by RISC/CPU computers and may be executed on any platform.
- the inputs of the method may include configuration of the memories behind memory controller and the data itself along with the pattern of memory accesses.
- the method may be implemented in a language or machine language specific to the embodiment and may also be just a series of configuration values in binary or text.
- a compiler may provide instructions to host 2230 for organizing data in memory blocks 2202 and 2204 in preparation of a pipelined memory access.
- the pipelined memory access may generally include steps of: receiving a plurality of addresses of a plurality of memory banks or memory blocks 2202 and 2204 ; accessing the plurality of memory banks according to the received addresses using independent data lines; supplying data from a first address through a first communication line to at least one of the plurality of processing units and opening a second communication line to a second address, the first address being in a first memory bank of the plurality of memory banks, the second address being in second memory bank 2204 of the plurality of memory banks; and supplying data from the second address through the second communication line to the at least one of the plurality of processing units and opening a third communication line to a third address in the first memory bank in the first line within a second clock cycle.
- the pipelined memory access may be executed with two memory blocks being connected to a single port.
- memory controller 2210 may hide the two memory blocks behind a single port but transmit data to the processing units with the pipelined memory access approach.
- a compiler can run on host 2230 before executing a task.
- the compiler may be able to determine a configuration of data flow based on the architecture of the memory device since the configuration would be known to the compiler.
- the pipelined method can run on host 2230 which may arrange data in memory blocks before starting calculations. For example, host 2230 may directly write data in memory blocks 2204 and 2202 .
- processing units such as configuration manager 2212 and memory controller 2210 may not have information regarding required hardware until run time. Then, it may be necessary to delay the selection of an accelerator 2216 until a task starts running In these situations, the processing units or memory controller 2210 may randomly select an accelerator 2216 and create a test data access pattern, which may be modified as the task is executed.
- a compiler may organize data and instructions in memory banks for host 2230 to provide to a processing unit, such as configuration manager 2212 , to set signal connections that minimize access latency. For example, in some cases n words may be needed at the same time by accelerators 2216 . However, each memory instance supports retrieving only m words at a time, where “m” and “n” are integers and m ⁇ n. Thus, the compiler may place the needed data across different memory instances or blocks facilitating data access. Also, to avoid line miss latencies, a host may split data in different lines of different memory instances if processing device 2200 includes multiple memory instances. The division of data may allow accessing the next line of data in the next instance while still using data from the current instance.
- accelerator 2216 ( a ) may be configured to multiply two vectors.
- Each one of the vectors may be stored in independent memory blocks, such as memory blocks 2202 and 2204 , and each vector may include multiple words. Therefore, to complete a task requiring a multiplication by accelerator 2216 ( a ), it may be necessary to access the two memory blocks and retrieve multiple words.
- memory blocks only allow access of one word per clock cycle. For instance, memory blocks may have a single port.
- a compiler may organize the words composing vectors in different memory blocks allowing parallel and/or simultaneous reading of the words. In these situations, a compiler may store words in memory blocks that have a dedicated line.
- a compiler may arrange data in four memory blocks, each one transmitting a word and expediting data delivery.
- the compiler may instruct configuration manager 2212 (or other processing unit) to access ports specific ports.
- processing device 2200 may perform a pipelined memory access, continuously providing data to processing units by simultaneously loading words in some lines and transmitting data in other lines.
- this pipelined memory access avoid may avoid latency issues.
- FIG. 23 is a block diagram of an exemplary processing device 2300 , consistent with disclosed embodiments.
- the block diagram shows a simplified processing device 2300 displaying a single accelerator in the form of MAC Unit 2302 , configuration manager 2304 (equivalent or similar to configuration manager 2212 ), memory controller 2306 (equivalent or similar to memory controller 2210 ), and a plurality of memory blocks 2308 ( a )-( d ).
- MAC unit 2302 may be a specific accelerator for processing a particular task.
- the processing device 2300 may be tasked with 2D-convolutions.
- configuration manager 2304 can signal an accelerator that has the appropriate hardware to perform calculations associated with the task.
- MAC unit 2302 may have four internal incrementing counters (logical adders and registers to manage the four loops needed by a convulsion calculation) and a multiply accumulate unit.
- Configuration manager 2304 may signal MAC unit 2302 to process incoming data and execute the task.
- Configuration manager 2304 may transmit an indication to MAC unit 2302 to execute the task. In these situations, MAC unit 2302 may iterate over calculated addresses, multiply the numbers, and accumulate them to an internal register.
- configuration manager 2304 may configure the accelerators while memory controller 2306 grants access to blocks 2308 and MAC unit 2302 using dedicated buses. In other embodiments, however, memory controller 2306 can directly configure the accelerators based on instructions received from configuration manger 2304 or an external interface. Alternatively, or additionally, configuration manager 2304 can pre-load a few configurations and allow the accelerator to iteratively run on different addresses with different sizes. In such embodiments, configuration manager 2304 may include a cache memory that stores a command before it is transmitted to at least one of the plurality of processing units, such as accelerators 2216 . However, in other embodiments configuration manager 2304 may not include a cache.
- configuration manager 2304 or memory controller 2306 may receive addresses that need to be accessed for a task.
- Configuration manager 2304 or memory controller 2306 may check a register to determine whether the address is already in a loaded line to one of memory blocks 2308 . If so, memory controller 2306 may read the word from memory block 2308 and pass it to the MAC unit 2302 . If the address is not in a loaded line, configuration manager 2304 may request memory controller 2306 may load the line and signal MAC unit 2302 to delay until it is retrieved.
- memory controller 2306 may include two inputs form two independent addresses. But if more than two addresses should be accessed simultaneously, and these addresses are in a single memory block (for example it is only in of memory blocks 2308 ( a )), memory controller 2306 or configuration manager 2304 may raise an exception. Alternatively, configuration manager 2304 may return invalid data signal when the two addresses can only be access through a single line. In other embodiments, the unit may delay the process execution until it is possible to retrieve all needed data. This may diminish the overall performance. Nonetheless, a compiler may be able to find a configuration and data placement that would prevent delays.
- a compiler may create a configuration or instruction set for processing device 2300 that may configure configuration manager 2304 and memory controller 2306 and accelerator 2302 to handle situations in which multiple addresses need to be accessed from a single memory block but the memory block has one port. For instance, a compiler may re-arrange data in memory blocks 2308 such that processing units may access multiple lines in memory blocks 2308 .
- memory controller 2306 may also work simultaneously on more than one input at the same time. For example, memory controller 2306 may allow accessing one of memory blocks 2308 through one port and supplying the data while receiving a request from a different memory block in another input. Therefore, this operation may result in and accelerator 2216 tasked with the exemplary 2D-convolutions receiving data from dedicated lines of communication with the pertinent memory blocks.
- memory controller 2306 or a logic block may hold refresh counters for every memory block 2308 and handle the refresh of all lines. Having such a counter allows memory controller 2306 to slip in the refresh cycles between dead access times from the devices.
- memory controller 2306 may be configurable to perform the pipelined memory access, receiving addresses and opening lines in memory blocks before supplying the data.
- the pipelined memory access may provide data to processing units without interruption or delayed clock cycles.
- memory controller 2306 or one of the logic blocks access data with the right line in FIG. 23 , it may be transmitting data in the left line.
- processing device 2300 may use multiplexors and/or other switching devices to choose which device gets serviced to perform a given task.
- configuration manager 2304 may configure multiplexers so at least two data lines reach the MAC unit 2302 .
- This data transferring method may allow the processing units, such as accelerators 2216 , to quickly output a result.
- configuration manager 2304 may be configurable to execute processes based on priority of tasks. For example, configuration manager 2304 can be configured to let a running process finish without any interruptions. In that case, configuration manger 2304 may provide an instruction or configurations of a task to accelerators 2216 , let them run uninterrupted, and switch multiplexers only when the task is finished. However, in other embodiments, configuration manager 2304 may interrupt a task and reconfigure data routing when it receives a priority task, such a request from an external interface. Nevertheless, with enough memory blocks 2308 , memory controller 2306 may be configurable to route data, or grant access, to processing units with dedicated lines that do not have to be changed until a task is completed.
- all devices may be connected by buses to the entries of configuration manager 2304 , and the devices may manage access between themselves and the buses (e.g., using the same logic as a multiplexer). Therefore, memory controller 2306 may be directly connected to a number of memory instances or memory blocks.
- memory controller 2306 may be connected directly to memory sub-instances.
- each memory instance or block can be built from sub-instances (for example, DRAM may be built from mats with independent data lines arranged in multiple sub-blocks).
- the instances may include at least one of DRAM mats, DRAM, banks, flash mats, or SRAM mats or any other type of memory.
- memory controller 2306 may include dedicated lines to address sub-instances directly to minimize latency during a pipelined memory access.
- memory controller 2306 may also hold the logic needed for a specific memory instance (such as row ⁇ col decoders, refresh logic, etc.) and memory blocks 2308 may handle its own logic. Therefore, memory blocks 2308 may get an address and generate commands for return ⁇ write data.
- FIG. 24 depicts exemplary memory configuration diagrams, consistent with disclosed embodiments.
- a compiler generating code or configuration for processing device 2200 may perform a method to configure loading from memory blocks 2202 and 2204 by pre-arranging data in each block. For example, a compiler may prearrange data so each word required for a task is correlated to a line of memory instance or memory block(s). But for tasks that require more memory blocks than the one available in processing device 2200 , a compiler may implement methods of fitting data in more than one memory location of each memory block. The compiler may also store data in sequence and evaluate the latency of each memory block to avoid line miss latency.
- the host may be part of a processing unit, such as configuration manger 2212 , but in other embodiments the compiler host may be connected to processing device 2200 via an external interface. In such embodiments, the host may run compiling functions, such as the ones described for the compiler.
- configuration manager 2212 may be a CPU or a micro controller (uC). In such embodiments, configuration manager 2212 may have to access the memory to fetch commands or instructions placed in the memory.
- a specific compiler may generate the code and place it in the memory in a manner that allows for consecutive commands to be stored in the same memory line and across a number of memory banks to allow for the pipelined memory access also on the fetched command.
- configuration manager 2212 and memory controller 2210 may be capable of avoiding row latency in linear execution by facilitating the pipelined memory access.
- configuration manager 2212 may include internal caching or small memory.
- the internal caching may store commands that are executed by configuration manager 2212 to handle branches and loops.
- commands in internal caching memory may include instructions to configure accelerators for accessing memory blocks.
- FIG. 25 is an exemplary flowchart illustrating a possible memory configuration process 2500 , consistent with disclosed embodiments.
- process 2500 may be executed by a compiler that provides instructions to a host connected through an external interface.
- process 2500 may be executed by components of processing device 2200 , such as configuration manager 2212 .
- process 2500 may include determining a number of words required simultaneously to perform the task; determining a number of words that can be accessed simultaneously from each one of the plurality of memory banks; and dividing the number of words required simultaneously between multiple memory banks when the number of words required simultaneously is greater than the number of words that can be accessed simultaneously.
- dividing the number of words required simultaneously may include executing a cyclic organization of words and sequentially assigning one word per memory bank.
- process 2500 may begin with step 2502 , in which a compiler may receive a task specification.
- the specification includes required computations and/or a priority level.
- a compiler may identify an accelerator, or group of accelerators, that may perform the task.
- the compiler may generate instructions so the processing units, such as configuration manager 2212 , may identify an accelerator to perform the task.
- the processing units such as configuration manager 2212
- the required computation configuration manger 2212 may identify accelerators in the group of accelerators 2216 that may process the task.
- the compiler may determine a number of words that needs to be simultaneously accessed to execute the task. For example, the multiplication of two vectors requires access to at least two vectors, and the compiler may therefore determine that vector words must be simultaneously accessed to perform the operation.
- the compiler may determine a number of cycles necessary to execute the task. For example, if the task requires a convolution operation of four by-products, the compiler may determine that at least 4 cycles will be necessary to perform the task.
- step 2510 the compiler may place words that are needed to be accessed simultaneously in different memory banks.
- memory controller 2210 may be configured to open lines to different memory instances and access the required memory blocks within a clock cycle, without any required cached data.
- the compiler place words that are accessed sequentially in the same memory banks. For example, in the case that four cycles of operations are required, the compiler may generate instructions to write needed words in sequential cycles in a single memory block to avoid changing lines between different memory blocks during execution.
- compiler In step 2514 , compiler generate instructions for programming processing units, such as configuration manager 2212 .
- the instructions may specify conditions to operate a switching device (such as a multiplexor) or configure a data bus.
- configuration manager 2212 may configure memory controller 2210 to route data from, or grant access to, memory blocks to processing units using dedicated lines of communication according to a task.
- FIG. 26 is an exemplary flowchart illustrating a memory read process 2600 , consistent with disclosed embodiments. Where convenient in describing memory read process 2600 , reference may be made to the identifiers of elements depicted in FIG. 22 and described above. In some embodiments, as described below, process 2600 may be implemented by memory controller 2210 . In other embodiments, however, process 2600 may be implemented by other elements in the processing device 2200 , such as configuration manager 2212 .
- memory controller 2210 , configuration manager 2212 , or other processing units may receive an indication to route data from, or grant access to, a memory bank.
- the request may specify an address and a memory block.
- the request may be received via a data bus specifying a read command in line 2218 and address in line 2220 .
- the request may be received via demultiplexers connected to memory controller 2210 .
- configuration manager 2212 may query an internal register.
- the internal register may include information regarding opened lines to memory banks, opened addresses, opened memory blocks, and/or upcoming tasks. Based on the information in the internal register, it may be determined whether there are lines opened to the memory bank and/or whether the memory block received the request in step 2602 . Alternatively, or additionally, memory controller 2210 may directly query the internal register.
- process 2600 may continue to step 2616 and a line may be loaded to a memory bank associated with the received address.
- memory controller 2210 or a processing unit, such as configuration manager 2212 may signal a delay to the element requesting information from the memory address in step 2616 .
- memory controller 2210 may send a delay signal to the accelerator in step 2618 .
- configuration manager 2212 or memory controller 2210 may update the internal register to indicate a line has opened to a new memory bank or a new memory block.
- step 2606 If the internal register indicates that the memory bank is loaded in an opened line (step 2606 : yes), process 2600 may continue to step 2608 .
- step 2608 it may be determined whether the line loaded the memory bank is being used for a different address. If the line is being used for a different address (step 2608 : yes), it would indicate that there are two instances in a single block and, therefore, they cannot be accessed simultaneously. Thus, an error or exemption signal may be sent to the element requesting information from the memory address in step 2616 . But, if the line is not being used for a different address (step 2608 : no), a line may be opened for the address and retrieve data from the target memory bank and continue to step 2614 to transmit data to the to the element requesting information from the memory address.
- processing device 2200 has the ability to establish direct connections between processing units and the memory blocks or memory instances that contain the required information to perform a task. This organization of data would enable reading information from organized vectors in different memory instances, as well as allow the retrieval of information simultaneously from different memory blocks when a device requests a plurality of these addresses.
- FIG. 27 is an exemplary flowchart illustrating an execution process 2700 , consistent with disclosed embodiments. Where convenient in describing execution process 2700 , reference may be made to the identifiers of elements depicted in FIG. 22 and described above.
- a compiler or a local unit may receive an indication of a task that needs to be performed.
- the task may include a single operation (e.g., multiplication) or a more complex operation (e.g., convolution between matrixes).
- the task may also indicate a required computation.
- the compiler or configuration manager 2212 may determine a number of words that is required simultaneously to perform the task. For example, configuration a compiler may determine two words are required simultaneously to perform a multiplication between vectors. In another example, a 2D convolution task, configuration manager 2212 may determine that “n” times “m” words are required for a convolution between matrices, where “n” and “m” are the matrices dimensions. Moreover, in step 2704 , configuration manager 2212 may also determine a number of cycles necessary to perform the task.
- a compiler may write words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate. For instance, when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously, a compiler may organize data in multiple memory banks to facilitate access to the different required words within a clock. Moreover, when configuration manager 2212 or the compiler determine a number of cycles is necessary to perform the task, the compiler may write words that are needed in sequential cycles in a single memory bank of the plurality of memory banks to prevent switching of lines between memory banks.
- memory controller 2210 may be configured to read or grant access to at least one first word from a first memory bank from the plurality of memory banks or blocks using a first memory line.
- a processing unit for example one of accelerators 2216 , may process the task using the at least one first word.
- memory controller 2210 may be configured to open a second memory line in a second memory bank. For example, based on the tasks and using the pipelined memory access approach, memory controller 2210 may be configured to open a second memory line in a second memory block where information required for the tasks was written in step 2706 . In some embodiments, the second memory line may be opened when the task in step 2170 is about to be completed. For example, if a task requires 100 clocks, the second memory line may be opened in the 90th clock.
- steps 2708 - 2712 may be executed within one line access cycle.
- memory controller 2210 may be configured to grant access to data from at least one second word from the second memory bank using the second memory line opened in step 2710 .
- a processing unit for example one of accelerators 2216 , may process the task using the at least second word.
- memory controller 2210 may be configured to open a second memory line in the first memory bank. For example, based on the tasks and using the pipelined memory access approach, memory controller 2210 may be configured to open a second memory line to the first memory block. In some embodiments, the second memory line to the first block may be opened when the task in step 2176 is about to be completed.
- steps 2714 - 2718 may be executed within one line access cycle.
- memory controller 2210 may read or grant access to at least one third word from the first memory bank from the plurality of memory banks or blocks using a second memory line in the first bank or a first line in a third bank and continuing in different memory banks.
- Programs based on the written description and disclosed methods are within the skill of an experienced developer.
- the various programs or program modules can be created using any of the techniques known to one skilled in the art or can be designed in connection with existing software.
- program sections or program modules can be designed in or by means of .Net Framework, .Net Compact Framework (and related languages, such as Visual Basic, C, etc.), Java, C++, Objective-C, HTML, HTML/AJAX combinations, XML, or HTML with included Java applets.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Memory System (AREA)
- Multi Processors (AREA)
- Microcomputers (AREA)
- Advance Control (AREA)
- Hardware Redundancy (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
Description
- This application is a continuation of PCT/IB2018/000995, filed on Jul. 30, 2018, which claims the benefit of priority of U.S. Provisional Patent Application No. 62/538,722, filed on Jul. 30, 2017, U.S. Provisional Patent Application No. 62/538,724, filed on Jul. 30, 2017, and U.S. Provisional Patent Application No. 62/548,990, filed on Aug. 23, 2017. All of the foregoing applications are incorporated herein by reference in their entireties.
- The present disclosure relates generally to apparatuses for facilitating memory-intensive operations. In particular, the present disclosure relates to hardware chips that include processing elements coupled to dedicated memory banks.
- As processor speeds and memory sizes both continue to increase, a significant limitation on effective processing speeds is the von Neumann bottleneck. The von Neumann bottleneck results from throughput limitations resulting from conventional computer architecture. In particular, data transfer from memory to the processor is often bottlenecked compared to actual computations undertaken by the processor. Accordingly, the number of clock cycles to read and write from memory increases significantly with memory-intensive processes. These clock cycles result in lower effective processing speeds because reading and writing from memory consumes clock cycles that cannot be used for performing operations on data. Moreover, the computational bandwidth of the processor is generally larger than the bandwidth of the buses that the processor uses to access the memory.
- These bottlenecks are particularly pronounced for memory-intensive processes, such as neural network and other machine learning algorithms; database construction, indexing searching, and querying; and other tasks that include more reading and writing operation than data processing operations.
- Additionally, the rapid growth in volume and granularity of available digital data has created opportunities to develop machine learning algorithms and has enabled new technologies. However, it has also brought cumbersome challenges to the world of data bases and parallel computing. For example, the rise of social media and the Internet of Things (IoT) creates digital data at a record rate. This new data can be used to create algorithms for a variety of purposes, ranging from new advertising techniques to more precise control methods of industrial processes. However, the new data has been difficult to store, process, analyze and handle.
- New data resources can be massive, sometimes in the order of peta- to zettabytes. Moreover, the growth rate of these data resources may exceed data processing capabilities. Therefore, data scientists have turned to parallel data processing techniques, to tackle these challenges. In an effort to increase computation power and handle the massive amount of data, scientists have attempted to create systems and methods capable of parallel intensive computing. But these existing systems and methods have not kept up with the data processing requirements, often because the techniques employed are limited by their demand of additional resources for data management, integration of segregated data, and analysis of the sectioned data.
- To facilitate the manipulation of large data sets, engineers and scientists now seek to improve the hardware used to analyze data. For example, new semiconductor processors or chips (such as those described herein) may be designed specifically for data intensive tasks by incorporating memory and processing functions in a single substrate fabricated in technologies more fitting for memory operations rather than arithmetic computation. With integrated circuits specifically designed for data-intensive tasks, it is possible to meet the new data processing requirements. Nonetheless, this new approach to tackle data processing of large data sets requires solving new issues in chip design and fabrication. For instance, if the new chips designed for data intensive tasks are manufactured with fabrication techniques and architectures used for common chips, they would have a poor performance and/or unacceptable yields. In addition, if the new chips are designed to operate with current data handling methods, they will have poor performance because current methods can limit the chip's ability to handle parallel operations.
- The present disclosure describes solutions for mitigating or overcoming one or more of the problems set forth above, among other problems in the prior art.
- Embodiments consistent with the present disclosure provide apparatuses including hardware processing chips. The disclosed embodiments may use dedicated memory banks paired with processing elements to provide more efficient effective processing speeds than conventional processors. For example, consistent with the disclosed embodiments, the disclosed chips may include dedicated buses between each processing element and its corresponding memory banks. In addition, the disclosed chips may be free of arbiters and/or other hardware that controls timing of data transfers between the processing elements. Other disclosed non-transitory computer-readable media may store instructions for compiling higher-level instructions to lower-level instructions executed by hardware chips disclosed herein.
- Some embodiments of the present disclosure include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; a first plurality of buses, each connecting one of the plurality of processor subunits to its corresponding, dedicated memory bank; and a second plurality of buses, each connecting one of the plurality of processor subunits to another of the plurality of processor subunits.
- Other embodiments consistent with the present disclosure include a memory chip, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; a processing array disposed on the substrate, the processing array including a plurality of address generators, each one of the address generators being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each connecting one of the plurality of address generators to its corresponding, dedicated memory bank.
- Another embodiment consistent with the present disclosure may include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks, wherein each of the discrete memory banks has a capacity greater than one megabyte; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks.
- Still other embodiments consistent with the present disclosure may include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits, wherein the plurality of buses are free of timing hardware logic components such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by timing hardware logic components.
- Other embodiments may include a distributed processor on a memory chip, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated one of the plurality of discrete memory banks, wherein the plurality of buses are free of timing hardware logic components such that data transfers between a processor subunit and a corresponding, dedicated one of the plurality of discrete memory banks and across a corresponding one of the plurality of buses are uncontrolled by timing hardware logic components.
- Other embodiments may include a distributed processor, comprising: a substrate; a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks; and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, each one of the processor subunits being associated with a corresponding, dedicated one of the plurality of discrete memory banks; and a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits, wherein the plurality of processor subunits are configured to execute software that controls timing of data transfers across the plurality of buses to avoid colliding data transfers on at least one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a substrate; a plurality of processor subunits disposed on the substrate, each processor subunit being configured to execute a series of instructions independent from other processor subunits, each series of instructions defining a series of tasks to be performed by a single processor subunit; a corresponding plurality of memory banks disposed on the substrate, each one of the plurality processor subunits being connected to at least one dedicated memory bank not shared by any others of the plurality of processor subunits; and a plurality of buses, each of the plurality of buses connecting one of the plurality of processor subunits to at least one other of the plurality of processor subunits, wherein data transfers across at least one of the plurality of buses are predefined by the series of instructions included in a processor subunit connected to the at least one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks, and wherein each memory bank of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein at least some of the data stored in one particular memory bank from among the plurality of memory banks comprises a duplicate of data stored in at least another one of the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a distributed processor on a memory chip, comprising: a plurality of processor subunits disposed on the memory chip; a plurality of memory banks disposed on the memory chip, wherein each one of the plurality of processor subunits is connected to at least one dedicated memory bank from among the plurality of memory banks, and wherein each memory bank of the plurality of memory banks is configured to store data independent from data stored in other ones of the plurality of memory banks, and wherein at least some of the data stored in one particular memory bank from among the plurality of memory banks comprises a duplicate of data stored in at least another one of the plurality of memory banks; and a plurality of buses, wherein each one of the plurality of buses connects one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks, wherein data transfers across a particular one of the plurality of buses are controlled by a corresponding processor subunit connected to the particular one of the plurality of buses.
- Other embodiments may include a non-transitory computer-readable medium storing instructions for compiling a series of instructions for execution on a memory chip comprising a plurality of processor subunits and a plurality of memory banks, wherein each processor subunit from among the plurality of processor subunits is connected to at least one corresponding, dedicated memory bank from among the plurality of memory banks, the instructions causing at least one processor to: divide the series of instructions into a plurality of groups of sub-series instructions, the division comprising: assigning tasks associated with the series of instructions to different ones of the processor subunits, wherein the processor subunits are spatially distributed among the plurality of memory banks disposed on the memory chip; generating tasks to transfer data between pairs of the processor subunits of the memory chip, each pair of processor subunits being connected by a bus, and grouping the assigned and generated tasks into the plurality of groups of sub-series instructions, wherein each of the plurality of groups of sub-series instructions corresponds to a different one of the plurality of processor sub-units; generate machine code corresponding to each of the plurality of groups of subs-series instructions; and assign the generated machine code corresponding to each of the plurality of groups of subs-series instructions to a corresponding one of the plurality of processor subunits in accordance with the division.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a bank row decoder, a bank column decoder, and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank, each memory sub-bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells, wherein the sub-bank row decoders and the sub-bank column decoders are connected to the bank row decoder and the bank column decoder.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a bank controller and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank, each memory sub-bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells, wherein the sub-bank row decoders and the sub-bank column decoders process read and write requests from the bank controller.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a having a bank controller for processing reads and writes to locations on the memory bank, each memory bank comprising: a plurality of memory mats, each memory mat having a plurality of memory cells and having a mat row decoder and a mat column decoder, wherein the mat row decoders and the mat column decoders process read and write requests from the sub-bank controller.
- Other embodiments may include a memory chip, comprising: a plurality of memory banks, each memory bank having a bank controller, a row decoder, and a column decoder for allowing reads and writes to locations on the memory bank; and a plurality of buses connecting each controller of the plurality of bank controllers to at least one other controller of the plurality of bank controllers.
- One aspect of the present disclosure is directed to a memory device including a substrate; a plurality of memory banks on the substrate; a plurality of primary logic blocks on the substrate, each of the plurality of primary logic blocks being connected to at least one of the plurality of memory banks; a plurality of redundant blocks on the substrate, each of the plurality of redundant blocks being connected to at least one of the memory banks, each of the plurality of redundant blocks replicating at least one of the plurality of primary logic blocks; and a plurality of configuration switches on the substrate, each one of the plurality of the configuration switches being connected to at least one of the plurality of primary logic blocks or to at least one of the plurality of redundant blocks. In the memory device, upon detection of a fault associated with one of the plurality of primary logic blocks: a first configuration switch of the plurality of configuration switches may be configured to disable the one of the plurality of primary logic blocks, and a second configuration switch of the plurality of configuration switches may be configured to enable one of the plurality of redundant blocks that replicates the one of the plurality of primary logic blocks.
- Another aspect of the present disclosure is directed to a distributed processor on a memory chip including a substrate; an address manager on the substrate; a plurality of primary logic blocks on the substrate, each of the plurality of primary logic blocks being connected to at least one of the plurality of memory banks; a plurality of redundant blocks on the substrate, each of the plurality of redundant blocks being connected to at least one of the plurality of memory banks, each of the plurality of redundant blocks replicating at least one of the plurality of primary logic blocks; and a bus on the substrate connected to each of the plurality of primary logic blocks, each of the plurality of redundant blocks, and the address manager. In the processor may assign running ID numbers to blocks in the plurality of primary logic blocks that pass a testing protocol; assign illegal ID numbers to blocks in the plurality of primary logic blocks that do not pass the testing protocol; and assign running ID numbers to blocks in the plurality of redundant blocks that pass the testing protocol.
- Yet another aspect of the present disclosure is directed to a method for configuring a distributed processor on a memory chip. The method may include: testing each one of a plurality of primary logic blocks on the substrate of the memory chip for at least one circuit functionality; identifying at least one faulty logic block in the plurality of primary logic blocks based on the testing results, the at least one faulty logic block being connected to at least one memory bank disposed on the substrate of the memory chip; testing at least one redundant block on the substrate of the memory chip for the at least one circuit functionality, the at least one redundant block replicating the at least one faulty logic block and being connected to the at least one memory bank; disabling the at least one faulty logic block by applying an external signal to a deactivation switch, the deactivation switch being connected with the at least one faulty logic block and being disposed on the substrate of the memory chip; and enabling the at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip.
- Another aspect of the present disclosure is directed to a method for configuring a distributed processor on a memory chip. The method may include enabling a plurality of primary logic blocks and a plurality of redundant blocks on the substrate of the memory; testing each one of the plurality of primary logic blocks on the substrate of the memory chip for at least one circuit functionality; identifying at least one faulty logic block in the plurality of primary logic blocks based on the testing results, the at least one faulty logic block being connected to at least one memory bank disposed on the substrate of the memory chip; testing at least one redundant block on the substrate of the memory chip for the at least one circuit functionality, the at least one redundant block replicating the at least one faulty logic block and being connected to the at least one memory bank; and disabling at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip.
- One aspect of the present disclosure is directed to a processing device. The processing device may include a substrate; a plurality of memory banks on the substrate; a memory controller on the substrate connected to each one of the plurality of memory banks; and a plurality of processing units on the substrate, each one of the plurality of processing units being connected to the memory controller, the plurality of processing units including a configuration manager. In the processing device, the configuration manager is configured to receive a first indication of a task to be performed, the task requiring at least one computation; signal at least one selected processing unit from the plurality of processing units based upon a capability of the selected processing unit for performing the at least one computation; and transmitting a second indication to the at least one selected processing unit, and the memory controller is configured to route data from at least two memory banks to the at least one selected processing unit using at least one communication line, the at least one communication line being connected to the at least two memory banks and the at least one selected processing unit via the memory controller.
- Another aspect of the present disclosure is directed to a method performed for operating a distributed memory device. The method may include: compiling, by a compiler, a task for the distributed memory device, the task requiring at least one computation, the compiling may include determining a number of words that are required simultaneously to perform the task, and providing instructions for writing words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously; receiving, by a configuration manager disposed on the substrate, an indication to perform the task; and in response to receiving the indication, configuring a memory controller disposed in the substrate to: within a first line access cycle: access at least one first word from a first memory bank from the plurality of memory banks using a first memory line, send the at least one first word to at least one processing unit, and open a first memory line in the second memory bank to access a second address from the second memory bank from the plurality of memory banks, and within a second line access cycle: access at least one second word from the second memory bank using the first memory line, send the at least one second word to at least one processing unit, and access a third address from the first memory bank using a second memory line in the first bank.
- Yet another aspect of the present disclosure is directed to a non-transitory computer-readable medium that stores instructions that, when executed by at least one processor, cause the at least one processor to determine a number of words that are required simultaneously to perform a task, the task requiring at least one computation; write words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously; transmit an indication to perform the task to a configuration manager disposed on the substrate; and transmit instructions to configure a memory controller disposed on the substrate to, within a first line access cycle: access at least one first word from a first memory bank from the plurality of memory banks using a first memory line, send the at least one first word to at least one processing unit, and open a first memory line in the second memory bank to access a second address from the second memory bank from the plurality of memory banks, and within a second line access cycle: access at least one second word from the second memory bank using the first memory line, send the at least one second word to at least one processing unit, and access a third address from the first memory bank using a second memory line in the first bank.
- Consistent with other disclosed embodiments, non-transitory computer-readable storage media may store program instructions, which are executed by at least one processing device and perform any of the methods described herein.
- The foregoing general description and the following detailed description are exemplary and explanatory only and are not restrictive of the claims.
- The accompanying drawings, which are incorporated in and constitute a part of this disclosure, illustrate various disclosed embodiments. In the drawings:
-
FIG. 1 is a diagrammatic representation of a central processing unit (CPU). -
FIG. 2 is a diagrammatic representation of a graphics processing unit (GPU). -
FIG. 3A is a diagrammatic representation of an embodiment of an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 3B is a diagrammatic representation of another embodiment of an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 4 is a diagrammatic representation of a generic command executed by an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 5 is a diagrammatic representation of a specialized command executed by an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 6 is a diagrammatic representation of a processing group for use in an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 7A is a diagrammatic representation of a rectangular array of processing groups consistent with the disclosed embodiments. -
FIG. 7B is a diagrammatic representation of an elliptical array of processing groups consistent with the disclosed embodiments. -
FIG. 7C is a diagrammatic representation an array of hardware chips consistent with the disclosed embodiments. -
FIG. 7D is a diagrammatic representation another array of hardware chips consistent with the disclosed embodiments. -
FIG. 8 is a flowchart depicting an exemplary method for compiling a series of instructions for execution on an exemplary hardware chip consistent with the disclosed embodiments. -
FIG. 9 is a diagrammatic representation of a memory bank. -
FIG. 10 is a diagrammatic representation of a memory bank. -
FIG. 11 is a diagrammatic representation of an embodiment of an exemplary memory bank with sub-bank controls consistent with the disclosed embodiments. -
FIG. 12 is a diagrammatic representation of another embodiment of an exemplary memory bank with sub-bank controls consistent with the disclosed embodiments. -
FIG. 13 is a block diagram of an exemplary memory chip, consistent with disclosed embodiments. -
FIG. 14 is a block diagram of an exemplary redundant logic block set, consistent with disclosed embodiments. -
FIG. 15 is a block diagram for an exemplary logic block, consistent with disclosed embodiments. -
FIG. 16 are block diagrams of exemplary logic blocks connected with a bus, consistent with disclosed embodiments. -
FIG. 17 is a block diagram for exemplary logic blocks connected in series, consistent with disclosed embodiments. -
FIG. 18 is a block diagram of exemplary logic blocks connected in a two-dimension array, consistent with disclosed embodiments. -
FIG. 19 is a block diagram for exemplary logic blocks in a complex connection, consistent with disclosed embodiments. -
FIG. 20 is an exemplary flow chart illustrating a redundant block enabling process, consistent with disclosed embodiments. -
FIG. 21 is an exemplary flow chart illustrating an address assignment process, consistent with disclosed embodiments. -
FIG. 22 provides block diagrams for exemplary processing devices, consistent with disclosed embodiments. -
FIG. 23 is a block diagram of an exemplary processing device, consistent with disclosed embodiments. -
FIG. 24 includes exemplary memory configuration diagrams, consistent with disclosed embodiments. -
FIG. 25 is an exemplary flowchart illustrating a memory configuration process, consistent with disclosed embodiments. -
FIG. 26 is an exemplary flowchart illustrating a memory read process, consistent with disclosed embodiments. -
FIG. 27 is an exemplary flowchart illustrating a process execution, consistent with disclosed embodiments. - The following detailed description refers to the accompanying drawings. Wherever convenient, the same reference numbers are used in the drawings and the following description to refer to the same or similar parts. While several illustrative embodiments are described herein, modifications, adaptations and other implementations are possible. For example, substitutions, additions or modifications may be made to the components illustrated in the drawings, and the illustrative methods described herein may be modified by substituting, reordering, removing, or adding steps to the disclosed methods. Accordingly, the following detailed description is not limited to the disclosed embodiments and examples. Instead, the proper scope is defined by the appended claims.
- Processor Architecture
- As used throughout this disclosure, the term “hardware chip” refers to a semiconductor wafer (such as silicon or the like) on which one or more circuit elements (such as transistors, capacitors, resistors, and/or the like) are formed. The circuit elements may form processing elements or memory elements. A “processing element” refers to one or more circuit elements that, together, perform at least one logic function (such as an arithmetic function, a logic gate, other Boolean operations, or the like). A processing element may be a general-purpose processing element (such as a configurable plurality of transistors) or a special-purpose processing element (such as a particular logic gate or a plurality of circuit elements designed to perform a particular logic function). A “memory element” refers to one or more circuit elements that can be used to store data. A “memory element” may also be referred to as a “memory cell.” A memory element may be dynamic (such that electrical refreshes are required to maintain the data store), static (such that data persists for at least some time after power loss), or non-volatile memories.
- Processing elements may be joined to form processor subunits. A “processor subunit” may thus comprise a smallest grouping of processing elements that may execute at least one task or instructions (e.g., of a processor instruction set). For example, a subunit may comprise one or more general-purpose processing elements configured to execute instructions together, one or more general-purpose processing elements paired with one or more special-purpose processing elements configured to execute instructions in a complementary fashion, or the like. The processor subunits may be arranged on a substrate (e.g., a wafer) in an array. Although the “array” may comprise a rectangular shape, any arrangement of the subunits in the array may be formed on the substrate.
- Memory elements may be joined to form memory banks. For example, a memory bank may comprise one or more lines of memory elements linked along at least one wire (or other conductive connection). Furthermore, the memory elements may be linked along at least one addition wire in another direction. For example, the memory elements may be arranged along wordlines and bitlines, as explained below. Although the memory bank may comprise lines, any arrangement of the elements in the bank may be used to form the bank on the substrate. Moreover, one or more banks may be electrically joined to at least one memory controller to form a memory array. Although the memory array may comprise a rectangular arrangement of the banks, any arrangement of the banks in the array may be formed on the substrate.
- As further used throughout this disclose, a “bus” refers to any communicative connection between elements of a substrate. For example, a wire or a line (forming an electrical connection), an optical fiber (forming an optical connection), or any other connection conducting communications between components may be referred to as a “bus.”
- Conventional processors pair general-purpose logic circuits with shared memories. The shared memories may store both instruction sets for execution by the logic circuits as well as data used for and resulting from execution of the instruction sets. As described below, some conventional processors use a caching system to reduce delays in performing pulls from the shared memory; however, conventional caching systems remain shared. Conventional processors include central processing units (CPUs), graphics processing units (GPUs), various application-specific integrated circuits (ASICs), or the like.
FIG. 1 shows an example of a CPU, andFIG. 2 shows an example of a GPU. - As shown in
FIG. 1 , aCPU 100 may comprise aprocessing unit 110 that includes one or more processor subunits, such asprocessor subunit 120 a andprocessor subunit 120 b. Although not depicted inFIG. 1 , each processor subunit may comprise a plurality of processing elements. Moreover, theprocessing unit 110 may include one or more levels of on-chip cache. Such cache elements are generally formed on the same semiconductor die asprocessing unit 110 rather than being connected toprocessor subunits processor subunits cache 130 may be formed on the same die asprocessor subunits processor subunits - Moreover, processing
unit 110 communicates with sharedmemory 140 a andmemory 140 b. For example,memories processor subunits memories processor subunits memories processing unit 110 acting as a bottleneck when the clock speeds ofprocessing unit 110 exceed data transfer speeds of the buses. This is generally true for conventional processors, resulting in lower effective processing speeds than the stated processing speeds based on clock rate and number of transistors. - As shown in
FIG. 2 , similar deficiencies persist in GPUs. AGPU 200 may comprise aprocessing unit 210 that includes one or more processor subunits (e.g.,subunits processing unit 210 may include one or more levels of on-chip cache and/or register files. Such cache elements are generally formed on the same semiconductor die asprocessing unit 210. Indeed, in the example ofFIG. 2 ,cache 210 is formed on the same die asprocessing unit 210 and shared amongst all of the processor subunits, whilecaches - Moreover, processing
unit 210 communicates with sharedmemories memories processing unit 210 may use sharedmemories memories processing unit 210 acting as a bottleneck, similar to the bottleneck described above for CPUs. - Overview of Disclosed Hardware Chips
-
FIG. 3A is a diagrammatic representation of an embodiment depicting anexemplary hardware chip 300.Hardware chip 300 may comprise a distributed processor designed to mitigate the bottlenecks described above for CPUs, GPUs, and other conventional processors. A distributed processor may include a plurality of processor subunits distributed spatially on a single substrate. Moreover, as explained above, in distributed processors of the present disclosure, corresponding memory banks are also spatially distributed on the substrate. In some embodiments, a distributed processor may be associated with a set of instructions, and each one of the processor subunits of the distributed processor may be responsible for performing one or more tasks included in the set of instructions. - As depicted in
FIG. 3A ,hardware chip 300 may comprise a plurality of processor subunits, e.g., logic andcontrol subunits FIG. 3A , each processor subunit may have a dedicated memory instance. For example, logic andcontrol subunit 320 a is operably connected todedicated memory instance 330 a, logic andcontrol subunit 320 b is operably connected todedicated memory instance 330 b, logic andcontrol subunit 320 c is operably connected todedicated memory instance 330 c, logic andcontrol subunit 320 d is operably connected todedicated memory instance 330 d, logic andcontrol subunit 320 e is operably connected todedicated memory instance 330 e, logic andcontrol subunit 320 f is operably connected todedicated memory instance 330 f, logic and control subunit 320 g is operably connected todedicated memory instance 330 g, and logic andcontrol subunit 320 h is operably connected todedicated memory instance 330 h. - Although
FIG. 3A depicts each memory instance as a single memory bank,hardware chip 300 may include two or more memory banks as a dedicated memory instance for a processor subunit onhardware chip 300. Furthermore, althoughFIG. 3A depicts each processor subunit as comprising both a logic component and a control for the dedicated memory bank(s),hardware chip 300 may use controls for the memory banks that are separate, at least in part, from the logic components. Moreover, as depicted inFIG. 3A , two or more processor subunits and their corresponding memory banks may be grouped, e.g., intoprocessing groups hardware chip 300 is formed. Accordingly, a processing group may include further controls for the memory banks in the group, e.g., controls 340 a, 340 b, 340 c, and 340 d. Additionally or alternatively, a “processing group” may represent a logical grouping for the purposes of compiling code for execution onhardware chip 300. Accordingly, a compiler for hardware chip 300 (further described below) may divide an overall set of instructions between the processing groups onhardware chip 300. - Furthermore, host 350 may provide instructions, data, and other input to
hardware chip 300 and read output from the same. Accordingly, a set of instructions may be executed entirely on a single die, e.g., the die hostinghardware chip 300. Indeed, the only communications off-die may include the loading of instructions tohardware chip 300, any input sent tohardware chip 300, and any output read fromhardware chip 300. Accordingly, all calculations and memory operations may be performed on-die (on hardware chip 300) because the processor subunits ofhardware chip 300 communicate with dedicated memory banks ofhardware chip 300. -
FIG. 3B is a diagrammatic representation of an embodiment depicting anotherexemplary hardware chip 300′. Although depicted as an alternative tohardware chip 300, the architecture depicted inFIG. 3B may be combined, at least in part, with the architecture depicted inFIG. 3A . - As depicted in
FIG. 3B ,hardware chip 300′ may comprise a plurality of processor subunits, e.g.,processor subunits FIG. 3B , each processor subunit may have a plurality of dedicated memory instances. For example,processor subunit 350 a is operably connected todedicated memory instances processor subunit 350 b is operably connected todedicated memory instances processor subunit 350 c is operably connected todedicated memory instances processor subunit 350 d is operably connected todedicated memory instances FIG. 3B , the processor subunits and their corresponding memory banks may be grouped, e.g., intoprocessing groups hardware chip 300′ is formed and/or a logical grouping for the purposes of compiling code for execution onhardware chip 300′. - As further depicted in
FIG. 3B , the processor subunits may communicate with each other via buses. For example, as shown inFIG. 3B ,processor subunit 350 a may communicate withprocessor subunit 350 b viabus 360 a, withprocessor subunit 350 c viabus 360 c, and withprocessor subunit 350 d viabus 360 f. Similarly,processor subunit 350 b may communicate withprocessor subunit 350 a viabus 360 a (as described above), withprocessor subunit 350 c viabus 360 e, and withprocessor subunit 350 d viabus 360 d. In addition,processor subunit 350 c may communicate withprocessor subunit 350 a viabus 360 c (as described above), withprocessor subunit 350 b viabus 360 e (as described above), and withprocessor subunit 350 d viabus 360 b. Accordingly,processor subunit 350 d may communicate withprocessor subunit 350 a viabus 360 f (as described above), withprocessor subunit 350 b viabus 360 d (as described above), and withprocessor subunit 350 c viabus 360 b (as described above). One of ordinary skill will understand that fewer buses than depicted inFIG. 3B may be used. For example,bus 360 e may be eliminated such that communications betweenprocessor subunit processor subunit 350 a and/or 350 d Similarly,bus 360 f may be eliminated such that communications betweenprocessor subunit 350 a andprocessor subunit 350 d pass throughprocessor subunit - Moreover, one of ordinary skill will understand that architectures other than those depicted in
FIGS. 3A and 3B may be used. For example, an array of processing groups, each with a single processor subunit and memory instance, may be arranged on a substrate. Processor subunits may additionally or alternatively form part of controllers for corresponding dedicated memory banks, part of controllers for memory mats of corresponding dedicated memory, or the like. - In view of the architecture described above,
hardware chips hardware chips hardware chips - Configuring the Disclosed Hardware Chips
- The hardware chip architecture described above may be configured for execution of code. For example, each processor subunit may individually execute code (defining a set of instructions) apart from other processor subunits in the hardware chip. Accordingly, rather than relying on an operating system to manage multithreading or using multitasking (which is concurrency rather than parallelism), hardware chips of the present disclosure may allow for processor subunits to operate fully in parallel.
- In addition to a fully parallel implementation described above, at least some of the instructions assigned to each processor subunit may be overlapping. For example, a plurality of processor subunits on a distributed processor may execute overlapping instructions as, for example, an implementation of an operating system or other management software, while executing non-overlapping instructions in order to perform parallel tasks within the context of the operating system or other management software.
-
FIG. 4 depicts anexemplary process 400 for executing a generic command withprocessing group 410. For example,processing group 410 may comprise a portion of a hardware chip of the present disclosure, e.g.,hardware chip 300,hardware chip 300′, or the like. - As depicted in
FIG. 4 , a command may be sent toprocessor subunit 430, which is paired withdedicated memory instance 420. An external host (e.g., host 350) may send the command toprocessing group 410 for execution. Alternatively, host 350 may have sent an instruction set including the command for storage inmemory instance 420 such thatprocessor subunit 430 may retrieve the command frommemory instance 420 and execute the retrieved command Accordingly, the command may be executed by processingelement 440, which is a generic processing element configurable to execute the received command. Moreover,processing group 410 may include acontrol 460 formemory instance 420. As depicted inFIG. 4 ,control 460 may perform any reads and/or writes tomemory instance 420 required by processingelement 440 when executing the received command After execution of the command,processing group 410 may output the result of the command, e.g., to the external host or to a different processing group on the same hardware chip. - In some embodiments, as depicted in
FIG. 4 ,processor subunit 430 may further include anaddress generator 450. An “address generator” may comprise a plurality of processing elements that are configured to determine addresses in one or more memory banks for performing reads and writes and may also perform operations on the data located at the determined addresses (e.g., addition, subtraction, multiplication, or the like). For example,address generator 450 may determine addresses for any reads or writes to memory. In one example,address generator 450 may increase efficiency by overwriting a read value with a new value determined based on the command when the read value is no longer needed. Additionally or alternatively,address generator 450 may select available addresses for storage of results from execution of the command This may allow for scheduling of result read-off for a later clock cycle, when it is more convenient for the external host. In another example,address generator 450 may determine addresses to read from and write to during a multi-cycle calculation, such as a vector or matrix multiply-accumulate calculation. Accordingly,address generator 450 may maintain or calculate memory addresses for reading data and writing intermediate results of the multi-cycle calculation such thatprocessor subunit 430 may continue processing without having to store these memory addresses. -
FIG. 5 depicts anexemplary process 500 for executing a specialized command withprocessing group 510. For example,processing group 510 may comprise a portion of a hardware chip of the present disclosure, e.g.,hardware chip 300,hardware chip 300′, or the like. - As depicted in
FIG. 5 , a specialized command (e.g., a multiply-accumulate command) may be sent toprocessing element 530, which is paired withdedicated memory instance 520. An external host (e.g., host 350) may send the command toprocessing element 530 for execution. Accordingly, the command may be executed at a given signal from the host by processingelement 530, a specialized processing element configurable to execute particular commands (including the received command). Alternatively,processing element 530 may retrieve the command frommemory instance 520 for execution. Thus, in the example ofFIG. 5 ,processing element 530 is a multiply-accumulate (MAC) circuit configured to execute MAC commands received from the external host or retrieved frommemory instance 520. After execution of the command,processing group 410 may output the result of the command, e.g., to the external host or to a different processing group on the same hardware chip. Although depicted with a single command and a single result, a plurality of commands may be received or retrieved and executed, and a plurality of results may be combined onprocessing group 510 before output. - Although depicted as a MAC circuit in
FIG. 5 , additional or alternative specialized circuits may be included inprocessing group 510. For example, a MAX-read command (which returns the max value of a vector) a MAXO-read command (a common function also termed a rectifier, which returns the entire vector but also does MAX with 0), or the like may be implemented. - Although depicted separately, the
generalized processing group 410 ofFIG. 4 and thespecialized processing group 510 ofFIG. 5 may be combined. For example, a generic processor subunit may be coupled to one or more specialized processor subunits to form a processor subunit. Accordingly, the generic processor subunit may be used for all instructions not executable by the one or more specialized processor subunits. - One of ordinary skill will understand that neural network implementation and other memory-intensive tasks may be handled with specialized logic circuits. For example, database queries, packet inspection, string comparison, and other functions may increase in efficiency if executed by the hardware chips described herein.
- A Memory-Based Architecture for Distributed Processing
- On hardware chips consistent with the present disclosure, dedicated buses may transfer data between processor subunits on the chip and/or between the processor subunits and their corresponding dedicated memory banks. The use of dedicated buses may reduce arbitration costs because competing requests are either not possible or easily avoided using software rather than hardware.
-
FIG. 6 schematically depicts a diagrammatic representation of aprocessing group 600.Processing group 600 may be for use in a hardware chip, e.g.,hardware chip 300,hardware chip 300′, or the like.Processor subunit 610 may be connected viabuses 630 tomemory 620.Memory 620 may comprise a Randomly Accessible Memory (RAM) element that stores data and code for execution byprocessor subunit 610. In some embodiments,memory 620 may be an N-Way memory (wherein N is a number equal to or larger than 1 that implies the number of segments in an interleaved memory 620). Becauseprocessor subunit 610 is coupled tomemory 620 dedicated toprocessor subunit 610 viabus 630, N may be kept relatively small without compromising the execution performance. This represents an improvement over conventional multiway register files or caches where a lower N generally results in lower execution performance, and a higher N generally results in large area and power loss. - The size of
memory 620, the number of ways, and the width ofbus 630 may be adjusted to meet the requirements of tasks and application implementations of a system usingprocessing group 600 according to, for instance, the size of data involved in the task or tasks.Memory element 620 may comprise one or more types of memory known in the art, e.g., volatile memory (such as RAM, DRAM, SRAM, phase-change RAM (PRAM), magnetoresistive RAM (MRAM), resistive RAM (ReRAM), or the like) or non-volatile memory (such as flash or ROM). According to some embodiments, a portion ofmemory element 620 may comprise a first memory type, while another portion may comprise another memory type. For instance, the code region of amemory element 620 may comprise a ROM element, while a data region of thememory element 620 may comprise a DRAM element. Another example for such partitioning is storing the weights of a neural network in flash while storing the data for calculation in DRAM. -
Processor subunit 610 comprises aprocessing element 640 that may comprise a processor. The processor can be pipelined or not pipelined, a customized Reduced Instruction Set Computing (RISC) element or other processing scheme, implemented on any commercial Integrated Circuit (IC) known in the art (such as ARM, ARC, RISC-V, etc.), as appreciated by one of ordinaryskill Processing element 640 may comprise a controller that, in some embodiments, includes an Arithmetic Logic Unit (ALU) or other controller. - According to some embodiments,
processing element 640, which executes received or stored code, may comprise a generic processing element and, therefore, be flexible and capable of performing a wide variety of processing operations. Non-dedicated circuitry typically consumes more power than specific-operation-dedicated circuitry when comparing the power consumed during performance for a specific operation. Therefore, when performing specific complex arithmetic calculations,processing element 640 may consume more power and perform less efficiently than dedicated hardware. Therefore, according to some embodiments, a controller ofprocessing element 640 may be designed to perform specific operations (e.g., addition or “move” operations). - In one example, the specific operations may be performed by one or
more accelerators 650. Each accelerator may be dedicated and programmed to perform a specific calculation (such as multiplication, floating point vector operations, or the like). By using accelerator(s), the average power consumed per calculation per processor subunit may be lowered, and the calculation throughput henceforth increases. Accelerator(s) 650 may be chosen according to an application that the system is designed to implement (e.g., execution of neural networks, execution of database queries, or the like). Accelerator(s) 650 may be configured by processingelement 640 and may operate in tandem therewith for lowering power consumption and accelerating calculations and computations. The accelerators may additionally or alternatively be used to transfer data between memory and MUXs/DEMUXs/input/output ports (e.g.,MUX 650 and DEMUX 660) ofprocessing group 600, such as a smart DMA (direct memory access) peripheral. - Accelerator(s) 650 may be configured to perform a variety of functions. For instance, one accelerator may be configured to perform 16-bit floating point calculation or 8-bit integer calculations, which are often used in neural networks. Another example of an accelerator function is a 32-bit floating point calculation, which is often used during a training stage of a neural network. Yet another example of an accelerator function is query processing, such as that used in databases. In some embodiments, accelerator(s) 650 may comprise specialized processing elements to perform these functions and/or may be configured according to configuration data, stored on the
memory element 620, such that it may be modified. - Accelerator(s) 650 may additionally or alternatively implement a configurable scripted list of memory movements to time movements of data to/from
memory 620 or to/from other accelerators and/or inputs/outputs. Accordingly, as explained further below, all the data movement inside the hardware chip usingprocessing group 600 may use software synchronization rather than hardware synchronization. For example, an accelerator in one processing group (e.g., group 600) may transfer data from its input to its accelerator every tenth cycle and then output data at the next cycle, thereby letting the information flow from the memory of the processing group to another one. - As further depicted in
FIG. 6 , in some embodiments,processing group 600 may further comprise at least one input multiplexer (MUX) 660 connected to its input port and at least oneoutput DEMUX 670 connected to its output port. These MUXs/DEMUXs may be controlled by control signals (not shown) fromprocessing element 640 and/or from one of accelerator(s) 650, determined according to a current instruction being carried out by processingelement 640 and/or the operation executed by an accelerator of accelerator(s) 650. In some scenarios,processing group 600 may be required (according to a predefined instruction from its code memory) to transfer data from its input port to its output port. Accordingly, one or more of the input MUXs (e.g., MUX 660) may be directly connected via one or more buses to an output DEMUX (e.g., DEMUX 670), in addition to each of the DEMUXs/MUXs being connected toprocessing element 640 and accelerator(s) 650. - The
processing group 600 ofFIG. 6 may be arrayed to form a distributed processor, for example, as depicted inFIG. 7A . The processing groups may be disposed onsubstrate 710 to form an array. In some embodiments,substrate 710 may comprise a semiconductor substrate, such as silicon. Additionally or alternatively,substrate 710 may comprise a circuit board, such as a flexible circuit board. - As depicted in
FIG. 7A ,substrate 710 may include, disposed thereon, a plurality of processing groups, such asprocessing group 600. Accordingly,substrate 710 includes a memory array that includes a plurality of banks, such asbanks substrate 710 includes a processing array that may include a plurality of processor subunits, such assubunits - Furthermore, as explained above, each processing group may include a processor subunit and one or more corresponding memory banks dedicated to the processor subunit. Accordingly, as depicted in
FIG. 7A , each subunit is associated with a corresponding, dedicated memory bank, e.g.:Processor subunit 730 a is associated withmemory bank 720 a,processor subunit 730 b is associated withmemory bank 720 b,processor subunit 730 c is associated withmemory bank 720 c,processor subunit 730 d is associated withmemory bank 720 d,processor subunit 730 e is associated withmemory bank 720 e,processor subunit 730 f is associated withmemory bank 720 f,processor subunit 730 g is associated withmemory bank 720 g,processor subunit 730 h is associated withmemory bank 720 h. - To allow each processor subunit to communicate with its corresponding, dedicated memory bank(s),
substrate 710 may include a first plurality of buses connecting one of the processor subunits to its corresponding, dedicated memory bank(s). Accordingly,bus 740 a connectsprocessor subunit 730 a tomemory bank 720 a,bus 740 b connectsprocessor subunit 730 b tomemory bank 720 b,bus 740 c connectsprocessor subunit 730 c tomemory bank 720 c,bus 740 d connectsprocessor subunit 730 d tomemory bank 720 d,bus 740 e connectsprocessor subunit 730 e tomemory bank 720 e,bus 740 f connectsprocessor subunit 730 f tomemory bank 720 f,bus 740 g connectsprocessor subunit 730 g tomemory bank 720 g, andbus 740 h connectsprocessor subunit 730 h tomemory bank 720 h. Moreover, to allow each processor subunit to communicate with other processor subunits,substrate 710 may include a second plurality of buses connecting one of the processor subunits to another of the processor subunits. In the example ofFIG. 7A ,bus 750 a connectsprocessor subunit 730 a toprocessor subunit 750 e,bus 750 b connectsprocessor subunit 730 a toprocessor subunit 750 b,bus 750 c connectsprocessor subunit 730 b toprocessor subunit 750 f,bus 750 d connectsprocessor subunit 730 b toprocessor subunit 750 c,bus 750 e connectsprocessor subunit 730 c toprocessor subunit 750 g,bus 750 f connectsprocessor subunit 730 c toprocessor subunit 750 d,bus 750 g connectsprocessor subunit 730 d toprocessor subunit 750 h,bus 750 h connectsprocessor subunit 730 h toprocessor subunit 750 g,bus 750 i connectsprocessor subunit 730 g toprocessor subunit 750 g, andbus 750 j connectsprocessor subunit 730 f toprocessor subunit 750 e. - Accordingly, in the example arrangement shown in
FIG. 7A , the plurality of logic processor subunits is arranged in at least one row and at least one column. The second plurality of buses connect each processor subunit to at least one adjacent processor subunit in the same row and to at least one adjacent processor subunit in the same column.FIG. 7A may be referred to as a “partial tile connection.” - The arrangement shown in
FIG. 7A may be modified to form a “full tile connection.” A full tile connection includes additional buses connecting diagonal processor subunits. For example, the second plurality of buses may include additional buses betweenprocessor subunit 730 a andprocessor subunit 730 f, betweenprocessor subunit 730 b andprocessor subunit 730 e, betweenprocessor subunit 730 b andprocessor subunit 730 g, betweenprocessor subunit 730 c andprocessor subunit 730 f, betweenprocessor subunit 730 c andprocessor subunit 730 h, and betweenprocessor subunit 730 d andprocessor subunit 730 g. - A full tile connection may be used for convolution calculations, in which data and results stored in a near processor subunit are used. For example, during convolutional image processing, each processor subunit may receive a tile of the image (such as a pixel or a group of pixels). In order to calculate the convolution results, each processor subunit may acquire data from all eight adjacent processor subunits, each of which have received a corresponding tile. In a partial tile connection, the data from the diagonal adjacents may be passed through other adjacent processor subunits connected to the processor subunit. Accordingly, the distributed processor on a chip may be an artificial intelligence accelerator processor.
- In a specific example of a convolutional calculation, an N×M image may be divided across a plurality of processor subunits. Each processor subunit may perform a convolution with an A×B filter on its corresponding tile. To perform the filtering on one or more pixels on a boundary between tiles, each processor subunit may require data from neighboring processor subunits having tiles including pixels on the same boundary. Accordingly, the code generated for each processor subunit configures the subunit to calculate the convolutions and pull from one of the second plurality of buses whenever data is needed from an adjacent subunit. Corresponding commands to output data to the second plurality of buses are provided to the subunits to ensure proper timing of needed data transfers.
- The partial tile connection of
FIG. 7A may be modified to be an N-partial tile connection. In this modification, the second plurality of buses may further connect each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits) in the four directions along which the buses ofFIG. 7A run (i.e., up, down, left, and right). A similar modification may be made to the full-tile connection (to result in an N-full tile connection) such that the second plurality of buses further connects each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits) in the four directions along which the buses ofFIG. 7A run in additional to the two diagonal directions. - Other arrangements are possible. For example, in the arrangement shown in
FIG. 7B ,bus 750 a connectsprocessor subunit 730 a toprocessor subunit 730 d,bus 750 b connectsprocessor subunit 730 a toprocessor subunit 730 b,bus 750 c connectsprocessor subunit 730 b toprocessor subunit 730 c, andbus 750 d connectsprocessor subunit 730 c toprocessor subunit 730 d. Accordingly, in the example arrangement shown inFIG. 7B , the plurality of processor subunits is arranged in a star pattern. The second plurality of buses connect each processor subunit to at least one adjacent processor subunit within the star pattern. - Further arrangements (not shown) are possible. For example, a neighbor connection arrangement may be used such that the plurality of processor subunits is arranged in one or more lines (e.g., similar to that depicted in
FIG. 7A ). In a neighbor connection arrangement, the second plurality of buses connect each processor subunit to a processor subunit to the left in the same line, to a processor subunit to the right in the same line, to the processor subunits both to the left and to the right in the same line, etc. - In another example, an N-linear connection arrangement may be used. In an N-linear connection arrangement, the second plurality of buses connect each processor subunit to processor subunits within a threshold distance of the processor subunit (e.g., within n processor subunits). The N-linear connection arrangement may be used with the line array (described above), the rectangular array (depicted in
FIG. 7A ), the elliptical array (depicted inFIG. 7B ), or any other geometrical array. - In yet another example, an N-log connection arrangement may be used. In an N-log connection arrangement, the second plurality of buses connect each processor subunit to processor subunits within a threshold power of two distance of the processor subunit (e.g., within 2n processor subunits). The N-log connection arrangement may be used with the line array (described above), the rectangular array (depicted in
FIG. 7A ), the elliptical array (depicted inFIG. 7B ), or any other geometrical array. - Any of the connection schemes described above may be combined for use in the same hardware chip. For example, a full tile connection may be used in one region while a partial tile connection is used in another region. In another example, an N-linear connection arrangement may be used in one region while an N-full tile connection is used in another region.
- Alternatively to or in addition with dedicated buses between processor subunits of the memory chip, one or more shared buses may be used to interconnect all (or a subset of) the processor subunits of a distributed processor. Collisions on the shared buses may still be avoided by timing data transfers on the shared buses using code executed by the processor subunits, as explained further below. Additionally with or alternatively to shared buses, configurable buses may be used to dynamically connect processor subunits to form groups of processors units connected to separated buses. For example, the configurable buses may include transistors or other mechanisms that may be controlled by processor subunit to direct data transfers to a selected processor subunit.
- In both
FIGS. 7A and 7B , the plurality of processor subunits of the processing array is spatially distributed among the plurality of discrete memory banks of the memory array. In other alternative embodiments (not shown), the plurality of processor subunits may be clustered in one or more regions of the substrate, and the plurality of memory banks may be clustered in one or more other regions of the substrate. In some embodiments, a combination of spatial distribution and clustering may be used (not shown). For example, one region of the substrate may include a cluster of processor subunits, another region of the substrate may include a cluster of memory banks, and yet another region of the substrate may include processing arrays distributed amongst memory banks. - One of ordinary skill will recognize that
arraying processor groups 600 on a substrate is not an exclusive embodiment. For example, each processor subunit may be associated with at least two dedicated memory banks. Accordingly, processinggroups FIG. 3B may be used in lieu of or in combination withprocessing group 600 to form the processing array and the memory array. Other processing groups including, for example, three, four, or more dedicated memory banks (not shown) may be used. - Each of the plurality of processor subunits may be configured to execute software code associated with a particular application independently, relative to other processor subunits included in the plurality of processor subunits. For example, as explained below, a plurality of sub-series of instructions may be grouped as machine code and provided to each processor subunit for execution.
- In some embodiments, each dedicated memory bank comprises at least one dynamic random access memory (DRAM). Alternatively, the memory banks may comprise a mix of memory types, such as static random access memory (SRAM), DRAM, Flash or the like.
- In conventional processors, data sharing between processor subunits is usually performed with shared memory. Shared memory typically requires a large portion of chip area and/or performed a bus that is managed by additional hardware (such as arbiters). The bus results in bottlenecks, as described above. In addition, the shared memory, which may be external to the chip, typically includes cache coherency mechanisms and more complex caches (e.g., L1 cache, L2 cache, and shared DRAM) in order to provide accurate and up-to-date data to the processor subunits. As explained further below, the dedicated buses depicted in
FIGS. 7A and 7B allow for hardware chips that are free of hardware management (such as arbiters). Moreover, the use of dedicated memories as depicted inFIGS. 7A and 7B allow for the elimination of complex caching layers and coherency mechanism. - Instead, in order to allow each processor subunit to access data calculated by other processor subunits and/or stored in memory banks dedicated to the other processor subunits, buses are provided whose timing is performed dynamically using code individually executed by each processor subunit. This allows for elimination of most, if not all, bus management hardware as conventionally used. Moreover, complex caching mechanisms are replaced with direct transfers over these buses, resulting in lower latency times during memory reads and writes.
- Memory-Based Processing Arrays
- As depicted in
FIGS. 7A and 7B , a memory chip of the present disclosure may operate independently. Alternatively, memory chips of the present disclosure may be operably connected with one or more additional integrated circuits, such as a memory device (e.g., one or more DRAM banks), a system-on-a-chip, a field-programmable gate array (FPGA), or other processing and/or memory chip. In such embodiments, tasks in a series of instructions executed by the architecture may be divided (e.g., by a compiler, as described below) between processor subunits of the memory chip and any processor subunits of the additional integrated circuit(s). For example, the other integrated circuits may comprise a host (e.g., host 350 ofFIG. 3A ) that inputs instructions and/or data to the memory chip and receives output therefrom. - In order to interconnect memory chips of the present disclosure with one or more additional integrated circuits, the memory chip may include a memory interface, such as a memory interface complying with a Joint Electron Device Engineering Council (JEDEC) standard or any of its variants. The one or more additional integrated circuits may then connect to the memory interface. Accordingly, if the one or more additional integrated circuits are connected to a plurality of memory chips of the present disclosure, data may be shared between the memory chips through the one or more additional integrated circuits. Additionally or alternatively, the one or more additional integrated circuits may include buses to connect to buses on the memory chips of the present disclosure such that the one or more additional integrated circuits may execute code in tandem with the memory chips of the present disclosure. In such embodiments, the one or more additional integrated circuits further assist with distributed processing even though they may be on different substrates than the memory chips of the present disclosure.
- Furthermore, memory chips of the present disclosure may be arrayed in order to form an array of distributed processors. For example, one or more buses may connect a
memory chip 770 a to anadditional memory chip 770 b, as depicted inFIG. 7C . In the example ofFIG. 7C ,memory chip 770 a includes processor subunits with one or more corresponding memory banks dedicated to each processor subunit, e.g.:Processor subunit 730 a is associated withmemory bank 720 a,processor subunit 730 b is associated withmemory bank 720 b,processor subunit 730 e is associated withmemory bank 720 c, andprocessor subunit 730 f is associated withmemory bank 720 d. Buses connect each processor subunit to its corresponding memory bank. Accordingly,bus 740 a connectsprocessor subunit 730 a tomemory bank 720 a,bus 740 b connectsprocessor subunit 730 b tomemory bank 720 b,bus 740 c connectsprocessor subunit 730 e tomemory bank 720 c, andbus 740 d connectsprocessor subunit 730 f tomemory bank 720 d. Moreover,bus 750 a connectsprocessor subunit 730 a toprocessor subunit 750 e,bus 750 b connectsprocessor subunit 730 a toprocessor subunit 750 b,bus 750 c connectsprocessor subunit 730 b toprocessor subunit 750 f, andbus 750 d connectsprocessor subunit 730 e toprocessor subunit 750 f. Other arrangements ofmemory chip 770 a may be used, for example, as described above. - Similarly,
memory chip 770 b includes processor subunits with one or more corresponding memory banks dedicated to each processor subunit, e.g.:Processor subunit 730 c is associated withmemory bank 720 e,processor subunit 730 d is associated withmemory bank 720 f,processor subunit 730 g is associated withmemory bank 720 g, andprocessor subunit 730 h is associated withmemory bank 720 h. Buses connect each processor subunit to its corresponding memory bank. Accordingly,bus 740 e connectsprocessor subunit 730 c tomemory bank 720 e,bus 740 f connectsprocessor subunit 730 d tomemory bank 720 f,bus 740 g connectsprocessor subunit 730 g tomemory bank 720 g, andbus 740 h connectsprocessor subunit 730 h tomemory bank 720 h. Moreover,bus 750 g connectsprocessor subunit 730 c toprocessor subunit 750 g,bus 750 h connectsprocessor subunit 730 d toprocessor subunit 750 h,bus 750 i connectsprocessor subunit 730 c toprocessor subunit 750 d, andbus 750 j connectsprocessor subunit 730 g toprocessor subunit 750 h. Other arrangements ofmemory chip 770 b may be used, for example, as described above. - The processor subunits of
memory chip FIG. 7C ,bus 750 e may connectprocessor subunit 730 b ofmemory chip 770 a andprocessor subunit 730 c ofmemory chip 770 b, andbus 750 f may connectprocessor subunit 730 f ofmemory chip 770 a andprocessor subunit 730 c ofmemory 770 b. For example,bus 750 e may serve as an input bus tomemory chip 770 b (and thus an output bus formemory chip 770 a) whilebus 750 f may serve as an input bus tomemory chip 770 a (and thus an output bus formemory chip 770 b) or vice versa. Alternatively,buses memory chips -
Buses memory chip 770 a andintegrated circuit 770 b. Moreover, any of the connection arrangements described above used in the memory chip itself may be used to connect the memory chip to one or more additional integrated circuits. For example,memory chip FIG. 7C . - Accordingly, although depicted using
buses architecture 760 may include fewer buses or additional buses. For example, a single bus betweenprocessor subunits processor subunits processor subunits processor subunits - Furthermore, although depicted as using a single memory chip and an additional integrated circuit, a plurality of memory chips may be connected using buses as explained above. For example, as depicted in the example of
FIG. 7C ,memory chips - In the example of
FIG. 7C ,memory chips bus 750 a connectsmemory chips bus 750 c connectsmemory chips bus 750 e connectsmemory chips bus 750 g connectsmemory chips memory chips FIG. 7C allows for fewer pin connections betweenmemory chips - Relatively Large Memories
- Embodiments of the present disclosure may use dedicated memories of relatively large size as compared with shared memories of conventional processors. The use of dedicated memories rather than shared memories allows for gains in efficiency to continue without tapering off with memory increases. This allows for memory-intensive tasks such as neural network processing and database queries to be performed more efficiently than in conventional processors, where the efficiency gains of increasing shared memory taper off due to the von Neumann bottleneck.
- For example, in distributed processors of the present disclosure, a memory array disposed on the substrate of the distributed processor may include a plurality of discrete memory banks. Each of the discrete memory banks may have a capacity greater than one megabyte, as well as a processing array disposed on the substrate, including a plurality of processor subunits. As explained above, each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks. In some embodiments, the plurality of processor subunits may be spatially distributed among the plurality of discrete memory banks within the memory array. By using dedicated memories of at least one megabyte, rather than shared caches of a few megabytes for a large CPU or GPU, the distributed processors of the present disclosure gain efficiencies that are not possible in conventional systems due to the von Neumann bottleneck in CPUs and GPUs.
- Different memories may be used as the dedicated memories. For example, each dedicated memory bank may comprise at least one DRAM bank. Alternatively, each dedicated memory bank may comprise at least one static random access memory bank. In other embodiments, different types of memories may be combined on a single hardware chip.
- As explained above, each dedicated memory may be at least one megabyte. Accordingly, each dedicated memory bank may be the same size or at least two of the plurality of memory banks may have different sizes.
- Moreover, as described above, the distributed processor may include a first plurality of buses, each connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank and a second plurality of buses, each connecting one of the plurality of processor subunits to another one of the plurality of processor subunits.
- Synchronization Using Software
- As explained above, hardware chips of the present disclosure may manage data transfers using software rather than hardware. In particular, because the timings of transfers on the buses, reads and writes to the memories, and calculations of the processor subunits are set by the sub-series of instructions executed by the processor subunits, hardware chips of the present disclosure may execute code to prevent collisions on the buses. Accordingly, hardware chips of the present disclosure may avoid hardware mechanisms conventionally used to manage data transfers (such as network controllers within in a chip, packet parsers and packets transferors between processor subunits, bus arbitrators, a plurality of buses to avoid arbitration, or the like).
- If hardware chips of the present disclosure transferred data conventionally, connecting N processor subunits with buses would require bus arbitration or wide MUXs controlled by an arbiter. Instead, as described above, embodiments of the present disclosure may use a bus that is only a wire, an optical cable, or the like between processor subunits, where the processor subunits individually execute code to avoid collision on the buses. Accordingly, embodiments of the present disclosure may preserve space on the substrate as well as materials cost and efficiency losses (e.g., due to power and time consumption by arbitration). The efficiency and space gains are even greater when compared to other architectures using first-in-first-out (FIFO) controllers and/or mailboxes.
- Furthermore, as explained above, each processor subunit may include one or more accelerators in addition to one or more processing elements. In some embodiments, the accelerator(s) may read and write from the buses rather than the processing element(s). In such embodiments, additional efficiency may be obtained by allowing the accelerator(s) to transmit data during the same cycle in which the processing element(s) perform one or more calculations. Such embodiments, however, require additional materials for the accelerator(s). For example, additional transistors may be required for fabrication of the accelerator(s).
- The code also may account for the internal behavior, including timing and latencies, of the processor subunits (e.g., including the processing elements and/or accelerators forming part of the processor subunit). For example, a compiler (as described below) may perform pre-processing that accounts for the timing and latencies when generating the sub-series of instructions that control the data transfers.
- In one example, a plurality of processor subunits may be assigned a task of calculating a neural network layer containing a plurality of neurons fully-connected to a previous layer of a larger plurality of neurons. Assuming data of the previous layer is evenly spread between the plurality of processor subunits, one way to perform the calculation may be to configure each processor subunit to transmit the data of the previous layer to the main bus in turn and then each processor subunit will multiply this data by the weight of the corresponding neuron that the subunit implements. Because each processor subunit calculates more than one neuron, each processor subunit will transmit the data of the previous layer a number of times equal to the number of neurons. Thus, the code of each processor subunit is not the same as the code for other processor subunits because the subunits will transmit at different times.
- In some embodiments, a distributed processor may comprise a substrate (e.g., a semiconductor substrate, such as silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks, and a processing array disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in
FIGS. 7A and 7B . As explained above, each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks. Moreover, as depicted, e.g., inFIGS. 7A and 7B , the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits. - As explained above, the plurality of buses may be controlled in software. Accordingly, the plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by timing hardware logic components. In one example, the plurality of buses may be free of bus arbiters such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by bus arbiters.
- In some embodiments, as depicted, e.g., in
FIGS. 7A and 7B , the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank. Similar to the plurality of buses described above, the second plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by timing hardware logic components. In one example, the second plurality of buses may be free of bus arbiters such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by bus arbiters. - As used herein, the phrase “free of” does not necessarily imply the absolute absence of components, such as timing hardware logic components (e.g., bus arbiters, arbitration trees, FIFO controllers, mailboxes, or the like). Such components may still be included in a hardware chip described as “free of” those components. Instead, the phrase “free of” refers to the function of the hardware chip; that is, a hardware chip “free of” timing hardware logic components controls the timing of its data transfers without use of the timing hardware logic components, if any, included therein. For example, a hardware chip that executes code including sub-series of instructions that control data transfers between processor subunits of the hardware chip, even if the hardware chip includes timing hardware logic components as a secondary precaution to protect against collisions due to errors in the executed code.
- As explained above, the plurality of buses may comprise at least one of wires or optical fibers between corresponding ones of the plurality of processor subunits. Accordingly, in one example, a distributed processor free of timing hardware logic components may include only wires or optical fibers without bus arbiters, arbitration trees, FIFO controllers, mailboxes, or the like.
- In some embodiments, the plurality of processor subunits is configured to transfer data across at least one of the plurality of buses in accordance with code executed by the plurality of processor subunits. Accordingly, as explained below, a compiler may organize sub-series of instructions, each sub-series comprising code executed by a single processor subunit. The sub-series instructions may instruct the processor subunit when to transfer data onto one of the buses and when to retrieve data from the buses. When the sub-series are executed in tandem across the distributed processor, the timing of transfers between the processor subunits may be governed by the instructions to transfer and retrieve included in the sub-series. Thus, the code dictates timing of data transfers across at least one of the plurality of buses. The compiler may generate code to be executed by a single processor subunit. Additionally, the compiler may generate code to be executed by groups of processor subunits. In some cases, the compiler may treat all the processor subunits together as if they were one super-processor (e.g., a distributed processor), and the compiler may generate code for execution by that defined super-processor/distributed processor.
- As explained above and depicted in
FIGS. 7A and 7B , the plurality of processor subunits may be spatially distributed among the plurality of discrete memory banks within the memory array. Alternatively, the plurality of processor subunits may be clustered in one or more regions of the substrate, and the plurality of memory banks may be clustered in one or more other regions of the substrate. In some embodiments, a combination of spatial distribution and clustering may be used, as explained above. - In some embodiments, a distributed processor may comprise a substrate (e.g., a semiconductor substrate, including silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks. A processing array may also be disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in
FIGS. 7A and 7B . As explained above, each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks. Moreover, as depicted, e.g., inFIGS. 7A and 7B , the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated one of the plurality of discrete memory banks. - As explained above, the plurality of buses may be controlled in software. Accordingly, the plurality of buses may be free of timing hardware logic components such that data transfers between a processor subunit and a corresponding, dedicated one of the plurality of discrete memory banks and across a corresponding one of the plurality of buses are not controlled by timing hardware logic components. In one example, the plurality of buses may be free of bus arbiters such that data transfers between processor subunits and across corresponding ones of the plurality of buses are uncontrolled by bus arbiters.
- In some embodiments, as depicted, e.g., in
FIGS. 7A and 7B , the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits Similar to the plurality of buses described above, the second plurality of buses may be free of timing hardware logic components such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by timing hardware logic components. In one example, the second plurality of buses may be free of bus arbiters such that data transfers between processor subunits and corresponding, dedicated memory banks are uncontrolled by bus arbiters. - In some embodiments, the distributed processor may use a combination of software timing with hardware timing components. For example, a distributed processor may comprise a substrate (e.g., a semiconductor substrate, including silicon and/or a circuit board, such as a flexible circuit board) with a memory array disposed on the substrate, the memory array including a plurality of discrete memory banks. A processing array may also be disposed on the substrate, the processing array including a plurality of processor subunits, as depicted, e.g., in
FIGS. 7A and 7B . As explained above, each one of the processor subunits may be associated with a corresponding, dedicated one of the plurality of discrete memory banks. Moreover, as depicted, e.g., inFIGS. 7A and 7B , the distributed processor may further comprise a plurality of buses, each one of the plurality of buses connecting one of the plurality of processor subunits to at least another one of the plurality of processor subunits. Moreover, as explained above, the plurality of processor subunits may be configured to execute software that controls timing of data transfers across the plurality of buses to avoid colliding data transfers on at least one of the plurality of buses. In such an example, the software may control the timing of the data transfers, but the transfers themselves may be controlled, at least in part, by one or more hardware components. - In such embodiments, the distributed processor may further comprise a second plurality of buses connecting one of the plurality of processor subunits to a corresponding, dedicated memory bank Similar to the plurality of buses described above, the plurality of processor subunits may be configured to execute software that controls timing of data transfers across the second plurality of buses to avoid colliding data transfers on at least one of the second plurality of buses. In such an example, as explained above, the software may control the timing of the data transfers, but the transfers themselves may be controlled, at least in part, by one or more hardware components.
- Division of Code
- As explained above, hardware chips of the present disclosure may execute code in parallel across processor subunits included on a substrate forming the hardware chip. Additionally, hardware chips of the present disclosure may perform multitasking. For example, hardware chips of the present disclosure may perform area multitasking, in which one group of processor subunits of the hardware chip execute one task (e.g., audio processing) while another group of processor subunits of the hardware chip execute another task (e.g., image processing). In another example, hardware chips of the present disclosure may perform timing multitasking, in which one or more processor subunits of the hardware chip execute one task during a first period of time and another task during a second period of time. A combination of area and timing multitasking may also be used such that one task may be assigned to a first group of processor subunits during a first period of time while another task may be assigned to a second group of processor subunits during the first period of time, after which a third task may be assigned to processor subunits included in the first group and the second group during a second period of time.
- In order to organize machine code for execution on memory chips of the present disclosure, machine code may be divided between processor subunits of the memory chip. For example, a processor on a memory chip may comprise a substrate and a plurality of processor subunits disposed on the substrate. The memory chip may further comprise a corresponding plurality of memory banks disposed on the substrate, each one of the plurality processor subunits being connected to at least one dedicated memory bank not shared by any other processor subunit of the plurality of processor subunits. Each processor subunit on the memory chip may be configured to execute a series of instructions independent from other processor subunits. Each series of instructions may be executed by configuring one or more general processing elements of the processor subunit in accordance with code defining the series of instructions and/or by activating one or more special processing elements (e.g., one or more accelerators) of the processor subunit in accordance with a sequence provided in the code defining the series of instructions.
- Accordingly, each series of instructions may define a series of tasks to be performed by a single processor subunit. A single task may comprise an instruction within an instruction set defined by the architecture of one or more processing elements in the processor subunit. For example, the processor subunit may include particular registers, and a single task may push data onto a register, pull data from a register, perform an arithmetic function on data within a register, perform a logic operation on data within a register, or the like. Moreover, the processor subunit may be configured for any number of operands, such as a 0-operand processor subunit (also called a “stack machine”), a 1-operand processor subunit (also called an accumulator machine), a 2-operand processor subunit (such as a RISC), a 3-operand processor subunit (such as a complex instruction set computer (CISC)), or the like. In another example, the processor subunit may include one or more accelerators, and a single task may activate an accelerator to perform a specific function, such as a MAC function, a MAX function, a MAX-0 function, or the like.
- The series of instructions may further include tasks for reading and writing from the dedicated memory banks of the memory chip. For example, a task may include writing a piece of data to a memory bank dedicated to the processor subunit executing the task, reading a piece of data from a memory bank dedicated to the processor subunit executing the task, or the like. In some embodiments, the reading and writing may be performed by the processor subunit in tandem with a controller of the memory bank. For example, the processor subunit may execute a read or write task by sending a control signal to the controller to perform the read or write. In some embodiments, the control signal may include a particular address to use for reads and writes. Alternatively, the processor subunit may defer to the memory controller to select an available address for the reads and writes.
- Additionally or alternatively, the reading and writing may be performed by one or more accelerators in tandem with a controller of the memory bank. For example, the accelerators may generate the control signals for the memory controller, similar to how the processor subunit generates control signals, as described above.
- In any of the embodiments described above, an address generator may also be used to direct the reads and writes to specific addresses of a memory bank. For example, the address generator may comprise a processing element configured to generate memory addresses for reads and writes. The address generator may be configured to generate addresses in order to increase efficiency, e.g., by writing results of a later calculation to the same address as the results of a former calculation that are no longer needed. Accordingly, the address generator may generate the controls signals for the memory controller, either in response to a command from the processor subunit (e.g., from a processing element included therein or from one or more accelerator(s) therein) or in tandem with the processor subunit. Additionally or alternatively, the address generator may generate the addresses based on some configuration or registers for example generating a nested loop structure to iterate on certain addresses in the memory at a certain pattern.
- In some embodiments, each series of instructions may comprise a set of machine code defining a corresponding series of tasks. Accordingly, the series of tasks described above may be encapsulated within machine code comprising the series of instructions. In some embodiments, as explained below with respect to
FIG. 8 , the series of tasks may be defined by a compiler configured to distribute a higher-level series of tasks amongst the plurality of logic circuits as a plurality of series of tasks. For example, the compiler may generate the plurality of series of tasks based on the higher-level series of tasks such that the processor subunits, executing each corresponding series of tasks in tandem, perform the same function as outlined by the higher-level series of tasks. - As explained further below, the higher-level series of tasks may comprise a set of instructions in a human-readable programming language. Correspondingly, the series of tasks for each processor subunit may comprise lower-level series of tasks, each of which comprises a set of instructions in a machine code.
- As explained above with respect to
FIGS. 7A and 7B , the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to at least one other of the plurality of processor subunits. Moreover, as explained above, data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across at least one of the plurality of buses may be predefined by the series of instructions included in a processor subunit connected to the at least one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses. Such tasks may be executed by a processing element of the processor subunit or by one or more accelerators included in the processor subunit. In the latter embodiment, the processor subunit may perform a calculation or send a control signal to a corresponding memory bank in the same cycle during which accelerator(s) pull data from or place data on one of the buses. - In one example, the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a sending task that comprises a command for the processor subunit connected to the at least one of the plurality of buses to write data to the at least one of the plurality of buses. Additionally or alternatively, the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a receiving task that comprises a command for the processor subunit connected to the at least one of the plurality of buses to read data from the at least one of the plurality of buses.
- Additionally or alternatively to distribution of code amongst processor subunits, data may be divided between memory banks of the memory chip. For example, as explained above, a distributed processor on a memory chip may comprise a plurality of processor subunits disposed on the memory chip and a plurality of memory banks disposed on the memory chip. Each one of the plurality of memory banks may be configured to store data independent from data stored in other ones of the plurality of memory banks, and each one of the plurality of processor subunits may be connected to at least one dedicated memory bank from among the plurality of memory banks. For example, each processor subunit may have access to one or more memory controllers of one or more corresponding memory banks dedicated to the processor subunit, and no other processor subunit may have access to these corresponding one or more memory controllers. Accordingly, the data stored in each memory bank may be unique to the dedicated processor subunit. Moreover, the data stored in each memory bank may be independent of the memory stored in other memory banks because no memory controllers may be shared between memory banks
- In some embodiments, as described below with respect to
FIG. 8 , the data stored in each of the plurality of memory banks may be defined by a compiler configured to distribute data amongst the plurality of memory banks. Moreover, the compiler may be configured to distribute data defined in a higher-level series of tasks amongst the plurality of memory banks using a plurality of lower-level tasks distributed amongst corresponding processor subunits. - As explained further below, the higher-level series of tasks may comprise a set of instructions in a human-readable programming language. Correspondingly, the series of tasks for each processor subunit may comprise lower-level series of tasks, each of which comprises a set of instructions in a machine code.
- As explained above with respect to
FIGS. 7A and 7B , the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks Moreover, as explained above, data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across a particular one of the plurality of buses may be controlled by a corresponding processor subunit connected to the particular one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses. As explained above, such tasks may be executed by (i) a processing element of the processor subunit or (ii) one or more accelerators included in the processor subunit. In the latter embodiment, the processor subunit may perform a calculation or use buses connecting the processor subunit to other processor subunits in the same cycle during which accelerator(s) pull data from or place data on one of the buses connected to the one or more corresponding, dedicated memory banks. - Therefore, in one example, the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a sending task. The sending task may comprise a command for the processor subunit connected to the at least one of the plurality of buses to write data to the at least one of the plurality of buses for storage in the one or more corresponding, dedicated memory banks. Additionally or alternatively, the series of instructions included in the processor subunit connected to the at least one of the plurality of buses may include a receiving task. The receiving task may comprise a command for the processor subunit connected to the at least one of the plurality of buses to read data from the at least one of the plurality of buses for storage in the one or more corresponding, dedicated memory banks. Accordingly, the sending and receiving tasks in such embodiments may comprise control signals that are sent, along the at least one of the plurality of buses, to one or more memory controllers of the one or more corresponding, dedicated memory banks. Moreover, the sending and receiving tasks may be executed by one portion of the processing subunit (e.g., by one or more accelerators thereof) concurrently with a calculation or other task executed by another portion of the processing subunit (e.g., by one or more different accelerators thereof). An example of such a concurrent execution may include a MAC-relay command, in which receiving, multiplying, and sending are executed in tandem.
- In addition to distributing data amongst the memory banks, particular portions of data may be duplicated across different memory banks. For example, as explained above, a distributed processor on a memory chip may comprise a plurality of processor subunits disposed on the memory chip and a plurality of memory banks disposed on the memory chip. Each one of the plurality of processor subunits may be connected to at least one dedicated memory bank from among the plurality of memory banks, and each memory bank of the plurality of memory banks may be configured to store data independent from data stored in other ones of the plurality of memory banks. Moreover, at least some of the data stored in one particular memory bank from among the plurality of memory banks may comprise a duplicate of data stored in at least another one of the plurality of memory banks. For example, a number, string, or other type of data used in the series of instructions may be stored in a plurality of memory banks dedicated to different processor subunits rather than being transferred from one memory bank to other processor subunits in the memory chip.
- In one example, parallel string matching may use data duplication described above. For example, a plurality of strings may be compared to the same string. A conventional processor would compare each string in the plurality to the same string in sequence. On a hardware chip of the present disclosure, the same string may be duplicated across the memory banks such that the processor subunits may compare a separate string in the plurality to the duplicated string in parallel.
- In some embodiments, as described below with respect to
FIG. 8 , the at least some data duplicated across the one particular memory bank from among the plurality of memory banks and the at least another one of the plurality of memory banks is defined by a compiler configured to duplicate data across memory banks. Moreover, the compiler may be configured to duplicate the at least some data using a plurality of lower-level tasks distributed amongst corresponding processor subunits. - Duplication of data may be useful for certain tasks that re-use the same portions of data across different calculations. By duplicating these portions of data, the different calculations may be distributed amongst processor subunits of the memory chip for parallel execution while each processor subunit may store the portions of data in, and access the stored portions from, a dedicated memory bank (rather than pushing and pulling the portions of data across buses connecting the processor subunits). In one example, the at least some data duplicated across the one particular memory bank from among the plurality of memory banks and the at least another one of the plurality of memory banks may comprise weights of a neural network. In this example, each node in the neural network may be defined by at least one processor subunit from among the plurality of processor subunits. For example, each node may comprise machine code executed by the at least one processor subunit defining the node. In this example, duplication of the weights may allow each processor subunit to execute machine code to effect, at least in part, a corresponding node while only accessing one or more dedicated memory banks (rather than performing data transfers with other processor subunits). Because the timing of reads and writes to the dedicated memory bank(s) are independent of other processor subunits while the timing of data transfers between processor subunits requires timing synchronization (e.g., using software, as explained above), duplication of memory to avoid data transfers between processor subunits may produce further efficiencies in overall execution.
- As explained above with respect to
FIGS. 7A and 7B , the memory chip may further comprise a plurality of buses, each bus connecting one of the plurality of processor subunits to one or more corresponding, dedicated memory banks from among the plurality of memory banks Moreover, as explained above, data transfers on the plurality of buses may be controlled using software. Accordingly, data transfers across a particular one of the plurality of buses may be controlled by a corresponding processor subunit connected to the particular one of the plurality of buses. Therefore, one of the tasks included in the series of instructions may include outputting data to one of the buses or pulling data from one of the buses. As explained above, such tasks may be executed by (i) a processing element of the processor subunit or (ii) one or more accelerators included in the processor subunit. As further explained above, such tasks may include a sending task and/or a receiving tasks that comprise control signals that are sent, along the at least one of the plurality of buses, to one or more memory controllers of the one or more corresponding, dedicated memory banks. -
FIG. 8 depicts a flowchart of amethod 800 for compiling a series of instructions for execution on an exemplary memory chip of the present disclosure, e.g., as depicted inFIGS. 7A and 7B .Method 800 may be implemented by any conventional processor, whether generic or special-purpose. -
Method 800 may be executed as a portion of a computer program forming a compiler. As used herein, a “compiler” refers to any computer program that converts a higher-level language (e.g., a procedural language, such as C, FORTRAN, BASIC, or the like; an object-oriented language, such as Java, C++, Pascal, Python, or the like; etc.) to a lower-level language (e.g., assembly code, object code, machine code, or the like). The compiler may allow a human to program a series of instructions in a human-readable language, which is then converted to a machine-executable language. - At
step 810, the processor may assign tasks associated with the series of instructions to different ones of the processor subunits. For example, the series of instructions may be divided into subgroups, the subgroups to be executed in parallel across the processor subunits. In one example, a neural network may be divided into its nodes, and one or more nodes may be assigned to separate processor subunits. In this example, each subgroup may comprise a plurality of nodes connected across different layers. Thus, a processor subunit may implement a node from a first layer of the neural network, a node from a second layer connected to the node from the first layer implemented by the same processor subunit, and the like. By assigning nodes based on their connections, data transfers between the processor subunits may be lessened, which may result in greater efficiency, as explained above. - As explained above depicted in
FIGS. 7A and 7B , the processor subunits may be spatially distributed among the plurality of memory banks disposed on the memory chip. Accordingly, the assignment of tasks may be, at least in part, a spatial divisional as well as a logical division. - At
step 820, the processor may generate tasks to transfer data between pairs of the processor subunits of the memory chip, each pair of processor subunits being connected by a bus. For example, as explained above, the data transfers may be controlled using software. Accordingly, processor subunits may be configured to push and pull data on buses at synchronized times. The generated tasks may thus include tasks for performing this synchronized pushing and pulling of data. - As explained above,
step 820 may include pre-processing to account for the internal behavior, including timing and latencies, of the processor subunits. For example, the processor may use known times and latencies of the processor subunits (e.g., the time to push data to a bus, the time to pull data from a bus, the latency between a calculation and a push or pull, or the like) to ensure that the generated tasks synchronize. Therefore, the data transfers comprising at least one push by one or more processor subunits and at least one pull by one or more processor subunits may occur simultaneously rather than incurring a delay due to timing differences between the processor subunits, latencies of the processor subunits, or the like. - At
step 830, the processor may group the assigned and generated tasks into the plurality of groups of sub-series instructions. For example, the sub-series instructions may each comprise a series of tasks for execution by a single processor subunit. Therefore, each of the plurality of groups of sub-series instructions may correspond to a different one of the plurality of processor sub-units. Accordingly, steps 810, 820, and 830 may result in dividing the series of instructions into a plurality of groups of sub-series instructions. As explained above,step 820 may ensure that any data transfers between the different groups are synchronized. - At
step 840, the processor may generate machine code corresponding to each of the plurality of groups of subs-series instructions. For example, the higher-level code representing sub-series instructions may be converted to lower-level code, such as machine code, executable by corresponding processor subunits. - At
step 850, the processor may assign the generated machine code corresponding to each of the plurality of groups of subs-series instructions to a corresponding one of the plurality of processor subunits in accordance with the division. For example, the processor may label each sub-series instructions with an identifier of the corresponding processor subunit. Thus, when the sub-series instructions are uploaded to a memory chip for execution (e.g., byhost 350 ofFIG. 3A ), each sub-series may configure a correct processor subunit. - In some embodiments, assigning tasks associated with the series of instructions to the different ones of the processor subunits may depend, at least in part, on a spatial proximity between two or more of the processor subunits on the memory chip. For example, as explained above, efficiency may be increased by lessening the number of data transfers between processor subunits. Accordingly, the processor may minimize data transfers that move data across more than two of processor subunits. Therefore, the processor may use a known layout of the memory chip in combination with one or more optimization algorithms (such as a greedy algorithm) in order to assign sub-series to processor subunits in a way that maximizes (at least locally) adjacent transfers and minimizes (at least locally) transfers to non-neighboring processor subunits.
-
Method 800 may include further optimizations for the memory chips of the present disclosure. For example, the processor may group data associated with the series of instructions based on the division and assign the data to the memory banks in accordance with the grouping. Accordingly, the memory banks may hold data used for the sub-series instructions assigned to each processor subunit to which each memory bank is dedicated. - In some embodiments, grouping the data may include determining at least a portion of the data to duplicate in two or more of the memory banks. For example, as explained above, some data may be used across more than one sub-series instructions. Such data may be duplicated across the memory banks dedicated to the plurality of processor subunits to which the different sub-series instructions are assigned. This optimization may further reduce data transfers across processor subunits.
- The output of
method 800 may be input to a memory chip of the present disclosure for execution. For example, a memory chip may comprise a plurality of processor subunits and a corresponding plurality of memory banks, each processor subunit being connected to at least one memory bank dedicated to the processor subunit, and the processor subunits of the memory chip may be configured to execute the machine code generated bymethod 800. As explained above with respect toFIG. 3A , host 350 may input the machine code generated bymethod 800 to the processor subunits for execution. - Sub-Banks and Sub-Controllers
- In conventional memory banks, controllers are provided at the bank level. Each bank includes a plurality of mats, which are typically arranged in a rectangular manner but may be arranged in any geometrical shape. Each mat includes a plurality of memory cells, which are also typically arranged in a rectangular manner but may be arranged in any geometrical shape. Each cell may store a single bit of data (e.g., depending on whether the cell is retained at a high voltage or a low voltage).
- An example of this conventional architecture is depicted in
FIGS. 9 and 10 . As shown inFIG. 9 , at the bank level, a plurality of mats (e.g., mats 930-1, 930-2, 940-1, and 940-2) may formbank 900. In a conventional rectangular organization,bank 900 may be controlled across global wordlines (e.g., wordline 950) and global bitlines (e.g., bitline 960). Accordingly,row decoder 910 may select the correct wordline based on an incoming control signal (e.g., a request for a read from an address, a request for a write to an address, or the like) and global sense amplifier 920 (and/or a global column decoder, not shown inFIG. 9 ) may select the correct bitline based on the control signal.Amplifier 920 may also amplify any voltage levels from a selected bank during a read operation. Although depicted as using a row decoder for initial selecting and performing amplification along columns, a bank may additionally or alternatively use a column decoder for initial selecting and perform amplification along rows. -
FIG. 10 depicts an example of amat 1000. For example,mat 1000 may form a portion of a memory bank, such asbank 900 ofFIG. 9 . As depicted inFIG. 10 , a plurality of cells (e.g., cells 1030-1, 1030-2, and 1030-3) may formmat 1000. Each cell may comprise a capacitor, a transistor, or other circuitry that stores at least one bit of data. For example, a cell may comprise a capacitor that is charged to represent a ‘1’ and discharged to represent a ‘0’ or may comprise a flip-flop having a first state representing a ‘1’ and a second state representing a ‘0.’ A conventional mat may comprise, for example, 512 bits by 512 bits. In embodiments wheremat 1000 forms a portion of MRAM, ReRAM, or the like, a cell may comprise a transistor, resistor, capacitor or other mechanism for isolating an ion or portion of a material that stores at least one bit of data. For example, a cell may comprise an electrolyte ion, a portion of chalcogenide glass, or the like, having a first state representing a ‘1’ and a second state representing a ‘0.’ - As further depicted in
FIG. 10 , in a conventional rectangular organization,mat 1000 may be controlled across local wordlines (e.g., wordline 1040) and local bitlines (e.g., bitline 1050). Accordingly, wordline drivers (e.g., wordline driver 1020-1, 1020-2, . . . , 1020-x) may control the selected wordline to perform a read, write, or refresh based on a control signal from a controller associated with the memory bank of whichmat 1000 forms a part (e.g., a request for a read from an address, a request for a write to an address, a refresh signal). Moreover, local sense amplifiers (e.g., local amplifiers 1010-1, 1010-2, . . . , 1010-x) and/or local column decoders (not shown inFIG. 10 ) may control the selected bitline to perform a read, write, or refresh. The local sense amplifiers may also amplify any voltage levels from a selected cell during a read operation. Although depicted as using a wordline driver for initial selecting and performing amplification along columns, a mat may instead use a bitline driver for initial selecting and perform amplification along rows. - As explained above, a large number of mats are duplicated to form a memory bank. Memory banks may be grouped to form a memory chip. For example, a memory chip may comprise eight to thirty-two memory banks. Accordingly, pairing processor subunits with memory banks on a conventional memory chip may result in only eight to thirty-two processor subunits. Accordingly, embodiments of the present disclosure may include memory chips with additional sub-bank hierarchy. These memory chips of the present disclosure may then include processor subunits with memory sub-banks used as the dedicated memory banks paired with the processor subunits allowing for a larger number of sub processors, which may then achieve higher parallelism and performance of in-memory computing.
- In some embodiments of the present disclosure, the global row decoder and global sense amplifier of
bank 900 may be replaced with sub-bank controllers. Accordingly, rather than sending control signals to a global row decoder and a global sense amplifier of the memory bank, a controller of the memory bank may direct the control signal to the appropriate sub-bank controller. The direction may be controlled dynamically or may be hard-wired (e.g., via one or more logic gates). In some embodiments, fuses may be used to indicate the controller of each sub bank or mat whether to block or pass the control signal to the appropriate sub-bank or mat. In such embodiments, faulty sub-banks may thus be deactivated using the fuses. - In one example of such embodiments, a memory chip may include a plurality of memory banks, each memory bank having a bank controller and a plurality of memory sub-banks, each memory sub-bank having a sub-bank row decoder and a sub-bank column decoder for allowing reads and writes to locations on the memory sub-bank. Each sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells and may have internally local row decoders, column decoders, and/or local sense amplifiers. The sub-bank row decoders and the sub-bank column decoders may process read and write requests from the bank controller or from a sub-bank processor subunit used for in memory computations on the sub-bank memory, as described below. Additionally, each memory sub-bank may further have a controller configured to determine whether to process read requests and write requests from the bank controller and/or to forward them to the next level (e.g., of row and column decoders on a mat) or to block the requests, e.g., to allow an internal processing element or processor subunit to access the memory. In some embodiments, the bank controller may be synchronized to a system clock. However, the sub-bank controllers may be not synchronized to the system clock.
- As explained above, the use of sub-banks may allow for the inclusion of a larger number of processor subunits in the memory chip than if processor subunits were paired with memory banks of conventional chips. Accordingly, each sub-bank may further have a processor subunit using the sub-bank as a dedicated memory. As explained above, the processor subunit may comprise a RISC, a CISC, or other general-purpose processing subunit and/or may comprise one or more accelerators. Additionally, the processor subunit may include an address generator, as explained above. In any of the embodiments described above, each processor subunit may be configured to access a sub-bank dedicated to the processor subunit using the row decoder and the column decoder of the sub-bank without using the bank controller. The processor sub-unit associated with the sub-bank may also handle the memory mats (including the decoder and memory redundancy mechanisms, described below) and/or determine whether a read or write request from an upper level (e.g., the bank level or the memory level) is forwarded and handled accordingly.
- In some embodiments, the sub-bank controller may further include a register that stores a state of the sub-bank. Accordingly, the sub-bank controller may return an error if the sub-bank controller receives a control signal from the memory controller while the register indicates that the sub-bank is in use. In embodiments where each sub-bank further includes a processor subunit, the register may indicate an error if the processor subunit in the sub-bank is accessing the memory in conflict with an external request from the memory controller.
-
FIG. 11 shows an example of another embodiment of a memory bank using sub-bank controllers. In the example ofFIG. 11 ,bank 1100 has arow decoder 1110, acolumn decoder 1120, and a plurality of memory sub-banks (e.g., sub-banks 1170 a, 1170 b, and 1170 c) with sub-bank controllers (e.g.,controllers resolvers - The sub-bank controllers may further include one or more logic circuits (e.g.,
logic bank 1100. Alternatively, the logic circuit may comprise a processor subunit, as explained above, such that the processor sub-unit has any sub-banks controlled by the sub-bank controller as corresponding, dedicated memory. In the example ofFIG. 11 ,logic 1150 a may have sub-bank 1170 a as a corresponding, dedicated memory,logic 1150 b may have sub-bank 1170 b as a corresponding, dedicated memory, andlogic 1150 c may have sub-bank 1170 c as a corresponding, dedicated memory. In any of the embodiments described above, the logic circuits may have buses to the sub-banks, e.g.,buses sub-bank controller 1130 a includesdecoders sub-bank controller 1130 b includesdecoders sub-bank controller 1130 c includesdecoders bank row decoder 1110, select a wordline using the decoders included in the sub-bank controllers. The described system may allow a processing element or processor subunit of the sub-bank to access the memory without interrupting other banks and even other sub-banks, thereby allowing each sub-bank processor subunit to perform memory computations in parallel with the other sub-bank processor subunits. - Furthermore, each sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells. For example, sub-bank 1170 a includes mats 1190 a-1, 1190 a-2, . . . , 1190 a-x; sub-bank 1170 b includes
mats 1190 b-1, 1190 b-2, . . . , 1190 b-x; and sub-bank 1170 c includesmats 1190 c-1, 1190 c-2, . . . , 1190 c-3. As further depicted inFIG. 11 , each sub-bank may include at least one decoder. For example, sub-bank 1170 a includesdecoder 1180 a, sub-bank 1170 b includesdecoder 1180 b, and sub-bank 1170 c includesdecoder 1180 c. Accordingly,bank column decoder 1120 may select a global bitline (e.g., bitline 1121 a or 1121 b) based on external requests while the sub-bank selected bybank row decoder 1110 may use its column decoder to select a local bitline (e.g., bitline 1181 a or 1181 b) based on local requests from the logic circuit to which the sub-bank is dedicated. Accordingly, each processor subunit may be configured to access a sub-bank dedicated to the processor subunit using the row decoder and the column decoder of the sub-bank without using the bank row decoder and the bank column decoder. Thus, each processor subunit may access a corresponding sub-bank without interrupting other sub-banks. Moreover, sub-bank decoders may reflect accessed data to the bank decoders when the request to the sub-bank is external to the processor subunit. Alternatively, in embodiments where each sub-bank has only one row of memory mats, the local bitlines may be the bitlines of the mat rather than bitlines of the sub-bank. - A combination of embodiments using sub-bank row decoders and sub-bank column decoders with the embodiment depicted in
FIG. 11 may be used. For example, the bank row decoder may be eliminated but the bank column decoder retained and local bitlines used. -
FIG. 12 shows an example of an embodiment of amemory sub-bank 1200 having a plurality of mats. For example, sub-bank 1200 may represent a portion of sub-bank 1100 ofFIG. 11 or may represent an alternative implementation of a memory bank. In the example ofFIG. 12 , sub-bank 1200 includes a plurality of mats (e.g.,mats mat 1240 a includes cells 1260 a-1, 1260 a-2, . . . , 1260 a-x, andmat 1240 b includescells 1260 b-1, 1260 b-2, . . . , 1260 b-x. - Each mat may be assigned a range of addresses that will be assigned to the memory cells of the mat. These addresses may be configured at production such that mats may be shuffled around and such that faulted mats may be deactivated and left unused (e.g., using one or more fuses, as explained further below).
-
Sub-bank 1200 receives read and write requests from memory controller 1210. Although not depicted inFIG. 12 , requests from memory controller 1210 may be filtered through a controller of sub-bank 1200 and directed to an appropriate mat of sub-bank 1200 for address resolution. Alternatively, at least a portion (e.g., higher bits) of an address of a request from memory controller 1210 may be transmitted to all mats of sub-bank 1200 (e.g.,mats - In any of the embodiments described above, each mat of the sub-bank may include a row decoder (e.g.,
row decoder - Furthermore, in any of the embodiments described above, a column decoder included in the appropriate mat (e.g.,
column decoder bitline 1251 or 1253). The local bitline may be connected to a global bitline of the memory bank. In embodiments where the sub-bank has local bitlines of its own, the local bitline of the cell may be further connected to the local bitline of the sub-bank. Accordingly, data in the selected cell may be read through the column decoder (and/or sense amplifier) of the cell, then through the column decoder (and/or sense amplifier) of the sub-bank (in embodiments including a sub-bank column decoder and/or sense amplifier), and then through the column decoder (and/or sense amplifier) of the bank. -
Mat 1200 may be duplicated and arrayed to form a memory bank (or a memory sub-bank). For example, a memory chip of the present disclosure may comprise a plurality of memory banks, each memory bank having a plurality of memory sub-banks, and each memory sub-bank having a sub-bank controller for processing reads and writes to locations on the memory sub-bank. Furthermore, each memory sub-bank may comprise a plurality of memory mats, each memory mat having a plurality of memory cells and having a mat row decoder and a mat column decoder (e.g., as depicted inFIG. 12 ). The mat row decoders and the mat column decoders may process read and write requests from the sub-bank controller. For example, the mat decoders may receive all requests and determine (e.g., using a comparator) whether to process the request based on a known address range of each mat, or the mat decoders may only receive requests within the known address range based on selection of a mat by the sub-bank (or bank) controller. - Controller Data Transfers
- Any of the memory chips of the present disclosure may also share data using memory controllers (or sub-bank controllers or mat controllers) in addition to sharing data using processing subunits. For example, a memory chip of the present disclosure may comprise a plurality of memory banks (e.g., an SRAM bank, a DRAM bank, or the like), each memory bank having a bank controller, a row decoder, and a column decoder for allowing reads and writes to locations on the memory bank, as well as a plurality of buses connecting each controller of the plurality of bank controllers to at least one other controller of the plurality of bank controllers. The plurality of buses may be similar to the buses connecting the processing subunits, as described above, but connecting the bank controllers directly rather than through the processing subunits. Furthermore, although described as connecting the bank controllers, buses may additionally or alternatively connect sub-bank controllers and/or mat controllers.
- In some embodiments, the plurality of buses may be accessed without interruption of data transfers on main buses of the memory banks connected to one or more processor subunits. Accordingly, a memory bank (or sub-bank) may transmit data to or from a corresponding processor subunit in the same clock cycle as transmitting data to or from a different memory bank (or sub-bank). In embodiments where each controller is connected to a plurality of other controllers, the controllers may be configurable for selection of one other of the other controllers for sending or receiving of data. In some embodiments, each controller may be connected to at least one neighboring controller (e.g., pairs of spatially adjacent controllers may be connected to one another).
- Redundant Logic in Memory Circuits
- The disclosure is generally directed to a memory chip with primary logic portions for on-chip data processing. The memory chip may include redundant logic portions, which may replace defective primary logic portions to increase the fabrication yield of the chip. Thus, the chip may include on-chip components that allow a configuration of logic blocks in the memory chip based on individual testing of the logic portions. This feature of the chip may increase yields because a memory chip with larger areas dedicated to logic portions is more susceptible to fabrication failures. For example, DRAM memory chips with large redundant logic portions may be susceptible to fabrication issues that reduce yield. However, implementing redundant logic portions may result in increased yield and reliability because it provides a manufacturer or user of DRAM memory chips to turn on or off full logic portions while maintaining the ability of high parallelism. It should be noted that here and throughout the disclosure, example of certain memory types (such as DRAM) may be identified in order to facilitate the explanation of disclosed embodiments. It is to be understood, however, that in such instances the identified memory types are not intended to be limiting. Rather, memory types such as DRAM, Flash, SRAM, ReRAM, PRAM, MRAM, ROM, or any other memory may be used together with the disclosed embodiments even if fewer examples are specifically identified in a certain section of the disclosure.
-
FIG. 13 is a block diagram of anexemplary memory chip 1300, consistent with disclosed embodiments.Memory chip 1300 may be implemented as a DRAM memory chip.Memory chip 1300 may also be implemented as any type of memory volatile or non-volatile, such as Flash, SRAM, ReRAM, PRAM, and/or MRAM, etc.Memory chip 1300 may include asubstrate 1301 in which anaddress manager 1302, amemory array 1304 including a plurality of memory banks, 1304(a,a) to 1304(z,z), amemory logic 1306, abusiness logic 1308, and aredundant business logic 1310 are disposed.Memory logic 1306 andbusiness logic 1308 may constitute primary logic blocks, whileredundant business logic 1310 may constitute redundant blocks. In addition,memory chip 1300 may include configuration switches, which may includedeactivation switches 1312, and an activation switches 1314.Deactivation switches 1312 andactivation switches 1314 may also be disposed in thesubstrate 1301. In this Application,memory logic 1306,business logic 1308, andredundant business logic 1310 may also be collectively referred to as the “logic blocks.” -
Address manager 1302 may include row and column decoders or other type of memory auxiliaries. Alternatively, or additionally,address manager 1302 may include a microcontroller or processing unit. - In some embodiments, as shown in
FIG. 13 ,memory chip 1300 may include asingle memory array 1304 that may arrange the plurality of memory blocks in a two-dimensional array onsubstrate 1301. In other embodiments, however,memory chip 1300 may includemultiple memory arrays 1304 and each of thememory arrays 1304 may arrange memory blocks in different configurations. For example, memory blocks in at least one of the memory arrays (also known as memory banks) may be arranged in a radial distribution to facilitate routing betweenaddress manager 1302 ormemory logic 1306 to the memory blocks. -
Business logic 1308 may be used to do the in-memory computation of an application that is not related to the logic used to manage the memory itself. For example,business logic 1308 may implement functions related to AI such as floating, integer, or MAC operations used as activation functions. In addition,business logic 1308 may implement data base related functions like min, max, sort, count, among others.Memory logic 1306 may perform tasks related to memory management, including (but not limited to) read, write, and refresh operations. Therefore, business logic may be added in one or more of the bank level, mats level, or a group of mats level.Business logic 1308 may have one or more address outputs and one or more data inputs/outputs. For instance,business logic 1308 can address by row\column lines to addressmanager 1302. In certain embodiments, however, the logic blocks may be additionally or alternatively addressed via data inputs\outputs. -
Redundant business logic 1310 may be a replicate ofbusiness logic 1308. In addition,redundant business logic 1310 may be connected todeactivation switches 1312 and/oractivation switches 1314, which may include small fuse\anti-fuse, and used for logic disabling or enabling one of the instances (e.g., an instance which is connected by default) and enable one of the other logic blocks (e.g., an instance which is disconnected by default). In some embodiments, as further described in connection toFIG. 15 , the redundancy of blocks may be local within a logic block, such asbusiness logic 1308. - In some embodiments, the logic blocks in
memory chip 1300 may be connected to subsets ofmemory array 1304 with dedicated buses. For example, a set ofmemory logic 1306,business logic 1308, andredundant business logic 1310 may be connected to the first row of memory blocks in memory array 1304 (i.e., memory blocks 1304(a,a) to 1304(a,z)). The dedicated buses may allow associated logic blocks to quickly access data from the memory blocks without requirements of opening communication lines through, for example,address manager 1302. - Each of the plurality of primary logic blocks may be connected to at least one of the plurality of
memory banks 1304. Also, redundant blocks, such asredundant business block 1310, may be connected to at least one of the memory instances 1304(a,a)-(z,z). Redundant blocks may replicate at least one of the plurality of primary logic blocks, such asmemory logic 1306 orbusiness logic 1308.Deactivation switches 1312 may be connected to at least one of the plurality of primary logic blocks andactivation switches 1314 may be connected to at least one of the plurality of redundant blocks. - In these embodiments, upon detecting of a fault associated with one of the plurality of primary logic blocks (
memory logic 1306 and/or business logic 1308),deactivation switches 1312 may be configured to disable the one of the plurality of primary logic blocks. Simultaneously,activation switches 1314 may be configured to enable one of the plurality of redundant blocks, such asredundant logic block 1310, that replicates the one of the plurality of primary logic blocks. - In addition,
activation switches 1314 anddeactivation switches 1312, which may collectively be referred to as “configuration switches,” may include an external input to configure the status of the switch. For instance,activation switches 1314 may be configured so an activation signal in the external input causes a closed switch condition, whiledeactivation switches 1312 may be configured so a deactivation signal in the external input causes an open switch condition. In some embodiments, all configuration switches in 1300 may be deactivated by default and become activated or enabled after a test indicates an associated logic block is functional and a signal is applied in the external input. Alternatively, in some cases, all configuration switches in 1300 may be enabled by default and may be deactivated or disabled after a test indicates an associated logic block is not functional and a deactivation signal is applied in the external input. - Regardless of whether a configuration switch is initially enabled or disabled, upon detection of a fault associated with an associated logic block, the configuration switch may disable the associated logic block. In cases where the configuration switch is initially enabled, the state of the configuration switch may be changed to disabled in order to disable the associated logic block. In cases where the configuration switch is initially disabled, the state of the configuration switch may be left in its disabled state in order to disable the associated logic block. For example, the result of an operability test may indicate that a certain logic block is nonoperational or that it fails to operate within certain specifications. In such cases, the logic block may be disabled my not enabling its corresponding configuration switch.
- In some embodiments, configuration switches may be connected to two or more logic blocks and may be configured to choose between different logic blocks. For example, a configuration switch may be connected to both
business logic 1308 andredundant logic block 1310. Configuration switch may enableredundant logic block 1310 while disablingbusiness logic 1308. - Alternatively, or additionally, at least one of the plurality of primary logic blocks (
memory logic 1306 and/or business logic 1308) may be connected to a subset of the plurality of memory banks ormemory instances 1304 with a first dedicated connection. Then, at least one of the plurality of redundant blocks (such as redundant business logic 1310), which replicates the at least one of the plurality of primary logic blocks, may be connected to the subset of the same plurality of memory banks orinstances 1304 with a second dedicated connection. - Moreover,
memory logic 1306 may have different functions and capabilities thanbusiness logic 1308. For example, whilememory logic 1306 may be designed to enable read and write operations in thememory bank 1304,business logic 1308 may be designed to perform in-memory computations. Therefore, if thebusiness logic 1308 includes a first business logic block, and thebusiness logic 1308 includes a second business logic block (like redundant business logic 1310), it is possible to disconnectdefective business logic 1308 and reconnectredundant business logic 1310 without missing any capability. - In some embodiments, configuration switches (including
deactivation switches 1312 and activation switches 1314) may be implemented with a fuse, an anti-fuse, or a programmable device (including a one-time programmable device), or other form of non-volatile memory. -
FIG. 14 is a block diagram of an exemplary redundantlogic block set 1400, consistent with disclosed embodiments. In some embodiments, redundantlogic block set 1400 may be disposed insubstrate 1301. Redundantlogic block set 1400 may include at least one ofbusiness logic 1308, andredundant business logic 1310, connected toswitches business logic 1308 andredundant business logic 1310 may be connected to anaddress bus 1402 and adata bus 1404. - In some embodiments, as shown in
FIG. 14 , theswitches - In some embodiments, as shown in
FIG. 14 ,address bus 1402 anddata bus 1404 may be in opposite sides of the logic blocks, which are connected in parallel to each one of the buses. In this way, routing of the different on-chip components may be facilitated by thelogic block set 1400. - In some embodiments, each one of the plurality of
deactivation switches 1312 couple at least one of the plurality of primary logic blocks with a clock node, and each one of the plurality ofactivation switches 1314 may be couple at least one of the plurality of redundant blocks with the clock node allowing to connect\disconnect the clock as a simple activation\deactivation mechanism. -
Redundant business logic 1310 of redundantlogic block set 1400 allows the designer to choose, based on area and routing, the blocks that are worth duplication. For example, a chip designer may select larger blocks for duplication because larger blocks may be more error prone. Thus, a chip designer may decide to duplicate large logic blocks. On the other hand, a designer may prefer to duplicate smaller logic blocks because they are easily duplicated without a significant loss of space. Moreover, using the configuration inFIG. 14 , a designer may easily choose to duplicate logic blocks depending on the statistics of errors per area. -
FIG. 15 is a block diagram for anexemplary logic block 1500, consistent with disclosed embodiments. The logic block may bebusiness logic 1308 and/orredundant business logic 1310. In other embodiments, however, the exemplary logic block may describememory logic 1306 or other component ofmemory chip 1300. -
Logic block 1500 presents yet another embodiment where the logic redundancy is used within a small processor pipeline. Thelogic block 1500 may include aregister 1508, a fetchcircuit 1504,decoder 1506, and a write-back circuit 1518. In addition,logic block 1500 may include acomputation unit 1510 and a duplicatedcomputing unit 1512. However, in other embodiments,logic block 1500 may include other units that do not comprise a controller pipeline but include sporadic processing elements that comprise a required business logic. -
Computation unit 1510 and duplicatedcomputation unit 1512 may include a digital circuit capable of performing digital calculations. For example,computation unit 1510 and duplicatedcomputation unit 1512 may include an arithmetic logic unit (ALU) to perform arithmetic and bitwise operations on binary numbers. Alternatively,computation unit 1510 and duplicatedcomputation unit 1512 may include a floating-point unit (FPU), which operates on floating point numbers. In addition, in someembodiments computation unit 1510 and duplicatedcomputation unit 1512 may implement data base related functions like min, max, count, and compare operations, among others. - In some embodiments, as shown in
FIG. 15 ,computation unit 1510 and duplicatedcomputation unit 1512 may be connected to switchingcircuits - In
logic block 1500, the duplicatedcomputation unit 1512 may replicate thecomputation unit 1510. Moreover, in some embodiments,register 1508, fetchcircuit 1504,decoder 1506, and write-back circuit 1518 (collectively referred to as the local logic units) may be smaller in size than thecomputation unit 1510. Because larger elements are more prone to issues during fabrication, a designer may decide to replicate larger units (such as computation unit 1510) instead of smaller units (such as the local logic units). Depending on historic yields and error rates, however, a designed may elect to duplicate local logic units additionally or alternatively to large units (or the entire block). For example,computation unit 1510 may be larger, and thus more error prone, thanregister 1508, fetchcircuit 1504,decoder 1506, and write-back circuit 1518. A designer may choose to duplicatecomputation unit 1510 instead of the other elements inlogic block 1500 or the whole block. -
Logic block 1500 may include a plurality of local configuration switches, each one of the plurality of local configuration switches being connected to at least one of the at least one ofcomputation unit 1510 or duplicatedcomputation unit 1512. Local configuration switches may be configured to disablecomputation unit 1510 and enable duplicatedcomputation unit 1512 when a fault is detected in thecomputation unit 1510. -
FIG. 16 shows block diagrams of exemplary logic blocks connected with a bus, consistent with disclosed embodiments. In some embodiments, logic blocks 1602 (which may representmemory logic 1306,business logic 1308, or redundant business logic 1310) may be independent of each other, may be connected via a bus, and may be activated externally by addressing them specifically. For example,memory chip 1300 may include many logic blocks, each logic block having an ID number. In other embodiments, however, logic blocks 1602 may represent larger units comprised of a plurality one or more ofmemory logic 1306,business logic 1308, orredundant business logic 1310. - In some embodiments, each one of
logic blocks 1602 may be redundant with the other logic blocks 1602. This complete redundancy, in which all blocks may operate as primary or redundant blocks, may improve fabrication yields because a designer may disconnect faulty units while maintaining functionality of the overall chip. For example, a designer may have the ability to disable logic areas that are prone to errors but maintain similar computation capabilities because the all duplicate blocks may be connected to the same address and data buses. For example, the initial number oflogic blocks 1602 may greater than a target capability. Then, disabling somelogic blocks 1602 would not affect the target capability. - A bus connected to the logic blocks may include
address bus 1614,command lines 1616, anddata lines 1618. As shown inFIG. 16 , each one of the logic blocks may be connected independently from each line in the bus. In certain embodiments, however, logic blocks 1602 may be connected in a hierarchical structure to facilitate routing. For instance, each line in the bus may be connected to a multiplexer that routes the line to different logic blocks 1602. - In some embodiments, to allow external access without knowing the internal chip structure, which may change due to enable and disabled units, each one of the logic blocks may include Fused IDs such as fused
identification 1604. Fusedidentification 1604 may include an array of switches (like fuses) that determine an ID and may be connected to a managing circuit. For example, fusedidentification 1604 may be connected to addressmanager 1302. Alternatively, fusedidentification 1604 may be connected to higher memory address units. In these embodiments, fusedidentification 1604 may be configurable to for a specific address. For example, fusedidentification 1604 may include a programmable, non-volatile device that determines a final ID based on instructions received form a managing circuit. - A distributed processor on a memory chip may be designed with the configuration depicted in
FIG. 16 . A testing procedure executed as BIST at chip wakeup or at factory testing may assign running ID numbers to blocks in the plurality of primary logic blocks (memory logic 1306 and business logic 1308) that pass a testing protocol. A testing procedure may also assign illegal ID numbers to blocks in the plurality of primary logic blocks that do not pass the testing protocol. The test procedure may also assign running ID numbers to blocks in the plurality of redundant blocks (redundant logic block 1310) that pass the testing protocol. Because redundant blocks replace failing primary logic blocks, the blocks in the plurality of redundant blocks assigned running ID numbers may be equal to, or greater than, the blocks in the plurality of primary logic blocks assigned illegal ID numbers, thereby disabling the block. In addition, each one of the plurality of primary logic blocks and each one of the plurality of redundant blocks may include at least one fusedidentification 1604. Also, as shown inFIG. 16 , the bus connectinglogic blocks 1602 may include a command line, a data line, and an address line. - In other embodiments, however, all
logic blocks 1602 that are connected to the bus will start disabled and with no ID number. Tested one by one, each good logic block will get a running ID number, and those logic blocks not working will remain with illegal ID, which would disable these blocks. In this manner, redundant logic blocks may improve the fabrication yields by replacing blocks that are known to be defective during the testing process. -
Address bus 1614 may couple a managing circuit to each one of the plurality of memory banks, each one of the plurality of primary logic blocks, and each one of the plurality of redundant blocks. These connections allow the managing circuit to, upon detection of the fault associated with a primary logic blocks (such as business logic 1308), assign an invalid address to the one of the plurality of primary logic blocks and assign a valid address to the one of the plurality of redundant blocks. - For example, as shown in
FIG. 16A , illegal IDs are configured to all logic blocks 1602(a)-(c)—(e.g., address 0xFFF). After testing logic blocks 1602(a) and 1602(c) are verified to be functional while logic block 1602(b) is not functional. InFIG. 16A unshaded logic blocks may represent logic blocks that passed the functionality test successfully, while shaded logic blocks may represent logic blocks that failed the test for functionality. Then, the test procedure changes the illegal IDs to legal IDs for logic blocks that are functional while leaving the illegal IDs for logic blocks that are not functional. As an example, inFIG. 16A , the address for logic blocks 1602(a) and 1602(c) is changed from 0xFFF to 0x001 and 0x002, respectively. In contrast, the address for logic block 1602(b) remains the illegal address 0xFFF. In some embodiments, the ID is changed by programming a corresponding fusedidentification 1604. - Different results from the testing of
logic blocks 1602 may result in a different configuration. For example, as shown inFIG. 16B ,address manager 1302 may initially assign illegal IDs to all logic blocks 1602 (i.e., 0xFFF). The testing results, however, may indicate that both logic blocks 1602(a) and 1602(b) are functional. In these cases, testing of logic block 1602(c) may not be necessary becausememory chip 1300 may require only two logic blocks. Therefore, to minimize testing resources, logic blocks may be tested only according to the minimum number of functional logic blocks needed by the product definition of 1300, leaving other logic blocks untested.FIG. 16B also shows unshaded logic blocks, which represent tested logic blocks that passed the test for functionality, and shaded logic blocks, which represent untested logic blocks. - In these embodiments, a production tester (external or internal, automatic or manual) or a controller executing a BIST at startup, may change illegal IDs to running IDs for tested logic blocks that are functional while leaving the illegal IDs to untested logic blocks. As an example, in
FIG. 16B , the address for logic blocks 1602(a) and 1602(b) is changed from 0xFFF to 0x001 and 0x002, respectively. In contrast, the address for untested logic block 1602(c) remains with the illegal address 0xFFF. -
FIG. 17 is a block diagram forexemplary units FIG. 17 may represent an entire system or chip. Alternatively,FIG. 17 may represent a block in a chip containing other functional blocks. -
Units memory logic 1306 and/orbusiness logic 1308. In theseembodiments units address manager 1302. In other embodiments, however,units business logic 1308 orredundant business logic 1310. -
FIG. 17 presents embodiments in whichunits units - In
FIG. 17 units may be connected in series (e.g., 1702(a)-(c)), and a failing unit (e.g., 1702(b)) may be bypassed when it is defective. The units may further be connected in parallel with switching circuits. For example, in someembodiments units circuits FIG. 17 . In the example depicted inFIG. 17 , unit 1702(b) is defective. For example, unit 1702(b) does not pass a test for a circuit functionality. Therefore, unit 1702(b) may be disabled using, for example, activation switches 1314 (not shown inFIG. 17 ) and/or switching circuit 1722(b) may be activated to bypass unit 1702(b) and sustain the connectivity between logic blocks. - Accordingly, when a plurality of primary units are connected in series, each one of the plurality of units may be connected in parallel with a parallel switch. Upon detection of a fault associated with the one of the plurality of units, the parallel switch connected to the one of the plurality of units may be activated to connect two of the plurality of units.
- In other embodiments, as shown in
FIG. 17 , switchingcircuits 1728 may include a sampling point or more that would cause a cycle or cycles delay maintaining synchronization between different lines of units. When a unit is disabled, shorting the connection between adjacent logic blocks may generate synchronization errors with other calculations. For example, if a task requires data from both A and B lines, and each of A and B is carried by an independent series of units, disabling a unit would cause a desynchronization between the lines that would require further data management. To prevent desynchronizations,sample circuits 1730 may simulate the delay caused by the disabled unit 1712(b). Nonetheless, in some embodiments, the parallel switch may include an anti-fuse instead of asampling circuit 1730. -
FIG. 18 is a block diagram of exemplary units connected in a two-dimension array, consistent with disclosed embodiments.FIG. 18 may represent an entire system or chip. Alternatively,FIG. 18 may represent a block in a chip containing other functional blocks. -
Units 1806 may represent autonomous units that include a plurality of logic blocks such asmemory logic 1306 and/orbusiness logic 1308. However, inother embodiments units 1806 may represent logic units such asbusiness logic 1308. Where convenient, discussion ofFIG. 18 may refer to elements identified inFIG. 13 (e.g., memory chip 1300) and discussed above. - As shown in
FIG. 18 , units may be arranged in a two-dimensional array in which units 1806 (which may include or represent one or more ofmemory logic 1306,business logic 1308, or redundant business logic 1310) are interconnected via switchingboxes 1808 andconnection boxes 1810. In addition, in order to control the configuration of the two-dimensional array, the two-dimensional array may include I/O blocks 1804 in the periphery of the two-dimensional array. -
Connection boxes 1810 may be programmable and reconfigurable devices that may respond to signals inputted from the I/O blocks 1804. For example, connection boxes may include a plurality of input pins fromunits 1806 and may also be connected to switchingboxes 1808. Alternatively,connection boxes 1810 may include a group of switches connecting pins of programmable logic cells with routing tracks, while switchingboxes 1808 may include a group of switches connecting different tracks. - In certain embodiments,
connection boxes 1810 and switchingboxes 1808 may be implemented with configuration switches such asswitches connection boxes 1810 and switchingboxes 1808 may be configured by a production tester or a BIST executed at chip startup. - In some embodiments,
connection boxes 1810 and switchingboxes 1808 may be configured afterunits 1806 are tested for a circuit functionality. In such embodiments, I/O blocks 1804 may be used to send testing signals tounits 1806. Depending on the test results, I/O blocks 1804 may send programming signals that configureconnection boxes 1810 and switchingboxes 1808 in a manner disabling theunits 1806 that fail the testing protocol and enablingunits 1806 that pass the testing protocol. - In such embodiments, the plurality of primary logic blocks and the plurality of redundant blocks may be disposed on the substrate in a two-dimensional grid. Therefore, each one of the plurality of
primary units 1806 and each one of the plurality of redundant blocks, such asredundant business logic 1310, may be interconnected with switchingboxes 1808, and an input block may be disposed in the periphery of each line and each column of the two-dimensional grid. -
FIG. 19 is a block diagram for exemplary units in a complex connection, consistent with disclosed embodiments.FIG. 19 may represent an entire system. Alternatively,FIG. 19 may represent a block in a chip containing other functional blocks. - The complex connection of
FIG. 19 includes units 1902(a)-(f) and configuration switches 1904(a)-(h).Units 1902 may represent autonomous units that include a plurality of logic blocks such asmemory logic 1306 and/orbusiness logic 1308. However, inother embodiments units 1902 may represent logic units such asmemory logic 1306,business logic 1308, orredundant business logic 1310.Configuration switches 1904 may include any ofdeactivation switches 1312 and activation switches 1314. - As shown in
FIG. 19 , the complex connection may includeunits 1902 in two planes. For example, the complex connection may include two independent substrates separated in the z-axis. Alternatively, or additionally,units 1902 may be arranged in two surfaces of a substrate. For example, with the objective to reduce the area ofmemory chip 1300,substrate 1301 may be arranged in two overlapping surfaces and connected withconfiguration switches 1904 arranged in three dimensions. Configuration switches may includedeactivation switches 1312 and/or activation switches 1314. - A first plane of the substrate may include “main”
unit 1902. These blocks may be enabled by default. In such embodiments, a second plain may include “redundant”unit 1902. These units may be disabled by default. - In some embodiments,
configuration switches 1904 may include anti-fuses. Thus, after testing ofunits 1902, the blocks may be connected in a tile of functional units by switching certain anti-fuses to “always-on” and disable selectedunits 1902, even if they are in a different plane. In the example presented inFIG. 19 , one of the ‘main’ units (unit 1902(e)) is not working.FIG. 19 may represent nonfunctional or untested blocks as shaded blocks while tested or functional blocks may be unshaded. Therefore,configuration switches 1904 are configured so one of the logic blocks in a different plane (e.g., unit 1902(f)) becomes active. In this way even though one of the main logic blocks was defective, the memory chip is still working by replacing a spare logic unit. -
FIG. 19 additionally shows that one of the units 1902 (i.e., 1902(c)) in the second plane is not tested or enabled because the main logic blocks are functional. For example, inFIG. 19 , both main units 1902(a) and 1902(d) passed a test for functionality. Thus, units 1902(c) was not tested or enabled. Therefore,FIG. 19 shows the ability to specifically select the logic blocks that become active depending on testing results. - In some embodiments, as shown in
FIG. 19 , not allunits 1902 in a first plain may have a corresponding spare or redundant blocks. However, in other embodiments, all units may be redundant with each other for complete redundancy where all units are both primary or redundant. In addition, while some implementations may follow the star network topology depicted inFIG. 19 , other implementation may use parallel connections, serial connections, and/or couple the different elements with configuration switches in parallel or in series. -
FIG. 20 is an exemplary flowchart illustrating a redundantblock enabling process 2000, consistent with disclosed embodiments. The enablingprocess 2000 may be implemented formemory chip 1300 and specially for DRAM memory chips. In some embodiments,process 2000 may include steps of testing each one of a plurality of logic blocks on the substrate of the memory chip for at least one circuit functionality, identifying faulty logic blocks in the plurality of primary logic blocks based on the testing results, testing at least one redundant or additional logic block on the substrate of the memory chip for the at least one circuit functionality, disabling the at least one faulty logic block by applying an external signal to a deactivation switch, and enabling the at least one redundant block by applying the external signal to an activation switch, the activation switch being connected with the at least one redundant block and being disposed on the substrate of the memory chip. The description ofFIG. 20 below further elaborates on each step ofprocess 2000. -
Process 2000 may include testing a plurality of logic blocks (step 2002), such asbusiness block 1308 and a plurality of redundant blocks (e.g., redundant business block 1310). The testing may be before packaging using, for example, probing stations for on-wafer testing.Step 2000, however, may also be performed after packaging. - The testing in
step 2002 may include applying a finite sequence of testing signals to every logic block inmemory chip 1300 or a subset of logic blocks inmemory chip 1300. The testing signals may include requesting a computation that is expected to yield a 0 or a 1. In other embodiments, the testing signal may request reading a specific address in a memory bank or writing in a specific memory bank. - Testing techniques may be implemented to test the response of the logic blocks under iterative processes in
step 2002. For example, the test may involve testing logic blocks by transmitting instructions to write data in a memory bank and then verifying the integrity of the written data. In some embodiments, the testing may include repeating the algorithm with data inversed. - In alternative embodiments, the testing of
step 2002 may include running a model of the logic blocks to generate a target memory image based on a set of testing instructions. Then, the same sequence of instructions may be executed to the logic blocks in the memory chip, and the results may be recorded. The residual memory image of the simulation may also be compared to the image taken from the test, and any mismatch may be flagged as a failure. - Alternatively, in
step 2002, testing may include shadow modeling, where a diagnostic is generated but the results are not necessarily predicted. Instead, the test using shadow modeling may be run in parallel on both the memory chip and a simulation. For example, when the logic blocks in the memory chip complete an instruction or task, the simulation may be signaled to execute the same instruction. Once the logic blocks in the memory chip finalize the instructions, the two models' architectural states may be compared. If there is a mismatch, then a failure is flagged. - In some embodiments, all logic blocks (including, e.g., each one of
memory logic 1306,business logic 1308, or redundant business logic 1310) may be tested instep 2002. In other embodiments, however, only subsets of the logic blocks may be tested in different testing rounds. For example, in a first round of testing onlymemory logic 1306 and associated blocks may be tested. In a second round, onlybusiness logic 1308 and associated blocks may be tested. In a third round, depending on the results of the first two rounds, logic blocks associated withredundant business logic 1310 may be tested. -
Process 2000 may continue to step 2004. Instep 2004, faulty logic blocks may be identified, and faulty redundant blocks may also be identified. For example, logic blocks that do not pass the testing ofstep 2002 may be identified as faulty blocks instep 2004. In other embodiments, however, only certain faulty logic blocks may be initially identified. For example, in some embodiments, only logic blocks associated withbusiness logic 1308 may be identified, and faulty redundant blocks are only identified if they are required for substituting a faulty logic block. In addition, identifying faulty blocks may include writing on a memory bank or a nonvolatile memory the identification information of the identified faulty blocks. - In
step 2006, faulty logic blocks may be disabled. For example, using a configuration circuit, the faulty logic blocks may be disabled by disconnecting them from clock, ground, and/or power nodes. Alternatively, faulty logic blocks may be disabled by configuring connection boxes in an arrangement that avoids the logic blocks. Yet, in other embodiments, faulty logic blocks may be disabled by receiving an illegal address fromaddress manager 1302. - In
step 2008, redundant blocks that duplicate the faulty logic blocks may be identified. To support the same capabilities of the memory chips even though some logic blocks have failed, instep 2008, redundant blocks that are available and can duplicate faulty logic blocks may be identified. For example, if a logic block that performs multiplications of vectors is determined to be faulty, instep 2008, anaddress manager 1302 or an on-chip controller may identify an available redundant logic block that also performs multiplication of vectors. - In
step 2010, the redundant blocks identified instep 2008 may be enabled. In contrast to the disable operation ofstep 2006, instep 2010, the identified redundant blocks may be enabled by connecting them to clock, ground, and/or power nodes. Alternatively, identified redundant blocks may be enabled by configuring connection boxes in an arrangement that connects the identified redundant blocks. Yet, in other embodiments, identified redundant blocks may be enabled by receiving a running address at the test procedure execution time. -
FIG. 21 is an exemplary flow chart illustrating anaddress assignment process 2100, consistent with disclosed embodiments. Theaddress assignment process 2100 may be implemented formemory chip 1300 and specially for a DRAM memory chips. As described in relation toFIG. 16 , in some embodiments, logic blocks inmemory chip 1300 may be connected to a data bus and have an address identification.Process 2100 describes an address assignment method that disables faulty logic blocks and enables logic blocks that pass a test. The steps described inprocess 2100 will be described as being performed by a production tester or a BIST executed at chip startup; however, other components ofmemory chip 1300 and/or external devices may also perform one or more steps ofprocess 2100. - In
step 2102, the tester may disable all logic and redundant blocks by assigning an illegal identification to each logic block at a chip level. - In
step 2104, the tester may execute a testing protocol of a logic block. For example, the tester may run testing methods described instep 2002 for one or more of the logic blocks inmemory chip 1300. - In
step 2106, depending on the results of the test instep 2104, the tester may determine whether the logic block is defective. If the logic block is not defective (step 2106: no), address manager may assign a running ID to the tested logic block instep 2108. If the logic block is defective (step 2106: yes),address manager 1302 may leave the illegal ID for the defective logic block instep 2110. - In
step 2112,address manager 1302 may select a redundant logic block that replicates the defective logic block. In some embodiments, the redundant logic block that replicates the defective logic block may have the same components and connections to the defective logic blocks. In other embodiments, however, the redundant logic block may have different components and/or connections to the defective logic blocks but be able to perform an equivalent operation. For example, if the defective logic block is designed to perform multiplication of vectors, the selected redundant logic block would also be capable of performing multiplication of vectors, even if it does not have the same architecture as the defective unit. - In
step 2114,address manager 1302 may test the redundant block. For instance, the tester may apply the testing techniques applied instep 2104 to the identified redundant block. - In
step 2116, based on the results of testing instep 2114, the tester may determine whether the redundant block is defective. Instep 2118, if the redundant block is not defective (step 2116: no), the tester may assign a running ID to the identified redundant block. In some embodiments,process 2100 may return to step 2104 afterstep 2118, creating an iteration loop to test all logic blocks in the memory chip. - If the tester determines the redundant block is defective (step 2116: yes), in
step 2120, the tester may determine if additional redundant blocks are available. For example, the tester may query a memory bank with information regarding available redundant logic blocks. If redundant logic blocks are available (step 2120: yes), the tester may return to step 2112 and identify a new redundant logic block replicating the defective logic block. If redundant logic blocks are not available (step 2120: no), instep 2122, the tester may generate an error signal. The error signal may include information of the defective logic block and the defective redundant block. - Coupled Memory Banks
- The presently disclosed embodiments also include a distributed high-performance processor. The processor may include a memory controller that interfaces memory banks and processing units. The processor may be configurable to expedite delivery of data to the processing units for calculations. For example, if a processing unit requires two data instances to perform a task, the memory controller may be configured so communication lines independently provide access to the information from two data instances. The disclosed memory architecture seeks to minimize hardware requirements that are associated with complex cache memory and complex register files schemes. Normally, processor chips include cache hierarchies that allow cores to work directly with registers. However, the cache operations require significant die area and consume additional power. The disclosed memory architecture avoids the use of a cache hierarchy by adding logic components in the memory.
- The disclosed architecture also enables strategic (or even optimized) placement of data in memory banks. Even if the memory banks have a single port and high latency, the disclosed memory architecture may enable high performance and avoid memory accessing bottlenecks by strategically positioning data in different blocks of memory banks. With the goal of providing a continuous stream of data to the processing units, a compilation optimization step may determine how data should be stored in memory banks for specific or generic tasks. Then, the memory controller, which interfaces processing units and memory banks, may be configured to grant access to specific processing units when they require data to perform operations.
- The configuration of the memory chip may be performed by a processing unit (e.g., a configuration manager) or an external interface. The configuration may be also written by a compiler or other SW tool. In addition, the configuration of the memory controller may be based on the available ports in the memory banks and the organization of data in the memory banks. Accordingly, the disclosed architecture may provide processing units with a constant flow of data or simultaneous information from different memory blocks. In this way, computation tasks within the memory may be quickly processed by avoiding latency bottlenecks or cache memory requirements.
- Moreover, data stored in the memory chip may be arranged based on compilation optimization steps. The compilation may allow for building of processing routines in which the processor efficiently assigns tasks to processing units without memory latency associated delays. The compilation may be performed by a compiler and transmitted to a host connected to an external interface in the substrate. Normally, high latency for certain access patterns and/or low numbers of ports would result in data bottlenecks for processing units requiring the data. The disclosed compilation, however, may position data in memory banks in a way that enables processing units to continuously receive data even with disadvantageous memory types.
- Furthermore, in some embodiments, a configuration manager may signal required processing units based on computations that are required by a task. Different processing units or logic blocks in the chip may have specialized hardware or architectures for different tasks. Therefore, depending on the task that will be performed, a processing unit, or a group of processing units, may be selected to perform the task. The memory controller on the substrate may be configurable to route data, or grant access, according to the selection of processing subunits to improve data transfer rates. For example, based on the compilation optimization and the memory architecture, processing units may be granted access to memory banks when they are required to perform a task.
- Moreover, the chip architecture may include on-chip components that facilitate transfer of data by reducing the time required to access data in the memory banks. Therefore, the present disclosure describes chip architecture(s), along with a compilation optimization step, for a high-performance processor capable of performing specific or generic tasks using simple memory instances. The memory instances may have high latency in random access and/or low number of ports, such as those used in a DRAM device or other memory-oriented technologies, but the disclosed architecture may overcome these shortcomings by enabling a continuous (or nearly continuous) flow of data from memory banks to processing units.
- In this application, simultaneous communication may refer to communication within a clock cycle. Alternatively, simultaneous communication may refer to sending information within a predetermine amount of time. For example, simultaneous communication may refer to communication within a few nanoseconds.
-
FIG. 22 provides block diagrams for exemplary processing devices, consistent with disclosed embodiments.FIG. 22A shows a first embodiment of aprocessing device 2200 in which amemory controller 2210 connects afirst memory block 2202 and asecond memory block 2204 using multiplexers.Memory controller 2210 may also connect at least aconfiguration manager 2212, alogic block 2214, and multiple accelerators 2216(a)-(n).FIG. 22B shows a second embodiment ofprocessing device 2200 in whichmemory controller 2210 connectsmemory blocks memory controller 2210 with at least aconfiguration manager 2212, alogic block 2214, and multiple accelerators 2216(a)-(n). In addition,host 2230 may be external and connected toprocessing device 2200 through, for example, an external interface. - Memory blocks 2202 and 2204 may include a DRAM mats or group of mats, DRAM banks, MRAM\PRAM\RERAM\SRAM units, Flash mats, or other memory technologies. Memory blocks 2202 and 2204 may alternatively include non-volatile memories, a flash memory device, a Resistive Random Access Memory (ReRAM) device, or a Magnetoresistive Random Access Memory (MRAM) device.
- Memory blocks 2202 and 2204 may additionally include a plurality of memory cells arranged in rows and columns between a plurality of word lines (not shown) and a plurality of bit lines (not shown). The gates of each row of memory cells may be connected to a respective one of the plurality of word lines. Each column of memory cells may be connected to a respective one of the plurality of bit lines.
- In other embodiments, a memory area (including
memory blocks 2202 and 2204) is built from simple memory instances. In this application, the term “memory instance” may be used interchangeably with the term “memory block.” The memory instances (or blocks) may have poor characteristics. For example, the memories may be only one port memories and may have high random-access latency. Alternatively, or additionally, the memories may be inaccessible during column and line changes and face data access problems related to, for example, capacity charging and/or circuitry setups. Nonetheless, the architecture presented inFIG. 22 still facilitates parallel processing in the memory device by allowing dedicated connections between memory instances and processing units and arranging the data in a certain manner that takes the characteristics of the blocks into account. - In some device architectures, memory instances may include several ports, facilitating the parallel operations. Nonetheless, in such embodiments, the chip may still achieve an improved performance when data is compiled and organized based on the chip architecture. For example, a compiler may improve the efficiency of access in the memory area by providing instructions and organizing data placement, so it can be readily access even using one-port memories.
- Furthermore,
memory blocks memory blocks -
Memory controller 2210 may include a logic circuit to handle the memory access and return the results to the rest of the modules. For example,memory controller 2210 may include an address manager and selection devices, such as multiplexers, to route data between the memory blocks and processing units or grant access to the memory blocks. Alternatively,Memory controller 2210 may include double data rate (DDR) memory controllers used to drive DDR SDRAM, where data is transferred on both rising and falling edges of the system's memory clock. - In addition,
memory controller 2210 may constitute Dual Channel memory controllers. The incorporation of dual channel memory may facilitate control of parallel access lines bymemory controller 2210. The parallel access lines may be configured to have identical lengths to facilitate synchronization of data when multiple lines are used in conjunction. Alternatively, or additionally, the parallel access lines may allow access of multiple memory ports of the memory banks. - In some
embodiments processing device 2200 may include one or more muxes that may be connected to processing units. The processing units may includeconfiguration manager 2212,logic block 2214, andaccelerators 2216, which may be connected directly to the mux. Also,memory controller 2210 may include at least one data input from a plurality of memory banks orblocks memory controller 2210 may simultaneously receive data from memory banks ormemory blocks -
Memory controller 2210 may be connected to each one of the plurality ofmemory blocks configuration manager 2212,logic block 2214, andaccelerators 2216, may be independently connected tomemory controller 2210. In some embodiments,configuration manager 2212 may receive an indication of a task to be performed and, in response, configurememory controller 2210,accelerators 2216, and/orlogic blocks 2214 according to a configuration stored in memory or supplied externally. Alternatively,memory controller 2210 may be configured by an external interface. The task may require at least one computation that may be used to select at least one selected processing unit from the plurality of processing units. Alternatively, or additionally, the selection may be based at least in part upon a capability of the selected processing unit for performing the at least one computation. In response,memory controller 2210 may grant access to the memory banks, or route data between the at least one selected processing unit and at least two memory banks, using dedicated buses and/or in a pipelined memory access. - In some embodiments,
first memory block 2202 of at least two memory blocks may be arranged on a first side of the plurality of processing units; andsecond memory bank 2204 of the at least two memory banks may be arranged on a second side of the plurality of processing units opposite to the first side. Further, a selected processing unit to perform the task, for instance accelerator 2216(n), may be configured to accesssecond memory bank 2204 during a clock cycle in which a communication line is opened to the first memory bank orfirst memory block 2202. Alternatively, the selected processing unit may be configured to transfer data tosecond memory block 2204 during a clock cycle in which a communication line is opened tofirst memory block 2202. - In some embodiments,
memory controller 2210 may be implemented as an independent element, as shown inFIG. 22 . In other embodiments, however,memory controller 2210 may be embedded in the memory area or may be disposed along accelerators 2216(a)-(n). - A processing area in
processing device 2200 may includeconfiguration manager 2212,logic block 2214, and accelerators 2216(a)-(n).Accelerators 2216 may include multiple processing circuits with pre-defined functions and may be defined by a specific application. For example, an accelerator may be a vector multiply accumulate (MAC) unit or a Direct Memory Access (DMA) unit handling memory moving between modules.Accelerators 2216 may also be able to calculate their own address and request the data frommemory controller 2210 or write data to it. For example,configuration manager 2212 may signal at least one ofaccelerators 2216 that he can access the memory bank. Thenaccelerators 2216 may configurememory controller 2210 to route data or grant access to themselves. In addition,accelerators 2216 may include at least one arithmetic logic unit, at least one vector handling logic unit, at least one string compare logic unit, at least one register, and at least one direct memory access. -
Configuration manager 2212 may include digital processing circuits to configureaccelerators 2216 and instructs execution of tasks. For example,configuration manager 2212 may be connected tomemory controller 2210 and each one of the plurality ofaccelerators 2216.Configuration manager 2212 may have its own dedicated memory to hold the configurations ofaccelerators 2216.Configuration manager 2212 may use the memory banks to fetch commands and configurations viamemory controller 2210. Alternatively,configuration manager 2212 may be programmed through an external interface. In certain embodiments,configuration manager 2212 may be implemented with an on-chip reduced instruction set computer (RISC) or an on-chip complex CPU with its own cache hierarchy. In some embodiments,configuration manager 2212 may also be omitted and the accelerators can be configured through an external interface. -
Processing device 2200 may also include an external interface (not shown). The external interface allows access to the memory from an upper level, such a memory bank controller which receives the command fromexternal host 2230 or on-chip main processor or access to the memory fromexternal host 2230 or on-chip main processor. The external interface may allow programming of theconfiguration manager 2212 and theaccelerators 2216 by writing configurations or code to the memory viamemory controller 2210 to be used later byconfiguration manager 2212 or theunits memory controller 2210. Incase configuration manager 2212 is a microcontroller,configuration manager 2212 may allow loading of code from a main memory to the controller local memory via the external interface.Memory controller 2210 may be configured to interrupt the task in response to receiving a request from the external interface. - The external interface may include multiple connectors associated with logic circuits that provide a glue-less interface to a variety of elements on the processing device. The external interface may include: Data I/O Inputs for data reads and output for data writes; External address outputs; External CEO chip select pins; Active-low chip selectors; Byte enable pins; a pin for wait states on the memory cycle; a Write enable pin; an Output enable-active pin; and read-write enable pin. Therefore, the external interface has the required inputs and outputs to control processes and obtain information from the processing device. For example, the external interface may conform to JEDEC DDR standards. Alternatively, or additionally, external interface may conform to other standards such as SPI\OSPI or UART.
- In some embodiments, the external interface may be disposed on the chip substrate and may be connected
external host 2230. The external host may gain access tomemory blocks memory controller 2210, and processing units via the external interface. Alternatively, or additionally,external host 2230 may read and write to the memory or may signalconfiguration manager 2212, through read and write commands, to perform operations such as starting a process and/or stopping a process. In addition,external host 2230 may configure theaccelerators 2216 directly. In some embodiments,external host 2230 be able to perform read/write operations directly onmemory blocks - In some embodiments,
configuration manager 2212 andaccelerators 2216 may be configured to connect the device area with the memory area using direct buses depending on the target task. For example, a subset ofaccelerators 2216 may connect withmemory instances 2204 when the subset of accelerators has the capability to perform computations required to execute the task. By doing such a separation, it is possible to assure that dedicated accelerators get the bandwidth (BW) needed tomemory blocks memory controller 2210 allows quick access to data in different memories even with high row latency time. To achieve the parallelization of connection,memory controller 2210 may be connected to each of the memory instances with data, address, and/or control buses. - The above-discussed inclusion of
memory controller 2210 may eliminate the requirement of a cache hierarchy or complex register file in the processing device. Although the cache hierarchy can be added to give added capabilities, the architecture in processingdevice processing device 2200 may allow a designer to add enough memory blocks or instances based on the processing operations and manage the instances accordingly without a cache hierarchy. For example, the architecture in processingdevice processing device 2200 may eliminate requirements of a cache hierarchy by implementing a pipelined memory access. In the pipelined memory access, processing units may receive a sustaining flow of data in every cycle certain data lines may be opened (or activated) while other data lines receive or transmit data. The sustained flow of data using independent communication lines may allow an improved execution speed and minimum latency due to line changes. - Moreover, the disclosed architecture in
FIG. 22 enables a pipelined memory access it may be possible to organize data in a low number of memory blocks and save power losses caused by line switching. For example, in some embodiments, a compiler may communicatehost 2230 the organization of, or a method to organize, data in memory banks to facilitate access to data during a given task. Then,configuration manager 2212 may define which memory banks, and in some cases which ports of the memory banks, may be accessed by the accelerators. This synchronization between the location of data in memory banks and the access method to data, improves computing tasks by feeding data to the accelerators with minimum latency. For example, in embodiments in whichconfiguration manager 2212 includes a RISC\CPU, the method may be implemented in offline software (SW) and then theconfiguration manager 2212 may be programmed to execute the method. The method may be developed in any language executable by RISC/CPU computers and may be executed on any platform. The inputs of the method may include configuration of the memories behind memory controller and the data itself along with the pattern of memory accesses. In addition, the method may be implemented in a language or machine language specific to the embodiment and may also be just a series of configuration values in binary or text. - As discussed above, in some embodiments, a compiler may provide instructions to host 2230 for organizing data in
memory blocks - The pipelined memory access may generally include steps of: receiving a plurality of addresses of a plurality of memory banks or
memory blocks second memory bank 2204 of the plurality of memory banks; and supplying data from the second address through the second communication line to the at least one of the plurality of processing units and opening a third communication line to a third address in the first memory bank in the first line within a second clock cycle. In some embodiments, the pipelined memory access may be executed with two memory blocks being connected to a single port. In such embodiments,memory controller 2210 may hide the two memory blocks behind a single port but transmit data to the processing units with the pipelined memory access approach. - In some embodiments, a compiler can run on
host 2230 before executing a task. In such embodiments, the compiler may be able to determine a configuration of data flow based on the architecture of the memory device since the configuration would be known to the compiler. - In other embodiments, if the configuration of
memory blocks host 2230 which may arrange data in memory blocks before starting calculations. For example,host 2230 may directly write data inmemory blocks configuration manager 2212 andmemory controller 2210 may not have information regarding required hardware until run time. Then, it may be necessary to delay the selection of anaccelerator 2216 until a task starts running In these situations, the processing units ormemory controller 2210 may randomly select anaccelerator 2216 and create a test data access pattern, which may be modified as the task is executed. - Nonetheless, when the task is known in advance, a compiler may organize data and instructions in memory banks for
host 2230 to provide to a processing unit, such asconfiguration manager 2212, to set signal connections that minimize access latency. For example, in some cases n words may be needed at the same time byaccelerators 2216. However, each memory instance supports retrieving only m words at a time, where “m” and “n” are integers and m<n. Thus, the compiler may place the needed data across different memory instances or blocks facilitating data access. Also, to avoid line miss latencies, a host may split data in different lines of different memory instances ifprocessing device 2200 includes multiple memory instances. The division of data may allow accessing the next line of data in the next instance while still using data from the current instance. - For example, accelerator 2216(a) may be configured to multiply two vectors. Each one of the vectors may be stored in independent memory blocks, such as
memory blocks memory controller 2210 may have more than a single connection to each memory block, the compiler may instruct configuration manager 2212 (or other processing unit) to access ports specific ports. In this way,processing device 2200 may perform a pipelined memory access, continuously providing data to processing units by simultaneously loading words in some lines and transmitting data in other lines. Thus, this pipelined memory access avoid may avoid latency issues. -
FIG. 23 is a block diagram of anexemplary processing device 2300, consistent with disclosed embodiments. The block diagram shows asimplified processing device 2300 displaying a single accelerator in the form ofMAC Unit 2302, configuration manager 2304 (equivalent or similar to configuration manager 2212), memory controller 2306 (equivalent or similar to memory controller 2210), and a plurality of memory blocks 2308(a)-(d). - In some embodiments,
MAC unit 2302 may be a specific accelerator for processing a particular task. By way of example, theprocessing device 2300 may be tasked with 2D-convolutions. Then,configuration manager 2304 can signal an accelerator that has the appropriate hardware to perform calculations associated with the task. For instance,MAC unit 2302 may have four internal incrementing counters (logical adders and registers to manage the four loops needed by a convulsion calculation) and a multiply accumulate unit.Configuration manager 2304 may signalMAC unit 2302 to process incoming data and execute the task.Configuration manager 2304 may transmit an indication toMAC unit 2302 to execute the task. In these situations,MAC unit 2302 may iterate over calculated addresses, multiply the numbers, and accumulate them to an internal register. - In some embodiments,
configuration manager 2304 may configure the accelerators whilememory controller 2306 grants access toblocks 2308 andMAC unit 2302 using dedicated buses. In other embodiments, however,memory controller 2306 can directly configure the accelerators based on instructions received fromconfiguration manger 2304 or an external interface. Alternatively, or additionally,configuration manager 2304 can pre-load a few configurations and allow the accelerator to iteratively run on different addresses with different sizes. In such embodiments,configuration manager 2304 may include a cache memory that stores a command before it is transmitted to at least one of the plurality of processing units, such asaccelerators 2216. However, in otherembodiments configuration manager 2304 may not include a cache. - In some embodiments,
configuration manager 2304 ormemory controller 2306 may receive addresses that need to be accessed for a task.Configuration manager 2304 ormemory controller 2306 may check a register to determine whether the address is already in a loaded line to one of memory blocks 2308. If so,memory controller 2306 may read the word frommemory block 2308 and pass it to theMAC unit 2302. If the address is not in a loaded line,configuration manager 2304 may requestmemory controller 2306 may load the line and signalMAC unit 2302 to delay until it is retrieved. - In some embodiments, as shown in
FIG. 23 ,memory controller 2306 may include two inputs form two independent addresses. But if more than two addresses should be accessed simultaneously, and these addresses are in a single memory block (for example it is only in of memory blocks 2308(a)),memory controller 2306 orconfiguration manager 2304 may raise an exception. Alternatively,configuration manager 2304 may return invalid data signal when the two addresses can only be access through a single line. In other embodiments, the unit may delay the process execution until it is possible to retrieve all needed data. This may diminish the overall performance. Nonetheless, a compiler may be able to find a configuration and data placement that would prevent delays. - In some embodiments, a compiler may create a configuration or instruction set for
processing device 2300 that may configureconfiguration manager 2304 andmemory controller 2306 andaccelerator 2302 to handle situations in which multiple addresses need to be accessed from a single memory block but the memory block has one port. For instance, a compiler may re-arrange data inmemory blocks 2308 such that processing units may access multiple lines in memory blocks 2308. - In addition,
memory controller 2306 may also work simultaneously on more than one input at the same time. For example,memory controller 2306 may allow accessing one ofmemory blocks 2308 through one port and supplying the data while receiving a request from a different memory block in another input. Therefore, this operation may result in andaccelerator 2216 tasked with the exemplary 2D-convolutions receiving data from dedicated lines of communication with the pertinent memory blocks. - Additionally, or alternatively,
memory controller 2306 or a logic block may hold refresh counters for everymemory block 2308 and handle the refresh of all lines. Having such a counter allowsmemory controller 2306 to slip in the refresh cycles between dead access times from the devices. - Furthermore,
memory controller 2306 may be configurable to perform the pipelined memory access, receiving addresses and opening lines in memory blocks before supplying the data. The pipelined memory access may provide data to processing units without interruption or delayed clock cycles. For example, whilememory controller 2306 or one of the logic blocks access data with the right line inFIG. 23 , it may be transmitting data in the left line. These methods will be explained in greater detail in connection toFIG. 26 . - In response to the required data,
processing device 2300 may use multiplexors and/or other switching devices to choose which device gets serviced to perform a given task. For example,configuration manager 2304 may configure multiplexers so at least two data lines reach theMAC unit 2302. In this way, a task requiring data from multiple addresses, such as 2D-convolutions, may be performed faster because the vectors or words requiring multiplication during convolution can reach the processing unit simultaneously, in a single clock. This data transferring method may allow the processing units, such asaccelerators 2216, to quickly output a result. - In some embodiments,
configuration manager 2304 may be configurable to execute processes based on priority of tasks. For example,configuration manager 2304 can be configured to let a running process finish without any interruptions. In that case,configuration manger 2304 may provide an instruction or configurations of a task toaccelerators 2216, let them run uninterrupted, and switch multiplexers only when the task is finished. However, in other embodiments,configuration manager 2304 may interrupt a task and reconfigure data routing when it receives a priority task, such a request from an external interface. Nevertheless, withenough memory blocks 2308,memory controller 2306 may be configurable to route data, or grant access, to processing units with dedicated lines that do not have to be changed until a task is completed. Moreover, in some embodiments, all devices may be connected by buses to the entries ofconfiguration manager 2304, and the devices may manage access between themselves and the buses (e.g., using the same logic as a multiplexer). Therefore,memory controller 2306 may be directly connected to a number of memory instances or memory blocks. - Alternatively,
memory controller 2306 may be connected directly to memory sub-instances. In some embodiments, each memory instance or block can be built from sub-instances (for example, DRAM may be built from mats with independent data lines arranged in multiple sub-blocks). Further, the instances may include at least one of DRAM mats, DRAM, banks, flash mats, or SRAM mats or any other type of memory. Then,memory controller 2306 may include dedicated lines to address sub-instances directly to minimize latency during a pipelined memory access. - In some embodiments,
memory controller 2306 may also hold the logic needed for a specific memory instance (such as row\col decoders, refresh logic, etc.) andmemory blocks 2308 may handle its own logic. Therefore, memory blocks 2308 may get an address and generate commands for return\write data. -
FIG. 24 depicts exemplary memory configuration diagrams, consistent with disclosed embodiments. In some embodiments, a compiler generating code or configuration forprocessing device 2200 may perform a method to configure loading frommemory blocks processing device 2200, a compiler may implement methods of fitting data in more than one memory location of each memory block. The compiler may also store data in sequence and evaluate the latency of each memory block to avoid line miss latency. In some embodiments, the host may be part of a processing unit, such asconfiguration manger 2212, but in other embodiments the compiler host may be connected toprocessing device 2200 via an external interface. In such embodiments, the host may run compiling functions, such as the ones described for the compiler. - In some embodiments,
configuration manager 2212 may be a CPU or a micro controller (uC). In such embodiments,configuration manager 2212 may have to access the memory to fetch commands or instructions placed in the memory. A specific compiler may generate the code and place it in the memory in a manner that allows for consecutive commands to be stored in the same memory line and across a number of memory banks to allow for the pipelined memory access also on the fetched command In these embodiments,configuration manager 2212 andmemory controller 2210 may be capable of avoiding row latency in linear execution by facilitating the pipelined memory access. - The previous case of linear execution of a program described a method for a compiler to recognize and place the instructions to allow for pipelined memory execution. However other software structures may be more complex and would require the compiler to recognize them and act accordingly. For example, in case a task requires loops and branches, a compiler may place all the loop code inside a single line so that the single line can be looped without line opening latency. Then,
memory controller 2210 may not need to change lines during an execution. - In some embodiments,
configuration manager 2212 may include internal caching or small memory. The internal caching may store commands that are executed byconfiguration manager 2212 to handle branches and loops. For example, commands in internal caching memory may include instructions to configure accelerators for accessing memory blocks. -
FIG. 25 is an exemplary flowchart illustrating a possiblememory configuration process 2500, consistent with disclosed embodiments. Where convenient in describingmemory configuration process 2500, reference may be made to the identifiers of elements depicted inFIG. 22 and described above. In some embodiments,process 2500 may be executed by a compiler that provides instructions to a host connected through an external interface. In other embodiments,process 2500 may be executed by components ofprocessing device 2200, such asconfiguration manager 2212. - In general,
process 2500 may include determining a number of words required simultaneously to perform the task; determining a number of words that can be accessed simultaneously from each one of the plurality of memory banks; and dividing the number of words required simultaneously between multiple memory banks when the number of words required simultaneously is greater than the number of words that can be accessed simultaneously. Moreover, dividing the number of words required simultaneously may include executing a cyclic organization of words and sequentially assigning one word per memory bank. - More specifically,
process 2500 may begin withstep 2502, in which a compiler may receive a task specification. The specification includes required computations and/or a priority level. - In
step 2504, a compiler may identify an accelerator, or group of accelerators, that may perform the task. Alternatively, the compiler may generate instructions so the processing units, such asconfiguration manager 2212, may identify an accelerator to perform the task. For example, using the requiredcomputation configuration manger 2212 may identify accelerators in the group ofaccelerators 2216 that may process the task. - In
step 2506, the compiler may determine a number of words that needs to be simultaneously accessed to execute the task. For example, the multiplication of two vectors requires access to at least two vectors, and the compiler may therefore determine that vector words must be simultaneously accessed to perform the operation. - In
step 2508, the compiler may determine a number of cycles necessary to execute the task. For example, if the task requires a convolution operation of four by-products, the compiler may determine that at least 4 cycles will be necessary to perform the task. - In
step 2510, the compiler may place words that are needed to be accessed simultaneously in different memory banks. In that way,memory controller 2210 may be configured to open lines to different memory instances and access the required memory blocks within a clock cycle, without any required cached data. - In
step 2512, the compiler place words that are accessed sequentially in the same memory banks. For example, in the case that four cycles of operations are required, the compiler may generate instructions to write needed words in sequential cycles in a single memory block to avoid changing lines between different memory blocks during execution. - In
step 2514, compiler generate instructions for programming processing units, such asconfiguration manager 2212. The instructions may specify conditions to operate a switching device (such as a multiplexor) or configure a data bus. With such instructions,configuration manager 2212 may configurememory controller 2210 to route data from, or grant access to, memory blocks to processing units using dedicated lines of communication according to a task. -
FIG. 26 is an exemplary flowchart illustrating amemory read process 2600, consistent with disclosed embodiments. Where convenient in describing memory readprocess 2600, reference may be made to the identifiers of elements depicted inFIG. 22 and described above. In some embodiments, as described below,process 2600 may be implemented bymemory controller 2210. In other embodiments, however,process 2600 may be implemented by other elements in theprocessing device 2200, such asconfiguration manager 2212. - In
step 2602,memory controller 2210,configuration manager 2212, or other processing units may receive an indication to route data from, or grant access to, a memory bank. The request may specify an address and a memory block. - In some embodiments, the request may be received via a data bus specifying a read command in
line 2218 and address inline 2220. In other embodiments, the request may be received via demultiplexers connected tomemory controller 2210. - In
step 2604,configuration manager 2212, a host, or other processing units, may query an internal register. The internal register may include information regarding opened lines to memory banks, opened addresses, opened memory blocks, and/or upcoming tasks. Based on the information in the internal register, it may be determined whether there are lines opened to the memory bank and/or whether the memory block received the request instep 2602. Alternatively, or additionally,memory controller 2210 may directly query the internal register. - If the internal register indicates that the memory bank is not loaded in an opened line (step 2606: no),
process 2600 may continue to step 2616 and a line may be loaded to a memory bank associated with the received address. In addition,memory controller 2210 or a processing unit, such asconfiguration manager 2212, may signal a delay to the element requesting information from the memory address instep 2616. For example, ifaccelerator 2216 is requesting the memory information that is located an already occupied memory block,memory controller 2210 may send a delay signal to the accelerator instep 2618. Instep 2620,configuration manager 2212 ormemory controller 2210 may update the internal register to indicate a line has opened to a new memory bank or a new memory block. - If the internal register indicates that the memory bank is loaded in an opened line (step 2606: yes),
process 2600 may continue to step 2608. Instep 2608, it may be determined whether the line loaded the memory bank is being used for a different address. If the line is being used for a different address (step 2608: yes), it would indicate that there are two instances in a single block and, therefore, they cannot be accessed simultaneously. Thus, an error or exemption signal may be sent to the element requesting information from the memory address instep 2616. But, if the line is not being used for a different address (step 2608: no), a line may be opened for the address and retrieve data from the target memory bank and continue to step 2614 to transmit data to the to the element requesting information from the memory address. - With
process 2600,processing device 2200 has the ability to establish direct connections between processing units and the memory blocks or memory instances that contain the required information to perform a task. This organization of data would enable reading information from organized vectors in different memory instances, as well as allow the retrieval of information simultaneously from different memory blocks when a device requests a plurality of these addresses. -
FIG. 27 is an exemplary flowchart illustrating anexecution process 2700, consistent with disclosed embodiments. Where convenient in describingexecution process 2700, reference may be made to the identifiers of elements depicted inFIG. 22 and described above. - In
step 2702, a compiler or a local unit, such asconfiguration manager 2212, may receive an indication of a task that needs to be performed. The task may include a single operation (e.g., multiplication) or a more complex operation (e.g., convolution between matrixes). The task may also indicate a required computation. - In
step 2704, the compiler orconfiguration manager 2212 may determine a number of words that is required simultaneously to perform the task. For example, configuration a compiler may determine two words are required simultaneously to perform a multiplication between vectors. In another example, a 2D convolution task,configuration manager 2212 may determine that “n” times “m” words are required for a convolution between matrices, where “n” and “m” are the matrices dimensions. Moreover, instep 2704,configuration manager 2212 may also determine a number of cycles necessary to perform the task. - In
step 2706, depending on the determinations instep 2704, a compiler may write words that need to be accessed simultaneously in a plurality of memory banks disposed on the substrate. For instance, when a number a number of words that can be accessed simultaneously from one of the plurality of memory banks is lower than the number of words that are required simultaneously, a compiler may organize data in multiple memory banks to facilitate access to the different required words within a clock. Moreover, whenconfiguration manager 2212 or the compiler determine a number of cycles is necessary to perform the task, the compiler may write words that are needed in sequential cycles in a single memory bank of the plurality of memory banks to prevent switching of lines between memory banks. - In
step 2708,memory controller 2210 may be configured to read or grant access to at least one first word from a first memory bank from the plurality of memory banks or blocks using a first memory line. - In step 2170, a processing unit, for example one of
accelerators 2216, may process the task using the at least one first word. - In
step 2712,memory controller 2210 may be configured to open a second memory line in a second memory bank. For example, based on the tasks and using the pipelined memory access approach,memory controller 2210 may be configured to open a second memory line in a second memory block where information required for the tasks was written instep 2706. In some embodiments, the second memory line may be opened when the task in step 2170 is about to be completed. For example, if a task requires 100 clocks, the second memory line may be opened in the 90th clock. - In some embodiments, steps 2708-2712 may be executed within one line access cycle.
- In
step 2714,memory controller 2210 may be configured to grant access to data from at least one second word from the second memory bank using the second memory line opened instep 2710. - In step 2176, a processing unit, for example one of
accelerators 2216, may process the task using the at least second word. - In
step 2718,memory controller 2210 may be configured to open a second memory line in the first memory bank. For example, based on the tasks and using the pipelined memory access approach,memory controller 2210 may be configured to open a second memory line to the first memory block. In some embodiments, the second memory line to the first block may be opened when the task in step 2176 is about to be completed. - In some embodiments, steps 2714-2718 may be executed within one line access cycle.
- In
step 2720,memory controller 2210 may read or grant access to at least one third word from the first memory bank from the plurality of memory banks or blocks using a second memory line in the first bank or a first line in a third bank and continuing in different memory banks. - The foregoing description has been presented for purposes of illustration. It is not exhaustive and is not limited to the precise forms or embodiments disclosed. Modifications and adaptations will be apparent to those skilled in the art from consideration of the specification and practice of the disclosed embodiments. Additionally, although aspects of the disclosed embodiments are described as being stored in memory, one skilled in the art will appreciate that these aspects can also be stored on other types of computer readable media, such as secondary storage devices, for example, hard disks or CD ROM, or other forms of RAM or ROM, USB media, DVD, Blu-ray, 4K Ultra HD Blu-ray, or other optical drive media.
- Computer programs based on the written description and disclosed methods are within the skill of an experienced developer. The various programs or program modules can be created using any of the techniques known to one skilled in the art or can be designed in connection with existing software. For example, program sections or program modules can be designed in or by means of .Net Framework, .Net Compact Framework (and related languages, such as Visual Basic, C, etc.), Java, C++, Objective-C, HTML, HTML/AJAX combinations, XML, or HTML with included Java applets.
- Moreover, while illustrative embodiments have been described herein, the scope of any and all embodiments having equivalent elements, modifications, omissions, combinations (e.g., of aspects across various embodiments), adaptations and/or alterations as would be appreciated by those skilled in the art based on the present disclosure. The limitations in the claims are to be interpreted broadly based on the language employed in the claims and not limited to examples described in the present specification or during the prosecution of the application. The examples are to be construed as non-exclusive. Furthermore, the steps of the disclosed methods may be modified in any manner, including by reordering steps and/or inserting or deleting steps. It is intended, therefore, that the specification and examples be considered as illustrative only, with a true scope and spirit being indicated by the following claims and their full scope of equivalents.
Claims (9)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/649,975 US20220156161A1 (en) | 2017-07-30 | 2022-02-04 | Memory-based distributed processor architecture |
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762538722P | 2017-07-30 | 2017-07-30 | |
US201762538724P | 2017-07-30 | 2017-07-30 | |
US201762548990P | 2017-08-23 | 2017-08-23 | |
PCT/IB2018/000995 WO2019025864A2 (en) | 2017-07-30 | 2018-07-30 | A memory-based distributed processor architecture |
US16/512,546 US11269743B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US17/649,975 US20220156161A1 (en) | 2017-07-30 | 2022-02-04 | Memory-based distributed processor architecture |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US16/512,546 Continuation US11269743B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
Publications (1)
Publication Number | Publication Date |
---|---|
US20220156161A1 true US20220156161A1 (en) | 2022-05-19 |
Family
ID=65233543
Family Applications (10)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US16/512,551 Active 2038-08-03 US10664438B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,622 Active 2038-08-31 US11126511B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,546 Active US11269743B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,613 Active US11023336B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,562 Active US10885951B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,590 Active US10762034B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US17/112,817 Active US11301340B2 (en) | 2017-07-30 | 2020-12-04 | Memory-based distributed processor architecture |
US17/397,061 Active 2038-12-05 US11914487B2 (en) | 2017-07-30 | 2021-08-09 | Memory-based distributed processor architecture |
US17/649,975 Abandoned US20220156161A1 (en) | 2017-07-30 | 2022-02-04 | Memory-based distributed processor architecture |
US18/406,346 Pending US20240143457A1 (en) | 2017-07-30 | 2024-01-08 | High performance processor for low-way and high-latency memory instances |
Family Applications Before (8)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US16/512,551 Active 2038-08-03 US10664438B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,622 Active 2038-08-31 US11126511B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,546 Active US11269743B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,613 Active US11023336B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,562 Active US10885951B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US16/512,590 Active US10762034B2 (en) | 2017-07-30 | 2019-07-16 | Memory-based distributed processor architecture |
US17/112,817 Active US11301340B2 (en) | 2017-07-30 | 2020-12-04 | Memory-based distributed processor architecture |
US17/397,061 Active 2038-12-05 US11914487B2 (en) | 2017-07-30 | 2021-08-09 | Memory-based distributed processor architecture |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US18/406,346 Pending US20240143457A1 (en) | 2017-07-30 | 2024-01-08 | High performance processor for low-way and high-latency memory instances |
Country Status (7)
Country | Link |
---|---|
US (10) | US10664438B2 (en) |
EP (2) | EP4187539B1 (en) |
JP (1) | JP7242634B2 (en) |
KR (1) | KR20200047551A (en) |
CN (2) | CN111149166B (en) |
TW (2) | TWI779069B (en) |
WO (1) | WO2019025864A2 (en) |
Families Citing this family (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102369209B1 (en) | 2017-02-23 | 2022-02-28 | 세레브라스 시스템즈 인코포레이티드 | Accelerated Deep Learning |
US11488004B2 (en) | 2017-04-17 | 2022-11-01 | Cerebras Systems Inc. | Neuron smearing for accelerated deep learning |
WO2018193354A1 (en) | 2017-04-17 | 2018-10-25 | Cerebras Systems Inc. | Wavelet representation for accelerated deep learning |
US11157806B2 (en) | 2017-04-17 | 2021-10-26 | Cerebras Systems Inc. | Task activating for accelerated deep learning |
KR20200047551A (en) * | 2017-07-30 | 2020-05-07 | 뉴로블레이드, 리미티드. | Memory-based distributed processor architecture |
US11514996B2 (en) | 2017-07-30 | 2022-11-29 | Neuroblade Ltd. | Memory-based processors |
US11144316B1 (en) | 2018-04-17 | 2021-10-12 | Ali Tasdighi Far | Current-mode mixed-signal SRAM based compute-in-memory for low power machine learning |
WO2020044238A1 (en) * | 2018-08-29 | 2020-03-05 | Cerebras Systems Inc. | Processor element redundancy for accelerated deep learning |
EP3647801A1 (en) * | 2018-10-30 | 2020-05-06 | dSPACE digital signal processing and control engineering GmbH | Method for testing a fpga program |
GB2580151B (en) * | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Identifying processing units in a processor |
EP3966698A4 (en) * | 2019-05-07 | 2023-01-18 | Memryx Inc. | Memory processing unit architecture |
KR20220036950A (en) * | 2019-07-03 | 2022-03-23 | 후아시아 제너럴 프로세서 테크놀러지스 인크. | Pure Functional Neural Network Accelerator Systems and Architectures |
US20210011732A1 (en) * | 2019-07-09 | 2021-01-14 | MemryX Inc. | Matrix Data Reuse Techniques in Processing Systems |
US12061971B2 (en) | 2019-08-12 | 2024-08-13 | Micron Technology, Inc. | Predictive maintenance of automotive engines |
US11860782B2 (en) | 2019-08-13 | 2024-01-02 | Neuroblade Ltd. | Compensating for DRAM activation penalties |
EP4010808A4 (en) * | 2019-08-13 | 2023-11-15 | NeuroBlade Ltd. | Memory-based processors |
US11055003B2 (en) | 2019-08-20 | 2021-07-06 | Micron Technology, Inc. | Supplemental AI processing in memory |
US11182110B1 (en) * | 2019-08-21 | 2021-11-23 | Xilinx, Inc. | On-chip memory block circuit |
US11449739B2 (en) | 2019-08-22 | 2022-09-20 | Google Llc | General padding support for convolution on systolic arrays |
US11573705B2 (en) * | 2019-08-28 | 2023-02-07 | Micron Technology, Inc. | Artificial intelligence accelerator |
US11017842B2 (en) | 2019-08-29 | 2021-05-25 | Micron Technology, Inc. | Copy data in a memory system with artificial intelligence mode |
US10915298B1 (en) | 2019-10-08 | 2021-02-09 | Ali Tasdighi Far | Current mode multiply-accumulate for compute in memory binarized neural networks |
CN112783555A (en) * | 2019-11-11 | 2021-05-11 | 深圳市中兴微电子技术有限公司 | RISC-V vector expansion instruction-based encoding processing method and device, and storage medium |
EP3841530B1 (en) | 2019-11-15 | 2023-11-08 | Kunlunxin Technology (Beijing) Company Limited | Distributed ai training topology based on flexible cable connection |
CN114430838A (en) * | 2019-12-19 | 2022-05-03 | 谷歌有限责任公司 | Processing continuous inputs using neural network accelerators |
US11610104B1 (en) | 2019-12-30 | 2023-03-21 | Ali Tasdighi Far | Asynchronous analog accelerator for fully connected artificial neural networks |
US11615256B1 (en) | 2019-12-30 | 2023-03-28 | Ali Tasdighi Far | Hybrid accumulation method in multiply-accumulate for machine learning |
KR20210092467A (en) * | 2020-01-16 | 2021-07-26 | 삼성전자주식회사 | Memory die including local processor and global processor, memory device, and electronic device |
TWI727643B (en) * | 2020-02-05 | 2021-05-11 | 旺宏電子股份有限公司 | Artificial intelligence accelerator and operation thereof |
RU2732201C1 (en) * | 2020-02-17 | 2020-09-14 | Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ | Method for constructing processors for output in convolutional neural networks based on data-flow computing |
CN111600204B (en) * | 2020-06-05 | 2022-03-18 | 杭州交联电力设计股份有限公司 | Automatic arrangement method of single-group electrical equipment |
US11409594B2 (en) * | 2020-06-27 | 2022-08-09 | Intel Corporation | Self-supervised learning system for anomaly detection with natural language processing and automatic remediation |
US11693699B2 (en) | 2020-07-02 | 2023-07-04 | Apple Inc. | Hybrid memory in a dynamically power gated hardware accelerator |
US11604645B2 (en) * | 2020-07-22 | 2023-03-14 | Flex Logix Technologies, Inc. | MAC processing pipelines having programmable granularity, and methods of operating same |
CN116034340A (en) * | 2020-08-28 | 2023-04-28 | 西门子工业软件有限公司 | Method and system for protocol processing |
CN112256409B (en) * | 2020-09-15 | 2022-03-04 | 中科驭数(北京)科技有限公司 | Task execution method and device based on multiple database accelerators |
US11556790B2 (en) * | 2020-09-30 | 2023-01-17 | Micron Technology, Inc. | Artificial neural network training in memory |
EP4229511A1 (en) * | 2020-10-16 | 2023-08-23 | Neuroblade, Ltd. | Memory appliances for memory intensive operations |
US11977915B2 (en) | 2020-12-15 | 2024-05-07 | Western Digital Technologies, Inc. | Non-volatile memory with intelligent compute task distribution |
US11314508B1 (en) * | 2021-02-01 | 2022-04-26 | National Technology & Engineering Solutions Of Sandia, Llc | FPGA-based computing system for processing data in size, weight, and power constrained environments |
TWI775402B (en) * | 2021-04-22 | 2022-08-21 | 臺灣發展軟體科技股份有限公司 | Data processing circuit and fault-mitigating method |
US20220413590A1 (en) * | 2021-06-23 | 2022-12-29 | Maxim Integrated Products, Inc. | Systems and methods for reducing power consumption in compute circuits |
CN113254392B (en) * | 2021-07-12 | 2022-06-14 | 深圳比特微电子科技有限公司 | Data storage method for system on chip and device based on system on chip |
WO2023004347A1 (en) * | 2021-07-20 | 2023-01-26 | The Regents Of The University Of California | Run-time configurable architectures |
TWI779923B (en) * | 2021-11-11 | 2022-10-01 | 南亞科技股份有限公司 | Pattern verification system and operating method thereof |
KR20230068572A (en) * | 2021-11-11 | 2023-05-18 | 삼성전자주식회사 | Connection circuits in memory arrays |
US12050781B2 (en) | 2021-11-24 | 2024-07-30 | Seagate Technology Llc | Distributed data storage system with bottleneck mitigation |
CN116264089A (en) * | 2021-12-15 | 2023-06-16 | 长鑫存储技术有限公司 | Memory device |
JP7243006B1 (en) | 2021-12-20 | 2023-03-22 | エッジコーティックス ピーティーイー. リミテッド | Network-on-chip reconfigurability |
WO2023128009A1 (en) * | 2021-12-30 | 2023-07-06 | 리벨리온 주식회사 | Neural processing device and synchronization method thereof |
US12014798B2 (en) | 2022-03-31 | 2024-06-18 | Macronix International Co., Ltd. | In memory data computation and analysis |
TWI811038B (en) * | 2022-07-25 | 2023-08-01 | 慧榮科技股份有限公司 | Memory controller and method for controlling output of debug messages |
US11630605B1 (en) | 2022-08-10 | 2023-04-18 | Recogni Inc. | Methods and systems for processing read-modify-write requests |
CN115328849B (en) * | 2022-08-10 | 2023-10-03 | 苏州迅芯微电子有限公司 | Chip combined structure for data transmission and reception |
US20240070107A1 (en) * | 2022-08-30 | 2024-02-29 | Micron Technology, Inc. | Memory device with embedded deep learning accelerator in multi-client environment |
CN115237036B (en) * | 2022-09-22 | 2023-01-10 | 之江实验室 | Full-digitalization management device for wafer-level processor system |
US11896952B1 (en) * | 2023-10-12 | 2024-02-13 | King Faisal University | Adsorbent using biowaste and plastic waste for wastewater treatment |
CN118151714B (en) * | 2024-02-26 | 2024-09-10 | 北京炎黄国芯科技有限公司 | Charging and discharging digital-analog mixed voltage compensation method |
CN118366520A (en) * | 2024-05-10 | 2024-07-19 | 苏州异格技术有限公司 | FPGA (field programmable gate array) acceleration programming method and device |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020018375A1 (en) * | 1998-08-26 | 2002-02-14 | Ekkehard Miersch | Memory system |
US20100241914A1 (en) * | 2009-03-20 | 2010-09-23 | Phison Electronics Corp. | Controller having flash memory testing functions, and storage system and testing method thereof |
US20180173563A1 (en) * | 2016-12-19 | 2018-06-21 | Intel Corporation | Dynamic runtime task management |
US20180189125A1 (en) * | 2016-12-29 | 2018-07-05 | Sandisk Technologies Llc | Ber model evaluation |
Family Cites Families (265)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4724520A (en) * | 1985-07-01 | 1988-02-09 | United Technologies Corporation | Modular multiport data hub |
US5297260A (en) | 1986-03-12 | 1994-03-22 | Hitachi, Ltd. | Processor having a plurality of CPUS with one CPU being normally connected to common bus |
US4837747A (en) * | 1986-11-29 | 1989-06-06 | Mitsubishi Denki Kabushiki Kaisha | Redundary circuit with a spare main decoder responsive to an address of a defective cell in a selected cell block |
US4873626A (en) * | 1986-12-17 | 1989-10-10 | Massachusetts Institute Of Technology | Parallel processing system with processor array having memory system included in system memory |
US5014235A (en) * | 1987-12-15 | 1991-05-07 | Steven G. Morton | Convolution memory |
EP0421696A3 (en) | 1989-10-02 | 1992-01-29 | Motorola Inc. | Staggered access memory |
US5239654A (en) | 1989-11-17 | 1993-08-24 | Texas Instruments Incorporated | Dual mode SIMD/MIMD processor providing reuse of MIMD instruction memories as data memories when operating in SIMD mode |
US5179702A (en) | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
JP3210319B2 (en) | 1990-03-01 | 2001-09-17 | 株式会社東芝 | Neurochip and neurocomputer using the chip |
DE69132495T2 (en) | 1990-03-16 | 2001-06-13 | Texas Instruments Inc., Dallas | Distributed processing memory |
US5155729A (en) | 1990-05-02 | 1992-10-13 | Rolm Systems | Fault recovery in systems utilizing redundant processor arrangements |
US5713037A (en) | 1990-11-13 | 1998-01-27 | International Business Machines Corporation | Slide bus communication functions for SIMD/MIMD array processor |
US5590345A (en) | 1990-11-13 | 1996-12-31 | International Business Machines Corporation | Advanced parallel array processor(APAP) |
EP0485690B1 (en) * | 1990-11-13 | 1999-05-26 | International Business Machines Corporation | Parallel associative processor system |
JP3001252B2 (en) * | 1990-11-16 | 2000-01-24 | 株式会社日立製作所 | Semiconductor memory |
US5214747A (en) | 1990-12-24 | 1993-05-25 | Eastman Kodak Company | Segmented neural network with daisy chain control |
US5440752A (en) | 1991-07-08 | 1995-08-08 | Seiko Epson Corporation | Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU |
US5506992A (en) | 1992-01-30 | 1996-04-09 | Saxenmeyer; George | Distributed processing system with asynchronous communication between processing modules |
US5502728A (en) | 1992-02-14 | 1996-03-26 | International Business Machines Corporation | Large, fault-tolerant, non-volatile, multiported memory |
KR960002777B1 (en) * | 1992-07-13 | 1996-02-26 | 삼성전자주식회사 | Row redundancy device for a semiconductor device |
US5345552A (en) * | 1992-11-12 | 1994-09-06 | Marquette Electronics, Inc. | Control for computer windowing display |
US5396608A (en) * | 1993-06-28 | 1995-03-07 | Analog Devices, Inc. | Method and apparatus for accessing variable length words in a memory array |
US5752036A (en) | 1993-10-05 | 1998-05-12 | Seiko Epson Corporation | Apparatus for generating a program for parallel processing |
EP0694854B1 (en) | 1994-07-28 | 2002-06-05 | International Business Machines Corporation | Improved neural semiconductor chip architectures and neural networks incorporated therein |
JP3723599B2 (en) * | 1995-04-07 | 2005-12-07 | 株式会社ルネサステクノロジ | Semiconductor memory device |
US5956703A (en) | 1995-07-28 | 1999-09-21 | Delco Electronics Corporation | Configurable neural network integrated circuit |
JP3252666B2 (en) * | 1995-08-14 | 2002-02-04 | 日本電気株式会社 | Semiconductor storage device |
JP3036411B2 (en) * | 1995-10-18 | 2000-04-24 | 日本電気株式会社 | Semiconductor storage integrated circuit device |
JPH09198861A (en) * | 1996-01-16 | 1997-07-31 | Mitsubishi Electric Corp | Synchronous semiconductor storage device |
JP3355595B2 (en) * | 1996-03-25 | 2002-12-09 | シャープ株式会社 | Nonvolatile semiconductor memory device |
JPH09288888A (en) * | 1996-04-22 | 1997-11-04 | Mitsubishi Electric Corp | Semiconductor memory |
IT1288076B1 (en) | 1996-05-30 | 1998-09-10 | Antonio Esposito | ELECTRONIC NUMERICAL MULTIPROCESSOR PARALLEL MULTIPROCESSOR WITH REDUNDANCY OF COUPLED PROCESSORS |
US5844856A (en) * | 1996-06-19 | 1998-12-01 | Cirrus Logic, Inc. | Dual port memories and systems and methods using the same |
US5802005A (en) * | 1996-09-23 | 1998-09-01 | Texas Instruments Incorporated | Four bit pre-fetch sDRAM column select architecture |
US5841712A (en) * | 1996-09-30 | 1998-11-24 | Advanced Micro Devices, Inc. | Dual comparator circuit and method for selecting between normal and redundant decode logic in a semiconductor memory device |
JPH10269765A (en) * | 1997-03-24 | 1998-10-09 | Mitsubishi Electric Corp | Semiconductor memory device |
US6026464A (en) | 1997-06-24 | 2000-02-15 | Cisco Technology, Inc. | Memory control system and method utilizing distributed memory controllers for multibank memory |
US6044438A (en) | 1997-07-10 | 2000-03-28 | International Business Machiness Corporation | Memory controller for controlling memory accesses across networks in distributed shared memory processing systems |
JP4039532B2 (en) * | 1997-10-02 | 2008-01-30 | 株式会社ルネサステクノロジ | Semiconductor integrated circuit device |
US6096094A (en) * | 1997-10-03 | 2000-08-01 | National Instruments Corporation | Configuration manager for configuring a data acquisition system |
US5959929A (en) * | 1997-12-29 | 1999-09-28 | Micron Technology, Inc. | Method for writing to multiple banks of a memory device |
JPH11203862A (en) | 1998-01-13 | 1999-07-30 | Mitsubishi Electric Corp | Semiconductor storage device |
NO308149B1 (en) | 1998-06-02 | 2000-07-31 | Thin Film Electronics Asa | Scalable, integrated data processing device |
US6349051B1 (en) | 1998-01-29 | 2002-02-19 | Micron Technology, Inc. | High speed data bus |
US6173356B1 (en) * | 1998-02-20 | 2001-01-09 | Silicon Aquarius, Inc. | Multi-port DRAM with integrated SRAM and systems and methods using the same |
US6678801B1 (en) | 1998-04-17 | 2004-01-13 | Terraforce Technologies Corp. | DSP with distributed RAM structure |
KR100273293B1 (en) * | 1998-05-13 | 2001-01-15 | 김영환 | Refresh scheme of redundant word lines |
US6553355B1 (en) | 1998-05-29 | 2003-04-22 | Indranet Technologies Limited | Autopoietic network system endowed with distributed artificial intelligence for the supply of high volume high-speed multimedia telesthesia telemetry, telekinesis, telepresence, telemanagement, telecommunications, and data processing services |
JP2000011681A (en) | 1998-06-22 | 2000-01-14 | Mitsubishi Electric Corp | Synchronous semiconductor memory device |
DE69904181D1 (en) | 1998-06-23 | 2003-01-09 | Intellix As Frederiksberg | CLASSIFICATION SYSTEM AND METHOD WITH N-TUPLE OR RAM-BASED NEURAL NETWORK |
US6366989B1 (en) * | 1998-09-17 | 2002-04-02 | Sun Microsystems, Inc. | Programmable memory controller |
US6041400A (en) | 1998-10-26 | 2000-03-21 | Sony Corporation | Distributed extensible processing architecture for digital signal processing applications |
US6798420B1 (en) * | 1998-11-09 | 2004-09-28 | Broadcom Corporation | Video and graphics system with a single-port RAM |
US6216178B1 (en) | 1998-11-16 | 2001-04-10 | Infineon Technologies Ag | Methods and apparatus for detecting the collision of data on a data bus in case of out-of-order memory accesses of different times of memory access execution |
US6067262A (en) | 1998-12-11 | 2000-05-23 | Lsi Logic Corporation | Redundancy analysis for embedded memories with built-in self test and built-in self repair |
WO2000036492A2 (en) | 1998-12-18 | 2000-06-22 | Triconex Corporation | Method and apparatus for processing control using a multiple redundant processor control system |
US6523018B1 (en) | 1998-12-29 | 2003-02-18 | International Business Machines Corporation | Neural chip architecture and neural networks incorporated therein |
JP2000207884A (en) * | 1999-01-11 | 2000-07-28 | Hitachi Ltd | Semiconductor integrated circuit device |
US6389497B1 (en) | 1999-01-22 | 2002-05-14 | Analog Devices, Inc. | DRAM refresh monitoring and cycle accurate distributed bus arbitration in a multi-processing environment |
US6145069A (en) | 1999-01-29 | 2000-11-07 | Interactive Silicon, Inc. | Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices |
GB9902115D0 (en) | 1999-02-01 | 1999-03-24 | Axeon Limited | Neural networks |
DE19906382A1 (en) * | 1999-02-16 | 2000-08-24 | Siemens Ag | Semiconductor memory with number of memory banks |
US6453398B1 (en) * | 1999-04-07 | 2002-09-17 | Mitsubishi Electric Research Laboratories, Inc. | Multiple access self-testing memory |
JP3959211B2 (en) * | 1999-09-22 | 2007-08-15 | 株式会社東芝 | Semiconductor memory device |
WO2000070686A1 (en) | 1999-05-14 | 2000-11-23 | Hitachi, Ltd. | Semiconductor device, image display device, and method and apparatus for manufacture thereof |
US6404694B2 (en) | 1999-08-16 | 2002-06-11 | Hitachi, Ltd. | Semiconductor memory device with address comparing functions |
US6751698B1 (en) | 1999-09-29 | 2004-06-15 | Silicon Graphics, Inc. | Multiprocessor node controller circuit and method |
US6708254B2 (en) | 1999-11-10 | 2004-03-16 | Nec Electronics America, Inc. | Parallel access virtual channel memory system |
JP2001155485A (en) * | 1999-11-29 | 2001-06-08 | Mitsubishi Electric Corp | Semiconductor memory |
US6414890B2 (en) * | 1999-12-27 | 2002-07-02 | Mitsubishi Denki Kabushiki Kaisha | Semiconductor memory device capable of reliably performing burn-in test at wafer level |
US6601126B1 (en) | 2000-01-20 | 2003-07-29 | Palmchip Corporation | Chip-core framework for systems-on-a-chip |
US6988154B2 (en) | 2000-03-10 | 2006-01-17 | Arc International | Memory interface and method of interfacing between functional entities |
US6668308B2 (en) | 2000-06-10 | 2003-12-23 | Hewlett-Packard Development Company, L.P. | Scalable architecture based on single-chip multiprocessing |
JP4632107B2 (en) * | 2000-06-29 | 2011-02-16 | エルピーダメモリ株式会社 | Semiconductor memory device |
US6785780B1 (en) * | 2000-08-31 | 2004-08-31 | Micron Technology, Inc. | Distributed processor memory module and method |
US6785841B2 (en) | 2000-12-14 | 2004-08-31 | International Business Machines Corporation | Processor with redundant logic |
US20020087828A1 (en) * | 2000-12-28 | 2002-07-04 | International Business Machines Corporation | Symmetric multiprocessing (SMP) system with fully-interconnected heterogenous microprocessors |
WO2002059743A2 (en) | 2001-01-25 | 2002-08-01 | Improv Systems, Inc. | Compiler for multiple processor and distributed memory architectures |
US6714467B2 (en) * | 2002-03-19 | 2004-03-30 | Broadcom Corporation | Block redundancy implementation in heirarchical RAM's |
US6396760B1 (en) | 2001-03-16 | 2002-05-28 | Virage Logic Corporation | Memory having a redundancy scheme to allow one fuse to blow per faulty memory column |
US7233998B2 (en) * | 2001-03-22 | 2007-06-19 | Sony Computer Entertainment Inc. | Computer architecture and software cells for broadband networks |
JP2003092364A (en) * | 2001-05-21 | 2003-03-28 | Mitsubishi Electric Corp | Semiconductor memory device |
US6385071B1 (en) * | 2001-05-21 | 2002-05-07 | International Business Machines Corporation | Redundant scheme for CAMRAM memory array |
JP2003068074A (en) * | 2001-08-30 | 2003-03-07 | Mitsubishi Electric Corp | Semiconductor memory |
JP2003132675A (en) * | 2001-10-26 | 2003-05-09 | Seiko Epson Corp | Semiconductor memory |
US6778443B2 (en) * | 2001-12-25 | 2004-08-17 | Kabushiki Kaisha Toshiba | Non-volatile semiconductor memory device having memory blocks pre-programmed before erased |
WO2003060722A1 (en) | 2002-01-09 | 2003-07-24 | Renesas Technology Corp. | Memory system and memory card |
US6640283B2 (en) | 2002-01-16 | 2003-10-28 | Hewlett-Packard Development Company, L.P. | Apparatus for cache compression engine for data compression of on-chip caches to increase effective cache size |
JP2003263892A (en) * | 2002-03-11 | 2003-09-19 | Toshiba Corp | Semiconductor memory device |
US7107285B2 (en) | 2002-03-16 | 2006-09-12 | Questerra Corporation | Method, system, and program for an improved enterprise spatial system |
US6717834B2 (en) | 2002-03-26 | 2004-04-06 | Intel Corporation | Dual bus memory controller |
US6877046B2 (en) | 2002-03-29 | 2005-04-05 | International Business Machines Corporation | Method and apparatus for memory with embedded processor |
US8010751B2 (en) | 2002-04-14 | 2011-08-30 | Bay Microsystems | Data forwarding engine |
US7836168B1 (en) | 2002-06-04 | 2010-11-16 | Rockwell Automation Technologies, Inc. | System and methodology providing flexible and distributed processing in an industrial controller environment |
US7415594B2 (en) * | 2002-06-26 | 2008-08-19 | Coherent Logix, Incorporated | Processing system with interspersed stall propagating processors and communication elements |
US7159141B2 (en) | 2002-07-01 | 2007-01-02 | Micron Technology, Inc. | Repairable block redundancy scheme |
GB2417586B (en) | 2002-07-19 | 2007-03-28 | Picochip Designs Ltd | Processor array |
US7120068B2 (en) * | 2002-07-29 | 2006-10-10 | Micron Technology, Inc. | Column/row redundancy architecture using latches programmed from a look up table |
KR100510496B1 (en) * | 2002-11-19 | 2005-08-26 | 삼성전자주식회사 | Semiconductor memory device having the structure of being capable of converting page length according to specific mode, and method of converting page length of the semiconductor memory device |
US20040153911A1 (en) * | 2002-12-24 | 2004-08-05 | Alon Regev | Testing of a CAM |
JP4223936B2 (en) | 2003-02-06 | 2009-02-12 | 株式会社リコー | Projection optical system, enlargement projection optical system, enlargement projection apparatus, and image projection apparatus |
US20040181503A1 (en) * | 2003-03-13 | 2004-09-16 | Motorola, Inc. | Information storage and retrieval method and apparatus |
US7194568B2 (en) | 2003-03-21 | 2007-03-20 | Cisco Technology, Inc. | System and method for dynamic mirror-bank addressing |
CN1823392A (en) * | 2003-07-15 | 2006-08-23 | 尔必达存储器株式会社 | Semiconductor storage device |
JP2005092969A (en) * | 2003-09-16 | 2005-04-07 | Renesas Technology Corp | Nonvolatile semiconductor memory |
US7162551B2 (en) * | 2003-10-31 | 2007-01-09 | Lucent Technologies Inc. | Memory management system having a linked list processor |
TWI289750B (en) | 2004-01-05 | 2007-11-11 | Sony Corp | Data storage apparatus, and data storage controlling apparatus and method |
US20050240806A1 (en) | 2004-03-30 | 2005-10-27 | Hewlett-Packard Development Company, L.P. | Diagnostic memory dump method in a redundant processor |
US7519875B2 (en) * | 2004-08-20 | 2009-04-14 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Method and apparatus for enabling a user to determine whether a defective location in a memory device has been remapped to a redundant memory portion |
JP2006294144A (en) * | 2005-04-12 | 2006-10-26 | Toshiba Corp | Nonvolatile semiconductor memory device |
US7978561B2 (en) * | 2005-07-28 | 2011-07-12 | Samsung Electronics Co., Ltd. | Semiconductor memory devices having vertically-stacked transistors therein |
US7562271B2 (en) | 2005-09-26 | 2009-07-14 | Rambus Inc. | Memory system topologies including a buffer device and an integrated circuit memory device |
US8074031B2 (en) | 2005-12-20 | 2011-12-06 | Nxp B.V. | Multi-processor circuit with shared memory banks |
US7826243B2 (en) * | 2005-12-29 | 2010-11-02 | Bitmicro Networks, Inc. | Multiple chip module and package stacking for storage devices |
US8984256B2 (en) | 2006-02-03 | 2015-03-17 | Russell Fish | Thread optimized multiprocessor architecture |
JP2007207380A (en) * | 2006-02-03 | 2007-08-16 | Renesas Technology Corp | Nonvolatile semiconductor memory device |
US20070220369A1 (en) | 2006-02-21 | 2007-09-20 | International Business Machines Corporation | Fault isolation and availability mechanism for multi-processor system |
US20080177979A1 (en) * | 2006-03-01 | 2008-07-24 | Gheorghe Stefan | Hardware multi-core processor optimized for object oriented computing |
US7613883B2 (en) * | 2006-03-10 | 2009-11-03 | Rambus Inc. | Memory device with mode-selectable prefetch and clock-to-core timing |
US7610537B2 (en) | 2006-04-04 | 2009-10-27 | International Business Machines Corporation | Method and apparatus for testing multi-core microprocessors |
US7882307B1 (en) | 2006-04-14 | 2011-02-01 | Tilera Corporation | Managing cache memory in a parallel processing environment |
US8648403B2 (en) | 2006-04-21 | 2014-02-11 | International Business Machines Corporation | Dynamic memory cell structures |
US7949820B2 (en) | 2006-05-23 | 2011-05-24 | Dataram, Inc. | Method for managing memory access and task distribution on a multi-processor storage device |
US7882320B2 (en) | 2006-05-23 | 2011-02-01 | Dataram, Inc. | Multi-processor flash memory storage device and management system |
JP2007317247A (en) * | 2006-05-23 | 2007-12-06 | Nec Electronics Corp | Nonvolatile semiconductor memory device and operating method of nonvolatile semiconductor memory device |
KR20070112950A (en) | 2006-05-24 | 2007-11-28 | 삼성전자주식회사 | Multi-port memory device, multi-processor system including the same, and method of transferring data in multi-processor system |
US7640386B2 (en) * | 2006-05-24 | 2009-12-29 | International Business Machines Corporation | Systems and methods for providing memory modules with multiple hub devices |
JP2008010082A (en) * | 2006-06-29 | 2008-01-17 | Nec Electronics Corp | Nonvolatile semiconductor memory device and word line driving method |
KR20090039761A (en) * | 2006-07-14 | 2009-04-22 | 인터디지탈 테크날러지 코포레이션 | Symbol rate hardware accelerator |
KR100748460B1 (en) * | 2006-08-16 | 2007-08-13 | 주식회사 하이닉스반도체 | Semiconductor memory and controlling method of the same |
US7783936B1 (en) * | 2006-09-28 | 2010-08-24 | L-3 Communications, Corp. | Memory arbitration technique for turbo decoding |
US20080109691A1 (en) * | 2006-10-27 | 2008-05-08 | James Norris Dieffenderfer | Method and Apparatus for Executing a BIST Routine |
JP4215795B2 (en) * | 2006-11-20 | 2009-01-28 | エルピーダメモリ株式会社 | Lookup table cascade circuit, lookup table cascade array circuit and pipeline control method thereof |
CN101636712B (en) * | 2006-12-06 | 2016-04-13 | 才智知识产权控股公司(2) | The device of object requests, system and method is served in memory controller |
US7899978B2 (en) | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Dynamic programmable intelligent search memory |
KR100918299B1 (en) * | 2007-04-25 | 2009-09-18 | 삼성전자주식회사 | Flash memory device including a row decoder having no bad bolck data storage means and control method thereof |
US8429493B2 (en) * | 2007-05-12 | 2013-04-23 | Apple Inc. | Memory device with internal signap processing unit |
JP5339541B2 (en) * | 2007-05-25 | 2013-11-13 | マーベル ワールド トレード リミテッド | Bit line decoder and integrated circuit |
US8042082B2 (en) | 2007-09-12 | 2011-10-18 | Neal Solomon | Three dimensional memory in a system on a chip |
US7772880B2 (en) | 2007-09-12 | 2010-08-10 | Neal Solomon | Reprogrammable three dimensional intelligent system on a chip |
US7557605B2 (en) | 2007-09-14 | 2009-07-07 | Cswitch Corporation | Heterogeneous configurable integrated circuit |
US8200992B2 (en) * | 2007-09-24 | 2012-06-12 | Cognitive Electronics, Inc. | Parallel processing computer systems with reduced power consumption and methods for providing the same |
US7721010B2 (en) * | 2007-10-31 | 2010-05-18 | Qimonda North America Corp. | Method and apparatus for implementing memory enabled systems using master-slave architecture |
US8078829B2 (en) * | 2007-12-12 | 2011-12-13 | Itt Manufacturing Enterprises, Inc. | Scaleable array of micro-engines for waveform processing |
US7844798B2 (en) * | 2007-12-13 | 2010-11-30 | Qimonda Ag | Command protocol for integrated circuits |
FR2925187B1 (en) | 2007-12-14 | 2011-04-08 | Commissariat Energie Atomique | SYSTEM COMPRISING A PLURALITY OF TREATMENT UNITS FOR EXECUTING PARALLEL STAINS BY MIXING THE CONTROL TYPE EXECUTION MODE AND THE DATA FLOW TYPE EXECUTION MODE |
JP2009146548A (en) * | 2007-12-18 | 2009-07-02 | Toshiba Corp | Nonvolatile semiconductor storage device |
US8028124B2 (en) | 2007-12-20 | 2011-09-27 | International Business Machines Corporation | Fast processing memory array |
US9196346B2 (en) * | 2008-01-23 | 2015-11-24 | Micron Technology, Inc. | Non-volatile memory with LPDRAM |
US7782703B2 (en) * | 2008-02-01 | 2010-08-24 | Qimonda North America Corp. | Semiconductor memory having a bank with sub-banks |
WO2009097681A1 (en) * | 2008-02-04 | 2009-08-13 | Mosaid Technologies Incorporated | Flexible memory operations in nand flash devices |
JP2009205258A (en) | 2008-02-26 | 2009-09-10 | Toshiba Corp | Semiconductor integrated circuit |
JP2009211780A (en) * | 2008-03-05 | 2009-09-17 | Nec Corp | Address error detector and address error detecting method |
KR20090095955A (en) | 2008-03-07 | 2009-09-10 | 삼성전자주식회사 | Multi port semiconductor memory device for providing direct access function in shared structure of non-volatile memory and multi processor system having the same |
US20110016278A1 (en) | 2008-03-31 | 2011-01-20 | Frederick Ware | Independent Threading of Memory Devices Disposed on Memory Modules |
US8140830B2 (en) * | 2008-05-22 | 2012-03-20 | International Business Machines Corporation | Structural power reduction in multithreaded processor |
US20100005220A1 (en) * | 2008-07-01 | 2010-01-07 | International Business Machines Corporation | 276-pin buffered memory module with enhanced memory system interconnect and features |
US8031505B2 (en) | 2008-07-25 | 2011-10-04 | Samsung Electronics Co., Ltd. | Stacked memory module and system |
KR101493008B1 (en) * | 2008-09-30 | 2015-02-13 | 삼성전자주식회사 | Source line driver circuit and display apparatus thereof |
JP5599559B2 (en) * | 2008-11-27 | 2014-10-01 | ピーエスフォー ルクスコ エスエイアールエル | Semiconductor device and refresh method thereof |
US7877627B1 (en) * | 2008-12-18 | 2011-01-25 | Supercon, L.L.C. | Multiple redundant computer system combining fault diagnostics and majority voting with dissimilar redundancy technology |
US7983065B2 (en) * | 2009-04-08 | 2011-07-19 | Sandisk 3D Llc | Three-dimensional array of re-programmable non-volatile memory elements having vertical bit lines |
US8516408B2 (en) * | 2009-05-26 | 2013-08-20 | Lsi Corporation | Optimization of circuits having repeatable circuit instances |
JP4913878B2 (en) * | 2009-05-27 | 2012-04-11 | ルネサスエレクトロニクス株式会社 | Word line selection circuit, row decoder |
US9378003B1 (en) | 2009-07-23 | 2016-06-28 | Xilinx, Inc. | Compiler directed cache coherence for many caches generated from high-level language source code |
US8442927B2 (en) | 2009-07-30 | 2013-05-14 | Nec Laboratories America, Inc. | Dynamically configurable, multi-ported co-processor for convolutional neural networks |
US9477636B2 (en) | 2009-10-21 | 2016-10-25 | Micron Technology, Inc. | Memory having internal processors and data communication methods in memory |
US8856458B2 (en) | 2009-12-15 | 2014-10-07 | Advanced Micro Devices, Inc. | Polymorphous signal interface between processing units |
KR101107163B1 (en) * | 2010-05-25 | 2012-01-25 | 삼성모바일디스플레이주식회사 | Scan driver and display device using the same |
US20110296078A1 (en) * | 2010-06-01 | 2011-12-01 | Qualcomm Incorporated | Memory pool interface methods and apparatuses |
US9672169B2 (en) | 2010-06-30 | 2017-06-06 | Texas Instruments Incorporated | Dual in line memory module with multiple memory interfaces |
JP5508978B2 (en) * | 2010-07-29 | 2014-06-04 | ルネサスエレクトロニクス株式会社 | Digital-analog conversion circuit and display driver |
US9612979B2 (en) | 2010-10-22 | 2017-04-04 | Intel Corporation | Scalable memory protection mechanism |
US8738860B1 (en) | 2010-10-25 | 2014-05-27 | Tilera Corporation | Computing in parallel processing environments |
KR101212738B1 (en) * | 2010-10-29 | 2012-12-14 | 에스케이하이닉스 주식회사 | Refresh control circuit and semiconductor memory device including the same and control method of refresh |
JP2012174297A (en) * | 2011-02-18 | 2012-09-10 | Elpida Memory Inc | Semiconductor device |
US20140040622A1 (en) | 2011-03-21 | 2014-02-06 | Mocana Corporation | Secure unlocking and recovery of a locked wrapped app on a mobile device |
US9262246B2 (en) | 2011-03-31 | 2016-02-16 | Mcafee, Inc. | System and method for securing memory and storage of an electronic device with a below-operating system security agent |
US9432298B1 (en) | 2011-12-09 | 2016-08-30 | P4tents1, LLC | System, method, and computer program product for improving memory systems |
US9348852B2 (en) * | 2011-04-27 | 2016-05-24 | Microsoft Technology Licensing, Llc | Frequent pattern mining |
US8904537B2 (en) | 2011-05-09 | 2014-12-02 | F—Secure Corporation | Malware detection |
JP5658082B2 (en) | 2011-05-10 | 2015-01-21 | ルネサスエレクトロニクス株式会社 | Semiconductor device |
US8590050B2 (en) | 2011-05-11 | 2013-11-19 | International Business Machines Corporation | Security compliant data storage management |
KR20120132278A (en) | 2011-05-26 | 2012-12-05 | 삼성전자주식회사 | Memory chip, Memory system and access method for Memory chip |
US10078620B2 (en) | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
US9406346B2 (en) * | 2011-06-30 | 2016-08-02 | Sandisk Technologies Llc | Smart bridge for memory core |
US9098209B2 (en) | 2011-08-24 | 2015-08-04 | Rambus Inc. | Communication via a memory interface |
US8599595B1 (en) * | 2011-12-13 | 2013-12-03 | Michael C. Stephens, Jr. | Memory devices with serially connected signals for stacked arrangements |
US9195589B2 (en) * | 2011-12-27 | 2015-11-24 | Intel Corporation | Adaptive configuration of non-volatile memory |
US9110830B2 (en) * | 2012-01-18 | 2015-08-18 | Qualcomm Incorporated | Determining cache hit/miss of aliased addresses in virtually-tagged cache(s), and related systems and methods |
US8977583B2 (en) | 2012-03-29 | 2015-03-10 | International Business Machines Corporation | Synaptic, dendritic, somatic, and axonal plasticity in a network of neural cores using a plastic multi-stage crossbar switching |
US8736831B2 (en) * | 2012-05-15 | 2014-05-27 | Kla-Tencor Corp. | Substrate inspection |
US9619406B2 (en) | 2012-05-22 | 2017-04-11 | Xockets, Inc. | Offloading of computation for rack level servers and corresponding methods and systems |
JP2014010845A (en) * | 2012-06-27 | 2014-01-20 | Ps4 Luxco S A R L | Semiconductor device |
US9348385B2 (en) | 2012-07-09 | 2016-05-24 | L. Pierre deRochement | Hybrid computing module |
KR20140023806A (en) * | 2012-08-17 | 2014-02-27 | 삼성전자주식회사 | Architecture of magnetic resistance memory device |
US8677306B1 (en) | 2012-10-11 | 2014-03-18 | Easic Corporation | Microcontroller controlled or direct mode controlled network-fabric on a structured ASIC |
US8996951B2 (en) | 2012-11-15 | 2015-03-31 | Elwha, Llc | Error correction with non-volatile memory on an integrated circuit |
EP2923279B1 (en) * | 2012-11-21 | 2016-11-02 | Coherent Logix Incorporated | Processing system with interspersed processors; dma-fifo |
WO2014085975A1 (en) | 2012-12-04 | 2014-06-12 | 中国科学院半导体研究所 | Dynamically reconfigurable multistage parallel single-instruction multi-data array processing system |
CN103902472B (en) * | 2012-12-28 | 2018-04-20 | 华为技术有限公司 | Internal storage access processing method, memory chip and system based on memory chip interconnection |
US10318444B2 (en) | 2013-04-11 | 2019-06-11 | The Regents Of The University Of California | Collective memory transfer devices and methods for multiple-core processors |
US9177646B2 (en) | 2013-05-06 | 2015-11-03 | International Business Machines Corporation | Implementing computational memory from content-addressable memory |
US10741226B2 (en) | 2013-05-28 | 2020-08-11 | Fg Src Llc | Multi-processor computer architecture incorporating distributed multi-ported common memory modules |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US9305635B2 (en) | 2013-10-31 | 2016-04-05 | Taiwan Semiconductor Manufacturing Co., Ltd. | High density memory structure |
US9418719B2 (en) * | 2013-11-28 | 2016-08-16 | Gsi Technology Israel Ltd. | In-memory computational device |
US9978014B2 (en) | 2013-12-18 | 2018-05-22 | Intel Corporation | Reconfigurable processing unit |
US20150212861A1 (en) * | 2014-01-24 | 2015-07-30 | Qualcomm Incorporated | Value synchronization across neural processors |
US20160218739A1 (en) * | 2014-02-17 | 2016-07-28 | Mediatek Inc. | Data access methods and data access devices utilizing the same |
US10180828B2 (en) | 2014-04-29 | 2019-01-15 | Significs And Elements, Llc | Systems and methods for power optimization of processors |
US20150324690A1 (en) | 2014-05-08 | 2015-11-12 | Microsoft Corporation | Deep Learning Training System |
JP2015222467A (en) * | 2014-05-22 | 2015-12-10 | ルネサスエレクトロニクス株式会社 | Microcontroller and electronic control device using the same |
US9003109B1 (en) | 2014-05-29 | 2015-04-07 | SanDisk Technologies, Inc. | System and method for distributed computing in non-volatile memory |
US10504020B2 (en) | 2014-06-10 | 2019-12-10 | Sightline Innovation Inc. | System and method for applying a deep learning neural network to data obtained from one or more sensors |
KR20160014976A (en) * | 2014-07-30 | 2016-02-12 | 에스케이하이닉스 주식회사 | Memory device and memory system including the same |
US9810777B2 (en) * | 2014-08-22 | 2017-11-07 | Voxtel, Inc. | Asynchronous LADAR and imaging array |
US9984337B2 (en) | 2014-10-08 | 2018-05-29 | Nec Corporation | Parallelized machine learning with distributed lockless training |
JP2016081340A (en) * | 2014-10-17 | 2016-05-16 | 株式会社東芝 | Multiplex control device |
US10175345B2 (en) * | 2014-10-17 | 2019-01-08 | Voxtel, Inc. | Event tracking imager |
KR102251216B1 (en) | 2014-11-21 | 2021-05-12 | 삼성전자주식회사 | Address-remapped memory chip, memory module and memory system including the same |
WO2016092451A1 (en) * | 2014-12-09 | 2016-06-16 | Basf Se | Optical detector |
US10445641B2 (en) | 2015-02-06 | 2019-10-15 | Deepmind Technologies Limited | Distributed training of reinforcement learning systems |
FR3032814B1 (en) * | 2015-02-18 | 2018-02-02 | Upmem | DRAM CIRCUIT WITH INTEGRATED PROCESSOR |
US20160260024A1 (en) * | 2015-03-04 | 2016-09-08 | Qualcomm Incorporated | System of distributed planning |
US11232848B2 (en) * | 2015-04-30 | 2022-01-25 | Hewlett Packard Enterprise Development Lp | Memory module error tracking |
US20160379109A1 (en) | 2015-06-29 | 2016-12-29 | Microsoft Technology Licensing, Llc | Convolutional neural networks on hardware accelerators |
KR102401271B1 (en) * | 2015-09-08 | 2022-05-24 | 삼성전자주식회사 | Memory system and method of operating the same |
US10726328B2 (en) | 2015-10-09 | 2020-07-28 | Altera Corporation | Method and apparatus for designing and implementing a convolution neural net accelerator |
KR101814577B1 (en) | 2015-10-16 | 2018-01-03 | 삼성전자주식회사 | Method and apparatus for processing instructions using processing-in-memory |
US9904874B2 (en) | 2015-11-05 | 2018-02-27 | Microsoft Technology Licensing, Llc | Hardware-efficient deep convolutional neural networks |
KR102400991B1 (en) * | 2015-12-30 | 2022-05-23 | 삼성전자주식회사 | Semiconductor memory device and memory system including the same |
US11170294B2 (en) | 2016-01-07 | 2021-11-09 | Intel Corporation | Hardware accelerated machine learning |
US10157309B2 (en) | 2016-01-14 | 2018-12-18 | Nvidia Corporation | Online detection and classification of dynamic gestures with recurrent convolutional neural networks |
US9928895B2 (en) * | 2016-02-03 | 2018-03-27 | Samsung Electronics Co., Ltd. | Volatile memory device and electronic device comprising refresh information generator, information providing method thereof, and refresh control method thereof |
US10990872B2 (en) | 2016-03-31 | 2021-04-27 | International Business Machines Corporation | Energy-efficient time-multiplexed neurosynaptic core for implementing neural networks spanning power- and area-efficiency |
US9601183B1 (en) * | 2016-04-14 | 2017-03-21 | Micron Technology, Inc. | Apparatuses and methods for controlling wordlines and sense amplifiers |
US10082964B2 (en) * | 2016-04-27 | 2018-09-25 | Micron Technology, Inc | Data caching for ferroelectric memory |
US10762957B2 (en) * | 2016-06-30 | 2020-09-01 | University of Pittsburgh—of the Commonwealth System of Higher Education | Two-dimensionally accessible non-volatile memory |
US9760827B1 (en) | 2016-07-22 | 2017-09-12 | Alpine Electronics of Silicon Valley, Inc. | Neural network applications in resource constrained environments |
KR102620562B1 (en) * | 2016-08-04 | 2024-01-03 | 삼성전자주식회사 | Nonvolatile memory device |
JP6271655B1 (en) * | 2016-08-05 | 2018-01-31 | 株式会社東芝 | Non-volatile memory |
US10387303B2 (en) | 2016-08-16 | 2019-08-20 | Western Digital Technologies, Inc. | Non-volatile storage system with compute engine to accelerate big data applications |
US9653151B1 (en) | 2016-10-07 | 2017-05-16 | Kilopass Technology, Inc. | Memory array having segmented row addressed page registers |
US20180144244A1 (en) | 2016-11-23 | 2018-05-24 | Vital Images, Inc. | Distributed clinical workflow training of deep learning neural networks |
US10163469B2 (en) * | 2016-11-30 | 2018-12-25 | Micron Technology, Inc. | System and method for write data bus control in a stacked memory device |
US10423876B2 (en) * | 2016-12-01 | 2019-09-24 | Via Alliance Semiconductor Co., Ltd. | Processor with memory array operable as either victim cache or neural network unit memory |
US10032110B2 (en) | 2016-12-13 | 2018-07-24 | Google Llc | Performing average pooling in hardware |
US11062203B2 (en) | 2016-12-30 | 2021-07-13 | Intel Corporation | Neuromorphic computer with reconfigurable memory mapping for various neural network topologies |
US10114795B2 (en) | 2016-12-30 | 2018-10-30 | Western Digital Technologies, Inc. | Processor in non-volatile storage memory |
US11562115B2 (en) | 2017-01-04 | 2023-01-24 | Stmicroelectronics S.R.L. | Configurable accelerator framework including a stream switch having a plurality of unidirectional stream links |
US11397687B2 (en) * | 2017-01-25 | 2022-07-26 | Samsung Electronics Co., Ltd. | Flash-integrated high bandwidth memory appliance |
US11663450B2 (en) | 2017-02-28 | 2023-05-30 | Microsoft Technology Licensing, Llc | Neural network processing with chained instructions |
US10387298B2 (en) | 2017-04-04 | 2019-08-20 | Hailo Technologies Ltd | Artificial neural network incorporating emphasis and focus techniques |
US10032496B1 (en) * | 2017-07-27 | 2018-07-24 | Micron Technology, Inc. | Variable filter capacitance |
KR20200047551A (en) * | 2017-07-30 | 2020-05-07 | 뉴로블레이드, 리미티드. | Memory-based distributed processor architecture |
US10304497B2 (en) * | 2017-08-17 | 2019-05-28 | Micron Technology, Inc. | Power supply wiring in a semiconductor memory device |
US10810141B2 (en) | 2017-09-29 | 2020-10-20 | Intel Corporation | Memory control management of a processor |
US10490245B2 (en) * | 2017-10-02 | 2019-11-26 | Micron Technology, Inc. | Memory system that supports dual-mode modulation |
US10388870B2 (en) * | 2017-10-25 | 2019-08-20 | Sandisk Technologies Llc | Barrier modulated cell structures with intrinsic vertical bit line architecture |
US10541273B2 (en) * | 2017-11-28 | 2020-01-21 | Sandisk Technologies Llc | Vertical thin film transistors with isolation |
US11398453B2 (en) * | 2018-01-09 | 2022-07-26 | Samsung Electronics Co., Ltd. | HBM silicon photonic TSV architecture for lookup computing AI accelerator |
EP3847553A4 (en) * | 2018-09-06 | 2022-05-18 | Neuroblade, Ltd. | Memory-based processors |
US11257538B2 (en) * | 2018-10-03 | 2022-02-22 | Micron Technology, Inc. | Systems and methods for improved reliability of components in dynamic random access memory (DRAM) |
TWI714003B (en) * | 2018-10-11 | 2020-12-21 | 力晶積成電子製造股份有限公司 | Memory chip capable of performing artificial intelligence operation and method thereof |
-
2018
- 2018-07-30 KR KR1020207006169A patent/KR20200047551A/en not_active Application Discontinuation
- 2018-07-30 EP EP23151586.7A patent/EP4187539B1/en active Active
- 2018-07-30 CN CN201880062664.7A patent/CN111149166B/en active Active
- 2018-07-30 JP JP2020505784A patent/JP7242634B2/en active Active
- 2018-07-30 CN CN202111072866.XA patent/CN113918481A/en active Pending
- 2018-07-30 EP EP18841178.9A patent/EP3662474B1/en active Active
- 2018-07-30 TW TW107126383A patent/TWI779069B/en active
- 2018-07-30 WO PCT/IB2018/000995 patent/WO2019025864A2/en unknown
- 2018-07-30 TW TW111132554A patent/TW202301125A/en unknown
-
2019
- 2019-07-16 US US16/512,551 patent/US10664438B2/en active Active
- 2019-07-16 US US16/512,622 patent/US11126511B2/en active Active
- 2019-07-16 US US16/512,546 patent/US11269743B2/en active Active
- 2019-07-16 US US16/512,613 patent/US11023336B2/en active Active
- 2019-07-16 US US16/512,562 patent/US10885951B2/en active Active
- 2019-07-16 US US16/512,590 patent/US10762034B2/en active Active
-
2020
- 2020-12-04 US US17/112,817 patent/US11301340B2/en active Active
-
2021
- 2021-08-09 US US17/397,061 patent/US11914487B2/en active Active
-
2022
- 2022-02-04 US US17/649,975 patent/US20220156161A1/en not_active Abandoned
-
2024
- 2024-01-08 US US18/406,346 patent/US20240143457A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020018375A1 (en) * | 1998-08-26 | 2002-02-14 | Ekkehard Miersch | Memory system |
US20100241914A1 (en) * | 2009-03-20 | 2010-09-23 | Phison Electronics Corp. | Controller having flash memory testing functions, and storage system and testing method thereof |
US20180173563A1 (en) * | 2016-12-19 | 2018-06-21 | Intel Corporation | Dynamic runtime task management |
US20180189125A1 (en) * | 2016-12-29 | 2018-07-05 | Sandisk Technologies Llc | Ber model evaluation |
Non-Patent Citations (1)
Title |
---|
Wikipedia.org, Dynamic random-access memory, June, 2015, page 1-2 (Year: 2015) * |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11914487B2 (en) | Memory-based distributed processor architecture | |
US11837305B2 (en) | Memory-based logic testing | |
US11860782B2 (en) | Compensating for DRAM activation penalties | |
EP3847553A2 (en) | Memory-based processors | |
TWI856974B (en) | Variable word length access |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: NEUROBLADE LTD., ISRAEL Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SITY, ELAD;HILLEL, ELIAD;REEL/FRAME:058891/0985 Effective date: 20190714 |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
AS | Assignment |
Owner name: SILICON VALLEY BANK, CALIFORNIA Free format text: SECURITY INTEREST;ASSIGNOR:NEUROBLADE LTD.;REEL/FRAME:061309/0527 Effective date: 20220929 |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |