Device for processing received data
A parallel decompression circuit for LZMA addresses the high bit cost of SSDs by speeding up the decompression process, improving read performance and reducing the effective cost per capacity in storage systems.
Patent Information
- Application Number
- JP2025181949
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2025-10-28
- Publication Date
- 2026-01-21
AI Technical Summary
The high bit cost of solid-state drives (SSDs) compared to hard disk drives (HDDs) is a challenge, and existing lossless compression algorithms like LZMA are slow due to sequential bit processing, which affects the read response time in storage systems.
A decompression circuit that decodes an N-bit string in parallel by calculating candidate bit values based on pre-prepared bit histories and selecting the correct bit values, improving the LZMA algorithm's performance by utilizing multiple processors or decoders to handle bit histories in parallel.
The parallel processing significantly speeds up the decompression process, enhancing the read performance of SSDs to match that of uncompressed data, thus reducing the effective cost per capacity and maintaining high-speed random read performance.
Smart Images

Figure 2026010210000001_ABST
Abstract
Description
[Technical Field]
[0001] The present invention relates to a technique for processing received data. [Background technology]
[0002] Storage systems are information devices used to store and manage large amounts of data, and the cost per unit of capacity can be reduced by storing more data. For this reason, some storage systems are equipped with a function to compress written data before storing it on the disk drive.
[0003] For example, in recent years, solid-state drives (SSDs) equipped with NAND flash memory, a nonvolatile semiconductor memory, have been adopted as storage media in storage systems in addition to or instead of hard disk drives (HDDs). Because SSDs do not have a physical head-seek mechanism for data access like HDDs, they have less latency and superior response performance for random data reads.
[0004] For this reason, in applications such as databases that require high-speed random reads, SSDs are increasingly replacing HDDs as the storage media in storage systems. However, although the bit cost of SSDs has been decreasing year by year due to the increasing integration of flash memory cells, it remains about three times higher than the bit cost of HDDs.
[0005] Therefore, many storage systems that use SSDs as storage media have adopted lossless compression technology to reduce the size of data stored on the SSD, which makes the system's storage capacity appear virtually larger, reducing the cost per capacity and bringing it closer to that of storage systems that use HDDs as storage media.
[0006] When a storage system receives a request from a host to read compressed data, the compressed data is decompressed and returned to the host as plain text data. It is preferable to decompress the compressed data as quickly as possible so that the read response time is not significantly worse than when reading uncompressed data.
[0007] The higher the compression ratio of a compression algorithm used in a storage system's data compression function, the lower the cost per capacity. The LZMA algorithm is a lossless data compression algorithm known for its high compression ratio. This algorithm combines sliding dictionary compression with arithmetic coding known as range coding.
[0008] Range coding requires a multiplication every time one bit is input (when encoding) or output (when decoding). This means that the bit rate of range coding is very slow. A table is referenced to find the value used for multiplication in range coding, and the index used for reference is determined by the bit history of the input (when encoding) or output (when decoding). If multiplication in range coding can be performed in parallel on multiple bits, the performance will improve, and the processing performance of the LZMA algorithm will also improve.
[0009] Regarding the encoding process (at the time of compression) of range codes, there is a known technique for speeding up the process, as described in Non-Patent Document 1, in which bit history is prepared in advance, table lookup is parallelized, and multiplication of multiple bits is performed in parallel. If the parallelism is N, then the encoding performance improves by N times. This makes it possible to speed up the LZMA compression process. [Prior art documents] [Non-patent literature]
[0010] [Non-Patent Document 1] “A Parallel Adaptive Range Coding Compressor: Algorithm, FPGA Prototype, Evaluation”, Ivan Shcherbakov and Norbert Wehn, Data Compression Conference, 2012. Summary of the Invention
[0011] One aspect of the present invention is an apparatus for processing received data, which includes a decompression circuit that decompresses a compressed input code to decode an N-bit string, where N is an integer greater than 1 and K is an integer from 1 to N, and the bit value of the Kth bit of the input code is decoded based on the bit history of the bits prior to the Kth bit. The decompression circuit calculates, in parallel for a plurality of bits, a plurality of candidate bit values for the bits of the N-bit string based on probability values of bit values that appear in accordance with a plurality of pre-prepared bit histories that the bits prior to the Kth bit can take, and repeatedly selects a correct bit value for the Kth bit from the plurality of candidate bit values based on the correct bit history of the Kth bit, thereby decodes the N-bit string. [Brief explanation of the drawings]
[0012] [Figure 1] 1 shows an example of the configuration of a storage system. [Figure 2A] This shows an overview of the LZMA algorithm. [Figure 2B] A specific example of dictionary compression processing will be shown. [Figure 3A] FIG. 1 shows a functional block diagram of range encoding. [Figure 3B] FIG. 10 shows a functional block diagram of range decoding. [Figure 4A] An example will be given to explain the principle of range coding. [Figure 4B] Another example will be given to explain the principle of range coding. [Figure 5A] 10 shows a flowchart of a range encoding process. [Figure 5B] 10 shows a flowchart of a range decoding process. [Figure 6] FIG. 1 shows a functional block diagram of a method for increasing the speed of range encoding processing. [Figure 7] 10 shows a flowchart of a method for increasing the speed of range encoding processing. [Figure 8] FIG. 1 shows a functional block diagram of a method for increasing the speed of range decoding processing. [Figure 9] 10 shows a flowchart of a method for increasing the speed of range decoding processing. DETAILED DESCRIPTION OF THE INVENTION
[0013] In the following, when necessary for convenience, the description will be divided into multiple sections or examples, but unless otherwise specified, they are not unrelated to each other, and one is related to the other as a partial or complete modification, detail, supplementary explanation, etc. Furthermore, in the following, when the number of elements, etc. (including the number, numerical value, amount, range, etc.) is mentioned, it is not limited to that specific number, and may be more or less than the specific number, unless otherwise specified or when it is clearly limited in principle to a specific number, etc.
[0014] (1) System configuration In the following, a storage system with a data compression function will be described as an embodiment of this specification. The storage system reduces the amount of stored data using lossless compression. The decoding of range codes described in this specification can be applied to systems other than storage systems, such as communication systems.
[0015] 1 shows an example of the configuration of a storage system according to an embodiment of this specification. The storage system 101 includes a host I / F (Interface) 102, a storage controller 103, multiple SSDs (Solid State Drives) 105, and a cache memory 106 that uses volatile memory such as DRAM (Dynamic Random Access Memory).
[0016] The storage controller 103 is connected to the host I / F 102, SSD 105, and cache memory 106 and includes a microprocessor that controls them. The microprocessor interprets the contents of read / write commands from a host (not shown), transmits and receives data to and from the host, compresses and decompresses data using an LZMA compression / decompression circuit 104, and transfers data to and from the SSD 105 and cache memory 106.
[0017] The host I / F 102 is an interface mechanism for connecting to an external host, and responds to read / write commands in order to send data to the host and receive data from the host. The mechanism of the host I / F 102 and the protocol for sending and receiving commands and data comply with, for example, a standard interface specification.
[0018] The storage controller 103 includes an LZMA compression / decompression circuit 104 and a transfer circuit 108. The transfer circuit 108 receives and transmits data compressed or decompressed by the LZMA compression / decompression circuit 104. The transfer circuit 108 transfers data between components of the storage system 101, for example, between the LZMA compression / decompression circuit 104 and the cache memory 106. In order to reduce the amount of data stored in the SSD 105, which is a storage drive, the LZMA compression / decompression circuit 104 reversibly compresses write data received in response to a write command to generate compressed data. In addition, in order to transmit the original plaintext data to the host in response to a read command, the LZMA compression / decompression circuit 104 decompresses compressed data read from the SSD 105 to generate plaintext data.
[0019] Write data from the host is first temporarily stored in the cache memory 106. At this point, the storage controller 103 returns a write completion notice to the host. The data is then converted into compressed data via the LZMA compression / decompression circuit 104, and the compressed data is also temporarily stored in the cache memory 106. The compressed data is then written to the SSD 105.
[0020] On the other hand, read data to the host is read in a compressed state from the SSD 105 and first temporarily stored in the cache memory 106. After that, the data is converted into plaintext data through the LZMA compression / decompression circuit 104, and the plaintext data is also temporarily stored in the cache memory 106. The plaintext data is then transmitted to the host.
[0021] In this way, since data writes are compressed after returning a write completion signal, the write performance seen by the host is constant regardless of whether compression is used or not, but since data reads are not completed until the data has been returned to the host, the read response performance seen by the host depends on the time it takes to decompress the compressed data. In other words, the LZMA compression / decompression circuit 104 is required to perform high-performance decompression processing.
[0022] The LZMA compression / decompression circuit 104 is implemented, for example, as hardware (logic circuitry) designed based on a data decompression method according to an embodiment of this specification. The high-speed data decompression performance of the LZMA compression / decompression circuit 104 allows the storage system 101 to utilize the high-speed random read performance, a feature of SSDs, not only for uncompressed data but also for compressed data. The functions of the LZMA compression / decompression circuit 104 may be implemented by multiple processing devices that execute programs. Processing devices include processors, processor cores, central processing units, etc. A different type of storage drive than the SSD, such as an HDD (Hard Disk Drive), may also be used.
[0023] (2) LZMA algorithm As background knowledge for explaining the data decompression method according to an embodiment of this specification, the LZMA algorithm will be explained with reference to FIGS. 2A to 5. FIG.
[0024] (2-1) Overview of the LZMA algorithm 2A shows an overview of the LZMA algorithm. In the LZMA compression process, plaintext data 201 before compression is first subjected to dictionary compression process 202. The dictionary compression result is then subjected to range encoding process 203. This generates LZMA compressed data 204.
[0025] On the other hand, in the LZMA decompression process, the compressed data 204 is first subjected to a range decoding process 205. The decoded result is then subjected to a plaintext expansion process 206. This generates the original plaintext data 201.
[0026] (2-2) Dictionary compression processing 2B shows a specific example of dictionary compression processing 202 that constitutes the LZMA algorithm. A check is made sequentially to see if the same character string reappears in the character string stream of plaintext data 201. If a certain character string matches the first character of the string, starting from J characters before the first character, and continues for L characters, this character string is converted to a copy symbol [L, J].
[0027] For example, in a four-character string 211 of "b,c,d,e," four consecutive characters match starting from six characters before the first character "b." In this case, the string 211 is converted to a copy symbol [4,6]. Similarly, in a four-character string 212 of "a,b,a,b," four consecutive characters match starting from two characters before the first character "a" (including overlapping parts). In this case, the string 212 is converted to a copy symbol [4,2].
[0028] Similarly, in the four-character string 213 "c, d, e, f," there is a match for four consecutive characters starting from the first character "c" and 14 characters before. In this case, the string 213 is converted to a copy symbol [4, 14]. Since the amount of data of these copy symbols is less than the amount of data contained in the original string, this conversion can reduce the amount of data.
[0029] The range of the string stream (hereafter referred to as the dictionary) referenced in the match search is from one character before to a specified number of characters before. Because the dictionary range slides backward with each search, this compression technique is also called sliding dictionary compression. If there are multiple matching strings within the dictionary range, the longest consecutive matching string is converted into a copy symbol. This has the effect of further reducing the amount of data.
[0030] To generate data to be input to the subsequent range encoding process 203, characters that have not been converted into copy symbols (hereinafter referred to as literal characters) and copy symbols must be encoded using a specified bit pattern and then concatenated to form a bit stream.
[0031] FIG. 2B shows the bit stream resulting from encoding according to the rules of the LZMA specification. This bit stream is input to range encoding process 203. For example, bit pattern 221 is 12 bits long and represents the copy symbol [4,6]. Bit pattern 222 is 11 bits long and represents the copy symbol [4,2]. Bit pattern 223 is 13 bits long and represents the copy symbol [4,14]. In this way, the length of the bit pattern corresponding to the copy symbol is not fixed. On the other hand, a literal character is represented by a 9-bit bit pattern, which is obtained by adding one zero bit to the beginning of the 8-bit value of the character.
[0032] The range decoding process 205 outputs such a bit stream in the LZMA decompression process. When the plaintext expansion process 206 receives such a bit stream, it interprets it as copy symbols or literal characters and restores the character string stream of the plaintext data 201.
[0033] (2-3) Range encoding and decoding process FIG. 3A shows a functional block diagram of range encoding, and FIG. 3B shows a functional block diagram of range decoding. The range encoding function 300 will be described with reference to FIG. 3A. The encoder 301 is a calculation block that receives input bit by bit from an input bit string 302 and generates an output code 303. In the example of FIG. 3A, the input bit string is "1, 1, 0, 1." The method for generating the output code 303 will be described in the next section using FIGS. 4A and 4B. The output code 303 corresponds to the compressed data of the LZMA algorithm (the LZMA204 compressed data in FIG. 2A).
[0034] The encoder 301 also uses as input a probability value taken from a probability table 304. The probability value P(x) indicates the probability that the next input bit from the input bit string 302 is a "0" when the bit history 305 input so far is x.
[0035] The encoder 301 adapts the probability value P(x) through learning each time it uses it. For example, if the next input bit is actually "0", it increases P(x), and if it is "1", it decreases P(x). Note that at the start of encoding, all unused P(x) values are 0.5 (the probability of "0" and "1" is equal).
[0036] Next, the range decoding function 310 will be described with reference to Fig. 3B. The decoder 311 is an operation block that receives an input code 312 and generates an output bit string 313 bit by bit. The generation method will be described in the next section with reference to Figs. 4A and 4B. The output bit string 313 corresponds to the input bit stream to the plaintext expansion process of the LZMA algorithm (plaintext expansion process 206 in Fig. 2), i.e., the output bit stream from the dictionary compression process 202 in Fig. 2.
[0037] The decoder 311 also uses as input a probability value taken from a probability table 314. The probability value P(x) indicates the probability that the next output bit will be "0" when the bit history 315 output so far is x.
[0038] Like the encoder 301, the decoder 311 adapts the probability value P(x) through learning each time it uses it. For example, if the next output bit is actually "0", it increases P(x), and if it is "1", it decreases P(x). Note that at the start of decoding, all unused P(x) values are 0.5 (the probability of "0" and "1" is equal).
[0039] When the output code 303 of the range encoding function 300 and the input code 312 of the range decoding function 310 are the same, the learning-induced changes of all probability values P(x) in the probability tables 304 and 314 are the same. Therefore, the changes during encoding are reproduced during decoding.
[0040] (2-4) Principles of range encoding and decoding 4A and 4B show examples for explaining the principles of range encoding and decoding. The encoding process performed by the encoder 301 in FIG. 3A divides the numerical axis (0, 1) into lengths corresponding to the probability that each bit value of the input bit string is "0," and repeatedly leaves one of the sections as the division target for the next bit. The encoding process outputs the coordinate values included in the final remaining section as a code. Note that if the bit is "0," the left-hand section of the division is left, and if the bit is "1," the right-hand section is left. The probability that each bit value is "0" is obtained from the probability table 304 using the input bit history up to that point as an index.
[0041] According to the LZMA algorithm, the bit history for referencing probability values is cleared under certain conditions. For example, in the case of 9 bits representing a literal character, the encoder 301 encodes the first bit of the 8 bits excluding the 1 header bit using a null bit history. The encoder 301 encodes the last 8th bit, with bits 1 to 7 as the bit history, and then clears the bit history.
[0042] As shown in FIGS. 4A and 4B, the decoding process performed by the decoder 311 in FIG. 3B divides the [0, 1) numerical axis into segments with lengths corresponding to the probability that each bit value in the output bit string is "0." Furthermore, the decoder 311 checks which segment the input code (coordinate value) is included in, determines each bit in the output bit string, and leaves the segment that included it as a target for division for the next bit. Finally, all values in the output bit string are determined.
[0043] When the division is performed, if the left section contains a code, the decoder 311 determines that the bit is "0", and if the right section contains a code, the decoder 311 determines that the bit is "1". The probability that each bit value is "0" is obtained from the probability table 314 using the output bit history up to that point as an index.
[0044] The decoder 311 clears the bit history for referencing the probability value under the same conditions as for encoding. For example, in the case of 9 bits representing a literal character, the decoder 311 decodes the 8 bits excluding the 1 header bit, with the 1st bit being a null bit history. For the last 8th bit, the decoder 311 decodes bits 1 to 7 as the bit history, and then clears the bit history.
[0045] 4A and 4B both show examples of transitions in numerical axis division during encoding and decoding of the bit string "1,1,0,1." However, the probabilities of the bit value being "0" are different. In the example of FIG. 4A, the probability value of "0" is always 0.5. In the example of FIG. 4B, the probability values of "0" are 0.25, 0.25, 0.75, and 0.25, respectively, in bit order. FIG. 4A shows a case where the probability values referenced from the probability tables 304 and 314 are in their initial state. FIG. 4B shows a case where the probability values referenced from the probability tables 304 and 314 have changed due to learning.
[0046] In range encoding and decoding, when the bit string "1,1,0,1" is frequently processed, it is learned that "1" is likely to appear first in probability tables 304 and 314, that if the history is "1", then "1" is likely to appear next, that if the history is "11", then "0" is likely to appear next, and that if the history is "110", then "1" is likely to appear next. As this learning of probabilities progresses and predictions of how bits will appear become more accurate, the output code of range encoding becomes shorter.
[0047] The encoding flow in FIG. 4A is as follows. · First step: According to the input "1", the right half section [1 / 2~2 / 2] remains. · Second step: According to the input "1", the right half section [3 / 4~4 / 4] remains. · Third step: According to the input "0", the left half section [6 / 8~7 / 8] remains. ·Fourth step: According to the input "1", the right half section [13 / 16~14 / 16] remains. The output code for the last section is 13 / 16 (1101 in binary).
[0048] On the other hand, the encoding flow in FIG. 4B is as follows. · First step: According to the input "1", the right 3 / 4 section [1 / 4~4 / 4] remains. · Second step: According to the input "1", the right 3 / 4 section [7 / 16~16 / 16] remains. · Third step: According to the input "0", the left 3 / 4 section [28 / 64~55 / 64] remains. · Fourth step: According to the input "1", the right 3 / 4 section [139 / 256~220 / 256] remains. The output code for the last section is 3 / 4 (11 in binary).
[0049] The more the bit string is input according to the probability prediction, the larger the size of the interval remaining after division. Therefore, fewer bits are required to represent the coordinate values of the output code included in the final remaining interval. While the example in Figure 4A requires four bits, the example in Figure 4B requires only two bits. In this way, range codes improve compression ratios by learning bit occurrence probabilities according to bit history.
[0050] (2-5) Range encoding and decoding flowchart Fig. 5A shows a flowchart of an example of range encoding. Fig. 5B shows a flowchart of an example of range decoding. First, the procedure of range encoding will be described with reference to Fig. 5A.
[0051] The encoder 301 references the probability value of the next bit being "0" from the probability table 304 according to the input bit history (501). The encoder 301 divides the numerical axis range (the range to be divided) into two intervals according to the probability value (502). When dividing, the range size is multiplied by the probability value, which is the most time-consuming part of the encoding process. The encoder 301 then selects one of the two intervals according to whether the input bit value is "0" or "1" (503).
[0052] Next, in step 504, the encoder 301 determines whether the input of bits has ended. If the input of bits has ended (504: YES), the process proceeds to step 506; if there is still input (504: NO), the process proceeds to step 505.
[0053] In step 505, the encoder 301 updates the probability value used in the probability table 304 and updates the bit history for encoding the next bit. The probability value is updated by increasing it if the input bit value is "0" and decreasing it if it is "1." The bit history is updated by, for example, changing the input bit next to "11" to "110" if it is "0." After this, the encoder 301 returns to step 501 to continue the encoding process.
[0054] On the other hand, in step 506, the encoder 301 outputs the coordinate value that identifies the last remaining interval, for example, the value included in the interval that has the smallest number of bits for expression, as a code, and ends the encoding process.
[0055] An example of range decoding will be described with reference to FIG. 5B. The decoder 311 references the probability table 314 according to the output bit history to obtain the probability value that the next bit is "0" (511). The decoder 311 divides the numerical axis range into two intervals according to the probability value (512). When dividing, the range size is multiplied by the probability value. This is the most time-consuming part of the decoding process. The decoder 311 then selects one of the two intervals that contains the value of the input code (513). The decoder 311 outputs the bit value "0" or "1" represented by the selected interval (514).
[0056] Next, in step 515, the decoder 311 determines whether the output of bits has ended. If so (515: YES), the decoding process ends. If there is more output (515: NO), the process proceeds to step 516.
[0057] In step 516, the decoder 311 updates the probability value used in the probability table 314 and updates the bit history for decoding the next bit. The probability value is updated by increasing it if the output bit value is "0" and decreasing it if it is "1." The bit history is updated by changing it to "110," for example, if the output bit after "11" is "0." After this, the decoder 311 returns to step 511 to continue the decoding process.
[0058] (3) Accelerating range encoding Figure 6 shows a functional block diagram of an example of a method for speeding up range encoding processing. The LZMA compression / decompression circuit 104 in Figure 1 performs the compression processing shown in this block diagram. In the example described with reference to Figures 3A to 5B, a multiplication process is performed by referencing a probability each time one bit is input. As a result, only one bit can be processed in one calculation cycle, which can cause the processing performance of the LZMA algorithm to be slow.
[0059] The range encoding function 600 shown in Figure 6 speeds up range encoding processing by operating multiple encoders simultaneously. That is, N ranges to be divided (N>1) are prepared, and N types of bit histories are prepared in advance from the input bit string. This range encoding function 600 simultaneously references N probability values in a probability table and performs multiplication processing on the N input bits in parallel, improving encoding performance by N times.
[0060] Figure 6 shows an example of encoding using this high-speed technology when N=4. All four encoders 601A-601D perform the same processing as encoder 301 in Figure 3A. Each encoder retrieves and uses one probability value from probability table 604. These four probability values are referenced using bit histories 605A-605D as indexes.
[0061] Bit history 605A is used when encoder 601A processes the first bit "1" of input bit string 602, and its value is null. Bit history 605B is used when encoder 601B processes the second bit "1" of input bit string 602, and its value is "1."
[0062] Bit history 605C is used when encoder 601C processes the third bit “0” of input bit string 602, and its value is “11.” Bit history 605D is used when encoder 601D processes the fourth bit “1” of input bit string 602, and its value is “110.”
[0063] In general, the bit history used to encode the Nth bit is formed by concatenating the 1st to (N-1)th bits. By preparing four types of bit histories in this way, the four encoders 601A to 601D can simultaneously refer to four probability values from the probability table 604 and simultaneously perform multiplication using these probability values.
[0064] The four sub-codes 603A to 603D output from the encoders 601A to 601D are finally concatenated to form the output code 606. The output code 606 corresponds to the compressed data of the LZMA algorithm. According to this method, 4-bit input can be processed in one calculation cycle, improving the range encoding performance in the compression process of the LZMA algorithm by four times compared to conventional methods.
[0065] FIG. 7 shows an example of a flowchart of the range encoding acceleration method described with reference to FIG. 6. The procedure of the range encoding acceleration method will be described with reference to the flowchart in FIG. 7. First, the LZMA compression / decompression circuit 104 creates N types of bit histories used to encode N bits of the input bit string (701). N is an integer equal to or greater than 2. The N encoders obtain, from the probability table, the probability values of the next bit being "0" based on their respective bit histories (702). The N encoders divide each of the N numerical axis ranges (ranges to be divided) into two intervals according to these probability values (703).
[0066] The multiplication of the range size and the probability value by the N encoders is performed in parallel. In the first cycle, the numerical axis range (range size) is common to the N encoders, and is [0, 1] in the example shown in FIG. 6. In the second cycle and thereafter, the range selected by the relevant encoder in the previous cycle becomes the target numerical axis range (range size). Each encoder selects one of the two ranges on the left and right depending on whether the input bit value is "0" or "1" (704).
[0067] Next, in step 705, the LZMA compression / decompression circuit 104 determines whether the bit input is complete, and if the bit input is complete (705: YES), the process proceeds to step 707, and if there is more input (705: NO), the process proceeds to step 706. In step 706, the LZMA compression / decompression circuit 104 updates the N probability values used in the probability table. The probability value is updated by increasing it if the input bit value is "0" and decreasing it if it is "1."
[0068] After this, the LZMA compression / decompression circuit 104 returns to step 701 to continue the encoding process. For example, if N is 4 and 8 bits of a literal character are to be encoded, the first 4 bits are encoded in the first cycle of this flow, and the last 4 bits are encoded in the second cycle. In the second cycle, the bit history used to encode the 5th bit is the bit string of the first 4 bits.
[0069] For example, if the input bit string is 6 bits, the first cycle may encode the first 4 or 3 bits, and the second cycle may encode the last 2 or 3 bits. The maximum value of the input bit string to the LZMA compander 104 is 4, but bit strings below this value can be encoded.
[0070] In step 707, each encoder generates a coordinate value that identifies the last remaining interval, for example, the value contained in that interval that has the fewest number of bits to represent. The LZMA compression / decompression circuit 104 outputs a bit string that concatenates these N values as a code, thereby completing the encoding process.
[0071] In the range encoding example shown in Figure 6, the integer N>1 and the number of input bits is N bits, i.e., the bit history length is at most (N-1) bits. This range encoding can speed up encoding by N times using N ranges to be divided. As mentioned in the explanation with reference to Figure 7 for the example of 8-bit literal characters, if the integer M>N and the number of input bits is M bits, i.e., the bit history length is at most (M-1) bits, then the N ranges to be divided can be used to speed up encoding of the input bits.
[0072] The method will be explained below using an example where M=8 and N=4. The LZMA compression / decompression circuit 104 has a 255-entry probability table indexed by a maximum 7-bit bit history. The LZMA compression / decompression circuit 104 prepares four types of bit history (empty, 1 bit, 2 bits, and 3 bits, respectively) to be used in encoding the first 4 bits of an 8-bit input bit string, and simultaneously references the four corresponding probability values in the probability table. The LZMA compression / decompression circuit 104 uses these probability values to encode the first 4 bits in parallel in the first cycle.
[0073] Next, the LZMA compression / decompression circuit 104 prepares four types of bit histories (4 bits, 5 bits, 6 bits, and 7 bits, respectively, including the first 4 bits at the beginning) to be used for encoding the last 4 bits of the input bits, and simultaneously references the corresponding four probability values from the probability table.The LZMA compression / decompression circuit 104 uses these probability values to encode the last 4 bits in parallel in the second cycle.
[0074] In this way, the LZMA compander 104 processes an 8-bit input in two cycles (i.e., four times the performance), generates four sub-codes, and constructs an output code by concatenating them.
[0075] In general, the performance of the encoding process for an M-bit input range code can be improved by using a probability table with (2^M-1) entries indexed by a bit history of up to (M-1) bits and N encoders to process M bits in [M / N] calculation cycles. Note that the LZMA compander 104 may generate subcodes without performing the above parallel processing.
[0076] (4) Accelerating range decoding An N-fold increase in the speed of range decoding processing cannot be achieved by simply operating N decoders 311 in Figure 3B in parallel. This is because the bit history used in the processing of a certain decoder X is uncertain until decoder Y, which decodes the previous bit, outputs the processing result. Therefore, decoder X cannot look up probability values from the probability table and perform multiplication using those values simultaneously with decoder Y, and parallelization cannot be achieved.
[0077] A method for speeding up range decoding processing according to one embodiment of this specification will be described below. Fig. 8 shows a functional block diagram of the method for speeding up range decoding processing. The LZMA compression / decompression circuit 104 in Fig. 1 performs decompression processing using a range decoding function 800 shown in this block diagram.
[0078] FIG. 8 shows an example of range decoding when N=4, that is, the number of bits in the output bitstream is 4. All of the 15 decoders, 8A (1), 8B0 and 8B1 (2), 8C00 to 8C11 (4), and 8D000 to 8D111 (8), perform processing similar to that of the decoder 311 in FIG. 3B. Some of the decoders are not shown in FIG. 8. The four sub-codes 803A to 803D input to these 15 decoders are separated from the input code 802 (corresponding to compressed data in the LZMA algorithm) and are the same as the four sub-codes 603A to 603D in FIG. 6. Note that one sub-code may be shared by multiple decoders.
[0079] Each decoder uses one probability value from the probability table 804 to output a candidate bit value, with the 15 probability values indexed into the full set of possible bit histories.
[0080] The bit history value used by one decoder 8A to decode the first bit of the output bit string 806 is NULL, and the bit history values used by two decoders 8B0 and 8B1 to decode the second bit of the output bit string 806 are "0" and "1", respectively.
[0081] The bit history values used by the four decoders 8C00 to 8C11 to decode the third bit of the output bit string 806 are "00," "01," "10," and "11," respectively. The bit history values used by the eight decoders 8D000 to 8D111 to decode the fourth bit of the output bit string 806 are "000," "001," "010," "011," "100," "101," "110," and "111," respectively.
[0082] In general, the number of bit histories used to decode the K-th bit is 2^(K-1). Each bit history is a (K-1)-bit bit pattern (bit string) that is possible as the first through (K-1)-th bits of the output bit string 806. By preparing 15 types of bit histories in this way, 15 probability values are simultaneously referenced from the probability table 804, and the 15 decoders simultaneously perform multiplication using these probability values.
[0083] If the first bit of the output bit string 806 output by the decoder 8A is "1", it is clear that the second bit output by the decoder 8B1, which performed decoding assuming that the first bit was "1" out of the two decoders 8B0 and 8B1, is the correct result. Therefore, the selector 805B selects "1" output by the decoder 8B1 from the two second bit candidates output by the decoders 8B0 and 8B1. In other words, the first and second bits are determined to be "11".
[0084] This shows that the third bit output by decoder 8C11, which performed decoding on the assumption that the first and second bits were "11" among decoders 8C00 to 8C11, is the correct result. Therefore, selector 805C selects "0" output by decoder 8C11 from the four third bit candidates output by decoders 8C00 to 8C11. In other words, the first to third bits are determined to be "110".
[0085] This shows that the fourth bit output by decoder 8D110, which performed decoding on the assumption that the first to third bits were "110" among decoders 8D000 to 8D111, is the correct result. Therefore, selector 805D selects "1" output by decoder 8D110 from the eight fourth bit candidates output by decoders 8D000 to 8D111.
[0086] As a result of the above, the four bits of the output bit string 806 are determined to be "1101." Generally speaking, the LZMA compression / decompression circuit 104 is equipped with 2^(K-1) decoders to decode the K-th bit, and stores 2^(K-1) candidates for the K-th bit output by these decoders. The LZMA compression / decompression circuit 104 selects, as the K-th bit, a candidate output by one decoder that performed decoding assuming that the already determined values of the 1st through (K-1)th bits are bit history.
[0087] The bit selection process by selectors 805B to 805D takes a much shorter time than the multiplication process by the decoder. Therefore, this method allows 4-bit output to be processed in one calculation cycle. As a result, the performance of the range decoding process in the decompression process of the LZMA algorithm is improved by four times compared to the conventional method.
[0088] The procedure for the high-speed range decoding method described with reference to Fig. 8 will be described below with reference to Fig. 9. First, the LZMA compression / decompression circuit 104 creates (2^N-1) bit histories that may be used to decode N bits of the output bit string (901). There are 2^(K-1) bit histories used to decode the Kth bit.
[0089] Each of the (2^N-1) decoders obtains a probability value indicating that the next bit is "0" from the probability table 804 according to the bit history it is responsible for (902), and divides the numerical axis range (range to be divided) into two intervals according to the probability value (903). The numerical axis range divided by the 2^(K-1) decoders used to decode the K-th bit is common. Specifically, the numerical axis range of all decoders in the first cycle is common, which is [0,1] in the example of Figure 8. From the second cycle onwards, the numerical axis range of the decoder for the K-th bit is the range of the division result by the decoder that output the correct answer for the K-th bit in the previous cycle. When dividing, the range size is multiplied by the probability value.
[0090] The decoder selects one of the two intervals that contains the input subcode value (904), and generates a bit value "0" or "1" represented by the selected interval (905). The number of bit values generated is (2^N-1), and the number of candidates for the Kth bit is 2^(K-1). The selector then selects one correct bit from each candidate in order, starting from the first bit, and determines and outputs an N-bit pattern (906). The correct values of the 1st to (K-1)th bits are used as bit history to select the correct value for the Kth bit.
[0091] Next, in step 906, the LZMA compression / decompression circuit 104 determines whether the output of bits has ended. If so (906: YES), the decoding process ends. If there is more output (906: NO), the process proceeds to step 907.
[0092] In step 907, the LZMA compression / decompression circuit 104 updates the N probability values used for the probability table 804. The probability value is updated by increasing it if the output bit value is "0" and decreasing it if it is "1." Furthermore, the LZMA compression / decompression circuit 104 adopts the interval selected in step 904 by the decoder that output the correct bit value as the numerical axis range for the next cycle. The interval selected in step 904 by one decoder that output the correct value for the Kth bit out of the 2^(K-1) decoders for the Kth bit is adopted as the numerical axis range to be divided in step 903 for the next decoding of the Kth bit.
[0093] After this, the LZMA compression / decompression circuit 104 returns to step 901 to continue the decoding process. For example, if the first 4 bits and the last 4 bits of an 8-bit literal character are encoded in two cycles, the bit history used to decode the 5th bit in the second cycle of this flow is the bit string of the first 4 bits.
[0094] For example, if 6-bit input data is divided into the first 4 bits and the remaining 2 bits and coded in two cycles, the LZMA compression / decompression circuit 104 may decode 4 or 3 bits in the first cycle, and then decode 2 or 3 bits in the second cycle. The maximum value of the input bit string to the LZMA compression / decompression circuit 104 is 4, and bit strings of less than this value can be decoded.
[0095] In the method for accelerating the decoding process of a range code shown in Fig. 8, when the integer N>1, the number of input bits is N bits (i.e., the length of the bit history is at most (N-1) bits), and N ranges to be divided are used, thereby speeding up the decoding process by N times. As mentioned with reference to Fig. 9 for the example of an 8-bit literal character, when the integer M>N, the number of input bits is M bits, i.e., the length of the bit history is at most (M-1) bits, N ranges to be divided can be used to speed up the decoding of the output bit string.
[0096] An example of decoding an 8-bit output bit string will be described below. The LZMA compression / decompression circuit 104 has 15 decoders, as in Figure 8, and inputs four sub-codes separated from the input code (corresponding to the compressed data of the LZMA algorithm) to these 15 decoders, as in Figure 8. Each decoder obtains and uses one probability value from a 255-entry probability table, indexed by a maximum 7-bit bit history.
[0097] The 15 probability values referenced in the first cycle are values referenced using as indices all possible bit histories (null, 1 bit, 2 bits, 3 bits, respectively) for the first 4 bits of the 8-bit output bit string. The bit history value used by one decoder to decode the first bit of the output bit string is null.
[0098] The two decoders that decode the second bit of the output bitstream use bit history values of "0" and "1", respectively. The four decoders that decode the third bit of the output bitstream use bit history values of "00", "01", "10", and "11", respectively. The eight decoders that decode the fourth bit of the output bitstream use bit history values of "000", "001", "010", "011", "100", "101", "110", and "111", respectively.
[0099] The 15 decoders perform multiplication in parallel using the probability values referenced in their bit history. Then, as in Figure 8, the selector's bit selection process determines the values of the first through fourth bits in order. In this example, we will use "1101."
[0100] Next, the 15 probability values referenced in the second cycle are values referenced using as indexes all possible bit histories for the last 4 bits of the 8-bit output bit string (4 bits, 5 bits, 6 bits, and 7 bits, respectively, starting with "1101" determined in the first cycle).
[0101] The bit history value used by one decoder to decode the fifth bit of the output bitstream is "1101." The bit history values used by two decoders to decode the sixth bit of the output bitstream are "11010" and "11011," respectively. The bit history values used by four decoders to decode the seventh bit of the output bitstream are "110100," "110101," "110110," and "110111," respectively.
[0102] The bit history values used by the eight decoders to decode the eighth bit of the output bit string are "1101000", "1101001", "1101010", "1101011", "1101100", "1101101", "1101110", and "1101111", respectively.
[0103] The 15 decoders perform multiplication in parallel using the probability values referenced in their bit histories. Then, as in Figure 8, the selector's bit selection process determines the values of bits 5 to 8 in order.
[0104] As in Figure 8, the selector's bit selection process is performed in a much shorter time than the decoder's multiplication process. Therefore, this method allows 8-bit output to be processed in two calculation cycles. As mentioned above, in a probability table with 255 entries, 15 entries are referenced in the first cycle, and 15 entries are selected and referenced from the remaining 240 entries in the second cycle. In the second cycle, the number of entries referenced is reduced to 1 / 16 by indexing using the bit history including the first 4 bits determined in the first cycle.
[0105] In general, the decoding process for a range code that outputs M bits can be improved by using a probability table with (2^M-1) entries indexed by a bit history of up to (M-1) bits and (2^N-1) decoders to process M bits in [M / N] calculation cycles.
[0106] As described above, one embodiment of this specification can quickly decompress data compressed using range coding, thereby improving the read response performance of compressed data in, for example, an appliance storage system that has a data compression function using a range coding algorithm.
[0107] The present invention is not limited to the above-described embodiments and includes various modifications. For example, the above-described embodiments have been described in detail to clearly explain the present invention, and are not necessarily limited to those including all of the described configurations. Furthermore, it is possible to replace part of the configuration of one embodiment with the configuration of another embodiment, or to add the configuration of another embodiment to the configuration of one embodiment. Furthermore, it is possible to add, delete, or replace part of the configuration of each embodiment with other configurations.
[0108] Furthermore, the above-mentioned components, functions, processing units, etc. may be realized in part or in whole by hardware, for example, by designing them as integrated circuits. Furthermore, the above-mentioned components, functions, etc. may be realized in software by a processor interpreting and executing a program that realizes each function. Information such as the programs, tables, and files that realize each function can be stored in a memory, a recording device such as a hard disk or SSD (Solid State Drive), or a recording medium such as an IC card or SD card.
[0109] In addition, the control lines and information lines shown are those that are considered necessary for the explanation, and do not necessarily show all the control lines and information lines in the product. In reality, it can be assumed that almost all components are interconnected.
[0110] [Note] Several aspects of the present disclosure are described below. (1) 1. An apparatus for processing received data, comprising: a circuit for receiving an input code compressed based on a range code; a decompression circuit for decompressing a part or all of the input code to decode an N-bit string; Including, N represents an integer greater than 1, and K represents an integer from 1 to N, a bit value of the K-th bit of the input code is decoded based on a bit history of bits prior to the K-th bit; The expansion circuit calculating a plurality of candidate bit values for the bits of the N-bit string based on a plurality of possible bit histories of bits before the K-bit in parallel for the plurality of bits; and repeating the process of selecting a correct bit value for the K bits from the plurality of candidate bit values based on a history of correct bits prior to the K bits, thereby decoding the N-bit string. (2) The device according to (1), The expansion circuit storing probability values of bit values occurring according to said bit history; An apparatus for selecting and updating, from the stored probability values, a probability value corresponding to a bit history on which correct bits constituting the decoded N-bit string are based. (3) The device according to (1), The candidate bit value of the Kth bit in the N-bit string is calculated by dividing the range to be divided into two sections by multiplying the range by the probability value of each of 2^(K-1) possible bit histories, and determining each of 2^(K-1) possible candidate bit values from the section identified by the subcode among the two sections of the K bits in the input code. (4) The device according to (1), The decompression circuit performs multiple cycles of decoding a string of bits from a portion of the input code if the number of bits to decode from the entire input code is greater than a preset maximum value. (5) The device according to (4), In a second or subsequent cycle among the multiple cycles, the range to be divided for determining each of the candidate bit values of the K bits is a partition for the correct bit value of the K bits in the immediately preceding cycle. (6) 1. A storage system, comprising: an interface for receiving requests from a host; a controller that writes data to and reads data from the storage drive in response to commands from the host; The controller includes the decompression circuit according to (1), the controller decodes the input code transferred from the storage drive in response to a read command from the host using the decompression circuit to generate read data; The storage system returns the read data to the host via the interface. (7) (6) The storage system according to (6), The expansion circuit storing probability values of bit values occurring according to said bit history; A storage system that selects and updates the probability values of each correct bit value that constitutes the decoded N-bit string from the stored probability values. (8) (6) The storage system according to (6), A storage system in which the candidate bit value for the Kth bit in the N-bit string is calculated by dividing the range to be divided into two sections by multiplying the range by the probability value of each of 2^(K-1) bit histories, and determining a candidate bit value from each of the 2^(K-1) sections for the K-bit subcode in the input code. (9) (6) The storage system according to (6), The decompression circuit performs multiple cycles of decoding a bit string from a portion of the input code when the number of bits to be decoded from the entire input code is greater than a preset maximum value. (10) (6) The storage system according to (6), In a second or subsequent cycle among the multiple cycles, the division target range for determining each of the candidate bit values of the K bits is a partition for the correct bit value of the K bits in the immediately preceding cycle. (11) A method for decoding an N-bit string by decompressing a part or all of an input code compressed based on a range code, comprising: N represents an integer greater than 1, and K represents an integer from 1 to N, The method comprises: Calculating candidate bit values for each bit of the N-bit string in parallel, the calculation of the candidate bit value for the K-th bit in the N-bit string is performed by multiplying the division target range by the probability value of each bit history, dividing the range into two sections, and determining candidate bit values from each section for the K-bit sub-code in the input code; A method for decoding the N-bit string by selecting a correct bit value for the K bits from the candidate bit values based on a history of correct bits prior to the K bits. (12) (11) The method according to (11), A method for selecting and updating the probability values of each correct bit value constituting the decoded N-bit string from the preset probability values. (13) (11) The method according to (11), A method for calculating the candidate bit value for the Kth bit in the N-bit string by multiplying the range to be divided by the probability value of each of 2^(K-1) bit histories to divide it into two sections, and determining a candidate bit value from each of the 2^(K-1) sections for the K-bit subcode in the input code. (14) (11) The method according to (11), A method of decoding a string of bits from a portion of the input code over multiple cycles if the number of bits to be decoded from the entire input code is greater than a preset maximum value. (15) (14) The method according to (14), A method according to claim 1, wherein in a second or subsequent cycle among said multiple cycles, the range to be divided for determining each of the candidate bit values of said K bits is a partition for the correct bit value of said K bits in the immediately preceding cycle. (16) 1. An apparatus for processing received data, comprising: a circuit for receiving an input code compressed based on a range code; a plurality of decompression circuits for decompressing a part or all of the input code to decode a bit string; a bit value of a bit of the input code is decoded based on a bit history of bits preceding the bit; The plurality of expansion circuits include: calculating a plurality of candidate bit values for a bit in the bit string based on a plurality of possible bit histories of bits preceding the bit; The bit string is decoded by repeatedly selecting a correct bit value from the plurality of candidate bit values based on the correct bit history of bits preceding the selected bit. (17) 1. An apparatus for processing received data, comprising: a decompression circuit for decompressing a part or all of the input code compressed based on the range code to decode the bit string; a bit value of a bit in the bit string is decoded based on a bit history of bits preceding the bit in the bit string; the decompression circuit includes a plurality of decoders; Each of the plurality of decoders calculating a candidate bit value for a bit in the bit string based on probability values associated with a plurality of candidate bit histories that are prepared in advance and that can be taken by a bit preceding the bit in the bit string; The expansion circuit an apparatus for decoding the bit string by repeatedly selecting a correct bit value from a plurality of candidate bit values calculated by each of the plurality of decoders based on a bit history of bits preceding the selected bit. (18) The device according to (17), The expansion circuit storing the probability values of bit values occurring as a function of the bit history; An apparatus for selecting and updating the stored probability values that have been used to decode the bit string. (19) The device according to (17), the bit string is an N-bit string, where N is an integer greater than 1 and K is an integer from 1 to N; The candidate bit value of the Kth bit in the N-bit string is calculated by multiplying the range to be divided by the probability value of each of 2^(K-1) possible bit histories to divide the range to be divided into two sections, and determining each of 2^(K-1) possible candidate bit values from the section identified by the subcode separated from the input code among the two sections of the K bits in the input code. (20) The device according to (17), The decompression circuit performs multiple cycles of decoding a string of bits from a portion of the input code if the number of bits to decode from the entire input code is greater than a preset maximum value. (twenty one) The device according to (20), In a second or subsequent cycle among the multiple cycles, the range to be divided for determining each of the plurality of candidate bit values is a partition for the correct bit value in the immediately preceding cycle. (twenty two) 1. A storage system, comprising: an interface for receiving requests from a host; a controller that writes data to and reads data from the storage drive in response to commands from the host; The controller includes the expansion circuit according to (17), the controller decodes the input code transferred from the storage drive in response to a read command from the host using the decompression circuit to generate read data; The storage system returns the read data to the host via the interface. (twenty three) 1. A method for processing received data by a device, comprising: The apparatus includes a decompression circuit that decompresses a part or all of the compressed input code based on the range code to decode the bit string; the decompression circuit includes a plurality of decoders; a bit value of a bit in the bit string is decoded based on a bit history of bits preceding the bit in the bit string; The method further comprises the steps of: calculating, by each of the plurality of decoders, a candidate bit value for a bit in the bit string based on a probability value associated with a plurality of candidate bit histories that can be taken by a bit preceding the bit in the bit string, the candidate bit value being determined; a method for decoding the bit string by repeatedly selecting a correct bit value from a plurality of candidate bit values calculated by each of the plurality of decoders based on a bit history of bits preceding the selected bit; [Explanation of symbols]
[0111] 101...storage system, 103...storage controller, 104...LZMA compression / decompression circuit, 301, 601A-D...encoders, 311, 8A, 8B0, 8B1, 8C00, 8C11, 8D000, 8D111...decoders, 304, 314, 604, 804...probability tables, 302, 602...input bit strings, 303, 606...output codes, 312, 802...input codes, 313, 806...output bit strings
Claims
1. 1. An apparatus for processing received data, comprising: a decompression circuit for decompressing the compressed input code to decode an N-bit sequence; N represents an integer greater than 1, and K represents an integer from 1 to N, a bit value of the Kth bit of the input code is decoded based on a bit history of bits prior to the Kth bit; The expansion circuit calculating, in parallel for a plurality of bits, each of a plurality of candidate bit values for the bits of the N-bit string based on probability values of bit values that appear in accordance with a plurality of bit histories that are prepared in advance and that can be taken by bits before the K bits; The apparatus decodes the N-bit string by repeatedly selecting a correct bit value for the K bits from the plurality of candidate bit values based on a history of correct bits prior to the K bits.
2. 10. The apparatus of claim 1, calculating the plurality of candidate bit values in parallel for three or more of the plurality of bits; The apparatus calculates one candidate bit value for the K bit, calculates two candidate bit values for the K+1th bit, and calculates four candidate bit values for the K+2th bit.
3. 10. The apparatus of claim 1, The expansion circuit The apparatus selects and updates, from among the probability values, a probability value corresponding to a bit history on which correct bits constituting the decoded N-bit string are based.
4. 10. The apparatus of claim 1, The candidate bit value of the Kth bit in the N-bit string is calculated by multiplying the range to be divided by the probability value of each of 2^(K-1) possible bit histories to divide the range to be divided into two sections, and determining each of 2^(K-1) possible candidate bit values from the section identified by the subcode of the input code among the two sections of the K bits in the input code.
5. 10. The apparatus of claim 1, The expansion circuit If the number of bits to decode from the entire input code is greater than a preset maximum, the apparatus performs multiple cycles of decoding a sequence of bits from a portion of the input code.
6. 6. The apparatus of claim 5, In a second or subsequent cycle among the multiple cycles, the range to be divided for determining each of the candidate bit values of the K bits is a partition for the correct bit value of the K bits in the immediately preceding cycle.
7. 1. A storage system, comprising: an interface for receiving requests from a host; a controller that writes data to and reads data from the storage drive in response to commands from the host; the controller includes a decompression circuit that decompresses a part or all of the compressed input code based on the range code to decode an N-bit string; N represents an integer greater than 1, and K represents an integer from 1 to N, a bit value of the Kth bit of the input code is decoded based on a bit history of bits prior to the Kth bit; the decompression circuit includes a plurality of encoders and a selector; each of the plurality of encoders calculates a plurality of candidate bit values for the bits of the N-bit string based on probability values of bit values that appear according to a plurality of bit histories that are prepared in advance and that can be taken by bits before the K bits; the selector repeatedly selects a correct bit value for the K bits from the plurality of candidate bit values based on a correct bit history prior to the K bits to decode the N-bit string; the controller decodes the input code transferred from the storage drive in response to a read command from the host using the decompression circuit to generate read data; The storage system returns the read data to the host via the interface.
8. 8. The storage system according to claim 7, The expansion circuit calculating the plurality of candidate bit values in parallel for three or more of the plurality of bits; A storage system that calculates one candidate bit value for the K bit, calculates two candidate bit values for the K+1th bit, and calculates four candidate bit values for the K+2th bit.
9. 8. The storage system according to claim 7, The expansion circuit A storage system that selects and updates, from among the probability values, a probability value that corresponds to a bit history on which correct bits that constitute the decoded N-bit string are based.
10. 8. The storage system according to claim 7, A storage system in which the candidate bit value for the Kth bit in the N-bit string is calculated by multiplying the range to be divided by the probability value of each of 2^(K-1) possible bit histories to divide the range to be divided into two sections, and determining each of 2^(K-1) possible candidate bit values from the section identified by the subcode of the input code out of the two sections of the K bits in the input code.
11. 8. The storage system according to claim 7, The expansion circuit When the number of bits to be decoded from the entire input code is greater than a preset maximum value, the storage system performs multiple cycles of decoding a bit string from a portion of the input code.
12. 1. A method for an apparatus to decompress a compressed input code and decode an N-bit string, comprising: N represents an integer greater than 1, and K represents an integer from 1 to N, a bit value of the Kth bit of the input code is decoded based on a bit history of bits prior to the Kth bit; The method further comprises the steps of: calculating, in parallel for a plurality of bits, each of a plurality of candidate bit values for the bits of the N-bit string based on probability values of bit values that appear in accordance with a plurality of bit histories that are prepared in advance and that can be taken by bits before the K bits; a correct bit value for the K bits is repeatedly selected from the plurality of candidate bit values based on a history of correct bits prior to the K bits, thereby decoding the N-bit string.
13. 13. The method of claim 12, wherein the device comprises: A method of decoding a string of bits from a portion of the input code over multiple cycles if the number of bits to be decoded from the entire input code is greater than a preset maximum value.
Citation Information
Patent Citations
Encoding device and decoding device
JP2001189661A
Method and device for arithmetic encoding / Decoding
JP2001230935A
Decoding device and encoding method
JP2013126160A
A device that processes received data
JP7767561B2
Decoding device and coding method
US20130154857A1