IP Library Granted Patent US 10,489,063
Granted Patent B2
US 10,489,063 · App. 15/384,178 · Granted Nov 26, 2019

Memory-to-memory instructions to accelerate sparse-matrix by dense-vector and sparse-vector by dense-vector multiplication

Inventors: Asit K. Mishra (Hillsboro, OR); Deborah T. Marr (Portland, OR); Edward T. Grochowski (San Jose, CA)
Assignee: Intel Corporation
G06F3/0614G06F3/0646G06F3/0683G06F9/3001G06F9/30036G06F9/3877G06F2212/1016
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,489,063
App. No.
15/384,178
Granted
Nov 26, 2019
Kind
B2
Abstract

First elements of a dense vector to be multiplied with first elements of a first row of a sparse array may be determined. The determined first elements of the dense vector may be written into a memory. A dot product for the first elements of the sparse array and the first elements of the dense vector may be calculated in a plurality of increments by multiplying a subset of the first elements of the sparse array and a corresponding subset of the first elements of the dense vector. A sequence number may be updated after each increment is completed to identify a column number and/or a row number of the sparse array for which the dot product calculations have been completed.

Claims (110)

1. A processing device comprising:

a memory; and

a dense multiplication hardware circuit operatively coupled with the memory, the dense multiplication hardware circuit to:

determine first elements of a dense vector to be multiplied with first elements of a first row of a sparse array;

write the first elements of the dense vector into the memory;

calculate a dot product for the first elements of the sparse array and the first elements of the dense vector, wherein the dot product is calculated in a plurality of increments, where each increment comprises multiplication of a subset of the first elements of the sparse array and a corresponding subset of the first elements of the dense vector;

update a sequence number after each increment is completed, wherein the sequence number identifies a column number and a row number of the sparse array for which the dot product has been completed; and

in response to receipt of an interrupt or fault that causes a context switch in instruction execution:

invalidate the memory where the first elements are stored;

store, in the memory, a value of a completed portion of the dot product; and

store, in a register, the sequence number.

2. The processing device of claim 1 , further comprising:

a cache; and

the dense multiplication hardware circuit is further to:

determine at least one line of the cache that comprises the first elements of the dense vector; and

write the at least one line of the cache into the memory, wherein the at least one line of the cache further comprises one or more additional elements of the dense vector that are not necessary for calculating the dot product with the first elements of the sparse array.

3. The processing device of claim 1 , wherein the first elements of the dense vector comprise those elements of the dense vector that are necessary for computing the dot product, and excludes those elements of the dense vector that are both a) not necessary for computing the dot product and b) not in a cache line that comprises one or more of those elements of the dense vector that are necessary for computing the dot product.

4. The processing device of claim 3 , wherein the first elements of the sparse array come from a first portion of the sparse array, and wherein the dense multiplication hardware circuit further to:

receive a second portion of the sparse array that comprises second elements;

determine second elements of the dense vector that are not already stored in the memory based on the second portion of the sparse array;

write the second elements of the dense vector into the memory; and

calculate a dot product between the second elements of the sparse array and the dense vector.

5. The processing device of claim 1 , wherein:

the sparse array comprises a matrix having a plurality of columns and a plurality of rows; and

the sequence number comprises a sequence value for each row and column pair of the sparse array.

6. The processing device of claim 1 , wherein the memory is only in use during the execution of an instruction for multiplying the dense vector with the sparse array.

7. The processing device of claim 6 , wherein the instruction for multiplying the dense vector with the sparse array comprises:

a first field identifying a memory start address of the dense vector;

a second field identifying a memory start address of the sparse array;

a third field identifying a length of the dense vector; and

a fourth field identifying a memory start address of an output vector.

8. The processing device of claim 7 , wherein the instruction for multiplying the dense vector with the sparse array is a memory-to-memory instruction, the processing device further comprising an execution unit, wherein, in response to the execution of the instruction for multiplying the dense vector and the sparse array, the execution unit is to:

read the first elements of the first row of the sparse array from a Random Access Memory (RAM) using the second field;

read the first elements of the dense vector from the RAM using the first field; and

write the value that is computed after each increment is completed to the RAM using the fourth field.

9. The processing device of claim 1 , wherein the dense multiplication hardware circuit is further to, in response to the interrupt or fault being successfully handled:

retrieve the sequence number from the register;

determine, from the sequence number, a last element of the sparse array for which the dot product was completed;

receive a portion of the sparse array, where the portion of the sparse array comprises next elements after the last element of the sparse array for which the dot product was completed;

determine a portion of the dense vector to be multiplied with the portion of the sparse array;

write the portion of the dense vector into the memory;

calculate a dot product for the portion of the sparse array and the portion of the dense vector; and

add a result value of the dot product of the portion of the sparse array and the portion of the dense vector to the value of the completed portion of the dot product.

10. The processing device of claim 9 , wherein one or more elements in the portion of the dense vector correspond to one or more of the first elements of the dense vector.

11. The processing device of claim 1 , wherein the sparse array comprises a sparse vector, and wherein a first portion of the sparse array comprises elements from the sparse vector.

12. The processing device of claim 1 , wherein:

