KR102467817B1 - 데이터 캐시 영역 프리페처 - Google Patents

데이터 캐시 영역 프리페처 Download PDF

Info

Publication number
KR102467817B1
KR102467817B1 KR1020197003896A KR20197003896A KR102467817B1 KR 102467817 B1 KR102467817 B1 KR 102467817B1 KR 1020197003896 A KR1020197003896 A KR 1020197003896A KR 20197003896 A KR20197003896 A KR 20197003896A KR 102467817 B1 KR102467817 B1 KR 102467817B1
Authority
KR
South Korea
Prior art keywords
region
access
line
prefetcher
cache
Prior art date
Application number
KR1020197003896A
Other languages
English (en)
Other versions
KR20190038835A (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 KR20190038835A publication Critical patent/KR20190038835A/ko
Application granted granted Critical
Publication of KR102467817B1 publication Critical patent/KR102467817B1/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/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • 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/12Replacement control
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • G06F12/0848Partitioned cache, e.g. separate instruction and operand caches
    • 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/0877Cache access modes
    • G06F12/0886Variable-length word access
    • 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/60Details of cache memory
    • G06F2212/6024History based prefetching
    • 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

데이터 캐시 영역 프리페처는, 데이터 캐시 미스가 발생할 때 영역을 생성한다. 각각의 영역은 각각의 데이터 캐시 미스에 근접한 미리 정해진 범위의 데이터 라인을 포함하고 관련 명령 포인터 레지스터(RIP)로 태깅된다. 데이터 캐시 영역 프리페처는 각각의 기존 영역에 대한 미리 정해진 범위의 데이터 라인에 대해 후속 메모리 요청을 비교한다. 각각의 매치에 대해, 데이터 캐시 영역 프리페처는 액세스 비트를 설정하고 설정된 액세스 비트에 기초하여 의사-랜덤 액세스 패턴을 식별하려고 시도한다. 데이터 캐시 영역 프리페처는 얼마나 자주 의사-랜덤 액세스 패턴이 발생하는지를 추적하기 위해 적절한 카운터를 증분 또는 감소시킨다. 의사-랜덤 액세스 패턴이 빈번하게 발생하는 경우, 다음번에 메모리 요청이 동일한 RIP 및 패턴으로 프로세싱되고, 데이터 캐시 영역 프리페처는 그 RIP에 대한 의사-랜덤 액세스 패턴에 따라 데이터 라인을 프리페칭한다.

Description

데이터 캐시 영역 프리페처
관련 출원에 대한 상호 참조
본 출원은 2016년 8월 19일자로 출원된 미국 가출원 제62/377,314호, 2016년 10월 13일자로 출원된 미국 특허 출원 제15/292,777호 및 2016년 11월 25일자로 출원된 유럽 출원 제EP16200806.4호의 이익을 주장하며, 이는 본 명세서에서 완전히 개진되는 바와 같이 참고로 통합된다.
많은 프로세싱 장치는 메모리에 저장된 정보에 액세스하는 데 필요한 평균 시간을 줄이기 위해 캐시를 이용한다. 캐시는 상대적으로 빈번히 사용되는 것으로 예측되는 명령어 또는 데이터의 사본을 저장하는 더 작고 더 빠른 메모리이다. 예를 들어, 캐시를 사용하는 프로세서의 한 유형인 중앙 처리 장치(CPU)는 일반적으로 캐시 또는 캐시 메모리 요소의 계층 구조와 연관된다. 그래픽 처리 장치와 같은 다른 프로세서가 또한 캐시 시스템을 구현한다. CPU에 의해 사용될 것으로 예측되는 명령어 또는 데이터는 (상대적으로 크고 느린) 주 메모리로부터 캐시로 이동된다. CPU가 주 메모리에서 위치를 판독하거나 기입할 필요가 있는 경우, CPU는 우선 원하는 메모리 위치의 사본이 캐시 메모리에 포함되어 있는지 여부를 알기 위해 확인한다. 이 위치가 캐시에 포함되는 경우(캐시 히트(cache hit)), CPU는 캐시 메모리 위치의 사본에 대해 판독 또는 기입 동작을 수행할 수 있다. 이 위치가 캐시에 포함되지 않은 경우(캐시 미스(cache miss)), CPU는 주 메모리에 저장된 정보에 액세스할 필요가 있으며, 일부 경우에, 정보가 주 메모리로부터 복사되어 캐시에 추가될 수 있다. 캐시의 적절한 구성 및 동작은 메모리 액세스의 평균 대기 시간을 주 메모리 대기 시간보다 낮고 캐시 액세스 대기 시간에 근접한 값으로 줄일 수 있다.
프리페처(prefetcher)는, 이러한 라인의 정보가 요청되기 전에 캐시의 라인을 채우는 데 사용된다. 프리페처는 프로세서에서 실행 중인 어플리케이션과 연관된 메모리 요청을 모니터링하고 모니터링된 요청을 사용하여 프로세서가 일반적으로 스트림이라고 칭해지는 메모리 영역의 메모리 어드레스의 특정 시퀀스에 액세스할 가능성이 있는지를 결정하거나 예측한다. 프리페처는 복수의 스트림을 추적하고 다른 스트림에 대한 데이터를 독립적으로 프리페칭한다.
첨부 도면과 결부하여 예시의 방식으로 주어지는 후술하는 설명으로부터 더 상세한 이해가 이루어질 수 있다:
도 1은 특정 구현에 따른 데이터 캐시 영역 프리페처를 사용하는 시스템의 하이 레벨 블록도;
도 2는 특정 구현에 따른 데이터 캐시 영역 프리페처의 하이 레벨 블록도;
도 3은 특정 구현에 따른 데이터 캐시 영역 프리페처에 대한 라인 엔트리 테이블 구조의 라인 엔트리의 블록도 및 이에 대한 흐름도;
도 4는 특정 구현에 따른 데이터 캐시 영역 프리페처의 영역 이력 테이블 구조에 대한 흐름도;
도 5aa, 도 5ab 및 도 5b는 특정 구현에 따른 데이터 캐시 영역 프리페처와 함께 사용하기 위한 방법의 예시적인 흐름도; 및
도 6은 하나 이상의 개시된 구현이 구현될 수 있는 예시적인 장치의 블록도.
본 명세서에는 데이터 캐시 영역 프리페처가 설명된다. 데이터 캐시 영역 프리페처는 (예를 들어, 로드 또는 저장 명령에 응답하여) 프로그램에 의해 생성된 캐시 액세스 패턴을 인식하고, 이 데이터에 대한 가능한 장래의 요청을 예측하여 데이터를 주 메모리로부터 데이터 캐시로 복사하기 위한 프리페치 요청을 발행한다. 특히, 데이터 캐시 영역 프리페처는, 주어진 명령이 데이터 라인에 액세스한 후에, 초기 액세스된 데이터 라인의 미리 정해진 범위 내에 있는 다른 데이터 라인이 후속적으로 액세스되는 패턴을 검출하려고 시도한다. 초기 액세스된 데이터 라인을 포함하는 미리 정해진 범위의 데이터 라인이 영역으로 칭해지고, 각 영역은 명령 포인터 레지스터(instruction pointer register: RIP)로 태깅(tagging)된다. 각 영역과 연관된 패턴은 그 후 동일한 RIP에 의한 후속 액세스를 위해 데이터 라인을 프리페칭하는 데 사용된다.
도 1은 특정 구현에 따라 데이터 캐시 영역 프리페처(160)를 사용하는 프로세싱 시스템(100)의 하이 레벨 블록도이다. 프로세싱 시스템(100)은 주 메모리(110)에 저장된 명령 또는 데이터에 액세스하도록 구성된 프로세서(105)를 포함한다. 프로세서(105)는 명령을 실행하거나 데이터를 조작하는 데 사용되는 적어도 하나의 코어(115) 및 선택된 명령 또는 데이터를 캐시 시스템(117)에 저장함으로써 명령 또는 데이터에 대한 액세스를 가속화하는 계층적 (또는 멀티레벨) 캐시 시스템(117)을 포함한다. 설명된 프로세싱 시스템(100)은 예시적인 것이며, 다른 아키텍처 및 구성이 본 발명의 범위를 벗어나지 않고도 구현될 수 있다.
캐시 시스템(117)은 주 메모리(110)에 저장된 명령 또는 데이터의 사본을 저장하기 위한 레벨 2(L2) 캐시(120)를 포함한다. 일 구현에서, 주 메모리(110)의 각 라인이 L2 캐시(120)에서 16개의 특정 라인(통상적으로 "웨이"(way)라고 칭해짐)으로 및 이로부터 잠재적으로 복사될 수 있도록, L2 캐시(120)는 주 메모리(110)와 16-웨이로 연관되어 있다. 주 메모리(110)에 비해, L2 캐시(120)는 더 작고 더 빠른 메모리 요소를 사용하여 구현된다. 정보가 코어(115)와 L2 캐시(120) 사이에서 보다 신속하게 또는 보다 짧은 대기 시간으로 교환될 수 있도록, L2 캐시(120)는 (주 메모리(110)에 비해) 코어(115)에 논리적으로 또는 물리적으로 더 가깝게 배치된다.
캐시 시스템(117)은 또한 주 메모리(110) 또는 L2 캐시(120)에 저장된 명령 또는 데이터의 사본을 저장하기 위한 L1 캐시(125)를 포함한다. L2 캐시(120)에 비해, L1 캐시(125)는, L1 캐시(125)의 라인에 저장된 정보가 프로세서(105)에 의해 신속하게 검색될 수 있도록, 더 작고 더 빠른 메모리 요소를 사용하여 구현된다. 정보가 (주 메모리(110) 및 L2 캐시(120)와의 통신에 비해) 코어(115)와 L1 캐시(125) 사이에서 보다 신속하게 또는 보다 짧은 대기 시간으로 교환될 수 있도록, L1 캐시(125)는 또한 (주 메모리(110) 및 L2 캐시(120)에 비해) 코어(115)에 논리적으로 또는 물리적으로 더 가깝게 배치될 수 있다. 일 구현에서, L0 캐시, L1 캐시, L2 캐시, L3 캐시 등과 같은 요소를 포함하는 상이한 멀티레벨 캐시가 사용된다. 일부 구현에서, 상위 레벨 캐시는 하나 이상의 하위 레벨 캐시를 포함하여, 하위 레벨 캐시의 라인이 또한 포괄적 상위 레벨 캐시에 저장된다.
L1 캐시(125)는 L1-I 캐시(130) 및 L1-D 캐시(135)로 칭해지는, 명령 및 데이터를 저장하기 위한 레벨 1(L1) 캐시로 분리된다. L1 캐시(125)를 명령만을 저장하기 위한 L1-I 캐시(130) 및 데이터만을 저장하기 위한 L1-D 캐시(135)로 분리 또는 분할하는 것은, 캐시가 각각 명령 또는 데이터를 요청할 가능성이 있는 엔티티에 더 가깝게 배치될 수 있게 한다. 따라서, 이 구성은 경합(contention), 와이어 지연을 감소시키고, 일반적으로 명령 및 데이터와 연관된 대기 시간을 감소시킨다. 일 구현에서, 대체 정책은, L1-I 캐시(130)의 라인이 L2 캐시(120)로부터의 명령으로 대체되고, L1-D 캐시(135)의 라인이 L2 캐시(120)로부터의 데이터로 대체되도록 지시한다.
프로세서(105)는 또한 하나 이상의 캐시(125, 130, 135)에서 데이터 라인을 채우는 데 사용되는 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)를 포함한다. 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)가 프로세서(105) 내의 별개 요소로서 도시되어 있지만, 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)는 다른 요소의 일부로서 구현될 수 있다. 일 구현에서, 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)는 하드웨어 프리페처이다. 일 구현에서, 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)는 코어(115)에서 실행되는 어플리케이션과 연관된 메모리 요청을 모니터링한다. 예를 들어, 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)는 미스 어드레스 버퍼(miss address buffer: MAB)(145)에 기록되는 캐시 히트(hit) 또는 미스(miss)로 귀결되는 메모리 요청(예를 들어, 데이터 라인 액세스)을 모니터링한다. 스트림 프리페처(150) 및 데이터 캐시 영역 프리페처(160)는, 코어(115)가 주 메모리(110)의 메모리 어드레스의 특정 시퀀스(명목상 스트림으로 칭해짐)에 액세스할 가능성이 있는 것으로 결정하거나 예측하지만, 각각의 프리페처는 액세스를 다르게 처리한다.
스트림 프리페처(150)는 코어(115)에 의한 2 이상의 인접 및 순차 메모리 액세스를 검출한다. 시퀀스의 방향은 순차 메모리 액세스의 시간 시퀀스에 기초하여 결정되며, 코어(115)는 이 방향을 사용하여 현재 또는 이전의 순차 메모리 액세스에 기초하여 외삽(extrapolating)에 의해 장래의 메모리 액세스를 예측한다. 그 후, 스트림 프리페처(150)는 예측된 위치의 정보를 주 메모리(110)로부터 페칭하고, 적절한 캐시에 이 정보를 저장하여 코어(115)에 의해 요구되기 전에 정보가 이용 가능하게 된다.
일반적으로, 데이터 캐시 영역 프리페처(160)는, 데이터 캐시 미스가 발생할 때 영역을 생성한다. 각각의 영역은 각각의 데이터 캐시 미스에 근접한 미리 정해진 범위의 데이터 라인을 포함하고 관련 RIP로 태깅된다. 그 후, 데이터 캐시 영역 프리페처(160)는 기존의 영역들 각각에 대한 미리 정해진 범위의 데이터 라인에 대해 후속 메모리 요청을 비교한다. 각 매치(match)에 있어서, 데이터 캐시 영역 프리페처(160)는 액세스 비트를 설정하고, 설정된 액세스 비트에 기초하여 의사-랜덤(pseudo-random) 액세스 패턴을 식별하려고 시도한다. 데이터 캐시 영역 프리페처(160)는 후에 적절한 카운터를 증분 또는 감소시켜, 의사-랜덤 액세스 패턴이 얼마나 자주 발생하는지를 추적한다. 의사-랜덤 액세스 패턴이 (예를 들어, 미리 설정된 임계값에 기초하여) 빈번히 발생하면, 다음번 메모리 요청이 동일한 RIP로 프로세싱되고, 데이터 캐시 영역 프리페처(160)는 그 RIP에 대한 의사-랜덤 액세스에 따라 데이터 라인을 프리페칭한다.
일 구현에서, 스트림 프리페처(150)와 데이터 캐시 영역 프리페처(160) 사이에는 피드백이 존재한다. 이 피드백은 스트림 프리페처(150)를 스로틀링(throttling)하는 데 사용된다. 예를 들어, 플래그의 인에이블은 본 명세서에서 후술하는 바와 같이, 데이터 캐시 영역 프리페처(160)가, 스트림 프리페처(150)가 보류 중인 데이터 캐시 영역 프리페치 요청으로 새로 생성된 스트림에 작용하는 것을 방지할 수 있게 한다.
도 2는 특정 구현에 따른 데이터 캐시 영역 프리페처(200)의 하이 레벨 블록도이다. 데이터 캐시 영역 프리페처(200)는 (트레이닝 구조에 의해 채워지는 백킹(backing) 구조인) 영역 이력 테이블(210)에 커플링된 (트레이닝 구조인) 라인 엔트리 테이블(205)을 포함한다. 본 명세서에 설명된 테이블 엔트리의 수 및 필드의 크기는 단지 예시적인 것이고, 다른 값들이 본 발명의 범위를 벗어나지 않고도 사용될 수 있다.
라인 엔트리 테이블(205)은 미리 정해진 수의 라인 엔트리(215)를 포함한다. 일 구현에서, 라인 엔트리 테이블(205)은 32개의 엔트리를 포함한다. 각 라인 엔트리(215)는 RIP 필드(220), 데이터 라인에 대한 어드레스 필드(222), 액세스 비트 필드(224) 및 제2 라인 액세스 비트 필드(226)를 포함한다. 일 구현에서, RIP 필드(220)는 20 비트 필드이고, 어드레스 필드(222)는 44 비트 필드이고, 액세스 비트 필드(224)는 11 비트 필드이고, 제2 라인 액세스 비트 필드(226)는 3 비트 필드이다. 일 구현에서, 라인 엔트리 테이블(205)은 컨텐츠 어드레서블 메모리(content addressable memory: CAM)를 사용하여 구현된다.
영역 이력 테이블(210)은 RIP[19:0] 및 Addr[5:4](여기서, 후자는 또한 오프셋으로 칭해짐)의 9-비트 해시를 사용하여 일 구현에서 인덱싱되는 미리 정해진 개수의 영역 이력 엔트리(230)를 포함한다. 일 구현에서, 영역 이력 테이블(210)은 512개의 엔트리를 포함한다. 각각의 영역 이력 테이블 엔트리(230)는 액세스 비트/카운터 필드(238)를 가지며, 액세스 비트/카운터 필드(238)의 각 비트(비트 0 제외)는 2 비트 카운터를 갖는다. 일 구현에서, 액세스 비트/카운터 필드(238)는 엔트리 당 11개의 엔트리 및 2 비트 카운터를 갖는 22 비트 2차원 어레이 또는 데이터 구조이다. 일 구현에서, 2 비트 카운터는 업/다운 카운터이다.
프로세서로부터의 메모리 요청 또는 데이터 라인 액세스는 데이터 캐시 미스 상의 라인 엔트리 테이블(205)에 삽입되어 영역을 생성한다. 각 영역의 RIP 필드(220) 및 어드레스 필드(222)는 각각의 미싱(missing)된 메모리 요청과 연관된 RIP 및 어드레스로 채워진다. 각 영역은 데이터 캐시를 미싱한 메모리 요청에 근접한 미리 정해진 범위의 데이터 라인에 의해 규정된다. 액세스 비트 필드(224)는 미리 정해진 범위의 데이터 라인의 각 데이터 라인에 대한 비트를 포함한다. 액세스 비트 필드(224)의 미리 정해진 위치 또는 비트는 홈(home) 위치 또는 홈 비트로서 지정된다. 홈 비트는 데이터 캐시를 미싱하고 특정 영역을 생성한 메모리 요청이다. 예시적인 구현에서, 미리 정해진 범위는 10개의 데이터 라인이고, 범위는 홈 비트로부터 +6 데이터 라인 및 -4 데이터 라인이며, 여기서 홈 비트는 비트 0 또는 위치 0이다. 후속 메모리 요청은 후속 메모리 요청이 미리 정해진 범위의 데이터 라인 내에 있는지를 결정하기 위해 (예를 들어, CAM을 사용하여) 비교된다. 대응하는 비트는 미리 정해진 범위 내에 있는 각각의 후속 메모리 요청에 대한 영역의 액세스 비트 필드(224)에서 설정된다.
액세스 비트 필드(224)의 액세스 비트의 설정은 잠재적으로 데이터 라인을 프리페칭하기 위해 영역 이력 테이블(210)에 의해 사용되는 의사-랜덤 패턴을 확립한다. 특히, 라인 엔트리 테이블(205)에서의 메모리 요청이 오래되어 아웃되고 액세스 비트 필드(224)의 일부 비트의 설정에 의해 확립된 유효한 패턴을 갖는 경우, 메모리 요청은 영역 이력 테이블(210)로 축출되고, 상술한 바와 같이 필드가 채워진다. 제2 라인 액세스 비트 필드(226)는, 의사-랜덤 패턴이 2 이상의 인접 및 순차 메모리 액세스(즉, 유효하지 않은 패턴)를 나타내는지를 결정하는 데 사용되며, 이 경우 영역은 영역 이력 테이블(210)로 이동되지 않고, 도 1에 나타낸 바와 같이 스트림 프리페처(150)에 의해 처리된다.
영역 이력 테이블(210)은 주어진 RIP 및 오프셋을 갖는 메모리 요청이 확립된 패턴에 따라 주변 데이터 라인에 대한 요청들에 선행된 횟수를 추적한다. 추적 정보는 액세스 비트/카운터 필드(238)에서 2 비트 카운터를 사용하여 유지된다. 일 구현에서, 영역 이력 테이블 엔트리(230)를 업데이트할 때, 액세스 비트/카운터 필드(238)의 각각의 개별 2 비트 업/다운 카운터는 (라인 엔트리에서 대응하는 액세스 비트가 1인 경우) 증분되거나, (라인 엔트리에서 대응하는 액세스 비트가 0인 경우) 감소된다. 감소될 때, 이러한 2 비트 업/다운 카운터는 0으로 포화된다. 증분될 때, 이러한 2 비트 업/다운 카운터는 3으로 포화된다. 후속 데이터 캐시 미스가 새로운 라인 엔트리를 생성하는 경우, 관련 RIP와 오프셋이 영역 이력 테이블(210)의 엔트리들 중 하나를 선택하는 데 사용되며, 액세스 비트/카운터 필드(238)의 2 비트 카운터는, 임계값(예를 들어, 2)에 대해 비교함으로써 프리페치가 적절한지를 결정하는 데 사용된다. 프리페치가 보증되는 경우, 적절한 또는 관련 정보가 프리페치 요청을 생성하기 위해 영역 프리페치 생성 유닛(250)으로 전송되고, 이어서 프리페치 요청을 프리페치 요청 선입 선출(fist in, fist out: FIFO) 버퍼(도시되지 않음)로 전송한다.
도 3은 특정 구현에 따른 데이터 캐시 영역 프리페처에 대한 라인 엔트리 테이블 구조의 라인 엔트리(300)의 블록도 및 이에 대한 흐름도이다. 각 라인 엔트리(300)는 RIP 필드(305), 데이터 캐시 미스에 대한 어드레스 필드(310), 액세스 비트 필드(315) 및 제2(2번째) 라인 액세스 비트 필드(320)를 포함한다. 구현에서, RIP 필드(305)는 20 비트 필드이고, 어드레스 필드(310)는 44 비트 필드이고, 액세스 비트 필드(315)는 11 비트 필드이고, 제2 라인 액세스 비트 필드(320)는 3 비트 필드이다. 일 구현에서, 액세스 비트 필드(315)는 +6으로부터 -4까지의 데이터 라인으로부터의 데이터 캐시 영역 프리페처의 범위를 나타내며, 여기서 비트 0은 데이터 캐시 미스와 연관된 데이터 라인 또는 어드레스이다(이는 상술한 바와 같이 "홈"으로 지정됨).
제2 라인 액세스 비트 필드(320)는 홈에 대해 2 이상의 인접 및 순차 메모리 액세스가 존재하는지를 결정하는 데 사용된다. 즉, 제2 라인 액세스 비트 필드(320)는 순차(스트라이드(stride) = +1 또는 -1 캐시 라인) 스트림과 다른 비순차 액세스 패턴 사이에서 구별하는 데 사용된다. 순차 스트림은, 액세스가 다음 순차(+/-1) 캐시 라인에 대한 것인 경우, 스트림/영역에 대한 제2 액세스에 대해 트레이닝한다. 스트림 프리페처는 영역 이력 테이블로부터 배제되는 순차 스트림을 처리한다. 특히, 제2 라인 액세스 비트 +1 및 -1이 설정되면, 대응 스트림 또는 관련 영역은 영역 이력 테이블로 이동되지 않는다. 영역으로의 제2 액세스가 다음 순차(+/-1) 캐시 라인에 대한 것이 아닌 경우, 제2 라인 액세스 비트 0이 설정된다. 제2 라인 액세스 비트 0은, 영역에 대한 제2 액세스가 다음 순차(+/-1) 캐시 라인에 대한 것이 아니었음을 나타낸다. 비순차 액세스 패턴을 갖는 이러한 라인 엔트리는 영역 이력 테이블에 포함될 후보이다.
동작에서, 데이터 캐시(Dc) 미스 상태는 라인 엔트리 테이블에 대한 입력으로서 사용된다(단계 350). 기존의 영역을 업데이트하지 않는 각각의 데이터 캐시 미스는 새로운 라인 엔트리(300)에 입력되는 새로운 영역을 생성하고, 적절한 필드가 본 명세서에 논의된 바와 같이 채워진다(단계 352). 과거의 라인 엔트리(300)는 가장 최근에 사용된 교체 알고리즘에 따라 축출된다. 유효한 패턴이 과거의 라인 엔트리(300)의 액세스 비트 필드(315) 및 제2 라인 액세스 비트 필드(320)에 존재하는 경우, 과거의 라인 엔트리(300)가 영역 이력 테이블을 업데이트하는 데 사용된다(단계 354).
도 4는 특정 구현에 따른 데이터 캐시 영역 프리페처의 영역 이력 테이블(405)에 대한 흐름도(400)이다. 영역 이력 테이블(405)은 RIP이고 오프셋-인덱싱되는 복수의 영역 이력 테이블 엔트리(410)를 포함한다. 각각의 영역 이력 테이블 엔트리(410)는 액세스 비트/카운터 필드(416)의 각각의 비트에 대해 2 비트 카운터를 포함하는 액세스 비트/카운터 필드(416)를 포함한다. 일 구현에서, 액세스 비트/카운터 필드(416)는 엔트리 당 11개의 엔트리와 2 비트 카운터를 갖는 22 비트 2차원 어레이 또는 데이터 구조이다. (어드레스 비트 5 및 4를 갖는 옥토-워드(octo-word) 오프셋으로 나타내어진) 어드레스 오프셋(414)은 복수의 상이한 라인 액세스 패턴이 영역 이력 테이블(405)에 저장될 수 있게 하는 데 사용되어, 복수의 상이한 데이터 라인 액세스 패턴이 64-바이트 캐시 라인 내에서 초기 데이터 라인 액세스(즉, 홈 비트)가 위치된 장소에 기초하여 주어진 RIP에 대해 프리페칭될 수 있다. 영역 내의 초기 데이터 액세스가 데이터 라인의 시작 또는 끝 부근에 있는 경우, 추가 데이터 라인 또는 상이한 패턴의 데이터 라인이 프리페칭될 필요가 있을 수 있다. 보다 구체적으로, 영역 프리페처는 프로그램에 의해 이루어진 시스템 메모리의 영역에 대한 로드/저장 메모리 액세스의 의사-랜덤 시퀀스를 추적한다. 이러한 로드/저장 메모리 액세스는 통상적으로 4, 8 또는 16 바이트이며, 통상적으로 64 바이트인 캐시 라인보다 훨씬 작다. 영역 프리페처는 이러한 로드/저장 메모리 액세스를 영역을 생성한 초기 메모리 액세스 캐시 미스를 둘러싸는 64B 캐시 라인의 제2의, 더 거친 의사-랜덤 패턴 상에 매핑한다. 이러한 제2의, 더 거친 의사-랜덤 패턴은 라인 액세스 비트이다.
로드/저장 메모리 액세스의 의사-랜덤 시퀀스가 일관된다고 가정하더라도, 동일한 어드레스 오프셋이 메모리 영역으로부터 메모리 영역으로 사용되고, 이러한 4, 8 또는 16 바이트 메모리 액세스의 64B 캐시 라인(라인 액세스 비트)으로의 매핑은 영역을 생성한 초기 메모리 액세스 캐시 미스가 캐시 라인의 시작, 중간 또는 끝에 대한 것이었는지 여부에 따라 달라진다.
영역 이력 테이블에 액세스하는 데 사용되는 인덱스에 초기 메모리 액세스의 어드레스 오프셋(414)(Addr[5:4])을 포함시키는 것은, 64B 캐시 라인 경계에 대한 시스템 메모리 내의 영역의 정렬에 기초하여 동일한 RIP에 대한 영역 이력 테이블에 복수의 상이한 라인 액세스 패턴이 저장될 수 있게 한다.
동작에서, 과거의 라인 엔트리(300)가 라인 엔트리 테이블로부터 축출될 때, 그리고 유효한 패턴이 과거의 라인 엔트리(300)의 액세스 비트 필드(315) 및 제2 라인 액세스 비트 필드(320)에 존재하는 경우, 과거의 라인 엔트리(300)는 영역 이력 테이블을 업데이트하는 데 사용된다(단계 420). 특히, 과거의 라인 엔트리(300)에 대한 주어진 RIP 및 어드레스 오프셋은 영역 이력 테이블(405)로부터 영역 이력 테이블 엔트리(410)를 판독하기 위한 인덱스로서 사용된다. 액세스 비트/카운터 필드(416)의 2 비트 카운터는 주어진 RIP 및 어드레스 오프셋이 확립된 패턴을 따르는 횟수를 추적하는 데 사용된다. 과거의 라인 엔트리(300)의 액세스 비트 필드(315)의 각각의 비트가 검사된다. 라인 액세스 비트 필드(315)가 1이면, 데이터 캐시 영역 프리페처는 영역 이력 라인 테이블(410)의 액세스 비트/카운터 필드(416)에서 대응하는 2 비트 카운터를 증분시킨다. 라인 액세스 비트 필드(315)가 0이면, 데이터 캐시 영역 프리페처는 영역 이력 라인 테이블(410)의 액세스 비트/카운터 필드(416)에서 대응하는 2 비트 카운터를 감소시킨다.
후속 데이터 캐시 미스가 새로운 라인 엔트리(300)를 생성할 때, 새로운 라인 엔트리(300)와 연관된 RIP 및 어드레스 오프셋은 영역 이력 테이블(405)로부터 영역 이력 테이블 엔트리(410)를 판독하기 위한 인덱스로서 사용된다. 데이터 캐시 영역 프리페처는 그 후 액세스 비트/카운터 필드(416)의 각각의 2 비트 카운터를 검사한다. 카운터가 임계값(예를 들어, 2) 초과이면, 데이터 캐시 영역 프리페처는 대응하는 캐시 라인 오프셋에 대한 영역 프리페치 요청을 생성한다(단계 424). 이러한 캐시 라인 오프셋은 새로운 라인 엔트리(300)의 홈 어드레스에 대한 것이다. 생성된 영역 프리페치 요청은 데이터 캐시 프리페치 요청 큐에 배치된다(단계 426).
도 5aa 및 도 5ab는 특정 구현에 따른 데이터 캐시 영역 프리페처와 함께 사용하기 위한 방법의 예시적인 흐름도(500)이다. 데이터 캐시 영역 프리페처는 데이터 캐시 미스 시에 메모리 요청을 수신한다(단계 505). 메모리 요청은 라인 엔트리 테이블의 모든 라인 엔트리와 비교된다(단계 510). 매칭이 존재하면, 라인 엔트리 테이블의 적절한 비트가 설정된다(단계 512). 매칭이 존재하지 않으면, 새로운 영역이 생성되어 라인 엔트리 테이블의 라인 엔트리에 입력된다(단계 515). 이 시점에서, 1) 도 5aa 및 도 5ab에서 설명되는 바와 같이 영역 이력 테이블을 업데이트하고, 2) (도 5aa에서 "B"로 표기된) 도 5b에서 설명되는 바와 같이 영역 프리페치 요청 생성과 같은 2개의 상이한 프로세스가 분기가 발생한다. 여전히 도 5aa 및 도 5ab를 참조하면, 홈 비트가 메모리 요청의 어드레스에 설정되고 RIP가 라인 엔트리에 저장된다(단계 517). 후속 메모리 요청들은 이들이 메모리 요청의 미리 정해진 범위 내에 있는지를 결정하기 위해 재검토된다(단계 519). 후속 메모리 요청들이 미리 정해진 범위 내에 있는 경우, 특정 라인 액세스 비트가 특정 영역에 대한 라인 엔트리에 설정된다(단계 521). 후속 메모리 요청들이 미리 정해진 범위 내에 있지 않는 경우, 새로운 영역이 생성된다(단계 522).
주어진 시간에, 새로운 라인 엔트리가 생성될 때 각각의 라인 엔트리가 오래되어 아웃될 것이다(단계 523). 이 때, 라인 액세스 비트는 어떤 패턴이 존재하는지를 결정하기 위해 재검토된다(단계 525). 검출된 패턴이 인접하고 순차적이면(예를 들어, 홈 비트에 대해 오름차순 또는 내림차순 패턴이 존재하는 경우), 라인 엔트리는 폐기된다(단계 527). 일 구현에서, 데이터 캐시 영역 프리페처는 ((제2 라인 액세스 비트 [+1] AND 라인 액세스 비트 [+6:+1](모두 1로 설정됨))가 1과 같을 때) OR ((제2 라인 액세스 비트 [-1] AND 라인 액세스 비트 [-1:-4](모두 1로 설정 됨))가 1과 같을 때) 이러한 라인 엔트리를 폐기한다. 검출된 패턴이 의사-랜덤인 경우(단계 529)(예를 들어, 비트 6, 2 및 3이 설정되는 경우), 인덱스로서 메모리 요청의 RIP 및 어드레스 오프셋을 사용하여 영역 이력 테이블로 이동하기 위한 라인 엔트리가 준비된다(단계 531). 즉, 라인 엔트리의 RIP 및 어드레스 오프셋이 영역 이력 테이블로부터 엔트리를 판독하기 위한 인덱스로서 사용된다. 라인 엔트리의 대응 액세스 비트가 1로 설정되면, 데이터 캐시 영역 프리페처는 특정 카운터를 증분시킨다(단계 537). 라인 엔트리의 대응 액세스 비트가 0으로 설정되면, 데이터 캐시 영역 프리페처는 특정 카운터를 감소시킨다. 검출된 패턴이 의사-랜덤이 아니면, 라인 엔트리는 다른 프로세싱을 위해 다른 프리페처 또는 모듈에 의해 처리된다(단계 532).
이제 도 5b를 참조하면, 새로운 엔트리에 대한 RIP 및 오프셋(도 4의 어드레스 비트 5 및 4를 갖는 옥토-워드 오프셋으로 나타내어짐)이 영역 이력 테이블로 판독하기 위해 사용된다(단계 550). 데이터 캐시 영역 프리페처는 그 후 영역 이력 테이블 엔트리의 액세스 필드의 각 2 비트 카운터를 검사한다(단계 555). 카운터가 임계값 초과이면, 데이터 캐시 영역 프리페처는 영역 프리페치 요청을 생성한다(단계 570). 생성된 영역 프리페치 요청은 데이터 캐시 프리페치 요청 큐(queue)에 배치된다(단계 575). 카운터가 임계값 초과가 아니면, 프로세싱을 계속한다(단계 560). 즉, 이 시간에 영역 프리페치 요청은 생성되지 않는다.
도 6은 하나 이상의 개시된 실시예의 하나 이상의 부분이 구현될 수 있는 예시적인 장치(600)의 블록도이다. 장치(600)는 예를 들어, 헤드 장착 장치, 서버, 컴퓨터, 게임 장치, 휴대용 장치, 셋톱 박스, 텔레비전, 모바일 전화 또는 태블릿 컴퓨터를 포함할 수 있다. 장치(600)는 프로세서(602), 메모리(604), 저장소(606), 하나 이상의 입력 장치(608) 및 하나 이상의 출력 장치(610)를 포함한다. 장치(600)는 또한 선택적으로 입력 드라이버(612) 및 출력 드라이버(614)를 포함할 수 있다. 장치(600)가 도 6에 나타내지 않은 추가적인 구성 요소를 포함할 수 있음이 이해된다.
프로세서(602)는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU), 동일한 다이 상에 위치된 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함할 수 있으며, 각 프로세서 코어는 CPU 또는 GPU일 수 있다. 메모리(604)는 프로세서(602)와 동일한 다이 상에 위치될 수 있거나, 프로세서(602)와 별개로 위치될 수 있다. 메모리(604)는 휘발성 또는 비휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM 또는 캐시를 포함할 수 있다.
저장소(606)는 예를 들어, 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광 디스크 또는 플래시 드라이브와 같은 고정식 또는 착탈식 저장소를 포함할 수 있다. 입력 장치(608)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 인식 스캐너, 또는 네트워크 접속부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함할 수 있다. 출력 장치(610)는 디스플레이, 스피커, 프린터, 햅틱(haptic) 피드백 장치, 하나 이상의 광, 안테나, 또는 네트워크 접속부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함할 수 있다.
입력 드라이버(612)는 프로세서(602) 및 입력 장치(608)와 통신하고, 프로세서(602)가 입력 장치(608)로부터 입력을 수신할 수 있게 한다. 출력 드라이버(614)는 프로세서(602) 및 출력 장치(610)와 통신하고, 프로세서(602)가 출력 장치(610)로 출력을 전송할 수 있게 한다. 입력 드라이버(612) 및 출력 드라이버(614)는 선택적인 구성 요소이고, 입력 드라이버(612) 및 출력 드라이버(614)가 존재하지 않는 경우, 장치(600)가 동일한 방식으로 동작할 것이라는 것에 유의한다.
일반적으로, 일 구현에서, 데이터 캐시 영역 프리페처는 복수의 라인 엔트리를 갖는 라인 엔트리 데이터 테이블을 포함하며, 각 라인 엔트리는 미리 정해진 수의 액세스 비트로 규정되는 영역을 포함하고, 캐시 라인이 그 영역 내에서 요청되면 주어진 라인 엔트리에 대한 액세스 비트가 설정된다. 데이터 캐시 영역 프리페처는 라인 엔트리 데이터 테이블로부터 축출을 수신하도록 구성된 영역 이력 테이블을 추가로 포함한다. 데이터 캐시 영역 프리페처는, 축출 가능 라인 엔트리의 특정 액세스 비트로부터의 액세스 패턴인지를 결정하고, 영역 이력 테이블에의 축출로부터 미리 정해진 액세스 패턴을 갖는 라인 엔트리를 배제한다. 일 구현에서, 데이터 캐시 영역 프리페처는 의사-랜덤 액세스 패턴을 갖는 라인 엔트리를 영역 이력 테이블에 축출한다. 일 구현에서, 영역 이력 테이블은 적어도 명령 포인터 레지스터(RIP)를 사용하여 인덱싱된다. 일 구현에서, 영역 이력 테이블은 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 동일한 RIP에 대해, 복수의 의사-랜덤 액세스 패턴을 지원하기 위해 오프셋을 사용하여 추가로 인덱싱된다. 일 구현에서, 각각의 영역 이력 엔트리는 미리 정해진 수의 액세스 비트를 포함하고, 각각의 영역 이력 엔트리는 미리 정해진 수의 액세스 비트의 특정 액세스 비트에 대한 카운터를 포함하고, 카운터는, 액세스 비트가 축출 가능한 라인 엔트리에 대해 설정되는지 여부에 따라 증분 또는 감소된다. 일 구현에서, 데이터 캐시 영역 프리페처는, 영역 이력 테이블의 특정 영역 이력 엔트리의 특정 액세스 비트와 연관된 카운터가 임계값에 도달했다는 조건 하에 영역 이력 테이블로부터 프리페치 요청을 수신하도록 구성된 영역 프리페치 생성기를 추가로 포함한다. 일 구현에서, 데이터 캐시 영역 프리페처는, 다른 프리페처가 데이터 캐시 영역 프리페처로 계류 중인 스트림을 프로세싱하는 것을 차단한다. 일 구현에서, 각각의 라인 엔트리는, 후속 캐시 라인 요청이 미리 정해진 수의 액세스 비트에서 홈 비트의 하나의 액세스 비트 내에 있을 때 설정되고 영역 이력 테이블에의 축출로부터 배제되는 미리 정해진 액세스 패턴을 결정하는 데 사용되는 제2 액세스 비트를 추가로 포함한다.
일 구현에서, 프로세싱 시스템은 스트림 프리페처 및 데이터 캐시 영역 프리페처를 포함한다. 데이터 캐시 영역 프리페처는 복수의 라인 엔트리를 갖는 라인 엔트리 데이터 테이블과, 라인 엔트리 데이터 테이블로부터 축출을 수신하는 영역 이력 테이블을 포함한다. 각각의 라인 엔트리는 미리 정해진 수의 액세스 비트로 규정된 영역을 포함하고, 캐시 라인이 영역 내에 요청되면 주어진 라인 엔트리에 대해 액세스 비트가 설정된다. 데이터 캐시 영역 프리페처는 축출 가능 라인 엔트리의 특정 액세스 비트로부터 액세스 패턴을 결정하고, 영역 이력 테이블에의 축출로부터 미리 정해진 액세스 패턴을 갖는 라인 엔트리를 배제하고, 스트림 프리페처가 데이터 캐시 영역 프리페처로 계류 중인 스트림을 프로세싱하는 것을 차단한다. 일 구현에서, 데이터 캐시 영역 프리페처는 의사-랜덤 액세스 패턴을 갖는 라인 엔트리를 영역 이력 테이블에 축출한다. 일 구현에서, 영역 이력 테이블은 적어도 명령 포인터 레지스터(RIP)를 사용하여 인덱싱된다. 일 구현에서, 영역 이력 테이블은 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 동일한 RIP에 대해 복수의 의사-랜덤 액세스 패턴을 지원하기 위해 오프셋을 사용하여 추가로 인덱싱된다. 일 구현에서, 각각의 영역 이력 엔트리는 미리 정해진 수의 액세스 비트를 포함하고, 각각의 이력 라인 엔트리는 미리 정해진 수의 액세스 비트의 특정 액세스 비트에 대한 카운터를 포함하고, 카운터는, 각각의 액세스 비트의 비트 세트가 존재하는지 여부에 따라 증분 또는 감소된다. 일 구현에서, 시스템은, 영역 이력 테이블의 특정 영역 이력 엔트리의 특정 액세스 비트와 연관된 카운터가 임계값에 도달했다는 조건 하에 영역 이력 테이블로부터 프리페치 요청을 수신하도록 구성된 영역 프리페치 생성기를 포함한다. 일 구현에서, 각각의 라인 엔트리는, 후속 캐시 라인 요청이 미리 정해진 수의 액세스 비트에서 홈 비트의 하나의 액세스 비트 내에 있을 때 설정되고 영역 이력 테이블에의 축출로부터 배제되는 미리 정해진 액세스 패턴을 결정하는 데 사용되는 제2 액세스 비트를 추가로 포함한다.
일 구현에서, 데이터 캐시 영역 프리페치를 위한 방법은 라인 엔트리 테이블에서 수신되는 캐시 라인 요청을 포함하고, 라인 엔트리 테이블은 복수의 라인 엔트리를 가지며, 각각의 라인 엔트리는 미리 정해진 수 액세스 비트로 규정되는 영역을 포함한다. 캐시 라인 요청이 영역 내에 있으면 액세스 비트가 주어진 라인 엔트리에 대해 설정된다. 액세스 패턴은 축출 가능 라인 엔트리의 특정 액세스 비트로부터 결정된다. 미리 정해진 액세스 패턴을 갖는 라인 엔트리는 영역 이력 테이블에의 축출로부터 배제되고, 의사-랜덤 액세스 패턴을 갖는 라인 엔트리는 영역 이력 테이블로 축출된다. 일 구현에서, 영역 이력 테이블은 적어도 명령 포인터 레지스터(RIP)를 사용하여 인덱싱된다. 일 구현에서, 영역 이력 테이블은, 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 동일한 RIP에 대해 복수의 의사-랜덤 액세스 패턴을 지원하기 위해 RIP 및 오프셋을 사용하여 인덱싱된다. 일 구현에서, 각각의 이력 라인 엔트리는 미리 정해진 수의 액세스 비트의 특정 액세스 비트에 대한 카운터를 포함하고, 카운터는 각각의 액세스 비트가 설정되는지 여부에 따라 증분 또는 감소된다. 일 구현에서, 특정 이력 라인 엔트리 의 특정 액세스 비트와 연관된 카운터가 임계값을 충족시키거나 초과하는 조건 하에서, 프리페치 요청이 영역 프리페치 생성기로 전송된다. 일 구현에서, 다른 프리페처는 데이터 캐시 영역 프리페처로 계류 중인 스트림을 프로세싱할 수 없도록 차단된다. 일 구현에서, 각각의 라인 엔트리는 제2 액세스 비트를 추가로 포함하고, 제2 액세스 비트는, 후속 캐시 라인 요청이 미리 정해진 수의 액세스 비트에서 홈 비트의 하나의 액세스 비트 내에 있을 때 설정되고, 설정된 제2 액세스 비트는 영역 이력 테이블에의 축출로부터 배제되는 미리 정해진 액세스 패턴을 결정하는 데 사용된다.
일반적으로, 그리고 본 명세서에 설명된 실시예를 제한하지 않고, 프로세싱 시스템에서 실행될 때 프로세싱 시스템으로 하여금 데이터 캐시 영역 프리페칭을 위한 방법을 실행하게 하는 명령을 포함하는 컴퓨터 판독 가능 비일시적 매체가 제공된다.
본 명세서의 발명에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 특징 및 요소가 특정 조합으로 상술되었지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로, 또는 다른 특징 및 요소와 함께 또는 이들 없이 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서 또는 프로세서 코어에서 구현될 수 있다. 적절한 프로세서는 예를 들어, 범용 프로세서, 특수 목적 프로세서, 통상의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 컨트롤러, 마이크로컨트롤러, 어플리케이션 특정 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적 회로(IC) 및/또는 상태 머신을 포함한다. 이러한 프로세서는 프로세싱된 하드웨어 기술 언어(hardware description language: HDL) 명령 및 넷리스트를 포함하는 다른 중간 데이터(컴퓨터 판독 가능 매체에 저장될 수 있는 명령)의 결과를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 구현의 양태를 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 사용되는 마스크워크(maskwork)일 수 있다.
본 명세서에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독 가능 저장 매체에 통합되는 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체의 예는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크 및 착탈식 디스크와 같은 자기 매체, 자기-광학 매체, 및 CD-ROM 디스크 및 디지털 버서타일 디스크(DVD)와 같은 광학 매체를 포함한다.

