IP Library Granted Patent US 10,644,721
Granted Patent B2
US 10,644,721 · App. 16/434,065 · Granted May 5, 2020

Processing core data compression and storage system

Inventors: Ljubisa Bajic (Toronto, CA); Alex Cejkov (Toronto, CA); Lejla Bajic (Toronto, CA)
Assignee: Tenstorrent Inc.
H03M7/46G06F17/16H03M7/42
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,644,721
App. No.
16/434,065
Granted
May 5, 2020
Kind
B2
Abstract

Methods and systems regarding the rapid and efficient compression and decompression of sparse data are disclosed. One method for compressing a set of data from a sparse matrix includes, evaluating a sequence of data entries from the set of data, extracting a sequence of sparse data values from the sequence, extracting a sequence of non-sparse data value run lengths from the sequence, formulating a set of row pointers from the sequence, storing the sequence of sparse data values in a first set of memory addresses, and storing the sequence of non-sparse data value run lengths in a second set of memory addresses. The set of row pointers identify a set of rows of the sparse matrix in both the first and second sets of memory addresses. Rapid decompression can be conducted using the row pointers.

Claims (91)

1. A method for compressing a set of data from a sparse matrix comprising:

evaluating a sequence of data entries from the set of data;

extracting a sequence of sparse data values from the sequence of data entries;

extracting a sequence of non-sparse data value run lengths from the sequence of data entries;

formulating, while extracting the sequence of sparse data values and the sequence of non-sparse data value run lengths, a set of row pointers from the sequence of data entries;

storing the sequence of sparse data values at a first contiguous set of memory addresses;

storing the sequence of non-sparse data value run lengths at a second contiguous set of memory addresses; and

wherein the set of row pointers identify a set of rows of the sparse matrix in both the first and second contiguous sets of memory addresses.

2. The method of claim 1 , wherein:

the sparse data values are non-zero values; and

the non-sparse data value run lengths are zero value run lengths in the sequence of data entries.

3. The method of claim 1 , wherein:

the sequence of sparse data values and the sequence of non-sparse data value run lengths share an equivalent number of elements;

the row pointers provide offsets into the first set of contiguous memory addresses and the second set of contiguous memory addresses; and

the sequence of data entries is a sequence of values from the sparse matrix with a start of each new row placed in sequence with an end of a prior row to that new row.

4. The method of claim 1 , wherein extracting the sequence of sparse data values further comprises:

appending, while extracting the sequence of sparse data values, a non-sparse data value to a current sequence of sparse data values when the non-sparse data value is a first entry in a row of the sparse matrix; and

appending, while extracting the sequence of non-sparse data value run lengths, a zero value to a current sequence of non-sparse data value run lengths in response to the appending of the non-sparse data value to the current sequence of sparse data values.

5. The method of claim 4 , further comprising:

storing the set of row pointers a third contiguous set of memory addresses;

wherein the sequence of data entries includes at least two rows of the sparse matrix; and

wherein the non-sparse data value run lengths are zero value run lengths in the sequence of data entries.

6. The method of claim 1 , further comprising:

storing the set of row pointers at a third contiguous set of memory addresses;

wherein the non-sparse data value run lengths are zero value run lengths in the sequence of data entries; and

wherein the sparse data values are non-zero values.

7. The method of claim 6 , further comprising:

generating a single compressed data tile;

the first contiguous set of memory addresses is mapped to a first row in the single compressed data tile;

the second contiguous set of memory addresses is mapped to a second row in the single compressed data tile; and

the third contiguous set of memory addresses is mapped to a third row in the single compressed data tile.

8. The method of claim 1 , further comprising:

generating a single compressed data tile;

the single compressed data tile is defined by a row length and has a number of rows;

a first portion of the number of rows hold the sequence of sparse data values from the sequence of data entries; and

a second portion of the number of rows hold the sequence of non-sparse data value run lengths.

9. The method of claim 8 , wherein:

the first contiguous set of memory addresses store one of: 8-bit, 16-bit, and 32-bit floating point numbers.

10. The method of claim 9 , wherein the sparse matrix is generated from a sparse tensor,

and further comprises:

generating a mapping from an element of the sparse tensor to an element of the sparse matrix; and

wherein an element of the sparse tensor can be extracted from the single compressed data tile using the mapping.

11. A system for compressing a set of data from a sparse matrix comprising:

a memory; and

a clocked logic that evaluates a sequence of data entries from the set of data;

wherein the clocked logic is configured to execute the following steps in response to the evaluation of the sequence of data entries from the set of data:

extracting a sequence of sparse data values from the sequence of data entries;

extracting a sequence of non-sparse data value run lengths from the sequence of data entries;

formulating a set of row pointers from the sequence of data entries;

storing the sequence of sparse data values at a first set of memory addresses in the memory; and

storing the sequence of non-sparse data value run lengths at a second set of memory addresses in the memory; and

wherein the set of row pointers identify a set of rows of the sparse matrix in both the first set of memory addresses and the second set of memory addresses.

12. The system of claim 11 , wherein:

the sparse data values are non-zero values; and

the non-sparse data value run lengths are zero value run lengths in the sequence of data entries.

13. The system of claim 11 , wherein:

the sequence of sparse data values and the sequence of non-sparse data value run lengths share an equivalent number of elements;

the row pointers provide offsets into the first set of memory addresses and the second set of memory addresses;

the first set of memory addresses are contiguous;

the second set of memory addresses are contiguous; and

the sequence of data entries is a sequence of values from the sparse matrix with a start of each new row placed in sequence with an end of a prior row to that new row.

14. The system of claim 13 , wherein:

the sequence of data entries includes at least two rows of the sparse matrix; and

the non-sparse data value run lengths are zero value run lengths in the sequence of data entries.

15. The system of claim 11 , further comprising:

a non-sparse data value mask generator that evaluates a sequence of data entries and generates a non-sparse data value flag for a set of datums in the sequence of data entries; and

wherein the non-sparse data value flags is used to formulate the set of row pointers.

16. The system of claim 11 , further comprising:

the clocked logic is further configured to store the set of row pointers at a third set of memory addresses;

wherein the non-sparse data value run lengths are zero value run lengths in the sequence of data entries; and

wherein the sparse data values are non-zero values.

17. The system of claim 16 , wherein:

the clocked logic is further configured to store the sequence of sparse data values and the sequence of non-sparse data value run lengths in a single compressed data tile;

the first set of memory addresses is mapped to a first row in the single compressed data tile;

the second set of memory addresses is mapped to a second row in the single compressed data tile; and

the third set of memory addresses is mapped to a third row in the single compressed data tile.

18. The system of claim 11 , wherein:

the clocked logic is further configured to store the sequence of sparse data values and the sequence of non-sparse data value run lengths in a single compressed data tile;

the single compressed data tile is defined by a row length and has a number of rows;

a first portion of the number of rows hold the sequence of sparse data values from the sequence of data entries; and

a second portion of the number of rows hold the sequence of non-sparse data value run lengths.

19. The system of claim 18 , wherein:

the first set of memory addresses store one of: 8-bit, 16-bit, and 32-bit floating point numbers.

20. A method for compressing a set of data from a sparse matrix comprising:

evaluating a sequence of data entries from the set of data;

extracting a sequence of sparse data values from the sequence of data entries;

extracting a sequence of non-sparse data value run lengths from the sequence of data entries;

formulating a set of row pointers from the sequence of data entries;

storing the sequence of sparse data values in a first set of memory addresses;

storing the sequence of non-sparse data value run lengths in a second set of memory addresses; and

wherein the set of row pointers identify a set of rows of the sparse matrix in both the first set of memory addresses and the second set of memory addresses.

Assignments (3)
CHANGE OF NAME Recorded Feb 23, 2025
From: TENSTORRENT INC.
To: TENSTORRENT AI INC.
Reel/Frame 070298/0922 →
CHANGE OF NAME Recorded Feb 23, 2025
From: TENSTORRENT AI INC.
To: TENSTORRENT AI ULC
Reel/Frame 070298/0944 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 6, 2019
From: BAJIC, LJUBISA; CEJKOV, ALEX; BAJIC, LEJLA
To: TENSTORRENT INC.
Reel/Frame 049398/0966 →
Continuity (2)
Provisional Application 62683205 · Jun 11, 2018
Related Publication 20190379396A1 · Dec 12, 2019
Cited By (1)
US 12,681,871