KR20220049522A - 다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진 - Google Patents

다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진 Download PDF

Info

Publication number
KR20220049522A
KR20220049522A KR1020227005432A KR20227005432A KR20220049522A KR 20220049522 A KR20220049522 A KR 20220049522A KR 1020227005432 A KR1020227005432 A KR 1020227005432A KR 20227005432 A KR20227005432 A KR 20227005432A KR 20220049522 A KR20220049522 A KR 20220049522A
Authority
KR
South Korea
Prior art keywords
data
decoders
stream
streams
command
Prior art date
Application number
KR1020227005432A
Other languages
English (en)
Inventor
비네이 파텔
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20220049522A publication Critical patent/KR20220049522A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)

Abstract

N개의 디코더들 및 압축 해제기를 포함하는 압축 해제 엔진을 포함하는 전자 디바이스는 데이터의 N개의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제한다. 압축된 입력 데이터를 압축 해제하기 위한 커맨드를 수신시, 압축 해제 엔진은 N개의 디코더들 각각이 압축된 입력 데이터로부터의 N개의 스트림들의 각 스트림을 개별적으로 그리고 N개 디코더들의 다른 디코더들과 실질적으로 병행하여 디코딩하게 한다. 각 디코더는 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 디코딩된 데이터의 스트림을 출력한다. 다음으로, 압축 해제기는 N개의 디코더들에 의해 출력되는 디코딩된 데이터의 스트림들로부터, 원본 데이터를 재현하기 위해 압축 표준을 사용하여 데이터를 압축 해제하기 위한 커맨드들을 생성한다. 다음으로, 압축 해제기는 원본 데이터를 재현하기 위한 커맨드들을 실행하고, 원본 데이터를 메모리에 저장하거나 원본 데이터를 또 다른 엔티티에 제공한다.

Description

