KR20210011494A - 동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화 - Google Patents

동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화 Download PDF

Info

Publication number
KR20210011494A
KR20210011494A KR1020217000977A KR20217000977A KR20210011494A KR 20210011494 A KR20210011494 A KR 20210011494A KR 1020217000977 A KR1020217000977 A KR 1020217000977A KR 20217000977 A KR20217000977 A KR 20217000977A KR 20210011494 A KR20210011494 A KR 20210011494A
Authority
KR
South Korea
Prior art keywords
action
cache
instruction
queue
micro
Prior art date
Application number
KR1020217000977A
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 KR20210011494A publication Critical patent/KR20210011494A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 명세서에서 설명된 기술은 동작 캐시로부터 디코딩된 동작을 인출하는 것과 디코드 유닛을 사용하여 명령을 인출하고 디코딩하는 것 사이의 스위칭 시에 낮은 레이턴시를 갖는 동작 캐시를 가지는 명령 인출 및 디코드 유닛을 제공한다. 이 낮은 레이턴시는 작업이 반대 경로로부터의 출력을 대기해야 하는 것으로 인해 중단될 때까지 그 작업이 동작 캐시 경로 및 명령 캐시 경로 둘 모두를 통해 이동하는 것을 허용하는 동기화 메커니즘을 통해 달성된다. 동작 캐시 경로 및 명령 캐시 경로에서의 분리 버퍼의 존재는 작업이 진행하기 위해 완료될 때까지 그 작업이 보류되는 것을 허용한다. 단일 주기로 다수의 적중의 검출을 허용하는 특별히 구성된 동작 캐시 태그 어레이와 같은 다른 개선은 예를 들면, 예측된 주소 블록을 저장하는 예측 큐로부터 엔트리가 소비되는 속도를 개선함으로써 레이턴시를 또한 개선한다.

Description

