KR102604192B1 - 연산 캐시 - Google Patents

연산 캐시 Download PDF

Info

Publication number
KR102604192B1
KR102604192B1 KR1020197019329A KR20197019329A KR102604192B1 KR 102604192 B1 KR102604192 B1 KR 102604192B1 KR 1020197019329 A KR1020197019329 A KR 1020197019329A KR 20197019329 A KR20197019329 A KR 20197019329A KR 102604192 B1 KR102604192 B1 KR 102604192B1
Authority
KR
South Korea
Prior art keywords
cache
entry
computational
immediate
fetch
Prior art date
Application number
KR1020197019329A
Other languages
English (en)
Other versions
KR20190085555A (ko
Inventor
데이비드 엔. 석스
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20190085555A publication Critical patent/KR20190085555A/ko
Application granted granted Critical
Publication of KR102604192B1 publication Critical patent/KR102604192B1/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
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • 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/0875Addressing 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
    • 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/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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Advance Control (AREA)

Abstract

연산(op) 캐시를 사용하기 위한 시스템 및 방법이 개시된다. 상기 시스템 및 방법은 이전에 디코딩된 명령들을 캐싱하기 위한 연산 캐시를 포함한다. 연산 캐시는 스레드들 간 명령들의 공유를 가능하게 하는 복수의 물리적으로 인덱싱되고 태깅된 명령을 포함한다. 연산 캐시는 여러 방법을 통해 체이닝되어 캐시 라인에서 복수의 명령을 서비스할 수 있게 한다. 연산 캐시는 용량을 최대화하기 위해 공유된 연산 스토리지와 즉시/변위 스토리지 간에 저장된다.

Description

연산 캐시
본 출원은 2016년 12월 9일자로 출원된 미국 특허 출원 제15/374,727호 및 2016년 12월 13일자로 출원된 유럽 출원 번호 EP16203863.2의 이익을 주장하며, 이 출원들은 본 명세서에서 완전히 제시된 것처럼 참고로 통합된다.
전통적으로, 명령들은 명령 캐시 페치 및 명령 디코드 스테이지들을 갖는 파이프 라인을 통해 디스페치된다. x86 프로세서들에서 사용되는 것들과 같은 가변 폭 명령들은 고정 길이 명령들과 비교하여 고 대역폭, 사이클당 다수의 명령 디코딩을 위한 상당한 추가 하드웨어 복잡성을 초래한다. 이는 다시 명령 스트림 파싱 및 디코딩을 위한 추가 파이프 라인 스테이지들을 필요로 하고, 이러한 추가 스테이지들은 추가 전력을 소비하고 명령 페칭을 리다이렉트하는 취해진 또는 잘못 예측된 브랜치 상에서와 같이, 파이프 라인을 재시작되어야 할 때 레이턴시를 증가시킨다. 이는 사이클당 전체 명령 대역폭을 제한하여, 성능에 영향을 미친다. 또한 그것은 리다이렉트로부터의 명령들이 파이프 라인 아래로 전파될 때까지 유용한 작업을 수행하지 않으면서 전력을 소비하는 더 많은 유휴 파이프 라인 스테이지를 초래한다. 이러한 추가 디코드 스테이지들을 바이패스하고 연산(op) 캐시(OC)에서 명령들의 서비스를 간소화할 필요가 있다.
상세한 설명은 첨부된 도면과 관련하여 예로서 주어진 상세한 설명으로부터 더 상세한 이해가 이루어질 수 있으며, 첨부된 도면들에서:
도 1은 특정 구현 예들에 따른 프로세서의 중앙 처리 유닛을 도시한다;
도 2는 도 1의 중앙 처리 유닛의 연산 캐시 내의 연산 캐시(OC) 엔트리를 도시한다;
도 3은 명령 캐시 라인들에 걸쳐 분할된 명령들의 기본 블록, 및 연산 캐시 내의 복수의 연관된 OC 엔트리를 도시한다;
도 4는 명령 캐시, 브랜치 예측 및 OC 파이프 라인의 프로세스의 흐름도를 도시한다;
도 5는 연산 페치 파이프 라인의 프로세스의 흐름도를 도시한다;
도 6은 OC 구축 파이프 라인의 프로세스의 흐름도를 도시한다;
도 7은 도 4의 명령 캐시, 브랜치 예측 및 OC 파이프 라인을 수행하는 방법을 도시한다;
도 8은 도 5의 OC 페치 파이프 라인을 수행하는 방법을 도시한다; 그리고
도 9는 하나 이상의 개시된 실시 예가 구현될 수 있는 예시적인 장치의 블록도이다.
연산 캐시(OC)는 이전에 디코딩된 명령들, 구체적으로는 원래의 가변 길이 형식에서 고정 길이 표준 형식으로 디코딩된 명령들의 캐시이다. OC는 전통적인 명령 캐시 페치 및 명령 디코드 파이프 라인 스테이지들을 사용하는 대신 디스페치를 위한 명령들을 제공할 수 있다. 명령들을 제공하는 OC는 리다이렉트 파이프 라인 레이턴시를 줄이고 더 넓은 병렬 명령 디스페치를 단순화하여, 사이클당 전체 명령 대역폭을 증가시킴으로써 사이클당 명령들(IPC, instructions per cycle)의 수를 개선한다. 명령들을 제공하는 OC는 명령을 다시 페칭 및 다시 디코딩할 필요를 회피함으로써, 그리고 파이프 라인 스테이지들이 리다이렉트들 상에서 유휴 상태인 시간을 줄임으로써 전력 사용량을 개선한다. OC는 캐시 라인에 임의의 수의 명령을 제공하기 위해 다수의 체이닝을 세트로 제공한다. OC는 물리적으로 인덱싱되고 태깅됨으로써 그것의 콘텐츠를 스레드들 간이 공유할 수 있게 한다. OC는 연산 스토리지를 즉시/변위 스토리지와 공유함으로써 용량을 최대화한다.
OC는 고정 폭 형식의 디코드된 명령들을 포함한다. 그에 따라, OC는 명령 경계들을 결정할 필요가 없으며, 바이트 스트림에서 개별 명령들을 선택하지 않아도 된다. 명령들은 OC를 사용 시 그것들의 구성 부분들(이를테면 접두부; 연산 코드(opcode); ModRM(모드(Mod), 레지스터(R) 및 메모리(M) 변수들에 기초한 어드레스 계산을 지정하는 연산 코드 다음의 바이트); SIB(스케일(S), 인덱스(I) 및 베이스(B)에 기초한 어드레스 계산을 지정하는 연산 코드 다음의 바이트); 및 예를 들어, 즉시/변위 필드들)로 분해될 필요가 없다.
OC를 사용하기 위한 시스템 및 방법이 개시된다. 상기 시스템 및 방법은 이전에 디코딩된 명령들의 기본 블록들을 캐싱하기 위한 OC를 포함하며, 여기서 명령들의 기본 블록은 브랜치의 타겟으로 시작되어 브랜치 명령으로 끝나고, 추가적으로, 그러한 블록이 캐시 라인 경계에 걸쳐 있을 경우, 그러한 경계들에서 타겟 기본 블록 및 하나 또는 수개의 순차 기본 블록으로 분할되며, 추가 순차 블록이 교차되는 각각의 연속적인 캐시 라인 경계에서 형성된다. OC는 복수의 물리적으로 인덱싱되고 태깅된 엔트리를 포함하여 그러한 엔트리들이 스레드들 간에 공유될 수 있게 한다. OC는 여러 방식을 통해 체이닝되어, 여러 OC 엔트리가 캐시 라인 내 다양한 복수의 명령을 서비스할 수 있게 한다. OC의 일부는 용량을 최대화하기 위해 연산 정보 또는 즉시/변위 값들 중 어느 하나를 저장할 수 있다.
상기 시스템 및 방법은 OC를 사용하여 캐시 라인 또는 취해진 브랜치의 끝까지 명령 페치를 수행하는 것을 포함한다. 이는 복수의 마이크로-태그에 대한 입력으로서 사용될 기본 블록의 예측된 페치 어드레스를 수신하는 단계, 수신된 예측된 페치 어드레스를 분리 큐에 기록하는 단계 및 수신된 페치 어드레스가 복수의 마이크로-태그 중 하나에 적중할지 여부를 결정하는 단계를 포함한다. 페치 어드레스가 복수의 마이크로-태그 중 하나에 적중할 경우, 연산 모드가 OC 모드로 전환된다. 그 다음 페치 어드레스는 연산 캐시 큐로 포워딩된다.
상기 시스템 및 방법은 OC 페치를 수행하는 것을 포함한다. 이는 OC 큐로부터 페치 어드레스를 판독하고 이를 사용하여 OC 태그 어레이에 액세스함에 따라 액세스된 OC 태그들이 OC 적중에 대해 체크하는 것을 포함한다. 비교가 적중을 반환하지 않을 경우, 페치는 전통적인 페치 처리를 위해 명령 캐시로 리다이렉트된다. 비교가 적중을 반환할 경우, OC 데이터 어레이가 판독되고 디코딩되며 모든 즉시/변위 값들, 연산들 및 마이크로-코드 엔트리 어드레스들이 출력된다. 즉시/변위 정보는 존재할 경우, 즉시/변위 큐에 인큐잉되고; 연산 엔트리는 연산 큐에 인큐잉되며; 임의의 기존의 마이크로-코드 엔트리-포인트 어드레스들은 엔트리 어드레스 큐에 인큐잉된다.
도 1은 특정 구현 예들에 따른 프로세서(100)의 중앙 처리 유닛(105)의 상위 레벨 블록도 및 흐름도이다. 처리 유닛(105)은 스케줄러 및/또는 실행 유닛(115)에 연산들(op들)을 제공하는 디코더 유닛(110)을 포함하지만, 이에 제한되는 것은 아니다. 디코더 유닛(110)은 명령 캐시(122) 및 OC(124)에 연결되는 브랜치 예측기(120)를 포함하지만, 이에 제한되는 것은 아니다. 명령 캐시(122)는 또한 디코더(126)에 연결된다. 디코더(126) 및 OC(124)는 연산 큐(128)에 연결된다.
스케줄러 및/또는 실행 유닛(115)은 정수 스케줄러 및/또는 실행 유닛(130) 및 부동 소수점 스케줄러 및/또는 실행 유닛(132)(둘 모두 캐시(134)에 연결됨)을 포함하지만, 이에 제한되는 것은 아니다. 캐시(134)는 또한 L2 캐시(136), 로드 큐들(138) 및 스토어 큐들(140)에 연결된다. 로드 큐들(138), 스토어 큐들(140) 및 캐시(134)는 로드 스토어(LS) 유닛(139)으로 총칭된다.
정수 스케줄러 및/또는 실행 유닛(130)은 스케줄러(151)(이는 산술 논리 유닛(ALU) 스케줄러들(ALSQ들)(152) 및 어드레스 생성 유닛(AGU들) 스케줄러들(AGSQ들)(154)을 포함함)에 연결되는 정수 재명명기(150)를 포함하지만, 이에 제한되는 것은 아니다. 스케줄러(151), 특히 ALSQ들(152) 및 AGSQ들(154)은 각각 ALU들(156) 및 AGU들(158)에 연결된다. 정수 스케줄러 및/또는 실행 유닛(130)은 또한 정수 물리적 파일 레지스터(160)를 포함한다.
부동 소수점 스케줄러 및/또는 실행 유닛(132)은 스케줄러(172)에 연결되는 부동 소수점 재명명기(170)를 포함하지만, 이에 제한되는 것은 아니다. 스케줄러(172)는 또한 승산기들(174) 및 가산기들(176)에 연결된다. 부동 소수점 스케줄러 및/또는 실행 유닛(132)은 또한 부동 소수점 물리적 파일 레지스터(178)를 포함한다.
파이프 라인 프로세서는 지속적 흐름의 명령들이 파이프 라인으로 공급될 것을 필요하다. 브랜치 예측기(120)는 어떤 명령들의 세트가 파이프 라인 프로세서에서 페칭되고 실행되어야 하는지를 예측한다. 이러한 명령들이 페칭되어 명령 캐시(122)에 저장되고, 명령 캐시(122)로부터 판독될 때 디코더(126)에 의해 연산들로 디코딩된다. OC(124)는 디코더(126)가 그것들을 생성할 때 연산들을 캐싱한다. 연산 큐(128)는 실행을 위한 연산들을 디스페칭하기 위해 디코더(126) 및 OC(124)로부터의 연산들을 저장하고 큐잉 업한다.
종래의 파이프 라인 프로세싱에서, 연산 큐는 로드 또는 스토어 연산들인 특정 연산들을 연산으로부터 디코딩된 제어 정보 및 연산들과 연관된 메모리 어드레스들과 같은 페이로드들을 홀딩하는 로드 큐 및/또는 스토어 큐에 직접 디스페칭한다. 예시의 목적을 위해, 스토어 큐는 연산 큐로부터 복수의 연산을 수락하고 디스페치 시 스토어 큐에 페이로드를 기록할 수 있다. 어드레스 생성 시, 스토어 큐는 그 다음 스케줄러로부터 큐 인덱스를 수신하여 처리 중인 스토어 엔트리를 지정한다. 스케줄러는 디스페치 페이로드를 판독하고, 이를 세그먼트화 체크를 위해 세그먼트화 로직으로, 그리고 연산 파이프 라인 상에서 가능한 선택을 위해 로드 큐로 보낸다. 즉, 종래의 파이프 라인 처리는 스토어 및 로드 큐들에 대하여 2 패스 기록 프로세스이다; 페이로드에 대한 디스페치 시 한 번, 메모리에서 어드레스를 생성하기 위한 어드레스 생성 시 다시 한 번.
일 구현 예에 따르면, 연산들은 종래의 파이프 라인 처리에 따라 로드 큐들(138) 및 스토어 큐들(140)에 직접 기록하는 대신, 단지 정수 스케줄러 및/또는 실행 유닛(130) 및 부동 소수점 스케줄러 및/또는 실행 유닛(132)만으로 디스페칭된다. 특히, 연산들은 (1) 정수 재명명기(150)를 통해 스케줄러(151)로; 그리고 (2) 부동 소수점 재명명기(170)를 통해 스케줄러(172)로 보내진다. 스케줄러(151)는 AGSQ(154)에 연산들에 대한 디스페치 페이로드들(예를 들어, 스토어 연산들에 대한 디스페치 페이로드들) 모두를 홀딩한다. 즉, AGSQ(154)는 적절한 로드 큐들(138) 및/또는 스토어 큐들(140)에서의 큐 엔트리가 이용 가능할 때까지 연산들(예를 들어, 로드 및 스토어 연산들)을 홀딩한다. 큐 엔트리가 이용 가능하고 레지스터들(160)에 대한 소스들이 준비되면, AGSQ(154)는 어드레스를 생성하고, 디스페치 페이로드를 판독하며, 디스페치 페이로드를 로드 큐들(138) 및/또는 스토어 큐들(140)로 보낸다.
도착순에 따른 연산 또는 유효한 큐들을 유지하기 위해, 모든 스토어 연산은 특정 큐 엔트리 또는 큐 식별자와 연관된다. 특히, 스케줄러(151)는 AGSQ(154)가 언제 어드레스 생성을 수행할 수 있는지 그리고 스케줄러(151)가 언제 저장된 데이터(즉, 디스페치 페이로드)를 스토어 큐(140)로 보낼 수 있는지를 알아야 한다. 따라서, 특정 큐는 특정 큐가 이용 가능할 때 스토어 큐(140)에 의해 AGSQ(154)에 전달된다.
로드 큐들(138) 및 스토어 큐들(140)은 스케줄러(151)(AGSQ(154) 및 ALSQ(152))가 어드레스 생성을 가능하게 하기 위해 가장 오래된 스토어 연산 스토어 큐 인덱스를 업데이트할 수 있도록 또는 그것들의 더 오래된 스토어 연산들이 할당 해제되어 그것들의 각각의 스토어 큐 엔트리들을 확보할 때 덜 오래된 스토어 연산들에 대한 스토어 데이터를 보내도록 스케줄러(151)(AGSQ(154) 및 ALSQ(152)에 커밋-할당 해제 신호를 보낸다. 이는 예를 들어, 로드 큐들(138) 및 스토어 큐들(140)로부터의 출력(도시되지 않음)을 스케줄러(151)(AGSQ(154) 및 ALSQ(152))의 입력에 추카함으로써 구현될 수 있다.
로드 연산들은 반드시 도착순이어야 하는 것은 아니고 명령들의 실행 순서를 제어하기 위해 당업자들에게 알려진 다른 기술들을 사용할 수 있다. 일 구현 예에서, 로드 연산들은 스토어 연산들과 유사하게 동작할 수 있다.
어드레스 생성이 AGSQ들(154)에 의해 수행되고 데이터/디스페치 페이로드들이 필요에 따라 로드 큐들(138) 및 스토어 큐들(140)에 저장되면, 중앙 처리 유닛(105)은 연산들을 실행한다. 로드 큐들(138) 및 스토어 큐들(140)은 각각, 로드 연산들에 대한 데이터를 반환하고 스토어 연산들에 대한 기록을 수행한다. 다른 유형들의 연산들에 대해, 스케줄러(151) 및 스케줄러(172)는 그것들의 각각의 소스들이 준비될 때 정수 스케줄러 및/또는 실행 유닛(130) 및 부동 소수점 스케줄러 및/또는 실행 유닛(132)에 연산들을 발행한다.
도 2는 OC(124) 내의 엔트리(200)를 도시한다. 엔트리(200)는 한 클럭 사이클에서 동시 디스페치를 위해 엔트리당 최대 8개의 연산을 홀딩하도록 설계된다. 동작 중, 일 구현 예에서, 엔트리(200)는 다음과 같이, 각각의 바이트 위치들에, 바이트 정보(250)로 도시된 바와 같이 할당된 74 바이트(총 592 비트)이다. 엔트리(200)는 엔트리 정보(210)를 포함한다. 엔트리(200)는 도 2에 연산들 0-7로 식별된 8개의 연산(220)에 대한 스토리지를 포함한다. 최대 4개의 마이크로-코드 명령에 대응하는 4개의 마이크로-코드 엔트리 포인트(Ucode EP)(230)에 대한 스토리지가 활용된다. 도 2에 도시된 바와 같이, 이러한 마이크로-코드 EP들(230)은 연산(220)(4)와 동일한 위치 그리고 그것의 대안에 저장된다. 일 구현 예에서, 연산들(220)은 바이트(250) 표현으로 도시된 바와 같이 7 바이트 길이이다. 즉시 및 변위(Imm/Disp) 정보(240)는 엔트리(200) 내에 포함된다. 일 구현 예에서, Imm/Disp 정보(240)는 엔트리(200)의 끝 부근에서 시작되도록 포맷팅되고 연산들(220)에 대한 스토리지와 부분적으로 겹쳐지는데, 이는 연산들(220)의 이 부분은 덜 빈번하게 사용되기 때문이다. 연산 위치들 5, 6 및 7은 필요에 따라 연산들 또는 즉시/변위 값들을 저장할 수 있다. 일 구현 예에서, Imm/Disp 정보(240)는 8개의 4 바이트 엔트리를 포함한다.
OC 마이크로-태그 콘텐츠는 엔트리(200)와 연관된다. 마이크로-태그 어레이는 엔트리 어레이(캐시의 데이터 부분) 및 전체 태그 어레이(OC 태그)와 동일한 인덱싱 및 방식들을 이용하는 별도의 물리적 구조이다. 논리적으로 마이크로-태그 어레이는 동일한 어레이의 부분으로 고려되지만, 물리적으로는 별도이고 파이프 라인의 상이한 지점에서 활용되므로, 그것들은 함께 하나의 통합된 어레이로 고려되지 않을 수 있다. 마이크로-태그 어레이는 원하는 엔트리가 OC에 있을 수 있거나 없다는 퀵 힌트를 제공하는 반면, 메인 OC 태그 어레이는 적중 또는 적중 실패에 대한 참 표시를 제공한다. OC 마이크로-태그 콘텐츠는 표 1에 설명되어 있다.
OC 태그 콘텐츠는 엔트리(200)와 연관된다. 태그 어레이는 별도의 물리적 구조이다. 태그 어레이는 엔트리 어레이(캐시의 데이터 부분) 및 마이크로-태그 어레이(OC 마이크로-태그)와 동일한 인덱싱 및 방식들을 포함한다. 논리적으로 태그 어레이는 동일한 어레이의 부분으로 고려되지만, 물리적으로는 별도이고 파이프 라인의 상이한 스테이지에서 활용되므로, 그것들은 함께 하나의 통합된 어레이로 고려되지 않을 수 있다. OC 태그 콘텐츠는 표 2에 설명되어 있다.
엔트리 정보(210)는 연산(220) 또는 즉시/변위 정보(240) 보다는 엔트리(200) 마다 있는 여러 종류의 비트들을 포함한다. 이러한 엔트리 정보(210)는 표 3에 도시된 정보를 포함한다.
각 엔트리는 0 내지 7로 번호가 지정된 최대 8개의 연산(220)에 대한 스토리지를 갖는다. 연산은 56 비트로 인코딩된다.
각 엔트리(200)는 최대 4개의 32-비트 즉시/변위 값(240)을 위한 전용 스토리지를 갖는다. 추가 즉시/변위(240) 값들(최대 8개)은 가장 높은 번호가 지정된 연산(220)(7)에서 시작되어 연산(220)(5)으로 아래쪽으로 내려가는(필요한 경우) 연산들(220)을 대체함으로써, 연산들(220)과 비트 스토리지를 공유한다. Imm/Disp 스토리지가 필요할 때, 이는 사용 가능한 연산들(220)의 수를 줄인다. 연산들(220)은 56 비트이고 Imm/Disp 정보(240)는 32 비트이기 때문에, 8개의 Imm/Disp 정보(240)를 갖는 엔트리는 최대 5개의 연산(220)을 포함할 수 있다. 64 비트인 Imm/Disp 정보(240)는 표 4에 도시된 바와 같이 두 개의 32-비트 위치를 취한다.
마이크로-코드 EP(230)는 엔트리가 임의의 마이크로 코딩된 명령들을 포함할 때, 연산들(220)(0-3)만이 유효한 연산들을 포함할 수 있도록 설계된다. 연산(220)(4)은 1-4 마이크로-코드 EP(230)를 저장하는 데 사용된다. 연산들(220)(5-7)은 이 경우 유효한 연산들을 포함할 수 없지만, 연산들(220)(5-7)은 여전히 Imm/Disp 정보(240) 스토리지를 위해 사용될 수 있다. 이는 임의의 마이크로 코딩된 명령들을 포함하는 엔트리에 최대 4개의 연산(220)이 저장될 수 있음을 의미한다. 마이크로-코딩된 명령은 여전히 그것의 엔트리 포인트 스토리지 이외에 정상 연산(normal operation)(220) 위치를 사용한다. 마이크로-코드 EP(230)는 14 비트이다.
도 3은 OC 엔트리들이 명령 캐시 라인들에서의 기본 블록들과 개념적으로 어떻게 정렬되는지의 예를 도시한다. 도 3은 두 개의 명령 캐시 라인에 걸쳐 있는 두 개의 기본 블록 및 복수의 연관된 OC 엔트리(200)을 도시한다. 여기서, 기본 블록들(300)은 네 개의 OC 엔트리(310a, b, c, d)를 포함한다. OC 엔트리들(310a, b, c, d)은 두 개의 캐시 라인(350a, b) 내에 정렬된다. 제1 OC 엔트리(310a)는 브렌치 타겟(330)에서 시작되는 기본 블록의 시작에 대응한다. 그것은 그러한 기본 블록의 8개의 디코딩된 명령을 포함한다. 제1 OC 엔트리(310a)가 완료되면(제1 캐시 라인(350a) 내에 완전히 포함된 것으로 도시됨), 제2 OC 엔트리(310b)가 저장된다. OC 엔트리(310b)에 대한 명령들이 또한 제1 캐시 라인(350a) 내에 포함된다. 이 경우, 단지 두 개의 명령만이 캐시 라인에 남아 있으므로, OC 엔트리(310b)에서의 단지 두 개의 연산만을 사용하고 나머지 연산 스토리지는 비어 있게 남겨둔다. OC 엔트리(310b)가 완료되면(제1 캐시 라인(350a)에 완전히 포함된 것으로 도시됨), 제3 OC 엔트리(310c)가 저장된다. 제3 OC 엔트리(310c)는 캐시 라인(350a)에서 마지막 명령으로 시작되어, 64B 경계가 캐시 라인(350b)으로 교차하여 이어진다. 이러한 명령은 OC 엔트리(310c)에서의 제1 연산 위치를 취하고, 캐시 라인(350b)에서의 다음(최대 7개) 명령이 OC 엔트리(310c)에서의 연산들의 나머지를 채운다. 제1 OC 엔트리(310a) 및 제2 OC 엔트리(310b)의 완료와 유사한 방식으로, 제3 OC 엔트리(310c)가 완료되면(제1 캐시 라인(350a) 및 제2 캐시 라인(350b) 양자에 있는 것으로 도시됨), 제4 OC 엔트리(310d)가 저장된다. 도시된 바와 같이, 제4 OC 엔트리(310d)는 제2 캐시 라인(350b) 내에 포함된다. 그것은 취해진 브랜치 또는 캐시 라인(350b) 내에 완전히 포함된 마지막 명령으로 끝날 수 있거나, 또는 예시의 목적을 위해 단지 취해진 브랜치로 끝난다.
두 개의 기본 블록(300)은 제1 기본 블록(300a) 및 제2 기본 블록(300b)(기본 블록들(300)로 총칭됨)을 포함한다. 기본 블록들(300)은 전체가 두 개의 인접한 캐시 라인(350) 내에 포함된다. 기본 블록들(300) 중 임의의 기본 블록은 특정 최대 크기 및 정렬일 수 있다. 본 구현 예에서 도시되고 논의된 바와 같이, 이러한 크기 및 정렬은 64B의 캐시 라인에 대응한다. 기본 블록들(300) 중 하나는 캐시 라인의 시작에서(캐시 라인으로 순차적으로 들어감) 또는 취해진 브랜치 타겟에서 시작된다. 기본 블록들(300) 중 하나는 캐시 라인의 끝에서(순차적으로 나옴) 또는 취해진 브랜치 명령의 마지막 바이트 중 어느 하나에서 끝난다. 구현 예에서, 캐시 라인(350)은 64B 정렬된 메모리 영역이다.
처음 두 OC 엔트리(310a, b)는 제1 기본 블록(300a)에 있다. 두 번째 두 OC 엔트리(310c, d)는 제2 기본 블록(300b)에 있다. 제3 OC 엔트리(310c)의 제1 명령(360)과 같이 기본 블록들(즉, 명령들이 다수의 바이트)에 걸쳐 있는 명령의 경우, 명령이 연관된 엔트리 및 기본 블록에 대해 약간의 여유가 있다. 일 구현 예에서, 캐시 라인들에 걸쳐 있는 명령들은 명령의 종료 바이트를 포함하는 캐시 라인(기본 블록)과 연관된다(도 3에서, OC 엔트리(310c)는 기본 블록(300b)과 연관됨). 그것은 캐시 라인에 걸쳐 있는 명령을 포함하는 엔트리는 항상 해당 명령을 엔트리의 첫 번째 명령으로 가질 것이라는 것을 의미한다.
일 구현 예에서, 기본 블록들(300) 중 하나는 임의의 수의 OC 엔트리(310)에 걸쳐 있다. 일 구현 예에서, 기본 블록이 임의의 OC 엔트리들(310)에 걸쳐 있는 것은 예측된 취해진 브랜치에서 태그들의 SequentialOffset 필드를 사용하여 체이닝 종점과 체이닝함으로써 발생한다. SequentialOffset 및 SequentialBasicBlock 필드들은 또한 기본 블록 내 마지막 OC 엔트리를 순차적인 기본 블록 내 첫 번째 OC 엔트리로 체이닝하는 것도 지원한다. 이러한 방식으로 OC 엔트리들의 체이닝이 여러 기본 블록에 걸쳐 이어질 수 있다.
또한 도 3에는 융합 명령도 도시되어 있다. 이러한 융합 명령은 후술될 것이다.
도 4는 OC 파이프 라인의 프로세스(400)의 흐름도를 도시한다. 프로세스(400)는 명령 캐시(IC) 모드로부터 연산 캐시 모드로의 파이프 라인의 전이를 제공한다. 리셋 시, 파이프 라인은 IC 모드에 있다. 즉, 명령 캐시를 통해 페치가 수행된다. IC 모드에서 모든 페치는 전통적인 명령 캐시 페치 및 디코드 파이프 라인 아래로 전달된다. 일 구현 예에 따르면, 프로세스(400)는 마이크로-태그가 적중인지를 결정하는 데 이용되어 페치가 OC 모드에서 OC 파이프 라인을 통해 서비스될 수 있게 한다.
프로세스(400)는 OC 마이크로-태그들을 체크하는 데 사용되는 페치 어드레스를 취하거나 수신하는 것을 시작한다. OC 마이크로-태그(420)는 페치 어드레스를 이용하여 OC 캐시에 적중이 있을지를 예측한다. 페치 어드레스는 분리 큐(DQ)(430)에 제공되고 DQ-바이패스 멀티플렉서(MUX)(440)에 입력된다. DQ(430)는 브랜치 예측(BP) 파이프 라인을 명령 캐시(IC) 파이프 라인(도시되지 않음) 및 OC 파이프 라인으에서 분리하여, 활성 파이프 라인의 기능이 정지될 때 페치 요청들이 큐잉 업할 수 있게 한다. DQ(430)는 페치 어드레스를 수신하고 OC 페치 리다이렉트(490)를 제공받아, DQ 바이패스 MUX(440)로 출력한다. 물리적 페치 어드레스가 마이크로-태그들에서 적중할 경우, 모드는 연산 캐시 모드로 전환된다. 이러한 매칭은 페치 파이프 라인에서 명령 시작 위치를 알 수 있는 유일한 시간이기 때문에 브랜치 타겟 페치들 및 리다이렉트 타겟 패치들에 대해서만 수행된다.
OC 마이크로-태그(420) 및 DQ(430)로부터의 정보가 MUX(440)에서 수신되고 적중이 결정되면, 명령 캐시 대 연산 캐시 모드 전이가 발생한다. 연산 캐시는 전통적인 페치 및 디코드 파이프 라인이 비어 있을 때까지 기능이 정지된다. 전통적인 페치 및 디코드 파이프 라인이 비어지면, 그것은 기능 정지 해제되어 디코드 파이프 라인으로부터 마지막 연산들이 전달된 후 사이클보다 이르지 않게 연산들이 연산 큐(OPQ)에 전달되기 시작한다.
연산 캐시 모드로 전이되면, 연산 캐시 큐(OCQ)(460) 및 MUX(470)는 MUX(440)로부터 물리적 페치 어드레스를 수신한다. OCQ(460)은 OC 파이프 라인의 기능이 정지될 때 페치 요청들이 큐잉 업될 수 있게 하고, 출력된 큐잉된 페치 어드레스를 OCQ-바이패스 멀티플렉서(MUX)(470)에 제공한다.
그 다음 페치 어드레스들은 OCQ(460)로부터 판독되거나, 또는 OCQ(460)가 비어 있을 경우, 새로운 어드레스가 도착할 때 OCQ(460)를 바이패스하여, 태그 판독부(480)에서 OC 태그 어레이 검색에 사용된다. 태그 어레이의 한 세트는 물리적 어드레스 비트들 10:6으로 구성된 세트 인덱스를 사용하여 판독되고, 세트의 8가지 방식의 각각에 대한 태그 어드레스들이 페치 어드레스와 비교된다. 8가지 방식 중 하나의 어드레스가 페치 어드레스와 일치할 경우(표 2에 포함된 다른 자격들과 함께), OC는 적중이고, 페치가 OC 파이프 라인에서 계속 처리된다. 어드레스가 일치하지 않을 경우, OC는 적중 실패이고 OC 페치 리다이렉트(490)가 시그널링된다(이는 도 5, 특히 태그 Cmp(520)와 관련하여 더 상세히 설명된다).
도 5는 OC 페치 파이프 라인의 프로세스(500)의 흐름도를 도시한다. 프로세스(500)는 페치 어드레스(505)를 수신하고 도 4와 관련하여 전술한 바와 같이 OCQ(460) 및 OCQ 바이패스 MUX(470)에 대한 입력으로서 어드레스를 제공함으로써 시작한다. OCQ(460)는 OC 파이프 라인의 기능이 정지될 때 수신되는 페치 어드레스들에 대한 스토리지를 제공하여, OC 파이프 라인을 페치 생성 로직에서 분리한다. MUX(470)는 OCQ(460)에 보류 중인 페치 어드레스가 없으면 페치 어드레스(505)를 선택하고, 그렇지 않으면 그것은 OCQ(460)에서 다음 보류 중인 어드레스를 선택하고 그것을 페치 어드레스와 함께, 선택된 태그들을 OC 태그 비교부(520)로 출력하는 태그 판독부(480)로 출력한다. 순차 오프셋(575)은 태그 판독부(480)를 갖는 루프로 구성되어 순차 OC 엔트리들의 체이닝을 제공한다.
연산 캐시 모드에서, IC는 더 이상 IC 마이크로-태그들을 판독하지 않고, 그것이 연산 캐시 마이크로-태그들을 판독하는 동안, 이는 단지 유효한 방식(들)을 결정하기 위한 것이고 전반적인 적중/적중 실패 또는 OC 와 IC 파이프 라인들 간의 조종을 결정하기 위한 것은 아니다. IC 페치 생성 로직은 그것이 OC 파이프 라인에서 리다이렉트를 수신할 때까지 순차 및 브랜치 타겟 페치들을 OC 파이프 라인에 전달하며, 이때 IC 모드로 들어가고 페치가 전통적인 명령 캐시 및 디코드 파이프 라인으로 전달된다. 이는 OC 파이프 라인이 IC 모드로 언제 다시 전환될지를 제어할 수 있게 하고, 또한 새로운 IC 모드 디코드 파이프가 기록한 후 OPQ(550)에 그 외 달리 기록될 수 있는 모드 전환 후에 OC 파이프 라인에 커밋되지 않은 연산들이 없음을 보장한다.
선택된 태그는 태그 비교부(cmp)(520)에서 페치 어드레스와 비교된다. 적중이 없으면, OC는 OC 페치 리다이렉트(490)를 통해 IC로 페치를 리다이렉트하고 모드는 다시 IC 모드로 전환된다. 태그 cmp(520)에서 이루어진 비교에 의해 결정된 적중이 있으면, 태그 cmp(520)는 OC 데이터 어레이 어드레스를 데이터 어레이 판독부(530)에 출력한다.  데이터 어레이 판독부(530)는 최대 8개의 연산을 포함하는 액세스된 OC 엔트리를 디코드(540)로 출력한다. 디코드(540)는 연산들 및 OC 엔트리에서의 다른 정보의 일부 간단한 디코드를 수행하고, 연산 큐(OPQ)(550), 즉시/변위 큐(IDQ)(560) 및 엔트리 어드레스 큐(EAQ)(570)에 출력을 제공한다. OPQ(550)은 디스페칭될 연산들을 큐잉한다. IDQ(560)은 즉시/변위 큐이고 EAQ(570)은 전술된 마이크로-코드 엔트리 포인트 큐이다.
OPQ(550)는 기계 파이프 라인의 레지스터 재명명 부분(150, 170)에 디스페치를 공급하는 큐이다. 일반적으로, 그러한 큐들은 파이프 라인들의 섹션들을 분리한다. OPQ(550)는 연산 캐시 파이프 라인 또는 전통적인 디코드 파이프 라인(연산 모드에 따라) 스테이지들을 디스페이 파이프 라인 스테이지들에서 분리한다. 이러한 분리는 연산 캐시 또는 전통적인 디코드 파이프 라인이 연산들을 생성할 수 있게 하고 다운스트림 파이프 라인 스테이지(이 경우 디스페치 스테이지)가 진전할 수 있는지 여부에 관계 없이 생산된 연산들에 대한 스토리지를 가질 수 있게 한다.
리다이렉트 및 재동기화는 도 5와 관련하여 전술한 정상 모드 전이보다 우선한다. 리다이렉트 타겟 페치들은 전술한 바와 같이 OC 마이크로-태그들과 매칭되고, 일치는 연산 캐시 모드로 전이를 일으키는 반면, 불일치는 리다이렉트 어드레스에서 IC 모드로 전이를 일으킨다. 타겟 페치들을 재동기화하면 때때로 IC 모드로 전이된다. 이렇게 하면 OC에서 융합된 명령들(아래 참조)이 디코딩되고 적절한 예외 처리를 위한 별도의 명령들로서 디스페칭된다.
일 구현 예에서, 특정 인접 명령들, 예를 들어, 비교 명령 다음 브랜치 명령은 효율성을 증가시키기 위해 단일 연산으로 조합되거나, 또는 융합될 수 있다. 그러한 경우들에서, OC 구축 로직은 일반적으로 도 3에 융합된 명령들로 도시된 바와 같이, 두 명령을 모두 커버하는 단일 OC 엔트리를 생성한다.
도 6은 전통적인 디코드 파이프 라인의 확장인 OC 구축 파이프 라인의 프로세스(600)의 흐름도를 도시한다. 프로세스(600)는 디코딩된 명령들의 시퀀스들을 OC에 구축한다. 구축 중, 디코딩된 명령들은 다음 중에서 가장 이른 시기까지 누적된다: (1) 8번째 연산이 획득되거나, (2) 8번째 Imm/Disp가 획득되거나, (3) 연산과 Imm/Disp 공유 공간 사이의 충돌이 발생되거나, (4) 임의의 마이크로 코딩된 명령들이 있는 경우 4번째 연산, (5) 캐시 라인의 끝을 지나 확장되는 명령에 직면하거나, (6) 취해진 것으로 예측된 브랜치 명령에 직면하거나, 또는 (7) 연관된 브랜치 예측과 함께 두 개보다 많은 명령에 직면.
OC에 제공되는 페치 어드레스들은 브랜치 타겟 어드레스들 또는 순차 페치 어드레스들 중 어느 하나이고, 후자는 연속적인 64B 블록들을 가리킨다. 페치 윈도우가 취해진 것으로 예측된 브랜치 명령을 포함할 때, 페치 어드레스는 캐시 라인 내의 이러한 명령의 마지막 바이트를 찾아내는 페치 윈도우 종료 오프셋을 수반한다. OC 엔트리 구축 프로세스 동안, 이러한 페치 윈도우 종료 오프셋은 구축을 멈추어야 하는 위치를 나타낸다. OC 페치 프로세스 동안, 이는 OPQ로 보내질 마지막 연산을 나타낸다. 브랜치가 취해진 것으로 예측되지 않았을 때 OC 엔트리가 구축되었다면, EntryInfo 210 NumOps 필드에 의해 표시되는 것보다 이전 연산 위치에서 연산 디스페치를 종료시키는 중간 출구 지점을 야기할 것이다.
OC 엔트리가 조건부이고 취해진 것으로 예측된 제1 브랜치로 구축될 경우, 추후에 OC로부터 엔트리가 페칭될 때, 브랜치 이후의 순차적인 명령들은 필요하지만 OC 엔트리에는 존재하지 않기 때문에 조건부 브랜치가 취해지지 않는다고 예측되면 적중 실패를 생성할 수 있다. 이 경우, 페치는 완료디지 못한 경로에 대한 연산들을 생성하기 위해 전통적인 처리를 위한 IC로 리다이렉트되고, 새로운 OC 엔트리가 이 경로에 대해 브랜치 다음의 첫 번째 명령의 시작점으로 시작된다.
프로세스(600)는 연산 캐시 엔트리들의 구축을 도시한다. 프로세스(600)에서, 디코더(610)(IC 페치 파이프 라인에서의 전통적인 디코더)는 사이클당 최대 4개의 디코딩된 명령(op) 및 (존재할 때) 연관된 imm/disp 값들 및/또는 마이크로-코드 엔트리 포인트들을 OC 엔트리 어큐뮬레이터(620)로 출력한다. OC 엔트리 어큐뮬레이터(620)는 어셈블링된 OC 엔트리 콘텐츠 및 연관된 페치 어드레스들을 OC 구축 큐(OCBQ)(630)에 출력한다. OCBQ(630)는 차례로 OC 마이크로-태그 어레이, OC 태그 어레이 및 OC 데이터 어레이에 각각 기록하기 위해 OC 마이크로-태그 라이터(640), OC 태그 라이터(650) 및/또는 OC 데이터 라이터(660)에 엔트리 및 태그들을 출력한다. OCBQ(630)은 여러 OC 엔트리 및 태그를 그것들의 OC 스토리지 위치들에 기록될 수 있을 때까지 버퍼링을 제공한다.
일 구현 예에서, 전력을 절감하고 적중률을 향상시키기 위해, OC는 자주 사용되는 캐시 라인들 만을 구축한다. 명령 캐시 액세스 수가 구축 제한자로서 사용된다.
명령 캐시 위의 메모리 계층(즉, 명령 캐시에서 적중 실패된 요청)에서 만족된 요구 또는 프리페치 요청에 대응하는 페치에 대한 액세스 카운트는 0이다. 액세스 카운트는 명령 캐시에서 적중하는 모든 후속 페치에 대해 하나이다. 이러한 액세스 수 구현(1에서 포화)은 명령 캐시 태그들에 임의의 스토리지를 필요로 하지 않는 대신, 명령 캐시에서 페치가 적중되었는지 적중 실패되었는지에 따른다.
추가 단순화로서, 일 구현 예에서, 명령 캐시 태그 적중이 액세스 수에 대한 프록시로서 사용된다(태그 적중 실패는 0의 액세스 수에 대응하고, 태그 적중은 1의 액세스 수에 대응한다). 이 기술의 정확성은 태그 정보의 서브 세트를 사용하기 때문에 명령 캐시 태그 앨리어싱의 경우를 제외하고는 높다.
일 구현 예에서, 각 명령 캐시 라인과 연관된 하나 이상의 수 비트를 실제로 구현하는 기법이 사용되며, 이는 태그 비트들을 요한다.
페치가 IC 모드에 있을 때, OC 파이프 라인은 구축 모드로 들어갈 수 있다. 구축 모드는 위에 표시된대로 디코드 파이프 라인에서 전달되는 연산들을 기반으로 시작되고 중지된다.
일 구현 예에서 연산들의 구축은 명령이 IC 모드에서 페칭되고 그것이 브랜치 타겟, 디코드 리다이렉트 타겟(재동기화 제외) 또는 OC 리다이렉트 타겟이며 그것의 대응하는 캐시 라인이 명령 캐시 액세스 수 구축 자격을 충족할 때 시작된다.
일 구현 예에서, 페치가 OC 모드로 전환되거나, 명령의 대응하는 캐시 라인이 명령 캐시 액세스 수 구축 자격을 충족하지 못하거나, 명령이 재동기화 타겟이거나, 프로세서의 작동 모드가 명령 디코드에 영향을 미치는 방식으로 변경되거나, 또는 불법 또는 불완전한 명령이 감지되거나 무효 프로브가 구축 파이프 라인에서 실행중인 명령들에 적중할 때 연산들의 구축이 중지된다.
도 7은 OC를 사용하여 캐시 라인 또는 취해진 브랜치의 끝까지 명령 페치를 수행하는 방법(700)을 도시한다. 방법(700)은 710 단계에서 마이크로-태그에 대한 입력으로서 사용될 예측된 페치 타겟 어드레스를 수신한다. 720 단계에서, 예측된 페치 어드레스는 DQ에 기록된다. 730 단계에서, 예측된 페치 어드레스가 마이크로-태그(IC 모드에서 선택적)에 적중하는지 여부가 결정된다. 740 단계에서, 730 단계의 결정에 기초하여 모드들(IC/OC)이 전환될 필요가 있는지 결정된다. 750 단계에서, 페치 어드레스는 OC 모드로 전환되거나 남아있을 때 연산 캐시 큐에 기록된다. 760 단계에서, 태그가 OC 태그 어레이로부터 판독된다.
도 8은 도 5의 OC 페치 파이프 라인을 수행하는 800 방법을 도시한다. 방법(800)은 810 단계에서 OC 태그 어레이로부터 태그를 판독하는 단계를 포함한다. 820 단계에서, 페치 어드레스는 태그 어레이 내의 태그들과 비교된다(8 방식). 830 단계에서, 820 단계의 비교에서 적중이 있다면, 데이터 어레이가 판독된다. 820 단계에서 적중이 없는 경우, 840 단계에서, OC 페치 리다이렉트가 발생하고 방법(800)은 방법(700)의 710 단계로 되돌아간다.
830 단계에서 데이터 어레이가 판독된 후, 850 단계에서 데이터 어레이 출력(액세스된 OC 엔트리)에 대해 비교적 단순한 디코딩이 수행된다. 860 단계에서, OPQ, IDQ 및 EAQ로의 출력들이 이루어진다. 870 단계에서, op가 OPQ에 인큐잉된다. 880 단계에서, 즉시/변위 값이 IDQ에 인큐잉된다. 890 단계에서, 마이크로-코드 엔트리가 EAQ에 인큐잉된다.
도 9는 하나 이상의 개시된 실시 예가 구현될 수 있는 예시적인 장치(900)의 블록도이다. 장치(900)는 예를 들어 컴퓨터, 게임 장치, 핸드 헬드 장치, 셋톱 박스, 텔레비전, 이동 전화 또는 태블릿 컴퓨터를 포함할 수 있다. 장치(900)는 프로세서(902), 메모리(904), 저장 장치(906), 하나 이상의 입력 장치(908) 및 하나 이상의 출력 장치(910)를 포함한다. 장치(900)는 또한 선택적으로 입력 드라이버(912) 및 출력 드라이버(914)를 포함할 수 있다. 장치(900)는 도 9에 도시되지 않은 추가 구성요소들을 포함할 수 있는 것으로 이해된다.
프로세서(902)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이 상에 위치한 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함할 수 있으며, 여기서 각 프로세서 코어는 CPU 또는 GPU 일 수 있다. 메모리(904)는 프로세서(902)와 동일한 다이 상에 위치될 수 있거나 또는 프로세서(902)와 별도로 위치될 수 있다. 메모리(904)는 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM 또는 캐시와 같은 휘발성 또는 비 휘발성 메모리를 포함할 수 있다.
스토리지(906)는 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광 디스크 또는 플래시 드라이브와 같은 고정식 또는 착탈식 스토리지를 포함할 수 있다. 입력 장치들(908)은 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 인식 스캐너 또는 네트워크 접속부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)를 포함할 수 있다. 출력 장치들(910)은 디스플레이, 스피커, 프린터, 햅틱 피드백 장치, 하나 이상의 조명, 안테나, 또는 네트워크 접속부(예를 들어, 무선 IEEE 802 신호의 송신 및/또는 수신을 위한 무선 근거리 영역 네트워크 카드)를 포함할 수 있다.
입력 드라이버(912)는 프로세서(902) 및 입력 장치들(908)과 통신하고, 프로세서(902)가 입력 장치들(908)로부터 입력을 수신하게 한다. 출력 드라이버(914)는 프로세서(902) 및 출력 장치들(910)과 통신하고, 프로세서(902)가 출력 장치들(910)에 출력을 송신하게 한다. 입력 드라이버(912) 및 출력 드라이버(914)는 선택적 구성요소들이고, 입력 드라이버(912) 및 출력 드라이버(914)가 존재하지 않는 경우 장치(900)는 동일한 방식으로 작동할 것이라는 것에 유의한다.
본 명세서의 개시에 기초하여 많은 변형이 가능하다는 것을 이해해야 한다. 비록 특징 및 요소가 특정 조합으로 상술되었지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로 또는 다른 특징 및 요소와 함께 또는 다양한 조합으로 사용될 수 있다.
제공된 방법은 범용 컴퓨터, 프로세서 또는 프로세서 코어로 구현될 수 있다. 적합한 프로세서는 예를 들어 범용 프로세서, 특수 목적 프로세서, 종래 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로 프로세서, DSP 코어와 관련된 하나 이상의 마이크로 프로세서, 제어기, ASIC(Application Specific Integrated Circuits), FPGA(Field Programmable Gate Arrays) 회로, 임의의 다른 유형의 집적 회로(IC) 및/또는 상태 머신을 포함할 수 있다. 이러한 프로세서는 처리된 하드웨어 설명 언어(HDL) 명령의 결과 및 넷리스트(컴퓨터 판독 가능 매체에 저장될 수 있는 명령)를 포함하는 다른 중간 데이터를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 마스크 워크들(maskworks)일 수 있으며, 이는 마스크 제조 공정에서 구현될 수 있으며, 이는 반도체 제조 공정에서 사용되어 실시 예의 측면을 구현하는 프로세서를 제조한다.
본 명세서에서 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비 일시적 컴퓨터 판독 가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비 일시적 컴퓨터 판독 가능 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 장치, 내부 하드 디스크 및 이동식 디스크와 같은 자기 매체, 광학 매체 및 CD-ROM 디스크 및 DVDs(digital versatile disk)와 같은 광학 매체를 포함할 수 있다.

Claims (20)

  1. 연산 캐시(OC, operation cache)를 이용하여 캐시 라인 또는 취해진 브랜치의 끝까지 명령 페치(instruction fetch)를 수행하는 방법으로서,
    상기 OC의 예측된 페치 어드레스를 수신하고 그리고 수신된 상기 예측된 페치 어드레스와 복수의 마이크로-태그를 비교하는 단계 - 상기 복수의 마이크로 태그 각각은 엔트리가 상기 OC 내에서 발견되는지에 대한 표시를 제공함 - 와;
    수신된 상기 예측된 페치 어드레스를 분리 큐에 기록하는 단계와;
    기록된 상기 페치 어드레스가 상기 복수의 마이크로-태그 중 하나와 적중할 경우, 상기 페치 어드레스를 op-캐시 큐에 기록하는 단계와; 그리고
    상기 페치 어드레스와 연관된 태그를 판독하는 단계를 포함하고,
    상기 페치 어드레스와 연관된 태그는 상기 엔트리의 적중 표시를 업데이트하는, 방법.
  2. 청구항 1에 있어서, 상기 OC는 캐시 라인 내 복수의 명령을 서비스하기 위해 다수의 체이닝을 세트로 제공하는, 방법.
  3. 청구항 1에 있어서, 상기 OC는 연산 캐시 및 즉시/변위(immediate/displacement) 캐시를 포함하는 단일 스토어에 저장된 데이터를 포함하는, 방법.
  4. 청구항 1에 있어서, 상기 OC는 연산 캐시 및 즉시/변위 캐시의 개별 스토어에 저장된 데이터를 포함하는, 방법.
  5. 청구항 1에 있어서, 상기 OC는 연산 데이터 및 즉시/변위 데이터를 포함하는 단일 스토어에 저장된 데이터를 포함하는, 방법.
  6. 청구항 5에 있어서, 상기 단일 스토어는 연산 스토리지 및 즉시/변위 스토리지를 포함하는, 방법.
  7. 청구항 5에 있어서, 상기 단일 스토어는 연산 스토리지 및 마이크로 엔트리 포인트 스토리지를 포함하는, 방법.
  8. 연산 캐시(OC) 페치를 수행하는 방법으로서,
    OC 태그 어레이로부터 태그를 판독하는 단계;
    상기 판독된 태그의 페치 어드레스를 상기 태그 어레이에서의 태그들과 비교하는 단계;
    상기 비교가 상기 태그 어레이에서 적중을 반환하지 않으면, 상기 페치를 명령 캐시로 리다이렉트시키는 단계;
    상기 비교가 상기 태그 어레이에서 적중을 반환하면, 상기 태그 어레이에서 적중된 상기 태그와 연관된 데이터 어레이를 판독하는 단계로서, 상기 데이터 어레이는 즉시/변위 엔트리, 연산 엔트리 및 마이크로-코드 엔트리를 포함하는, 상기 데이터 어레이를 판독하는 단계;
    판독된 상기 데이터 어레이를 디코딩하는 단계;
    판독된 상기 데이터 어레이로부터 디코딩된 상기 즉시/변위 엔트리, 연산 엔트리 및 마이크로-코드 엔트리를 출력하는 단계;
    상기 즉시/변위 엔트리를 즉시/변위 큐에 인큐잉(enqueueing)하는 단계;
    상기 연산 엔트리를 연산 큐에 인큐잉하는 단계; 및
    상기 마이크로-코드 엔트리를 엔트리 어드레스 큐에 인큐잉하는 단계를 포함하는, 방법.
  9. 청구항 8에 있어서, 상기 OC는 캐시 라인 내 복수의 명령을 서비스하기 위해 다수의 체이닝을 세트로 제공하는, 방법.
  10. 청구항 8에 있어서, 상기 OC는 연산 캐시 및 즉시/변위 캐시를 포함하는 단일 스토어에 저장된 데이터를 포함하는, 방법.
  11. 청구항 8에 있어서, 상기 OC는 연산 캐시 및 즉시/변위 캐시의 개별 스토어에 저장된 데이터를 포함하는, 방법.
  12. 청구항 8에 있어서, 상기 OC는 연산 데이터 및 즉시/변위 데이터를 포함하는 단일 스토어에 저장된 데이터를 포함하는, 방법.
  13. 청구항 12에 있어서, 상기 단일 스토어는 연산 스토리지 및 즉시/변위 스토리지를 포함하는, 방법.
  14. 청구항 12에 있어서, 상기 단일 스토어는 연산 스토리지 및 마이크로 엔트리 포인트 스토리지를 포함하는, 방법.
  15. 연산 캐시(OC)로서,
    스레드들 간에 공유된 적어도 하나의 물리적으로 인덱싱되고 태깅된 디코딩된 명령을 포함하고, 상기 적어도 하나의 물리적으로 인덱싱되고 태깅된 디코딩된 명령에 대한 태깅은 상기 명령의 물리적 어드레스 비트들에 연관되며,
    상기 디코딩된 명령의 물리적 인덱싱 및 태깅은 상기 OC로부터 상기 물리적으로 인덱싱되고 태깅된 디코딩된 명령의 선택을 가능하게 하는, 연산 캐시(OC).
  16. 청구항 15에 있어서, 상기 OC는 캐시 라인 내 복수의 명령을 서비스하기 위해 다수의 체이닝을 세트로 제공하는, 연산 캐시(OC).
  17. 청구항 15에 있어서, 상기 OC는 연산 캐시 및 즉시/변위 캐시의 개별 스토어에 저장된 데이터를 포함하는, 연산 캐시(OC).
  18. 청구항 15에 있어서, 상기 OC는 연산 데이터 및 즉시/변위 데이터를 포함하는 단일 스토어에 저장된 데이터를 포함하는, 연산 캐시(OC).
  19. 청구항 18에 있어서, 상기 단일 스토어는 연산 스토리지 및 즉시/변위 스토리지를 포함하는, 연산 캐시(OC).
  20. 청구항 18에 있어서, 상기 단일 스토어는 연산 스토리지 및 마이크로 엔트리 포인트 스토리지를 포함하는, 연산 캐시(OC).
KR1020197019329A 2016-12-09 2017-12-05 연산 캐시 KR102604192B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/374,727 2016-12-09
US15/374,727 US10606599B2 (en) 2016-12-09 2016-12-09 Operation cache
EP16203863.2 2016-12-13
EP16203863.2A EP3333700A1 (en) 2016-12-09 2016-12-13 Operation cache
PCT/US2017/064782 WO2018106736A1 (en) 2016-12-09 2017-12-05 Operation cache

Publications (2)

Publication Number Publication Date
KR20190085555A KR20190085555A (ko) 2019-07-18
KR102604192B1 true KR102604192B1 (ko) 2023-11-20

Family

ID=57754941

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197019329A KR102604192B1 (ko) 2016-12-09 2017-12-05 연산 캐시

Country Status (6)

Country Link
US (2) US10606599B2 (ko)
EP (1) EP3333700A1 (ko)
JP (1) JP7097361B2 (ko)
KR (1) KR102604192B1 (ko)
CN (1) CN110050263A (ko)
WO (1) WO2018106736A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10846095B2 (en) * 2017-11-28 2020-11-24 Advanced Micro Devices, Inc. System and method for processing a load micro-operation by allocating an address generation scheduler queue entry without allocating a load queue entry
GB2577738B (en) * 2018-10-05 2021-02-24 Advanced Risc Mach Ltd An apparatus and method for providing decoded instructions
US11169810B2 (en) * 2018-12-28 2021-11-09 Samsung Electronics Co., Ltd. Micro-operation cache using predictive allocation
CN112612519B (zh) * 2020-12-11 2022-06-21 成都海光微电子技术有限公司 一种取指方法、装置、电子设备及存储介质
US20230305847A1 (en) * 2022-03-25 2023-09-28 Nokia Solutions And Networks Oy Multi-indexed micro-operations cache for a processor
US20240118896A1 (en) * 2022-10-05 2024-04-11 Nokia Solutions And Networks Oy Dynamic branch capable micro-operations cache

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140025894A1 (en) 2012-07-18 2014-01-23 Electronics And Telecommunications Research Institute Processor using branch instruction execution cache and method of operating the same

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59206947A (ja) * 1983-05-10 1984-11-22 Nec Corp マイクロプログラム制御装置
WO1991004536A1 (en) * 1989-09-20 1991-04-04 Dolphin Server Technology A/S Instruction cache architecture for parallel issuing of multiple instructions
US5689672A (en) 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US6012125A (en) 1997-06-20 2000-01-04 Advanced Micro Devices, Inc. Superscalar microprocessor including a decoded instruction cache configured to receive partially decoded instructions
US6018786A (en) * 1997-10-23 2000-01-25 Intel Corporation Trace based instruction caching
US6079003A (en) 1997-11-20 2000-06-20 Advanced Micro Devices, Inc. Reverse TLB for providing branch target address in a microprocessor having a physically-tagged cache
US6122709A (en) * 1997-12-19 2000-09-19 Sun Microsystems, Inc. Cache with reduced tag information storage
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US20020144101A1 (en) * 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
JP3784766B2 (ja) * 2002-11-01 2006-06-14 株式会社半導体理工学研究センター 多ポート統合キャッシュ
US20040181626A1 (en) * 2003-03-13 2004-09-16 Pickett James K. Partial linearly tagged cache memory system
US7039768B2 (en) * 2003-04-25 2006-05-02 International Business Machines Corporation Cache predictor for simultaneous multi-threaded processor system supporting multiple transactions
US7783871B2 (en) 2003-06-30 2010-08-24 Intel Corporation Method to remove stale branch predictions for an instruction prior to execution within a microprocessor
US7519799B2 (en) * 2003-11-18 2009-04-14 Intel Corporation Apparatus having a micro-instruction queue, a micro-instruction pointer programmable logic array and a micro-operation read only memory and method for use thereof
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
GB2411973B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd Constant generation in SMD processing
US20160098279A1 (en) 2005-08-29 2016-04-07 Searete Llc Method and apparatus for segmented sequential storage
US8296550B2 (en) * 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7685410B2 (en) * 2007-02-13 2010-03-23 Global Foundries Inc. Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects
US7925866B2 (en) 2008-01-23 2011-04-12 Arm Limited Data processing apparatus and method for handling instructions to be executed by processing circuitry
GB2458295B (en) * 2008-03-12 2012-01-11 Advanced Risc Mach Ltd Cache accessing using a micro tag
US8103831B2 (en) 2008-03-31 2012-01-24 Intel Corporation Efficient method and apparatus for employing a micro-op cache in a processor
US8782374B2 (en) * 2008-12-02 2014-07-15 Intel Corporation Method and apparatus for inclusion of TLB entries in a micro-op cache of a processor
JP2011150684A (ja) * 2009-12-21 2011-08-04 Sony Corp キャッシュメモリおよびキャッシュメモリ制御装置
CN102687128B (zh) * 2009-12-25 2014-12-10 富士通株式会社 运算处理装置
WO2013084314A1 (ja) * 2011-12-07 2013-06-13 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN102541761B (zh) * 2012-01-17 2014-10-22 苏州国芯科技有限公司 应用于嵌入式芯片的只读高速缓冲存储器
US9672161B2 (en) * 2012-12-09 2017-06-06 Advanced Micro Devices, Inc. Configuring a cache management mechanism based on future accesses in a cache
CN103984637A (zh) * 2013-02-07 2014-08-13 上海芯豪微电子有限公司 一种指令处理系统及方法
US9734080B2 (en) * 2013-08-08 2017-08-15 Nxp Usa, Inc. Cache organization and method
GB2519103B (en) * 2013-10-09 2020-05-06 Advanced Risc Mach Ltd Decoding a complex program instruction corresponding to multiple micro-operations
TWI514145B (zh) * 2013-10-21 2015-12-21 Univ Nat Sun Yat Sen 可儲存除錯資料的處理器、其快取及控制方法
WO2015061648A1 (en) * 2013-10-25 2015-04-30 Advanced Micro Devices, Inc. Bandwidth increase in branch prediction unit and level 1 instruction cache
US9563564B2 (en) * 2015-04-07 2017-02-07 Intel Corporation Cache allocation with code and data prioritization
US9804666B2 (en) * 2015-05-26 2017-10-31 Samsung Electronics Co., Ltd. Warp clustering
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
US11635965B2 (en) * 2018-10-31 2023-04-25 Intel Corporation Apparatuses and methods for speculative execution side channel mitigation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140025894A1 (en) 2012-07-18 2014-01-23 Electronics And Telecommunications Research Institute Processor using branch instruction execution cache and method of operating the same

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Oliverio J.Santana et al.,"DIA: A complexity-Effective Decoding Architecture."(2009.04.02.) 1부.*

Also Published As

Publication number Publication date
JP7097361B2 (ja) 2022-07-07
KR20190085555A (ko) 2019-07-18
JP2019537163A (ja) 2019-12-19
US20180165096A1 (en) 2018-06-14
US20200225956A1 (en) 2020-07-16
CN110050263A (zh) 2019-07-23
WO2018106736A1 (en) 2018-06-14
US10606599B2 (en) 2020-03-31
EP3333700A1 (en) 2018-06-13

Similar Documents

Publication Publication Date Title
KR102604192B1 (ko) 연산 캐시
JP6523274B2 (ja) 分岐予測ユニット及びレベル1命令キャッシュにおける帯域幅の増加
US5845323A (en) Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time
US6957305B2 (en) Data streaming mechanism in a microprocessor
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US9471320B2 (en) Using L1 cache as re-order buffer
JPH05324317A (ja) 1,2または3語の命令を順次先取りする方法
JP3803723B2 (ja) 分岐予測を選択する分岐セレクタを採用する分岐予測機構
US10210090B1 (en) Servicing CPU demand requests with inflight prefetchs
EP4235409A2 (en) Zero latency prefetching in caches
CN112579175B (zh) 分支预测方法、分支预测装置和处理器核
CN110806900B (zh) 一种访存指令处理方法及处理器
US11175916B2 (en) System and method for a lightweight fencing operation
US7143268B2 (en) Circuit and method for instruction compression and dispersal in wide-issue processors
JP7523361B2 (ja) 命令をフェッチ及び復号するオペレーションキャッシュ及び命令キャッシュに対する低レイテンシ同期
US9507600B2 (en) Processor loop buffer
US6321325B1 (en) Dual in-line buffers for an instruction fetch unit
JP5696210B2 (ja) プロセッサ及びその命令処理方法
US7519794B2 (en) High performance architecture for a writeback stage
KR102697306B1 (ko) 분기 타깃 버퍼 압축
JPH0962508A (ja) 分岐登録命令を有するプロセッサ
JPH05257686A (ja) 命令キャッシュ回路

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant