KR20240067955A - 추측적으로 명령어를 실행하기 위한 약한 캐시 라인 무효화 요청 - Google Patents
추측적으로 명령어를 실행하기 위한 약한 캐시 라인 무효화 요청 Download PDFInfo
- Publication number
- KR20240067955A KR20240067955A KR1020247013905A KR20247013905A KR20240067955A KR 20240067955 A KR20240067955 A KR 20240067955A KR 1020247013905 A KR1020247013905 A KR 1020247013905A KR 20247013905 A KR20247013905 A KR 20247013905A KR 20240067955 A KR20240067955 A KR 20240067955A
- Authority
- KR
- South Korea
- Prior art keywords
- level
- memory hierarchy
- invalidate
- memory
- store instruction
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 165
- 238000000034 method Methods 0.000 claims abstract description 24
- 238000012545 processing Methods 0.000 claims description 29
- 230000004044 response Effects 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 13
- 238000003860 storage Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0808—Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Abstract
캐시 라인을 무효화하는 기술이 제공된다. 이 기술은 추측적으로 실행되는 저장 명령어에 대한 약한 배타적 판독 요청을 메모리 계층 구조의 제1 레벨에 발행하는 단계; 하나 이상의 메모리의 저장 명령어와 연관된 하나 이상의 캐시 라인을 무효화할지 여부를 결정하는 단계; 및 메모리 계층 구조의 추가 레벨에 약한 무효화 요청을 발행하는 단계를 포함한다.
Description
관련 출원에 대한 상호 참조
본 출원은 2021년 9월 30일에 출원된 미국 출원 번호 제17/490,910호의 우선권을 주장하며, 이는 본 명세서에 완전히 기술된 것과 같이 참조로 포함된다.
현대의 마이크로프로세서는 높은 처리량(throughput)을 위해 다양한 피쳐를 구현한다. 이러한 피쳐 중 일부는 고도로 병렬화된 아키텍처(highly parallel architecture)를 갖고 추측적으로 실행을 수행하는 것을 포함한다. 이러한 피쳐는 지속적으로 개선되고 있다.
첨부 도면과 함께 예로서 주어진 다음의 설명으로부터 보다 상세한 이해가 이루어질 수 있으며, 여기서:
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스의 블록도이다;
도 2는 도 1의 프로세서 내에 위치된 명령어 실행 파이프라인(instruction execution pipeline)의 블록도이다;
도 3은 예에 따른 컴퓨터 시스템의 블록도이다;
도 4는 다른 예에 따른 약한 배타적 판독을 실행할 수 있는 컴퓨터 시스템의 블록도이다;
도 5는 예에 따른 약한 배타적 판독 동작에 대한 동작을 예시하는 도면이다; 및
도 6은 예에 따른 약한 배타적 판독 동작에 대한 방법의 흐름도이다.
도 1은 하나 이상의 개시된 실시예가 구현될 수 있는 예시적인 디바이스의 블록도이다;
도 2는 도 1의 프로세서 내에 위치된 명령어 실행 파이프라인(instruction execution pipeline)의 블록도이다;
도 3은 예에 따른 컴퓨터 시스템의 블록도이다;
도 4는 다른 예에 따른 약한 배타적 판독을 실행할 수 있는 컴퓨터 시스템의 블록도이다;
도 5는 예에 따른 약한 배타적 판독 동작에 대한 동작을 예시하는 도면이다; 및
도 6은 예에 따른 약한 배타적 판독 동작에 대한 방법의 흐름도이다.
캐시 라인을 무효화하는 기술이 제공된다. 이 기술은 저장 명령어를 추측적으로 실행하기 위한 약한 배타적 판독 요청을 메모리 계층 구조의 제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과 4에 제공된다.
저장 디바이스(106)는 고정형 또는 착탈형 저장소, 예를 들어 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광학 디스크 또는 플래시 드라이브를 포함한다. 입력 디바이스(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크, 가속도계, 자이로스코프(gyroscope), 생체인식(biometric) 스캐너 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 전송 및/또는 수신을 위한 무선 LAN 카드)을 포함한다. 출력 디바이스(110)는 디스플레이, 스피커, 프린터, 햅틱(haptic) 피드백 디바이스, 하나 이상의 조명, 안테나 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호의 전송 및/또는 수신을 위한 무선 LAN 카드)을 포함한다.
입력 드라이버(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)을 포함한다. 재정렬 버퍼(reorder buffer)(210)는 현재 진행 중인 명령어를 추적하고 진행 중인 동안 순서가 잘못된 실행을 허용함에도 불구하고 명령어의 순서대로 폐기(retirement)를 보장한다. "진행 중(in-flight)" 명령어는 재정렬 버퍼(210)에 의해 수신되었지만 아직 프로세서의 아키텍처 상태에 커밋된 결과(예를 들어, 레지스터 파일 등에 기록된 결과)를 갖지 않은 명령어를 의미한다. 예약 스테이션(reservation station)(212)은 진행 중 명령어와 추적 명령어 피연산자(operand)를 유지한다. 모든 피연산자가 특정 명령어를 실행할 준비가 되면, 예약 스테이션(212)은 실행을 위해 기능 유닛(216) 또는 로드/저장 유닛(214)에 명령어를 발송한다. 완료된 명령어는 재정렬 버퍼(210)에서 폐기되도록 표시되고 재정렬 버퍼 큐(210)의 헤드에 있을 때 폐기된다. 폐기는 명령어의 결과를 프로세서의 아키텍처 상태에 커밋하는 행동을 지칭한다. 예를 들어, 추가 명령어에 의해 레지스터에 추가 결과 기록, 로드 명령에 의해 레지스터에 로드된 값 기록 또는 분기 명령어에 의해 명령어 흐름이 새로운 위치로 점프하게 하는 것은 모두 명령어의 폐기의 예이다.
명령어 실행 파이프라인(200)의 다양한 요소는 공통 데이터 버스(222)를 통해 통신한다. 예를 들어, 기능 유닛(216) 및 로드/저장 유닛(214)은 종속 명령어의 실행을 위해 예약 스테이션(212)에 의해 판독될 수 있고 실행이 완료된 진행 중 명령어의 최종 프로세싱 결과로서 재정렬 버퍼(210)에 의해 판독될 수 있는 공통 데이터 버스(222)에 결과를 기록한다. 로드/저장 유닛(214)은 또한 공통 데이터 버스(222)로부터 데이터를 판독한다. 예를 들어, 로드/저장 유닛(214)은 공통 데이터 버스(222)로부터 완료된 명령어로부터 결과를 판독하고 저장 명령어를 위해 데이터 캐시(220)를 통해 메모리에 결과를 기록한다.
명령어 실행 파이프라인(200)은 일부 명령어를 추측적으로 실행한다. 추측 실행(speculative execution)은 명령어 실행 파이프라인(200)이 명령어 실행을 위해 적어도 일부 동작을 수행하지만 명령어가 잘못 실행된 경우 이러한 실행의 효과를 되돌릴 수 있는 능력을 유지한다는 것을 의미한다.
예에서, 명령어 실행 파이프라인(200)은 분기 예측(branch prediction)을 수행할 수 있다. 분기 예측은 명령어 페치 유닛(204)이 실행이 흐를 제어 흐름 경로를 예측하고 그 경로로부터 명령어를 페치하는 동작이다. 예측을 만드는 방법에는 여러 가지가 있으며, 일부는 전역(global) 또는 어드레스별 분기 경로 이력(address-specific branch path histories)(예를 들어, 분기 사용 여부 및/또는 이러한 분기의 대상의 이력)을 유지하고 이러한 이력을 사용하여 다양한 동작을 수행하는 방법을 포함한다. 실행 파이프라인(예를 들어, 기능 유닛(216))은 실제로 분기를 실행하여 이러한 분기의 정확한 결과를 결정한다. 예측된 실행 경로로부터의 명령어가 실행하고 있지만 기능 유닛(216)이 실제로 올바른 실행 경로를 결정하기 전에는 이러한 명령어가 실제로 실행되지 않아야 하는 것이 가능하기 때문에 이러한 명령어는 추측적으로 실행되는 것으로 간주된다. 명령어가 추측적으로 실행될 수 있는 많은 다른 이유가 있다.
추측적으로 저장 명령어를 실행하는 것이 가능하다. 추측 실행은 명령어에 대해 다양한 동작을 수행하지만 명령어가 비-추측이 될 때까지 이러한 동작을 커밋하지 않음으로써 발생한다. 예에서, 저장 명령어를 실행하는 것은 추측적으로 명령어를 로드/저장 유닛(214)에 배치하는 단계, 저장할 데이터를 결정하는 단계, 데이터를 저장할 어드레스를 결정하는 단계(어드레스 계산 및 변환을 포함할 수 있음)를 포함한다. 이 시간 동안, 재정렬 버퍼(210)는 저장 명령어를 보유하고 저장 명령어가 비-추측적으로 실행할 때까지 명령어가 폐기- 결과를 커밋-하는 것을 허용하지 않는다.
명령어는 예측된 분기 제어 흐름 경로에서 실행하는 것과 같은 다양한 이유로 또는 다양한 다른 이유로 추측적으로 실행할 수 있다. 저장 명령어의 실행의 일부는 캐시에 저장될 데이터를 기록하는 것을 포함한다. 이를 위해 캐시 제어기(cache controller)는 적절한 캐시 라인에 대한 배타적 액세스 권한을 얻은 다음 지정된 데이터를 해당 캐시 라인에 기록한다. 적절한 캐시 라인에 대한 배타적 액세스 권한을 얻는 것은 다른 캐시(예를 들어, 다른 모든 캐시)가 캐시 라인의 복사본을 무효화하도록 하는 것을 포함한다. 이렇게 하면 그 캐시 라인에 대한 데이터 버전이 다른 캐시 메모리에 존재하는 것을 방지할 수 있다. MESI("수정됨, 배타적, 공유됨, 유효하지 않음") 프로토콜에서, 저장소를 실행하는 명령어 실행 파이프라인(200)은 캐시 라인에 대한 배타적 액세스 권한을 얻고 다른 유닛은 캐시 라인의 복사본을 유효하지 않음으로 설정한다.
명령어 실행 파이프라인(200)은 명령어에 대한 다양한 동작을 조기에 수행하려고 시도하는 비순차적 실행 파이프라인이다. 이러한 동작의 한 가지 예는 위에서 설명된 무효화이다. 구체적으로, 저장 명령어 실행을 위해, 명령어 실행 파이프라인(200)은 저장 명령어 실행 초기에 다른 메모리의 캐시 라인 복사본 무효화를 요청하는 것이 허용되며 종종 실행하여 저장 명령어가 연관된 데이터를 기록할 준비가 되면 명령어 실행 파이프라인(200)은 마치 무효화가 나중에 발생하는 것처럼 오래 기다릴 필요가 없도록 한다. 그러나 저장 명령어의 추측 실행이 발생하는 경우 문제가 발생한다. 구체적으로, 위에서 설명된 바와 같이, 명령어 실행 파이프라인(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)의 "바로 위" 캐시 제외)가 그 캐시 라인의 복사본을 무효화하도록 요청하는 것을 포함한다. 저장 명령어가 추측적으로 실행되는 경우, 코어 레벨 캐시(316)는 약한 배타적 판독을 발행한다. 각각의 캐시는 이 약한 배타적 판독을 무시할 수 있으므로 캐시 라인의 복사본 이 무효화되지 않는다. 다른 곳에서 언급된 바와 같이, 저장 명령어가 더 이상 추측적으로 실행되지 않을 때, 프로세서 코어(314)는 강력한 배타적 판독을 발행하고, 다른 캐시는 그 강력한 배타적 판독에 응답하여 그들의 복사본을 무효화한다.
일부 구현예에서, 약한 배타적 판독은 메모리 계층 구조의 서로 다른 레벨에 의해 개별적으로 프로세싱된다. 보다 구체적으로, 약한 배타적 판독은 계층 구조를 통해 전파되며 각각의 레벨에서, 해당 레벨에 대한 제어기(예를 들어, 프로세서 칩 레벨 캐시(312), 프로세서 세트 메모리(320), 또는 시스템 메모리 제어기(306))는 해당 계층 구조 내의 메모리에 대해 요청을 충족할지 여부를 결정한다. 그런 다음 제어기는 결정에 기초하여 요청을 충족하거나 요청을 충족하지 않도록 해당 메모리를 제어한다. 각각의 레벨에서는 이 요청을 개별적으로 충족할지 여부를 결정할 수 있으므로, 한 레벨의 메모리는 적절한 캐시 라인을 무효화함으로써 요청을 만족시키는 반면, 다른 레벨의 메모리는 적절한 캐시 라인을 무효화하지 않는 것이 가능하다. 예를 들어, 요청하는 코어(314)와 동일한 프로세서 칩(310)의 코어 레벨 캐시(316)는 캐시 라인을 무효화하지만, 그러나 다른 프로세서 칩(310)의 코어 레벨 캐시(316) 중 어느 것도 그 캐시 라인을 무효화하지 않으며, 다른 시스템 요소(308) 중 어느 것도 그 캐시 라인을 무효화하지 않는다.
도 4는 또 다른 예에 따른 약한 배타적 판독을 실행할 수 있는 컴퓨터 시스템(400)의 블록도이다. 시스템(400)은 계층 구조의 하나 이상의 가장 낮은 레벨(1차 프로세서-메모리 계층 구조 레벨 402), 계층 구조로 배열된 하나 이상의 다음 레벨 2차 프로세서 메모리 계층 구조 레벨(404), 하나 이상의 3차 프로세서 메모리 계층 구조 레벨(406), 및, 선택적으로 도시되지 않은 추가 계층 구조 레벨(408)을 포함한다
가장 낮은 레벨에서-1차 프로세서 메모리 계층 구조 레벨(402)은 하나 이상의 프로세서 메모리 요소(410)를 포함한다. 각각의 프로세서 메모리 요소(410)는 프로세싱 요소(412)와 프로세싱 요소별 메모리(414)를 포함한다. 소프트웨어를 실행하는 과정에서 프로세싱 요소(412)는 추측적으로 저장 명령어를 실행하고 대응하는 약한 배타적 판독 동작을 발행한다. 프로세싱 요소(412)는 또한 저장 명령어가 추측적으로 실행되지 않는 경우 강력한 배타적 판독 동작을 발행한다.
계층 구조의 각각의 레벨은 약한 배타적 판독 동작에 응답하는 방법을 결정하는 레벨별 메모리(예를 들어, 1차 메모리(416), 2차 메모리(418) 및 3차 메모리(420))를 포함한다. 본 명세서의 다른 곳에서 언급한 바와 같이, 요청이 수신되었을 때 캐시 라인을 유효한 상태로 저장한 메모리가 몇 개나 되는지, 특정 메모리의 캐시 라인을 무효화하는 데 드는 "비용"은 얼마인지 및/또는 기타 요인을 고려한 결정에 기초하여, 해당 레벨별 메모리의 "자식"의 대응하는 캐시 라인을 무효화하거나 이러한 캐시 라인을 무효화하지 않음으로써, 각각의 레벨에 대한 메모리는 약한 배타적 판독 동작을 실행하거나 거부할 수 있다(일부 구현예에서 "거부"는 약한 배타적 판독 동작을 실행하지 않고 요청자에게 그러한 실행 거부를 알리는 것을 의미함).
도 3의 시스템(300)은 도 4의 시스템(400)의 예이다. 따라서, 도 3은 코어, 칩 등과 같은 특정 유형의 계층 구조 레벨 요소를 도시하지만, 도 4의 계층 구조 레벨은 반드시 유사한 요소 또는 요소의 그룹을 포함하는 것은 아니다. 프로세싱 요소(412)는 프로세서 코어 또는 프로세서 코어의 그룹과 같은 하나 이상의 프로세서 세트이고, 각각의 메모리 계층 구조 레벨은 이러한 프로세서의 계층적 그룹화이다.
도 3의 시스템(300)은 도 4의 시스템(400)의 예이다. 프로세서 코어(314)는 프로세싱 요소(412)의 예이다. 코어 레벨 캐시(316)는 프로세싱 요소별 메모리(414)의 예이다. 프로세서 칩(310)은 1차 프로세서 메모리 계층 구조 레벨(402)의 예이고, 프로세서 칩 레벨 캐시(312)는 1차 레벨별 메모리 블록(416)의 예이다. 프로세서 세트(302)는 2차 프로세서 메모리 계층 구조 레벨(404)의 예이고, 프로세서 세트 메모리(320)는 2차 레벨별 메모리 블록(418)의 예이다. 컴퓨터 시스템(300)은 3차 프로세서 메모리 계층 구조 레벨(406)의 예이고, 시스템 메모리 제어기(306)는 다른 시스템 요소(308) 및 프로세서 세트(302)의 내부 메모리와 함께 3차 레벨별 메모리 블록(420)의 예이다. 추가적인 계층 구조 레벨(408)은 컴퓨터 시스템(300)에 네트워크로 연결된 추가적인 컴퓨터 시스템에 대응할 수 있다. 물론, 도 3의 시스템(300)은 도 4의 시스템(400)의 예이지만, 도 4의 시스템(400)은 도 3의 시스템(300)의 특정 세부사항에 제한되지 않는다는 것을 이해해야 한다.
도 5는 예에 따른 약한 배타적 판독 동작에 대한 동작을 예시하는 도면이다. 도면의 좌측 하단에 있는 프로세서 메모리 요소(410)는 추측적으로 저장 명령어를 실행하여 1차 레벨별 메모리 블록(402)에 대한 배타적 소유권에 대한 약한 요청을 발행한다. 1차 레벨별 메모리 블록(402)은 1차 레벨별 메모리 블록(402)의 커맨드에 따라 다른 프로세서 메모리 요소(410)에 명령하여 캐시 라인을 무효화할지 여부를 결정한다. 1차 레벨 특정 메모리 블록(402)(또는 임의의 메모리 블록)은 자신의 직접적인 커맨드 하에 있는 임의의 요소(예를 들어, 1차 레벨별 메모리 블록(402)에 대한 프로세서 메모리 요소(410), 2차 레벨별 메모리 블록(418)에 대한 1차 프로세서 메모리 계층 구조 레벨(402), 3차 레벨별 메모리 블록(420)에 대한 2차 프로세서 메모리 계층 구조 레벨(404) 등)가 문제의 캐시 라인을 무효화해야 하는지 또는 무효화하지 않아야 하는지를 다르게 결정하는 것이 가능하다. 예를 들어, 1차 레벨별 메모리 블록(402)은 하나의 프로세싱 요소별 메모리(414)가 캐시 라인의 복사본을 무효화해야 하고 반면 다른 프로세싱 요소별 메모리(414)가 캐시 라인의 복사본을 무효화해서는 안 된다고 결정하는 것이 가능하다. 유닛은 예를 들어 캐시 라인을 다시 획득하는 데 필요한 작업량이나 시간, 캐시 라인을 실제로 저장하는 직접 커맨드 하의 요소의 수 또는 기타 요인과 같은 특정 성능 요소를 고려함으로써 기술적으로 실행 가능한 방식으로 이러한 결정을 내린다. 임의의 레벨에서의 메모리 블록(예를 들어, 2차 레벨별 메모리 블록(404))이 개별적으로 이러한 결정을 내리는 것도 가능하다.
또한, 배타적 액세스를 얻는 것은 가장 낮은 레벨의 캐시에 있는 해당 캐시 라인의 단일 복사본만을 포함하기 때문에, 1차 레벨별 메모리 블록(402)은 추가 분배를 위해 계층 구조 위로 또 다른 요청을 발송한다. 구체적으로, 1차 레벨별 메모리 블록(402)은 배타적 소유권을 위해 2차 레벨별 메모리 블록(404)에 약한 요청을 발송한다. 2차 레벨별 메모리 블록(404)은 본 명세서의 다른 부분에서 논의된 것과 같은 다양한 요인을 기초로 2차 레벨별 메모리 블록(404)의 직접 커맨드에 따라 하나 이상의 1차 레벨별 메모리 블록(402) 중 어느 하나에 캐시 라인 무효화 커맨드를 발행할지 여부를 결정하고 그러한 커맨드를 발송하거나 발송하지 않는다. 2차 레벨별 메모리 블록(404)은 또한 유사한 방식으로 추가적인 계층 구조 레벨(예를 들어, 3레벨)에 배타적 소유권에 대한 약한 요청을 발송한다. 레벨별 메모리 블록이 계층 구조의 상위 블록으로부터 배타적 소유권에 대한 약한 요청을 수신하는 경우, 레벨별 메모리 블록은 본 명세서에 설명된 요인에 기초하여 블록(프로세서 메모리 요소(410) 또는 레벨별 메모리 블록)에 이러한 무효화 커맨드를 발행할지 여부를 결정한다.
도 6은 예에 따른 약한 배타적 판독 동작을 실행하기 위한 방법(600)의 흐름도이다. 도 1 내지 5의 시스템과 관련하여 설명되었지만, 당업자는 임의의 기술적으로 실행 가능한 순서로 방법(600)의 단계를 수행하도록 구성된 임의의 시스템이 본 개시의 범위 내에 속한다는 것을 이해할 것이다.
단계(602)에서, 프로세싱 요소(412)는 1차 레벨별 메모리 블록(402)과 같은 메모리 블록에 약한 배타적 판독 요청을 발행한다. 일부 예에서, 프로세싱 요소(412)는 저장 명령어에 응답하여 또는 이를 추측적으로 실행하는 과정에서 약한 배타적 판독 동작을 발행한다. 단계(604)에서, 일부 예에서는 프로세서 코어 간에 공유되는 캐시인, 1차 레벨별 메모리 블록(402)은 1차 레벨별 메모리 블록(402)의 직접 커맨드에 따라 저장 명령어를 저장할 어드레스를 포함하는 캐시 라인을 무효화하는 커맨드를 프로세서 메모리 요소(410)에 발행할지 여부에 관한 결정을 내린다. 프로세서 메모리 요소(410)는 이들 커맨드 따르며, 커맨드에 의해 지정된 캐시 라인을 무효화한다. 단계(606)에서, 1차 레벨별 메모리 블록(402)은 본 명세서의 다른 곳에서 설명된 프로세싱을 위해 약한 배타적 판독 요청을 메모리 계층 구조의 상위 레벨로 발송한다.
일부 예에서, 저장 명령어가 추측적이지 않게 되는 것에 응답하여, 저장 명령어를 실행하는 프로세싱 요소(412)는 메모리 계층 구조에 대한 강력한 배타적 판독 요청을 발행한다. 이 요청에 응답하여, 프로세싱 요소(412) 바로 위의 메모리 계층 구조의 부분에 없는 캐시 라인의 복사본을 저장하는 각각의 캐시는 캐시 라인을 무효화한다. 예에서, 프로세싱 요소(412) 바로 위의 메모리 계층 구조의 부분은 프로세싱 요소(412)와 연관된 L0 캐시, L0 캐시 바로 위에 있는 L1 캐시, L1 캐시 바로 위에 L2 캐시 등을 포함한다. 무효화의 목적은 캐시 라인의 직접 사용된 복사본이 아닌 병렬 복사본을 무효화하는 것이기 때문에, 이러한 메모리는 캐시 라인의 복사본을 무효화하지 않는다.
프로세싱 요소(412)가 추측적으로 실행되는 저장 명령어가 비추측적으로 실행되지 않는 것으로 결정하는 경우-즉, 저장 명령어의 실행이 올바르지 않은 경우(예를 들어, 분기 예측 오류로 인해)-프로세싱 요소(412)는 강력한 배타적 판독 요청을 발행하지 않는다. 이 경우, 캐시 라인을 무효화하지 않은 메모리는 저장 명령어의 실행이 잘못된 캐시 라인을 다시 획득할 필요가 없다.
본 명세서에 설명된 각각의 메모리에서, 저장 명령어가 기록될 데이터를 포함하는 캐시 라인에 대해 발생하는 무효화가 발생한다는 것을 이해해야 한다.
본 명세서의 개시에 기초하여 많은 변형이 가능하다는 것이 이해되어야 한다. 피쳐 및 요소가 특정 조합으로 위에서 설명되었지만, 각각의 피쳐 또는 요소는 다른 피쳐 및 요소 없이 단독으로 또는 다른 피쳐 및 요소와 함께 또는 없이 다양한 조합으로 사용될 수 있다.
도면에 예시된 다양한 요소는 하드웨어(예를 들어, 회로부), 프로세서에서 실행하는 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현 가능하다. 다양한 예에서, 각각의 블록, 예를 들어 프로세서 메모리 요소(410), 프로세싱 요소(412), 메모리(414), 메모리(416), 메모리(418), 프로세서 칩(310), 시스템 요소(308), 시스템 레벨 메모리(304), 시스템 메모리 제어기(306) 및 명령어 실행 파이프라인(200) 및 컴퓨터 시스템(100)의 예시된 유닛은 하드웨어, 소프트웨어, 또는 이들의 조합으로 구현 가능하다. 제공된 방법은 범용(general purpose) 컴퓨터, 프로세서 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는 예를 들어 범용 프로세서, 특수 목적 프로세서, 기존 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 주문형 집적 회로(ASIC), 필드 프로그래밍 가능 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적 회로(IC) 및/또는 상태 머신을 포함한다. 이러한 프로세서는 프로세싱된 하드웨어 설명 언어(HDL) 명령어의 결과와 넷리스트(netlist)를 포함하는 다른 중간 데이터(컴퓨터 판독 가능 매체에 저장 가능한 명령어)를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 실시예의 양태를 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 사용되는 마스크워크(maskwork)일 수 있다.
본 명세서에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비-일시적 컴퓨터 판독 가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체의 예는 읽기 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 광자기 매체, CD-ROM 디스크, 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.
Claims (20)
- 방법에 있어서,
저장 명령어를 추측적으로(speculatively) 실행하기 위한 약한 배타적 판독 요청(weak exclusive read request)을 메모리 계층 구조(memory hierarchy)의 제1 레벨에 발행하는 단계;
하나 이상의 메모리에서 상기 저장 명령어와 연관된 하나 이상의 캐시 라인(cache line)을 무효화할지 여부를 결정하는 단계; 및
상기 메모리 계층 구조의 추가 레벨에 상기 약한 배타적 판독 요청을 발행하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 결정하는 단계는 상기 하나 이상의 메모리 중 하나 이상이 상기 저장 명령어와 연관된 캐시 라인을 무효화해야 한다고 결정하는 단계를 포함하는, 방법.
- 제1항에 있어서, 상기 하나 이상의 메모리 중 상기 하나 이상에 의해, 상기 저장 명령어와 연관된 상기 캐시 라인을 무효화하는 단계를 더 포함하는, 방법.
- 제1항에 있어서, 상기 메모리 계층 구조의 상기 추가 레벨에 상기 약한 무효화 요청을 발행하는 단계는 상기 메모리 계층 구조의 상기 제1 레벨보다 높은 상기 메모리 계층 구조의 제2 레벨에 상기 무효화 요청을 발행하는 단계를 포함하는, 방법.
- 제4항에 있어서, 상기 메모리 계층 구조의 상기 제1 레벨에 있는 복수의 메모리 요소 중 어느 메모리 요소를 무효화할지 여부를, 상기 메모리 계층 구조의 상기 제2 레벨에 의해, 결정하는 단계를 더 포함하는, 방법.
- 제1항에 있어서, 상기 결정하는 단계는 상기 하나 이상의 메모리 중 하나 이상이 상기 저장 명령어와 연관된 캐시 라인을 무효화하지 않는다는 것을 결정하는 단계를 포함하는, 방법.
- 제1항에 있어서,
상기 저장 명령어가 비추측적이게 되는 것에 응답하여, 강력한 배타적 판독 요청을 발행하는 단계를 더 포함하는, 방법. - 제1항에 있어서,
비추측적으로 제2 명령어를 실행하는 단계; 및
상기 제2 명령어에 대해 강력한 배타적 판독 요청을 발행하는 단계를 더 포함하는, 방법. - 제1항에 있어서,
하나 이상의 메모리의 상기 저장 명령어와 연관된 하나 이상의 캐시 라인을 무효화할지 여부를 결정하는 단계는 상기 메모리 계층 구조의 상기 제1 레벨에 있는 다수의 메모리 중 하나 이상과 하나 이상의 캐시 라인의 무효화와 연관된 비용을 기초로 상기 하나 이상의 캐시 라인을 무효화할지 여부를 결정하는 단계를 포함하는, 방법. - 디바이스에 있어서,
저장 명령어를 추측적으로 실행하기 위한 약한 배타적 판독 요청을, 메모리 계층 구조의 제1 레벨에, 발행하도록 구성된 프로세싱 요소(processing element);
상기 메모리 계층 구조의 제1 레벨을 포함하고, 상기 메모리 계층 구조의 제1 레벨은:
하나 이상의 메모리의 상기 저장 명령어와 연관된 하나 이상의 캐시 라인을 무효화할지 여부를 결정하고; 및
상기 메모리 계층 구조의 추가 레벨에 대해 약한 배타적 판독 요청을 발행하도록 구성되는, 디바이스. - 제10항에 있어서, 상기 결정하는 것은 상기 하나 이상의 메모리 중 하나 이상이 상기 저장 명령어와 연관된 캐시 라인을 무효화해야 한다고 결정하는 것을 포함하는, 디바이스.
- 제10항에 있어서, 상기 하나 이상의 메모리는 상기 저장 명령어와 연관된 상기 캐시 라인을 무효화하도록 구성되는, 디바이스.
- 제10항에 있어서, 상기 메모리 계층 구조의 상기 추가 레벨에 상기 약한 무효화 요청을 발행하는 것은 상기 메모리 계층 구조의 상기 제1 레벨보다 높은 상기 메모리 계층 구조의 제2 레벨에 상기 무효화 요청을 발행하는 것을 포함하는, 디바이스.
- 제13항에 있어서, 상기 메모리 계층 구조의 상기 제2 레벨은 상기 메모리 계층 구조의 상기 제1 레벨에 있는 복수의 메모리 요소 중 어느 메모리 요소를 무효화할지 여부를 결정하도록 더 구성되는, 디바이스.
- 제10항에 있어서, 상기 결정하는 것은 상기 하나 이상의 메모리 중 하나 이상이 상기 저장 명령어와 연관된 캐시 라인을 무효화하지 않는다는 것을 결정하는 것을 포함하는, 디바이스.
- 제10항에 있어서, 상기 프로세싱 요소는 상기 저장 명령어가 비추측적이게 되는 것에 응답하여, 강력한 배타적 판독 요청을 발행하도록 더 구성되는, 디바이스.
- 제10항에 있어서, 상기 프로세싱 요소는:
비추측적으로 제2 명령어를 실행하고; 및
상기 제2 명령어에 대해 강력한 배타적 판독 요청을 발행하도록 더 구성되는, 디바이스. - 제10항에 있어서,
하나 이상의 메모리의 상기 저장 명령어와 연관된 하나 이상의 캐시 라인을 무효화할지 여부를 결정하는 것은 상기 메모리 계층 구조의 상기 제1 레벨에 있는 다수의 메모리 중 하나 이상과 하나 이상의 캐시 라인의 무효화와 연관된 비용을 기초로 상기 하나 이상의 캐시 라인을 무효화할지 여부를 결정하는 것을 포함하는, 디바이스. - 디바이스에 있어서,
프로세서-메모리 계층 구조를 포함하고, 상기 프로세서-메모리 계층 구조는:
복수의 1차 프로세서 메모리 계층 구조 레벨을 포함하고, 각각의 1차 프로세서 메모리 계층 구조 레벨은 하나 이상의 프로세싱 요소를 포함하고;
상기 하나 이상의 프로세싱 요소 중 프로세싱 요소는 상기 복수의 1차 프로세서-메모리 계층 구조 레벨 중 1차 프로세서-메모리 계층 구조 레벨에 저장 명령어를 추측적으로 실행하기 위한 약한 배타적 판독 요청을 발행하도록 구성되고; 및
상기 1차 프로세서 메모리 계층 구조 레벨은:
하나 이상의 메모리의 상기 저장 명령어와 연관된 하나 이상의 캐시 라인을 무효화할지 여부를 결정하고; 및
상기 메모리 계층 구조의 추가 레벨에 대해 약한 배타적 판독 요청을 발행하도록 구성되는, 디바이스. - 제19항에 있어서, 상기 결정하는 것은 상기 하나 이상의 메모리 중 하나 이상이 상기 저장 명령어와 연관된 캐시 라인을 무효화하는 것이라고 결정하는 것을 포함하는, 디바이스.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/490,910 US11947456B2 (en) | 2021-09-30 | 2021-09-30 | Weak cache line invalidation requests for speculatively executing instructions |
US17/490,910 | 2021-09-30 | ||
PCT/US2022/041420 WO2023055504A1 (en) | 2021-09-30 | 2022-08-24 | Weak cache line invalidation requests for speculatively executing instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240067955A true KR20240067955A (ko) | 2024-05-17 |
Family
ID=85721648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020247013905A KR20240067955A (ko) | 2021-09-30 | 2022-08-24 | 추측적으로 명령어를 실행하기 위한 약한 캐시 라인 무효화 요청 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11947456B2 (ko) |
EP (1) | EP4409419A1 (ko) |
JP (1) | JP2024535079A (ko) |
KR (1) | KR20240067955A (ko) |
CN (1) | CN118043791A (ko) |
WO (1) | WO2023055504A1 (ko) |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3550092B2 (ja) | 1998-12-10 | 2004-08-04 | 富士通株式会社 | キャッシュ装置及び制御方法 |
US6701417B2 (en) * | 2001-04-11 | 2004-03-02 | Sun Microsystems, Inc. | Method and apparatus for supporting multiple cache line invalidations per cycle |
US6725337B1 (en) * | 2001-05-16 | 2004-04-20 | Advanced Micro Devices, Inc. | Method and system for speculatively invalidating lines in a cache |
US6718839B2 (en) * | 2001-06-26 | 2004-04-13 | Sun Microsystems, Inc. | Method and apparatus for facilitating speculative loads in a multiprocessor system |
US20030195939A1 (en) | 2002-04-16 | 2003-10-16 | Edirisooriya Samatha J. | Conditional read and invalidate for use in coherent multiprocessor systems |
US7523266B2 (en) * | 2006-02-06 | 2009-04-21 | Sun Microsystems, Inc. | Method and apparatus for enforcing memory reference ordering requirements at the L1 cache level |
US8255626B2 (en) | 2009-12-09 | 2012-08-28 | International Business Machines Corporation | Atomic commit predicated on consistency of watches |
US9092346B2 (en) * | 2011-12-22 | 2015-07-28 | Intel Corporation | Speculative cache modification |
US10262721B2 (en) | 2016-03-10 | 2019-04-16 | Micron Technology, Inc. | Apparatuses and methods for cache invalidate |
US10621090B2 (en) | 2017-01-12 | 2020-04-14 | International Business Machines Corporation | Facility for extending exclusive hold of a cache line in private cache |
US10394716B1 (en) * | 2018-04-06 | 2019-08-27 | Arm Limited | Apparatus and method for controlling allocation of data into a cache storage |
-
2021
- 2021-09-30 US US17/490,910 patent/US11947456B2/en active Active
-
2022
- 2022-08-24 JP JP2024518281A patent/JP2024535079A/ja active Pending
- 2022-08-24 EP EP22877093.9A patent/EP4409419A1/en active Pending
- 2022-08-24 KR KR1020247013905A patent/KR20240067955A/ko unknown
- 2022-08-24 CN CN202280065279.4A patent/CN118043791A/zh active Pending
- 2022-08-24 WO PCT/US2022/041420 patent/WO2023055504A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20230101748A1 (en) | 2023-03-30 |
EP4409419A1 (en) | 2024-08-07 |
CN118043791A (zh) | 2024-05-14 |
WO2023055504A1 (en) | 2023-04-06 |
JP2024535079A (ja) | 2024-09-26 |
US11947456B2 (en) | 2024-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5615927B2 (ja) | データストリームのためのストアアウェアプリフェッチ | |
KR20220100939A (ko) | 스토어-투-로드 포워딩을 수행하기 위한 기술 | |
JP7403541B2 (ja) | メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ | |
US10095637B2 (en) | Speculative retirement of post-lock instructions | |
KR20240067955A (ko) | 추측적으로 명령어를 실행하기 위한 약한 캐시 라인 무효화 요청 | |
US11822479B2 (en) | History-based selective cache line invalidation requests | |
US11755494B2 (en) | Cache line coherence state downgrade | |
US20230099256A1 (en) | Storing an indication of a specific data pattern in spare directory entries | |
US11630772B1 (en) | Suppressing cache line modification | |
US11836085B2 (en) | Cache line coherence state upgrade | |
JP2024538196A (ja) | キャッシュラインコヒーレンス状態アップグレード | |
JP2024538195A (ja) | キャッシュラインコヒーレンス状態ダウングレード |