KR101866151B1 - 적응형 레이트 압축 해시 프로세싱 디바이스 - Google Patents

적응형 레이트 압축 해시 프로세싱 디바이스 Download PDF

Info

Publication number
KR101866151B1
KR101866151B1 KR1020177006488A KR20177006488A KR101866151B1 KR 101866151 B1 KR101866151 B1 KR 101866151B1 KR 1020177006488 A KR1020177006488 A KR 1020177006488A KR 20177006488 A KR20177006488 A KR 20177006488A KR 101866151 B1 KR101866151 B1 KR 101866151B1
Authority
KR
South Korea
Prior art keywords
literal
hash
buffer
input file
hash chain
Prior art date
Application number
KR1020177006488A
Other languages
English (en)
Other versions
KR20170040343A (ko
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 KR20170040343A publication Critical patent/KR20170040343A/ko
Application granted granted Critical
Publication of KR101866151B1 publication Critical patent/KR101866151B1/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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • G06F17/30097
    • G06F17/30138
    • G06F17/30153
    • 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
    • H03M7/3086Compression; 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
    • 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

Abstract

선행 리터럴 세트에 대해서 리터럴 세트를 참조하는 해시 알고리즘에 따라서 입력 파일을 처리하여 복사-오프셋 명령을 생성한다. 선행 인스턴스는 리터럴 세트의 해시를 생성하고 또한 해시 테이블의 대응하는 엔트리를 검색하여 식별된다. 해시 테이블은 검색 요청을 FIFO 버퍼 내에 위치시키는 것에 의해서 액세스될 수 있다. FIFO 버퍼가 찬 경우, 해시 체인은 더 이상 차지 않기 전까지는 그 생성이 중단된다. 반복된 문자가 발견되면, 해시 체인의 생성도 마찬가지로 중단된다. 해시 체인을 사용하여, 예를 들어 LZ 알고리즘과 같은 명령 파일을 생성한다. 연속적인 문자의 런(run)은 런 렝스(run-length) 명령으로 대체된다. 명령 파일은 이후에 허프만 코딩을 사용하여 부호화될 수 있다.

Description

적응형 레이트 압축 해시 프로세싱 디바이스{ADAPTIVE RATE COMPRESSION HASH PROCESSING DEVICE}
관련 출원들
본 출원은 2014년 8월 12일에 출원되고, 발명의 명칭이 적응형 레이트 압축 해시 프로세서(Adaptive Rate Compression Hash Processor)인, 미국 가출원 제62/036,453호에 대한 혜택을 청구한다.
본 발명은 데이터 압축 시스템 및 방법에 관한 것이다.
소프트웨어 압축은 매우 잘 알려져 있고 또한 GZIP과 같은 프로그램에 대한 소스 코드는 공유되어 쉽게 접할 수 있다. GZIP 압축이 DEFLATE[2] 알고리즘 및 허프만 코딩(Huffman coding)[3]에 기초한다는 것을 고려하면 압축 구현 알고리즘은 고대역폭 애플리케이션용 하드웨어에서 실행하기 비교적 까다롭다. 압축의 배경이 되는 아이디어는 데이터 스트림에서 이전에 나타나는 데이터 스트림에서 나중에 복사 명령을 사용하는 것이다. 이와 같이 모든 압축 구현은 탐색 이력 버퍼 및 복사 명령에 사용될 수 있는 가장 긴 길이를 결정하기 위한 몇몇 유형의 길이 비교 함수를 필요로 한다. 이전의 이력에 일치하는 탐색을 구현하는 하나의 방법은 가변 길이 스트링을 압축되는 데이터 스트림을 비교하는 데 사용될 수 있는 고정값으로 매핑하는 해시 함수를 구현하는 것이다.
도 1은 GZip 압축 알고리즘의 하드웨어 기능 블록도를 나타낸다. 입력 데이터(102)는 예를 들면, LZ7/LZ78 알고리즘을 구현하는 모듈(108)의 해시 모듈(104)에 의해서 해시된다. 해시된 데이터는 렘펠-지브(Lempel-Ziv)[4] 알고리즘 또는 이에 필적하는 알고리즘에 따라 LZ CMD 모듈(108)에 의해서 복사 또는 리터럴 명령(literal command)을 생성하기 위해 비교된다. 압축될 데이터에 대한 통계가 수집되면, 이들은 허프만 인코딩되고 이후에 압축되어 압축된 출력 데이터(110)로서 외부로 전송된다.
본 명세서에 개시된 시스템 및 방법은 개선된 입력 데이터 해시 방법을 제공한다.
[1]. J. Gailly 및 M. Adler, GZIP: The Data Compression Program, 1993, http://www.gzip.org/. [2] DEFLATE Compressed Data Format Specification version 1.3. IETF. 1996. 5. p. 1. sec. Abstract. RFC 1951. 11. 11 발췌. [3] D. A. Huffman, "A method for the construction of minimum-redundancy codes" Proc. IRE 40 (9). pp. 1098-1101. 1952. [4] Ziv, J.; Lempel, A. (1978). "Compression of individual sequences via variable-rate coding". IEEE Transactions on Information Theory 24 (5): 530.
본 발명의 이점을 쉽게 이해되게 하기 위해, 첨부 도면에 도시된 구체적인 실시예를 참조하여 간단하게 상술한 본 발명에 대한 보다 상세한 설명이 제공될 것이다. 이들 도면은 본 발명의 단지 전형적인 실시예를 도시하고 따라서 이들이 본 발명의 범위를 제한하는 것으로 간주되어서는 안된다는 것을 이해하면서, 다음 첨부 도면을 사용하여 더욱 구체적이고 상세하게 본 발명을 설명할 것이다.
도 1은 종래 기술에 따른 압축 기법을 구현하기 위한 컴포넌트의 개략적인 블록도이다;
도 2는 본 발명의 실시예에 따른 해시 및 해시 체인의 생성을 도시한 도해이다;
도 3은 본 발명의 실시예에 따른 해시 체인 생성을 위한 방법의 프로세스 흐름도이다;
도 4는 본 발명의 실시예에 따른 해시를 구현하기 위한 회로의 개략적인 블록도이다;
도 5는 본 발명의 실시예에 따른 해시 억제(hash suppression)를 구현하기 위한 디바이스의 개략적인 블록도이다;
도 6은 본 발명의 일 실시예에 따른 해시 억제 방법의 프로세스 흐름도이다;
도 7은 본 발명의 실시예에 따른 방법을 구현하기에 적합한 컴퓨터 시스템의 개략적인 블록도이다.
본 발명의 컴포넌트는, 본 명세서의 도면에서 일반적으로 설명되고 또한 도시되는 바와 같이, 서로 다른 매우 다양한 구성으로 배치되고 또한 설계될 수 있음을 쉽게 이해할 수 있을 것이다. 따라서, 후술하는 본 발명의 실시예에 대한 보다 상세한 설명은, 도면에 나타낸 바와 같이, 청구 사항으로서 본 발명의 범위를 제한하고자 함이 아니고, 단지 본 발명에 따라 현재 고려되는 실시예의 특정한 예를 나타낼 뿐이다. 본 명세서에서 설명된 실시예는 도면을 참조하여 가장 잘 이해될 것이며, 도면 전체에 걸쳐서 동일한 부분에 대해서는 동일한 도면 부호로 지정된다.
본 발명은 해당 기술분야의 최신 상태, 특히 해당 기술분야에서 현재 이용 가능한 장치 및 방법에 의해 아직 완전히 해결되지 못한 문제점 및 요구에 대응하여 개발되었다.
비-일시적 매체를 포함하여, 하나 이상의 컴퓨터 사용 가능 또는 컴퓨터 판독 가능 매체의 임의의 조합이 이용될 수 있다. 예를 들면, 컴퓨터 판독 가능 매체는 휴대형 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM) 디바이스, 읽기 전용 메모리(ROM) 디바이스, 소거 가능 프로그래밍 가능 읽기 전용 메모리(EPROM 또는 플래시 메모리) 디바이스, 휴대형 컴팩트 디스크 읽기 전용 메모리(CDROM), 광 스토리지 디바이스, 및 자기 스토리지 디바이스 중 하나 이상을 포함할 수 있다. 선택된 실시예에서, 컴퓨터 판독 가능 매체는 명령어 실행 시스템, 장치, 또는 디바이스에 의해서 또는 이와 관련하여 사용하기 위한 프로그램을 포함, 저장, 전달, 전파, 또는 전송할 수 있는 임의의 비-일시적 매체를 포함할 수 있다.
본 발명의 연산을 수행하기 위한 컴퓨터 프로그램 코드는 자바(Java), 스몰톡(Smalltalk), C++ 등과 같은 객체 지향 프로그래밍 언어와, "C" 프로그래밍 언어 또는 유사한 프로그래밍 언어와 같은 통상의 절차적 프로그래밍 언어를 포함하여, 하나 이상의 프로그래밍 언어의 임의의 조합으로 기입될 수 있다. 프로그램 코드는 전적으로 컴퓨터 시스템 상에서 독립형 소프트웨어 패키지로서, 독립형 하드웨어 유닛 상에서, 부분적으로 컴퓨터로부터 일정 거리 떨어진 원격 컴퓨터 상에서, 또는 전적으로 원격 컴퓨터 또는 서버 상에서 실행될 수 있다. 후자의 시나리오에 있어서, 원격 컴퓨터는 근거리망(LAN) 또는 광역망(WAN)을 포함하는 임의의 유형의 네트워크를 통해 컴퓨터에 접속될 수 있거나, (예를 들어, 인터넷 서비스 제공자를 이용하여 인터넷을 통해) 외부 컴퓨터에 접속이 이루어질 수 있다.
이하에서 본 발명의 실시예에 따른 방법, 장치(시스템), 및 컴퓨터 프로그램 제품의 흐름도 도시 및/또는 블록도를 참조하여 본 발명을 설명한다. 흐름도 도시 및/또는 블록도의 각각의 블록과, 흐름도 도시 및/또는 블록도 내의 블록의 조합이 컴퓨터 프로그램 명령어 또는 코드에 의해 구현될 수 있음을 이해할 것이다. 이들 컴퓨터 프로그램 명령어는 범용 컴퓨터, 전용 컴퓨터, 또는 다른 프로그램 가능 데이터 프로세싱 장치의 프로세서에 제공되어 머신을 제조할 수 있으며, 그에 따라 컴퓨터 또는 다른 프로그램 가능 데이터 처리 장치의 프로세서를 통해 실행되는 명령어가 흐름도 및/또는 블록도 블록 또는 블록들에 규정된 기능/동작을 구현하기 위한 수단을 생성하게 된다.
이들 컴퓨터 프로그램 명령어는 또한 특정 방식으로 기능하도록 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치에 지시할 수 있는 비-일시적 컴퓨터 판독 가능 매체에 저장될 수 있으며, 그에 따라 컴퓨터 판독 가능 매체에 저장된 명령어가 흐름도 및/또는 블록도 블록 또는 블록들에 규정된 기능/동작을 구현하는 명령어 수단을 포함하는 제조품을 제조할 수 있게 된다.
컴퓨터 프로그램 명령어는 또한 컴퓨터 또는 다른 프로그램 가능 데이터 프로세싱 장치에 로딩되어 컴퓨터 또는 다른 프로그램 가능 장치 상에서 수행될 일련의 연산 단계가 컴퓨터 구현 프로세스를 만들어 내게 하며, 그에 따라 컴퓨터 또는 다른 프로그램 가능 장치 상에서 실행되는 명령어가 흐름도 및/또는 블록도 블록 또는 블록들에 명시된 기능/동작을 구현하는 프로세스를 제공하게 된다.
도 2 및 3을 참조하면, 이후에 렘펠-지브(LZ; Lempel-Ziv) 알고리즘 및 다른 파생 압축 알고리즘에 따라 압축될 파일, 스트링, 또는 기타 데이터 세트(202)의 대부분 또는 모든 가능한 참조를 빠르게 인덱싱하기 위해서 해시(200)가 사용된다. 생성될 수 있는 해시 테이블(204) 및 해시 체인(206)의 일례가 도 2에 도시된다. 해시 테이블(204) 및 해시 체인(206)의 대입은 도 3의 방법(300)을 사용하여 수행될 수 있다. 본 명세서에 개시된 방법에 따라서 생성되어진 해시 테이블(204) 및 해시 체인(206)은 해당 기술분야에 알려진 임의의 방법, 특히 LZ 알고리즘에 따라서 원래의 데이터 세트(202)를 압축하도록 프로세싱될 수 있다.
단계(302)에서, 현재 위치(P)에서의 리터럴 쌍(N)이 추출된다. 첫번째 리터럴 쌍에 대해서 P는 0과 동일할 수 있다. 도 2의 예에서, 위치(P)는 X와 동일하고 또한 N은 'ab'와 동일하다. 방법(300)은 리터럴(N)에 대해서 해시 체인의 생성을 억제해야 하는지를 결정하는 단계(304)를 포함할 수 있다. 이는 도 5의 방법(600)을 실행하는 단계를 포함할 수 있다. 단계(304)에서 억제해야 할 해시가 발견되지 않는다면, 방법(300)은 리터럴 쌍(N)의 해시, 즉 Hash(N)를 생성하는 단계(306)를 포함할 수 있으며, 여기에서 Hash()는 해시 함수를 나타낸다. 예시적인 해시 함수 및 구현한 회로가 도 4에 도시된다.
그 다음 해시 테이블(204)의 어드레스(Hash(N))에서의 엔트리(E)가 검색될 수 있다(단계 308). 도 2의 예에서, E 값은 리터럴 쌍('ab')의 최초 출현에 대해서 0이 된다. 예를 들면, 해시 테이블(204)은 방법(300)에 따라서 프로세싱되는 각각의 섹터 또는 데이터 파일에 대해서 0으로 초기화될 수 있다.
그 다음 해시 체인(206)의 위치(P)에 E 값이 저장될 수 있다(단계 310). 도 2의 예에서, 최초의 인스턴스인 'ab'에 대해서 해시 체인(206)의 위치(X)에 값(0)이 저장된다. 또한 해시 테이블(204)의 어드레스(Hash(N))에 P 값이 기입될 수 있다(단계 312). 도시된 예에서, 해시 테이블(204)의 어드레스(Hash('ab'))에 X 값이 기입될 수 있다.
위치(P)가 마지막 리터럴 또는 리터럴 쌍의 위치인 경우라면, 종결될 데이터 파일이 발견될 것이며(단계 314), 방법이 종료될 것이다. 그렇지 않다면, P 값은 다음 리터럴을 지시하도록 증분, 즉 P = P + 1 리터럴 위치가 될 것이며, 방법은 단계(302)로 계속될 것이다. 예를 들면, 스트링('abcd')에 대해서, P = 0에서 최초로 리터럴 쌍('ab')이 프로세싱될 것이다. P = 1에서, 리터럴 쌍('bc')이 프로세싱될 것일 등등이다. 단계(314 및 316)는 도 3에 도시된 바와 같이 해시가 억제되어야 한다고 결정되는 경우(단계 304)에도 실행될 수 있다.
도 2의 예에서, 다음번 반복의 단계(304 내지 312)는 위치(Y)에서 'ab'의 다음 출현을 검출하는 것에 응답하여 어드레스(Hash('ab'))에서 X 값이 추출되는 결과를 초래한다. 따라서, 해시 체인(206)의 위치(Y)에는 X가 기입되고 또한 해시 테이블의 어드레스(Hash('ab'))에는 Y가 기입된다.
위치(Z)에서 'ab'의 다음 출현을 검출하는 것에 응답하여, 해시 테이블(204)의 어드레스(Hash('ab'))로부터 값(Y)이 추출된다. 따라서, 해시 체인(206)의 위치(Z)에는 Y가 기입되고 또한 해시 테이블의 어드레스(Hash('ab'))에는 Z가 기입된다.
쉽게 알 수 있는 바와 같이, 해시 테이블(204) 및 해시 체인(206)은 이제 리터럴 쌍의 최초 출현과 후속하는 한 번 이상의 해당 동일한 리터럴 쌍의 출현과 관련되어진다. 위치(X)에서의 해시 체인의 값은 위치(Y)를 지시한다. 따라서, 리터럴('ab')로 시작하는 스트링을 검색할 때, 원래의 데이터 세트 전체를 평가하지 않고도 값(Hash('ab'))을 제공하는 쌍의 위치에 대응하는 해시 체인(206)의 포인터가 뒤따를 수 있다. 상술한 바와 같이, 해시 테이블(204) 및/또는 해시 체인(206)이 원래의 데이터 세트를 압축하도록 프로세싱되는 방식은 LZ 알고리즘과 같이 해당 기술분야에 알려진 임의의 방법을 포함할 수 있다.
도 4를 참조하면, 해시 함수(Hash())는 2 바이트로 존재할 수 있는 전체 64 K 확률의 서브세트인 결정론적 인덱스를 생성하도록 기능한다. 예를 들면, 각각 8 비트로 이루어진 2 바이트(예컨대, 바이트 0 및 바이트 1)는 각각 2^8개의 가능한 문자 및 (2^8)*(2^8) = 64KB의 가능한 문자 조합을 나타낼 수 있다. 해시 함수는 13 비트의 해시를 생성하며, 이 해시는 소요 탐색 공간을 두 개의 서로 다른 바이트 조합의 확률의 1/8인 2^13 또는 8K의 가능한 조합으로 축소한다. 임의의 무작위 2 바이트 조합에 대해서도 동일한 해시값을 얻는다.
해시값을 생성하기 위한 회로의 예가 도 4에 도시된다. 알 수 있는 바와 같이, 바이트(400, 402)의 비트(7 내지 0)는 13개의 XNOR 게이트(404) 어레이에 입력된다. 알 수 있는 바와 같이, 위치(N)에서의 바이트(402)의 비트는 N + 3 <= 7인 경우에는 위치(N + 3)의 비트를 또는 N + 3 > 7인 경우에는 바이트(400)의 위치(N + 3 - 7)의 비트를 갖는 XNOR 게이트에 입력된다. 마찬가지로, 바이트(400)의 위치(N)에서의 각각의 비트는 최대 N = 4까지의 N 값에 대해서 위치(N + 3)의 비트를 갖는 XNOR 게이트에 입력된다.
도 5를 참조하면, 해시가 바이트 기반이기 때문에, 방법(300)에 따라 복수의 해시를 프로세싱할 때의 문제는 복수의 메모리 뱅크를 갖는 해시 프로세서를 사용하여 해당 영역에서의 오버헤드가 커지지 않도록 하면서 복수의 동시 기입을 허용함으로써 해결할 수 있는데, 이는 메모리 뱅크에 싱글 포트(single port) 메모리를 사용할 수 있기 때문이다. 동일한 메모리 뱅크에 복수의 바이트 쌍이 기입될 때를 의미하는 해시 충돌은 FIFO를 사용하여 해결될 수 있다. FIFO가 차게 되는 경우, 해시 프로세서는 해시 계산 및 해시 체이닝 연산(예컨대, 도 3의 방법(300))을 중지한다. 해시 계산 및 해시 체이닝 연산 중단은 압축률을 감소시키는데, 이는 새로운 해시값이 생성되지 않고 따라서 이후에 인덱싱되지 않아 LZ 알고리즘에 따라 복사할 수 없기 때문이다.
해시 프로세서(500)는 도 5에 도시된 회로(500)를 사용하여 동작하여 각각의 바이트 쌍에 대한 해시값을 계산하도록 동작할 수 있다. 예를 들면, 해시 프로세서(500)는 해시 리미트 엔진(hash limit engine)(504)을 사용하여 FIFO(506)가 차게 될 때 또한 기입 시 뱅크 충돌이 일어나는 때를 검출하고, 그에 따라 FIFO(506)가 차는 것에 대응하여 SRAM 해시 뱅크(508)에 대한 해시 생성을 억제할 수 있고, 그렇게 함으로써 FIFO(506)가 비워질 수 있도록 한다. 해시를 압축하게 되면, 해시 프로세서(500)는 압축 레이트에 대해서 최소 비용으로 높은 처리량을 지속할 수 있다. 무시할 수 있을 정도의 압축량만 줄어드는데, 이는 데이터가 이미 전혀 압축할 수 없음을 새로운 해시값이 의미하기 때문이다. 해시 프로세서(500)가 반복되고 있는 리터럴과 마주치게 될 때, 이 프로세서는 복사 명령을 생성하는 데 사용되는 해시 체인에 대한 해시 충돌 수를 최소화하기 위해서 리터럴 런 렝스 엔진(literal run length engine)(510)을 사용하여 동일한 리터럴 문자의 최대 16 바이트까지에 대서 해시 생성을 억제한다.
일부 실시예에 있어서, 네 개의 해시값을 효과적으로 생성하는 다섯 개의 2 바이트 쌍을 프로세싱하는 데 필요한 해시 데이터 및 평활화 기능을 생성하기 위해 메모리의 여덟 개의 뱅크(508)가 여덟 개의 FIFO(506)와 함께 사용될 수 있다. 단지 네 개의 해시만을 계산하는 경우에서의 해시 충돌을 해결하기 위해 각각의 평활화 FIFO(506)는 기입 메모리의 8개의 뱅크(508)에 대해서 16의 깊이를 갖는 FIFO로 구현될 수 있다. 저장되어야 할 해시의 필요한 수를 초과하는 한 해시되는 임의의 리터럴 쌍에 대한 해시 충돌을 평활화하는 기능을 생성하기 위해서 메모리의 임의의 수의 뱅크(508)가 임의의 수의 FIFO(506)와 함께 사용될 수 있다. 예를 들면, 더 작은 대역폭을 필요로 하는 애플리케이션에 대해서는, 예시적인 구현에서 여덟 개가 아니라 네 개의 기입 뱅크(508) 및 FIFO(506)를 사용하여 두 개의 해시가 생성될 수 있다. 평활화 FIFO(506)는 도 6의 방법(600)에 개략적으로 나타낸 바와 같이, FIFO(506)가 차게 되기 때문에 해시 프로세싱이 정지되기 전에는 16 보다 깊거나 얕은 깊이로 구현될 수 있다.
해시 프로세서(500)는 도 6에 도시된 방법(600)을 구현할 수 있다. 예를 들면, 데이터 파일 또는 스트링의 압축은 단계(602)에서 시작될 수 있고 또한 도 3의 방법(300)에 따른 해시 및 해시 체인을 생성하는 단계(604)를 포함할 수 있다. 동일한 리터럴, 즉, 반복되는 문자가 발견되는 경우(단계 606), 방법(600)은 이 리터럴이 16번째의 연속되는 반복 리터럴인지를 결정하는 단계를 포함할 수 있다. 그게 아니라면, 해당 리터럴에 대한 해시를 생성하는 단계는 최대 16번째의 반복되는 리터럴까지 억제될 수 있다(610). 스트링 또는 파일 내의 데이터가 종결된다고 결정되는 경우라면(단계 612), 데이터는 LZ 매칭(514) 프로세스로 전송되며(단계 614), 이에 의해서 리터럴은 허프만 코딩 또는 몇몇 기타 기법에 따라서 인코딩하기 위해 준비된 명령 파일 내의 복사/리터럴 명령으로 대체된다. 상술한 바와 같이 스트링 또는 파일에서 식별된 반복되는 리터럴의 런(run)은 반복된 리터럴을 반복된 리터럴의 수 및 반복된 리터럴의 첫번째 인스턴스의 위치에 대한 오프셋으로 대체하는 "런 렝스(run length)" 리터럴로 대체될 수 있다. 일부 실시예에 있어서, 단일 문자 리터럴 런, 즉 반복된 리터럴의 런에 대한 명령 파일 내의 런 렝스는 항상 복수의 16 문자 오프셋을 지시하도록 제한될 수 있다. 이러한 방식으로, 런 렝스 복사 명령은 90 퍼센트 초과의 압축 레이트를 제공할 것이며, 이는 압축 레이트 및 런 렝스 복사 명령을 구현하는 복잡도 사이에 양호한 균형을 제공한다.
일부 실시예에 있어서, 런 렝스 해시 억제 단계(606 내지 610)는 매칭 길이의 윈도우와 관련된 모든 다른 문자 또는 n-복수의 문자로 제한될 수 있다. 예를 들면, 모든 다른 문자 또는 모든 n개의 문자에 대한 평가 단계(606) 및 가능한 억제 단계(610)가 수행될 수 있으며, 이때 n은 2 초과의 정수이다. 일부 실시예에 있어서, 반복된 리터럴의 스트링을 나타내는 런 렝스 명령은 반복된 리터럴 스트링의 바로 앞의 초기 인스턴스 또는 반복된 리터럴 스트링으로부터 오프셋되는 복수의 리터럴 위치를 나타낼 수 있다. 따라서, 단계(606)에서 리터럴이 반복됨을 결정하는 것은 리터럴이 방법(600)의 현재 반복에서 프로세싱되는 리터럴 앞에 임의의 오프셋에서 반복되는지를 평가하는 것을 포함할 수 있다.
단계(612)에서 파일 또는 스트링에 더 많은 데이터가 남아 있다는 것이 발견되면, 프로세싱은 스트링 또는 파일 내의 다음번 리터럴 쌍에 대해서 단계(604)에서 계속된다.
방법(600)은 해시 뱅크(508)에 대해서 FIFO 버퍼(506)가 차 있는지를 결정하는 단계(616)를 더 포함할 수 있다. 그렇다면, FIFO 버퍼(506)에 대한 해시 프로세싱은 중지되고(단계 618) 또한 프로세싱은 단계(612)에서 계속된다. 그렇지 않다면, 방법은 스트링 또는 파일의 데이터가 모두 프로세싱되었는지를 결정하는 단계(612)를 더 포함할 수 있으며, 모두 처리되지 않았다면, 해시 및 해시 체인의 생성이 단계(604)에서 계속될 수 있다. 그게 아니라면, 스트링 또는 파일에 대해서 단계(614)가 수행된다.
도 7은 예시적인 컴퓨팅 디바이스(700)를 도시한 블록도이다. 컴퓨팅 디바이스(700)는, 본 명세서에서 논의된 바와 같은, 다양한 절차를 수행하는 데 사용될 수 있다. 컴퓨팅 디바이스(700)는 서버, 클라이언트, 또는 임의의 다른 컴퓨팅 실체로 기능할 수 있다. 컴퓨팅 디바이스는 본 명세서에서 논의된 바와 같은 다양한 기능을 수행할 수 있다. 컴퓨팅 디바이스(700)는 데스크 탑 컴퓨터, 노트북 컴퓨터, 서버 컴퓨터, 핸드헬드 컴퓨터, 태블릿 컴퓨터 등과 같이 매우 다양한 컴퓨팅 디바이스 중 임의의 것일 수 있다. 일부 실시예에 있어서, 본 명세서에 개시된 방법을 구현한 회로를 포함하는 하드웨어 디바이스가 컴퓨팅 디바이스(700)에 포함되거나 또는 이하에서 열거하는 컴퓨팅 디바이스의 컴포넌트 중 임의의 것에 내장될 수 있다.
컴퓨팅 디바이스(700)는 하나 이상의 프로세서(들)(702), 하나 이상의 메모리 디바이스(들)(704), 하나 이상의 인터페이스(들)(706), 하나 이상의 대용량 스토리지 디바이스(들)(708), 하나 이상의 입/출력(I/O) 디바이스(들)(710), 및 디스플레이 디바이스(730)를 포함하며, 이들 모두는 버스(712)에 연결된다. 프로세서(들)(702)는 메모리 디바이스(들)(704) 및/또는 대용량 스토리지 디바이스(들)(708)에 저장된 명령어를 실행하는 하나 이상의 프로세서 또는 컨트롤러를 포함한다. 프로세서(들)(702)는 또한 캐시 메모리와 같은 다양한 유형의 컴퓨터 판독 가능 매체를 포함할 수 있다.
메모리 디바이스(들)(704)는 휘발성 메모리(예컨대, 랜덤 액세스 메모리(RAM)(714)) 및/또는 비휘발성 메모리(예컨대, 읽기 전용 메모리(ROM)(716))와 같은 다양한 컴퓨터 판독 가능 매체를 포함한다. 메모리 디바이스(들)(704)는 또한 플래시 메모리와 같은, 재기입 가능한 ROM을 포함할 수 있다.
대용량 스토리지 디바이스(들)(708)는 자기 테이프, 자기 디스크, 광 디스크, 고체 상태 메모리(예컨대, 플래시 메모리) 등과 같은 다양한 컴퓨터 판독 가능 매체를 포함한다. 도 7에 도시한 바와 같이, 특정 대용량 스토리지 디바이스는 하드 디스크 드라이브(724)이다. 또한 다양한 컴퓨터 판독 가능 매체로부터의 판독 및/또는 그것으로의 기입을 가능하게 하기 위해 대용량 스토리지 디바이스(들)(708)에는 다양한 드라이브가 포함될 수 있다. 대용량 스토리지 디바이스(들)(708)는 탈착식 매체(726) 및/또는 비찰탁식 매체를 포함한다.
I/O 디바이스(들)(710)는 데이터 및/또는 기타 정보가 컴퓨팅 디바이스(700)로 입력될 수 있게 또는 그로부터 추출될 수 있게 하는 다양한 디바이스를 포함한다. 예시적인 I/O 디바이스(들)(710)는 커서 제어 디바이스, 키보드, 키패드, 마이크로폰, 모니터 또는 기타 디스플레이 디바이스, 스피커, 프린터, 네트워크 인터페이스 카드, 모뎀, 렌즈, CCD 또는 기타 이미지 캡처 디바이스 등을 포함한다.
디스플레이 디바이스(730)는 컴퓨팅 디바이스(700)의 하나 이상의 사용자에게 정보를 디스플레이할 수 있는 임의의 유형의 디바이스를 포함한다. 디스플레이 디바이스(730)의 예는 모니터, 디스플레이 터미널, 비디오 투사 디바이스 등을 포함한다.
인터페이스(들)(706)는 컴퓨팅 디바이스(700)가 다른 시스템, 디바이스, 또는 컴퓨팅 환경과 상호 작용할 수 있게 하는 다양한 인터페이스를 포함한다. 예시적인 인터페이스(706)는 근거리망(LAN), 광역망(WAN), 무선망, 및 인터넷에 대한 인터페이스와 같은 임의의 수의 서로 다른 네트워크 인터페이스(720)를 포함한다. 다른 인터페이스(들)는 사용자 인터페이스(718) 및 주변 장치 인터페이스(722)를 포함한다. 인터페이스(들)(706)는 또한 하나 이상의 사용자 인터페이스 요소(718)를 포함할 수 있다. 인터페이스(들)(706)는 또한 프린터, 포인팅 디바이스(마우스, 트랙 패드, 등), 키보드 등에 대한 인터페이스와 같은 하나 이상의 주변 인터페이스를 또한 포함할 수 있다.
버스(712)는 프로세서(들)(702), 메모리 디바이스(들)(704), 인터페이스(들)(706), 대용량 스토리지 디바이스(들)(708), 및 I/O 디바이스(들)(710)를 서로 통신할 수 있도록 하고, 뿐만 아니라 버스(712)에 접속된 다른 디바이스 또는 컴포넌트와도 통신할 수 있도록 한다. 버스(712)는 시스템 버스, PCI 버스, IEEE 1394 버스, USB 버스 등과 같은 하나 이상의 몇 가지 유형의 버스 구조를 대표한다.
설명을 위해, 본 명세서에서는 프로그램 및 기타 실행 가능 프로그램 컴포넌트를 개별적인 블록으로 도시하였지만, 이러한 프로그램 및 컴포넌트는 다양한 시기에 컴퓨팅 디바이스(700)의 서로 다른 스토리지 컴포넌트 내에 위치할 수 있고, 또한 프로세서(702)에 의해 실행됨을 알아야 한다. 다르게는, 본 명세서에서 설명한 시스템 및 절차는 하드웨어, 또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 조합으로 구현될 수 있다. 예를 들면, 하나 이상의 애플리케이션 전용 집적 회로(ASIC)를 프로그램하여 본 명세서에서 설명한 시스템 및 절차 중 하나 이상을 실행하도록 할 수 있다.
본 발명은 그 사상 또는 본질적 특징으로부터 이탈하지 않으면서 다른 구체적 형태로 구현될 수 있다. 본 발명에서 설명한 각 실시예는 모든 측면에서 제한적인 것이 아니라, 단지 예시적인 것으로 간주되어야 한다. 그러므로, 본 발명의 범위는 상술한 발명의 설명에 의해서보다는 첨부 청구 범위에 의해 표시된다. 청구 범위의 등가성의 의미 및 범위 내에 있는 모든 변경은 본 발명의 청구 범위 내에 포함된다.