다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진
일부 전자 디바이스들은 데이터, 이를테면 사용자 또는 시스템 파일들 , 데이터의 흐름들 또는 시퀀스들 등을 압축하기 위한 동작들을 수행한다. 예를 들어, 전자 디바이스들은 데이터를 압축하여 데이터의 크기를 줄여 보다 효율적으로 데이터를 메모리들에 저장하거나, 데이터를 네트워크를 통해 전자 디바이스들 사이에서 전송할 수 있다. 이러한 전자 디바이스들 중 다수는 원본 데이터로부터 압축된 데이터를 생성하는 데 Lempel-Ziv 77- (LZ77-) 또는 LZ78-기반 압축 표준과 같은 압축 표준 및/또는 허프만 코딩과 같은 인코딩 표준을 사용한다.
데이터를 압축하는 것은 데이터를 저장하고 핸들링하는 데 수반되는 노력 및 에너지를 감소시킬 수 있지만, 압축된 데이터는 많은 동작들에 사용되기 전에 압축 해제되어야 한다. 이는, 이러한 동작들이 수행될 수 있기 전에, 전자 디바이스가 압축 표준 및/또는 인코딩 표준의 동작들의 효과들을 역전시키고, 이에 따라 원본 데이터를 복원하기 위한 동작들을 수행해야 한다는 것을 의미한다. 많은 전자 디바이스들에서, 데이터는 소프트웨어로(즉, 소프트웨어 루틴 또는 애플리케이션 프로그램을 사용하여) 압축 해제되며, 이는 통상적으로 압축된 데이터를 압축 해제하기 위해 범용 프로세서가 다수의 계산 동작들 및 대응하는 메모리 액세스들을 수행할 것을 필요로 한다. 다수의 계산 동작들 및 메모리 액세스들로 인해, 소프트웨어로 데이터를 압축 해제하는 것은 비효율적이다.
도 1은 일부 실시예들에 따른 데이터의 스트림들을 포함하는 압축된 데이터를 도시하는 블록도를 나타낸다.
도 2는 일부 실시 예들에 따른 전자 디바이스를 도시한 블록도를 나타낸다.
도 3은 일부 실시예들에 따른 압축 해제 서브시스템을 도시한 블록도를 나타낸다.
도 4는 일부 실시예들에 따른 디코더 서브시스템을 도시한 블록도를 나타낸다.
도 5는 일부 실시예들에 따른 압축 해제기 서브시스템을 도시한 블록도를 나타낸다.
도 6은 일부 실시예들에 따른 다수의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 프로세스를 도시한 흐름도를 나타낸다.
도면들 및 설명 전체에 걸쳐, 동일한 참조 부호들은 동일한 도면 요소들을 나타낸다.
이하의 설명은 당업자가 설명된 실시예들을 제작하고 사용할 수 있게 하기 위해 제시되며, 특정 적용예 및 이의 요건들의 맥락에서 제공된다. 설명되는 실시예들에 대한 다양한 변형안들이 당업자들에게 용이하게 명백할 것이고, 본원에서 정의되는 일반적인 원리들은 다른 실시예들 및 적용예들에 적용될 수 있다. 따라서, 설명되는 실시예들은 제시되는 실시예들에 제한되지 않고, 본원에서 개시되는 원리들 및 특징들에 부합하는 최광의 범위가 부여되어야 한다.
용어
하기의 설명에서, 실시예들을 설명하기 위해 다양한 용어들이 사용된다. 하기는 이러한 용어들 중 하나에 대한 간략화되고 일반적인 설명이다. 이러한 용어는 명확성 및 간결성을 위해 본원에서 언급되지 않은 상당한 추가적인 양태들을 가질 수 있고, 이에 따라 본 설명은 그 용어를 제한하는 것으로 의도되지 않는다는 것을 유의한다.
기능 블록: 기능 블록은 집적 회로 소자들, 이산 회로 소자들 등과 같은 하나 이상의 상호 관련된 회로 소자들의 그룹, 집합, 및/또는 세트를 지칭한다. 회로 소자들은 회로 소자들이 적어도 하나의 속성을 공유한다는 점에서 "상호 관련"된다. 예를 들어, 상호 관련된 회로 소자들은 특정 집적 회로 칩 또는 이의 부분에 포함되거나 그 위에 제조되거나 또는 다른 방식으로 커플링될 수 있고, 소정의 기능들(계산 또는 처리 기능들, 메모리 기능들 등)의 수행에 관련될 수 있으며, 공통 제어 소자 및/또는 공통 클록 등에 의해 제어될 수 있다. 기능 블록은 단일 회로 소자(예를 들어, 단일 집적 회로 논리 게이트)에서 수백만 또는 수십억 개의 회로 소자들(예를 들어, 집적 회로 메모리)에 이르기까지 임의의 수의 회로 소자를 포함할 수 있다.
압축된 데이터
설명되는 실시예들에서, 동작들은 압축된 데이터에 대해 그리고 압축된 데이터를 사용하여 수행된다. 일반적으로, 압축된 데이터는 원본 데이터에 대한 하나 이상의 압축, 인코딩, 및/또는 다른 동작들 - 이들은 원본 데이터의 적어도 일부가 원본 데이터를 재현하는 데 사용될 수 있는 데이터에 의해(무손실 압축의 경우), 원본 데이터에 근사하는 데이터에 의해(손실 압축의 경우), 그리고/또는 다른 값들에 의해 대체되게 함 - 의 출력이다. 설명되는 실시예들에서, 사용자 또는 시스템 파일들(예를 들어, 오디오 및/또는 비디오 파일들, 텍스트 파일들, 문서들, 실행 가능한 파일들, 운영 체제 파일들, 스프레드시트들 등), 데이터의 흐름들 또는 시퀀스들(예를 들어, 네트워크 인터페이스를 통해 수신되는 오디오 및/또는 비디오 데이터 흐름들, 데이터의 시퀀스들 등), 센서들(예를 들어, 카메라들 및/혹은 마이크로폰들, 온도계들, 진동 센서들 등)로부터 캡처되는 데이터 등을 포함하는 다양한 유형들의 데이터가 압축될 수 있다. 설명되는 실시예들에서, 데이터를 압축하는 데 프리픽스 코딩 표준들, 딕셔너리 코딩 압축 표준들, 델타 인코딩, 자기 회귀 모델(autoregressive model) 압축 등을 포함하는 다수의 압축, 인코딩, 및/또는 다른 동작 표준들, 알고리즘들, 또는 포맷들, 또는 이의 조합들이 사용될 수 있다.
본원에서 사용되는 용어들 "압축된 데이터" 및 "압축"은 원본 데이터의 적어도 일부가 원본 데이터를 전체적으로 또는 대략적으로 재현하는 데 사용될 수 있는 다른 데이터에 의해 대체되게 하는 원본 데이터에 대한 동작들에 광범위하게 적용된다. 상술한 바와 같이, 이러한 동작들은 다양한 압축, 인코딩, 및/또는 다른 동작 표준들, 알고리즘들, 또는 포맷들, 또는 이의 조합들을 포함한다. 따라서, 이러한 용어들은 딕셔너리 코딩 압축과 같은 동작들 및/또는 때때로 "압축" 동작들로서 간주될 수 있는 다른 동작들로만 제한되는 것으로 해석되지 않아야 한다.
일부 실시예들에서, 데이터를 압축할 때, 전자 디바이스는 데이터의 N개의 개별 스트림들(여기서, N은 1 이상임)을 포함하는 압축된 데이터를 생성한다. 데이터의 N개의 스트림들은 서로 독립적인 압축된 데이터의 블록들 또는 부분들이고, 예를 들어, 압축 해제 동작 동안 디코더에서 디코딩되고, 그 후 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하는 데 사용될 수 있는 유형들의 데이터를 포함한다. 일부 실시예들에서, 각 스트림은 각 스트림이 그 스트림의 데이터 외의 데이터를 참조하지 않고 디코딩될 수 있다는 점에서 완전 독립적이다. 도 1은 일부 실시예들에 따른 데이터의 스트림들을 포함하는 압축된 데이터를 도시하는 블록도를 나타낸다. 도 1에서 알 수 있는 바와 같이, 파일, 데이터의 흐름 또는 시퀀스 등일 수 있거나 이를 포함할 수 있는 압축된 데이터(100)는 데이터의 세 개의 스트림들, 즉 스트림들(102-106) - 도 1에서 각각 상이한 채우기 패턴(즉, 스트림(102)에 대한 대각선 채우기 등)을 사용하여 마킹됨 - 을 포함한다. 데이터의 각 스트림은 각 유형의 데이터의 다수의 바이트들 또는 블록들을 포함한다. 예를 들어, 압축된 데이터(100)가 딕셔너리 코딩 압축 표준을 사용하여 압축되었다고 가정하면, 각 스트림은 리터럴들, 커맨드 태그들, 거리들, 길이들, 및/또는 다른 값들과 같은 압축된 입력 데이터를 압축 해제하기 위해 딕셔너리 코딩 압축 표준과 연관된 커맨드들을 생성하는 데 사용될 딕셔너리 코딩 압축 표준의 요소들을 포함한다. 이러한 예의 경우, 리터럴들은 원본 데이터(즉, 압축되고 있는 데이터)의 특정 바이트 수 내에서 복제된 것으로서 감지되지 않는 스트링들이고, 커맨드 태그들은 (예를 들어, 재현된 원본 데이터에 하나 이상의 리터럴을 추가/첨부하는 등) 압축 해제 동작들을 수행하기 위한 특정 커맨드들을 식별하는 값들이며, 길이들 및 거리들은 원본 데이터로 재현되기 위해 추가/첨부될 복제된 스트링들을 나타내는 데 사용된다. 예를 들어, 스트림(102)은 리터럴들을 포함할 수 있고(그리고 가능하게는 단지 리터럴들만을 포함할 수 있음), 스트림(104)은 커맨드 태그들을 포함할 수 있으며(그리고 가능한 단지 커맨드 태그들만을 포함할 수 있음), 스트림(106)은 거리들 또는 길이들을 포함할 수 있다(그리고 가능한 단지 거리들 또는 길이들만을 포함할 수 있음).
일부 실시예들에서, 도 1에서의 데이터의 각 스트림은 헤더, 즉, 헤더(HD)(108, 112, 및 116)로 각각 시작되며, 이는 콘텐츠, 포맷팅, 소스 전자 디바이스, 라우팅 값들, 및/또는 스트림의 길이 등을 설명하는 정보를 포함한다. 일부 실시예들에서, 데이터의 각 스트림은 메타데이터, 즉 메타데이터(MD)(110, 114, 및 118)를 각각 포함하며, 이는 압축된 데이터로부터 각 스트림을 디코딩하기 위한 디코딩 레퍼런스, 압축된 데이터로부터의 스트림에 대한 정보 등과 같은 정보이거나 이를 포함한다. 각 스트림에 대한 헤더 및 메타데이터 다음에는 스트림의 바디가 뒤따르며, 이는 각 유형의 압축된 데이터를 포함한다. 스트림(102, 104, 및 106) 각각은 압축된 데이터에서의 소정의 위치에서, 예를 들어, 소정의 바이트, 프레임, 또는 블록에서 시작하고, 스트림(102) 외에는, 선행 스트림에 뒤따른다. 예를 들어, 스트림(102)에 대한 헤더(108)는 압축된 데이터의 바이트 0에(예를 들어, 메모리 내의 시작 어드레스, 데이터의 전체 흐름 또는 시퀀스에서의 제1 위치 등에) 위치될 수 있고, 헤더(108), 메타데이터(110), 및 스트림(102)의 조합은 50 kB 길이일 수 있으며, 이에 따라 스트림(104)에 대한 헤드(112)는 50 kB에 위치될 수 있는 등이다. 도 1에서의 스트림들은 도 1에서 라인들에 걸쳐 있으며, 이에 따라 스트림(102)은 압축된 데이터(100)의 제1 라인에서의 일부분 및 압축된 데이터(100)의 제2 라인에서의 일부분을 포함한다; 이는 단순히 예시를 위한 것이다. 상술한 바와 같이, 스트림들은 파일, 네트워크 인터페이스를 통해 수신되는 데이터의 흐름 또는 시퀀스 등으로부터 리트리빙(retrieving)되는 바이트들 또는 블록들과 같은 데이터의 시퀀스들이다.
일부 실시예들에서, 전자 디바이스는 먼저 압축 표준을 사용하여 원본 데이터를 압축함으로써, 원본 데이터로부터 압축된 데이터(예를 들어, 압축된 데이터(100))를 생성한다. 예를 들어, 일부 실시예들에서, 전자 디바이스는 압축된 데이터를 생성하기 위해 원본 데이터를 압축하는 데 LZ77- 또는 LZ78-기반 압축 표준과 같은 딕셔너리 코딩 압축 표준을 사용한다. 압축 동작 동안 또는 이에 후속하여, 전자 디바이스는 압축된 데이터를 N개의 스트림들(예를 들어, 스트림들(102-106)) - N개의 스트림들 각각은 헤더 그리고 가능하게는 메타데이터와 함께, 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 데이터를 포함함 - 로 분리한다. 예를 들어, 일부 실시예들에서, 상술한 LZ77- 또는 LZ78-기반 압축 표준들에 대해, 데이터의 유형들은 리터럴들, 커맨드 태그들, 거리들, 및 길이들 중 일부 또는 전부를 포함하고, 이에 따라 각 스트림들은 - 그리고 가능하게는 단지 - 리터럴들, 커맨드 태그들, 거리들, 및 길이들을 포함할 수 있다. 다음으로, 전자 디바이스는 각 스트림을 추가로 압축하기 위해 인코딩 표준을 사용하여 N개의 스트림들 각각을 인코딩한다. 예를 들어, 일부 실시예들에서, 전자 디바이스는 스트림들을 인코딩하기 위해 허프만 코딩과 같은 프리픽스 코딩 표준을 사용한다.
압축 및 인코딩의 특정 시퀀스가 압축된 데이터를 생성하는 데 사용되는 것으로서 설명되고 압축된 데이터의 특정 인스턴스가 도 1에 도시되지만, 설명되는 실시예들은 압축된 데이터의 시퀀스 및/또는 인스턴스에 제한되지 않는다. 일반적으로, 압축된 데이터가 본원에서 설명되는 바와 같이 압축 해제 엔진에서 압축 해제될 수 있는 한, 원본 데이터로부터 압축된 데이터의 임의의 버전을 생성하는 데 압축 및/또는 인코딩의 임의의 조합이 사용될 수 있다.
개관
설명되는 실시예들에서, 전자 디바이스는 데이터의 N개의 스트림들을 포함하는 압축된 데이터를 압축 해제하기 위한 동작들을 수행한다. 전자 디바이스는 N개의 디코더들 및 압축 해제기를 갖는 하드웨어 압축 해제 엔진을 포함한다. 다시 말해서, 기능 블록 자체인 압축 해제 엔진이 N개의 디코더들 및 압축 해제기를 위한 기능 블록들을 포함한다. 하드웨어 압축 해제 엔진의 N개의 디코더들 및 압축 해제기는 데이터의 N개의 스트림들을 포함하는 압축된 데이터를 압축 해제하는 데 사용된다.
일부 실시예들에서, 데이터의 N개의 스트림들을 포함하는 압축된 데이터를 압축 해제할 때, 압축 해제 엔진은 먼저 커맨드 또는 요청을 수신한다. 커맨드 또는 요청은 압축된 데이터를 식별하고(예를 들어, 압축된 데이터의 메모리에서의 시작 어드레스, 압축된 데이터의 흐름 또는 시퀀스가 획득될 수 있는 위치 등을 식별함), 압축된 데이터를 압축 해제를 요청한다. 커맨드 또는 요청은 또한, 압축된 데이터를 압축 해제할 때 압축 해제 엔진에 의해 사용되는 데이터를 압축하는 데 사용되는 구성들 및 설정들을 식별할 수 있다. 커맨드 또는 요청은 나아가, 압축된 데이터를 압축 해제할 때 압축 해제 엔진에 의해 사용되는 초기 압축 해제 데이터 또는 다른 값들과 같은 특정 값들을 포함하거나 식별할 수 있다.
커맨드 또는 요청을 수신시, 압축 해제 엔진은 N개의 디코더들 각각이 코딩 표준(예를 들어, 프리픽스 코딩 표준 및/또는 또 다른 코딩 표준)을 사용하여 실질적으로 병행하여 데이터의 N개의 스트림들 각각을 개별적으로 디코딩하게 한다. 디코딩 동작을 위해, 압축 해제 엔진은 제1 스트림의 위치를 N개의 디코더들 중 제1 디코더(즉, N개의 인코더들 중의, 제1 스트림을 디코딩하기 위해 선택된 디코더)에서의 스트림 헤더 디코더에 전달한다. 스트림 헤더 디코더는 제1 스트림에서의 헤더를 디코딩하고, 제1 스트림의 길이를 결정하고, 그 길이를 다시 압축 해제 엔진으로 전달하며, N개의 디코더들 중 제1 디코더는 제1 스트림을 디코딩하는 것을 진행한다. 압축 해제 엔진은 그 길이를 사용하여 제2 스트림의 압축된 데이터에서의 시작 위치를 결정하고, 제2 스트림의 위치를 N개의 디코더들 중 제2 디코더에서의 스트림 헤더 디코더에 전달하며, 이는 제1 디코더에서의 스트림 헤더 디코더와 마찬가지로 진행한다. 압축 해제 엔진은 이러한 방식으로 나머지 디코더들에 대해 진행하여, 각 스트림의 시작 위치를 결정하고 디코더들 각각에 대한 디코딩을 시작한다. 이에 따라, 본원에서 사용될 때, "실질적으로 병행"은 N개의 디코더들 각각에서 디코딩을 시작하기 위한 오버헤드만큼 오프셋되는 것 등과 같이, 거의 동시에 N개 디코더들이 각 스트림들을 디코딩하는 것을 의미한다. 일부 실시예들에서, 상술한 스트림마다의 헤더 예와 달리, N개의 스트림들 중 제1 스트림의 헤더(또는 일반적으로 압축된 데이터의 헤더)는 모든 N개의 스트림들에 대한 길이 및/또는 시작 위치 정보를 포함한다는 점에 유의한다. 이러한 실시예들에서, 압축 해제 엔진은 제1 스트림의 헤더(또는 압축된 데이터의 헤더)로부터 모든 스트림들에 대한 길이들 및/또는 시작 위치 정보를 획득하고, 제1 스트림의 헤더(또는 압축된 데이터 헤더)로부터 획득되는 각 길이 및/또는 시작 위치 정보를 사용하여 거의 동시에 모든 나머지 디코더들(또는 모든 디코더들)을 시작할 수 있다.
데이터의 N개의 스트림들 각각은 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 데이터를 포함하고, N개의 디코더들 각각으로부터의 출력은 각 유형의 디코딩된 데이터의 스트림이라는 점을 상기한다. 예를 들어, 데이터를 압축하는 데 사용되는 압축 표준이 딕셔너리 코딩 압축 표준인 실시예에서, 데이터의 유형들은 리터럴들, 커맨드 태그들, 거리들, 길이들, 및/또는 다른 유형들의 데이터를 포함할 수 있다. 이러한 예의 경우, 일부 실시예들에서, N개의 스트림들 중 하나 이상은 리터럴들을 포함하며, N개 스트림들 중 하나 이상은 커맨드 태그들을 포함하는 등이다. 일부 실시예들에서, 스트림들은 - 데이터의 유형들의 혼합이 아니라 - 단지 데이터의 하나의 특정 유형만을 포함한다.
일부 실시예들에서, 디코더들 중 적어도 하나는 해당 디코더에 의해 디코딩 동작에 사용되는 디코딩 레퍼런스(예를 들어, 하나 이상의 테이블, 리스트, 및/또는 다른 레코드)를 발생, 생성, 및/또는 초기화한다. 예를 들어, 일부 실시예들에서, 소정의 디코더는 그 소정의 디코더에 의해 디코딩될 스트림에서의 특정 위치로부터(예를 들어, 스트림에서 스트림의 헤더 바로 다음의 메타데이터 바이트들 등으로부터), 디코딩 레퍼런스를 생성하기 위한 정보를 획득한다. 예를 들어, 소정의 디코더가 스트림을 디코딩하는 데 허프만 코딩을 사용하는 실시예에서, 그 소정의 디코더는 디코딩 동작에 사용될 허프만 코드들과 심볼들(예를 들어, 비트들 또는 바이트들의 패턴들) 간의 매핑을 포함하는 디코딩 테이블에서 초기화/채우기를 위한 정보를 획득할 수 있다.
일부 실시예들에서, 디코더들 중 일부 또는 전부는 서브스트림 디코더들을 포함한다. 디코더에서의 서브스트림 디코더들 각각은 디코딩되는 스트림으로부터 데이터의 개별 부분들을 디코딩하기 위해 디코더에 의해 사용될 수 있는 상이한 디코딩 기능 블록이다. 예를 들어, 디코더가 M개의 서브스트림 디코더를 갖는 실시예에서, M개의 서브스트림 디코더들 각각은 라운드-로빈 방식으로 스트림으로부터 데이터, 심볼 등의 각 다음 청크를 획득하고, 그 데이터, 심볼 등의 청크를 디코딩한다. 이러한 실시예들 중 일부에서, M개의 서브스트림 디코더들 각각은 실질적으로 병행하여 데이터, 인코딩된 심볼 등의 다음 청크를 디코딩한다. 예를 들어, 일부 실시예들에서, 제어 클록, 시구간 등의 소정의 사이클에서, M개의 서브스트림 디코더들 각각은 적어도 하나의 청크의 데이터, 심볼 등을 디코딩하여, M개의 서브스트림 디코더들 모두가 제어 클록의 각 사이클마다 하나 이상의 디코딩된 심볼 또는 디코딩된 다른 데이터 피스들을 생성한다. 일부 실시예들에서, 스트림 컴바이너(stream combiner)는 압축 해제기로 포워딩하기 위해 서브스트림 디코더들로부터의 출력을 조합한다.
N개의 스트림들 각각에 대한 데이터를 디코딩한 후, N개의 디코더들은 각 유형들의 데이터의 디코딩된 데이터의 스트림들을 압축 해제 엔진의 압축 해제기로 포워딩한다. N개의 디코더들에 의해 출력되는 디코딩된 데이터의 스트림들로부터, 압축 해제기는 원본 데이터를 재현하기 위해 압축 표준을 사용하여 데이터를 압축 해제하기 위한 커맨드들을 생성한다. 이 동작을 위해, 압축 해제기는 각 커맨드를 생성하기 위해 스트림들의 일부 또는 전부로부터 데이터를 획득하고, 그 후 데이터로부터 커맨드를 생성한다. 상기한 예를 계속하면, 일부 실시예들에서, 각 커맨드에 대해, 압축 해제기는 각 스트림으로부터 다음 리터럴, 커맨드 태그, 거리, 길이, 및/또는 다른 유형의 데이터의 일부 또는 전부를 획득하고, 이로부터 커맨드를 어셈블한다. 이 동작의 종료시, 압축 해제기는 실행될 때, 압축 해제기가 원본 데이터를 재현하기 위해 데이터의 다음 블록(예를 들어, 데이터의 P 바이트 블록)을 획득 및/또는 생성하게 할 단일 커맨드를 갖는다.
일부 실시예들에서, 압축 해제기는 두 개 이상의 커맨드들의 그룹들을 집합 커맨드들로 조합하기 위한 동작들을 수행하는 동작 컴바이너를 포함한다. 이러한 실시예들에서, 커맨드들이 압축 해제기에서 생성됨에 따라, 두 개 이상의 커맨드들이 버퍼링되고(즉, 임시 저장됨), 그 후 두 개 이상의 커맨드들을 집합 커맨드로 조합하려는 시도가 이루어진다. 예를 들어, 인접한 메모리 위치들, 동일한 캐시 라인들 등에 액세스하는 커맨드들이 집합 커맨드로 조합될 수 있다. 커맨드들을 조합함으로써, 커맨드들을 실행하기 위한 그리고 실행하는 것과 연관된 동작들(예를 들어, 메모리 액세스들 등)이 보다 효율적으로 수행될 수 있다.
다음으로, 압축 해제기는 원본 데이터를 재현하기 위해 커맨드들을 실행한다. 이 동작을 위해, 압축 해제기 내의 실행 기능 블록이 커맨드들을 실행하며, 이는 실행 기능 블록이 원본 데이터를 재현하기 위해 데이터의 다음 블록을 생성 및/또는 획득하게 한다. 예를 들어, 그리고 상기한 내용으로부터 딕셔너리 코딩 압축 표준 예를 계속하면, 커맨드는 실행 기능 블록이 하나 이상의 다음 리터럴을 획득하고, 다음 리터럴을 재현된 원본 데이터에(즉, 압축 해제기에 의해 생성된 출력 파일 또는 스트림에) 추가/첨부하게 할 수 있다. 또 다른 예로서, 그리고 다시 딕셔너리 코딩 압축 표준 예를 계속하면, 커맨드는 실행 기능 블록이 이미 재현된 원본 데이터에서의 식별된 위치로부터(즉, 실행 기능 블록에 의해 이전에 출력되었던 데이터로부터) 특정 길이를 갖는 이전 값을 판독하고 원본 데이터의 재현을 위해 그 이전 값을 추가/첨부하게 할 수 있다.
일부 실시예들에서, 압축 해제기는 커맨드들이 실행 기능 블록에서 실행되기 전에 메모리로부터 커맨드들을 실행하기 위한 데이터를 페치(fetch)하는 판독 관리자 기능 블록을 포함한다. 이러한 실시예들 중 일부에서, 커맨드들은 메모리로부터 데이터의 반환을 기다리도록 버퍼링되고, 데이터가 반환될 때 실행된다. 일부 실시예들에서, 압축 해제기는 이력 버퍼를 포함하며, 이는 특정 수의 리터럴 및/또는 이전 값이 저장되고 종속하는 후속 커맨드들로 피드백되는 선입선출(first-in-first-out, FIFO) 버퍼이다. 이러한 실시예들에서, 리터럴들 및/또는 이전 값들은 종내 FIFO 버퍼로부터 판독되고, 원본 데이터의 재현을 위해 첨부되는데, 즉, 메모리에 압축 해제된 데이터로서 저장되고, 압축 해제된 데이터의 흐름 또는 시퀀스로서 출력되는 등이다.
데이터의 N개의 스트림들을 포함하는 압축된 데이터를 압축 해제하기 위해 N개의 디코더들 및 압축 해제기를 갖는 하드웨어 압축 해제 엔진을 사용함으로써, 설명되는 실시예들은 하드웨어에서 기존의 디바이스들이 소프트웨어를 사용하여 수행하는 동작들을 수행한다. 하드웨어 압축 해제 엔진은 동일한 동작들을 수행하는 데 소프트웨어 엔티티를 사용하는 것보다 (예를 들어, 더 적은 메모리 액세스를 필요로 하고, 더 적은 전력을 사용하는 등) 빠르고 효율적이다. 또한, 압축 해제 엔진을 사용하면 전자 디바이스 내의 다른 기능 블록들(예를 들어, 처리 서브시스템들 등)을 해제하여 다른 동작들을 수행할 수 있다. 이에 따라, 압축 해제 엔진은 전자 디바이스의 전체 성능을 향상시키며, 이는 결과적으로 사용자 만족을 향상시킨다.
전자 디바이스
도 2는 일부 실시 예들에 따른 전자 디바이스(200)를 도시한 블록도를 나타낸다. 도 2에 도시된 바와 같이, 전자 디바이스(200)는 프로세서(202) 및 메모리(204)를 포함한다. 프로세서(202)는 전자 디바이스(200)에서 계산, 압축 해제, 및 다른 동작들을 수행하는 기능 블록이다. 프로세서(202)는 처리 서브시스템(206) 및 압축 해제 서브시스템(208)을 포함한다. 처리 서브시스템(206)은 범용 컴퓨터 조작, 압축 해제, 및 다른 동작들을 수행하는 중앙 처리 장치(CPU) 코어들, 그래픽 처리 유닛(GPU) 코어들, 임베디드 프로세서들, 및/또는 주문형 집적 회로(ASIC)들과 같은 하나 이상의 기능 블록을 포함한다.
압축 해제 서브시스템(208)은 데이터의 개별 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 동작들을 수행하는 기능 블록이다. 일반적으로, 압축 해제 서브시스템(208)은 파일, 데이터의 흐름 또는 시퀀스 등과 같은 특정 압축된 입력 데이터를 압축 해제하기 위한 커맨드 또는 요청을 입력으로서 취하고, 압축된 입력 데이터가 생성되었던 원본 데이터를 전체적으로 또는 대략적으로 재현하는 압축되지 않은 데이터를 반환한다. 압축 해제 서브시스템(208)은 아래에서 더 상세히 설명된다.
메모리(204)는 전자 디바이스(200)에서 메모리(예를 들어, 메인 메모리)의 동작들을 수행하는 기능 블록이다. 메모리(204)는 전자 디바이스(200) 내의 기능 블록들에 의해 사용하기 위한 데이터 및 커맨드들을 저장하기 위한 메모리 회로들(즉, 저장 소자들, 액세스 소자들 등), 뿐만 아니라 메모리 회로들 내의 데이터 및 명령어들의 액세스(예를 들어, 판독, 기입, 검사, 삭제, 무효화 등)를 핸들링하기 위한 제어 회로들을 포함한다. 메모리(204)에서의 메모리 회로들은 4세대 더블 데이터 레이트 동기식 동적 랜덤 액세스 메모리(DDR4 SDRAM), 정적 랜덤 액세스 메모리(SRAM), 또는 이들의 조합과 같은 컴퓨터 판독 가능 메모리 회로들을 포함한다.
전자 디바이스(200)는 특정 수 및 배열들의 소자들(예를 들어, 프로세서(202), 메모리(204) 등과 같은 기능 블록들 및 디바이스들)을 사용하는 것으로 제시된다. 그러나, 전자 디바이스(200)는 예시를 위해 단순화된다. 일부 실시예들에서, 전자 디바이스(200)에 상이한 수 또는 배열의 소자들이 존재한다. 예를 들어, 전자 디바이스(200)는 파워 서브시스템들, 디스플레이들 등을 포함할 수 있다. 일반적으로 전자 디바이스(200)는 본원에서 설명되는 동작들을 수행하기에 충분한 요소들을 포함한다.
도 2에서 압축 해제 서브시스템(208)은 프로세서(202)에 포함되는 것으로서 도시되어 있지만, 일부 실시예들에서, 압축 해제 서브시스템(208)은 개별 및/또는 독립형 기능 블록이다. 예를 들어, 압축 해제 서브시스템(208)은 (그 자체로 또는 지원 회로 소자들 및 기능 블록들과 함께) 독립형 집적 회로 칩 등 상에 구현될 수 있다. 일반적으로, 설명되는 실시예들에서, 압축 해제 서브시스템(208)은 본원에서 설명되는 동작들을 수행하는 것을 가능하게 하기에 적절하게 전자 디바이스(200)에 위치된다.
전자 디바이스(200)는 데이터 압축 해제 또는 다른 동작들을 수행하는 임의의 전자 디바이스일 수 있거나, 또는 이에 포함될 수 있다. 예를 들어, 전자 디바이스(200)는 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 웨어러블 전자 디바이스들, 태블릿 컴퓨터들, 스마트 폰들, 서버들, 인공 지능 장치들, 가상 또는 증강 현실 장비, 네트워크 기기들, 토이들, 청각-시각 장비, 가전 기기들, 제어기들, 차량들 등, 및/또는 이들의 조합들과 같은 전자 디바이스들일 수 있거나, 또는 이들에 포함될 수 있다.
압축 해제 엔진
설명되는 실시예들에서, 전자 디바이스 내의 압축 해제 서브시스템은 압축된 입력 데이터를 압축 해제하기 위한 동작들을 수행한다. 도 3은 일부 실시예들에 따른 압축 해제 서브시스템(208)을 도시한 블록도를 나타낸다. 도 3에서 알 수 있는 바와 같이, 압축 해제 서브시스템(208)은 압축 해제 엔진(300) 및 메모리 인터페이스(302)를 포함한다. 압축 해제 엔진(300)은 압축된 입력 데이터를 압축 해제하기 위한 동작들 및 이와 연관된 동작들을 수행하는 기능 블록이다. 압축 해제 엔진(300)은 인코딩된 데이터를 디코딩하고 압축된 데이터를 압축 해제하기 위한 동작들 및 이와 연관된 동작들의 각 부분을 각각 수행하는 기능 블록들인 디코더 서브시스템(304) 및 압축 해제 서브시스템(306)을 포함한다. 디코더 서브시스템(304) 및 압축 해제기 서브시스템(306)은 아래에서 더 상세히 설명된다.
메모리 인터페이스(302)는 압축 해제 엔진(300)에 의한 메모리 액세스(예를 들어, 메모리 판독, 기입, 무효화, 삭제 등)를 위한 동작들 및 이와 연관된 동작들을 수행하는 기능 블록이다. 예를 들어, 일부 실시예들에서, 압축된 입력 데이터로부터 재현되는 원본 데이터는 메모리 인터페이스(302)를 통해 메모리(예를 들어, 메모리(204))에 저장된다. 또 다른 예로서, 일부 실시예들에서, 압축된 입력 데이터는 압축된 입력 데이터를 압축 해제하기 위한 준비로 메모리 인터페이스(302)를 통해 메모리로부터 리트리빙되거나 획득된다. 도 3에 메모리 인터페이스(302)가 도시되어 있지만, 일부 실시예들에서, 압축 해제 서브시스템(208)은 네트워크 인터페이스, IO 디바이스 인터페이스, 프로세서간 통신 인터페이스 등과 같은 하나 이상의 추가적인 또는 상이한 인터페이스를 포함하고 사용한다. 일반적으로, 설명되는 실시예들에서, 압축 해제 서브시스템(208)은 압축된 입력 데이터를 리트리빙하기 위한, 재현된 원본 데이터를 기입하기 위한, 그리고/또는 압축 해제 서브시스템(208)이 위치되는 전자 디바이스(예를 들어, 전자 디바이스(200)) 내의 다른 기능 블록들과 통신 정보(예를 들어, 커맨드들 등)를 교환하기 위한 하나 이상의 기능 블록 또는 디바이스를 포함한다.
도 3 내지 도 5에서의 예들에 대한 하기 논의를 위해, 압축된 입력 데이터가 압축 해제를 위해 메모리(예를 들어, 메모리(204))로부터 획득되고 압축된 입력 데이터로부터 재현된 원본 데이터가 메모리(204)에 저장된다는 점에 유의한다. 이는 요건은 아니다. 일부 실시예들에서, 압축된 데이터는 다른 소스들로부터 획득되고/거나, 전자 디바이스(200) 내의 그리고 (예를 들어, 네트워크 인터페이스, IO 디바이스 등을 통해) 전자 디바이스(200)를 너머 다른 목적지들 내에 저장되거나 다른 목적지들에 제공된다. 또한, 도 3 내지 도 5에서의 예들에 대해, 원본 데이터는 압축된 입력 데이터를 생성하기 위해 상술한 바와 같이 처리되었고, 즉, 먼저 딕셔너리 코딩 압축 표준(예를 들어, LZ77- 또는 LZ78-기반 표준)을 사용하여 압축되었고, 그 후 딕셔너리 코딩 압축 표준에 대한 데이터 유형(예를 들어, 리터럴들, 커맨드 태그들, 거리들, 길이들 등)에 의해 N개의 스트림들로 분리되었으며, 마지막으로 개별 스트림들이 프리픽스 코딩 표준(예를 들어, 허프만 코딩)을 사용하여 개별적으로 인코딩되었다고 가정한다. 이는 또한 요건이 아니다. 일부 실시예들에서, 상이한 압축, 인코딩, 및/또는 다른 동작 표준들, 알고리즘들, 또는 포맷들, 또는 이의 조합들이 압축된 입력 데이터를 생성하기 위해 사용될 수 있고, 도 3 내지 도 5에 대해 설명되는 것들과 유사한 동작들을 사용하여 압축 해제 및/또는 다른 방식으로 역전 된다.
도 4는 일부 실시예들에 따른 디코더 서브시스템(304)을 도시한 블록도를 나타낸다. 디코더 서브시스템(304)은 다수의 개별 디코더들(400-404)을 포함한다. 디코더들(400-404) 각각은 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하기 위한 소정의 유형의 데이터(예를 들어, 리터럴들, 커맨드 태그들, 거리들 등)를 디코딩하기 위한 동작들을 수행한다. 일부 실시예들에서, 각 디코더(400-404)는 이를테면, 소정의 유형의 데이터를 디코딩하기 위해 설계된 디코더에 회로 소자들을 포함함으로써, 소정의 유형의 데이터를 디코딩하는 것에 전용된다. 일부 실시예들에서, 디코더들(402-404) 각각은 디코더(400)에 도시된 것들과 유사한 내부 요소들(명료성을 위해 도시되지 않음)을 포함하지만, 이것이 요건은 아니다. 일반적으로, 각 디코더는 하나 이상의 유형의 데이터를 디코딩하기에 충분한 내부 요소들을 포함한다.
도 4에서 알 수 있는 바와 같이, 디코더(400)는 메모리로부터 압축된 입력 데이터(432)를 획득하고 압축된 입력 데이터(432)의 부분들을 서브스트림 디코더들(408-412)로 보내는 것과 연관된 동작들을 수행하는 기능 블록인 판독 관리자(406)를 포함한다. 서브스트림 디코더들(408-412)은 각각 디코더(400)에서 디코딩되는 스트림들의 각 부분들을 디코딩 및 다른 방식으로 처리하는 기능 블록이다. 디코더(400)는 스트림 헤더 디코더(SHD)(414)를 더 포함하며, 이는 디코더(400)에서 디코딩되는 스트림들의 헤더들로부터 정보를 처리하기 위한 동작들을 수행하는 기능 블록이다. 디코더(400)는 버퍼들(416-420)을 더 포함하며, 이들은 디코더(400)에서 디코딩되는 스트림들의 부분들을 버퍼링하고(즉, 임시 저장함), 스트림들의 부분들을 대응하는 서브스트림 디코더에 제공하기 위한(예를 들어, 버퍼(416)는 스트림들의 부분들을 서브스트림 디코더(408)에 제공하는 등임) 동작들을 수행하는 기능 블록들이다. 디코더(400)는 스트림 컴바이너(422)를 더 포함하며, 이는 서브스트림 디코더들(408-412)로부터 출력되는 디코딩된 개별 데이터 부분들을, 디코더(400)로부터 압축 해제기 서브시스템(306)으로 출력될 디코딩된 데이터의 단일 스트림으로 조합하기 위한 동작들을 수행하는 기능 블록이다. 디코더(400)는 디코딩 레퍼런스 구축기(DRB)(424)를 더 포함하며, 이는 디코딩 레퍼런스(DREF)( 426)를 초기화 및 채우기 위한 동작들을 수행하는 기능 블록이며, 이로부터 정보가 획득되고 서브스트림 디코더들(408-412)에 의해 스트림들의 부분들을 디코딩하는 데 사용된다.
디코더 서브시스템(304)의 동작 동안, 커맨드 헤더 디코더(CHD)(428)는 압축된 입력 데이터(432)를 식별하고 이의 압축 해제를 요청하는 커맨드(430)(이는 메시지, 패킷, 요청, 및/또는 다른 형태의 통신 정보일 수 있거나 이에 포함될 수 있음)를 수신한다. 예를 들어, 일부 실시예들에서, 커맨드(430)는 압축된 입력 데이터(432)가 저장된 메모리에서의 절대 또는 상대 어드레스, 위치, 및/또는 레퍼런스를 통해 압축된 입력 데이터(432)를 식별한다. 일부 실시예들에서, 커맨드(430)는 또한, 압축된 입력 데이터(432)를 압축하는 데 사용되는 구성들 및 설정들을 식별하는 정보를 포함하며, 그 정보는 압축된 입력 데이터(432)를 디코딩 및/또는 압축 해제하기 위해 디코더 서브시스템(304) 및/또는 압축 해제기 서브시스템(306)에 의해 사용될 구성들 및 설정들을 식별한다. 예를 들어, 일부 실시예들에서, 압축된 입력 데이터(432)를 압축할 때 구성 가능한 또는 선택 가능한 인코딩 및/또는 압축 옵션들이 사용되었을 때, 커맨드(430)는 옵션들이 어떻게 구성 또는 선택되었는지에 대한 표시들을 (예를 들어, 특정 비트들 등에) 포함할 수 있다. 일부 실시예들에서, 커맨드(430)는 또한, 압축된 입력 데이터(432)를 디코딩 및/또는 압축 해제하기 위해 디코더 서브시스템(304) 및/또는 압축 해제기 서브시스템(306)에 의해 사용될 정보를 포함하거나 식별한다. 예를 들어, 일부 실시예들에서, 커맨드(430)는 압축 해제기 서브시스템(306)에서 압축 해제 레퍼런스를 초기화하기 위해 사용되는 딕셔너리 코드 매핑, 이를테면 테이블 등을 (예를 들어, 패킷 또는 메시지에) 포함한다. 일부 실시예들에서, 커맨드 헤더 디코더(428)는 커맨드(430)로부터의 또는 이와 연관된 정보(예를 들어, 딕셔너리 코드 매핑 등)를 압축 해제기 서브시스템(306)에 전달한다.
커맨드(430)를 수신시, 일부 실시예들에서, 커맨드 헤더 디코더(428)는 압축된 입력 데이터(432)로부터의 스트림을 디코딩시 시작될 제1/초기 디코더인 디코더(400) 내의 판독 관리자(MGR)(406)에, 압축된 입력 데이터(432)에서의 N개의 스트림들 중의 제1 스트림(예를 들어, 압축된 데이터(100)에서의 스트림(102))이 시작되는 메모리에서의 어드레스 또는 위치를 전달한다. 메모리에서의 어드레스 또는 위치를 사용하여, 판독 관리자(406)는 메모리로부터 압축된 입력 데이터(432)에서의 제1 스트림을 페치하기 시작한다. 제1 스트림이 메모리로부터 반환되기 시작할 때, 판독 관리자(406)는 초기 부분을 버퍼(416)에 포워딩한다(즉, 제1 스트림으로부터의 특정 수의 바이트들을 버퍼(416) 내의 메모리 소자들에 저장한다). 스트림 헤더 디코더(414)는 버퍼(416)로부터 제1 스트림의 초기 부분의 적어도 일부를 획득하고, 초기 부분에 포함되는 제1 스트림에 대한 헤더(예를 들어, 스트림(102)으로부터의 헤더(108))로부터의 정보를 처리한다. 제1 스트림의 헤더로부터의 정보 중에는 제1 스트림의 길이가 있으며, 스트림 헤더 디코더(406)는 이를 획득하고 커맨드 헤더 디코더(428)로 송신한다. 커맨드 헤더 디코더(428)는 제1 스트림의 길이에 기초하여, 압축된 입력 데이터(432)에서의 N개의 스트림들 중의 제2 스트림(예를 들어, 스트림(104))에 대한 메모리에서의 어드레스 또는 위치를 계산 또는 결정하고, 압축된 입력 데이터(432)로부터의 스트림을 디코딩시 시작될 제2 디코더인 디코더(402) 내의 판독 관리자에, 압축된 입력 데이터에서의 제2 스트림이 시작되는 메모리에서의 어드레스 또는 위치를 전달한다. 그 후, 디코더(402)는 디코더(400)에 의해 수행되는 것들과 유사한 동작들을 사용하여 제2 스트림의 디코딩을 시작한다. 이러한 방식으로, 커맨드 헤더 디코더(404)는 캐스케이딩(cascading) 또는 데이지-체인(daisy-chained) 방식으로 디코더들(400-404)을 시작하며, 제1 디코더 이후의 각 디코더는 이전 디코더로부터 커맨드 헤더 디코더(428)에 의해 획득되는 정보에 기초하여 시작된다. 일부 실시예들에서, 디코더들(400-404)은 N개의 스트림들 각 길이들이 결정되는 동안 디코더들(400-404) 각각의 시작 시간들에서의 오프셋으로 인해, 완전히 병행하여 디코딩하지는 않지만, 각 스트림을 "실질적으로 병행하여" 디코딩한다.
일부 실시예들에서, 각 스트림의 헤더가 압축된 데이터에서의 다음 스트림의 시작 위치를 결정하기 위해 사용되는 길이 정보를 포함하는 상기한 예와 달리, N개의 스트림들 중 제1 스트림의 헤더(또는 일반적으로 압축된 데이터의 헤더)는 모든 N개의 스트림들에 대한 길이 및/또는 시작 위치 정보를 포함한다. 이러한 실시예들에서, 커맨드 헤더 디코더(428)는 제1 스트림의 헤더(또는 일반적으로 압축된 데이터의 헤더)로부터 모든 스트림들에 대한 길이들 및/또는 시작 위치 정보를 획득하고, 제1 스트림의 헤더(또는 압축된 데이터 헤더)로부터 획득되는 각 길이 및/또는 시작 위치 정보를 사용하여 거의 동시에 모든 나머지 디코더들(즉, 디코더들(402-404))을 시작(또는 모든 디코더들을 시작)할 수 있다.
일부 실시예들에서, 스트림 헤더 디코더(414)는 또한, 제1 스트림의 초기 부분(예를 들어, 헤더(108) 및/또는 메타데이터(110)) 내의 스트림 헤더 정보 및/또는 메타데이터로부터, 제1 스트림을 인코딩하고/거나 압축하기 위해 사용되는 구성들 및/또는 설정들에 대한 정보를 획득한다. 예를 들어, 일부 실시예들에서, 스트림 헤더 디코더(414)는 제1 스트림 내의 데이터의 포맷 또는 배열(압축된 입력 데이터(432)에서의 다른 스트림들 내의 데이터와 동일한 포맷 또는 배열이 아닐 수 있음 )에 대한 정보를 획득한다. 그 후, 스트림 헤더 디코더(414)는 구성들 및/또는 설정들에 대한 정보를, 압축 해제기 서브시스템(306)에 이 내부에서의 사용을 위해(즉, 압축 해제기 서브시스템(306)이 제1 스트림으로부터 데이터를 처리할 때 구성들 및/또는 설정들을 고려할 수 있도록) 전달한다.
일부 실시예들에서, 디코더(400) 내의 디코딩 레퍼런스 구축기(424)는 또한, 버퍼(416)로부터 제1 스트림의 초기 부분의 적어도 일부를 획득하고, 디코딩 레퍼런스(426) 내의 초기화 및 채우기 위한 정보를 획득하도록 초기 부분에 포함된 제1 스트림에 대한 메타데이터(예를 들어, 메타데이터(110))를 처리한다. 예를 들어, 일부 실시예들에서, 제1 스트림의 제1 부분 내의 메타데이터는 서브스트림 디코더들(408-412) 각각에서 스트림들을 디코딩하는 데 사용될 코드들과 심볼들(예를 들어, 비트들 또는 바이트들의 패턴들) 간의 매핑을 포함한다.
제1 스트림의 초기 부분을 버퍼(416)로 포워딩하는 것과 함께, 판독 관리자(406)는 제1 스트림의 각 부분들을 버퍼들(418 및 420)로 포워딩한다. 버퍼들(416-420)로부터, 데이터의 각 블록들 또는 부분들(예를 들어, 클록 사이클마다 데이터의 32 비트 블록들 등)이 각 대응하는 서브스트림 디코더(408-412)로 공급된다. 서브스트림 디코더들(408-412) 각각은 디코딩 레퍼런스(426)로부터의 정보를 사용하여, 대응하는 디코딩 기법들을 사용하여 수신된 데이터의 블록들 또는 부분들을 디코딩하여 하나 이상의 심볼을 생성한다. 일부 실시예들에서, 서브스트림 디코더들(408-412)은 데이터의 각 블록들 또는 부분들을 디코딩할 때 실질적으로 병행하여 동작한다. 예를 들어, 일부 실시예들에서, 각 서브스트림 디코더는 제어 클록의 매 사이클마다 데이터의 각 블록 또는 부분을 디코딩하고, 이에 따라 제어 클록의 각 사이클마다 적어도 하나의 디코딩된 심볼(즉, 디코딩된 데이터)을 생성한다. 그 후, 서브스트림 디코더들(408-412) 각각은 각 디코딩된 데이터를 스트림 컴바이너(422)에 출력한다. 스트림 컴바이너(422)는 서브스트림 디코더들(408-412) 각각으로부터, 심볼들의 스트림을 수신하고, 모든 디코더들(408-412)로부터의 심볼들의 스트림들을 조합하여 디코더(400)로부터 출력되는 디코딩된 데이터의 스트림을 생성한다. 예를 들어, 일부 실시예들에서, 스트림 컴바이너(422)는 라운드-로빈 방식으로 디코더들(408-412) 각각으로부터 다음 심볼을 획득하고, 다음 심볼을 디코딩된 데이터의 집합 또는 조합된 스트림에 첨부한다. 그 후, 스트림 컴바이너(422), 그리고 보다 광범위하게, 디코더(400)는 디코딩된 데이터의 스트림을 압축 해제기 서브시스템(306)에 출력한다. 또한, 디코더들(402-404) 각각(예를 들어, 스트림 컴바이너 또는 그 내부의 또 다른 기능 블록)은 (도 4의 우측에 있는 디코더들(402-404)로부터의 화살표들에 의해 도시된 바와 같이) 디코딩된 데이터의 각 스트림들을 압축 해제기 서브시스템(306)에 출력한다.
일부 실시예들에서, 디코더들(402-404) 중 하나 이상은 압축된 입력 데이터에서의 N개의 스트림들 중의 이차 스트림들을 디코딩하는 이차 디코더이다. 일차 스트림들과 대조적으로, 이차 스트림들은 디코딩하기에 덜 복잡하고, 이에 따라 이차 디코더들은 단순화되고 내부 요소들을 덜 포함할 수 있다. 예를 들어, 일부 실시예들에서, 이차 스트림들은 고정 길이(즉, 고정 비트 또는 바이트 수)를 갖는 리터럴들, 커맨드 태그들, 길이들, 및/또는 거리들에 대한 이의 추가적인 값들 및/또는 부분들(이의 나머지 부분들은 일차 스트림들에 포함됨)과 같은 정보를 포함하고, 이에 따라 이차 스트림들은 이차 스트림으로부터 고정 길이의 데이터의 청크들 또는 블록들을 리트리빙함으로써 간단히 디코딩될 수 있다.
일부 실시예들에서, 스트림들의 일부 또는 전부는 원시 또는 인코딩되지 않은 스트림 데이터를 포함한다. 예를 들어, 일부 경우들에서, 스트림을 인코딩하는 것은 인코딩의 효과로 인해 스트림이 크기가 더 커지게 하고, 이에 따라 스트림은 원본 데이터를 압축하는 전자 디바이스에 의해 인코딩되지 않는다. 이러한 실시예들 중 일부에서, 버퍼들(416-420) 중 일부 또는 전부는 대응하는 서브스트림 디코더를 바이패스할 수 있고(즉, 대응하는 서브스트림 디코더에서 디코딩 동작들을 수행하지 않음), 원시 또는 인코딩되지 않은 스트림 요소들을 스트림 컴바이너(422) 및/또는 압축 해제기 서브시스템(306)에 바로 전달할 수 있다.
도 5는 일부 실시예들에 따른 압축 해제기 서브시스템(306)을 도시한 블록도를 나타낸다. 압축 해제기 서브시스템(306)은 디코더 서브시스템(304)에 의해 출력되는 디코딩된 데이터를 수신하고 압축된 입력 데이터를 압축 해제하기 위해 디코딩된 데이터를 사용하여 커맨드들을 생성하기 위한 내부 요소들을 포함한다. 압축 해제기 서브시스템(306)은 또한, 그 커맨드들을 실행하여, 압축된 입력 데이터가 생성되었던 원본 데이터를 재현하고, 재현된 원본 데이터를 메모리에 저장하기 위한 내부 요소들을 포함한다.
도 5에서 알 수 있는 바와 같이, 압축 해제기 서브시스템(306) 내의 요소들은, 커맨드들을 어셈블하는 데 사용되는 커맨드 태그들, 길이들 등과 같은 각 값들을 각각 버퍼링하는 기능 블록들인 버퍼들(502-504)로부터 획득된 정보로부터 그 커맨드들을 어셈블(즉, 발생, 생성 등)하기 위한 동작들을 수행하는 기능 블록인 커맨드 어셈블러(500)를 포함한다. 압축 해제기 서브시스템(306)은 또한, 가능할 때, 커맨드들(또는 이에 의해 야기되는 동작들)을 압축 해제기 서브시스템(306)에서의 후속 실행을 위한 새로운 집합 커맨드들로 조합하기 위한 동작들을 수행하는 기능 블록인 동작 컴바이너(OP COMB)(508)를 포함한다. 압축 해제 서브시스템(306)은, 압축 해제 서브시스템(306)에서 사용하기 위해 디코더 서브시스템(304)에 의해 출력되는 디코딩된 데이터 내의 리터럴들을 버퍼링하기 위한 동작들을 수행하는 기능 블록들인 버퍼(506) 및 리터럴 버퍼(510)를 더 포함한다. 압축 해제기 서브시스템(306)은, 커맨드들을 실행할 때 원본 데이터를 재현하는 데 사용될 데이터(예를 들어, 메모리에 이전에 기입되었던 재현된 원본 데이터로부터 스트링들)를 메모리로부터 획득하기 위한 동작들을 수행하는 기능 블록들인 판독 스케줄러(SCH)(512) 및 판독 반환(RETRN)(514)을 더 포함한다. 압축 해제기 서브시스템(306)은, 각각 커맨드들이 실행되고 커맨드들을 실행할 때를 제어하는 기능 블록들인 동작 제어기(OP CTRLR)(516) 및 커맨드 실행기(CMD EXE)(518)를 더 포함한다. 압축 해제기 서브시스템(306)은, 커맨드들, 및 커맨드들을 실행하는 데 사용되고/거나 후속 커맨드들에 피드백될 재현된 원본 데이터의 블록들(예를 들어, 32 바이트 블록들 등)을 캐싱하기 위한, 뿐만 아니라, 이력 버퍼(522) - 이로부터 재현된 원본 데이터가 메모리에 기입됨 - 에 대한 동작들을 수행하는 기능 블록들인 동작(OP) 캐시(520) 및 이력 버퍼(522)를 더 포함한다.
압축 해제기 서브시스템(306)의 동작 동안, 디코딩된 데이터는 버퍼들(502-506) 각각(예를 들어, 각각, 커맨드 태그들, 길이들, 및 리터럴들)에 의해 수신된다. 커맨드 태그들 및 길이들은 커맨드 어셈블러(500)에 의해 필요에 따라 버퍼들(502-504)로부터 (예를 들어, 선입선출 순서로) 리트리빙되고, 원본 데이터를 재현하기 위한 커맨드들을 생성하기 위해 커맨드 어셈블러(500)에 의해 사용된다. 예를 들어, 커맨드 태그 단독에 기초하여(즉, 커맨드 태그에 포함된 정보 또는 값들에 기초하여), 커맨드 어셈블러(500)는 하나 이상의 다음 리터럴을 획득하고 이를 재현된 원본 데이터에 추가/첨부하기 위한 커맨드를 생성할 수 있다. 또 다른 예로서, 길이 및/또는 거리와 조합된 커맨드 태그에 기초하여, 커맨드 어셈블러(500)는 이전에 재현된 원본 데이터에서의 식별된 위치로부터 특정 크기(예를 들어, 비트 또는 바이트 수)의 데이터의 청크 또는 블록을 획득하고, 획득된 데이터의 청크 또는 블록을 재현된 원본 데이터에 추가/첨부하기 위한 커맨드를 생성할 수 있다. 일부 실시예들에서, (커맨드 어셈블러(500) 뒤에 추가적인 블록에 의해 도시된 바와 같이) 두 개 이상의 커맨드 어셈블러들이 있고, 커맨드 어셈블러들은 상술한 바와 같은 커맨드들을 생성하기 위해 실질적으로 병행하여 동작한다는 점에 유의한다.
커맨드 어셈블러(500)로부터, 생성된 커맨드들은 동작 컴바이너(506)로 포워딩되며, 이는 두 개 이상의 개별 커맨드들의 그룹들을 수집하고 두 개 이상의 커맨드들을 하나 이상의 집합 커맨드로 조합하려고 시도한다. 각 집합 커맨드는 두 개 이상의 개별 커맨드들의 모든 동작들을 수행하지만, (커맨드 실행기(518)로부터) 보다 적은 계산 노력, 보다 적은 메모리 및/또는 캐시 메모리 액세스 등으로 그렇게 할 수 있다. 일부 실시예들에서, 두 개 이상의 커맨드들로부터 집합 커맨드들이 생성될 수 없을 때, 두 개 이상의 커맨드들 자체가 동작 컴바이너(506)로부터 개별적으로 출력된다.
커맨드들 또는 집합 커맨드들(이러한 예의 나머지에 대해 간결성 및 명료성을 위해 "커맨드들"로 총칭됨)은 동작 컴바이너(506)로부터 판독 스케줄러(512)로 포워딩된다. 판독 스케줄러(512)는 그 커맨드들을 분석하여, 메모리에 이미 기입되었던 재현된 데이터로부터 데이터의 청크들 또는 블록들을 획득하는 데 메모리 액세스가 요구되는지 여부를 결정한다. 예를 들어, 커맨드는 현재 커맨드를 실행하는 데 사용될 이전에 재현된 원본 데이터로부터 데이터의 청크 또는 블록을 복사하는 것이다. 데이터의 블록들 또는 청크들을 획득하기 위해 메모리 판독이 수행될 때, 판독 스케줄러(512)는 데이터의 블록들 및 청크들에 대한 판독 요청들을 메모리에 송신한다.
판독 스케줄러(512)로부터, 커맨드들은 동작 제어기(516)로 전달되며, 이는 커맨드들이 실행될 수 있는지, 또는 커맨드들이 메모리로부터의 데이터의 반환을 기다리도록 홀드되어야 하는지를 결정한다. 커맨드들이 실행될 수 있을 때, 동작 제어기(516)는 커맨드들을 실행을 위해 커맨드 실행기(518)에 포워딩한다 - 또는 커맨드들을 동작 캐시(520)에 저장하고, 커맨드 실행기(518)가 실행을 위해 동작 캐시(520)로부터 커맨드들을 획득하게 한다. 그렇지 않고, 커맨드들이 메모리로부터의 데이터의 반환을 기다리며 홀드되어야 할 때, 동작 제어기(516)는 커맨드들을 데이터의 반환이 기다리는 동안 저장될 동작 캐시(520)에 포워딩한다. 후속하여, 데이터가 반환될 때, 판독 반환(514)이 데이터를 동작 제어기(516)로 포워딩하며, 이는 데이터를 동작 캐시(520)에 저장하고, 커맨드 실행기(518)가 실행을 위해 동작 캐시(520)로부터 커맨드 및 데이터를 획득하게 한다.
커맨드를 실행하는 것은 커맨드 실행기(518)가 커맨드에 의해 표시되는 동작들을 수행하게 한다. 예를 들어, 일부 실시예들에서, 커맨드는 재현된 원본 데이터의 끝에 하나 이상의 리터럴을 추가/첨부하는 것이고, 이에 따라 커맨드 실행기(518)는 리터럴 버퍼(510)(또는 동작 캐시(520) 또는 이력 버퍼(522))로부터 하나 이상의 리터럴을 획득하고, 하나 이상의 리터럴을 재현된 원본 데이터의 끝에 추가/첨부한다. 즉, 커맨드 실행기(518)는 리터럴 버퍼(510)로부터 획득되는 리터럴들의 데이터(예를 들어, 비트들 또는 바이트들)를 순서대로 동작 캐시(520)에 출력하고, 리터럴들의 데이터는 최종적으로 동작 캐시(520)로부터, 생성된 원본 데이터의 메모리 내의 파일, 스트림 등에 기입된다. 또 다른 예로서, 일부 실시예들에서, 소정의 커맨드는 이미 재현된 원본 데이터에서 뒤쪽의 일정 거리로부터 일정 길이의 스트링을 획득하고, 그 스트링을 재현된 원본 데이터의 끝에 추가/첨부하는 것이고, 이에 따라 커맨드 실행기(518)는 이미 재현된 원본 데이터로부터 스트링을 획득하기 위해 메모리 액세스를 수행한다. 판독 스케줄러(512)에 의한 메모리로부터의 스트링의 보다 이른 페칭으로 인해, 메모리 액세스는 동작 캐시(520)(또는 후술될 바와 같이, 이력 버퍼(522))에서 히트(hit)되어야 하고, 커맨드 실행기(518)는 스트링을 획득하고, 스트링을 재현된 원본 데이터의 끝에 추가/첨부한다.
일부 실시예들에서, 이력 버퍼(522)는 커맨드 실행기(518)에 의해 출력되는 최근 출력 데이터(예를 들어, 리터럴들 및 스트링들)를 임시 저장하고 피드백하기 위해 사용된다. 이러한 실시예들에서, 커맨드 실행기(518)로부터 데이터의 청크(예를 들어, T 비트 리터럴, K 비트 또는 바이트 스트링)가 출력됨에 따라, 데이터의 청크는 선입선출 순서로 (아마도 동작 캐시(520)를 통해) 이력 버퍼에 기입된다. 데이터의 청크들은 소정의 시간량 동안 또는 이력 버퍼(522)가 가득 찰 때까지 이력 버퍼(522)에 홀드되고, 그 후 선입선출 순서로 메모리에 기입된다. 상술된 바와 같이, 이력 버퍼(522)에 상주하는 동안, 데이터의 청크들은 후속 커맨드들로의 피드백을 위해 이용 가능하다.
도 3은 압축 해제 서브시스템(208) 내의 하나의 압축 해제 엔진만을 도시하고 있지만, 일부 실시예들에서, 압축 해제 서브시스템(208)은 다수의 압축 해제 엔진들을 포함한다. 이러한 실시예들에서, 다수의 압축 해제 엔진들은 압축된 입력 데이터의 부분들을 압축 해제하도록 (예를 들어, 실질적으로 병행하여) 사용될 수 있거나, 또는 상이한/별개의 압축된 입력 데이터를 압축 해제하도록 사용될 수 있다. 예를 들어, 일부 실시예들에서, 다수의 압축 해제 엔진들 각각은 동일한 압축된 입력 데이터의 각 단편 또는 섹션을 압축 해제하도록 사용될 수 있다.
도 4는 세 개의 디코더들(400-404)을 도시하지만, 일부 실시예들에서, 상이한 수의 디코더가 사용된다. 또한, 일부 실시예들에서, 압축 해제 엔진에 커맨드 어셈블러(500), 커맨드 실행기(518)등과 같은 상이한 수의 다른 내부 요소들이 존재한다. 또한, 일부 실시예들에서, 디코더 서브시스템(304) 및 압축 해제기 서브시스템(306)에 상이한 수의 서브스트림 디코더 및 버퍼가 사용된다. 이는 서브스트림 디코더들과 버퍼들 사이의 타원들을 통해 도 4 및 도 5에 도시되어 있다. 일반적으로, 설명되는 실시예들에서, 압축 해제 엔진은 본원에서 설명되는 동작들을 수행하기에 충분한 내부 요소들을 포함한다.
압축된 입력 데이터를 압축 해제하기 위한 프로세스들
설명되는 실시예들에서, 디코더 서브시스템 및 압축 해제기 서브시스템(예를 들어, 디코더 서브시스템(304) 및 압축 해제기 서브시스템(306))을 포함하는 압축 해제 엔진(예를 들어, 압축 해제 엔진(300))이 데이터의 하나 이상의 개별 스트림(예를 들어, 압축된 데이터(100)에서의 스트림들(102-106))을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 동작들을 수행한다. 도 6은 일부 실시예들에 따른 다수의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 프로세스를 도시한 흐름도를 나타낸다. 도 6에 도시된 동작들은 일부 실시예들에 의해 수행되는 동작들의 일반적인 예로서 제시된다는 점에 유의한다. 다른 실시예들에 의해 수행되는 동작들은 상이한 동작들, 상이한 순서로 수행되는 동작들, 및/또는 상이한 엔티티들 또는 기능 블록들에 의해 수행되는 동작들을 포함한다.
도 6에서의 예의 경우, 압축된 입력 데이터는 딕셔너리 코딩 압축(예를 들어, LZ77- 또는 LZ78-기반 압축 표준을 사용함)과 프리픽스 코딩(예를 들면, 허프만 코딩 표준을 사용함)의 조합을 사용하여 압축된 것으로 가정된다. 그러나, 이는 요건은 아니다. 예를 들어, 일부 실시예들에서, 데이터는 먼저 인코딩된 후, 스트림들로 분리되고, 마지막으로 압축되며, 이는 도 6에서의 예와 반대이다. 일반적으로, 설명되는 실시예들은 본원에서 설명되는 바와 같이 압축 해제 엔진을 사용하여 압축 해제될 수 있는 압축(들)과/또는 인코딩(들)의 임의의 조합으로 동작 가능하다. 또한, 압축 프로세스 동안, 예를 들어, 압축 이후 또는 압축 동안 그리고 인코딩 이전에, 압축된 데이터는 데이터의 N개의 스트림들로 분리된 것으로 가정된다. 본원에서 설명된 바와 같이, 데이터의 N개의 스트림들의 각 스트림은, 압축된 입력 데이터를 압축 해제하기 위해 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 데이터를 포함한다 - 그리고 단지 이러한 데이터만을 포함할 수 있다. 예를 들어, 일부 실시예들에서, 데이터의 유형들은 딕셔너리 코딩 압축 표준과 연관된 리터럴들, 커맨드 태그들, 거리들, 길이들, 및/또는 다른 데이터 중 일부 또는 전부를 포함하고, 이에 따라 N개의 스트림들 각각은 이러한 유형들의 데이터 중 적어도 하나 - 그리고 가능하게는 단지 하나만 - 를 포함한다.
도 6에서 알 수 있는 바와 같이, 프로세스는 압축 해제 엔진이 데이터의 N개의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 커맨드를 수신할 때 시작한다(단계 600). 이 동작을 위해, 압축 해제 엔진은 신호 라인, 버스, 또는 다른 통신 인터페이스를 통해, 커맨드 및/또는 압축된 입력 데이터의 식별 정보를 포함하는 패킷, 메시지, 또는 신호를 수신한다. 예를 들어, 일부 실시예들에서, 커맨드의 식별 정보는 커맨드를 식별하는 패턴으로 편성된 하나 이상의 비트 또는 바이트를 포함한다. 또 다른 예로서, 일부 실시예들에서, 압축된 입력 데이터의 식별 정보는 압축된 입력 데이터가 획득될 위치, 이를테면 메모리에서의 어드레스, 네트워크 인터페이스 디바이스에 대한 식별자 등을 포함한다.
그 후, 압축 해제 엔진은 상기 N개의 디코더들(예를 들어, 디코더들(408-412)) 각각이 상기 압축된 입력 데이터로부터의 상기 N개의 스트림들의 각 스트림을 개별적으로 그리고 실질적으로 병행하여 디코딩하게 한다(단계 602). 이 동작은 압축 해제 엔진(예를 들어, 커맨드 헤더 디코더, 스트림 헤더 디코더 등)이 N개의 스트림들의 각 스트림의 압축된 입력 데이터에서의 위치를 결정하고 N개의 디코더들 중의 상이한 디코더가 각 스트림을 디코딩하기 시작하게 하는 것을 수반한다. 각 스트림을 디코딩하는 것은 각 디코더(또는 또 다른 엔티티)가 각 디코딩 레퍼런스(예를 들어, 디코딩 레퍼런스(426))에서 색인을 수행하여 각 스트림에서 인코딩된 데이터의 블록들과 연관된 심볼들을 결정하고 그 심볼들을 출력하는 것을 포함한다.
디코더들 각각은 압축 표준에 대한 각 유형의 디코딩된 데이터(즉, 심볼들)의 스트림을 압축 해제기(예를 들어, 압축 해제기 서브시스템(306))에 출력한다(단계 604). 이 동작은 디코더들이 압축된 입력 데이터를 압축 해제하기 위해 상기 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 디코딩된 데이터를 출력하는 것을 수반한다. 예를 들어, 디코더들 중 하나는 - 압축된 입력 데이터를 압축 해제하기 위한 커맨드들을 생성하기 위해 하나 이상의 다른 디코더에 의해 출력되는 다른 정보(예를 들어, 길이들, 거리들 등)와 조합되거나 단독으로 사용될 - 커맨드 태그들을 포함하는 디코딩된 데이터를 출력할 수 있다.
그 후, 압축 해제기는 디코딩된 데이터의 스트림들로부터, 원본 데이터를 재현하기 위해 압축 표준을 사용하여 데이터를 압축 해제하기 위한 커맨드들을 생성한다(단계 606). 상술한 바와 같이, 이 동작을 위해, 압축 해제기는 스트림들의 일부 또는 전부로부터의 데이터의 청크들 또는 부분들(예를 들어, W 비트 부분들)을 획득하고, 데이터의 청크 또는 부분들을 사용 및/또는 조합하여 커맨드를 생성한다. 예를 들어, 압축 해제기는 디코딩된 데이터의 스트림들 중 하나로부터 - 실행기(예를 들어, 커맨드 실행기(518))가 이미 재현된 원본 데이터로부터의 이전 스트링을 재현된 원본 데이터의 끝에 추가/첨부하게 할 복사 커맨드를 식별하는 - 커맨드 태그를 획득할 수 있다. 이 경우, 압축 해제기는 또한 커맨드 태그와 조합될 스트림들 중 제2 스트림으로부터의 거리(예를 들어, 원본 데이터에서 뒤쪽의 바이트 수) 및/또는 스트림들 중 제3 스트림으로부터의 길이(예를 들어, 스트링에서의 바이트 수)를 획득한다.
그 후, 압축 해제기는 원본 데이터를 재현하기 위해 커맨드들을 실행한다(단계 608). 상술한 바와 같이, 이 동작은 압축 해제기 내의 실행기(예를 들어, 커맨드 실행기(518))가 재현된 원본 데이터에 추가/첨부하기 위한 스트링들 및/또는 리터럴들을 생성 및/또는 획득하기 위한 커맨드를 실행하는 것을 포함한다. 그 후, 압축 해제기는 재현된 원본 데이터를 메모리에 저장한다(단계 610).
일부 실시 예들에서, 적어도 하나의 전자 디바이스(예를 들어, 전자 디바이스(200))는 비일시적 컴퓨터 판독 가능 저장 매체 상에 저장된 코드 및/또는 데이터를 사용하여 본원에서 설명되는 동작들 중 일부 또는 전부를 수행한다. 보다 구체적으로, 적어도 하나의 전자 디바이스는 설명된 동작들을 수행할 때 컴퓨터 판독 가능 저장 매체로부터 코드 및/또는 데이터를 판독하고 코드를 실행하고/거나 데이터를 사용한다. 컴퓨터 판독 가능 저장 매체는 전자 디바이스에 의한 사용을 위한 코드 및/또는 데이터를 저장하는 임의의 디바이스, 매체, 또는 이들의 조합일 수 있다. 예를 들어, 컴퓨터 판독 가능 저장 매체는 플래시 메모리, 랜덤 액세스 메모리(예를 들어, eDRAM, RAM, SRAM, DRAM, DDR4 SDRAM 등), 비휘발성 RAM(예를 들어, 상 변화 메모리, 강유전성 랜덤 액세스 메모리, 스핀 전달 토크 랜덤 액세스 메모리, 자기저항성 랜덤 액세스 메모리 등), 판독 전용 메모리(ROM), 및/또는 자기 또는 광학 저장 매체들(예를 들어, 디스크 드라이브들, 자기 테이프, CD, DVD들 등)을 포함하여, 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있지만, 이에 제한되지는 않는다.
일부 실시예들에서, 하나 이상의 하드웨어 모듈이 본원에서 설명된 동작들을 수행한다. 예를 들어, 하드웨어 모듈들은 하나 이상의 프로세서/코어/중앙 처리 장치(CPU), 주문형 집적 회로(ASIC) 칩, 신경망 프로세서 또는 가속기, 필드 프로그래머블 게이트 어레이(FPGA), 압축 해제 엔진, 컴퓨터 유닛, 임베디드 프로세서, 그래픽 프로세서(GPU)/그래픽 코어, 파이프라인, 가속 처리 장치(APU), 기능 블록, 제어기, 가속기, 및/또는 다른 프로그래머블 로직 디바이스를 포함할 수 있지만, 이에 제한되지는 않는다. 이러한 하드웨어 모듈들이 활성화될 때, 하드웨어 모듈들은 동작들의 일부 또는 전부를 수행한다. 일부 실시예들에서, 하드웨어 모듈들은 동작들을 수행하기 위한 명령어들(프로그램 코드, 펌웨어 등)을 실행함으로써 구성되는 하나 이상의 범용 회로를 포함한다.
일부 실시예들에서, 본원에서 설명된 구조들 및 메커니즘들의 일부 또는 전부(예를 들어, 전자 디바이스(200) 또는 이의 일부 부분)를 나타내는 데이터 구조는 전자 디바이스에 의해 판독되고 구조들 및 메커니즘들을 포함하는 하드웨어를 제조하기 위해 직접 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조를 포함하는 컴퓨터 판독 가능 비일시적 저장 매체 상에 저장된다. 예를 들어, 데이터 구조는 Verilog 또는 VHDL과 같은 상위 수준 설계 언어(HDL)의 하드웨어 기능에 대한 거동 수준 설명 또는 레지스터 전송 수준(RTL) 설명일 수 있다. 그 설명은 상술한 구조들 및 메커니즘들을 포함하는 하드웨어의 기능을 나타내는 합성 라이브러리로부터 게이트들/회로 소자들의 리스트를 포함하는 네트리스트를 생성하기 위해 설명을 합성할 수 있는 합성 툴에 의해 판독될 수 있다. 그 후, 네트리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될수 있다. 그 후, 마스크들은 상술한 구조들 및 메커니즘들에 대응하는 반도체 회로 또는 회로들(예를 들어, 집적 회로들)을 생산하기 위해 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는 네트리스트(합성 라이브러리가 있거나 없는) 또는 요구되는 바에 따라, 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
본 설명에서, 변수들 또는 특정되지 않은 값들(즉, 값들의 특정 인스턴스들이 없는 값들에 대한 일반적인 설명)은 N, M, 및 X와 같은 문자들로 표현된다. 본원에서 사용될 때, 본 설명에서의 상이한 위치들에서 가능하게는 유사한 문자들을 사용함에도 불구하고, 각 경우에서의 변수들 및 특정되지 않은 값들은 반드시 동일한 것이 아니다, 즉, 일반적인 변수들 및 특정되지 않은 값들의 일부 또는 전부에 대해 상이한 가변 량들 및 값들이 의도될 수 있다. 다시 말해서, 본 설명에서 변수들 및 지정되지 않은 값들을 나타내기 위해 사용되는 N 및 임의의 다른 문자들은 반드시 서로 관련이 있는 것은 아니다.
표현 "기타 등등" 또는 "등"은 본원에서 사용될 때 사례, 즉 "등"이 연관되는 리스트의 요소들 "중 적어도 하나"의 균등물을 제시하는 것으로 의도된다. 예를 들어, "전자 디바이스가 첫 번째 동작, 두 번째 동작 등을 수행한다"라는 문구에서, 전자 디바이스는 첫 번째 동작, 두 번째 동작, 및 다른 동작들 중 적어도 하나를 수행한다. 또한, "등"과 연관된 리스트의 요소들은 단지 예들의 세트 중의 예들일 뿐이다 - 그리고 예들 중 적어도 일부는 일부 실시예들에서 나타나지 않을 수 있다.
실시예들에 대한 앞에서의 설명은 단지 예시 및 설명을 위해 제시되었다. 그것들은 철저하거나 본 실시예들을 개시된 형태들로 제한하는 것으로 의도되지 않는다. 따라서, 많은 변경안들 및 변형안들이 당업자들에게 명백할 것이다. 또한, 상기한 개시 내용은 실시예들을 제한하는 것으로 의도되지 않는다. 실시예들의 범위는 첨부된 청구항들에 의해 정의된다.

