KR102464788B1 - 업/다운 프리페쳐 - Google Patents

업/다운 프리페쳐 Download PDF

Info

Publication number
KR102464788B1
KR102464788B1 KR1020187035453A KR20187035453A KR102464788B1 KR 102464788 B1 KR102464788 B1 KR 102464788B1 KR 1020187035453 A KR1020187035453 A KR 1020187035453A KR 20187035453 A KR20187035453 A KR 20187035453A KR 102464788 B1 KR102464788 B1 KR 102464788B1
Authority
KR
South Korea
Prior art keywords
cache
cacheline
demand
thread
hit
Prior art date
Application number
KR1020187035453A
Other languages
English (en)
Other versions
KR20190008274A (ko
Inventor
3세 윌리엄 에반 존스
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 KR20190008274A publication Critical patent/KR20190008274A/ko
Application granted granted Critical
Publication of KR102464788B1 publication Critical patent/KR102464788B1/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
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/502Control mechanisms for virtual memory, cache or TLB using adaptive policy
    • 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

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

캐시(104)를 포함하는 프로세싱 시스템(100)에서, 방법은, 스레드를 위한 디멘드 캐시 액세스가 스레드를 위한 한 세트의 샘플링된 캐시의 타겟인, 캐시라인에 제1 방향으로 인접한 캐시라인으로 지향되는 복수의 횟수의 제1 러닝 카운트를 유지하기 위해, 스레드를 위한 디멘드 캐시 액세스를 모니터링하는 단계를 포함한다. 제1 러닝 카운트가 제1 스레숄드(228)를 초과하였다는 결정에 응답하여, 본 방법은, 스레드를 위한 수신된 디멘드 캐시 액세스가 수신된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인에 대한 프리페치 요청(234)을 트리거하는 제1 프리페칭 모드(128)를 활성화하는 단계를 더 포함한다.

Description

업/다운 프리페쳐
본 개시물은 일반적으로 프로세싱 시스템에 관한 것이고, 좀 더 구체적으로, 프로세싱 시스템 내의 프리페칭 데이터에 관한 것이다.
데이터 프리페칭은, 대기 상태 또는 메모리에 저장된 데이터에 대한 액세스와 관련된 그 밖의 지연을 줄이기 위해, 프로세싱 시스템에서 종종 사용된다. 전형적으로, 프로세싱 시스템은 데이터 액세스를 모니터링하기 위해 하나 이상의 프리페쳐를 사용하고, 모니터링된 데이터 액세스로부터 어느 데이터가 가까운 장래에 프로세싱 시스템에 의해 필요로될 수 있는지 예측하고, 더 낮은 레벨 캐시로부터 또는 시스템 메모리로부터 예측된 데이터의 추측에 근거한 페칭을 개시한다. 종래의 프리페쳐는 전통적으로 스레드에 의해 데이터 액세스의 패턴에서 "스트라이드(stride)" 또는 "스트림(stream)"을 식별하려고 하고, 이들 스트라이드나 스트림을 사용하여 요청될 다음 데이터를 예측한다. 그러나, 많은 경우에, 이러한 종래의 프리페쳐는, 전형적으로 크기 제한(가령, 프리페쳐가 저장할 수 있는 액세스 "히스토리(history)"의 양), 주어진 메모리 페이지 내에서 동작하는 스트림 또는 항상은 아니지만 로컬 캐시 내의 종종 히트(hit)되는 스트림의 개수의 결과로, "천천히-움직이는(slow-moving)" 스트라이드나 스트림 패턴을 정확하게 검출할 수 없다. 그 결과, 종래의 프리페쳐는 데이터의 추측에 근거한 프리페칭을 위한 적절한 기반으로서 역할을 할 수 있는 다른 유효한 스트라이드나 스트림을 식별하는데 실패할 수 있다.
본 개시물은 첨부 도면을 참조함에 의해, 기술 분야의 당업자에게 자명해지는 여러 특징과 이점을 더욱 잘 이해될 수 있다. 서로 다른 도면 내의 동일한 참조 부호의 사용은 유사하거나 동일한 아이템을 표시한다.
도 1은 일부 실시예에 따른 업/다운 프리페쳐를 사용하는 프로세싱 시스템의 블록도이다.
도 2는 일부 실시예에 따른, 도 1의 업/다운 프리페쳐의 예시적인 실행예를 나타내는 블록도이다.
도 3은 일부 실시예에 따른, 도 1 및 2의 업/다운 프리페쳐의 작동 방법을 나타내는 순서도이다.
도 4는 일부 실시예에 따른, 도 1 및 2의 업/다운 프리페쳐를 포함하는 한 세트의 프리페쳐를 사용하는 프리페칭을 위한 방법을 나타내는 순서도이다.
본원에서 기술된 바와 같이, 프로세싱 시스템은, 스레드에 의해 데이터 액세스 내의 "천천히-움직이는" 스트라이드 또는 스트림 패턴을 식별하기 위해 업/다운 프리페쳐(UDP)를 사용하고, 이처럼 식별된 스트라이드 또는 스트림 패턴에 기초하여, 추측에 근거한(speculative) 프리페치 액세스를 생성한다. 적어도 하나의 실시예에서, UDP는, 스레드에 의해 액세스되는 데이터 세트가 비교적 천천히 상향 또는 하향 방식으로 액세스되는 경우를 식별하려고 한다. UDP는, 스레드에 대한 디멘드 캐시 액세스(캐시 히트와 캐시 미스 모두에 대해)를 심플링하고, 어드레스 버퍼 내에서 샘플링된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인의 어드레스를 저장함에 의해, 이것을 한다. 이와 병행하여, UDP에 의해 관측된 모든 디멘드 캐시 액세스에 대해, UDP는 디멘드 캐시 액세스가 어드레스 버퍼 내의 어드레스에 의해 표현된 캐시 라인에 인접한 캐시라인으로 어드레스되는지를 결정한다. 디멘드 캐시 액세스의 어드레스가 버퍼링된 어드레스 엔트리의 캐시라인을 향해 윗 방향(즉, 더 높은 메모리 어드레스)에 인접한 캐시라인에 지향된다면, 버퍼링된 어드레스 엔트리와 관련된 업(+) 히트 카운트가 증가된다. 마찬가지로, 디멘드 캐시 액세스의 어드레스가 버퍼링된 어드레스 엔트리의 캐시라인을 향해 아랫 방향(즉, 더 낮은 메모리 어드레스)에 인접한 캐시라인에 지향된다면, 버퍼링된 어드레스 엔트리와 관련된 다운(-) 히트 카운트가 증가된다.
명시된 개수의 디멘드 캐시 액세스가 평가된 이후나 또 다른 트리거 이벤트에 응답하여, UDP는 모든 업 히트 카운터의 값을 합산하고, 모든 다운 히트 카운터를 합산하여, 전체 업 히트 카운트와 전체 다운 히트 카운트를 각각 결정한다. 전체 업 히트 카운트가 명시된 스레숄드 이상이면, UDP는 스레드에 의해 모든 디멘드 캐시 액세스에 대해 "업" 프리페칭을 활성화시켜서, UDP는 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인으로, 윗 방향에 인접한 캐시라인에 대한 프리페치를 트리거한다. 마찬가지로, 전체 다운 카운트가 명시된 스레숄드(업 카운트에 대한 스레숄드와 동일하거나 상이할 수 있음) 이상이면, UDP는 스레드에 의해 모든 디멘드 캐시 액세스에 대해 "다운" 프리페칭을 활성화시켜서, UDP는 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인으로, 아랫 방향에 인접한 캐시라인에 대한 프리페치를 트리거한다. 일부 실시예에서, UDP는 다른 프리페쳐를 조절하여서, 케이스가 될 수 있는 업 프리페치나 다운 프리페치는, 다른 프리페쳐가 디멘드 캐시 액세스에 응답하여 프리페치를 트리거하지 않을 때에만, 트리거된다.
이제 다시 도 1로 돌아와서, 업/다운 프리페칭을 사용하는 프로세싱 시스템(100)은 본 개시물의 적어도 하나의 실시예에 따라 나타난다. 프로세싱 시스템(100)은, 서버, 데스크톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 컴퓨터-활성화된 휴대용 셀룰러 폰(가령, "스마트 폰"), 컴퓨터-활성화된 시계나 다른 웨어러블 아이템, 개인용 디지털 보조기(PDA), 게이밍 콘솔 등과 같은 임의의 다양한 컴퓨터-활성화된 전자 디바이스에 의해 실행될 수 있다. 도시된 예시에서, 프로세싱 시스템(100)은 적어도 하나의 컴퓨트 컴플렉스(102), 캐시 계층(104) 및 메모리 컨트롤러(106)를 포함하고, 이는 결국, 프로세싱 시스템(100)의 나머지에 "온-칩"되거나 외부 구성요소로서 실행되는 시스템 메모리(108)에 연결될 수 있다.
컴퓨트 컴플렉스(102)는 도시된 예시에서 4개의 프로세서 코어(111, 112, 113, 114)와 같은 하나 이상의 프로세서 코어를 포함한다. 프로세서 코어는 중앙 프로세싱 유닛(CPU) 코어, 그래픽 프로세싱 유닛(GPU) 코어, 디지털 신호 프로세서(DSP) 코어 또는 이들의 조합물을 포함할 수 있다. 캐시 계층(104)은 메모리(108)로부터 액세스되고, 하나 이상의 프로세서 코어(111-114)에 의해 액세스를 위해 일시적으로 저장되는 데이터를 캐시하기 위한 하나 이상의 레벨의 캐시를 포함한다. 이러한 특정 예시에서, 캐시 계층(104)은 4개의 레벨 1(L1) 캐시(121, 122, 123, 124) 및 레벨 2(L2) 캐시(116)의 한 세트를 포함하는데, L1 캐시(121-124)의 각각은 프로세서 코어(111-114)의 대응되는 것과 컴퓨트 컴플렉스(102)의 일부에 대한 사적인 캐시(private cache)인 반면, L2 캐시(116)는 프로세서 코어(111-114) 사이에서 공유된다. 레벨 3(L3) 캐시와 같은 여전히 추가적인 캐시 레벨도 사용될 수 있다는 것을 인식할 것이다. 이러한 예시에서, 본원에서 기술된 업/다운 프리페칭 프로세스는 L2 캐싱 레벨에서 수행된다. 그러나, 업/다운 프리페칭 프로세스는 L2 캐싱 레벨에 제한되지 않고, 대신에, 본원에서 제공된 가이드라인을 사용하여, L1 캐싱 레벨이나 L3 캐싱 레벨과 같은 임의의 캐싱 레벨에서 실행될 수 있다는 것을 인식될 것이다.
L2 캐시(116)는 컨트롤러(118), 태그 어레이와 이에 대응되는 데이터 어레이(본원에서 집합적으로 "데이터/태그 어레이(120)"라고 함) 및 프리페치 블록(126)을 포함한다. 컨트롤러(118)는, 데이터/태그 어레이(120) 내의 L2 캐시(116)에 캐시된 캐시라인을 위한 데이터/태그 어레이(120)의 엔트리를 유지하고, L1 캐시(121-124)로부터 및 메모리 컨트롤러(106)로부터 프로브 및 그 밖의 캐시 액세스를 프로세스하기 위해 작동한다. 프리페치 블록(126)은 L2 캐시(116)에 의해 프로세스되는 디멘드 캐시 액세스를 모니터링하고, 적절히 L2 컨트롤러(118)에 의해 핸들링될 추측에 근거한 프리페치 요청을 트리거하기 위해, 하나 이상의 프리페쳐를 포함한다. 이를 위해, 프리페치 블록(126)은 적어도 업/다운 프리페쳐(UDP)(128)를 포함한다. 도시된 예시에서, 프리페치 블록(126)은 종래의 스트림 패턴 분석에 기초하여, 추측에 근거한 프리페치를 트리거하기 위해 작동하는 스트림 프리페쳐(130) 및 종래의 스트라이드 패턴 분석에 기초하여 추측에 근거한 프리페치를 트리거하기 위해 작동하는 스트라이드 프리페쳐(132)를 더 포함한다.
일반적은 동작 개관으로서, 캐시 계층(104)은, 프로세서 코어(111-114)에 의한 사용을 위해 데이터를 일시적으로 캐시하기 위해 작동한다. 일부 실시예에서, 데이터는, 디멘드 캐시 액세스에 응답하여 - 즉, 프로세서 코어(111-114)들 중 하나로부터의 데이터에 대한, 구체적이고 추측에 근거하지 않은 요청에 응답하여, 캐시된다. 이러한 캐시 디멘드 액세스는 더 낮은 레벨 캐시(L2 캐시(116))로부터 더 높은 레벨 캐시(L1 캐시(121-124))로의 캐시 계층(104)을 통해 전파된다. 각각의 캐시 레벨에서, 그 레벨의 캐시(들)는 프로브되어서, 요청된 데이터의 유효 복사본이 그 레벨에 캐시되는지를 결정한다. 그렇다면, 캐시 히트가 시그널되고, 데이터의 복사본이 프로브 또는 요청의 소스로 제공된다. 유효 복사본이 존재하지 않으면, 캐시 미스가 시그널되고, 캐시 액세스는 다른의 더 높은 캐시 레벨로 전파되고, 프로세스는 반복된다. 요청된 데이터가 캐시 계층(104) 내에 존재하지 않는 경우, 메모리 컨트롤러(106)는 시스템 메모리(108)로부터 요청된 데이터에 액세스하는 임무가 맡겨지고, 그리고 나서, 시스템 메모리(108)로부터 액세스된 데이터가 캐시 계층(104) 내에서 캐시들 중 하나에 캐시된다.
이와 병행하여, 프리페치 블록(126)의 프리페쳐(128, 130, 132)은 L2 컨트롤러(118)에 의해 핸들링되는 캐시 액세스의 스트림(이 스트림은 화살표(134)에 의해 표현되었고, 본원에서 "스트림(134)"라고도 함)을 모니터링한다. 각각의 프리페쳐(128, 130, 132)는 컴퓨트 컴플렉스(102)에서 실행되는 각각의 스레드에 대해 대응되는 액세스 패턴을 검출하려고 하고, 특정한 액세스 패턴이 검출될 때, 검출된 액세스 패턴에 따라 추측에 근거한 프리페치 요청의 방출(issuance)을 개시한다. 일부 실시예에서, 프리페쳐(128, 130, 132)는 이들의 프리페치 활동을 우선순위화하거나 아니면 조정하여서, 프리페쳐(128, 130, 132)의 서브세트만(가령, 하나만) 디멘드 캐시 액세스로부터의 추측에 근거한 프리페치를 트리거할 수 있다. 상기에 표시된 바와 같이, 스트림 프리페쳐(130)와 스트라이드 프리페쳐(132)는 잘 알려진 종래의 프리페치 테크닉을 사용한다. 패턴 검출 및 UDP(128)의 프리페치 개시 프로세스의 예시는 도 2-4를 참조하여 이하에서 더욱 자세히 기술된다.
도 2는 적어도 하나의 실시예에 따른, 프로세싱 시스템(100)의 UDP(128)의 예시적인 구성을 나타낸다. 도시된 실행예에서, UDP(128)는 샘플링 모듈(202) 및 하나 이상의 스레드-특정 업/다운 카운트 구성요소(203)를 포함한다. 다시 말해, UDP(128)는 업/다운 카운트 구성요소(203)의 특정한 수의 인스턴스를 실행할 수 있는데, 각각의 인스턴스는 컴퓨트 컴플렉스(102)에서 실행하는 대응 스레드로 할당된다. 그러므로, UDP(128)가 업/다운 카운트 구성요소(203)의 4개의 인스턴스를 실행한다면, 4개 까지의 스레드가 UDP(128)에 의해 별도로 추적될 수 있다. 샘플링 모듈(202)은 L2 캐시(116)에서 캐시 액세스의 스트림(134)을 모니터링하기 위해, 컨트롤러(118)에 연결된 입력부, 샘플링 모듈(202)이 스트림(134)의 캐시 액세스를 샘플링하기 위한 샘플링 스킴을 나타내는 샘플링 스킴 구성 데이터(205)를 수신하기 위한 입력부 및 샘플링된 캐시 액세스와 관련된 특정 스레드를 위한 업/다운 카운트 구성요소(203)의 인스턴스로의 각각의 샘플링된 캐시 액세스에 타겟팅된 캐시라인을 나타내는 메모리 어드레스(또는 이의 일부)를 제공하기 위한 출력부를 포함한다.
업/다운 카운트 구성요소(203)의 각각의 인스턴스는 업/다운 어드레스 버퍼(204), 업/다운 히트 버퍼(206), 히트 제어 모듈(207), 히트 합계 모듈(208), 비교 모듈(210) 및 프리페치 방출 모듈(212)을 포함한다. 업/다운 어드레스 버퍼(204)는 복수의 엔트리(214)(가령, 16개의 엔트리)를 가진 콘텐트-어드레서블 메모리(CAM)를 포함하는데, 각각의 엔트리(214)는 메모리 어드레스의 적어도 일부를 저장하도록 구성된다. 설명을 위해, 이러한 예시에서, UDP(128)는 캐시라인 기반에서 작동하고, 48-비트 물리적 어드레스의 비트 6-47(즉, PA[47:6])은 메모리 내의 데이터의 캐시라인의 가치의 어드레스를 말하고(PA[5:0]는 그 캐시라인 내의 바이트를 말함), 식별된 캐시 액세스(이하에 기술됨)의 물리적 어드레스 일부(PA[47:6])는 업/다운 어드레스 버퍼(204)의 대응되는 엔트리(214) 내에 저장될 수 있다. 히트 합계 모듈(208)은 복수의 엔트리(216)를 포함하는데, 각각의 엔트리(216)는 업/다운 어드레스 버퍼(204)의 엔트리(214)들 중 대응되는 것과 관련되고, 두 개의 서브-엔트리, 즉, 대응되는 엔트리(214) 내에 저장된 어드레스를 위한 업 히트 카운트를 저장하기 위한 업 히트 카운트 서브-엔트리(218)와 대응되는 엔트리(214) 내에 저장된 어드레스를 위한 다운 히트 카운트를 저장하기 위한 다운 히트 카운트 서브-엔트리(220)를 포함한다.
각각의 히트 합계 모듈(208)과 비교 모듈(210)의 하나의 인스턴스가 설명의 편의상 도 2에 도시되더라도, 각각의 업/다운 카운트 구성요소(203)는 두 개의 인스턴스 히트 합계 모듈(208)과 비교 모듈(210), 즉, 업 히트 카운트 서브-엔트리(218)의 업 히트 카운트를 사용하여, "업" 히트의 수를 총계내고 평가하기 위한 하나의 히트 합계 모듈(208)과 비교 모듈(210) 및 다운 히트 카운트 서브-엔트리(220)의 다운 히트 카운트를 사용하여, "다운" 히트의 수를 총계내고 평가하기 위한 하나의 히트 합계 모듈(208)과 비교 모듈(210)을 포함한다. 업/다운 히트 구성요소(203) 내에서 실행되는 두 개의 히트 합계 모듈(208)의 각각은, 멀티플렉서(222), 가산기 모듈(224) 및 총계 모듈(226)을 포함한다. 멀티플렉서(222)는, 서브-엔트리(218/220)에 각각 연결되는 복수의 입력부 및 가산기 모듈(224)의 입력부에 연결된 출력부를 가진다. 가산기 모듈(224)은 총계 모듈(226)의 입력부에 연결된 출력부 및 총계 모듈(226)의 출력부에 연결된 입력부를 더 포함한다. 총계 모듈(226)은, 이하에서 기술된 바와 같이, 업/다운 히트 버퍼(206) 내에 표현된 업 히트 또는 다운 히트의 전체 수를 나타내는 러닝 업 히트 카운트 또는 러닝 다운 히트 카운트를 저장하기 위한 래치 또는 다른 저장 구성요소를 포함할 수 있다. 트리거 이벤트에 응답하여, 비교 모듈(210)은 총계 모듈(226) 내에 저장된 러닝 업/다운 히트 카운트와 명시된 스레숄드(228)(가령, 구성 레지스터에 저장되거나 하드코딩 등이 될 수 있는)를 비교하고, 이에 따라 활성/비활성 신호(230)를 제어하기 위해 작동한다.
프리페치 방출 모듈(212)은, 활성/비활성 신호(230)를 수신하기 위한 입력부, 스트림(134)의 캐시 액세스를 수신하기 위한 입력부 및 이들 입력에 기초하여 프리페치 요청을 선택적으로 방출하기 위한 출력부를 포함한다. 또한, 일부 실시예에서, UDP(128)의 동작은 프리페치 블록(126)의 다른 프리페쳐(130, 132)의 동작과 조정되는데, 이 경우, 프리페치 방출 모듈(212)은 이들 다른 프리페쳐로부터 프리페치 상태 정보(232)를 수신하기 위한 입력부를 더 포함하고, 프리페치 상태 정보(232)는, 이들 프리페쳐의 또 다른 것이 스트림(134) 내에서 관측된 디멘드 캐시 액세스에 대한 프리페치 요청을 발행하거나 발행할 것인지를 나타낸다.
도 3은 일부 실시예에 따른 도 2의 UDP(128)의 실행예의 작동 방법(300)을 나타낸다. 도시된 바와 같이, UDP(128)의 동작은 병렬로 러닝되는 적어도 4개의 별도 프로세스를 포함하는데, 캐시 액세스 모니터링 프로세스(301), 히트 카운팅 프로세스(302), 업 프리페치 제어 프로세스(303) 및 다운 프리페치 제어 프로세스(304)이다. 일반적인 요약으로서, 프로세스(301, 302)는 스레드를 위한 UDP(128)의 반복된 트레이닝을 나타내고, 프로세스(303, 304)는, 프로세스(301, 302) 동안에 획득된 트레이닝 정보에 기초하여, 스레드를 위한 업/다운 프리페칭을 활성화 또는 비활성화하는지에 대하여, UDP(128)에 의해 반복적으로 실행되는 결정 프로세스를 나타낸다.
캐시 액세스 모니터링 프로세스(301)는, UDP(128)가 캐시 액세스의 스트림(134)을 모니터링하고, 이로부터의 캐시 액세스를 샘플링하고, 및 이에 따라 업/다운 어드레스 버퍼(204)를 업데이트하는 프로세스를 나타낸다. 따라서, 블록(311)에서, 샘플링 모듈(202)은 샘플링 스킴 구성 데이터(205)에 의해 명시된 샘플링 스킴에 기초하여, 스트림(134)으로부터 캐시 액세스를 샘플링한다. 적어도 하나의 실시예에서, 샘플링은 캐시 히트와 캐시 미스 모두로부터 수행되지만, 캐시 미스가 추측에 근거하게 프리페치된 데이터에 대한 필요성을 더욱 나타내는 경향이 있고, 캐시 미스는 샘플링 스킴에서 강조되거나 아니면 우선순위화될 수 있다. 또한, 더 높은 캐시 레벨로부터의(가령, L1 캐시(121-124)로부터의) 추측에 근거한 프리페치를 나타내는 캐시 액세스는 전형적으로, 샘플링에서 배제된다. 게다가, 샘플링되는 캐시 액세스의 퍼센티지는, 업/다운 어드레스 버퍼(204) 내의 엔트리(214)의 수, UDP(128)에 의해 검출되는 것으로 예상되는 액세스 패턴의 "레이트" 등을 포함하여 여러 고려사항에 기초할 수 있다. 하나의 예시로서, 샘플링 스킴은 샘플링 모듈(202)을 구성하여, 추측에 근거한 프리페치를 나타내는 모든 캐시 액세스를 더 낮은-레벨 캐시로부터 필터링하고, L2 캐시(116)에서 캐시 히트인 모든 8개의 캐시 액세스 중 7개를 필터링하고, 그리고 나서, 결과로 나온 필터링된 캐시 액세스 스트림로부터 모든 512 캐시 액세스 중 하나를 샘플링한다.
샘플링된 캐시 액세스가 그렇게 선택되면, 블록(312)에서, 샘플링 모듈(202)은 샘플링된 캐시에 의해 타겟팅된 캐시라인의 메모리 어드레스 부분(PA[47:6])을 업/다운 어드레스 버퍼(204)의 엔트리(214)에 라이트한다. 적어도 하나의 실시예에서, 업/다운 어드레스 버퍼(204)는 라운드-로빈 또는 선입 선출(FIFO) 방식으로 작동되어서, 모든 엔트리(214)가 가득차면, 가장 오래된 엔트리(214)가 새롭게 샘플링된 캐시 액세스에 의해 타겟팅된 캐시라인의 메모리 어드레스 부분으로 오버라이트하기 위해 선택된다. 그러나, 엔트리(214)를 오버라이트하는 것은 블록(313 및 314)에 의해 표현된 프로세스를 트리거하여, 오버라이트된 엔트리(214)와 관련된 업/다운 히트 카운트를 스레드를 위해 유지된, 러닝 업 히트 카운트와 러닝 다운 히트 카운트에 각각 통합된다. 이러한 프로세스는 엔트리를 위한 업/다운 히트 카운트를 생성하기 위한 프로세스의 설명 이후에 이하에서 기술된다. 임의의 이벤트에서, 샘플링된 캐시 액세스가 프로세스된 이후에, 프로세스(301)는 스트림(134)으로부터 샘플링될 다은 캐시 액세스를 위해 블록(311)으로 되돌아온다.
이제 히트 카운팅 프로세스(302)로 돌아오면, 이러한 프로세스는 업/다운 어드레스 버퍼(204)에서 나타난 캐시라인에 인접한 캐시라인으로 타겟팅된 캐시 액세스의 수를 카운트하는 역할을 한다. 따라서, 히트 제어 모듈(207)은 캐시 액세스의 스트림(134)을 모니터링한다. 디멘드 캐시 액세스가 검출될 때, 블록(321)에서, 히트 제어 모듈(207)은 캐시 액세스가 업/다운 어드레스 버퍼(204)에서 나타난 임의의 캐시라인에 인접한 캐시라인으로 타겟팅되는지를 결정한다. 이러한 프로세스를 수행하기 위해, 히트 제어 모듈(207)은 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인의 물리적 메모리 어드레스 부분(A)을 결정하고, 업/다운 어드레스 버퍼(204)에 두 개의 룩업을 수행하는데, 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 이전에 인접한(즉, 아랫 방향에 인접한) 캐시라인의 어드레스를 나타내는 메모리 어드레스 부분(A-1)을 위한 블록(322)에서의 첫번째 룩업과, 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 이후에 인접한(즉, 윗 방향에 인접한) 캐시라인의 어드레스를 나타내는 메모리 어드레스 부분(A+1)을 위한 블록(323)에서의 두번째 룩업이다. 블록(322 및 323)이 설명의 편의상 직렬로 발생하는 것으로 도시되더라도, 이들 블록에 의해 나타난 룩업은 병렬로 수행될 수 있다는 것을 인식할 것이라는 점을 주목한다.
블록(322)에 의해 나타난 바와 같이, 첫번째 룩업이 업/다운 어드레스 버퍼(204)의 엔트리(214)에 대해 히트하면, 이는 히트 엔트리(214)에서 나타난 캐시라인 바로 다음에 캐시라인을 위한 디멘드 캐시 액세스가 있었다는 것을 표시한다. 즉, 디멘드 캐시 액세스는 히트 엔트리(214)에 의해 나타난 캐시라인으로부터, 또는 바로 다음에, "업"인 캐시라인으로 타겟팅되었다. 그러므로, 이에 응답하여, 히트 제어 모듈(207)은 블록(324)에서, 히트 엔트리(214)와 관련된 업 히트 카운트 서브-엔트리(218) 내에 저장된 업 히트 카운트를 증가시킨다. 즉, 히트 제어 모듈(207)은, 디멘드 캐시 액세스가 업/다운 어드레스 버퍼(204)에서 나타난 캐시라인으로부터 "업"인 하나의 캐시라인인 캐시라인으로 지향된다는 것을 식별하고, 이에 응답하여, 이러한 매치를 기록하기 위해, 업/다운 어드레스 버퍼(204) 내의 그 캐시라인의 업 히트 카운트를 하나씩 증가시킨다. 대안적으로, 블록(323)에 의해 나타난 바와 같이, 두번째 룩업이 업/다운 버퍼(204)의 엔트리(214)에 대해 히트한다면, 이는, 히트 엔트리(214)에서 나타난 캐시라인을 바로 앞선 캐시라인에 대해 디멘드 캐시 액세스가 있었다는 것을 표시한다. 즉, 디멘드 캐시 액세스는 히트 엔트리(214)에 의해 나타난 캐시라인으로부터, 또는 바로 이전에, "다운"인 캐시라인으로 타겟팅되었다. 그러므로, 이에 응답하여, 히트 제어 모듈(207)은 블록(325)에서, 히트 엔트리(214)와 관련된 다운 히트 카운트 서브-엔트리(220) 내에 저장된 다운 히트 카운트를 증가시킨다. 즉, 히트 제어 모듈(207)은, 디멘드 캐시 액세스가 업/다운 어드레스 버퍼(204)에서 나타난 캐시라인으로부터 "다운인" 하나의 캐시라인인 캐시라인으로 지향된다는 것을 식별하고, 이에 응답하여, 이러한 매치를 기록하기 위해, 업/다운 어드레스 버퍼(204) 내의 그 캐시라인의 다운 히트 카운트를 하나씩 증가시킨다. 룩업 모두가 미스인 경우에, 이는, 디멘드 캐시 액세스가 업/다운 어드레스 버퍼(204)에서 나타난 임의의 캐시라인에 바로 인접한 캐시라인으로 지향되지 않았다는 것을 표시하고, 그래서, 디멘드 캐스 액세스는 업/다운 히트 카운트에 영향을 주지 않는다.
프로세스(302)에 의해 증명된 바와 같이, 업 히트 카운트 서브-엔트리(218)에 저장된 업 히트 카운트는 업 히트 카운트 서브-엔트리(218)와 관련된 엔트리(214)에 의해 나타난 캐시라인으로부터 "업"이었던 캐시라인으로 타켓팅된 디멘드 캐시 액세스의 발생의 수를 나타낸다. 다운 히트 카운트 서브-엔트리(220)에 저장된 다운 히트 카운트는 업 히트 카운트 서브-엔트리(218)와 관련된 엔트리(214)에 의해 나타난 캐시라인으로부터 "다운"이었던 캐시라인으로 타켓팅된 디멘드 캐시 액세스의 발생의 수를 나타낸다. 따라서, 유효 캐시라인 어드레스를 저장하는 엔트리(214)가 오버라이트되기 전에, 이러한 캐시라인과 관련된 업 히트 카운트와 다운 히트 카운트는 스레드를 위해, 러닝 업 히트 카운트와 러닝 다운 히트 카운트에 각각 포함된다. 이에 따라, 프로세스(301)로 되돌아오면, 샘플링 모듈(202)이 새롭게 샘플링된 캐시 액세스의 캐시라인 어드레스를 업/다운 어드레스 버퍼(204)의 식별된 엔트리(214)에 저장할 때, 블록(313)에서, 샘플링 모듈(202)은 유효 캐시라인이 식별된 엔트리(214)에 오버라이트 하려고 하는지를 결정한다. 아니라면, 해명되어야 할 유요 업/다운 히트 카운트가 없다는 것이고, 그래서, 캐시라인 어드레스는 추가적인 액션 없이 엔트리(214)에 저장될 수 있다.
그러나, 유효 캐시라인 어드레스가 식별된 엔트리(214)에 이미 저장된다면, 블록(314)에서, 유효 캐시라인의 오버라이트는 식별된 엔트리(214)와 관련된 서브-엔트리(218, 220)의 업 히트 카운트와 다운 히트 카운트를 러닝 업 히트 카운트와 러닝 다운 히트 카운트에 각각 통합하기 위해, 히트 합계 모듈(208)에 대한 트리거 이벤트로서 작동할 수 있다. 그러므로, 업 히트 카운트를 위해, 샘플링 모듈(202)은 식별된 엔트리(214)의 인덱스를 러닝 업 히트 카운트를 위한 히트 합계 모듈(208)의 멀티플렉서(222)로 신호 보낸다. 이에 응답하여, 멀티플렉서(222)는 이러한 동일한 인덱스를 가진 업 히트 카운트 서브-엔트리(218) 내에 저장된 업 히트 카운트에 액세스하고, 액세스 업 히트 카운트를 가산기 모듈(224)로 전달한다. 그리고 나서, 가산기 모듈(224)은 총계 모듈(226) 내에 저장된 러닝 히트 카운트의 현재 값에 이러한 업 히트 카운트를 가산하고, 그리고 나서, 결과를 그 안에 저장된 러닝 히트 카운트에 대한 업데이트로 총계 모듈(226)에 저장한다. 동일한 프로세스는 표시된 인덱스에서 서브-엔트리(220)에 저장된 러닝 다운 히트 카운트와 다운 히트 카운트에 대해, 러닝 다운 히트 카운트를 유지하는 히트 합계 모듈(208)에 의해 수행된다. 또한, 업 히트 카운트와 다운 히트 카운트가 러닝 업 히트 카운트와 러닝 다운 히트 카운트에 각각 가산된 이후에, 인덱스에서 서브-엔트리(218, 220)는 대응되는 엔트리(214) 내에 저장될 새로운 캐시라인 어드레스에 대해 영으로 리셋된다.
상기에서 주목된 바와 같이, 프로세스(303 및 304)는, 업/다운 히트 합계 모듈(208)에 저장된 러닝 업/다운 히트 카운트에 기초하여, 업 프리페칭과 다운 프리페칭을 각각 주기적이고 선택적으로 활성/비활성화하는 프로세스를 나타낸다. 프로세스(303)는 업 프리페칭을 활성화하기 위한 프로세스를 나타낸다. 이에 따라, 캐시 액세스의 어떤 명시된 수는 프로세스(301)의 블록(311)에서 샘플링되거나, 어떤 다른 트리거 이벤트(가령, 카운트다운 타이머의 활성화) 이후에, "업" 인스턴스를 위한 비교 모듈(210)이 활성화된다. 활성화되면, 블록(331)에서, 비교 모듈(210)은 총계 모듈(226)로부터 현재의 러닝 업 히트 카운트를 수신하고, 현재의 러닝 히트 카운트와 "업" 캐시라인 히트를 위해 명시된 스레숄드(228)를 비교한다. 적어도 하나의 실시예에서, 명시된 스레숄드(228)는 스레드를 위한 업 캐시라인 히트의 수에 대한 워터마크를 나타낸다. 설명을 위해, 스레숄드(228)는 업 프리페칭이 활성화되기 전에, 48 업 히트로 설정될 수 있다. 명시된 스레숄드(228)에 대한 특정 값은 모델링, 실험적 분석 등을 통해 선택될 수 있다. 디폴트에 의해, 업 프리페칭은 비활성화되고, 블록(332)에 의해 나타난 바와 같이, 러닝 업 히트 카운트가 스레숄드(228) 미만인 동안, 업 프리페칭은 비활성으로 유지되고, 프로세스(303)는 또 다른 폴링 사이클(polling cycle) 동안 반복된다. 그러나, 블록(333)에 의해 나타난 바와 같이, 러닝 업 히트 카운트가 스레숄드(228) 이상으로 상승할 때, 업 프리페치를 활성화하기에 적합한 것으로 여겨지는 업 캐시라인 히트의 최소의 수가 발생하였고, 따라서, 비교 모듈(210)은, 그 업 프리페칭이 스레드를 위해 활성화되었다는 것을 나타내기 위해, 업 프리페치를 위한 활성/비활성 신호(230)를 구성한다.
프로세스(304)는 다운 프리페칭을 활성화하기 위한 프로세스를 나타내고, 프로세스(303)와 유사한 방식으로 진행된다. 이에 따라, 캐시 액세스의 어떤 명시된 수는 프로세스(301)의 블록(311)에서 샘플링된 이후에, "다운" 인스턴스를 위한 비교 모듈(210)이 활성화된다. 프로세스(304)를 위한 캐시 액세스의 이러한 명시된 수는 프로세스(303)에 대한 수와 상이할 수 있다는 것을 주목해야 한다. 활성화되면, "다운" 인스턴스를 위한 비교 모듈(210)이 폴링 사이클을 시작한다. 각각의 폴링 사이클 동안에, 블록(341)에서, 비교 모듈(210)은 총계 모듈(226)로부터 현재의 러닝 다운 히트 카운트를 수신하고, 현재의 러닝 다운 카운트와 "다운" 캐시라인 히트를 위해 명시된 스레숄드(228)를 비교한다. "다운" 캐시라인 히트를 위한 스레숄드(228)는 "업" 캐시라인 히트를 위한 스레숄드(228)와 상이할 수 있다는 것을 주목해야 한다. 업 프리페칭과 같이, 다운 프리페칭은 디폴트에 의해 비활성화될 수 있고, 블록(342)에 의해 도시된 바와 같이, 러닝 다운 히트 카운트가 스레숄드(228) 미만인 동안, 다운 프리페칭은 비활성으로 유지되고, 프로세스(304)는 또 다른 폴링 사이클 동안 반복된다. 그러나, 블록(343)에 의해 나타난 바와 같이, 러닝 다운 히트 카운트가 스레숄드(228) 이상으로 상승할 때, 다운 프리페치를 활성화하기에 적합한 것으로 여겨지는 다운 캐시라인 히트의 최소의 수가 발생하였고, 따라서, 비교 모듈(210)은, 그 다운 프리페칭이 스레드를 위해 활성화되었다는 것을 나타내기 위해, 다운 프리페치를 위한 활성/비활성 신호(230)를 구성한다.
도 4는 적어도 하나의 실시예에 따른, 도 3의 프로세스(301-304)와 협력하여 프리페치 방출 모듈(212)의 작동 방법(400)을 나타낸다. 상기에서 설명된 바와 같이, UDP(128) 및 프리페치 블록(126)의 다른 프리페쳐(130, 132)는, 스레드에 대한 캐시 액세스 내의 패턴을 검출하고, 이들 패턴으로부터, 스레드에 의해 필요할 것으로 예상되는 데이터를 추측에 근거하여 예측하고, 이에 따라 이처럼 예측된 데이터에 대한 추측에 근거한 프리페치 요청을 방출하기 위해 작동한다. UDP(128)는, 특히, 스레드는 한 블록의 데이터를 통해 움직이는 비교적 천천히 움직이는 패턴을 검출하고, "업" 순서로(즉, 더 낮은 메모리 어드레스에서 더 높은 메모리 어드레스로 인접한 캐시라인을 액세스하는) 또는 "다운" 순서로(즉, 더 높은 메모리 어드레스에서 더 낮은 메모리 어드레스로 인접한 캐시라인을 액세스하는), 순서대로 캐시라인을 액세스하기 위해 작동한다. 이러한 패턴이 검출될 때, 프로세스(303, 304)에 의해 나타난 바와 같이, UDP(128)는, 검출된 패턴의 방향으로부터 적절히, 업 프리페칭 또는 다운 프리페칭을 활성화하고, 스레드에 대해 검출된 각각의 디멘드 캐시 액세스에 대한 인접한 캐시라인을 위해 추측에 근거한 프리페치를 선택적으로 트리거한다.
이에 따라, 방법(400)은 프리페치 방출 모듈(212)에서 스레드에 대한 디멘드 캐시 액세스에 의한 수신, 또는 통지로 블록(402)에서 개시한다. 블록(404)에서, 프리페치 방출 모듈(212)은, 업 프리페칭 또는 다운 프리페칭이 활성화되는지를 결정하기 위해, "업" 인스턴스에 대한 활성/비활성 신호(230) 및 "다운" 인스턴스에 대한 활성/비활성 신호(230)의 상태를 평가한다. 상기에서 기술되고 블록(405)에서 도시된 바와 같이, 스레드와 관련된 업/다운 카운트 구성요소(203)는, 이전의 인접한 캐시라인에 대해 히트하는 디멘드 캐시 액세스의 수의 러닝 카운트(러닝 다운 히트 카운트) 및 다음의 인접한 캐시라인에 대해 히트하는 디멘드 캐시 액세스의 수의 러닝 카운트(러닝 업 히트 카운트)를 유지시키고, 러닝 업 히트 카운트나 러닝 다운 히트 카운트 중 하나가 그와 관련된 스레숄드(228)를 초과할 때, 대응되는 인접한 액세스 패턴이 검출되고, 업 프리페칭이나 다운 프리페칭이 활성화된다. 적어도 하나의 실시예에서, 두 개의 프리페칭 모드 중 하나만 임의의 주어진 시간에 활성화될 수 있고, 이 경우 다른 프리페칭 모드의 활성화는 억제된다.
업 프리페칭과 다운 프리페칭이 활성화되지 않으면, 블록(406)에서, 프리페치 방출 모듈(212)은 블록(402)에서 수신된 디멘드 캐시 액세스에 응답하여 액션을 취하지 않는다. 아니면, 업 프리페칭이나 다운 프리페칭 중 하나가 활성화되면, 블록(408)에서, 프리페치 방출 모듈(212)은 프리페치 블록(126)의 프리페쳐(128, 130, 32)에 의해 교환되는 프리페치 상태 정보(232)를 분석하여, 블록(402)에서 수신된 디멘드 캐시 액세스에 응답하여 또 다른 프리페쳐가 프리페치 요청을 방출할 것인지를 결정한다. 적어도 하나의 실시예에서, UDP(128)는 프리페쳐(130, 132)에 대한 "백업" 프리페쳐로서 작동하고, 이들 프리페쳐들 중 하나가 디멘드 캐시 액세스에 대한 프리페치 요청을 프리페쳐가 방출하거나 방출할 것이라고 신호보낸다면, UDP(128)는 블록(406)에 의해 다시 나타난 바와 같이, 액션을 취하지 않음에 의해, 그 자체 프리페치 요청의 임의의 방출을 억제한다.
아니면, UDP(128)가 프리페쳐(130, 132)에 대해 비-우선순위화되지 않거나, 다른 프리페쳐가 디멘드 캐시 액세스를 핸들하지 않는다면, 블록(410)에서, 프리페치 방출 모듈(212)은 어느 타입의 프리페칭이 스레드를 위한 UDP(128)에서 활성화되는지를 결정한다. 업 프리페칭이 활성화된다면, 블록(412)에서, 프리페치 방출 모듈(212)은 블록(402)에서 수신된 디멘드 캐시 액세스의 타겟인 캐시라인에 이후에 인접한 캐시라인(즉, 윗 방향으로 인접한)에 대해 추측에 근거한 프리페치 요청(234)(도 2)을 방출한다. 역으로, 다운 프리페칭이 활성화된다면, 블록(414)에서, 프리페치 방출 모듈(212)은 블록(402)에서 수신된 디멘드 캐시 액세스의 타겟인 캐시라인에 이전에 인접한 캐시라인(즉, 아랫 방향으로 인접한)에 대해 추측에 근거한 프리페치 요청(234)(도 2)을 방출한다. 블록(412) 또는 블록(414)에서 방출된 프리페치 요청(234)의 결과, 인접한 캐시라인이 L2캐시(116)으로 프리페치되고, 그러므로 검출된 인접한 액세스 패턴이 정확하면, 컴퓨트 컴플렉스(102)에 대해 사용가능해질 수 있어서, 그 인접한 캐시라인에 대한 캐시 액세스가 캐시 미스를 야기할 때, 발생할 수 있는 지연을 줄이거나 제거하여서, 인접한 캐시라인이 시스템 메모리(108)로부터 페치되었을 때까지, 스레드를 대기 상태에 있도록 한다. 따라서, 독립적인 프리페쳐 또는 다른 프리페쳐에 대한 백업으로서의 역할을 하는 UDP(128)는, 종래의 스트라이드/스트림 프리페쳐에 의해 검출될 너무 많은 액세스(즉, 너무 "천천히 움직이는")에 걸쳐 있는 인접한 액세스 패턴을 식별하고, 따라서, 캐시 계층(104)이 좀 더 효율적인 데이터 액세스와 프로세싱을 위해, 컴퓨트 컴플렉스(102)의 데이터 액세스 필요성을 더 잘 예상하도록 하기 위해 작동할 수 있다.
일부 실시예에서, 상기에서 기술된 장치와 테크닉은 도 1-4를 참조하여 상기에 기술된 프로세싱 시스템과 같은 하나 이상의 집적 회로(IC) 디바이스(집적 회로 패키지나 마이크로칩이라고도 함)를 포함하는 시스템에서 실행된다. 전자 설계 자동화(EDA)와 컴퓨터 보조 설계(CAD) 소프트웨어 툴은 이들 IC 디바이스의 설계와 제작에서 사용될 수 있다. 이들 설계 툴은 전형적으로 하나 이상의 소프트웨어 프로그램으로 나타난다. 하나 이상의 소프트웨어 프로그램은 컴퓨터 시스템에 의해 실행가능한 코드를 포함하여, 컴퓨터 시스템을 조작아여서, 회로를 제작하기 위해 제조 시스템을 설계 또는 조절하기 위하여 프로세스의 적어도 일부를 수행하기 위해, 하나 이상의 IC 디바이스의 회로를 나타내는 코드 상에서 작동한다. 이러한 코드는 명령어, 데이터 또는 명령어와 데이터의 조합물을 포함할 수 있다. 전통적으로 설계 툴이나 제작 툴을 나타내는 소프트웨어 명령어는 컴퓨팅 시스템에 액세스가능한 컴퓨터 판독가능한 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 설계나 제작의 하나 이상의 단계를 나타내는 코드는 동일한 컴퓨터 판독가능한 저장 매체 또는 서로 다른 컴퓨터 판독가능한 저장 매체에 저장되고 이로부터 액세스될 수 있다.
비일시적 컴퓨터 판독가능한 저장 매체는 임의의 비일시적 저장 매체 또는 명령어 및/또는 데이터를 컴퓨터 시스템으로 제공하기 위해, 사용하는 동안에 컴퓨터 시스템에 의해 액세스가능한, 비일시적 저장 매체의 조합물을 포함할 수 있다. 이러한 저장 매체는, 광학 매체(가령, 콤팩트 디스크(CD), 디지털 다용 디스크(DVD), 블루-레이 디스크), 자기 매체(가령, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(가령, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(가령, 리드-온리 메모리(ROM) 또는 플래시 메모리) 또는 마이크로전자기계 시스템(MEMS)-기반 저장 매체를 포함할 수 있으나, 이에 제한되지 않는다. 컴퓨터 판독가능한 저장 매체는 컴퓨팅 시스템에 내장(가령, 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정 부착(가령, 자기 하드 드라이브), 컴퓨팅 시스템에 제거식으로 부착(가령, 광학 디스크 또는 범용 직렬 버스(USB)-기반 플래시 메모리), 또는 유선이나 무선 네트워크를 통해 컴퓨터 시스템에 연결(가령, 네트워크 액세스가능한 저장소(NAS))될 수 있다.
일부 실시예에서, 상기에서 기술된 테크닉의 어떤 양태는 소프트웨어를 실행하는 프로세싱 시스템의 하나 이상의 프로세서에 의해 실행될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독가능한 저장 매체에 저장되거나, 아니면 유형으로 구현된 하나 이상의 세트의 실행가능한 명령어를 포함한다. 소프트웨어는, 하나 이상의 프로세서에 의해 실행될 때, 상기 기술된 테크닉의 하나 이상의 양태를 수행하도록 하나 이상의 프로세서를 조작하는 명령어와 어떤 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독가능한 저장 매체는, 가령, 자기 또는 광학 디스크 저장 디바이스, 플래시 메모리, 캐시, 랜덤 액세스 메모리(RAM) 또는 그 밖의 비휘발성 메모리 디바이스나 디바이스들과 같은 고체 상태 저장 디바이스를 포함할 수 있다. 비일시적 컴퓨터 판독가능한 저장 매체 상에 저장된 실행가능한 명령어는 소스 코드, 어셈블리 언어 코드, 오브젝트 코드 또는 하나 이상의 프로세서에 의해 해석되거나, 아니면 실행가능한 다른 명령어 포맷일 수 있다.
일반적인 설명에서 상기 기술된 모든 활동이나 요소가 요구되는 것은 아니라는 점, 구체적인 활동이나 디바이스의 일부가 요구되지 않을 수 있다는 점, 및 이들 기술된 것에 추가하여, 하나 이상의 추가적인 활동이 수행되거나 요소가 포함될 수 있다는 점을 주목해야 한다. 여전히 추가적으로, 활동이 나열된 순서가 반드시 이들이 수행되는 순서는 아니다. 또한, 개념은 특정 실시예를 참조하여 기술되었다. 그러나, 기술 분야에서 당업자 중 일인은, 다양한 수정예와 변경예가 이하의 청구항에서 제시된 바와 같은 본 개시물의 범위에서 벗어나지 않으면서 이루어질 수 있다는 것을 인식한다. 이에 따라, 명세서와 도면은 제한적인 의미보다는 설명적으로 여겨져야 하고, 이러한 모든 수정예는 본 개시물의 범위 내에 포함되도록 의도된다.
이점, 그 밖의 장점 및 문제에 대한 해결책은 구체적인 실시예에 대하여 상기에 기술되었다. 그러나, 이점, 장점, 문제에 대한 해결책 및 어떠한 이점, 장점 또는 해결책이 발생하거나 좀 더 두드러지게 할 수 있는 어떠한 특징(들)은, 어떠한 또는 모든 청구항의 중요하고, 요구되거나 필수적인 특징으로 해석되지 않는다. 게다가, 본원에서 기술된 특정 실시예는, 개시된 주제가 상이하지만, 본원에서 가르치는 이점을 가진 기술 분야의 당업자에게 명백한 등가적인 방식으로 수정되고 실시될 수 있기 때문에, 오직 설명적이다. 이하의 청구항에서 기술된 것 이외에, 본원에서 도시된 구성이나 설계의 세부사항에 대한 제한이 의도되지 않는다. 그러므로, 상기에서 기술된 특정한 실시예는 바뀌거나 수정될 수 있고, 이러한 모든 변형예는 개시된 주제의 범위 내에서 고려된다는 것이 명백하다. 이에 따라, 본원에서 추구된 보호범위는 이하의 청구항에서 제시된 바와 같다.

Claims (16)

  1. 캐시(104)를 포함하는 프로세싱 시스템(100)에서 업/다운 프리페쳐의 동작 방법으로서,
    스레드를 위한 디멘드 캐시 액세스가 스레드를 위한 한 세트의 샘플링된 캐시 액세스의 타겟인, 캐시라인에 제1 방향으로 인접한 캐시라인으로 지향되는 복수의 횟수의 제1 러닝 카운트를 유지하기 위해, 스레드를 위한 디멘드 캐시 액세스를, 상기 업/다운 프리페쳐(128)에 의해 모니터링하는 단계; 및
    제1 러닝 카운트가 제1 스레숄드(228)를 초과하였다는 결정에 응답하여, 스레드를 위한 수신된 디멘드 캐시 액세스가 수신된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인에 대한 프리페치 요청(234)을 트리거하는 제1 프리페칭 모드를 활성화하는 단계를 포함하는, 업/다운 프리페쳐의 동작 방법.
  2. 제 1 항에 있어서, 제1 방향은 다음 캐시라인 방향을 포함하는, 업/다운 프리페쳐의 동작 방법.
  3. 제 1 항에 있어서, 제1 방향은 이전 캐시라인 방향을 포함하는, 업/다운 프리페쳐의 동작 방법.
  4. 제 1 항에 있어서,
    샘플링된 캐시 액세스를 포함하는 한 세트의 샘플링된 캐시 액세스를 결정하기 위해, 샘플링 스킴(205)에 따라 스레드를 위한 캐시 액세스를 샘플링하는 단계를 더 포함하는, 업/다운 프리페쳐의 동작 방법.
  5. 제 4 항에 있어서, 샘플링 스킴은, 캐시에서 캐시 히트를 야기하는 캐시 액세스에 대해, 캐시에서 캐시 미스를 야기하는 캐시 액세스의 샘플링을 우선순위화하는, 업/다운 프리페쳐의 동작 방법.
  6. 제 1 항에 있어서,
    활성화되는 제1 프리페칭 모드에 응답하고, 스레드를 위한 디멘드 캐시 액세스를 수신함에 응답하여, 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인을 식별하고, 식별된 캐시라인을 위해 프리페치 요청(234)을 방출하는 단계를 더 포함하는, 업/다운 프리페쳐의 동작 방법.
  7. 제 1 항에 있어서,
    활성화되는 제1 프리페칭에 응답하여, 스레드를 위한 디멘드 캐시 액세스를 수신함에 응답하여, 및 프로세싱 시스템의 또 다른 프리페쳐(130, 132)가 디멘드 캐시 액세스에 응답하여 프리페치 요청을 방출하지 않는다는 표시에 응답하여, 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인을 식별하고, 식별된 캐시라인에 대한 프리페치 요청을 방출하는 단계; 및
    활성화되는 제1 프리페칭에 응답하여, 스레드를 위한 디멘드 캐시 액세스를 수신함에 응답하여, 및 프로세싱 시스템의 또 다른 프리페쳐가 디멘드 캐시 액세스에 응답하여 프리페치 요청을 방출한다는 표시에 응답하여, 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인에 대한 프리페치 요청의 방출을 억제하는 단계를 더 포함하는, 업/다운 프리페쳐의 동작 방법.
  8. 제 1 항에 있어서,
    스레드를 위한 디멘드 캐시 액세스가 스레드를 위한 한 세트의 샘플링된 캐시 액세스의 타겟인, 캐시라인에 제2 방향으로 인접한 캐시라인으로 지향되는 복수의 횟수의 제2 러닝 카운트를 유지하기 위해, 스레드를 위한 디멘드 캐시 액세스를 모니터링하는 단계; 및
    제2 러닝 카운트가 제2 스레숄드를 초과하였다는 결정에 응답하여, 스레드를 위한 수신된 디멘드 캐시 액세스가 수신된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제2 방향으로 인접한 캐시라인에 대한 프리페치 요청을 트리거하는 제2 프리페칭 모드를 활성화하는 단계를 더 포함하는, 업/다운 프리페쳐의 동작 방법.
  9. 시스템(100)에 있어서, 상기 시스템은,
    캐시 액세스를 프로세스하기 위한 캐시 컨트롤러(118)를 포함하는 캐시(104)와, 및
    상기 캐시 컨트롤러에 연결된 업/다운 프리페쳐(128) - 상기 업/다운 프리페쳐는, 스레드를 위한 디멘드 캐시 액세스가 스레드를 위한 한 세트의 샘플링된 캐시 액세스의 타겟인, 캐시라인에 제1 방향으로 인접한 캐시라인으로 지향되는 복수의 횟수의 제1 러닝 히트 카운트를 유지하기 위해, 스레드를 위한 디멘드 캐시 액세스를 모니터링하고, 및 상기 제1 러닝 히트 카운트가 제1 스레숄드를 초과하였다는 결정에 응답하여, 스레드를 위한 수신된 디멘드 캐시 액세스가 수신된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제1 방향으로 인접한 캐시라인에 대한 프리페치 요청(234)을 캐시 컨트롤러로 트리거하는 제1 프리페칭 모드를 실행함 - 를 포함하는, 시스템.
  10. 제 9 항에 있어서, 제1 방향은 다음 캐시라인 방향을 포함하거나, 제1 방향은 이전 캐시라인 방향을 포함하는, 시스템.
  11. 제 9 항에 있어서, 상기 업/다운 프리페쳐는, 샘플링된 캐시 액세스를 포함하는 한 세트의 샘플링된 캐시 액세스를 결정하기 위해, 샘플링 스킴(205)에 따라 스레드를 위한 캐시 액세스를 샘플링하기 위한 샘플링 모듈(202)을 포함하는, 시스템.
  12. 제 11 항에 있어서, 업/다운 프리페쳐는,
    샘플링 모듈에 연결되고, 샘플링된 캐시 액세스에 의해 타겟팅된 캐시라인과 관련된 어드레스를 저장하도록 구성된 복수의 엔트리(214)를 가진 어드레스 버퍼(204); 및
    어드레스 버퍼에 연결되고, 복수의 엔트리(216)를 가진 히트 버퍼(206) - 히트 버퍼의 각각의 엔트리는, 어드레스 버퍼의 대응되는 엔트리와 관련되고, 스레드를 위한 디멘드 캐시 액세스가 어드레스 버퍼의 관련된 엔트리 내에 저장된 어드레스에 의해 나타난 캐시라인에 제1 방향으로 인접한 캐시라인으로 타겟팅되었던 복수의 횟수를 나타내는 제1 히트 카운트를 저장하도록 구성됨 - 를 더 포함하는, 시스템.
  13. 제 12 항에 있어서, 업/다운 프리페쳐는,
    히트 버퍼에 연결되는 히트 합계 모듈(208) - 히트 합계 모듈은 히트 버퍼의 복수의 엔트리의 제1 히트 카운트의 합산에 기초하여, 제1 러닝 히트 카운트를 결정함 - 을 더 포함하는, 시스템.
  14. 제 13 항에 있어서, 업/다운 프리페쳐는,
    히트 합계 모듈에 연결된 비교 모듈(210) - 비교 모듈은 제1 러닝 히트 카운트와 제1 스레숄드의 비교에 응답하여, 제1 프리페칭 모드의 실행을 활성화시킴 - 을 더 포함하는, 시스템.
  15. 제 9 항에 있어서, 업/다운 프리페쳐는,
    스레드를 위한 디멘드 캐시 액세스가 스레드를 위한 한 세트의 샘플링된 캐시 액세스의 타겟인, 캐시라인에 제2 방향으로 인접한 캐시라인으로 지향되는 복수의 횟수의 제2 러닝 히트 카운트를 유지하기 위해, 스레드를 위한 디멘드 캐시 액세스를 모니터링하고; 및 상기 제2 러닝 히트 카운트가 제2 스레숄드를 초과하였다는 결정에 응답하여, 스레드를 위한 수신된 디멘드 캐시 액세스가 수신된 디멘드 캐시 액세스에 의해 타겟팅된 캐시라인에 제2 방향으로 인접한 캐시라인에 대한 프리페치 요청을 캐시 컨트롤러로 트리거하는 제2 프리페칭 모드를 실행하는 단계를 더 포함하는, 시스템.
  16. 삭제
KR1020187035453A 2016-06-13 2016-09-15 업/다운 프리페쳐 KR102464788B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/180,806 US10073785B2 (en) 2016-06-13 2016-06-13 Up/down prefetcher
US15/180,806 2016-06-13
PCT/US2016/051850 WO2017218025A1 (en) 2016-06-13 2016-09-15 Up/down prefetcher

Publications (2)

Publication Number Publication Date
KR20190008274A KR20190008274A (ko) 2019-01-23
KR102464788B1 true KR102464788B1 (ko) 2022-11-08

Family

ID=60572679

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187035453A KR102464788B1 (ko) 2016-06-13 2016-09-15 업/다운 프리페쳐

Country Status (5)

Country Link
US (1) US10073785B2 (ko)
JP (1) JP6701380B2 (ko)
KR (1) KR102464788B1 (ko)
CN (1) CN109196487B (ko)
WO (1) WO2017218025A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6627629B2 (ja) * 2016-04-14 2020-01-08 富士通株式会社 演算処理装置、および演算処理装置の制御方法
CN110226158B (zh) 2017-12-29 2021-06-29 华为技术有限公司 一种数据预取方法、装置和存储设备
US10963249B2 (en) * 2018-11-02 2021-03-30 International Business Machines Corporation Processor prefetcher mode governor for switching between prefetch modes
US20210182214A1 (en) * 2019-12-17 2021-06-17 Advanced Micro Devices, Inc. Prefetch level demotion
CN114625672A (zh) * 2020-12-11 2022-06-14 超威半导体(上海)有限公司 用于快速数据访问的统一高速缓存系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120066455A1 (en) * 2010-09-09 2012-03-15 Swamy Punyamurtula Hybrid prefetch method and apparatus

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6484239B1 (en) 1997-12-29 2002-11-19 Intel Corporation Prefetch queue
US6275918B1 (en) 1999-03-16 2001-08-14 International Business Machines Corporation Obtaining load target operand pre-fetch address from history table information upon incremented number of access indicator threshold
US6643743B1 (en) * 2000-03-31 2003-11-04 Intel Corporation Stream-down prefetching cache
US6907520B2 (en) 2001-01-11 2005-06-14 Sun Microsystems, Inc. Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US7238218B2 (en) * 2004-04-06 2007-07-03 International Business Machines Corporation Memory prefetch method and system
US20070239940A1 (en) * 2006-03-31 2007-10-11 Doshi Kshitij A Adaptive prefetching
US8914617B2 (en) * 2009-12-26 2014-12-16 Intel Corporation Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register
US8762649B2 (en) 2010-03-29 2014-06-24 Via Technologies, Inc. Bounding box prefetcher
US8291172B2 (en) * 2010-04-27 2012-10-16 Via Technologies, Inc. Multi-modal data prefetcher
US8909866B2 (en) * 2012-11-06 2014-12-09 Advanced Micro Devices, Inc. Prefetching to a cache based on buffer fullness
CN103226521B (zh) * 2013-04-18 2016-03-02 浙江大学 多模式数据预取装置及其管理方法
GB2515076B (en) 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120066455A1 (en) * 2010-09-09 2012-03-15 Swamy Punyamurtula Hybrid prefetch method and apparatus

Also Published As

Publication number Publication date
US20170357587A1 (en) 2017-12-14
KR20190008274A (ko) 2019-01-23
JP6701380B2 (ja) 2020-05-27
US10073785B2 (en) 2018-09-11
CN109196487B (zh) 2020-07-14
CN109196487A (zh) 2019-01-11
JP2019521408A (ja) 2019-07-25
WO2017218025A1 (en) 2017-12-21

Similar Documents

Publication Publication Date Title
KR102464788B1 (ko) 업/다운 프리페쳐
US10831494B2 (en) Event triggered programmable prefetcher
US9208096B2 (en) Cache pre-fetching responsive to data availability
TWI519955B (zh) 預取單元、資料預取方法以及電腦程式產品
US20080320228A1 (en) Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache
US20120072667A1 (en) Variable line size prefetcher for multiple memory requestors
TWI780217B (zh) 硬件預取器之基於利用率節流
US9213640B2 (en) Promoting transactions hitting critical beat of cache line load requests
KR20150043472A (ko) 데이터 캐시 프리페치 힌트들
US9483406B2 (en) Communicating prefetchers that throttle one another
US20170046278A1 (en) Method and apparatus for updating replacement policy information for a fully associative buffer cache
KR20230052821A (ko) 프리페칭
EP3258381B1 (en) Up/down prefetcher
US11379372B1 (en) Managing prefetch lookahead distance based on memory access latency
US8484423B2 (en) Method and apparatus for controlling cache using transaction flags
US10025717B1 (en) Multi-dimensional prefetching
US9734071B2 (en) Method and apparatus for history-based snooping of last level caches
US11907722B2 (en) Methods and apparatus for storing prefetch metadata
Wang et al. Computer architecture
US20240211259A1 (en) Prefetching with saturation control
Honarmand Memory Prefetching

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant