KR102155648B1 - 메모리 압축을 수행하기 위한 시스템 및 방법 - Google Patents
메모리 압축을 수행하기 위한 시스템 및 방법 Download PDFInfo
- Publication number
- KR102155648B1 KR102155648B1 KR1020180085954A KR20180085954A KR102155648B1 KR 102155648 B1 KR102155648 B1 KR 102155648B1 KR 1020180085954 A KR1020180085954 A KR 1020180085954A KR 20180085954 A KR20180085954 A KR 20180085954A KR 102155648 B1 KR102155648 B1 KR 102155648B1
- Authority
- KR
- South Korea
- Prior art keywords
- group
- word
- input
- words
- hardware
- Prior art date
Links
- 238000007906 compression Methods 0.000 title claims abstract description 131
- 230000006835 compression Effects 0.000 title claims abstract description 129
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000015654 memory Effects 0.000 title claims description 32
- 230000006837 decompression Effects 0.000 claims description 81
- 239000000872 buffer Substances 0.000 claims description 41
- 230000004044 response Effects 0.000 claims description 13
- 238000012545 processing Methods 0.000 abstract description 43
- 238000010586 diagram Methods 0.000 description 28
- 230000001419 dependent effect Effects 0.000 description 16
- 230000006870 function Effects 0.000 description 12
- 230000004048 modification Effects 0.000 description 12
- 238000012986 modification Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 9
- 230000015572 biosynthetic process Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 108091081062 Repeated sequence (DNA) Proteins 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0886—Variable-length word access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- 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/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- 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/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2207/00—Indexing scheme relating to arrangements for writing information into, or reading information out from, a digital store
- G11C2207/10—Aspects relating to interfaces of memory device to external buses
- G11C2207/102—Compression or decompression of data before storage
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Memory System (AREA)
Abstract
저장 및 프로세싱을 위해 효과적으로 데이터를 이동시키기 위한 시스템들, 장치들 및 방법들이 기술된다. 다양한 실시예들에서, 프로세서 내의 압축 유닛은 다수의 하드웨어 레인들을 포함하고, 압축하기 위한 둘 이상의 입력 워드들을 선택하고, 다수의 하드웨어 레인들 중 둘 이상에 이들을 할당한다. 각각의 할당된 입력 워드가 프로세싱되고, 각각의 워드는 테이블의 복수의 엔트리들의 엔트리와 비교된다. 할당된 입력 워드들 각각이 테이블의 동일한 엔트리를 인덱싱하는 것으로 결정되면, 가장 오래된 입력 워드를 갖는 하드웨어 레인은 테이블 엔트리에 대한 단일 판독 요청을 생성하고, 가장 새로운 입력 워드를 갖는 하드웨어 레인은 압축 완료시 테이블 엔트리를 업데이트하기 위한 단일 기록 요청을 생성한다. 각각의 하드웨어 레인은 그것의 할당된 입력 워드에 근거하여 압축된 패킷을 생성한다.
Description
본 명세서에 기술된 실시예들은 컴퓨팅 시스템 분야에 관한 것이며, 더 구체적으로는, 저장 및 프로세싱을 위해 효율적으로 데이터를 이동시키는 것에 관한 것이다.
일반적으로 말해서, 다양한 컴퓨팅 시스템들은 프로세서 및 메모리를 포함하고, 프로세서는 하나 이상의 소프트웨어 애플리케이션들을 프로세싱하면서 명령어들 및 애플리케이션 데이터에 대한 액세스 요청들을 생성한다. 명령어들 및 데이터를 페치할 때, 프로세서는 로컬 캐시 메모리들의 계층을 검사하고, 발견되지 않으면, 프로세서는 메인 메모리 또는 예를 들어, CD-ROM, 또는 하드 드라이브와 같은 다른 저장소에 원하는 명령어들 및 데이터에 대한 요청들을 발행한다.
때때로, 컴퓨팅 시스템 상에서 동시에 작동하는 소프트웨어 애플리케이션들의 수는 상당한 수에 도달한다. 게다가, 다양한 컴퓨팅 시스템들은 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU)과 같은 데이터 병렬 프로세서들, 디지털 신호 프로세서(DSP), 등과 같은 다수의 프로세서들을 포함한다. 따라서, 다수의 소프트웨어 애플리케이션들을 프로세싱하기 위해 사용되는 명령어들 및 데이터의 양이 상당히 증가한다. 그러나, 로컬 캐시 메모리들 내의 메모리 저장 위치들은 제한된 양의 저장 공간을 가진다. 따라서, 로컬 캐시 메모리들과 영구 저장소 사이의 명령어들 및 데이터의 스와핑이 발생한다.
스와핑 및 요청된 정보가 로딩될 것을 대기하는 대응하는 대기시간(latency)은 컴퓨팅 시스템의 성능을 감소시킨다. 특정한 분량의 데이터에 대한 저장소의 양을 감소시키기 위해, 데이터가 압축된다. 이러한 압축은 데이터 내에 포함된 개별 데이터 비트들의 반복된 시퀀스를 이용한다. 데이터가 액세스될 때, 데이터가 압축해제되고, 그후 액세스가 완료되면 가능하게는 재압축된다.
일반적으로 말하면, 중앙 프로세싱 유닛(CPU)과 같은 범용 프로세서가 데이터를 압축 및/또는 압축해제하기 위해 소프트웨어 루틴을 수행하고 있을 때, 그것은 동작들의 지속기간 동안 점유된다. 추가적으로, 다수의 프로세서들을 포함하는 시스템에서, 자주, CPU는 요구되는 데이터를 검색, 압축 및 압축해제하도록 지원하는 유일한 프로세서이다. 그러므로, CPU는 로컬 및 네트워크 데이터 검색 및 압축 중 하나 이상을 수행하는 동안 부분적으로 또는 완전히 이용 불가능하다. 또한, 다른 프로세서들은 CPU가 그들을 대신해 검색, 압축 및 압축해제 동작들을 마칠 것을 대기하는 동안 지연을 겪게 된다.
상기를 고려하여, 저장 및 프로세싱을 위해 효율적으로 데이터를 이동시키기 위한 방법들 및 메커니즘들이 요구된다.
저장 및 프로세싱을 위해 효율적으로 데이터를 이동시키기 위한 시스템들 및 방법들이 고려된다. 다양한 실시예들에서, 컴퓨팅 시스템은, 메모리, 캐시 메모리 및 프로세서를 포함한다. 압축 명령어를 수신함에 응답하여, 프로세서는 메모리로부터 캐시 메모리 내로 데이터를 페치한다. 일부 실시예들에서, 데이터는 다수의 입력 워드들로 분할된다. 그후, 프로세서는 캐시 메모리로부터의 다수의 입력 워드들을 프로세서 내의 판독 버퍼 내에 로딩한다. 프로세서 내의 압축 유닛은 압축 명령어를 실행하기 위한 회로부를 포함한다. 따라서, 프로세서는 압축 유닛이 압축 명령어를 프로세싱하는 동안 다른 동작들을 프로세싱하기 위해 이용가능하다.
일 실시예에서, 압축 유닛은 할당된 입력 워드들로서 사용될 다수의 워드들 중 둘 이상의 입력 워드들을 선택한다. 압축 유닛은 압축 알고리즘의 동작들을 수행하기 위한 다수의 하드웨어 레인(lane)들을 포함한다. 다수의 하드웨어 레인들 중 둘 이상의 하드웨어 레인들 각각이 선택된 둘 이상의 입력 워드들 중 각 하나에 할당된다. 둘 이상의 하드웨어 레인들 각각은 적어도 그것의 할당된 입력 워드에 근거하여 각각의 압축된 패킷을 생성한다. 압축된 패킷을 생성하기 위해, 각각의 하드웨어 레인은 할당된 워드와 비교하기 위한 값을 사용하여 그룹내(intra-group) 종속성(dependency)을 결정한다. 그러나, 다양한 실시예들에서, 동일한 인덱스를 갖는 워드들의 제1 그룹의 그룹내 종속성을 결정하기 전에, 더 새로운(younger) 워드들의 제2 그룹 - 제2 그룹 내의 각각의 워드는 동일한 인덱스를 가짐 - 에 대해 딕셔너리가 액세스된다.
압축 유닛은 압축된 패킷들을 압축된 패킷들의 그룹으로 결합한다. 일부 실시예들에서, 압축 유닛은 추가로 둘 이상의 그룹들을 패킷된 그룹으로 결합하고 패킷된 그룹을 기록 버퍼 내에 기록한다. 나중에, 프로세서는 기록 버퍼로부터 타겟 저장 위치로 패킷된 그룹을 송신한다.
다양한 실시예들에서, 각각의 할당된 입력 워드가 프로세싱됨에 따라, 반복된 데이터 비트들의 시퀀스가 이전에 보았던 데이터와 비교됨으로써 검색된다. 일부 실시예들에서, 이전에 보았던 데이터는 딕셔너리로 지칭되는 (예컨대, 테이블과 같은) 데이터 구조의 엔트리들 내에 저장된다. 일부 실시예들에서, 다수의 하드웨어 레인들은 통계-기반 압축 알고리즘과 딕셔너리-기반 압축 알고리즘의 조합의 단계들을 수행한다. 일부 실시예들에서, 둘 이상의 하드웨어 레인들에 할당된 둘 이상의 선택된 입력 워드들 각각은 테이블의 다수의 엔트리들 중 동일한 엔트리를 포인팅하는 대응하는 인덱스를 가진다. 일부 실시예들에서, 테이블의 동일한 엔트리의 내용은 둘 이상의 하드웨어 레인들에 현재 할당된 입력 워드들의 프로세싱을 위해 딕셔너리로부터 한번 판독된다. 일 실시예에서, 둘 이상의 할당된 입력 워드들 중 가장 오래된 입력 워드를 갖는 하드웨어 레인이 단일 판독 요청을 생성한다. 추가적으로, 둘 이상의 할당된 입력 워드들 중 가장 새로운(youngest) 입력 워드를 갖는 하드웨어 레인이 둘 이상의 할당된 입력 워드들의 압축 완료시에 테이블을 업데이트하기 위한 단일 기록 요청을 생성한다. 따라서, 직렬 구현에서 테이블에 저장된 시퀀스들에 대한 다수의 판독 및 기록 요청들이 다수의 하드웨어 레인들을 사용하는 병렬 구현에서 단일 판독 요청 및 단일 기록 요청으로 감소된다.
추가의 실시예에서, 프로세서는 다수의 하드웨어 레인들을 사용하는 압축해제 유닛을 추가로 포함한다. 압축해제 명령어를 수신함에 응답하여, 프로세서는 압축된 패킷들을 페치하고, 프로세서 내의 압축해제 유닛은 압축해제 명령어를 실행하기 위한 회로부를 포함한다. 따라서, 압축해제 유닛이 압축해제 명령어를 프로세싱하는 동안 프로세서는 다른 동작들을 프로세싱하기 위해 이용가능하다. 압축해제 유닛의 다수의 하드웨어 레인들 각각이 압축된 패킷에 근거하여 워드를 생성한다.
이들 실시예들 및 다른 실시예들은 다음의 설명 및 도면을 참조로 더 이해될 것이다.
방법들 및 메커니즘들의 상기 장점 및 추가 장점들은 첨부된 도면과 함께 다음의 설명을 참조로 하여 더욱 잘 이해될 수 있다.
도 1은 프로세서 코어의 일 실시예의 블록도이다.
도 2는 압축/압축해제 유닛의 일 실시예의 블록도이다.
도 3은 압축된 정보의 일 실시예의 블록도이다.
도 4는 압축 엔진의 일 실시예의 블록도이다.
도 5는 압축 프로세싱의 일 실시예의 블록도이다.
도 6은 압축 프로세싱의 다른 실시예의 블록도이다.
도 7은 압축 프로세싱의 다른 실시예의 블록도이다.
도 8은 압축 프로세싱의 다른 실시예의 블록도이다.
도 9는 데이터를 효과적으로 압축하기 위한 방법의 일 실시예의 흐름도이다.
도 10은 압축해제 프로세싱의 일 실시예의 블록도이다.
도 11은 데이터를 효과적으로 압축해제하기 위한 방법의 일 실시예의 흐름도이다.
도 12는 압축 프로세싱의 다른 실시예의 블록도이다.
도 13은 압축해제 프로세싱의 다른 실시예의 블록도이다.
도 14는 압축 프로세싱의 다른 실시예의 블록도이다.
본 개시에서 기술되는 실시예들이 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 본 발명의 특정 실시예들은 도면들에 예로서 도시되고 본 명세서에서 상세히 기술될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 출원 전반에 걸쳐 사용되는 바와 같이, "~일 수 있다(may)"라는 단어는 의무적인 의미(즉, "~이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, "포함하다(include, includes)" 및 "포함하는(including)"이라는 단어들은, 포함하지만 그로 제한되지 않음을 의미한다.
다양한 유닛들, 회로들, 또는 기타 컴포넌트들이 태스크(task) 또는 태스크들을 수행하도록 "구성되는 것"으로 기술될 수 있다. 그러한 맥락에서, "~하도록 구성되는"은, 동작 동안에 태스크 또는 태스크들을 수행하는 "회로부를 갖는"을 일반적으로 의미하는 구조의 광의의 설명이다. 이와 같이, 유닛/회로/컴포넌트는 유닛/회로/컴포넌트가 현재 온(on) 상태가 아닐 시에도 태스크를 수행하도록 구성될 수 있다. 일반적으로, "~하도록 구성된"에 대응하는 구조를 형성하는 회로부는 하드웨어 회로들을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 설명의 편의상 태스크 또는 태스크들을 수행하는 것으로 설명될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다. 하나 이상의 태스크를 수행하도록 구성된 유닛/회로/컴포넌트를 언급하는 것은 그 유닛/회로/컴포넌트에 대해 35 U.S.C. § 112(f)항을 적용하지 않고자 명확히 의도된다.
도 1은 프로세서 코어의 일 실시예의 블록도이다.
도 2는 압축/압축해제 유닛의 일 실시예의 블록도이다.
도 3은 압축된 정보의 일 실시예의 블록도이다.
도 4는 압축 엔진의 일 실시예의 블록도이다.
도 5는 압축 프로세싱의 일 실시예의 블록도이다.
도 6은 압축 프로세싱의 다른 실시예의 블록도이다.
도 7은 압축 프로세싱의 다른 실시예의 블록도이다.
도 8은 압축 프로세싱의 다른 실시예의 블록도이다.
도 9는 데이터를 효과적으로 압축하기 위한 방법의 일 실시예의 흐름도이다.
도 10은 압축해제 프로세싱의 일 실시예의 블록도이다.
도 11은 데이터를 효과적으로 압축해제하기 위한 방법의 일 실시예의 흐름도이다.
도 12는 압축 프로세싱의 다른 실시예의 블록도이다.
도 13은 압축해제 프로세싱의 다른 실시예의 블록도이다.
도 14는 압축 프로세싱의 다른 실시예의 블록도이다.
본 개시에서 기술되는 실시예들이 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 본 발명의 특정 실시예들은 도면들에 예로서 도시되고 본 명세서에서 상세히 기술될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 출원 전반에 걸쳐 사용되는 바와 같이, "~일 수 있다(may)"라는 단어는 의무적인 의미(즉, "~이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, "포함하다(include, includes)" 및 "포함하는(including)"이라는 단어들은, 포함하지만 그로 제한되지 않음을 의미한다.
다양한 유닛들, 회로들, 또는 기타 컴포넌트들이 태스크(task) 또는 태스크들을 수행하도록 "구성되는 것"으로 기술될 수 있다. 그러한 맥락에서, "~하도록 구성되는"은, 동작 동안에 태스크 또는 태스크들을 수행하는 "회로부를 갖는"을 일반적으로 의미하는 구조의 광의의 설명이다. 이와 같이, 유닛/회로/컴포넌트는 유닛/회로/컴포넌트가 현재 온(on) 상태가 아닐 시에도 태스크를 수행하도록 구성될 수 있다. 일반적으로, "~하도록 구성된"에 대응하는 구조를 형성하는 회로부는 하드웨어 회로들을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 설명의 편의상 태스크 또는 태스크들을 수행하는 것으로 설명될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다. 하나 이상의 태스크를 수행하도록 구성된 유닛/회로/컴포넌트를 언급하는 것은 그 유닛/회로/컴포넌트에 대해 35 U.S.C. § 112(f)항을 적용하지 않고자 명확히 의도된다.
하기의 설명에서, 본 개시에 기술되는 실시예들의 철저한 이해를 제공하기 위해 다양한 특정 상세 사항들이 기재된다. 그러나, 기술분야의 통상의 기술자는 이러한 특정 상세 사항들이 없이도 실시예들이 실시될 수 있음을 인지하여야 한다. 일부 예들에서, 설명의 편이를 위해, 그리고 실시예들의 설명이 모호해지는 것을 피하기 위해, 주지의 회로들, 구조들, 및 기법들은 상세히 도시되지 않았다.
도 1을 참조하면, 프로세서 코어(100)의 일 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 프로세서 코어(100)는 명령어 페치 유닛(IFU)(110), 코어 인터페이스(170), 압축/압축해제 유닛(180), 실행 유닛들(130), 및 최종 레벨 캐시(190)를 포함한다. 실행 유닛들(130)은 로드 저장 유닛(LSU)(150)에 연결되고, 이는 또한 실행 유닛들(130)에 다시 데이터를 송신하도록 연결된다. 추가적으로, LSU(150)는 코어 인터페이스(170)에 연결되고, 이는 다시, 최종 레벨 캐시(190)에 연결된다. 도시된 실시예에서, 최종 레벨 캐시(190)는, 예를 들어, 도 1에 도시된 것과 같은 내부 버스(105)와 같은 온-칩 네트워크를 통해 메인 메모리에 연결된 버스 인터페이스 유닛(BIU)(195)을 포함한다. 도 1에 도시된 실시예는 단지 예시적인 것이고 명확성을 위해 일부 회로 블록들이 생략되었음에 유의하여야 한다. 다른 실시예들에서, 상이한 수의 회로 블록들 및 상이한 배열의 회로 블록들이 채용될 수 있다.
일부 실시예들에서, 프로세서 코어(100)는 컴퓨팅 시스템 내의 독립형 프로세서이다. 다른 실시예들에서, 프로세서 코어(100)는 멀티-코어 프로세서의 다수의 코어들 중 하나이다. 또 다른 실시예들에서, 프로세서 코어(100)를 포함하는 멀티-코어 프로세서는 시스템-온-칩(SOC) 상의 다수의 다이들 중 하나이다. 다양한 실시예들에서, 프로세서 코어(100)는 데스크톱 컴퓨터, 휴대용 컴퓨터, 태블릿 컴퓨터, 스마트폰, 모바일 디바이스, 서버, 주변 디바이스, 또는 다른 것 내의 컴퓨팅 시스템에서 사용된다.
다양한 실시예들에서, 압축/압축해제 유닛(180)은 압축/압축해제 알고리즘의 동작들을 수행하는 것으로부터 프로세서 코어(100)의 나머지를 오프로딩한다. 따라서, 압축/압축해제 유닛(180)이 압축/압축해제 알고리즘을 프로세싱하는 동안 프로세서 코어(100)의 나머지는 다른 동작들을 프로세싱하기 위해 이용가능하다. 일부 실시예들에서, 압축/압축해제 유닛(180)은 다양한 딕셔너리-기반 알고리즘들 중 하나에 근거하여 데이터를 압축 및 압축해제한다. 다른 실시예들에서, 압축/압축해제 유닛(180)은 통계-기반 알고리즘 및 딕셔너리-기반(테이블-기반) 알고리즘의 조합을 사용하는 다양한 하이브리드 알고리즘들 중 하나에 근거하여 데이터를 압축 및 압축해제한다. 본 명세서에서 사용되는 바와 같이, "딕셔너리"("테이블"로도 지칭됨)는 각각의 엔트리가 압축 프로세스를 겪었던 데이터 값을 저장하도록 구성된 다수의 엔트리들을 포함하는 (하드웨어 및/또는 소프트웨어 기반) 데이터 구조이다. 압축 프로세스 동안에, 압축될 데이터 값들은, 이들을 전에 보았던 적이 있는지(예컨대, 전체적으로 또는 부분적으로)를 결정하기 위해, 딕셔너리에 저장된 값들과 비교된다.
도시된 바와 같이, 압축/압축해제 유닛(180)은 압축 엔진(182) 및 압축해제 엔진(184)을 포함한다. 엔진들(182, 184) 각각은 압축/압축해제 알고리즘 동작들의 병렬 프로세싱을 위해 다수의 하드웨어 레인들을 포함한다. 따라서, 데이터의 다수의 부분들이 다수의 하드웨어 레인들에 의해 동시에 압축/압축해제됨에 따라 압축/압축해제 동작들 동안 처리량이 증가한다. 일 실시예에서, 압축을 위해 송신된 데이터의 각 부분은 공지된 사이즈의 입력 워드이다. 일 예에서, 다양한 다른 사이즈들이 가능하고 고려되지만 32-비트 입력 워드가 데이터의 부분이다.
일부 실시예들에서, 알고리즘 동작들이 파이프라인되고, 이는 처리량을 더 증가시킨다. 또한, 압축 엔진(182)의 하드웨어 레인들에 현재 할당된 다수의 입력 워드들 사이에 종속성이 존재하지만, 일 실시예에서, 제1 그룹의 입력 워드들 사이의 종속성이 결정되기 전에 상이한 입력 워드들의 제2 그룹이 하드웨어 레인들에 할당된다. 따라서, 제2 그룹은 제1 그룹에 의한 딕셔너리 업데이트에 의존하지만, 제2 그룹은 제1 그룹의 입력 워드들 사이의 종속성이 결정되기 전에 압축 엔진(182)의 하드웨어 레인들에 할당된다. 엔진들(182, 184)의 상대적으로 높은 처리량으로 인해, 다수의 소프트웨어 애플리케이션들을 프로세싱하기 위해 사용되는 명령어들 및 데이터의 양은 로컬 캐시 메모리들과 영구 저장소 사이의 긴 대기시간 스와핑 없이 증가하도록 허용되지만, 로컬 캐시 메모리들 내의 메모리 저장 위치들은 제한된 양의 저장 공간을 가진다.
하기에서 더 자세히 설명되는 바와 같이, 압축/압축해제 유닛(180)은, 프로세서 코어(100)에 대한 명령어 세트 아키텍쳐(ISA)에서 정의된 압축 또는 압축해제 커맨드/명령어를 검출하는 것에 응답하여, 데이터의 페이지를 다수의 입력 워드들의 그룹으로서 한번에 압축 또는 압축해제한다. 일부 실시예들에서, 추가적인 명령어들이 프로세서 코어(100)의 ISA에 추가될 수 있다. 다양한 실시예들에서, 엔코딩/압축 및 디코딩/압축해제를 각각 나타내는 오피코드들을 갖는 두 개의 명령어들이 데이터 압축 및 압축해제를 수행하기 위해 ISA에 추가된다. 일부 실시예들에서, 명령어들은 메모리 내에서 소스 페이지의 어드레스 및 목적지 또는 타겟 페이지의 어드레스를 특정하는 하나 이상의 인수들을 사용한다. 일부 실시예들에서, 두 개의 명령어들 각각이 다수의 마이크로-동작들로 변환되며, 이들은 또한 "마이크로-ops"로 지칭된다. 압축/압축해제 유닛(180)은 마이크로-ops를 프로세싱한다.
다양한 실시예들에서, 압축/압축해제 유닛(180)은 압축 또는 압축해제를 위해 데이터의 페이지를 프리페치하기 위해 최종 레벨 캐시(190)에 정보를 제공한다. 일부 경우들에서, 데이터의 페이지에 대한 요청은 버스 인터페이스 유닛(BIU)(195)을 통해 메인 메모리로 송신될 수 있다. 프리페치된 데이터의 페이지는 최종 레벨 캐시(190), 또는 다른 적합한 위치에 저장될 수 있다. 프리페치된 데이터의 페이지가 최종 레벨 캐시(190)에 저장되면, 페이지는 압축/압축해제 유닛(180)에 포함된 판독 버퍼로 이동될 수 있다. 엔진들(182, 184) 중 하나가 수신된 페이지를 프로세싱한다. 엔진들(182, 184)을 더 설명하기 전에, 프로세서 코어(100)의 나머지에 대한 추가의 설명이 먼저 제공된다.
명령어 페치 유닛(IFU)(110)은 프로세서 코어(100)의 나머지에 실행을 위한 명령어들을 제공한다. 도시된 실시예에서, IFU(110)는 캐시 또는 메모리로부터 명령어들을 페치하는 것에 관한 다양한 동작들, 실행을 위한 다양한 쓰레드들로부터의 명령어들의 선택, 및 실행을 위해 다양한 기능 유닛들에 명령어들을 발행하기 전에 그러한 명령어들의 디코딩을 수행하도록 구성될 수 있다. IFU(110)는 명령어 캐시(114)를 추가로 포함한다. 일 실시예에서, IFU(110)는 프로세서 코어(100)에 의해 실행되는 각각의 쓰레드에 대응하는 페치 어드레스들을 유지하고 이들 페치 어드레스들에 따라 명령어 캐시(114)로부터 명령어들의 검색을 조정하기 위한 로직을 포함할 수 있다. 추가적으로, 일부 실시예들에서, IFU(110)는 물리적 어드레스들에 대한 가상 명령어 어드레스들의 맵의 일부를 포함할 수 있다. 맵의 일부는, 예를 들어 ITLB(115)와 같은 명령어 변환 색인 버퍼(ITLB) 내에 저장될 수 있다.
실행 유닛(130)은 IFU(110)로부터 발행된 특정 타입의 명령어들에 대해 실행하고 그 결과들을 제공하도록 구성될 수 있다. 일 실시예에서, 실행 유닛(130)은 산술, 논리, 및 시프트 명령어들과 같은 구현된 ISA 내에 정의된 특정 인티저-유형 및 플로팅-포인트 명령어들을 실행하도록 구성될 수 있다. 일부 실시예들에서, 프로세서 코어(100)는 하나 초과의 실행 유닛을 포함할 수 있고, 실행 유닛들 각각은 기능성에 있어서 대칭적이거나 대칭적이 아닐 수 있음이 고려된다.
로드 스토어 유닛(LSU)(150)은 인티저 및 플로팅-포인트 로드 및 스토어 명령어들과 같은 데이터 메모리 레퍼런스들을 프로세싱하도록 구성될 수 있다. 일부 실시예들에서, LSU(150)는 또한 IFU(110)로부터 기인된 명령어 캐시(115) 미스들의 프로세싱을 보조하도록 구성될 수 있다. LSU(150)는 데이터 캐시(152), 및 또한 캐시 미스들을 검출하고 이에 응답하여 캐시 인터페이스(170)를 통해 특정 캐시 메모리로부터 데이터를 요청하도록 구성된 로직을 포함한다. 일 실시예에서, 데이터 캐시(152)는 이들이 데이터 캐시(152)에서 히트하는지에 관계없이 모든 저장들이 특정 캐시 메모리에 기록되는 동시 기록(write-through) 캐시로서 구성될 수 있다. 다른 실시예들에서, 데이터 캐시(152)는 후기록(write-back) 캐시로서 구현될 수 있다.
일 실시예에서, LSU(150)는 미스가 계류중인 메모리 어드레스들을 타겟팅하는 추가적인 메모리 액세스들이 추가적인 캐시 요청 트래픽을 생성하지 않을 수 있도록 데이터 캐시(152)에서 미스된 계류중인 메모리 액세스들의 레코드들을 저장하도록 구성된 미스 큐를 포함할 수 있다. 도시된 실시예에서, 로드/스토어 명령어를 위한 어드레스 생성은 실행 유닛(들)(130) 중 하나에 의해 수행될 수 있다. 명령어들에 의해 특정된 어드레싱 모드에 의존하여, 실행 유닛(들)(130) 중 하나가 원하는 어드레스를 산출하기 위해 연산(예를 들어, 베이스 값에 인덱스 값을 더하는 것과 같은)을 수행할 수 있다. 추가적으로, 일부 실시예들에서, LSU(150)는 실행 유닛(들)(130)에 의해 생성된 가상 데이터 어드레스들을 물리적 어드레스들로 변환하도록 구성된 로직을 포함할 수 있다. 예를 들어, 본 실시예에서, LSU(150)는 데이터 변환 색인 버퍼(DTLB)(153)를 포함한다.
도 2를 참조하면, 압축/압축해제 유닛(200)의 일 실시예를 도시하는 블록도가 도시된다. 압축/압축해제 유닛(200)은, 다양한 실시예들에서, 도 1의 실시예에 표시된 것과 같은 압축/압축해제 유닛(180)에 대응할 수 있다. 도시된 실시예에서, 압축/압축해제 유닛(200)은 판독 버퍼(201), 압축 엔진(204), 압축해제 엔진(203), 딕셔너리(210), 멀티플렉스 회로(205), 기록 버퍼(206), 유한 상태 머신 회로(208), 및 프리페치 회로(209)를 포함한다. 도 2의 블록도에 도시된 실시예는 단지 예시임에 유의하여야 한다. 다른 실시예들에서, 상이한 회로 블록들 및 상이한 배열의 회로 블록들이 가능하고 고려된다.
판독 버퍼(201)는 데이터의 페이지의 부분들이 저장될 수 있는, 예컨대 엔트리들(202a, 202b)과 같은 다수의 엔트리들을 포함할 수 있다. 다양한 실시예들에서, 엔트리들은 다수의 데이터 워드들의 병렬 프로세싱을 허용하기 위해 조직화될 수 있다. 예를 들어, 일부 실시예들에서, 엔트리들은 압축 엔진(204) 또는 압축해제 엔진(203)에 의해 주어진 수의 32-비트 데이터 워드들의 판독을 허용하도록 배열될 수 있다. 일부 경우들에서, 4개의 32-비트 데이터 워드들이 압축 엔진(204) 또는 압축해제 엔진(203)에 의해 판독된다. 다른 경우들에서는, 다른 수의 데이터 워드들이 가능하고 고려된다. 판독 버퍼(201)는 압축 엔진(204) 및 압축해제 엔진(203) 각각으로부터, 이들 엔진들 내의 다수의 병렬 하드웨어 레인들이 더 많은 데이터를 수신할 준비가 됨을 나타내는 준비 신호를 수신하도록 추가로 구성될 수 있다.
일부 경우들에서, 판독 버퍼(201)가 요청된 데이터를 수신할 준비가 되지 않으면, 데이터는 버스 인터페이스 유닛(BIU) 내에 포함된 버퍼들 내에 유지될 수 있다. 일 실시예에서, BIU는 데이터가 다양한 캐시 메모리들과 시스템 메모리 사이에서 이동될 수 있게 하는 통신 버스에 연결될 수 있다. 일부 실시예들에서, 판독 버퍼(201)는 예를 들어, 데이터 캐시(252)와 같은 로우-레벨 캐시 메모리로부터 데이터를 요청하기 위해 크레딧-기반 시스템을 사용할 수 있다. 하기에서 더 상세히 기술되는 바와 같이, 압축 엔진(204) 및 압축해제 엔진(203) 각각은 판독 버퍼(201)로부터 수신된 데이터의 부분들을 각각 압축 또는 압축해제하도록 구성될 수 있다. 일부 실시예들에서, 압축 엔진(204) 및 압축해제 엔진(203)은 다양한 딕셔너리-기반 알고리즘들 중 하나에 근거하여 데이터를 압축 및 압축해제한다. 다른 실시예들에서, 압축 엔진(204) 및 압축해제 엔진(203)은 통계-기반 알고리즘 및 딕셔너리-기반 알고리즘의 조합을 사용하는 다양한 하이브리드 알고리즘들 중 하나에 근거하여 데이터를 압축 및 압축해제한다.
다양한 실시예들에서, 딕셔너리(210)는 다수의 엔트리들을 포함할 수 있으며, 이들 각각은 주어진 인덱스에 대응하고 흔히 사용되는 비트들의 시퀀스를 저장하도록 구성된다. 일부 실시예들에서, 각각의 엔트리는 인덱스를 저장하도록 구성될 수 있다. 다른 실시예들에서, 엔트리는 인덱스를 저장하지 않는다. 일부 경우들에서, 딕셔너리(210)는 콘텐츠 어드레스가능 메모리(CAM)로서 구현될 수 있으며, 이는 압축될 특정 데이터의 워드의 비트들로부터 생성된 해시 출력을 사용하여 액세스된다. 다른 경우에, 딕셔너리(210)는 테이블과 같은 직접-매핑된 데이터 저장 구조로서 구현될 수 있으며, 여기서 테이블 엔트리는 인덱스에 대응하는 상수를 유지한다. 예를 들어, 테이블 엔트리 7은 딕셔너리(210)의 사용 전체에 걸쳐 딕셔너리(210)의 일곱 번째 엔트리를 유지한다. 따라서, 어떠한 인덱스 값도 엔트리 내에 저장되지 않는다. 딕셔너리(210)는 다양한 설계 스타일들 중 하나에 따라 설계될 수 있다. 예를 들어, 딕셔너리(210)는 다수의 래치들, 플립-플롭들, 랜덤 액세스 메모리(RAM) 셀들, 또는 다양한 엔트리들에 포함된 개별 데이터 비트들을 저장하도록 구성된 다른 적합한 저장 회로들을 포함할 수 있다.
압축 및 압축해제 동작들의 부분으로서, 압축 엔진(204) 및 압축해제 엔진(203)이 딕셔너리(210)에 액세스할 수 있다. 압축 및 압축해제 동작들 동안, 압축 엔진(204) 및 압축해제 엔진(203)은 후속적인 압축 동작들을 개선하기 위하여 딕셔너리(210) 내의 하나 이상의 엔트리들을 업데이트할 수 있다. 일부 실시예들에서, 압축 동작들 및 압축해제 동작들이 파이프라인되고, 이는 추가로 처리량을 증가시킨다. 추가적으로, 압축 엔진(203)의 하드웨어 레인들에 현재 할당된 다수의 입력 워드들 사이에 종속성이 존재하지만, 일 실시예에서, 제1 그룹의 입력 워드들 사이의 종속성이 결정되기 전에 상이한 입력 워드들의 제2 그룹이 하드웨어 레인들에 할당된다. 따라서, 제2 그룹은 제1 그룹에 의해 의한 딕셔너리(210)의 업데이트에 의존하지만, 제2 그룹은 제1 그룹의 입력 워드들 사이의 종속성이 결정되기 전에 압축 엔진(203)의 하드웨어 레인들에 할당된다.
멀티플렉스 회로(205)는 실행되고 있는 커맨드에 따라 압축 엔진(204) 또는 압축해제 엔진(203)으로부터 출력의 선택을 허용하는 다수의 개별 데이터 비트 멀티플렉스 회로들을 포함할 수 있다. 유한 상태 머신 회로(208)는 압축/압축해제 유닛(200) 내에 포함된 다양한 다른 회로 블록들의 동작을 제어하기 위해 다수의 신호들을 생성하도록 구성될 수 있다. 다양한 실시예들에서, 유한 상태 머신 회로(208)는 명령어 페치 유닛으로부터 압축 및 압축해제 명령어들/커맨드들을 수신할 수 있고, 신호 프리페치 회로(209)는 수신된 커맨드 내에 특정된 데이터의 페이지의 프리페치를 개시할 수 있다. 유한 상태 머신 회로(208)는 추가적으로, 기록 버퍼(206)로부터 타겟 저장 위치들로의 데이터의 복사를 제어할 수 있다. 다양한 실시예들에서, 유한 상태 머신 회로(208)는 상기에 언급된 기능들을 수행하도록 구성된 다수의 순차 및 조합 로직 회로들을 포함할 수 있다.
프리페치 회로(209)는 다수의 라인들을, 예컨대 도 2의 실시예에 도시된 것과 같은 데이터 캐시(252)와 같은 로우-레벨 캐시 내로 페치하도록 구성될 수 있는 순차 및 조합 로직 회로의 임의의 적합한 조합을 포함할 수 있다. 일부 실시예들에서, 프리페치 회로(209)는 다수의 이용가능한 크레딧들에 근거하여 컴퓨팅 시스템에 프리페치 요청들을 송신할 수 있다. 프리페치 회로(209)는, 일부 실시예들에서, 스트라이드 값에 따라 프리페치를 수행할 수 있다. 예를 들어, 압축의 경우에, 프로세서 코어는 요구되는 페이지의 첫번째 N(N이 양의 정수인 경우) 라인을 프리페치할 수 있고, 프리페치 회로(209)는, 각각의 라인이 프리페치된 후 스트라이드에 의해 증분하면서, 소스 어드레스 + N부터 요구되는 데이터의 페이지의 끝까지 프리페치할 수 있다.
도 3를 참조하면, 압축된 정보(300)의 일 실시예를 도시하는 블록도가 도시된다. 일 실시예에서, 압축된 정보(300)는 하나 이상의 압축된 패킷들(301-305), 압축된 패킷들의 그룹(310) 및 압축된 패킷들의 그룹(330)을 포함한다. 도 3에 표시된 압축된 정보의 타입들은 단지 예시들이다. 다른 실시예들에서, 압축/압축해제 유닛은 상이한 배열의 커맨드들 및 데이터를 포함할 수 있는 상이한 패킷 타입들을 생성하고 사용한다.
다양한 실시예들에서, 각각의 압축된 패킷은 딕셔너리와의 비교의 결과에 따라 커맨드 및 가능한 다른 추가 정보를 포함한다. 일 실시예에서, 각각의 커맨드는 특정한 패킷 유형을 엔코딩하는 데이터 비트들의 조합이다. 동작중인 데이터의 일부에 대한 데이터 비트들이 모두 제로이면, 압축된 패킷(301)은 데이터의 그 부분에 대한 데이터의 압축된 페이지에서 사용될 수 있다. 압축된 패킷(301)은 단지 압축해제된 파일 내의 모든 데이터 비트들이 0이었음을 특정하는 커맨드를 포함한다.
데이터의 부분이 딕셔너리와 비교될 때, 일부 실시예들에서, 3개의 가능성들 중 하나가 존재한다. 데이터의 부분 내의 데이터 비트들의 시퀀스가 딕셔너리 내의 엔트리들 중 어느것과도 매치되지 않으면, 미스가 발생하고 압축된 패킷(302)은 데이터의 부분에 대해 데이터의 압축된 페이지에서 사용될 수 있다. 압축된 패킷(302)은 비트들의 이 시퀀스가 딕셔너리에서 발견되지 않았음을 지정하는 커맨드, 및 또한 데이터의 원래 부분(워드)의 카피를 포함한다. 일부 실시예에서, 딕셔너리 내에서 공간이 이용가능하다면, 미스는 압축 엔진으로 하여금 데이터의 부분에 대한 매치를 허용할 신규 엔트리를 포함하도록 딕셔너리를 수정하게 할 수 있음에 유의하여야 한다. 다른 실시예들에서, 미스는 압축 엔진으로 하여금 딕셔너리의 엔트리를 워드의 카피의 데이터로 대체하게 한다. 엔트리는 워드의 데이터로부터 생성된 인덱스에 의해 포인팅된다.
데이터의 부분이 딕셔너리 내의 존재하는 엔트리들과 매치되면, 히트가 발생하고 압축된 패킷(303)은 데이터의 부분에 대해 데이터의 압축된 페이지에서 사용될 수 있다. 압축된 패킷(303)은 딕셔너리 내의 엔트리에 매치된 데이터의 부분을 나타내는 커맨드, 및 또한 딕셔너리 내의 매치된 엔트리를 포인팅하는 인덱스를 포함한다. 다양한 실시예들에서, 인덱스는 데이터의 부분의 해시일 수 있다.
일부 경우들에서, 데이터의 부분은 부분적으로 딕셔너리 내의 엔트리와 매치될 수 있다. 이것이 발생하면, 압축된 패킷(304)이 데이터의 부분에 대해 데이터의 압축된 페이지에서 사용될 수 있다. 압축된 패킷(304)은 부분 히트를 지정하는 커맨드, 및 데이터의 부분과 부분적으로 매치되는 딕셔너리 내의 엔트리에 대응하는 인덱스 또는 해시, 및 엔트리와 매치되지 않는 데이터의 부분으로부터의 부분 워드를 포함할 수 있다. 다양한 실시예들에서, 데이터의 부분과 딕셔너리 내의 주어진 엔트리 사이에 매치되는 데이터의 비트들의 수는 임의의 적합한 기준에 따라 조정가능할 수 있다.
일부 실시예들에서, 압축된 패킷들((301)(제로) 및 (303)(히트)) 각각은 딕셔너리를 수정하지 않는 반면, 압축된 패킷들((302)(미스) 및 (304)(부분 히트))은 딕셔너리 내에 저장된 정보를 가지고 있다. 일 실시예에서, 전체 32-비트 워드(또는 다른 선택된 워드 길이)가 전술된 바와 같이 딕셔너리 내에 저장된다. 일부 실시예들에서, 딕셔너리에 기록된 워드는 딕셔너리로부터 판독된 워드를 대체하고 딕셔너리 워드와 프로세싱되고 있는 현재 그룹 내의 워드들 사이의 비교를 수행하기 위해 사용된다. 일례에서, 현재의 그룹 내의 3개의 워드들 각각이 인덱스 7과 같은 동일한 인덱스를 가지면, 예컨대 판독 요청에 의해, 딕셔너리의 엔트리 7이 액세스된다. 엔트리 7 내의 워드는 딕셔너리로부터 검색되고 현재 그룹 내의 3개의 워드들과 비교된다.
현재 그룹의 처음 2개의 워드들이 딕셔너리의 엔트리 7로부터의 워드에 매치되면, 2번의 비교는 결과적으로 히트를 가져오고, 이들 2개의 워드들 각각에 대해 압축된 패킷(303)이 생성된다. 이들 2개의 워드들에 대해서는 딕셔너리의 수정이 수행되지 않는다. 그러나, 현재 그룹의 제3 워드가 엔트리 7로부터의 워드에 매치되지 않으면, 비교는 결과적으로 미스가 되고, 이 제3 워드에 대해 압축된 패킷(302)이 생성된다. 추가적으로, 이 제3 워드가 딕셔너리에 추가된다. 일 실시예에서, 이 제3 워드는 딕셔너리의 엔트리 7 내의 워드를 대체한다. 따라서, 딕셔너리는 이 제3 워드에 대해 업데이트된다.
상기의 예와 유사하게, 부분 히트 비교는 결과적으로 또한 딕셔너리의 업데이트로 이어진다. 제3 워드의 일부가 엔트리 7 내의 워드에 매치되지만 다른 상이한 부분이 매치되지 않으면, 비교는 결과적으로 부분 히트가 된다. 부분 히트들에 대해서, 압축된 패킷(304)이 생성된다. 일례에서, 현재 그룹 내의 32-비트 제3 워드의 비트 10 내지 비트 31이, 딕셔너리의 엔트리 7로부터 검색된 32-비트 워드의 비트 10 내지 비트 31에 매치되면, 비교는 결과적으로 부분 히트를 가져온다. 비트 0 내지 비트 9가 압축된 패킷(304) 내에 저장되는 반면, 이 제3 워드의 전체 32 비트들은 딕셔너리의 엔트리 7 내의 워드를 대체한다.
도 3에 도시된 실시예에서 볼 수 있는 바와 같이, 압축된 패킷들(303(히트) 및 304(부분 히트)) 각각이 생성된 인덱스를 저장한다. 따라서, 압축된 패킷으로부터 인덱스가 검색될 수 있으므로, 나중의 압축해제 동작 동안, 인덱스는 재생성되지 않는다. 압축된 패킷(301)(제로)이 인덱스를 저장하지 않지만, 나중의 압축해제 동작 동안, 인덱스가 재생성되지 않는다. 압축된 패킷(302)(미스)은 생성된 인덱스를 저장하지 않는다. 따라서, 나중의 압축해제 동작 동안, 인덱스는 압축된 패킷(302) 내의 워드의 콘텐츠로부터 재생성된다.
제5 패킷 타입이 또한 채용될 수 있다. 압축된 패킷(305)은 반복된 패킷들의 수의 카운트를 나타내는 커맨드를 포함할 수 있다. 그러한 패킷들은 다수의 동일한 패킷들을, 특정 패킷이 시퀀스 내에서 몇 번이나 발생했는지를 나타내는 런-길이 엔코딩(RLE; run-length encoding) 패킷이 후속되는 특정 패킷으로 대체하기 위해 사용될 수 있다. RLE 패킷들을 채용함으로써, 반복된 패킷의 모든 인스턴스들 대신에, 패킷이 반복될 횟수와 함께 시퀀스 내의 반복된 패킷의 단일 카피만을 저장함으로써 추가의 압축이 달성될 수 있다.
일부 실시예들에서, 도 3에 도시된 것들과 같은 압축된 패킷들이 결합되어 그룹을 형성할 수 있다. 압축된 패킷들의 그룹(310)은 압축된 패킷들의 그룹의 특정한 실시예를 도시한다. 도시된 실시예에서, 압축된 패킷들(312, 314, 316 및 318)은 타겟 저장 위치에 기록될 수 있는 단일 그룹으로 함께 연결된다. 그러나 어떤 경우에는, 커맨드들을, 다양한 압축된 패킷들 내의 그들의 대응하는 페이로드들로부터 분리하는 것이 바람직할 수 있다. 이러한 기법을 채용하는 압축된 패킷들의 그룹(330)의 일 실시예가 도 3에 도시된다. 도시된 실시예에서, 페이로드들(332a, 334a, 336a, 338a)은 함께 연결된다. 유사하게, 페이로드들(332a 내지 338a)에 대응하는 커맨드들 Cmd(332b, 334b, 336b, 338b)이 이어서 이전에 연결된 페이로드들 상에 연결될 수 있다.
도 4를 참조하면, 압축 엔진(400)의 일 실시예를 도시하는 블록도가 도시된다. 다양한 실시예들에서, 압축 엔진(400)은 도 2의 실시예에 도시된 바와 같은 압축 엔진(204)에 대응한다. 도시된 실시예에서, 하드웨어 레인(400)은 판독 인터페이스(401), 패킷 생성기(402), RLE 필터(404), 패킷 버퍼(404), 그룹 생성기(405), 및 기록 인터페이스(406)를 포함한다. 다양한 실시예들에서, 컴포넌트들(401 내지 406) 각각은 다수의 하드웨어 레인들을 포함한다. 도 4에 도시된 실시예는 단지 일례라는 점에 유의하여야 한다. 다른 실시예들에서, 상이한 회로 블록들 및 상이한 배열의 회로 블록들이 채용될 수 있다.
다양한 실시예들에서, 판독 인터페이스(401)는, 예컨대 도 2에 도시된 것과 같은 판독 버퍼(201)와 같은 판독 버퍼로부터 다수의 워드들을 판독한다. 예를 들어, 일부 실시예들에서, 판독 인터페이스(401)는 판독 버퍼로부터, 병렬로 4 개의 32-비트 워드들을 판독할 수 있다. 다른 실시예들에서, 다른 수의 워드들 및 다른 워드 사이즈가 가능하고 고려된다. 판독 인터페이스(401)는 판독 버퍼로부터 판독된 데이터에 대한 일부 검사를 추가적으로 수행할 수 있다. 예를 들어, 판독 인터페이스(401)는 워드들 중 하나가 전부 제로를 포함하는지를 결정하기 위해 제로 검출 로직을 이용하여 검사할 수 있다. 추가적으로, 판독 인터페이스(401)는 워드들 중 임의의 것이 다른 워드들 중 하나 이상과 동일한지 또는 부분적으로 동일한지를 검사할 수 있다.
추가적으로, 판독 인터페이스(401)는 딕셔너리 룩업과 함께 사용될 해시 또는 인덱스를 계산할 수 있고, 워드들 중 임의의 것이 동일한 인덱스를 갖는지를 알기 위해 검사할 수 있다. 일례에서, 다이렉트-매핑된, 16-엔트리 딕셔너리에 액세스하기 위해 4-비트 인덱스가 사용된다. 일부 실시예들에서, 판독 인터페이스(401)는 4-비트 인덱스를 생성하기 위해 주어진 42-비트 워드의 특정 비트들 사이에 익스클루시브-OR 불린 연산을 수행할 수 있다. 다른 실시예들에서, 판독 인터페이스(401)는 인덱스를 생성하기 위해 특정 워드의 비트들에 근거하여 해시 테이블에 액세스한다. 또 다른 실시예들에서, 인덱스를 생성하기 위해 주어진 워드의 특정 비트들에 대해 해시 함수가 수행된다. 또한, 테이블 룩업, 다양한 해시 함수들 중 하나, 및 다양한 불린 로직 함수들 중 하나 중 하나 이상의 조합이 인덱스를 생성하기 위해 사용된다. 딕셔너리에 액세스하기 위해 사용하기 위한 인덱스를 생성할 때, 압축 엔진(400)은 통계-기반 압축 알고리즘 및 딕셔너리-기반 압축 알고리즘의 조합을 수행한다.
일 실시예에서, 그룹의 워드들은 최좌측(left-most) 워드가 그룹의 가장 오래된 워드이고 최우측(right-most) 워드가 그룹의 가장 새로운 워드가 되도록 판독 인터페이스(401)에 의해 판독된다. 가장 오래된 워드와 가장 새로운 워드 사이에 있는 워드들은 동일한 방식으로 순서화된다. 다른 실시예들에서, 최우측 워드가 그룹의 가장 오래된 워드이고 최좌측 워드가 그룹의 가장 새로운 워드이다. 일부 실시예들에서, 둘 이상의 워드들이 동일한 인덱스를 가질 때, 각각의 워드로부터 하나씩의 다수의 판독 요청들이 대신에, 단일 판독 요청이 딕셔너리로 송신된다. 일 실시예에서, 판독 인터페이스(401)는 동일한 인덱스를 갖는 둘 이상의 워드들 중 가장 오래된 워드에 대해서만 판독 요청을 생성하고, 동일한 인덱스를 갖는 둘 이상의 워드들 중 다른 워드들을 대신하여, 생성된 인덱스를 갖는 판독 요청을 딕셔너리로 송신한다.
판독 인터페이스(401)는 워드들을 패킷 생성기(402)에 송신하기 전에 워드들을 저장하기 위해, 다수의 플립-플롭 회로들, 래치들, 및 다른 순차적 요소들을 포함할 수 있다. 추가적으로, 일부 실시예들에서, 판독 인터페이스(401)는 둘 이상의 파이프라인 스테이지들을 포함한다. 따라서, 일 실시예에서, 딕셔너리의 특정 엔트리의 콘텐츠에 대한 판독 요청이, 예컨대 동일 인덱스를 갖는 둘 이상의 워드들 대신에, 제1 파이프라인 스테이지의 단부에서 파이프라인 순차적 요소들 내에 저장된다. 판독 요청은 나중의 제2 파이프라인 스테이지에서 딕셔너리로 송신되는 반면, 워드들의 다음 그룹이 판독 버퍼로부터 판독되고 인덱스들이 다음 그룹을 위해 생성된다.
다양한 실시예들에서, 패킷 생성기(402)는 판독 인터페이스(401)로부터 수신된 워드들 각각에 대해 압축된 패킷을 생성한다. 패킷 생성기(402)는 주어진 워드를 딕셔너리 내의 하나 이상의 엔트리들과 비교함으로써 도 3에 도시된 것들과 유사한 패킷들을 생성한다. 일 실시예에서, 주어진 워드는 CAM-기반 비교 회로부를 사용하여 딕셔너리 내의 각각의 엔트리와 비교된다. 다른 실시예들에서, 딕셔너리의 특정 엔트리를 특정하는 인덱스가 딕셔너리의 액세스를 위해 그리고 비교에서 사용하기 위한 워드를 검색하기 위해 사용된다. 그러나, 다수의 하드웨어 레인들에 의한 병렬 실행을 위해, 패킷 생성기(402)는, 주어진 워드를, 딕셔너리로부터 검색된 콘텐츠들이 아닌, 다른 하드웨어 레인으로부터의 워드와 비교함으로써, 도 3에 도시된 것들과 유사한 패킷들을 생성한다. 선택 로직은 다수의 하드웨어 레인들의 파이프라인 스테이지들의 로딩에 기반한다. 추가의 세부사항들이 추후에 예시들과 함께 제공된다. 패킷 생성기(402)는 수행된 비교에 근거하여 적합한 커맨드 및 페이로드를 결정할 수 있다. 패킷 생성기(402)는 또한 생성된 패킷들을 RLE 필터(403)로 송신하기 전에 이들을 저장하기 위한 다수의 플립-플롭 회로들을 포함할 수 있다.
RLE 필터(403)는 유사한 패킷들의 시퀀스를 트래킹하도록 구성된 순차 로직 회로 또는 상태 머신을 포함할 수 있다. 유사한 패킷들은, 예를 들어, 제로 패킷들, 즉, 모두 제로 데이터 비트들을 포함하는 패킷들의 시퀀스, 또는 동일한 딕셔너리 인덱스에 대한 히트 패킷들의 시퀀스일 수 있다. 예컨대, 제로 패킷과 같은 가능한 시퀀스의 시작이 검출되면, RLE 필터(403)가 시퀀스 내의 후속적인 패킷들의 수를 트래킹할 수 있다. 시퀀스가 끝나면, RLF 필터(403)는 특정 패킷을 복제하는 횟수를 나타내는 RLE 패킷을 생성할 수 있다. 시퀀스 내의 초기 패킷 및 RLE 패킷이 저장될 수 있고, 그에 의해 저장될 필요가 있는 패킷들의 수가 감소된다. 시퀀스를 시작하는 패킷의 추가적인 카피들을 생성하기 위해 압축해제 동안에 RLE 패킷이 사용될 수 있다.
패킷 버퍼(404)는 그룹 생성기(405)에 의한 그룹 생성 전에 패킷들을 저장하기 위해 필요한 다수의 플립-플롭 또는 다른 적합한 저장 회로들을 포함할 수 있다. 다양한 실시예들에서, 그룹 생성기(405)는 다수의 멀티플렉스 회로들 및 시프트 레지스터들을 포함할 수 있다. 멀티플렉스 회로들 및 시프트 레지스터들은, 다른 로직 회로들과 함께, 패킷들의 그룹의 형성을 가능하게 하도록 배열될 수 있다. 패킷들의 그룹의 포맷은, 일부 실시예들에서, 도 3에 도시된 패킷 그룹의 포맷에 대응한다.
기록 인터페이스(406)는 그룹들이 패킹되는 다수의 버퍼들을 포함할 수 있다. 다양한 실시예들에서, 기록 인터페이스(406)는 버퍼가 가득 찰 때까지 다수의 그룹들을 단일 버퍼 내에 패킹할 수 있고, 그 시점에, 버퍼의 콘텐츠는, 타겟 저장 위치로 복사될 것을 대기하면서 기록 버퍼 내에 기록될 수 있다. 패킷들이 다양한 사이즈일 수 있으므로, 그룹들 또한 다양한 사이즈일 수 있다. 따라서, 다수의 그룹들이 단일 버퍼 내에서 결합될 수 있다. 기록 인터페이스(406) 내에 포함된 버퍼들은 기록 인터페이스(406) 내에서 파이프라인된 동작을 가능하게 하도록 배열될 수 있다.
이제 도 5를 참조하면, 압축 프로세싱(500)의 일 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 통계-기반 압축 알고리즘 및 딕셔너리-기반 압축 알고리즘의 조합을 사용하는 하이브리드 압축 알고리즘에 대해 직렬 실행이 수행된다. 도시된 바와 같이, 단일 하드웨어 레인이 사용되며, 이는 "레인 0"으로 지칭된다. 다수의 하드웨어 레인들에서의 병렬 실행을 갖는 압축 프로세싱이 추후에 제공된다. 레인 0이 4번 도시되지만, 이는 설명의 편이를 위한 것이고, 이 도시된 예에서는 단일 하드웨어 레인만이 사용된다. 압축되고 있는 데이터의 부분들은 워드들로서 지칭된다. 도시된 바와 같이, 딕셔너리(510)는 다수의 엔트리들에서 최근에 보았던 워드들을 저장한다. 도시된 예에서, 딕셔너리(510)는 테이블과 같은 다이렉트-매핑된 데이터 저장 구조이다. 딕셔너리(510)는 다수의 래치들, 플립-플롭들, 랜덤 액세스 메모리(RAM) 셀들, 또는 다양한 엔트리들에 포함된 개별 데이터 비트들을 저장하도록 구성된 다른 적합한 저장 회로들을 포함할 수 있다.
도시된 바와 같이, 시간 t0에서, 레인 0에는 워드 0 = C가 로딩된다. 여기서 "C"는 멀티-비트 값을 나타내기 위한 일반 값으로서 사용된다. 여기서 16 진수 및 다른 표현은 사용되지 않는다. 예를 들어, 값 "C"는 32-비트 워드를 나타낼 수 있다. 시간 t1에, 해시 함수에 의해 인덱스가 생성되고 결과적인 인덱스는 7이다. 시간 t2에, 판독 요청이 생성된다. 판독 요청은 인덱스를 7로 특정한다. 판독 요청이 딕셔너리(510)로 송신되고 엔트리 7이 액세스된다. 엔트리 7 내에 저장되 값, 즉 값 C가 복사되고 레인 0으로 리턴된다.
시간 t3에, 레인 0의 비교 로직은 두 값들을 비교한다. 제1 값은 딕셔너리(510)의 엔트리 7로부터 검색된 값 C이다. 제2 값은 워드 0 의 값, 즉 C이다. 비교 결과는 히트이다. 시간 t4에, 레인 0 내의 로직은 딕셔너리(510)에 대한 업데이트가 없음을 결정한다. 시간 t5에, 2개의 동작들이 시작된다. 제1 동작은 레인 0에 워드 1 = C를 로딩하는 것이다. 제2 동작은 워드 0에 대한 패킷을 빌드하는 것이다. 제1 동작과 관련하여, 워드 0 = C인 경우에 대해, 딕셔너리(510)에 대해 업데이트가 수행되지 않는다. 그러나, 시간 t4에 업데이트들이 발생했다면, 이 업데이트들은 워드 1 = C에 대한 임의의 판독 요청이 딕셔너리(510)에 송신되기 전에 완료될 필요가 있다. 레인 0에 워드 1 = C를 로딩하는 것은 레인 0의 제2 카피에 도시된다. 제2 동작과 관련하여, 일 실시예에서, 생성된 압축된 패킷은 도 3에 도시된 것들과 유사하다. 예를 들어, 압축된 패킷(303)이 워드 0에 대해 생성될 수 있다.
도시된 바와 같이, 시간 t5에, 레인 0에는 워드 1 = C가 로딩된다. 다시, 레인 0에 워드 1 = C를 로딩하는 것은 레인 0의 제2 카피에 도시된다. 해시 함수에 의해 인덱스가 생성되고 결과적인 인덱스는 7이다. 시간 t6(설명의 편이를 위해 도시하지 않음)에서, 판독 요청이 생성된다. 판독 요청은 인덱스를 7로 특정한다. 판독 요청이 딕셔너리(510)로 송신되고 엔트리 7이 액세스된다. 엔트리 7 내에 저장되 값, 즉 값 C가 복사되고 레인 0으로 리턴된다. 시간 t7(도시하지 않음)에서, 레인 0의 비교 로직이 두 개의 값들을 비교한다. 제1 값은 딕셔너리(510)의 엔트리 7로부터 검색된 값 C이다. 제2 값은 워드 1 의 값, 즉 C이다. 비교 결과는 히트이다.
시간 t8(도시하지 않음)에서, 레인 0 내의 로직은 딕셔너리(510)에 대한 업데이트가 없음을 결정한다. 시간 t9(도시하지 않음)에서, 2개의 동작들이 시작된다. 제1 동작은 레인 0에 워드 2 = C를 로딩하는 것이다. 제2 동작은 워드 1에 대한 패킷을 빌드하는 것이다. 동작들은 워드 2 및 워드 3에 대해 반복된다. 도시된 바와 같이, 시간(t1 및 t5)에서 동작들은 병렬로 행해질 수 있고, 따라서, 단일 하드웨어 레인으로 직렬 구현이 도시되나, 앞선 워드에 대해 압축된 패킷이 생성되기 전에 후속 워드의 프로세싱이 시작될 수 있다. 따라서, 시간 t1 내지 시간 t5와 같은 표시된 시간들 사이, 및 표시된 시간들 내, 둘 모두에서, 다른 파이프라인 스테이지들이 사용될 수 있다. 예를 들어, 시간 t1에, 제1 파이프라인 스테이지는 워드를 로딩할 수 있고 제2 파이프라인 스테이지는 인덱스를 생성할 수 있다. 그러나, 비교 결과에 근거하여 딕셔너리(510)를 업데이트하고 딕셔너리(510)로부터 엔트리를 판독하는 것과 같이 워드들 사이에 종속성이 존재한다.
이제 도 6을 참조하면, 압축 프로세싱(600)의 다른 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 통계-기반 압축 알고리즘 및 딕셔너리-기반 압축 알고리즘의 조합을 사용하는 하이브리드 압축 알고리즘에 대해 직렬 실행이 수행된다. 도시된 바와 같이, 단일 하드웨어 레인이 사용되며, 이는 "레인 0"으로 지칭된다. 전술된 딕셔너리(510)에는 동일하게 번호가 매겨져 있다.
도시된 바와 같이, 시간 t0에서, 레인 0에는 워드 0 = A가 로딩된다. 시간 t1 내지 시간 t5에 수행되는 동작들은 도 5에서 기술된 것과 동일하다. 그러나, 여기서, 딕셔너리(510)의 엔트리 7에 저장된 값은 A이다. 시간 t5에, 레인 0에는 워드 1 = B가 로딩된다. 값 B는 값 A와 상이하지만, 해시 함수에 의해 사용되는 값 B의 서브세트는 동일한 인덱스, 즉 7을 생성한다. 일례로, 서브세트는 32-비트 워드의 비트 10 내지 비트 17이다. 따라서, 시간 t7에서(도시되지 않았으나 시간 t3와 동일함), 비교 로직은 워드 1의 값 B와 딕셔너리(510)의 엔트리 7로부터 검색된 값 A를 비교한다. 이 예에서, 비교 결과는 미스이다. 부분 히트의 비교 결과가 또한 가능하지만, 이 예에서는 미스가 사용된다. 시간 t8에서, 워드 1이 이제 가장 최근에 보았던 워드이므로, 딕셔너리(510)의 엔트리 7은 워드 1의 값 B로 업데이트된다.
시간 t9에서, 레인 0에는 워드 2 = B가 로딩되고 인덱스 7이 해시 함수에 의해 생성된다. 따라서, 나중의 시간 t11에서(도시되지 않았으나 시간 t3와 동일함), 비교 로직은 워드 2의 값 B와 딕셔너리(510)의 엔트리 7로부터 검색된 값 B를 비교한다. 비교 결과는 히트이다. 따라서, 딕셔너리(510)는 업데이트할 필요가 없다.
시간 t13에서, 레인 0에는 워드 3 = C가 로딩된다. 값 C가 값 A 및 값 B와 상이하지만, 해시 함수에 의해 사용되는 값 C의 서브세트는 동일한 인덱스, 즉 7을 생성한다. 따라서, 시간 t15에서(도시되지 않았으나 시간 t3와 동일함), 비교 로직은 워드 3의 값 C와 딕셔너리(510)의 엔트리 7로부터 검색된 값 B를 비교한다. 이 예에서, 비교 결과는 미스이다. 부분 히트의 비교 결과가 또한 가능하지만, 이 예에서는 미스가 사용된다. 시간 t16에서, 워드 3이 이제 가장 최근에 보았던 워드이므로, 딕셔너리(510)의 엔트리 7은 워드 3의 값 C로 업데이트된다. 이 예에서 알 수 있듯이, 비교 결과에 근거하여 딕셔너리(510)를 업데이트하고 딕셔너리(510)로부터 엔트리를 판독하는 것과 같이 워드들 사이에 종속성이 존재한다. 그러나, 주어진 워드에 대해 딕셔너리(510)의 엔트리를 판독하는 것은 주어진 워드보다 오래되었으며 주어진 워드보다 앞서 프로세싱된 워드에 대한 압축된 패킷을 생성하는 것과 무관하다.
이제 도 7를 참조하면, 압축 프로세싱(700)의 일 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 통계-기반 압축 알고리즘 및 딕셔너리-기반 압축 알고리즘의 조합을 사용하는 하이브리드 압축 알고리즘에 대해 병렬 실행이 수행된다. 도시된 바와 같이, "레인 0", "레인1", "레인 2" 및 "레인 3"으로 지칭되는 다수의 하드웨어 레인들이 사용된다. 도시된 실시예에서는 4개의 하드웨어 레인들을 보여주지만, 다른 수의 다수의 하드웨어 레인들이 가능하고 고려된다. 전술된 딕셔너리(510)에는 동일하게 번호가 매겨져 있다.
전술된 바와 같이, 파이프라인 스테이지들은, 각각의 시간 t1 내지 시간 t5 사이와 같은 표시된 시간들 사이, 및 표시된 시간들 내, 둘 모두에서 사용될 수 있다. 예를 들어, 시간 t1에, 제1 파이프라인 스테이지는 다수의 워드들을 로딩할 수 있고 제2 파이프라인 스테이지는 다수의 로딩된 워드들 각각에 대한 인덱스를 생성할 수 있다. 추가적으로, 표시된 시간들 중 하나 이상이 동일한 파이프 라인 스테이지에 배치될 수 있다. 예를 들어, 주어진 클록 사이클 내에서 동작들이 완료되면 시간 t3 및 시간 t4에 수행된 동작들은 단일 파이프라인 스테이지에서 결합될 수 있다. 도시된 바와 같이, 시간 t0에서, 레인 0 내지 레인 3 각각에는 워드 0 내지 워드 3 중 각 하나가 로딩된다. 이 예에서, 워드 0 내지 워드 3 중 각 하나가 값 C를 가진다.
레인 0 내지 레인 3의 주어진 하드웨어 레인에 대해 시간 t1 내지 t5에 수행된 동작들은 일부 조정을 갖고 단일 하드웨어 레인에 대해 도 5에서 기술된 것과 동일하다. 예를 들어, 시간 t2에, 하드웨어 레인들 레인 0 내지 레인 3을 대신하여, 단일 판독 요청이 레인 0으로부터 딕셔너리(510)로 송신된다. 다양한 실시예들에서, 압축 엔진 내의 제어 로직은 레인 0 내지 레인 3의 각각의 하드웨어 레인이 딕셔너리(510)의 동일한 엔트리에 액세스하는 것을 결정한다. 다양한 실시예들에서, 제어 로직이 하드웨어 회로부 내에 구현된다. 따라서, 레인 0이 워드들 워드 0 내지 워드 3의 그룹 중 가장 오래된 워드를 가진다는 것이 알려진다. 이 경우에, 워드 0이 가장 오래된 워드이고, 이는 레인 0에 로딩된다.
추가적으로, 제어 로직은 레인 3이 워드들 워드 0 내지 워드 3의 그룹 중 가장 새로운 워드를 가진다는 것을 결정한다. 이 경우에, 워드 3이 가장 새로운 워드이고, 이는 레인 3에 로딩된다. 워드 0 내지 워드 3과 같은 워드들의 제1 그룹과, 워드 4 내지 워드 7을 갖는 나중의 로딩된 워드들의 그룹과 같은 워드들의 제2 그룹 사이에 종속성이 존재한다. 도 7의 도시된 실시예에서, 비교 결과는 딕셔너리(510)의 업데이트가 필요하다고 나타내지 않는다. 그러나, 딕셔너리(510)의 엔트리 7을 업데이트하기 위해 워드 3 = C의 값이 딕셔너리(510)로 송신되었으면, 충돌이 발생하지 않는다.
워드 0 내지 워드 3에 대한 비교 결과에 근거한 딕셔너리(510)의 업데이트는 나중의 워드 4 내지 워드 7 중 어느 하나에 대해 판독 요청이 딕셔너리(510)로 송신되기 전에 종료될 필요가 있다. 그러나, 종속성은, 워드 0 내지 워드 3 중 임의의 두 워드들 사이의 종속성이 아니라, 현재의 가장 새로운 워드, 즉 워드 3에 의한 딕셔너리(510)의 업데이트에 근거한다. 다음 예는 이 사실을 강조한다.
이제 도 8을 참조하면, 압축 프로세싱(800)의 다른 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 다시 하드웨어 레인들 레인 0 내지 레인 3 및 딕셔너리(510)를 사용하여 하이브리드 압축 알고리즘에 대해 병렬 실행이 수행된다. 도시된 바와 같이, 시간 t0에서, 레인 0 내지 레인 3 각각에는 워드 0 내지 워드 3 중 각 하나가 로딩된다. 이 예에서, 워드 0은 값 A를 가지고, 워드 1 및 워드 2 각각은 값 B를 가지고 워드 3은 값 C를 가진다. 딕셔너리(510)의 엔트리 7은 값 A를 가진다. 레인 0 내지 레인 3의 주어진 하드웨어 레인에 대해 시간 t1 내지 t5에 수행된 동작들은 일부 조정을 갖고 앞서 기술된 것과 동일하다. 시간 t1에, 레인 0 내지 레인 3 각각이 동일한 인덱스 7을 생성하는 것이 발견될 때, 다양한 실시예들에서, 회로부 내에 구현된 제어 로직은, 레인 0이 동일한 인덱스를 갖는 워드들 워드 0 내지 워드 3의 그룹 중 가장 오래된 워드를 가진다는 것을 결정한다. 추가적으로, 제어 로직은 레인 3이 동일한 인덱스를 갖는 워드들 워드 0 내지 워드 3의 그룹 중 가장 새로운 워드를 가진다는 것을 결정한다.
일부 실시예들에서, 워드 0 내지 워드 3 중 적어도 하나의 워드가 다른 워드와 동일한 인덱스를 갖지 않을 때, 동일한 인덱스를 갖는 워드들의 그룹만을 동시에 프로세싱하기 위해, 이 적어도 하나의 워드는 다음 파이프 라인 스테이지로 아직 패스되지 않는다. 예를 들어, 워드 3이 12의 인덱스를 가지면, 워드 3이 대기하는 동안 워드 0 내지 워드 2가 딕셔너리(510)에 액세스하기 위해 다음 파이프라인 스테이지로 패스될 수 있다. 그러나, 워드 3은 여전히 나중의 워드 4보다 먼저 파이프라인 스테이지들을 따라 이동한다. 다른 실시예들에서, 워드 3이 상이한 인덱스(다른 워드들이 그들 사이에 동일한 7의 인덱스를 가질 때 인덱스 12와 같은)를 가질 때, 워드 3은 다음 파이프라인 스테이지로 패스된다. 그러한 경우에, 딕셔너리(510)는 2개의 동시 액세스를 지원하기 위해 듀얼-포팅되거나, 워드 3이 이 나중의 파이프라인 스테이지에서 딕셔너리(510)에 액세스하기 위해 대기한다.
다른 예에서, 워드 0, 워드 2, 및 워드 3 각각이 7의 인덱스를 가지는 반면 워드 1이 12의 인덱스를 가질 때, 일부 실시예들에서, 워드 0은 단독으로 다음 파이프라인 스테이지로 송신된다. 나중의 클록 사이클에서, 워드 1이 단독으로 다음 파이프라인 스테이지로 송신된다. 또 나중의 파이프라인 스테이지에서, 워드 2 및 워드 3 각각이 다음 파이프라인 스테이지로 송신된다. 따라서, 워드 0 내지 워드 3의 순서가 유지되고 압축된 패킷들의 생성은 동일한 순서를 갖는다. 다른 실시예들에서, 워드 0, 워드 2 및 워드 3 각각이 다음 파이프라인 스테이지에서 함께 송신되지만, 워드 1이 워드 0보다 더 새로운 것이고 워드 2보다 더 오래된 것임을 특정하는 표시가 유지된다. 또 다른 실시예들에서, 워드 0 내지 워드 3 각각은 다음 파이프라인 스테이지로 송신되고, 딕셔너리(510)는 2개의 동시 액세스들을 지원하기 위해 듀얼-포팅된다.
워드 0 내지 워드 3 각각이 시간 t2에 7의 동일한 인덱스를 갖는 예로 돌아가서, 하드웨어 레인 레인 0 내지 레인 3을 대신하여 단일 판독 요청이 레인 0으로부터 딕셔너리(510)로 송신된다. 시간 t3에, 레인 0 내지 레인 3에서 수행된 각각의 비교들이 레인에 대한 각각의 워드의 값과 딕셔너리(510)의 엔트리 7로부터 검색된 값 사이에 있음에 유의하여야 한다. 따라서, 워드 0 내지 워드 3 각각 사이에 종속성이 존재함에도 불구하고, 딕셔너리(510)의 엔트리 7로부터의 값 A의 카피가 레인 0 내지 레인 3 각각에서 사용된다. 예를 들어, 다시 도 6을 간단히 참조하면, 직렬 실행 동안, 워드 2 및 워드 3 각각은 워드들 사이의 종속성이 고려될 때 값 B와 비교된다. 딕셔너리(510)의 업데이트는 워드 0 내지 워드 3 각각의 직렬 프로세싱 사이에서 발생했다. 그러나, 여기 도 8에서는, 병렬 실행 동안, 워드 2 및 워드 3 각각이, 딕셔너리(510)에 대해 아직 업데이트가 수행되지 않은 딕셔너리(510)의 엔트리 7의 카피인, 값 A와 비교된다. 워드 0 내지 워드 3 및 엔트리 7에 대한 초기 값들은 동일하지만, 다수의 하드웨어 레인들에 의한 병렬 실행을 갖는 도 8에 도시된 비교 결과는 단일 하드웨어 레인에 의한 직렬 실행을 갖는 도 6에 도시된 비교 결과와 상이하다.
도 6의 비교 결과는 워드 0 내지 워드 3 각각에 대해 압축된 패킷을 생성하는데 사용될 수 있는 반면, 도 8의 비교 결과는 워드 0 내지 워드 3 각각에 대해 압축된 패킷들을 생성하는데 사용될 수 없다. 그러나, 다시, 워드 4 내지 워드 7과 같은 나중의 워드들의 제2 그룹 중 임의의 하나가 딕셔너리(510)에 액세스할 수 있게 하는 것은, 워드 0 내지 워드 3 중 임의의 두 워드들 사이의 종속성이 아니라, 현재 가장 새로운 워드, 즉 워드 3에 의한 딕셔너리(510)의 업데이트에 의존한다. 따라서, 현재 가장 새로운 워드, 즉 워드 3에 의한 딕셔너리(510)의 업데이트가 알려지면, 워드 4 내지 워드 7과 같은 나중의 워드들의 제2 그룹이 딕셔너리(510)에 액세스하는 것이 허용된다. 예를 들어, 가장 새로운 워드에 대한 업데이트는 워드 4 내지 워드 7과 같은 나중의 워드들의 제2 그룹으로부터의 판독 요청으로 포워딩(바이패스)될 수 있다.
도시된 실시예에서, 시간 t4에, 워드 3이 동일한 인덱스(7)를 가진 워드들의 그룹(워드 0 내지 워드 3) 중 가장 새로운 워드임이 알려지고, 추가적으로, 이 워드들의 그룹에 대해 적어도 한번의 업데이트가 발생한다는 것이 알려진다. 예를 들어, 미스의 비교 결과는 딕셔너리(510)가 업데이트될 것임을 나타낸다. 전술된 바와 같이, 부분 히트의 비교 결과 또한 딕셔너리(510)가 업데이트될 것임을 나타낸다. 적어도 하나의 딕셔너리 업데이트의 표시가 압축된 패킷들을 생성하는데 사용될 수는 없지만, 이 표시는 딕셔너리(510)가 업데이트될지를 결정하는데 사용될 수 있다. 이 예에서, 제어 로직은 딕셔너리(510)의 업데이트가 엔트리 7을 값 C로 기록하는 것임을 결정하는 것에 추가하여, 딕셔너리(510)의 업데이트가 발생하는 것을 결정한다. 따라서, 시간 t5에, 워드 0 내지 워드 3 각각에 대해 압축된 패킷들이 생성되는 동시에, 워드 4 내지 워드 7의 나중의 제2 그룹이 레인 0 내지 레인 3 내에 로딩된다.
일부 실시예들에서, 워드 4 내지 워드 7의 나중의 제2 그룹은 시간 t4에 레인 0 내지 레인 3 내에 로딩되고 각각의 인덱스들이 해시 함수에 의해 발견된다. 시간 t5까지, 워드 4 내지 워드 7이 동일한 인덱스를 가지면 워드 4 내지 워드 7 대신에 판독 요청이 딕셔너리(510)로 송신된다. 추가로, 워드 4 내지 워드 7이 또한 동일한 인덱스 7을 가지면 워드 3에 대응하는 업데이트가 이 판독 요청들로 포워딩될 수 있다. 따라서, 워드 4 내지 워드 7에 대한 판독 요청 전에 워드 0 내지 워드 3 사이의 종속성이 아직 결정되지 않았음에도 불구하고, 시간 t6에, 레인 0 내지 레인 3은 워드 4 내지 워드 7에 대해 비교를 위한 값 C를 사용한다.
일부 실시예들에서, 압축된 패킷들을 생성하기 위한 상당한 양의 시간 제약이 존재하지 않는다. 압축된 패킷들의 그룹들에 대해 다수의 패스들이 수행되는 동안 압축된 패킷들을 생성하기 위한 대기시간이 숨겨질 수 있다. 따라서, 시간 t5에, 워드 0 내지 워드 7 사이의 참 종속성을 결정하기 위한 제어 로직이 프로세싱을 시작할 수 있는 반면, 워드 4 내지 워드 7의 제2 그룹에 대해서는 이미 프로세싱이 시작되었다. 예를 들어, 비교 동작을 위한 참 종속 값을 찾는 단계가 행해졌다. 다시 간단하게 도 6을 참조하면, 워드 2 및 워드 3 각각에 대한 참 종속 값은 값 B이고 값 A가 아니다. 값 B는 워드 2보다 오래된 워드들 중 가장 새로운 워드인 워드 1의 값이다. 워드 0 및 워드 1 각각이 워드 2보다 오래된 것이고, 워드 1은 이들 두 워드들 중 가장 새로운 워드이다. 유사하게, 워드 0, 워드 1 및 워드 2 각각이 워드 3보다 오래된 것이고, 워드 2는 이들 세 워드들 중 가장 새로운 워드이다. 워드 2의 값이 또한 B이고, 그것은 워드 3에 대한 비교 동작에서 사용될 참 종속 값이다.
참 종속 값을 찾기 위한 제어 로직은 비교 로직 및 멀티플렉서 회로들을 포함할 수 있다. 침 종속 값을 찾기 위한 대기시간은, 특히 하드웨어 레인들의 수가 증가할 수록, 상당할 수 있다. 이 대기시간을 워드 0 내지 워드 3의 제1 그룹의 프로세싱과 워드 4 내지 워드 7의 제2 그룹의 프로세싱 사이에 추가하는 대신, 이 대기시간은 나중의 그룹내 픽싱(fixing) 동작 및 후속적인 압축된 패킷의 생성시에 제거되고 숨겨질 수 있다. 일부 실시예들에서, 레인 0 내에 로딩된 워드는 특정 인덱스에 대해 항상 가장 오래된 워드이므로, 레인 0 내에 로딩된 워드들에 대해 픽싱이 발생할 수 없음에 유의하여야 한다. 따라서, 비교 동작에 대한 참 종속 값은 항상 딕셔너리(510)로부터 판독된 값이거나 이전 워드들의 프로세싱으로부터 포워딩된(바이패스된) 값이다.
이제 도 9를 참조하여, 데이터를 효과적으로 압축하기 위한 방법(900)의 일 실시예의 일반화된 흐름도가 도시된다. 논의의 목적을 위해, 이 실시예의 단계들은 (도 11과 마찬가지로) 순차적 순서로 도시되어 있다. 그러나, 다른 실시예들에서, 일부 단계들은 도시된 것과 상이한 순서로 발생할 수 있고, 일부 단계들은 동시에 수행될 수 있고, 일부 단계들은 다른 단계들과 결합될 수 있고, 일부 단계들은 생략될 수 있다.
일부 실시예들에서, 명령어 페치 유닛은 명령어 캐시 또는 시스템 메모리 내의 다른 적합한 위치로부터 명령어를 수신한다. 명령어가 디코딩되고 압축 명령어인 것으로 결정된다(블록 902). 일 실시예에서, 압축/압축해제 유닛의 압축 엔진은 소스 페이지와 같은 소스 데이터를 소스 버퍼 내에 로딩(프리페치)한다(블록 904). 일부 실시예들에서, 소스 데이터는 처음에 데이터 캐시 내에 저장되고 이어서 나중에 압축/압축해제 유닛 내의 판독 버퍼 내에 저장된다. 일 실시예에서, 제1 수의 라인들이 프로세서 코어에 의해 프리페치되고, 소스 데이터의 요구되는 페이지에 남아있는 나머지 라인들은 압축/압축해제 유닛에 포함된 전용 회로에 의해 나중에 프리페치된다. 전용 회로는 압축 및 압축해제 동작에 대해 상이할 수 있는, 미리결정된 스트라이드 값을 사용하여 프리페치할 수 있다.
다수의 하드웨어 레인들 중 적어도 둘 이상의 하드웨어 레인들이 소스 데이터의 각각의 워드로 할당된다(블록 906). 일부 실시예들에서, 소스 데이터는 고정된 사이즈의 워드들과 같은 부분들로 분할된다. 특정한 인덱스가 각각의 단어에 대해 결정되며, 이 인덱스는 액세스할 딕셔너리의 엔트리를 특정한다(블록 908). 딕셔너리는 압축 또는 압축 해제 동작들 동안 가장 최근에 보았던 워드들을 저장한다. 전술된 바와 같이, 워드 내의 특정한 비트 필드가 해시 함수와 함께 사용되어 인덱스를 생성한다. 워드들의 제1 그룹 - 제1 그룹의 각각의 워드는 동일한 제1 인덱스를 가짐 - 에 대해, 딕셔너리가 액세스된다(블록 910). 예를 들어 동일한 인덱스를 가진 제1 그룹의 다수의 워드들을 대신하여, 단일 판독 요청이 딕셔너리에 송신된다.
제1 그룹의 참 그룹내 종속성을 결정하기 전에, 제2 그룹의 워드들 - 제2 그룹의 각각의 워드는 동일한 인덱스를 가짐 - 에 대해 딕셔너리가 액세스된다(블록 912). 다양한 실시예들에서, 제1 그룹 및 제2 그룹 각각은 동일한 인덱스를 가지고, 따라서, 딕셔너리의 동일한 엔트리에 액세스한다. 제1 그룹의 주어진 워드에 대한 참 그룹내 종속성은 제1 그룹의 주어진 워드보다 오래된 워드들 각각에 대한 비교 결과 및 딕셔너리 업데이트이다. 주어진 워드에 대한 비교 결과 및 딕셔너리 업데이트는 제1 그룹의 주어진 워드보다 더 새로운 워드들에 대한 참 그룹내 종속성의 일부이다. 제1 그룹의 참 그룹 종속성은 제1 그룹에 대한 압축된 패킷을 생성하고 후속의 그리고 더 새로운 제 2 그룹에 대해 딕셔너리를 정확히 업데이트하는데 사용된다. 그러나 제1 그룹에 대해 가장 새로운 워드가 알려져 있고 또 제1 그룹에 대해 적어도 한번의 딕셔너리 업데이트가 발생하는 것이 발견될 때, 제1 그룹의 참 그룹내 종속성이 아직 알려지지 않았음에도 불구하고, 제2 그룹에 필요한 딕셔너리 업데이트가 이제 알려진다. 제2 그룹에 필요한 딕셔너리 업데이트는 제1 그룹의 인덱스에 의해 포인팅되는 딕셔너리의 엔트리에 기록되는 제1 그룹의 가장 새로운 워드의 값이다. 다양한 실시예들에서, 제1 그룹의 가장 새로운 워드의 값이 제2 그룹으로 포워딩(바이패스)되는 반면, 딕셔너리 업데이트는 나중에 또는 동시에 실제로 발생한다.
제1 그룹 및 제2 그룹 각각의 워드들에 대해 압축된 패킷들(또는 "압축 패킷들")이 생성된다(블록(914)). 다양한 실시예들에서, 적어도 제1 그룹에 대해 그룹내 픽싱 동작이 수행된다. 일 실시예에서, 압축 동작들의 프로세싱 동안, 제 1 그룹의 각각의 워드를 제1 그룹의 인덱스에 의해 포인팅된 딕셔너리 엔트리 내에 저장된 워드의 카피와 비교한 것에 근거하여 적어도 하나의 딕셔너리 업데이트의 표시가 생성된다. 그룹내 픽싱(수정(fixup)) 동작 동안, 제1 그룹의 각각의 워드와 비교할 참 값을 찾아냄으로써 참 그룹내 종속성이 발견된다. 일부 실시예들에서, 제 1 그룹의 주어진 워드에 대한 참 값은 제1 그룹의 주어진 워드보다 더 오래된 가장 새로운 워드의 값이다.
전술된 바와 같이, 제1 그룹의 주어진 워드와 비교하기위한 참 그룹내 종속 값을 찾기 위한 제어 로직은 비교 로직 및 멀티플렉서 회로를 포함할 수 있다. 침 그룹내 종속 값을 찾기 위한 대기시간은, 특히 하드웨어 레인들의 수가 증가할 수록, 상당할 수 있다. 이 대기시간을 제1 그룹과 제2 그룹의 프로세싱 사이에 추가하는 대신, 이 대기시간은 나중의 그룹내 픽싱 동작에서 제거되고 숨겨질 수 있다. 압축 동작들의 다른 예들이 제공되기 전에, 압축해제 동작들의 예들이 다음에 기술된다.
이제, 도 10을 참조하면, 압축해제 프로세싱(1000)의 일 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 하이브리드 압축 알고리즘에 대해 다시 병렬 실행이 수행된다. 여기서 병렬 하드웨어 레인들 레인 0 내지 레인 3은 압축해제 엔진에서 사용된다. 도시된 실시예에서는 4개의 하드웨어 레인들을 보여주지만, 다른 수의 다수의 하드웨어 레인들이 가능하고 고려된다. 전술된 딕셔너리(510)에는 동일하게 번호가 매겨져 있다. 압축 엔진의 하드웨어 레인들과 유사하게, 압축해제 엔진의 하드웨어 레인들이 파이프라인 스테이지들을 사용할 수 있다.
도시된 바와 같이, 레인 0에는 히트를 특정하는 Cmd(커맨드) 및 7의 인덱스를 갖는 패킷0이 할당된다. 명칭에 "압축된"이 사용되지 않았지만, 패킷 0 내지 패킷 3 각각은 전술된 바와 같이 생성된 압축된 패킷이다. 레인 1에는 미스를 특정하는 Cmd 및 값 B를 갖는 페이로드를 갖는 패킷 1이 할당된다. 레인 2에는 히트를 특정하는 Cmd 및 7의 인덱스를 갖는 패킷 2가 할당되고, 레인 3에는 미스를 특정하는 Cmd 및 값 C를 갖는 페이로드를 갖는 패킷 3이 할당된다. 사전(510)의 엔트리 7은 초기에 값 A를 저장한다. 시간 t1에, 인덱스가 없는 패킷들은 각각의 페이로드들로부터 생성된 인덱스를 가진다. 전술된 인덱스 생성 동작들이 다시 사용될 수 있다. 도시된 바와 같이, 패킷 1 및 패킷 3 각각이 생성된 7의 인덱스를 가진다.
다양한 실시예들에서, 압축 해제 엔진 내의 제어 로직은 레인 0 내지 레인 3의 각각의 하드웨어 레인이 7의 동일한 인덱스를 가지므로 딕셔너리(510)의 동일한 엔트리에 액세스하는 것을 결정한다. 다양한 실시예들에서, 제어 로직이 하드웨어 회로부 내에 구현된다. 따라서, 레인 0이 가장 오래된 패킷을 가지고 레인 3이 패킷 0 내지 패킷 3 중 가장 새로운 패킷을 가지는 것이 알려진다. 시간 t2에, 하드웨어 레인들 레인 0 및 레인 2 대신에 레인 0으로부터 단일 판독 요청이 딕셔너리(510)로 송신된다. 패킷 1 및 패킷 3 각각은 페이로드를 가지고, 따라서, 압축된 패킷들에 대응하는 워드에 대해 딕셔너리(510)에 액세스할 필요가 없다. 도시된 바와 같이, 레인 0 및 레인 2 각각은 압축해제된 워드로서 딕셔너리(510)의 엔트리 7로부터 값 A를 수신한다.
다시 도 6을 간단히 참조하면, 워드 2가 값 B를 가짐을 알 수 있다. 따라서, 도 10에서 압축해제 엔진은 워드 2에 대해 A의 잘못된 값을 가진다. 시간 t2에 참 그룹내 종속성이 고려되면, 워드 2에 대해 값 B가 결정될 것이다. 그러나, 압축 엔진과 유사하게 그리고 상대적으로 높은 처리량을 달성하기 위해, 압축해제 엔진은 이 시간에 참 그룹내 종속성을 결정하지 않는다. 패킷 4 내지 패킷 7과 같은 나중의 제2 그룹의 패킷들 중 임의의 패킷이 딕셔너리(510)에 액세스할 수 있게 하는 것은, 패킷 0 내지 패킷 3 중 임의의 두 패킷들 사이의 종속성이 아니라, 현재 가장 새로운 패킷, 즉 패킷 3에 의한 딕셔너리(510)의 업데이트에 의존한다. 따라서, 현재 가장 새로운 패킷, 즉 패킷 3임에 의한 딕셔너리(510)의 업데이트가 알려지면, 패킷 4 내지 패킷 7과 같은 나중의 제2 그룹의 패킷들이 딕셔너리(510)에 액세스하는 것이 허용된다. 예를 들어, 가장 새로운 패킷에 대한 업데이트는 나중의 제2 그룹의 패킷들로부터의 판독 요청으로 포워딩(바이패스)될 수 있다.
도시된 실시예에서, 시간 t3에, 패킷 3이 동일한 인덱스(7)를 가진 패킷 0 내지 패킷 3 중 가장 새로운 패킷임이 알려지고, 추가적으로, 이 그룹의 패킷들에 대해 적어도 한번의 업데이트가 발생한다는 것이 알려진다. 예를 들어, 미스의 커맨드(Cmd)는 딕셔너리(510)가 업데이트될 것임을 나타낸다. 전술된 바와 같이, 부분 히트의 커맨드 또한 딕셔너리(510)가 업데이트될 것임을 나타낸다. 적어도 하나의 딕셔너리 업데이트의 표시가 압축해제된 워드들을 생성하는데 사용될 수는 없지만, 이 표시는 딕셔너리(510)가 업데이트될지를 결정하는데 사용될 수 있다.
이 예에서, 제어 로직은 업데이트가 엔트리 7을 값 C로 기록하는 것임을 결정하는 것에 추가하여, 딕셔너리(510)의 업데이트가 발생함을 결정한다. 따라서, 시간 t4에, 패킷 0, 패킷1 및 패킷 3 각각에 대해 압축해제된 워드들이 생성되어 기록 버퍼 내에 기록되며, 동시에, 패킷 4 내지 패킷 7의 나중의 제2 그룹이 레인 0 내지 레인 3 내에 로딩된다. 포워딩(바이패스)이 사용되면, 패킷 4 내지 패킷 7의 제2 그룹은 더 일찍 레인 0 내지 레인 3 내에 로딩된다. 일부 실시예들에서, 그룹내 수정 동작이 패킷 0 내지 패킷 3 각각에 대해 무조건적으로 발생한다. 다른 실시예들에서, 패킷 0과 같은 그룹의 가장 오래된 패킷은 이 동작을 스킵한다. 추가로, 특정 패킷에 대해 그룹내 수정이 필요한지를 결정하기 위해 패킷들의 커맨드들이 사용될 수 있다. 예를 들어, 미스 커맨드는 페이로드가 정확한 압축해제된 워드를 가지고 있음을 나타낸다. 대조적으로, 히트 커맨드는, 정확한 압축해제된 워드가 딕셔너리(510) 내에 있는 것, 및 나중 시간을 위해 대기시간을 숨기기 위해 이 시간에는 참 그룹내 종속성이 고려되지 않고 있으므로 이 시간에는 딕셔너리(510)로부터 판독된 데이터가 정확하지 않을 수 있다는 것을 나타낸다.
이제 도 11을 참조하여, 데이터를 효과적으로 압축하기 위한 방법(1100)의 일 실시예의 일반화된 흐름도가 도시된다. 일부 실시예들에서, 명령어 페치 유닛은 명령어 캐시 또는 시스템 메모리 내의 다른 적합한 위치로부터 명령어를 수신한다. 명령어가 디코딩되고 압축해제 명령어인 것으로 결정된다(블록(1102)). 일 실시예에서, 압축/압축해제 유닛의 압축해제 엔진은 압축된 패킷들의 소스 페이지와 같은 소스 데이터를 소스 버퍼 내에 로딩(프리페치)한다(블록(1104)). 일부 실시예들에서, 소스 데이터는 처음에 데이터 캐시 내에 저장되고 이어서 나중에 압축/압축해제 유닛 내의 판독 버퍼 내에 저장된다. 압축 엔진에서와 유사하게, 데이터를 소스 버퍼 내에 프리페치하기 위해 다양한 방법들이 사용될 수 있다.
다수의 하드웨어 레인들 중 적어도 둘 이상의 하드웨어 레인들이 소스 데이터의 각각의 압축된 패킷으로 할당된다(블록(1106)). 딕셔너리에 액세스하기 위한 인덱스를 특정하지 않은 압축된 패킷들에 대해, 특정한 인덱스가 결정된다(블록(1108)). 딕셔너리는 압축 또는 압축해제 동작들 동안 가장 최근에 보았던 패킷들을 저장한다. 전술된 바와 같이, 패킷 내의 특정한 비트 필드가 해시 함수와 함께 사용되어 인덱스를 생성한다. 패킷들의 제1 그룹 - 제1 그룹의 각각의 패킷은 동일한 제1 인덱스를 가짐 - 에 대해, 딕셔너리가 액세스된다(블록(1110)). 예를 들어, 동일한 인덱스를 가지며 압축해제된 워드를 갖는 페이로드를 포함하지 않는 제1 그룹의 다수의 패킷들 대신에, 단일 판독 요청이 딕셔너리에 송신된다.
제1 그룹의 참 그룹내 종속성을 결정하기 전에, 패킷들의 제2 그룹 - 제2 그룹의 각각의 패킷은 동일한 인덱스를 가짐 - 에 대해 딕셔너리가 액세스된다(블록(1112)). 다양한 실시예들에서, 제1 그룹 및 제2 그룹 각각은 동일한 인덱스를 가지고, 따라서, 딕셔너리의 동일한 엔트리에 액세스한다. 제1 그룹의 주어진 패킷에 대한 참 그룹내 종속성은 제1 그룹의 주어진 패킷보다 더 오래된 패킷들 각각에 대한 패킷들 내의 커맨드들로서 제공되는 비교 결과 및 딕셔너리 업데이트이다. 주어진 패킷에 대한 비교 결과 및 딕셔너리 업데이트는 제1 그룹의 주어진 패킷보다 더 새로운 패킷들에 대한 참 그룹내 종속성의 일부이다. 제1 그룹의 참 그룹 종속성은 제1 그룹에 대해 압축해제된 워드들을 생성하고 후속의 그리고 더 새로운 제 2 그룹에 대해 딕셔너리를 정확히 업데이트하는데 사용된다. 그러나 제1 그룹에 대해 가장 새로운 패킷이 알려지고 또 압축 동안 1 그룹에 대해 적어도 한번의 딕셔너리 업데이트가 발생했음이 발견될 때, 제1 그룹의 참 그룹내 종속성이 아직 알려지지 않았음에도 불구하고, 제2 그룹에 필요한 딕셔너리 업데이트가 이제 알려진다. 제2 그룹에 필요한 딕셔너리 업데이트는 제1 그룹의 인덱스에 의해 포인팅되는 딕셔너리의 엔트리에 기록되는 제1 그룹의 가장 새로운 패킷에 대한 압축해제된 워드의 값이다. 다양한 실시예들에서, 제1 그룹의 가장 새로운 패킷의 값이 제2 그룹으로 포워딩(바이패스)되는 반면, 딕셔너리 업데이트는 나중에 또는 동시에 실제로 발생한다.
제1 그룹 및 제2 그룹 각각의 패킷들에 대해 압축해제된 워드들이 생성된다(블록(1114)). 다양한 실시예들에서, 적어도 제1 그룹에 대해 그룹내 픽싱 동작이 수행된다. 압축 엔진을 위한 그룹내 픽싱(수정) 동작과 유사하게, 압축해제 엔진을 위한 그룹내 픽싱(수정) 동작은 제1 그룹의 각각의 패킷에 대한 압축해제된 워드의 참 소스를 찾음으로써 참 그룹내 종속성을 결정한다. 일부 실시예들에서, 제1 그룹의 주어진 패킷에 대한 참 값은 제1 그룹의 주어진 패킷보다 더 오래된 가장 새로운 패킷의 값이다.
전술된 바와 같이, 제1 그룹의 주어진 패킷과 비교하기 위한 참 그룹내 종속 값을 찾기 위한 제어 로직은 비교 로직 및 멀티플렉서 회로를 포함할 수 있다. 침 그룹내 종속 값을 찾기 위한 대기시간은, 특히 하드웨어 레인들의 수가 증가할 수록, 상당할 수 있다. 이 대기시간을 제1 그룹과 제2 그룹의 프로세싱 사이에 추가하는 대신, 이 대기시간은 나중의 그룹내 픽싱 동작에서 제거되고 숨겨질 수 있다.
이제 도 12를 참조하면, 압축 프로세싱(1200)의 일 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, 다시 하드웨어 레인들 레인 0 내지 레인 3 및 딕셔너리(510)를 사용하여 하이브리드 압축 알고리즘에 대해 병렬 실행이 수행된다. 도시된 바와 같이, 시간 t0에서, 레인 0 내지 레인 3 각각에는 워드 0 내지 워드 3 중 각 하나가 로딩된다. 워드 0 내지 워드 3의 값들은 도 8의 도시된 실시예에서 사용된 값들과 동일하다. 레인 0 내지 레인 3의 주어진 하드웨어 레인에 대해 시간 t1 내지 t5에 수행된 동작들은 일부 조정을 갖고 앞서 기술된 것과 동일하다.
도시된 실시예에서, 시간 t2에, 레인 1 내지 레인 3은 레인에 할당된 워드의 값에 대해 비교하기 위해 사용하기 위한 참 그룹내 종속 값을 결정한다. 전술된 바와 같이, 일부 실시예들에서, 동일한 인덱스를 갖는 워드들만이 파이프라인에서 함께 진행한다. 추가로, 주어진 워드에 대한 참 그룹내 종속 값은 주어진 워드보다 더 오래된 워드들 중 가장 새로운 워드라는 것이 앞서 기술되었다. 따라서, 워드들을 레인들에 할당하고 동일한 인덱스를 갖는 워드들만이 파이프라인에서 함께 진행할 수 있게 함으로 인해, 참 종속 값은 인접한 레인 내의 워드이다. 레인 0 내의 워드 0에 대한 참 종속 값은 딕셔너리(510)로부터 판독된 워드이고, 레인 1 내의 워드 1에 대한 참 종속 값은 레인 0 내의 워드 0이고, 레인 2 내의 워드 2에 대한 참 종속 값은 레인 1 내의 워드 1이고, 레인 3 내의 워드 3에 대한 참 종속 값은 레인 2 내의 워드 2이다. 멀티플렉싱 회로들 및 비교기들이 사용되지 않는다. 오히려, 직접 배선 경로들이 사용될 수 있다. 따라서, 압축된 패킷들을 생성하기 전에 그룹내 수정 동작들이 필요하지 않다.
이제, 도 13을 참조하면, 압축해제 프로세싱(1300)의 일 실시예의 블록도가 도시된다. 도시된 실시예에서, 다시 하드웨어 레인들 레인 0 내지 레인 3 및 딕셔너리(510)를 사용하여 하이브리드 압축해제 알고리즘에 대해 병렬 실행이 수행된다. 도시된 바와 같이, 시간 t0에, 레인 0 내지 레인 3 각각에는 패킷 0 내지 패킷 3 중 각 하나가 로딩된다. 패킷 0 내지 패킷 3의 값들은 도 10의 도시된 실시예에서 사용된 값들과 동일하다. 레인 0 내지 레인 3의 주어진 하드웨어 레인에 대해 시간 t1 내지 t4에 수행된 동작들은 일부 조정을 갖고 전술된 것과 동일하다.
도시된 실시예에서, 시간 t2에, 레인 1 내지 레인 3은 그것의 압축해제된 워드를 생성하기 위해 사용하기 위한 참 그룹내 종속 값을 결정한다. 전술된 바와 같이, 일부 실시예들에서, 동일한 인덱스를 갖는 패킷들만이 파이프라인에서 함께 진행한다. 추가로, 주어진 패킷에 대한 참 그룹내 종속 값은 주어진 패킷보다 더 오래된 패킷들 중 가장 새로운 패킷이라는 것이 앞서 기술되었다. 따라서, 패킷들을 레인들에 할당하고 동일한 인덱스를 갖는 패킷들만을 파이프라인에서 함께 진행할 수 있게 함으로써, 할당된 패킷들 각각에 대해 인덱스가 알려지는 때인 시간 t1 후에, 패킷의 커맨드(Cmd)는, 페이로드(Cmd = 미스)와 인접 레인으로부터의 압축해제된 워드(Cmd = 히트) 사이에서 선택하기 위해 사용된다. 시간 t1과 시간 t2 사이에, 레인 0 내의 패킷 0에 대한 참 압축해제된 워드는 딕셔너리(510)로부터 판독된 패킷이고, 레인 1 내의 패킷 1에 대한 참 압축해제된 워드는 레인 1의 페이로드이고, 레인 2 내의 패킷 2에 대한 참 압축해제된 워드는 레인 3의 페이로드이다. 일부 멀티플렉싱 회로들 및 Cmd 값에 대한 비교기들이 사용된다. 그러나, 대기시간이 여전히 상당히 작을 수 있고, 따라서, 압축해제된 워드들을 기록 버퍼 내에 저장하기 전에 그룹내 수정 동작들이 필요하지 않다.
이제 도 14를 참조하면, 압축 프로세싱(1400)의 일 실시예를 보여주는 블록도가 도시된다. 도시된 실시예에서, 다시 하드웨어 레인들 레인 0 내지 레인 3 및 딕셔너리(510)를 사용하여 하이브리드 압축 알고리즘에 대해 병렬 실행이 수행된다. 도시된 바와 같이, 시간 t0에서, 레인 0 내지 레인 3 각각에는 워드 0 내지 워드 3 중 각 하나가 로딩된다. 워드 0 내지 워드 3의 값들은 도 8 및 도 12의 도시된 실시예에서 사용된 값들과 동일하다. 레인 0 내지 레인 3의 주어진 하드웨어 레인에 대해 시간 t1 내지 t5에 수행된 동작들은 상이한 순서로 수행되는 것을 제외하고는 전술된 것과 동일하다.
전술된 바와 같이, 레인 0이 워드 0 내지 워드 3 중 가장 오래된 워드를 가지고 레인 3이 워드 0 내지 워드 3 중 가장 새로운 워드를 가진다는 것을 미리 알 수 있다. 시간 t2에, 단일 판독 요청이 레인 0으로부터 딕셔너리(510)로 송신된다. 또한, 시간 t2에, 가장 새로운 워드의 값, 즉 3이 딕셔너리(510)의 나중의 업데이트를 위해 저장된다. 예를 들어, 워드 3의 값 C는 딕셔너리(510)의 엔트리 7을 기록하고 값 C를 워드 4 내지 워드 7을 갖는 더 새로운 제2 그룹에 포워딩(바이패싱)하는데 사용되도록, 레지스터 내에 저장될 수 있다. 시간 t4에, 참 그룹내 종속 값을 찾기 위한 결정을 시작한다. 일부 실시예들에서, 시간 t4에서의 프로세싱 단계들은 둘 이상의 파이프라인 스테이지들 동안 지속된다. 비교는 시간 t5에 완료되고 그룹내 수정 동작들을 수행하지 않고 압축된 패킷들이 생성된다.
다양한 실시예들에서, 소프트웨어 애플리케이션의 프로그램 명령어들은 전술된 방법들 및/또는 메커니즘들을 구현하기 위해 사용될 수 있다. 프로그램 명령어들은 C와 같은 고레벨 프로그래밍 언어로 하드웨어의 동작을 기술할 수 있다. 대안적으로, 베릴로그(Verilog)와 같은 하드웨어 설계 언어(hardware design language, HDL)가 사용될 수 있다. 프로그램 명령어들은 비일시적 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다. 많은 유형의 저장 매체가 이용가능하다. 저장 매체는 프로그램 명령어들 및 수반되는 데이터를 프로그램 실행을 위해 컴퓨터에 제공하기 위해 사용 동안 컴퓨터에 의해 액세스가능할 수 있다. 일부 실시예들에서, 합성 툴(synthesis tool)은 합성 라이브러리로부터 게이트들의 리스트를 포함하는 넷리스트(netlist)를 생성하기 위해 프로그램 명령어들을 판독한다.
전술된 실시예들은 다만 비한정적 구현예들이라는 것이 강조되어야 한다. 상기의 개시내용이 완전히 이해된다면, 당업자에게는 다수의 변형들 및 수정예들이 명백해질 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정예들을 망라하는 것으로 해석되도록 의도된다.
Claims (20)
- 장치로서,
복수의 입력 워드들을 저장하도록 구성된 제1 버퍼;
복수의 엔트리들을 포함하는 테이블; 및
제1 복수의 하드웨어 레인들을 포함하는 압축 회로부를 포함하고, 상기 압축 회로부는, 압축 명령어의 표시를 수신함에 응답하여,
상기 복수의 입력 워드들로부터의 둘 이상의 입력 워드들의 제1 그룹을 상기 제1 복수의 하드웨어 레인들에 할당하고;
상기 둘 이상의 입력 워드들의 제1 그룹 중 적어도 2개의 입력 워드들이 상기 테이블의 동일한 엔트리에 대응함을 결정하고;
상기 제1 그룹의 입력 워드들 중 하나 이상의 입력 워드들에 대해 상기 제1 그룹 중 더 오래된 입력 워드와의 비교 결과를 결정함으로써 상기 제1 그룹의 상기 입력 워드들 사이의 그룹내 종속성(intra-group dependency)을 결정하기 전에:
상기 제1 그룹의 상기 입력 워드들 중 적어도 하나의 워드가 상기 제1 그룹의 상기 입력 워드들 중 가장 새로운(youngest) 워드임을 결정함에 응답하여, 상기 적어도 하나의 워드로 상기 테이블을 업데이트하고;
상기 복수의 입력 워드들로부터의 입력 워드들의 제2 그룹을 상기 제1 복수의 하드웨어 레인들에 할당하고 - 상기 제2 그룹은 상기 제1 그룹과는 상이하고; 상기 제2 그룹에 대한 상기 테이블의 액세스는 상기 제1 그룹의 상기 그룹내 종속성에 의존함 -;
상기 복수의 입력 워드들에 대응하는 데이터를 저장하는 압축 패킷을 생성하도록 구성되는, 장치. - 제1항에 있어서, 상기 압축 회로부는,
상기 제1 그룹의 입력 워드들 사이의 그룹내 종속성을 결정하고;
상기 복수의 하드웨어 레인들의 각각의 하드웨어 레인에 대해, 상기 제1 그룹의 입력 워드들 사이의 상기 그룹내 종속성에 근거하여 압축된 패킷의 타입을 특정하는 커맨드를 생성하도록 추가로 구성되는, 장치. - 제1항에 있어서, 액세스될 각각의 테이블 엔트리에 대해, 상기 압축 회로부는,
상기 제1 그룹의 가장 새로운 입력 워드를 결정하고;
상기 제1 그룹의 입력 워드들 사이의 그룹내 종속성을 결정하기 전에 상기 제1 그룹의 상기 가장 새로운 입력 워드를 상기 제2 그룹에 포워딩하도록 추가로 구성되는, 장치. - 제1항에 있어서, 액세스될 각각의 테이블 엔트리에 대해, 상기 압축 회로부는,
상기 제1 그룹의 가장 오래된 입력 워드를 결정하고;
상기 가장 오래된 입력 워드에 할당된 상기 복수의 하드웨어 레인들 중의 하드웨어 레인으로부터만 상기 테이블 내의 입력 워드에 대한 판독 요청을 송신하도록 추가로 구성되는, 장치. - 제4항에 있어서, 상기 복수의 하드웨어 레인들의 각각의 하드웨어 레인에 대해, 상기 제1 그룹의 입력 워드들 사이의 그룹내 종속성을 결정하는 것은 상기 하드웨어 레인에 할당된 입력 워드를 제2 입력 워드와 비교하는 것을 추가로 포함하는, 장치.
- 제5항에 있어서, 상기 제2 입력 워드는 상기 하드웨어 레인에 할당된 상기 입력 워드에 대해 결정된 상기 테이블의 엔트리 내에 저장된 입력 워드인, 장치.
- 제5항에 있어서, 상기 제2 입력 워드는,
상기 제1 그룹의 상기 가장 오래된 입력 워드에 할당된 상기 하드웨어 레인에 대해서는, 상기 제1 그룹의 각각의 입력 워드에 대해 결정된 상기 테이블의 엔트리 내에 저장된 입력 워드이고;
상기 제1 그룹의 상기 가장 오래된 입력 워드에 할당되지 않은 주어진 하드웨어 레인들에 대해서는, 상기 주어진 하드웨어 레인에 할당된 입력 워드보다 오래된 가장 새로운 입력 워드인 상기 제1 그룹의 입력 워드인, 장치. - 제3항에 있어서, 상기 압축 회로부는, 압축된 패킷의 타입을 특정하는 생성된 커맨드가 상기 테이블에 대한 업데이트를 나타냄을 결정함에 응답하여, 상기 제1 그룹의 상기 가장 새로운 입력 워드를 상기 테이블 내에 저장하도록 추가로 구성되는, 장치.
- 제3항에있어서, 상기 압축 회로부는, 압축된 패킷의 타입을 특정하는 생성된 커맨드가 상기 테이블에 대한 업데이트를 나타냄을 결정하기 전에, 상기 제1 그룹의 상기 가장 새로운 입력 워드를 상기 테이블 내에 저장하도록 추가로 구성되는, 장치.
- 제1항에 있어서, 제2 복수의 하드웨어 레인들을 포함하는 압축해제 회로부를 추가로 포함하며, 상기 압축해제 회로부는, 압축해제 명령어의 표시를 수신함에 응답하여,
복수의 압축된 패킷들로부터의 둘 이상의 압축된 패킷들의 제3 그룹을 상기 제2 복수의 하드웨어 레인들에 할당하고 - 상기 제3 그룹의 각각의 압축된 패킷은 상기 테이블의 동일한 엔트리에 액세스하는 것으로서 표시됨 -;
상기 제2 복수의 하드웨어 레인들의 각각의 하드웨어 레인에 대해, 할당된 압축된 패킷에 대한 워드를 제공하기 위한 소스가 상기 테이블인지 또는 상기 할당된 압축된 패킷인지를 결정하고;
상기 결정된 소스로부터의 상기 워드를 기록 버퍼 내에 기록하도록 구성되는, 장치. - 제10항에 있어서, 상기 압축해제 회로부는,
상기 제3 그룹의 가장 새로운 압축된 패킷을 결정하고;
상기 가장 새로운 압축된 패킷에 할당된 상기 제2 복수의 하드웨어 레인들의 하드웨어 레인에 대해, 상기 하드웨어 레인에 대한 상기 워드를 상기 테이블 내에 저장하도록 추가로 구성되는, 장치. - 방법으로서,
복수의 입력 워드들을 제1 버퍼 내에 저장하는 단계;
압축 명령어의 표시를 수신함에 응답하여:
상기 복수의 입력 워드들로부터의 둘 이상의 입력 워드들의 제1 그룹을 제1 복수의 하드웨어 레인들에 할당하는 단계;
상기 둘 이상의 입력 워드들의 제1 그룹 중 적어도 2개의 입력 워드들이 복수의 엔트리들을 포함하는 테이블의 동일한 엔트리에 대응함을 결정하는 단계;
상기 제1 그룹의 입력 워드들 중 하나 이상의 입력 워드들에 대해 상기 제1 그룹 중 더 오래된 입력 워드와의 비교 결과를 결정함으로써 상기 제1 그룹의 상기 입력 워드들 사이의 그룹내 종속성을 결정하기 전에:
상기 제1 그룹의 상기 입력 워드들 중 적어도 하나의 워드가 상기 제1 그룹의 상기 입력 워드들 중 가장 새로운 워드임을 결정함에 응답하여, 상기 적어도 하나의 워드로 상기 테이블을 업데이트하는 단계; 및
상기 복수의 입력 워드들로부터의 입력 워드들의 제2 그룹을 상기 제1 복수의 하드웨어 레인들에 할당하는 단계 - 상기 제2 그룹은 상기 제1 그룹과는 상이하고; 상기 제2 그룹에 대한 상기 테이블의 액세스는 상기 제1 그룹의 상기 그룹내 종속성에 의존함 -;
상기 복수의 입력 워드들에 대응하는 데이터를 저장하는 압축 패킷을 생성하는 단계를 포함하는, 방법. - 제12항에 있어서, 상기 둘 이상의 할당된 입력 워드들 각각은 상기 테이블 내의 복수의 엔트리들 중 동일한 엔트리를 포인팅하는 대응하는 인덱스를 가지는, 방법.
- 제12항에 있어서, 액세스될 상기 테이블 내의 각각의 엔트리에 대해, 상기 방법은,
상기 제1 그룹의 가장 오래된 입력 워드를 결정하는 단계; 및
상기 가장 오래된 입력 워드에 할당된 상기 복수의 하드웨어 레인들 중의 하드웨어 레인으로부터만 상기 테이블 내의 입력 워드에 대한 판독 요청을 송신하는 단계를 추가로 포함하는, 방법. - 제14항에 있어서, 상기 둘 이상의 하드웨어 레인들의 각각의 하드웨어 레인에 대한 제2 입력 워드는 상기 테이블로부터 판독된 상기 입력 워드인, 방법.
- 제12항에 있어서, 압축해제 명령어의 표시를 수신함에 응답하여, 상기 방법은,
저장된 복수의 압축된 패킷들 중 둘 이상의 압축된 패킷들을 압축해제를 위해 선택하는 단계;
제2 복수의 하드웨어 레인들 중 둘 이상의 하드웨어 레인들을 상기 선택된 둘 이상의 압축된 패킷들에 할당하는 단계;
상기 제2 복수의 하드웨어 레인들 중 상기 둘 이상의 하드웨어 레인들의 각각의 하드웨어 레인에 대해, 상기 압축된 패킷에 대한 워드를 제공하기 위한 소스가 상기 테이블인지 또는 상기 압축된 패킷인지를 결정하는 단계; 및
상기 결정된 소스로부터의 상기 워드를 기록 버퍼 내에 기록하는 단계를 추가로 포함하는, 방법. - 시스템으로서,
메모리;
캐시 메모리; 및
프로세서를 포함하며, 상기 프로세서는,
복수의 입력 워드들을 상기 캐시 메모리 내에 페치하고;
상기 복수의 입력 워드들로부터의 둘 이상의 입력 워드들의 제1 그룹을 제1 복수의 하드웨어 레인들에 할당하고;
상기 둘 이상의 입력 워드들의 제1 그룹 중 적어도 2개의 입력 워드들이 테이블 내의 복수의 엔트리들 중 동일한 엔트리에 대응함을 결정하고;
상기 제1 그룹의 입력 워드들 중 하나 이상의 입력 워드들에 대해 상기 제1 그룹 중 더 오래된 입력 워드와의 비교 결과를 결정함으로써 상기 제1 그룹의 상기 입력 워드들 사이의 그룹내 종속성을 결정하기 전에:
상기 제1 그룹의 상기 입력 워드들 중 적어도 하나의 워드가 상기 제1 그룹의 상기 입력 워드들 중 가장 새로운 워드임을 결정함에 응답하여, 상기 적어도 하나의 워드로 상기 테이블을 업데이트하고;
상기 복수의 입력 워드들로부터의 입력 워드들의 제2 그룹을 상기 제1 복수의 하드웨어 레인들에 할당하고 - 상기 제2 그룹은 상기 제1 그룹과는 상이하고; 상기 제2 그룹에 대한 상기 테이블의 액세스는 상기 제1 그룹의 상기 그룹내 종속성에 의존함 -;
상기 복수의 입력 워드들에 대응하는 데이터를 저장하는 압축 패킷을 생성하도록 구성되는, 시스템. - 제17항에 있어서, 상기 둘 이상의 할당된 입력 워드들 각각은 상기 테이블 내의 복수의 엔트리들 중 동일한 엔트리를 포인팅하는 대응하는 인덱스를 가지는, 시스템.
- 제17항에 있어서, 액세스될 상기 테이블의 각각의 엔트리에 대해, 상기 프로세서는,
상기 제1 그룹의 가장 오래된 입력 워드를 결정하고;
상기 가장 오래된 입력 워드에 할당된 상기 복수의 하드웨어 레인들 중의 하드웨어 레인으로부터만 상기 테이블 내의 입력 워드에 대한 판독 요청을 송신하도록 추가로 구성되는, 시스템. - 제17항에 있어서, 압축해제 명령어의 표시를 수신함에 응답하여, 상기 프로세서는,
복수의 패킷들 중 둘 이상의 패킷들을 선택하고;
제2 복수의 하드웨어 레인들 중 둘 이상의 하드웨어 레인들을 상기 선택된 둘 이상의 패킷들에 할당하고;
상기 제2 복수의 하드웨어 레인들 중 상기 둘 이상의 하드웨어 레인들의 각각의 하드웨어 레인에 대해, 상기 압축된 패킷에 대한 워드를 제공하기 위한 소스가 상기 테이블인지 또는 상기 압축된 패킷인지를 결정하고;
상기 결정된 소스로부터의 상기 워드를 기록 버퍼 내에 기록하도록 구성되는, 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/663,115 | 2017-07-28 | ||
US15/663,115 US10331558B2 (en) | 2017-07-28 | 2017-07-28 | Systems and methods for performing memory compression |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200114479A Division KR102248649B1 (ko) | 2017-07-28 | 2020-09-08 | 메모리 압축을 수행하기 위한 시스템 및 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190013538A KR20190013538A (ko) | 2019-02-11 |
KR102155648B1 true KR102155648B1 (ko) | 2020-09-14 |
Family
ID=63047156
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020180085954A KR102155648B1 (ko) | 2017-07-28 | 2018-07-24 | 메모리 압축을 수행하기 위한 시스템 및 방법 |
KR1020200114479A KR102248649B1 (ko) | 2017-07-28 | 2020-09-08 | 메모리 압축을 수행하기 위한 시스템 및 방법 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200114479A KR102248649B1 (ko) | 2017-07-28 | 2020-09-08 | 메모리 압축을 수행하기 위한 시스템 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10331558B2 (ko) |
EP (2) | EP3671471B1 (ko) |
JP (2) | JP6678207B2 (ko) |
KR (2) | KR102155648B1 (ko) |
CN (2) | CN109308192B (ko) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9378560B2 (en) * | 2011-06-17 | 2016-06-28 | Advanced Micro Devices, Inc. | Real time on-chip texture decompression using shader processors |
US10483981B2 (en) * | 2016-12-30 | 2019-11-19 | Microsoft Technology Licensing, Llc | Highspeed/low power symbol compare |
US10474458B2 (en) | 2017-04-28 | 2019-11-12 | Intel Corporation | Instructions and logic to perform floating-point and integer operations for machine learning |
US10331558B2 (en) | 2017-07-28 | 2019-06-25 | Apple Inc. | Systems and methods for performing memory compression |
US10587284B2 (en) * | 2018-04-09 | 2020-03-10 | International Business Machines Corporation | Multi-mode compression acceleration |
US11934342B2 (en) | 2019-03-15 | 2024-03-19 | Intel Corporation | Assistance for hardware prefetch in cache access |
CN113424148A (zh) | 2019-03-15 | 2021-09-21 | 英特尔公司 | 用于检测跨分片访问、提供多分片推理缩放和提供最佳页迁移的多分片存储器管理 |
US10707897B1 (en) * | 2019-09-04 | 2020-07-07 | Advanced Micro Devices, Inc. | Command processor with multiple string copy engines for a decompression system |
US11144207B2 (en) * | 2019-11-07 | 2021-10-12 | International Business Machines Corporation | Accelerating memory compression of a physically scattered buffer |
JP2021149416A (ja) * | 2020-03-18 | 2021-09-27 | キオクシア株式会社 | メモリシステム |
WO2021237510A1 (zh) * | 2020-05-27 | 2021-12-02 | 深圳市大疆创新科技有限公司 | 数据解压缩的方法、***、处理器及计算机存储介质 |
US20220197799A1 (en) * | 2020-12-23 | 2022-06-23 | Intel Corporation | Instruction and Micro-Architecture Support for Decompression on Core |
US20220197643A1 (en) * | 2020-12-23 | 2022-06-23 | Intel Corporation | Speculative decompression within processor core caches |
US12028094B2 (en) | 2020-12-23 | 2024-07-02 | Intel Corporation | Application programming interface for fine grained low latency decompression within processor core |
KR20230012872A (ko) * | 2021-07-16 | 2023-01-26 | 주식회사 쏠리드 | 프론트홀 다중화 장치 |
GB2619341A (en) * | 2022-06-01 | 2023-12-06 | Advanced Risc Mach Ltd | Circuitry and method |
US11791835B1 (en) * | 2022-06-13 | 2023-10-17 | International Business Machines Corporation | Compression improvement in data replication |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4761731A (en) * | 1985-08-14 | 1988-08-02 | Control Data Corporation | Look-ahead instruction fetch control for a cache memory |
US6002411A (en) * | 1994-11-16 | 1999-12-14 | Interactive Silicon, Inc. | Integrated video and memory controller with data processing and graphical processing capabilities |
US5729228A (en) * | 1995-07-06 | 1998-03-17 | International Business Machines Corp. | Parallel compression and decompression using a cooperative dictionary |
JP2840589B2 (ja) * | 1996-02-09 | 1998-12-24 | 富士通株式会社 | データ圧縮装置及びデータ復元装置 |
JP3989999B2 (ja) | 1996-05-03 | 2007-10-10 | 株式会社リコー | データ圧縮システム |
US5864547A (en) * | 1996-08-21 | 1999-01-26 | Hughes Electronics Corporation | Method and system for controlling uplink power in a high data rate satellite communication system employing on-board demodulation and remodulation |
US6879266B1 (en) * | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
US6208273B1 (en) | 1999-01-29 | 2001-03-27 | Interactive Silicon, Inc. | System and method for performing scalable embedded parallel data compression |
US6822589B1 (en) * | 1999-01-29 | 2004-11-23 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
GB0102572D0 (en) * | 2001-02-01 | 2001-03-21 | Btg Int Ltd | Apparatus to provide fast data compression |
US6820181B2 (en) * | 2002-08-29 | 2004-11-16 | Micron Technology, Inc. | Method and system for controlling memory accesses to memory modules having a memory hub architecture |
FR2889328B1 (fr) * | 2005-07-26 | 2007-09-28 | Atmel Nantes Sa Sa | Dispositif d'interfacage unidirectionnel de type fifo entre un bloc maitre et un bloc esclave, bloc maitre et bloc esclave correspondants |
US7447814B1 (en) | 2005-10-14 | 2008-11-04 | Sun Microsystems, Inc. | Method and apparatus for fast loss-less memory data compression wherein data corresponds to a cache line of data in cache |
US8108650B2 (en) * | 2009-05-29 | 2012-01-31 | Apple Inc. | Translation lookaside buffer (TLB) with reserved areas for specific sources |
US9569348B1 (en) * | 2009-09-22 | 2017-02-14 | Nvidia Corporation | Method for automatic page table compression |
US8615541B2 (en) * | 2009-09-23 | 2013-12-24 | Nvidia Corporation | Extended-precision integer arithmetic and logical instructions |
US8959291B2 (en) * | 2010-06-04 | 2015-02-17 | Lsi Corporation | Two-port memory capable of simultaneous read and write |
US8665124B2 (en) * | 2011-10-01 | 2014-03-04 | Intel Corporation | Compression format for high bandwidth dictionary compression |
KR102070199B1 (ko) * | 2012-05-11 | 2020-01-28 | 삼성전자주식회사 | 재구성가능 프로세서 및 재구성가능 프로세서의 코드 압축해제 방법 |
US8847798B2 (en) * | 2012-12-17 | 2014-09-30 | Maxeler Technologies, Ltd. | Systems and methods for data compression and parallel, pipelined decompression |
US10565099B2 (en) | 2012-12-28 | 2020-02-18 | Apple Inc. | Methods and apparatus for compressed and compacted virtual memory |
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 |
GB2513987B (en) * | 2013-03-15 | 2016-01-06 | Intel Corp | Parallel apparatus for high-speed, highly compressed LZ77 tokenization and huffman encoding for deflate compression |
WO2016025591A1 (en) * | 2014-08-12 | 2016-02-18 | Tidal Systems, Inc. | Adaptive rate compression hash processing device |
CN104331269B (zh) * | 2014-10-28 | 2017-08-15 | 中国科学院自动化研究所 | 一种嵌入式***可执行代码压缩方法及代码解压缩*** |
US9678872B2 (en) * | 2015-01-16 | 2017-06-13 | Oracle International Corporation | Memory paging for processors using physical addresses |
US9753666B2 (en) | 2015-03-27 | 2017-09-05 | Intel Corporation | Efficient data compression for solid-state memory |
US10331558B2 (en) | 2017-07-28 | 2019-06-25 | Apple Inc. | Systems and methods for performing memory compression |
-
2017
- 2017-07-28 US US15/663,115 patent/US10331558B2/en active Active
-
2018
- 2018-07-24 KR KR1020180085954A patent/KR102155648B1/ko active IP Right Grant
- 2018-07-25 EP EP20156598.3A patent/EP3671471B1/en active Active
- 2018-07-25 EP EP18185386.2A patent/EP3435240B1/en active Active
- 2018-07-26 CN CN201810830354.7A patent/CN109308192B/zh active Active
- 2018-07-26 CN CN202310872581.7A patent/CN116841920A/zh active Pending
- 2018-07-30 JP JP2018142253A patent/JP6678207B2/ja active Active
-
2019
- 2019-06-10 US US16/436,635 patent/US10769065B2/en active Active
-
2020
- 2020-03-16 JP JP2020045008A patent/JP7005670B2/ja active Active
- 2020-09-08 KR KR1020200114479A patent/KR102248649B1/ko active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
US10769065B2 (en) | 2020-09-08 |
CN109308192B (zh) | 2023-07-21 |
CN109308192A (zh) | 2019-02-05 |
CN116841920A (zh) | 2023-10-03 |
EP3435240A1 (en) | 2019-01-30 |
EP3671471B1 (en) | 2022-01-12 |
KR20200107910A (ko) | 2020-09-16 |
JP2019029023A (ja) | 2019-02-21 |
KR102248649B1 (ko) | 2021-05-04 |
JP2020102258A (ja) | 2020-07-02 |
KR20190013538A (ko) | 2019-02-11 |
US10331558B2 (en) | 2019-06-25 |
EP3435240B1 (en) | 2020-02-19 |
JP6678207B2 (ja) | 2020-04-08 |
EP3671471A1 (en) | 2020-06-24 |
US20190034333A1 (en) | 2019-01-31 |
JP7005670B2 (ja) | 2022-01-21 |
US20190294541A1 (en) | 2019-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102248649B1 (ko) | 메모리 압축을 수행하기 위한 시스템 및 방법 | |
US8566607B2 (en) | Cryptography methods and apparatus used with a processor | |
EP3920032A1 (en) | Backward compatibility testing of software in a mode that disrupts timing | |
EP2591420B1 (en) | System and method to manage a translation lookaside buffer | |
US8984261B2 (en) | Store data forwarding with no memory model restrictions | |
US9690953B2 (en) | Generating efficient reads for a system having non-volatile memory | |
TW201312461A (zh) | 微處理器及縮短尋訪時間之方法 | |
TWI698745B (zh) | 快取記憶體、用於操作快取記憶體之方法及其之非暫時性電腦可讀媒體 | |
US6684319B1 (en) | System for efficient operation of a very long instruction word digital signal processor | |
JP7097371B2 (ja) | メモリシステムへの加速されたアクセスを提供するための方法及び機器 | |
US6851033B2 (en) | Memory access prediction in a data processing apparatus | |
US11782897B2 (en) | System and method for multiplexer tree indexing | |
US11500638B1 (en) | Hardware compression and decompression engine | |
TWI801601B (zh) | 資料庫處理系統及用於卸載資料庫操作的方法 | |
US8521951B2 (en) | Content addressable memory augmented memory | |
US20170315807A1 (en) | Hardware support for dynamic data types and operators | |
JPH06149669A (ja) | キャッシュデータ転送方式およびキャッシュデータ転送装置 | |
US8117383B2 (en) | Hardware accelerator based method and device for string searching | |
CN116340034A (zh) | 用于压缩操作期间的常量检测的装置和方法 | |
WO2009156920A1 (en) | Method, register file system, and processing unit device enabling substantially direct cache memory access | |
WO2009136401A2 (en) | Improved processing unit implementing both a local register file system and spread register file system, and a method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
A107 | Divisional application of patent | ||
GRNT | Written decision to grant |