KR20170115521A - Cpu(central processing unit)-기반 시스템에서 cmc(compressed memory controller)들에 의한 백-투-백 읽기 동작들을 사용하는 메모리 대역폭 압축 제공 - Google Patents
Cpu(central processing unit)-기반 시스템에서 cmc(compressed memory controller)들에 의한 백-투-백 읽기 동작들을 사용하는 메모리 대역폭 압축 제공 Download PDFInfo
- Publication number
- KR20170115521A KR20170115521A KR1020177021376A KR20177021376A KR20170115521A KR 20170115521 A KR20170115521 A KR 20170115521A KR 1020177021376 A KR1020177021376 A KR 1020177021376A KR 20177021376 A KR20177021376 A KR 20177021376A KR 20170115521 A KR20170115521 A KR 20170115521A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- memory block
- cmc
- blocks
- compressed
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0661—Format or protocol conversion arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
- 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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- 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/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared 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
- 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
- G06F2212/1024—Latency reduction
-
- 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/1041—Resource optimization
- G06F2212/1044—Space efficiency 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Memory System (AREA)
Abstract
CPU(central processing unit)-기반 시스템에서 CMC(compressed memory controller)들에 의한 백-투-백 읽기 동작들을 사용하여 메모리 대역폭 압축을 제공하는 것이 개시된다. 이 점과 관련하여, 일부 양상들에서, CMC는, 시스템 메모리의 물리적 어드레스에 대한 메모리 읽기 요청을 수신하며, 이 물리적 어드레스와 연관된 메모리 라인의 제 1 메모리 블록의 ECC(error correcting code) 비트들로부터 이 물리적 어드레스에 대한 CI(compression indicator)를 읽도록 구성된다. CI에 기반하여, CMC는 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정한다. 포함하지 않으면, CMC는, 제 1 메모리 블록을 리턴하는 것과 동시에, 메모리 라인의 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행한다. 일부 양상들은, 단지 제 1 메모리 블록만이 아니라, 메모리 라인의 복수의 메모리 블록들 각각에 압축 데이터를 씀으로써 메모리 액세스 레이턴시를 추가로 개선시킬 수 있다.
Description
우선권 출원들
[0001]
본 출원은, 2015년 2월 3일자로 "MEMORY CONTROLLERS EMPLOYING MEMORY BANDWIDTH COMPRESSION EMPLOYING BACK-TO-BACK READ OPERATIONS FOR IMPROVED LATENCY, AND RELATED PROCESSOR-BASED SYSTEMS AND METHODS"란 이름으로 출원된 미국 가 특허 출원 일련 번호 제 62/111,347호에 대한 우선권을 주장하며, 상기 가 특허 출원은 본원에 인용에 의해 그 전체가 통합된다.
[0002]
본 출원은 또한, 2015년 9월 3일자로 "PROVIDING MEMORY BANDWIDTH COMPRESSION USING BACK-TO-BACK READ OPERATIONS BY COMPRESSED MEMORY CONTROLLERS (CMCs) IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM"란 이름으로 출원된 미국 특허 출원 일련 번호 제 14/844,516호에 대한 우선권을 주장하며, 상기 특허 출원은 본원에 인용에 의해 그 전체가 통합된다.
[0003]
본 개시내용의 기술은 일반적으로 컴퓨터 메모리 시스템들에 관한 것으로, 특히, 메모리에 대한 메모리 액세스 인터페이스를 CPU(central processing unit)들에 제공하기 위한 컴퓨터 메모리 시스템들의 메모리 제어기들에 관한 것이다.
[0004]
마이크로프로세서들은 매우 다양한 애플리케이션들의 계산 태스크들을 수행한다. 통상적인 마이크로프로세서 애플리케이션은 소프트웨어 명령들을 실행하는 하나 또는 그 초과의 CPU(central processing unit)들을 포함한다. 소프트웨어 명령들은, 메모리의 일 위치로부터 데이터를 인출하고, 인출된 데이터를 사용하여 하나 또는 그 초과의 CPU 동작들을 수행하며, 결과를 생성하도록 CPU에게 명령할 수 있다. 이후, 이 결과는 메모리에 저장될 수 있다. 비-제한적 예들로서, 이 메모리는 CPU에 대해 로컬인 캐시, CPU 블록의 CPU들 간의 공유 로컬 캐시, 다수의 CPU 블록들 간의 공유 캐시, 또는 마이크로프로세서의 메인 메모리일 수 있다.
[0005]
이 점과 관련하여, 도 1은 CPU-기반 시스템(12)을 포함하는 예시적 SoC(system-on-a-chip)(10)의 개략적인 다이어그램이다. CPU-기반 시스템(12)은 이 예에서 복수의 CPU 블록들(14(1)-14(N))을 포함하며, 여기서 'N'은 CPU 블록들(14(1)-14(N))의 원하는 임의의 개수와 동일하다. 도 1의 예에서, CPU 블록들(14(1)-14(N)) 각각은 두 개의 CPU들(16(1), 16(2))을 포함한다. CPU 블록들(14(1)-14(N))은 각각, 공유 레벨 2(L2) 캐시들(18(1)-18(N))을 더 포함한다. CPU 블록들(14(1)-14(N))의 각각의 CPU 블록 중 임의의 CPU 블록에 의해 사용되거나 또는 CPU 블록들(14(1)-14(N)) 각각 간에 공유되는 캐싱된 데이터를 저장하기 위해, 공유 레벨 3(L3) 캐시(20)가 또한 제공된다. CPU 블록들(14(1)-14(N)) 각각이 공유 L3 캐시(20) 뿐만 아니라 다른 공유 자원들에 액세싱하는 것을 가능하게 하기 위해, 내부 시스템 버스(22)가 제공된다. CPU 블록들(14(1)-14(N))에 의해 내부 시스템 버스(22)를 통해 액세싱되는 다른 공유 자원들은, 메인 외부 메모리(예컨대, 비-제한적 예로서, 2배속 DRAM(dynamic random access memory)(DDR))에 액세싱하기 위한 메모리 제어기(24), 주변장치들(26), 다른 스토리지(28), PCI-e(express PCI(peripheral component interconnect) 인터페이스(30), DMA(direct memory access) 제어기(32), 및/또는 IMC(integrated memory controller)(34)를 포함할 수 있다.
[0006]
도 1의 CPU-기반 시스템(12)에서 실행되는 CPU-기반 애플리케이션들이 복잡성 및 성능이 증가함에 따라, 공유 L2 캐시들(18(1)-18(N)) 및 공유 L3 캐시(20), 그리고 메모리 제어기(24)를 통해 액세싱가능한 외부 메모리의 메모리 용량 요건들이 또한 증가할 수 있다. 물리적 메모리 용량을 증가시키지 않고, CPU-기반 시스템(12)의 유효 메모리 용량을 증가시키기 위해, 데이터 압축이 사용될 수 있다. 그러나, 데이터 압축의 사용은 메모리 액세스 레이턴시를 증가시키고 추가적인 메모리 대역폭을 소비할 수 있는데, 그 이유는 데이터가 압축 상태인지 또는 비압축 상태인지의 여부에 따라, 데이터를 리트리빙(retrieving)하기 위해 다수의 메모리 액세스 요청들이 요구될 수 있기 때문이다. 그에 따라서, 메모리 액세스 레이턴시 및 메모리 대역폭에 대한 영향을 완화하면서, 데이터 압축을 사용하여 CPU-기반 시스템(12)의 메모리 용량을 증가시키는 것이 바람직하다.
[0007]
본원에서 개시된 양상들은 CPU(central processing unit)-기반 시스템의 CMC(compressed memory controller)들에 의한 백-투-백 읽기 동작(back-to-back read operation)들을 사용하여 메모리 대역폭 압축을 제공하는 것을 포함한다. 이 점과 관련하여, 일부 양상들에서, CMC는 메모리 읽기 요청들 및/또는 메모리 쓰기 요청들에 대해 메모리 대역폭 압축을 제공하도록 구성된다. 일부 양상들에 따라, 시스템 메모리의 물리적 어드레스에 대한 메모리 읽기 요청을 수신할 때, CMC는, 시스템 메모리에서 이 물리적 어드레스와 연관된 메모리 라인의 제 1 메모리 블록의 ECC(error correcting code) 비트들로부터 이 물리적 어드레스에 대한 CI(compression indicator)를 읽을 수 있다. CI에 기반하여, CMC는 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정한다. 제 1 메모리 블록이 압축 데이터를 포함하지 않으면, CMC는, (제 1 메모리 블록이 디맨드 워드(demand word)를 포함하면) 제 1 메모리 블록을 리턴(return)하는 것과 동시에, 메모리 라인의 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행함으로써, 메모리 액세스 레이턴시를 개선시킬 수 있다. 일부 양상들에서, CMC에 의해 읽혀진 메모리 블록은 메모리 읽기 요청의 디맨드 워드 표시자에 의해 표시된, 디맨드 워드를 포함하는 메모리 블록일 수 있다. 일부 양상들은, 단지 제 1 메모리 블록만이 아니라, 메모리 라인의 복수의 메모리 블록들 각각에 압축 데이터를 씀으로써 메모리 액세스 레이턴시 개선을 추가로 제공할 수 있다. 그러한 양상들에서, CMC는 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽을 수 있으며, 읽혀진 메모리 블록(이 메모리 블록이 압축 데이터를 포함하든 또는 비압축 데이터를 포함하든 간에)이 디맨드 워드를 제공할 것임이 보장될 수 있다. 이러한 방식으로, CMC는 압축 및 비압축 데이터를 더욱 효율적으로 읽고 쓰며, 이는 감소된 메모리 액세스 레이턴시 및 개선된 시스템 성능을 야기할 수 있다.
[0008]
다른 양상에서, 시스템 버스를 통해 시스템 메모리에 액세싱하도록 구성된 메모리 인터페이스를 포함하는 CMC가 제공된다. CMC는, 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스를 포함하는 메모리 읽기 요청을 수신하도록 구성된다. CMC는, 제 1 메모리 라인의 복수의 메모리 블록들 중 제 1 메모리 블록을 읽도록 추가로 구성된다. CMC는 또한, 제 1 메모리 블록의 CI에 기반하여, 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하도록 구성된다. CMC는 부가적으로, 제 1 메모리 블록이 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 제 1 메모리 라인의 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하도록 구성된다. CMC는, 백-투-백 읽기와 동시에, 읽기 메모리 블록이 디맨드 워드를 포함하는지의 여부를 결정하며, 읽기 메모리 블록이 디맨드 워드를 포함한다고 결정하는 것에 대한 응답으로, 읽기 메모리 블록을 리턴하도록 추가로 구성된다.
[0009]
다른 양상에서, 시스템 버스를 통해 시스템 메모리에 액세싱하도록 구성된 메모리 인터페이스를 포함하는 CMC가 제공된다. CMC는, 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스, 및 제 1 메모리 라인의 복수의 메모리 블록들 중에서 디맨드 워드를 포함하는 메모리 블록을 표시하는 디맨드 워드 표시자를 포함하는 메모리 읽기 요청을 수신하도록 구성된다. CMC는, 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽도록 추가로 구성된다. CMC는 또한, 메모리 블록의 CI에 기반하여, 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하도록 구성된다. CMC는 부가적으로, 메모리 블록이 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 메모리 블록을 리턴하는 것과 동시에, 제 1 메모리 라인의 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하도록 구성된다.
[0010]
다른 양상에서, 메모리 대역폭 압축을 제공하기 위한 방법이 제공된다. 방법은, 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스를 포함하는 메모리 읽기 요청을 수신하는 단계를 포함한다. 방법은, 제 1 메모리 라인의 복수의 메모리 블록들 중 제 1 메모리 블록을 읽는 단계를 더 포함한다. 방법은 또한, 제 1 메모리 블록의 CI에 기반하여, 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하는 단계를 포함한다. 방법은 부가적으로, 제 1 메모리 블록이 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 제 1 메모리 라인의 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하는 단계를 포함한다. 방법은, 백-투-백 읽기와 동시에, 읽기 메모리 블록이 디맨드 워드를 포함하는지의 여부를 결정하며, 읽기 메모리 블록이 디맨드 워드를 포함한다고 결정하는 것에 대한 응답으로, 읽기 메모리 블록을 리턴하는 단계를 더 포함한다.
[0011]
다른 양상에서, 메모리 대역폭 압축을 제공하기 위한 방법이 제공된다. 방법은, 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스, 및 제 1 메모리 라인의 복수의 메모리 블록들 중에서 디맨드 워드를 포함하는 메모리 블록을 표시하는 디맨드 워드 표시자를 포함하는 메모리 읽기 요청을 수신하는 단계를 포함한다. 방법은, 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽는 단계를 더 포함한다. 방법은 또한, 메모리 블록의 CI에 기반하여, 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하는 단계를 포함한다. 방법은 부가적으로, 메모리 블록이 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 메모리 블록을 리턴하는 것과 동시에, 제 1 메모리 라인의 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하는 단계를 포함한다.
[0012]
다른 양상들에서, 소형 데이터 블록 압축에 적절할 수 있는 압축 방법들 및 포맷들이 개시된다. 이들 압축 방법들 및 포맷들은, 본원에서 개시된 메모리 대역폭 압축 양상들에 대해 사용될 수 있다.
[0013]
이들 CMC들 및 압축 메커니즘들 중 일부 또는 모든 양상들을 이용하여, 물리적 메모리 사이즈의 증가를 완화하고 시스템 성능에 대한 영향을 최소화하면서, 메모리 액세스 레이턴시를 감소시키고 CPU-기반 시스템의 메모리 대역폭을 효과적으로 증가시키는 것이 가능할 수 있다.
[0014]
도 1은 CPU(central processing unit)-기반 시스템을 포함하는 예시적 SoC(system-on-a-chip)의 개략적인 다이어그램이다.
[0015] 도 2는 복수의 CPU들 및 메모리 대역폭 압축을 제공하도록 구성된 CMC(compressed memory controller)를 갖는 예시적 CPU-기반 시스템을 포함하는 SoC의 개략적인 다이어그램이다.
[0016] 도 3은 도 2의 CMC의 더욱 상세한 개략적인 다이어그램이며, CMC는 추가로, 메모리 대역폭 압축을 제공하기 위해 사용될 수 있는 선택적 내부 메모리에 통신가능하게 커플링된다.
[0017] 도 4는 도 3의 CMC에 의해 구현될 수 있는 예시적 메모리 대역폭 압축 메커니즘의 개략적인 다이어그램이다.
[0018] 도 5는 CMC에서 어드레스 변환으로 인한 성능 손실을 보상하기 위해 선택적 레벨 4(L4) 캐시를 포함하는 도 1의 SoC의 예를 예시한다.
[0019] 도 6a 및 도 6b는 각각 메모리 읽기 동작들 및 메모리 쓰기 동작들 동안의 예시적 통신 흐름들, 그리고 백-투-백 읽기들, 조기 리턴(early return)들, 및/또는 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공하기 위해 도 3의 CMC에 의해 액세싱될 수 있는 시스템 메모리의 예시적 엘리먼트들을 예시하는 다이어그램들이다.
[0020] 도 7a-도 7c는 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도들이다.
[0021] 도 8은 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도이다.
[0022] 도 9a-도 9c는 백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도들이다.
[0023] 도 10은 백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도이다.
[0024] 도 11-도 17은 예시적 데이터 블록 압축 포맷들 및 메커니즘들을 예시하며, 메모리 블록들을 압축 및 압축해제하기 위해 도 3의 CMC에 의해 이들 중 임의의 것이 사용될 수 있다.
[0025] 도 18은 도 2의 CMC를 사용하는 도 1의 SoC를 포함할 수 있는 예시적 컴퓨팅 디바이스의 블록 다이어그램이다.
[0015] 도 2는 복수의 CPU들 및 메모리 대역폭 압축을 제공하도록 구성된 CMC(compressed memory controller)를 갖는 예시적 CPU-기반 시스템을 포함하는 SoC의 개략적인 다이어그램이다.
[0016] 도 3은 도 2의 CMC의 더욱 상세한 개략적인 다이어그램이며, CMC는 추가로, 메모리 대역폭 압축을 제공하기 위해 사용될 수 있는 선택적 내부 메모리에 통신가능하게 커플링된다.
[0017] 도 4는 도 3의 CMC에 의해 구현될 수 있는 예시적 메모리 대역폭 압축 메커니즘의 개략적인 다이어그램이다.
[0018] 도 5는 CMC에서 어드레스 변환으로 인한 성능 손실을 보상하기 위해 선택적 레벨 4(L4) 캐시를 포함하는 도 1의 SoC의 예를 예시한다.
[0019] 도 6a 및 도 6b는 각각 메모리 읽기 동작들 및 메모리 쓰기 동작들 동안의 예시적 통신 흐름들, 그리고 백-투-백 읽기들, 조기 리턴(early return)들, 및/또는 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공하기 위해 도 3의 CMC에 의해 액세싱될 수 있는 시스템 메모리의 예시적 엘리먼트들을 예시하는 다이어그램들이다.
[0020] 도 7a-도 7c는 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도들이다.
[0021] 도 8은 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도이다.
[0022] 도 9a-도 9c는 백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도들이다.
[0023] 도 10은 백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC의 예시적 동작들을 예시하는 흐름도이다.
[0024] 도 11-도 17은 예시적 데이터 블록 압축 포맷들 및 메커니즘들을 예시하며, 메모리 블록들을 압축 및 압축해제하기 위해 도 3의 CMC에 의해 이들 중 임의의 것이 사용될 수 있다.
[0025] 도 18은 도 2의 CMC를 사용하는 도 1의 SoC를 포함할 수 있는 예시적 컴퓨팅 디바이스의 블록 다이어그램이다.
[0026]
이제, 도시한 도면들을 참조하면, 본 개시내용의 몇몇 예시적 양상들이 설명된다. "예시적"이란 단어는 본원에서 "예, 사례, 또는 예시로서의 역할을 하는"을 의미하기 위해 사용된다. 본원에서 "예시적"으로서 설명되는 임의의 양상이 반드시 다른 양상들에 비하여 바람직하거나 또는 유리한 것으로서 해석되지 않는다.
[0027]
본원에서 개시된 양상들은 CPU(central processing unit)-기반 시스템에서 CMC(compressed memory controller)들에 의한 백-투-백 읽기 동작(back-to-back read operation)들을 사용하여 메모리 대역폭 압축을 제공하는 것을 포함한다. 이 점과 관련하여, 일부 양상들에서, CMC는 메모리 읽기 요청들 및/또는 메모리 쓰기 요청들에 대해 메모리 대역폭 압축을 제공하도록 구성된다. 일부 양상들에 따라, 시스템 메모리의 물리적 어드레스에 대한 메모리 읽기 요청을 수신할 때, CMC는, 시스템 메모리에서 이 물리적 어드레스와 연관된 메모리 라인의 제 1 메모리 블록의 ECC(error correcting code) 비트들로부터 이 물리적 어드레스에 대한 CI(compression indicator)를 읽을 수 있다. CI에 기반하여, CMC는 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정한다. 제 1 메모리 블록이 압축 데이터를 포함하지 않으면, CMC는, (제 1 메모리 블록이 디맨드 워드를 포함하면) 제 1 메모리 블록을 리턴하는 것과 동시에, 메모리 라인의 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행함으로써, 메모리 액세스 레이턴시를 개선시킬 수 있다. 일부 양상들에서, CMC에 의해 읽혀진 메모리 블록은 메모리 읽기 요청의 디맨드 워드 표시자에 의해 표시된, 디맨드 워드를 포함하는 메모리 블록일 수 있다. 일부 양상들은, 단지 제 1 메모리 블록만이 아니라, 메모리 라인의 복수의 메모리 블록들 각각에 압축 데이터를 씀으로써 메모리 액세스 레이턴시 개선을 추가로 제공할 수 있다. 그러한 양상들에서, CMC는 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽을 수 있으며, 읽혀진 메모리 블록(이 메모리 블록이 압축 데이터를 포함하든 또는 비압축 데이터를 포함하든 간에)이 디맨드 워드를 제공할 것임이 보장될 수 있다. 이러한 방식으로, CMC는 압축 및 비압축 데이터를 더욱 효율적으로 읽고 쓰며, 이는 감소된 메모리 액세스 레이턴시 및 개선된 시스템 성능을 야기할 수 있다.
[0028]
이 점과 관련하여, 도 2는 도 1의 CPU-기반 시스템(12)과 유사한, 복수의 CPU 블록들(14(1)-14(N))을 갖는 예시적 CPU-기반 시스템(12')을 포함하는 SoC(10')의 개략적인 다이어그램이다. 도 2의 CPU-기반 시스템(12')은 도 1의 CPU-기반 시스템(12)과의 일부 공통 컴포넌트들을 포함하며, 이 공통 컴포넌트들은 도 1과 도 2 간에 공통 엘리먼트 번호들에 의해 표시된다. 간결성을 위해, 이들 엘리먼트들은 재설명되지 않을 것이다. 그러나, 도 2의 CPU-기반 시스템(12')에서는, CMC(36)가 제공된다. CMC(36)는 시스템 메모리(38)로의 액세스를 제어한다. 시스템 메모리(38)는 비-제한적 예로서 하나 또는 그 초과의 DDR(double data rate) DRAM(dynamic random access memoy)들(40(1)-40(R))(이후에, "DRAM(40(1)-40(R))"으로서 지칭됨)을 포함할 수 있다. 이 예의 CMC(36)는 본원에서 그리고 아래에서 개시된 양상들에 따른 메모리 대역폭 압축을 사용한다. 도 1의 CPU-기반 시스템(12)의 메모리 제어기(24)와 유사하게, 도 2의 CPU-기반 시스템(12')의 CMC(36)는 내부 시스템 버스(22)를 통해 CPU 블록들(14(1)-14(N))에 의해 공유된다.
[0029]
도 2의 CMC(36)의 예시적 내부 컴포넌트들의 더욱 상세한 개략적인 다이어그램을 예시하기 위해, 도 3이 제공된다. 이 예에서, CMC(36)는, 도 2의 CPU 블록들(14(1)-14(N))을 포함하는 반도체 다이들(46(1), 46(2))과는 별개의 반도체 다이(44) 상에 제공된다. 대안적으로, 일부 양상들에서, CMC(36)는 CPU 블록들(14(1)-14(N))과 공통 반도체 다이(미도시)에 포함될 수 있다. 다이 구성들에 관계없이, CMC(36)는, CPU 블록들(14(1)-14(N))이 CMC(36)로의 내부 시스템 버스(22)를 통한 메모리 액세스 요청들을 수행하며, 메모리로부터 CMC(36)를 통해 데이터를 수신할 수 있도록 제공된다.
[0030]
계속해서 도 3을 참조하면, CMC(36)는, 도 2 및 도 3에서 DRAM(40(1)-40(R))을 포함하는 것으로서 도시되는 시스템 메모리(38)로의 메모리 액세스들을 위한 동작들을 제어한다. CMC(36)는, 메모리 액세스 요청들(미도시)에 서비싱하기 위해 사용되는 복수의 메모리 인터페이스(MEM I/F)들(48(1)-48(P))(예컨대, DDR DRAM 인터페이스들)을 포함한다. 이 점과 관련하여, 이 예의 CMC(36)는 압축 제어기(50)를 포함한다. 압축 제어기(50)는, 도 2의 CPU 블록들(14(1)-14(N))로부터의 메모리 액세스 요청들에 대한 응답으로, 시스템 메모리(38)에 저장된 데이터를 압축하는 것, 그리고 시스템 메모리(38)로부터 리트리빙된 데이터를 압축해제하는 것을 제어한다. 이러한 방식으로, CPU 블록들(14(1)-14(N))에는, CMC(36)에 의해 액세싱되는 메모리의 실제 용량을 초과하는 가상 메모리 어드레스 공간이 제공될 수 있다. 압축 제어기(50)는 또한, 내부 시스템 버스(22)를 통해 CPU 블록들(14(1)-14(N))에 제공되는 정보의 대역폭 압축을 수행하도록 구성될 수 있다.
[0031]
아래에서 더욱 상세히 논의될 바와 같이, 압축 제어기(50)는 메모리 대역폭 압축을 제공하기 위해 임의의 개수의 압축 기술들 및 알고리즘들을 수행할 수 있다. 그러한 압축 기술들 및 알고리즘들을 수행하기 위해 압축 제어기(50)에 의해 요구되는 데이터 구조들 및 다른 정보에 대해, 로컬 메모리(52)가 제공된다. 이 점과 관련하여, 로컬 메모리(52)는 SRAM(static random access memory)(54)의 형태로 제공된다. 로컬 메모리(52)는, 압축 기술들 및 알고리즘들을 수행하기 위해 압축 제어기(50)에 대해 요구될 수 있는 데이터 구조들 및 다른 데이터 저장에 사용되기에 충분한 사이즈를 갖는다. 또한, 로컬 메모리(52)는 캐시, 이를테면, 레벨 4(L4) 캐시를 포함하도록 파티셔닝되어, CMC(36) 내에서의 내부 사용을 위한 추가적인 캐시 메모리를 제공할 수 있다. 따라서, L4 캐시로의 액세스를 제공하기 위해, L4 제어기(55)가 CMC(36)에 또한 제공될 수 있다. 아래에서 더욱 상세히 논의될 바와 같이, 향상된 압축 기술들 및 알고리즘들은 더 큰 내부 메모리를 요구할 수 있다. 예컨대, 로컬 메모리(52)는 128 킬로 바이트(kB)의 메모리를 제공할 수 있다.
[0032]
추가로, 도 3에 도시된 바와 같이 그리고 아래에서 더욱 상세히 설명될 바와 같이, 선택적인 추가 내부 메모리(56)가 CMC(36)에 또한 제공될 수 있다. 추가 내부 메모리(56)는 예로서 DRAM으로서 제공될 수 있다. 아래에서 더욱 상세히 논의될 바와 같이, 추가 내부 메모리(56)는, CMC(36)에 대한 로컬 메모리(52)에서보다 데이터 구조들 및 다른 데이터의 추가적인 또는 더 많은 양들의 저장을 가능하게 하며, 이는 CPU-기반 시스템(12')의 메모리 대역폭 압축을 증가시키기 위해 메모리 압축 및 압축해제 메커니즘들을 제공할 수 있다. 압축 시 사용하기 위한 추가 내부 메모리(56)로의 메모리 액세스들을 제어하기 위해, 내부 메모리 제어기(58)가 CMC(36)에 제공된다. 내부 메모리 제어기(58)는 CPU 블록들(14(1)-14(N))에 대해 액세싱가능하지 않거나 또는 보이지 않는다.
[0033]
위에서 주목된 바와 같이, 도 3의 CMC(36)는, 일부 양상들에서 제로-라인 압축을 포함하는 메모리 대역폭 압축을 수행할 수 있다. 로컬 메모리(52)는, 그러한 압축에 사용되는 더 큰 데이터 구조들을 저장하기 위해 사용될 수 있다. 아래에서 더욱 상세히 논의되는 바와 같이, 메모리 대역폭 압축은 메모리 액세스 레이턴시를 감소시키며, 더 많은 CPU들(16(1), 16(2)) 또는 그들의 개개의 스레드들로 하여금, 메모리 액세스 레이턴시에 대한 영향을 최소화하면서, 동일한 개수의 메모리 채널들에 액세싱하도록 허용할 수 있다. 일부 양상들에서, 그러한 압축이 CMC(36)에 의해 수행되지 않았을 경우의 더 많은 개수의 메모리 채널들과 비교하여 유사한 레이턴시 결과들을 달성하면서, 메모리 채널들의 개수가 감소될 수 있으며, 이는 감소된 시스템 레벨 전력 소비를 야기할 수 있다.
[0034]
로컬 메모리(52) 및 추가 내부 메모리(56)를 비롯하여 도 3의 CMC(36)에서 메모리 대역폭 압축을 위해 제공되는 자원들 각각은, 자원들 및 영역, 전력 소비, 메모리 용량 압축을 통해 증가되는 메모리 용량, 및 메모리 대역폭 압축을 통해 증가되는 성능 간의 원하는 밸런스를 달성하기 위하여, 서로 함께 또는 개별적으로 사용될 수 있다. 메모리 대역폭 압축은, 원해질 때 인에이블링되거나 또는 디스에이블링될 수 있다. 추가로, CMC(36)에 의한 사용을 위해 위에서 설명된 자원들은, 메모리 용량 및/또는 대역폭 압축 효율성, 전력 소비, 및 성능 간의 원하는 트레이드오프(tradeoff)들을 달성하기 위해 인에이블링되거나 또는 디스에이블링될 수 있다. CMC(36)에 이용가능한 이들 자원들을 사용하는 예시적 메모리 대역폭 압축 기술들이 이제 논의될 것이다.
[0035]
이 점과 관련하여, 도 4는 메모리 대역폭 압축을 제공하기 위해 도 3의 CMC(36)에 의해 구현될 수 있는 예시적 메모리 대역폭 압축 메커니즘(60)의 개략적인 다이어그램이다. 도 4의 메모리 대역폭 압축 메커니즘(60)에서, 시스템 메모리(38)는 복수의 메모리 라인들(62)을 포함하며, 이 복수의 메모리 라인들(62) 각각은 물리적 어드레스와 연관된다. 복수의 메모리 라인들(62) 각각은, 메모리 읽기 또는 쓰기 요청(미도시)의 물리적 어드레스를 사용하여 CMC(36)에 의해 액세싱될 수 있다. 데이터(미도시)는, 압축 또는 비압축 형태로, 시스템 메모리(38)의 메모리 라인들(62) 각각 내에 저장될 수 있다. 일부 양상들에서, 메모리 라인(62)이 압축 형태로 저장되는지 또는 아닌지의 여부를 표시하기 위해, CI(64)를 포함하는 하나 또는 그 초과의 ECC(error correcting code) 비트들이 각각의 메모리 라인(62)과 연관되어 저장될 수 있다. 이러한 방식으로, 시스템 메모리(38)에 대한 메모리 액세스 요청을 수행할 때, 메모리 라인(62)이 메모리 액세스 요청의 프로세싱의 일부로서 압축되는지를 결정하기 위해, CMC(36)는 어드레싱될 물리적 어드레스에 대응하는 메모리 라인(62)과 연관된 CI(64)를 체크할 수 있다.
[0036]
마스터 디렉토리(66)가 또한, 시스템 메모리(38)에 제공된다. 마스터 디렉토리(66)는 물리적 어드레스에 대응하는 시스템 메모리(38)의 메모리 라인(62)마다 하나의 엔트리(68)를 포함한다. 마스터 디렉토리(66)는 또한, 메모리 라인(62)이 압축 형태로 저장되는지를 표시하기 위해 엔트리(68)마다 하나(1)의 CI(64)를 포함하며, 메모리 라인(62)이 압축 형태로 저장된다면, 다수의 압축 길이들이 지원되는 양상들에서, 데이터의 압축 길이를 표시하는 압축 패턴이 제공된다. 예컨대, 메모리 라인(62)이 길이가 128 바이트들이고, 그 안에 저장된 데이터가 64 또는 그 미만의 바이트들로 압축될 수 있다면, 시스템 메모리(38)에 저장된 데이터에 대응하는 마스터 디렉토리(66)의 CI(64)는, 128 바이트 메모리 라인(62)의 첫 번째 64 바이트들에 데이터가 저장된다는 것을 표시하도록 셋팅될 수 있다.
[0037]
계속해서 도 4를 참조하면, 쓰기 동작 동안, CMC(36)는 시스템 메모리(38)에 쓰여질 메모리 블록을 압축할 수 있다. 예컨대, 데이터(예컨대, 128 바이트들, 또는 256 바이트들)가 압축된다. 압축 메모리 블록이 시스템 메모리(38)의 메모리 블록 사이즈(예컨대, 64 바이트들)와 동일하거나 또는 더 작으면, 64 바이트들이 쓰여질 수 있으며, 그렇지 않으면 128 바이트들이 쓰여진다. 256 바이트들은, 압축 데이터 사이즈에 따라 64, 128, 192, 또는 256 바이트들로서 쓰여질 수 있다. 시스템 메모리(38)의 메모리 라인(62)과 연관된 하나 또는 그 초과의 ECC 비트들에 저장된 CI(64)는 또한, 메모리 라인(62)의 데이터가 압축 상태인지 또는 아닌지를 표시하도록 셋팅될 수 있다.
[0038]
예컨대 읽기 동작 동안, CMC(36)는 읽혀질 데이터가 시스템 메모리(38)에서 압축되었는지의 여부를 결정하기 위해 마스터 디렉토리(66)로부터 CI(64)를 읽을 수 있다. CI(64)에 기반하여, CMC(36)는 시스템 메모리(38)로부터, 액세싱될 데이터를 읽을 수 있다. 읽혀질 데이터가 CI(64)에 의해 표시된 바와 같이 시스템 메모리(38)에서 압축되었다면, CMC(36)는 하나의 메모리 읽기 동작으로 전체 압축 메모리 블록을 읽을 수 있다. 읽혀진 데이터의 부분이 시스템 메모리(38)에서 압축되지 않았다면, 메모리 액세스 레이턴시는 부정적으로 영향을 받을 수 있는데, 그 이유는 읽혀질 메모리 라인(62)의 추가 부분들이 시스템 메모리(38)로부터 또한 읽혀져야 하기 때문이다. 일부 양상들에서, 트레이닝 메커니즘이 다수의 어드레스 범위들에 대해 사용될 수 있는데, 여기서 CMC(36)는, 상황들의 주어진 세트에서 시스템 메모리(38)로부터 2회의 액세스들로 데이터를 읽는 것이 더 나은지의 여부, 또는 레이턴시 영향을 회피하기 위해 시스템 메모리(38)로부터 데이터의 전체 양을 읽는 것이 더 나은지의 여부를 "학습"하도록 구성될 수 있다.
[0039]
도 4의 예에서, 시스템 메모리(38)의 밖의 별개의 캐시로 CI 캐시(70)가 또한 제공될 수 있다. CI 캐시(70)는, 시스템 메모리(38)의 메모리 라인(62)이 압축 형태로 저장되는지 또는 아닌지를 표기하기 위해, 시스템 메모리(38)의 메모리 라인(62)마다 하나의 캐시 엔트리(72)를 제공한다. 이러한 방식으로, 시스템 메모리(38)에 대한 메모리 액세스 요청을 수행할 때, 메모리 라인(62)을 읽을 필요 없이, 시스템 메모리(38)에서 물리적 어드레스에 있는 메모리 라인(62)이 메모리 액세스 요청의 프로세싱의 일부로서 압축되는지를 결정하기 위해, CMC(36)는 먼저, 어드레싱될 물리적 어드레스에 대응하는 CI 캐시(70)의 캐시 엔트리(72)를 체크할 수 있다. 따라서, CI 캐시(70)가, 메모리 라인(62)이 압축 상태로 저장된다고 표시하면, CMC(36)는 전체 메모리 라인(62)을 읽을 필요가 없으며, 따라서 레이턴시가 감소된다. CI 캐시(70)가, 메모리 라인(62)이 비압축 상태로 저장된다고 표시하면, CMC(36)는 전체 메모리 라인(62)을 읽을 수 있다. CI 캐시(70)에서 미스(miss)가 발생하면, 동일한 물리적 어드레스에 대한 후속 메모리 액세스 요청들을 위해, 마스터 디렉토리(66)에 저장된 대응하는 CI(64)가 참고(consult)되며 CI 캐시(70)에 로딩될 수 있다.
[0040]
일부 양상들에서, CI 캐시(70)는 통상적인 캐시로서 조직화될 수 있다. CI 캐시(70)는 태그 어레이(미도시)를 포함할 수 있으며, 비-제한적 예로서 n-웨이 연관 캐시(n-way associative cache)로서 조직화될 수 있다. CMC(36)는 CI 캐시(70)에 대한 만료 정책(eviction policy)을 구현할 수 있다. 도 4에 도시된 CI 캐시(70)에서, 각각의 캐시 라인(74)은 다수의 캐시 엔트리들(72)을 저장할 수 있다. 각각의 캐시 엔트리(72)는, 캐시 엔트리(72)와 연관된 시스템 메모리(38)의 메모리 라인(62)이 압축 상태인지를 표시하기 위해, 그리고/또는 캐시 엔트리(72)에 대응하는 데이터의 압축 사이즈를 표시하는 압축 패턴을 표현하기 위해, CI(76)를 포함할 수 있다. 예컨대, CI(76)는 네 개(4)의 잠재적인 압축 사이즈들(예컨대, 32, 64, 96, 또는 128 바이트들)을 표현하는 두(2) 비트들을 포함할 수 있다. 이 예에서, CI(64)는 중복적인데, 그 이유는 이 정보가 캐시 엔트리들(72)의 CI(76)에 또한 저장되기 때문이라는 것을 주목하라. 예컨대, 메모리 라인(62)이 길이가 128 바이트들이고, 그 안에 저장된 데이터가 64 또는 그 미만의 바이트들로 압축될 수 있다면, 시스템 메모리(38)의 메모리 라인(62)에 대응하는 CI 캐시(70)의 캐시 엔트리(72)의 CI(76)는, 128 바이트 메모리 라인(62)의 첫 번째 64 바이트들에 데이터가 저장된다는 것을 표시하도록 셋팅될 수 있다.
[0041]
또한, 도 4의 메모리 대역폭 압축 메커니즘(60)을 위해, 추가적인 캐시를 제공하는 것이 원해질 수 있다. 이 점과 관련하여, 도 5는 도 2의 SoC(10')와 같은 대안적 SoC(10'')의 예를 예시한다. 그러나, 도 5의 SoC(10'')는 부가적으로, 선택적 캐시(78)를 포함하며, 이 예에서 선택적 캐시(78)는 L4 캐시이다. CMC(36)는 레이턴시를 최소화하기 위해 L4 캐시(78) 및 CI 캐시(70) 둘 모두에서 동시에 물리적 어드레스를 룩 업(look up)할 수 있다. L4 캐시(78)의 어드레스들은 압축되지 않은 물리적 어드레스들이다. L4 캐시(78)에서 물리적 어드레스 히트(hit) 시, CI 캐시(70)에서의 물리적 어드레스 룩업은 중복적이다. L4 캐시(78)에서 물리적 어드레스 미스 시, 시스템 메모리(38)로부터 데이터를 획득하기 위해, CI 캐시(70)에서의 물리적 어드레스 룩업이 요구된다. 또한, CPU(16(1), 16(2))가 L4 캐시(78) 및 CI 캐시(70) 둘 모두에 액세싱하는 것에 대한 추가적인 레이턴시를 회피하기 위해, L4 캐시(78) 및 CI 캐시(70)가 준비될 수 있다.
[0042]
도 6a 및 도 6b는, 메모리 대역폭 압축을 제공하기 위해 도 3의 CMC(36)에 의해 액세싱될 수 있는 도 2의 시스템 메모리(38)의 예시적 엘리먼트들 및 예시적 통신 흐름들을 예시하도록 제공된다. 특히, 도 6a가 백-투-백 읽기들 및 조기 리턴들을 포함하는 메모리 읽기 동작 동안의 예시적 통신 흐름들을 예시하는 반면에, 도 6b는 메모리 쓰기 동작 동안의 예시적 통신 흐름들을 예시한다. 도 6a 및 도 6b를 설명할 때, 도 3 및 도 4의 엘리먼트들이 명확성을 위해 참조된다.
[0043]
도 6a 및 도 6b에서, 시스템 메모리(38)는 압축 및 비압축 데이터를 저장하기 위한 복수의 메모리 라인들(80(0)-80(X))을 포함한다. 메모리 라인들(80(0)-80(X)) 각각은, 시스템 메모리(38)의 근본적인 메모리 아키텍처에 의해 결정되는 바와 같이, 개개의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 및 86(0)-86(Z))로 세분된다. 일부 양상들에서, 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 각각의 사이즈는, 메모리 읽기 동작에서 시스템 메모리(38)로부터 읽혀질 수 있는 데이터의 최소량을 표현한다. 예컨대, 일부 예시적 메모리 아키텍처들에서, 메모리 라인들(80(0)-80(X)) 각각은 128 바이트들의 데이터를 포함할 수 있으며, 이 128 바이트들의 데이터는 두 개의 64-바이트 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))로 세분된다. 일부 양상들은, 메모리 라인들(80(0)-80(X)) 각각이 더 많거나 또는 더 적은 개수의 바이트들의 데이터(예컨대, 비-제한적 예들로서, 256 바이트들 또는 64 바이트들)를 포함할 수 있다는 것을 제공할 수 있다. 유사하게, 일부 양상들에 따라, 메모리 라인들(80(0)-80(X)) 내의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))은 더 크거나 또는 더 작을 수 있다(예컨대, 비-제한적 예들로서, 128 바이트들 또는 32 바이트들). 일부 양상들에서, 메모리 읽기 동작은 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 각각의 사이즈보다 더 적은 개수의 바이트들을 읽지만, 여전히 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 중 하나와 동일한 양의 메모리 대역폭을 소비할 수 있다.
[0044]
메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 각각은, 하나 또는 그 초과의 대응하는 ECC 비트들(88(0)-88(Z), 90(0)-90(Z), 92(0)-92(Z))과 연관된다. ECC 비트들(88(0)-88(Z), 90(0)-90(Z), 92(0)-92(Z))과 같은 ECC 비트들은 통상적으로, 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 내에서 공통으로 맞닥뜨리는 타입들의 내부 데이터 변질을 검출 및 정정하기 위해 사용된다. 도 6a 및 도 6b의 예에서, ECC 비트들(88(0)-88(Z), 90(0)-90(Z), 92(0)-92(Z)) 중 하나 또는 그 초과는, 개개의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))에 대한 CI들(94(0)-94(Z), 96(0)-96(Z), 98(0)-98(Z))을 저장하도록 용도가 변경된다. 도 6a 및 도 6b의 ECC 비트들(88(0)-88(Z), 90(0)-90(Z), 92(0)-92(Z))이 그들의 개개의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))에 인접하게 있는 것으로서 묘사되지만, ECC 비트들(88(0)-88(Z), 90(0)-90(Z), 92(0)-92(Z))이 시스템 메모리(38) 내의 다른 곳에 위치될 수 있다는 것이 이해되어야 한다.
[0045]
CI들(94(0)-94(Z), 96(0)-96(Z), 98(0)-98(Z)) 각각은, 시스템 메모리(38)의 대응하는 메모리 블록(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))에 저장된 데이터의 압축 상태를 표시하는 하나 또는 그 초과의 비트들을 포함할 수 있다. 일부 양상들에서, CI들(94(0)-94(Z), 96(0)-96(Z), 98(0)-98(Z)) 각각은, 대응하는 메모리 블록(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))의 데이터가 압축 상태인지 또는 비압축 상태인지의 여부를 표시하는 단일 비트를 포함할 수 있다. 일부 양상들에 따라, CI들(94(0)-94(Z), 96(0)-96(Z), 98(0)-98(Z)) 각각은, 대응하는 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z)) 각각에 대한 압축 패턴(예컨대, 비-제한적 예로서, 압축 데이터에 의해 점유되는 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))의 개수)을 표시하기 위해 사용될 수 있는 다수의 비트들을 포함할 수 있다.
[0046]
도 6a의 예에서, 화살표(104)에 의해 표시된 바와 같이, 물리적 어드레스(102)를 특정하는 메모리 읽기 요청(100)이 CMC(36)에 의해 수신된다. 메모리 읽기 요청(100)은, 디맨드 워드를 포함하는 메모리 블록(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))을 표시하는 디맨드 워드 표시자(106)를 더 포함한다. 예시의 목적들로, 먼저, 물리적 어드레스(102)가 메모리 라인(80(0))에 대응한다고 가정하라. 메모리 읽기 요청(100)이 수신되는 시간에, CMC(36)는 메모리 라인(80(0))의 메모리 블록들(82(0)-82(Z)) 내에 저장된 데이터가 압축 상태인지 또는 아닌지의 여부를 알지 못한다. CMC(36)는 전체 메모리 라인(80(0))을 읽는 것으로 진행할 수 있지만, 요청된 데이터가 압축 형태로 메모리 블록(82(0))에만 저장되면, 메모리 블록(82(Z))의 읽기는 불필요할 것이며, 증가되는 메모리 액세스 레이턴시를 야기할 것이다.
[0047]
그에 따라서, CMC(36)는 제 1 메모리 블록(82(0))(본원에서 "읽기 메모리 블록(82(0))"으로 또한 지칭됨)을 읽는다. CMC(36)는, ECC 비트들(88(0))에 저장된 CI(94(0))에 기반하여, 제 1 메모리 블록(82(0))이 압축 데이터를 저장하는지의 여부를 결정한다. 도 6a에서 알 수 있는 바와 같이, 메모리 블록들(82(0)-82(Z))은 압축 데이터를 저장하는 것이 아니라, 비압축 데이터(108(0)-108(Z))를 저장한다. 따라서, 제 1 메모리 블록(82(0))이 압축 데이터를 저장하지 않는다고 결정할 때, CMC(36)는 메모리 라인(80(0))의 추가 메모리 블록(82(Z))의 백-투-백 읽기를 수행한다. 메모리 블록(82(Z))의 백-투-백 읽기와 동시에, CMC(36)는, 디맨드 워드 표시자(106)에 기반하여, 읽기 메모리 블록(82(0))이 디맨드 워드에 대응하는지의 여부를 결정한다. 읽기 메모리 블록(82(0))이 디맨드 워드에 대응한다면, CMC(36)는, 메모리 블록(82(Z))의 백-투-백 읽기를 수행하면서 동시에, 읽기 메모리 블록(82(0))을 리턴한다(즉, "조기 리턴"). 이러한 방식으로, 메모리 블록(82(0))에 액세싱하기 위한 메모리 액세스 레이턴시가 감소될 수 있다.
[0048]
계속해서 도 6a를 참조하면, 이제, 물리적 어드레스(102)가 메모리 라인(80(1))에 대응한다고 가정하라. 이 경우, 일부 양상들의 CMC(36)는 메모리 라인(80(1))의 제 1 메모리 블록(84(0))을 읽으며, ECC 비트들(90(0))에 저장된 CI(96(0))에 기반하여, 제 1 메모리 블록(84(0))이 압축 데이터(110)를 포함한다고 결정한다. 따라서, CMC(36)는 제 1 메모리 블록(84(0))의 압축 데이터(110)를 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제한다. 이후, CMC(36)는, 디맨드 워드 표시자(106)에 기반하여, 압축해제 메모리 블록들(112(0)-112(Z)) 중 디맨드 워드를 포함하는 압축해제 메모리 블록(예컨대, 압축해제 메모리 블록(112(0)))을 식별하며, 나머지 압축해제 메모리 블록들(112(0)-112(Z))을 리턴하기 전에, 이 압축해제 메모리 블록(112(0))을 리턴할 수 있다.
[0049]
CMC(36)의 일부 양상들은, 본원에서 "다수의 압축 데이터 쓰기들"로 지칭되는 것을 사용할 수 있으며, 여기서 예컨대 압축 데이터(110)는, 단지 제 1 메모리 블록(84(0)) 대신에, 메모리 라인(80(1))의 메모리 블록들(84(0)-84(Z)) 각각에 저장될 수 있다. 그러한 양상들에서, CMC(36)는, 제 1 메모리 블록(82(0) 또는 84(0))을 읽는 것이 아니라, 메모리 블록들, 이를테면, 메모리 블록들(82(Z) 또는 84(Z)) 중 디맨드 워드 표시자(106)에 의해 표시된 메모리 블록을 읽음으로써 메모리 액세스 레이턴시를 개선시킬 수 있다. CMC(36)에 의해 읽혀진 메모리 라인(80(0)-80(X))이 비압축 데이터(108(0)-108(Z))를 포함하는 것으로 결정되면(예컨대, 메모리 라인(80(0))), CMC(36)는 디맨드 워드를 포함하는 메모리 블록(82(Z))을 먼저 읽었을 것이며, 위에서 설명된 바와 같이, 하나 또는 그 초과의 추가 메모리 블록들(82(0)-82(Z))을 읽기 위한 백-투-백 읽기 동작을 수행하는 것과 동시에, 디맨드 워드를 리턴할 수 있다. 이는, 비압축 데이터(108(0)-108(Z))를 읽어서 리턴할 때, 개선된 메모리 읽기 액세스 시간들을 야기할 수 있다. CMC(36)에 의해 읽혀진 메모리 라인(80(0)-80(X))이 압축 데이터(110)를 포함하는 것으로 결정되면(예컨대, 메모리 라인(80(1))), 디맨드 워드 표시자(106)에 의해 표시되며 CMC(36)에 의해 읽혀지는 메모리 블록(84(Z))은 압축 데이터(110)를 포함할 것이다. 따라서, 어느 메모리 블록(84(0)-84(Z))이 디맨드 워드 표시자(106)에 의해 표시되는지에 관계없이, CMC(36)는 압축 데이터(110)를 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제하는 것으로 진행할 수 있다. 이후, CMC(36)는, 위에서 설명된 바와 같이, 디맨드 워드를 포함하는 압축해제 메모리 블록(112(0)-112(Z))을 식별하여 리턴할 수 있다.
[0050]
일부 양상들에서, CMC(36)는, 읽기들 및/또는 쓰기들의 총 횟수와 비교하여 압축 데이터(110)의 읽기들 및/또는 쓰기들의 횟수가 추적될 수 있으며 읽기 동작들을 수행하기 위한 동작들이 그러한 추적에 기반하여 선택적으로 수정될 수 있는 적응식 모드를 제공함으로써, 메모리 액세스 레이턴시를 추가로 개선시킬 수 있다. 일부 양상들에 따라, 그러한 추적은 비-제한적 예들로서 CPU 단위, 작업량(workload) 단위, VM(virtual-machine) 단위, 컨테이너 단위, 및/또는 QoSID(QoS(Quality-of-Service)-identifier) 단위로 수행될 수 있다. 이 점과 관련하여, 일부 양상들의 CMC(36)는 압축 모니터(114)를 제공하도록 구성될 수 있다. 압축 모니터(114)는, 비-제한적 예들로서 압축 데이터(110)의 읽기들의 횟수, 읽기 동작들의 총 횟수, 압축 데이터(110)의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반하여, 압축비(116)를 추적하도록 구성된다. 일부 양상들에서, 압축 모니터(114)는 CMC(36)에 의해 수행되는 압축 데이터(110)의 읽기들의 횟수, 읽기 동작들의 총 횟수, 압축 데이터(110)의 쓰기들의 횟수, 및/또는 쓰기 동작들의 총 횟수를 추적하기 위한 하나 또는 그 초과의 카운터들(118)을 제공할 수 있다. 이후, 압축비(116)는 총 읽기 동작들 대 압축 읽기 동작들의 비율, 및/또는 총 쓰기 동작들 대 압축 쓰기 동작들의 비율로서 결정될 수 있다.
[0051]
CMC(36)는 임계 값(120)을 추가로 제공할 수 있으며, 압축 모니터(114)에 의해 압축비(116)는 임계 값(120)과 비교될 수 있다. 압축비(116)가 임계 값(120) 미만이 아니라면, CMC(36)는, 읽혀질 데이터가 압축될 공산이 있다고 결론을 내릴 수 있으며, 위에서 설명된 바와 같이 읽기 동작들을 수행할 수 있다. 그러나, 압축비(116)가 임계 값(120) 미만이라면, CMC(36)는, 읽혀질 데이터가 압축될 공산이 낮다고 결정할 수 있다. 그러한 경우들에서, 메모리 블록들(82(0)-82(Z), 84(0)-84(Z), 86(0)-86(Z))로부터 비압축 데이터를 리트리빙하기 위해, CMC(36)가 다수의 읽기 동작들을 수행해야 할 더 높은 가능성이 있을 수 있다. 그에 따라서, 위의 예에서와 같이 단지 메모리 라인(80(0))의 제 1 메모리 블록(82(0))을 읽는 것 대신에, CMC(36)는 메모리 블록들(82(0)-82(Z)) 전부를 읽을 수 있다. 이후, CMC(36)는, 제 1 메모리 블록(82(0))의 ECC 비트들(88(0))의 CI(94(0))에 기반하여, 제 1 메모리 블록(82(0))이 압축 데이터(110)를 포함하는지의 여부를 결정할 수 있다. 제 1 메모리 블록(82(0))이 압축 데이터(110)를 포함하지 않으면, 메모리 라인(80(0))에 저장된 모든 비압축 데이터를 리트리빙하기 위해 추가적인 읽기들을 수행할 필요 없이, CMC(36)는 메모리 블록들(82(0)-82(Z)) 전부를 즉시 리턴할 수 있다. 제 1 메모리 블록(82(0))이 압축 데이터(110)를 포함하면, CMC(36)는 위에서 설명된 바와 같이 데이터를 압축해제 및 리턴할 수 있다.
[0052]
이제, 도 6b를 참조하면, 화살표(124)에 의해 표시된 바와 같이, 일부 양상들의 CMC(36)는 메모리 쓰기 요청(122)을 수신할 수 있다. 메모리 쓰기 요청(122)은 시스템 메모리(38)에 쓰여질 비압축 쓰기 데이터(126) 뿐만 아니라 비압축 쓰기 데이터(126)가 쓰여질 시스템 메모리(38)의 물리적 어드레스(102) 둘 모두를 포함한다. 예시의 목적들로, 먼저, 물리적 어드레스(102)가 메모리 라인(80(0))에 대응한다고 가정하라. 메모리 쓰기 요청(122)을 수신할 때, CMC(36)는 먼저, 비압축 쓰기 데이터(126)를 압축 쓰기 데이터(128)로 압축한다. 이후, CMC(36)는, 압축 쓰기 데이터(128)의 사이즈가 메모리 라인(80(0))의 각각의 메모리 블록(82(0)-82(Z))의 사이즈를 초과하는지의 여부를 결정한다. 이 예에서, 압축 쓰기 데이터(128)는 너무 커서 메모리 블록들(82(0)-82(Z)) 중 단일 메모리 블록 내에 저장할 수 없다. 그 결과, 압축 쓰기 데이터(128)의 후속 읽기들은 다수의 읽기 동작들 뿐만 아니라 압축해제 동작을 요구할 것이다. 다수의 읽기 동작들 및 압축해제 동작에 의해 발생되는 오버헤드는, 압축 쓰기 데이터(128)를 압축 형태로 저장함으로써 실현되는 임의의 성능 잇점을 없앨 수 있다. 그에 따라서, CMC(36)는 비압축 쓰기 데이터(126)를 비압축 데이터(130(0)-130(Z))로서 메모리 블록들(82(0)-82(Z))에 저장한다. CMC(36)는 또한, 제 1 메모리 블록(82(0))의 압축 상태(예컨대, 비압축)를 표시하기 위해 메모리 라인(80(0))의 제 1 메모리 블록(82(0))의 CI(94(0))를 셋팅한다.
[0053]
계속해서, 도 6b를 참조하면, 이제, 물리적 어드레스(102)가 메모리 라인(80(1))에 대응하며, 비압축 쓰기 데이터(126)를 압축할 때, CMC(36)는, 압축 쓰기 데이터(128)의 사이즈가 메모리 라인(80(1))의 각각의 메모리 블록(84(0)-84(Z))의 사이즈와 동일하거나 또는 더 작다고 결정한다고 가정하라. 이 경우, CMC(36)는 압축 쓰기 데이터(128)를 압축 데이터(132)로서 메모리 라인(80(1))의 제 1 메모리 블록(84(0))에 쓴다. CMC(36)는, 제 1 메모리 블록(84(0))의 압축 상태(예컨대, 압축)를 표시하기 위해 메모리 라인(80(1))의 제 1 메모리 블록(84(0))의 CI(96(0))를 추가로 셋팅한다.
[0054]
위에서 주목된 바와 같이, 일부 양상들에서, CMC(36)는 다수의 압축 데이터 쓰기들을 지원할 수 있다. 도 6b의 예에서, 다수의 압축 데이터 쓰기들을 사용하는 CMC(36)는, 압축 데이터(132)를 제 1 메모리 블록(84(0))에만 쓰는 것이 아니라, 압축 데이터(132)를 메모리 라인(80(1))의 메모리 블록들(84(0)-84(Z)) 각각에 쓸 수 있다. 이는, 디맨드 워드 표시자(106)의 값에 관계없이 압축 데이터(132)가 적절하게 읽혀지도록 보장하면서, 비압축 데이터(130(0)-130(Z))에 대한 디맨드 워드를 읽기 위해 도 6a의 디맨드 워드 표시자(106)를 사용함으로써, CMC(36)가 메모리 읽기 액세스 시간들을 추가로 개선시키는 것을 가능하게 할 수 있다.
[0055]
도 7a-도 7c는 읽기 데이터의 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC(36)의 예시적 동작들을 예시하는 흐름도들이다. 도 7a-도 7c를 설명할 때, 도 2, 도 3, 및 도 6a-도 6b의 엘리먼트들이 명확성을 위해 참조된다. 도 7a에서, 일부 양상들의 CMC(36)는, 압축 모니터(114)를 사용하여, 압축비(116)를 추적할 수 있다(블록(134)). 일부 양상들에 따라, 압축비(116)는, 압축 데이터(110)의 읽기들의 횟수, 읽기 동작들의 총 횟수, 압축 데이터(110)의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반할 수 있다. 이후, CMC(36)는, 시스템 메모리(38) 내에 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 포함하는 제 1 메모리 라인(80(0), 80(1))의 물리적 어드레스(102)를 포함하는 메모리 읽기 요청(100)을 수신한다(블록(136)). 압축 모니터(114)를 사용하는 CMC(36)의 양상들에서, CMC(36)는, 압축비(116)가 임계 값(120) 미만인지의 여부를 결정할 수 있다(블록(138)). 압축비(116)가 임계 값(120) 미만이 아니라고 CMC(36)가 결정 블록(138)에서 결정하면, 또는 CMC(36)가 압축 모니터(114)를 사용하고 있지 않으면, 프로세싱은 도 7b의 블록(140)에서 재개한다. 그러나, 압축비(116)가 임계 값(120) 미만이라고 CMC(36)가 결정 블록(138)에서 결정하면, 프로세싱은 도 7c의 블록(142)에서 재개한다.
[0056]
이제, 도 7b를 참조하면, CMC(36)는 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z)) 중 제 1 메모리 블록(82(0), 84(0))을 읽는다(블록(140)). CMC(36)는, 제 1 메모리 블록(82(0), 84(0))의 CI(94(0), 96(0))에 기반하여, 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하는지의 여부를 결정한다(블록(144)). 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하지 않는다고 CMC(36)가 결정 블록(144)에서 결정하면, CMC(36)는 제 1 메모리 라인(80(0))의 복수의 메모리 블록들(82(0)-82(Z)) 중 하나 또는 그 초과의 추가 메모리 블록들(82(Z))의 백-투-백 읽기를 수행한다(블록(146)). 백-투-백 읽기와 동시에, CMC(36)는 또한, 읽기 메모리 블록(82(0))이 디맨드 워드를 포함하는지의 여부를 결정한다(블록(148)). 읽기 메모리 블록(82(0))이 디맨드 워드를 포함하면, CMC(36)는, 백-투-백 읽기와 동시에, 읽기 메모리 블록(82(0))을 리턴한다(블록(150)). 읽기 메모리 블록(82(0))이 디맨드 워드를 포함하지 않으면, 프로세싱은 블록(148)으로 리턴한다.
[0057]
제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함한다고 CMC(36)가 도 7b의 결정 블록(144)에서 결정하면, CMC(36)는 제 1 메모리 블록(84(0))의 압축 데이터(110)를 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제한다(블록(154)). CMC(36)는 다음 차례로, 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z)) 중 디맨드 워드를 포함하는 압축해제 메모리 블록(112(0))을 식별한다(블록(156)). 이후, 나머지 압축해제 메모리 블록들(112(0)-112(Z))을 리턴하기 전에, 압축해제 메모리 블록(112(0))이 CMC(36)에 의해 리턴된다(블록(158)). 디맨드 워드를 포함하지 않는 나머지 압축해제 메모리 블록들(112(0)-112(Z))이 이후, CMC(36)에 의해 후속하여 리턴된다는 것이 이해되어야 한다.
[0058]
위에서 주목된 바와 같이, 압축비(116)가 임계 값(120) 미만이라고 CMC(36)가 도 7a의 결정 블록(138)에서 결정하면, 프로세싱은 도 7c의 블록(142)에서 재개한다. 이제, 도 7c를 참조하면, CMC(36)는 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들, 이를테면, 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 각각 읽는다(블록(142)). CMC(36)는, 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z)) 중 제 1 메모리 블록(82(0), 84(0))의 CI(94(0), 96(0))에 기반하여, 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하는지의 여부를 결정한다(블록(160)). 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하지 않으면, CMC(36)는 복수의 메모리 블록들(82(0)-82(Z))을 리턴한다(블록(162)). 그러나, 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함한다고 CMC(36)가 결정 블록(160)에서 결정하면, CMC(36)는 제 1 메모리 블록(84(0))의 압축 데이터(110)를 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제한다(블록(164)). CMC(36)는 다음 차례로, 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z)) 중 디맨드 워드를 포함하는 압축해제 메모리 블록(112(0))을 식별한다(블록(166)). 이후, 나머지 압축해제 메모리 블록들(112(0)-112(Z))을 리턴하기 전에, 압축해제 메모리 블록(112(0))이 CMC(36)에 의해 리턴된다(블록(168)).
[0059]
읽기 데이터의 백-투-백 읽기들 및 조기 리턴들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC(36)의 예시적 동작들을 예시하기 위해, 도 8이 제공된다. 명확성을 위해, 도 8을 설명할 때 도 2, 도 3, 및 도 6a-도 6b의 엘리먼트들이 참조된다. 일부 양상들에서, 도 8의 동작들은, CMC(36)가, 시스템 메모리(38) 내에 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 포함하는 제 2 메모리 라인(80(0), 80(1))의 물리적 어드레스(102) 및 비압축 쓰기 데이터(126)를 포함하는 메모리 쓰기 요청(122)을 수신하는 것으로 시작한다(블록(152)). CMC(36)는 비압축 쓰기 데이터(126)를 압축 쓰기 데이터(128)로 압축할 수 있다(블록(170)). 다음 차례로, CMC(36)는, 압축 쓰기 데이터(128)의 사이즈가 제 2 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))의 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과하는지의 여부를 결정할 수 있다(블록(172)). 압축 쓰기 데이터(128)의 사이즈가 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과하지 않으면, CMC(36)는 압축 쓰기 데이터(128)를 제 2 메모리 라인(80(1))의 제 1 메모리 블록(84(0))에 쓴다(블록(174)). 그러나, 압축 쓰기 데이터(128)의 사이즈가 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과한다고 CMC(36)가 결정 블록(172)에서 결정하면, CMC(36)는 비압축 쓰기 데이터(126)를 제 2 메모리 라인(80(0))의 복수의 메모리 블록들(82(0)-82(Z))에 쓴다(블록(176)). 이후, CMC(36)는 제 1 메모리 블록(82(0), 84(0))의 압축 상태를 표시하기 위해 제 2 메모리 라인(80(0), 80(1))의 제 1 메모리 블록(82(0), 84(0))의 CI(94(0), 96(0))를 셋팅한다(블록(178)).
[0060]
도 9a-도 9c는 백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 읽기 동작들을 수행하기 위한 도 3의 CMC(36)의 예시적 동작들을 예시하는 흐름도들이다. 명확성을 위해, 도 9a-9c을 설명할 때 도 2, 도 3, 및 도 6a-도 6b의 엘리먼트들이 참조된다. 도 9a에서, 일부 양상들에 따른 동작들은, CMC(36)가 압축 모니터(114)를 사용하여 압축비(116)를 추적하는 것으로 시작한다(블록(180)). 일부 양상들은, 압축비(116)가, 압축 데이터(110)의 읽기들의 횟수, 읽기 동작들의 총 횟수, 압축 데이터(110)의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반한다는 것을 제공할 수 있다. 이후, CMC(36)는, 시스템 메모리(38) 내에 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 포함하는 제 1 메모리 라인(80(0), 80(1))의 물리적 어드레스(102), 및 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z)) 중에서 디맨드 워드를 포함하는 메모리 블록(82(0), 84(0))을 표시하는 디맨드 워드 표시자(106)를 포함하는 메모리 읽기 요청(100)을 수신한다(블록(182)).
[0061]
압축 모니터(114)를 사용하는 CMC(36)의 양상들에서, CMC(36)는, 압축비(116)가 임계 값(120) 미만인지의 여부를 결정할 수 있다(블록(184)). 압축비(116)가 임계 값(120) 미만이 아니라면, 또는 CMC(36)가 압축 모니터(114)를 사용하고 있지 않으면, 프로세싱은 도 9b의 블록(186)에서 재개한다. 그러나, 압축비(116)가 임계 값(120) 미만이라고 CMC(36)가 결정 블록(184)에서 결정하면, 프로세싱은 도 9c의 블록(188)에서 재개한다.
[0062]
이제, 도 9b를 참조하면, CMC(36)는 디맨드 워드 표시자(106)에 의해 표시된 메모리 블록(82(Z), 84(Z))을 읽는다(블록(186)). CMC(36)는 다음 차례로, 메모리 블록(82(Z), 84(Z))의 CI(94(Z), 96(Z))에 기반하여, 메모리 블록(82(Z), 84(Z))이 압축 데이터(110)를 포함하는지의 여부를 결정한다(블록(190)). 메모리 블록(82(Z), 84(Z))이 압축 데이터(110)를 포함하지 않는 것으로 결정되면, CMC(36)는, 메모리 블록(82(Z))을 리턴하는 것과 동시에, 제 1 메모리 라인(80(0))의 복수의 메모리 블록들(82(0)-82(Z)) 중 하나 또는 그 초과의 추가 메모리 블록들(82(0)-82(Z))의 백-투-백 읽기를 수행한다(블록(192)).
[0063]
그러나, 메모리 블록(82(Z), 84(Z))이 압축 데이터(110)를 포함한다고 CMC(36)가 결정 블록(190)에서 결정하면, CMC(36)는 메모리 블록(84(Z))의 압축 데이터(110)를 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제한다(블록(196)). CMC(36)는, 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z)) 중 디맨드 워드를 포함하는 압축해제 메모리 블록(112(Z))을 식별한다(블록(198)). 이후, 나머지 압축해제 메모리 블록들(112(0)-112(Z))을 리턴하기 전에, 압축해제 메모리 블록(112(Z))이 CMC(36)에 의해 리턴된다(블록(200)).
[0064]
위에서 주목된 바와 같이, 압축비(116)가 임계 값(120) 미만이라고 CMC(36)가 도 9a의 결정 블록(184)에서 결정하면, 프로세싱은 도 9c의 블록(188)에서 재개한다. 도 9c에서, CMC(36)는 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 읽는다(블록(188)). 이후, CMC(36)는, 제 1 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z)) 중 제 1 메모리 블록(82(0), 84(0))의 CI(94(0), 96(0))에 기반하여, 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하는지의 여부를 결정한다(블록(202)). 제 1 메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함하지 않으면, CMC(36)는 복수의 메모리 블록들(82(0)-82(Z))을 리턴한다(블록(204)).
[0065]
메모리 블록(82(0), 84(0))이 압축 데이터(110)를 포함한다고 CMC(36)가 결정 블록(202)에서 결정하면, CMC(36)는 제 1 메모리 블록(84(0))의 압축 데이터(110)를 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z))에 압축해제한다(블록(206)). CMC(36)는, 하나 또는 그 초과의 압축해제 메모리 블록들(112(0)-112(Z)) 중 디맨드 워드를 포함하는 압축해제 메모리 블록(112(0))을 식별한다(블록(208)). 이후, 나머지 압축해제 메모리 블록들(112(0)-112(Z))을 리턴하기 전에, 압축해제 메모리 블록(112(0))이 CMC(36)에 의해 리턴된다(블록(210)).
[0066]
백-투-백 읽기들 및 다수의 압축 데이터 쓰기들을 사용하여 메모리 대역폭 압축을 제공할 때 쓰기 동작들을 수행하기 위한 도 3의 CMC(36)의 예시적 동작들을 예시하기 위해, 도 10이 제공된다. 명확성을 위해, 도 10을 설명할 때 도 2, 도 3, 및 도 6a-도 6b의 엘리먼트들이 참조된다. 일부 양상들에서, 도 10의 동작들은, CMC(36)가, 시스템 메모리(38) 내에 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))을 포함하는 제 2 메모리 라인(80(0), 80(1))의 물리적 어드레스(102) 및 비압축 쓰기 데이터(126)를 포함하는 메모리 쓰기 요청(122)을 수신하는 것으로 시작한다(블록(194)). CMC(36)는 비압축 쓰기 데이터(126)를 압축 쓰기 데이터(128)로 압축할 수 있다(블록(212)). 이후, CMC(36)는, 압축 쓰기 데이터(128)의 사이즈가 제 2 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))의 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과하는지의 여부를 결정할 수 있다(블록(214)). 압축 쓰기 데이터(128)의 사이즈가 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과하면, CMC(36)는 비압축 쓰기 데이터(126)를 제 2 메모리 라인(80(1))의 복수의 메모리 블록들(84(0)-84(Z))에 쓸 수 있다(블록(216)). 그러나, 압축 쓰기 데이터(128)의 사이즈가 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 사이즈를 초과하지 않는다고 CMC(36)가 결정 블록(214)에서 결정하면, CMC(36)는 압축 쓰기 데이터(128)를 제 2 메모리 라인(80(1))의 복수의 메모리 블록들(84(0)-84(Z))의 각각의 메모리 블록(84(0)-84(Z))에 쓸 수 있다(블록(218)). 이후, CMC(36)는, 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 압축 상태를 표시하기 위해, 제 2 메모리 라인(80(0), 80(1))의 복수의 메모리 블록들(82(0)-82(Z), 84(0)-84(Z))의 각각의 메모리 블록(82(0)-82(Z), 84(0)-84(Z))의 CI(94(0)-94(Z), 96(0)-96(Z))를 셋팅한다(블록(220)).
[0067]
일부 양상들에서, 다수의 비트들을 포함하는 CI의 값은 메모리 블록, 이를테면, 메모리 블록들(82(0)-82(Z)) 중 하나에 저장된 고정된 데이터 패턴 및/또는 압축 상태를 표시할 수 있다. 비-제한적 예로서, 두(2) 비트들의 CI의 경우, "00"의 값은 대응하는 메모리 블록이 비압축 상태라고 표시할 수 있는 반면에, "01"의 값은 대응하는 메모리 블록이 압축 상태라고 표시할 수 있다. "11"의 값은 고정된 패턴(예컨대, 전부 제로들(0들) 또는 전부 일들(1들))이 대응하는 메모리 블록에 저장된다는 것을 표시할 수 있다.
[0068]
이 점과 관련하여, 도 11은 빈번한 패턴 압축 데이터 압축 메커니즘(222)을 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(224)의 소스 데이터는 예로 128 바이트들로서 도시된다. 압축 데이터 포맷(226)이 아래에서 도시된다. 압축 데이터 포맷(226)은, 프리픽스 코드들(Px) 그리고 데이터x로서 프리픽스 뒤의 데이터의 포맷으로 제공된다. 프리픽스는 3-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(230)의 프리픽스 코드 열(228)에 도시되며, 이 빈번한 패턴 인코딩 테이블(230)은, 프리픽스 코드 열(228)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열(232)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(230)의 데이터 사이즈 열(234)에 제공된다.
[0069]
도 12는 32-비트의 빈번한 패턴 압축 데이터 압축 메커니즘(236)을 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(238)의 소스 데이터는 예로 128 바이트들로서 도시된다. 압축 데이터 포맷(240)이 아래에서 도시된다. 압축 데이터 포맷(240)은, 프리픽스(Px) 그리고 데이터x로서 프리픽스 바로 뒤의 데이터의 포맷으로 제공된다. 새로운 압축 데이터 포맷(242)은, 효율성 목적들을 위해 서로 그룹핑되도록 조직화되는 프리픽스 코드들(Px), 데이터(데이터x), 플래그들, 및 패턴들의 상이한 포맷으로 제공된다. 프리픽스 코드는 3-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(246)의 프리픽스 코드 열(244)에 도시되며, 이 빈번한 패턴 인코딩 테이블(246)은, 프리픽스 코드 열(244)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열(248)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(246)의 데이터 사이즈 열(250)에 제공된다. 프리픽스 코드 000은 비압축 패턴을 의미하며, 이 비압축 패턴은 새로운 압축 데이터 포맷(242)에서 32-비트들의 전체 사이즈의 데이터일 것이다. 프리픽스 코드 001은 전부 제로 데이터 블록을 의미하며, 이 전부 제로 데이터 블록은 새로운 압축 데이터 포맷(242)의 데이터에서 0 비트들로서 제공될 수 있다. 3-비트 프리픽스에 대해, 프리픽스 코드들 010-111은 소스 데이터에서 인식되는 다른 특정 패턴들을 인코딩하기 위해 사용될 수 있으며, 이 예에서, 이 다른 특정 패턴들은 각각 0, 4, 8, 12, 16, 및 24 비트들의 패턴들이다.
[0070]
도 13은 32-비트의 빈번한 패턴 압축 데이터 압축 메커니즘(252)의 예를 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(254)의 소스 데이터는 예로 128 바이트들로서 도시된다. 압축 데이터 포맷(256)이 아래에서 도시된다. 압축 데이터 포맷(256)은, 프리픽스(Px) 그리고 데이터x로서 프리픽스 뒤의 데이터의 포맷으로 제공된다. 새로운 압축 데이터 포맷(258)은, 효율성 목적들을 위해 서로 그룹핑되도록 조직화되는 프리픽스 코드들(Px), 데이터(데이터x), 플래그들, 및 패턴들의 상이한 포맷으로 제공된다. 프리픽스 코드는 3-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(262)의 프리픽스 코드 열(260)에 도시되며, 이 빈번한 패턴 인코딩 테이블(262)은, 프리픽스 코드 열(260)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열(264)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(262)의 데이터 사이즈 열(266)에 제공된다. 프리픽스 코드 000은 비압축 패턴을 의미하며, 이 비압축 패턴은 새로운 압축 데이터 포맷(258)에서 32-비트들의 전체 사이즈의 데이터일 것이다. 프리픽스 코드 001은 전부 제로 데이터 블록을 의미하며, 이 전부 제로 데이터 블록은 새로운 압축 데이터 포맷(258)의 데이터에서 0 비트들로서 제공될 수 있다. 프리픽스 코드 010은 패턴 0xFFFFFFFF를 의미하며, 이 패턴 0xFFFFFFFF는 특정 패턴이며, 따라서 새로운 압축 데이터 포맷(258)에 따른 압축 데이터에서 0-비트 데이터 사이즈를 요구한다. 빈번한 패턴 인코딩 테이블(262)에서는, 프리픽스 코드들 011-111에 대한 다른 패턴들이 도시된다. 새로운 압축 데이터 포맷(258)의 플래그들 필드는, 프리픽스 코드들 001-111에 대한 패턴들이 압축 데이터의 데이터 부분들(즉, 데이터x)에 존재하는지를 표시한다. 패턴이 압축 데이터로 존재하면, 패턴들은 새로운 압축 데이터 포맷(258)으로 저장되며, 이후, 비압축 데이터를 재생성하기 위해 이 새로운 압축 데이터 포맷(258)이 참고될 수 있다. 데이터 필드들은 새로운 압축 데이터 포맷(258)의 데이터 필드와 연관된 프리픽스 코드에 따른 압축 데이터를 포함한다.
[0071]
도 14는 64-비트의 빈번한 패턴 압축 데이터 압축 메커니즘(268)의 다른 예를 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(270)의 소스 데이터는 예로 128 바이트들로서 도시된다. 새로운 압축 데이터 포맷(272)은, 효율성 목적들을 위해 서로 그룹핑되도록 조직화되는 프리픽스 코드들(Px), 데이터(데이터x), 플래그들, 및 패턴들의 상이한 포맷으로 제공된다. 프리픽스 코드는 4-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(278)의 프리픽스 코드 열들(274, 276)에 도시되며, 이 빈번한 패턴 인코딩 테이블(278)은, 프리픽스 코드 열들(274, 276)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열들(280, 282)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(278)의 데이터 사이즈 열들(284, 286)에 제공된다. 프리픽스 코드 0000은 전부 제로 데이터 블록을 의미하며, 이 전부 제로 데이터 블록은 새로운 압축 데이터 포맷(272)의 데이터에서 0 비트들로서 제공될 수 있다. 빈번한 패턴 인코딩 테이블(278)에서는, 프리픽스 코드들 0001-1111에 대한 다른 패턴들이 도시되며, 이 다른 패턴들은 빈번히 발생하는 ASCII 패턴들에 대한 ASCII 패턴들을 포함한다. 새로운 압축 데이터 포맷(272)의 플래그들 필드는, 프리픽스 코드들 0001-1111에 대한 패턴들이 압축 데이터의 데이터 부분들(즉, 데이터x)에 존재하는지를 표시한다. 패턴이 압축 데이터로 존재하면, 패턴들은 새로운 압축 데이터 포맷(272)으로 저장되며, 이후, 비압축 데이터를 재생성하기 위해 이 새로운 압축 데이터 포맷(272)이 참고될 수 있다. 데이터 필드들은 새로운 압축 데이터 포맷(272)의 데이터 필드와 연관된 프리픽스 코드에 따른 압축 데이터를 포함한다.
[0072]
도 15는 64-비트의 빈번한 패턴 압축 데이터 압축 메커니즘(288)의 다른 예를 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(290)의 소스 데이터는 예로 128 바이트들로서 도시된다. 새로운 압축 데이터 포맷(292)은, 효율성 목적들을 위해 서로 그룹핑되도록 조직화되는 프리픽스 코드들(Px), 데이터(데이터x), 플래그들, 및 패턴들의 상이한 포맷으로 제공된다. 프리픽스 코드는 4-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(298)의 프리픽스 코드 열들(294, 296)에 도시되며, 이 빈번한 패턴 인코딩 테이블(298)은, 프리픽스 코드 열들(294, 296)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열들(300, 302)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(298)의 데이터 사이즈 열들(304, 306)에 제공된다. 프리픽스 코드 0000은 전부 제로 데이터 블록을 의미하며, 이 전부 제로 데이터 블록은 새로운 압축 데이터 포맷(292)의 데이터에서 0 비트들로서 제공될 수 있다. 빈번한 패턴 인코딩 테이블(298)에서는, 프리픽스 코드들 0001-1111에 대한 다른 패턴들이 도시되며, 이 다른 패턴들은 고정된 패턴들의 조합들을 포함할 수 있다. 새로운 압축 데이터 포맷(292)의 플래그들 필드는, 프리픽스 코드들 0001-1111에 대한 패턴들이 압축 데이터의 데이터 부분들(즉, 데이터x)에 존재하는지를 표시한다. 패턴이 압축 데이터로 존재하면, 패턴들은 새로운 압축 데이터 포맷(292)으로 저장되며, 이후, 비압축 데이터를 재생성하기 위해 이 새로운 압축 데이터 포맷(292)이 데이터 압축 동안 참고될 수 있다. 프리픽스 코드(P0-P31)는 패턴들에 링크될 수 있으며, 이 패턴들은, 전체 길이 데이터를 비압축 포맷으로 재생성하기 위해, 대응하는 데이터(데이터x)와 함께 사용된다. 데이터 필드들은 새로운 압축 데이터 포맷(292)의 데이터 필드와 연관된 프리픽스 코드에 따른 압축 데이터를 포함한다.
[0073]
도 15의 빈번한 패턴 압축 데이터 압축 메커니즘(288)에 사용될 수 있는 고정된 패턴들의 예들은 도 16의 테이블(308)에 도시되며, 여기서 고정된 패턴들은, 길이 열(312)에서의 그것의 길이 및 패턴 정의 열(314)에서의 패턴의 정의로, 패턴 열(310)에 제공된다. 플래그 정의 테이블(316)에서, 플래그들 정의들은, CMC(36)로 하여금, 프리픽스 코드에 링크된 주어진 패턴이 비압축 데이터를 생성하는데 사용되는 정의에 상관되게 허용하는 것으로 도시된다. 플래그 정의 테이블(316)은 플래그들 열(318)에서 주어진 플래그에 대한 비트들, 플래그 값 열(320)에서 주어진 플래그에 대한 비트들의 값, 그리고 플래그 정의 열(322)에서 주어진 플래그에 대한 플래그 정의를 포함한다.
[0074]
도 17은 64-비트의 빈번한 패턴 압축 데이터 압축 메커니즘(324)의 다른 예를 예시한다. 이 점과 관련하여, 압축될 소스 데이터 포맷(326)의 소스 데이터는 예로 128 바이트들로서 도시된다. 새로운 압축 데이터 포맷(328)은, 효율성 목적들을 위해 서로 그룹핑되도록 조직화되는 프리픽스 코드들(Px), 데이터(데이터x), 플래그들, 및 패턴들의 상이한 포맷으로 제공된다. 프리픽스 코드는 4-비트들이다. 프리픽스 코드들은 빈번한 패턴 인코딩 테이블(334)의 프리픽스 코드 열들(330, 332)에 도시되며, 이 빈번한 패턴 인코딩 테이블(334)은, 프리픽스 코드 열들(330, 332)에서의 주어진 프리픽스 코드에 대한 인코딩된 패턴을 인코딩된 패턴 열들(336, 338)에 도시한다. 인코딩된 패턴에 대한 데이터 사이즈는 빈번한 패턴 인코딩 테이블(334)의 데이터 사이즈 열들(340, 342)에 제공된다. 프리픽스 코드 0000은 전부 제로 데이터 블록을 의미하며, 이 전부 제로 데이터 블록은 새로운 압축 데이터 포맷(328)의 데이터에서 0 비트들로서 제공될 수 있다. 프리픽스 코드 1111은, 새로운 압축 데이터 포맷(328)으로 압축되지 않은 데이터 블록을 의미한다. 빈번한 패턴 인코딩 테이블(334)에서는, 프리픽스 코드들 0001-1110에 대한 다른 패턴들이 도시되며, 이 다른 패턴들은, 그곳에 도시된 바와 같이 정의된 패턴들의 조합들을 포함할 수 있다. 새로운 압축 데이터 포맷(328)의 플래그들 필드는, 프리픽스 코드들 0000-1110에 대한 패턴들이 압축 데이터의 데이터 부분들(즉, 데이터x)에 존재하는지를 표시한다. 패턴이 압축 데이터로 존재하면, 패턴들은 새로운 압축 데이터 포맷(328)으로 저장되며, 이후, 비압축 데이터를 재생성하기 위해 이 새로운 압축 데이터 포맷(328)이 참고될 수 있다. 새로운 압축 데이터 포맷(328)은 패턴들 0-5만을 포함하는 것으로서 도시되는데, 그 이유는 이들이, 이 예에서 소스 데이터에 존재하는 프리픽스 코드들 0000-1110에서 설명되는 유일한 패턴들이었기 때문이다. 데이터 필드들은 새로운 압축 데이터 포맷(328)의 데이터 필드와 연관된 프리픽스 코드에 따른 압축 데이터를 포함한다.
[0075]
본원에서 개시된 양상들에 따른 CPU-기반 시스템의 CMC들에 의한 백-투-백 읽기 동작들을 사용하여 메모리 대역폭 압축을 제공하는 것은, 임의의 프로세서-기반 디바이스에 제공되거나 또는 임의의 프로세서-기반 디바이스에 통합될 수 있다. 예들은, 셋톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 고정 위치 데이터 유닛, 모바일 위치 데이터 유닛, 모바일폰, 셀룰러 폰, 컴퓨터, 휴대용 컴퓨터, 데스크톱 컴퓨터, PDA(personal digital assistant), 모니터, 컴퓨터 모니터, 텔레비전, 튜너, 라디오, 위성 라디오, 뮤직 플레이어, 디지털 뮤직 플레이어, 휴대용 뮤직 플레이어, 디지털 비디오 플레이어, 비디오 플레이어, DVD(digital video disc) 플레이어, 및 휴대용 디지털 비디오 플레이어(이들에 제한되지 않음)를 포함한다.
[0076]
이 점과 관련하여, 도 18은 도 2의 CMC(36)와 함께 도 1의 SoC(10)를 사용할 수 있는 프로세서-기반 시스템(344)의 예를 예시한다. 이 예에서, 프로세서-기반 시스템(344)은 하나 또는 그 초과의 CPU들(346)을 포함하며, 이 하나 또는 그 초과의 CPU들(346) 각각은 하나 또는 그 초과의 프로세서들(348)을 포함한다. CPU(들)(346)는 일시적으로 저장된 데이터로의 신속한 액세스를 위해 프로세서(들)(348)에 커플링된 캐시 메모리(350)를 가질 수 있다. CPU(들)(346)는 시스템 버스(352)에 커플링되며, 프로세서-기반 시스템(344)에 포함된 디바이스들을 상호 커플링시킬 수 있다. 잘 알려진 바와 같이, CPU(들)(346)는 시스템 버스(352)를 통해 어드레스, 제어, 및 데이터 정보를 교환함으로써 이들 다른 디바이스들과 통신한다. 예컨대, CPU(들)(346)는 슬래이브 디바이스의 예로서 메모리 제어기(354)에 버스 트랜잭션 요청들을 통신할 수 있다. 도 18에는 예시되지 않았지만, 다수의 시스템 버스들(352)이 제공될 수 있다.
[0077]
다른 디바이스들이 시스템 버스(352)에 연결될 수 있다. 도 18에서 예시된 바와 같이, 이들 디바이스들은 예들로서 메모리 시스템(356), 하나 또는 그 초과의 입력 디바이스들(358), 하나 또는 그 초과의 출력 디바이스들(360), 하나 또는 그 초과의 네트워크 인터페이스 디바이스들(362), 및 하나 또는 그 초과의 디스플레이 제어기들(364)을 포함할 수 있다. 입력 디바이스(들)(358)는 입력 키들, 스위치들, 음성 프로세서들 등(그러나, 이들에 제한되지 않음)을 포함하는 임의의 타입의 입력 디바이스를 포함할 수 있다. 출력 디바이스(들)(360)는 오디오, 비디오, 다른 시각적 표시자들 등(그러나, 이들에 제한되지 않음)을 포함하는 임의의 타입의 출력 디바이스를 포함할 수 있다. 네트워크 인터페이스 디바이스(들)(362)는 네트워크(366)로의, 그리고 네트워크(366)로부터의 데이터의 교환을 허용하도록 구성된 임의의 디바이스들일 수 있다. 네트워크(366)는 유선 또는 무선 네트워크, 사설 또는 공중 네트워크, LAN(local area network), 와이드 로컬 영역 네트워크, 무선 로컬 영역 네트워크, BT(BLUETOOTH) 및 인터넷(그러나, 이들에 제한되지 않음)을 포함하는 임의의 타입의 네트워크일 수 있다. 네트워크 인터페이스 디바이스(들)(362)는 원하는 임의의 타입의 통신 프로토콜을 지원하도록 구성될 수 있다. 메모리 시스템(356)은 하나 또는 그 초과의 메모리 유닛들(368(0)-368(N))을 포함할 수 있다.
[0078]
CPU(들)(346)는 또한, 하나 또는 그 초과의 디스플레이들(370)에 전송되는 정보를 제어하기 위해 시스템 버스(352)를 통해 디스플레이 제어기(들)(364)에 액세싱하도록 구성될 수 있다. 디스플레이 제어기(들)(364)는 하나 또는 그 초과의 비디오 프로세서들(372)을 통해 디스플레이될 정보를 디스플레이(들)(370)에 전송하고, 이 하나 또는 그 초과의 비디오 프로세서들(372)은 디스플레이될 정보를 디스플레이(들)(370)에 적절한 포맷으로 프로세싱한다. 디스플레이(들)(370)는 CRT(cathode ray tube), LCD(liquid crystal display), LED(light emitting diode) 디스플레이, 플라즈마 디스플레이 등(그러나, 이들에 제한되지 않음)을 포함하는 임의의 타입의 디스플레이를 포함할 수 있다.
[0079]
기술분야의 당업자들은 추가로, 본원에 개시된 양상들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘들이 전자 하드웨어, 메모리 또는 다른 컴퓨터-판독가능 매체에 저장되고 프로세서 또는 다른 프로세싱 디바이스에 의해 실행되는 명령들, 또는 이 둘의 조합들로서 구현될 수 있다는 것을 인식할 것이다. 본원에서 설명된 디바이스들은 예들로서 임의의 회로, 하드웨어 컴포넌트, IC(integrated circuit), 또는 IC 칩에서 사용될 수 있다. 본원에서 개시된 메모리는 임의의 타입 및 사이즈의 메모리일 수 있으며, 원하는 임의의 타입의 정보를 저장하도록 구성될 수 있다. 이러한 상호교환성을 명확하게 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 일반적으로 그들의 기능성 면에서 위에서 설명되었다. 그러한 기능성이 어떻게 구현되는지는 특정한 애플리케이션, 설계 선택들, 및/또는 전체 시스템에 부과된 설계 제약들에 따라 좌우된다. 당업자들은 설명된 기능성을 각각의 특정 애플리케이션에 대해 다양한 방식들로 구현할 수 있지만, 그러한 구현 결정들이 본 개시내용의 범위를 벗어나게 하는 것으로 해석되어서는 안된다.
[0080]
본원에서 개시된 양상들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 및 회로들은 프로세서, DSP(Digital Signal Processor), ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array) 또는 다른 프로그래머블 논리 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본원에서 설명된 기능들을 수행하도록 설계된 이들의 임의의 조합으로 구현되거나 또는 수행될 수 있다. 프로세서는 마이크로프로세서일 수 있지만, 대안적으로, 프로세서는 임의의 통상적인 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수 있다. 프로세서는 또한 컴퓨팅 디바이스들의 조합, 예컨대, DSP와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 연결된 하나 또는 그 초과의 마이크로프로세서들, 또는 임의의 다른 그러한 구성으로서 구현될 수 있다.
[0081]
본원에서 개시된 양상들은 하드웨어로 그리고 하드웨어에 저장되는 명령들로 구현될 수 있고, 예컨대, RAM(Random Access Memory), 플래시 메모리, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), EEPROM(Electrically Erasable Programmable ROM), 레지스터들, 하드 디스크, 탈착가능 디스크, CD-ROM, 또는 기술분야에서 알려진 임의의 다른 형태의 컴퓨터 판독가능 매체에 상주할 수 있다. 예시적 저장 매체가 프로세서에 커플링되어, 이 프로세서가 저장 매체로부터 정보를 읽고 정보를 저장 매체에 쓸 수 있다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC에 상주할 수 있다. ASIC는 원격 스테이션에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 원격 스테이션, 기지국, 또는 서버에서 이산 컴포넌트들로서 상주할 수 있다.
[0082]
또한, 본원에서 예시적 양상들 중 임의의 양상에서 설명된 동작 단계들이 예들 및 논의를 제공하기 위해 설명된다는 것이 주목된다. 설명된 동작들은 예시된 시퀀스들 이외의 많은 상이한 시퀀스들로 수행될 수 있다. 또한, 단일 동작 단계에서 설명된 동작들은 실제로, 다수의 상이한 단계들에서 수행될 수 있다. 부가적으로, 예시적 양상들에서 논의된 하나 또는 그 초과의 동작 단계들은 결합될 수 있다. 기술분야의 당업자에게 쉽게 명백할 바와 같이, 흐름도 다이어그램들에서 예시된 동작 단계들이 많은 상이한 수정들의 대상일 수 있다는 것이 이해되어야 한다. 또한, 기술분야의 당업자들은 정보 및 신호들이 다양한 상이한 기술들 및 기법들 중 임의의 것을 사용하여 표현될 수 있다는 것을 이해할 것이다. 예컨대, 위의 설명 전체에 걸쳐 지칭될 수 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들, 및 칩들은 전압들, 전류들, 전자기파들, 자기 필드들 또는 입자들, 광학 필드들 또는 입자들, 또는 이들의 임의의 조합에 의해 표현될 수 있다.
본 개시내용에 대한 전술한 설명은 기술분야의 임의의 당업자가 본 개시내용을 실시하거나 또는 사용하는 것을 가능하게 하기 위해 제공된다. 본 개시내용에 대한 다양한 수정들은 기술분야의 당업자들에게 쉽게 명백할 것이고, 본 개시내용의 사상 또는 범위로부터 벗어나지 않고, 본원에서 정의된 일반적인 원리들이 다른 변형들에 적용될 수 있다. 따라서, 본 개시내용은 본원에서 설명된 예들 및 설계들로 제한되도록 의도되는 것이 아니라, 본원에서 개시된 원리들 및 신규한 특징들과 일치하는 가장 넓은 범위에 부합할 것이다.
Claims (29)
- CMC(compressed memory controller)로서,
시스템 버스를 통해 시스템 메모리에 액세싱하도록 구성된 메모리 인터페이스를 포함하며;
상기 CMC는,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스를 포함하는 메모리 읽기 요청을 수신하고;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 제 1 메모리 블록을 읽고;
상기 제 1 메모리 블록의 CI(compression indicator)에 기반하여, 상기 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하며; 그리고
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기(back-to-back read)를 수행하며; 그리고
상기 백-투-백 읽기와 동시에:
읽기 메모리 블록이 디맨드 워드(demand word)를 포함하는지의 여부를 결정하며; 그리고
상기 읽기 메모리 블록이 상기 디맨드 워드를 포함한다고 결정하는 것에 대한 응답으로, 상기 읽기 메모리 블록을 리턴(return)하도록
구성되는,
CMC. - 제 1 항에 있어서,
상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하며; 그리고
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 결정하며; 그리고
나머지 하나 또는 그 초과의 압축해제 메모리 블록들을 리턴하기 전에, 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 리턴하도록
추가로 구성되는,
CMC. - 제 1 항에 있어서,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 2 메모리 라인의 물리적 어드레스 및 비압축 쓰기 데이터를 포함하는 메모리 쓰기 요청을 수신하고;
상기 비압축 쓰기 데이터를 압축 쓰기 데이터로 압축하고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하는지의 여부를 결정하고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하지 않는다고 결정하는 것에 대한 응답으로, 상기 압축 쓰기 데이터를 상기 제 2 메모리 라인의 제 1 메모리 블록에 쓰고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과한다고 결정하는 것에 대한 응답으로, 상기 비압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들에 쓰며; 그리고
상기 제 2 메모리 라인의 상기 복수의 메모리 블록들 중 제 1 메모리 블록의 압축 상태를 표시하기 위해, 상기 제 1 메모리 블록의 CI를 셋팅하도록
추가로 구성되는,
CMC. - 제 1 항에 있어서,
상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반하여, 압축비를 추적하도록 구성된 압축 모니터
를 더 포함하는,
CMC. - 제 4 항에 있어서,
상기 압축 모니터는 비-제한적 예들로서 CPU(central processing unit) 단위, 작업량(workload) 단위, VM(virtual-machine) 단위, 컨테이너 단위, 및 QoSID(QoS(Quality-of-Service)-identifier) 단위 중 하나 또는 그 초과로 압축비를 추적하도록 구성되는,
CMC. - 제 4 항에 있어서,
상기 압축 모니터는 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나를 추적하기 위한 하나 또는 그 초과의 카운터들을 포함하는,
CMC. - 제 4 항에 있어서,
상기 메모리 읽기 요청을 수신하는 것에 대한 응답으로, 상기 압축비가 임계 값 미만인지의 여부를 결정하며; 그리고
상기 압축비가 상기 임계 값 미만이라고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들을 읽고;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록의 상기 CI에 기반하여, 상기 제 1 메모리 블록이 상기 압축 데이터를 포함하는지의 여부를 결정하고;
상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하고;
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하며; 그리고
상기 압축해제 메모리 블록을 리턴하며; 그리고
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 복수의 메모리 블록들을 리턴하도록
추가로 구성되며; 그리고
상기 CMC는, 상기 압축비가 상기 임계 값과 동일하거나 또는 이를 초과한다고 결정하는 것에 대한 응답으로, 상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록을 읽도록 구성되는,
CMC. - 제 1 항에 있어서,
IC(integrated circuit)에 집적되는,
CMC. - 제 1 항에 있어서,
셋톱 박스; 엔터테인먼트 유닛; 내비게이션 디바이스; 통신 디바이스; 고정 위치 데이터 유닛; 모바일 위치 데이터 유닛; 모바일폰; 셀룰러 폰; 컴퓨터; 휴대용 컴퓨터; 데스크톱 컴퓨터; PDA(personal digital assistant); 모니터; 컴퓨터 모니터; 텔레비전; 튜너; 라디오; 위성 라디오; 뮤직 플레이어; 디지털 뮤직 플레이어; 휴대용 뮤직 플레이어; 디지털 비디오 플레이어; 비디오 플레이어; DVD(digital video disc) 플레이어; 및 휴대용 디지털 비디오 플레이어로 구성된 그룹으로부터 선택되는 디바이스에 통합되는,
CMC. - CMC(compressed memory controller)로서,
시스템 버스를 통해 시스템 메모리에 액세싱하도록 구성된 메모리 인터페이스를 포함하며;
상기 CMC는,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스, 및 상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중에서 디맨드 워드를 포함하는 메모리 블록을 표시하는 디맨드 워드 표시자를 포함하는 메모리 읽기 요청을 수신하고;
상기 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽고;
상기 메모리 블록의 CI(compression indicator)에 기반하여, 상기 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하며; 그리고
상기 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 메모리 블록을 리턴하는 것과 동시에, 상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하도록
구성되는,
CMC. - 제 10 항에 있어서,
상기 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하고;
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하며; 그리고
나머지 하나 또는 그 초과의 압축해제 메모리 블록들을 리턴하기 전에, 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 리턴하도록
추가로 구성되는,
CMC. - 제 10 항에 있어서,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 2 메모리 라인의 물리적 어드레스 및 비압축 쓰기 데이터를 포함하는 메모리 쓰기 요청을 수신하고;
상기 비압축 쓰기 데이터를 압축 쓰기 데이터로 압축하고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하는지의 여부를 결정하고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하지 않는다고 결정하는 것에 대한 응답으로, 상기 압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록에 쓰고;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과한다고 결정하는 것에 대한 응답으로, 상기 비압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들에 쓰며; 그리고
상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 압축 상태를 표시하기 위해, 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 대응하는 CI를 셋팅하도록
추가로 구성되는,
CMC. - 제 10 항에 있어서,
상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반하여, 압축비를 추적하도록 구성된 압축 모니터
를 더 포함하는,
CMC. - 제 13 항에 있어서,
상기 압축 모니터는 비-제한적 예들로서 CPU(central processing unit) 단위, 작업량(workload) 단위, VM(virtual-machine) 단위, 컨테이너 단위, 및 QoSID(QoS(Quality-of-Service)-identifier) 단위 중 하나 또는 그 초과로 압축비를 추적하도록 구성되는,
CMC. - 제 13 항에 있어서,
상기 압축 모니터는 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나를 추적하기 위한 하나 또는 그 초과의 카운터들을 포함하는,
CMC. - 제 13 항에 있어서,
상기 메모리 읽기 요청을 수신하는 것에 대한 응답으로, 상기 압축비가 임계 값 미만인지의 여부를 결정하며; 그리고
상기 압축비가 상기 임계 값 미만이라고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들을 읽고;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 제 1 메모리 블록의 CI에 기반하여, 상기 제 1 메모리 블록이 상기 압축 데이터를 포함하는지의 여부를 결정하고;
상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하며; 그리고
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하며; 그리고
상기 압축해제 메모리 블록을 리턴하며; 그리고
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 복수의 메모리 블록들을 리턴하도록
추가로 구성되며; 그리고
상기 CMC는, 상기 압축비가 상기 임계 값과 동일하거나 또는 이를 초과한다고 결정하는 것에 대한 응답으로, 상기 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽도록 구성되는,
CMC. - 메모리 대역폭 압축을 제공하기 위한 방법으로서,
시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스를 포함하는 메모리 읽기 요청을 수신하는 단계;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 제 1 메모리 블록을 읽는 단계;
상기 제 1 메모리 블록의 CI(compression indicator)에 기반하여, 상기 제 1 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하는 단계; 및
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하는 단계; 및
상기 백-투-백 읽기와 동시에:
읽기 메모리 블록이 디맨드 워드를 포함하는지의 여부를 결정하는 단계; 및
상기 읽기 메모리 블록이 상기 디맨드 워드를 포함한다고 결정하는 것에 대한 응답으로, 상기 읽기 메모리 블록을 리턴하는 단계
를 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 17 항에 있어서,
상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하는 단계;
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중에서 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하는 단계; 및
나머지 하나 또는 그 초과의 압축해제 메모리 블록들을 리턴하기 전에, 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 리턴하는 단계
를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 17 항에 있어서,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 2 메모리 라인의 물리적 어드레스 및 비압축 쓰기 데이터를 포함하는 메모리 쓰기 요청을 수신하는 단계;
상기 비압축 쓰기 데이터를 압축 쓰기 데이터로 압축하는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하는지의 여부를 결정하는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하지 않는다고 결정하는 것에 대한 응답으로, 상기 압축 쓰기 데이터를 상기 제 2 메모리 라인의 제 1 메모리 블록에 쓰는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과한다고 결정하는 것에 대한 응답으로, 상기 비압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들에 쓰는 단계; 및
상기 제 2 메모리 라인의 상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록의 압축 상태를 표시하기 위해, 상기 제 1 메모리 블록의 CI를 셋팅하는 단계를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 17 항에 있어서,
압축 모니터를 사용하여, 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반하여, 압축비를 추적하는 단계
를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 20 항에 있어서,
상기 압축 모니터는 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나를 추적하기 위한 하나 또는 그 초과의 카운터들을 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 20 항에 있어서,
상기 메모리 읽기 요청을 수신하는 것에 대한 응답으로, 상기 압축비가 임계 값 미만인지의 여부를 결정하는 단계; 및
상기 압축비가 상기 임계 값 미만이라고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들을 읽는 단계;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록의 상기 CI에 기반하여, 상기 제 1 메모리 블록이 상기 압축 데이터를 포함하는지의 여부를 결정하는 단계;
상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하는 단계;
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하는 단계; 및
상기 압축해제 메모리 블록을 리턴하는 단계; 및
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 복수의 메모리 블록들을 리턴하는 단계
를 더 포함하며, 그리고
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록을 읽는 단계는, 상기 압축비가 상기 임계 값과 동일하거나 또는 이를 초과한다고 결정하는 것에 대한 응답으로 이루어지는,
메모리 대역폭 압축을 제공하기 위한 방법. - 메모리 대역폭 압축을 제공하기 위한 방법으로서,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 1 메모리 라인의 물리적 어드레스, 및 상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중에서 디맨드 워드를 포함하는 메모리 블록을 표시하는 디맨드 워드 표시자를 포함하는 메모리 읽기 요청을 수신하는 단계;
상기 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽는 단계;
상기 메모리 블록의 CI(compression indicator)에 기반하여, 상기 메모리 블록이 압축 데이터를 포함하는지의 여부를 결정하는 단계; 및
상기 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 메모리 블록을 리턴하는 것과 동시에, 상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 하나 또는 그 초과의 추가 메모리 블록들의 백-투-백 읽기를 수행하는 단계
를 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 23 항에 있어서,
상기 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하는 단계;
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하는 단계; 및
상기 압축해제 메모리 블록을 리턴하는 단계
를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 23 항에 있어서,
상기 시스템 메모리 내에 복수의 메모리 블록들을 포함하는 제 2 메모리 라인의 물리적 어드레스 및 비압축 쓰기 데이터를 포함하는 메모리 쓰기 요청을 수신하는 단계;
상기 비압축 쓰기 데이터를 압축 쓰기 데이터로 압축하는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하는지의 여부를 결정하는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과하지 않는다고 결정하는 것에 대한 응답으로, 상기 압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록에 쓰는 단계;
상기 압축 쓰기 데이터의 사이즈가 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 사이즈를 초과한다고 결정하는 것에 대한 응답으로, 상기 비압축 쓰기 데이터를 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들에 쓰는 단계; 및
상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 압축 상태를 표시하기 위해, 상기 제 2 메모리 라인의 상기 복수의 메모리 블록들의 각각의 메모리 블록의 CI를 셋팅하는 단계
를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 23 항에 있어서,
압축 모니터를 사용하여, 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나에 기반하여, 압축비를 추적하는 단계
를 더 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 26 항에 있어서,
상기 압축 모니터를 사용하여 상기 압축비를 추적하는 단계는 비-제한적 예들로서 CPU(central processing unit) 단위, 작업량(workload) 단위, VM(virtual-machine) 단위, 컨테이너 단위, 및 QoSID(QoS(Quality-of-Service)-identifier) 단위 중 하나 또는 그 초과로 추적하는 단계를 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 26 항에 있어서,
상기 압축 모니터는 상기 압축 데이터의 읽기들의 횟수, 읽기 동작들의 총 횟수, 상기 압축 데이터의 쓰기들의 횟수, 및 쓰기 동작들의 총 횟수 중 적어도 하나를 추적하기 위한 하나 또는 그 초과의 카운터들을 포함하는,
메모리 대역폭 압축을 제공하기 위한 방법. - 제 26 항에 있어서,
상기 메모리 읽기 요청을 수신하는 것에 대한 응답으로, 상기 압축비가 임계 값 미만인지의 여부를 결정하는 단계; 및
상기 압축비가 상기 임계 값 미만이라고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들을 읽는 단계;
상기 제 1 메모리 라인의 상기 복수의 메모리 블록들 중 제 1 메모리 블록의 CI에 기반하여, 상기 제 1 메모리 블록이 상기 압축 데이터를 포함하는지의 여부를 결정하는 단계;
상기 복수의 메모리 블록들 중 상기 제 1 메모리 블록이 상기 압축 데이터를 포함한다고 결정하는 것에 대한 응답으로:
상기 제 1 메모리 블록의 상기 압축 데이터를 하나 또는 그 초과의 압축해제 메모리 블록들에 압축해제하는 단계; 및
상기 하나 또는 그 초과의 압축해제 메모리 블록들 중 상기 디맨드 워드를 포함하는 압축해제 메모리 블록을 식별하는 단계; 및
상기 압축해제 메모리 블록을 리턴하는 단계; 및
상기 제 1 메모리 블록이 상기 압축 데이터를 포함하지 않는다고 결정하는 것에 대한 응답으로, 상기 복수의 메모리 블록들을 리턴하는 단계
를 더 포함하며, 그리고
상기 디맨드 워드 표시자에 의해 표시된 메모리 블록을 읽는 단계는, 상기 압축비가 상기 임계 값과 동일하거나 또는 이를 초과한다고 결정하는 것에 대한 응답으로 이루어지는,
메모리 대역폭 압축을 제공하기 위한 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562111347P | 2015-02-03 | 2015-02-03 | |
US62/111,347 | 2015-02-03 | ||
US14/844,516 US20160224241A1 (en) | 2015-02-03 | 2015-09-03 | PROVIDING MEMORY BANDWIDTH COMPRESSION USING BACK-TO-BACK READ OPERATIONS BY COMPRESSED MEMORY CONTROLLERS (CMCs) IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM |
US14/844,516 | 2015-09-03 | ||
PCT/US2016/012801 WO2016126376A1 (en) | 2015-02-03 | 2016-01-11 | PROVIDING MEMORY BANDWIDTH COMPRESSION USING BACK-TO-BACK READ OPERATIONS BY COMPRESSED MEMORY CONTROLLERS (CMCs) IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20170115521A true KR20170115521A (ko) | 2017-10-17 |
Family
ID=56553074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177021376A KR20170115521A (ko) | 2015-02-03 | 2016-01-11 | Cpu(central processing unit)-기반 시스템에서 cmc(compressed memory controller)들에 의한 백-투-백 읽기 동작들을 사용하는 메모리 대역폭 압축 제공 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20160224241A1 (ko) |
EP (1) | EP3254200A1 (ko) |
JP (1) | JP2018503924A (ko) |
KR (1) | KR20170115521A (ko) |
CN (1) | CN107111461A (ko) |
WO (1) | WO2016126376A1 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10033411B2 (en) * | 2015-11-20 | 2018-07-24 | Intel Corporation | Adjustable error protection for stored data |
US20180060235A1 (en) * | 2016-08-30 | 2018-03-01 | Intel Corporation | Non-volatile memory compression devices and associated methods and systems |
US10402349B2 (en) * | 2017-02-08 | 2019-09-03 | Arm Limited | Memory controller having data access hint message for specifying the given range of one or more memory addresses |
US11886713B2 (en) | 2019-07-18 | 2024-01-30 | Nec Corporation | Memory control method, memory control device, program |
CN111176583B (zh) * | 2019-12-31 | 2021-03-30 | 北京百度网讯科技有限公司 | 一种数据写入方法、装置和电子设备 |
US11372548B2 (en) * | 2020-05-29 | 2022-06-28 | Nvidia Corporation | Techniques for accessing and utilizing compressed data and its state information |
US11444836B1 (en) * | 2020-06-25 | 2022-09-13 | Juniper Networks, Inc. | Multiple clusters managed by software-defined network (SDN) controller |
US11550762B2 (en) * | 2021-02-24 | 2023-01-10 | Sap Se | Implementation of data access metrics for automated physical database design |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6879266B1 (en) * | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
US6385703B1 (en) * | 1998-12-03 | 2002-05-07 | Intel Corporation | Speculative request pointer advance for fast back-to-back reads |
US7225297B2 (en) * | 2004-05-28 | 2007-05-29 | International Business Machines Corporation | Compressed cache lines incorporating embedded prefetch history data |
US8122216B2 (en) * | 2006-09-06 | 2012-02-21 | International Business Machines Corporation | Systems and methods for masking latency of memory reorganization work in a compressed memory system |
US7523228B2 (en) * | 2006-09-18 | 2009-04-21 | International Business Machines Corporation | Method for performing a direct memory access block move in a direct memory access device |
US8037251B2 (en) * | 2008-03-04 | 2011-10-11 | International Business Machines Corporation | Memory compression implementation using non-volatile memory in a multi-node server system with directly attached processor memory |
US9063663B2 (en) * | 2010-09-21 | 2015-06-23 | Hitachi, Ltd. | Semiconductor storage device and data control method thereof |
DE102011008260A1 (de) * | 2011-01-11 | 2012-07-12 | Linde Aktiengesellschaft | Gasinnendruckverfahren zur Herstellung von Kunststoffteilen |
US8806108B2 (en) * | 2011-06-07 | 2014-08-12 | Hitachi, Ltd. | Semiconductor storage apparatus and method of controlling semiconductor storage apparatus |
CN104303162B (zh) * | 2012-01-12 | 2018-03-27 | 桑迪士克科技有限责任公司 | 用于管理缓存接纳的系统和方法 |
CN103106925B (zh) * | 2013-01-04 | 2016-07-06 | 苏州兆芯半导体科技有限公司 | 串联rom单元及其读取方法 |
WO2014141411A1 (ja) * | 2013-03-13 | 2014-09-18 | 株式会社日立製作所 | ストレージシステムおよびストレージシステム制御方法 |
US9582426B2 (en) * | 2013-08-20 | 2017-02-28 | International Business Machines Corporation | Hardware managed compressed cache |
TWI493446B (zh) * | 2013-09-23 | 2015-07-21 | Mstar Semiconductor Inc | 記憶體管理方法及記憶體管理裝置 |
US9124295B2 (en) * | 2013-11-14 | 2015-09-01 | Nicolas Thomas Mathieu Dupont | System and method for data compression and transmission |
CN104699219B (zh) * | 2013-12-10 | 2020-06-23 | 联想(北京)有限公司 | 一种电子设备及信息处理方法 |
US9391646B2 (en) * | 2014-03-25 | 2016-07-12 | Samsung Electronics Co., Ltd. | Joint source-channel encoding and decoding for compressed and uncompressed data |
CN103927269B (zh) * | 2014-04-23 | 2016-11-16 | 东南大学 | 一种基于块匹配的可重构配置信息缓存系统及压缩方法 |
-
2015
- 2015-09-03 US US14/844,516 patent/US20160224241A1/en not_active Abandoned
-
2016
- 2016-01-11 CN CN201680006158.7A patent/CN107111461A/zh active Pending
- 2016-01-11 KR KR1020177021376A patent/KR20170115521A/ko unknown
- 2016-01-11 JP JP2017540588A patent/JP2018503924A/ja active Pending
- 2016-01-11 WO PCT/US2016/012801 patent/WO2016126376A1/en active Application Filing
- 2016-01-11 EP EP16701231.9A patent/EP3254200A1/en not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
JP2018503924A (ja) | 2018-02-08 |
US20160224241A1 (en) | 2016-08-04 |
EP3254200A1 (en) | 2017-12-13 |
WO2016126376A1 (en) | 2016-08-11 |
CN107111461A (zh) | 2017-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10503661B2 (en) | Providing memory bandwidth compression using compressed memory controllers (CMCs) in a central processing unit (CPU)-based system | |
US10838862B2 (en) | Memory controllers employing memory capacity compression, and related processor-based systems and methods | |
US9740621B2 (en) | Memory controllers employing memory capacity and/or bandwidth compression with next read address prefetching, and related processor-based systems and methods | |
KR20170115521A (ko) | Cpu(central processing unit)-기반 시스템에서 cmc(compressed memory controller)들에 의한 백-투-백 읽기 동작들을 사용하는 메모리 대역폭 압축 제공 | |
US10146693B2 (en) | Providing memory bandwidth compression using multiple last-level cache (LLC) lines in a central processing unit (CPU)-based system | |
US10236917B2 (en) | Providing memory bandwidth compression in chipkill-correct memory architectures | |
US10176090B2 (en) | Providing memory bandwidth compression using adaptive compression in central processing unit (CPU)-based systems | |
EP3430519A1 (en) | Priority-based access of compressed memory lines in memory in a processor-based system | |
US10152261B2 (en) | Providing memory bandwidth compression using compression indicator (CI) hint directories in a central processing unit (CPU)-based system |