IP Library Granted Patent US 10,997,123
Granted Patent B2
US 10,997,123 · App. 16/195,564 · Granted May 4, 2021

Matching techniques in data compression accelerator of a data processing unit

Inventors: Edward David Beckman (Santa Clara, CA); Satyanarayana Lakshmipathi Billa (Sunnyvale, CA); Rajan Goyal (Saratoga, CA); Sandipkumar J. Ladhani (Austin, TX)
Assignee: Fungible, Inc.
G06F16/1744G06F16/951
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,997,123
App. No.
16/195,564
Granted
May 4, 2021
Kind
B2
Abstract

A highly programmable device, referred to generally as a data processing unit, having multiple processing units for processing streams of information, such as network packets or storage packets, is described. The data processing unit includes one or more specialized hardware accelerators configured to perform acceleration for various data-processing functions. This disclosure describes a hardware-based programmable data compression accelerator for the data processing unit including a pipeline for performing string substitution. The disclosed string substitution pipeline, referred to herein as a “search block,” is configured to perform string search and replacement functions to compress an input data stream. In some examples, the search block is a part of a compression process performed by the data compression accelerator. The search block may support single and multi-thread processing, and multiple levels of compression effort. In order to achieve high-throughput, the search block processes multiple input bytes per clock cycle per thread.

Claims (54)

1. A method comprising:

receiving, by a match block of a search engine of a processing device, one or more history addresses of potential previous occurrences of a current byte string beginning at a current byte position in an input data stream;

determining, by the match block, whether at least one forward match occurs between the current byte position of the current byte string and the history addresses of one or more previous occurrences of byte strings, the forward match including subsequent byte positions in a forward direction of the input data stream, wherein the history addresses comprise byte positions of the previous occurrences of byte strings stored in a history buffer;

determining, by the match block, whether at least one backward match occurs between the current byte position of the current byte string and the history addresses of the one or more previous occurrences of byte strings, the backward match including preceding byte positions in a backward direction of the input data stream; and

sending, by the match block and to a subsequent block of the search engine, an indication of whether the at least one forward match and the at least one backward match occur for the current byte string for use in compressing the input data stream based on the matches.

2. The method of claim 1 , wherein determining whether the at least one forward match occurs for the current byte string comprises:

reading the one or more previous occurrences of byte strings stored at the history addresses in the history buffer; and

comparing the current byte string beginning at the current byte position to each of the one or more previous occurrences of byte strings beginning at the history addresses on a byte-by-byte basis in the forward direction of the input data stream to determine whether the at least one forward match occurs for the current byte string.

3. The method of claim 1 , wherein determining whether the at least one backward match occurs for the current byte string comprises:

subtracting a given number of byte positions from each of the history addresses to generate respective modified history addresses;

reading the one or more previous occurrences of byte strings stored at the history addresses in the history buffer; and

comparing the current byte string beginning at the current byte position to each of the one or more previous occurrences of byte strings beginning at the history addresses on a byte-by-byte basis in the backward direction of the input data stream up to the respective modified history addresses to determine whether the at least one backward match occurs for the current byte string.

4. The method of claim 1 , wherein sending the indication comprises sending a literal of original data at the current byte position and a number of matches, wherein each of the matches includes a length of any forward match and a length of any backward match for the current byte string.

5. The method of claim 1 , wherein, when at least one of the forward match or the backward match occurs for the current byte string, sending the indication comprises sending the literal of original data at the current byte position and a number of matches set equal to at least one.

6. The method of claim 1 , wherein, when neither the forward match nor the backward match occurs for the current byte string, sending the indication comprises sending the literal of original data at the current byte position and a number of matches set equal to zero.

7. The method of claim 1 , further comprising:

storing the input data stream in a lookahead buffer; and

once the current byte position in the input data stream is past a last byte position of a given chunk of data in the input data stream, writing the given chunk of data from the lookahead buffer to the history buffer.

8. The method of claim 1 , wherein the history buffer is configured to include multiple memory banks, and wherein determining whether the at least one forward match and the at least one backward match occurs for the current byte string comprises scheduling as many accesses as possible for the history addresses to different memory banks of the history buffer during one or more clock cycles.

9. The method of claim 8 , further comprising, when accesses for two history addresses are scheduled to a same one of the memory banks of the history buffer during a same clock cycle and a scheduling entry for one of the history addresses cannot be rescheduled during a subsequent clock cycle, discarding the scheduling entry for the one of the history addresses and not reading a previous occurrence of a byte string stored at the one of the history addresses in the history buffer.

10. The method of claim 1 , wherein the match block is configured to operate in a multi-thread mode, and wherein the history buffer comprises a large history buffer and a small history buffer, the method further comprising:

configuring the large history buffer to include multiple large memory banks with each of the large memory banks storing a full history of the input data stream per thread; and

configuring the small history buffer to include multiple small memory banks storing a most recent portion of the full history across all of the small memory banks per thread.

11. The method of claim 1 , wherein the match block is configured to operate in a single thread mode, and wherein the history buffer comprises a large history buffer and a small history buffer, the method further comprising:

configuring the large history buffer to include multiple large memory banks storing a full history of the input data stream across all of the large memory banks; and

configuring the small history buffer to include multiple small memory banks storing a most recent portion of the full history across all of the small memory banks.

