Processing core data compression and storage system
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.
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.