KR20120070584A - 데이터 스트림에 대한 저장 인식 프리페치 - Google Patents

데이터 스트림에 대한 저장 인식 프리페치 Download PDF

Info

Publication number
KR20120070584A
KR20120070584A KR1020127009323A KR20127009323A KR20120070584A KR 20120070584 A KR20120070584 A KR 20120070584A KR 1020127009323 A KR1020127009323 A KR 1020127009323A KR 20127009323 A KR20127009323 A KR 20127009323A KR 20120070584 A KR20120070584 A KR 20120070584A
Authority
KR
South Korea
Prior art keywords
data stream
cache
access
request
prefetch
Prior art date
Application number
KR1020127009323A
Other languages
English (en)
Other versions
KR101614867B1 (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 KR20120070584A publication Critical patent/KR20120070584A/ko
Application granted granted Critical
Publication of KR101614867B1 publication Critical patent/KR101614867B1/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/0815Cache consistency protocols
    • 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

Abstract

효율적인 데이터 프리페치를 위한 시스템 및 방법이 제공된다. 하위 레벨 메모리에 저장된 데이터 스트림은, 컴퓨터 프로그램에서 사용되는 인접하는 데이터 블록을 포함한다. 프로세서 내의 프리페치 유닛은, 인접하는 데이터 블록을 단조 증가 혹은 감소 방식으로 참조하는 일련의 저장소 액세스들을 식별함으로써, 데이터 스트림을 검출한다. 주어진 데이터 스트림에 대한 소정의 트레이닝 기간 이후에, 프리페치 유닛은, 기입 허락을 요청하지 않은 액세스에 응하여, 기입 허락 없이 메모리로부터 상기 주어진 데이터 스트림의 부분을 프리페치한다. 또한, 트레이닝 기간 이후에, 프리페치 유닛은, 다수의 캐시 미스들이 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 이전의 액세스가 있었다는 판정에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 부분을 기입 허락을 갖고 프리페치한다.

Description

데이터 스트림에 대한 저장 인식 프리페치{STORE AWARE PREFETCHING FOR A DATA STREAM}
본 발명은 컴퓨팅 시스템(computing system)들에 관한 것으로, 특히, 효율적인 캐시 라인 프리페치(cache line prefetching)에 관한 것이다.
현대 마이크로프로세서들은 하나 이상의 프로세서 코어들 또는 프로세서들을 포함할 수 있고, 각각의 프로세서는 소프트웨어 애플리케이션의 명령들을 실행할 수 있다. 이들 프로세서들은 전형적으로 파이프라인(pipeline) 구성을 갖는데, 여기서 프로세서들은 스테이지(stage)들 사이에 배치되는 저장 소자들(예를 들면 레지스터들 및 어레이들)과 직렬로 연결된 하나 이상의 데이터 처리 스테이지들을 포함한다. 이상적으로는, 매 클럭 싸이클(clock cycle)마다 파이프라인의 각각의 스테이지에 대한 명령이 유용하게 실행된다. 그러나, 파이프라인에서의 스톨(stall)은 그 특정 파이프라인 스테이지 동안에 어떠한 유용한 작업도 수행되지 않게 할 수 있다. 스톨(전형적으로는 복수-사이클 스톨(multi-cycle stall))의 일 예는, 데이터-캐시(data-cache) 또는 명령-캐시(instruction-cache) 미스(miss)이다. 상위 레벨 캐시들 및/또는 시스템 메모리로부터의 데이터 검색과 연관된 상당한 레이턴시(latency)가 있을 수 있다. 이러한 레이턴시(메모리로부터의 데이터 검색을 위해 필요한 프로세서 사이클들의 총 개수)는, 프로세서 주파수가 시스템 메모리 액세스 시간보다 더 빨리 증가함에 따라 급속히 커지게 된다.
다양한 실시예들에서, 시스템 메모리는 프로세서를 위한 캐시 계층(cache hierarchy)의 레벨을 둘 이상 포함할 수 있다. 시스템 메모리의 계층에서 뒤쪽 레벨들은 메모리 제어기를 통한 동적 랜덤-액세스 메모리(Dynamic Random-Access Memory, DRAM), 듀얼 인라인 메모리 모듈(dual in-line memory module, dimm)들, 하드 디스크, 등에 대한 액세스를 포함할 수 있다. 이들 하위 레벨들의 메모리에 대한 액세스는 상당한 개수의 클럭 사이클들을 요구할 수 있다. 복수-코어 마이크로프로세서 상에서 복수 코어들 간에 공유될 수 있는 캐시들의 복수 레벨들은, 캐시 히트(cache hit)가 있을 때, 이러한 레이턴시를 완화시키는 데 도움을 준다. 그러나, 캐시 크기가 증가하고 캐시 계층의 뒤쪽 레벨들이 프로세서 코어(들)로부터 멀리 떨어져 배치됨에 따라, 요청된 메모리 라인이 캐시 내에 존재하는지 여부를 판정하기 위한 레이턴시도 또한 증가한다. 프로세서 코어가 메모리 요청을 갖고, 그 다음에, 히트가 없는 각각의 캐시 레벨의 직렬 또는 병렬 액세스가 일어나고, 그 다음에, DRAM 액세스가 일어난다면, 메모리 요청을 이행하기 위한 전체 레이턴시의 양은 상당한 양이 될 수 있다.
앞서와 같은 문제에 기인한 전체 성능 감퇴를 줄이기 위한 한가지 해결책은 캐시 미스(cache miss)에 기인한 캐시 라인 채움 트랜잭션(cache line fill transaction)을 클럭 사이클당 복수 명령들의 비순차적 실행(out-of-order execution)과 중첩시키는 것이다. 그러나, 몇 개의 클럭 사이클들의 스톨은, 순차적 퇴거(retirement)(이것은 스톨 사이클들이 유용한 작업과 완전히 중첩되지 못하게 할 수 있음)로 인해 여전히 프로세서의 성능을 감소시킨다. 또 다른 해결책은, 현재 처리되는 데이터에 앞서, 소정 개수의 캐시 라인들의 하위 레벨 메모리(예를 들어, DRAM)에 대한 추론적 프리페치 요청(speculative prefetch request)을 사용하는 것이다. 이러한 프리페치 요청은, 하나 이상의 레벨들을 갖는 캐시 서브시스템(cache subsystem)에 대한 현재 메모리 요청과 직렬로 혹은 병렬로 일어날 수 있다. 따라서, 현재 메모리 요청 이후에, 메모리 계층으로부터 후속 메모리 요청들에 액세스하기 위한 레이턴시가 크게 감소할 수 있다. 데이터는 메모리 제어기 내의 캐시에 이미 상주하고 있을 수 있거나, 또는 이전의 추론적 프리페치 요청으로 인해 메모리 제어기에 바로 도착할 수 있다.
데이터 스트림 프리페치 유닛(data stream prefetch unit)이 데이터 스트림들을 검출하기 위해 사용되고 있다. 데이터 스트림은 인접하는 데이터 블록들을 참조하는 일련의 메모리 액세스들로서 정의될 수 있다. 인접하는 데이터 블록들은 메모리 계층의 하나 이상의 레벨들에 저장될 수 있다. 예를 들어, 데이터 블록들은 주 메모리(main memory)에 저장될 수 있으며, 판독될 수 있고, 그리고 메모리 계층의 상위 레벨들에 있는 하나 이상의 캐시들에 보내질 수 있다. 이러한 인접하는 데이터 블록을 메모리 계층의 하위 레벨들에서 상위 레벨들로 이송하는 것은, 캐시 라인 채움 트랜잭션으로 인한 것일 수 있다. 대안적으로, 이러한 인접하는 데이터 블록의 이송은 프리페치 트랜잭션(prefetch transaction)으로 인한 것일 수 있다. 일 예에서, 데이터 스트림은 이미지 혹은 화소를 선명하게 하기 위한 알고리즘의 실행에서 사용될 수 있다. 이러한 알고리즘은 루프(loop)에서 다음의 식, 즉 a[i] = b[i] + c[i]를 사용할 수 있다.
데이터 스트림을 검출하는 것은, 캐시 라인들의 인접하는 세트를 단조 증가 또는 감소 방식으로 참조하는 일련의 메모리 액세스들을 식별하는 것을 포함할 수 있다. 데이터 스트림의 검출에 응답하여, 데이터 스트림 프리페치 유닛은 현재 요청된 캐시 라인에 앞서 소정 개수의 캐시 라인들을 프리페치하는 것을 시작할 수 있다. 데이터 스트림 프리페치 유닛은, 로드 및 저장 액세스들(load and store accesss)이 산재(intersperse)되어 있는 데이터 스트림(이하 혼합형 액세스 데이터 스트림(mixed access data stream)이라 함)을 추적하며, 미스 어드레스(miss address)의 액세스 유형(로드 또는 저장)을 무시한다. 본 명세서에서 사용되는 바와 같이, 저장 동작 또는 명령은 기입 액세스이고, 반면 로드 동작 또는 명령은 판독 액세스이다. 따라서, 데이터 스트림 프리페치 유닛은 판독-전용 상태에서 모든 캐시 라인들을 프리페치한다. 이러한 판독-전용 상태는, 예를 들어, MOESI 캐시 코히런시 프로토콜(MOESI cache coherency protocol)과 연관될 수 있다. 프리페치된 라인 상에서 히트된 프로세서로부터의 요구 액세스 스트림에서의 첫 번째 저장 동작이, 상태 변경 요청을 발행하기 위해 요구된다. 이러한 상태 변경 요청은 캐시 라인에 대한 기입을 위해 허락(permission)을 획득한다. 이러한 상태 변경 요청은 캐시 라인을 프리페치하는 이점들을 감소시킨다.
이와 같은 것을 고려하여 볼 때, 효율적인 캐시 라인 프리페치를 위한 효율적인 방법 및 메커니즘이 필요하다.
프로세서에서 효율적인 캐시 라인 프리페치를 위한 시스템 및 방법이 제공된다. 일 실시예에서, 컴퓨팅 시스템은 캐시와, 하위 레벨 메모리와, 비추론적 요구 요청(non-speculative demand request)들을 전달하도록 구성된 프로세서 코어 상의 로드/저장 버퍼들과, 그리고 프로세서 코어 상의 프리페치 유닛을 포함한다. 일 예에서, 데이터 스트림은 이미지 또는 화소를 선명하게 하기 위한 알고리즘의 실행에서 사용될 수 있다. 이러한 알고리즘은 루프에서 다음의 식, 즉 a[i] = b[i] + c[i]를 사용할 수 있다. 프리페치 유닛은 특정 데이터 스트림들에 대응하는 특성 데이터(characterization data)를 저장한다.
데이터 스트림을 검출하는 것은 데이터 블록들의 인접하는 세트를 단조 증가 또는 감소 방식으로 참조하는 일련의 저장소 액세스들을 식별하는 것을 포함할 수 있다. 다른 기존의 데이터 스트림들의 미스 어드레스(miss address)들과 인접하지 않는 초기 대응하는 미스 어드레스가 새로운 데이터 스트림의 시작이 될 수 있다. 일단 프리페치 유닛이 새로운 데이터 스트림을 검출하면, 프리페치 유닛은 소정의 트레이닝 기간(predetermined training period)에 진입할 수 있다.
특정 데이터 스트림에 대한 트레이닝 기간이 완료되는 경우, 프리페치 유닛은, 주어진 데이터 스트림에 대한 제 1 기입 액세스를 검출하지 못한 것에 응답하여, 기입 허락없이 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 부분을 프리페치하는 것을 시작할 수 있다. 또한, 프리페치 유닛은 트레이닝 기간의 완료 후에, 상기 주어진 데이터 스트림에 대한 제 1 기입 액세스를 검출하는 것에 응답하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 별도의 부분을 기입 허락을 갖고 프리페치하는 것을 시작할 수 있다. 이때 기입 허락을 얻는 것은, 후속의 프리페치되는 캐시 라인 상에서 검출되는 저장 동작에 대해 후속 상태 변경 페널티(subsequent state change penalty)를 피할 수 있다. 따라서, 이러한 후속 저장 동작과 함께 캐시 라인을 프리페치하는 이점이 여전히 유지된다.
이러한 실시예들 및 다른 실시예들은 다음의 설명 및 그 연계된 도면들을 참조하여 명백하게 될 것이다.
도 1은 예시적인 마이크로프로세서의 일 실시예를 도시한 일반화된 블록도이다.
도 2는 비순차적 실행을 수행하는 범용 프로세서 코어의 일 실시예를 도시한 일반화된 블록도이다.
도 3은 메모리 요청들의 서로 다른 소스(source)들을 예시한 메모리 인터페이스의 일 실시예를 도시한 일반화된 블록도이다.
도 4는 프리페치 유닛의 상태 및 상황 천이들을 보여주는 표의 일 실시예의 일반화된 블록도이다.
도 5는 프리페치 유닛 내의 특성 데이터의 저장의 일반화된 블록도이다.
도 6은 프로세서 내의 효율적인 캐시 라인 프리페치를 위한 방법의 일 실시예를 나타낸 흐름도이다.
도 7은 프로세서 내의 효율적인 캐시 라인 프리페치를 계속하기 위한 방법의 일 실시예를 나타낸 흐름도이다.
도 8은 프로세서 내의 효율적인 캐시 라인 프리페치를 계속하기 위한 방법의 일 실시예를 나타낸 흐름도이다.
도 9는 프로세서 내의 효율적인 캐시 라인 프리페치를 계속하기 위한 방법의 일 실시예를 나타낸 흐름도이다.
본 발명의 다양한 수정 및 대안적 형태가 가능하지만, 특정 실시예들이 도면에서 예시적으로 도시되었고 본 명세서에서 상세히 설명된다. 그러나, 이러한 도면 및 그 상세한 설명은 본 발명을 이렇게 개시된 특정 형태로만 한정하려는 것이 아니며, 이와는 반대로, 본 발명이 본 명세서에 첨부되는 특허청구범위에 의해 정의되는 바와 같이 본 발명의 사상 및 범위 내에 속하는 모든 수정들, 등가물들 및 대안들을 포괄하도록 하려는 것임을 이해해야 한다.
다음의 설명에서, 본 발명이 완전히 이해되도록 하기 위해 다수의 구체적 세부사항이 개시된다. 그러나, 당업자는 본 발명이 이러한 구체적 세부사항 없이도 실시될 수 있음을 알 수 있을 것이다. 경우에 따라서는, 잘 알려진 회로, 구조, 및 기법은 본 발명을 모호하게 하는 것을 피하기 위해 상세히 제시되지 않는다.
도 1을 참조하면, 예시적 프로세서(100)의 일 실시예가 도시된다. 프로세서(100)(예시된 실시예에서는 마이크로프로세서)는, 메모리 제어기(120), 인터페이스 로직(140), 하나 이상의 처리 유닛들(115)(이것은 하나 이상의 프로세서 코어들(112) 및 대응하는 캐시 메모리 서브시스템들(114)을 포함할 수 있음), 크로스바 상호연결 로직(crossbar interconnect logic)(116), 및 공유 캐시 메모리 서브시스템(shared cache memory subsystem)(118)을 포함할 수 있다. 일 실시예에서, 마이크로프로세서(100)의 예시된 기능은 단일 집적 회로 상에 통합된다.
인터페이스(140)는 일반적으로, 마이크로프로세서(100) 밖의 입력/출력(I/O) 장치들의 공유 캐시 메모리 서브시스템(118) 및 처리 유닛들(115)로의 인터페이스를 제공한다. 본 명세서에서 사용되는 바에 따르면, 참조번호 및 그 다음에 오는 문자로 참조되는 구성요소들은, 집합적으로 참조번호 단독으로 표기되어 참조될 수 있다. 예를 들어, 처리 유닛들(115a-115b)은 집합적으로 처리 유닛들(115) 혹은 유닛들(115)로서 참조될 수 있다. I/O 장치들은 주변 네트워크 장치들을 포함할 수 있는바, 예를 들어, 프린터, 키보드, 모니터, 카메라, 카드 판독기, 하드 디스크 드라이브 혹은 플로피 디스크 드라이브 또는 드라이브 제어기, 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 모뎀, 다양한 데이터 획득 카드(예를 들어, 범용 인터페이스 버스(General Purpose Interface Bus, GPIB) 또는 필드 버스 인터페이스 카드), 등을 포함할 수 있다. 추가적으로, 인터페이스(140)는 다른 마이크로프로세서들 및/또는 다른 처리 노드들과 통신하기 위해 사용될 수 있다. 일반적으로, 인터페이스 로직(140)은, 대응하는 링크로부터 패킷들을 수신하고 대응하는 링크에 송신될 패킷들을 버퍼링하기 위한 버퍼들을 포함할 수 있다. 패킷들을 마이크로프로세서(100)에 송신하기 위해 그리고 마이크로프로세서(100)로부터의 패킷들을 송신하기 위해 임의의 적합한 흐름 제어 메커니즘이 사용될 수 있다.
마이크로프로세서(100)는 각각의 메모리 제어기(120)를 통해 각각의 메모리에 결합될 수 있다. 메모리는 임의의 적합한 메모리 장치들을 포함할 수 있다. 예를 들어, 메모리는 하나 이상의 RAMBUS 동적 랜덤 액세스 메모리(DRAM)들, 동기식 DRAM(SDRAM)들, DRAM, 정적 RAM, 등을 포함할 수 있다. 마이크로프로세서(100)의 어드레스 공간은 복수의 메모리들 간에 분할될 수 있다. 각각의 마이크로프로세서(100) 혹은 마이크로프로세서(100)를 포함하는 각각의 처리 노드는, 어떤 어드레스들이 어떤 메모리들에 매핑되는지를 판정하기 위해, 이에 따라, 특정 어드레스에 대한 메모리 요청이 어떤 마이크로프로세서(100) 혹은 처리 노드로 라우팅돼야 하는지를 판정하기 위해, 사용되는 메모리 맵(memory map)을 포함할 수 있다. 일 실시예에서, 어드레스에 대한 코히런시 포인트(coherency point)는, 그 어드레스에 대응하는 바이트들을 저장하는 메모리에 결합된 메모리 제어기(120)이다. 메모리 제어기들(120)은 메모리들에 인터페이스하기 위한 제어 회로를 포함할 수 있다. 추가적으로, 메모리 제어기들(120)은 메모리 요청들을 큐잉(queuing)하기 위한 요청 큐(request queue)들을 포함할 수 있다. 이외에도, 메모리 제어기들(120)은 프리페치 유닛(prefetch unit)을 포함하거나 이러한 프리페치 유닛에 결합될 수 있다.
일반적으로 말하면, 크로스바 상호연결 로직(116)은, 인터페이스(140)에 결합된 링크들 상에서 수신된 수신 제어 패킷들에 응답하도록 구성되고, 그리고, 프로세서 코어들(112) 및/또는 캐시 메모리 서브시스템들(114)에 응답하여 제어 패킷들을 발생하도록 구성되며, 그리고, 서비스를 위해 메모리 제어기(120)에 의해 선택된 트랜잭션(transaction)들에 응답하여 프로브 커맨드(probe command)들 및 응답 패킷들을 발생하도록 구성되고, 그리고 마이크로프로세서를 포함하는 중간 노드에 대한 패킷들을 인터페이스 로직(140)을 통해 다른 노드들에 라우팅하도록 구성된다. 인터페이스 로직(140)은 패킷들을 수신하고, 패킷들을 크로스바 상호연결(116)에 의해 사용되는 내부 클럭에 동기시키는 로직을 포함할 수 있다. 크로스바 상호연결(116)은 프로세서 코어들(112)로부터의 메모리 요청들을 공유 캐시 메모리 서브시스템(118)에 혹은 메모리 제어기(120)와, 그리고 메모리 서브시스템의 하위 레벨에 전달하도록 구성될 수 있다. 또한, 크로스바 상호연결(116)은, 하위 레벨 메모리로부터의 수신된 메모리 라인들 및 제어 신호들을 메모리 제어기(120)를 통해 프로세서 코어들(112) 및 캐시 메모리 서브시스템들(114 및 118)에 전달할 수 있다. 크로스바 상호연결(116), 메모리 제어기(120), 인터페이스(140), 프로세서 유닛들(115) 간에 상호연결 버스 구현들은 임의의 적합한 기술을 포함할 수 있다.
캐시 메모리 서브시스템들(114 및 118)은 데이터 블록들을 저장하도록 구성된 고속 캐시 메모리들을 포함할 수 있다. 캐시 메모리 서브시스템들(114)은 각각의 프로세서 코어들(112) 내에 통합될 수 있다. 대안적으로, 캐시 메모리 서브시스템들(114)은, 필요한 대로, 백사이드 캐시 구성(backside cache configuration) 또는 인라인 구성(inline configuration)으로 프로세서 코어들(112)에 결합될 수도 있다. 또한, 캐시 메모리 서브시스템들(114)은 캐시들의 계층으로서 구현될 수도 있다. (계층 내에서) 프로세서 코어들(112)에 더 가까이 있는 캐시들은, 필요한 경우, 프로세서 코어들(112) 내에 통합될 수도 있다. 일 실시예에서, 캐시 메모리 서브시스템들(114) 각각은 L2 캐시 구조들을 나타내며, 공유 캐시 서브시스템(118)은 L3 캐시 구조를 나타낸다.
캐시 메모리 서브시스템(114)과 공유 캐시 메모리 서브시스템(118) 양쪽 모두는 대응하는 캐시 제어기에 결합된 캐시 메모리를 포함할 수 있다. 프로세서 코어들(112)은 사전에 정의된 범용 명령 세트를 따르는 명령들을 실행하기 위한 회로를 포함한다. 예를 들어, x86 명령 세트 아키텍처가 선택될 수도 있다. 대안적으로, 앞파(Alpha), 파워PC(PowerPC), 혹은 이외 어떤 다른 범용 명령 세트 아키텍처가 선택될 수도 있다. 일반적으로, 프로세서 코어(112)는 데이터 및 명령들에 대해, 각각, 캐시 메모리 서브시스템들(114)에 액세스한다. 요청된 블록이 캐시 메모리 서브시스템(114)에서 혹은 공유 캐시 메모리 서브시스템(118)에서 발견되지 않는다면, 판독 요청이 발생될 수 있고 누락된 블록이 매핑되어 있는 위치로 가는 도중에 메모리 제어기(120)에 전송될 수 있다.
도 2는 비순차적 실행을 수행하는 범용 프로세서 코어(200)의 일 실시예를 도시한 것이다. 명령-캐시(instruction-cache, i-캐시) 및 대응하는 변환-색인-버퍼(Translation-Lookaside-Buffer, TLB)(202)는 명령들에 액세스하기 위해서 소프트웨어 애플리케이션 및 어드레스들에 대한 명령들을 저장할 수 있다. 양쪽 캐시들(202 및 222)은 프로세서 코어(200) 내에 위치될 수 있거나, 혹은 도 1의 캐시 메모리 서브시스템(114) 내와 같이 외부에 위치될 수도 있다. 명령 페치 유닛(Instruction Fetch Unit, IFU)(204)은 i-캐시 미스들이 없다면 클럭 사이클 단위로 i-캐시(202)로부터 복수의 명령들을 페치할 수 있다. IFU(204)는 i-캐시(202)에서 페치할 다음 명령들의 어드레스에 대한 포인터를 보유하는 프로그램 카운터(program counter)를 포함할 수 있는바, 이는 i-TLB에서 어드레스들과 비교될 수 있다. IFU(204)는, 실행 유닛이 뒤쪽 파이프라인 스테이지에서 실제 결과를 판정하기에 앞서, 조건부 명령의 결과를 예측하는 분기 예측 유닛(branch prediction unit)을 또한 포함할 수 있다.
디코더 유닛(206)은 복수의 페치된 명령들의 연산코드(opcode)들을 디코딩하며, 재정렬 버퍼(reorder buffer)(208)와 같은 순차적 퇴거 큐(in-order retirement queue)에 엔트리(entry)들을 할당할 수 있다. 엔트리들은 재정렬 버퍼(208) 내에서의 할당 이후에 정수 큐(integer queue)(212) 및 부동 소수점 큐(floating-point queue)(216) 내에 할당될 수 있다. 로드/저장 유닛(220) 내의 입력 큐의 엔트리들은, 실행 유닛(210) 내에서의 할당 이후에, 혹은 필요하다면, 동시에 할당될 수 있다. 실행 유닛(210) 및/또는 로드/저장 유닛(220)에서의 엔트리들의 할당은 디스패치(dispatch)로 고려된다. 메모리 액세스들의 설명 이후에 실행 유닛(210)이 논의될 것이다.
로드 및 저장 동작들과 같은 메모리 액세스들이 로드/저장 유닛(220)에 발행된다. 로드/저장 유닛(220)은 메모리 액세스 명령을 실행하기 위한 큐들 및 로직을 포함할 수 있다. 또한, 로드 명령이 정확한 최근의 저장 명령으로부터의 전달된 데이터를 수신함을 보장하기 위해, 검증 로직이 로드/저장 유닛(220) 내에 상주할 수 있다. 로드/저장 유닛(220)은 메모리 액세스 요청들(224)을 칩 상의 데이터 캐시(data cache, d-캐시)(222)의 하나 이상의 레벨들에 보낼 수 있다. 캐시의 각각의 레벨은 메모리 요청들(224)과의 어드레스 비교를 위한 자신의 TLB를 갖고 있을 수 있다. 캐시(222)의 각각의 레벨은 직렬로 혹은 병렬로 탐색될 수 있다. 요청된 메모리 라인이 캐시들(222)에서 발견되지 않는다면, 메모리 요청(224)은 캐시들(114 및 118)과 같은 캐시 메모리의 하위 레벨들에 보내지거나, 혹은 가능하게는 칩 밖의 메모리에 보내진다. 직렬 또는 병렬 탐색들, 다른 메모리에 대한 가능한 요청들, 및 요청된 메모리 라인이 도착하기를 기다리는 것은 상당한 개수의 클럭 사이클들을 요구할 수 있다.
실행 유닛들(210) 및 로드/저장 유닛(220)으로부터의 결과들은 공통 데이터 버스(230) 상에 제공될 수 있다. 이러한 결과들은 재정렬 버퍼(208)에 보내질 수 있다. 일 실시예에서, 재정렬 버퍼(208)는 프로그램 순서에 따라 명령들의 순차적 퇴거를 보장하는 선입선출(First-In First-Out, FIFO) 큐일 수 있다. 여기서, 그 결과들을 수신한 명령은 퇴거(retirement)를 위해 표시(mark)된다. 명령이 큐의 헤드(head-of-the-queue)라면, 그 결과들은 대응하는 아키텍처 레지스터 파일(architecture register file)에 보내질 수 있다. 큐들(212 및 216) 각각은 대응하는 아키텍처 레지스터 파일을 유지할 수 있다. 아키텍처 레지스터 파일은 프로세서 코어(200)의 범용 레지스터들의 아키텍처 상태를 유지할 수 있다. 그 다음에, 재정렬 버퍼 내의 명령은 순차적으로 퇴거될 수 있고, 큐 헤드 포인터(head-of-queue pointer)는 프로그램 순서에서 후속 명령으로 조정될 수 있다.
공통 데이터 버스(230) 상의 결과들은, 그 결과들을 기다리는 명령들의 피연산자(operand)들에 값들을 전달하기 위해, 실행 유닛(210)에 보내질 수 있다. 예를 들어, 산술 명령은 이전의 산술 명령의 결과들에 의존하는 피연산자들을 가질 수 있거나, 혹은 로드 명령은 기능 유닛들(214) 내의 어드레스 발생 유닛(Address Generation Unit, AGU)에 의해 계산된 어드레스를 필요로 할 수 있다. 이러한 대기 명령들이 자신들의 피연산자들에 대한 값들을 가짐과 아울러 하드웨어 자원들이 명령들을 실행하기 위해 이용가능할 때, 이들은 각각의 큐들(212 및 216)로부터 기능 유닛들(214 및 216) 또는 로드/저장 유닛(220) 내의 적합한 자원들에 비순차적으로 발생될 수 있다.
미이행된(uncommitted) 또는 미퇴거된(non-retired) 메모리 액세스 명령들은 로드/저장 유닛(220)에 엔트리들을 갖는다. 최근의 미이행된 구 저장 명령(older store instruction)으로부터의 실행중(in-flight) 또는 미이행된 로드 명령에 대한 그 전달된 데이터 값은 공통 데이터 버스(230) 상에 배치될 수 있거나, 혹은 간단히 로드/저장 유닛(220) 내의 로드 버퍼에서의 적합한 엔트리에 라우팅될 수 있다.
실행 유닛(210)으로 돌아가서, 큐들(212 및 216)은 자신들의 피연산자들이 이용가능하게 되기를 기다리는 대응하는 정수 및 부동 소수점 명령들을 저장할 수 있다. 레지스터 리네이밍(register renaming) 및 실행 스케쥴링(execution scheduling)은 큐들(212 및 216) 내에서 일어날 수 있거나, 혹은 도시되지 않은 주변 대응하는 회로 내에서 일어날 수 있다. 피연산자들이 이용가능하고 하드웨어 자원들도 이용가능할 때, 명령은 큐들(212 및 216)로부터 비순차적으로 정수 기능 유닛들(214), 부동 소수점 기능 유닛(218), 및/또는 로드/저장 유닛(220)에 발행될 수 있다. 정수 기능 유닛들(214)의 각각의 세트는, 덧셈, 뺄셈, 어드레스-생성, 분기 조건부 명령(branch conditional instruction)의 결과의 판정, 곱셈, 나눗셈, 등과 같은 정수 컴퓨터 계산(integer computational calculations)을 위한 산술 논리 유닛(Arithmetic Logic Unit, ALU)들을 포함할 수 있다. 부동 소수점 기능 유닛(218)은 부동 소수점 덧셈, 뺄셈, 곱셈, 나눗셈, 제곱근, 정수의 부동 소수점으로의 변환, 부동 소수점의 정수로의 변환, 등을 수행하는 회로를 포함할 수 있다.
일 실시예에서, 마이크로프로세서 명령 스루풋(throughput)을 증가시키기 위해서 복수의 정수 기능 유닛들(214)이 구현될 수 있다. 예를 들어, 프로세서 코어(200)는 복수의 소프트웨어 실행 쓰레드(thread)들을 실행하도록 구성될 수 있다. 마이크로프로세서(100)와, 그리고 대응하는 프로세서 코어(200)를 위한 운영 체계는 소프트웨어 애플리케이션을 위한 메모리 영역들을 할당한다. 소프트웨어 애플리케이션이 컴파일(compile)되는 경우, 애플리케이션은 복수의 프로세스들을 포함할 수 있다. 이러한 실시예에서, 각각의 프로세스는, 이를테면 메모리의 이미지(image), 혹은 애플리케이션 실행 전의 명령들 및 데이터의 인스턴스(instance)와 같은 자신의 자원들을 소유할 수 있다. 또한, 각각의 프로세스는, 코드, 데이터, 및 가능하게는 힙(heap) 및 스택(stack)을 어드레싱하는 어드레스 공간과 같은, 프로세스-특정 정보; 스택 포인터(stack-pointer)들, 일반 및 부동 소수점 레지스터들, 프로그램 카운터, 등과 같은 데이터 및 제어 레지스터들에서의 변수들; 및 stdin, stdout, 등과 같은 운영 체계 기술어(operating system descriptor)들, 그리고 프로세서 소유자 및 프로세스의 허락들의 세트와 같은 보안 속성들을 포함할 수 있다.
소프트웨어 애플리케이션의 각각의 프로세스는 소프트웨어 쓰레드들로 더 분할될 수 있다. 많은 현대의 마이크로프로세서들은 둘 이상의 소프트웨어 쓰레드들을 동시에 실행하도록 구성된다. 이러한 마이크로프로세서들은 운영 체계의 커널에 의한 병렬 실행 및 할당을 위해 이용가능한, 둘 이상의 하드웨어 쓰레드들 또는 스트랜드(strand)들을 가질 수 있다. 예를 들어, 복수-쓰레드 마이크로프로세서에 있어서, 각각의 정수 기능 유닛(214)은 특정 유닛(214) 내의 하드웨어 자원들의 이용가능성에 따라, 클럭 사이클당 하나의 특정 쓰레드의 하나 이상의 정수 명령들을 수신할 수 있다. 명령 페치 유닛(204)으로부터 정수 큐(212)까지의 회로는, 각각의 유닛의 하드웨어의 중복됨이 없이 프로세서 코어(200)의 둘 이상의 스트랜드들을 관리하기 위해 수정될 수 있다. 예를 들어, 쓰레드의 아키텍처 상태를 유지하는 레지스터들은 중복될 수 있지만, 실행 하드웨어 자원들은 중복되지 않을 수 있다.
또 다른 실시예에서, 프로세서 코어(200)의 복수 쓰레드 실행은 전체 클러스터(cluster)의 복제(copy)들의 인스턴스화(instantiation)를 포함할 수 있데, 클러스터는 단일의 쓰레드의 실행을 위해 이용되며, 일 실시예에서는 디코더 유닛(206)으로부터 명령 기능 유닛(214)까지의 회로를 포함한다. 이러한 실시예에서, 이러한 회로는 정수 실행 클러스터로서 지칭될 수 있다. 또 다른 실시예에서, 부동 소수점 코프로세서는 디코더 유닛(206)으로부터 부동 소수점 기능 유닛(218)까지의 회로를 포함할 수 있다. 정수 실행 클러스터의 인스턴스화의 수보다 이러한 부동 소수점 코프로세서의 인스턴스화의 수가 더 적을 수 있다. 이러한 실시예에서, 각각의 부동 소수점 코프로세서는 둘 이상의 쓰레드들에 대응하며, 반면 각각의 정수 실행 클러스터는 단일의 상이한 쓰레드에 대응한다. 명령 페치 유닛(204)은 코어(200)에서의 복수의 쓰레드들을 관리함과 아울러 각각의 클러스터에게 특정 쓰레드의 하나 이상의 이용가능한 대응 명령들을 공급하기 위한 회로를 포함한다. 이 경우에, 각각의 클러스터는 스트랜드이거나 또는 하드웨어 쓰레드이다.
회로 로직 관점에서 정수 기능 유닛(214)의 각각의 복제를 수반하기 위해 부동 소수점 유닛(218)의 복수의 복제들을 인스턴스화하는 것이 바람직할 수 있을지라도, 하드웨어 구현 관점에서는 바람직하지 않을 수도 있다. 예를 들어, 부동 소수점 기능 유닛(Floating-Point functional Unit, FPU)(218)은 많은 양의 다이상 실면적(on-die real estate)을 소비하는 복합 로직(complex logic)을 포함할 수 있다. 또한, 부동 소수점 동작들은 프로그램 코드에서 종종 수행되지 않는다. 따라서, 하드웨어 설계자는 다이 상에 부동 소수점 기능 유닛(218)의 독립적인 고가의 복제들을 생성할 이유가 없을 수 있다.
이제 도 3을 참조하면, 메모리 요청들의 서로 다른 소스들을 예시한 메모리 인터페이스(300)의 일 실시예가 제시된다. 도 3에 도시된 컴포넌트들은 컴포넌트들의 실제 물리적 배치가 아니라, 컴포넌트들의 전체적인 구성 및 결합을 예시한 것임에 유의해야 한다. 도 2와 도 3에서 사용된 회로 및 로직은 이에 따라 참조번호가 매겨졌다. 물리적 배치의 예는 도 1 및 도 2에서 발견될 수 있다. 일 실시예에서, 메모리 서브시스템(330)은, 컴퓨팅 시스템의 온-코어 L2 캐시(on-core L2 cache)에 대응할 수 있는 캐시 메모리(332)를 (그 수반된 미스 버퍼(miss buffer)(334)와 함께) 포함한다. 이러한 실시예에서, 온-코어 L1 i-캐시(202) 및 L1 d-캐시(222)는, 각각의 캐시들에서 미스된 메모리 참조 명령(memory reference instruction)들과 연관된 어드레스들을 유지하기 위해 연관 온-코어 미스 버퍼(associated on-core miss buffer)들을 구비할 수 있다. 또 다른 실시예에서, 캐시 메모리(332)는, L1 i-캐시(202), L1 d-캐시(222), L2 d-캐시, 및 L3 d-캐시와 같은 복수 레벨의 캐시 계층을 (미스 버퍼(334) 내에서의 그 수반된 하나 이상의 미스 버퍼들과 함께) 포함할 수 있다. 이외 다른 조합들이 가능하며 고려된다. 하위 레벨 메모리(340)는 컴퓨팅 시스템의 주 메모리를 포함할 수 있다. 캐시 메모리(332) 및 프리페치 유닛(320) 양쪽 모두는 하위 레벨 메모리(340)에 결합될 수 있다. 프리페치 유닛(320)은, 메모리 서브시스템(330)을 통해 프리페치 요청들을 보낼 수 있고, 또는 독립적으로 메모리 서브시스템(330)을 형성할 수 있다. 프리페치 유닛(320)은, 프리페치 유닛(320)이 캐시 히트(cache hit)들과 캐시 미스(cache miss)들 양쪽 모두를 검출할 수 있게 하기 위해서 미스 버퍼(334) 내에 배치되지 않을 수도 있다. 이러한 검출은 아래에서 더욱 상세하게 설명되는 바와 같이 프리페치 유닛(320)의 트레이닝 상태(training state)와 전파 상태(propagation state) 양쪽 모두에서 유용할 수 있다.
캐시 메모리(332)는 이전 레벨의 모든 캐시 라인들을 포함할 수 있다. 일 실시예에서, L1 d-캐시(222)로부터 복잡성을 제거하기 위해서, L1 d-캐시는 기입-스루 캐시(write-through cache)로서 구현될 수 있고, L2 캐시는 메모리 정렬 및 코히런시 문제들을 관리한다. 따라서, 코어(200) 내에 메모리 요청들은 L1 d-캐시(222)와 캐시 메모리(332)와 같은 L2 캐시 양쪽 모두에 보내진다.
캐시 메모리(332)는 저장 큐(310) 및 로드 버퍼(312)로부터의 비추론적 요구 요청들 모두에 서비스할 수 있다. 추가적으로, 캐시 메모리(332)는 프리페치 유닛(320)으로부터 추론적 프리페치 요청들에 서비스할 수 있다. 프리페치 유닛(320)으로부터의 추론적 프리페치 요청은, 데이터가 실제로 필요할 때에 앞서, 데이터를 캐시 메모리(332)에 가져가려는 것일 수 있으며, 이것은 메모리 액세스들과 연관된 레이턴시를 감소시킬 수 있다.
일 실시예에서, 모든 판독 및 기입 동작들을 큐잉하는 미스 버퍼(334)는 복수의 엔트리들을 포함하는바, 예를 들어 로드, 프리페치, 및 저장 명령들과 같은 것이 있으며, 이들은 이들의 완료를 막는 조건들과 만나게 된다. 예를 들어, 요청된 캐시 라인이 캐시 메모리(332)에 없을 수도 있다. 이와는 달리, 요청된 캐시 라인이 캐시 메모리에 있을 수도 있는데, 그러나 이것은 특정 캐시 코히런시 상태를 갖지 않는다. 예를 들어, 캐시 미스는, 저장 동작에 있어서, 캐시 메모리(332) 내의 대응하는 캐시 라인이 캐시 코히런시 프로토콜의 배타적 상태(exclusive state)에 있지 않을 때, 발생할 수 있다. 후속 상태 변경 요청이 보내질 수 있는데, 이것은 저장 동작에 서비스하기 위한 추가의 레이턴시를 포함한다. 일 실시예에서, 캐시 메모리(332)는 메모리 모델(memory model)을 위한 전역 정렬 지점(global ordering point)이 되도록 선택될 수 있다. 메모리 모델의 규칙들을 고수하기 위해서, 메모리 계층 내에 전역 정렬 지점이 될 필요가 있을 수 있다. 이러한 전역 정렬 지점은 캐시 메모리(332)를 포함할 수 있는바, 이는 모든 저장 동작들에 대해 참조로서 사용되는 연관 기입-스루 L1 캐시를 가진 L2 캐시일 수 있다. 캐시 메모리(332)는 모든 소비자들이 저장 동작들의 일관되고 적합한 정렬을 알 수 있도록 보장할 책임이 있을 수 있다.
메모리 요청들은 적어도 IFU(202), 저장 큐(310), 및 로드 버퍼(312)로부터 나올 수 있다. 이러한 메모리 요청들은 요구 메모리 요청(demand memory request)들로 지칭될 수 있다. 앞서 설명된 바와 같이, IFU(202)는 페치될 쓰레드를 선택하고 그 선택된 쓰레드에 대해 i-캐시(205)로부터 명령들을 페치하도록 구성될 수 있는바, 이것은 도 3에서의 대응하는 L2 캐시 메모리(332)와 함께 L1 캐시에 대응할 수 있다. 저장 큐(310)는 메모리 요청들을 선택된 쓰레드들에 대해 동일 L1 및 L2 캐시들에 전달하도록 구성될 수 있는바, 이는 선택된 쓰레드에 대한 이행 저장 명령(committed store instruction)들의 데이터의 기입을 위한 것이다.
로드 버퍼(312)는 메모리 요청들을 선택된 쓰레드들에 대해 동일 L1 및 L2 캐시들에 전달하도록 구성될 수 있는바, 이는 실행되는 로드 명령들의 데이터의 판독을 위한 것이다. 데이터 스트림 프리페치 유닛(data stream prefetch unit), 또는 프리페치 유닛(320)은 추론적 프리페치 요청들을 선택된 쓰레드들에 대해 동일 L1 및 L2 캐시들에 전달하도록 구성될 수 있는바, 이는 현재 요청된 캐시 라인에 앞서 소정 개수의 캐시 라인들을 프리페치하기 위한 것이다. 프리페치 유닛(320)은 데이터 스트림들을 검출하기 위해 사용될 수 있다. 데이터 스트림은 캐시 라인들의 인접하는 세트를 단조 증가 또는 감소 방식으로 참조하는 일련의 저장소 액세스들로서 정의될 수 있다. 따라서, 일 실시예에서, 프로세서 코어(200) 상의 LSU(220) 내의 적어도 3개의 소스들(저장 큐(310), 로드 버퍼(312), 및 프리페치 유닛(320)을 포함함)은 캐시 인터페이스(325)를 통해 L2 캐시 메모리(332)에 대한 액세스를 경쟁한다.
앞서 언급된 바와 같이, 캐시 메모리(332)는 저장 큐(310)와 로드 버퍼(312)로부터의 비추론적 요구 요청들 모두에 서비스할 수 있다. 추가적으로, 캐시 메모리(332)는, 프리페치 유닛(320)이 데이터 스트림을 검출한 뒤에, 프리페치 유닛(320)로부터의 추론적 프리페치 요청들에 서비스할 수 있다. 메모리 서브시스템(330)에 의해 서비스되는 각각의 요청의 히트/미스 상황은 메모리 서브시스템(330)에서 LSU(220)로 전달될 수 있다. 히트/미스 상황은, 일 실시예에서, 데이터 스트림을 검출하기 위해 사용될 수 있음과 아울러 데이터 스트림에 대해 언제 프리페치 요청들을 개시할지를 판정하기 위해 사용될 수 있다. 예를 들어, 프리페치 유닛(320)은 다른 기존의 데이터 스트림들의 미스 어드레스들과 인접하지 않은 미스 어드레스를 검출할 수도 있다. 이러한 특정 미스 어드레스는 새로운 데이터 스트림의 시작이 될 수도 있다. 일단 이러한 특정 어드레스에 인접함과 아울러 이웃하는 소정 개수의 미스 어드레스들에 도달되면, 트레이닝 기간은 종료할 수 있고, 프리페치 유닛은 이러한 새로운 데이터 스트림에 대한 데이터 프리페치를 개시할 수 있다.
일 실시예에서, 기입 허락을 요청하지 않는 프리페치 요청들을 보내는 동안, 프리페치 유닛(320)은 비추론적 요구 요청의 로드 또는 저장 액세스 유형을 검출하도록 구성될 수 있다. 이러한 요구 요청은 로드 및 저장 액세스들이 산재되어 있는 혼합형 액세스 데이터 스트림 내에 있을 수 있다. 이와 같이 함으로써, 프리페치 유닛(320)은 기입 허락을 요청하는 트레이닝 기간의 종료 이후에 첫 번째 메모리 액세스 동작을 검출하도록 활성화될 수 있다. 일 실시예에서, 저장 동작은 액세스된 데이터를 수정할 수도 있기 때문에, 저장 동작은 (명시적으로 또는 암시적으로) 기입 허락을 요청하는 동작의 예이다. 액세스된 데이터를 수정할 수 있는 다른 동작들이 유사하게 명시적으로 혹은 암시적으로 기입 허락을 요청할 수 있다. 예를 들어, 판독/로드-전용 동작은, 판독된 데이터를 수정할 수 있는 로드 동작, 또는 판독된 데이터를 분명하게 수정하고자 하는 로드 동작의 예이다. 따라서, 어떤 판독 유형 동작들은 또한, (명시적으로 혹은 암시적으로) 기입 허락을 요청할 수 있다. 기입 허락을 요청하는 이러한 동작들의 임의의 원하는 조합을 이용하는 실시예들이 고려된다. 다양한 실시예들에서, 기입 허락을 요청하는 검출된 동작 후의 프리페치 요청들은 프리페치된 데이터에 대해 기입 허락을 얻는 것을 포함할 수 있고, 반면 이러한 동작의 검출 이전의 프리페치 요청들은 기입 허락없이 데이터를 프리페치했을 수도 있다. 이러한 방법을 이용하여, 기입 허락을 요청하는 이전에 검출된 동작 이후의 추론적 프리페치 요청들은, 기입 허락을 얻을 필요성 때문에 일어나는 나중의 상태 변경 페널티를 피할 수 있다.
일 실시예에서, 프리페치 유닛(320)은 트레이닝 기간에 이은 첫 번째 저장 동작이 특정 데이터 스트림에 대해 검출되었는지를 추적하기 위해서 각각의 프리페치 요청에 대해 스티키 저장 비트(sticky store bit)를 이용할 수 있다. 이러한 스티키 저장 비트는, 일단 설정되면, 프리페치 유닛(320)이 동일 데이터 스트림에 대해 로드 액세스들을 후속적으로 검출할지라도, 그 설정된 상태에 머물러 있을 수 있다. 프리페치 유닛(320) 내에 특정 데이터 스트림의 엔트리에 대해 대응하는 스티키 저장 비트가 설정되는 경우, 이것은 특정 데이터 스트림에 대응하는 비추론적 요구 요청 어드레스들의 세트에서 저장 동작이 조기에 검출되었음을 나타낼 수 있다. 이후에, 이러한 특정 데이터 스트림에 대응하는 전송된 추론적 프리페치 요청들은 그 요청된 캐시 라인들의 기입 허락을 요청할 수 있다.
이제 도 4를 참조하면, 프리페치 유닛의 상태 및 상황 천이들을 보여주는 표(350)의 일 실시예가 도시되었다. 캐시 라인들의 인접하는 세트를 단조 증가 방식으로 참조하는 어드레스들을 추적하기 위해, 포괄적인 캐시 라인 경계 어드레스(generic cache line boundary address) X 및 캐시 라인 경계 오프셋(cache line boundary offset)들이 사용된다. 어드레스가 로드 액세스 유형에 대응하는지 아니면 저장 액세스 유형에 대응하는지 여부가 나타나 있다. 일 실시예에서, 프리페치 유닛(320)에서 모니터되는 특정 데이터 스트림은 3가지 상태들, 즉 할당(allocation), 트레이닝(train), 및 전파(propagate) 중 하나를 가질 수 있다.
요구 요청 어드레스가 기존의 데이터 스트림들에서 추적되는 어드레스들과 일치하지 않을 때, 새로운 데이터 스트림이 프리페치 유닛(320) 내에 할당될 수 있다. 다음으로, 이렇게 새롭게 할당된 데이터 스트림은 트레이닝 상태(train state)로 진입한다. 트레이닝 상태에서, 데이터 스트림은 트레이닝 단계를 거치게 되고, 그럼으로써 후속 요구 요청 미스 어드레스들은 대응하는 이전의 미스 어드레스 및 예측된 다음 인접하는 미스 어드레스에 대비되어 비교된다. 이러한 데이터 스트림은, 소정 개수의 후속되는 미스 어드레스들이 이러한 데이터 스트림에 대응하는 것으로 인식되는 경우, 트레이닝 상태에서 전파 상태로 천이한다. 전파 상태에서, 프리페치 유닛(320)은 이러한 동일 데이터 스트림에 속하는 후속 액세스들을 추적하고, 현재 참조되는 캐시 라인에 앞서 캐시 라인들을 검색하기 위해서 추론적 프리페치 요청들을 발행할 수 있다. 더욱이, 대응하는 스티키 저장 비트가 설정되면, 전송되는 추론적 프리페치 요청들은 또한, 프리페치된 캐시 라인들의 기입 허락을 획득한다. 스티키 저장 비트, 프리페치 상태, 및 기입 허락 상태 모두가 표(350)에 제시되었다.
표(350) 내의 델타 필드(delta field)는, 현재 요구 요청 어드레스를 기점으로 어드레스들을 프리페치하기 위해 사용되는 오프셋(offset)을 결정할 수 있다. 제시된 예에서, 어드레스 X-2는, 추적되는 임의의 기존 데이터 스트림에 속하지 않는 것으로, 프리페치 유닛(320)에 의해 인식될 수 있다. 따라서, 새로운 데이터 스트림이 할당된다. 제시된 예에서, 각각의 요구 요청 어드레스는 본 예를 간이화하기 위해 캐시 미스에 대응한다.
제시된 예에서, 트레이닝 상태에서 전파 상태로의 천이 자격의 부여를 위해 소정 개수 3개의 미스된 어드레스들이 사용된다. 본 예에서 3개의 미스된 어드레스들은 X-2, X-1, 및 X를 포함한다. 또 다른 소정의 개수 및 추가적인 자격들이 이러한 천이에 대한 시뮬레이션들에 근거하여 선택될 수 있다. 일단 전파 상태에 있게 되면, 프리페치 유닛(320)은 기입 허락 없이 프리페치 컬럼에서 Y로 표기한 프리페치 요청을 전송한다.
프리페치 요청들은 메모리의 하위 레벨들로부터의 데이터가 L1 캐시 혹은 L2 캐시, 혹은 양쪽 모두, 혹은 다른 조합에 페치되게 하거나 검색되게 한다. 이러한 데이터의 검색은 바람직하게는 데이터가 LSU(220)에 의해 필요로 되기 전에 행해진다. 프리페치의 개념은 데이터 액세스들이 종종 공간 구역성(spatial locality)을 나타낸다는 것의 인식이다. 공간 구역성의 일반적인 발현은 데이터 스트림이며, 이러한 데이터 스트림 내에서 메모리 블록으로부터의 데이터는 단조 증가(혹은 감소) 순서로 액세스되어, 그 인접하는 캐시 라인들이 적어도 하나의 명령에 의해 참조되게 된다. 프리페치 유닛(320)이 데이터 스트림을 검출하는 경우, 현재 캐시 라인에 이웃하며 동일한 방향을 따르는 캐시 라인들에서의 어드레스들에 대한 장래의 참조가 행해질 것이라고 예측하는 것이 타당할 수 있다. 프리페치 유닛(320)은 프로세서로 하여금 이러한 이웃하는 캐시 라인들 중 하나 이상을 (소프트웨어 애플리케이션이 이들을 실제로 요구하기 전에) 검색하게 할 수 있다. 다른 실시예들에서, 프리페치 유닛(320)은 또한 메모리 계층의 하위 레벨들에 결합될 수도 있음에 유의해야 한다. 예를 들어, 트레이닝 및 전파는 L2/L3 히트들 및 미스들에 근거할 수 있다. 수많은 이러한 대안들이 가능하며 고려된다.
일 실시예에서, 프리페치 유닛(320) 내의 로직에 의해 델타 값 1이 계산된다. 이러한 델타 값은 첫 번째 추론적 프리페치 어드레스 X+1과 현재 요구 요청 어드레스 X 간의 오프셋을 찾기 위해 사용될 수 있다. 본 예에서는, 소정 개수의 라인들, 즉 4개의 캐시 라인들이 프리페치 요청들에 대해 사용된다. 따라서, 추론적 어드레스들 X+1 내지 X+4가 사용된다. 또 다른 실시예에서는, 다른 소정 개수의 캐시 라인들이 선택될 수도 있다. 추가적으로, 이러한 값은 각각의 프리페치 요청에 대해 서로 다른 값이 되도록 계산될 수 있다.
어드레스 X+2에 대응하는 액세스에 따라 스티키 저장 비트가 설정된다. 이러한 스티키 저장 비트는 이러한 데이터 스트림에 대한 나중의 액세스들을 위해 그 설정된 상태로 남아 있게 된다. 따라서, 대응하는 프리페치 요청들은 기입 허락을 획득한다.
이제 도 5를 참조하면, 도 3의 프리페치 유닛(320) 내에 특성 데이터의 저장에 대한 일 실시예가 도시된다. 프리페치 유닛(320)은 데이터 스트림 어레이들(410)을 포함할 수 있다. 일 실시예에서, 각각의 엔트리(412)는 이를테면 LSU(220)에 의해 발생된 어드레스들과 같은 데이터 스트림의 특성 데이터를 큐잉하도록 구성될 수 있다. 또 다른 실시예에서, 각각의 엔트리(412)는 캐시 히트/미스 상황이 LSU(220)에 전송될 때까지 어드레스를 큐잉하지 않을 수 있다. 요청 어드레스 필드(420)는 이러한 어드레스를 유지할 수 있다. 일 실시예에서, 캐시 라인 경계에 대응하는 어드레스의 부분만이 큐잉된다. 바이트 오프셋에 대응하는 비트들은 큐잉되지 않을 수 있다.
특성 데이터는 요구 요청의 액세스 유형(로드 또는 저장 동작)을 포함할 수 있고 필드(428)에 큐잉될 수 있다. 발생된 어드레스에 대응하는 캐시 히트/미스 상황이 필드(430)에 큐잉될 수 있다. 스티키 저장 비트 값은 필드(432)에 유지될 수 있다. 대안적으로, 스티키 저장 비트 및 다른 상태 정보(예를 들어, 엔트리에 종속되지 않은 데이터 스트림 상태(즉, 할당, 트레이닝, 전파)와 같은 것)는, 각각의 엔트리(412)에 저장되는 것이 아니라, 특정 데이터 스트림 어레이(410)에 대응하는 레지스터에 큐잉될 수 있다.
제어 로직(440)은 새로운 데이터 스트림의 할당을 제어할 수 있다. 일 실시예에서, 제어 로직(440)은 프리페치 유닛(320) 내에서 중앙 위치에 상주하는 회로 및 저장 소자들을 포함할 수 있다. 대안적 실시예에서, 각각의 데이터 스트림 어레이(410)는 자기 자신의 대응하는 제어 로직을 구비할 수 있다. 추가적으로, 제어 로직(440)은 기존의 데이터 스트림들의 상황 및 어드레스 정보를 업데이트할 수 있다. 어드레스가 LSU(220)에 의해서, 혹은 대안적으로 미스 버퍼(334)에 의해 전달되는 경우, 이러한 어드레스와 각각의 데이터 스트림 어레이(410)에서의 요청 어드레스 필드(420) 및 추론적 어드레스 필드(424) 간에 비교가 수행될 수 있다. 일치가 발견되는 경우, 제어 로직(440)은 또 다른 엔트리를 그 대응하는 데이터 스트림 어레이(410)에 추가할 수 있다. 데이터 스트림의 상태(즉, 할당, 트레이닝, 전파)는 상황 정보 필드(434) 또는 별도의 레지스터에 저장될 수 있다. 이러한 상태 정보는 제어 로직(440)에 의해 업데이트될 수 있다.
일 실시예에서, 각각의 요구 요청 어드레스 및 각각의 추론적 프리페치 어드레스는 칩상의 실면적 제약으로 인해 데이터 스트림 어레이(410) 내의 필드들(420 및 424)에 별도로 저장되지 않을 수도 있다. 그보다는 오히려, 포인터 필드들(422 및 426)이 일정 범위의 어드레스들을 저장하기 위해 사용될 수 있다. 필드(424)에 대응하는 추론적 어드레스들은 프리페치 요청들을 도 3의 캐시 메모리(332)에 전송하기 위해 사용될 수 있다. 일 실시예에서, 이러한 프리페치 요청들은 데이터 스트림이 전파 상태를 가질 때 전송된다.
발생된 어드레스가 데이터 스트림 어레이(410) 내에서의 큐잉된 어드레스 또는 도출된 어드레스와 일치하지 않는다면, 새로운 데이터 스트림이 생성될 수 있다. 일 실시예에서, 비교로부터 어떠한 것도 일치하지 않는 것은 새로운 데이터 스트림을 생성하기 위한 유일한 조건일 수 있다. 또 다른 실시예에서, 추가의 조건은, 그 발생된 어드레스가 미스 버퍼(334)의 어떠한 엔트리들에서도 발견될 수 없음을 포함한다(이 경우 상황 정보는 프리페치 요청이 이러한 어드레스에 대해 이미 전송되었음을 표시함). 다른 자격 조건들이 가능하며 고려된다.
만약 새로운 데이터 스트림이 생성돼야 할 것으로 제어 로직(440)에 의해 판정된다면, 특정 데이터 스트림 어레이(410)에 대한 할당이 행해진다. 제어 로직(440)은, 빈 어레이(410)를 선택하기 위해 혹은 덮어쓰여질 어레이(410)를 선택하기 위해, 임의의 원하는 교체 알고리즘(예를 들어, LRU(Least-Recently-Used) 알고리즘과 같은 것)을 사용할 수 있다.
상황 정보 필드(434)는 또한, 스트림 식별값(Stream Identification Value, SID), 업/다운 비트(up/down bit), 큐 어드레스(queue addres)의 헤드(head), 길이 필드(length field), 및 깊이 필드(depth field)를 포함할 수 있다. 길이 필드 및 큐 어드레스의 헤드는 데이터 스트림의 경계들을 정의할 수 있다. 데이터 스트림이 먼저 할당될 때, 큐 필드의 헤드는 데이터 스트림에서 첫 번째 캐시 라인의 어드레스를 포함할 수 있다. 깊이 필드는 그 대응하는 데이터 스트림과 연관된 프리페치 레벨(예를 들어, 적극적(aggressive) 또는 보존적(conservative))을 표시할 수 있다. 이러한 값은 프리페치 동안 요청할 캐시 라인들의 개수를 도출하기 위해 사용될 수 있다. 캐시 라인들의 개수는, 특정 구현에 따라 각각의 프리페치에 대해 다를 수도 있고 또는 일관된 개수일 수도 있다.
프리페치는 적극적이거나 보존적일 수 있다. 적극성 레벨은 프리페치의 깊이에서 반영될 수 있거나, 또는 (컴퓨터 프로그램에 의해 현재 로드 혹은 저장되는 캐시 라인에 앞서) 요청에 의해 프리페치되는 캐시 라인들의 수에서 반영될 수 있다. 이상적으로는, 프리페치 구현의 깊이는, 과도한 프리페치를 야기하지 않으면서도 동시에 캐시 미스 레이턴시 페널티를 피하기 위해 충분한 개수의 캐시 라인들이 프리페치되도록 최적화된다. 과도한 프리페치는, 프로세서에 대해 이용가능한 현재 최대 데이터 대역폭이 주어졌을 때, 필요한 것보다 더 많은 캐시 라인들을 프리페치하는 것을 말한다.
프리페치할 캐시 라인들의 개수의 (제어 로직(440)에 의한) 결정은, 메모리 레이턴시 대 대역폭의 비율(ratio)을 사용할 수 있다. 메모리에 대한 이러한 비율보다 큰 다수의 프리페치 요청들은, 시스템의 전체 대역폭이, 레이턴시에 의해 야기되는 어떠한 갭(gap)들 없이 이용될 수 있게 한다. 동시발생 데이터 스트림들의 개수와 같은 프리페치할 캐시 라인들의 개수를 결정하기 위해 다른 인자들이 사용될 수도 있다. 하나의 데이터 스트림에 대한 최적의 프리페치 깊이는 또 다른 데이터 스트림에 대한 최적의 깊이와 동일하지 않을 수 있다. 제어 로직(440)은 프리페치 깊이와 같은 프리페치 파라미터들에 대한 동적 지원(dynamic support) 및 데이터 스트림 특정 제어(data stream specific control)를 제공할 수 있다. 도 5에서의 필드들이 특정 순서로 제시되었을지라도, 다른 조합들이 가능하며 추가의 필드들이 이용될 수 있음에 유의해야 한다. 필드들(420-434)에 대한 정보를 저장하는 비트들은 인접할 수도 있고 그렇지 않을 수도 있다. 마찬가지로, 데이터 스트림 어레이들(410) 및 제어 로직(440)의 배열은 더 나은 절충된 설계를 위해 다른 것으로 교체될 수도 있다.
이제 도 6을 참조하면, 프로세서 내의 효율적인 캐시 라인 프리페치를 위한 방법(500)의 일 실시예가 도시된다. 방법(500)은 대안적 실시예들을 도출하기 위해 당업자들에 의해 수정될 수도 있다. 또한, 본 실시예에서 단계들은 순차적 순서로 도시된다. 그러나, 일부 단계들은 제시된 것과는 다른 순서로 행해질 수도 있고, 일부 단계들은 동시에 수행될 수도 있으며, 일부 단계들은 다른 단계들과 결합될 수도 있고, 그리고 일부 단계들은 다른 실시예에서는 없을 수도 있다. 제시된 실시예에서, 프로세서 코어(200)는, 블록(502)에서, 하나 이상의 소프트웨어 애플리케이션들의 명령들을 실행하고 있을 수도 있다. 코어(200)는 하나 이상의 소프트웨어 애플리케이션들의 명령들을 페치한다. 이들 페치된 명령들은 디코딩되고 리네이밍될 수 있다. 리네이밍된 명령들은 나중에 실행을 위해 선택된다.
블록(504)에서, 메모리 참조 명령들은 메모리에 요구 요청을 보낼 수 있다. 일 실시예에서, 대응하는 어드레스가 프리페치 유닛(320)에 전달될 수 있다. 또 다른 실시예에서, 대응하는 어드레스는, 블록(506)에서 캐시 히트/미스 상황을 알게 될 때까지는, 프리페치 유닛(320)에 전달되지 않을 수 있다. 블록(508)에서, 어드레스가 프리페치 유닛(320)에 전달될 때, 어드레스는 프리페치 유닛(320) 내에서의 저장된 요구 요청 어드레스들과 저장된 추론적 어드레스들 양쪽 모두와 비교된다.
만약 어드레스 일치가 발견되지 않는다면(조건부 블록(510)), 블록(512)에서, 새로운 데이터 스트림이 프리페치 유닛(320)에서 할당될 수 있다. 위에 기술된 바와 같이 할당이 일어나기 전에 추가적인 자격 조건들이 사용될 수도 있다. 블록(514)에서, 데이터 스트림은 이때 자신의 (할당 상태에서 트레이닝 상태로의) 상태 천이를 가질 수 있다. 나중에 비교를 위해서, 다음 어드레스가 업/다운 비트의 도움으로 도출될 수 있다. 대안적으로, 두 개의 어드레스들이 도출될 수 있는데, 만약 업/다운 값을 아직 모른다면, 하나는 단조 증가된 값이며 다른 하나는 단조 감소된 값이다. 또 다른 실시예에서, 할당 상태에서 트레이닝 상태로의 상태 천이는 도출된 값들을 가진 데이터 스트림에 대해 추후에 비교가 수행될 때까지는 일어나지 않을 수도 있다. 이어서 방법(500)의 제어 흐름은 블록(502)으로 되돌아 간다.
어드레스 일치가 발견된다면(조건부 블록(510)), 블록(516)에서, 데이터 스트림의 상태(즉, 할당, 트레이닝, 전파)가 조사된다. 만약 데이터 스트림이 할당 상태 또는 트레이닝 상태를 가진 더 새로운 데이터 스트림이라면(조건부 블록(518)), 방법(500)의 제어 흐름은 블록 B로 간다. 만약 그렇지 않다면, 방법(500)의 제어 흐름은 블록 A로 간다.
이제 도 7를 참조하면, 프로세서 내의 효율적인 캐시 라인 프리페치를 계속하기 위한 방법(600)의 일 실시예가 도시된다. 방법(500)과 유사하게, 방법(600)은 대안적 실시예들을 도출하기 위해 당업자들에 의해 수정될 수도 있다. 또한, 본 실시예에서 단계들은 순차적 순서로 도시되었다. 그러나, 일부 단계들은 제시된 순서와는 다른 순서로 일어날 수도 있고, 일부 단계들은 동시에 수행될 수도 있으며, 일부 단계들은 다른 단계들과 결합될 수도 있고, 그리고 일부 단계들은 다른 실시예에서는 없을 수도 있다. 제시된 실시예에서, 방법(600)의 제어 흐름은 블록 A로 시작하는바, 블록 A는 전파 상태를 가진 데이터 스트림 내에서의 어드레스 일치에 의해 도달된다.
현재 액세스가 그 대응하는 어드레스에 대한 첫 번째 요구 요청 액세스라면(조건부 블록(602)), 대응하는 데이터 스트림에 대해 전파 히트(propagation hit)가 발생한다. 본 명세서에서 사용되는 바와 같이, 전파 히트는, 어드레스에 근거하여 하나 이상의 프리페치 요청들을 발생시키는 데이터 스트림(예를 들어, 어레이(410)에 의해 식별되는 데이터 스트림) 내에서의 어드레스 비교 일치, 또는 히트를 말한다. 예를 들어, 상황 필드(434)에 저장된 "전파"의 상태를 갖는 특정 데이터 스트림 어레이(410) 내의 추론적 어드레스 필드(424)에 저장된 값(또는 필드(424) 및 포인터 필드(426)로부터 도출된 값)에 관한 어드레스 일치가 전파 히트일 수 있다. 블록(604)에서, 새로운 프리페치 파라미터들이 결정될 수도 있다. 예를 들어, 도 4의 표(350)에 제시된 것과 같은, 새로운 델타 값이 계산될 수도 있다. 만약 프리페치 깊이, 또는 페치될 캐시 라인들의 개수가 일정한 값이 아니라면, 이러한 값이 또한 이때 계산될 수 있다. 일 실시예에서, 제어 로직(440)은, 이러한 값을 각각의 데이터 스트림 어레이(410)의 필드(420)에 저장된 어드레스들과 비교함으로써, 그 전달된 요구 요청 어드레스가 제 1 캐시 액세스에서 이용되는지를 결정할 수 있다. 제 1 캐시 액세스에서 이용되는 어드레스는 아직 필드(420)에 저장되지 않을 것이다. 그렇지만, 어드레스 값은 이전 프리페치에 근거하여 필드(424)에 저장될 수 있다.
그 전달된 요구 요청의 액세스 유형이 저장 동작이라면(조건부 블록(608)), 블록(616)에서, 스티키 저장 비트가 설정될 수 있다. 일단 이러한 스티키 저장 비트가 설정되면, 이것은 설정된 채로 있게 될 것이다. 블록(618)에서, 하나 이상의 프리페치 요청들이 그 도출된 프리페치 파라미터들을 사용하여 기입 허락을 갖고 보내진다. 추론적 어드레스들이 현재 일치하는 요구 요청 어드레스, 델타 값, 및 프리페치 깊이 값으로부터 도출될 수 있다. 프리페치 요청들이 기입 허락을 갖고 보내지기 때문에, 검색된 캐시 라인들에서 데이터를 수정하는 임의의 나중의 저장 동작들은 상태 변경 요청 페널티를 겪지 않을 것이다. 그 다음에, 방법(600)의 제어 흐름은 블록 D로 간다.
요구 요청의 액세스 유형이 저장 동작이 아니라면(조건부 블록(608)), 스티키 저장 비트의 조사가 행해진다. 이를테면 데이터 스트림 내의 이전 저장 액세스로부터 그리고 가능하게는 동일 캐시 라인 내에서 이전에, 스티키 저장 비트가 설정된다면(조건부 블록(612)), 블록(618)에서, 하나 이상의 프리페치 요청들이 그 도출된 프리페치 파라미터들을 사용하여 기입 허락을 갖고 보내진다. 다시, 프리페치 요청들이 기입 허락을 갖고 보내지기 때문에, 검색된 캐시 라인들에서 데이터를 수정하는 임의의 나중의 저장 동작들은 상태 변경 요청 페널티를 겪지 않을 것이다. 다시, 도 4의 표(350)를 참조하면, 어드레스 X+3의 첫 번째 발생 및 어드레스 X+4의 발생은 이러한 범주(category)에 속하게 된다. 그렇지 않고, 만약 스티키 저장 비트가 설정되지 않는다면(조건부 블록(612)), 블록(614)에서, 하나 이상의 프리페치 요청들은 그 도출된 프리페치 파라미터들을 사용하여 기입 허락없이 보내진다. 그 다음에, 방법(600)의 제어 흐름은 블록 D로 간다.
현재 액세스가 그 대응하는 어드레스에 대한 첫 번째 요구 요청 액세스가 아니라면(조건부 블록(602)), 대응하는 데이터 스트림에 대해 비전파 히트(non-propagation hit)가 발생한다. 본 명세서에서 사용되는 바와 같이, 비전파 히트는 어드레스에 근거하여 어떠한 프리페치 요청들도 발생시키지 않는 데이터 스트림 어레이(예를 들어, 어레이(410)에 의해 식별되는 데이터 스트림) 내에서의 어드레스 비교 일치, 또는 히트를 말한다. 예를 들어, 상황 필드(434)에 저장된 전파의 상태를 가진 특정 데이터 스트림 어레이(410)의 요구 요청 어드레스 필드(420)에 저장된 값에 관한 어드레스 일치가 비전파 히트일 수 있다. 다시 도 4의 표(350)를 참조하면, 어드레스 X+1의 두 번째 발생과 어드레스 X+3의 두 번째 및 세 번째 발생들은 비전파 히트들에 해당한다. 만약 이러한 특정 데이터 스트림에 대해 스티키 저장 비트가 설정되면(조건부 블록(610)), 방법(600)의 제어 흐름은 블록 D로 간다. 본 경우에서는 어떠한 프리페치 요청들도 필요하지 않은데, 왜냐하면 액세스가 이미 이전에 프리페치된 캐시 라인 내의 데이터에 관해 행해지고 있기 때문이다. 또한, 스티키 비트는 이미 설정되어 있고, 이에 따라 요구 요청의 액세스 유형의 어떠한 조사도 필요하지 않다. 그렇지 않고, 만약 스티키 저장 비트가 설정되어 있지 않다면(조건부 블록(610)), 방법(600)의 제어 흐름은 조건부 블록(608)으로 간다. 여기에서, 요구 요청의 액세스 유형이 조사된다.
이제 도 8을 참조하면, 프로세서 내의 효율적인 캐시 라인 프리페치를 계속하기 위한 방법(700)의 일 실시예가 도시된다. 설명된 각각의 방법에서와 같이, 방법(700)은 대안적 실시예들을 도출하기 위해 당업자들에 의해 수정될 수도 있다. 또한, 이러한 실시예에서 단계들은 순차적 순서로 도시되었다. 그러나, 일부 단계들은 제시된 순서와는 다른 순서로 행해질 수도 있고, 일부 단계들은 동시에 수행될 수도 있으며, 일부 단계들은 다른 단계들과 결합될 수도 있고, 그리고 일부 단계들은 다른 실시예에서는 없을 수도 있다. 제시된 실시예에서, 방법(700)의 제어 흐름은 블록 B로 시작하는바, 블록 B는 트레이닝 상태를 가진 데이터 스트림 내에서의 어드레스 일치에 의해 도달된다.
일 실시예에서, 만약 요구 요청이 캐시 히트 상황을 갖는다면(조건부 블록(702)), 블록(704)에서, 어드레스 일치를 가진 데이터 스트림은 자신의 교체 전략(replacement strategy)이 업데이트되게 할 수 있다. 예를 들어, LRU 알고리즘에 대응하는 값은 이러한 데이터 스트림이 최소-사용된 데이터 스트림(least-used data stream)임을 나타내기 위해 업데이트될 수 있다. 추가적으로, 데이터 스트림의 상태는 또 다른 상태로의 천이가 아니라, 트레이닝 상태에 그대로 남아 있을 수 있다. 방법(700)의 제어 흐름은 블록 C로 간다.
일 실시예에서, 만약 요구 요청이 캐시 미스 상황을 갖는다면(조건부 블록(702)), 블록(706)에서, 어드레스는 어드레스 일치에 대응하는 데이터 스트림 내에서 다음 엔트리로서 저장될 수 있다. 블록(708)에서 엔트리 카운터의 수가 증분될 수 있다. 이러한 카운터는 이러한 특정 데이터 스트림에 큐잉되어 있는 엔트리들의 개수를 유지할 수 있다. 이러한 카운트 값은, 데이터 스트림 상태가 언제 트레이닝 상태에서 전파 상태로 천이해야 하는지를 판정하기 위해 사용될 수 있다. 일 실시예에서, 그 전달된 요구 요청의 액세스 유형은 조사될 필요가 없고, 방법(700)의 제어 흐름은 블록(708)에서 조건부 블록(710)으로 이동할 수 있다. 또 다른 실시예에서, 이러한 액세스 유형은 조사될 수 있고, 만약 요구 요청이 저장 동작이라면, 대응하는 스티키 비트가 설정될 수도 있다. 일 실시예에서, 일단 이러한 스티키 비트가 설정되면, 이것은 그 설정된 상태로 있게 된다. 이러한 구현은, 예를 들어, 데이터 스트림의 트레이닝 상태에서 일어나는 저장 동작이, 데이터 스트림의 나중 전파 상태에서 저장 동작이 일어날 수 있음을 안전하게 예측하는 것으로 여겨질 때 사용될 수 있다.
엔트리 카운터의 수가 소정의 임계값에 도달한다면(조건부 블록(710)), 데이터 스트림 상태가 업데이트된다. 블록(712)에서, 이러한 상태는 트레이닝 상태에서 전파 상태로 천이한다. 블록(714)에서, 프리페치 파라미터들이 결정될 수 있다. 이들 파라미터들은 델타 값 및 프리페치 깊이를 포함할 수 있다. 그 다음에, 방법(700)의 제어 흐름은 블록 E로 간다. 만약 엔트리 카운터의 수가 소정의 임계값에 도달하지 않는다면(조건부 블록(710)), 방법(700)의 제어 흐름은 블록 D로 간다.
앞에서 설명된 실시예들은 소프트웨어를 포함할 수 있음에 유의해야 한다. 이러한 실시예에서, 방법들 및/또는 메커니즘들을 구현하는 프로그램 명령들은 컴퓨터 판독가능 매체 상에 전달 또는 저장될 수 있다. 프로그램 명령들을 저장하도록 구성되는 수많은 유형의 매체들이 이용가능하며, 이러한 것으로는 하드디스크, 플로피 디스크, CD-ROM, DVD, 플래시 메모리, 프로그램가능 ROM(Programmable ROM, PROM), 랜덤 액세스 메모리(Random Access Memory, RAM), 및 이외 다양한 형태의 휘발성 또는 비휘발성 저장장치가 있다. 추가적으로, 앞에서 설명된 컴퓨팅 시스템은 데스크탑 컴퓨터, 랩탑 컴퓨터, 서버, 휴대용 컴퓨팅 장치, 셋탑박스, 라우터, 등과 같은 임의의 적합한 장치에서 사용되는 프로세서의 부분일 수 있음을 이해해야 한다.
앞에서의 실시예들이 상당히 상세히 설명되었을지라도, 일단 위에 개시된 바를 완전히 알게 되면 당업자들에게 수많은 변형 및 수정은 명백하게 될 것이다. 다음의 특허청구범위는 이러한 모든 변형 및 수정을 포괄하여 해석되도록 의도되었다.

Claims (20)

  1. 프리페치 유닛(prefetch unit)을 포함하는 컴퓨팅 시스템(computing system)으로서,
    상기 프리페치 유닛은,
    주어진 데이터 스트림(given data stream)에 대한 액세스를 검출하도록 되어 있고, 여기서 상기 데이터 스트림은 하위 레벨 메모리(lower-level memory) 내의 복수의 인접하는 데이터 블록들에 대응하며; 그리고
    상기 액세스를 검출하고 상기 주어진 데이터 스트림에 대한 캐시 미스(cache miss)들의 개수가 소정의 임계값(predetermined threshold)에 도달했다고 판정한 것에 따라,
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락(write permission)을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 없었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 부분을 기입 허락 없이 프리페치하고, 그리고
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 있었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하도록 되어 있는 것을 특징으로 하는 컴퓨팅 시스템.
  2. 제1항에 있어서,
    상기 하위 레벨 메모리로부터의 상기 주어진 데이터 스트림의 상기 부분은 하나 이상의 인접하는 캐시 라인(cache line)들에 대응하는 것인 것을 특징으로 하는 컴퓨팅 시스템.
  3. 제1항에 있어서,
    상기 액세스를 검출하고 하나 이상의 데이터 스트림들 중 상기 주어진 데이터 스트림에 대한 캐시 미스들의 개수가 소정의 임계값에 도달했다고 판정한 것에 따라, 상기 프리페치 유닛은,
    상기 액세스가 기입 허락을 요청하고 상기 액세스로 인해 상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달하게 되었다고 판정하는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하도록 되어 있는 것을 특징으로 하는 컴퓨팅 시스템.
  4. 제1항에 있어서,
    상기 프리페치 유닛은 또한, 상기 액세스의 어드레스와 초기 프리페치 캐시 라인(initial prefetch cache line)의 어드레스 간의 정수 델타 값(integer delta value)을 판정하도록 되어 있는 것을 특징으로 하는 컴퓨팅 시스템.
  5. 제1항에 있어서,
    상기 프리페치 유닛은 또한, 하나 이상의 데이터 스트림들에 대응하는 특성 데이터(characterization data)를 저장하도록 되어 있는 것을 특징으로 하는 컴퓨팅 시스템.
  6. 제5항에 있어서,
    특정 데이터 스트림에 대응하는 상기 특성 데이터는, 데이터 스트림 식별자(data stream identifier)(ID), 각각의 요구 요청(demand request)의 판독/기입 액세스 유형(read/write access type), 각각의 요구 요청의 어드레스, 요구 요청의 캐시 히트/미스 상황(cache hit/miss status), 및 요구 요청에 대응하는 초기 프리페치 어드레스 중 적어도 하나를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  7. 제5항에 있어서,
    상기 특성 데이터는 표(table)에 저장되며, 상기 회로는 또한, 상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 제 1 액세스를 검출하는 것에 응하여, 스티키 저장 비트(sticky store bit)를 설정(set)하도록 되어 있고, 그리고 일단 설정된 상기 스티키 저장 비트는, 상기 주어진 데이터 스트림의 데이터가 상기 표에 유효한 엔트리(valid entry)를 갖는 동안, 설정된 상태로 유지되는 것을 특징으로 하는 컴퓨팅 시스템.
  8. 제5항에 있어서,
    상기 특성 데이터는 표에 저장되며, 상기 프리페치 유닛은 또한, 새로운 데이터 스트림의 캐시 미스 어드레스가 상기 표에 현재 저장된 데이터 스트림의 어드레스에 이웃하지 않음을 검출한 것에 응하여, 상기 표에 상기 새로운 데이터 스트림을 할당하도록 되어 있는 것을 특징으로 하는 컴퓨팅 시스템.
  9. 주어진 데이터 스트림에 대한 액세스를 검출하는 단계와, 여기서 상기 데이터 스트림은 하위 레벨 메모리 내의 복수의 인접하는 데이터 블록들에 대응하며; 그리고
    상기 액세스를 검출하고 하나 이상의 데이터 스트림들 중 상기 주어진 데이터 스트림에 대한 캐시 미스들의 개수가 소정의 임계값에 도달했다고 판정한 것에 따라,
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 없었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 부분을 기입 허락 없이 프리페치하고, 그리고
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 있었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하는 단계를 포함하는 것을 특징으로 하는 방법.
  10. 제9항에 있어서,
    상기 하위 레벨 메모리로부터의 상기 주어진 데이터 스트림의 상기 부분은 하나 이상의 인접하는 캐시 라인들에 대응하는 것인 것을 특징으로 하는 방법.
  11. 제9항에 있어서,
    상기 액세스를 검출하고 상기 하나 이상의 데이터 스트림들 중 상기 주어진 데이터 스트림에 대한 캐시 미스들의 개수가 소정의 임계값에 도달했다고 판정한 것에 따라,
    상기 액세스가 기입 허락을 요청하고 상기 액세스로 인해 상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달하게 되었다고 판정하는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  12. 제9항에 있어서,
    현재 요구 요청(current demand request)의 어드레스와 초기 비인접 프리페치 캐시 라인(initial non-adjacent prefetch cache line)의 어드레스 간의 정수 델타 값을 판정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  13. 제9항에 있어서,
    상기 하나 이상의 데이터 스트림들에 대응하는 특성 데이터를 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  14. 제13항에 있어서,
    특정 데이터 스트림에 대응하는 상기 특성 데이터는, 데이터 스트림 식별자(ID), 각각의 요구 요청의 판독/기입 액세스 유형, 각각의 요구 요청의 어드레스, 요구 요청의 캐시 히트/미스 상황, 및 요구 요청에 대응하는 초기 프리페치 어드레스 중 적어도 하나를 포함하는 것을 특징으로 하는 방법.
  15. 제13항에 있어서,
    상기 특성 데이터는 표에 저장되며,
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 제 1 액세스를 검출하는 것에 응하여, 스티키 저장 비트를 설정하는 단계를 더 포함하고,
    일단 설정된 상기 스티키 저장 비트는, 상기 주어진 데이터 스트림의 데이터가 상기 어레이(array)에 저장되어 있는 동안, 설정된 상태로 유지되는 것을 특징으로 하는 방법.
  16. 제9항에 있어서,
    대응하는 캐시 미스 어드레스가 기존의 데이터 스트림들에 저장된 어드레스에 이웃하지 않음을 검출한 것에 응하여, 저장소에 새로운 데이터 스트림을 할당하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  17. 프리페치 유닛(prefetch unit)으로서,
    캐시(cache)에 결합되도록 되어 있는 제 1 인터페이스와;
    하위 레벨 메모리에 결합되도록 되어 있는 제 2 인터페이스와; 그리고
    제어 회로를 포함하여 구성되며,
    상기 하위 레벨 메모리 내의 복수의 인접하는 데이터 블록들에 대응하는 주어진 데이터 스트림에 대한 액세스를 검출하고 하나 이상의 데이터 스트림들 중 상기 주어진 데이터 스트림에 대한 캐시 미스들의 개수가 소정의 임계값에 도달했다고 판정한 것에 따라, 상기 제어 회로는,
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 없었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 부분을 기입 허락 없이 프리페치하고, 그리고
    상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달한 뒤에, 기입 허락을 요청하는 상기 주어진 데이터 스트림에 대한 액세스가 있었다는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하도록 되어 있는 것을 특징으로 하는 프리페치 유닛.
  18. 제17항에 있어서,
    상기 하위 레벨 메모리로부터의 상기 주어진 데이터 스트림의 상기 부분은 하나 이상의 인접하는 캐시 라인들에 대응하는 것인 것을 특징으로 하는 프리페치 유닛.
  19. 제17항에 있어서,
    상기 액세스를 검출하고 상기 하나 이상의 데이터 스트림들 중 상기 주어진 데이터 스트림에 대한 캐시 미스들의 개수가 소정의 임계값에 도달했다고 판정한 것에 따라, 상기 제어 회로는 또한,
    상기 액세스가 기입 허락을 요청하고 상기 액세스로 인해 상기 캐시 미스들의 개수가 상기 소정의 임계값에 도달하게 되었다고 판정하는 것에 응하여, 하위 레벨 메모리로부터 상기 주어진 데이터 스트림의 상기 부분을 기입 허락을 갖고 프리페치하도록 되어 있는 것을 특징으로 하는 프리페치 유닛.
  20. 제17항에 있어서,
    복수의 엔트리들을 포함하는 표를 더 포함하고, 각각의 엔트리는 특정 데이터 스트림에 대응하는 특성 데이터를 저장하도록 되어 있고, 특정 데이터 스트림에 대응하는 상기 특성 데이터는, 데이터 스트림 식별자(ID), 각각의 요구 요청의 판독/기입 액세스 유형, 각각의 요구 요청의 어드레스, 요구 요청의 캐시 히트/미스 상황, 및 요구 요청에 대응하는 초기 프리페치 어드레스 중 적어도 하나를 포함하는 것을 특징으로 하는 프리페치 유닛.
KR1020127009323A 2009-09-11 2010-09-09 데이터 스트림에 대한 저장 인식 프리페치 KR101614867B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/558,465 2009-09-11
US12/558,465 US8667225B2 (en) 2009-09-11 2009-09-11 Store aware prefetching for a datastream

Publications (2)

Publication Number Publication Date
KR20120070584A true KR20120070584A (ko) 2012-06-29
KR101614867B1 KR101614867B1 (ko) 2016-04-22

Family

ID=43242176

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127009323A KR101614867B1 (ko) 2009-09-11 2010-09-09 데이터 스트림에 대한 저장 인식 프리페치

Country Status (7)

Country Link
US (1) US8667225B2 (ko)
EP (1) EP2476060B1 (ko)
JP (1) JP5615927B2 (ko)
KR (1) KR101614867B1 (ko)
CN (1) CN102640124B (ko)
IN (1) IN2012DN02977A (ko)
WO (1) WO2011031837A1 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307180B2 (en) 2008-02-28 2012-11-06 Nokia Corporation Extended utilization area for a memory device
US8874824B2 (en) 2009-06-04 2014-10-28 Memory Technologies, LLC Apparatus and method to share host system RAM with mass storage memory RAM
US8533399B2 (en) * 2010-01-15 2013-09-10 International Business Machines Corporation Cache directory look-up re-use as conflict check mechanism for speculative memory requests
US8838906B2 (en) * 2010-01-08 2014-09-16 International Business Machines Corporation Evict on write, a management strategy for a prefetch unit and/or first level cache in a multiprocessor system with speculative execution
US9507647B2 (en) * 2010-01-08 2016-11-29 Globalfoundries Inc. Cache as point of coherence in multiprocessor system
US8509254B2 (en) * 2010-06-28 2013-08-13 Intel Corporation Direct memory access engine physical memory descriptors for multi-media demultiplexing operations
US8583894B2 (en) * 2010-09-09 2013-11-12 Advanced Micro Devices Hybrid prefetch method and apparatus
US8880847B2 (en) * 2010-09-28 2014-11-04 Texas Instruments Incorporated Multistream prefetch buffer
US9417998B2 (en) 2012-01-26 2016-08-16 Memory Technologies Llc Apparatus and method to provide cache move with non-volatile mass memory system
US9098418B2 (en) * 2012-03-20 2015-08-04 Apple Inc. Coordinated prefetching based on training in hierarchically cached processors
US9311226B2 (en) 2012-04-20 2016-04-12 Memory Technologies Llc Managing operational state data of a memory module using host memory in association with state change
US9311251B2 (en) 2012-08-27 2016-04-12 Apple Inc. System cache with sticky allocation
GB2509765B (en) * 2013-01-15 2015-07-15 Imagination Tech Ltd Improved control of pre-fetch traffic
US9384136B2 (en) * 2013-04-12 2016-07-05 International Business Machines Corporation Modification of prefetch depth based on high latency event
WO2014202825A1 (en) * 2013-06-20 2014-12-24 Nokia Corporation Microprocessor apparatus
JP6119523B2 (ja) * 2013-09-20 2017-04-26 富士通株式会社 演算処理装置、演算処理装置の制御方法及びプログラム
WO2015089488A1 (en) 2013-12-12 2015-06-18 Memory Technologies Llc Channel optimized storage modules
JP5936152B2 (ja) 2014-05-17 2016-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation メモリアクセストレース方法
US9529727B2 (en) 2014-05-27 2016-12-27 Qualcomm Incorporated Reconfigurable fetch pipeline
US10387318B2 (en) 2014-12-14 2019-08-20 Via Alliance Semiconductor Co., Ltd Prefetching with level of aggressiveness based on effectiveness by memory access type
EP3129887B1 (en) * 2014-12-14 2018-08-15 VIA Alliance Semiconductor Co., Ltd. Multiple data prefetchers that defer to one another based on prefetch effectiveness by memory access type
US9971694B1 (en) * 2015-06-24 2018-05-15 Apple Inc. Prefetch circuit for a processor with pointer optimization
US10324832B2 (en) * 2016-05-25 2019-06-18 Samsung Electronics Co., Ltd. Address based multi-stream storage device access
US10042749B2 (en) 2015-11-10 2018-08-07 International Business Machines Corporation Prefetch insensitive transactional memory
US10474576B2 (en) 2015-11-10 2019-11-12 International Business Machines Corporation Prefetch protocol for transactional memory
JP6734760B2 (ja) 2015-11-10 2020-08-05 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プリフェッチ・インセンシティブのトランザクション・メモリ
US10152419B2 (en) 2015-11-10 2018-12-11 International Business Machines Corporation Deferred response to a prefetch request
US9904624B1 (en) 2016-04-07 2018-02-27 Apple Inc. Prefetch throttling in a multi-core system
US10180905B1 (en) 2016-04-07 2019-01-15 Apple Inc. Unified prefetch circuit for multi-level caches
US10169240B2 (en) * 2016-04-08 2019-01-01 Qualcomm Incorporated Reducing memory access bandwidth based on prediction of memory request size
US10649904B2 (en) 2016-12-12 2020-05-12 Samsung Electronics Co., Ltd. System and method for store streaming detection and handling
US10331567B1 (en) 2017-02-17 2019-06-25 Apple Inc. Prefetch circuit with global quality factor to reduce aggressiveness in low power modes
KR102429429B1 (ko) 2017-03-24 2022-08-04 삼성전자주식회사 전자 장치 및 그 동작방법
CN109669880A (zh) * 2017-10-13 2019-04-23 展讯通信(上海)有限公司 一种数据预取方法及装置、微处理器
CN109408412B (zh) * 2018-10-24 2021-04-30 龙芯中科技术股份有限公司 内存预取控制方法、装置及设备
US10963249B2 (en) 2018-11-02 2021-03-30 International Business Machines Corporation Processor prefetcher mode governor for switching between prefetch modes
CN110427332B (zh) 2019-08-05 2021-08-20 上海兆芯集成电路有限公司 数据预取装置、数据预取方法及微处理器
CN114065947B (zh) * 2021-11-15 2022-07-22 深圳大学 一种数据访问推测方法、装置、存储介质及电子设备

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778436A (en) 1995-03-06 1998-07-07 Duke University Predictive caching system and method based on memory access which previously followed a cache miss
US5848254A (en) * 1996-07-01 1998-12-08 Sun Microsystems, Inc. Multiprocessing system using an access to a second memory space to initiate software controlled data prefetch into a first address space
US6401193B1 (en) 1998-10-26 2002-06-04 Infineon Technologies North America Corp. Dynamic data prefetching based on program counter and addressing mode
US6282614B1 (en) 1999-04-15 2001-08-28 National Semiconductor Corporation Apparatus and method for reducing the power consumption of a microprocessor with multiple levels of caches
US6457101B1 (en) 1999-12-20 2002-09-24 Unisys Corporation System and method for providing the speculative return of cached data within a hierarchical memory system
US6865652B1 (en) 2000-06-02 2005-03-08 Advanced Micro Devices, Inc. FIFO with undo-push capability
US6571318B1 (en) 2001-03-02 2003-05-27 Advanced Micro Devices, Inc. Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
JP4030314B2 (ja) * 2002-01-29 2008-01-09 富士通株式会社 演算処理装置
US7107408B2 (en) 2002-03-22 2006-09-12 Newisys, Inc. Methods and apparatus for speculative probing with early completion and early request
US7103725B2 (en) 2002-03-22 2006-09-05 Newisys, Inc. Methods and apparatus for speculative probing with early completion and delayed request
US7003633B2 (en) 2002-11-04 2006-02-21 Newisys, Inc. Methods and apparatus for managing probe requests
US7099999B2 (en) * 2003-09-30 2006-08-29 International Business Machines Corporation Apparatus and method for pre-fetching data to cached memory using persistent historical page table data
US7487296B1 (en) 2004-02-19 2009-02-03 Sun Microsystems, Inc. Multi-stride prefetcher with a recurring prefetch table
JP4532931B2 (ja) * 2004-02-25 2010-08-25 株式会社日立製作所 プロセッサ、および、プリフェッチ制御方法
US7836259B1 (en) 2004-04-02 2010-11-16 Advanced Micro Devices, Inc. Prefetch unit for use with a cache memory subsystem of a cache memory hierarchy
US7434004B1 (en) 2004-06-17 2008-10-07 Sun Microsystems, Inc. Prefetch prediction
US7350029B2 (en) * 2005-02-10 2008-03-25 International Business Machines Corporation Data stream prefetching in a microprocessor
US7380066B2 (en) 2005-02-10 2008-05-27 International Business Machines Corporation Store stream prefetching in a microprocessor
US7594078B2 (en) * 2006-02-09 2009-09-22 International Business Machines Corporation D-cache miss prediction and scheduling
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses
US20090106498A1 (en) 2007-10-23 2009-04-23 Kevin Michael Lepak Coherent dram prefetcher
US7958317B2 (en) * 2008-08-04 2011-06-07 International Business Machines Corporation Cache directed sequential prefetch

Also Published As

Publication number Publication date
KR101614867B1 (ko) 2016-04-22
WO2011031837A1 (en) 2011-03-17
JP5615927B2 (ja) 2014-10-29
CN102640124A (zh) 2012-08-15
CN102640124B (zh) 2015-11-25
US20110066811A1 (en) 2011-03-17
US8667225B2 (en) 2014-03-04
EP2476060A1 (en) 2012-07-18
JP2013504815A (ja) 2013-02-07
IN2012DN02977A (ko) 2015-07-31
EP2476060B1 (en) 2015-06-17

Similar Documents

Publication Publication Date Title
KR101614867B1 (ko) 데이터 스트림에 대한 저장 인식 프리페치
US9524164B2 (en) Specialized memory disambiguation mechanisms for different memory read access types
US9448936B2 (en) Concurrent store and load operations
US9116817B2 (en) Pointer chasing prediction
US8583894B2 (en) Hybrid prefetch method and apparatus
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US9015422B2 (en) Access map-pattern match based prefetch unit for a processor
KR101493017B1 (ko) 계층적 마이크로코드 저장소를 구비한 복수 코어 프로세서
US7506105B2 (en) Prefetching using hashed program counter
US7493451B2 (en) Prefetch unit
US9213551B2 (en) Return address prediction in multithreaded processors
US8230177B2 (en) Store prefetching via store queue lookahead
US20180349280A1 (en) Snoop filtering for multi-processor-core systems
US20110276760A1 (en) Non-committing store instructions
US20130024647A1 (en) Cache backed vector registers
WO2006118667A2 (en) Prefetching across a page boundary
US20090006768A1 (en) Method and Apparatus for Accessing a Split Cache Directory
US11687343B2 (en) Data processing apparatus and method for providing candidate prediction entries
GB2532545A (en) Processors and methods for cache sparing stores
US8046538B1 (en) Method and mechanism for cache compaction and bandwidth reduction
US8504805B2 (en) Processor operating mode for mitigating dependency conditions between instructions having different operand sizes
EP4020229A1 (en) System, apparatus and method for prefetching physical pages in a processor
US11645207B2 (en) Prefetch disable of memory requests targeting data lacking locality
US11379372B1 (en) Managing prefetch lookahead distance based on memory access latency
CN112395000B (zh) 一种数据预加载方法和指令处理装置

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