Claims (23)

  1. 데이터의 N개의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 전자 디바이스로서, 상기 데이터의 N개의 스트림들은, 압축된 데이터를 생성하기 위해 압축 표준을 사용하여 원본 데이터를 압축하고, 상기 압축된 데이터를 N개의 스트림들 - 상기 N개의 스트림들 각각은 상기 압축된 입력 데이터를 압축 해제하기 위해 상기 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 데이터를 포함함 - 로 분리하며, 인코딩 표준을 사용하여 상기 N개의 스트림들 각각을 인코딩함으로써, 상기 원본 데이터로부터 생성된 것이며, 상기 전자 디바이스는:
    메모리; 및
    N개의 디코더들 및 압축 해제기를 포함하는 압축 해제 엔진을 포함하며, 상기 압축 해제 엔진은:
    상기 압축된 입력 데이터를 압축 해제하기 위한 커맨드를 수신하도록;
    상기 N개의 디코더들 각각에서, 상기 압축된 입력 데이터로부터의 상기 N개의 스트림들의 각 스트림을 개별적으로 그리고 상기 N개 디코더들의 다른 디코더들과 실질적으로 병행하여 디코딩하도록 - 각 디코더는 상기 압축된 입력 데이터를 압축 해제하기 위해 상기 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 디코딩된 데이터의 스트림을 출력함 -;
    상기 압축 해제기에서, 상기 N개의 디코더들에 의해 상기 출력되는 디코딩된 데이터의 스트림들로부터, 상기 원본 데이터를 재현하기 위해 상기 압축 표준을 사용하여 상기 데이터를 압축 해제하기 위한 커맨드들을 생성하도록;
    상기 압축 해제기에서, 상기 원본 데이터를 재현하기 위한 상기 커맨드들을 실행하도록; 그리고
    상기 원본 데이터를 상기 메모리에 저장하도록 구성된 것인, 전자 디바이스.
  2. 제1항에 있어서, 상기 N개의 디코더들 중 하나 이상의 디코더 각각에서 상기 N개의 스트림들의 상기 각 스트림을 디코딩하는 것은:
    상기 N개의 스트림들의 상기 각 스트림에서의 특정 위치로부터, 디코딩 레퍼런스를 생성하기 위한 정보를 획득하는 것을 포함하며, 상기 디코딩 레퍼런스는 상기 압축된 입력 데이터로부터의 상기 각 스트림을 디코딩하기 위해 해당 디코더에 의해 사용되는 정보를 포함하는 것인, 전자 디바이스.
  3. 제1항에 있어서, 상기 N개의 디코더들 중 적어도 하나는 두 개 이상의 서브스트림 디코더들, 및 스트림 컴바이너(stream combiner)를 포함하며,
    상기 두 개 이상의 서브스트림 디코더들 각각은:
    해당 서브스트림 디코더가 위치되는 상기 디코더에 의해 디코딩되는 상기 N개의 스트림들 중의 상기 스트림으로부터 데이터의 개별 부분을 획득하도록;
    상기 데이터의 상기 개별 부분을 개별적으로 그리고 상기 두 개 이상의 서브스트림 디코더들의 다른 서브스트림 디코더들과 실질적으로 병행하여 디코딩하도록; 그리고
    상기 데이터의 상기 개별 부분과 연관되는 디코딩된 데이터 부분을 출력하도록 구성되고;
    상기 스트림 컴바이너는:
    각 서브스트림 디코더로부터, 상기 디코딩된 데이터 부분을 수신하도록;
    상기 디코딩된 데이터 부분들을 조합하여 상기 디코딩된 데이터의 스트림을 생성하도록; 그리고
    상기 디코딩된 데이터의 스트림을 출력하도록 구성된 것인, 전자 디바이스.
  4. 제1항에 있어서, 상기 N개의 디코더들 중 적어도 하나는 상기 N개의 스트림들의 상기 각 스트림을 디코딩하기 위해 단순화된 디코딩 동작들이 수행되는 이차 디코더(secondary decoder)인 것인, 전자 디바이스.
  5. 제1항에 있어서, 상기 압축 해제기는 하나 이상의 버퍼, 및 적어도 하나의 커맨드 어셈블러(command assembler)를 포함하며,
    상기 하나 이상의 버퍼 각각은 상기 N개의 디코더들에 의해 출력되는 상기 디코딩된 데이터의 스트림들의 개별 스트림으로부터의 데이터를 저장하고;
    상기 커맨드 어셈블러는:
    상기 하나 이상의 버퍼로부터 데이터를 획득하고;
    상기 데이터로부터, 상기 데이터를 압축 해제하기 위한 상기 커맨드들을 생성하는 것인, 전자 디바이스.
  6. 제5항에 있어서, 상기 압축 해제기는 적어도 두 개의 커맨드 어셈블러들을 포함하며, 각 커맨드 어셈블러는:
    상기 하나 이상의 버퍼로부터, 그리고 버퍼에 저장되지 않은 상기 N개의 디코더들에 의해 출력되는 디코딩된 데이터의 스트림들로부터 직접, 데이터의 개별 부분을 획득하도록; 그리고
    상기 데이터의 상기 개별 부분으로부터, 커맨드들을 생성하여, 상기 적어도 두 개의 커맨드 어셈블러들 각각이 상기 데이터를 개별적으로 그리고 실질적으로 병행하여 압축 해제하기 위한 상기 커맨드들 중 일부를 생성하게 되도록, 구성된 것인, 전자 디바이스.
  7. 제5항에 있어서, 상기 압축 해제기는 상기 데이터를 압축 해제하기 위해 두 개 이상의 커맨드들을 집합 커맨드로 조합하도록 구성된 동작 컴바이너를 포함하는 것인, 전자 디바이스.
  8. 제1항에 있어서, 상기 N개의 디코더들에 의해 출력되는 상기 데이터는 리터럴들(literals), 커맨드 태그들(command tags), 거리들(distances), 및 길이들(lengths) 중 일부 또는 전부를 포함하는 것인, 전자 디바이스.
  9. 제1항에 있어서, 상기 압축 해제 엔진은 커맨드 헤더 디코더를 포함하며, 상기 커맨드 헤더 디코더는:
    상기 커맨드를 처리하는 것, 그리고 상기 N개의 디코더들 중 일부 또는 전부에서의 스트림 헤더 디코더들과 통신하는 것 중 적어도 하나에 의해, 상기 압축된 입력 데이터에서의 상기 N개의 스트림들 각각에 대한 시작 위치를 결정하도록; 그리고
    상기 압축된 입력 데이터에서의 상기 N개의 스트림들의 상기 각 스트림의 상기 시작 위치를 상기 N개의 디코더들 각각으로 전달하도록 구성된 것인, 전자 디바이스.
  10. 제1항에 있어서,상기 압축 해제기에서 상기 원본 데이터를 재현하기 위한 상기 커맨드들을 실행할 때, 상기 압축 해제기는:
    메모리 내의 데이터가 커맨드를 실행하기 위해 사용될 때, 메모리로부터 상기 데이터를 프리페치(prefetch)하도록;
    상기 데이터가 메모리로부터 프리페치되는 동안 상기 커맨드를 버퍼링하도록; 그리고
    상기 데이터가 메모리로부터 반환될 때 상기 커맨드를 실행하도록 구성된 것인, 전자 디바이스.
  11. 제1항에 있어서,
    상기 압축 해제기는 특정 크기의 청크들로 상기 원본 데이터를 재현하고, 커맨드들은 이전 커맨드들에 의해 재현된 청크들에서의 데이터에 대한 의존성을 가질 수 있고;
    상기 압축 해제기는 마지막 M개의 재현된 청크들을 이력 버퍼에 저장하며, 상기 이력 버퍼 내의 상기 청크들은 후속 커맨드들에 피드백되는 데 이용 가능하고, 상기 청크들은 상기 이력 버퍼로부터 상기 메모리로 선입선출 순서로 기입되는 것인, 전자 디바이스.
  12. 제1항에 있어서, 상기 인코딩 표준은 프리픽스 코딩(prefix coding) 표준이고, 상기 압축 표준은 딕셔너리 코딩(dictionary coding) 압축 표준인 것인, 전자 디바이스.
  13. 메모리, 및 N개의 디코더들 및 압축 해제기를 갖는 압축 해제 엔진을 포함하는 전자 디바이스에서 데이터의 N개의 스트림들을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 방법으로서, 상기 데이터의 N개의 스트림들은, 압축된 데이터를 생성하기 위해 압축 표준을 사용하여 원본 데이터를 압축하고, 상기 압축된 데이터를 N개의 스트림들 - 상기 N개의 스트림들 각각은 상기 압축된 입력 데이터를 압축 해제하기 위해 상기 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 데이터를 포함함 - 로 분리하며, 인코딩 표준을 사용하여 상기 N개의 스트림들 각각을 인코딩함으로써, 상기 원본 데이터로부터 생성된 것이며, 상기 방법은:
    상기 압축 해제 엔진에 의해, 상기 압축된 입력 데이터를 압축 해제하기 위한 커맨드를 수신하는 단계;
    상기 N개의 디코더들 각각에서, 상기 압축된 입력 데이터로부터의 상기 N개의 스트림들의 각 스트림을 개별적으로 그리고 상기 N개 디코더들의 다른 디코더들과 실질적으로 병행하여 디코딩하는 단계 - 각 디코더는 상기 압축된 입력 데이터를 압축 해제하기 위해 상기 압축 표준과 연관된 커맨드들을 생성하기 위한 각 유형의 디코딩된 데이터의 스트림을 출력함 -;
    상기 압축 해제기에서, 상기 N개의 디코더들에 의해 출력되는 상기 디코딩된 데이터의 스트림들로부터, 상기 원본 데이터를 재현하기 위해 상기 압축 표준을 사용하여 상기 데이터를 압축 해제하기 위한 커맨드들을 생성하는 단계;
    상기 압축 해제기에서, 상기 원본 데이터를 재현하기 위한 상기 커맨드들을 실행하는 단계; 및
    상기 원본 데이터를 상기 메모리에 저장하는 단계를 포함하는, 방법.
  14. 제13항에 있어서, 상기 N개의 디코더들 중 하나 이상의 디코더 각각에서 상기 N개의 스트림들의 상기 각 스트림을 디코딩하는 단계는:
    상기 N개의 스트림들의 상기 각 스트림에서의 특정 위치로부터, 디코딩 레퍼런스를 생성하기 위한 정보를 획득하는 단계를 포함하며, 상기 디코딩 레퍼런스는 상기 압축된 입력 데이터로부터의 상기 각 스트림을 디코딩하기 위해 해당 디코더에 의해 사용되는 정보를 포함하는 것인, 방법.
  15. 제13항에 있어서, 상기 N개의 디코더들 중 적어도 하나는 두 개 이상의 서브스트림 디코더들, 및 스트림 컴바이너를 포함하고, 상기 방법은:
    상기 두 개 이상의 서브스트림 디코더들 각각에 의해, 해당 서브스트림 디코더가 위치되는 상기 디코더에 의해 디코딩되는 상기 N개의 스트림들 중의 상기 스트림으로부터 데이터의 개별 부분을 획득하는 단계;
    상기 두 개 이상의 서브스트림 디코더들 각각에 의해, 상기 데이터의 상기 개별 부분을 개별적으로 그리고 상기 두 개 이상의 서브스트림 디코더들의 다른 서브스트림 디코더들과 실질적으로 병행하여 디코딩하는 단계;
    상기 두 개 이상의 서브스트림 디코더들 각각에 의해, 상기 데이터의 상기 개별 부분과 연관되는 디코딩된 데이터 부분을 출력하는 단계;
    상기 스트림 컴바이너에 의해, 상기 두 개 이상의 서브스트림 디코더들 각각으로부터, 상기 디코딩된 데이터 부분을 수신하는 단계;
    상기 스트림 컴바이너에 의해, 상기 디코딩된 데이터 부분들을 조합하여 상기 디코딩된 데이터의 스트림을 생성하는 단계; 및
    상기 스트림 컴바이너에 의해, 상기 디코딩된 데이터의 스트림을 출력하는 단계를 더 포함하는, 방법.
  16. 제13항에 있어서, 상기 N개의 디코더들 중 적어도 하나는 상기 N개의 스트림들의 상기 각 스트림을 디코딩하기 위해 단순화된 디코딩 동작들이 수행되는 이차 디코더인 것인, 방법.
  17. 제13항에 있어서, 상기 압축 해제기는 하나 이상의 버퍼, 및 적어도 하나의 커맨드 어셈블러를 포함하며, 상기 방법은:
    상기 하나 이상의 버퍼 각각에 의해, 상기 N개의 디코더들에 의해 출력되는 상기 디코딩된 데이터의 스트림들의 개별 스트림으로부터의 데이터를 저장하는 단계;
    상기 커맨드 어셈블러에 의해, 상기 하나 이상의 버퍼로부터 데이터를 획득하는 단계; 및
    상기 커맨드 어셈블러에 의해, 상기 데이터로부터, 상기 데이터를 압축 해제하기 위한 상기 커맨드들을 생성하는 단계를 더 포함하는, 방법.
  18. 제17항에 있어서, 상기 압축 해제기는 동작 컴바이너를 포함하고, 상기 방법은:
    상기 동작 컴바이너에 의해, 상기 데이터를 압축 해제하기 위해 두 개 이상의 커맨드들을 집합 커맨드로 조합하는 단계를 더 포함하는, 방법.
  19. 제13항에 있어서, 상기 N개의 디코더들에 의해 출력되는 상기 디코딩된 데이터는 리터럴들, 커맨드 태그들, 거리들, 및 길이들 중 일부 또는 전부를 포함하는 것인, 방법.
  20. 제13항에 있어서, 상기 압축 해제 엔진은 커맨드 헤더 디코더를 포함하고, 상기 방법은:
    상기 커맨드 헤더 디코더에 의해, 상기 커맨드를 처리하는 것, 그리고 상기 N개의 디코더들 중 일부 또는 전부에서의 스트림 헤더 디코더들과 통신하는 것 중 적어도 하나에 의해, 상기 압축된 입력 데이터에서의 상기 N개의 스트림들 각각에 대한 시작 위치를 결정하는 단계; 및
    상기 커맨드 헤더 디코더에 의해, 상기 압축된 입력 데이터에서의 상기 N개의 스트림들의 상기 각 스트림의 상기 시작 위치를 상기 N개의 디코더들 각각으로 전달하는 단계를 더 포함하는, 방법.
  21. 제13항에 있어서,상기 압축 해제기에서 상기 원본 데이터를 재현하기 위한 상기 커맨드들을 실행하는 단계는:
    메모리 내의 데이터가 커맨드를 실행하기 위해 사용될 때, 상기 압축 해제기에 의해, 메모리로부터 상기 데이터를 프리페치하는 단계;
    상기 데이터가 메모리로부터 프리페치되는 동안 상기 압축 해제기에 의해, 상기 커맨드를 버퍼링하는 단계; 및
    상기 데이터가 메모리로부터 반환될 때 상기 압축 해제기에 의해, 상기 커맨드를 실행하는 단계를 더 포함하는, 방법.
  22. 제13항에 있어서, 상기 압축 해제기는 특정 크기의 청크들로 상기 원본 데이터를 재현하고, 커맨드들은 이전 커맨드들에 의해 재현된 청크들에서의 데이터에 대한 의존성을 가질 수 있으며, 상기 방법은:
    상기 압축 해제기에 의해, 마지막 M개의 재현된 청크들을 이력 버퍼에 저장하는 단계를 더 포함하며, 상기 이력 버퍼 내의 상기 청크들은 후속 커맨드들에 피드백되는 데 이용 가능하고, 상기 청크들은 상기 이력 버퍼로부터 상기 메모리로 선입선출 순서로 기입되는 것인, 방법.
  23. 제13항에 있어서, 상기 인코딩 표준은 프리픽스 코딩 표준이고, 상기 압축 표준은 딕셔너리 코딩 압축 표준인 것인, 방법.
KR1020227005432A 2019-08-19 2020-08-17 다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진 KR20220049522A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/544,594 2019-08-19
US16/544,594 US11561797B2 (en) 2019-08-19 2019-08-19 Decompression engine for decompressing compressed input data that includes multiple streams of data
PCT/US2020/046633 WO2021034749A1 (en) 2019-08-19 2020-08-17 Decompression engine for decompressing compressed input data that includes multiple streams of data

Publications (1)

Publication Number Publication Date
KR20220049522A true KR20220049522A (ko) 2022-04-21

Family

ID=74645859

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227005432A KR20220049522A (ko) 2019-08-19 2020-08-17 다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진

Country Status (6)

Country Link
US (2) US11561797B2 (ko)
EP (1) EP4018551A4 (ko)
JP (1) JP2022544763A (ko)
KR (1) KR20220049522A (ko)
CN (1) CN114222973A (ko)
WO (1) WO2021034749A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661707A (zh) * 2023-07-28 2023-08-29 北京算能科技有限公司 数据处理方法、装置及电子设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114302149B (zh) * 2021-12-24 2023-05-09 北京淳中科技股份有限公司 一种音视频传输方法、装置及系统

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2020084C (en) * 1989-06-29 1994-10-18 Kohei Iseda Voice coding/decoding system having selected coders and entropy coders
US5654703A (en) * 1996-06-17 1997-08-05 Hewlett-Packard Company Parallel data compression and decompression
US6862278B1 (en) * 1998-06-18 2005-03-01 Microsoft Corporation System and method using a packetized encoded bitstream for parallel compression and decompression
US6819271B2 (en) * 1999-01-29 2004-11-16 Quickshift, Inc. Parallel compression and decompression system and method having multiple parallel compression and decompression engines
US6885319B2 (en) * 1999-01-29 2005-04-26 Quickshift, Inc. System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms
US6459429B1 (en) * 1999-06-14 2002-10-01 Sun Microsystems, Inc. Segmenting compressed graphics data for parallel decompression and rendering
US6985853B2 (en) * 2002-02-28 2006-01-10 Broadcom Corporation Compressed audio stream data decoder memory sharing techniques
KR100648258B1 (ko) * 2004-08-02 2006-11-23 삼성전자주식회사 고속의 디코딩을 수행하는 파이프라인 구조의 내용 기반적응적 이진 산술 디코더
US7525946B2 (en) * 2004-08-20 2009-04-28 Nokia Corporation System and method for decoding signalling messages on FLO HR channels
US7496589B1 (en) * 2005-07-09 2009-02-24 Google Inc. Highly compressed randomly accessed storage of large tables with arbitrary columns
TW201143305A (en) * 2009-12-29 2011-12-01 Ibm Data value occurrence information for data compression
US8125357B1 (en) * 2010-03-23 2012-02-28 Sandia Corporation Deflate decompressor
US9252805B1 (en) * 2015-03-28 2016-02-02 International Business Machines Corporation Parallel huffman decoder
US9484954B1 (en) * 2015-09-10 2016-11-01 Intel Corporation Methods and apparatus to parallelize data decompression
US10191912B2 (en) * 2016-02-12 2019-01-29 Oracle International Corporation Shared decompression engine
US10034407B2 (en) * 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US9819359B1 (en) * 2016-12-11 2017-11-14 Microsoft Technology Licensing, Llc Multi-symbol, multi-format, parallel symbol decoder for hardware decompression engines
US10685282B2 (en) * 2018-07-25 2020-06-16 WaveOne Inc. Machine-learning based video compression

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661707A (zh) * 2023-07-28 2023-08-29 北京算能科技有限公司 数据处理方法、装置及电子设备

