# US 10,120,649 B2 · Processor and method for outer product accumulate operations

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,120,649 B2
- Document ID: US10120649B2
- Status: Granted
- Kind: B2
- Application number: 15/224,176
- Filed: 2016-07-29
- Published: 2018-02-01
- Granted: 2018-11-06
- Earliest claimed: 2016-07-29
- Assignees: MicroUnity Systems Engineering, Inc.
- Applicants: MicroUnity Systems Engineering, Inc.
- Inventors: Craig Hansen; John Moussouris; Alexia Massalin
- Web page: https://patentgrep.com/patent/US10120649B2

## CPC

- G06F 7/523: Multiplying only
- G06F 7/5045: {for multiple operands}
- G06F 7/5443: {Sum of products (for applications thereof, see the relevant places, e.g. G06F17/10, H03H17/00)}
- G06F 2207/3828: Multigauge devices, i.e. capable of handling packed numbers without unpacking them
- G06N 3/063: using electronic means
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G06N: COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS

## Abstract

A processor and method for performing outer product and outer product accumulation operations on vector operands requiring large numbers of multiplies and accumulations is disclosed.

## Claims

### Claim 1

A processor for multiplying each one of a plurality n of multiplier operands each having a bit width of b bits and having an aggregate width of r bits where r=n*b with every one of a plurality n of multiplicand operands each having a bit width of b bits and having an aggregate width of r bits where r=n*b, the processor comprising:
a register file having a bit width of r bits;
an array of multiplier circuits arranged in rows and columns, each column coupled to receive one multiplier operand, each row coupled to receive one multiplicand operand, whereby each multiplier circuit receives a multiplier operand and a multiplicand operand and multiplies them together to provide a plurality n2 of multiplication results having an aggregate bit width greater than r bits;
an array of adder circuits arranged in rows and columns, each adder circuit being coupled to a corresponding multiplier circuit;
an array of accumulator circuits arranged in rows and columns, each accumulator circuit being coupled to a corresponding adder circuit; and
wherein the multiplication result from each multiplier circuit is added to any previous multiplication result stored in the accumulator circuit and provided to the corresponding accumulator circuit and to thereby provide an accumulation result.

### Claim 2 (depends on 1)

A processor as in claim 1 in which a single instruction causes the processor to perform multiplications of the operands and accumulations of the multiplications.

### Claim 3 (depends on 1)

A processor as in claim 1 wherein the accumulator circuit retains values in a redundant form.

### Claim 4 (depends on 1)

A processor as in claim 1 further including an array of output stage circuits, each output stage circuit being coupled to the corresponding accumulator circuit for storing the accumulation results before transfer of the accumulation results from the processor.

### Claim 5 (depends on 4)

A processor as in claim 4 further comprising an array of switching circuits coupled between each accumulator circuit and its corresponding output stage circuit for controlling data provided to the output stage circuit.

### Claim 6 (depends on 5)

A processor as in claim 5 wherein the switching circuits enable data from another accumulator circuit in the array to be provided to the output stage circuit.

### Claim 7 (depends on 4)

A processor as in claim 4 further comprising an array of additional data processing circuits arranged in rows and columns, the additional data processing circuits coupled between each accumulator circuit and a corresponding output stage circuit, the additional data processing circuits for performing further operations on data in the accumulator circuits.

### Claim 8 (depends on 7)

A processor as in claim 7 wherein the additional data processing circuits provide at least one of extraction of a portion of the data in the accumulator circuits, rounding of the data in the accumulator circuits, or application of a function of the data in the accumulator circuits.

### Claim 9 (depends on 4)

A processor as in claim 4 further comprising at least one data processing circuit coupled to the array to provide at least one of extraction of a portion of the data in the accumulator circuits, rounding of the data in the accumulator circuits, or application of a function of the data in the accumulator circuits as that data from the accumulator circuits is transferred out of the array.

### Claim 10 (depends on 9)

A processor as in claim 9 wherein the at least one data processing circuit comprises a plurality of data processing circuits, each data processing circuit coupled to subset of less than all of the accumulator circuits in the array.

### Claim 11

