KR20120115244A - 데이터 압축 동안의 대안적 인코딩 솔루션들 평가 - Google Patents
데이터 압축 동안의 대안적 인코딩 솔루션들 평가 Download PDFInfo
- Publication number
- KR20120115244A KR20120115244A KR1020127014516A KR20127014516A KR20120115244A KR 20120115244 A KR20120115244 A KR 20120115244A KR 1020127014516 A KR1020127014516 A KR 1020127014516A KR 20127014516 A KR20127014516 A KR 20127014516A KR 20120115244 A KR20120115244 A KR 20120115244A
- Authority
- KR
- South Korea
- Prior art keywords
- chunks
- encoding
- string
- match
- data
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6508—Flexibility, adaptability, parametrability and configurability of the implementation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
데이터를 압축하기 위한 방법 및 장치가 개시된다. 다양한 실시예들에 따라, 데이터 비트들의 입력 스트링이 수신되고 고정-크기 청크(chunk)들로 배열된다. 단일 클록 사이클 동안 입력 스트링의 다수의 연속적 청크들은 입력 스트링의 이전에 수신된 청크들과 비교된다. 적어도 2개의 대안적 인코딩 솔루션들이 상기 비교 동안 획득된 매치들에 기초하여 식별된다. 상기 출력 스트링의 보다 적은 수의 비트들을 획득하는 적어도 2개의 대안적 인코딩 솔루션들 중 선택된 하나를 이용하여 압축된 출력 스트링을 형성하기 위해 입력 스트링은 압축된다.
Description
본 발명의 다양한 실시예들은 일반적으로 데이터를 압축하기 위한 방법 및 장치에 관한 것이다.
다양한 실시예들에 따라, 데이터 비트들의 입력 스트링은 고정-크기 청크(chunk)들로 배열된다. 단일 클록 사이클 동안 입력 스트링의 다수의 연속적 청크들은 입력 스트링의 이전에 수신된 청크들과 비교된다. 적어도 2개의 대안적 인코딩 솔루션들이 상기 비교 동안 획득된 매치들에 기초하여 식별된다. 압축된 출력 스트링을 형성하기 위해 입력 스트링은, 상기 출력 스트링에 보다 적은 수의 비트들을 획득하는 적어도 2개의 대안적 인코딩 솔루션들 중 선택된 하나를 이용하여 압축된다.
본 발명의 다양한 실시예들을 특징지우는 이들 및 다른 특징들 및 이점들은 아래의 도면의 간단한 설명 및 발명을 실시하기 위한 구체적인 내용을 참조하여 이해될 수 있다.
도 1은 데이터 핸들링 시스템을 도시한다.
도 2는 데이터 저장 시스템을 예시한다.
도 3은 데이터 압축 시스템을 제공한다.
도 4는 도 3의 시스템을 이용한 데이터 압축을 예시한다.
도 5a 내지 도 5i는 데이터 매치들의 다양한 런 길이들에 대한 대안적 인코딩 솔루션들을 도시한다.
도 6은 도 5a 내지 도 5i로부터의 데이터를 요약한다.
도 7은 부가적인 청크간 압축 옵션들을 제공한다.
도 8은 다른 데이터 압축 시스템을 예시한다.
도 9는 또다른 데이터 압축 시스템을 도시한다.
도 10은 데이터 압축 시스템을 도시한다.
도 11은 본 발명의 다양한 실시예들에 따라 실행되는 단계들을 예시하는 데이터 압축 루틴을 위한 흐름도이다.
도 2는 데이터 저장 시스템을 예시한다.
도 3은 데이터 압축 시스템을 제공한다.
도 4는 도 3의 시스템을 이용한 데이터 압축을 예시한다.
도 5a 내지 도 5i는 데이터 매치들의 다양한 런 길이들에 대한 대안적 인코딩 솔루션들을 도시한다.
도 6은 도 5a 내지 도 5i로부터의 데이터를 요약한다.
도 7은 부가적인 청크간 압축 옵션들을 제공한다.
도 8은 다른 데이터 압축 시스템을 예시한다.
도 9는 또다른 데이터 압축 시스템을 도시한다.
도 10은 데이터 압축 시스템을 도시한다.
도 11은 본 발명의 다양한 실시예들에 따라 실행되는 단계들을 예시하는 데이터 압축 루틴을 위한 흐름도이다.
본 개시내용은 일반적으로 데이터 압축에 관한 것이다. 원래의 입력 데이터의 크기에 비해 크기가 감소되는 데이터의 인코딩된 출력 스트링을 제공하기 위해 데이터의 입력 스트링을 인코딩함으로써 무손실 데이터 압축이 실행될 수 있다. 크기에 있어서의 이러한 감소는, 입력 스트링 내에서 반복되는(recurring) 패턴들(예컨대, 바이트들)을 식별함으로써, 그리고 이들 후속적으로 발생하는 패턴들을 인덱스 표기법(notation)을 이용하여 나타냄으로써 달성될 수 있다.
예시로서, 입력 스트링 A, B, B, B를 고려한다. 이 스트링은 특정 압축 방법론(methodology)을 이용하여, 인코딩된 출력 스트링(L(A), I(B3))으로서 인코딩될 수 있다. L(A)는 리터럴(literal) 입력 문자 A를 나타내고, I(B3)은 입력 스트링에 문자 B의 3개의 연속적 발생들이 존재함을 나타내는 인덱스(index)이다. 일반적으로, 인덱스가, 인덱스에 의해 나타내지는 리터럴 입력 문자들보다 적은 비트들을 필요로 하는 경우에, 임의의 인코딩된 출력 스트링은 인코딩되지 않은 입력 스트링보다 적은 비트들을 필요로 할 것이다.
상기 예에서, 각각의 리터럴은 8비트들을 필요로 하고, 각각의 인덱스는 16비트들을 필요로 한다고 가정한다. 입력 스트링은 32비트들(4 x 8)이 될 것이고, 압축된 출력 스트링은 24비트들(8 + 16)이 될 것이며, 압축 레이트는 25%(1-24/32)로 계산될 수 있다. 입력 데이터 및 압축 알고리즘에 따라, 예시적인 무손실 압축 레이트들은 대략, 약 10% 내지 50% 또는 이를 초과하여 적을 수 있다.
일반적으로, 히스토리 데이터의 보다 넓은 또는 보다 깊은 캐시의 이용을 통해서와 같이, 입력 데이터를 분석하기 위해 보다 많은 노력이 든다면 보다 양호한 압축 레이트들이 획득될 수 있다. 그러나, 이러한 세분화된 분석들은 경과되는 시간의 측면에서 더 오래 걸릴 수 있으며, 이는 데이터 처리량 레이트들에 부정적으로 영향을 미칠 수 있다. 보다 빠른 속도는 최적의 압축 레이트들 미만으로 제공하는 압축 방식을 이용하여 획득될 수 있다.
데이터 압축의 이들 2개의 목표들, 즉 보다 빠른 처리량 대 압축 효율은 종종 서로 상충한다. 아래에 설명되는 바와 같이, 본 발명의 다양한 실시예들은 일반적으로 단일 데이터 압축 방법론에 있어서의 접근 방식들 양자 모두의 이점들을 얻는 것을 지향한다.
도 1은 일부 실시예들에 따른 데이터 핸들링 시스템(100)의 간략화된 기능적 블록도를 제공한다. 시스템(100)은 도시된 바와 같이 통신하는 개개의 모듈들(102, 104)을 포함한다. 데이터 핸들링 시스템(100) 및 개개의 모듈들(102, 104)은, 이에 제한되는 것은 아니지만 데이터 저장 시스템, 통신 시스템, 데이터 프로세싱 시스템, 개인 컴퓨터 등을 포함하는 임의의 수의 형태들을 취할 수 있다. 데이터의 전송이 반드시 요구되는 것은 아니어서, 모듈(104)은 선택적이다.
도 2는 일부 실시예들에 따른 데이터 저장 시스템(200)을 도시한다. 시스템(200)은 고체 상태 드라이브(SSD)로서 특징지어질 수 있다. 제어기(202)는 호스트 디바이스와의 데이터 전송들의 최상위 레벨 제어를 제공하기 위해 로컬 메모리(204) 내에서의 프로그래밍을 이용한다. 인터페이스 회로(I/F)(206) 및 버퍼(208)는 (플래시 메모리와 같은) 비-휘발성 데이터 저장 어레이를 포함할 수 있는 메인 메모리(210)와 호스트 사이에 데이터 경로를 제공한다. 메인 메모리(210)는 메모리의 다수의 페이지들(211)로서 배열될 수 있다. 페이지들은 페이지 모드 동작에서 기록되거나 그리고/또는 판독될 수 있는, 페이지 당 4096 바이트들과 같은, 메모리 셀들의 로우들(또는 컬럼들)로서 배열될 수 있다.
데이터 압축 엔진(212)은 어레이(210)로의 저장 이전에 입력 데이터를 압축하도록 동작한다. 데이터 압축해제 엔진(214)은 저장된 데이터를 호스트에 대한 검색(retrieval) 이전에 압축해제한다. 각각의 엔진들(212, 214)은 제어기(202)에 의해 이용되는 프로그래밍으로 그리고/또는 하드웨어로 실현될 수 있다.
도 3은 입력 데이터의 스트링에 데이터 압축을 적용하기 위한 일부 실시예들에 따른 데이터 압축 엔진(300)을 도시한다. 엔진(300)은, 메인 메모리 내의 저장 이전에 호스트에 의해 수신되는 데이터의 온-더-플라이(on-the-fly) 압축을 수행하기 위해 도 2의 데이터 저장 시스템(200) 내에서 이용될 수 있지만, 이는 제한적이지 않다.
압축되지 않은 입력 데이터는 입력 버퍼(302)로 스트리밍되고, 압축되어, 다운스트림 전송을 위해 출력 버퍼(304)로 전달된다. 출력 데이터 레이트는 명목상(nominally) 입력 데이터 레이트와 매치하지만, 일부 실시예들에서 출력 레이트는 입력 데이터 레이트와 상이할 수 있다. 하나 또는 그 초과의 콘텐트 어드레서블 메모리들(content addressable memories; CAMs)(308)은 입력 데이터의 히스토리 버퍼를 제공하기 위해 이용된다. CAM 깊이(CAM 내의 엔트리들의 수)는 1024 엔트리들, 4096 엔트리들 등과 같은 임의의 적합한 길이일 수 있다. CAM 내의 보다 큰 엔트리들의 수는 보다 양호한 압축 성능을 제공할 수 있는데, 그 이유는 이전에 발생한 엔트리들에 기초하는 보다 큰 수의 가능한 매치들이 존재할 것이기 때문이다.
CAM 폭(각각의 엔트리 내의 비트들의 수)은 입력 데이터의 임의의 적합한 청크 크기일 수 있다. 본 예에서, 각각의 청크는 입력 데이터의 8-비트 바이트를 이룰 것이다. 데이터의 다른 크기들의 청크들이 소망하는 바에 따라(예컨대, 2-바이트들, 4-바이트들, 12 비트들 등) 선택될 수 있다. 보다 작은 CAM 폭들은 보다 양호한 압축 성능을 촉진할 수 있는데, 그 이유는 보다 적은 수들의 비트들이 보다 높은 수들의 매치들을 제공하는 경향이 있기 때문이다.
입력 바이트들은 어드레스 0(CAM의 제 1 엔트리)에서 시작하여 증분적으로(incrementally) 증가하는 방식으로 CAM 엔트리들로서 연속적으로 부가된다. 일단 CAM이 풀(full)되면, 추가의 엔트리들은 롤링 히스토리(rolling history)를 제공하기 위해 이전에 저장된 데이터를 어드레스 0에서 시작하여 겹쳐쓰기한다(overwrite). CAM 구조 외에 히스토리 버퍼를 형성하기 위해 다른 유형들의 연상 메모리(associative memory)들이 이용될 수 있다.
CAM들 및 다른 연상 메모리들은 CAM 깊이와 관계없이, 단일 클록 사이클에 걸쳐 하나 또는 그 초과의 매치 라인들을 통해 모든 저장된 엔트리들의 동시 검색을 허용하도록 구성된다. 매치 로직(306)은 동일한 클록 사이클 동안 히스토리 버퍼 엔트리들에 대한 다수의 바이트(청크) 매치 동작들을 촉진하기 위해 제공된다. 본 예에서, 클록 사이클 당 네 개(4)의 개별 바이트들이 매치들에 대해 검색될 것으로 고려되지만, 클록 사이클 당 다른 수들의 청크들이 검색될 수 있다.
매치 레지스터들(310)은 입력 바이트들과 히스토리 버퍼 엔트리들 사이의 매치들을 기록하기 위해 이용된다. 길이 레지스터들(312)은 연이은 매치들의 스트링들의 길이들을 기록한다. 매치 및 길이 레지스터들(310, 312) 각각은 연관된 CAM(308)의 깊이와 동일한 깊이를 갖는다. 인코딩 로직(314)은 출력 압축된 데이터를 제공하기 위해 매치 및 길이 레지스터들(310, 312)에 기록된 정보를 이용하도록 동작한다.
다양한 실시예들에 따라, 때때로 매칭 동작은 다수의 대안적 인코딩 솔루션들을 식별할 것이다. 상기 다수의 대안적 인코딩 솔루션들로부터, 인코딩 로직(314)은 다른 대안적 솔루션들과 비교하여 출력 데이터에 보다 적은 수의 비트들을 제공하는 솔루션을 선택할 것이다. 이 방식으로, 개선된 데이터 압출 레이트들을 제공하기 위해 최적의 인코딩 선택들이 이루어질 수 있다.
이 동작을 설명하기 위해, 도 3의 압축 시스템의 관련된 부분들을 도시하는 도 4에 대한 참조가 이루어진다. 데이터는 CAM 어드레스, CAM 엔트리들, 매치 벡터들, 길이 벡터들, 및 출력 데이터 스트링을 포함하는 다양한 컬럼들에 배열된다. 예시적 입력 데이터 시퀀스는 (A, B, C, D, X, A, Y, A, B, C, D, Z...)로서 규정되며, 여기서 시퀀스 내의 각각의 문자는 8-비트 바이트를 나타낸다. 차례로 각각의 문자에 대해, CAM 엔트리들의 검색이 이루어지고, 임의의 매치들 및 연관된 런(run) 길이들이 식별되며, 문자는 CAM에 첨부된다.
도 4로부터 확인할 수 있는 바와 같이, 처음의 5개의 입력들(A, B, C, D, X)에 대해 규명되는(establish) 매치들이 없다. 이들 입력들에 응답하여 발생되는 출력들은 이들 문자들의 리터럴 값들이다. 입력 시퀀스에서의 문자 A의 두 번째 발생은 CAM의 어드레스 5에서 보여진다. 이 두 번째 A는 어드레스 0에서의 첫 번째 A와 CAM 매치를 초래하고, 길이 1의 시퀀스 런을 개시한다. 다음 문자(Y)가 또한 매치를 제공하는지의 여부를 확인하기 위해 출력 스트링은 지연되며, 이는 런 길이가 연장되게 한다. 상기 문자(Y)가 매치를 제공하지 않기 때문에, A 및 Y에 대해 리터럴들이 출력된다.
예시적 압축 방식에서, A의 단일의 두 번째 발생을 나타내기 위해 인덱스를 제공하는 것 보다 리터럴 A를 나타내는 것이 보다 적은 비트들을 필요로 한다는 것을 유의한다. 다른 방식들은 보다 짧은 인덱스들을 제공할 수 있으며, 이 경우에 두 번째 A는 대안적으로, 8 비트들 미만을 이용하는 인덱스에 의해 나타내질 수 있다.
그 다음의 4개의 문자들 A, B, C 및 D는 매치들의 시퀀스를 제공하며; 어드레스 7에서의 A는 어드레스들 0 및 5에서의 A들과 매치하고, 어드레스 8에서의 B는 어드레스 1에서의 B와 매치하고, 어드레스 9에서의 C는 어드레스 2에서의 C와 매치하고, 어드레스 10에서의 D는 어드레스 3에서의 D와 매치한다. 이는 1, 2, 3, 및 4의 증분적인 런들 길이를 제공하며, 이들 매치들이 런의 종결(conclusion)을 계류하는(pending) 동안 출력들이 발생되지 않는다. 어드레스 11에서의 다음 문자 Z는 CAM 매치들을 제공하지 않으며, 따라서 런은 종결되고, 런 ABCD를 나타내기 위해 길이 4의 인덱스가 출력되며, 리터럴 Z가 뒤따른다.
어드레스 7에서의 A에 대한 매치는 CAM 매치(CAM match)로서 식별되는 반면에, 어드레스들 8-10에서의 B, C 및 D에 대한 매치들은 시프트매치(ShiftMatch)들로서 식별된다. 시프트매치 표기법은 진행형(ongoing) 런을 신호하며; 즉 개별 문자들 A, B, C, D의 시퀀스는 입력 데이터에서 듀플리케이트된다(duplicate). 시프트매치 동작은 임의의 길이의 임의의 이전 CAM 매치를 검출하고, 여기서 현재 입력 청크는 다음 위치와 매치하며, 매치 길이를 증분적으로 증가시킨다.
도 4의 간략화된 예에서, CAM 내의 다수의 어드레스들에서의 매치들, 및 CAM 내에 동일한 시퀀스를 다수회 갖는 다수의 시프트매치들을 갖는 것이 가능하다는 것이 확인될 수 있다. 이는 다수의 대안적 인코딩 솔루션들을 초래할 수 있다.
예를 들어, 리터럴 Z가 뒤따르는 ABCD에 대한 길이 4의 인덱스를 출력하는 대신에, 방식은 대안적으로, 리터럴 Z가 뒤따르는 길이 2의 2개의 인덱스들(AB 및 CD)을 출력할 수 있다. 이는 2개의 인덱스들(AB 및 CD)의 결합된 길이가 전체 스트링(ABCD)을 위한 단일의, 보다 긴 인덱스의 길이 미만인 경우에 바람직할 수 있다. 인코딩 로직은, 어느 솔루션이 출력 스트림에 보다 적은 비트들을 제공하는가와 같은, 다수의 인자들에 기초하여 최적의 솔루션을 선택한다. 어느 솔루션이 업커밍(upcoming) 매치 런을 위해 보다 양호한 기회를 제공하는가와 같은, 다른 인자들이 또한 고려될 수 있다.
2개의 매치 레지스터들(도 3, 310)이 CAM 매치들 및 시프트매치들의 추적을 유지하기 위해 이용된다. 제 1 레지스터는 CAM의 깊이와 동일한 크기인 벡터이다. RS로 지칭되는 이 레지스터는 길이에 상관없이 각각의 CAM 매치 또는 시프트매치에 대해 설정될 것이며, 현재 매치 또는 매치 스트링의 위치를 표시한다. 길이 레지스터(들)(312)는 현재 매치 스트링 길이를 표시하는 값들을 저장할 것이다.
개시된 인코딩 방식은, 각각의 사이클에서 다수의 바이트들의 데이터를 프로세싱함으로써 보다 높은 처리량 레이트들을 유지하면서, 보다 작은 폭의 CAM의 고 압축 레이트 성능을 획득한다. 설계는 보다 넓은 CAM에 대해 이용가능하며, 그럼에도 불구하고 단일 클록 사이클에서 임의의 수의 CAM 폭 블록들을 프로세싱하는 것 또한 가능하다. 보다 큰 수의 바이트들이 클록 사이클에서 프로세싱되는 경우 일반적으로 설계가 더 복잡하다.
사이클에서 얼마나 많은 바이트들이 프로세싱되는지와 상관없이, CAM 매치 동작은 프로세싱되는 각각의 바이트에 대해 실행되고, 개별 매치 동작은 바이트들 내에서의 매치들을 검출하기 위해 실행된다. 예를 들어, 인입하는(incoming) 바이트들이 (A, A)인 경우에, CAM 매치는 인입하는 바이트들을 CAM 내의 히스토리 버퍼 엔트리들과 비교하기 위해 실행될 것이다. 부가적인 매치 동작은, 두 번째 바이트가 첫 번째 바이트와 매치하는지를 확인하기 위해 검사할 것이다. 각각의 CAM 매치는 매치 벡터를 생성한다.
각각의 사이클 동안, 시프트매치 동작은 연속적인 런들을 검출하기 위해 실행된다. 사이클 당 2개의 바이트들의 경우에서, 3개의 시프트매치 동작들, RS+1, RS+2, 및 Match0+Match1이 존재할 수 있으며, 여기서 RS+n은 RS 레지스터를 따라 증가(또는 감소)하며, Match0 및 Match1은 각각의 입력 바이트들에 대한 CAM 매치들의 존재(또는 부재)를 표시한다. 관례(convention)에 따라, 매치의 어드레스를 표시하는 부가적인 비트들과 함께, 매치는 논리적 1로 표시될 수 있고, 매치 없음은 논리적 0으로 표시될 수 있다. 부가적으로 또는 대안적으로, 매치된 엔트리의 어드레스의 다중비트 표시가 이용될 수 있다. 매치 및 시프트매치 결과 벡터들은 업데이트된 RS 벡터를 형성하기 위해서 이용될 뿐만 아니라 압축된 출력 스트림에 대한 임의의 인덱스 또는 리터럴들을 발생시키기 위해서 이용된다.
단일 바이트 와이드(wide) 압축으로서 동일한 결과들을 획득하기 위해, 가장 큰 RS+n 매치들이 첫 번째로(예컨대, RS+1 보다는 RS+2) 이용될 수 있으며, 그 후에 임의의 나머지 바이트들(다른 매치 런들과의 시프트매치)의 프로세싱이 뒤따른다.
사이클당 4개의 또는 그 초과의 바이트 동작들의 경우에, 사이클 내에서 프로세싱되는 가외의 바이트들과의 룩 어헤드(look ahead) 동작을 구현하는 능력으로 인해 바이트들을 어떤 순서로 압축할지를 선택하는 것이 가능하다. 상기 논의된 바와 같이, 이는 다수의 대안적 압축 솔루션들을 초래할 수 있다. 룩 어헤드 동작에 기초하여, 보다 작은 RS+n 매치를 취하고, 다음 사이클로 진행하는 2+바이트 매치와의 사이클은 남겨두는 것이 가능하다. 예를 들어, 주어진 4개의 바이트/사이클 동작 동안 아래의 벡터들을 고려한다:
일 바이트/사이클 등가 프로세싱은 Match4 매치가 뒤따르는 RS+3(상기 논의된 바와 같은 가장 큰 RS+n)을 프로세싱하여, 아래의 압축 출력을 초래한다:
대안적 솔루션은 Match3+Match4 매치가 뒤따르는 RS+2를 프로세싱하는 것이 될 것이고, 아래의 압축 출력을 초래한다:
전자의 경우(솔루션(2))에서, 발생된 인덱스는 하나의 보다 긴 바이트의 것이며, 사이클은 단일 길이 매치로 종결된다. 다음 바이트는 연속 매치 (RS+1)를 발생하지 않는 것이 가능하다. 따라서, 연속 매치가 결국 리터럴로서 출력되는 양호한 기회가 존재한다.
후자의 경우(솔루션(3))에서, 인덱스는 하나의 보다 긴 바이트 없이 발생되지만, 사이클은 2개의 길이 매치로 남겨진다. 최악의 경우, 다음 바이트는 매치되지 않음에도 불구하고, 결과는 리터럴 대신 길이 2의 압축이 된다. 따라서, 보다 짧은 솔루션이 선택되고 매치 런을 계속할 기회들이 유지된다.
시스템은 2개의 매치 스트링들을 인코딩하기 위해 이용되는 비트들의 수를 감소시키기 위해 매치 길이 인코딩 정보에 맞춰(around) 최적화하도록 동작한다. 이 최적화는 길이 인코딩에 경계가 존재하는 경우의 각각의 포인트에서 수행될 수 있다. 실제로, 일부 애플리케이션들에서 CAM의 폭을 넘어 연장하는 길이 인코딩(예컨대, 8보다 큰 런들의 길이들)에 대한 리턴의 감손된(diminished) 레이트가 존재할 수 있는 것으로 판단되었다.
도 5a 내지 도 5i는 도 3 및 도 4에 도시된 바와 같은 인코딩 시스템을 이용하는 상이한 시나리오들 하에서 상이한 런 길이들에 대한 가능한 대안적 솔루션들의 일련의 테이블들을 나타낸다. 테이블들은 도 5a의 길이 0의 런들 내지 도 5i의 길이 8의 런들을 예시한다. 예시적 시스템은 인덱스 값들에서 10 비트 포인터를 갖는 1024 엔트리 CAM, 및 선택된 렘펠-지프(Lempel-Ziv)(LZ) 압축 표기법을 이용한다. 상이한 크기의 CAM 및/또는 상이한 압축 표기법(예컨대, 허프만 인코딩 등)이 이용되는 경우에 상이한 솔루션들이 발생할 수 있어서, 테이블들에 나타낸 솔루션들은 예시적이며, 제한되는 것은 아님을 이해할 것이다.
테이블들에서 이용되는 명명법(nomenclature)은 숫자들의 쌍들로서 제공된다. 각각의 쌍에서 첫 번째 숫자는 좌측으로부터 시작하는 매치 스트링 길이이며, 두 번째 숫자는 우측으로부터 시작하는 매치 스트링 길이이다. 예로서, 3 2는, 매치 런 Match0-Match2 및 런 Match2-Match3이 존재함을 표시한다.
어느 솔루션들이 비트들의 전체 숫자들을 제공하는지에 대한 결정들은 다양한 인덱스 길이들 및 리터럴들의 크기에 기초한다. 본 경우에서, 각각의 리터럴은 표현을 위해 9비트들을 구성하는 것으로 고려된다. 인덱스들은 다음과 같이 런의 길이에 기초하여 변화한다:
RS 길이는 현재 매칭 스트링의 길이를 표시한다. 매치(좌, 우)(Match(left, Right))는 각각 좌측으로부터 및 우측으로부터 매치하는 바이트들의 수를 표시한다. 다음 바이트(Next Byte)는 다음 32-비트 입력 값으로부터의 다음 바이트가 이전의 바이트와 매치하는 것을 표시한다. 동작은 RS 및 매치 데이터(Match data)가 인코딩 솔루션들을 위해 결합될 수 있는 2개(또는 그 초과)의 대안적 방식들을 나타낸다. 총 길이/바이트들(Total Length/Bytes) 컬럼은 동작(Operation) 컬럼의 인코딩 솔루션들의 연관된 총 길이들을 나타낸다. 선택(Selection) 컬럼은 가장 짧은 솔루션 다음에 "X"를 위치시키고, 가장 짧은 솔루션을 선택하기 위해 연관된 인코딩 로직에 의한 동작을 나타낸다. 테이블들은 8까지의 RS 길이들에 대한 상세한 대안적 솔루션들을 도시하기 위해 비교적 길다는 것을 이해할 것이다.
도 5a는 RS 길이 0에 대한 엔트리들을 도시한다. 테이블의 제 1 로우는 매치(L, R)(Match(L, R))이 2, 3이고 다음 바이트는 0(즉, 업커밍 데이터에 매치가 존재하지 않음)인 상황을 고려한다. 2개의 개별 인코딩 솔루션들이 식별되며: 제 1 솔루션은 2개의 인덱스들(Index(2), Index(2))을 이용하고, 제 2 솔루션은 인덱스가 뒤따르는 리터럴(Literal, Index(3))을 이용한다. 솔루션들 양자 모두는 상기 제공된 관례에 기초하여 동일한 길이(24 비트들/4 바이트들)의 인코딩된 출력을 제공한다. 따라서, 어느 하나의 솔루션은 길이에 기초하여 선택될 수 있고, 다른 하나의 솔루션은 다른 인자들에 기초하여 다른 솔루션에 우선하여 선택될 수 있다.
도 5a의 테이블의 마지막 로우는 3, 3의 매치(L, R), 및 2+의 다음 바이트(둘 또는 그 초과의 업커밍 바이트들은 현재 매치된 바이트들과 매치함)를 제공한다. 이 경우에, 3개의 대안적 솔루션들이 식별된다. 제 1 솔루션은 Index(3), Index(3+)로서 데이터를 인코딩하는 것이다. 제 2 솔루션은 Index(2), Index(4+)로서 데이터를 인코딩하는 것이다. 제 3 솔루션은 Index(5+)가 뒤따르는 리터럴을 제공하는 것이다. 다른 솔루션들이 또한 존재할 수 있다. 각각의 솔루션은 상이한 총 수들의 비트들을 제공하고, 이때 제 3 대안이 가장 짧다(25/6). 인코더 로직은 이러한 기초로 제 3 솔루션 인코딩 포맷을 선택 및 출력한다. 도 5b 내지 도 5i의 나머지 테이블들은 유사한 방식으로 평가될 수 있다.
도 6은 도 5a 내지 도 5i의 테이블들의 결과들을 요약하는 테이블을 제공한다. New/Old 컬럼은, 최적의 솔루션이 새로운(New) 인코딩(우측 매치 스트링이 우선권을 가짐)에 기초하는지 또는 예전의(Old) 인코딩(좌측 매치 스트링들이 우선권을 가짐)에 기초하는지를 표시한다. 괄호 내의 숫자는 선택된 방식을 이용함으로써, 모든 조합들의 총계의 절약되는 비트들의 수이다.
도 5 내지 도 6의 분석에 부가하여, 이전의 프로세싱된 데이터로부터의 런을 계속하지 않지만, 그럼에도 불구하고 2개의 런들을 포함하는 매치들에 대해 추가의 분석이 수행될 수 있다. 예를 들어, 하나의 런은 Match1-Match2일 수 있고, 다른 것은 Match2-Match3일 수 있다. 다른 예로서, RS+1의 연속 런이 존재할 수 있다. 이러한 유형들의 결과들은 도 7에 예시된다.
도 8은 앞서 말한 유형들의 동작들을 실행하기 위한 일부 실시예들에 따른 다른 압축 시스템(800)을 도시한다. 4개의 개별 물리적 CAM 구조들(802, 804, 806, 및 808)이 각각의 클록 사이클 동안 4개의 입력 바이트들에 대해 CAM 매치들을 동시적으로 실행하기 위해 이용된다. 매치들은 상술한 바와 같은 레지스터들 및 매치 로직을 이용하여 축적된다. 결과적인 매치 및 런 길이 벡터들은 인코딩 로직(810)에 공급되고, 상기 인코딩 로직(810)은 다양한 압축 솔루션들을 식별하고 다수의 솔루션들이 주어진 세트의 입력 바이트들에 대해 이용가능한 경우에 최적의 솔루션을 선택하도록 동작한다. CAM들의 각각은 동일한 크기이고, 히스토리 데이터는 각각의 사이클의 종료시 각각에 동시적으로 로딩된다. 도 8은 하드웨어 기반 솔루션이지만, 인코딩 로직은 하드웨어 또는 펌웨어에서 구현될 수 있다. 4개의 CAM 구조들이 도시되었지만 필요에 따라 임의의 수 n개의 CAM 구조들이 이용될 수 있다.
도 9는 펌웨어(또는 소프트웨어)로 실현되는 다른 압축 시스템(900)을 도시한다. 도 9에서, 쿼드-코어 프로세서(902)는 도 8의 매칭 및 분석 기능들을 동시적으로 실행하도록 개별적으로 동작하는 개개의 코어들(904, 906, 908, 및 910)을 갖는다. 매칭 능력들을 갖는 로컬 캐시 또는 로컬 메모리와 같은 코어 메모리(912)는 CAM 엔트리들 및 벡터들을 저장한다. 히스토리 데이터의 단일 세트, 또는 히스토리 데이터의 다수의 듀플리케이트 세트들은, 메모리가 각각의 코어들에 매핑되고 상기 각각의 코어들에 의해 액세스되는 방식에 기초하여 코어 메모리(912)에 유지될 수 있다. 이 설계는 최대 코어 프로세서 클록 속도로 런할 수 있는 비교적 강력한 인코딩 솔루션을 제공한다.
히스토리 데이터를 저장하기 위해 이용되는 CAM 또는 다른 연상 메모리 구조의 설계는 다양한 형태들을 취할 수 있다. 일부 실시예들은 1 바이트의 CAM 폭 및 1024 엔트리들의 CAM 깊이를 이용한다. 도 8에 도시된 바와 같이 4개의 개별 CAM들이 이용될 수 있거나, 또는 동일한 엔트리들에 대한 개별 매치 라인들의 이용을 통해서와 같이 다수의 동시적 검색들을 촉진하기 위해 단일 CAM이 이용될 수 있다. 다수의 엔트리들을 동시적으로 그리고 적합한 순서로 업데이트하는 능력은 프로세싱에서의 지연들을 감소시킨다.
적어도 일부 실시예들에서, 매칭 로직은 각각의 검색 바이트에 대해 듀플리케이트될 것이며, 각각의 매칭 로직은 바이트가 CAM 내의 데이터와 매치하는 경우를 표시하는 개개의 1024-비트 벡터를 발생시킬 것이다. 매칭 로직은 추가로, 다양한 바이트들 가운데서 바이트-간 매치 검색들을 촉진할 것이다. 예를 들어, 빈(empty) CAM이 존재하는 경우에, 기록 어드레스는 0이고, 입력 데이터 스트링 바이트들은 (A, B, A, B)이며, 첫 번째 2개의 바이트들은 제로 매칭 벡터를 가질 수 있다. 마지막 2개의 바이트들은 초기에 제로 매칭 벡터를 갖지만, 기록 어드레스에 기초하여 각각 매치 위치들 0 및 1로 업데이트될 것이다. 이는 현재 길이 2를 갖는 스트링의 시작으로서 종료할 것이다.
일단 4개의 각각의 매칭 벡터들이 생성되면, 이들은 압축 스트링들을 위한 매칭 런들을 결정하기 위해 RS 벡터와 함께 이용된다. 이들 런들은 RS+Match0 내지 RS+Match4까지 포함하지만(모든 4개의 매치들은 스트링을 계속함), 새로운 데이터 세트들로부터의 길이 2, 3, 또는 4일 수 있는 새로운 런들을 또한 포함한다. 이들 런들 모두는 런들의 위치를 표시하기 위해 개개의 새로운 런 벡터들로서 식별된다. 런들 모두의 매칭이 완료된 이후, 결과적인 벡터들은 압축 출력을 발생시키기 위해 이용된다.
32-비트 프로세싱 코어를 이용한 일부 실시예들에서, 사이클 내의 인코딩들의 최대 수는 5일 것이며, 이때 최대 2개의 인덱스들 또는 최대 5개의 리터럴들이다. 인덱스들은 항상 동일한 위치들에 있는 것은 아니지만, 거의, 첫 번째 3개의 위치들에서의 임의의 조합에 있을 수 있다. 미리-계류중인(pre-pended) 리터럴 표시자를 갖는 바로 그 입력 비트에 다수의 리터럴들을 갖는 것이 일반적일 수 있다. 리터럴들 및 인덱스들의 위치들이 혼합(mix)될 수 있기 때문에, 2개의 인덱스 인코더들을 갖고 다음으로, 출력이 어느 위치에 위치되는지의 어떠한 표시를 갖는 것이 유리할 수 있다. 부가하여, 출력 스트림에 대한 리터럴들의 첨부를 신호하기 위해 유효한 신호를 위한 준비(provision)가 존재할 수 있다. 인코딩 로직은 인덱스/리터럴 인코더 출력을 취할 수 있고, 32-비트 또는 64-비트 출력 스트림으로서 출력을 위한 시프팅 레지스터로의 순서를 셔플(shuffle)할 수 있다.
타이밍의 이유들로, CAM(들)을 하나의 스테이지로서, 인코더들 및 셔플 로직을 제 2 스테이지로서, 그리고 출력 버퍼에 대한 시프터(예컨대, FIFO)를 제 3 스테이지로서 배열하는 것이 효율적일 수 있다. 이는 인덱스 인코더 로직으로부터 CAM 타이밍 경로 로직의 모두를 분리시킬 것이며, 동작을 파이프라인(pipeline)하기 위해 단지 약 60 개의 플롭(flop)들만을 필요로 할 수 있다.
이전에 압축된 데이터의 압축해제는 임의의 수의 적합한 방식들로 실행될 수 있다. 최대 2개의 인덱스들 및 4개의 리터럴들을 갖는 사이클에서 4개까지의 값들을 지원할 수 있는 파이프라인 구조가 제공될 수 있다. 첫 번째 3개의 위치들 중 임의의 위치에 인덱스들을 갖는 것이 가능하다. 도 10에 1000으로 도시된 바와 같은 다중-스테이지 디코더가 이용될 수 있다.
디코더(1000)에서의 제 1 스테이지는 입력 시프트 레지스터(1002)를 구성한다. 레지스터는 인입하는 데이터를 수신하여 상이한 디코더들에 대해 연속적인 스트림으로 결합한다. 이 스테이지는 플롭핑(flopping) 스테이지로서 특징지어질 수 있다. 결합적인 로직 스테이지(1004)는 시프트 레지스터(1002)로부터 데이터를 수신하고 주어진 사이클에서 4개까지의 인덱스들 및 리터럴들(임의의 혼합)을 디코딩하기 위해 이용된다. 이 스테이지의 출력은 표시자, 포인터 및 길이, 또는 표시자 및 바이트일 것이다.
제 2 시프트 레지스터(1006)는 디코더의 제 3 스테이지를 구성한다. 레지스터(1006)는 8개의 엔트리들을 저장하도록 구성될 수 있고, 여기서 각각의 엔트리는 로직 스테이지(1004)로부터의 가장 큰 출력을 핸들링하기에 충분히 크다. 이는 디코딩된 값들을 로직의 나머지에 의한 이용을 위해 고정 크기의 청크들로 분할한다. 이 스테이지는 또한 플롭핑 스테이지이다.
하드웨어 또는 펌웨어로 실현될 수 있는 복원 모듈(reconstruction module)(1008)은 시프트 레지스터(1006)로부터 한번에 4개까지의 엔트리들을 수신하고 인덱스들에 대해 메모리 룩-업을 수행하거나 리터럴들에 대해 바이트를 출력 버퍼(1010)로 이동시킨다. 모듈(1008)은 각각의 동작 동안 이동해 나가는(move out) 4개의 바이트들 모두의 기록을 지원하고, 얼마나 많은 아이템들이 소비되는가를 업스트림 시프트 레지스터(1006)에 표시한다. 각각의 사이클에서 4개의 독립 판독들 및 4개의 독립 기록 동작들을 지원하는 디코더 메모리(1012)가 또한 제공될 수 있다. 이 메모리는 플롭 기반 어레이로서 구현될 수 있다.
도 11은 본 발명의 다양한 실시예들에 따라 수행되는 단계들을 예시하는 데이터 압축 루틴(1100)에 대한 흐름도를 제공한다. 루틴은 도 1 내지 도 3 및 도 8 내지 도 9의 환경들을 포함하는 임의의 수의 환경들에서 실행될 수 있다. 단계(1102)에서, 입력 스트링으로부터의 데이터는 입력 버퍼에 일시적으로 저장되고 상기 입력 버퍼에서 이용가능해진다. 데이터는 8-비트 바이트들과 같은 고정-크기 청크들로 분할된다. 4개와 같은, 선택된 수의 연속적 청크들(바이트들)은 단계(1104)에서 입력 스트링으로부터 식별된다.
선택된 청크들은, 상술된 바와 같은 방식으로, CAM 매치들, 시프트매치들 및 런 길이들(RS 벡터들)을 식별하기 위해 히스토리 버퍼를 검색하기 위해 단계(1106)에서 이용되며, 단일 클록 사이클에 걸쳐 실행된다. 단계(1106)의 검색 이후에, 선택된 청크들은 단계(1108)에서 새로운 엔트리들로서 히스토리 버퍼에 첨부되고, 그 이후에 청크들이 새로운 데이터로 겹쳐쓰기될 때까지 연속적 청크 검색들을 위해 검색 모집단(search population)의 일부분이 될 것이다.
적어도 3개의 대안적 상황들이, 단계(1106) 동안 실행되는 검색으로부터 생겨날 것으로 고려되며; 단계(1110)에 의해 식별되는 바와 같이 매치들 또는 런들이 존재하니 않는다는 사실에 기초하여 인코딩 솔루션이 식별되지 않을 것이며; 단계(1112)에 의해 식별되는 바와 같이, 단일 인코딩 솔루션이 식별되거나, 또는 단계(1114)에 의해 식별되는 바와 같이, 다수의 대안적 인코딩 솔루션들이 식별될 것이다. 진행형 런이 검출되는 경우에, 시스템은 다음 세트의 청크들이 인가될 때까지 인코딩을 지연시키도록 선택할 수 있다. 여기서의 목적들을 위해, 리터럴 입력 데이터를 출력하는 것은 인코딩 솔루션을 구성하지 않으며; 오히려, 여기서의 목적들을 위해 각각의 인코딩 솔루션은 입력 리터럴 데이터를 인코딩하는 적어도 하나의 인덱스를 포함하는 것으로 이해될 것이다. 이러한 인코딩은 어드레스 및 대응하는 리터럴(들)과 연관된 길이 데이터를 포함할 수 있다.
다수의 대안적 인코딩 솔루션들이 존재하는 경우에, 흐름은 단계(1114)로부터 단계(1116)로 나아가며, 여기서 보다 적은 비트들의 압축된 데이터를 제공하는 인코딩 솔루션이 선택되며, 그 이후에 데이터는 단계(1118)에서 인코딩된다. 그 다음에 루틴은 입력 데이터 청크들의 다음 그룹핑을 분석하기 위해 단계(1104)로 되돌아(back) 나아가며, 모든 데이터가 압축될 때까지 계속하며, 시퀀스 종료(end of sequence; EOS) 마커(marker)가 첨부된다.
상기 제시된 다양한 실시예들이 향상된 데이터 압축 성능을 제공할 수 있음이 이제 명백할 것이다. 임의의 수의 상이한 스타일들의 압축 표기법이 이용될 수 있으며, 압축은 임의의 크기의 청크들로 확장될 수 있다. SSD의 환경에서, 압축된 데이터는, 메모리 셀들의 이용가능한 페이지들(예컨대, 로우들)을 따라 랩핑되는 가변 길이 압축된 LBA들을 제공하기 위해 LBA 기초로 실행될 수 있다. 데이터의 압축 및 압축해제는 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 다양한 조합들에서 실행될 수 있다. 32-비트 펌웨어 솔루션을 위한 의사코드(pseudocode)의 예시적 리스팅이 다음과 같이 제공된다:
32-비트 최적화된 의사코드
Claims (20)
- 방법으로서,
고정-크기 청크(chunk)들로 배열되는 데이터 비트들의 입력 스트링을 수신하는 단계;
단일 클록 사이클 동안 상기 입력 스트링의 다수의 연속적 청크들을 상기 입력 스트링의 이전에 수신된 청크들과 비교하는 단계;
상기 비교하는 단계 동안 획득된 매치들에 기초하여 적어도 2개의 대안적 인코딩 솔루션들을 식별하는 단계; 및
상기 출력 스트링에 보다 적은 수의 비트들을 획득하는 상기 적어도 2개의 대안적 인코딩 솔루션들 중 선택된 하나를 이용하여 압축된 출력 스트링을 형성하기 위해 상기 입력 스트링을 압축하는 단계
를 포함하는,
방법. - 제 1 항에 있어서,
상기 식별하는 단계의 상기 적어도 2개의 대안적 인코딩 솔루션들의 각각은, 상기 입력 스트링의 청크의 이전 발생에 기초하여 연관된 길이 값 및 연관된 어드레스 값을 인코딩하는 인덱스를 포함하며,
상기 적어도 2개의 대안적 인코딩 솔루션들의 각각은 상기 입력 스트링의 데이터 비트들의 동일한 세트를 인코딩하는,
방법. - 제 1 항에 있어서,
상기 이전에 수신된 청크들은 히스토리 버퍼에 저장되고,
상기 비교하는 단계는 상기 단일 클록 사이클의 종결(conclusion)에서 상기 히스토리 버퍼에 상기 다수의 연속적 청크들을 첨부(append)하는 단계를 더 포함하는,
방법. - 제 1 항에 있어서,
상기 비교하는 단계는 상기 다수의 연속적 청크들의 각각의 선택된 하나를 상기 다수의 연속적 청크들의 각각의 나머지 하나와 비교하는 단계를 더 포함하는,
방법. - 제 1 항에 있어서,
상기 이전에 수신된 청크들을 적어도 하나의 연상 메모리(associative memory)에 저장하는 단계 및 상기 다수의 연속적 청크들과의 매치들에 대해 상기 적어도 하나의 연상 메모리 내의 상기 이전에 수신된 청크들을 동시적으로 검색하기 위해 매치 로직을 이용하는 단계를 더 포함하는,
방법. - 제 1 항에 있어서,
상기 비교하는 단계의 상기 다수의 연속적 청크들은 n개의 청크들을 이루고, 여기서 n은 1보다 크며,
상기 방법은,
상기 이전에 수신된 청크들의 사본들(duplicate copies)을 n개의 연상 메모리들에 동시적으로 저장하는 단계 및 상기 n개의 연상 메모리들 중 개개의 연상 메모리에서 상기 n개의 청크들의 각각의 동시적 검색을 실행하는 단계를 더 포함하는,
방법. - 제 6 항에 있어서,
상기 비교하는 단계의 상기 다수의 연속적 청크들은 n개의 청크들을 이루고, 여기서 n은 1보다 크며,
상기 방법은,
상기 n개의 청크들의 선택된 하나의 매치들을 동시적으로 검색하는 각각의 프로세싱 코어를 갖는 n개의 프로세싱 코어들을 갖는 n개의 코어 프로세서를 더 포함하는,
방법. - 제 1 항에 있어서,
각각의 청크는 데이터 비트들의 입력 스트링의 8-비트 바이트를 이루는,
방법. - 제 1 항에 있어서,
상기 압축된 출력 스트링을 압축해제하는 단계를 더 포함하는,
방법. - 장치로서,
데이터 비트들의 입력 스트링의 이전에 수신된 청크들을 저장하는 메모리;
단일 클록 사이클 동안 상기 입력 스트링의 다수의 연속적 청크들을 상기 이전에 수신된 청크들과 비교하는 매치 모듈; 및
상기 매치 모듈에 의해 획득된 매치들에 기초하여 적어도 2개의 대안적 인코딩 솔루션들을 식별하며, 상기 출력 스트링에 보다 적은 수의 비트들을 획득하는 상기 적어도 2개의 대안적 인코딩 솔루션들 중 선택된 하나를 이용하여 압축된 출력 스트링을 형성하기 위해 상기 입력 스트링을 압축하는 인코딩 모듈
을 포함하는,
장치. - 제 10 항에 있어서,
상기 메모리는 상기 매치 모듈에 의해 동시적으로 검색가능한 매치 라인들을 갖는 연상 메모리이고,
상기 메모리는 상기 입력 스트링의 롤링 히스토리(rolling history)를 저장하며,
상기 장치는,
상기 다수의 연속적 청크들을 상기 롤링 히스토리에 첨부하는 기록 모듈을 더 포함하는,
장치. - 제 10 항에 있어서,
상기 인코딩 모듈은, 상기 메모리의 전체 깊이와 동일한 전체 깊이를 각각 갖는 구동 길이 벡터 및 매치 벡터를 발생시키는,
장치. - 제 10 항에 있어서,
상기 인코딩 모듈에 의해 식별된 상기 적어도 2개의 대안적 인코딩 솔루션들의 각각은, 상기 입력 스트링의 청크의 이전 발생에 기초하여 연관된 길이 값 및 연관된 어드레스 값을 인코딩하는 인덱스를 포함하는,
장치. - 제 10 항에 있어서,
상기 매치 모듈은, 상기 다수의 연속적 청크들의 각각의 선택된 하나를 상기 다수의 연속적 청크들의 각각의 나머지 하나와 추가로 비교하는,
장치. - 제 10 항에 있어서,
상기 다수의 연속적 청크들은 n개의 청크들을 이루고, 여기서 n은 1보다 크며,
상기 메모리는 상기 이전에 수신된 청크들의 사본들을 저장하는 n개의 연상 메모리들을 포함하며,
상기 매치 모듈은 상기 n개의 청크들 중 상이한 하나에 대해 상기 n개의 연상 메모리들의 각각을 개별적으로 검색하는,
장치. - 제 10 항에 있어서,
상기 매치 모듈 및 상기 인코딩 모듈은, 제 2 메모리에 저장되고 프로그램가능 제어기에 의해 실행되는 프로그래밍으로서 실현되는,
장치. - 제 16 항에 있어서,
상기 프로그램가능 제어기는 복수의 프로세싱 코어들을 포함하는 다중-코어 프로세서로서 특징지어지고, 각각의 코어는 상기 메모리 내의 상기 n개의 청크들 중 상이한 하나에 대해 개별적으로 검색하도록 동작하는,
장치. - 제 10 항에 있어서,
상기 인코딩 로직은 상기 입력 스트링의 동일한 비트들에 대해 제 1 인코딩 솔루션 및 제 2 인코딩 솔루션을 개별적으로 발생시키고,
상기 제 1 인코딩 솔루션은 비트들의 제 1 총 수 및 인덱스를 포함하고,
상기 제 2 인코딩 솔루션은 비트들의 상기 제 1 총 수 미만의 비트들의 제 2 총 수 및 인덱스를 포함하며,
상기 인코딩 모듈은 상기 제 2 인코딩 솔루션을 선택하는,
장치. - 제 10 항에 있어서,
압축된 데이터 스트링을 수신하는 입력 시프트 레지스터, 단일 클록 사이클 동안 상기 압축된 데이터 스트링 내의 복수의 인덱스들 및 리터럴(literal)들을 디코딩하는 결합적(combinatorial) 로직 스테이지, 상기 결합적 로직으로부터의 디코딩된 값들을 고정 크기 청크들로 저장하는 제 2 시프트 레지스터, 및 상기 입력 스트링을 출력하기 위해 인덱스들에 대해 메모리 룩-업(look-up)들을 수행하고 리터럴들에 대해 바이트들을 시프트하는 복원(reconstruction) 모듈을 포함하는 다중-스테이지 압축해제 엔진을 더 포함하는,
장치. - 제 10 항에 있어서,
상기 압축된 출력 스트링을 비-휘발성 메모리의 페이지에 저장하는 고체 상태 드라이브로서 특징지어지는,
장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/611,572 US8013762B2 (en) | 2009-11-03 | 2009-11-03 | Evaluating alternative encoding solutions during data compression |
US12/611,572 | 2009-11-03 | ||
PCT/US2010/055238 WO2011062764A1 (en) | 2009-11-03 | 2010-11-03 | Evaluating alternative encoding solutions during data compression |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20120115244A true KR20120115244A (ko) | 2012-10-17 |
KR101737451B1 KR101737451B1 (ko) | 2017-05-18 |
Family
ID=43434544
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127014516A KR101737451B1 (ko) | 2009-11-03 | 2010-11-03 | 데이터 압축 동안의 대안적 인코딩 솔루션들 평가 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8013762B2 (ko) |
KR (1) | KR101737451B1 (ko) |
WO (1) | WO2011062764A1 (ko) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8749409B2 (en) * | 2006-08-25 | 2014-06-10 | Sony Computer Entertainment Inc. | Entropy decoding methods and apparatus using most probable and least probable signal cases |
US9058675B2 (en) * | 2010-05-29 | 2015-06-16 | Intel Corporation | Non-volatile storage for graphics hardware |
US8824569B2 (en) | 2011-12-07 | 2014-09-02 | International Business Machines Corporation | High bandwidth decompression of variable length encoded data streams |
US9148172B2 (en) | 2012-06-22 | 2015-09-29 | Micron Technology, Inc. | Data compression and management |
US9374106B2 (en) | 2013-08-28 | 2016-06-21 | International Business Machines Corporation | Efficient context save/restore during hardware decompression of DEFLATE encoded data |
US8933824B1 (en) | 2013-08-28 | 2015-01-13 | International Business Machines Corporation | Hardware decompression of deflate encoded data with multiple blocks |
US9800640B2 (en) | 2013-10-02 | 2017-10-24 | International Business Machines Corporation | Differential encoder with look-ahead synchronization |
US10102215B2 (en) * | 2015-03-27 | 2018-10-16 | Intel Corporation | Apparatus for hardware implementation of lossless data compression |
US9537504B1 (en) * | 2015-09-25 | 2017-01-03 | Intel Corporation | Heterogeneous compression architecture for optimized compression ratio |
US9864549B2 (en) | 2016-02-29 | 2018-01-09 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for high throughput multi-input compression |
US9628109B1 (en) | 2016-06-28 | 2017-04-18 | International Business Machines Corporation | Operation of a multi-slice processor implementing priority encoding of data pattern matches |
CN106788447B (zh) * | 2016-11-29 | 2020-07-28 | 苏州浪潮智能科技有限公司 | 一种lz77压缩算法的匹配长度输出方法及装置 |
US12086414B2 (en) | 2022-10-06 | 2024-09-10 | Macronix International Co., Ltd. | Managing content addressable memory devices |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2077271C (en) | 1991-12-13 | 1998-07-28 | David J. Craft | Method and apparatus for compressing data |
US5339076A (en) | 1992-04-27 | 1994-08-16 | Integrated Information Technology | Data compression using content addressable memory |
US5469161A (en) | 1992-08-13 | 1995-11-21 | International Business Machines Corporation | Algorithm for the implementation of Ziv-Lempel data compression using content addressable memory |
US5450562A (en) | 1992-10-19 | 1995-09-12 | Hewlett-Packard Company | Cache-based data compression/decompression |
US5635932A (en) * | 1994-10-17 | 1997-06-03 | Fujitsu Limited | Lempel-ziv compression with expulsion of dictionary buffer matches |
US5771010A (en) * | 1995-03-22 | 1998-06-23 | Ibm Corporation | Apparatus for compressing data using a Lempel-Ziv-type algorithm |
US5612878A (en) | 1995-06-22 | 1997-03-18 | Joao; Raymond A. | Apparatus and method for motor vehicle anti-theft and/or theft deterrence |
US5729228A (en) | 1995-07-06 | 1998-03-17 | International Business Machines Corp. | Parallel compression and decompression using a cooperative dictionary |
US5694125A (en) | 1995-08-02 | 1997-12-02 | Advance Hardware Architecture | Sliding window with big gap data compression system |
US5771011A (en) | 1996-07-15 | 1998-06-23 | International Business Machines Corporation | Match detect logic for multi-byte per cycle hardware data compression |
US5875454A (en) | 1996-07-24 | 1999-02-23 | International Business Machiness Corporation | Compressed data cache storage system |
US6037883A (en) * | 1998-05-07 | 2000-03-14 | Microsoft Corporation | Efficient memory usage for two-pass compression |
JP3541930B2 (ja) * | 1998-08-13 | 2004-07-14 | 富士通株式会社 | 符号化装置及び復号化装置 |
US6597812B1 (en) | 1999-05-28 | 2003-07-22 | Realtime Data, Llc | System and method for lossless data compression and decompression |
US6392567B2 (en) * | 2000-03-31 | 2002-05-21 | Fijitsu Limited | Apparatus for repeatedly compressing a data string and a method thereof |
WO2002015408A2 (en) * | 2000-08-15 | 2002-02-21 | Seagate Technology Llc | Dual mode data compression for operating code |
CN1262972C (zh) | 2000-09-28 | 2006-07-05 | 罗克马诺尔研究有限公司 | 改进的霍夫曼数据压缩方法 |
US6657565B2 (en) | 2002-03-21 | 2003-12-02 | International Business Machines Corporation | Method and system for improving lossless compression efficiency |
GB0210604D0 (en) | 2002-05-09 | 2002-06-19 | Ibm | Method and arrangement for data compression |
GB0213687D0 (en) | 2002-06-14 | 2002-07-24 | Ibm | Multi-byte lempel-ziv 1 (LZ1) decompression |
DE60316171T2 (de) | 2002-10-28 | 2008-05-29 | SanDisk Corp., Milpitas | Automatischer abnutzungsausgleich in einem nicht-flüchtigen speichersystem |
US7315917B2 (en) | 2005-01-20 | 2008-01-01 | Sandisk Corporation | Scheduling of housekeeping operations in flash memory systems |
US7215259B2 (en) * | 2005-06-03 | 2007-05-08 | Quantum Corporation | Data compression with selective encoding of short matches |
US7180433B1 (en) | 2005-09-22 | 2007-02-20 | Tandberg Storage Asa | Fast data compression and decompression system and method |
US7623047B2 (en) * | 2007-10-30 | 2009-11-24 | Hewlett-Packard Development Company, L.P. | Data sequence compression |
-
2009
- 2009-11-03 US US12/611,572 patent/US8013762B2/en not_active Expired - Fee Related
-
2010
- 2010-11-03 KR KR1020127014516A patent/KR101737451B1/ko active IP Right Grant
- 2010-11-03 WO PCT/US2010/055238 patent/WO2011062764A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US8013762B2 (en) | 2011-09-06 |
WO2011062764A1 (en) | 2011-05-26 |
KR101737451B1 (ko) | 2017-05-18 |
US20110102207A1 (en) | 2011-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101737451B1 (ko) | 데이터 압축 동안의 대안적 인코딩 솔루션들 평가 | |
US20180203797A1 (en) | Compression and Decompression of Data at High Speed in Solid State Storage | |
CN112615628B (zh) | 硬件友好地数据压缩 | |
CN107111623B (zh) | 用于基于词典的压缩的并行历史搜索和编码 | |
US7215259B2 (en) | Data compression with selective encoding of short matches | |
JP5498783B2 (ja) | データ圧縮の方法 | |
US20090058693A1 (en) | System and method for huffman decoding within a compression engine | |
US8933828B2 (en) | Using variable encodings to compress an input data stream to a compressed output data stream | |
US8937563B2 (en) | Using variable length encoding to compress an input data stream to a compressed output data stream | |
JP6009676B2 (ja) | データ圧縮装置およびデータ伸張装置 | |
WO2009009599A2 (en) | Multipass embedded residual group encoding | |
US7253752B2 (en) | Coding apparatus, decoding apparatus, coding method, decoding method and program | |
US12001339B2 (en) | Dictionary compression device and memory system | |
US11742876B2 (en) | Compression device and decompression device | |
US11461008B2 (en) | Memory system for improving compression performance of a dictionary coder circuit | |
US20090292699A1 (en) | Nucleotide and amino acid sequence compression | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
US6765513B2 (en) | Decoding bit streams compressed with compression techniques employing variable length codes | |
Vasanthi et al. | Implementation of Robust Compression Technique Using LZ77 Algorithm on Tensilica's Xtensa Processor | |
JP2023039698A (ja) | データ圧縮装置およびメモリシステム | |
JP2023132713A (ja) | データ伸張装置、メモリシステム、およびデータ伸張方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |