KR20170053630A - 압축 알고리즘들을 위한 캐시 뱅크 스프레딩 - Google Patents
압축 알고리즘들을 위한 캐시 뱅크 스프레딩 Download PDFInfo
- Publication number
- KR20170053630A KR20170053630A KR1020177006694A KR20177006694A KR20170053630A KR 20170053630 A KR20170053630 A KR 20170053630A KR 1020177006694 A KR1020177006694 A KR 1020177006694A KR 20177006694 A KR20177006694 A KR 20177006694A KR 20170053630 A KR20170053630 A KR 20170053630A
- Authority
- KR
- South Korea
- Prior art keywords
- cache
- bank
- cache memory
- access request
- compressed data
- Prior art date
Links
Images
Classifications
-
- 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
-
- 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/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/0893—Caches characterised by their organisation or structure
-
- 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]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0851—Cache with interleaved addressing
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
양태들은 캐시 뱅크 스프레딩을 이용하여 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 구현하는 컴퓨팅 디바이스들, 시스템들, 및 방법들을 포함한다. 일 양태에서, 캐시 뱅크 스프레딩은 캐시 메모리 액세스의 압축된 데이터가 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것을 포함할 수도 있다. 압축된 데이터가 단일 캐시 뱅크에 들어가기에 맞다고 결정하는 것에 응답하여, 데이터 압축 동안 클리어될 수도 있는 캐시 메모리 액세스 요청의 캐시 메모리에 대해 물리적 어드레스의 뱅크 선택 비트들을 대체/회복하기 위해 캐시 뱅크 스프레딩 값이 계산될 수도 있다. 캐시 메모리의 물리적 공간에서의 캐시 뱅크 스프레딩 어드레스는 캐시 메모리 액세스 요청의 물리적 어드레스 플러스 회복된 뱅크 선택 비트들을 포함할 수도 있다. 캐시 뱅크 스프레딩 어드레스는 캐시 메모리 디바이스로부터 압축된 데이터를 판독하거나 캐시 메모리 디바이스에 압축된 데이터를 기입하기 위해 사용될 수도 있다.
Description
무손실 압축들은 압축되는 구성가능한 (configurable) 사이즈들의 데이터 세그먼트들을 이용한다. 이 압축된 데이터는 그 다음에, 그것이 메모리로 다시 기입될 때까지 캐시들에 저장된다. 하지만, 데이터를 압축함으로써, 물리적 어드레스 공간에서의 사용되지 않는 홀들이 형성된다. 압축된 데이터가 어떻게 물리적 어드레스 공간에 저장되는지에 따라서, 캐시들과 같은 시스템 레벨 자원들의 고르지 않은 사용이 존재할 수 있다. 캐시들은 캐시 라인 입도 (granularity) 로 데이터를 저장하고, 데이터를 뱅크들 내로 라우팅하기 위해 가장 자주 사용되는 비트들을 이용한다. 압축된 블록 사이즈들과 캐시 라인 사이즈 사이의 미스매치 (mismatch) 는 캐시 자원 (예컨대, 뱅크들) 의 불규칙적인 사용을 초래할 수 있다. 이러한 불규칙적인 사용은 캐시 인덱싱에서 사용되는 물리적 어드레스에서 사용되지 않은 비트들을 클리어하는 압축된 데이터에 의해 형성된다. 예를 들어, 이러한 경우는 256 바이트 블록을 128 바이트들로 압축할 때 발생하고, 이는 물리적 어드레스에서 압축된 데이터에 대한 어드레스 비트들을 클리어 (clear) 할 것이다. 하위 어드레스 비트들은 (그들이 자주 변화하기 때문에) 밸런싱된 액세스들을 형성하기 위해 캐시 선택 결정들을 위해 통상적으로 사용된다. 하위 어드레스 비트들의 비트 W 가 캐시 뱅크를 선택하기 위해 일반적으로 사용될 경우에, 압축된 데이터는, 비트 W 가 클리어될 때 값은 항상 동일할 것이기 때문에 (즉, 압축 후에 비트 W = 0), 뱅크들/캐시의 절반 (half) 에 항상 위치될 것이다. 유사하게, 비트 W 및 비트 Y 와 같은 2 비트들이 캐시 뱅크를 선택하기 위해 정상적으로 사용될 경우에, 압축된 데이터는, 비트 Y 의 값이 변화할 수도 있는 동안 (즉, 압축 후에 비트 Y 는 0 또는 1 과 동일할 것이다), 비트 W 의 값은 정적으로 유지될 것이기 때문에 (즉, 비트 W = 0), 뱅크들/캐시의 절반에 항상 위치될 것이고, 따라서, 뱅크 선택 비트들 W 및 Y 는 함께, 4 개의 뱅크 선택 옵션들 중 오직 2 개에 대해 결합할 수도 있다 (즉, 비트들 Y 및 W = 00, 01, 10, 또는 11 대신에 00 또는 10).
다양한 양태들의 방법들 및 장치들은 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하기 위한 방법들 및 회로들을 제공하고, 이는 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것, 및 캐시 뱅크 스프레딩 어드레스에서 캐시 메모리 액세스 요청을 실행하는 것을 포함할 수도 있다.
일 양태의 방법은, 압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크의 캐시 라인 상에 들어가기에 맞는지 (fit) 여부를 결정하는 것을 더 포함할 수도 있고, 여기서, 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것은, 압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 수행될 수도 있다. 일 양태에서, 캐시 메모리 액세스 요청의 압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것은, 압축된 데이터의 압축비가 2:1 압축비 이상인지 여부를 결정하는 것을 포함할 수도 있다. 일 양태에서, 캐시 메모리 액세스 요청의 압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것은, 압축된 데이터의 사이즈가 캐시 메모리 디바이스의 캐시 라인의 사이즈 이하인지 여부를 결정하는 것을 포함할 수도 있다.
일 양태에서, 압축된 데이터가 캐시 메모리 디바이스의 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것은, 캐시 뱅크 스프레딩 함수 (cache bank spreading function) 에 대한 입력들을 선택하는 것, 캐시 뱅크 스프레딩 함수를 실행하는 것, 캐시 뱅크 스프레딩 값을 리턴하는 것, 및 하나 이상의 뱅크 선택 비트들을 캐시 뱅크 스프레딩 값으로 대체하는 것을 포함할 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 것은, 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들 (operands) 로서 캐시 메모리 액세스 요청의 캐시 메모리 디바이스의 물리적 어드레스의 보존된 비트들의 복수의 최하위 비트들 (least significant bits) 을 선택하는 것을 포함할 수도 있고, 캐시 뱅크 스프레딩 함수를 실행하는 것은, 오퍼랜드들과의 배타적 OR 오퍼레이터 (exclusive OR operator) 를 이용하는 것을 포함할 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 함수는, 논리 연산, 산술 연산 중 하나를 이용하는 것, 랜덤 값 (random value) 을 선택하는 것, 테이블로부터 캐시 메모리 액세스 요청의 물리적 어드레스와 연관된 캐시 뱅크 스프레딩 어드레스를 선택하는 것을 포함할 수도 있다.
일 양태에서, 캐시 메모리 디바이스에서 캐시 뱅크 스프레딩 어드레스에서 압축된 데이터에 대해 캐시 메모리 액세스 요청을 실행하는 것은, 캐시 메모리 액세스 요청의 캐시 메모리 디바이스의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 캐시 뱅크 스프레딩 어드레스의 하나 이상의 회복된 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크에 압축된 데이터를 기입하는 것, 및 캐시 메모리 액세스 요청의 캐시 메모리 디바이스의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 캐시 뱅크 스프레딩 어드레스의 하나 이상의 회복된 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크로부터 압축된 데이터를 판독하는 것을 포함할 수도 있다.
일 양태는, 서로 통신가능하게 연결된 (communicatively connected) 프로세서, 뱅크 스프레딩 함수 컴포넌트, 캐시 메모리 제어기, 및 캐시 메모리를 갖는 컴퓨팅 디바이스를 포함하고, 여기서, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 캐시 메모리 제어기는 상술된 양태 방법들의 하나 이상의 동작들을 수행하도록 구성된다.
일 양태는, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상술된 양태 방법들의 하나 이상의 동작들을 수행하게 하도록 구성된 프로세서-실행가능한 명령들을 저장한 비일시적 (non-transitory) 프로세서-판독가능 매체를 포함한다.
일 양태는, 전술된 양태의 방법들 중 하나 이상의 방법들의 기능들을 수행하기 위한 수단을 갖는 컴퓨팅 디바이스를 포함한다.
본원에 포함되고 본 명세서의 일부분을 구성하는 첨부 도면들은 본 발명의 예시적인 양태들을 예시하고, 상기에서 주어진 일반적인 설명 및 하기에서 주어진 상세한 설명과 함께 본 발명의 특징들을 설명하는 역할을 한다.
도 1 은 일 양태를 구현하기에 적합한 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 2 는 일 양태를 구현하기에 적합한 예시적인 멀티-코어 프로세서를 예시하는 컴포넌트 블록도이다.
도 3a 및 도 3b 는 일 양태에 따라 캐시 뱅크 스프레딩을 구현하도록 구성된 시스템 온 칩 (SoC) 의 예들을 나타내는 컴포넌트 블록도이다.
도 4 는 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 공간으로 구성된 캐시 라인을 포함하는 캐시 메모리의 부분의 예시이다.
도 5 는 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 6 은 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 7 은 일 양태에 따라 압축된 또는 압축되지 않은 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 8 은 일 양태에 따라 압축된 데이터에 대한 캐시 메모리 액세스 요청의 물리적 어드레스와 캐시에서의 연관된 뱅크 스프레딩 물리적 어드레스 사이의 관계를 나타내는 예시적인 테이블이다.
도 9 는 압축된 데이터에 대한 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 10 은 압축된 데이터에 대한 기입 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 11 은 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 12 는 다양한 양태들과 함께 사용하기에 적합한 예시적인 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 13 은 다양한 양태들과 함께 사용하기에 적합한 예시적인 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 14 는 다양한 양태들과의 사용에 적합한 예시적인 서버 디바이스를 나타내는 컴포넌트 블록도이다.
도 1 은 일 양태를 구현하기에 적합한 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 2 는 일 양태를 구현하기에 적합한 예시적인 멀티-코어 프로세서를 예시하는 컴포넌트 블록도이다.
도 3a 및 도 3b 는 일 양태에 따라 캐시 뱅크 스프레딩을 구현하도록 구성된 시스템 온 칩 (SoC) 의 예들을 나타내는 컴포넌트 블록도이다.
도 4 는 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 공간으로 구성된 캐시 라인을 포함하는 캐시 메모리의 부분의 예시이다.
도 5 는 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 6 은 일 양태에 따라 압축된 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 7 은 일 양태에 따라 압축된 또는 압축되지 않은 데이터를 저장하는 다중 캐시 뱅크들 상의 캐시 라인들을 포함하는 캐시 메모리의 부분의 예시이다.
도 8 은 일 양태에 따라 압축된 데이터에 대한 캐시 메모리 액세스 요청의 물리적 어드레스와 캐시에서의 연관된 뱅크 스프레딩 물리적 어드레스 사이의 관계를 나타내는 예시적인 테이블이다.
도 9 는 압축된 데이터에 대한 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 10 은 압축된 데이터에 대한 기입 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 11 은 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 12 는 다양한 양태들과 함께 사용하기에 적합한 예시적인 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 13 은 다양한 양태들과 함께 사용하기에 적합한 예시적인 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 14 는 다양한 양태들과의 사용에 적합한 예시적인 서버 디바이스를 나타내는 컴포넌트 블록도이다.
다양한 양태들이 첨부 도면들을 참조하여 상세히 설명될 것이다. 가능한 경우에는 언제든지, 동일한 참조 부호들이 동일하거나 유사한 부분들을 지칭하기 위해 도면들 전체에 걸쳐 사용될 것이다. 특정 예들 및 구현들에 대해 이루어진 참조들은 예시적인 목적을 위한 것이고, 본 발명 또는 청구항들의 범위를 제한하도록 의도되지는 않는다.
용어들 "컴퓨팅 디바이스" 및 "모바일 디바이스" 는 셀룰러 전화기들, 스마트폰들, 퍼스널 또는 모바일 멀티-미디어 플레이어들, 개인 정보 단말기 (PDA) 들, 랩톱 컴퓨터들, 태블릿 컴퓨터들, 스마트북들, 울트라북들, 팜-톱 컴퓨터들, 무선 전자 메일 수신기들, 멀티미디어 인터넷 인에이블드 셀룰러 전화기들, 무선 게이밍 제어기들, 및 메모리와 멀티-코어 프로그래밍가능 프로세서를 포함하는 유사한 퍼스널 전자 디바이스들 중 어느 하나 또는 전부를 지칭하도록 본원에서 상호교환적으로 사용된다. 다양한 양태들은 모바일 컴퓨팅 디바이스들, 예컨대 제한된 리소스들을 갖는 스마트폰들에 특히 유용하지만, 이 양태들은 일반적으로, 프로세서들의 전력 소비를 감소시켜 모바일 컴퓨팅 디바이스의 배터리-작동 시간을 연장시킬 수 있는 제한된 전력 수요예측 (budget) 및 복수의 메모리 디바이스들을 구현하는 임의의 전자 디바이스에 유용하다.
용어 "시스템-온"칩" (SoC) 은 통상적으로 상호접속된 전자 회로들의 세트를 지칭하도록 본원에 사용되지만, 전적으로 그렇지는 않고 하드웨어 코어, 메모리, 및 통신 인터페이스를 포함한다. 하드웨어 코어는 다양한 상이한 타입들의 프로세서들, 예컨대 범용 프로세서, 중앙 처리 유닛 (CPU), 디지털 신호 프로세서 (DSP), 그래픽 프로세싱 유닛 (GPU), 가속 처리 유닛 (APU), 보조 프로세서, 단일-코어 프로세서, 및 멀티-코어 프로세서를 포함할 수도 있다. 하드웨어 코어는 또한, 다른 하드웨어 및 하드웨어 조합들, 예컨대 필드 프로그래밍가능 게이트 어레이 (FPGA), 주문형 집적 회로 (ASCI), 다른 프로그래밍가능 로직 디바이스, 이산 게이트 로직, 트랜지스터 로직, 성능 모니터링 하드웨어, 감시 하드웨어 (watchdog hardware), 및 시간 레퍼런스들을 포함할 수도 있다. 집적 회로들은, 집적 회로의 컴포넌트들이 반도체 재료, 예컨대 실리콘의 단일 피스 상에 있도록 구성될 수도 있다.
일 양태에서, 데이터가 압축될 때 캐시 라인의 사이즈와 압축된 데이터의 블록의 사이즈에서의 미스매치들에 의해 야기되는 물리적 어드레스 공간에서 압축된 데이터를 저장하기 위한 캐시 자원의 고르지 못한 사용을 감소시키기 위해서 캐시 뱅크 스프레딩이 구현될 수도 있다. 데이터 블록의 감소된 사이즈는 클리어된 비트들에 의해 어드레싱되는 캐시의 부분들을 이용할 필요가 없기 때문에 클리어되는 압축된 데이터를 저장하기 위한 어드레스의 비트들을 대체하기 위해 캐시에서 압축된 데이터 블록을 저장하기 위한 어드레스의 비트들에 산술 또는 연산 함수가 적용될 수도 있다. 일 양태에서, 압축된 데이터에 대해 보다 많은 캐시 뱅크들의 사용을 구현하기 위해서, 다른 캐시 뱅크들을 명시하는 어드레스의 부분들이, 데이터 압축 동안 보존되는 어드레스의 비트들에 적용되는 산술 또는 연산 함수를 통해 재형성 또는 회복될 수도 있다. 다르게 말하면, 어드레스 비트들에 대해 산술 연산을 사용함으로써, 캐시 뱅크를 명시하는 비트 (즉, 1 또는 0) 가 어드레스 내로 추가되어 데이터 압축에 의해 클리어된 비트를 대체한다. 적어도 부분적으로 캐시 뱅크들을 결정하기 위해서 사용되는 어드레스의 부분을 압축 알고리즘들이 클리어할 때, 어드레스의 클리어된 부분에서 뱅크 선택 비트를 형성하기 위해 보존된 어드레스 비트들 중 2 개 이상에 대해 산술 연산이 적용될 수도 있다.
예를 들어, 256 바이트들의 압축되지 않은 데이터 블록이 데이터 압축을 통해 128 바이트들 이하로 사이즈가 감소될 때, 압축된 데이터 블록은 압축되지 않은 데이터가 필요로 할 캐시 공간의 오직 절반만 필요로 한다. 동일한 예에서, 캐시 메모리는 128 바이트 캐시 라인들에서 256 바이트 데이터 블록들을 저장할 수도 있다. 이 예에서, 2 개의 128 바이트 캐시 라인들은 별개의 캐시 뱅크들 사이에서 나눠질 수도 있다. 따라서, 128 비트 압축된 데이터는, 동일한 캐시의 제 2 캐시 뱅크 상의 제 2 캐시 라인에 대한 필요성 없이 제 1 캐시 뱅크 상의 제 1 캐시 라인에 저장될 수도 있다. 이러한 예에서, 데이터가 압축될 때, 이용할 캐시 뱅크를 명시하는 어드레스의 부분들은 압축에 의해 클리어될 수도 있다. 상술된 바와 같이, 이는, 어드레스의 클리어된 부분들이 더 이상 다른 캐시 뱅크 (예컨대, 제 2 캐시 뱅크) 를 명시할 수 없기 때문에, 캐시 뱅크들의 오직 절반 (예컨대, 제 1 캐시 뱅크) 에만 압축된 데이터가 기입되는 것을 초래할 수도 있다. 캐시 뱅크 스프레딩은 뱅크 선택 비트에 추가할 산술 또는 연산 함수를 채용할 수도 있다.
다양한 양태들의 캐시 뱅크 스프레딩 동작은 다양한 캐시 뱅크들에 걸친 압축된 데이터의 보다 빈번한 분포를 달성하기 위해 자주 값들을 교체하는 어드레스의 부분들을 선택할 수도 있다. 예를 들어, 캐시 어드레스의 하위 (lower) 보존된 비트들은 캐시 어드레스의 상위 (upper) 보존된 비트들보다 더 자주 교체된다. 수십 및 수 개의 디지트들을 가지고 연산을 수행하는 것은 수백 및 수십 개의 디지트들을 이용하는 것보다 어드레싱된 캐시 뱅크들에서의 보다 잦은 가변성을 초래할 수도 있다.
적어도 부분적으로 캐시 뱅크들을 결정하기 위해 어드레스의 클리어된 부분이 사용되는 일 양태에서, 2 개 이상의 보존된 부분들이 클리어된 부분을 재형성 (recreate) 또는 회복 (reinstate)하기 위해 사용될 수도 있다. 예를 들어, 바이너리 비트들을 이용하여, 보존된 비트 및 클리어된 비트가 캐시 뱅크를 선택하기 위해 결합될 수도 있다. 클리어된 비트는 일정하고 (예컨대, 클리어된 비트 = 0) 제 1 보존된 비트는 가변인 (즉, 보존된 비트 = 0 또는 1) 양태들에서, 어드레스의 캐시 뱅크 선택 부분은 00 또는 01 일 수도 있다. 클리어되는 비트가 클리어되지 않고 가변인 채로 유지되는 (예컨대, 클리어되지 않은 비트 = 0 또는 1) 양태들에서, 캐시 뱅크 선택은 00, 01, 10, 또는 11 일 수 있을 것이다. 따라서, 클리어된 비트는 캐시 뱅크 선택을 그것의 잠재적인 값들의 절반으로 제한한다. 제 1 보존된 비트 및 유사하게 가변인 제 2 보존인 비트를 이용하여 산술 또는 연산 함수를 적용하는 것, 및 클리어된 비트를 함수의 결과로 대체하는 것은 캐시 뱅크 선택을 위한 잠재적인 값들의 전체 어레이를 복원 (restore) 할 수도 있다. 일 양태에서, 함수는 제 1 및 제 2 보존된 비트들의 배타적 OR (XOR) 를 포함할 수도 있다.
어드레스 비트들에 적용된 함수는 하드웨어 및/또는 소프트웨어에서 구현될 수도 있는 다양한 산술 또는 연산 함수들의 어느 것일 수도 있다. 함수들에 대한 오퍼랜드들은 압축된 데이터에 대한 보존된 어드레스의 부분들의 다양한 조합, 또는 압축된 데이터에 대한 보전된 어드레스의 일부분, 및 다른 변수 중 어느 것일 수도 있다. 예를 들어, 다양한 오퍼랜드들을 이용하고 압축된 데이터에 대한 어드레스의 클리어된 부분들을 대체 또는 회복하기 위한 값들의 제한된 셋트를 출력하기 위해 해시 (hash) 함수가 구현될 수도 있다. 일 양태에서, 함수는 또한 랜덤 넘버 발생기를 포함할 수도 있다.
도 1 은 다양한 양태들과의 사용에 적합한 원격 컴퓨팅 디바이스 (50) 와 통신하는 컴퓨팅 디바이스 (10) 를 포함하는 시스템을 예시한다. 컴퓨팅 디바이스 (10) 는 프로세서 (14), 메모리 (16), 통신 인터페이스 (18), 및 저장 인터페이스 (20) 를 갖는 SoC (12) 를 포함할 수도 있다. 컴퓨팅 디바이스는 통신 컴포넌트 (22), 예컨대 유선 또는 무선 모뎀, 저장 컴포넌트 (24), 무선 네트워크 (30) 로의 무선 접속 (32) 을 확립하기 위한 안테나 (26), 및/또는 인터넷 (40) 으로의 유선 접속 (44) 에 접속하기 위한 네트워크 인터페이스 (28) 를 더 포함할 수도 있다. 프로세서 (14) 는 다수의 프로세서 코어들 뿐만 아니라 다양한 하드웨어 코어들 중 어느 하나를 포함할 수도 있다. SoC (12) 는 하나 이상의 프로세서들 (14) 을 포함할 수도 있다. 컴퓨팅 디바이스 (10) 는 하나보다 많은 SoC들 (12) 을 포함할 수도 있고, 이에 의해 프로세서들 (14) 및 프로세서 코어들의 수를 증가시킨다. 컴퓨팅 디바이스 (10) 는 또한, SoC (12) 와 연관되지 않은 프로세서 (14) 를 포함할 수도 있다. 개별 프로세서들 (14) 은 도 2 를 참조하여 이하에서 설명되는 바와 같이 멀티-코어 프로세서들일 수도 있다. 프로세서들 (14) 은 각각, 컴퓨팅 디바이스 (10) 의 다른 프로세서들 (14) 과 동일하거나 상이할 수도 있는 특수 목적들을 위해 구성될 수도 있다. 동일한 또는 상이한 구성들의 프로세서들 (14) 및 프로세서 코어들 중 하나 이상이 함께 그룹화될 수도 있다.
SoC (12) 의 메모리 (16) 는 프로세서 (14) 에 의한 액세스를 위해 데이터 및 프로세서-실행가능 코드를 저장하도록 구성된 휘발성 또는 비-휘발성 메모리일 수도 있다. 일 양태에서, 메모리 (16) 는 프로세서들 (14) 중 하나 이상에 의해 출력되는 중간 프로세싱 데이터와 같은 데이터 구조들을 적어도 임시로 저장하도록 구성될 수도 있다. 일 양태에서, 메모리 (16) 는 캐시 뱅크 스프레딩을 이용하여 압축된 데이터에 대한 캐시 메모리 액세스 요청을 위한 정보를 저장하도록 구성될 수도 있다. 메모리 (16) 는 캐시 뱅크 스프레딩을 위한 정보를 보유하기 위한 비-휘발성 판독-전용 메모리 (ROM) 를 포함할 수도 있다.
컴퓨팅 디바이스 (10) 및/또는 SoC (12) 는 다양한 목적들을 위해 구성된 하나 이상의 메모리들 (16) 을 포함할 수도 있다. 일 양태에서, 하나 이상의 메모리들 (16) 은 캐시 뱅크 스프레딩을 위한 정보를 저장하는 것에 전용되도록 구성될 수도 있다. 메모리 (16) 는 정보가 캐시 뱅크 스프레딩을 구현하기 위해 프로세서 또는 전용 제어기에 의해 액세스되는 것을 가능하게 하는 방식으로 정보를 저장할 수도 있다.
통신 인터페이스 (18), 통신 컴포넌트 (22), 안테나 (26), 및/또는 네트워크 인터페이스 (28) 는, 컴퓨팅 디바이스 (10) 로 하여금 무선 접속 (32) 을 통해 무선 네트워크 (30), 및/또는 유선 네트워크 (44) 를 통해 원격 컴퓨팅 디바이스 (50) 와 통신하게 하도록 협력하여 작업할 수도 있다. 무선 네트워크 (30) 는, 인터넷 (40) 으로의 접속을 컴퓨팅 디바이스 (10) 에 제공하고 이에 의해 원격 컴퓨팅 디바이스 (50) 와 데이터를 교환할 수도 있도록, 예를 들어 무선 통신들에 사용된 무선 주파수 스펙트럼을 포함하는 다양한 무선 통신 기술들을 사용하여 구현될 수도 있다.
저장 인터페이스 (20) 및 저장 컴포넌트 (24) 는 함께 작동되어 컴퓨팅 디바이스 (10) 가 비-휘발성 저장 매체 상에 데이터를 저장하는 것을 허용할 수도 있다. 저장 컴포넌트 (24) 는 메모리 (16) 의 일 양태처럼 구성될 수도 있고, 여기서 저장 컴포넌트 (24) 가 캐시 뱅크 스프레딩을 위한 정보를 저장할 수도 있어, 정보는 하나 이상의 프로세서들 (14) 에 의해 액세스될 수도 있다. 비-휘발성인 저장 컴포넌트 (24) 는, 컴퓨팅 디바이스 (10) 의 전력이 셧 오프된 후에도 정보를 보유할 수도 있다. 전력이 다시 턴 온되고 컴퓨팅 디바이스 (10) 가 재부팅되는 경우, 저장 컴포넌트 (24) 상에 저장된 정보는 컴퓨팅 디바이스 (10) 에 이용 가능해질 수도 있다. 저장 인터페이스 (20) 는 저장 디바이스 (24) 에 대한 액세스를 제어하고, 프로세서 (14) 가 저장 디바이스 (24) 로부터 데이터를 판독하고 데이터를 저장 디바이스에 기입하는 것을 허용할 수도 있다.
컴퓨팅 디바이스 (10) 의 컴포넌트들의 일부 또는 전부는 필요한 기능들을 여전히 서빙하면서 상이하게 배열 및/또는 결합될 수도 있다. 더욱이, 컴퓨팅 디바이스 (10) 는 컴포넌트들 각각의 컴포넌트에 제한되지 않을 수도 있고, 각각의 컴포넌트의 다수의 경우들이 컴퓨팅 디바이스 (10) 의 다양한 구성들에 포함될 수도 있다.
도 2 는 일 양태를 구현하기에 적합한 멀티-코어 프로세서 (14) 를 예시한다. 멀티-코어 프로세서 (14) 는 복수의 동종 또는 이종의 프로세서 코어들 (200, 201, 202, 203) 을 가질 수도 있다. 프로세서 코어들 (200, 201, 202, 203) 은 동종일 수도 있는데, 여기서 단일 프로세서 (14) 의 이 프로세서 코어들은 (200, 201, 202, 203) 은 동일한 목적을 위해 구성될 수도 있고 동일하거나 유사한 성능 특징들을 가질 수도 있다. 예를 들어, 프로세서 (14) 는 범용 프로세서일 수도 있고, 프로세서 코어들 (200, 201, 202, 203) 은 동종의 범용 프로세서 코어들일 수도 있다. 다르게는, 프로세서 (14) 는 그래픽 프로세싱 유닛 또는 디지털 신호 프로세서일 수도 있고, 프로세서 코어들 (200, 201, 202, 203) 은 각각, 동종의 그래픽 프로세서 코어들 또는 디지털 신호 프로세서 코어들일 수도 있다.
제조 프로세스 및 재료들에서의 변화들을 통해, 동종의 프로세서 코어들 (200, 201, 202, 203) 의 성능 특징은 동일한 멀티-코어 프로세서 (14) 내에서 또는 동일하게 설계된 프로세서 코어들을 사용하는 다른 멀티-코어 프로세서 (14) 내에서 프로세서 코어마다 각기 상이할 수도 있다.
프로세서 코어들 (200, 201, 202, 203) 은 이종일 수도 있는데, 여기서 단일 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 은 상이한 목적들을 위해 구성될 수도 있고/있거나 상이한 성능 특징을 가질 수도 있다. 이러한 이종 프로세서 코어들의 예는 "big.LITTLE" 아키텍처들로서 알려진 것을 포함할 수도 있고, 여기서 더 느린, 저-전력 프로세서 코어들은 더 파워풀한 그리고 전력 소모적인 (power-hungry) 프로세서 코어들과 커플링될 수도 있다.
도 2 에 예시된 예에서, 멀티-코어 프로세서 (14) 는 4 개의 프로세서 코어들 (200, 201, 202, 203)(즉, 프로세서 코어 0, 프로세서 코어 1, 프로세서 코어 2, 및 프로세서 코어 3) 을 포함한다. 설명의 용이함을 위해, 본원의 예들은 도 2 에 예시된 바와 같이 4 개의 프로세서 코어들 (200, 201, 202, 203) 을 지칭할 수도 있다. 그러나, 도 2 에 예시되고 본원에 설명된 4 개의 프로세서 코어들 (200, 201, 202, 203) 은 단지 예로서 제공되고, 결코 4-코어 프로세서 시스템에 대한 다양한 양태들을 의미하지는 않는다. 컴퓨팅 디바이스 (10), SoC (12), 또는 멀티-코어 프로세서 (14) 는 개별적으로 또는 결합하여 본원에 예시 및 설명된 4 개의 프로세서 코어들 (200, 201, 202, 203) 보다 더 적은 또는 더 많은 프로세서 코어들을 포함한다.
도 3a 및 도 3b 는 일 양태에 따라 캐시 뱅크 스프레딩을 구형하도록 구성된 예시적인 SoC 들 (12) 을 나타낸다. SoC (12) 는 프로세서 (14), 캐시 메모리 제어기 (304), 캐시 메모리 (306), 및 상술된 SoC (12) 의 컴포넌트들과 같은 다른 컴포넌트들을 포함할 수도 있다. 캐시 메모리 (306) 는 도 1 에서의 저장 컴포넌트 (24) 또는 메모리 (16) 를 액세스할 때보다 더 빠른 액세스를 위해 데이터 및 프로그램 명령들을 임시로 저장하도록 구성될 수도 있다. 캐시 메모리 (306) 는 단일 프로세서 (14) 에 의한 사용을 위해 전용될 수도 있고 또는 다수의 프로세서들 (14) 간에 공유될 수도 있다. 일 양태에서, 캐시 메모리 (306) 는 프로세서 (14) 의 부분일 수도 있고, 단일 프로세서 코어에 의한 사용을 위해 전용될 수도 있고 또는프로세서 (14) 의 다수의 프로세서 코어들 간에 공유될 수도 있다.
캐시 메모리 제어기 (304) 는 SoC (12) 의 다양한 프로세서들 (14) 및 서브시스템들 (미도시) 에 의한 캐시 메모리 (306) 에 대한 액세스를 관리할 수도 있다. 캐시 메모리의 액세스 관리의 부분은 압축된 데이터에 대해 메시 메모리 (36) 에 프로세서 (14) 에 의해 발행된 기입 및 판독 캐시 메모리 액세스 요청을 위한 다양한 양태들에 따라 캐시 뱅크 스프레딩을 이용하는 것을 포함할 수도 있다. 캐시 뱅크 스프레딩은, 압축된 데이터가 캐시 라인의 사이즈보다 더 작거나 동일하도록 하는 압축비 또는 데이터 사이즈를 갖는 압축된 데이터에 대한 캐시 메모리 액세스 요청을 위해 사용될 수도 있다. 추가로, 압축된 데이터는 또한 캐시 메모리의 캐시 뱅크보다 더 크지 않을 수도 있다. 압축된 데이터에 대해 캐시 뱅크 스프레딩을 적용하는 것은, 캐시 메모리 액세스 요청의 물리적 어드레스로부터 변형된, 캐시 뱅크 스프레딩 어드레스, 캐시 메모리 (36) 에서의 물리적 어드레스의 사용을 초래할 수도 있다. 기입 캐시 메모리 액세스 요청에 대해, 캐시 메모리 제어기 (304) 는 압축된 데이터를 위한 캐시 뱅크 스프레딩 어드레스에 압축된 데이터를 기입할 수도 있다. 판독 캐시 메모리 액세스 요청에 대해, 캐시 메모리 제어기 (304) 는 압축된 데이터를 위한 캐시 뱅크 스프레딩 어드레스로부터 압축된 데이터를 판독할 수도 있다.
도 3a 에서 예시된 일 양태에서, SoC (12) 는 캐시 뱅크 스프레딩을 구현하도록 구성된 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 및 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 를 포함할 수도 있다. 캐시 메모리 제어기 (304) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 에 캐시 메모리 액세스 요청의 물리적 어드레스를 전송함으로써 수신된 캐시 메모리 액세스 요청을 위해 캐시 뱅크 스프레딩을 개시할 수도 있다. 캐시 메모리 제어기 (304) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로부터 캐시 메모리 액세스 요청의 물리적 어드레스에 대응하는 번역된 뱅크 스프레딩 어드레스를 수신할 수도 있다. 캐시 메모리 액세스 요청의 물리적 어드레스를 캐시 뱅크 스프레딩 어드레스로 번역하는 것은 이하 추가적으로 설명된다.
캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 메모리 (306) 의 하나 이상의 물리적 어드레스들을 저장할 수도 있는, 데이터 저장 컴포넌트일 수도 있고, 캐시 메모리 제어기 (304) 의 부분이거나 캐시 메모리 제어기 (304) 와는 별개의 것일 수도 있다. 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 에 의해 저장된 물리적 어드레스들은 캐시 메모리 액세스 요청의 물리적 어드레스 및/또는 캐시 뱅크 스프레딩 어드레스를 포함할 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 메모리 제어기 (304) 또는 프로세서 (14) 로부터 캐시 메모리 액세스 요청의 물리적 어드레스를 수신할 수도 있다. 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 메모리 액세스 요청의 물리적 어드레스를 번역 (translation) 을 위해 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 에 제공할 수도 있다. 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 로부터 번역된 뱅크 스프레딩 어드레스를 수신하고, 캐시 메모리 액세스 요청의 물리적 어드레스를 캐시 뱅크 스프레딩 어드레스로 대체할 수도 있다. 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 메모리 제어기 (304) 또는 프로세서 (14) 에 캐시 뱅크 스프레딩 어드레스를 제공할 수도 있다.
일 양태에서, 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 는 캐시 메모리 액세스 요청들의 하나 이상의 물리적 어드레스들을 대응하는 뱅크 스프레딩 어드레스들과 상관시키는 방식으로 데이터를 저장할 수도 있다. 상관된 주소는 테이블 (table) 과 같이, 상관된 어드레스들을 링크하기에 적합한 임의의 데이터 구조로 포맷팅될 수도 있다. 일 양태에서, 상관된 어드레스들의 각 쌍은, 요구되는 압축 비 및/또는 사이즈로, 압축된 데이터에 대한 캐시 메모리 액세스 요청에 응답하여 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 에 저장될 수도 있다.
일 양태에서, 상관된 어드레스들의 일부 또는 전부는, 캐시 메모리 액세스 요청이 캐시의 임의의 물리적 어드레스에 대해 수신되기 전에, 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로 로딩될 수도 있다. 예를 들어, 캐시 메모리 (306) 의 특정 부분은 캐시 뱅크 스프레딩을 이용하여 저장될 수도 있는 압축된 데이터에 대해 지정될 수도 있다. 캐시 메모리 (306) 의 이 부분에 대한 캐시 뱅크 스프레딩 어드레스들은, 본 명세서에서 추가로 설명되는 바와 같이 결정될 수도 있고, 캐시 메모리 (306) 의 이 부분의 물리적 어드레스에 대해 임의의 캐시 메모리 액세스 요청이 수신되기 전에 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로 저장될 수도 있다.
캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는, 캐시 메모리 액세스 요청들의 물리적 어드레스들을 대응하는 뱅크 스프레딩 어드레스들로 번역하기 위한, 하드웨어 또는 소프트웨어 구현된 컴포넌트일 수도 있고, 캐시 메모리 제어기 (304) 의 일부 또는 캐시 메모리 제어기 (304) 와는 별개의 것일 수도 있다. 캐시 메모리 액세스 요청의 물리적 어드레스들을 대응하는 뱅크 스프레딩 어드레스로 번역하는데 사용되는 캐시 뱅크 스프레딩 함수는 알려진 수학적 및/또는 연산적 함수들의 임의의 단일 또는 조합일 수도 있다.
일 양태에서, 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들로서 캐시 메모리 액세스 요청의 물리적 어드레스의 비트들의 선택을 이용하여, 배타적 OR (XOR) 연산과 같은, 논리 연산을 채용할 수도 있다. 캐시 뱅크 스프레딩 함수의 결과는 데이터 압축 프로세스에 의해 캐시 메모리 액세스 요청의 물리적 어드레스로부터 클리어되었을 수도 있는 비트를 대체하기 위해 사용되는 대체 비트를 포함할 수도 있다. 논의된 바와 같이, 압축 동안 클리어된 비트는 캐시 뱅크 선택 비트일 수도 있고, 캐시 뱅크 선택 비트를 클리어한 결과로서, 캐시 메모리 액세스 요청의 물리적 어드레스는 클리어된 캐시 뱅크 선택 비트에 대해 항상 동일한 값을 나타낼 것이다. 캐시 메모리 제어기 (304) 는 어느 캐시 메모리 (306) 의 뱅크에 기입 또는 판독할 지를 결정하기 위해 뱅크 선택 비트를 사용할 수도 있다.
일 양태에서, 캐시 메모리 액세스 요청의 압축된 데이터는 캐시 라인의 사이즈보다 적을 수도 있고, 따라서, 단일 캐시 뱅크에 기입될 수도 있다. 이러한 압축된 데이터에 대해 캐시 뱅크 선택 비트가 항상 동일한 값을 나타낼 때, 압축된 데이터는 캐시 뱅크들의 전체 셋트보다 적은 캐시 뱅크들의 셋트 또는 동일한 캐시 뱅크 상에 항상 저장될 수도 있다. 예를 들어, 캐시 메모리 액세스 요청의 물리적 어드레스는 오직 하나의 뱅크 선택 비트를 포함할 수도 있다. 단일 뱅크 선택 비트는 2 개의 값들 중 하나, 예를 들어, 0 또는 1 을 나타내고, 각각은 2 개의 캐시 뱅크들 중 하나를 의미한다. 뱅크 선택 비트가 항상 동일한 값, 예를 들어 0 을 나타내는 결과로서, 뱅크 선택 비트는 하나의 대응하는 캐시 뱅크의 사용만을 표시할 수도 있다. 이것은 압축된 데이터에 대한 캐시 뱅크들의 사용을 캐시 뱅크들의 절반으로 유효하게 감소시킨다. 클리어된 비트들의 유사한 예들은 캐시 메모리 액세스 요청의 물리적 어드레스의 뱅크 선택 비트들의 일부 또는 전부의 임의의 수를 포함할 수도 있다. 예를 들어, 4 개의 캐시 뱅크들을 포함하는 캐시 메모리 (306) 는 물리적 어드레스에서 2 개의 뱅크 선택 비트들의 사용을 필요로 할 수도 있다. 데이터 압축으로부터 초래되는 클리어된 비트들은 물리적 어드레스의 뱅크 선택 비트들의 일방 또는 양방을 포함할 수도 있다. 그 결과로서, 그것의 이전 사이즈의 적어도 절반으로 압축된 데이터에 대해 사용되는 뱅크들은 캐시 뱅크들의 절반 또는 1/4 로 제한될 수도 있다. 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 충분히 작은 압축된 데이터에 대해 캐시 뱅크들의 일부 또는 전부의 사용을 복원하기 위해 이용될 수도 있다.
일 양태에서, 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로부터 물리적 어드레스를 수신할 수도 있다. 상술된 바와 같이, 물리적 어드레스는 캐시 메모리 액세스 요청의 물리적 어드레스일 수도 있고, 또는, 그것은 압축된 데이터를 저장하기 위해 지정된 캐시 메모리의 부분과 연관된 물리적 어드레스일 수도 있다. 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 뱅크 스프레딩 함수의 결과를 결정함에 있어서 물리적 어드레스의 부분들을 이용할 수도 있다. 그 결과는 대응하는 뱅크 스프레딩 어드레스를 생성하기 위해 물리적 어드레스의 뱅크 선택 비트를 대체하기 위해 사용될 수도 있다. 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 에 캐시 뱅크 스프레딩 어드레스를 제공할 수도 있다.
일 양태에서, 프로세서 (14) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 에 캐시 메모리 액세스 요청의 물리적 어드레스를 전송함으로써 캐시 뱅크 스프레딩을 개시할 수도 있다. 프로세서 (14) 또는 캐시 메모리 제어기 (304) 는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로부터 번역된 뱅크 스프레딩 어드레스를 수신할 수도 있다. 프로세서 (14) 가 캐시 뱅크 스프레딩 어드레스를 수신하는 일 양태에서, 프로세서 (14) 는 캐시 메모리 제어기 (304) 에 대한 캐시 메모리 액세스 요청에 캐시 뱅크 스프레딩 어드레스를 포함할 수도 있다. 캐시 메모리 제어기 (304) 가 프로세서 (14) 로부터 캐시 메모리 액세스 요청을 수신하고 프로세서 (14) 또는 캐시 뱅크 스프레딩 어드레스 컴포넌트 (300) 로부터 캐시 뱅크 스프레딩 어드레스를 수신하는 일 양태에서, 캐시 메모리 제어기 (304) 는 캐시 뱅크 스프레딩 어드레스를 이용하여 캐시 메모리 액세스 요청을 구현할 수도 있다.
도 3b 에서 예시된 일 양태에서, SoC (12) 는 캐시 메모리 (306) 에 전송된 기입 캐시 메모리 액세스 요청에 대해 프로세서 (14) 에 제공된 데이터를 압축하도록 구성된 압축 컴포넌트 (308) 를 포함할 수도 있다. 압축 컴포넌트 (308) 는 기입 캐시 메모리 액세스 요청에 대해 프로세서 (14) 에 제공된 데이터의 압축된 버전 (version) 을 출력할 수도 있다. 프로세서 (14) 는 압축 컴포넌트 (308) 에게 압축 파라미터에 따라 데이터를 압축하도록 지시할 수도 있다. 압축 파라미터는 압축 비, 압축된 데이터 사이즈, 또는 압축된 데이터 품질을 포함할 수도 있다. 일 양태에서, 압축 컴포넌트는 프로세서 (14) 로부터 프로그램 명령들을 수신할 수도 있거나 데이터의 압축을 결정하기 위한 압축 규칙 또는 알고리즘으로 프로그래밍될 수도 있는 프로그래밍가능한 하드웨어 컴포넌트일 수도 있다. 일 양태에서, 압축 규칙 또는 알고리즘은 정적 압축 파라미터일 수도 있다. 일 양태에서, 압축 컴포넌트 (308) 는 데이터를 압축하도록 구성된 프로그램 소프트웨어일 수도 있다. 압축 컴포넌트 (308) 는 프로세서 (14) 로부터 압축 파라미터로서 입력 값들을 수신할 수도 있고, 또는, 압축 컴포넌트 (308) 가 데이터를 어떻게 압축할지를 지시하기 위한 다른 프로그램 소프트웨어를 수신할 수도 있다. 일 양태에서, 프로그램 소프트웨어 압축 컴포넌트 (308) 는 상술된 프로그래밍가능 하드웨어 압축 컴포넌트 (308) 와 같이 압축 규칙 또는 알고리즘을 포함할 수도 있다. 압축 컴포넌트 (308) 는 압축된 데이터의 출력과 함께 데이터 사이즈, 압축 비, 및 압축 품질과 같은 압축 파라미터들을 포함할 수도 있다. 예를 들어, 압축 파라미터들은 압축된 데이터 의 메타데이터 내에 포함될 수도 있다.
압축 컴포넌트 (308) 의 출력, 압축된 데이터는 뱅크 스프레딩 함수 컴포넌트 (302) 에서 수신될 수도 있다. 상술된 바와 같이, 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 메모리 액세스 요청의 물리적 어드레스들을 수신하고, 그것을 대응하는 뱅크 스프레딩 어드레스로 번역할 수도 있다. 캐시 메모리 액세스 요청의 물리적 어드레스를 대응하는 뱅크 스프레딩 어드레스로 번역함에 있어서 사용되는 캐시 뱅크 스프레딩 함수는 알려진 수학적 및/또는 연산적 함수들의 임의의 단일 또는 조합일 수도 있다.
캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 압축된 데이터에 대한 압축 파라미터들을 또한 수신할 수도 있고, 물리적 어드레스를 캐시 뱅크 스프레딩 어드레스로 어떻게 번역할 지를 결정하기 위해 압축 파라미터들을 사용할 수도 있다. 본 명세서에서 추가로 상세하게 논의되는 바와 같이, 데이터의 압축은 프로세서 (14) 에 의해 발행되는 캐시 메모리 액세스 요청의 물리적 어드레스를 변경할 수도 있다. 물리적 어드레스의 변경들은 하나 이상의 캐시 메모리 뱅크 선택 비트들의 값들을 변화시키는 것을 포함할 수도 있다. 압축 파라미터들은 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 에 대해, 어떻게 물리적 어드레스가 데이터의 압축에 의해 변경될 수도 있는지, 그리고 물리적 어드레스의 변경들 중 어느 것을 추가로 변경할 것인지를 표시할 수도 있다.
캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는, 예를 들어 뱅크 선택 비트들 중 하나 이상을 회복시킴으로써, 압축된 데이터의 물리적 어드레스를 추가로 변경할 수도 있다. 뱅크 선택 비트들 중 하나 이상을 회복시는 캐시 뱅크 스프레딩 함수 컴포넌트 (302) 는 뱅크 선택 비트들을 그들의 원래 값으로 복귀시킬 수도 있다 (또는 그렇게 하지 않을 수도 있다). 하지만, 뱅크 선택 비트들을 회복시키는 것은 뱅크 선택 비트들의 값을 유사하게 압축된 데이터에 대해 동일한 뱅크 선택 비트들의 전부에 대해 정적인 값으로부터 물리적 어드레스로부터의 보존된 비트들에 기초하여 변화할 수도 있는 동적인 값으로 변화시킬 수도 있다.
일 양태에서, 캐시 뱅크 스프레딩 함수는 다음과 같은 의사코드와 유사한 방식으로 구현될 수도 있다:
BankSpreading(BaseAddr, CompressionLevel){
PhysicalAddressShift = 0
if ( CompressionLevel == "4:1" or CompressionLevel == "4:2"){
Bit1= (BaseAddr >> Bit1ToBeUsed) & 1
Bit2 = (BaseAddr >> Bit2ToBeUsed) & 1
PhysicalAddressShift = (Bit1 XOR Bit2) << W
}
return BaseAddr + PhysicalAddressShift
}
상기 의사 코드 예에서, BankSpreading 함수에 입력되는 BaseAddr 은 캐시 메모리 액세스 요청의 물리적 어드레스를 포함할 수도 있다. CompressionLevel 은 캐시 메모리 액세스 요청의 압축된 데이터의 압축 비와 같은 압축 파라미터를 포함할 수도 있다. PhysicalAddressShift 는 CompressionLevel 이 조건 진술문의 조건들을 만족하는 때 결정될 수도 있다. 이 예에서, CompressionLevel 은 압축된 데이터에 대해 4:1 또는 4:2 압축 비와 동등할 수도 있다. PhysicalAddressShift 를 결정하기 위해, Bit1 및 Bit2 변수들은 BaseAddr 입력의 특정된 비트로 설정될 수도 있다. Bit1 및 Bit2 변수들을 이용하여, PhysicalShiftAddress 는, 예를 들어 그것을 W 포지션들만큼 시프트시킴으로써, 클리어된 비트를 회복시키기 위해 시프트된 Bit1 XOR Bit2 로 설정될 수도 있고, 여기서, W 는 압축 동안 클리어된 어드레스 비트의 포지션이다. 상술된 바와 같이, 이 예에서 수학적 또는 연산적 함수가 XOR 함수를 대체할 수도 있다. BankSpreading 함수의 출력은 PhysicalAddressShift 와 결합된 BaseAddr 입력을 포함할 수도 있다. 일 양태에서, 이들 값들의 결합은 물리적 어드레스의 하나 이상의 클리어된 뱅크 선택 비트들을 회복시키고 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩 어드레스를 생성할 수도 있다.
뱅크 스프레딩 함수 컴포넌트 (302) 는 캐시 뱅크 스프레딩 어드레스, 및/또는 캐시 메모리 액세스 요청을 캐시 메모리 제어기 (304) 로 포워딩할 수도 있다. 상술된 바와 같이, 캐시 메모리 제어기 (304) 는 캐시 메모리 (306) 와의 캐시 메모리 액세스 요청을 구현하기 위해 캐시 뱅크 스프레딩 어드레스를 사용할 수도 있다.
도 4 는 일 양태에 따라 압축된 데이터 (412) 를 저장하는 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상의 캐시 라인들 (408, 410, 414, 및 416) 로 이루어진 캐시 공간 (400, 402, 404, 및 406) 을 포함하는 캐시 메모리의 부분을 나타낸다. 이 예에서 예시된 바와 같이, 각각의 캐시 라인 (408, 410, 414, 및 416) 은 별개의 캐시 뱅크 (418, 420, 422, 및 424) 상에 위치될 수도 있다. 압축된 데이터 (412) 는 각각의 캐시 라인 (408, 410, 414, 및 416) 의 대략 이분의 일을 점유하는 것으로 예시된다. 이 예에서, 사전-압축된 데이터 및 캐시 공간 (400, 402, 404, 및 406) 은 대략적으로 256 바이트들일 수도 있다. 캐시 라인들 (408, 410, 414, 및 416) 은 각각 대략적으로 128 바이트들일 수도 있다. 사전-압축된 데이터는 대략적으로 64 바이트들로 압축되어 압축된 데이터 (412) 를 초래할 수도 있다. 압축된 데이터 (412) 에 대한 압축 비는 4:1 일 수도 있다. 다르게 말하면, 압축된 데이터 (412) 는 사전-압축된 데이터의 사이즈의 1/4 또는 25% 일 수도 있다. 따라서, 압축된 데이터 (412) 에 대한 압축 비는 2:1 압축비보다 크거나 동일하고, 또는, 압축된 데이터 (512) 의 사이즈는 각 라인 (408, 410, 414, 및 416) 의 사이즈보다 작거나 동일할 수도 있다. 이는 압축된 데이터 (512) 가 단일 캐시 라인 (408, 410, 414, 및 416) 에 맞을 만큼 충분히 작도록 하는 결과를 초래할 수도 있다.
각 캐시 뱅크 (418, 420, 422, 및 424) 는 캐시 메모리 액세스 요청의 물리적 어드레스에서 뱅크 선택 비트들의 특정 결합과 연관될 수도 있다. 이 예에서, 물리적 어드레스는 2 개의 뱅크 선택 비트들을 포함할 수도 있다. 뱅크 선택 비트들 값 = 00 은 캐시 뱅크 (418) 와 연관될 수도 있다. 유사하게, 뱅크 선택 비트들 값 = 01 은 캐시 뱅크 (420) 와 연관될 수도 있고, 뱅크 선택 비트들 값 = 10 은 캐시 뱅크 (422) 와, 뱅크 선택 비트들 값 = 11 은 캐시 뱅크 (424) 와 연관될 수도 있다. 압축이 예를 들어 뱅크 선택 비트들 값이 항상 = 00 을 초래하는 뱅크 선택 비트들의 전부를 클리어하는 일 양태에서, 오직 캐시 뱅크 (418) 만이 캐시 공간 (400) 에서와 같이 압축된 데이터 (412) 를 저장하기 위해 사용될 수도 있다. 압축 알고리즘이 예를 들어 뱅크 선택 비트들 값이 항상 = 00 또는 10 을 초래하는 최하위 뱅크 선택 비트를 클리어하는 유사한 양태에서, 오직 캐시 뱅크 (418 및 422) 만이 캐시 공간들 (400 및 406) 에서와 같이 압축된 데이터 (412) 를 저장하기 위해 사용될 수도 있다. 일 양태에서, 클리어된 뱅크 선택 비트들은 "0" 보다는 오히려 "1" 로 설정될 수도 있다. 따라서, 캐시 뱅크 스프레딩 없이, 캐시 뱅크들 (418, 420, 422, 및 424) 의 일부는 다른 캐시 뱅크들 (418, 420, 422, 및 424) 보다는 덜 자주 사용될 수도 있고, 사용된다고 하더라도, 고르지 못한 사용을 초래한다.
압축된 데이터 (412) 에 대한 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩이 구현되는 일 양태에서는 캐시 뱅크들 (418, 420, 422, 및 424) 의 모든 절반 이하보다는 적은 곳에 저장되도록 보통 제한될 수도 있고, 캐시 뱅크들 (418, 420, 422, 및 424) 의 제한된 수보다 더 많은 곳에 저장될 수도 있다. 캐시 뱅크 스프레딩은 캐시 메모리 액세스 요청의 물리적 어드레스의 클리어된 뱅크 선택 비트들의 하나 이상을 회복시키기 위해 이용될 수도 있다. 2 개의 뱅크 선택 비트들을 이용하고 뱅크 선택 비트들의 전부가 클리어되는 일 양태에서, 캐시 뱅크 스프레딩은 뱅크 선택 비트들의 일방 또는 양방을 회복시키기 위해서 사용될 수도 있다. 일 양태에서, 뱅크 선택 비트들은 완전히 상이한 또는 부분적으로 상이한 오퍼랜드들을 갖는 캐시 뱅크 스프레딩 함수를 이용하여 회복될 수도 있다. 예를 들어, 캐시 메모리 액세스 요청의 물리적 어드레스의 보존된 (또는 클리어되지 않은) 비트들은 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들로서 사용될 수도 있다. 제 1 클리어된 뱅크 선택 비트에 대한 캐시 뱅크 스프레딩 함수의 구현을 위해, 캐시 뱅크 스프레딩 함수는 제 1 및 제 2 보존된 비트를 이용할 수도 있다. 제 2 클리어된 뱅크 선택 비트에 대해, 캐시 뱅크 스프레딩 함수는 제 1 또는 제 2 보존된 비트 및 제 3 보존된 비트, 또는 제 3 및 제 4 보존된 비트 중 어느 일방을 이용할 수도 있다.
사용되는 오퍼랜드들에 상관 없이, 캐시 뱅크 스프레딩 함수는 캐시 메모리 액세스 요청에 대해 캐시 뱅크들 (418, 420, 422, 및 424) 중 더 많은 사용을 초래할 수도 있다. 상기 논의된 바와 같이, 압축 알고리즘이 2 개의 뱅크 선택 비트들을 클리어하는 일 양태에서, 뱅크 선택 비트 값들은 = 00 일 수도 있고, 이는 캐시 공간 (400) 에서와 같이 오직 캐시 뱅크 (418) 만의 사용을 허용한다. 캐시 뱅크 스프레딩이 2 개의 클리어된 캐시 뱅크 선택 비트들 중 하나를 회복시키는 양태들에서, 뱅크 선택 비트 값들 = 00, 및 01 또는 10 중 일방일 수도 있고, 이는 캐시 공간 (402) 에서와 같이 캐시 뱅크 (420) 또는 캐시 공간 (406) 에서와 같이 캐시 뱅크 (422) 중 일방의 추가적인 사용을 허용한다. 압축 알고리즘이 2 개의 뱅크 선택 비트들 중 하나를 클리어하는 일 양태에서, 뱅크 선택 비트 값들은 = 00, 및 01 또는 10 중 일방 일 수도 있고, 이는 캐시 공간 (400) 에서와 같이 캐시 뱅크 (418), 및 캐시 공간 (402) 에서와 같이 캐시 뱅크 (420) 또는 캐시 공간 (406) 에서와 같이 캐시 뱅크 (422) 중 일방의 사용을 허용한다. 캐시 뱅크 스프레딩이 클리어된 뱅크 선택 비트를 회복시키는 양태들에서, 뱅크 선택 비트 값들 = 00, 01, 10, 및 11 일 수도 있고, 이는 캐시 공간들 (400, 402, 404, 및 406) 에서와 같이 캐시 뱅크들 (418, 420, 422, 및 424) 의 사용을 허용한다.
본 명세서에서의 예들에서 사용되는 캐시 뱅크들의 수는 어떤 식으로든 제한하는 것으로 의미되지 않는다. 캐시 메모리들은 본 명세서에서의 예들에서 기술된 것보다 더 많거나 더 적은 캐시 뱅크들을 포함하는 다양한 사이즈들의 캐시 라인들을 포함할 수도 있다. 캐시 뱅크 스프레딩은 임의의 수의 캐시 뱅크들을 갖는 캐시 메모리들에서 유사하게 적용될 수도 있다. 유사하게, 캐시 메모리의 물리적 어드레스들의 뱅크 선택 비트들은 변화할 수도 있다. 일 양태에서, 뱅크 선택 비트들의 수는 캐시 메모리에 의해 채용되는 캐시 뱅크들의 수에 의해 영향을 받을 수도 있다. 일 양태에서, 회복된 뱅크 선택 비트들의 수는 또한 변화될 수도 있고, 이는 캐시 뱅크들의 일부 또는 전부의 사용을 초래한다.
도 5 는 일 양태에 따라 압축된 데이터 (512) 를 저장하는 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상의 캐시 라인들 (408, 410, 414, 및 416) 로 이루어진 캐시 공간 (500, 502, 504, 및 506) 을 포함하는 캐시 메모리의 부분을 나타낸다. 도 5 에서 도시된 예는 도 4 에서 도시된 예와 유사하다. 이 예들에서의 차이점은, 압축된 데이터 (512) 가 압축된 데이터 (412) 보다 더 클 수도 있다는 것이다. 이 예에서, 사전-압축된 데이터 및 캐시 공간 (500, 502, 504, 및 506) 은 대략적으로 256 바이트들일 수도 있다. 캐시 라인들 (408, 410, 414, 및 416) 은 각각 대략적으로 128 바이트들일 수도 있다. 사전-압축된 데이터는 대략적으로 128 바이트들로 압축되어 압축된 데이터 (512) 를 초래할 수도 있다. 압축된 데이터 (512) 에 대한 압축 비는 2:1 일 수도 있다. 다르게 말하면, 압축된 데이터 (512) 는 사전-압축된 데이터의 사이즈의 절반 또는 50% 일 수도 있다. 따라서, 압축된 데이터 (512) 에 대한 압축 비는 2:1 압축비보다 크거나 동일하고, 또는, 압축된 데이터 (512) 의 사이즈는 각 라인 (408, 410, 414, 및 416) 의 사이즈보다 작거나 동일할 수도 있다. 이는 압축된 데이터 (512) 가 단일 캐시 라인 (408, 410, 414, 및 416) 에 맞을 만큼 충분히 작도록 하는 결과를 초래할 수도 있다.
압축된 데이터 (412) 와 같이, 압축된 데이터 (512) 는 단일 캐시 라인 (408, 410, 414, 및 416) 에 들어가기에 맞을 수도 있기 때문에, 압축된 데이터 (412) 를 이용하여 상기 설명된 양태들의 전부는 압축된 데이터 (512) 에 또한 적용될 수도 있다. 유사한 예들에서, 클리어된 뱅크 선택 비트들은 압축된 데이터 (512) 를 위해 사용되는 뱅크들 (418, 420, 422, 및 424) 의 수를 제한할 수도 있다. 도 5 에서 도시된 예에서, 클리어된 뱅크 선택 비트들은 4 개의 이용가능한 캐시 뱅크들 (418, 420, 422, 및 424) 중 오직 하나 또는 2 개의 사용을 초래할 수도 있다. 또한, 캐시 뱅크 스프레딩이 클리어된 뱅크 선택 비트들의 하나 이상을 회복시키기 위해서 사용될 수도 있고, 이는 사용가능한 캐시 뱅크들 (418, 420, 422, 및 424) 의 수를 증가시킨다.
도 6 은 일 양태에 따라 압축된 데이터 (612) 를 저장하는 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상의 캐시 라인들 (408, 410, 414, 및 416) 로 이루어진 캐시 공간 (600, 602, 604, 및 606) 을 포함하는 캐시 메모리의 부분을 나타낸다. 도 4 및 도 5 에서의 이전 예들과는 달리, 압축된 데이터 (612) 는 단일 캐시 라인 (408, 410, 414, 및 416) 내로 들어가기에 맞지 않는다. 상기 예들에서 계속하여, 사전-압축된 데이터 및 캐시 공간 (600, 602, 604, 및 606) 은 대략적으로 256 바이트들일 수도 있다. 캐시 라인들 (408, 410, 414, 및 416) 은 각각 대략적으로 128 바이트들일 수도 있다. 사전-압축된 데이터는 대략적으로 192 바이트들로 압축되어 압축된 데이터 (612) 를 초래할 수도 있다. 압축된 데이터 (512) 에 대한 압축 비는 4:3 일 수도 있다. 다르게 말하면, 압축된 데이터 (612) 는 사전-압축된 데이터의 사이즈의 3/4 또는 75% 일 수도 있다. 따라서, 압축된 데이터 (612) 에 대한 압축 비는 2:1 압축비보다 적고, 또는, 압축된 데이터의 사이즈는 캐시 라인 (408, 410, 414, 및 416) 보다 더 클 수도 있다. 이는 압축된 데이터 (612) 가 단일 캐시 뱅크 (418, 420, 422, 및 424) 상의 단일 캐시 라인 (408, 410, 414, 및 416) 에 맞을 만큼 충분히 큰 결과를 초래할 수도 있다. 일 양태에서, 압축된 데이터 (612) 가 각각의 캐시 공간들 (600, 602, 604, 및 606) 에 대한 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상에 저장될 수도 있기 때문에, 압축된 데이터 (612) 에 대한 뱅크 선택 비트들은 관계없을 수도 있다. 따라서, 캐시 뱅크 스프레딩은 압축된 데이터 (612) 에 대해 사용되지 않을 수도 있다.
도 7 은 일 양태에 따라 압축된 데이터 (712) 를 저장하는 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상의 캐시 라인들 (408, 410, 414, 및 416) 로 이루어진 캐시 공간 (700, 702, 704, 및 706) 을 포함하는 캐시 메모리의 부분을 나타낸다. 도 6 에서의 예와 유사하게, 압축된 데이터 (712) 는 단일 캐시 라인 (408, 410, 414, 및 416) 내로 들어가기에 맞지 않는다. 압축된 데이터 (712) 에 대한 압축 비와는 상관 없이, 압축된 데이터 (712) 는 단일 캐시 뱅크 (418, 420, 422, 및 424) 상의 캐시 라인 (408, 410, 414, 및 416) 내로 들어가기에 맞지 않을 수도 있기 때문에, 뱅크 선택 비트들은 관계없을 수도 있다. 일 양태에서, 압축된 데이터 (712) 에 대한 뱅크 선택 비트들은, 압축된 데이터 (712) 가 각각의 캐시 공간들 (700, 702, 704, 및 706) 에 대해 다중 캐시 뱅크들 (418, 420, 422, 및 424) 상에 저장될 수도 있기 때문에, 관계없을 수도 있다. 따라서, 캐시 뱅크 스프레딩은 압축된 데이터 (712) 에 대해 사용되지 않을 수도 있다.
도 8 은 일 양태에 따라 압축된 데이터에 대한 캐시 메모리 액세스 요청들의 물리적 어드레스들과 캐시에서의 연관된 뱅크 스프레딩 물리적 어드레스 사이의 관계들의 나타내는 예시적인 테이블 (800) 을 나타낸다. 테이블 (800) 은, 압축된 데이터에 대한 캐시 메모리 액세스 요청에서 사용될 수도 있는 캐시 메모리의 물리적 어드레스 (802), 물리적 어드레스의 부분의 바이너리 비트 표현 (또는 물리적 어드레스 비트들) (804), 물리적 어드레스 뱅크 선택 비트들 (806), 캐시 뱅크 스프레딩 어드레스 (808), 뱅크 스프레딩 어드레스의 부분의 바이너리 비트 표현 (또는 뱅크 스프레딩 어드레스 비트들) (810), 및 캐시 뱅크 스프레딩 어드레스 뱅크 선택 비트들 (812) 에 대한 열들을 포함할 수도 있다. 테이블 (800) 은 또한, 뱅크 스프레딩을 이용하여 압축된 데이터에 대한 캐시 메모리 액세스 요청을 위해 사용될 수도 있는 캐시 메모리의 하나 이상의 물리적 어드레스들에 대한 행들 (814-830) 을 포함할 수도 있다.
일 양태에서, 물리적 어드레스 (802) 는 하나 이상의 최하위 디지트들에서 0 값을 포함할 수도 있다. 이들 0 값들은 데이터 압축에 의해 클리어되는 물리적 어드레스의 부분들을 나타낼 수도 있다. 물리적 어드레스 비트들 (804) 은 물리적 어드레스 (802) 의 클리어된 부분들의 최상위 디지트 (most significant digit) 및 물리적 어드레스 (802) 의 보존된 부분들의 최하위 디지트를 나타낼 수도 있다. 물리적 어드레스 뱅크 선택 비트들 (806) 은, 최하위 비트가 클리어될 수도 있고 최상위 비트가 보존될 수도 있는 물리적 어드레스 (802) 에 대한 뱅크 선택 비트들, 이 예에서는 2 비트들을 나타낼 수도 있다. 상술된 바와 같이, 행들 (816, 820, 824, 및 828) 에서의 물리적 어드레스들 (802) 의 절반에 대해, 물리적 어드레스 뱅크 선택 비트들 (806) 은 모두 = 00 일 수도 있음은 명백할 수도 있다. 유사하게, 행들 (818, 822, 823, 및 830) 에서의 물리적 어드레스들 (802) 의 다른 절반에 대해, 물리적 어드레스 뱅크 선택 비트들 (806) 은 모두 = 10 일 수도 있다. 따라서, 뱅크 선택 비트 조합들의 오직 절반만이 사용되어 캐시 뱅크들의 사용을 절반으로 제한할 수도 있다.
일 양태에서, 캐시 뱅크 스프레딩 어드레스 (808), 캐시 뱅크 스프레딩 어드레스 비트들 (810), 및 캐시 뱅크 스프레딩 어드레스 뱅크 선택 비트들 (812) 은 캐시 뱅크 스프레딩으로부터 초래되는 동일한 행 (814-830) 의 물리적 어드레스 (802) 와 상관된 데이터를 나타낼 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩은 물리적 어드레스 비트들 (804) 에서 나타낸 보존된 비트들의 2 개의 최하위 비트들과의 XOR 오퍼레이터를 이용하여 구현될 수도 있다. 캐시 뱅크 스프레딩은 최하위/클리어된 물리적 어드레스 뱅크 선택 비트 (806) 를 회복시키기 위해서 사용될 수도 있다. 예를 들어, 행 (816) 에서, 물리적 어드레스 뱅크 선택 비트들 (806) = 10 일 수도 있다. 물리적 어드레스 비트들 (804) 에서 나타낸 보존된 비트들의 2 개의 최하위 비트들 = 01 이다. 이 예에서 캐시 뱅크 스프레딩을 구현하는 것은 0 XOR 1 = 1 을 포함할 수도 있다. 캐시 뱅크 스프레딩의 결과는 캐시 뱅크 스프레딩 어드레스 뱅크 선택 비트들 (812) = 11 을 생성하는, 값 1 로 클리어된 물리적 어드레스 뱅크 선택 비트 (806) 를 회복시키는 것일 수도 있다. 이것은 캐시 뱅크 스프레딩 어드레스 비트들 (810) 에서 반영될 수도 있고, 여기서, 물리적 어드레스 (802) 의 보존된 부분들의 최하위 디지트는 동일하게 유지되고, 물리적 어드레스 (802) 의 클리어된 부분들의 최상위 디지트는 업데이트된다. 예를 들어, 물리적 어드레스 비트들 (804) 에서, 물리적 어드레스 (802) 의 클리어된 부분들의 최상위 디지트 = 0000 이다. 캐시 뱅크 스프레딩을 구현하는 것은, 물리적 어드레스 (802) 의 클리어된 부분들의 최상위 디지트 = 1000 인, 캐시 뱅크 스프레딩 어드레스 비트들 (810) 을 생성하는 물리적 어드레스 비트들 (804) 을 업데이트하는 것을 초래할 수도 있다. 물리적 어드레스 (802) = 0xABCD100 는 유사하게 업데이트되어 대응하는 뱅크 스프레딩 어드레스 (808) = 0xABCD180 를 생성한다.
테이블 (800) 은, 캐시 뱅크 스프레딩을 구현하는 것이, 물리적 어드레스 뱅크 선택 비트들 (806) (00 및 10) 보다 뱅크 스프레딩 어드레스 뱅크 선택 비트들 (812) (00, 01, 10, 및 11) 의 보다 많은 조합들이 존재하므로, 압축된 데이터에 대한 캐시 메모리 액세스 요청들에 대해 사용되는 캐시 뱅크들의 수를 증가시킬 수도 있음을 나타낸다. 테이블 (800) 은 또한, 행 (814) 에서의 예에서와 같이 캐시 뱅크 스프레딩의 매 구현이 물리적 어드레스 뱅크 선택 비트들 (806) 과는 상이한 뱅크 스프레딩 어드레스 뱅크 선택 비트들 (812) 을 초래하지 않을 수도 있음을 또한 나타낸다.
도 9 는 압축된 데이터에 대한 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법 (900) 을 나타낸다. 방법 (900) 은 소프트웨어, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 또는 캐시 메모리 제어기와 같은 범용 또는 전용 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 컴퓨팅 디바이스에서 실행될 수도 있다. 블록 (902) 에서, 컴퓨팅 디바이스는 기입 (write) 또는 판독 (read) 캐시 메모리 액세스 요청을 수신할 수도 있다. 기입 캐시 메모리 액세스 요청은 압축된 기입 데이터, 압축된 기입 데이터를 저장하기 위한 물리적 어드레스, 압축되고 있는 기입 데이터의 표시 및/또는 압축된 기입 데이터에 대한 압축 비의 표시, 및/또는 압축된 기입 데이터의 사이즈의 표시를 포함할 수도 있다. 판독 캐시 메모리 액세스 요청은 압축된 판독 데이터를 취출하기 위한 물리적 어드레스, 압축되고 있는 판독 데이터의 표시 및/또는 압축된 판독 데이터에 대한 압축 비의 표시, 및/또는 압축된 판독 데이터의 사이즈의 표시를 포함할 수도 있다.
결정 블록 (904) 에서, 컴퓨팅 디바이스는 캐시 메모리 액세스 요청이 압축된 데이터에 대한 것인지 여부를 결정할 수도 있다. 압축되고 있는 캐시 메모리 액세스 요청의 데이터의 및/또는 요청된 데이터에 대한 압축 비의 표시는 캐시 메모리 액세스 요청이 압축된 데이터에 대한 것인지 여부를 결정하기 위해 사용될 수도 있다. 일 양태에서, 이들 정보들은 오직 기입 캐시 메모리 액세스 요청들에 대해서만 사용될 수도 있다. 캐시 메모리 액세스 요청이 압축된 데이터에 대한 것인지 여부를 결정하는 것은, 판독 데이터를 취출하기 위한 물리적 어드레스를, 데이터가 그것이 이전의 기입 캐시 메모리 액세스 요청의 일부로서 캐시 메모리에 저장되었을 때 압축된 것인지 여부를 나타내는 레코드에 대해 비교하는 것을 수반할 수도 있다. 캐시 메모리 액세스 요청이 압축된 데이터에 대한 것이 아니라고 결정 (즉,결정 블록 (904) = "아니오") 하는 것에 응답하여, 컴퓨팅 디바이스는 블록 (916) 에서 뱅크 스프레딩 없이 캐시 메모리 액세스 요청을 실행할 수도 있다.
캐시 메모리 액세스 요청이 압축된 데이터에 대한 것이라고 결정 (즉,결정 블록 (904) = "예") 하는 것에 응답하여, 컴퓨팅 디바이스는 결정 블록 (906) 에서 캐시 메모리 액세스 요청이 압축된 데이터를 기입 또는 압축된 데이터를 판독하기 위한 것인지 여부를 결정할 수도 있다. 각각의 캐시 메모리 액세스 요청은 캐시 메모리에 기입하는 것 또는 캐시 메모리로부터 판독하는 것 중 어느 일방을 위한 명령을 포함할 수도 있다.
캐시 메모리 액세스 요청이 압축된 데이터를 기입하기 위한 것이라고 결정 (즉, 결정 블록 (906) = "기입") 하는 것에 응답하여, 컴퓨팅 디바이스는 결정 블록 (908) 에서 압축된 데이터를 기입하기 위해 캐시 뱅크 스프레딩을 구현할지 여부를 결정할 수도 있다. 상기 논의된 바와 같이, 캐시 뱅크 스프레딩은 모든 압축된 데이터에 대해 구현되지 않을 수도 있다. 캐시 뱅크 스프레딩을 구현하는 것은 압축된 데이터가 지정된 사이즈의 것인지, 즉, 단일 캐시 메모리 뱅크 상에 맞을 수 있는지, 및/또는 지정된 압축 비의 것인지, 즉, 2:1 이상인지에 대한 조건일 수도 있다. 일 양태에서, 컴퓨팅 디바이스는 캐시 메모리 액세스 요청의 압축된 데이터의 사이즈를 캐시 메모리 뱅크들에 대한 사이즈와 비교할 수도 있다. 압축된 데이터의 사이즈가 캐시 메모리 뱅크들의 사이즈보다 적거나 동일할 때, 컴퓨팅 디바이스는 컴퓨팅 디바이스 요청이 캐시 뱅크 스프레딩을 이용하여 구현될 수도 있다고 결정할 수도 있다. 유사하게, 캐시 메모리 액세스 요청들이 표준화된 사이즈보다 더 크지 않은 데이터에 대해 발행될 때, 표준화된 사이즈는 캐시 라인과 동일한 사이즈일 수도 있다. 컴퓨팅 디바이스는 캐시 라인 사이즈, 일 양태에서, 각 캐시 라인에 대해 사용되는 캐시 메모리 뱅크들의 수를 인지하고 있을 수도 있다. 규칙적인 캐시 메모리 액세스 요청은 캐시 라인 사이즈보다 더 크지 않은 데이터에 대한 것일 수도 있고, 캐시 라인에 대한 캐시 메모리 뱅크들의 전부를 이용하는 것일 수도 있다. 따라서, 압축된 데이터에 대한 캐시 메모리 액세스 요청의 압축 비를 알면, 컴퓨팅 디바이스는 압축된 데이터가 캐시 메모리 뱅크들 중 얼마나 많이 이용할 수도 있는지를 결정할 수도 있다. 일 양태에서, 압축된 데이터가 캐시 메모리 뱅크들의 절반 또는 절반 미만을 이용하도록 하는 압축 비일 때, 컴퓨팅 디바이스는 캐시 메모리 액세스 요청이 캐시 뱅크 스프레딩을 이용하여 구현될 수도 있음을 결정할 수도 있다.
기입 캐시 메모리 액세스 요청이 캐시 뱅크 스프레딩을 이용하여 구현될 수도 있다고 결정 (즉, 결정 블록 (908) = "예") 하는 것에 응답하여, 컴퓨팅 디바이스는 본 명세서에서 기술된 바와 같은 다양한 양태들에 따라 블록 (910) 에서 캐시 뱅크 스프레딩을 이용하여 압축된 데이터에 대한 기입 캐시 메모리 액세스 요청을 실행할 수도 있다. 기입 캐시 메모리 액세스 요청이 캐시 뱅크 스프레딩을 이용하여 구현되지 않을 수도 있다고 결정 (즉, 결정 블록 (908) = "아니오") 하는 것에 응답하여, 컴퓨팅 디바이스는 블록 (916) 에서 캐시 뱅크 스프레딩 없이 캐시 메모리 액세스 요청을 실행할 수도 있다.
캐시 메모리 액세스 요청이 압축된 데이터를 판독하기 위한 것이라고 결정 (즉, 결정 블록 (906) = "판독") 하는 것에 응답하여, 컴퓨팅 디바이스는 결정 블록 (912) 에서 압축된 데이터를 판독하기 위해 캐시 뱅크 스프레딩을 구현할지 여부를 결정할 수도 있다. 압축된 데이터를 판독하기 위해 캐시 뱅크 스프레딩을 구현할지 여부를 결정하는 것은 결정 블록 (908) 에 관해 상술된 바와 같이 압축된 데이터를 기입하는 것과 유사한 방식으로 구현될 수도 있다. 판독 캐시 메모리 액세스 요청이 캐시 뱅크 스프레딩을 이용하여 구현된다고 결정 (즉, 결정 블록 (908) = "예") 하는 것에 응답하여, 컴퓨팅 디바이스는 본 명세서에서 추가적으로 설명되는 바와 같이 캐시 뱅크 스프레딩을 이용하여 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청을 실행할 수도 있다. 판독 캐시 메모리 액세스 요청이 캐시 뱅크 스프레딩을 이용하여 구현되지 않을 수도 있다고 결정 (즉, 결정 블록 (908) = "아니오") 하는 것에 응답하여, 컴퓨팅 디바이스는 블록 (916) 에서 뱅크 스프레딩 없이 캐시 메모리 액세스 요청을 실행할 수도 있다.
일 양태에서, 기입 캐시 메모리 액세스 요청과 판독 캐시 메모리 액세스 요청 사이를 구별하는 것이 필요하지 않을 수도 있다. 어느 경우에도, 캐시 뱅크 스프레딩을 이용하여 캐시 메모리 액세스 요청을 실행하는 것은 이하 설명되는 바와 같이 동일한 방식으로 달성될 수도 있다는 것이다.
도 10 은 압축된 데이터에 대한 기입 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법 (1000) 을 나타낸다. 방법 (1000) 은 소프트웨어, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 또는 캐시 메모리 제어기와 같은 범용 또는 전용 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 컴퓨팅 디바이스에서 실행될 수도 있다. 블록 (1002) 에서, 컴퓨팅 디바이스는 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택할 수도 있다. 상술된 바와 같이, 캐시 뱅크 스프레딩 함수는 임의의 수의 알려진 수학적 및 연산적 함수들 중 하나 또는 그것들의 조합일 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 함수는 캐시 메모리 액세스 요청의 물리적 어드레스의 2 개의 보존된 비트들의 논리적 배타 OR (XOR) 연산일 수도 있다. 캐시 뱅크 스프레딩 함수에 대한 입력들은 캐시 메모리 액세스 요청의 물리적 어드레스의 제 1 및 제 2 보존된 비트를 선택하는 것과 같이, 미리결정된 규칙에 따라 선택될 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 함수에 대한 입력들은 캐시 라인 사이즈, 및/또는 캐시 라인 당 캐시 뱅크들의 수를 포함하는, 캐시 메모리 사이즈, 캐시 메모리 아키텍처와 같은 다양한 팩터들 중 하나 이상에 기초하여 적응적 알고리즘 (adaptive algorithm) 에 따라 선택될 수도 있다.
블록 (1004) 에서, 컴퓨팅 디바이스는 선택된 입력(들) 에 대해 캐시 뱅크 스프레딩 함수를 적용할 수도 있다. 블록 (1006) 에서, 캐시 뱅크 스프레딩 함수는 캐시 뱅크 스프레딩 값을 리턴 (return) 할 수도 있다. 캐시 뱅크 스프레딩 값은 상술된 바와 같이 하나 이상의 클리어된 뱅크 선택 비트들을 회복시키기 위해 사용될 수도 있는 임의의 값일 수도 있다. 예를 들어, 2 개의 뱅크 선택 비트들을 회복시킬 때, 캐시 뱅크 스프레딩 값은 00, 01, 10, 및 11 과 같은 클리어된 뱅크 선택 비트들을 대체하기 위한 2 비트 값들을 포함할 수도 있다. 이들 값들은 이 예에서 나타낸 바이너리 표현에 제한되지 않고, 이러한 값들에 대한 대안적인 표현을 이용하여 구현될 수도 있다.
블록 (1008) 에서, 컴퓨팅 디바이스는 캐시 뱅크 스프레딩 값을 이용하여 클리어된 뱅크 선택 비트들을 회복시킴으로써 압축된 데이터에 대한 캐시 메모리 액세스 요청의 물리적 어드레스의 클리어된 부분을 업데이트할 수도 있다.
동작 블록 (1010) 에서, 컴퓨팅 디바이스는 캐시 뱅크 스프레딩 어드레스, 또는 업데이트된 물리적 어드레스를 저장할 수도 있다. 캐시 뱅크 스프레딩 어드레스는 즉시적인 캐시 메모리 액세스 요청에서의 후속 사용을 위해 임시로 저장될 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 어드레스는 물리적 어드레스에 대한 상관과 함께 저장될 수도 있고, 이로부터, 캐시 뱅크 스프레딩 어드레스가 재계산될 필요가 없도록 캐시 뱅크 스프레딩 어드레스는 나중의 캐시 메모리 액세스 요청들을 위해 계산된다.
블록 (1012) 에서, 컴퓨팅 디바이스는 캐시 뱅크 스프레딩 어드레스를 이용하여 캐시 메모리에 압축된 데이터를 기입할 수도 있다. 일 양태에서, 방법 (1000) 은 또한, 판독 메모리 액세스 요청을 위해 구현될 수도 있고, 블록 (1012) 에서, 컴퓨팅 디바이스는 캐시 뱅크 스프레딩 어드레스를 이용하여 캐시 메모리로부터 압축된 데이터를 대신에 판독할 수도 있다.
도 11 은 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩을 구현하기 위한 일 양태의 방법 (1100) 을 나타낸다. 방법 (1100) 은 소프트웨어, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 또는 캐시 메모리 제어기와 같은 범용 또는 전용 하드웨어, 또는 소프트웨어와 하드웨어의 조합을 이용하여 컴퓨팅 디바이스에서 실행될 수도 있다. 블록 (1102) 에서, 컴퓨팅 디바이스는 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청에 대해 캐시 뱅크 스프레딩 어드레스를 결정할 수도 있다. 일 양태에서, 컴퓨팅 디바이스는 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청의 물리적 어드레스를, 이미 결정된 뱅크 스프레딩 어드레스와 물리적 어드레스를 상관짓는 저장된 데이터 구조에 대해 비교할 수도 있다. 상술된 바와 같이, 상술된 바와 같이, 다양한 상황들은 캐시 뱅크 스프레딩 어드레스가 압축된 데이터에 대한 기입 메모리 캐시 액세스 요청과 같이 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청 전에 결정되는 것으로 이끌 수도 있다. 일 양태에서, 뱅크 스프레딩 어드레스는 압축된 데이터의 저장을 위한 물리적 어드레스 지정들의 그룹에 대해 캐시 뱅크 스프레딩 어드레스들을 사전-계산하기 위한 것과 같이, 압축된 데이터에 대한 기입 메모리 캐시 액세스 요청 전에도 결정될 수도 있다. 일 양태에서, 캐시 뱅크 스프레딩 어드레스는 압축된 데이터에 대한 판독 캐시 메모리 액세스 요청에 응답하여 상술된 바와 같이 결정될 수도 있다.
블록 (1104) 에서, 컴퓨팅 디바이스는 결정된 캐시 뱅크 스프레딩 어드레스에서 저장된 압축된 판독 데이터를 취출 (retrieve) 할 수도 있다. 블록 (1106) 에서, 컴퓨팅 디바이스는 SoC 의 서브시스템들 중 하나 또는 프로세서와 같은, 압축된 판독 데이터를 요청한 클라이언트에게 압축된 판독 데이터를 리턴할 수도 있다.
(도 1 내지 도 3b 및 도 8 내지 도 11 에 대해 상기 논의된 양태들을 비제한적으로 포함하는) 다양한 양태들이 도 12 내지 도 14 에서 도시된 예들, 다양한 컴퓨팅 디바이스들 상에서 구현될 수도 있다.
도 12 는 다양한 양태들과의 사용에 적합한 예시적인 모바일 컴퓨팅 디바이스를 예시한다. 모바일 컴퓨팅 디바이스 (1200) 는 터치스크린 제어기 (1204) 및 내부 메모리 (1206) 에 커플링된 프로세서 (1202) 를 포함할 수도 있다. 프로세서 (1202) 는 일반적인 또는 특정의 프로세싱 태스크들에 대해 지정된 하나 이상의 멀티코어 집적 회로들일 수도 있다. 내부 메모리 (1206) 는 휘발성 또는 비-휘발성 메모리일 수도 있고, 또한 보안 및/또는 암호화된 메모리, 또는 비보안 및/또는 비암호화된 메모리, 또는 이들의 임의의 조합일 수도 있다. 레버리징될 수 있는 메모리 타입들의 예들은 DDR, LPDDR, GDDR, WIDEIO, RAM, SRAM, DRAM, P-RAM, R-RAM, M-RAM, STT-RAM, 및 임베디드 DRAM 을 포함할 수 있지만 이에 제한되지는 않는다. 터치스크린 제어기 (1204) 및 프로세서 (1202) 는 또한, 터치스크린 패널 (1212), 예컨대 저항성-감지 터치스크린, 용량성-감지 터치스크린, 적외선 감지 터치스크린 등에 커플링될 수도 있다. 부가적으로, 컴퓨팅 디바이스 (1200) 의 디스플레이는 터치 스크린 능력을 가질 필요는 없다.
모바일 컴퓨팅 디바이스 (1200) 는 하나 이상의 무선 신호 트랜시버들 (1208)(예를 들어, 피넛 (Peanut), 블루투스, 지그비, Wi-Fi, RF 라디오) 및 서로에 및/또는 프로세서 (1202) 에 커플링된, 통신을 감지 및 수신하기 위한 안테나 (1210) 를 가질 수도 있다. 트랜시버들 (1208) 및 안테나 (1210) 는 다양한 무선 송신 프로토콜 스택들/인터페이스들을 구현하도록 전술된 회로와 사용될 수도 있다. 모바일 컴퓨팅 디바이스 (1200) 는 셀룰러 네트워크를 통해 통신을 인에이블하고 프로세서에 커플링되는 셀룰러 네트워크 무선 모뎀 칩 (1216) 을 포함할 수도 있다.
모바일 컴퓨팅 디바이스 (1200) 는 프로세서 (1202) 에 커플링된 주변 디바이스 접속 인터페이스 (1218) 를 포함할 수도 있다. 주변 디바이스 접속 인터페이스 (1218) 는 하나의 타입의 접속을 수락하도록 단수로 구성될 수도 있고, 또는 다양한 타입들의 물리적 및 통신 접속들, 공동 또는 사설, 예컨대 USB, 파이어와이어 (Fire Wire), 썬더볼트 (Thunderbolt), 또는 PCIe 를 수락하도록 구성될 수도 있다. 주변 디바이스 접속 인터페이스 (1218) 는 또한, 유사하게 구성된 주변 디바이스 접속 포트 (미도시) 에 커플링될 수도 있다.
모바일 컴퓨팅 디바이스 (1200) 은 또한, 오디오 출력들을 제공하기 위한 스피커들 (1214) 를 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1200) 는 또한, 본원에 논의된 컴포넌트들의 전부 또는 일부를 포함하기 위한, 플라스틱, 금속, 또는 재료들의 조합으로 구성된 하우징 (1220) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1200) 는 프로세서 (1202) 에 커플링된 전원 (1222), 예컨대 일회용 또는 재충전 가능한 배터리를 포함할 수도 있다. 재충전 가능한 배터리는 또한, 모바일 컴퓨팅 디바이스 (1200) 외부의 소스로부터 충전 전류를 수신하도록 주변 디바이스 접속 포트에 커플링될 수도 있다. 모바일 컴퓨팅 디바이스 (1200) 는 또한, 사용자 입력들을 수신하기 위한 물리적 버튼 (1224) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1200) 는 또한, 모바일 컴퓨팅 디바이스 (1200) 를 턴 온 및 턴 오프하기 위한 전력 버튼 (1226) 을 포함할 수도 있다.
전술된 각종 양태들은 또한, 도 13 에 예시된 랩톱 컴퓨터 (1300) 와 같은 다양한 모바일 컴퓨팅 디바이스들 내에서 구현될 수도 있다. 많은 랩톱 컴퓨터들은 컴퓨터의 포인팅 디바이스로서 역할을 하는 터치패드 터치 면 (1317) 을 포함하고, 따라서 터치 스크린 디스플레이가 장착된 컴퓨팅 디바이스들 상에서 구현된 그리고 전술된 것들과 유사한 드래그, 스크롤, 및 플릭 제스처들을 수신할 수도 있다. 랩톱 컴퓨터 (1300) 는 통상적으로, 플래시 메모리의 디스크 드라이브 (1313) 와 같은 대용량 비휘발성 메모리 및 휘발성 메모리 (1312) 에 커플링된 프로세서 (1311) 를 포함할 것이다. 부가적으로, 컴퓨터 (1300) 는 프로세서 (1311) 에 커플링된 무선 데이터 링크에 접속된 셀룰러 전화 트랜시버 (1316) 및/또는 전자기 방사를 전송 및 수신하기 위한 하나 이상의 안테나 (1308) 를 가질 수도 있다. 컴퓨터 (1300) 는 또한, 프로세서 (1311) 에 커플링된 컴팩트 디스크 (CD) 드라이브 (1315) 및 플로피 디스크 드라이브 (1314) 를 포함할 수도 있다. 노트북 구성에서, 컴퓨터 하우징은 모두 프로세서 (1311) 에 커플링된 터치패드 (1317), 키보드 (1318), 및 디스플레이 (1319) 를 포함한다. 컴퓨팅 디바이스의 다른 구성들은, 각종 양태들과 관련되어 사용될 수도 있는, 잘 알려진 바와 같이 (예를 들어, USB 입력을 통해) 프로세서에 커플링된 컴퓨터 마우스 또는 트랙볼을 포함할 수도 있다.
다양한 양태들은 또한, 서버 캐시 메모리에서 데이터를 압축하기 위해 다양한 상용가능한 서버들 중 어느 것에서 구현될 수도 있다. 예시적인 서버는 도 14 에 도시된다. 이러한 서버 (1400) 는 통상적으로, 휘발성 메모리 (1402) 및 대용량 비휘발성 메모리, 예컨대 디스크 드라이버 (1404) 에 커플링된 하나 이상의 멀티-코어 프로세서 어셈블리들 (1401) 을 포함한다. 도 14 에 예시된 바와 같이, 멀티-코어 프로세서 어셈블리들 (1401) 은 이들을 어셈블리의 랙들 안으로 삽입함으로써 서버 (1400) 에 추가될 수도 있다. 서버 (1400) 는 또한, 프로세서 (1401) 에 커플링된 플로피 디스크 드라이브, 컴팩트 디스크 (CD) 또는 DVD 디스크 드라이브 (1406) 를 포함할 수도 있다. 서버 (1400) 는 또한, 다른 브로드캐스트 시스템 컴퓨터들 및 서버들에 커플링된 로컬 영역 네트워크, 인터넷, 공중 교환 전화 네트워크, 및/또는 셀룰러 데이터 네트워크 (예를 들어, CDMA, TDMA, GSM, PCS, 3G, 4G, LTE, 또는 임의의 다른 타입의 셀룰러 데이터 네트워크) 와 같은, 네트워크 (1405) 와의 네트워크 인터페이스 접속들을 확립하기 위해 멀티-코어 프로세서 어셈블리들 (1401) 에 커플링된 네트워크 액세스 포트들 (1403) 을 포함할 수도 있다.
다양한 양태들의 동작들을 수행하기 위해 프로그래밍가능 프로세서 상에서의 실행을 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드" 는 고레벨 프로그래밍 언어, 예컨대 C, C++, C#, 스몰토크, 자바, 자바스크립트, 비주얼 베이직, 구조화 질의 언어 (예를 들어, Transact-SQL), 펄 (Perl), 또는 다양한 다른 프로그래밍 언어들로 기입될 수도 있다. 본 명세서에서 사용된 바와 같이 컴퓨터 판독가능 저장 매체 상에 저장된 프로그램 코드 또는 프로그램들은, 그 포맷이 프로세서에 의해 이해 가능한 머신 언어 코드 (예컨대, 오브젝트 코드) 를 지칭할 수도 있다.
많은 컴퓨팅 디바이스들 운영 시스템 커널들은 사용자 공간 (여기서, 비-권한 코드가 실행) 및 커널 공간 (여기서, 권한 코드가 실행) 으로 구성된다. 이 분리는, 커널 공간의 일부인 코드가 GPL 라이센싱되어야 하는 반면에, 사용자-공간에서 실행되는 코드는 GPL 라이센싱되지 않을 수도 있는 안드로이드 및 다른 일반 공중 라이센스 (general public license; GPL) 환경들에서 특히 중요하다. 여기서 논의된 다양한 소프트웨어 컴포넌트들/모듈들은, 다르게 명확하게 언급되지 않으면 커널 공간이나 사용자 공간에서 구현될 수도 있는 것으로 이해되어야 한다.
상기의 방법 설명들 및 프로세스 흐름도들은 단지 예시적인 예들로서 제공되고, 다양한 양태들의 동작들이 제시된 순서로 수행되어야 함을 요구하거나 암시하는 것으로 의도되지는 않는다. 당업자에 의해 인지되는 바와 같이, 상기의 양태들에서의 동작들의 순서는 임의의 순서로 수행될 수도 있다. "그 후에", "그러면", 다음으로" 등과 같은 단어들은 동작들의 순서를 제한하도록 의도되지 않으며; 이들 단어들은 단지 방법들의 설명을 통해 독자를 가이드하는데 사용된다. 또한, 예를 들어, 관사 "하나 (a)", "한 (an)", 또는 "그 (the)" 를 사용하여 단수형으로 엘리먼트들을 청구하는 임의의 참조는 엘리먼트를 단수형으로 제한하는 것으로서 해석되지 않는다.
다양한 양태들과 연관되어 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 동작들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 양자 모두의 조합들로서 구현될 수도 있다. 하드웨어와 소프트웨어의 이러한 상호교환성을 명확하게 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 동작들이 그들의 기능성에 대해 일반적으로 전술되었다. 그러한 기능이 하드웨어 또는 소프트웨어로 구현되는지 여부는 특정 애플리케이션 및 전체 시스템에 부과되는 설계 제약들에 의존한다. 당업자는, 설명된 기능성을 각각의 특정 애플리케이션에 대해 다양한 방식으로 구현할 수도 있지만, 이러한 구현 결정들은 본 발명의 범위를 벗어나게 하는 것으로 이해되어서는 안된다.
본원에서 개시된 양태들과 연계하여 설명된 다양한 예시적인 로직들, 논리 블록들, 모듈들, 및 회로들은 범용 프로세서, 디지털 신호 프로세서 (digital signal processor; DSP), 주문형 집적 회로 (application specific integrated circuit; ASIC), 필드 프로그래밍가능 게이트 어레이 (field programmable gate array; FPGA) 또는 다른 프로그래밍가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본원에 설명된 기능들을 수행하도록 설계된 것들의 임의의 조합으로 구현되거나 수행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 대안에서, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 프로세서는 또한, 컴퓨팅 디바이스들의 조합, 예를 들어 DSP와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 연계한 하나 이상의 마이크로프로세서들, 또는 임의의 다른 그러한 구성으로 구현될 수도 있다. 대안으로, 일부 동작들 또는 방법들은 주어진 기능에 특정한 회로부에 의해 수행될 수도 있다.
하나 이상의 양태들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현된 경우, 기능들은 비일시적 컴퓨터 판독가능 매체 또는 비일시적 프로세서 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 본원에 설명된 방법 또는 알고리즘의 동작들은 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체 상에 상주할 수도 있는 프로세서 실행가능 소프트웨어 모듈들로 구현될 수도 있다. 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체는 컴퓨터 또는 프로세서에 의해 액세스될 수도 있는 임의의 저장 매체일 수도 있다. 비제한적인 예로서, 이러한 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 매체는 RAM, ROM, EEPROM, 플래시 메모리, CD-ROM 또는 다른 광학 디스크 저장 디바이스, 자기 디스크 저장 디바이스 또는 다른 자기 저장 디바이스들, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 저장하는데 사용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 본원에서 사용된 디스크 (disk) 와 디스크 (disc) 는, 컴팩트 디스크 (CD), 레이저 디스크, 광학 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서 디스크 (disk) 는 통상 자기적으로 데이터를 재생하고, 디스크 (disc) 는 레이저를 이용하여 광학적으로 데이터를 재생한다. 상기의 조합들이 또한, 비일시적 컴퓨터 판독가능 및 프로세서 판독가능 매체의 범위 내에 포함된다. 부가적으로, 방법 또는 알고리즘의 동작들은 컴퓨터 프로그램 제품에 포함될 수도 있는 유형의, 비일시적 프로세서 판독가능 매체 및/또는 컴퓨터 판독가능 매체 상의 코드들 및/또는 명령들의 하나 또는 임의의 조합 또는 세트로서 상주할 수도 있다.
개시된 양태들의 상기 설명들은 임의의 당업자가 본 발명을 실시하거나 사용하는 것을 가능하게 하도록 하기 위해 제공된다. 이들 양태들에 대한 다양한 변형들이 당업자에게는 자명할 것이고, 본원에 정의된 일반적인 원리들은 본 발명의 취지 또는 범위를 벗어나지 않으면서 다른 양태들에 적용될 수도 있다. 따라서, 본 발명은 본원에 나타낸 양태들에 제한되도록 의도된 것은 아니며 본원의 개시된 원리들과 신규의 특성들 및 다음의 청구항들과 일치하는 광의의 범위를 따르기 위한 것이다.
Claims (30)
- 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법으로서,
캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 단계; 및
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 1 항에 있어서,
압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크의 캐시 라인 상에 들어가기에 맞는지 여부를 결정하는 단계를 더 포함하고,
상기 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 단계는, 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 상기 하나 이상의 뱅크 선택 비트들을 회복시키는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 2 항에 있어서,
상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 단계는, 상기 압축된 데이터의 압축비가 2:1 압축비 이상인지 여부를 결정하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 2 항에 있어서,
상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 단계는, 상기 압축된 데이터의 사이즈가 상기 캐시 메모리 디바이스의 캐시 라인의 사이즈 이하인지 여부를 결정하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 2 항에 있어서,
상기 압축된 데이터가 상기 캐시 메모리 디바이스의 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 단계는,
캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 단계;
상기 캐시 뱅크 스프레딩 함수를 실행하는 단계;
캐시 뱅크 스프레딩 값을 리턴하는 단계; 및
상기 하나 이상의 뱅크 선택 비트들을 상기 캐시 뱅크 스프레딩 값으로 대체하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 5 항에 있어서,
상기 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 단계는, 상기 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들로서 상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 보존된 비트들의 복수의 최하위 비트들을 선택하는 단계를 포함하고; 그리고
상기 캐시 뱅크 스프레딩 함수를 실행하는 단계는, 상기 오퍼랜드들과의 배타적 OR 오퍼레이터를 이용하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 5 항에 있어서,
상기 캐시 뱅크 스프레딩 함수를 실행하는 단계는, 논리 연산, 산술 연산 중 하나를 이용하는 것, 랜덤 값을 선택하는 것, 테이블로부터 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스와 연관된 상기 캐시 뱅크 스프레딩 어드레스를 선택하는 것을 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 1 항에 있어서,
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 단계는,
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크에 압축된 데이터를 기입하는 단계; 및
상기 캐시 메모리 액세스 요청의 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 1 캐시 뱅크로부터 상기 압축된 데이터를 판독하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 제 1 항에 있어서,
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 단계는, 상기 캐시 뱅크 스프레딩 어드레스에 의해 표시된 캐시 메모리 디바이스의 물리적 어드레스에서 상기 압축된 데이터에 대한 상기 캐시 메모리 액세스 요청을 실행하는 단계를 포함하는, 컴퓨팅 디바이스 상에서 압축된 데이터에 대한 캐시 메모리 액세스 요청들을 실행하는 방법. - 컴퓨팅 디바이스로서,
프로세서;
상기 프로세서에 통신가능하게 연결된 뱅크 스프레딩 함수 컴포넌트로서, 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것을 포함하는 동작들을 수행하도록 구성되는, 상기 뱅크 스프레딩 함수 컴포넌트;
상기 뱅크 스프레딩 함수 컴포넌트에 통신가능하게 연결된 캐시 메모리 제어기로서, 상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 것을 포함하는 동작들을 수행하도록 구성되는, 상기 캐시 메모리 제어기; 및
상기 캐시 메모리 제어기에 통신가능하게 연결된 캐시 메모리를 포함하는, 컴퓨팅 디바이스. - 제 10 항에 있어서,
상기 뱅크 스프레딩 함수 컴포넌트는, 압축된 데이터가 캐시 메모리의 단일 캐시 뱅크의 캐시 라인 상에 들어가기에 맞는지 여부를 결정하는 것을 더 포함하는 동작들을 수행하도록 구성되고; 그리고
상기 뱅크 스프레딩 함수 컴포넌트는, 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것이, 상기 압축된 데이터가 상기 캐시 메모리의 단일 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 상기 하나 이상의 뱅크 선택 비트들을 회복시키는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 제 11 항에 있어서,
상기 뱅크 스프레딩 함수 컴포넌트는, 상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것이, 상기 압축된 데이터의 압축비가 2:1 압축비 이상인지 여부를 결정하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 제 11 항에 있어서,
상기 뱅크 스프레딩 함수 컴포넌트는, 상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것이, 상기 압축된 데이터의 사이즈가 상기 캐시 메모리의 캐시 라인의 사이즈 이하인지 여부를 결정하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 제 11 항에 있어서,
상기 뱅크 스프레딩 함수 컴포넌트는, 상기 압축된 데이터가 상기 캐시 메모리의 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것이,
캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 것;
상기 캐시 뱅크 스프레딩 함수를 실행하는 것;
캐시 뱅크 스프레딩 값을 리턴하는 것; 및
상기 하나 이상의 뱅크 선택 비트들을 상기 캐시 뱅크 스프레딩 값으로 대체하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 제 14 항에 있어서,
상기 뱅크 스프레딩 함수 컴포넌트는,
캐시 뱅크 스프레딩 함수를 실행하는 것이, 오퍼랜드들과의 배타적 OR 오퍼레이터, 논리 연산, 산술 연산 중 하나를 이용하는 것, 랜덤 값을 선택하는 것, 테이블로부터 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스와 연관된 상기 캐시 뱅크 스프레딩 어드레스를 선택하는 것을 포함하고; 그리고
상기 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 것이, 상기 오퍼랜드들과의 배타적 OR 오퍼레이터를 이용하는 상기 캐시 뱅크 스프레딩 함수에 대한 상기 오퍼랜드들로서 상기 캐시 메모리 액세스 요청의 상기 캐시 메모리의 상기 물리적 어드레스의 보존된 비트들의 복수의 최하위 비트들을 선택하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 제 10 항에 있어서,
상기 캐시 메모리 제어기는, 상기 캐시 메모리에서의 상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 것이,
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크에 압축된 데이터를 기입하는 것; 및
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 1 캐시 뱅크로부터 상기 압축된 데이터를 판독하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스. - 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체로서,
상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금,
캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것; 및
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 것
을 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 17 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크의 캐시 라인 상에 들어가기에 맞는지 여부를 결정하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되고,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것이, 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 상기 하나 이상의 뱅크 선택 비트들을 회복시키는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 18 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것이, 상기 압축된 데이터의 압축비가 2:1 압축비 이상인지 여부를 결정하는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 18 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 것이, 상기 압축된 데이터의 사이즈가 상기 캐시 메모리 디바이스의 캐시 라인의 사이즈 이하인지 여부를 결정하는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 18 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 것이,
캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 것;
상기 캐시 뱅크 스프레딩 함수를 실행하는 것;
캐시 뱅크 스프레딩 값을 리턴하는 것; 및
상기 하나 이상의 뱅크 선택 비트들을 상기 캐시 뱅크 스프레딩 값으로 대체하는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 21 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금,
캐시 뱅크 스프레딩 함수를 실행하는 것이, 오퍼랜드들과의 배타적 OR 오퍼레이터, 논리 연산, 산술 연산 중 하나를 이용하는 것, 랜덤 값을 선택하는 것, 테이블로부터 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스와 연관된 상기 캐시 뱅크 스프레딩 어드레스를 선택하는 것을 포함하고; 그리고
상기 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 것이, 상기 오퍼랜드들과의 배타적 OR 오퍼레이터를 이용하는 상기 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들로서 상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 보존된 비트들의 복수의 최하위 비트들을 선택하는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 제 17 항에 있어서,
저장된 상기 프로세서-실행가능한 명령들은, 프로세서, 뱅크 스프레딩 함수 컴포넌트, 및 캐시 메모리 제어기로 하여금, 상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 것이,
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크에 압축된 데이터를 기입하는 것; 및
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 1 캐시 뱅크로부터 상기 압축된 데이터를 판독하는 것을 포함하도록 하는 동작들을 수행하게 하도록 구성되는, 프로세서-실행가능한 명령들을 저장한 비일시적 프로세서-판독가능 매체. - 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 수단; 및
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 수단을 포함하는, 컴퓨팅 디바이스. - 제 24 항에 있어서,
압축된 데이터가 캐시 메모리 디바이스의 단일 캐시 뱅크의 캐시 라인 상에 들어가기에 맞는지 여부를 결정하는 수단을 더 포함하고,
상기 캐시 뱅크 스프레딩 어드레스를 생성하는 캐시 메모리 액세스 요청의 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 수단은, 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 상기 하나 이상의 뱅크 선택 비트들을 회복시키는 수단을 포함하는, 컴퓨팅 디바이스. - 제 25 항에 있어서,
상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 수단은, 상기 압축된 데이터의 압축비가 2:1 압축비 이상인지 여부를 결정하는 수단을 포함하는, 컴퓨팅 디바이스. - 제 25 항에 있어서,
상기 캐시 메모리 액세스 요청의 상기 압축된 데이터가 상기 캐시 메모리 디바이스의 단일 캐시 뱅크 상에 들어가기에 맞는지 여부를 결정하는 수단은, 상기 압축된 데이터의 사이즈가 상기 캐시 메모리 디바이스의 캐시 라인의 사이즈 이하인지 여부를 결정하는 수단을 포함하는, 컴퓨팅 디바이스. - 제 25 항에 있어서,
상기 압축된 데이터가 상기 캐시 메모리 디바이스의 캐시 뱅크 상에 들어가기에 맞다고 결정하는 것에 응답하여 상기 캐시 뱅크 스프레딩 어드레스를 생성하는 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들을 회복시키는 수단은,
캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 수단;
상기 캐시 뱅크 스프레딩 함수를 실행하는 수단;
캐시 뱅크 스프레딩 값을 리턴하는 수단; 및
상기 하나 이상의 뱅크 선택 비트들을 상기 캐시 뱅크 스프레딩 값으로 대체하는 수단을 포함하는, 컴퓨팅 디바이스. - 제 28 항에 있어서,
캐시 뱅크 스프레딩 함수를 실행하는 수단은, 오퍼랜드들과의 배타적 OR 오퍼레이터, 논리 연산, 산술 연산 중 하나를 이용하는 것, 랜덤 값을 선택하는 것, 테이블로부터 상기 캐시 메모리 액세스 요청의 상기 물리적 어드레스와 연관된 상기 캐시 뱅크 스프레딩 어드레스를 선택하는 것을 위한 수단을 포함하고; 그리고
상기 캐시 뱅크 스프레딩 함수에 대한 입력들을 선택하는 수단은, 상기 오퍼랜드들과의 배타적 OR 오퍼레이터를 이용하는 상기 캐시 뱅크 스프레딩 함수에 대한 오퍼랜드들로서 상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 보존된 비트들의 복수의 최하위 비트들을 선택하는 수단을 포함하는, 컴퓨팅 디바이스. - 제 24 항에 있어서,
상기 캐시 뱅크 스프레딩 어드레스에서 상기 캐시 메모리 액세스 요청을 실행하는 수단은,
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 제 1 캐시 뱅크에 압축된 데이터를 기입하는 수단; 및
상기 캐시 메모리 액세스 요청의 상기 캐시 메모리 디바이스의 상기 물리적 어드레스의 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 2 캐시 뱅크와는 상이한 상기 캐시 뱅크 스프레딩 어드레스의 회복된 상기 하나 이상의 뱅크 선택 비트들에 의해 표시된 상기 제 1 캐시 뱅크로부터 상기 압축된 데이터를 판독하는 수단을 포함하는, 컴퓨팅 디바이스.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/483,902 | 2014-09-11 | ||
US14/483,902 US9355038B2 (en) | 2014-09-11 | 2014-09-11 | Cache bank spreading for compression algorithms |
PCT/US2015/041781 WO2016039866A1 (en) | 2014-09-11 | 2015-07-23 | Cache bank spreading for compression algorithms |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20170053630A true KR20170053630A (ko) | 2017-05-16 |
Family
ID=53783380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020177006694A KR20170053630A (ko) | 2014-09-11 | 2015-07-23 | 압축 알고리즘들을 위한 캐시 뱅크 스프레딩 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9355038B2 (ko) |
EP (1) | EP3191967B1 (ko) |
JP (1) | JP2017532657A (ko) |
KR (1) | KR20170053630A (ko) |
CN (1) | CN106687937B (ko) |
WO (1) | WO2016039866A1 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9514047B2 (en) * | 2014-12-17 | 2016-12-06 | Intel Corporation | Apparatus and method to dynamically expand associativity of a cache memory |
US10191850B2 (en) | 2016-03-31 | 2019-01-29 | Qualcomm Incorporated | Providing memory bandwidth compression using multiple last-level cache (LLC) lines in a central processing unit (CPU)-based system |
US10176090B2 (en) | 2016-09-15 | 2019-01-08 | Qualcomm Incorporated | Providing memory bandwidth compression using adaptive compression in central processing unit (CPU)-based systems |
US10445261B2 (en) | 2016-12-30 | 2019-10-15 | Intel Corporation | System memory having point-to-point link that transports compressed traffic |
US10503652B2 (en) * | 2017-04-01 | 2019-12-10 | Intel Corporation | Sector cache for compression |
US10609172B1 (en) * | 2017-04-27 | 2020-03-31 | Chicago Mercantile Exchange Inc. | Adaptive compression of stored data |
US12105716B2 (en) * | 2017-06-23 | 2024-10-01 | Xilinx, Inc. | Parallel compute offload to database accelerator |
US11048419B2 (en) * | 2019-01-30 | 2021-06-29 | EMC IP Holding Company LLC | Adaptively over-allocating storage space for compressed data |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5956744A (en) | 1995-09-08 | 1999-09-21 | Texas Instruments Incorporated | Memory configuration cache with multilevel hierarchy least recently used cache entry replacement |
JPH10232838A (ja) * | 1996-11-05 | 1998-09-02 | Hitachi Ltd | ディスク記憶システム |
US6115787A (en) * | 1996-11-05 | 2000-09-05 | Hitachi, Ltd. | Disc storage system having cache memory which stores compressed data |
CN1081361C (zh) * | 1997-11-06 | 2002-03-20 | 中国科学院计算技术研究所 | 高速缓冲存储器系统中的地址映射变换技术与装置 |
IL150556A0 (en) | 2000-01-03 | 2003-02-12 | Efeckta Technologies Corp | Efficient and lossless conversion for transmission or storage of data |
US6307790B1 (en) * | 2000-08-30 | 2001-10-23 | Micron Technology, Inc. | Read compression in a memory |
US6820182B1 (en) * | 2000-10-18 | 2004-11-16 | International Business Machines Corporation | Support for exhaustion recovery in a data processing system with memory mirroring |
US7266651B1 (en) | 2004-09-07 | 2007-09-04 | Sun Microsystems, Inc. | Method for in-place memory interleaving and de-interleaving |
US8443162B2 (en) * | 2005-01-21 | 2013-05-14 | Qualcomm Incorporated | Methods and apparatus for dynamically managing banked memory |
US7627735B2 (en) * | 2005-10-21 | 2009-12-01 | Intel Corporation | Implementing vector memory operations |
US7705753B2 (en) | 2005-10-22 | 2010-04-27 | Sytex, Inc. | Methods, systems and computer-readable media for compressing data |
US8078791B1 (en) | 2007-04-16 | 2011-12-13 | Juniper Networks, Inc. | Ordering refresh requests to memory |
JP4653830B2 (ja) * | 2008-09-19 | 2011-03-16 | 株式会社東芝 | 命令キャッシュシステム |
US8700862B2 (en) * | 2008-12-03 | 2014-04-15 | Nvidia Corporation | Compression status bit cache and backing store |
US8627041B2 (en) | 2009-10-09 | 2014-01-07 | Nvidia Corporation | Efficient line and page organization for compression status bit caching |
US8918897B2 (en) | 2009-11-24 | 2014-12-23 | Cleversafe, Inc. | Dispersed storage network data slice integrity verification |
CN102129873B (zh) * | 2011-03-29 | 2012-07-04 | 西安交通大学 | 提高计算机末级高速缓存可靠性的数据压缩装置及其方法 |
US20130265305A1 (en) * | 2012-04-04 | 2013-10-10 | Jon N. Hasselgren | Compressed Depth Cache |
US8767501B2 (en) * | 2012-07-17 | 2014-07-01 | International Business Machines Corporation | Self-reconfigurable address decoder for associative index extended caches |
US9026747B2 (en) * | 2012-08-16 | 2015-05-05 | Broadcom Corporation | Memory device with a logical-to-physical bank mapping cache |
-
2014
- 2014-09-11 US US14/483,902 patent/US9355038B2/en not_active Expired - Fee Related
-
2015
- 2015-07-23 KR KR1020177006694A patent/KR20170053630A/ko unknown
- 2015-07-23 CN CN201580048563.0A patent/CN106687937B/zh active Active
- 2015-07-23 EP EP15747325.7A patent/EP3191967B1/en active Active
- 2015-07-23 WO PCT/US2015/041781 patent/WO2016039866A1/en active Application Filing
- 2015-07-23 JP JP2017513216A patent/JP2017532657A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
CN106687937B (zh) | 2020-06-23 |
EP3191967A1 (en) | 2017-07-19 |
US9355038B2 (en) | 2016-05-31 |
EP3191967B1 (en) | 2018-12-26 |
WO2016039866A1 (en) | 2016-03-17 |
CN106687937A (zh) | 2017-05-17 |
JP2017532657A (ja) | 2017-11-02 |
US20160077973A1 (en) | 2016-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20170053630A (ko) | 압축 알고리즘들을 위한 캐시 뱅크 스프레딩 | |
CN106537360B (zh) | 用于具有动态分区的共享高速缓存的方法和装置 | |
US9652152B2 (en) | Efficient decompression locality system for demand paging | |
US11025271B2 (en) | Compression of high dynamic ratio fields for machine learning | |
US20190073305A1 (en) | Reuse Aware Cache Line Insertion And Victim Selection In Large Cache Memory | |
US9612971B2 (en) | Supplemental write cache command for bandwidth compression | |
US9858196B2 (en) | Power aware padding | |
JP6297208B2 (ja) | システムオンチップ用のメモリを拡張するためのシステムおよび方法 | |
US10642493B2 (en) | Mobile device and data management method of the same | |
US9971549B2 (en) | Method of operating a memory device | |
US9600420B2 (en) | Reducing decompression time without impacting compression ratio | |
US9880930B2 (en) | Method for operating controller and method for operating device including the same | |
CN112654965A (zh) | 动态模块的外部分页和交换 | |
JP2018511111A (ja) | ビクティムキャッシュモードを向上させるためのプロセススケジューリング | |
KR20230162778A (ko) | 심층 신경망 가중치들을 위한 압축 기법 | |
CN110832462B (zh) | 反向平铺 |