12. A processing device comprising:

a memory configured to store a history buffer; and

a match block of a search engine of the processing device, the match block configured to:

receive one or more history addresses of potential previous occurrences of a current byte string beginning at a current byte position in an input data stream;

determine whether at least one forward match occurs between the current byte position of the current byte string and the history addresses of one or more previous occurrences of byte strings, the forward match including subsequent byte positions in a forward direction of the input data stream, wherein the history addresses comprise byte positions of the previous occurrences of byte strings stored in the history buffer;

determine whether at least one backward match occurs between the current byte position of the current byte string and the history address for the one or more previous occurrences of byte strings, the backward match including preceding byte positions in a backward direction of the input data stream; and

send, to a subsequent block of the search engine, an indication of whether the at least one forward match and the at least one backward match occur for the current byte string for use in compressing the input data stream based on the matches.

13. The device of claim 12 , wherein, to determine whether the at least one forward match occurs for the current byte string, the match block is configured to:

read the one or more previous occurrences of byte strings stored at the history addresses in the history buffer; and

compare the current byte string beginning at the current byte position to each of the one or more previous occurrences of byte strings beginning at the history addresses on a byte-by-byte basis in the forward direction of the input data stream to determine whether the at least one forward match occurs for the current byte string.

14. The device of claim 12 , wherein, to determine whether the at least one backward match occurs for the current byte string, the match block is configured to:

subtract a given number of byte positions from each of the history addresses to generate respective modified history addresses;

read the one or more previous occurrences of byte strings stored at the history addresses in the history buffer; and

compare the current byte string beginning at the current byte position to each of the one or more previous occurrences of byte strings beginning at the history addresses on a byte-by-byte basis in the backward direction of the input data stream up to the respective modified history addresses to determine whether the at least one backward match occurs for the current byte string.

15. The device of claim 12 , wherein, to send the indication, the match block is configured to send a literal of original data at the current byte position and a number of matches, wherein each of the matches includes a length of any forward match and a length of any backward match for the current byte string.

16. The device of claim 12 , wherein, when at least one of the forward match or the backward match occurs for the current byte string, the match block is configured to send the literal of original data at the current byte position and a number of matches set equal to at least one.

17. The device of claim 12 , wherein, when neither the forward match nor the backward match occurs for the current byte string, the match block is configured to send the literal of original data at the current byte position and a number of matches set equal to zero.

18. The device of claim 12 , wherein the match block is configured to:

store the input data stream in a lookahead buffer; and

once the current byte position in the input data stream is past a last byte position of a given chunk of data in the input data stream, write the given chunk of data from the lookahead buffer to the history buffer.

19. The device of claim 12 , wherein the history buffer is configured to include multiple memory banks, and wherein, to determine whether the at least one forward match and the at least one backward match occurs for the current byte string, the match block is configured to schedule as many accesses as possible for the history addresses to different memory banks of the history buffer during one or more clock cycles.

20. The device of claim 19 , wherein the match block is configured to, when accesses for two history addresses are scheduled to a same one of the memory banks of the history buffer during a same clock cycle and a scheduling entry for one of the history addresses cannot be rescheduled during a subsequent clock cycle, discard the scheduling entry for the one of the history addresses and not read a previous occurrence of a byte string stored at the one of the history addresses in the history buffer.

21. The device of claim 12 , wherein the match block is configured to operate in a multi-thread mode, wherein the history buffer comprises a large history buffer and a small history buffer, and wherein the match block is configured to:

configure the large history buffer to include multiple large memory banks with each of the large memory banks storing a full history of the input data stream per thread; and

configure the small history buffer to include multiple small memory banks storing a most recent portion of the full history across all of the small memory banks per thread.

22. The device of claim 12 , wherein the match block is configured to operate in a single thread mode, wherein the history buffer comprises a large history buffer and a small history buffer, and wherein the match block is configured to:

configure the large history buffer to include multiple large memory banks storing a full history of the input data stream across all of the large memory banks; and

configure the small history buffer to include multiple small memory banks storing a most recent portion of the full history across all of the small memory banks.

Assignments (6)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 31, 2023
From: FUNGIBLE, INC.
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 064434/0430 →
RELEASE OF SECURITY INTEREST Recorded Jan 9, 2023
From: HERCULES CAPITAL, INC., AS AGENT
To: FUNGIBLE, INC.
Reel/Frame 062335/0803 →
RELEASE OF SECURITY INTEREST Recorded Jan 5, 2023
From: SILICON VALLEY BANK
To: FUNGIBLE, INC.
Reel/Frame 062308/0191 →
SECURITY INTEREST Recorded Dec 16, 2021
From: FUNGIBLE, INC.
To: SILICON VALLEY BANK
Reel/Frame 058523/0960 →
SECURITY INTEREST Recorded Dec 16, 2021
From: FUNGIBLE, INC.
To: HERCULES CAPITAL, INC., AS AGENT
Reel/Frame 058533/0429 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 19, 2018
From: GOYAL, RAJAN; BILLA, SATYANARAYANA LAKSHMIPATHI; BECKMAN, EDWARD DAVID; LADHANI, SANDIPKUMAR J.
To: FUNGIBLE, INC.
Reel/Frame 047547/0818 →
Continuity (1)
Related Publication 20200159840A1 · May 21, 2020