In a processor for multiplying each one of a plurality n of multiplier operands each having a bit width of b bits and having an aggregate width of r bits where r=n*b with every one of a plurality n of multiplicand operands each having a bit width of b bits and having an aggregate width of r bits where r=n*b, the processor comprising:
a plurality n2 of tiles, each tile including:
a multiplier circuit coupled to receive one of a plurality n of multiplier operands and one of a plurality n of multiplicand operands and multiply them together to provide a multiplication result having a bit width greater than r bits;
an adder circuit coupled to the multiplier circuit; and
an accumulator circuit coupled to the adder circuit;
wherein the multiplication result from the multiplier circuit is provided to the adder circuit and added to any previous multiplication result stored in the accumulator circuit to thereby provide an accumulation result.

### Claim 12 (depends on 11)

A tile as in claim 11 further comprising an output stage circuit coupled to the accumulator circuit for storing the accumulation result.

### Claim 13 (depends on 12)

A tile as in claim 12 further comprising a switching circuit coupled between the accumulator circuit and the output stage circuit for selecting data to be provided to the output stage circuit.

### Claim 14 (depends on 13)

A tile as in claim 13 wherein the switching circuit enables data from another tile to be provided to the output stage circuit.

### Claim 15

In a processor having an array of multiplier circuits arranged in rows and columns, an array of accumulator circuits arranged in rows and columns, and an array of adder circuits arranged in rows and columns, each multiplier circuit having an associated adder circuit and an associated accumulator circuit, the processor having a register file with a bit width of r bits, a method of performing an outer product of a vector multiplier operand and a vector multiplicand operand comprising:
loading a first multiplier operand and a first multiplicand operand into each of the multiplier circuits, the multiplier circuit at location [i, j] in the array receiving first multiplier operand i and first multiplicand operand j;
at each multiplier circuit performing a multiplication of the first multiplier operand i and the first multiplicand operand j to produce a first multiplication result i*j which is wider than r bits; and
providing the first multiplication result to the associated adder circuit; adding the first multiplication result to any previous multiplication result to provide an accumulated multiplication result to the associated accumulator circuit.

### Claim 16 (depends on 15)

A method as in claim 15 further comprising:
loading a second multiplier operand and a second multiplicand operand into each of the multiplier circuits, the multiplier circuit at location [i, j] in the array receiving second multiplier operand i and second multiplicand operand j;
at each multiplier circuit performing a multiplication of the second multiplier operand i and the second multiplicand operand j to produce a second multiplication result which is wider than r bits;
at each multiplier circuit providing the second multiplication result to the associated adder circuit; at each multiplier circuit providing the first multiplication result from the associated accumulator circuit to the associated adder circuit;
adding the second multiplication result to the first multiplication result to provide a new accumulation result; and
storing the new accumulation result in the associated accumulator circuit.

### Claim 17 (depends on 16)

A method as in claim 16 wherein a single instruction causes the processor to perform multiplications of the operands and accumulations of the multiplications.

### Claim 18 (depends on 16)

A method as in claim 16 wherein the processor further includes an array of output stage circuits, each output stage circuit being coupled to an associated accumulator circuit, and the method further comprises storing the new accumulation result in the output stage circuit.

### Claim 19 (depends on 16)

A method as in claim 16 further comprising an array of switching circuits coupled between each accumulator circuit and its associated output stage circuit for controlling data provided to the output stage circuit.

### Claim 20 (depends on 19)

A method as in claim 19 wherein the switching circuits enable data from another accumulator circuit in the array to be provided to the output stage circuit associated with a different accumulator circuit.

### Claim 21 (depends on 18)

A method as in claim 18 further comprising a step of at least one of: (i) extraction of a portion of data in the accumulator circuits, (ii) rounding of data in the accumulator circuits, or (iii) application of a function to data in the accumulator circuits.

### Claim 22 (depends on 18)

A method as in claim 18 further comprising an array of additional data processing circuits arranged in rows and columns, the additional data processing circuits coupled between each accumulator circuit and each output stage circuit, the additional data processing circuits for performing further operations on data in the accumulator circuits.

### Claim 23 (depends on 22)

A method as in claim 22 wherein the additional data processing circuits perform at least one of extraction of a portion of data in the accumulator circuits, rounding of data in the accumulator circuits, or application of a function to data in the accumulator circuits.