Claims (22)

  1. 데이터 캐시 영역 프리페처(data cache region prefetcher)로서,
    상기 데이터 캐시 영역 프리페처는,
    축출 가능 라인 엔트리에서의 특정 액세스 비트들로부터 액세스 패턴을 결정하는 것과,
    라인 엔트리 데이터 테이블로부터 축출되는 라인 엔트리들을 수신하도록 구성된 영역 이력 테이블에의 축출로부터 순차 액세스 패턴들을 갖는 라인 엔트리를 배제하는 것과, 그리고
    미리 정해진 비-순차 액세스 패턴을 갖는 라인 엔트리가 상기 영역 이력 테이블에 축출될 수 있게 하는 것을
    수행하도록 구성되고,
    상기 라인 엔트리 데이터 테이블은 복수의 라인 엔트리들을 포함하고, 여기서 각각의 라인 엔트리는 미리 정해진 수의 액세스 비트들로 규정되는 영역을 포함하고, 상기 영역 내에서 캐시 라인이 요청되는 경우, 주어진 라인 엔트리에 대한 액세스 비트가 설정되며,
    상기 영역 이력 테이블은 상기 라인 엔트리 데이터 테이블로부터 축출되는 라인 엔트리들을 수신하도록 구성되고,
    상기 액세스 패턴은 프로그램에 의한 캐시에 대한 액세스들의 패턴을 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  2. 제1항에 있어서,
    상기 데이터 캐시 영역 프리페처는 비-순차 액세스 패턴들을 갖는 라인 엔트리들을 상기 영역 이력 테이블에 축출하도록 구성되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  3. 제1항에 있어서,
    상기 영역 이력 테이블은 적어도 명령 포인터 레지스터(instruction pointer register: RIP)를 사용하여 인덱싱되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  4. 제3항에 있어서,
    상기 영역 이력 테이블은, 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 상기 RIP에 대해 복수의 비-순차 액세스 패턴들을 지원하기 위해 오프셋을 사용하여 추가로 인덱싱되며,
    상기 오프셋의 필드 크기는 상기 캐시 라인과 관련된 상기 영역의 정렬을 제공하기 위해 상기 캐시 라인의 크기와 관련되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  5. 제1항에 있어서,
    상기 영역 이력 테이블은 복수의 영역 이력 엔트리들을 포함하고,
    각각의 영역 이력 엔트리는 상기 미리 정해진 수의 액세스 비트들을 포함하고,
    각각의 영역 이력 엔트리는 상기 미리 정해진 수의 액세스 비트들에서의 특정 액세스 비트들에 대한 카운터들을 포함하며, 그리고
    상기 액세스 비트가 상기 축출 가능 라인 엔트리에 대해 설정되었는지 여부에 따라 상기 카운터들이 증분 또는 감소되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  6. 제1항에 있어서,
    상기 데이터 캐시 영역 프리페처는 또한, 상기 영역 이력 테이블 내의 특정 영역 이력 엔트리에서의 특정 액세스 비트들과 연관된 카운터들이 임계값에 도달했다는 조건 하에, 상기 영역 이력 테이블로부터 프리페치 요청들을 수신하도록 구성되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  7. 제1항에 있어서,
    상기 데이터 캐시 영역 프리페처는, 다른 프리페처들이 상기 데이터 캐시 영역 프리페처에 계류 중인 스트림들을 프로세싱하는 것을 차단하도록 구성되는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  8. 제1항에 있어서,
    각각의 라인 엔트리는,
    둘 이상의 인접 순차 메모리 액세스들이 행해지고 제2 액세스가 상기 미리 정해진 수의 액세스 비트들에서 홈 비트의 하나의 액세스 비트 내에 있을 때 설정되는 그리고
    상기 영역 이력 테이블에의 축출로부터 배제되고 다른 데이터 프리페처들에 추출되는 상기 미리 정해진 액세스 패턴들을 결정하는 데 사용되는
    제2 액세스 비트들을 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페처.
  9. 프로세싱 시스템으로서, 상기 프로세싱 시스템은,
    스트림 프리페처; 및
    데이터 캐시 영역 프리페처를 포함하고,
    상기 데이터 캐시 영역 프리페처는,
    축출 가능 라인 엔트리에서의 특정 액세스 비트들로부터 액세스 패턴을 결정하는 것과,
    영역 이력 테이블에의 축출로부터 순차 액세스 패턴들을 갖는 라인 엔트리를 배제하는 것과, 여기서
    상기 영역 이력 테이블은 라인 엔트리 데이터 테이블로부터 축출되는 라인 엔트리들을 수신하고,
    상기 라인 엔트리 데이터 테이블은 복수의 라인 엔트리들을 포함하고, 여기서 각각의 라인 엔트리는, 영역을 규정하는 미리 정해진 수의 액세스 비트들과, 그리고 상기 영역 내에서 캐시 라인이 요청되는 경우 설정되는 액세스 비트를 포함하며,
    미리 정해진 비-순차 액세스 패턴을 갖는 라인 엔트리가 상기 영역 이력 테이블에 축출될 수 있게 하는 것과, 그리고
    상기 스트림 프리페처가 상기 데이터 캐시 영역 프리페처에 계류 중인 스트림들을 프로세싱하는 것을 차단하는 것을
    수행하도록 구성되고,
    상기 액세스 패턴은 프로그램에 의한 캐시에 대한 액세스들의 패턴을 포함하는 것을 특징으로 하는 프로세싱 시스템.
  10. 제9항에 있어서,
    상기 데이터 캐시 영역 프리페처는 비-순차 액세스 패턴들을 갖는 라인 엔트리들을 상기 영역 이력 테이블에 축출하도록 추가로 구성되는 것을 특징으로 하는 프로세싱 시스템.
  11. 제9항에 있어서,
    상기 영역 이력 테이블은 적어도 명령 포인터 레지스터(RIP)를 사용하여 인덱싱되는 것을 특징으로 하는 프로세싱 시스템.
  12. 제11항에 있어서,
    상기 영역 이력 테이블은, 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 상기 RIP에 대해 복수의 비-순차 액세스 패턴들을 지원하기 위해 오프셋을 사용하여 추가로 인덱싱되는 것을 특징으로 하는 프로세싱 시스템.
  13. 제9항에 있어서,
    상기 영역 이력 테이블은 복수의 영역 이력 엔트리들을 포함하고,
    각각의 영역 이력 엔트리는 상기 미리 정해진 수의 액세스 비트들을 포함하고,
    각각의 영역 이력 엔트리는 상기 미리 정해진 수의 액세스 비트들에서의 특정 액세스 비트들에 대한 카운터들을 포함하며, 그리고
    상기 각각의 액세스 비트에서 설정된 비트가 존재하는지 여부에 따라 상기 카운터들이 증분 또는 감소되는 것을 특징으로 하는 프로세싱 시스템.
  14. 제9항에 있어서,
    상기 데이터 캐시 영역 프리페처는 또한, 상기 영역 이력 테이블 내의 특정 영역 이력 엔트리에서의 특정 액세스 비트들과 연관된 카운터들이 임계값에 도달했다는 조건 하에, 상기 영역 이력 테이블로부터 프리페치 요청들을 수신하도록 구성되는 것을 특징으로 하는 프로세싱 시스템.
  15. 제9항에 있어서,
    각각의 라인 엔트리는,
    둘 이상의 인접 순차 메모리 액세스들이 행해지고 제2 액세스가 상기 미리 정해진 수의 액세스 비트들에서 홈 비트의 하나의 액세스 비트 내에 있을 때 설정되는 그리고
    상기 영역 이력 테이블에의 축출로부터 배제되고 다른 데이터 프리페처들에 추출되는 상기 미리 정해진 액세스 패턴들을 결정하는 데 사용되는
    제2 액세스 비트들을 더 포함하는 것을 특징으로 하는 프로세싱 시스템.
  16. 데이터 캐시 영역 프리페칭을 위한 방법으로서, 상기 방법은,
    복수의 라인 엔트리들을 포함하는 라인 엔트리 테이블에 의해 캐시 라인 요청을 수신하는 단계와, 여기서 각각의 라인 엔트리는 미리 정해진 수의 액세스 비트들로 규정되는 영역을 포함하고;
    상기 캐시 라인 요청이 상기 영역 내에 있는 경우, 주어진 라인 엔트리에 대한 액세스 비트를 설정하는 단계와;
    축출 가능 라인 엔트리에서의 특정 액세스 비트들로부터 액세스 패턴을 결정하는 단계와;
    영역 이력 테이블에의 축출로부터 순차 액세스 패턴들을 갖는 라인 엔트리를 배제하는 단계와; 그리고
    미리 정해진 비-순차 액세스 패턴들을 갖는 라인 엔트리를 영역 이력 테이블에 축출하는 단계를 포함하고,
    상기 액세스 패턴은 프로그램에 의한 캐시에 대한 액세스들의 패턴을 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  17. 제16항에 있어서,
    상기 방법은, 적어도 명령 포인터 레지스터(RIP)를 사용하여 상기 영역 이력 테이블을 인덱싱하는 단계를 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  18. 제17항에 있어서,
    상기 방법은, 영역에 대한 초기 액세스가 캐시 라인의 시작, 끝 또는 중간에 있는지에 따라, 상기 RIP에 대해 복수의 비-순차 액세스 패턴들을 지원하기 위해 오프셋 및 상기 RIP를 사용하여 상기 영역 이력 테이블을 인덱싱하는 단계를 더 포함하고,
    상기 오프셋의 필드 크기는 상기 캐시 라인과 관련된 상기 영역의 정렬을 제공하기 위해 상기 캐시 라인의 크기와 관련되는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  19. 제16항에 있어서,
    상기 영역 이력 테이블은 복수의 영역 이력 엔트리들을 포함하고,
    각각의 이력 라인 엔트리는 상기 미리 정해진 수의 액세스 비트들에서의 특정 액세스 비트들에 대한 카운터들을 포함하고,
    상기 방법은, 각각의 액세스 비트들이 설정되었는지 여부에 따라 상기 카운터들을 증분 또는 감소시키는 단계를 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  20. 제16항에 있어서,
    상기 방법은, 상기 영역 이력 테이블 내의 특정 영역 이력 엔트리에서의 특정 액세스 비트들과 연관된 카운터들이 임계값을 충족하거나 초과한다는 조건 하에, 프리페치 요청들을 상기 데이터 캐시 영역 프리페처에 전송하는 단계를 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  21. 제16항에 있어서,
    상기 방법은, 다른 프리페처들이 상기 데이터 캐시 영역 프리페처에 계류 중인 스트림들을 프로세싱하는 것을 차단하는 단계를 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
  22. 제16항에 있어서,
    각각의 라인 엔트리는 제2 액세스 비트들을 더 포함하고,
    상기 방법은,
    둘 이상의 인접 순차 메모리 액세스들이 행해지고 제2 액세스가 상기 미리 정해진 수의 액세스 비트들에서 홈 비트의 하나의 액세스 비트 내에 있을 때 상기 제2 액세스 비트들을 설정하는 단계와; 그리고
    상기 영역 이력 테이블에의 축출로부터 배제되고 다른 데이터 프리페처들에 추출되는 상기 미리 정해진 액세스 패턴들을 결정하기 위해 상기 설정된 제2 액세스 비트들을 사용하는 단계를 더 포함하는 것을 특징으로 하는 데이터 캐시 영역 프리페칭을 위한 방법.
KR1020197003896A 2016-08-19 2017-08-08 데이터 캐시 영역 프리페처 KR102467817B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201662377314P 2016-08-19 2016-08-19
US62/377,314 2016-08-19
US15/292,777 US20180052779A1 (en) 2016-08-19 2016-10-13 Data cache region prefetcher
US15/292,777 2016-10-13
EP16200806.4A EP3285172A1 (en) 2016-08-19 2016-11-25 Data cache region prefetcher
EP16200806.4 2016-11-25
PCT/US2017/045842 WO2018034882A1 (en) 2016-08-19 2017-08-08 Data cache region prefetcher

Publications (2)

Publication Number Publication Date
KR20190038835A KR20190038835A (ko) 2019-04-09
KR102467817B1 true KR102467817B1 (ko) 2022-11-16

Family

ID=57396378

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197003896A KR102467817B1 (ko) 2016-08-19 2017-08-08 데이터 캐시 영역 프리페처

Country Status (6)

Country Link
US (2) US20180052779A1 (ko)
EP (1) EP3285172A1 (ko)
JP (1) JP7308745B2 (ko)
KR (1) KR102467817B1 (ko)
CN (1) CN109564549B (ko)
WO (1) WO2018034882A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106528450B (zh) * 2016-10-27 2019-09-17 上海兆芯集成电路有限公司 数据预先提取方法及使用此方法的装置
US10445241B2 (en) * 2018-03-06 2019-10-15 Arm Limited Prefetching using offset data to access a pointer within a current data element for use in prefetching a subsequent data element
US10713053B2 (en) * 2018-04-06 2020-07-14 Intel Corporation Adaptive spatial access prefetcher apparatus and method
US11281585B2 (en) 2018-08-30 2022-03-22 Micron Technology, Inc. Forward caching memory systems and methods
US10976964B2 (en) * 2019-06-27 2021-04-13 Western Digital Technologies, Inc. Storage system and method for hit-rate-score-based selective prediction of future random read commands
US11416263B1 (en) 2021-02-12 2022-08-16 Western Digital Technologies, Inc. Boosted boot procedure by background re-arrangement of read patterns
US20230058668A1 (en) * 2021-08-18 2023-02-23 Micron Technology, Inc. Selective cache line memory encryption
US20240111677A1 (en) * 2022-09-30 2024-04-04 Advanced Micro Devices, Inc. Region pattern-matching hardware prefetcher

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071571A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US20160019065A1 (en) * 2014-07-17 2016-01-21 Arm Limited Prefetching instructions in a data processing apparatus

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3973129B2 (ja) * 2000-07-19 2007-09-12 株式会社日立製作所 キャッシュメモリ装置及びそれを用いた中央演算処理装置
US7234040B2 (en) * 2002-01-24 2007-06-19 University Of Washington Program-directed cache prefetching for media processors
JP2006516168A (ja) * 2002-11-22 2006-06-22 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ストライド予測テーブルにアドレスするためにキャッシュミスパターンを使用する方法
US6961820B2 (en) * 2003-02-13 2005-11-01 International Business Machines Corporation System and method for identifying and accessing streaming data in a locked portion of a cache
US7194582B1 (en) * 2003-05-30 2007-03-20 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
US8356142B1 (en) * 2003-11-12 2013-01-15 Nvidia Corporation Memory controller for non-sequentially prefetching data for a processor of a computer system
US7774578B2 (en) * 2006-06-07 2010-08-10 Advanced Micro Devices, Inc. Apparatus and method of prefetching data in response to a cache miss
US9274965B2 (en) * 2008-12-15 2016-03-01 International Business Machines Corporation Prefetching data
US8117397B2 (en) * 2008-12-16 2012-02-14 International Business Machines Corporation Victim cache line selection
US8677049B2 (en) * 2009-04-13 2014-03-18 Advanced Micro Devices, Inc. Region prefetcher and methods thereof
WO2011031796A2 (en) * 2009-09-08 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for caching data on a solid-state storage device
US8200902B2 (en) * 2010-06-10 2012-06-12 Arm Limited Cache device for coupling to a memory device and a method of operation of such a cache device
US9110810B2 (en) * 2011-12-06 2015-08-18 Nvidia Corporation Multi-level instruction cache prefetching
US9026739B2 (en) * 2012-03-07 2015-05-05 Advanced Micro Devices, Inc. Multimode prefetcher
US9116815B2 (en) * 2012-06-20 2015-08-25 Advanced Micro Devices, Inc. Data cache prefetch throttle
US9262327B2 (en) * 2012-06-29 2016-02-16 Intel Corporation Signature based hit-predicting cache
US9323695B2 (en) * 2012-11-12 2016-04-26 Facebook, Inc. Predictive cache replacement
US9021210B2 (en) * 2013-02-12 2015-04-28 International Business Machines Corporation Cache prefetching based on non-sequential lagging cache affinity
US9015422B2 (en) * 2013-07-16 2015-04-21 Apple Inc. Access map-pattern match based prefetch unit for a processor
US9575778B2 (en) * 2014-05-20 2017-02-21 Via Alliance Semiconductor Co., Ltd. Dynamically configurable system based on cloud-collaborative experimentation
US10496410B2 (en) * 2014-12-23 2019-12-03 Intel Corporation Instruction and logic for suppression of hardware prefetchers
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071571A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US20160019065A1 (en) * 2014-07-17 2016-01-21 Arm Limited Prefetching instructions in a data processing apparatus