the memory comprises a plurality of ports operatively coupled to a Random Access Memory (RAM); and

the dense multiplication hardware circuit is further to copy the first elements of the dense vector from the RAM via the plurality of ports, to the memory during a read cycle, and wherein the first elements comprise an element for each port of the plurality of ports.

13. A method comprising:

determining, by a processing device, first elements of a dense vector to be multiplied with first elements of a first row of a sparse array;

writing, by the processing device, the first elements of the dense vector into a memory coupled to the processing device;

calculating, by a dense multiplication hardware circuit of the processing device, a dot product for the first elements of the sparse array and the first elements of the dense vector, wherein the dot product is calculated in a plurality of increments, where each increment comprises multiplication of a subset of the first elements of the sparse array and a corresponding subset of the first elements of the dense vector;

outputting a value after calculation of the dot product is completed;

updating a sequence number after each increment is completed, wherein the sequence number identifies a column number and a row number of the sparse array for which the dot product has been completed; and

in response to receipt of an interrupt or fault that causes a context switch in instruction execution:

invalidating the memory where the first elements are stored;

storing, in the memory, a value of a completed portion of the dot product; and

storing, in a register, the sequence number.

14. The method of claim 13 , wherein the first elements of the sparse array come from a first portion of the sparse array, the method further comprising:

receiving a second portion of the sparse array that comprises second elements;

determining second elements of the dense vector that are not already stored in the memory based on the second portion of the sparse array;

writing the second elements of the dense vector into the memory; and

calculating a dot product between the second elements of the sparse array and the dense vector.

15. The method of claim 13 , further comprising:

detecting the interrupt or fault has been successfully handled; and

in response to the interrupt or fault being successfully handled:

retrieving the sequence number from the register;

determining, from the sequence number, a last element of the sparse array for which the dot product was completed;

receiving a portion of the sparse array, where the portion of the sparse array comprises next elements after the last element of the sparse array for which the dot product was completed;

determining a portion of the dense vector to be multiplied with the portion of the sparse array;

writing the portion of the dense vector into the memory;

calculating a dot product for the portion of the sparse array and the portion of the dense vector; and

adding a result value of the dot product of the portion of the sparse array and the portion of the dense vector to the value of the completed portion of the dot product.

16. A system comprising:

a Random Access Memory (RAM); and

a processing device operatively coupled with the RAM, the processing device comprising:

a cache;

a memory;

a decode unit to decode an instruction for multiplying a dense vector with a sparse array; and

an execution unit, coupled with the decode unit, to execute the instruction, wherein the execution unit is to:

determine first elements of a dense vector to be multiplied with first elements of a first row of a sparse array;

write the first elements of the dense vector into the memory;

calculate a dot product for the first elements of the sparse array and the first elements of the dense vector, wherein the dot product is calculated in a plurality of increments, where each increment comprises multiplication of a subset of the first elements of the sparse array and a corresponding subset of the first elements of the dense vector;

update a sequence number after each increment is completed, wherein the sequence number identifies a column number and a row number of the sparse array for which the dot product has been completed;

in response to receipt of an interrupt or fault that causes a context switch away from execution of the instruction:

invalidate the memory where the first elements are stored;

store, in the memory, a value of a completed portion of the dot product; and

store, in a register, the sequence number.

17. The system of claim 16 , wherein the first elements of the sparse array come from a first portion of the sparse array, and wherein the processing device further to:

receive, from the RAM, a second portion of the sparse array that comprises second elements;

determine second elements of the dense vector that are not already stored in the memory based on the second portion of the sparse array;

write the second elements of the dense vector into the memory; and

calculate a dot product between the second elements of the sparse array and the dense vector.

18. The system of claim 16 , the processing device further to:

in response to the interrupt or fault being successfully handled:

retrieve the sequence number from the register;

determine, from the sequence number, a last element of the sparse array for which the dot product was completed;

receive, from the RAM, a portion of the sparse array, where the portion of the sparse array comprises next elements after the last element of the sparse array for which the dot product was completed;

determine a portion of the dense vector to be multiplied with the portion of the sparse array;

write the portion of the dense vector into the memory;

calculate a dot product for the portion of the sparse array and the portion of the dense vector; and

add a result value of the dot product of the portion of the sparse array and the portion of the dense vector to the value of the completed portion of the dot product.

19. The system of claim 16 , wherein:

the sparse array comprises a matrix having a plurality of columns and a plurality of rows; and

the sequence number comprises a sequence value for each row and column pair of the sparse array.

20. The system of claim 16 , wherein the memory is only in use during the execution of the instruction for multiplying the dense vector with the sparse array, wherein the instruction comprises:

a first field identifying a memory start address of the dense vector;

a second field identifying a memory start address of the sparse array;

a third field identifying a length of the dense vector; and

a fourth field identifying a memory start address of an output vector.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 22, 2017
From: MISHRA, ASIT K.; MARR, DEBORAH T.; GROCHOWSKI, EDWARD T.
To: INTEL CORPORATION
Reel/Frame 041685/0851 →
Continuity (1)
Related Publication 20180173437A1 · Jun 21, 2018
Cited By (2)
US 12,189,710 US 12,608,201