IP Library Granted Patent US 9,876,509
Granted Patent B2
US 9,876,509 · App. 15/335,705 · Granted Jan 23, 2018

Methods and apparatus to parallelize data decompression

Inventors: Vinodh Gopal (Westborough, MA); James D. Guilford (Northborough, MA); Sudhir K. Satpathy (Hillsboro, OR); Sanu K. Mathew (Hillsboro, OR)
Assignee: Intel Corporation
H03M7/3086H03M7/40
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 9,876,509
App. No.
15/335,705
Granted
Jan 23, 2018
Kind
B2
Abstract

An example method to parallelize data decompression includes adjusting a first one of initial starting positions to determine a first adjusted starting position by decoding the bitstream starting at a training position in the bitstream, the decoding including traversing the bitstream from the training position as though first data located at the training position is a valid token; and merging, by executing an instruction with the processor, first decoded data generated by decoding a first segment of the compressed data bitstream starting from the first adjusted starting position with second decoded data generated by decoding a second segment of the compressed data bitstream, the decoding of the second segment starting from a second position in the compressed data bitstream and being performed in parallel with the decoding of the first segment, and the second segment preceding the first segment in the compressed data bitstream.

Claims (38)

1. A method to parallelize data decompression, comprising:

adjusting, by executing an instruction with a processor, a first one of initial starting positions to determine a first adjusted starting position by decoding a compressed data bitstream starting at a training position in the compressed data bitstream, the training position preceding the first one of the initial starting positions in the compressed data bitstream, the decoding including traversing the compressed data bitstream from the training position as though first data located at the training position is a valid token; and

merging, by executing an instruction with the processor, first decoded data generated by decoding a first segment of the compressed data bitstream starting from the first adjusted starting position with second decoded data generated by decoding a second segment of the compressed data bitstream, the decoding of the second segment starting from a second position in the compressed data bitstream and being performed in parallel with the decoding of the first segment, the second segment preceding the first segment in the compressed data bitstream.

2. The method as defined in claim 1 , further including merging the first decoded data and the second decoded data with additional decoded data generated by decoding other segments of the compressed data bitstream in parallel using parallel processor cores, the first segment, the second segment, and the other segments making up an entirety of the compressed data bitstream.

3. The method as defined in claim 1 , wherein the adjusting of the first one of the initial starting positions and the merging of the first decoded data with the second decoded data are performed using a host core, and the generating of the first decoded data is performed by a first one of multiple processor cores decoding the compressed data bitstream in parallel.

4. The method as defined in claim 1 , further including determining whether the first decoded data is correctly decoded by determining whether a final token in the second segment points to a first token corresponding to the first adjusted starting position, the second segment being located prior to the first segment in the compressed data bitstream.

5. The method as defined in claim 4 , further including, in response to determining that the first segment is not correctly decoded:

selecting an updated starting position based on a pointer obtained from decoding the final token in the second segment; and

decoding the compressed data bitstream starting from the updated starting position.

6. An apparatus to parallelize data decompression, comprising:

a segment trainer to adjust a first one of initial starting positions to determine a first adjusted starting position by decoding a compressed data bitstream starting at a training position in the compressed data bitstream, the training position preceding the first one of the initial starting positions in the compressed data bitstream, the decoding including traversing the compressed data bitstream from the training position as though first data located at the training position is a valid token;

a first parallelized decoder to generate first decoded data by decoding a first segment of the compressed data bitstream starting from the first adjusted starting position; and

a segment merger to merge the first decoded data with second decoded data generated by decoding a second segment of the compressed data bitstream, the decoding of the second segment starting from a second position in the compressed data bitstream and being performed in parallel with the decoding of the first segment, the second segment preceding the first segment in the compressed data bitstream.

7. The apparatus as defined in claim 6 , further including:

a host processing core to implement the segment trainer and the segment merger; and

a parallelized core to implement the first parallelized decoder.

8. The apparatus as defined in claim 6 , wherein the first parallelized decoder includes a Huffman decoder to decode a Huffman coded token in the compressed data bitstream.

9. The apparatus as defined in claim 6 , further including an error checker to determine whether the first segment is correctly decoded based on whether segments preceding the first segment in the compressed data bitstream have been correctly decoded.

