KR20240089314A - 이력 기반 선택적 캐시 라인 무효화 요청 - Google Patents

이력 기반 선택적 캐시 라인 무효화 요청 Download PDF

Info

Publication number
KR20240089314A
KR20240089314A KR1020247014849A KR20247014849A KR20240089314A KR 20240089314 A KR20240089314 A KR 20240089314A KR 1020247014849 A KR1020247014849 A KR 1020247014849A KR 20247014849 A KR20247014849 A KR 20247014849A KR 20240089314 A KR20240089314 A KR 20240089314A
Authority
KR
South Korea
Prior art keywords
cache line
processor
cache
access
store instruction
Prior art date
Application number
KR1020247014849A
Other languages
English (en)
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 KR20240089314A publication Critical patent/KR20240089314A/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/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/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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/683Invalidation

Abstract

캐시 작동을 수행하기 위한 기법이 제공된다. 이 기술은 제1 프로세서에 제1 캐시 라인의 배타적 액세스를 제공하는 것이 문제가 있는 것으로 간주된다는 표시를 기록하는 단계; 상기 제1 프로세서에 의한 상기 제1 캐시 라인에 대한 저장 명령어의 추론적 실행을 검출하는 단계; 및 상기 검출하는 단계에 응답하여, 상기 표시에 기초하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 것을 거부하는 단계를 포함한다.

Description