Also Published As

Publication number Publication date
US20220283955A1 (en) 2022-09-08
WO2018034882A1 (en) 2018-02-22
JP2019528532A (ja) 2019-10-10
JP7308745B2 (ja) 2023-07-14
EP3285172A1 (en) 2018-02-21
CN109564549A (zh) 2019-04-02
CN109564549B (zh) 2024-05-24
KR20190038835A (ko) 2019-04-09
US20180052779A1 (en) 2018-02-22

Similar Documents

Publication Publication Date Title
KR102467817B1 (ko) 데이터 캐시 영역 프리페처
CN106537362B (zh) 数据处理装置和在数据处理装置中处理地址转换的方法
US9274959B2 (en) Handling virtual memory address synonyms in a multi-level cache hierarchy structure
JP4045296B2 (ja) キャッシュメモリ及びその制御方法
US20170371790A1 (en) Next line prefetchers employing initial high prefetch prediction confidence states for throttling next line prefetches in a processor-based system
US9251083B2 (en) Communicating prefetchers in a microprocessor
US9348753B2 (en) Controlling prefetch aggressiveness based on thrash events
KR20180124709A (ko) 공간 메모리 스트리밍 트레이닝을 위한 장치 및 방법
US9928176B2 (en) Selecting cache transfer policy for prefetched data based on cache test regions
US20080133844A1 (en) Method and apparatus for extending local caches in a multiprocessor system
US20140149679A1 (en) Page crossing prefetches
JP2017509998A (ja) キャッシュ汚染を低減するために専用キャッシュセットにおける専用プリフェッチポリシーを競合させることに基づいた適応キャッシュプリフェッチング
US9047173B2 (en) Tracking and eliminating bad prefetches generated by a stride prefetcher
JP2023507078A (ja) プリフェッチレベルの降格
US20170103024A1 (en) Information processing apparatus and cache control method
TW201102920A (en) Data prefetcher and method in a microprocessor
JP6701380B2 (ja) アップ/ダウンプリフェッチャ
US20070186046A1 (en) Pseudo LRU algorithm for hint-locking during software and hardware address translation cache miss handling modes
US9852082B2 (en) Information processing apparatus and cache control method
US20170046278A1 (en) Method and apparatus for updating replacement policy information for a fully associative buffer cache
KR20230052821A (ko) 프리페칭
KR20130113440A (ko) 공격적 프리페칭에 의해 발생된 프로세서 캐시 오염을 감소시키기 위한 방법 및 장치
US20140136785A1 (en) Enhanced cache coordination in a multilevel cache
US11494300B2 (en) Page table walker with page table entry (PTE) physical address prediction
US11675702B1 (en) Replacement policy information for training table used by prefetch circuitry

Legal Events

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