Also Published As

Publication number Publication date
WO2021034749A1 (en) 2021-02-25
CN114222973A (zh) 2022-03-22
US20210055932A1 (en) 2021-02-25
US11561797B2 (en) 2023-01-24
EP4018551A4 (en) 2023-08-23
JP2022544763A (ja) 2022-10-21
EP4018551A1 (en) 2022-06-29
US20230153111A1 (en) 2023-05-18

Similar Documents

Publication Publication Date Title
US20230153111A1 (en) Decompression Engine for Decompressing Compressed Input Data that Includes Multiple Streams of Data
US9390099B1 (en) Method and apparatus for improving a compression ratio of multiple documents by using templates
US7188118B2 (en) System and method for detecting file content similarity within a file system
US8756255B2 (en) Compression and storage of computer aided design data
US7800519B2 (en) Method and apparatus for compressing and decompressing data
US9479194B2 (en) Data compression apparatus and data decompression apparatus
US7728742B2 (en) Method and apparatus for compressing and decompressing data
CN104579356A (zh) 在存在重现的霍夫曼树的情况下加速解压缩的方法和系统
US10230392B2 (en) Techniques for parallel data decompression
US9665590B2 (en) Bitmap compression for fast searches and updates
US11424761B2 (en) Multiple symbol decoder
CN113474999A (zh) 溢出临时结果以适应存储边界
US10707897B1 (en) Command processor with multiple string copy engines for a decompression system
US11593311B2 (en) Compression system with longest match processing for generating compressed data
WO2024066753A1 (zh) 压缩数据的方法和相关装置
JP2006011822A (ja) プロセッサ