10. The apparatus as defined in claim 6 , further including an error checker to determine whether the first segment is correctly decoded by determining whether a final token in the second segment points to a first token corresponding to the first adjusted starting position.

11. The apparatus as defined in claim 6 , further including an instruction generator to generate instructions which, when executed by the first parallelized decoder, cause the first parallelized decoder to decode the compressed data bitstream corresponding to the first segment starting at the first adjusted starting position.

12. The apparatus as defined in claim 6 , wherein the first parallelized decoder includes an intermediate data generator to generate an intermediate data structure based on an output of the first parallelized decoder, the segment merger to merge the first segment and the second segment based on the intermediate data structure.

13. The apparatus as defined in claim 6 , further including a parallelization selector to select a number of segments based on at least one of a number of cores that are available for parallel processing, an expected compressed file size, or a compression format used to compress the compressed data bitstream.

14. The apparatus as defined in claim 13 , further including a ratio comparator to compare a compression ratio of the compressed data bitstream to a threshold, the parallelization selector to select the number of the segments to be more than 1 when the compression ratio is less than the threshold.

15. A tangible computer readable storage medium comprising computer readable instructions which, when executed, cause a processor to at least:

adjust a first one of initial starting positions to determine a first adjusted starting position by decoding a compressed data bitstream starting at a training position in the compressed data bitstream, the training position preceding the first one of the initial starting positions in the compressed data bitstream, the decoding including traversing the compressed data bitstream from the training position as though first data located at the training position is a valid token; and

merge the first decoded data generated by decoding a first segment of the compressed data bitstream starting from the first adjusted starting position with second decoded data generated by decoding a second segment of the compressed data bitstream, the decoding of the second segment starting from a second position in the compressed data bitstream and being performed in parallel with the decoding of the first segment, the second segment preceding the first segment in the compressed data bitstream.

16. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are to cause the processor to merge the first decoded data and the second decoded data with additional decoded data generated by decoding other segments of the compressed data bitstream in parallel using parallel processor cores, the first segment, the second segment, and the other segments making up an entirety of the compressed data bitstream.

17. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to determine whether the first decoded data is correctly decoded by determining whether a final token in the second segment points to a first token corresponding to the first adjusted starting position, the second segment being located prior to the first segment in the compressed data bitstream.

18. The tangible computer readable storage medium as defined in claim 17 , wherein the instructions are further to cause the processor to, in response to determining that the first segment is not correctly decoded:

select an updated starting position based on a pointer obtained from decoding the final token in the second segment; and

decode the compressed data bitstream starting from the updated starting position.

19. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to determine whether the first segment is correctly decoded based on whether segments preceding the first segment in the compressed data bitstream have been correctly decoded.

20. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to determine a compression format of the compressed data bitstream and select a number of segments of the compressed data bitstream to be processed in parallel based on the compression format.

21. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to compare a compression ratio of the compressed data bitstream to a threshold, the instructions to cause the processor to decode more than 1 segment when the compression ratio is less than the threshold.

22. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are to cause the processor to decode the first segment by generating an intermediate data structure, and the instructions are to cause the processor to merge the first decoded data with the second decoded data based on the intermediate data structure.

23. The tangible computer readable storage medium as defined in claim 22 , wherein the instructions are to cause the processor to generate the intermediate data structure by storing at least one of literal data, a length of matching data, a first location of matching data, or a second location within the compressed data bitstream of a token that corresponds to the literal data, the length, or the location of the matching data.

24. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to verify that the first adjusted starting position is a first type of token and is not a second type of token.

25. The tangible computer readable storage medium as defined in claim 15 , wherein the instructions are further to cause the processor to generate third decoded data by decoding a third segment from a second one of the initial starting positions that is a token located at a beginning of the compressed data bitstream.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 31, 2016
From: GOPAL, VINODH; GUILFORD, JAMES D.; SATPATHY, SUDHIR K.; MATHEW, SANU K.
To: INTEL CORPORATION
Reel/Frame 040172/0303 →
Continuity (2)
Continuation 14850721 · Sep 10, 2015
Related Publication 20170141790A1 · May 18, 2017