Claims (19)

  1. 방법으로서,
    다음을 포함하는 제1 다수의 동작을 수행하는 단계:
    현재 위치(P)에서의 입력 데이터 세트로부터 리터럴 세트(literal set)(N)를 추출하는 동작;
    해시 값(Hash(N))을 생성하는 동작으로서, Hash(N)는 N 미만의 비트들을 갖는 출력을 갖는 해시 함수인, 상기 해시 값을 생성하는 동작; 및
    해시 테이블과 관련된 버퍼의 상태를 평가하는 동작;
    다음을 포함하는 제2 다수의 동작을 수행하는 단계:
    상기 제1 다수의 동작을 수행한 후 상기 해시 테이블과 관련된 상기 버퍼가 차는 것에 응답하여, Hash(N)에 대한 검색 요청을 상기 버퍼에 추가하는 것을 억제하는 동작, 상기 입력 데이터 세트 내의 다음번 반복 세트(N)를 참조하기 위해 상기 현재 위치(P)를 증분시키는 동작, 및 상기 제1 다수의 동작을 반복하는 동작;
    상기 제1 다수의 동작을 수행한 후 상기 해시 테이블과 관련된 상기 버퍼가 차지 않은 것에 응답하여:
    상기 해시 테이블의 어드레스(Hash(N))에서 엔트리(E)를 검색하는 동작;
    해시 체인의 상기 위치(P)에 상기 엔트리(E)를 저장하는 동작;
    상기 해시 테이블의 상기 어드레스(Hash(N))에서 상기 엔트리(E)로서의 위치(P)를 기입하기 위해서 상기 버퍼에 대한 기입 요청을 추가하는 동작;
    상기 해시 테이블의 상기 어드레스(Hash(N))에서 상기 엔트리(E)로서의 위치(P)를 기입하도록 상기 버퍼로부터의 상기 기입 요청을 프로세싱하는 동작; 및
    상기 데이터 세트 내의 다음번 리터럴 위치를 참조하기 위해서 상기 현재 위치(P)를 증분시키는 동작; 및
    상기 데이터 세트의 마지막에 도달하기 전까지 상기 제2 다수의 동작을 수행하는 동작을 반복하는 단계; 및
    상기 해시 체인을 사용하여 상기 입력 데이터 세트를 압축하는 단계를 포함하는, 방법.
  2. 청구항 1에 있어서,
    리터럴 세트(N)가 제1 리터럴을 포함하는 것에 응답하여, Hash(N)에 대한 상기 검색 요청을 상기 버퍼에 추가하는 것을 억제하는 단계 - 상기 제1 리터럴은 상기 제1 리터럴에 선행하는 제2 리터럴과 동일하고, 상기 제1 리터럴은 상기 제1 리터럴의 연속하는 인스턴스들의 임계 수 미만이고, 상기 버퍼는 FIFO 버퍼임 -, 및 상기 데이터 세트 내의 리터럴 위치를 참조하기 위해 상기 현재 위치(P)를 증분시키는 단계를 더 포함하는 방법.
  3. 청구항 1에 있어서,
    상기 해시 체인을 사용하여 상기 입력 데이터 세트를 압축하는 단계는 렘펠-지브(Lempel-Ziv) 알고리즘에 따라서 복사 또는 리터럴 명령들을 생성하는 단계를 포함하는, 방법.
  4. 청구항 3에 있어서,
    상기 렘펠-지브(Lempel-Ziv) 알고리즘에 따라서 복사 또는 리터럴 명령들을 생성하는 단계는, 각각의 스트링에 대해서:
    상기 각각의 스트링의 초기 리터럴 세트를 식별하는 단계;
    상기 초기 리터럴 세트에 대응하는 해시 체인을 식별하는 단계;
    상기 초기 리터럴 세트에 대응하는 상기 해시 체인에서 참조되는 위치들에서 하나 이상의 동일한 스트링을 배타적으로 탐색하는 단계에 의해서,
    명령 세트 내의 상기 데이터 세트의 스트링들을 동일하고 이전에 출현한 스트링들을 참조하는 복사 및 오프셋 명령들로 대체하는 단계를 포함하는, 방법.
  5. 청구항 4에 있어서,
    상기 명령 세트를 허프만(Huffman) 코딩하는 단계를 더 포함하는, 방법.
  6. 데이터 압축 장치에 있어서,
    메모리 뱅크;
    전자 디바이스를 포함하며, 상기 전자 디바이스는:
    현재 위치로서 입력 파일의 최초 리터럴 위치에서 시작하여, 다음을 포함하는 제1 다수의 동작을 수행함으로써 상기 입력 파일 내의 복수의 리터럴 세트의 각각의 리터럴 세트에 대해서 상기 입력 파일로부터 해시 체인을 생성하도록:
    상기 현재 위치에서의 리터럴 세트의 해시값을 생성하는 동작,
    상기 메모리 뱅크 내의 상기 해시값에서 엔트리를 추출하는 동작,
    상기 현재 위치에 매핑된 해시 체인 내의 위치에 상기 엔트리를 기입하는 동작,
    상기 해시값의 상기 현재 위치를 상기 메모리 뱅크에 기입하는 동작,
    상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작, 그리고
    상기 입력 파일의 마지막에 도달하기 전까지 상기 제1 다수의 동작을 반복하도록;
    상기 해시 체인을 생성하는 동안, 상기 리터럴 세트가 상기 입력 파일 내 선행 리터럴의 반복인 리터럴을 포함함을 검출하는 것에 응답하여 상기 제1 다수의 동작의 일부의 수행은 중단하도록; 그리고
    상기 해시 체인을 출력하도록 프로그램된, 데이터 압축 장치.
  7. 청구항 6에 있어서,
    상기 전자 디바이스는 최대 15 개의 연속하는 리터럴에 선행하는 리터럴과 동일한 상기 15 개의 연속하는 리터럴에 대해 상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작을 여전히 수행하면서 상기 제1 다수의 동작의 상기 일부의 수행은 중단하도록 더 프로그램되는, 데이터 압축 장치.
  8. 청구항 7에 있어서,
    상기 전자 디바이스는 상기 해시 체인을 명령 생성 모듈로 출력하고 또한 상기 입력 파일 내의 반복된 리터럴들에 대한 복사 오프셋 명령들을 포함하는 명령 파일을 생성하기 위해 해시 체인을 프로세싱하도록 더 프로그램되는, 데이터 압축 장치.
  9. 청구항 8에 있어서,
    상기 명령 생성 모듈은 상기 리터럴의 연속하는 인스턴스들의 런(run)을 상기 입력 파일 내의 상기 리터럴의 상기 연속하는 인스턴스들의 런에서의 상기 리터럴의 제1 인스턴스에 대한 오프셋 및 상기 리터럴의 상기 연속하는 인스턴스들의 런에서의 리터럴들의 수를 기술하는 런 렝스(run-length) 명령으로 대체하도록 더 프로그램되는, 데이터 압축 장치.
  10. 청구항 9에 있어서,
    상기 명령 생성 모듈은 렘펠-지브 알고리즘을 구현하는, 데이터 압축 장치.
  11. 청구항 10에 있어서,
    상기 전자 디바이스는 허프만 코딩을 사용하여 상기 명령 파일을 인코딩하도록 더 프로그램되는, 데이터 압축 장치.
  12. 청구항 6에 있어서,
    버퍼를 더 포함하되;
    상기 전자 디바이스는 상기 버퍼로 기입 요청을 추가하고 또한 상기 버퍼로부터 상기 기입 요청을 프로세싱함으로써 상기 해시값의 상기 현재 위치를 상기 메모리 뱅크에 기입하도록 더 프로그램되는, 데이터 압축 장치.
  13. 청구항 12에 있어서,
    상기 전자 디바이스는, 상기 해시 체인을 생성하는 동안, 상기 버퍼가 더 이상 차 있지 않을 때까지 상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작을 여전히 수행하면서 상기 버퍼가 차는 것을 검출하는 것에 응답하여 상기 제1 다수의 동작의 상기 일부의 수행은 중단하도록 더 프로그램되는, 데이터 압축 장치.
  14. 데이터 압축 장치에 있어서,
    메모리 뱅크;
    상기 메모리 뱅크에 대응하는 버퍼;
    전자 디바이스를 포함하며, 상기 전자 디바이스는:
    현재 위치로서 입력 파일의 최초 리터럴 위치에서 시작하여, 다음을 포함하는 제1 다수의 동작을 수행함으로써 상기 입력 파일 내의 복수의 리터럴 세트의 각각의 리터럴 세트에 대해서 상기 입력 파일로부터 해시 체인을 생성하도록:
    상기 현재 위치에서의 리터럴 세트의 해시값을 생성하는 동작,
    상기 메모리 뱅크 내의 상기 해시값에서 엔트리를 추출하는 동작,
    상기 현재 위치에 매핑된 상기 해시 체인 내의 위치에 상기 엔트리의 기입을 요청하는 기입 요청을 상기 버퍼에 추가하는 동작,
    상기 버퍼로부터의 상기 기입 요청을 실행하는 동작,
    상기 해시값의 상기 현재 위치를 상기 메모리 뱅크에 기입하는 동작, 및
    상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작;
    상기 입력 파일의 마지막에 도달하기 전까지 상기 제1 다수의 동작을 반복하도록;
    상기 해시 체인을 생성하는 동안, 상기 버퍼가 더 이상 차지 않을 때까지 상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작을 여전히 수행하면서 상기 버퍼가 차는 것을 검출하는 것에 응답하여 상기 제1 다수의 동작의 일부의 수행은 중단하도록; 그리고
    상기 해시 체인을 출력하도록 프로그램된, 데이터 압축 장치.
  15. 청구항 14에 있어서,
    상기 전자 디바이스는 상기 각각의 리터럴 세트가 상기 입력 파일 내의 선행 리터럴과 중복인 리터럴을 포함함을 검출하는 것에 응답하여 상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작을 여전히 수행하면서 상기 제1 다수의 동작의 상기 일부의 수행은 중단하도록 더 프로그램되는, 데이터 압축 장치.
  16. 청구항 15에 있어서,
    상기 전자 디바이스는 최대 15 개의 연속하는 리터럴에 선행하는 리터럴과 동일한 상기 15 개의 연속하는 리터럴에 대해 상기 현재 위치를 상기 입력 파일 내의 다음번 리터럴 위치로 진행하는 동작을 여전히 수행하면서 상기 제1 다수의 동작의 상기 일부의 수행은 중단하도록 더 프로그램되는, 데이터 압축 장치.
  17. 청구항 14에 있어서,
    상기 전자 디바이스는 상기 해시 체인을 명령 생성 모듈로 출력하도록 또한 상기 입력 파일 내의 반복된 리터럴들에 대한 복사 오프셋 명령들을 포함하는 명령 파일을 생성하기 위해 상기 해시 체인을 프로세싱하도록 더 프로그램되는, 데이터 압축 장치.
  18. 삭제
  19. 삭제