이력 기반 선택적 캐시 라인 무효화 요청
관련 출원에 대한 상호 참조
본 출원은 2021년 10월 29일에 출원된 미국 정규특허출원 제17/514,811호의 이익을 주장하며, 그 내용은 본원에 참고로 포함된다.
최신 마이크로프로세서는 높은 처리량을 위해 광범위한 기능을 구현한다. 이러한 피쳐 중 일부는 고도로 병렬화된 아키텍처를 갖고 추론적으로 실행을 수행하는 것을 포함한다. 이러한 기능에 대한 개선이 지속적으로 이루어지고 있다.
첨부된 도면과 함께 실시예로서 주어진 하기의 설명으로부터 보다 상세한 이해를 얻을 수 있다.
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 장치의 블록도이다.
도 2는 도 1의 프로세서 내에 위치한 명령어 실행 파이프라인의 블록도이다.
도 3은 일례에 따른 컴퓨터 시스템의 블록도이다.
도 4a 내지 도 4d는, 예에 따라 "문제가 있는" 것으로 간주되는 캐시 라인과 관련된 캐시 작동을 도시한다.
도 5는, 예에 따라, 저장 명령어를 추론적으로 실행하는 방법의 흐름도이다.
캐시 작동을 수행하기 위한 기법이 제공된다. 이 기술은 제1 프로세서에 제1 캐시 라인의 배타적 액세스를 제공하는 것이 문제가 있는 것으로 간주된다는 표시를 기록하는 단계; 상기 제1 프로세서에 의한 상기 제1 캐시 라인에 대한 저장 명령어의 추론적 실행을 검출하는 단계; 및 상기 검출하는 단계에 응답하여, 상기 표시에 기초하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 것을 거부하는 단계를 포함한다.
도 1은 본 개시내용의 양태가 구현되는 예시적인 장치(100)의 블록도이다. 상기 장치(100)는 예를 들어, 컴퓨터, 게이밍 장치, 휴대용 장치, 셋탑 박스, 텔레비전, 휴대폰, 또는 태블릿 컴퓨터를 포함한다. 상기 장치(100)는 하나 이상의 프로세서(102), 메모리 계층구조(104), 스토리지 장치(106), 하나 이상의 입력 장치(108), 및 하나 이상의 출력 장치(110)를 포함한다. 상기 장치(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 상기 장치(100)는 도 1에 도시되지 않은 추가 구성요소를 포함할 수 있음이 이해된다.
하나 이상의 프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이 상에 위치한 CPU 및 GPU, 또는 각 프로세서 코어가 CPU 또는 GPU인 하나 이상의 프로세서 코어를 포함한다. 일부 예에서, 하나 이상의 프로세서(102)는 임의의 수의 프로세서를 포함한다. 일부 예에서, 하나 이상의 프로세서(102)는 하나 이상의 프로세서 칩을 포함한다. 일부 예에서, 각각의 프로세서 칩은 하나 이상의 프로세서 코어를 포함한다.
메모리 계층구조(104)의 일부 또는 전부는 하나 이상의 프로세서(102) 중 하나 이상과 동일한 다이에 위치할 수 있거나, 하나 이상의 프로세서(102)와 부분적으로 또는 완전히 별도로 위치할 수 있다. 메모리 계층구조(104)는, 예를 들어, 하나 이상의 캐시, 하나 이상의 휘발성 메모리, 하나 이상의 비휘발성 메모리, 및/또는 다른 메모리를 포함하고, 하나 또는 다양한 유형의 하나 이상의 랜덤 액세스 메모리("RAM")를 포함할 수 있다.
일부 예에서, 메모리 계층구조(104)의 요소는 하나 이상의 프로세서(102)의 요소를 포함하는 계층구조에 배열된다. 이러한 배열의 예가 도 3과 도 4a 내지 도 4d에 제공된다.
스토리지 장치(106)는 고정 또는 착탈식 스토리지, 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광학 디스크 또는 플래시 드라이브를 포함한다. 입력 장치(108)는 키보드, 키패드, 터치 화면, 터치 패드, 검출기, 마이크, 가속도계, 자이로스코프, 생체인식 스캐너, 또는 네트워크 연결(예: 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다. 출력 장치(110)는 디스플레이, 스피커, 프린터, 햅틱 피드백 장치, 하나 이상의 조명, 안테나, 또는 네트워크 연결(예: 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 장치(108)와 통신하고, 프로세서(102)가 입력 장치(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 장치(110)와 통신하고, 프로세서(102)가 출력 장치(110)에 출력을 송신하도록 허용한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적인 구성요소이며, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않는 경우에 장치(100)는 동일한 방식으로 작동할 것이라는 점에 유의한다.
도 2는 도 1의 하나 이상의 프로세서(102) 내에 위치한 명령어 실행 파이프라인(200)의 블록도이다. 다양한 예에서, 도 1의 하나 이상의 프로세서(102)의 임의의 프로세서 코어는 도 2에 도시된 바와 같이 구현된다.
명령어 실행 파이프라인(200)은 메모리로부터 명령어를 검색하고 명령어를 실행하여 데이터를 메모리로 출력하고 레지스터 파일(218) 내의 레지스터와 같은 명령어 실행 파이프라인(200) 내의 요소 상태를 수정한다.
명령어 실행 파이프라인(200)은 명령어 캐시(202)를 통해 시스템 메모리(예: 메모리(104))로부터 명령어를 인출하도록 구성된 명령어 인출 유닛(204), 인출된 명령어를 디코딩하도록 구성된 디코더(208), 명령어를 처리하기 위해 계산을 수행하도록 구성된 기능 유닛(216), 데이터 캐시(220)를 통해 시스템 메모리로부터 데이터를 로딩하거나 시스템 메모리에 데이터를 저장하도록 구성된 로딩 저장 유닛(214) 및 명령어에 대한 작업 데이터를 저장하는 레지스터를 포함하는 레지스터 파일(218)을 포함한다. 재정렬 버퍼(210)는 현재 진행 중인 명령어를 추적하고 진행 중에 있는 동안 비순차적 실행을 허용함에도 불구하고 명령어의 순차적 퇴거를 보장한다. "진행 중" 명령어는 재정렬 버퍼(210)에 의해 수신되었지만 아직 프로세서의 아키텍처 상태에 커밋된 결과(예: 레지스터 파일 등에 기록된 결과)를 갖지 않은 명령어를 지칭한다. 예약 스테이션(212)은 진행 중 명령을 유지하고 명령어 피연산자를 추적한다. 모든 피연산자가 특정 명령어의 실행을 위해 준비되면, 예약 스테이션(212)은 실행을 위해 명령어를 기능 유닛(216) 또는 로딩/저장 유닛(214)으로 전송한다. 완성된 명령어는 재정렬 버퍼(210)에서 퇴거를 위해 표시되고 재정렬 버퍼 큐(210)의 헤드에 있을 때 퇴거된다. 퇴거는 명령어의 결과를 프로세서의 아키텍처 상태에 커밋하는 행위를 지칭한다. 예를 들어, 더하기 명령어에 의해 레지스터에 더하기 결과를 기록하거나, 로딩 명령어에 의해 로딩된 값을 레지스터에 기록하거나, 분기 명령어에 의해 명령어 흐름이 새 위치로 점프하게 하는 것은 모두 명령어의 퇴거의 예이다.
명령어 실행 파이프라인(200)의 다양한 요소는 공통 데이터 버스(222)를 통해 통신한다. 예를 들어, 기능 유닛(216) 및 로딩/저장 유닛(214)은 종속 명령어의 실행을 위해 예약 스테이션(212)에 의해 및 실행을 완료한 진행 중 명령어의 최종 처리 결과로서 재정렬 버퍼(210)에 의해 판독될 수 있는 결과를 공통 데이터 버스(222)에 기록한다. 로딩/저장 유닛(214)은 또한 공통 데이터 버스(222)로부터 데이터를 판독한다. 예를 들어, 로딩/저장 유닛(214)은 공통 데이터 버스(222)로부터 완료된 명령어로부터의 결과를 판독하고, 결과를 명령어 저장을 위해 데이터 캐시(220)를 통해 메모리에 기록한다.
명령어 실행 파이프라인(200)은 일부 명령어를 추론적으로 실행한다. 추론 실행은 명령어 실행 파이프라인(200)이 명령어 실행을 위해 적어도 일부 작동을 수행하지만 명령어가 잘못 실행된 경우 이러한 실행의 효과를 되돌릴 수 있는 능력을 유지한다는 것을 의미한다.
예에서, 명령어 실행 파이프라인(200)은 분기 예측을 수행할 수 있다. 분기 예측은 명령어 인출 유닛(204)이 실행이 흐를 제어 흐름 경로를 예측하고 해당 경로로부터 명령어를 인출하는 작동이다. 예측을 만드는 방법에는 여러 가지가 있으며, 일부는 전역 또는 어드레스별 분기 경로 이력(예: 분기 사용 여부 및/또는 이러한 분기의 대상의 이력)을 유지하고 이러한 이력을 사용하여 다양한 작동을 수행하는 방법을 포함한다. 실행 파이프라인(예: 기능 유닛(216))은 실제로 분기를 실행하여 이러한 분기의 정확한 결과를 결정한다. 예측된 실행 경로로부터의 명령어가 실행하고 있지만 기능 유닛(216)이 실제로 올바른 실행 경로를 결정하기 전에는 이러한 명령어가 실제로 실행되지 않아야 하는 것이 가능하기 때문에 이러한 명령어는 추론적으로 실행되는 것으로 간주된다. 명령어가 추론적으로 실행될 수 있는 많은 다른 이유가 있다.
추론적으로 저장 명령어를 실행하는 것이 가능하다. 추론 실행은 명령어에 대해 다양한 작동을 수행하지만 명령어가 비추론적이 될 때까지 이러한 작동을 커밋하지 않음으로써 발생한다. 일례에서, 저장 명령어를 실행하는 것은 추론적으로 명령어를 로드/저장 유닛(214)에 배치하는 단계, 저장할 데이터를 결정하는 단계, 및 데이터를 저장할 어드레스를 결정하는 단계(어드레스 계산 및 변환을 포함할 수 있음)를 포함한다. 이러한 명령어가 추론적으로 실행되는 시간 동안, 재정렬 버퍼(210)는 저장 명령어를 보유하고 저장 명령어가 비추론적으로 실행할 때까지 명령어가 퇴거- 결과를 커밋-하는 것을 허용하지 않는다. 분기 예측 예에서, 실행 파이프라인(200)이, 저장 명령어가 내부에 있는, 예측된 제어 흐름 경로가 정확한 제어 흐름 경로임을 확인할 때(예: 기능 유닛(216)이 분기 명령어를 실행하고 명령어 인출 유닛(204)에 의해 예측된 제어 흐름 경로가 지금 실행된 분기 명령어에 의해 표시된 실제 제어 흐름 경로인지 결정함으로써) 저장 명령어는 비추론적이 된다.
명령어는 예측된 분기 제어 흐름 경로에서 실행하는 것과 같은 다양한 이유로 또는 다양한 다른 이유로 추론적으로 실행할 수 있다. 저장 명령어의 실행의 일부는 캐시에 저장될 데이터를 기록하는 것을 포함한다. 이를 위해 캐시 제어기는 적절한 캐시 라인에 대한 배타적 액세스 권한을 얻은 다음 지정된 데이터를 해당 캐시 라인에 기록한다. 적절한 캐시 라인에 대한 배타적 액세스 권한을 얻는 것은 다른 캐시(예: 계층적으로 상기 캐시 위에 있지 않은 다른 모든 캐시)가 캐시 라인의 복사본을 무효화하도록 하는 것을 포함한다. 이렇게 하면 그 캐시 라인에 대한 데이터 버전이 다른 캐시 메모리에 존재하는 것을 방지할 수 있다. MESI("수정됨, 배타적, 공유됨, 유효하지 않음") 프로토콜에서, 저장소를 실행하는 명령어 실행 파이프라인(200)은 캐시 라인에 대한 배타적 액세스 권한을 얻고 다른 유닛은 캐시 라인의 복사본을 유효하지 않음으로 설정한다.
명령어 실행 파이프라인(200)은 명령어에 대한 다양한 작동을 조기에 수행하려고 시도하는 비순차적 실행 파이프라인이다. 이러한 작동의 한 가지 예는 위에서 설명된 무효화이다. 구체적으로, 저장 명령어 실행을 위해, 명령어 실행 파이프라인(200)은 저장 명령어 실행 초기에 다른 메모리의 캐시 라인 복사본 무효화를 요청하는 것이 허용되며 종종 실행하여 저장 명령어가 연관된 데이터를 기록할 준비가 되면 명령어 실행 파이프라인(200)은 마치 무효화가 나중에 발생하는 것처럼 오래 기다릴 필요가 없도록 한다. 그러나 저장 명령어의 추론 실행이 발생하는 경우 문제가 발생한다. 구체적으로, 위에서 설명된 바와 같이, 명령어 실행 파이프라인(200)은 추론적으로 실행되는 저장 명령어에 대한 캐시 라인의 무효화를 요청하고, 저장 명령어가 데이터를 기록할 준비가 되기 전에 실질적으로 이러한 요청을 하는 것이 가능하다. 그러나 저장 명령어의 추론 실행이 올바르지 않을 수도 있다. 예를 들어, 저장 명령어가 잘못 예측된 제어 흐름 경로(예: 실제로 분기가 수행되는 분기되지 않은 지점을 지나서)에서 실행 중일 수 있다. 이 경우, 관련된 캐시 라인의 다양한 복사본을 다양한 메모리에서 무효화시키는 행위는 낭비이며, 이 다양한 메모리는 공유됨 또는 배타적 상태에서 그 캐시 라인을 다시 획득해야 할 수 있다.
적어도 이러한 이유로, 본원에서는 "사용 기반 채우기 요청 약화"라고 하는 작동이 제시된다. 이 작동에 따르면, 캐시 라인이 추론적 저장의 결과로서 캐시에 저장되는 경우, 캐시 제어기, 또는 다른 엔티티와 같은 제어기는, 메타데이터 메모리에서, 캐시 라인이 추론적 저장의 결과로서 캐시에 저장된다고 기록한다. 상이한 코어로부터의 프로브로 인해 캐시 라인이 무효 상태 또는 공유 상태로 변환되는 경우, 제어기는 캐시 라인이 "문제가 있다"라고 기록한다. 후속적으로, 코어가 나중에 문제가 있는 것으로 간주되는 캐시 라인에 저장하는 추론적 저장 명령을 실행하는 경우, 코어는, 추론적 저장 명령에 대해, 다른 캐시(예: 병렬 처리 코어용 캐시)에서 캐시 라인이 무효화되지 않게 한다. 저장 명령어의 실행이 비추론적인 경우, 캐시 라인은 나중에 다른 캐시에서 무효화된다. 이제 추가 세부사항이 제공된다.
도 3은 일 예에 따른 컴퓨터 시스템(300)의 블록도이다. 일부 예에서, 컴퓨터 시스템(300)은 도 1의 컴퓨터 시스템(100)이다. 컴퓨터 시스템(300)은 프로세서 세트(302), 하나 이상의 시스템 레벨 메모리(304), 시스템 메모리 제어기(306) 및 기타 시스템 요소(308)를 포함한다.
프로세서 세트(302)는 하나 이상의 프로세서 칩(310)을 포함한다. 각각의 프로세서 칩(310)은 프로세서 칩-레벨 캐시(312) 및 하나 이상의 프로세서 코어(314)를 포함한다. 각각의 프로세서 코어(314)는 연관된 코어-레벨 캐시(316)를 갖는다. 프로세서 코어(314)의 각각은 도 2의 명령어 실행 파이프라인(200)과 같은 하나 이상의 실행 파이프라인을 포함한다.
도 3에 도시된 캐시와 메모리는 병렬로 작동하므로 일관성 프로토콜을 사용하여 데이터 일관성을 보장한다. 이러한 프로토콜의 한 예는 수정됨-배타적-공유됨-유효하지 않음("MESI") 프로토콜이다. 각각의 캐시 라인은 이 네 가지 상태 중 하나에 대한 표시를 포함한다. 수정됨 상태는 특정 캐시에 저장된 캐시 라인의 복사본이 백업 메모리(backing memory)에 저장된 복사본에 대해 수정되었으므로 캐시 라인이 방출(evict)될 때 캐시 라인이 백업 메모리에 기록되어야 함을 나타낸다. 배타적 상태는 캐시 라인이 특정 캐시에 저장되고 동일한 레벨의 계층 구조의 다른 캐시에는 저장되지 않음을 나타낸다. 배타적으로 표시된 캐시 라인은 계층 구조의 더 높은 레벨에 저장될 수 있다 점에 유의한다. 예를 들어, 레벨 0 캐시에 배타적 상태로 저장된 캐시 라인은 레벨 0 캐시 바로 위의 레벨 1 캐시에도 저장될 수 있다. 공유됨 상태는 캐시 라인이 계층 구조의 동일한 레벨에 있는 다수의 캐시에 저장되어 있음을 나타낸다. 유효하지 않음 상태는 그 캐시 라인이 유효하지 않은 것으로 표시된 특정 캐시 내에서 캐시 라인이 유효하지 않음을 나타낸다(다른 캐시가 그 캐시 라인의 유효한 복사본을 저장할 수 있음에도 불구하고).
각각의 프로세서 코어(314)는 연관된 코어-레벨 캐시(316)를 갖는다. 프로세서 코어(314)가 로드 작동 또는 저장 작동과 같은 메모리 작동을 실행할 때, 프로세서 코어(314)는 메모리 작동을 위한 데이터를 저장하는 캐시 라인이 프로세서 코어(314)와 연관된 코어-레벨 캐시(316) 내에 위치되는지 여부를 결정한다. 이러한 캐시 라인이 코어 레벨 캐시(316) 내에 위치되지 않는 경우, 코어 레벨 캐시(316)는 프로세서 칩-레벨 캐시(312)와 같은 더 높은 레벨 캐시로부터 해당 캐시 라인을 코어-레벨 캐시(316)로 인출하려고 시도한다. 프로세서 칩-레벨 캐시(312)는 더 높은 레벨의 캐시 메모리 역할과 프로세서 칩-레벨 캐시(312) 및 동일한 프로세서 칩(310) 내의 모든 코어-레벨 캐시(316)에 대한 일관성 프로토콜을 관리하는 제어기 역할을 한다. 따라서, 프로세서 칩-레벨 캐시(312)는 요청 프로세서 코어(314)에 캐시 라인을 제공할 목적으로 요청 캐시 라인이 내부에 저장되어 있는지 여부를 결정하기 위해 자체적으로 검사한다. 프로세서 칩-레벨 캐시(312)는 자체 내용으로부터 또는 계층 구조에서 상위에 있는 메모리로부터 인출된 캐시 라인을 요청 코어(314)에 제공한다.
프로세서 칩-레벨 캐시(312)는 코어-레벨 캐시(316)에 대한 일관성 프로토콜을 관리한다. 일반적으로, 프로세서 칩-레벨 캐시(312)는 코어-레벨 캐시(316) 내의 캐시 라인의 프로토콜 상태를 관리하여 임의의 캐시 라인이 특정 코어-레벨 캐시(316)에서 배타적 상태에 있는 경우, 다른 코어 레벨 캐시(316)는 유효하지 않음 상태를 제외하고는 해당 캐시 라인을 갖지 않도록 한다. 다수의 코어-레벨 캐시(316)는 공유됨 상태의 캐시 라인을 갖는 것이 허용된다.
프로토콜은 레벨별로 작동한다. 보다 구체적으로 말하면, 메모리 계층 구조의 각각의 레벨에서, 해당 레벨 내의 각각의 요소는 프로토콜 상태의 일부 서브세트에 있는 캐시 라인을 갖는 것이 허용된다. 예에서, 프로세서 세트(302)의 레벨에서, 각각의 칩(310)(따라서, 각각의 프로세서 칩-레벨 캐시(312))은 공유됨 상태 또는 배타적 상태와 같은 상태 중 하나의 캐시 라인을 갖는 것이 허용된다. 계층 구조의 특정 레벨에 대한 제어기는 그 레벨에서 프로토콜을 관리한다. 따라서, 프로세서 세트 메모리(320)는 프로세서 칩-레벨 캐시(312)의 상태를 관리한다. 임의의 특정 프로세서 칩(310)에 대한 프로세서 칩-레벨 캐시(312)는 코어-레벨 캐시(316)의 상태를 관리하고, 시스템 메모리 제어기(306)는 프로세서 세트(302) 및 특정 캐시 라인을 저장할 수 있는 다른 시스템 요소(308)에 대한 상태를 관리한다.
프로세서 코어(314)가 저장 명령어를 실행할 때, 프로세서 코어(314)는 기록될 데이터를 포함하는 캐시 라인이 배타적 상태로 연관된 코어-레벨 캐시(316)에 배치되도록 요청한다. 캐시 라인이 이미 캐시에 있고 배타적 상태에 있지 않은 경우, 상기 요청은 해당 캐시 라인을 배타적 상태로 변환하라는 요청이다. 캐시 라인이 캐시 내에 있지 않은 경우, 상기 요청은 캐시 라인을 캐시에 로딩하라는 요청이고, 해당 캐시 라인이 캐시에서 배타적 상태로 두라는 요청이다. 이 요청을 만족시키는 것의 일부는 캐시 라인의 복사본을 저장하는 다른 모든 캐시(코어 레벨 캐시(316) 보다 "계층적으로 위에" 있는 캐시 제외)가 해당 캐시 라인의 복사본을 무효화하도록 요청하는 것을 포함한다. 제2 캐시의 미스가 제1 캐시 또는 제1 캐시보다 계층적으로 위에 있는 캐시로부터 서비스되는 경우, 제1 캐시는 제2 캐시보다 "계층적으로 위에" 있다.
저장 명령어가 추론적으로 실행되고 있는 경우, 제어기(예: 코어 레벨 캐시(316)의 캐시 제어기)는 메타데이터 메모리(예: 메타데이터 메모리(317))를 체크하여, 저장되도록 요청된 캐시 라인이 "문제 있는 것"으로 표시되는지 여부를 결정한다. 캐시 라인이 "문제 있는 것"으로 표시되지 않은 경우, 제어기는 계층 구조의 나머지 부분에 캐시 라인을 무효화하라는 요청을 발행한다. "계층구조의 나머지"는, 예를 들어, 각각의 코어 레벨 캐시(316), 각각의 프로세서 칩-레벨 캐시(312), 시스템 레벨 메모리(304), 및 다른 시스템 요소(308)를 포함하는데, 상기 요청을 하는 코어 레벨 캐시(316)보다 "계층적으로 위에" 있는 메모리와 캐시가 해당 복사본을 반드시 무효화하는 것은 아니지만, 해당 메모리와 캐시는 코어 레벨 캐시(316)에 대한 백업 메모리 역할을 하기 때문이다. 상기 요청을 수신하는 요소는, 상기 요청을 수신하는 것에 응답하여, 캐시 라인의 해당 복사본을 무효화한다. 캐시 라인이 "문제가 있는 것"으로 표시되면, 제어기는 저장 명령어가 추론적으로 실행되는 동안 이러한 무효화 요청을 발행하지 않고, 저장 명령어가 비추론적으로 실행되는 것에 응답하여 이러한 무효화 요청을 발행한다. "문제가 있는" 캐시 라인을 대상으로 하는 저장 명령어가 비추론적으로 실행되는 경우(예: 저장 명령어의 실행이 정확하지 않기 때문에), 제어기는 저장 명령어에 대한 이러한 무효화 요청을 발행하지 않는다.
캐시 제어기는, 추론적으로 실행되지 않는 저장 명령어에 대한 상기 무효화를 수행할지 여부를 결정하기 위해 메타데이터 메모리(317)를 사용하지 않는다. 제어기는, 메타데이터 메모리(317)의 내용에 상관없이, 이러한 저장 명령어에 대한 캐시 라인을 무효화하기 위해 계층구조의 나머지에 요청을 발행한다.
캐시 라인이 캐시(예: 코어 레벨 캐시(316)) 내에 배치될 때, 또는 이미 캐시에 있는 캐시 라인의 일관성 상태가 배타적인 것으로 변경될 때, 캐시 제어기는 이러한 동작이 추론적으로 실행되는 저장 명령어의 결과로서 발생하는지 여부를 결정한다. 이 동작이 추론적으로 실행되는 저장 명령어의 결과로서 발생하는 경우, 캐시 제어기는 캐시 라인의 표시를 포함하는 정보("엔트리")를 메타데이터 메모리(317)에 배치한다. 캐시 제어기는 캐시 라인을 추적하여 캐시 라인이 기록되기 전에 캐시 라인이 배타적인 상태로 멈추는지 여부(예: MESI 프로토콜에서, 캐시 라인의 일관성 상태가 "수정"되기 전에 캐시 라인이 "무효" 또는 "공유"가 되는지 여부)를 결정한다. 비추론적으로 실행되는 저장 명령어의 결과로서 캐시 라인이 캐시에 배치되는 경우, 캐시 제어기는 캐시 라인에 대한 메타데이터 메모리(317)를 업데이트하지 않는다(캐시 라인에 대한 어떠한 엔트리도 존재하지 않는 경우, 어떠한 엔트리도 생성되지 않거나, 엔트리가 캐시 라인에 대해 존재하는 경우, 엔트리가 업데이트되지 않는다).
캐시 라인이 캐시 내의 배타적 상태에 있고 메타데이터 메모리(317)에 의해 추적되는 경우, 캐시 라인이 무효화되거나 또는 공유 상태로 변환되는 경우, 캐시 제어기는 캐시 라인을 "문제 있는 것"으로 표시한다 캐시 라인이 무효화되거나 공유 상태로 변환되기 전에 수정된 상태로 변환되는 경우, 캐시 제어기는 캐시 라인을 문제가 없는 것으로 표시한다. 캐시 라인이 무효화되거나 일부 다른 이유로 캐시로부터 축출 또는 제거된 후에도 캐시 제어기는 캐시 라인에 대한 메타데이터 정보를 유지한다. 본원의 다른 곳에 기술된 바와 같이, 저장 명령어가 추론적으로 실행되는 경우, 캐시 제어기는 "문제 있는 것" 또는 "문제 없는 것" 표시를 사용하여 다른 캐시에 무효화 요청을 발행할지 여부를 결정한다.
도 3과 관련하여 전술된 작동은 캐시 내에 캐시 라인의 배치를 수반한다. 일부 예에서, 이 캐시는 도 3의 코어 레벨 캐시(316)이다. 다른 예에서, 임의의 기술적으로 실현가능한 캐시는 캐시 라인을 저장하는 캐시이다.
다양한 구현예에서, "저장 명령어"는 메모리에 기록하고 따라서 캐시 라인에 대한 배타적 액세스를 필요로 하는 임의의 명령어이다.
도 4a 내지 도 4d는 "문제가 있는" 것으로 간주되는 캐시 라인과 관련된 캐시 작동을 도시한다. 다양한 예에서, 메타데이터 메모리(404)는 도 3에 도시된 메타데이터 메모리(317)이다. 다양한 예에서, 프로세서 코어(314)는 도 3에 도시된 프로세서 코어(314)이다. 다양한 예에서, 캐시(406)는 도 3의 코어 레벨 캐시(316)이다. 다양한 예에서, 제어기(402)는 코어 레벨 캐시(316)에 대한 캐시 제어기이다.
도 4a는 일례에 따라 메타데이터 엔트리를 메타데이터 메모리(404)에 배치하기 위한 작동을 도시한다. 이러한 작동에 따르면, 프로세서 코어(314)는 저장 명령어(403)를 추론적으로 실행한다. 이러한 실행 과정에서, 프로세서 코어(314)는, 캐시 제어기(402)로부터, 배타적 모드에서 캐시 라인에 대한 액세스를 요청한다. 캐시 제어기(402)는, 캐시 라인이 이미 캐시(406)에 없는 경우, 배타적 모드로 캐시(406)에 캐시 라인을 배치하거나, 캐시 라인이 이미 캐시(406)에 있는 경우, 캐시 라인의 일관성 상태를 변경한다. 추가적으로, 메타데이터 메모리(404)는 추론적 저장의 결과로서 캐시 라인을 가져온 것을 기록한다.
위에서, 저장 명령어의 추론적 실행이 때때로 캐시 라인이 배타적 상태에서 캐시(406)에 있는 것을 초래한다는 것이 언급된다. 명령어는 종종 다수의 작동을 수반하는 것, 저장 명령어를 실행하기 위해, 저장 명령어에 의해 기록될 데이터를 포함하는 캐시 라인을 캐시(406)로 가져오는 것, 및 저장 명령어로 인해 때때로 필요한 경우 이러한 캐시 라인이 배타적 상태로 변환되는 것을 이해해야 한다. 또한, 심지어 추론적으로 실행되는 저장 명령어로 인해 이러한 캐시 라인이 배타적 상태로 캐시(406)에 있게 된다는 것을 이해해야 한다. 따라서, 도 4a는, 추론적으로 실행되는 저장 명령어의 결과로서, 배타적 상태에서 캐시(406)에 캐시 라인의 배치로 인해 메타데이터 메모리(404)는 추론적으로 실행되는 저장 명령어의 결과로서 캐시 라인을 가져왔음을 나타내는 것을 도시한다.
도 4b는 캐시 라인에 대한 작동에 기초하여 메타데이터 메모리(404)를 업데이트하기 위한 작동을 도시한다. 구체적으로, 캐시 제어기(402)에 로컬인 프로세서 이외의 프로세서 코어(314)에 의해 캐시 라인에 액세스하라는 요청을 캐시 제어기(402)가 검출한 경우, 캐시 제어기(402)는 캐시 라인이 "문제가 있는" 것으로 간주된다는 것을 나타내기 위해 메타데이터 메모리(404)를 업데이트한다. 상기 요청은 캐시 제어기(402)에 로컬인 프로세서 코어 이외의 프로세서 코어에 의한 것임에 유의한다. 다시 말하면, 저장 명령어로 인해 메타데이터 메모리(317)에 엔트리가 생성된 프로세서 코어(314)("제1 프로세서 코어(314)")는 캐시 라인에 대한 액세스를 요청하는 프로세서 코어(314)("제2 프로세서 코어(314)")가 아니다. 해당 프로세서인 제2 프로세서 코어(314)는 캐시 라인이 제1 프로세서 코어에 의해 수정되기 전에 캐시 라인에 대한 액세스를 요청하고 있다. 따라서, 제1 프로세서 코어(314)에 의해 캐시(316) 내로 캐시 라인을 인출하는 것은 너무 공격적인 것으로 간주될 수 있다. 더 구체적으로, 캐시 라인은 저장 명령어의 결과로서 배타적으로 만들었다. 저장 명령어의 "목적"은 해당 캐시 라인에 기록하는 것이며, 이는 캐시 라인이 배타적이게 되는 이유이다. 그러나, 캐시 라인이 수정되기 전에 캐시 라인이 비배타적인 것으로 만들어지는 경우, 이는 저장 명령어가 가져온 캐시 라인에 기록할 수 없었고 해당 캐시 라인을 배타적 상태로 원래의 전환이 너무 공격적이었다는 것을 의미한다.
위에서 제2 프로세서가 캐시 라인에 대한 액세스를 요청하는 것으로 언급되었다. 일부 예에서, 상기 요청은 캐시 라인을 공유 상태로부터 무효 상태 또는 공유 상태로 변환하라는 요청을 포함한다. 일부 예에서, 무효 상태는 다른 프로세서가 (예: 기록하기 위해) 배타적 상태에서 캐시 라인을 요청하는 경우에 발생하고, 공유 상태는 다른 프로세서가 (예: 판독하기 위해) 공유 상태에서 캐시 라인을 요청하는 경우에 발생한다.
도 4c는 저장 명령어가 추론적으로 실행되고 "문제 있는" 것으로 식별되는 캐시 라인에 기록하는 작동을 도시한다. 본원의 다른 곳에 기술된 바와 같이, 프로세서 코어(314)가, 저장 명령어를 추론적으로 실행하는 과정에서, 캐시 라인이 배타적 상태를 갖게 하는 것이 가능하며, 여기서 캐시 라인은 저장 명령어에 의해 기록될 것이다. 이러한 동작은, 저장 명령어의 실행이 올바른 것으로 판단되고 따라서 저장 명령어가 비추론적으로 실행되는 경우에 일부 성능 이점을 제공하는데, 프로세서 코어(314)가 저장 명령어가 비추론적일 때까지 대기한 경우보다 더 일찍 캐시 라인이 배타적 상태가 되었기 때문이다. 그러나, 캐시 라인이 문제 있는 것으로 간주되는 경우, 프로세서 코어(314)는 다른 캐시가 해당 캐시 라인 복사본을 무효화하는 것을 요청함으로써 캐시 라인을 배타적 상태로 가져오라는 요청을 발행하지 않는다. 이는 캐시 라인이 문제 있다는 표시가, 과거에, 캐시 라인이 추론적으로 실행되는 저장 명령어로 인해 캐시(406)에서 배타적 상태로 변환되었지만, 저장 명령어에 의해 기록되기 전에 다른 상태로 변환되었다는 표시이기 때문이다.
도 4d는 저장 명령어가 추론적으로 실행되고 "문제 있는" 것으로 식별되지 않은 캐시 라인에 기록하는 작동을 도시한다. 문제 있는 것으로 식별되지 않는다는 것은 메타데이터 메모리(404)가 캐시 라인에 대한 엔트리를 포함하지 않거나 메타데이터 메모리(404)가 캐시 라인에 대한 엔트리를 포함하고 해당 엔트리가 캐시 라인이 문제 없음을 나타내는 것을 의미한다. 캐시 라인이 문제 있는 것으로 식별되지 않는 경우, 캐시 제어기(402)는 다른 캐시(408)에게 캐시 라인을 무효화하도록 요청하고, 캐시 제어기(402)는 캐시 라인을 배타적 상태의 캐시(406)로 가져오거나 캐시 라인이 이미 캐시(406)에 있는 경우 캐시 라인을 배타적 상태로 변환한다.
도 4c 및 도 4d에 도시된 "다른 캐시(408)"는 저장 명령어를 실행하는 프로세서에 로컬인 캐시(406) 이외의 캐시, 및 캐시(406)보다 계층적으로 위에 있는 캐시 이외의 캐시를 포함한다. 캐시 제어기(402)는 기록될 캐시 라인에 대한 배타적 액세스를 획득하기 위해 해당 다른 캐시(408)에서 캐시 라인 복사본의 무효화를 요청한다. 따라서, 다른 캐시(408)는 도 4a 내지 도 4d에 도시된 프로세서 코어(314)와 병렬로 실행되는 프로세서를 위한 캐시이다.
도 5는, 예에 따라, 저장 명령어를 추론적으로 실행하는 방법(500)의 흐름도이다. 도 1 내지 도 4d의 시스템과 관련하여 설명되었지만, 당업자는 임의의 기술적으로 실현가능한 순서로 방법(500)의 단계를 수행하도록 구성된 임의의 시스템이 본 개시의 범위 내에 속한다는 것을 이해할 것이다.
502 단계에서, 캐시 제어기(402)는 제1 프로세서에 의한 제1 저장 명령어의 추론적 실행의 결과로서 배타적 상태로 캐시 라인을 획득한다. 보다 구체적으로, (프로세서 코어(314)와 같은) 제1 프로세서는 저장 명령어를 추론적으로 실행하고, 이러한 실행 동안, 저장 명령어의 타깃인 캐시 라인을 획득한다. 제1 프로세서는 해당 캐시 라인을 코어 레벨 캐시(316)와 같은 로컬 캐시에 배치하고, 추론적 저장 명령어의 결과로서 캐시 라인을 가져왔다는 표시를 기록한다.
504 단계에서, 제2 프로세서에 의한 캐시 라인에 대한 액세스에 응답하여, 제1 프로세서에 의해 캐시 라인이 기록되기 전에, 제1 프로세서는 캐시 라인을 타깃으로 하는 저장 명령어의 추론적 실행이, 제2 프로세서와 같은, 제1 프로세서 이외의 프로세서와 연관된 캐시에서 캐시 라인의 무효화를 초래해서는 안 된다는 표시를 기록한다. 다시 말하면, 제1 프로세서가 추론적으로 캐시 라인에 저장 명령어를 실행할 때, 제1 프로세서가 제1 프로세서와 연관된 것 이외의 캐시에 캐시 라인의 무효화를 요청하지 않아야 한다는 표시를 제1 프로세서(314)는 기록하는데, 캐시 라인이 "문제 있는" 것으로 간주되기 때문이다. "다른 캐시"는 제1 프로세서에 로컬인 캐시에 병렬인 캐시 및 해당 캐시보다 계층적으로 위에 있는 해당 임의의 캐시를 포함한다. 일부 예에서, 상기 표시는 메타데이터 메모리에 기록된다.
506 단계에서, 캐시 라인을 타깃으로 하는 제2 저장 명령어의 추론적 실행을 위해, 제1 프로세서는 504 단계에서 기록된 표시에 응답하여 "다른 캐시"에서의 캐시 라인의 무효화를 요청하지 않는다. 508 단계에서, 제1 프로세서에 의한, 상기 표시(캐시 라인이 "문제 있다"는 표시)를 갖지 않는 캐시 라인을 타깃으로 하는 제3 저장 명령어의 추론적 실행을 위해, 제1 프로세서는 다른 캐시에서의 캐시 라인의 무효화를 요청한다.
본원의 개시내용에 기초하여 많은 변형예가 가능하다는 것이 이해되어야 한다. 특징 및 요소가 특정 조합으로 위에서 설명되어 있지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로 또는 다른 특징 및 요소와 함께 또는 이것 없이 다양한 조합으로 사용될 수 있다.
도면에 도시된 다양한 요소는 하드웨어(예: 회로), 프로세서 상에서 실행 중인 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로서 구현될 수 있다. 다양한 예에서, 각각의 블록(예: 프로세서-메모리 요소(410), 프로세서 칩(310), 시스템 요소(308), 시스템 레벨 메모리(304), 시스템 메모리 제어기(306), 프로세서 칩 레벨 캐시(312), 프로세서 세트 메모리(320), 프로세서 코어(314), 코어 레벨 캐시(316), 및 메타데이터 메모리(317)), 및 명령어 실행 파이프라인(200)과 컴퓨터 시스템(100)의 도시된 유닛은 하드웨어(예: 하드웨어 프로세서 및/또는 회로), 소프트웨어, 또는 이들의 조합으로서 구현 가능하다. 제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는, 예를 들어, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 주문형 반도체(ASIC), 필드 프로그래머블 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 머신을 포함한다. 이러한 프로세서는 처리된 하드웨어 기술 언어(HDL) 명령어의 결과 및 네트리스트(컴퓨터 판독가능 매체 상에 저장될 수 있는 이러한 명령어)을 포함하는 다른 중간 데이터를 사용하여 제조 공정을 구성함으로써 제조될 수 있다. 이러한 처리의 결과는 실시예의 양태를 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 그 다음에 사용되는 마스크 작업일 수 있다.
본원에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 자기 광학 매체, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 방법으로서,
    제1 프로세서에 제1 캐시 라인의 배타적 액세스를 제공하는 것이 문제가 있는 것으로 간주된다는 표시를 기록하는 단계;
    상기 제1 프로세서에 의한 상기 제1 캐시 라인에 대한 저장 명령어의 추론적 실행을 검출하는 단계; 및
    상기 검출하는 단계에 응답하여, 상기 표시에 기초하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 것을 거부하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 추가로:
    상기 저장 명령어 이전의 제2 저장 명령어의 추론적 실행에 응답하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 단계; 및
    상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 요청을 검출하는 단계를 포함하되,
    상기 표시를 기록하는 단계는 상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 상기 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 상기 요청을 검출하는 것에 응답하여 발생하는, 방법.
  3. 제2항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 단계는 상기 제1 캐시 라인을 배타적 상태로 상기 제1 프로세서와 연관된 제1 캐시에 저장하는 단계를 포함하는, 방법.
  4. 제2항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 단계는 상기 제1 프로세서와 연관된 제1 캐시에서의 상기 제1 캐시 라인에 대한 일관성 상태를 배타적으로 변경하는 단계를 포함하는, 방법.
  5. 제2항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 단계는 상기 제2 프로세서와 연관된 제2 캐시에서의 상기 제1 캐시 라인의 복사본을 무효화하는 단계를 포함하는, 방법.
  6. 제2항에 있어서, 상기 제2 프로세서에 의한 액세스는 상기 제1 캐시 라인에 대한 판독 또는 기록이거나 상기 제1 캐시 라인을 공유 상태 또는 무효 상태로 변경하라는 요청인, 방법.
  7. 제1항에 있어서, 추가로:
    상기 저장 명령어가 비추론적으로 실행되고 있는 것에 응답하여, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 단계를 포함하는, 방법.
  8. 제7항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 단계는, 제2 프로세서와 연관된 제2 캐시에서의 상기 제1 캐시 라인의 복사본이 무효화되게 하는 단계를 포함하는, 방법.
  9. 제2항에 있어서, 상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 상기 제1 캐시 라인에 상기 제2 프로세서에 의한 액세스는, 상기 제1 캐시 라인의 일관성 상태가 수정되기 전에, 상기 제1 캐시 라인의 일관성 상태가 무효이거나 공유되는 경우에 발생하는, 방법.
  10. 시스템으로서,
    제1 캐시; 및
    캐시 제어기를 포함하고, 상기 캐시 제어기는:
    제1 프로세서에 제1 캐시 라인의 배타적 액세스를 제공하는 것이 문제가 있는 것으로 간주된다는 표시를 기록하고;
    상기 제1 프로세서에 의한 상기 제1 캐시 라인에 대한 저장 명령어의 추론적 실행을 검출하고;
    상기 검출하는 것에 응답하여, 상기 표시에 기초하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 것을 거부하도록 구성되는, 시스템.
  11. 제10항에 있어서, 상기 캐시 제어기는 추가로:
    상기 저장 명령어 이전의 제2 저장 명령어의 추론적 실행에 응답하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하고;
    상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 요청을 검출하도록 구성되되,
    상기 표시를 기록하는 것은 상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 상기 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 상기 요청을 검출하는 것에 응답하여 발생하는, 시스템.
  12. 제11항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 것은 상기 제1 캐시 라인을 배타적 상태로 상기 제1 캐시에 저장하는 것을 포함하는, 시스템.
  13. 제11항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 것은 상기 제1 캐시에서의 상기 제1 캐시 라인에 대한 일관성 상태를 배타적으로 변경하는 것을 포함하는, 시스템.
  14. 제11항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 것은 상기 제2 프로세서와 연관된 제2 캐시에서의 상기 제1 캐시 라인의 복사본을 무효화하는 것을 포함하는, 시스템.
  15. 제11항에 있어서, 상기 제2 프로세서에 의한 액세스는 상기 제1 캐시 라인에 대한 판독 또는 기록이거나 상기 제1 캐시 라인을 공유 상태 또는 무효 상태로 변경하라는 요청인, 시스템.
  16. 제10항에 있어서, 상기 캐시 제어기는 추가로:
    상기 저장 명령어가 비추론적으로 실행되고 있는 것에 응답하여, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하도록 구성되는, 시스템.
  17. 제16항에 있어서, 상기 제1 캐시 라인의 배타적 액세스를 상기 제1 프로세서에 제공하는 것은, 제2 프로세서와 연관된 제2 캐시에서의 상기 제1 캐시 라인의 복사본이 무효화되게 하는 것을 포함하는, 시스템.
  18. 제11항에 있어서, 상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 상기 제1 캐시 라인에 상기 제2 프로세서에 의한 액세스는, 상기 제1 캐시 라인의 일관성 상태가 수정되기 전에, 상기 제1 캐시 라인의 일관성 상태가 무효이거나 공유되는 경우에 발생하는, 시스템.
  19. 시스템으로서,
    제1 프로세서와 연관된 제1 캐시;
    제2 프로세서와 연관된 제2 캐시; 및
    캐시 제어기를 포함하고, 상기 캐시 제어기는:
    제1 프로세서에 제1 캐시 라인의 배타적 액세스를 제공하는 것이 문제가 있는 것으로 간주된다는 표시를 기록하고;
    상기 제1 프로세서에 의한 상기 제1 캐시 라인에 대한 저장 명령어의 추론적 실행을 검출하고;
    상기 검출하는 것에 응답하여, 상기 표시에 기초하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하는 것을 거부하도록 구성되는, 시스템.
  20. 제19항에 있어서, 상기 캐시 제어기는 추가로:
    상기 저장 명령어 이전의 제2 저장 명령어의 추론적 실행에 응답하여 상기 제1 프로세서에 상기 제1 캐시 라인의 배타적 액세스를 제공하고;
    상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 요청을 검출하도록 구성되되,
    상기 표시를 기록하는 것은 상기 제1 프로세서가 상기 제1 캐시 라인에 기록하기 전에 상기 제2 프로세서에 의해 상기 제1 캐시 라인에 액세스하라는 상기 요청을 검출하는 것에 응답하여 발생하는, 시스템.
KR1020247014849A 2021-10-29 2022-10-17 이력 기반 선택적 캐시 라인 무효화 요청 KR20240089314A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US17/514,811 2021-10-29

Publications (1)

Publication Number Publication Date
KR20240089314A true KR20240089314A (ko) 2024-06-20

Family

ID=

Similar Documents

Publication Publication Date Title
US11113056B2 (en) Techniques for performing store-to-load forwarding
US8601240B2 (en) Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
JP7403541B2 (ja) メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
US11620133B2 (en) Reduction of data cache access in a processing system
US10866892B2 (en) Establishing dependency in a resource retry queue
US11822479B2 (en) History-based selective cache line invalidation requests
KR20240089314A (ko) 이력 기반 선택적 캐시 라인 무효화 요청
US11947456B2 (en) Weak cache line invalidation requests for speculatively executing instructions
US11836085B2 (en) Cache line coherence state upgrade
US20230099256A1 (en) Storing an indication of a specific data pattern in spare directory entries
US11630772B1 (en) Suppressing cache line modification
KR20240089035A (ko) 캐시 라인 일관성 상태 업그레이드
KR20240089036A (ko) 캐시 라인 일관성 상태 다운그레이드
JP2019530120A (ja) ロックアドレス競合予測器