KR101699673B1 - 프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛 - Google Patents

프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛 Download PDF

Info

Publication number
KR101699673B1
KR101699673B1 KR1020167003786A KR20167003786A KR101699673B1 KR 101699673 B1 KR101699673 B1 KR 101699673B1 KR 1020167003786 A KR1020167003786 A KR 1020167003786A KR 20167003786 A KR20167003786 A KR 20167003786A KR 101699673 B1 KR101699673 B1 KR 101699673B1
Authority
KR
South Korea
Prior art keywords
access
prefetch
map
memory
cache
Prior art date
Application number
KR1020167003786A
Other languages
English (en)
Other versions
KR20160033154A (ko
Inventor
스테판 지. 마이어
제라드 알. 윌리암스
하리 에스. 카난
파블로스 코나스
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20160033154A publication Critical patent/KR20160033154A/ko
Application granted granted Critical
Publication of KR101699673B1 publication Critical patent/KR101699673B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch
    • Y02B60/1225
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

실시예에서, 프로세서는 몇몇 캐시 블록들에 대한 와일드 카드들을 패턴들이 포함할 수 있는 액세스 맵-패턴 매치(AMPM)-기반 프리페처를 구현할 수 있다. 와일드 카드는 해당 캐시 블록에 대한 임의의 액세스와 매칭할 수 있다(예컨대, 무 액세스(no access), 디맨드 액세스, 프리페치, 성공적인 프리페치, 기타 등등). 더욱이, 불규칙적인 스트라이드들을 갖춘 패턴들 및/또는 불규칙적인 액세스 패턴들은 매칭 패턴들에 포함될 수 있고, 프리페치 발생을 위해 검출될 수 있다. 실시예에서, AMPM 프리페처는 대량 스트리밍 프리페치들에 대한 사슬형 액세스 맵을 구현할 수 있다. 스트림이 검출되는 경우, AMPM 프리페처는 스트림에 대한 한 쌍의 맵 엔트리(map entry)들을 할당할 수 있고, 스트림 내의 차후의 액세스 맵 영역들에 대해 상기 한 쌍을 재사용할 수 있다. 몇몇 실시예들에서, 품질 계수는 각각의 액세스 맵에 연관될 수 있고, 프리페치 발생의 속도를 제어할 수 있다.

Description

프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛{ACCESS MAP-PATTERN MATCH BASED PREFETCH UNIT FOR A PROCESSOR}
본 발명은 프로세서들에서 프리페치(prefetch) 메커니즘들에 관한 것이다.
프로세서들은 보다 높은 동작 주파수들뿐만 아니라, 보다 높은 평균 수의 클록 사이클당 실행된 명령어들(IPC)로 계속해서 만들어져야 한다. 반면에, 메모리 레이턴시(memory latency)는 매우 느린 속도로 감소될 뿐이다. 이에 따라서, 프로세서들은 종종 정지되어 메모리로부터 명령어들 및/또는 데이터를 대기한다. 성능을 개선시키기 위해, 프로세서들은 하나 이상의 캐싱 레벨들을 통상적으로 포함한다. 캐시에 저장된 데이터는 메모리로부터의 데이터보다 매우 낮은 레이턴시로 이용가능할 수 있다. 이에 따라서, 캐시 히트(cache hit)들은 낮은 레이턴시로 제공될 수 있고, 프로세서들의 성능을 개선시킬 수 있다. 캐시 미스(cache miss)들은 메모리로부터 페칭되어 보다 높은 메모리 레이턴시들을 초래한다.
효과적인 메모리 레이턴시를 훨씬 더 감소시키려는 시도로, 프로세서들은 프리페칭을 구현할 수 있다. 일반적으로, 프리페칭은 프로세서가 곧 액세싱할 필요가 있을 어느 캐시 블록들을 예측하는 것, 및 프로세서 내의 명령어 코드 실행을 통해 발생 중인 그러한 액세스들에 앞서, 캐시 블록들에 대한 메모리 판독을 개시하는 것을 수반한다. 프로세서에 의해 추후에 액세싱되는 캐시 블록들을 프리페칭이 성공적으로 판독한 경우, 메모리 레이턴시는, 액세스들이 캐시 미스들 대신에 캐시 히트들이기 때문에, 감소된다. 반면에, 부정확한 프리페칭은 유용한 데이터로 하여금 캐시로부터 소거되도록 할 수 있고, 부정확하게 프리페칭된 데이터는 액세싱되지 않아, 성능을 감소시킨다. 추가로, 성능이 악영향을 받지 않거나 조금(small amount) 개선될지라도, 프리페칭을 수행하기 위해 프로세서에 의해 소비된 과잉 파워는 정당화될 수 없다. 특히, (예컨대, 배터리로부터) 이용가능한 에너지가 제한되는 휴대용 디바이스들에서, 과잉 파워 소비는 배터리 수명을 감소시킬 수 있다.
실시예에서, 프로세서는 프리페칭 정확성을 개선시키고, 그리고/또는 파워 소비를 감소시키기 위해 설계된 특징들을 갖춘 액세스 맵-패턴 매치(access map-pattern match: AMPM)-기반 프리페처를 구현할 수 있다. 실시예에서, 액세스 맵들에 매칭된 액세스 패턴들은 몇몇 캐시 블록들에 대한 와일드 카드(wild card)들을 패턴에 포함할 수 있다. 와일드 카드는 해당 캐시 블록에 대한 임의의 액세스와 매칭할 수 있다(예컨대, 무 액세스(no access), 디맨드 액세스, 프리페치, 성공적인 프리페치, 기타 등등). 비순차적(out-of-order) 실행을 구현하는 실시예들은 본래의 코드 시퀀스와는 다른 순서들로, 또는 심지어 프로세서 내의 다른 명령어들의 실행에 의존한 서로 다른 실행들에 관한 서로 다른 순서들로, 캐시 액세스들을 발생시킬 수 있다. 이러한 변화들은, 와일드 카드들이 걸러낼 수 있는 액세스 맵들에서 "잡음"을 효과적으로 생성한다. 추가로, 와일드 카드들은, 코드 시퀀스가 특이한 패턴으로 캐시 블록들을 액세싱하지만 궁극적으로 캐시 블록들의 규칙적인 패턴을 액세싱할 시에, 사용될 수 있다. 더욱이, 몇몇 실시예들에서, 불규칙적인 스트라이드(stride)들을 갖춘 패턴들 및/또는 불규칙적인 액세스 패턴들은 포함될 수 있고, 프리페치 발생에 대해 검출될 수 있다.
실시예에서, AMPM 프리페처는 대량 스트리밍 프리페치들에 대한 사슬형(chained) 액세스 맵을 구현할 수 있다. 스트림이 검출되는 경우, AMPM 프리페처는 스트림에 대한 한 쌍의 맵 엔트리(map entry)들을 할당할 수 있고, 스트림 내의 차후의 액세스 맵 영역들에 대해 상기 한 쌍을 재사용할 수 있다. 그러한 특징들은 대량의 스트림이 많은 엔트리들을 AMPM 프리페처에 중복기입하는 것을 방지할 수 있고, 이로써 스트림에 관련되지 않은 잠재적으로 유용한 다른 액세스 맵들은 보유될 수 있다.
몇몇 실시예들에서, 품질 계수(quality factor)는 각각의 액세스 맵과 연관될 수 있다. 품질 계수는 매칭된 패턴이 실제로 액세스 맵에서 액세스들을 얼마나 양호하게 예측하는지에 대한 표시(indication)일 수 있다. 품질 계수는, 프리페칭이 바람직할 수 있을 만큼 정확하게 되지 않을 시에 프리페치 발생의 속도를 제어하기 위해 사용될 수 있다.
하기의 상세한 설명은 첨부 도면들을 참조하여, 이제 도면들이 간단히 기술된다.
도 1은 프로세서의 일 실시예의 블록 다이어그램이다.
도 2는 도 1에 도시된 프리페치 유닛의 일 실시예의 블록 다이어그램이다.
도 3은 매칭될 예시 패턴들을 예시한 다이어그램이다.
도 4는 와일드 카드를 포함한 패턴 및 매칭 패턴들을 예시한 다이어그램이다.
도 5는 도 2에 도시된 프리페치 유닛의 일 실시예의 동작을 예시한 플로차트이다.
도 6은 스트림을 사슬형태로 묶기 위해 연결될 수 있는 한 쌍의 액세스 맵 엔트리들의 일 실시예를 예시한 블록 다이어그램이다.
도 7은 스트림을 사슬형태로 묶기 위해 도 2에 도시된 프리페치 유닛의 일 실시예의 동작을 예시한 플로차트이다.
도 8은 품질 계수의 일 실시예를 예시한 블록 다이어그램이다.
도 9는 품질 계수를 사용하기 위해, 도 2에 도시된 프리페치 유닛의 일 실시예의 동작을 예시한 플로차트이다.
도 10은 시스템의 일 실시예를 예시한 블록 다이어그램이다.
본 발명이 다양한 수정들 및 대안적인 형태들에 민감하지만, 그의 특정 실시예들은 도면들에서 예시로 도시되고, 본 명세서에서 상세하게 기술될 것이다. 그러나, 그에 대한 도면 및 상세한 설명은 본 발명을 개시된 특정 형태로 제한하도록 의도되는 것이 아니며, 반대로, 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 사상 및 범주 내에 있는 모든 수정들, 등가들 및 대안들을 포괄하려는 의도로 이해하여야 한다. 본 명세서에서 사용되는 표제들은 오직 구성을 위한 것이며 설명의 범주를 제한하기 위해 사용되는 것으로 여겨지지 않는다. 본 출원 전반에 걸쳐 사용되는 바와 같이, "일 수 있다(may)"라는 단어는 의무적인 의미(즉, "이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, "포함하다(include, includes)" 및 "포함하는(including)"이라는 단어는 포함하지만 이로 제한되지 않음을 의미한다.
다양한 유닛들, 회로들 또는 기타 컴포넌트들이 과제 또는 과제들을 수행하도록 "구성"되는 것으로 기술될 수 있다. 그러한 맥락에서, "~하도록 구성되는"은 동작 동안에 과제 또는 과제들을 수행하는 "회로를 가진"을 일반적으로 의미하는 구조의 광의의 설명이다. 이와 같이, 유닛/회로/컴포넌트는 유닛/회로/컴포넌트가 현재 온(on) 상태가 아닐 시에도 과제를 수행하도록 구성될 수 있다. 일반적으로, "~하도록 구성되는"에 대응하는 구조를 형성하는 회로는 하드웨어 회로들을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 과제 또는 과제들을 수행할 시에 편의상 설명에 기술될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다. 하나 이상의 과제들을 수행하도록 구성된 유닛/회로/컴포넌트를 언급하는 것은 35 U.S.C. § 112, 6항의 유닛/회로/컴포넌트에 대한 해석을 적용하지 않고자 명백히 의도하는 것이다.
본 명세서는 "일 실시예" 또는 "실시예"에 대한 참조를 포함한다. 본 명세서에서 명시적으로 부인하지 않는다면, 임의의 특징들의 조합을 포함하는 실시예들이 일반적으로 고려되더라도, "일 실시예에서" 또는 "하나의 실시예에서" 구문의 표현은 반드시 동일한 실시예를 지칭하지 않는다. 특정 특징들, 구조들 또는 특성들이 본원과 일관성을 유지하면서 임의의 적합한 방식으로 조합될 수 있다.
프로세서 개요
이제, 도 1을 참조하면, 프로세서(10)의 일 실시예의 블록 다이어그램이 도시되어 있다. 도 1의 실시예에서, 프로세서(10)는, 명령어 캐시(14)를 포함할 수 있는 페치/디코드/맵/이슈(fetch/decode/map/issue: FDMI) 유닛(12)을 포함할 수 있다. 프로세서(10)는 하나 이상의 실행 유닛들(16A-16N), 하나 이상의 로드/저장 유닛(load/store unit: LSU)들(18A-18N), 프리페치 유닛(20), 로드 큐(load queue: LQ)(22), 저장 큐(store queue: SQ)(24), 프리페치 큐(prefetch queue: PQ)(26), 멀티플렉서(multiplexor: mux)(28), 데이터 캐시(30), 및 외부 인터페이스 유닛(32)을 더 포함할 수 있다. 데이터 캐시(30) 및 FDMI 유닛(12)은, 프로세서(10) 외부와(예컨대, 레벨 2(L2) 캐시와 그리고/또는 프로세서(10)를 포함한 시스템의 다른 컴포넌트들과) 통신하기 위해 결합된 외부 인터페이스 유닛(32)에 결합된다. FDMI 유닛(12)은 실행 유닛들(16A-16N) 및 LSU들(18A-18N)에 결합된다. LSU들(18A-18N)은 로드 큐(22) 및 저장 큐(24)에 결합되고, 프리페치 유닛(20)은 데이터 캐시(30) 및 프리페치 큐(26)에 결합된다. LSU들(18A-18N), 로드 큐(22), 저장 큐(24), 및 프리페치 큐(26)는, 데이터 캐시(30) 및 프리페치 유닛(20)에 결합된 mux(28)에 결합된다.
FDMI 유닛(12)은 프로세서(10)에 의해 실행용 명령어들을 페칭하고, 명령어들을 실행용 op들로 디코딩하고, 비순차적 및/또는 추론적(speculative) 실행을 허용하기 위해 op들을 추론적 리소스들(예컨대, 재명명 레지스터(rename register)들)에 맵핑하며, 그리고 실행용 op들을 실행 유닛들(16A-16N) 및/또는 LSU들(18A-18N)에 이슈잉하도록 구성될 수 있다. 특히 더, FDMI 유닛(12)은 (외부 인터페이스 유닛(32)을 통해) 메모리로부터 이전에 페칭된 명령어들을 명령어 캐시(14)에서 캐싱하도록 구성될 수 있고, 프로세서(10)용 명령어들의 추론적 경로를 추론적으로 페칭하도록 구성될 수 있다. FDMI 유닛(12)은 페치 경로를 예측하기 위해 다양한 예측 구조들을 구현할 수 있다. 예를 들어, 그 다음의(next) 페치 예측기는 이전에 실행된 명령어들에 기반하여, 페치 어드레스들을 예측하기 위해 사용될 수 있다. 다양한 유형들의 브랜치(branch) 예측기들은 그 다음의 페치 예측을 검증하기 위해 사용될 수 있거나, 또는 그 다음의 페치 예측기가 사용되지 않는 경우 그 다음의 페치 어드레스들을 예측하기 위해 사용될 수 있다. FDMI 유닛(12)은 명령어들을 명령어 연산들로 디코딩하도록 구성될 수 있다. 몇몇 실시예들에서, 주어진 명령어는 명령어의 복잡성에 의존하여, 하나 이상의 명령어 연산들로 디코딩될 수 있다. 특히, 복잡한 명령어들은 몇몇 실시예들에서 마이크로코딩될 수 있다. 그러한 실시예들에서, 명령어에 대한 마이크로코드 루틴은 명령어 연산들로 코딩될 수 있다. 다른 실시예들에서, 프로세서(10)에 의해 구현된 명령어 세트 아키텍처 내의 명령어 각각은 단일 명령어 연산으로 디코딩될 수 있고, 이로써, 명령어 연산은 명령어와 기본적으로 같은 뜻일 수 있다(그러나, 그는 디코더에 의한 형태로 수정될 수 있음). 용어 "명령어 연산"은 보다 간략하게 본 명세서에서 "op"로 지칭될 수 있다. op들은 명령어들에 사용된 아키텍처의 레지스터들로부터의 물리적 레지스터들에 맵핑되고, 그 후에 이슈를 위해 스케줄링될 수 있다. 스케줄링은 다양한 실시예들에서, 각각의 op에 대한 피연산자들의 이용도에 기반하여, 스케줄러에 중앙집중되거나, 또는 레저베이션 스테이션(reservation station)들에 분산될 수 있다. 레지스터 파일 또는 파일들(도 1에 미도시)은 프로세서(10)의 물리적 레지스터들을 구현할 수 있다. 실시예에서 서로 다른 피연산자 유형들(예컨대 정수, 미디어, 부동 소수점, 기타 등등)에 대한 별개의 물리적 레지스터들이 있을 수 있다. 다른 실시예들에서, 물리적 레지스터들은 피연산자 유형들을 통해 공유될 수 있다.
실행 유닛들(16A-16N)은 다양한 실시예들에서 임의의 유형들의 실행 유닛들을 포함할 수 있다. 예를 들어, 실행 유닛들(16A-16N)은 정수, 부동 소수점, 및/또는 미디어 실행 유닛들을 포함할 수 있다. 정수 실행 유닛들은 정수 op들을 실행하도록 구성될 수 있다. 일반적으로, 정수 op는 정수 피연산자들에 관한 정의 동작(예컨대 산술의, 논리의, 시프트/회전의, 기타 등등)을 수행하는 op이다. 정수들은 각각의 값이 수학적 정수에 대응하는 수치들일 수 있다. 정수 실행 유닛들은 브랜치 op들을 프로세싱하기 위해 브랜치 프로세싱 하드웨어를 포함할 수 있거나, 또는 별개의 브랜치 실행 유닛들이 있을 수 있다.
부동 소수점 실행 유닛들은 부동 소수점 op들을 실행하도록 구성될 수 있다. 일반적으로, 부동 소수점 op들은 부동 소수점 피연산자들에 관해 동작하기 위해 정의되었던 op들일 수 있다. 부동 소수점 피연산자는, 지수가 있는 밑(a base raised to an exponent power)으로 나타내고 가수(mantissa)(또는 유효수(significand))로 곱해진 피연산자이다. 지수, 피연산자의 기호, 및 가수/유효수는 피연산자에서 명확하게 나타날 수 있고, 밑은 내포될 수 있다(예컨대, 실시예에서, 밑이 2임).
미디어 실행 유닛들은 미디어 op들을 실행하도록 구성될 수 있다. 미디어 op들은 미디어 데이터(예컨대, 이미지 데이터 그 예로서 픽셀들, 오디오 데이터, 기타 등등)를 프로세싱하기 위해 정의되었던 op들일 수 있다. 미디어 프로세싱은 상당한 양의 데이터에 관해 동일한 프로세싱을 수행함으로써 특징지어질 수 있고, 이때 각각의 데이터는 상대적으로 작은 값이다(예컨대, 정수가 32 비트 내지 64 비트인 것에 비해, 8 비트, 또는 16 비트임). 이로써, 미디어 op들은 단일 명령어-다수 데이터(single instruction-multiple data: SIMD), 또는 다수의 미디어 데이터를 나타내는 피연산자에 관한 벡터 연산들을 종종 포함한다.
이로써, 각각의 실행 유닛은, 다루기 위해 특정 실행 유닛이 정의된 op들에 대해 정의된 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있다. 실행 유닛들은, 각각의 실행 유닛이 다른 실행 유닛들과의 의존성 없이 그 실행 유닛에 이슈잉된 op에 관해 동작되도록 구성될 수 있다는 점에서, 일반적으로 서로 독립적일 수 있다. 또 다른 방식으로 보면, 각각의 실행 유닛은 op들을 실행하는 독립적인 파이프(independent pipe)일 수 있다.
LSU들(18A-18N)은 로드/저장 op들을 실행하도록 구성될 수 있다. 일반적으로, 로드 op는 메모리 위치로부터 레지스터로 데이터의 전송을 명시할 수 있는 반면, 저장 op는 레지스터로부터 메모리 위치로 데이터의 전송을 명시할 수 있다. LSU들(18A-18N)은 로드/저장 op들의 다양한 어드레스 피연산자들로부터의 가상 어드레스 발생을 수행하도록 구성될 수 있고, op들을 (mux(28)를 통하여) 데이터 캐시(30)로, 그리고 로드 큐(22)/저장 큐(24)로 전송하도록 구성될 수 있다.
로드 큐(22)는 LSU들(18A-18N)에 의해 실행되었던 로드들을 큐잉하도록 구성될 수 있다. 로드들은, 그들이 데이터 캐시(30)에서 미싱되는 경우, 큐잉되어 캐시 충전물들을 대기할 수 있다(그리고/또는 TLB는, 변환(translation)이 가능해진 경우 변환 충전물들을 미싱함). 로드들은 또한 리즌들(reasons)을 정리하기 위해 큐잉될 수 있다. 유사하게, 저장 큐(24)는 LSU들(18A-18N)에 의해 실행되었던 저장들을 큐잉하도록 구성될 수 있다. 저장들은 데이터 소스 피연산자로부터 저장 데이터를 대기하기 위해, 그리고/또는 비-추론적/퇴각 상태(retired state)를 대기하여 데이터 캐시(30) 및/또는 메모리를 업데이트하기 위해, 캐시/TLB 충전물들에 대해 큐잉될 수 있다. 다른 실시예들에서, 조합된 로드/저장 큐가 사용될 수 있다.
프리페치 큐(26)는 데이터 캐시(30)를 액세싱하기 위해 프리페치 유닛(20)에 의해 발생된 프리페치 요청들을 저장할 수 있다. 프리페치 요청들은 프리페치 유닛(20)에 의해 발생되어 LSU들(18A-18N)에 의해 실행된 로드/저장 op들을 관측할 수 있다. 이로써, 프리페치 요청들은, 명령어 코드가 프로세서(10)에 의해 실행되어 실제로 데이터를 요청하기에 앞서 발생된 예측형 판독 요청(predicted read request)들일 수 있다. 그에 반해서, 로드/저장 op들에 의한 캐시 요청들은 디맨드 페치들로 지칭될 수 있는데, 이는 그들이 예측되는 것보다는 오히려, 코드의 실행에 의해 직접 명시될 수 있기 때문이다.
실시예에서, 프리페치 유닛(20)은 다양한 향상들을 가진 AMPM 프리페처의 구현예일 수 있다. AMPM 프리페처는 이하에서 보다 상세하게 기술된다. 프리페치 유닛(20)은 프리페치 요청들을 발생시키기 위하여, 데이터 캐시(30)로부터의 캐시 히트/미스 상황과 함께, 데이터 캐시(30)를 액세싱하는 mux(28)를 통해 선택된 디맨드 페치들/프리페치 요청들을 모니터링할 수 있다.
데이터 캐시(30)는 임의의 용량 및 구성을 가질 수 있다. 예를 들어, 세트 결합적인(associative), 완전 결합적인, 그리고 직접 맵핑된 구성들은 다양한 실시예들에서 사용될 수 있다. 데이터 캐시(30)는 캐시 블록들에 데이터를 캐싱하도록 구성될 수 있고, 이때 캐시 블록은, 한 단위로서 캐시에 할당 및 할당해제된 공간인 연속 메모리 위치(contiguous memory location)들로부터의 한 세트의 바이트들이다. 캐시 블록들은 캐시 블록 경계(boundary)에 정렬될 수 있다(예컨대, 32 바이트 캐시 블록은 32 바이트 경계에 정렬될 수 있고, 64 바이트 캐시 블록은 64 바이트 경계에 정렬될 수 있음, 기타 등등). 이로써, 바이트의 어드레스는 캐시 오프셋 부분(어드레스의 최하위 N 비트(least N significant bit)들, 이때 2N은 캐시 블록의 크기임) 및 캐시 태그 부분(잔류 어드레스 비트들)로 나뉠 수 있다. 실시예에서, 데이터 캐시(30)는 가상적으로 인덱싱될 수 있고, 변환 색인 버퍼(translation lookaside buffer: TLB, 도 1에서 미도시됨)는 가상 어드레스를 메모리 내의 메모리 위치의 물리적 어드레스로 변환시키기 위해 병행하여 액세싱될 수 있다.
데이터 캐시(30) 및 명령어 캐시(14) 내의 캐시 미스들, 나아가 변환 액세스들, 비-캐시가능한 액세스들, 기타 등등은 외부 인터페이스 유닛(32)과 통신될 수 있다. 외부 인터페이스 유닛(32)은 프로세서(10)에서 발생된 다양한 액세스들에 응답하여, 외부 컴포넌트들로 트랜잭션(transaction)들을 전송하도록 구성될 수 있다. 트랜잭션들이 전송되는 외부 인터페이스는 임의의 형태를 가질 수 있다. 예를 들어, 외부 인터페이스는 공유 버스, 패킷화된 트랜잭션들과의 점대점 상호연결, 완전하거나 부분적인 크로스바, 기타 등등일 수 있다.
mux(28)는, 캐시 액세스들을 데이터 캐시(30)로 전송하기 위해 그의 다양한 입력들(LSU들(18A-18N), 로드 큐(22), 저장 큐(24), 및 프리페치 큐(26)) 중에서 선택할 수 있다. mux(28)에 대한 제어 논리(도 1에서는 미도시됨)는 임의의 원하는 중재 기법(scheme)을 사용하여 요청들 중에서 중재할 수 있다.
임의의 수 및 유형의 실행 유닛들(16A-16N)이 하나의 실행 유닛을 가진 실시예들, 및 다수의 실행 유닛들을 가진 실시예들을 포함한 다양한 실시예들에 포함될 수 있음을 유의한다. 임의의 수의 LSU들(18A-18N)은 또한 하나의 LSU 및 다수의 LSU들을 포함한 다양한 실시예들에 포함될 수 있다. 추가로, 로드 유닛들(로드 op들만 실행함) 및/또는 저장 유닛들(저장 op들만 실행함)을 포함한 실시예들은 LSU들이 있든 없든 포함될 수 있다.
프리페치 유닛
이제, 도 2를 참조하면, 프리페치 유닛(20)의 일 실시예의 블록 다이어그램이 도시된다. 예시된 실시예에서, 프리페치 유닛(20)은 액세스 맵 메모리(40), 시프터(42), 액세스 패턴 메모리(44), 및 제어 회로(46)를 포함한다. 액세스 맵 메모리(40) 및 시프터(42)는 데이터 캐시(30) 액세스의 가상 어드레스(또는 도 2에 도시된 바와 같이, 그의 부분들)를 수신하기 위해 결합되고, 액세스 맵 메모리(40)의 출력은 시프터(42)에 결합된다. 제어 회로(46)는 프리페치 요청들을 프리페치 큐(26)에 제공하기 위해, 그리고 데이터 캐시(30)로부터 캐시 히트/미스 정보를 수신하기 위해, 액세스 맵 메모리(40)에, 액세스 패턴 메모리(44)에 결합된다. 시프터(42)는 액세스 패턴 메모리(44)에 결합된다. 예시된 실시예에서, 액세스 맵 메모리(40)는 태그 메모리(40A) 및 맵 메모리(40B)를 포함한다.
프리페치 유닛(20)은 AMPM 프리페처의 구현예일 수 있다. 액세스 맵 메모리(40)는 가상 어드레스 공간에 다양한 액세스 영역들을 포괄하는 다수의 액세스 맵들을 저장할 수 있다. 액세스 맵들은 각자의 액세스 영역들에서 캐시 블록들에 대한 액세스들을 나타낼 수 있다. 또 다른 액세스가 액세스 맵 메모리(40) 내의 액세스 맵 상에 히팅할 시에, 액세스 맵은 출력되어 액세스 패턴 메모리(44)에 저장된 다양한 액세스 패턴들과 비교될 수 있다. 주어진 액세스 패턴과 액세스 맵 사이의 매치가 검출되는 경우, 매칭 패턴에 의해 나타난 프리페치 요청들이 발생될 수 있다. 액세스 패턴들은 사용 동안 프로세서(10)에 의해 실행될 것이라 여겨진 다양한 코드 시퀀스들에 관해 수행된 추적 분석으로부터 결정될 수 있다. 디맨드 액세스들의 소정의 패턴 및/또는 성공적인 프리페치들이 주어지면, 예를 들어, 하나 이상의 프리페치들은 추적 분석에 기반하여 예측될 수 있다. 액세스 패턴들은 프로세서(10)의 설계 동안 식별되고 액세스 패턴 메모리(44)로 하드코딩될 수 있다. 대안으로, 액세스 패턴들 중 몇몇 또는 모두는 액세스 패턴 메모리(44)에서 프로그램가능할 수 있고, 프로세서(10)의 초기화 동안(예컨대, 리셋에서) 또는 편리한 시간에(at some other convenient time), 액세스 패턴 메모리(44)에 기입될 수 있다.
상기에서 언급된 바와 같이, 액세스 맵(40)은 가상 어드레스 공간에 다양한 액세스 영역들을 포괄하는 다수의 액세스 맵들을 저장할 수 있다. 액세스 영역은, 다수의 연속 캐시 블록들을 포함한 가상 어드레스 공간의 영역일 수 있다. 액세스 영역은 액세스 영역의 크기에 의해 결정된 경계에 정렬될 수 있다. 예를 들어, 액세스 영역들 각각이 2 킬로바이트(kB)를 포괄하는 경우, 액세스 영역들은 2 kB 경계들에 정렬된다. 액세스 영역들은 임의의 원하는 크기일 수 있다. 일반적으로, 액세스 맵은, 액세스 영역 내의 캐시 블록들에 대해 일어났던 다양한 캐시 액세스들의 기록일 수 있다. 액세스 영역 내의 각각의 캐시 블록은, 일어났던 액세스의 유형을 나타내는 액세스 맵 내의 연관된 심볼을 가질 수 있다. 일 실시예에서, 액세스들은 디맨드-액세싱된 것(심볼 A), 프리페칭된 것(심볼 P), 성공적인 프리페치(심볼 S), 또는 무효한 것(심볼 ".")을 포함할 수 있다. 각각의 심볼은 액세스 맵 내의 캐시 블록을 위해 저장된 값의 서로 다른 코드에 의해 나타날 수 있다. 이로써, 캐시 블록당 2 비트는 상기의 심볼들에 기반하여 저장될 수 있다.
디맨드-액세싱된 캐시 블록은 사전에 프리페칭되었던 것 없이, 액세싱된 캐시 블록일 수 있다. 이로써, 캐시 블록에 대한 로드 또는 저장은 실행되었을 수 있고, 데이터 캐시(30)에서 미싱되었을 수 있다. 프리페칭된 캐시 블록은, 프리페치 요청(프리페치 큐(26)를 통과함)을 발생시킨 프리페치 유닛(20)에 의해 액세싱될 것이라 예측되고 데이터 캐시(30)에 제시된 캐시 블록일 수 있다. 대안으로, 프리페칭된 캐시 블록은 프리페치 큐(26)에 발생 및 삽입된 프리페치 요청을 가졌을 수 있지만, 그러나 데이터 캐시(30)에 제시되었을 수 있거나 제시되지 않았을 수 있다. 성공적으로 프리페칭된 캐시 블록은, 프리페칭되고 차후에 데이터 캐시(30)에 디맨드-액세싱된(이로써, 디맨드 액세스는 데이터 캐시(30)에 히팅됨) 캐시 블록일 수 있다. 이로써, 성공적으로 프리페칭된 캐시 블록은 정확하게 프리페칭된 캐시 블록일 수 있고, 이는 그가 액세싱되기 때문이다. 액세스 맵 내의 무효한 캐시 블록은 액세싱되지 않았던 캐시 블록일 수 있다.
이에 따라서, 데이터 캐시 액세스의 가상 어드레스(VA)(어드레스의 최하위 N 비트들, 비트들 N-1:0을 포함하지 않고, 이때 2N은 캐시 블록의 크기임)는 프리페치 유닛(20)으로 입력될 수 있다. 프리페치 유닛(20)에 제공된 가상 어드레스의 최하위 P-N 비트들은 액세싱되는 중인 캐시 블록에 대한 액세스 맵 내의 오프셋일 수 있다. 이로써, 액세스 맵들은 2P+1 바이트들을 포괄할 수 있다. 가상 어드레스의 나머지, 비트들 M:P+1은 태그 메모리(40A) 내의 태그들과 비교될 수 있는 태그일 수 있다.
태그 메모리(40A)는 다수의 엔트리들을 포함할 수 있고, 각각의 엔트리는 맵 메모리(40B)에 해당 액세스 맵용 태그를 저장한다. 실시예에서, 액세스 맵 메모리(40)는 완전하게 결합될 수 있고, 이로써, 태그 메모리(40A)는 콘텐츠 어드레스가능한 메모리(content addressable memory: CAM)일 수 있다. 액세스 맵 메모리(40)에 입력된 VA 태그와 CAM(40A) 내의 엔트리 사이에 매치가 검출되는 경우(그리고 유효 비트가 설정됨), 히트는 엔트리 상에서 검출된다. 맵 메모리(40B)(예컨대, 랜덤 액세스 메모리, 또는 RAM) 내의 해당 엔트리는 액세스 맵 메모리(40)에 의해 시프터(42)로 출력될 수 있다. 맵 RAM(40B) 내의 엔트리 각각은 액세스 맵(도 2에서 AM으로 표기된, 액세스 영역 내의 캐시 블록 각각에 대한 심볼들)을 포함할 수 있고, 액세스 맵과 연관된 상태(도 2에서 St로 표기됨)를 옵션적으로 포함할 수 있다. 다양한 실시예들에 대한 예시의 상태는 이하에서 보다 상세하게 기술될 것이다.
액세스 패턴 메모리(44) 내의 액세스 패턴들은 액세스 패턴의 거의 중앙에 있을 수 있는 액세스 포인트(access point) 상의 중앙에 위치될 수 있다. 즉, 액세스 포인트는 액세스 패턴의 정확한 중간의 우측 또는 좌측에 대한 하나의 위치일 수 있는데, 이는 액세스 패턴이 짝수의 긴 심볼들일 수 있고, 정확한 중간은 2 개의 심볼들 사이에 있기 때문이다. 액세스 패턴이 홀수의 심볼들인 경우, 액세스 포인트는 패턴의 중앙일 수 있다. 액세스 포인트를 중앙에 위치시킴으로써, 패턴들은 검출될 액세스들의 포워드 및 리버스 패턴들 둘 다를 허용할 수 있다. 포워드 패턴은 액세스 맵 내에 점증적으로 더 커지는 오프셋들로 진행 중일 수 있는 반면(액세스 맵 오프셋을 수로 볼 시에), 리버스 패턴은 점감적으로 더 작아지는 오프셋들로 진행 중일 수 있다. 더욱이, 액세스 포인트의 양 측면들 상의 심볼들에 대한 매치들은 특이한 액세스 패턴들을 포착하기 위해 허용될 수 있다.
이에 따라서, 입력(VA)의 액세스 맵 오프셋에 기반하여, 시프터(42)는 패턴 메모리(44) 내의 액세스 포인트에 액세스 맵의 현재 액세스 포인트를 정렬시키기 위해 액세스 맵을 시프팅시킬 수 있다. 시프팅된 액세스 패턴은, 패턴들과 시프팅된 액세스 패턴을 비교할 수 있는 액세스 패턴 메모리(44)에 제공될 수 있다. 이로써, 몇몇 액세스 패턴들이 하드코딩되고 다른 것들이 프로그램가능한 경우, 액세스 패턴 메모리(44)는 비교 회로를 갖춘 판독 전용 메모리(read-only memory: ROM), CAM, 또는 ROM 및 CAM의 조합일 수 있다. 패턴이 매칭되는 경우, 매칭된 패턴은 액세스 패턴 메모리(44)에 의해 제어 회로(46)로 출력될 수 있다. 제어 회로(46)는 매칭된 패턴에 기반하여 하나 이상의 프리페치 요청들을 발생시키도록 구성될 수 있고, 프리페치 요청들을 프리페치 큐(26)로 전송할 수 있다. 예시된 실시예에서, 액세스 패턴 메모리(44)는 도 2에서 P0 내지 PL로 표기된 L+1 액세스 패턴들을 저장하는 L+1 엔트리들을 포함할 수 있다.
주어진 액세스 맵은 패턴 메모리(44)에서 둘 이상의 패턴과 매칭할 수 있다. 보다 긴 패턴들(최고의 디맨드-액세싱된 및/또는 성공적으로 프리페칭된 캐시 블록들을 가진 패턴들)은 정확한 프리페치들을 발생시킬 가능성이 보다 더 많을 수 있다. 실시예에서, 패턴 메모리(44) 내의 패턴들은 분류될 수 있고, 그 결과 보다 긴 패턴들은 메모리의 가장 근접한 일 말단(예컨대, "상부", 이때 패턴(P0)이 저장되거나, 또는 "하부", 이때 패턴(PL)이 저장됨)이다. 패턴 메모리(44)는, 둘 이상의 매치가 있는 경우, 상부에 가장 근접하거나, 하부에 가장 근접한 매치를 선택하는 우선순위 인코더를 포함할 수 있다. 이러한 방식으로, 매칭된 가장 긴 패턴은 패턴 메모리(44)로부터 자연스럽게 선택되어 제어 회로(46)로 제공될 수 있다.
프리페치 요청들을 발생시키는 것과 더불어, 제어 회로(46)는 액세스 맵 메모리(40) 에서 히팅 액세스 맵을 업데이트하도록 구성될 수 있다. 업데이트는 몇몇 경우들에서, 캐시 히트/미스 결과에 의해 영향을 받을 수 있고, 이로써, 데이터 캐시(30)로부터의 캐시 히트/미스는 제어 회로(46)에 의해 수신될 수 있다. 액세스 맵 메모리(40) 상에 미스가 있을 경우에, 프리페치 유닛(20)은 액세스 맵 엔트리를 가상 어드레스에 할당할 수 있고, 할당된 엔트리에서 액세스 맵을 추적하는 것을 시작할 수 있다.
도 3은 프리페치 유닛의 일 실시예에 따른, 액세스 패턴 메모리(44)에 나타날 수 있는 액세스 패턴들의 다양한 예시들을 예시한다. 액세스 포인트(AP)는 AP의 헤딩 및 액세스 포인트에서의 심볼을 다른 심볼들로부터 분리시킨 2 개의 수직 라인들로 예시된다. 액세스 패턴들은 ".", P, A, 및 S 심볼들(그러나 어떠한 S 심볼들도 도 3의 예시들에 사용되지 않음)을 포함하는, 액세스 맵들에 사용된 동일 세트의 심볼들을 사용할 수 있다.
도시된 제1 패턴은 스트라이드 기반 프리페처에 의해 검출될 수 있는 것과 같은 단순 단위 스트라이드 패턴이다. 이러한 경우에, 패턴은 포워드이고, 이로써, A 심볼들은 좌측 상에 있고 P 심볼들은 우측 상에 있다. 이러한 패턴과 매칭하기 위해, 3 개의 A 심볼들은 액세스 맵에 매칭될 필요가 있을 수 있다. 이러한 패턴 상의 매치가 검출되는 경우, 제어 회로(46)는 2 개의 프리페치 요청들을 발생시키되, 하나는 액세스 포인트 플러스 1의 캐시 라인에서, 그리고 하나는 액세스 포인트 플러스 2의 캐시 라인에서 발생시키도록 구성될 수 있다. 액세스 맵이 이미 1 개의 P를 포함한 경우, 다른 프리페치 요청이 발생될 수 있다. P 둘 다가 이미 액세스 맵에 있는 경우, 어떠한 추가적인 프리페치 요청들도 발생될 수 없다.
도시된 제2 패턴은 비-단위 스트라이드이지만, 그러나 여전히 포워드 방향으로 규칙적인 스트라이드이다. 이러한 예시에서, 스트라이드는 2 개이다. 이러한 패턴 상의 매치가 (3 개의 A들 및 또한 사이에 있는 "." 심볼들과 매칭함으로써) 검출되는 경우, 제어 회로(46)는 2 개의 프리페치 요청들을 발생시키되, 하나는 액세스 포인트 플러스 2의 캐시 라인에서, 그리고 하나는 액세스 포인트 플러스 4의 캐시 라인에서 발생시키도록 구성될 수 있다. 제1 패턴처럼, 하나의 주어진 P가 이미 액세스 맵에 있는 경우, 다른 프리페치 요청이 발생될 수 있고, P 둘 다가 이미 액세스 맵에 있는 경우에는, 어떠한 프리페치 요청들도 발생될 수 없다.
도시된 제3 패턴은 백워드 방향으로 단위 스트라이드 패턴이고, 다시 2 개의 프리페치들은, 패턴이 3 개의 A들에 의해 매칭되는 경우에 발생될 수 있어, 2 개의 프리페치 요청들이 (하나는 액세스 포인트 마이너스 1의 캐시 라인에서, 다른 하나는 액세스 포인트 마이너스 2의 캐시 라인에서) 발생될 수 있다. 제1 패턴처럼, 하나의 주어진 P가 이미 액세스 맵에 있는 경우, 다른 프리페치 요청이 발생될 수 있고, P 둘 다가 이미 액세스 맵에 있는 경우에는, 어떠한 프리페치 요청들도 발생될 수 없다.
도 3에서 첫 번째 3 개의 패턴들은, 스트라이드-기반 프리페처가 검출 가능할 수 있는 패턴들을 예시한다. 그러나, 발생된 프리페치들의 수에 대한 제어는 패턴들을 사용하여 보다 정밀해질 수 있다. 실시예에서, 한 패턴에서 N 개의 매칭 A들 및/또는 S들이 있는 경우, 패턴에서는 N-1 개의 P들이 있을 수 있다. 이로써, 패턴 길이가 길어질수록, 정확한 프리페치들을 발생시키기 위한 패턴에서의 신뢰(confidence)는 증가될 수 있다.
덧붙여, 와일드카드 심볼은 패턴들에 포함될 수 있다. 예를 들어, 도시된 제4 패턴은 도 3에 "*"(예컨대, 참조 번호는 48임)으로 예시된 3 개의 와일드카드 심볼들을 포함할 수 있다. 와일드카드 패턴은 액세스 맵에서 임의의 심볼과 매칭할 수 있다. 와일드카드 패턴들은 실시예에서, 액세스 패턴들의 유연성을 증가시킬 수 있다. 예를 들어, 비순차적 프로세서에서, 디맨드 액세스들은 피연산자 이용도, 실행 리소스 이용도, 및 다른 동적 요인들에 기반하여 다양한 순서들로 일어날 수 있다. 액세스들의 가변 순서는 발명자들이 "잡음 파면(noisy wave front)"이라 지칭하는 잡음을 액세스 포인트 근방에 생성한다. 와일드카드들 없이, 그러한 액세스 맵들을 액세스 패턴들에 정확하게 매칭시키는 것은 보다 복잡해질 수 있다. 다수의 액세스 패턴들은 가능한 순서들 모두, 예를 들어, 메모리의 주어진 크기에 포함될 수 있는 관련없는 액세스 패턴들의 수를 제한하는 것을 포착하기 위해, 포함될 필요가 있을 수 있다.
액세스 패턴들 내의 와일드카드 심볼들이 유용할 수 있는 또 다른 경우는 최종 액세스 패턴들이 규칙적일지라도, (거의 순서대로 실행됨에도 불구하고) 액세스들의 특이한 순서들이 코드에 의해 수행되는 액세스 맵들을 포착하기 위한 것이다(예컨대, 액세스 맵의 범위 내의 캐시 블록들 모두가 터치될 수 있거나, 또는 예측가능한 그룹이 터치될 수 있음). 와일드카드 심볼들은 그러한 경우들에서 특이한 순서의 액세스들에 대해 사용될 수 있다.
일 실시예에서, 와일드카드들을 포함하는 액세스 패턴들은 보다 소수의 P들을 포함할 수 있는데, 이는 패턴 매치의 정확성에서의 신뢰가 그렇게 높지 않을 수 있기 때문이다. 예를 들어, P들이 얼마나 많이 포함된 지를 결정하는데 있어, 액세스 패턴에서는 실제 A들만 카운팅될 수 있다. 대안으로, 와일드카드 심볼들은 감가 가중치(discounted weight)로 카운팅될 수 있다(예컨대 1/2, 1/3, 기타 등등).
언급된 바와 같이, 와일드카드 심볼은 액세스 맵 내의 동일한 포인트에서 임의의 심볼과 매칭할 수 있다. 이에 따라서, 다수의 액세스 맵들은 와일드카드 심볼을 포함한 패턴과 매칭할 수 있다. 도 4는 액세스 패턴 - 1 개의 와일드카드 심볼, 그 액세스 패턴과 매칭할 수 있는 4 개의 액세스 맵들을 갖춤 -의 예시이다.
사용될 수 있는 또 다른 유형의 패턴은 불규칙적인 패턴이다. 도 3에 예시된 마지막 2 개의 패턴들은 불규칙적인 패턴들의 예시들이다. 일반적으로, 불규칙적 패턴은, 예측가능하지만 정확하게 스트라이드로 기술되지 않은 임의의 액세스 패턴일 수 있다. 즉, 실행되는 명령어 코드에 의해 액세싱된 실제 캐시 블록들은 불규칙적으로 간격을 두고 있지만, 그러나 여전히 예측가능하다. 불규칙적 패턴들을 갖춘 액세스 맵들은 패턴 메모리(44)에서 검출가능하게 될 수 있고, 프리페치들에 대해 정확하게 예측될 수 있다. 와일드카드 패턴들은 또한 상기에서 언급된 바와 같이, 불규칙적 패턴들도 검출하는데 도움을 주기 위해 사용될 수 있다.
그 다음으로 도 5를 참조하면, (데이터 캐시(30)를 액세싱하는 어드레스와 병행하여) 프리페치 유닛(20)에 의해 수신된 가상 어드레스에 응답하여, 프리페치 유닛(20), 및 특히 더 제어 회로(46)의 일 실시예의 동작을 예시한 플로차트가 도시된다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프리페치 유닛(20)/제어 회로(46) 내의 결합 논리에 병행하여 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 플로차트 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 프리페치 유닛(20)/제어 회로(46)는 도 5에 도시된 동작을 구현하도록 구성될 수 있다.
가상 어드레스(또는 어드레스의 액세스 맵 태그 부분)는 액세스 맵 메모리(40)에 제시될 수 있다. 가상 어드레스가 액세스 맵 메모리(40)에서 미스인 경우(결정 블록 50, "아니오" 구간), 제어 회로(46)는 가상 어드레스를 포함한 액세스 영역에 대해 액세스 맵 메모리(40)에 엔트리를 할당하도록 구성될 수 있다(블록 52). 임의의 분류의 할당 기법이 사용될 수 있다. 예를 들어, 제어 회로(46)는 액세스 맵 엔트리들에 걸쳐 최소 최근 사용(least recently used: LRU) 데이터를 유지시킬 수 있고, 할당될 어떠한 무효 엔트리들도 없는 경우에는 LRU 엔트리를 교체할 수 있다. 다양한 의사(pseudo)-LRU 기법들이 사용될 수 있거나, 또는 랜덤 교체가 사용될 수 있다. 제어 회로(46)는 액세스 영역의 가상 어드레스(예컨대, VA의 비트들 M:P+1)로 할당된 엔트리의 태그 부분을 (태그 CAM(40A)에서) 초기화할 수 있고, 유효 비트를 설정할 수 있다(블록 54). 추가로, 제어 회로는 액세스 맵 오프셋에 의해 나타난 액세스 포인트에서 A(VA의 비트들 P:N)를 제외하고, 클리어 액세스 맵(예컨대, 모든 무효한 것)으로 엔트리의 액세스 맵 부분을(맵 RAM(40B)에서) 초기화할 수 있다(블록 56). 또한 액세스 맵과 연관된 상태 필드(state field)가 포함된 경우, 초기화될 수 있다.
가상 어드레스가 액세스 맵 메모리(40)에서 히트인 경우(결정 블록 50, "예" 구간), 액세스 맵 메모리(40)는 해당 액세스 맵을 시프터(42)로 출력할 수 있다. 시프터(42)는 액세스 포인트를 정렬시키기 위해 액세스 맵을 시프팅할 수 있다(액세스 영역 내의 액세싱된 캐시 블록에 대한 오프셋 -- 블록 58). 시프터(42)에 의해 출력된 시프팅된 패턴은 액세스 패턴 메모리(44) 내의 액세스 패턴들과 비교될 수 있다. 한 패턴 상에 매치가 있는 경우(결정 블록 60, "예" 구간), 제어 회로(42)는 매칭된 패턴 내의 P들에 기반하여, 그리고 액세스 맵에 기록된 이전 발생된 임의의 프리페치들에 더 기반하여, 하나 이상의 프리페치 요청들을 발생시키도록 구성될 수 있다(블록 62). 즉, 이전에 발생 또는 이슈 프리페치는 다시 발생되지 않을 수 있다.
제어 회로(46)는 또한 액세스 패턴 메모리(44) 내의 패턴을 액세스 맵이 매칭하는지에 관계없이, 액세스 맵 메모리(40)의 히팅 엔트리에서 액세스 맵을 업데이트시킬 수 있다(블록 64). 본 실시예에서, 제어 회로(46)는 현재 액세스, 나아가 임의의 발생된 프리페치 요청들을 나타내기 위해 액세스 맵을 업데이트시킬 수 있다. 액세스 맵이 액세스 포인트에서 무효 심볼(".")을 가지고, 액세스가 디맨드 액세스인 경우, "A" 심볼은 액세스 포인트에서 삽입될 수 있다. 액세스 맵이 액세스 포인트에서 프리페치 심볼("P")을 가지고, 액세스가 데이터 캐시(30)에 히팅하는 디맨드 액세스인 경우, "S" 심볼은 액세스 포인트에서 삽입될 수 있다. 액세스 맵이 액세스 포인트에서 무효 심볼(".")을 가지고, 액세스가 프리페치 요청인 경우, "P" 심볼은 액세스 포인트에서 삽입될 수 있다. 발생된 프리페치들은 액세스 맵 내의 그들 각자의 포인트들에서 나타날 수 있다. 또 다른 실시예에서, 현재 액세스만 액세스 맵에 기록될 수 있고, 프리페치 요청들은 차후에 데이터 캐시(30)에 제시될 시에 기록될 수 있다.
몇몇 실시예들에서, 프리페치 유닛(20)은 액세스들의 대량 스트림을 관리하기 위해 사슬형 엔트리들을 지원할 수 있다. 액세스들의 스트림은 대형 메모리 풋 프린트(예컨대, 2 개의 또는 그 초과의 액세스 맵 영역들)에 걸친 액세싱 데이터인 일련의 관련 액세스들(예컨대, 동일하게 실행되는 쓰레드(thread), 그 예로 코드 내의 루프로부터 발생됨)일 수 있다. 흔하게, 스트림은 데이터를 액세싱하는 풋프린트를 통해 움직일 수 있지만(step), 그러나 때때로는 이전에 방문된 데이터로 되돌아갈 수 없다. 스트림이 다수의 액세스 영역들에 걸쳐 펼쳐진 경우, 스트림은 액세스 맵 메모리(40)에서 다수의 엔트리들을 차지하고, 잠재적으로 다른 유용한 액세스 맵들을 제거할 수 있다. 사슬형 엔트리들은 액세스 맵 메모리(40) 내의 스트림들을 보다 효율적으로 다루기 위해 사용되고, 스트림들에 대해 정확하게 프리페칭하면서 또한 잠재적으로 많은 다른 액세스 맵들을 유지시킬 수 있다. 실시예에서, 스트림은, 액세스 맵 길이와 비교될 수 있는 스트림 임계치에 따라 검출될 수 있다. 스트림 임계치는 고정될 수 있거나, 프로그램가능할 수 있다. 액세스 맵 길이는 액세스 맵에서 적어도 수많은 디맨드-액세싱된 캐시 블록들을 지칭할 수 있고(즉, "A" 심볼들), 몇몇 경우들에서는 또한 성공적인 프리페치들을 더 포함할 수 있다(즉, "S" 심볼들). 유사하게, 액세스 패턴 메모리(44) 내의 액세스 패턴의 패턴 길이는 액세스 맵에서 적어도 수많은 디맨드-액세싱된 캐시 블록들을 지칭할 수 있고(즉, "A" 심볼들), 몇몇 경우들에서는 또한 성공적인 프리페치들을 더 포함할 수 있다(즉, "S" 심볼들).
프리페치 유닛(20)이 스트림을 식별하면, 프리페치 유닛은 사슬형 엔트리를 스트림에 할당할 수 있다. 사슬형 엔트리는 적어도 한 쌍의 엔트리들을 포함할 수 있고, 원하는 경우 충분한 스트림 이력을 보유하기 위해 둘 이상의 쌍을 포함할 수 있다. 그러나, 한 쌍은 본 명세서에서 예시로 사용될 것이다. 한 쌍의 사슬형 엔트리들은 액세스 맵을 추적하기 위해 사용될 수 있고, 스트림을 추적하기 위해 새로운 액세스 맵 엔트리들을 할당하는 대신에, 스트림이 액세스 영역들을 가로질러 진행될 시에 재사용될 수 있다. 이러한 방식으로, 스트림에 의한 액세스 맵 엔트리들의 소비는 제한될 수 있고, 액세스 맵 메모리(40)로부터의 관련없는 액세스 맵들의 변위는 유사하게 제한될 수 있다.
도 6은 한 쌍의 사슬형 엔트리들(70) - 엔트리(Q) 및 엔트리(Q+1) -의 일 실시예의 블록 다이어그램이다. 이로써, 엔트리들은 액세스 맵 메모리(40) 내의 인접한 엔트리들일 수 있다. 다른 실시예들은 인접한 엔트리들을 이용할 필요가 없다. 실시예에서, 메모리(40) 도처에 있는 쌍들의 인접한 엔트리들은 스트림들을 추적하기 위해 사용될 수 있다. 또 다른 실시예에서, 메모리(40) 내의 한 서브세트의 엔트리들은 쌍을 이룰 수 있고, 스트림들을 추적하기 위해 사용될 수 있다. 어느 경우이든, 한 쌍의 엔트리들은, 스트림이 추적되지 않는 중인 경우, 비-스트림 액세스 맵들을 추적하기 위해 개별적으로 사용될 수 있다. 여전히 다른 실시예들에서, 사슬형 엔트리들(70)은 메모리(40) 내의 엔트리들로부터 별개로 구현될 수 있고, 스트림 액세스 맵 추적을 위해서만 사용될 수 있다.
도 6에 도시된 바와 같이, 엔트리(Q)는 유효 비트, 및 엔트리의 태그 부분 내의 VA 태그를 포함할 수 있다. 실시예에서, VA 태그의 최하위 비트(도 2에서 비트 P+1)는, 엔트리가 스트림에 대해 사용 중인 경우, 입력 VA와의 태그 비교들을 위해 무시될 수 있다. 엔트리(Q)는 또한 액세스 맵의 저(low) 부분(비트 P+1이 제로인 부분)을 포함할 수 있다. 고(high) 부분은 엔트리(Q+1)에 저장될 수 있다. 엔트리(Q)에서의 상태는 스트림이 검출되는 것을 나타내기 위해 설정될 수 있는 스트림 비트(Str)를 포함할 수 있고, 방향 비트(D)를 포함할 수 있다. 방향은 스트림이 포워드(수적으로(numerically) 증가하는 어드레스들) 또는 리버스(수적으로 감소하는 어드레스들)인 경우를 나타낼 수 있다. 스트림이 포워드인 경우, 액세스 맵은 고 액세스 맵의 상단 말단을 오버플로잉하여 저 액세스 맵으로 다시 랩핑하는 것(wrapping)으로 여겨질 수 있다. 패턴이 리버스인 경우, 액세스 맵은 저 액세스 맵의 하단 말단을 오버플로잉하여 고 액세스 맵의 상단 말단으로 다시 랩핑하는 것으로 여겨질 수 있다.
제2 엔트리(Q+1)의 태그 필드는 현재 페이지 이후에 그 다음 페이지의 가상 어드레스를 가상 어드레스 공간에 저장하기 위해 사용될 수 있다. 스트림이 포워드인 경우, 그 다음 페이지는 어드레스 공간에서 일 페이지가 보다 많을 수 있거나(예컨대, VA + 1 페이지), 또는 스트림이 리버스인 경우, 어드레스 공간에서 일 페이지가 보다 적을 수 있다(예컨대 VA - 1 페이지). 페이지의 크기는 실시예 간에서 변화될 수 있다. 예를 들어, 4 kB의 페이지 크기들, 4 kB의 배수, 1 메가바이트 (MB), 2 MB, 4MB, 기타 등등이 사용될 수 있거나, 또는 보다 크거나 보다 작은 페이지 크기들이 사용될 수 있다.
도 7은 (데이터 캐시(30)를 액세싱하는 어드레스와 병행하여) 프리페치 유닛(20)에 의해 수신된 가상 어드레스에 대한 액세스 맵 메모리(40) 내의 엔트리 상의 히트에 응답하여, 프리페치 유닛(20), 및 특히 더 제어 회로(46)의 일 실시예의 동작을 예시한 플로차트이다. 예컨대, 도 5에 예시되고 상기에서 논의된 바와 같이, 다른 동작들은 또한 수행될 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프리페치 유닛(20)/제어 회로(46) 내의 결합 논리에 병행하여 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 플로차트 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 프리페치 유닛(20)/제어 회로(46)는 도 7에 도시된 동작을 구현하도록 구성될 수 있다.
제어 회로(46)는, 액세스 맵의 길이가 스트림 임계치보다 큰 지를 결정하여(결정 블록 72), 이로써 스트림을 식별할 수 있다. 그러한 경우(결정 블록 72, "예" 구간), 제어 회로(46)는 쌍을 이룬 엔트리를 현재 엔트리에 할당하도록 구성될 수 있고, 스트림에 대해 쌍을 이룬 엔트리들을 사슬형태로 묶을 수 있다(블록 74). 제어 회로(46)는 쌍을 이룬 엔트리 내의 액세스 맵을 초기화할 수 있고, 검출된 스트림에 기반하여, 현재 엔트리의 상태에 스트리밍 및 방향 필드들을 설정할 수 있다.
제어 회로(46)는 또한, 쌍을 이룬 엔트리들 내의 예전 데이터를 폐기할 시기를 결정하도록 구성될 수 있다. 예전 데이터는, 스트림에 대해 이미 완성되었던 액세스 맵 영역과 관련될 수 있다. 스트림 내의 액세스들이 액세스 맵을 통해 단조로운 패션으로 반드시 진행될 수 없기 때문에, 예전 데이터를 너무 빨리 폐기시키는 것은 프리페치들을 예측하기에 여전히 유용할 수 있는 정보의 손실을 초래할 수 있다. 반면에, 보다 새로운 프리페치들의 정확성에 영향을 미치지 않도록 예전 데이터를 폐기시키는 것은 또한 중요한 요인일 수 있다. 보다 예전의 데이터를 폐기시키는 다양한 기법들이 구현될 수 있다. 보다 예전의 데이터를 폐기시키는 것은 본 명세서에서 데이터를 "재핑하는 것(zapping)"으로 지칭된다.
하나의 기법은 그 엔트리에 제1 새로운 액세스를 기록하는 것에 응답하여, 쌍을 이룬 엔트리들 중 하나에서 액세스 맵을 클리어하는 것일 수 있다(즉, 쌍을 이룬 엔트리들 중 다른 하나의 말단으로부터 랩핑한 이후에). 이러한 기법은 "복귀 재프(zap on return)"로서 지칭될 수 있는데, 이는 보다 예전의 데이터가 랩이 일어날 시에 폐기되기 때문이다. 또 다른 기법은, 캐시 미스가 액세스에 대해 검출되고 그가 액세스 맵 내의 "S" 상태를 히팅할 시에, 데이터를 새로운 데이터로 중복기입하지만, 그러나 단지 (중복기입되지 않았던) 예전 데이터를 재핑하기 위한 것일 수 있다. 또 다른 기법은, 블록의 캐시 상태 내의 변화가 액세스 맵에 반영되는 것을 확보하기 위해, 캐시로부터의 임의의 에빅션들(evictions)이 액세스 맵 메모리(40)에 대해 점검되는 완전 가간섭성(coherent) 기법일 수 있다(예컨대, 에빅션은 무효 심볼로 설정될 수 있음).
제어 회로(46)가 구현된 재프 기법에 따라 재프 조건을 검출하는 경우(결정 블록 76, "예" 구간), 제어 회로(46)는 보다 예전의 데이터를 포함하는 액세스 맵을 클리어하도록 구성될 수 있다(저 또는 고)(블록 78). 액세스 맵을 클리어하는 것은 각각의 캐시 블록에 대한 심볼을 무효로 설정하는 것을 지칭할 수 있다.
주어진 액세스가 상태에서 방향 필드에 의해 나타난 바와 같이, 쌍을 이룬 엔트리들 중 하나의 말단으로부터 오버플로잉되는 경우(결정 블록 80, "예" 구간), 제어 회로(46)는 쌍을 이룬 엔트리들 중 다른 하나의 말단에 랩핑할 수 있다(블록 82). 상기에서 언급된 바와 같이, 몇몇 실시예들에서, 랩은 또한 재프 조건일 수 있고, 랩이 일어나는 액세스 맵으로 하여금 클리어해지도록 할 수 있다.
이전에 언급된 바와 같이, 액세스들의 보다 긴 시퀀스들(및 특히 보다 긴 시퀀스 내의 반복 규칙적 패턴들)은 보다 짧은 시퀀스들 및/또는 보다 덜 규칙적인 패턴들보다 프리페치들을 예측하기에 더 정확해질 수 있다. 이에 따라서, 액세스 패턴 메모리(44) 내의 액세스 패턴들 중 몇몇은 정확성이 높은 프리페치들을 발생시키기 위해 길다. 그러나, 보다 긴 액세스 맵들은 발생하는데 더 오래 걸릴 수 있는데(보다 긴 액세스 패턴들과 매칭하기 위함), 이는 다수의 액세스들이 보다 긴 액세스 맵을 조성하기 위해 기록될 필요가 있기 때문이다. 그러므로, 보다 짧은 액세스 패턴들이 액세스 패턴 메모리(44)에 포함될 수 있다. 보다 짧은 액세스 패턴들은 시퀀스에서 프리페치 요청들을 보다 빨리 발생시키기 위해 (예컨대, 보다 짧은 액세스 맵에 의해) 액세스들의 시퀀스에서 보다 빨리 매칭될 수 있다. 평균적으로, 보다 짧은 패턴들은 정확하게 프리페치들을 예측하는데 있어 합리적으로 양호하게 수행될 수 있다. 그러나, 몇몇 경우들에서, 짧은 액세스 패턴은 효과적이지 않을 수 있다.
몇몇 실시예들에서, 각각의 액세스 맵 엔트리 내의 상태 필드는 품질 계수를 저장할 수 있다. 그러한 엔트리(90)는, 가상 어드레스 태그, 액세스 맵, 및 품질 계수(QF)를 도시한 도 8에서 예시된다. 또한, 그 사슬형 엔트리들을 스트림들에 대해 구현한 실시예들은 도 8에 도시되지 않은, 상태 필드 내의 Str 및 D 비트들도 포함할 수 있다. 품질 계수는 해당 액세스 맵에 대한 프리페칭의 유효성을 측정 또는 추정하는 값일 수 있다. 품질 계수는 유효성이 높지 않을 시에, 프리페칭을 더 제한하거나 방지하기 위해 사용될 수 있다(패턴 그 자체가 이미 제한한 것을 초과). 추가로, 몇몇 실시예들에서, 품질 계수는, 효과적이지만 느리게 소비되고 있는 중인 프리페칭을 "계측(meter)"하기 위해 사용될 수 있다. 즉, 프리페칭을 제한하기 위해 품질 계수를 사용하는 것은, 데이터가 디맨드 페치들에 의해 소비될 시점 가까이에서 전달 중인 프리페칭된 데이터를 초래할 수 있다. 메모리 시스템 내의 메모리 액세스들의 스케줄링은 몇몇 경우들에서 보다 효율적일 수 있는데, 이는 프리페치 트래픽이 덜 간헐적일 수 있고(bursty), 이로써, 메모리 시스템에서의 혼잡이 낮춰질 수 있기 때문이다.
상기에서 언급된 바와 같이, 보다 긴 액세스 패턴들은 프리페치들을 예측하는데 보다 정확해지는 경향이 있을 수 있고, 이로써, 품질 계수는 액세스 맵 길이가 임계치를 초과한 경우 사용될 수 없다. 임계치는 몇몇 실시예들에서 프리페치 유닛에 고정되거나 프로그램가능할 수 있다.
실시예에서, 품질 계수는 토큰-기반 또는 크레디트-기반 메커니즘일 수 있다. 토큰들/크레디트들은 허용가능한 양의 현저한 프리페칭을 나타낼 수 있다. 이에 따라서, 토큰들/크레디트들은, 프리페치 요청이 발생될 시에 소비될 수 있다(그리고 프리페치 요청은, 충분한 토큰들/크레디트들이 이용가능할 경우에만 발생될 수 있음). 성공적인 프리페치는 토큰들/크레디트들을 품질 계수 값으로 되돌릴 수 있고, 시간 경과(passage of time)는 또한 토큰들/크레디트들을 값으로 되돌릴 수 있다. 이에 따라서, 프리페치 요청들이 발생되는 속도는, 프리페치들이 디맨드 페치들에 의해 소비되지 않는 경우, 감소될 수 있다.
도 9는 품질 계수들이 사용될 시에, 액세스 맵에 대한 액세스 패턴 메모리(44)에서의 패턴 매치에 응답하여, 프리페치 유닛(20), 및 특히 더 제어 회로(46)의 일 실시예의 동작을 예시한 플로차트이다. 예컨대, 도 5에 예시되고 상기에서 논의된 바와 같이, 다른 동작은 또한 수행될 수 있다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프리페치 유닛(20)/제어 회로(46) 내의 결합 논리에 병행하여 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 플로차트 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 프리페치 유닛(20)/제어 회로(46)는 도 9에 도시된 동작을 구현하도록 구성될 수 있다.
액세스 맵 길이가 품질 계수 임계치보다 큰 경우(결정 블록 92, "아니오" 구간), 품질 계수는 액세스 맵에 대해 사용되지 않는다. 프리페치 요청(들)은 액세스 맵에 나타난 바와 같이 발생될 수 있다(블록 94). 액세스 맵 길이가 품질 계수 임계치보다 작지만, 그러나 나타난 프리페치 요청들이 이미 발생되었거나 프리페치 요청을 발생시키는데 이용가능한 크레디트들/토큰들이 충분치 않은 경우(결정 블록 92, "예" 구간 및 결정 블록 96, "아니오" 구간 또는 결정 블록 98, "아니오" 구간), 어떠한 프리페치 요청도 발생되지 않는다. 제어 회로(46)는 시간 에이징(aging)/경과에 기반하여, 품질 계수를 업데이트하도록 구성될 수 있다(블록 100). 프리페치 요청(들)이 발생되고 충분한 토큰들/크레디트들이 있는 경우(결정 블록들 92, 96, 및 98, "예" 구간들), 제어 회로(46)는 프리페치 요청 또는 요청들에 대해 크레디트들/토큰들을 소비하기 위해 품질 계수를 업데이트하도록 구성될 수 있고(블록 102), 나타나고 허용된 프리페치 요청(들)을 발생시키도록 구성될 수 있다(블록 94).
추가로, 프리페치가 디맨드 페치에 의해 소비되는 경우(액세스 맵에서 "P" 심볼을 "S" 심볼로 변화시킴 - 결정 블록 104, "예" 구간), 제어 회로는 프리페치 요청에 대해 소비된 크레디트들/토큰들의 수를 복원하기 위해 품질 계수를 업데이트하도록 구성될 수 있다(블록 106).
프리페치 요청에 대해 소비되고, 성공적인 프리페치에 대해 복원된 크레디트들/토큰들의 수, 및 시간 경과로 복원된 크레디트들/토큰들의 수는 다양한 실시예들에서 변화될 수 있다. 일 예시에서, 품질 계수는 100 개의 크레디트들/토큰들로 초기화될 수 있고, 100은 품질 계수에서 최대치일 수 있다. 프리페치 요청은 25 개의 크레디트들/토큰들을 소비할 수 있고, 성공적인 프리페치는 25 개의 크레디트들/토큰들을 복원할 수 있다. 크레디트들/토큰들은 시간 경과 동안 클록 사이클당 하나의 크레디트/토큰의 속도로 복원될 수 있다.
시스템
다음으로 도 10을 참조하면, 시스템(150)의 일 실시예의 블록 다이어그램이 도시된다. 예시된 실시예에서, 시스템(150)은 하나 이상의 주변장치들(154) 및 외부 메모리(158)에 결합된 시스템 온 칩(system on a chip: SOC)(152)의 적어도 하나의 인스터스를 포함한다. SOC(152)에 공급 전압들, 나아가 메모리(158) 및/또는 주변장치들(154)에 하나 이상의 공급 전압들을 공급하는 파워 서플라이(156)가 제공된다. 몇몇 실시예에서, SOC(152)의 둘 이상의 인스턴스가 포함될 수 있다(그리고 둘 이상의 메모리(158) 또한 포함될 수 있다). SOC(152)는 도 1에 예시된 바와 같은 하나 이상의 인스턴스들의 프로세서(10)를 포함할 수 있다.
주변장치들(154)은 시스템(150)의 유형에 의존하여, 임의의 원하는 회로를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(150)은 모바일 디바이스(예컨대, 개인용 휴대 단말기(PDA), 스마트폰, 기타 등등)일 수 있으며, 주변장치들(154)은 다양한 유형의 무선 통신용 디바이스들, 그 예로 WiFi, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템, 기타 등등을 포함할 수 있다. 주변장치들(154)은 또한 RAM 스토리지, 솔리드 스테이트 스토리지 또는 디스크 스토리지를 포함한 추가적인 스토리지를 포함할 수 있다. 주변장치들(154)은 사용자 인터페이스 디바이스들 그 예로 터치 디스플레이 스크린들 또는 멀티터치 디스플레이 스크린들을 포함한 디스플레이 스크린, 키보드 또는 다른 입력 디바이스들, 마이크로폰들, 스피커들, 기타 등등을 포함할 수 있다. 다른 실시예들에서, 시스템(150)은 임의의 유형의 컴퓨팅 시스템(예컨대, 데스크탑 퍼스털 컴퓨터, 랩탑, 워크스테이션, 넷탑, 기타 등등)일 수 있다.
외부 메모리(158)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(158)는 SRAM, 동적 RAM(DRAM) 그 예로 동기 DRAM(SDRAM), 더블 데이터 레이트(DDR, DDR2, DDR3, 기타 등등) SDRAM, RAMBUS DRAM, 저 파워 버전들의 DDR DRAM(예컨대, LPDDR, mDDR, 기타 등등), 기타 등등일 수 있다. 외부 메모리(158)는 메모리 디바이스들이 실장되는 하나 이상의 메모리 모듈들, 그 예로 단일 인라인 메모리 모듈들(SIMM들), 듀얼 인라인 메모리 모듈들(DIMM들), 기타 등등을 포함할 수 있다. 대안으로, 외부 메모리(158)는 칩-온-칩 또는 패키지-온-패키지 구현예로 SOC(10) 상에 실장되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.
상기의 본원이 완전하게 인식된다면, 기술 분야의 통상의 기술자에게 있어 수많은 변화들 및 수정들은 명백해질 것이다. 하기의 청구범위는 모든 그러한 변화들 및 수정들을 망라하는 것으로 해석되는 것으로 의도된다.

Claims (20)

  1. 프리페치(prefetch) 유닛으로서,
    복수의 어드레스들 및 해당 복수의 액세스 맵들을 저장하도록 구성된 제1 메모리 - 상기 복수의 액세스 맵들의 액세스 맵 각각은 상기 복수의 어드레스들 중 해당 어드레스에 연관된 정의 영역 내에 있는 복수의 캐시 블록들에 대한 액세스들을 기록하고, 상기 제1 메모리는, 상기 복수의 어드레스들 중 주어진 어드레스에 연관된 상기 정의 영역 내의 액세스 어드레스에서 데이터 캐시에 대한 액세스에 응답하여, 상기 복수의 액세스 맵들 중 주어진 액세스 맵을 출력하도록 구성됨 -;
    상기 주어진 액세스 맵과 비교될 복수의 액세스 패턴들을 저장하도록 구성된 제2 메모리 - 상기 복수의 액세스 패턴들 중 적어도 제1 액세스 패턴은, 상기 주어진 액세스 맵에서 해당 캐시 블록에서의 임의의 액세스와 매칭하기 위해 정의된 적어도 하나의 와일드 카드(wild card) 심볼을 포함함 -; 및
    상기 와일드 카드 심볼에 상기 해당 캐시 블록에서의 임의의 액세스를 매칭하는 것을 포함하는, 상기 제1 액세스 패턴과 매칭하는 상기 주어진 액세스 맵에 응답하여, 하나 이상의 프리페치 요청들을 발생시키도록 구성된 제어 회로를 포함하는, 프리페치 유닛.
  2. 제1항에 있어서, 상기 제1 액세스 패턴은 디맨드 액세스들에 의해 액세싱된 하나 이상의 캐시 블록들을 나타내는 하나 이상의 액세스 심볼들을 더 포함하는, 프리페치 유닛.
  3. 제1항에 있어서, 상기 제1 액세스 패턴은, 프리페칭되고 차후에 디맨드-액세싱된 하나 이상의 캐시 블록들을 나타내는 하나 이상의 성공적인 프리페치 심볼들을 더 포함하는, 프리페치 유닛.
  4. 제1항에 있어서, 상기 제1 액세스 패턴은 하나 이상의 캐시 블록들에 대한 어떠한 액세스도 없음을 나타내는 하나 이상의 무효 심볼들을 더 포함하는, 프리페치 유닛.
  5. 제1항에 있어서, 상기 복수의 액세스 패턴들 중 제2 액세스 패턴은 스트라이드(stride)에 의해 정확하게 기술될 수 없는 불규칙적 패턴인, 프리페치 유닛.
  6. 제1항에 있어서, 상기 제어 회로는 복수의 액세스 영역들을 가로지르는 액세스들의 스트림을 검출하도록 구성되고, 상기 제어 회로는 상기 스트림을 추적하기 위해 상기 제1 메모리에 한 쌍의 액세스 맵들을 할당하도록 구성되고, 상기 제어 회로는 새로운 액세스 맵들을 상기 스트림에 할당하는 대신에, 상기 스트림이 액세스 영역 경계(boundary)들을 가로지를 시에 상기 한 쌍의 액세스 맵들을 재-사용하도록 구성되는, 프리페치 유닛.
  7. 제6항에 있어서, 상기 제어 회로는, 상기 스트림이 상기 액세스 영역 경계를 가로지를 시에, 상기 한 쌍의 액세스 맵들 중 하나를 재-사용할 시 상기 한 쌍 중 하나로부터 이전의 데이터를 클리어하도록 구성되는, 프리페치 유닛.
  8. 제1항에 있어서, 상기 제어 회로는 주어진 액세스 맵에 대한 프리페칭의 정확성을 나타내는 품질 계수(quality factor)를 추적하도록 구성되고, 상기 제어 회로는 상기 품질 계수에 응답하여 발생된 수많은 프리페치들을 제어하도록 구성되는, 프리페치 유닛.
  9. 제8항에 있어서, 상기 제어 회로는, 임계치를 초과하는 상기 액세스 맵의 길이에 응답하여, 상기 품질 계수를 무시(override)하도록 구성되는, 프리페치 유닛.
  10. 제8항에 있어서, 상기 품질 계수는 크레디트 카운트(credit count)이고, 제1 수의 크레디트들은 프리페치 발생에 응답하여 소비되고, 상기 제1 수의 크레디트들은 성공적인 프리페치에 응답하여 복원되고, 제2 수의 크레디트들은 시간 경과(passage of time)에 응답하여 복원되는, 프리페치 유닛.
  11. 방법으로서,
    제1 메모리에 저장된 복수의 액세스 맵들 중 주어진 액세스 맵을 출력하는 단계 - 상기 제1 메모리는 상기 복수의 액세스 맵들에 대응하는 복수의 어드레스들을 더 저장하고, 상기 복수의 액세스 맵들의 액세스 맵 각각은 상기 복수의 어드레스들 중 해당 어드레스에 연관된 정의 영역 내에 있는 복수의 캐시 블록들에 대한 액세스들을 기록하고, 상기 출력 단계는 상기 복수의 어드레스들 중 주어진 어드레스에 연관된 상기 정의 영역 내의 액세스 어드레스에서 데이터 캐시에 대한 액세스에 응답함 -;
    제2 메모리에 저장된 복수의 액세스 패턴들과 상기 주어진 액세스 맵을 비교하는 단계 - 상기 복수의 액세스 패턴들 중 적어도 제1 액세스 패턴은, 상기 주어진 액세스 맵에서 해당 캐시 블록에서의 임의의 액세스와 매칭하기 위해 정의된 적어도 하나의 와일드 카드 심볼을 포함함 -; 및
    상기 와일드 카드 심볼에 상기 해당 캐시 블록에서의 임의의 액세스를 매칭하는 것을 포함하는, 상기 제1 액세스 패턴과 매칭하는 상기 주어진 액세스 맵에 응답하여, 하나 이상의 프리페치 요청들을 발생시키는 단계를 포함하는, 방법.
  12. 제11항에 있어서, 상기 제1 액세스 패턴은 디맨드 액세스들에 의해 액세싱된 하나 이상의 캐시 블록들을 나타내는 하나 이상의 액세스 심볼들을 더 포함하는, 방법.
  13. 제11항에 있어서, 상기 제1 액세스 패턴은, 프리페칭되고 차후에 디맨드-액세싱된 하나 이상의 캐시 블록들을 나타내는 하나 이상의 성공적인 프리페치 심볼들을 더 포함하는, 방법.
  14. 제11항에 있어서, 상기 제1 액세스 패턴은 하나 이상의 캐시 블록들에 대한 어떠한 액세스도 없음을 나타내는 하나 이상의 무효 심볼들을 더 포함하는, 방법.
  15. 제11항에 있어서, 상기 복수의 액세스 패턴들 중 제2 액세스 패턴은 스트라이드에 의해 정확하게 기술될 수 없는 불규칙적 패턴인, 방법.
  16. 제11항에 있어서,
    복수의 액세스 영역들을 가로지르는 액세스들의 스트림을 검출하는 단계;
    상기 스트림을 추적하기 위해 상기 제1 메모리에 한 쌍의 액세스 맵들을 할당하는 단계; 및
    새로운 액세스 맵들을 상기 스트림에 할당하는 대신에, 상기 스트림이 액세스 영역 경계들을 가로지를 시에 상기 한 쌍의 액세스 맵들을 재-사용하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서, 상기 스트림이 상기 액세스 영역 경계를 가로지를 시에, 상기 한 쌍의 액세스 맵들 중 하나를 재-사용할 시 상기 한 쌍 중 하나로부터 이전의 데이터를 클리어하는 단계를 더 포함하는, 방법.
  18. 제11항에 있어서,
    주어진 액세스 맵에 대한 프리페칭의 정확성을 나타내는 품질 계수를 추적하는 단계; 및
    상기 품질 계수에 응답하여 발생된 수많은 프리페치들을 제어하는 단계를 더 포함하는, 방법.
  19. 제18항에 있어서, 임계치를 초과하는 상기 액세스 맵의 길이에 응답하여, 상기 품질 계수를 무시하는 단계를 더 포함하는, 방법.
  20. 제18항에 있어서, 상기 품질 계수는 크레디트 카운트이고, 상기 방법은:
    프리페치 발생에 응답하여 제1 수의 크레디트들을 소비하는 단계;
    성공적인 프리페치에 응답하여 상기 제1 수의 크레디트들을 복원하는 단계; 및
    시간 경과에 응답하여 제2 수의 크레디트들을 복원하는 단계를 더 포함하는, 방법.
KR1020167003786A 2013-07-16 2014-06-17 프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛 KR101699673B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/942,780 US9015422B2 (en) 2013-07-16 2013-07-16 Access map-pattern match based prefetch unit for a processor
US13/942,780 2013-07-16
PCT/US2014/042633 WO2015009376A1 (en) 2013-07-16 2014-06-17 Access map-pattern match based prefetch unit for a processor

Publications (2)

Publication Number Publication Date
KR20160033154A KR20160033154A (ko) 2016-03-25
KR101699673B1 true KR101699673B1 (ko) 2017-01-24

Family

ID=51168427

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167003786A KR101699673B1 (ko) 2013-07-16 2014-06-17 프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛

Country Status (6)

Country Link
US (1) US9015422B2 (ko)
EP (1) EP3022654A1 (ko)
KR (1) KR101699673B1 (ko)
CN (1) CN105378684B (ko)
TW (1) TWI512615B (ko)
WO (1) WO2015009376A1 (ko)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10540225B2 (en) * 2015-05-27 2020-01-21 Hewlett Packard Enterprise Development Lp Data validation
US9971694B1 (en) 2015-06-24 2018-05-15 Apple Inc. Prefetch circuit for a processor with pointer optimization
US10169105B2 (en) * 2015-07-30 2019-01-01 Qualcomm Incorporated Method for simplified task-based runtime for efficient parallel computing
US10108549B2 (en) * 2015-09-23 2018-10-23 Intel Corporation Method and apparatus for pre-fetching data in a system having a multi-level system memory
US10261901B2 (en) 2015-09-25 2019-04-16 Intel Corporation Method and apparatus for unneeded block prediction in a computing system having a last level cache and a multi-level system memory
US10180905B1 (en) 2016-04-07 2019-01-15 Apple Inc. Unified prefetch circuit for multi-level caches
US9904624B1 (en) 2016-04-07 2018-02-27 Apple Inc. Prefetch throttling in a multi-core system
US9946653B2 (en) * 2016-04-29 2018-04-17 Ncr Corporation Predictive memory caching
US10078514B2 (en) 2016-05-11 2018-09-18 International Business Machines Corporation Techniques for dynamic sequential instruction prefetching
US20180052779A1 (en) * 2016-08-19 2018-02-22 Advanced Micro Devices, Inc. Data cache region prefetcher
US10394724B2 (en) 2016-08-22 2019-08-27 Qualcomm Incorporated Low power data transfer for memory subsystem using data pattern checker to determine when to suppress transfers based on specific patterns
US10331567B1 (en) 2017-02-17 2019-06-25 Apple Inc. Prefetch circuit with global quality factor to reduce aggressiveness in low power modes
US10635335B2 (en) 2017-03-21 2020-04-28 Western Digital Technologies, Inc. Storage system and method for efficient pipeline gap utilization for background operations
US11188456B2 (en) 2017-03-21 2021-11-30 Western Digital Technologies Inc. Storage system and method for predictive block allocation for efficient garbage collection
US11269764B2 (en) * 2017-03-21 2022-03-08 Western Digital Technologies, Inc. Storage system and method for adaptive scheduling of background operations
DE112018003358T5 (de) * 2017-06-28 2020-03-12 Nvidia Corporation Speichertyp, der cache-fähig und dennoch durch spekulative anweisungen unzugänglich ist
US10769009B2 (en) * 2018-03-21 2020-09-08 International Business Machines Corporation Root cause analysis for correlated development and operations data
US11093248B2 (en) * 2018-09-10 2021-08-17 International Business Machines Corporation Prefetch queue allocation protection bubble in a processor
US11249909B2 (en) * 2018-12-28 2022-02-15 Intel Corporation Systems and methods for adaptive multipath probability (AMP) prefetcher
KR20210000010A (ko) 2019-06-24 2021-01-04 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
CN110427332B (zh) 2019-08-05 2021-08-20 上海兆芯集成电路有限公司 数据预取装置、数据预取方法及微处理器
US10979054B1 (en) * 2020-01-14 2021-04-13 Nuvotonn Technology Corporation Coupling of combinational logic circuits for protection against side-channel attacks
US11157285B2 (en) * 2020-02-06 2021-10-26 International Business Machines Corporation Dynamic modification of instructions that do not modify the architectural state of a processor
US20240012646A1 (en) * 2022-07-06 2024-01-11 Huawei Technologies Co., Ltd. System and method of prefetching array segments
US20240111677A1 (en) * 2022-09-30 2024-04-04 Advanced Micro Devices, Inc. Region pattern-matching hardware prefetcher

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5305389A (en) 1991-08-30 1994-04-19 Digital Equipment Corporation Predictive cache system
US20080016330A1 (en) 2006-07-13 2008-01-17 El-Essawy Wael R Efficient Multiple-Table Reference Prediction Mechanism
US7975108B1 (en) 2004-03-25 2011-07-05 Brian Holscher Request tracking data prefetcher apparatus

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5093777A (en) 1989-06-12 1992-03-03 Bull Hn Information Systems Inc. Method and apparatus for predicting address of a subsequent cache request upon analyzing address patterns stored in separate miss stack
US6151662A (en) * 1997-12-02 2000-11-21 Advanced Micro Devices, Inc. Data transaction typing for improved caching and prefetching characteristics
US7493607B2 (en) * 2002-07-09 2009-02-17 Bluerisc Inc. Statically speculative compilation and execution
US20040186960A1 (en) * 2003-03-20 2004-09-23 Sun Microsystems, Inc. Computer processor data prefetch unit
US7124255B2 (en) * 2003-06-30 2006-10-17 Microsoft Corporation Message based inter-process for high volume data
US8627009B2 (en) * 2008-09-16 2014-01-07 Mosaid Technologies Incorporated Cache filtering method and apparatus
US20110010506A1 (en) * 2009-07-10 2011-01-13 Via Technologies, Inc. Data prefetcher with multi-level table for predicting stride patterns
US8856447B2 (en) * 2012-07-17 2014-10-07 Apple Inc. Converting memory accesses near barriers into prefetches

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5305389A (en) 1991-08-30 1994-04-19 Digital Equipment Corporation Predictive cache system
US7975108B1 (en) 2004-03-25 2011-07-05 Brian Holscher Request tracking data prefetcher apparatus
US20080016330A1 (en) 2006-07-13 2008-01-17 El-Essawy Wael R Efficient Multiple-Table Reference Prediction Mechanism

Also Published As

Publication number Publication date
US9015422B2 (en) 2015-04-21
US20150026413A1 (en) 2015-01-22
TWI512615B (zh) 2015-12-11
KR20160033154A (ko) 2016-03-25
CN105378684A (zh) 2016-03-02
WO2015009376A1 (en) 2015-01-22
TW201512983A (zh) 2015-04-01
EP3022654A1 (en) 2016-05-25
CN105378684B (zh) 2018-09-07

Similar Documents

Publication Publication Date Title
KR101699673B1 (ko) 프로세서에 대한 액세스 맵-패턴 매치 기반 프리페치 유닛
US10621100B1 (en) Unified prefetch circuit for multi-level caches
KR101614867B1 (ko) 데이터 스트림에 대한 저장 인식 프리페치
US10331567B1 (en) Prefetch circuit with global quality factor to reduce aggressiveness in low power modes
US9904624B1 (en) Prefetch throttling in a multi-core system
US10402334B1 (en) Prefetch circuit for a processor with pointer optimization
US8583894B2 (en) Hybrid prefetch method and apparatus
US9280474B2 (en) Adaptive data prefetching
US8316188B2 (en) Data prefetch unit utilizing duplicate cache tags
US6571318B1 (en) Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US20180046579A1 (en) Create page locality in cache controller cache allocation
US11030108B2 (en) System, apparatus and method for selective enabling of locality-based instruction handling
WO2016097810A1 (en) Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon mode
CN111052095A (zh) 使用动态预取深度的多行数据预取
US10402336B2 (en) System, apparatus and method for overriding of non-locality-based instruction handling
US10963392B1 (en) Victim allocations in shared system cache
US11176045B2 (en) Secondary prefetch circuit that reports coverage to a primary prefetch circuit to limit prefetching by primary prefetch circuit
CN114661357A (zh) 用于在处理器中预取物理页的系统、装置和方法
US20230205699A1 (en) Region aware delta prefetcher
Al Hasib et al. Implementation and Evaluation of an Efficient Level-2 Cache Prefetching Algorithm

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20191217

Year of fee payment: 4