KR1020177006488A 2014-08-12 2015-08-12 적응형 레이트 압축 해시 프로세싱 디바이스 KR101866151B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462036453P 2014-08-12 2014-08-12
US62/036,453 2014-08-12
PCT/US2015/044846 WO2016025591A1 (en) 2014-08-12 2015-08-12 Adaptive rate compression hash processing device

Publications (2)

Publication Number Publication Date
KR20170040343A KR20170040343A (ko) 2017-04-12
KR101866151B1 true KR101866151B1 (ko) 2018-06-08

Family

ID=55302299

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177006488A KR101866151B1 (ko) 2014-08-12 2015-08-12 적응형 레이트 압축 해시 프로세싱 디바이스

Country Status (6)

Country Link
US (2) US9934234B2 (ko)
EP (1) EP3195481B1 (ko)
JP (1) JP6770506B2 (ko)
KR (1) KR101866151B1 (ko)
CN (1) CN106664101B (ko)
WO (1) WO2016025591A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9916320B2 (en) * 2015-04-26 2018-03-13 International Business Machines Corporation Compression-based filtering for deduplication
CN105791832B (zh) * 2016-03-08 2019-02-01 湖南千年华光软件开发有限公司 数据编码方法和数据解码方法及其系统
US10528539B2 (en) * 2016-07-01 2020-01-07 Intel Corporation Optimized selection of hash collision chains
US10331558B2 (en) * 2017-07-28 2019-06-25 Apple Inc. Systems and methods for performing memory compression
US10224957B1 (en) * 2017-11-27 2019-03-05 Intel Corporation Hash-based data matching enhanced with backward matching for data compression
US10097201B1 (en) * 2017-11-30 2018-10-09 Intel Corporation LZ77 compression of data with data runs

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130135121A1 (en) * 2011-11-24 2013-05-30 International Business Machines Corporation Compression algorithm incorporating dynamic selectionof a predefined huffman dictionary

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4929946A (en) * 1989-02-09 1990-05-29 Storage Technology Corporation Adaptive data compression apparatus including run length encoding for a tape drive system
JPH0936747A (ja) * 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置
JP3913004B2 (ja) * 2001-05-28 2007-05-09 キヤノン株式会社 データ圧縮方法及び装置及びコンピュータプログラム及び記憶媒体
EP1634423B1 (en) 2003-06-06 2013-01-02 Computer Associates Think, Inc. System and method for compressing url request parameters
US7966424B2 (en) * 2004-03-15 2011-06-21 Microsoft Corporation Data compression
US7483426B2 (en) * 2004-05-13 2009-01-27 Micrel, Inc. Look-up table expansion method
US7307552B2 (en) * 2005-11-16 2007-12-11 Cisco Technology, Inc. Method and apparatus for efficient hardware based deflate
US7796059B2 (en) * 2009-01-16 2010-09-14 Tatu Ylonen Oy Fast approximate dynamic Huffman coding with periodic regeneration and precomputing
US8653992B1 (en) * 2012-06-17 2014-02-18 Google Inc. Data compression optimization
US9035809B2 (en) * 2012-10-15 2015-05-19 Seagate Technology Llc Optimizing compression engine throughput via run pre-processing
US9231615B2 (en) * 2012-10-24 2016-01-05 Seagate Technology Llc Method to shorten hash chains in Lempel-Ziv compression of data with repetitive symbols
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
WO2014167419A2 (en) * 2013-04-11 2014-10-16 Marvell Israel (M.I.S.L) Ltd. Exact match lookup with variable key sizes

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130135121A1 (en) * 2011-11-24 2013-05-30 International Business Machines Corporation Compression algorithm incorporating dynamic selectionof a predefined huffman dictionary

Also Published As

Publication number Publication date
EP3195481A4 (en) 2018-04-18
US20180225298A1 (en) 2018-08-09
CN106664101B (zh) 2020-04-03
JP2017530592A (ja) 2017-10-12
JP6770506B2 (ja) 2020-10-14
WO2016025591A1 (en) 2016-02-18
KR20170040343A (ko) 2017-04-12
EP3195481B1 (en) 2022-07-13
US10817474B2 (en) 2020-10-27
US20160048531A1 (en) 2016-02-18
EP3195481A1 (en) 2017-07-26
US9934234B2 (en) 2018-04-03
CN106664101A (zh) 2017-05-10

Similar Documents

Publication Publication Date Title
KR101866151B1 (ko) 적응형 레이트 압축 해시 프로세싱 디바이스
KR101841103B1 (ko) Vlsi 효율적인 허프만 인코딩 장치 및 방법
US20130307709A1 (en) Efficient techniques for aligned fixed-length compression
US8407378B2 (en) High-speed inline data compression inline with an eight byte data path
JP2021527376A (ja) データ圧縮
US9264068B2 (en) Deflate compression algorithm
US20130010949A1 (en) Method and system for compressing and encrypting data
US10587285B1 (en) Hardware friendly data compression
US20160314141A1 (en) Compression-based filtering for deduplication
CN104378119A (zh) 嵌入式设备文件系统数据的快速无损压缩方法
US9455742B2 (en) Compression ratio for a compression engine
US9787323B1 (en) Huffman tree decompression
US8976048B2 (en) Efficient processing of Huffman encoded data
JPWO2014030189A1 (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP2016170750A (ja) データ管理プログラム、情報処理装置およびデータ管理方法
US9496895B2 (en) Compression method and decompression method
US8854235B1 (en) Decompression circuit and associated compression method and decompression method
US10585626B2 (en) Management of non-universal and universal encoders
US11748307B2 (en) Selective data compression based on data similarity
JP2018046518A (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