동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화
관련된 출원에 대한 상호 참조
본 출원은 미국 정규 특허 출원 제16/014,715호(출원일: 2018년 6월 21일)의 이득을 주장하며, 이에 따라서 이의 내용은 본 명세서에 참조에 의해 원용된다.
마이크로프로세서 명령(instruction) 실행 파이프라인은 명령을 인출하고 실행을 위해 이러한 명령을 마이크로 동작으로 디코딩한다. 명령 인출 및 디코딩은 많은 전력을 소비하고 또한, 수행 병목현상으로 작용할 수 있다. 명령 인출 및 디코드에 대한 개선은 지속적으로 행해지고 있다.
첨부된 도면과 결부하여 예로서 주어진 다음 설명으로부터 더 상세한 이해가 이루어질 수 있고, 여기서:
도 1은 하나 이상의 개시된 특징이 구현될 수 있는 일 예시적인 디바이스의 블록도;
도 2는 일례에 따른, 도 1의 프로세서의 명령 실행 파이프라인의 블록도;
도 3은 일례에 따른, 도 2의 명령 실행 파이프라인의 명령 인출 및 디코드 유닛의 구성요소를 도시하는 블록도;
도 4a는 일례에 따른, 명령 인출 및 디코드 유닛의 공유된 인출 로직의 동작의 방법의 흐름도;
도 4b는 일례에 따른, 동작 캐시로부터 캐싱된 디코딩된 마이크로 동작을 인출하기 위해 동작 캐시 큐의 엔트리를 프로세싱하기 위한 방법의 흐름도; 및
도 4c는 일례에 따른, 명령 바이트 버퍼에 저장된 명령 바이트를 인출하고 디코딩하기 위한 방법의 흐름도.
명령 인출 및 디코드 유닛은 이전에 디코딩된 명령을 저장하는 동작 캐시 및 디코딩되지 않은 명령 바이트를 저장하는 명령 캐시를 포함한다. 명령 인출 및 디코드 유닛은 분기 예측기에 의해 예측되는 예측된 주소 블록에 대응하는 명령을 인출한다. 명령 인출 및 디코드 유닛은 예측된 주소 블록이 동작 캐시 경로 또는 명령 캐시 경로로부터 인출되어야 하는지의 여부 및 이러한 캐시에서 어떤 엔트리가 연관된 명령을 보유하는지를 결정하는 인출 제어 블록을 포함한다. 동작 캐시 경로는 동작 캐시에서 명령이 이용 가능할 때 사용된다. 동작 캐시 경로는 동작 캐시로부터 디코딩된 마이크로 동작을 검색한다. 명령 캐시 경로는 명령 캐시로부터 명령 바이트를 검색하고 이러한 명령 바이트를 마이크로 동작으로 디코딩한다.
인출 제어 로직은 예측된 주소 블록에 대한 적중(hit)을 검출하기 위해 동작 캐시의 태그 어레이를 검토한다. 본 명세서의 다른 곳에서 설명된 인출 제어 로직의 특수한 특징으로 인해, 예측된 주소 블록을 인출하기 위해 하나보다 많은 동작 캐시 엔트리가 요구되는 경우에 단일 주기로 다수의 적중이 검출 가능하다. 동작 캐시에서 어떠한 적중도 발견되지 않는 명령에 대해, 명령 캐시 경로는 명령 캐시 또는 더 높은 레벨 캐시로부터 명령 바이트를 인출하고 이러한 명령을 디코딩한다.
인출 제어 로직은 동작 캐시 큐 엔트리를 생성한다. 이들 엔트리는 엔트리의 명령 주소 이전의 명령이 명령 캐시 경로에 의해 서비스되어야 하는지의 여부, 따라서 동작 캐시 경로가 그 동작 캐시 큐 엔트리에 대한 디코딩된 마이크로 동작을 출력하기 전에 이전 명령에 대한 디코딩된 동작을 출력하기 위해 명령 캐시 경로를 대기해야 하는지의 여부를 나타낸다. 인출 제어 로직은 또한, 명령 캐시 경로에 대한 명령 캐시 큐 엔트리를 생성하는데, 이는 명령 바이트 버퍼 엔트리의 명령에 대응하는 디코딩된 마이크로 동작이 이전 명령을 출력하기 전에 그 자신에 대한 마이크로 동작을 출력하기 위해 동작 캐시 경로를 대기해야 하는지의 여부를 나타낸다. 따라서, 경로 둘 모두는 임의의 특정한 디코딩된 동작에 대해, 이러한 동작이 반대 경로로부터 디코딩된 동작이 출력되기 위해 대기해야 하는지의 여부를 안다. 이 동기화 메커니즘은 다른 경로를 대기해야 하는 것으로 인해 작업이 중단될 필요가 있을 때까지 어느 하나의 경로에서 그 작업을 진행하는 것을 허용한다. 예측된 주소 블록에 대해 단일 주기로 다수의 동작 캐시 적중을 검출하는 기능과 동기화 메커니즘의 조합은 최소 레이턴시(latency)를 갖는 상이한 경로 사이의 스위칭을 허용한다.
도 1은 본 발명의 양태가 구현되는 일 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들면, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함한다. 디바이스(100)는 프로세서(102), 메모리(104), 저장 디바이스(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 입력 구동기(112) 및 출력 구동기(114)를 포함한다. 디바이스(100)가 도 1에 도시되지 않은 부가적인 구성요소를 포함할 수 있음이 이해된다.
프로세서(102)는 알려진 바와 같이, 마이크로프로세서, 마이크로제어기, 또는 다른 디바이스와 같은, 소프트웨어를 실행할 수 있는 컴퓨팅 디바이스이다. 메모리(104)는 프로세서(102)에 의해 사용하기 위한 명령 및 데이터를 저장한다. 일례에서, 메모리(104)는 프로세서(102)와 동일한 다이에 위치된다. 또 다른 예에서, 메모리(104)는 프로세서(102)와 상이한 다이에 위치된다. 메모리(104)는 랜덤 액세스 메모리(RAM), 동적 RAM, 또는 캐시와 같은 휘발성 메모리를 포함한다. 일부 예에서, 메모리(104)는 비 휘발성 메모리를 포함한다.
저장 디바이스(106)는 하드 디스크 드라이브, 고체 상태 드라이브, 광 디스크, 또는 플래시 드라이브와 같은 고정되거나 탈착 가능한 저장장치를 포함한다. 입력 디바이스(108)는 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체인식 스캐너, 네트워크 연결부(예컨대, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드), 및/또는 다른 입력 디바이스를 포함한다. 출력 디바이스(110)는 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명, 안테나, 네트워크 연결부(예컨대, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드), 및/또는 다른 입력 디바이스를 포함한다.
입력 구동기(112)는 프로세서(102) 및 입력 디바이스(108)와 통신하고, 프로세서(102)가 입력 디바이스(108)로부터 입력을 수신하도록 허가한다. 다양한 예에서, 디바이스(100)는 (단지 하나가 도시되었지만) 하나 이상의 입력 구동기(112)를 포함한다. 입력 구동기(112)는 맞춤형 고정 기능 하드웨어, 프로그래밍 가능한 하드웨어, 프로세서(예컨대, 프로세서(102))에서 실행되는 소프트웨어, 또는 그의 임의의 조합으로서 구현된다. 다양한 예에서, 입력 구동기(112)는 프로세서(102) 및 입력 디바이스(108) 둘 모두에 결합되는 주변 구성요소 상호연결 익스프레스(peripheral component interconnect express; PCIe) 포트와 같은 포트에 삽입된 확장 카드를 포함한다. 출력 구동기(114)는 프로세서(102) 및 출력 디바이스(110)와 통신하고, 프로세서(102)가 출력을 출력 디바이스(110)로 전송하도록 허가한다. 다양한 예에서, 디바이스(100)는 (단지 하나가 도시되었지만) 하나 이상의 출력 구동기(114)를 포함한다. 출력 구동기(114)는 맞춤형 고정 기능 하드웨어, 프로그래밍 가능한 하드웨어, 프로세서(예컨대, 프로세서(102))에서 실행되는 소프트웨어, 또는 그의 임의의 조합으로서 구현된다. 다양한 예에서, 출력 구동기(114)는 프로세서(102) 및 입력 디바이스(108) 둘 모두에 결합되는 주변 구성요소 상호연결 익스프레스(PCIe) 포트와 같은 포트에 삽입된 확장 카드를 포함한다.
도 2는 일례에 따른, 도 1의 프로세서(102) 내에 포함된 명령 실행 파이프라인(200)의 블록도이다. 명령 실행 파이프라인(200)은 메모리로부터 명령을 검색하고 명령을 실행하여, 데이터를 메모리에 출력하고 레지스터 파일(218) 내의 레지스터와 같은, 명령 실행 파이프라인(200) 내의 소자의 상태를 수정한다.
명령 실행 파이프라인(200)은 명령 캐시를 통해 시스템 메모리(메모리(104)와 같은)로부터 명령을 인출하고 인출된 명령을 디코딩하는 명령 인출 및 디코드 유닛(202)을 포함한다. 인출된 명령을 디코딩하는 것은 인출된 명령을 명령 실행 파이프라인(200)에 의한 실행을 위해 마이크로 동작(또한 단지 "동작")으로 변환한다. 용어 "명령"은 프로세서(102)에 대한 명령 세트 아키텍처에 명시되는 작업을 언급한다. 명령은 소프트웨어에 의한 실행을 위해 명시될 수 있다. 마이크로 동작은 일반적으로 소프트웨어에 의해 직접적으로 사용 가능하지 않은 하위 작업이다. 대신에, 마이크로 동작은 소프트웨어에 의해 요청된 명령을 수행하기 위해 프로세서(102)에 의해 실제로 수행된 개별적인 작업이다. 명령을 디코딩하는 것은 따라서, 기능 유닛(216), 로드/저장 유닛(214), 및 명령 실행 파이프라인(200)의 다른 부분에 인가될 제어 신호를 식별하는 것을 포함한다. 일부 명령을 디코딩하는 것은 명령 당 다수의 마이크로 동작을 야기하고, 다른 명령을 디코딩하는 것은 명령 당 하나의 마이크로 동작을 야기한다.
실행 파이프라인(200)은 또한, 마이크로 동작을 프로세싱하기 위한 산출을 수행하는 기능 유닛(216), 마이크로 동작에 의해 명시된 바와 같이 데이터 캐시(220)를 통해 시스템 메모리로부터 데이터를 로드하거나 시스템 메모리에 데이터를 저장하는 로드/저장 유닛(214), 및 마이크로 동작을 위한 작동 데이터를 저장하는 레지스터를 포함하는 레지스터 파일(218)을 포함한다.
재배열 버퍼(210)는 현재 진행 중인(in-flight) 명령을 추적하고 진행 동안 비 순차적인 실행을 허용함에도 불구하고 명령의 순차적인 폐기를 보장한다. "진행 중인" 명령은 재배열 버퍼(210)에 의해 수신되었지만 아직 "폐기"되지 않은 - 즉, 아직 프로세서의 아키텍처 상태에 대해 행해진 결과(예컨대, 아키텍처 레지스터에 기록된 결과)를 갖지 않은 명령을 언급한다. 명령의 모든 마이크로 동작이 수행될 때, 명령은 폐기된 것으로 간주된다. 예약 스테이션(212)은 진행 중인 마이크로 동작을 유지하고 마이크로 동작을 위한 피연산자를 추적한다. 모든 피연산자가 특정한 마이크로 동작을 실행할 준비가 될 때, 예약 스테이션(212)은 실행을 위해 마이크로 동작을 기능 유닛(216) 또는 로드/저장 유닛(214)으로 전송한다.
명령 실행 파이프라인(200)의 다양한 소자는 공통 데이터 버스(222)를 통해 통신한다. 예를 들면, 기능 유닛(216) 및 로드/저장 유닛(214)은 결과를 종속 명령/마이크로 동작의 실행을 위해 예약 스테이션(212)에 기록될 수 있는 공통 데이터 버스(222)에 및 재배열 버퍼(210)에 실행을 완료한 진행 중인 명령의 최종 프로세싱 결과로서 기록한다.
일부 기술에서, 명령 인출 및 디코드 유닛(202)은 이전에 디코딩된 명령에 대응하는 마이크로 동작을 저장하는 동작 캐시를 포함한다. 동작 동안, 명령 인출 및 디코드 유닛(202)은 디코딩된 마이크로 동작이 동작 캐시에 저장되는지의 여부를 결정하기 위해 동작 캐시를 확인하고 이러한 명령에 대한 디코딩 동작을 수행하는 대신에 이러한 발견된 마이크로 동작을 출력한다. 디코딩 명령이 상대적으로 전력이 많이 소모되고 레이턴시가 길기 때문에, 동작 캐시를 사용하는 것은 전력 소비를 감소시키고 프로세싱 처리량을 개선하는데 도움이 된다.
동작 캐시에 대한 한가지 문제는 디코딩된 마이크로 동작이 동작 캐시에 존재할 때 동작 캐시를 사용하는 것과 디코딩된 마이크로 동작이 동작 캐시에 존재할 때 명령 캐시로부터 인출하고 디코드 유닛에서 이러한 명령을 디코딩하는 것 사이를 스위칭할 필요로 인해 발생한다. 다양한 이유로, 이들 중 일부는 본 명세서의 다른 곳에서 설명되며, 일부 구현예에서, 동작 캐시로부터의 인출과 명령 캐시로부터의 디코딩 사이의 스위칭은 몇몇 주기 패널티를 초래할 수 있다. 이 이유로, 동작 캐시로부터 디코딩된 마이크로 동작을 인출하는 것과 동작 캐시에서 디코딩된 마이크로 동작을 갖지 않는 명령에 대한 마이크로 동작을 생성하기 위해 명령을 디코딩하는 것 사이의 스위칭과 연관된 레이턴시를 감소시키기 위한 기술이 본 명세서에서 제공된다. 도 2가 이들 기술이 적용되는 프로세서 파이프라인(200)의 하나의 예를 도시하지만, 당업자는 본 발명의 교시가 다른 파이프라인 아키텍처에 또한 적용된다는 것을 이해할 것이다.
도 3은 일례에 따른, 명령 인출 및 디코드 유닛(202)의 구성요소를 도시하는 블록도이다. 명령 인출 및 디코드 유닛(202)은 분기 예측기(302), 예측 큐(304), 공유된 인출 로직(305), 동작 캐시 경로(301), 명령 캐시 경로(303), 및 동작 큐(328)를 포함한다. 공유된 인출 로직(305)은 동작 캐시 태그 룩업 회로(310), 동작 캐시 태그 어레이(306), 명령 캐시 태그 룩업 회로(312), 명령 캐시 태그 어레이(308), 및 인출 제어 회로(313)를 포함한다. 동작 캐시 경로(301)는 동작 캐시 큐(314), 동작 캐시 데이터 판독 회로(320), 및 동작 캐시 데이터 어레이(322)를 포함한다. 명령 캐시 경로(303)는 명령 캐시 큐(315), 명령 캐시 데이터 판독 회로(316), 더 높은 레벨 캐시(들) 및 시스템 메모리에 통신 가능하게 결합되는 명령 캐시 데이터 어레이(318), 명령 바이트 버퍼(324), 및 디코더(326)를 포함한다. 본 명세서에서 사용된 바와 같이, 용어 "동작 캐시"는 동작 캐시 태그 룩업 회로(310), 동작 캐시 태그 어레이(306), 동작 캐시 데이터 판독 회로(320), 및 동작 캐시 데이터 어레이(322)의 조합을 언급한다. 본 명세서에서 사용된 바와 같이, 용어 "명령 캐시"는 명령 캐시 태그 룩업 회로(312), 명령 캐시 태그 어레이(308), 명령 캐시 데이터 판독 회로(316), 및 명령 캐시 데이터 어레이(318)의 조합을 언급한다.
동작 캐시 및 명령 캐시와 같은 임의의 캐시는 특정한 태그 및 인덱스가 캐시에서 적중되는지의 여부의 결정을 허용하는 태그 어레이, 및 캐시에 대한 데이터를 저장하는 데이터 어레이를 포함한다. 따라서, 동작 캐시는 동작 캐시 태그 어레이(306) 및 동작 캐시 데이터 어레이(322)를 포함하고 명령 캐시는 명령 캐시 태그 어레이(308) 및 명령 캐시 데이터 어레이(318)를 포함한다. 다양한 예에서, 도 3에 도시된 유닛 중 임의의 것 또는 전부는 고정 기능 하드웨어(즉, 고정 기능 회로)로서 구현된다.
분기 예측기(302)는 명령 인출 및 디코드 유닛(202)의 나머지에 의한 소비를 위한 예측된 주소를 생성한다. 알려진 기술을 통해, 분기 예측기(302)는 명령 실행 파이프라인(200)에서 실행되는 소프트웨어가 실행할, 예측된 명령 주소의 시퀀스로서 명시된 명령의 시퀀스를 식별하려고 시도한다. 이 명령 시퀀스 식별은 다양한 실행 상태 정보(현재 명령 포인터 주소, 및 다양한 예에서 특정한 분기가 취해졌는지 또는 아닌지의 여부의 이력을 나타내는 데이터를 포함하는 분기 예측 이력, 및/또는 다른 데이터와 같은)를 사용하는 분기 예측을 포함한다. 분기 예측기(302)는 잘못 예측할 수 있으며, 이 경우에 분기 예측기(302) 및 명령 실행 파이프라인(200)의 다른 부분은 잘못 예측된 분기 경로로부터의 명령에 대한 동작을 파기하는 것뿐만 아니라, 분기 예측기(302)가 명령 주소를 정확한 분기 경로로 변경하는 것과 같은, 예측 실패를 해결하기 위한 조치를 수행한다. 매우 다양한 분기 예측 기술이 존재하고, 다양한 예에서, 분기 예측기(302)는 예측된 명령 주소의 시퀀스를 식별하기 위해 임의의 기술적으로 실현 가능한 분기 예측 기술을 사용한다.
예측 큐(304)는 분기 예측기(302)로부터 예측된 주소를 저장한다. 예측 큐(304)는 분기 예측기(302)와 명령 인출 및 디코드 유닛(202)의 나머지 사이의 분리 큐로서 작용하여, 분기 예측기(302)의 동작의 타이밍이 명령 인출 및 디코드 유닛(202)의 나머지 부분의 동작의 타이밍에 의존하지 않는 것을 허용한다. 분기 예측기(302)에 의해 출력되고 예측 큐(304)에 저장된 예측된 주소의 포맷은 범위에 의해 정의된 명령 주소의 그룹인 예측된 주소 블록의 형태이다.
공유된 인출 로직(305)은 예측된 주소 블록에 대해 동작하여, 예측된 주소 블록에 대응하는 주소가 동작 캐시에 저장되는 대응하는 변환으로 인해 동작 캐시 경로(301)에 의해 서비스 가능한 것으로 결정되는지의 여부에 기초하여 이러한 예측된 주소 블록으로부터 동작 캐시 경로(301), 명령 캐시 경로(303), 또는 둘 모두로 주소를 전송한다. 더 구체적으로, 공유된 인출 로직(305)은 특정한 예측된 주소 블록의 임의의 주소가 동작 캐시에 저장되는지의 여부를 결정하기 위해 동작 캐시 태그 어레이(306)를 검토하는 동작 캐시 태그 룩업(310)을 포함한다. 특정한 예측된 주소 블록에 대해, 이 룩업에 기초하여, 인출 제어 회로(313)는 동작 캐시 경로(301) 및/또는 명령 캐시 경로(303)에 의해 서비스하기 위한 동작 캐시 큐 엔트리 또는 명령 캐시 큐 엔트리 중 하나 또는 둘 모두를 생성한다. 특정한 예측된 주소 블록에 대해 적어도 하나의 동작 캐시 큐 엔트리가 생성되면, 동작 캐시 경로(301)는 그 동작 캐시 큐 엔트리를 서비스하여, 동작 캐시로부터 캐싱된 디코딩된 동작을 검색하고 이러한 캐싱된 디코딩된 동작을 명령 실행 파이프라인(200)의 나머지 부분에 의해 프로세싱하기 위해 동작 큐(328)로 전달한다. 동작 캐시 경로(301)에 의해 완전히 서비스 가능하지 않은(즉, 예측된 주소 블록의 주소 중 전부가 아닌 일부가 동작 캐시에 저장된 대응하는 디코딩된 명령을 갖거나, 그 어느 것도 상기 대응하는 디코딩된 명령을 갖지 않음) 예측된 주소 블록에 대해, 명령 캐시 경로(303)는 명령 캐시로부터 명령 바이트를 인출하고 그 다음, 이러한 명령 바이트를 디코딩함으로써 그 예측된 주소 블록을 부분적으로 또는 전체적으로 서비스한다. 동작 캐시 큐 엔트리 및 명령 캐시 큐 엔트리는 특정한 예측된 주소 블록에 대해 동작 캐시 경로(301) 및/또는 명령 캐시 경로(303)에 의해 수행되어야 하는 작업을 반영한다.
공유된 인출 로직(305)에 의해 출력된 캐시 큐 엔트리는 동작 캐시 경로(301) 및 명령 캐시 경로(303)가 서비스될 주소의 상대적 순서에 관해 조정하는 것을 허용하는 표시를 포함한다. 더 구체적으로, 상대적인 프로그램 순서를 따르기 위한 이 조정은 동작 캐시 경로(301) 및 명령 캐시 경로(303)의 각각으로 이동하는 캐시 큐 엔트리에 대해, 반대 경로(즉, 동작 캐시 경로(301)에 대한 명령 캐시 경로(303) 또는 명령 캐시 경로(303)에 대한 동작 캐시 경로(301))가 특정한 캐시 큐 엔트리에 대한 명령 주소 바로 이전의 명령에 대한 디코딩된 마이크로 동작을 얻는지의 여부의 표시를 포함함으로써 용이해진다. 이러한 표시가 존재하면, 동작 캐시 경로(301) 또는 명령 캐시 경로(303)는 반대 경로가 "대기" 표시가 존재하는 명령 주소를 서비스하기 전에 이러한 바로 이전의 명령 주소를 서비스하기 위해 대기한다. 이러한 방식으로 대기함으로써, 디코딩된 마이크로 동작은 프로그램 순서로 동작 큐(328)에 출력된다. 동작 큐(328)는 명령 인출 및 디코드 유닛(202)에 대한 종점 또는 최종 스테이지로서 작용한다. 더 구체적으로, 동작 큐(328)는 명령 실행 파이프라인(200)의 나머지에 의해 서비스하기 위해 동작 캐시 경로(301) 및 명령 캐시 경로(303)의 프로그램 순서 출력을 저장한다. 동작 큐(328)는 또한, 명령 실행 파이프라인(200)의 후속 스테이지의 동작 타이밍으로부터 명령 인출 및 디코드 유닛(202)의 동작 타이밍을 분리하는 분리 버퍼로서 작용한다.
공유된 인출 로직(305), 동작 캐시 경로(301) 및 명령 캐시 경로(303)의 동작은 도시되고 부가적인 상세를 포함하며, 또한 도 4a 내지 도 4c를 참조하여 이들 경로의 개별적인 구성요소와 관련하여 더 상세하게 이제 설명된다. 구체적으로, 도 4a는 공유된 인출 로직(305)의 동작을 도시하고, 도 4b는 동작 캐시 경로(301)의 동작을 도시하며, 도 4c는 명령 캐시 경로(303)의 동작을 도시한다.
도 4a는 일례에 따른, 공유된 인출 로직(305)의 동작의 방법(400)의 흐름도이다. 도 1 내지 도 3의 맥락에서 설명될지라도, 당업자는 임의의 기술적으로 실현 가능한 순서로 도 4a의 단계를 수행하는 임의의 시스템이 본 발명의 범위 내에 있다는 것을 이해할 것이다.
방법(400)은 단계(402)에서 시작하고, 여기서 동작 캐시 태그 룩업(310) 및 명령 캐시 태그 룩업(312)은 예측 큐(304)로부터 예측된 주소 블록을 검색한다. 단계(404)에서, 동작 캐시 태그 룩업 회로(310) 및 명령 캐시 태그 룩업 회로(312)는 동작 캐시가 예측된 주소 블록의 전부, 일부에 대해 캐싱된 디코딩된 동작을 저장하는지, 또는 예측된 주소 블록 중 어느 것도 저장하지 않는지의 여부를 결정하기 위해 예측된 주소 블록을 소비한다. 그렇게 행하기 위해 임의의 기술적으로 실현 가능한 기술이 가능할지라도, 예측된 주소 블록을 찾기 위한 상세 룩업 동작의 일례가 이제 제공된다.
이 예에 따르면, 동작 캐시 태그 룩업 회로는 동작 캐시에서 예측된 주소 블록에 대한 임의의 적중이 존재하는지를 결정하기 위해 예측된 주소 블록을 나타내는 주소를 동작 캐시 태그 어레이(306)에 적용한다. 동작 캐시는 각각의 인덱스가 특정한 세트와 연관되고 각각의 태그가 하나 이상의 방식으로 연관되는 세트 연관 캐시이다. 태그는 주소의 고차 비트(주소의 비트([47:12])와 같은)에 대응하고 인덱스는 주소의 다음의 더 저차 비트(주소의 비트([11:6]))인 비트에 대응한다. 태그가 (해싱과 같은) 일부 기술을 통해 축약된 전체 태그의 버전인 부분 태그가 되는 것이 가능하다. 본 발명의 전반에 걸쳐, 용어 "태그"가 적절한 경우 "부분 태그"에 의해 대체될 수 있음을 이해해야 한다.
동작 캐시 태그 룩업(310)은 다음과 같이 예측된 주소 블록을 나타내는 주소를 동작 캐시 태그 어레이(306)에 적용한다. 동작 캐시 태그 룩업(310)은 예측된 주소 블록으로부터 얻어진 인덱스를 동작 캐시 태그 어레이(306)에 적용하고, 이는 그 인덱스에 의해 식별된 세트에 있는 태그를 출력한다. 예측된 주소 블록으로부터 얻어진 태그가 판독된 태그 중 하나 이상과 매칭하면 적중이 발생한다.
인덱스와 태그의 조합에 대한 각각의 적중은 예측된 주소 블록에서 하나 이상의 명령에 대한 변환된 마이크로 동작을 저장할 수 있는 동작 캐시에 엔트리가 존재함을 나타낸다. 동작 캐시가 명령 캐시 라인을 완전히 커버하지 않을 수 있는 하나 이상의 개별적인 명령에 대응하는 엔트리를 저장하기 때문에, 단지 태그 및 인덱스에 더하여 정보가 예측된 주소 블록에 대응하는 주소의 범위의 모든 명령 중, 어떤 특정 명령이 특정한 적중에 대응하는지를 나타내기 위해 요구된다. 이 식별 정보는 동작 캐시 태그 어레이(306)의 각각의 엔트리에 시작 오프셋 값으로서 저장된다. 더 구체적으로, 전형적인 명령 캐시는 캐시 라인의 입도(granularity)에 따라 명령을 저장한다. 즉, 캐시 적중은 인덱스 및 태그에 의해 표현된 주소의 부분과 정렬되는 특정 양의 데이터가 캐시에 저장되어 있음을 나타낸다. 그러나, 동작 캐시는 캐시 라인보다 작은 주소 범위를 커버하는 하나 이상의 개별적인 명령에 대한 엔트리(디코딩된 마이크로 동작)을 저장한다. 따라서, 동작 캐시에서 특정 명령에 대한 적중은 주소의 고차 비트(예컨대, 비트([47:6]))를 표현하는 인덱스와 태그의 매치뿐만 아니라, 바이트 레벨로 아래로 정렬되는 주소의 저차 비트(예컨대, 비트([5:0]))를 표현하는 시작 오프셋에 대한 매치를 요구한다(일부 명령 세트 아키텍처에 대해, 명령은 2 또는 4 바이트 입도로 단지 존재할 수 있고, 따라서 오프셋의 비트([0]) 또는 비트([1:0])가 제외될 수 있다).
상기 설명된 바와 같이, 시작 오프셋 정보는 동작 캐시 태그 어레이(306)의 모든 엔트리에 저장된다. 동작 캐시에 저장된 캐싱된 디코딩된 마이크로 동작에 의해 커버된 명령 주소의 범위를 식별하기 위해, 동작 캐시 태그 어레이(306)의 각각의 엔트리는 동작 캐시 엔트리가 그 크기가 가변적일 수 있기 때문에, 그 엔트리에 대응하는 명령의 종료 오프셋을 나타내는 정보를 저장한다. 이 종료 오프셋은 엔트리에 대응하는 마지막 명령 이후 다음 명령의 주소 오프셋으로서 저장된다. 다음 명령 오프셋을 나타내는 정보의 목적은 그 다음 명령이 동작 캐시에 저장된 마이크로 동작을 디코딩한 경우 다음 동작 캐시 엔트리에 대한 적중 상태가 동일한 주기로 찾아지는 것을 허용하는 것이다. 제1 엔트리의 종료 오프셋을 동일한 인덱스에서 매칭하는 태그를 갖는 다른 태그 어레이 엔트리의 시작 오프셋과 비교함으로써, 제2 엔트리가 존재하는 경우 식별된다. 유사하게, 제2 엔트리의 종료 오프셋은 존재하는 경우 제3 엔트리를 찾기 위해 동일한 인덱스에서 매칭하는 태그를 갖는 다른 태그 어레이 엔트리의 시작 오프셋과 비교된다.
요약하면, 오프셋 정보는 (인덱스가 적용될 때 태그와의 매치를 통해) 동작 캐시 엔트리 적중에 의해 커버되는 예측된 주소 블록에서 특정 주소 범위의 식별을 허용하고 동작 캐시 태그 룩업(310)이 그 엔트리에 의해 커버되지 않는 다음 명령의 주소를 식별하는 것을 허용한다. 인덱스가 동작 캐시 태그 어레이(306)에 적용될 때, 다수의 엔트리가 판독된다. 각각의 엔트리는 태그, 시작 오프셋, 및 종료 오프셋(다음 명령 오프셋으로도 지칭됨)을 포함한다. 동작 캐시 엔트리의 태그 및 시작 오프셋 둘 모두와 예측된 주소 블록의 태그 및 시작 오프셋 사이의 매치는 제1 엔트리에 대한 동작 캐시 적중을 시그널링한다. 제1 엔트리의 종료 오프셋은 제2 엔트리를 식별하기 위해 예측된 주소 블록의 태그와 또한 매칭된 다른 엔트리의 시작 오프셋과 비교된다. 제2 엔트리의 종료 오프셋은 본 명세서의 다른 곳에서 설명된 바와 같이 단일 주기로 다수의 엔트리에 대한 순차 적중 검출을 함께 연결하기 위해 사용된다. 식별된 엔트리의 각각에 대해, 종료 오프셋은 예측된 주소 블록의 종료 오프셋과 비교된다. 예측된 주소 블록의 종료 오프셋이 매칭되거나 초과될 때, 그 블록은 완전히 커버되고 또 다른 연결된 엔트리가 그 예측된 주소 블록의 프로세싱을 위해 무시된다.
단계(406)에서, 동작 캐시 태그 룩업 회로(310)는 동작 캐시 태그 어레이(306)에 적어도 하나의 적중이 존재하는지의 여부를 결정한다. 적어도 하나의 적중이 존재하고 적어도 하나의 적중이 전체 예측된 주소 블록에 대한 모든 명령을 커버하면, 방법(400)은 단계(408)로 진행한다. 적어도 하나의 적중이 존재하고 적어도 하나의 적중이 예측된 주소 블록에 대한 전부가 아니라 일부 명령을 커버하면, 방법(400)은 단계(410)로 진행한다. 동작 캐시 태그 어레이(306)에서 어떠한 적중도 존재하지 않으면, 방법은 단계(414)로 진행한다.
단계(408)에서, 인출 제어 회로(313)는 동작 캐시에서 예측된 주소 블록에 대한 적중에 관한 정보를 갖는 동작 캐시 큐 엔트리를 생성하고 기록한다. 동작 캐시 큐 엔트리는 각각의 적중에 대한 동작 캐시의 인덱스 및 방식을 나타내는 정보 및 이 동작 캐시 큐 엔트리를 위해 주소를 서비스하는 것이 경로 변경을 요구하는지의 여부에 관한 표시를 포함한다. "방식"은 세트(인덱스에 대응함) 및 방식이 동작 캐시에서 고유한 엔트리를 식별하기 때문에 저장된다. 방식은 태그와 오프셋의 각각의 조합에 대해 고유하며 인덱스에 의해 식별된 세트에서 단일 엔트리를 고유하게 식별한다. 경로 변경은 이 동작 캐시 큐 엔트리에 의해 서비스된 명령 바로 앞의 명령이 명령 캐시 경로(303)에 의해 서비스될 때 발생한다. 따라서, 이전 예측된 주소 블록이 명령 캐시 경로(303)에 의해 서비스되는 경우(또는 더 구체적으로, 이전 예측된 주소 블록의 마지막 명령이 명령 캐시 경로(303)에 의해 서비스되는 경우) 표시가 설정된다. 동작 캐시 큐 엔트리는 도 4b와 관련하여 설명된 바와 같이 동작 캐시 경로(301)에 의해 서비스된다.
단계(406)로 다시 돌아가면, 동작 캐시에서의 적중이 예측된 주소 블록의 전부가 아닌 일부가 동작 캐시에 의해 커버됨을 나타내면, 방법(400)은 단계(410)으로 진행한다. 단계(410)에서, 인출 제어 회로(313)는 동작 캐시 경로(301)에 대한 동작 캐시 큐 엔트리를 생성하고 이러한 동작 캐시 큐 엔트리를 동작 캐시 큐(314)에 기록한다. 동작 캐시 큐(314)는 분리 버퍼로서 작용하여, 공유된 인출 로직(305)이 동작 캐시 데이터 판독 회로(320)가 동작 캐시 큐 엔트리를 소비하고, 동작 캐시 데이터 어레이(322)를 판독하며, 디코딩된 동작을 프로그램 순서로 동작 큐(328)에 출력하는 타이밍으로부터 예측된 주소 블록을 프로세싱하고 동작 캐시 큐 엔트리를 생성하는 타이밍을 분리한다. 이들 동작 캐시 큐 엔트리는 각각의 적중에 대한 동작 캐시의 인덱스와 방식 및 바로 이전 명령으로부터 경로 변경이 존재하는지의 여부를 나타내는 경로 변경 표시를 포함한다. 더 구체적으로, 경로 변경 표시는 특정한 캐시 큐 엔트리에 의해 서비스된 명령 주소 바로 이전의 명령이 명령 캐시 경로(303)에 의해 서비스되어야 하는지의 여부를 나타낸다. 또한, 단계(412)에서, 인출 제어 회로(313)는 명령 캐시 큐(315)에 저장하기 위한 명령 캐시 큐 엔트리를 생성한다. 명령 캐시 큐 엔트리는 적중이 발생하는 명령 캐시의 인덱스 및 방식, 명령 캐시로부터 인출할 시작 오프셋과 종료 오프셋 및 경로 변경이 제1 이러한 엔트리에 대해 발생한다는 표시를 포함한다. 명령 캐시 큐에 기록된 시작 오프셋은 이 예측된 주소 블록에 대해 적중된 마지막 동작 캐시 엔트리의 종료 오프셋이다. 명령 캐시 큐에 기록된 종료 오프셋은 예측된 주소 블록의 종료 오프셋이다. 동일한 예측된 주소 블록인 이전 명령이 동작 캐시 경로(301)에 의해 서비스되기 때문에 이 명령 캐시 큐 엔트리에 대해 경로 변경 표시가 설정된다.
단계(406)로 다시 돌아가면, 동작 캐시에 예측된 주소 블록에 대한 어떠한 적중도 존재하지 않으면, 방법(400)은 단계(414)로 진행한다. 단계(414)에서, 인출 제어 회로(313)는 명령 캐시 큐(315)에 저장하기 위한 명령 캐시 큐 엔트리를 생성한다. 명령 캐시 큐 엔트리는 적중이 발생하는 명령 캐시의 인덱스 및 방식, 명령 캐시로부터 인출할 시작 오프셋과 종료 오프셋 및 제1 이러한 엔트리에 대해 경로 변경이 발생하는지의 여부의 표시를 포함한다. 명령 캐시 큐에 기록된 시작 오프셋은 예측된 주소 블록의 시작 오프셋이다. 명령 캐시 큐에 기록된 종료 오프셋은 예측된 주소 블록의 종료 오프셋이다. 이 표시는 제1 엔트리의 명령 바로 이전의 명령이 동작 캐시 경로(301)에 의해 서비스되어야 하는 경우 설정된다.
단계(412 또는 414) 이후에, 방법(400)은 단계(416)로 진행한다. 단계(416)에서, 명령 캐시 데이터 판독 회로(316)는 명령 캐시 큐의 명령 캐시 큐 엔트리에 기초하여 명령 캐시 데이터 어레이(318)를 판독한다. 구체적으로, 명령 캐시 데이터 판독 회로(316)는 특정한 명령 캐시 큐 엔트리에 대한 인덱스 및 방식에 의해 명시된 엔트리에 액세스하고 명령 캐시로부터 명령 바이트를 얻는다. 일부 명령이 명령 캐시 또는 동작 캐시에 저장되지 않는 것이 가능하고 이 경우에, 명령 바이트는 더 높은 레벨 캐시 또는 시스템 메모리로부터 인출되어야 할 것이다. 명령 캐시 경로(303)는 이러한 상황을 또한 서비스할 것이다. 단계(418)에서, 명령 캐시 데이터 판독 회로(316)는 디코더(326)에 의해 디코딩된 마이크로 동작으로 디코딩하기 위해 명령 캐시로부터 판독된 명령 바이트를 명령 바이트 버퍼(324)에 기록한다.
일 구현예에서, 결정 및 룩업 단계(단계(404) 및 단계(406))는 동작 캐시 큐 엔트리 및 명령 캐시 큐 엔트리를 생성하는 단계(단계(408, 410, 412, 및 414))와 관련하여 몇몇 주기에 걸쳐 파이프라인 방식(따라서 시간상 적어도 부분적으로 중첩됨)으로 발생한다. 태그 어레이의 검토 및 캐시 큐 엔트리의 생성이 적어도 부분적으로 중첩하는 시간에서 파이프라인 방식으로 수행되는 이러한 동작의 일례가 이제 제공된다.
이 예에 따르면, 동작 캐시에서 적중이 발생하는 임의의 특정한 예측된 주소 블록에 대해, 동작 캐시 태그 룩업 회로(310)는 적중이 발생하는 최저 명령 주소 오프셋으로서 사용할 제1 오프셋을 식별한다. 임의의 특정한 주기로, 이 제1 오프셋을 식별하는 것은 현재 주기가 동작 캐시 태그 룩업(310)이 현재 예측된 주소 블록을 검토하고 있는 제1 주기인지의 여부를 포함하는 몇몇 인자에 의존한다. 더 구체적으로, 동작 캐시 태그 룩업(310)은 단일 주기로 동작 캐시 태그 어레이(306)에서 다수의 적중을 식별할 수 있다. 그러나, 동작 캐시 태그 룩업(310)이 하나의 주기로 검토할 수 있는 적중의 횟수에 대해 제한이 존재한다. 동작 캐시 태그 룩업(310)이 제2 또는 제2보다 높은 주기 동안 특정한 예측된 주소 블록을 검토하고 있는 경우, 그 주기를 위해 사용할 제1 오프셋은 이전 주기의 마지막 적중에 의해 명시된 종료 오프셋에 의해 명시된다(즉, 이전 주기의 마지막 적중은 이 주기를 사용하기 위해 제1 오프셋을 제공한다). 그렇지 않으면(즉, 현재 주기가 예측된 주소 블록이 동작 캐시 태그 룩업(310)에 의해 검토되고 있는 제1 주기인 경우), 상이한 기술이 동작 캐시 태그 어레이(306)로부터 사용할 제1 오프셋을 식별하기 위해 사용된다.
더 구체적으로, 현재 주기가 동작 캐시 태그 룩업(310)이 현재 예측된 주소 블록을 검토하고 있는 제1 주기이면, 다음 중 하나가 참이다:
Figure pct00001
동작 캐시에 적중이 존재하는 다음 명령이 그 이전 예측된 주소 블록에 비해 다음 예측된 주소 블록에 속함을 나타낸 이전 예측된 주소 블록에 대한 동작 캐시에 적중이 존재했다(즉, 동작 캐시 태그 어레이(306)의 엔트리는 순차 예측된 주소 블록에 엔트리가 걸쳐 있다는 표시를 포함한다. 이 "스패닝(spanning)" 표시가 설정될 때, 종료 오프셋은 순차 예측된 주소 블록의 오프셋을 지칭한다).
Figure pct00002
이전 예측된 주소 블록의 마지막 명령은 명령 캐시 경로(303)에 의해 서비스되었다(즉, 그 마지막 명령에 대한 동작 캐시에 어떠한 디코딩된 동작도 저장되지 않았음); 또는
Figure pct00003
현재 예측된 주소 블록은 인출된 분기의 타깃을 표현한다.
동작 캐시 엔트리가 순차 예측된 주소 블록에 걸쳐 있음을 나타낸 이전 예측된 주소 블록에 적중된 동작 캐시 엔트리가 존재한 경우에, 그 엔트리로부터의 종료 오프셋은 현재 예측된 주소 블록에 제1 오프셋을 제공한다.
이전 예측된 주소 블록의 마지막 명령이 명령 캐시 경로(303)에 의해 서비스된 경우, 사용된 제1 오프셋은 예측된 주소 블록의 시작 오프셋이다. 일 구현예에서, 동작 캐시 태그는 이 경우에 대해 찾아지지 않을 것이고 명령 캐시 경로(303)가 사용될 것이다. 그러나, "스패닝" 동작 캐시 엔트리를 허용하지 않는 다른 구현은 동작 캐시 태그 적중을 루프 업(loop up)하고 적중의 경우 동작 캐시 경로(301)를 사용하도록 선택할 수 있다.
현재 예측된 주소 블록이 취해진 분기의 타깃을 표현하는 경우에, 사용된 제1 오프셋은 예측된 주소 블록의 시작 오프셋이다.
인덱스가 동작 캐시 태그 어레이(306)에 적용될 때, 다수의 엔트리가 동작 캐시 태그 룩업(310) 판독되고 사용된다. 각각의 엔트리는 태그, 시작 오프셋, 및 종료 오프셋(다음 명령 오프셋으로도 지칭됨)을 포함한다. 동작 캐시 엔트리의 시작 오프셋 및 태그 둘 모두와 방금 설명된 제1 오프셋 및 예측된 주소 블록의 태그 사이의 매치는 제1 엔트리에 대한 동작 캐시 적중을 시그널링한다. 제1 엔트리의 종료 오프셋은 제2 엔트리를 식별하기 위해 예측된 주소 블록의 태그와 또한 매칭한 다른 엔트리의 시작 오프셋과 비교된다. 제2 엔트리의 종료 오프셋은 또한, 본 명세서의 다른 곳에서 설명된 바와 같이 단일 주기로 다수의 엔트리에 대한 순차 적중 검출을 함께 연결하기 위해 사용된다. 동작 캐시 태그 룩업(310)은 다음 중 하나 이상이 발생할 때까지 동일한 주기로 이 동작을 반복한다: 단일 주기 동안의 순차 동작 캐시 엔트리의 최대 수에 도달되거나 가장 최근에 검토된 동작 캐시 태그 어레이 엔트리는 다음 오프셋이 예측된 주소 블록의 종료 오프셋을 초과함을 나타낸다.
동작 캐시는 다수의 적중이 단일 주기로 발생하는 것을 허용하는 몇몇 속성을 갖는다. 더 구체적으로, 단일 예측된 주소 블록에서의 모든 적중이 동일한 세트에 속한다는 사실과 조합된, 동작 캐시가 연관적으로 설정된다는 사실은 다수의 적중이 단일 주기로 발생하는 것을 허용한다. 이 속성으로 인해, 현재 예측된 주소 블록으로부터 얻어지는 인덱스가 동작 캐시 태그 어레이(306)에 적용될 때, 예측된 주소 블록에 속할 수 있는 모든 엔트리는 동일한 세트에서 발견된다. 인덱스가 동작 캐시 태그 어레이(306)에 적용되는 것에 응답하여, (세트 연관 캐시의 본질로 인해) 동작 캐시 태그 어레이(306)의 모든 엔트리가 판독된다. 동작 캐시 태그 룩업(310)은 따라서, 상기 설명된 제1 엔트리 오프셋에 기초하여 제1 엔트리를 얻을 수 있다. 그 다음, 동작 캐시 태그 룩업(310)은 이미 판독된 엔트리 중 하나의 오프셋과 매칭하도록 제1 엔트리의 다음 명령 주소를 사용함으로써 다음 엔트리를 얻고, 하나의 주기로 시퀀싱될 수 있는 엔트리의 수에 도달될 때까지 또는 판독할 순차 엔트리가 더 이상 존재하지 않을 때까지 이미 이 주기를 판독한 동작 캐시 태그 어레이(306)의 엔트리를 통해 그 방식으로 계속 시퀀싱할 수 있다(예컨대, 동작 캐시는 동작 캐시에서 적중하는 명령 이후의 다음 명령에 대한 디코딩된 마이크로 동작을 저장하지 않는다).
요약하면, 임의의 특정한 예측된 주소 블록에 대한 모든 엔트리가 단일 세트에 속한다는 사실은 인덱스가 동작 캐시 태그 어레이(306)에 적용될 때 예측된 주소 블록이 판독되는 측면에서 매칭할 수 있는 모든 엔트리에 대한 오프셋 및 다음 명령 주소를 의미한다. 이 사실은 클록 주기 기간 내에서 동작 캐시 태그 어레이(306)의 다수의 엔트리를 통해 연결하기 위해 단순한 순차 로직이 사용되는 것을 허용한다. 단일 예측된 주소 블록에 대한 엔트리가 다수의 세트에서 발견될 수 있다면, 인덱스가 동작 캐시 태그 어레이(306)에 여러 번 적용되어야 하기 때문에 다수의 엔트리를 통한 연결이 어렵거나 불가능할 것이고, 이는 더 오래 걸릴 것이다. 따라서, 동작 캐시 태그 어레이(306)의 다수의 엔트리를 통한 판독은 동작 캐시 경로(301)의 동작 속도를 개선하고 또한, 동작 캐시에서의 다수의 적중에 대한 정보가 단일 주기로 동작 캐시 큐(314)에 기록되는 것을 허용함으로써 동작 캐시 큐 엔트리의 압축성(compactness)을 개선한다.
임의의 특정한 예측된 주소 블록에 대한 모든 엔트리가 동작 캐시의 동일한 세트 내에 속하는 것을 보장하기 위해 임의의 기술적으로 실현 가능한 방식이 사용될 수 있을지라도, 하나의 특정 기술이 이제 설명된다. 이 기술에 따르면, 분기 예측기는 모든 예측된 주소 블록을 형성하여 주소가 64 바이트 정렬된 블록과 같은 특정한 정렬된 블록 크기 내에 있도록 한다. 예측된 주소 블록은 정렬된 경계에서 시작하거나 끝날 필요는 없지만, 이들은 정렬된 경계에 걸치도록 허용되지 않는다. 이 제한을 자연스럽게 준수하지 않는 분기 예측기(302)의 일 구현을 사용하는 경우, 부가적인 조합 로직은 정렬 경계를 공유된 인출 로직(305)이 프로세싱할 다수의 블록에 걸치게 하는 임의의 예측된 주소 블록을 분할하기 위해 분기 예측기(302)와 공유된 인출 로직(305) 사이에 삽입될 수 있다. 이 정렬은 예측된 주소 블록 내의 모든 정당한 시작 오프셋이 더 저차 비트에서만 상이하다는 것을 의미한다. 동작 캐시 태그 어레이(306)(세트를 정의함)에서 태그를 룩업하기 위해 사용된 인덱스는 이들 더 저차 비트 중 어느 것도 갖지 않는다. 이들 더 저차 비트 중 어느 것도 갖지 않음으로써, 인덱스는 단일 예측된 주소 블록에서 상이한 주소에 대해 달라질 수 없고 따라서, 그 예측된 주소 블록을 만족시키기 위해 필요한 임의의 특정한 동작 캐시 엔트리에 대해 세트가 동일해야 한다.
다음 명령 오프셋을 순차적으로 사용하여, 동작 캐시 태그 어레이(306)로부터 다수의 엔트리를 판독하는 방금 설명된 동작은 본 명세서에서 "동작 캐시 태그 어레이(306)로부터의 순차 태그 판독"으로서 또는 유사한 구문을 통해 언급될 수 있다.
일단 동작 캐시 태그 룩업(310)이 동작 캐시 태그 어레이(306)로부터의 순차 태그 판독이 현재 주기 동안 완료되었다고 결정했으면, 동작 캐시 태그 룩업(310)은 동작 캐시 큐(314)에 저장하기 위한 동작 캐시 큐 엔트리를 생성한다. 동작 캐시 큐 엔트리는 현재 주기에 대한 동작 캐시 태그 어레이(306)에 의해 표시된 각각의 적중에 대한 동작 캐시에서 인덱스 및 방식을 나타내는 정보를 포함하여, 마이크로 동작이 나중에 동작 캐시 데이터 어레이(322)로부터 판독될 수 있게 한다. 게다가, 각각의 동작 캐시 큐 엔트리는, (즉, 동작 캐시에서 캐싱된 마이크로 동작의 어떠한 대응하는 세트도 존재하지 않는 것으로 인해) 동작 캐시 큐 엔트리에 의해 표현된 제1 적중 바로 이전의 명령이 명령 캐시 경로(303)에 의해 서비스되어야 하는지의 여부의 표시를 포함한다. 이 표시는 본 명세서의 다른 곳에서 더 상세히 설명된, 프로그램 순서(즉, 실행되는 소프트웨어에 대해 실행된 명령의 시퀀스에 의해 표시된 순서)로 동작 큐(328)에 마이크로 동작을 저장하는 것을 돕는다.
인출 제어 로직(313)은 특정한 동작 캐시 큐 엔트리가 다음과 같이 제1 적중 바로 이전의 명령이 명령 캐시 경로(303)에 의해 서비스되어야 하는지의 여부의 이 표시를 포함하는지의 여부를 결정한다. 동작 캐시 큐 엔트리가 동작 캐시 태그 룩업(310)에 의해 특정한 예측된 주소 블록이 검토되는 제2 또는 이후의 주기에 대응하는 경우, 동작 캐시 큐 엔트리 바로 이전의 명령은 명령 캐시 경로(303)에 의해 서비스되지 않는데, 이는 그 명령이 단일 예측된 주소 블록에 대한 다중 주기 판독의 일부이기 때문이다. 따라서, 이전 주기로, 동작 캐시 태그 룩업(310)은 동작 캐시가 바로 이전 명령에 대해 디코딩된 마이크로 동작을 저장한다고 결정했다.
동작 캐시 큐 엔트리가 동작 캐시 태그 룩업(310)에 의해 특정한 예측된 주소 블록이 검토되는 제1 주기에 대응하는 경우, 이전 예측된 주소 블록이 동작 캐시에 의해 완전히 커버되었는지의 여부에 기초하여 결정이 행해진다. 이전에 예측된 주소 블록이 동작 캐시에 의해 완전히 커버된 경우에(방법(400)의 결정 블록(406) 밖의 "예, 전체 PAB를 커버함" 호로 또한 도시된 바와 같음), 동작 캐시 큐 엔트리 바로 이전의 명령은 명령 캐시 경로(303)에 의해 서비스되지 않는다. 이전 예측된 주소 블록이 동작 캐시에 의해 완전히 커버되지 않은 경우, 동작 캐시 큐 엔트리 바로 이전의 명령은 명령 캐시 경로(303)에 의해 서비스되지 않는다.
이제 공유된 인출 로직(305)의 명령 캐시 측으로 돌아오면, 명령 캐시 태그 룩업 회로(312)는 다음과 같이 예측 큐 엔트리를 소비하고 프로세싱한다. 명령 캐시 태그 룩업(312)은 적중을 식별하기 위해 예측된 주소 블록을 검토하고, 예측된 주소 블록의 인덱스를 얻으며 그 인덱스를 명령 캐시 태그 어레이(308)에 적용한다. 명령 캐시 태그 룩업(312)은 적중을 나타내는 정보를 인출 제어 회로(313)에 제공한다. 일부 구현예에서, 예측된 주소 블록의 크기가 명령 캐시 태그 룩업(312)이 하나의 주기로 찾을 수 있는 주소의 수보다 크게 되는 것이 가능하다. 이 상황에서, 명령 캐시 태그 룩업(312)은 프로그램 순서로 예측된 주소 블록의 상이한 주소 범위 부분을 통해 시퀀싱하고 이들의 주소 범위 부분의 각각에 대한 적중을 식별한다. 이들 적중에 기초하여, 인출 제어 회로(313)는 명령 캐시 큐(315)에 저장하기 위한 명령 캐시 큐 엔트리를 생성한다. 이들 명령 캐시 큐 엔트리는 인덱스 및 방식 정보와 같은, 명령 캐시에서 적중을 나타내는 정보뿐만 아니라, 특정 명령 캐시 큐 엔트리에 대해 경로 변경이 발생하는지의 여부를 나타내는 정보를 포함한다. 동작 캐시 경로(301)와 명령 캐시 경로(303)를 취하는 것 사이의 선택이 명령 캐시 적중 상태와 무관하기 때문에, 당업자는 명령 캐시 태그 룩업이 공유된 인출 로직(305) 또는 본 명세서에서 설명된 기술과 직접적으로 관련되지 않은 다양한 트레이드오프(tradeoff)에 기초한 명령 캐시 경로(303)에서 행해질 수 있음을 알게 될 것이다.
도 4b는 일례에 따른, 동작 캐시로부터 캐싱된 디코딩된 마이크로 동작을 인출하기 위해 동작 캐시 큐(314)의 엔트리를 프로세싱하기 위한 방법(430)의 흐름도이다. 도 1 내지 도 3의 맥락에서 설명될지라도, 당업자는 임의의 기술적으로 실현 가능한 순서로 도 4b의 단계를 수행하는 임의의 시스템이 본 발명의 범위 내에 속한다는 것을 이해할 것이다.
단계(432)에서, 동작 캐시 데이터 판독 회로(320)는 동작 캐시 큐(314)가 비어 있는지의 여부를 결정한다. 비어 있으면, 방법(430)은 단계(432)를 다시 수행한다. 비어 있지 않다면, 방법(430)은 단계(434)로 진행한다. 단계(434)에서, 동작 캐시 데이터 판독 회로(320)는 "헤드"(또는 "다음") 캐시 큐 엔트리에 대한 경로 변경 표시가 설정되는지의 여부를 결정한다. 경로 변경 표시가 설정되면(삭제되지 않음), 동작 캐시 큐 엔트리는 프로세싱되기 전에 명령 경로를 대기할 필요가 있고 따라서, 방법(430)은 단계(436)로 진행한다. 경로 변경 표시가 설정되지 않은 경우(삭제됨), 어떠한 대기도 발생하지 않고 방법(430)은 단계(438)로 진행한다. 단계(436)에서, 동작 캐시 데이터 판독 회로(320)는 동작 캐시 큐 엔트리에 의해 표현된 것들 이전의 모든 마이크로 동작이 동작 큐(328)에 기록되는지 또는 동작 큐(328)에 대해 디코딩되고 그에 기록되는 프로세스에서 현재 진행 중인지의 여부를 결정한다. 동작 캐시 큐 엔트리에 의해 표현된 것들 이전의 모든 마이크로 동작이 동작 큐(328)에 기록되거나 동작 큐(328)에 대해 디코딩되고 그에 기록되는 프로세스에서 현재 진행 중이면, 방법(430)은 단계(438)로 진행하고, 동작 캐시 큐 엔트리에 의해 표현된 것들 이전의 모든 마이크로 동작이 동작 큐(328)에 기록되거나 동작 큐(328)에 대해 디코딩되고 그에 기록되는 프로세스에서 현재 진행 중이지 않으면, 방법은 단계(436)로 복귀한다.
단계(438)에서, 동작 캐시 데이터 판독 회로(320)는 동작 캐시 큐 엔트리의 콘텐트에 기초하여 캐싱된 디코딩된 마이크로 동작을 얻기 위해 동작 캐시 데이터 어레이(322)를 판독한다. 단계(440)에서, 동작 캐시 데이터 판독 회로(320)는 판독된 마이크로 동작을 프로그램 순서로 동작 큐(328)에 기록한다.
단계(438 및 440)의 상세한 예가 이제 제공된다. 이 예에 따르면, 동작 캐시 데이터 판독 회로(320)는 동작 캐시 큐 엔트리에 대한 디코딩된 마이크로 동작을 얻기 위해 동작 캐시 큐 엔트리로부터 인덱스 및 태그를 얻고 그 인덱스 및 태그를 동작 캐시 데이터 어레이(322)에 적용한다. 동작 캐시 큐 엔트리가 다수의 적중에 대한 데이터를 저장할 수 있기 때문에, 동작 캐시 데이터 판독 회로(320)는 그 엔트리에 의해 표현된 적중의 횟수에 의존하여 동작 캐시 큐 엔트리 당 1회 이상 상기 룩업을 수행한다. 일부 구현예에서, 동작 캐시 데이터 판독 회로(320)는 단일 주기로 동일한 동작 캐시 큐(314) 엔트리로부터 다수의 룩업을 수행하고 다른 구현예에서, 동작 캐시 데이터 판독 회로(320)는 주기 당 하나의 룩업을 수행한다.
도 4c는 일례에 따른, 명령 바이트 버퍼(324)에 저장된 명령 바이트를 인출하고 디코딩하기 위한 방법(460)의 흐름도이다. 도 1 내지 도 3의 맥락에서 설명될지라도, 당업자는 임의의 기술적으로 실현 가능한 순서로 도 4c의 단계를 수행하는 임의의 시스템이 본 발명의 범위 내에 있다는 것을 이해할 것이다.
단계(462)에서, 명령 바이트 버퍼(324)는 명령 바이트 버퍼(324)가 비어 있는지의 여부를 결정한다. 명령 바이트 버퍼가 비어 있으면, 방법(460)은 단계(462)로 복귀하고 명령 바이트 버퍼가 비어 있지 않으면, 방법(460)은 단계(464)로 진행한다. 단계(464)에서, 명령 바이트 버퍼(324)는 명령 바이트 버퍼(324)의 "헤드" (또는 "다음") 엔트리에 대한 경로 변경 표시가 없는지(그 엔트리에 대해 경로 변경이 요구되지 않음을 나타냄)의 여부를 결정한다. 표시가 있는 경우(즉, 표시가 설정됨), 방법(460)은 단계(466)으로 진행하고 표시가 없는 경우(즉, 표시가 설정되지 않음), 방법(460)은 단계(468)로 진행한다.
단계(466)에서, 명령 바이트 버퍼(324)는 동작 캐시 경로(301)에 의해 서비스되는 프로그램 순서로 다음 엔트리 이전의 명령에 대한 모든 마이크로 동작이 동작 큐(328)에 기록되는지 또는 동작 큐(328)에 기록되기 위해 진행 중인지의 여부를 확인한다. 동작 캐시 경로(301)에 의해 서비스되는 프로그램 순서로 다음 엔트리 이전의 명령에 대한 모든 마이크로 동작이 동작 큐(328)에 기록되거나 동작 큐(328)에 기록되기 위해 진행 중이면, 방법은 단계(468)로 진행하고, 동작 캐시 경로(301)에 의해 서비스되는 프로그램 순서로 다음 엔트리 이전의 명령에 대한 모든 마이크로 동작이 동작 큐(328)에 기록되거나 동작 큐(328)에 기록되기 위해 진행 중이 아니면, 방법은 단계(466)로 복귀한다.
단계(468)에서, 명령 바이트 버퍼(324)는 디코딩하기 위해 헤드 엔트리를 판독하고 그 엔트리의 명령 바이트를 디코더(326)로 전송한다. 단계(470)에서, 디코더(326)는 디코딩된 마이크로 동작을 생성하기 위해 알려진 기술에 따라 명령 바이트를 디코딩한다. 단계(472)에서, 디코더(326)는 디코딩된 마이크로 동작을 프로그램 순서로 동작 큐(328)에 기록한다.
동작 큐(328)는 다른 후속 스테이지가 디코딩된 마이크로 동작을 소비할 수 있기 때문에 디코딩된 마이크로 동작을 재배열 버퍼(210) 및/또는 명령 실행 파이프라인(200)의 그들 스테이지에 제공한다. 명령 실행 파이프라인(200)의 나머지 부분은 마이크로 동작이 얻어지는 명령에 의해 표현된 소프트웨어를 실행하기 위해 알려진 기술에 따라 이의 마이크로 동작을 소비하고 실행한다. 일반적으로 알려진 바와 같이, 이러한 소프트웨어는 임의의 기술적으로 실현 가능한 결과를 생성하고 결과 데이터를 메모리에 기록하는 것, 입력/출력 디바이스와 인터페이스하는 것, 및 원하는 대로 다른 동작을 수행하는 것과 같은 임의의 기술적으로 실현 가능한 동작을 수행할 수 있다.
일단 디코딩되면, 명령 캐시는 임의의 기술적으로 실현 가능한 대체 정책에 기초하여, 동작 캐시를 업데이트하기 위해 디코딩된 동작을 사용한다. 이들 업데이트의 목적은 (예컨대, 최근 디코딩된 동작이 이후 프로그램 흐름에서 명령을 디코딩하는데 사용하기 위해 동작 캐시에서 이용 가능함을 확실하게 하기 위해) 동작 캐시 전류를 프로그램 실행의 상태로 유지하는 것이다.
명령 인출 및 디코드 유닛(202)이 파이프라인 유닛이라는 것을 이해해야 하며, 이는 하나의 스테이지(예컨대, 분기 예측기)에서의 작업이 상이한 스테이지(예컨대, 동작 캐시 태그 룩업(310))에서의 작업과 동일한 주기로 특정 명령 주소에 대해 수행될 수 있음을 의미한다. 동작 캐시 경로(301) 및 명령 캐시 경로(303)가 프로그램 순서로 디코딩된 마이크로 동작을 출력하기 위해 동기화될지라도, 동일한 주기로 동일하거나 상이한 예측된 주소 블록에 대해 작업을 수행할 수 있는 독립적인 병렬 유닛이라는 것을 또한 이해해야 한다.
상기 내용에 대한 하나의 변형은 명령 캐시 큐(315)를 사용하는 대신에, 명령 캐시 경로(303)가 명령 바이트를 얻을 주소 범위를 결정하기 위해 예측 블록을 직접적으로 판독할 수 있는 것이다. 이것을 용이하게 하기 위해, 인출 제어 회로(313)는 그 큐에 대한 헤드 엔트리로서 예측 큐(304)에 인출할 주소를 나타내는 정보를 기록할 수 있고, 명령 캐시 데이터 판독 회로(316)는 예측 큐(304)의 헤드 엔트리에 기초하여 사용할 다음 주소를 식별할 수 있다.
본 명세서에서 설명된 기술은 동작 캐시로부터 디코딩된 동작을 인출하는 것과 디코드 유닛을 사용하여 명령을 인출하고 디코딩하는 것 사이의 스위칭 시에 낮은 레이턴시를 갖는 동작 캐시를 가지는 명령 인출 및 디코드 유닛을 제공한다. 이 낮은 레이턴시는 작업이 반대 경로로부터의 출력을 대기해야 하는 것으로 인해 중단될 때까지 그 작업이 동작 캐시 경로 및 명령 캐시 경로 둘 모두를 통해 이동하는 것을 허용하는 동기화 메커니즘을 통해 달성된다. 동작 캐시 경로(301)(즉, 동작 캐시 큐(314)) 및 명령 캐시 경로(303)(즉, 명령 바이트 버퍼(324))에서의 분리 버퍼의 존재는 작업이 2개의 경로 사이의 동기화의 이유로 인해 진행하기 위해 완료될 때까지 그 작업이 보류되는 것을 허용한다. 단일 주기로 다수의 적중의 검출을 허용하는 특별히 구성된 동작 캐시 태그 어레이와 같은 다른 개선은 예를 들면, 예측 큐(304)로부터 엔트리가 소비되는 속도를 개선함으로써 대역폭을 개선하고 동작 캐시 데이터 어레이(322)로부터 단일 주기로 다수의 엔트리를 판독하는 구현을 가질 능력을 허용한다. 더 구체적으로, 예측 큐(304)가 동작 캐시 경로(301) 및 명령 캐시 경로(303) 둘 모두가 현재 엔트리에서 판독한 후에 다음 엔트리로 진행되기 때문에(예컨대, 동작 캐시 태그 룩업(310) 및 명령 캐시 태그 룩업(312)을 통해), 동작 캐시 태그 룩업(310)에 의해 주기 당 다수의 명령이 서비스되는 것을 허용하는 것은 예측 큐 엔트리가 소비되는 레이트를 빠르게 한다.
프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 방법이 제공된다. 방법은 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하는 단계; 제1 동작 캐시 큐 엔트리를 동작 캐시 큐에 저장하는 단계로서, 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 저장하는 단계; 동작 캐시로부터 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻는 단계; 및 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 동작 큐에 출력하는 단계를 포함한다.
프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 명령 인출 및 디코드 유닛. 명령 인출 및 디코드 유닛은 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하도록 구성된 공유된 인출 로직, 제1 동작 캐시 큐 엔트리를 저장하는 동작 캐시 큐로서, 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 동작 캐시 큐, 및 동작 캐시로부터 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻고, 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 동작 큐에 출력하는 동작 캐시 데이터 판독 로직을 포함한다.
프로세서는 프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 명령 인출 및 디코드 유닛 및 명령 실행 파이프라인의 나머지 부분을 포함한다. 명령 인출 및 디코드 유닛은 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하는 공유된 인출 로직, 제1 동작 캐시 큐 엔트리를 저장하는 동작 캐시 큐로서, 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 동작 캐시 큐, 및 동작 캐시로부터 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻고, 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 동작 큐에 출력하는 동작 캐시 데이터 판독 로직을 포함한다.
본 명세서에서의 개시내용에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 특징 및 소자가 특정한 조합으로 위에서 설명되었지만, 각각의 특징 또는 소자는 다른 특징 및 소자 없이 단독으로 또는 다른 특징 및 소자와 함께 또는 이들 없이 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서는 예로서, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관되는 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 주문형 반도체(Application Specific Integrated Circuit: ASIC), 필드 프로그래밍 가능한 게이트 어레이(FPGA) 회로, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 기계를 포함한다. 이러한 프로세서는 프로세싱된 하드웨어 기술 언어(HDL) 명령의 결과 및 넷리스트(컴퓨터 판독 가능한 매체에 저장될 수 있는 이러한 명령)를 포함하는 다른 중간 데이터를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 상기 개시내용의 특징을 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에서 그 다음, 사용되는 마스크워크(maskwork)일 수 있다.
본 명세서에서 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비 일시적 컴퓨터 판독 가능한 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비 일시적 컴퓨터 판독 가능한 저장 매체의 예는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 탈착 가능한 디스크와 같은 자기 매체, 자기 광학 매체, 및 CD-ROM 디스크, 및 디지털 다기능 디스크(DVD)와 같은 광학 매체를 포함한다.

Claims (20)

  1. 프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인(instruction execution pipeline)의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 방법으로서, 상기 방법은,
    상기 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하는 단계;
    제1 동작 캐시 큐 엔트리를 동작 캐시 큐에 저장하는 단계로서, 상기 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 저장하는 단계;
    상기 동작 캐시로부터 상기 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻는 단계; 및
    진행하기 위해 상기 명령 캐시 경로로부터 상기 신호를 수신하기 위해 대기할지의 여부를 나타내는 상기 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 단계는 상기 제1 동작 캐시 큐에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하기 전에 상기 명령 캐시 경로로부터의 상기 이전 마이크로 동작이 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중일 때까지 대기하는 단계를 포함하는, 방법.
  3. 제1항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내지 않고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 단계는 상기 명령 경로로부터의 이전 마이크로 동작을 대기하지 않고 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 출력하는 단계를 포함하는, 방법.
  4. 제1항에 있어서,
    단일 주기로, 동작 캐시 태그 어레이에서 상기 제1 예측된 주소 블록에 대한 다수의 적중(hit)을 통해 연결하고 상기 제1 동작 캐시 큐 엔트리에 각각의 이러한 적중에 대한 정보를 포함함으로써 상기 제1 동작 캐시 큐 엔트리를 생성하는 단계를 더 포함하는, 방법.
  5. 제1항에 있어서,
    상기 동작 큐로 출력하기 위해 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제2 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하는 단계를 더 포함하고, 상기 변환하는 단계는,
    상기 제2 예측된 주소 블록이 디코딩된 마이크로 동작이 상기 동작 캐시에 저장되지 않은 적어도 하나의 명령을 포함하는 것을 식별하고;
    명령 캐시 큐 엔트리를 명령 캐시 큐에 저장하고;
    상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 동작 캐시로부터의 이전 동작을 대기할지의 여부를 나타내는 표시와 함께, 명령 바이트 버퍼에서 상기 명령 캐시 큐 엔트리에 대한 명령 바이트를 얻고;
    상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시에 기초하는 시간에, 상기 명령 바이트 버퍼 엔트리에 대응하는 디코딩된 마이크로 동작을 얻기 위해 상기 명령 바이트를 디코딩하며; 그리고
    저장을 위해 상기 명령 바이트 버퍼 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력함에 의한 것인, 방법.
  6. 제5항에 있어서,
    상기 동작 캐시 경로로부터 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시는 상기 동작 캐시 경로로부터 상기 이전 동작을 대기할 필요를 나타내고; 그리고
    상기 명령 바이트를 디코딩하는 것은 상기 동작 캐시 경로로부터의 상기 이전 동작이 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중인 후에 상기 명령 바이트를 디코딩하는 단계를 포함하는, 방법.
  7. 제5항에 있어서,
    상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시는 상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할 필요가 없음을 나타내고; 그리고
    상기 명령 바이트를 디코딩하는 것은 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 동작 캐시 경로로부터의 이전 동작을 대기하지 않고 상기 명령 바이트를 디코딩하는 단계를 포함하는, 방법.
  8. 제1항에 있어서,
    상기 제1 예측된 주소 블록은 디코딩된 마이크로 동작이 동작 캐시에 저장되는 적어도 하나의 명령 및 디코딩된 동작이 상기 동작 캐시에 저장되지 않는 적어도 하나의 명령을 포함하는, 방법.
  9. 제1항에 있어서,
    상기 동작 큐에 저장된 상기 마이크로 동작을 실행하는 단계를 더 포함하는, 방법.
  10. 프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 명령 인출 및 디코드 유닛으로서,
    상기 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하도록 구성된 공유된 인출 로직;
    제1 동작 캐시 큐 엔트리를 저장하도록 구성된 동작 캐시 큐로서, 상기 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 동작 캐시 큐; 및
    상기 동작 캐시로부터 상기 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻고, 진행하기 위해 상기 명령 캐시 경로로부터 상기 신호를 수신하기 위해 대기할지의 여부를 나타내는 상기 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하도록 구성된 동작 캐시 데이터 판독 로직을 포함하는, 명령 인출 및 디코드 유닛.
  11. 제10항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 것은 상기 제1 동작 캐시 큐에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하기 전에 상기 명령 캐시 경로로부터의 상기 이전 마이크로 동작이 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중일 때까지 대기하는 것을 포함하는, 명령 인출 및 디코드 유닛.
  12. 제10항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내지 않고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 것은 상기 명령 경로로부터의 이전 마이크로 동작을 대기하지 않고 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 출력하는 것을 포함하는, 명령 인출 및 디코드 유닛.
  13. 제10항에 있어서,
    단일 주기로, 동작 캐시 태그 어레이에서 상기 제1 예측된 주소 블록에 대한 다수의 적중을 통해 연결하고 상기 제1 동작 캐시 큐 엔트리에 각각의 이러한 적중에 대한 정보를 포함함으로써 상기 제1 동작 캐시 큐 엔트리를 생성하도록 구성된 인출 제어 유닛을 더 포함하는, 명령 인출 및 디코드 유닛.
  14. 제10항에 있어서, 상기 공유된 인출 로직 및 상기 명령 캐시 경로는 상기 동작 큐로 출력하기 위해 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제2 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하도록 구성되고, 상기 변환하는 것은,
    상기 제2 예측된 주소 블록이 디코딩된 마이크로 동작이 상기 동작 캐시에 저장되지 않은 적어도 하나의 명령을 포함하는 것을 식별하고;
    명령 캐시 큐 엔트리를 명령 캐시 큐에 저장하고;
    상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 동작 캐시로부터의 이전 동작을 대기할지의 여부를 나타내는 표시와 함께, 명령 바이트 버퍼에서 상기 명령 캐시 큐 엔트리에 대한 명령 바이트를 얻고;
    상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시에 기초하는 시간에, 상기 명령 바이트 버퍼 엔트리에 대응하는 디코딩된 마이크로 동작을 얻기 위해 상기 명령 바이트를 디코딩하며; 그리고
    저장을 위해 상기 명령 바이트 버퍼 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력함에 의한 것인, 명령 인출 및 디코드 유닛.
  15. 제14항에 있어서,
    상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시는 상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할 필요를 나타내고; 그리고
    상기 명령 바이트를 디코딩하는 것은 상기 동작 캐시 경로로부터의 상기 이전 동작이 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중인 후에 상기 명령 바이트를 디코딩하는 것을 포함하는, 명령 인출 및 디코드 유닛.
  16. 제14항에 있어서,
    상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할지의 여부를 나타내는 상기 표시는 상기 동작 캐시 경로로부터의 상기 이전 동작을 대기할 필요가 없음을 나타내고; 그리고
    상기 명령 바이트를 디코딩하는 것은 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 동작 캐시 경로로부터의 이전 동작을 대기하지 않고 상기 명령 바이트를 디코딩하는 것을 포함하는, 명령 인출 및 디코드 유닛.
  17. 제10항에 있어서,
    상기 제1 예측된 주소 블록은 디코딩된 마이크로 동작이 동작 캐시에 저장되는 적어도 하나의 명령 및 디코딩된 동작이 상기 동작 캐시에 저장되지 않는 적어도 하나의 명령을 포함하는, 명령 인출 및 디코드 유닛.
  18. 프로세서로서,
    프로그램 순서로 디코딩된 마이크로 동작을 저장하는 동작 큐로 출력하기 위해, 그리고 명령 실행 파이프라인의 나머지 부분에 의한 후속 실행을 위해 제1 예측된 주소 블록의 명령 주소를 디코딩된 마이크로 동작으로 변환하기 위한 명령 인출 및 디코드 유닛; 및
    상기 명령 실행 파이프라인의 나머지 부분을 포함하되,
    상기 명령 인출 및 디코드 유닛은,
    상기 제1 예측된 주소 블록이 디코딩된 마이크로 동작이 동작 캐시 경로의 동작 캐시에 저장되는 적어도 하나의 명령을 포함하는 것을 식별하도록 구성된 공유된 인출 로직;
    제1 동작 캐시 큐 엔트리를 저장하도록 구성된 동작 캐시 큐로서, 상기 제1 동작 캐시 큐 엔트리는 진행하기 위해 명령 캐시 경로로부터 신호를 수신하기 위해 대기할지의 여부를 나타내는 표시를 포함하는, 상기 동작 캐시 큐; 및
    상기 동작 캐시로부터 상기 제1 동작 캐시 큐 엔트리에 대응하는 디코딩된 마이크로 동작을 얻고, 진행하기 위해 상기 명령 캐시 경로로부터 상기 신호를 수신하기 위해 대기할지의 여부를 나타내는 상기 제1 동작 캐시 큐 엔트리의 표시에 기초하는 시간에, 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하도록 구성된 동작 캐시 데이터 판독 로직을 포함하는, 프로세서.
  19. 제18항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 것은 상기 제1 동작 캐시 큐에 대응하는 상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하기 전에 상기 명령 캐시 경로로부터의 상기 이전 마이크로 동작이 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중일 때까지 대기하는 것을 포함하는, 프로세서.
  20. 제18항에 있어서,
    상기 표시는 상기 동작 큐에 기록되거나 상기 동작 큐에 대해 진행 중이도록 상기 명령 캐시 경로로부터의 이전 마이크로 동작을 대기할 필요를 나타내지 않고; 그리고
    상기 디코딩된 마이크로 동작을 상기 동작 큐에 출력하는 것은 상기 명령 경로로부터의 이전 마이크로 동작을 대기하지 않고 상기 제1 동작 캐시 큐 엔트리에 대응하는 상기 디코딩된 마이크로 동작을 출력하는 것을 포함하는, 프로세서.
KR1020217000977A 2018-06-21 2019-05-15 동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화 KR20210011494A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/014,715 US10896044B2 (en) 2018-06-21 2018-06-21 Low latency synchronization for operation cache and instruction cache fetching and decoding instructions
US16/014,715 2018-06-21
PCT/US2019/032540 WO2019245677A1 (en) 2018-06-21 2019-05-15 Low latency synchronization for operation cache and instruction cache fetching and decoding instructions

Publications (1)

Publication Number Publication Date
KR20210011494A true KR20210011494A (ko) 2021-02-01

Family

ID=68980502

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217000977A KR20210011494A (ko) 2018-06-21 2019-05-15 동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화

Country Status (6)

Country Link
US (1) US10896044B2 (ko)
EP (1) EP3811205A4 (ko)
JP (1) JP7523361B2 (ko)
KR (1) KR20210011494A (ko)
CN (1) CN112313619A (ko)
WO (1) WO2019245677A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10884751B2 (en) * 2018-07-13 2021-01-05 Advanced Micro Devices, Inc. Method and apparatus for virtualizing the micro-op cache
CN114201219B (zh) * 2021-12-21 2023-03-17 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6192465B1 (en) 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
JP2001043083A (ja) 1999-07-27 2001-02-16 Nec Corp 情報処理装置及び情報処理方法
US6950903B2 (en) 2001-06-28 2005-09-27 Intel Corporation Power reduction for processor front-end by caching decoded instructions
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US8103831B2 (en) * 2008-03-31 2012-01-24 Intel Corporation Efficient method and apparatus for employing a micro-op cache in a processor
US8433850B2 (en) * 2008-12-02 2013-04-30 Intel Corporation Method and apparatus for pipeline inclusion and instruction restarts in a micro-op cache of a processor
US20110276784A1 (en) 2010-05-10 2011-11-10 Telefonaktiebolaget L M Ericsson (Publ) Hierarchical multithreaded processing
GB2519103B (en) * 2013-10-09 2020-05-06 Advanced Risc Mach Ltd Decoding a complex program instruction corresponding to multiple micro-operations
US9529727B2 (en) 2014-05-27 2016-12-27 Qualcomm Incorporated Reconfigurable fetch pipeline
US10838871B2 (en) * 2016-11-07 2020-11-17 International Business Machines Corporation Hardware processor architecture having a hint cache
US10282296B2 (en) * 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line

Also Published As

Publication number Publication date
WO2019245677A1 (en) 2019-12-26
US10896044B2 (en) 2021-01-19
JP7523361B2 (ja) 2024-07-26
EP3811205A1 (en) 2021-04-28
US20190391813A1 (en) 2019-12-26
CN112313619A (zh) 2021-02-02
JP2021527887A (ja) 2021-10-14
EP3811205A4 (en) 2022-03-30

Similar Documents

Publication Publication Date Title
JP6523274B2 (ja) 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加
CN110069285B (zh) 一种检测分支预测的方法及处理器
CN109643237B (zh) 分支目标缓冲器压缩
US20200225956A1 (en) Operation cache
CN114201219B (zh) 指令调度方法、指令调度装置、处理器及存储介质
CN112579175B (zh) 分支预测方法、分支预测装置和处理器核
CN115769189A (zh) 指令地址转换和指令预取引擎
KR20210011494A (ko) 동작 캐시 및 명령 캐시 인출과 디코딩 명령을 위한 낮은 레이턴시 동기화
CN110806900B (zh) 一种访存指令处理方法及处理器
US7613910B2 (en) Information processing apparatus, method, and computer-readable recording medium for replacing an entry in a memory device
CN114168202B (zh) 指令调度方法、指令调度装置、处理器及存储介质
KR20030016314A (ko) 디코딩된 정보를 저장 및 제공하는 캐시를 갖는 장치 및이를 수행하는 방법
TWI231450B (en) Processor including fallback branch prediction mechanism for far jump and far call instructions
CN113168328B (zh) 处理器和管线处理方法
KR102697306B1 (ko) 분기 타깃 버퍼 압축
US20240118896A1 (en) Dynamic branch capable micro-operations cache
US20210109850A1 (en) Processing system and execute in place control method
KR20230058523A (ko) 분기 예측 리디렉션을 위한 대체 경로
JP2005275735A (ja) Cpuと記憶装置の間に配置される制御装置及びチップセット
CN114358180A (zh) 处理器的预取训练方法、处理装置、处理器和计算设备
CN114995884A (zh) 指令退休单元、指令执行单元及相关装置和方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal