KR20040014673A - 2개 레벨의 분기 예측 캐시를 갖는 분기 예측 - Google Patents

2개 레벨의 분기 예측 캐시를 갖는 분기 예측 Download PDF

Info

Publication number
KR20040014673A
KR20040014673A KR10-2004-7001076A KR20047001076A KR20040014673A KR 20040014673 A KR20040014673 A KR 20040014673A KR 20047001076 A KR20047001076 A KR 20047001076A KR 20040014673 A KR20040014673 A KR 20040014673A
Authority
KR
South Korea
Prior art keywords
branch
branch prediction
prediction
instruction
address
Prior art date
Application number
KR10-2004-7001076A
Other languages
English (en)
Other versions
KR100880686B1 (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 KR20040014673A publication Critical patent/KR20040014673A/ko
Application granted granted Critical
Publication of KR100880686B1 publication Critical patent/KR100880686B1/ko

Links

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
    • 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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

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)

Abstract

분기 예측을 수행하기 위한 방법 및 메커니즘으로서, 프로세서(10)가 제 1 레벨의 분기 예측 캐시(206)와 함께 구성되어 있어 한 그룹의 명령에 대응하는 분기 예측 정보를 저장하도록 된다. 또한, 제 2 레벨의 분기 예측 캐시(260, 1828)를 이용하여 제 1 레벨 캐시로부터 퇴출된 분기 예측 정보를 저장한다. 제 2 레벨의 분기 예측 캐시는 제 1 레벨 캐시로부터 퇴출된 서브세트의 정보 만을 저장하도록 구성된다. 제 1 레벨 캐시로부터 퇴출되고 제 2 레벨 캐시에 저장되어 있지 않은 분기 예측 정보는 버려진다. 제 1 레벨 캐시에서 미스 발생시 제 2 레벨 캐시는 그 미스된 대응하는 분기 예측 정보를 포함하고 있는 지를 결정한다. 만일 대응하는 분기 예측 정보가 제 2 레벨 캐시에서 검출되지 않는 다면, 검출된 분기 예측 정보는 제 2 레벨 캐시로부터 페치되어 완전한 분기 예측 정보를 재구성하는 데에 이용되며, 이후 예측에 이용될 수 있다.

Description

2개 레벨의 분기 예측 캐시를 갖는 분기 예측{BRANCH PREDICTION WITH TWO LEVELS OF BRANCH PREDICTION CACHE}
수퍼스칼라 마이크로프로세서는 클록 사이클당 복수의 명령들을 실행하고 또한 디자인에 맞게 최단의 가능한 클록 사이클을 선택함으로써 고성능을 달성한다. 여기서 이용되는 바와 같은 용어 "클록 사이클(clock cycle)"은 마이크로프로세서내의 여러 스테이지의 명령 처리 파이프라인(pipeline)의 다양한 스테이지에 따른 시간 간격을 말한다. 저장 장치들(storage devices)(예를 들어, 레지스터 및 어레이(array))은 클록 사이클에 따라 그들의 값을 포착한다. 예를 들어, 저장 장치들은 클록 사이클을 한정하는 클록 신호의 상승 에지(rising edge) 또는 하강 에지(falling edge)에 따른 값을 포착할 수 있다. 그 다음 저장 장치들은 클록 신호의 다음 상승 또는 하강 에지까지 그 값을 저장한다. 여기서 이용되는 용어 "명령 처리 파이프라인"은 파이프라인 방식으로 명령들을 처리하도록 적용되는 논리 회로들을 말한다. 비록 파이프라인을 어떤 수의 스테이지들로 분할하여 그 스테이지들에서 명령 처리의 부분들을 수행하게 할 수 있지만, 일반적으로, 명령 처리는명령을 페치하고, 그 명령을 디코딩(decoding)하고, 그 명령을 실행하고 그 명령에 의해 식별된 착신지 내에 그 실행 결과를 저장하는 것들을 포함한다.
수퍼스칼라 마이크로프로세서(및 슈퍼파이프라인식 마이크로프로세서)의 중요한 피쳐(feature)는 그의 분기 예측 메커니즘이다. 그 분기 예측 메커니즘은 분기 예측에 의해 지시된 예측된 명령 스트림(stream)내에서 후속하는 명령 페치를 계속하도록 허용하는, 분기 명령에 대한 예측 방향(테이큰(taken) 또는 낫테이큰(not taken) 방향)을 나타낸다. 분기 명령은 적어도 2개의 어드레스들 즉, 분기 명령에 바로 후속하는 명령들로 시작하는 명령 스트림을 식별하는 순차 어드레스와 그리고 메모리내의 임의 위치에서 시작하는 명령 스트림을 식별하는 타겟(target) 어드레스중 하나로부터 후속 명령들을 페치하게 하는 명령이다. 무조건적 분기 명령은 항상 타겟 어드레스로 분기하는 반면, 조건적인 분기 명령은 이전의 명령의 결과를 근거로 순차 어드레스 또는 타겟 어드레스 중 하나를 선택할 수 있다. 예측된 명령 스트림으로부터의 명령들은 분기 명령의 실행이전에 추론적으로 실행될 수 있고 또한 어떤 경우에는 분기 명령의 실행이전에 명령 처리 파이프라인내에 놓여질 수 있다. 만일 예측된 명령 스트림이 정확할 경우, 클록 사이클당 실행되는 명령들의 수가 증가되어 유리하다. 그러나 만일 예측된 명령 스트림이 부정확할 경우(즉, 하나 이상의 분기 명령들이 부정확하게 예측됨), 부정확하게 예측된 명령 스트림으로부터의 명령들은 명령 처리 파이프라인으로부터 버려지므로, 클록 사이클당 실행되는 명령들의 수는 감소하게 된다.
유효해지도록, 예측된 명령 스트림이 가능한한 자주 정확하도록 분기 예측메커니즘이 고도로 정확해야만 한다. 특정 분기에 대해 더욱 정확한 행위를 형성할 수 있도록, 분기의 이전 실행 히스토리(history)가 빈번하게 이용된다. 그러한 분기 예측 히스토리는 통상적으로 저장 장치 내의 분기 명령에 대응하는 데이터로서 유지되어야 한다. 분기 예측 데이터가 저장 장치로부터 퇴출되거나 아니면 상실되는 경우, 분기 명령에 대한 실행 히스토리를 추후에 재생성해야 할 필요가 있을 수 있다. 상술한 문제점에 대한 하나의 해결책으로서 분기 예측 저장 장치의 크기를 증가시키는 것이 있다. 그러나, 분기 예측 저장 장치를 증가시키게 되면 게이트 면적과 분기 예측 메커니즘의 크기를 크게 증가시켜야 한다. 결과적으로, 분기의 행위에 관한 가치 있는 데이터가 상실될 수 밖에 없고, 결국 재생성하지 않으면 않된다. 결론적으로, 게이트 수 또는 명령 예측 메커니즘의 크기를 크게 증가시키지 않으면서도 분기 예측 능력을 개선할 수 있는 메커니즘이 필요하게 되었다.
본 발명은 수퍼스칼라 마이크로프로세서(superscalar microprocessor)에 관한 것이며, 특히, 분기 예측 방법 및 메커니즘에 관한 것이다.
이하 본 발명의 기타 목적 및 장점들을 명확히 이해하기 위해 첨부 도면을 참조하여 상세히 설명하면 다음과 같다.
도 1은 마이크로프로세서의 일 실시예에 의한 블록도.
도 2는 분기 예측 유닛의 일 실시예에 의한 블록도.
도 3은 분기 예측 방법을 예시하는 흐름도.
도 4는 제 2 레벨의 분기 예측 캐시를 이용하는 방법을 예시하는 흐름도.
도 5는 프로그램 명령의 연속하는 그룹과 대응하는 분기 예측 엔트리를 나타내는 도면.
도 6은 분기 마커 비트(marker bit)와 어드레스 오프셋(offset) 간의 상호 관계를 나타내는 도면.
도 8은 예측 논리의 일 실시예를 나타내는 도면.
도 9는 도 8에 나타낸 예측 논리에 대한 동적 논리 결과를 나타내는 도면.
도 10은 분기 마커 비트 활용을 나타내는 도면.
도 11은 분기 마커 비트 활용을 나타내는 도면.
도 12은 분기 마커 비트 활용을 나타내는 도면.
도 13은 분기 마커 비트 활용을 나타내는 도면.
도 14는 미스된 예측을 예시하는 도면.
도 15는 분기 타겟 정보를 예시하는 도면.
도 16은 예측 논리 유닛의 일 실시예를 예시하는 도면.
도 17은 타겟 선택 회로의 일 실시예를 나타내는 도면.
도 18은 선택 신호 회로의 일 실시예를 예시하는 블록도.
도 19는 분기 어드레스 계산 유닛의 일 실시예를 예시하는 도면.
도 20은 제 1 레벨의 분기 예측 저장 장치(storage)와 제 2 레벨의 분기 예측 저장 장치 간의 상호 관계를 예시하는 블록도.
도 21은 제 1 레벨의 분기 예측 저장 장치와 제 2 레벨의 분기 예측 저장 장치 간의 상호 관계를 예시하는 블록도.
도 22는 제 1 레벨의 분기 예측 저장 장치와 제 2 레벨의 분기 예측 저장 장치 간의 상호 관계를 예시하는 블록도.
도 23은 분기 예측의 일 실시예의 블록도.
도 24는 분기 어드레스 계산 유닛의 일 실시예의 블록도.
도 25는 미스된 예측 회로의 일 실시예의 블록도.
도 26은 컴퓨터 시스템의 블록도.
본 발명은 여러 가지로 수정 변경 가능하지만 특정 실시예를 도면에 예시하여 상세히 설명한다. 그러나, 본 발명은 특정 실시예에 대한 도면과 상세 설명에만 제한하고자 의도된 것이 아니고, 첨부된 청구 범위에 정의된 바와같이, 본 발명의 정신과 범위내에 드는 모든 수정, 변경, 등가물 등을 커버하도록 의도된 것이다.
위에서 언급한 문제점은 여기에서 개시되는 바와 같은 마이크로프로세서와 방법에 의해 대부분 해결된다. 일 실시예에서, 프로세서가 제 1 레벨의 분기 예측 캐시(a first level branch prediction cache)와 함께 구성되어 있어 한 그룹의 명령에 대응하는 분기 예측 정보를 저장하도록 되어 있다. 또한, 제 2 레벨의 분기 예측 캐시(a second level branch prediction cache)를 이용하여 제 1 캐시로부터 퇴출된 분기 예측 정보를 저장한다. 제 2 레벨의 분기 예측 캐시는 제 1 레벨 캐시로부터 퇴출된 서브세트(subset)의 정보 만을 저장하도록 구성되어 있다. 제 1 레벨 캐시로부터 퇴출되고 제 2 레벨 캐시에 저장되어 있지 않은 분기 예측 정보는버려진다. 제 1 레벨 캐시에서 미스(miss)발생 시, 제 2 레벨 캐시가 그 미스에 대응하는 분기 예측 정보를 내포하고 있는지에 대해 결정이 이루어진다. 만일 대응하는 분기 예측 정보가 제 2 레벨 캐시에서 검출될 경우, 그 검출된 분기 예측 정보는 제 2 레벨 캐시로부터 페치되어 완전한 분기 예측 정보를 재구성하는 데 이용하고 추후 예측을 위해 이용될 수 있다. 일 실시예에서, 디코드 회로가 포함되어 있어 제 2 레벨 캐시로부터 페치된 명령들의 디코드를 수행한다. 제 2 레벨 캐시로부터의 이러한 명령의 디코드는 완전한 분기 예측 재구성시에 이용될 수 있다. 유리한 점으로써, 축소된 크기의 캐시를 이용하여 제 1 레벨의 분기 예측 캐시로부터 퇴출된 분기 예측 정보를 저장할 수 있다는 것이다. 또한 제 1 레벨 캐시내에서 미스가 발생할 경우, 완전한 분기 예측 정보가 제 2 레벨 캐시에 저장된 데이터로부터 신속히 재구성될 수 있다는 것이다.
프로세서 개요
이제 도 1을 참조하면, 프로세서(10)의 일 실시예의 블록도가 도시되어 있다. 다른 실시예들도 가능하다. 도 1에 나타낸 바와 같이, 프로세서(10)는 프리페치 유닛(12), 분기 예측 유닛(14), 명령 캐시(16), 명령 정렬 유닛(18), 복수의 디코드 유닛(20A-20C), 복수의 예약 스테이션(reservation station)(22A-22C), 복수의 기능 유닛(24A-24C), 적재/저장 유닛(26), 데이터 캐시(28), 레지스터 파일(30), 재배열 버퍼(32), MROM 유닛(34) 및 버스 인터페이스 유닛(37) 등을 포함한다. 여기서, 문자가 병기된 특정 참조번호로 표기된 구성요소들은 전체적으로 그 참조 번호만으로 호칭될 것이다. 예를 들어, 디코드 유닛(20A-20C)은 전체적으로 디코드 유닛(20)으로 호칭한다.
프리페치 유닛(12)은 버스 인터페이스 유닛(37)으로부터 명령을 수신하도록결합되며 또한 명령 캐시(16) 및 분기 예측 유닛(14)에도 결합된다. 마찬가지로 분기 예측 유닛(14)은 명령 캐시(16)에 결합된다. 또한 분기 예측 유닛(14)은 디코드 유닛(20) 및 기능 유닛(24)에 결합된다. 명령 캐시(16)는 또한 MROM 유닛(34) 및 명령 정렬 유닛(18)에도 결합된다. 이어서, 명령 정렬 유닛(18)은 디코드 유닛(20)에 결합된다. 각 디코드 유닛(20A-20C)은 적재/저장 유닛(26)에 그리고 각각의 예약 스테이션(22A-22C)에 결합된다. 예약 스테이션들(22A-22C)은 또한 각각의 기능 유닛들(24A-24C)에도 결합된다. 또한, 디코드 유닛들(20) 및 예약 스테이션(22)들이 레지스터 파일(30) 및 재배열 버퍼(32)에 결합된다. 기능 유닛들(24)은 적재/저장 유닛(26), 레지스터 파일(30) 및 재배열 버퍼(32)에도 결합된다. 데이터 캐시(28)는 적재/저장 유닛(26)에 그리고 버스 인터페이스 유닛(37)에 결합된다. 버스 인터페이스 유닛(37)은 또한 L2 인터페이스, L2 캐시 및 버스에도 결합된다. 마지막으로, MROM 유닛(34)은 디코드 유닛(20)에 결합된다.
명령 캐시(16)는 명령을 저장하도록 제공된 고속 캐시 메모리이다. 명령은 명령 캐시(16)로부터 페치되어 디코드 유닛(20)으로 발송된다. 일 실시예에서, 명령 캐시(16)가 명령을 64 kbyte까지 64 바이트 라인(1 바이트는 8개의 이진 비트로 구성됨)을 갖는 2방향 세트 어소시에이티브 구조(2-way set associative structure)로 저장하도록 구성된다. 다른 대안으로, 기타 다른 원하는 구성과 크기가 이용될 수 있다. 예를 들어, 명령 캐시(16)는 완전 어소시에이티브(fully associative), 세트 어소시에이티브 또는 직접 매핑 구성(direct mapped configuration)으로서 실시될 수 있음에 주목된다.
명령은 프리페치 유닛(prefetch unit)(12)에 의해 명령 캐시(16)내에 저장된다. 명령은 프리페치 방식에 따라 명령 캐시(16)로부터 요구가 있기 이전에 프리페칭될 수 있다. 다양한 프리페치 방식이 프리페치 유닛(12)에 의해 이용될 수 있다. 명령 캐시로부터 페치된 명령은 주사기/정렬기로 전달된다. 명령이 제 1 시간동안 페치될 때, 그들은 프리디코드 태그(predecode tag)에 의해 마크(mark)되지 않는다. 이 경우에 주사기/정렬기는 클록당 4 바이트를 디코드 유닛(20)으로 전달한다. 디코드 유닛(20)이 코어(core)에 프리디코드되지 않은 명령을 발송할 때, 디코드 유닛은 명령 경계들을 나타내는 명령에 대응하는 프리디코드 데이터를 발생시킬 수 있다.
가변 바이트 길이 명령 세트를 적용하는 프로세서(10)의 일 실시예를 위한 프리디코드 태그의 엔코딩(encoding)에 관하여 이하에 설명한다. 가변 바이트 길이 명령 세트는 서로 다른 명령들이 바이트 수를 달리하여 점유하는 명령 세트이다. 프로세서(10)의 일 실시예에 의해 이용되는 예시적인 가변 바이트 길이 명령 세트는 x86 명령 세트이다.
예시적인 엔코딩에서, 만일 소정의 바이트가 마지막 명령 바이트일 경우, 그 바이트에 대해 종료 비트가 설정된다. 디코드 유닛(20)에 의해 직접 디코드될 수 있는 명령은 "고속 경로" 명령으로서 호칭된다. 나머지 x86 명령들은 일 실시예에 따라서 MROM 명령으로 호칭된다. 예를 들어, 2개의 프리픽스 바이트(prefix bites), Mod R/M 바이트 및 즉시 바이트(immediate byte)를 포함하는 고속 경로 명령은 아래와 같은 종료 비트(end bits)를 가질 수 있다.
종료 비트 00001
MROM 명령은 디코드 유닛(20)에 의해 디코드하기에 너무나 복잡한지를 결정하는 명령이다. MROM 명령은 MORM 유닛(34)을 호출(invoke)함으로써 실행된다. 좀더 구체적으로, MROM 명령이 실행될 때, MROM 유닛(34)은 그 명령을 서브세트의 정의된 고속 경로 명령으로 분해(parse)하여 발행(issue)함으로써 원하는 동작이 실행되도록 한다. MROM 유닛(34)은 이 서브세트의 고속 명령을 디코드 유닛(20)으로 발송한다.
프로세서(10)는 조건적인 분기 명령에 후속하는 명령을 추론적으로 페치하기 위해 분기 예측을 이용한다. 분기 예측 유닛(14)은 분기 예측 동작들을 수행하도록 구비된다. 일 실시예에서, 분기 예측 유닛(14)은 3개 까지의 분기 타겟 어드레스를 캐시하는 분기 타겟 버퍼와, 그리고 명령 캐시(16)내의 캐시 라인의 16 바이트 부분 당 대응하는 테이큰/낫테이큰 예측들을 이용한다. 분기 타겟 버퍼는 예를 들어, 2048개의 엔트리 또는 기타 다른 적절한 수의 엔트리를 포함할 수 있다. 프리페치 유닛(12)은 특정 라인이 프리디코드될 때 초기의 분기 타겟을 결정한다. 캐시 라인에 대응하는 분기 타겟에 대한 후속 갱신들이 캐시 라인내의 명령들의 실행에 발생할 수 있다. 명령 캐시(16)는 페치되는 명령 어드레스의 표시를 제공하며, 그에 의해 분기 예측 유닛(14)은 분기 예측을 형성하기 위해 어떤 분기 타겟 어드레스들을 선택할 지를 결정할 수 있다. 디코드 유닛(20)과 기능 유닛들(24)은 분기예측 유닛(14)에 갱신 정보를 제공한다. 디코드 유닛(20)은 분기 예측 유닛(14)에 의해 예측되지 않았던 분기 명령을 검출한다. 기능 유닛들(24)은 분기 명령을 실행하고, 또한 예측 분기 방향이 부정확한지를 결정한다. 분기 방향이 "테이큰"일 경우, 이 때에는 후속 명령들이 분기 명령의 타겟 어드레스로부터 페치된다. 반대로, 분기 방향이 "낫테이큰"일 경우, 이 때에는 후속 명령들이 분기 명령에 연속하여 메모리 위치로부터 페치된다. 오예측(misprediction)된 분기 명령이 검출될 경우, 오예측된 분기에 후속하는 명령들은 프로세서(10)의 여러 유닛들로부터 버려진다. 또 다른 구성에서 분기 예측 유닛(14)은 디코드 유닛(20) 및 기능 유닛들(24) 대신에 재배열 버퍼(32)에 결합될 수 있으며 또한 재배열 버퍼(32)로부터 분기 오예측된 정보를 수신할 수 있다. 적합한 분기 예측 알고리즘을 분기 예측 유닛(14)에 의해 다양하게 이용할 수 있다.
명령 캐시(16)로부터 페치된 명령들은 명령 정렬 유닛(18)으로 전달된다. 명령들이 명령 캐시(16)로부터 페치될 때, 대응 프리디코드 데이터는 주사되어 페치되는 명령들에 관한 명령 정렬 알고리즘 유닛(18)(및 MROM 유닛(34))에 정보를 제공한다. 명령 정렬 알고리즘 유닛(18)은 디코드 유닛(20)의 각각에 명령을 정렬하도록 프리디코드 데이터를 주사한다. 일 실시예에서, 명령 정렬 알고리즘 유닛(18)은 2 세트 16개 명령 바이트들로부터의 명령들을 디코드 유닛(20)에 정렬한다. 디코드 유닛(20A)은 프로그램 순으로 디코드 유닛(20B, 20C)에 의해 동시에 수신되는 명령들 이전의 명령을 수신한다. 마찬가지로, 디코드 유닛(20B)은 프로그램 순으로 디코드 유닛(20)에 의해 동시에 수신되는 명령 이전의 명령을 수신한다.
디코드 유닛(20)은 명령 정렬 알고리즘 유닛(18)으로부터 수신되는 명령들을 디코드하도록 구성된다. 레지스터 오퍼랜드 정보(register operand information)가 검출되어 레지스터 파일(30)과 재배열 버퍼(32)로 라우팅된다. 또한, 만일 명령들이 하나 이상의 메모리 동작들이 수행되어야 함을 요구할 경우, 디코드 유닛(20)은 메모리 동작들을 적재/저장 유닛(26)으로 발송한다. 각 명령은 기능 유닛들(24)에 대한 한 세트의 제어 값들로 디코드되고, 이 제어 값들은 오퍼랜드 어드레스 정보 및 명령과 함께 포함될 수 있는 변위 데이터 또는 즉시 데이터와 더불어 예약 스테이션(22)들로 발송된다. 하나의 특정 실시예에서, 각 명령은 기능 유닛들(24A-24C)에 의해 개별적으로 실행될 수 있는 2개의 동작으로 디코드된다.
프로세서(10)는 순서를 벗어난(out of order) 실행을 지원하며, 따라서 재배열 버퍼(32)를 이용하여, 레지스터 독출 및 기입 동작들에 대한 원래 프로그램 순서의 트랙을 유지하여, 레지스터 이름 재부여(resister renaming)를 실행하고, 추론적인 명령 및 분기 오예측 회복을 허용하여, 정밀한 예외 동작을 돕는다. 재배열 버퍼(32)내의 임시 저장 위치는 레지스터의 갱신에 관계하는 명령의 디코드시 예약될 수 있고 그에 의해 추론적인 레지스터 상태들을 저장할 수 있다. 만일 분기 예측이 부정확할 경우, 오예측된 경로를 따라 추론적으로 실행된 명령들의 결과는 그들이 레지스터 파일(30)내에 기입되기 전에, 버퍼 내에서 무효화될 수 있다. 마찬가지로, 만일 특정 명령이 예외의 원인이 될 경우, 특정 명령에 후속하는 명령은 버려질 수 있다. 이러한 방식으로 예외들은 "정밀 예외"가 된다. (즉, 예외를 야기하는 특정 명령에 후속하는 명령은 예외 이전에 완료되지 못함). 여기서 주목되는것은 특정 명령은 프로그램 순으로 이 특정 명령을 선행하는 명령들 이전에 실행될 경우 추론적으로 실행된다는 것이다. 상기 선행 명령들은 분기 명령 또는 예외를 야기하는 명령일 수 있으며, 이 경우, 상기 추론적인 실행의 결과는 재배열 버퍼(32)에 의해 버려질 수 있다.
디코드 유닛(20)의 출력들에서 제공되는 즉시 데이터 또는 변위 데이터 및 명령 제어 값들은 각각의 예약 스테이션(22)들로 직접 라우팅된다. 일 실시예에서, 각 예약 스테이션(22)은 대응하는 기능 유닛으로의 발행을 기다리고 있는 5개 까지의 미결(pending) 명령들에 대한 명령 정보(즉, 명령 제어 값들뿐만 아니라 오퍼랜드 값들, 오퍼랜드 태그들 및/또는 즉시 데이터)를 유지할 수 있다. 주목할 사항으로서, 도 1의 실시예의 경우, 각 예약 스테이션(22)은 전용 기능 유닛(24)과 관계한다. 따라서, 3개의 전용 "발행 위치들"이 예약 스테이션(22) 및 기능 유닛(24)에 의해 형성된다. 다시 말해, 발행위치 0은 예약 스테이션(22A) 및 기능 유닛(24A)에 의해 형성된다. 예약 스테이션(22A)에 정렬되어 발송되는 명령들은 기능 유닛(24A)에 의해 실행된다. 마찬가지로, 발행위치 1은 예약 스테이션(22B) 및 기능 유닛(24B)에 의해 형성되고, 발행위치 2는 예약 스테이션(22C) 및 기능 유닛(24C)에 의해 형성된다.
특정 명령의 디코드 시, 만일 요구된 오퍼랜드가 레지스터 위치인 경우, 레지스터 어드레스 정보는 레지스터 파일(30)과 재배열 버퍼(32)에 동시에 라우팅된다. 일 실시예에서, 재배열 버퍼(32)는 디코드 유닛으로부터 오퍼랜드 요구들을 수신하는 미정 파일(future file)을 포함한다. 당업자이면, x86 레지스터 파일은 8개의 32 비트 실제 레지스터(real register)(즉, 전형적으로 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP로 칭함)를 포함한다는 것을 이해할 수 있을 것이다. x86 프로세서 아키텍쳐를 이용하는 프로세서(10)의 실시예에서, 레지스터 파일(30)은 각 32비트 실제 레지스터에 대한 저장 위치를 포함한다. 추가의 저장 위치들이 MROM 유닛(34)에 의해 이용하기 위한 레지스터 파일(30) 내에 포함될 수 있다. 재배열 버퍼(32)는 이들 레지스터들의 내용을 변경시킨 결과에 대한 임시 저장 위치들을 포함하므로 그에 의해 실행 순서를 벗어나는 것이 허용될 수 있다. 디코드시 실제 레지스터들중 하나의 내용을 수정하도록 결정되는 재배열 버퍼(32)의 임시 저장 위치가 각 명령에 대해 예약된다. 따라서, 특정 프로그램을 실행하는 동안 여러 지점들에서, 재배열 버퍼(32)는 소정 레지스터의 추론적으로 실행된 내용을 포함하는 1개 이상의 위치들을 가질 수 있다. 만일 소정 명령의 디코드에 후속하여, 재배열 버퍼(32)가 그 소정 명령의 오퍼랜드로서 이용되는 레지스터에 할당된 이전의 위치 또는 위치들을 갖는 것으로 결정된다면, 재배열 버퍼(32)는 대응하는 예약 스테이션에 (1) 가장 최근에 할당된 위치 내의 값, 또는 (2) 이전 명령을 궁극적으로 실행하게 될 기능 유닛에 의해 상기 값이 아직 생성되지 않은 경우에는, 가장 최근에 할당된 위치에 대한 태그를 전송한다. 만일 재배열 버퍼(32)가 소정 레지스터에 대해 예약된 위치를 가질 경우, 오퍼랜드값(또는 재배열 버퍼 태그)은 레지스터 파일(30)로부터가 아닌 재배열 버퍼(32)로부터 제공된다. 만일 재배열 버퍼(32)내의 요구되는 레지스터에 대해 예약된 위치가 없을 경우, 상기 값은 레지스터 파일(30)로부터 직접 취해진다. 만일 오퍼랜드가 메모리 위치에 대응할 경우, 오퍼랜드 값은 적재/저장 유닛(26)을 통해 예약 스테이션에 제공된다.
일 특정 실시예에서, 재배열 버퍼(32)는 동시에 디코드되는 명령들을 한 유닛으로서 저장 및 된 명령을 저장 및 처리하도록 구성된다. 이러한 구성은 본원에서 "라인 지향(line-oriented)"이라 칭한다. 몇 개의 명령들을 함께 처리함으로써, 재배열 버퍼(32) 내에서 이용되는 하드웨어가 단순화될 수 있다. 예를 들어, 본 실시예에 포함된 라인 지향 재배열 버퍼는 1개 이상의 명령들이 디코드 유닛(20)에 의해 발행될 때 마다, 3개의 명령들(각 디코드 유닛(20)으로부터 하나씩)에 관련된 명령 정보에 대해 충분한 저장 공간을 할당한다. 이와 대조적으로, 종래의 재배열 버퍼들에서는, 실제로 디스패치되는 명령들의 수에 따라, 가변량의 저장 공간이 할당된다. 이러한 가변량의 저장 공간을 할당하기 위해서는 비교적 많은 수의 논리 게이트들이 필요하다. 동시에 디코드되는 각각의 명령들이 실행될 때, 명령 결과들은 동시에 레지스터 파일(30) 내에 저장된다. 이후, 동시에 디코드되는 다른 명령들의 세트를 위해 저장 공간은 비워진다. 또한, 명령 마다 이용되는 제어 논리 회로의 양은 감소된다. 왜냐하면 제어 논리가 동시에 디코드되는 여러 개의 명령들에 대해 공유(amortize)되기 때문이다. 특정 명령을 식별하는 재배열 버퍼 태그는 2개의 필드들, 즉 라인 태그(line tag) 및 오프셋 태그(offset tag)로 분할될 수 있다. 라인 태그는 특정한 명령을 포함하는 동시에 디코드되는 명령들의 세트를 식별하고, 오프셋 태그는 그 세트 내의 어떤 명령이 특정 명령에 대응하는지를 식별한다. 주목할 사항으로서, 명령 결과들을 레지스터 파일(30) 내로 저장하고, 대응하는 저장 공간을 비우는 것은 명령들의 "퇴거(retiring)"라 칭한다. 또한, 주목할사항으로서, 프로세서(10)의 다양한 실시예들에서는, 레지스터 파일(30)의 추론적인 상태를 저장하는 데에 미정 파일을 이용하는 것을 포함하며, 어떠한 재배열 버퍼 구성이라도 이용될 수 있다.
상기 설명한 바와 같이, 예약 스테이션들(22)은 대응하는 기능 유닛들(24)에 의해 명령들이 실행될 때까지 그 명령들을 저장한다. (i) 명령의 오퍼랜드가 제공되고, (ii) 동일 예약 스테이션들(22A-22C) 내에 있고 프로그램 순서에서 그 명령 보다 이전의 명령들에 대해 아직 오퍼랜드들이 제공되지 않은 경우, 실행을 위해 명령이 선택된다. 주목할 사항으로서, 명령이 기능 유닛들(24)중 하나에 의해 실행될 때, 그 명령의 결과는 결과를 기다리고 있는 어느 예약 스테이션(22)들에 직접 전달됨과 동시에, 갱신 재배열 버퍼(32)로 전달(이 기술은 통상적으로 "결과 전송(result forwarding)"라 칭함)된다. 명령은 실행을 위해 선택된 다음, 관련된 결과가 전송되는 클록 사이클 동안 기능 유닛들(24A-24C)로 전달된다. 이 경우, 예약 스테이션(22)들은 전송된 결과를 기능 유닛들(24)에 전달한다. 명령들이 기능 유닛들(24)에 의해 실행될 다수의 연산들로 디코드되는 실시예들에서, 상기 연산들은 서로 개별적으로 스케쥴링(scheduling)될 수 있다.
일 실시예에서, 기능 유닛들(24) 각각은 덧셈 및 뺄셈의 정수 산술 연산들, 시프트, 회전, 논리 연산들 및 분기 연산들을 수행하도록 구성된다. 이러한 연산드은 디코드 유닛들(20)에 의해 특정 명령에 대해 디코드된 제어 값에 응답하여 수행된다. 주목할 사항으로서, 부동 소수점 유닛(floating point unit)(미도시)이 또한 부동 소수점 연산들을 수행하도록 이용될 수 있다. 이 부동 소수점 유닛은 MROM 유닛(34) 또는 재배열 버퍼(32)로부터 명령들을 수신한 다음, 명령들을 완료하기 위해 재배열 버퍼(32)와 통신하는 코프로세서(coprocessor)로서 동작할 수 있다. 또한, 기능 유닛들(24)은 적재/저장 유닛(26)에 의해 수행되는 메모리 연산들을 적재 및 저장하기 위한 어드레스 발생을 수행하도록 구성될 수 있다. 일 특정 실시예에서, 각 기능 유닛(24)은 어드레스들을 발생시키기 위한 어드레스 발생 유닛 및 나머지 기능들을 수행하기 위한 실행 유닛을 포함할 수 있다. 이 2개의 유닛들은 한 클록 사이클 동안 서로 다른 명령들 또는 동작들에 대해 독립적으로 동작할 수 있다.
기능 유닛들(24) 각각은 또한 조건 분기 명령들의 실행에 관한 정보를 분기 예측 유닛(14)에 제공한다. 만일 분기 예측이 부정확하였을 경우, 분기 예측 유닛(14)은 명령 처리 파이프라인에 들어간 오예측된 분기 이후의 명령들을 플러시(flush)하고, 명령 캐시(16) 또는 메인 메모리로부터 필요한 명령을 페치하게 한다. 주목할 사항으로서, 이러한 상황들에서, 추론적으로 실행되어 적재/저장 유닛(26) 및 재배열 버퍼(32)에 임시적으로 저장되었던 것들을 포함하는, 원래 프로그램 순서에 있어서 오예측된 분기 명령 이후에 발생되는 명령들의 결과들은 버려진다. 또한, 주목할 사항으로서, 분기 실행 결과들은 기능 유닛들(24)에 의해 재배열 버퍼(32)에 제공되는바, 이 재배열 버퍼(32)는 기능 유닛들(24)에 분기 오예측들을 나타낼 수 있다.
기능 유닛들(24)에 의해 생성된 결과들은, 레지스터 값이 갱신되는 경우에는 재배열 버퍼(32)에 전송되고, 메모리 위치의 내용들이 변경된 경우에는 적재/저장유닛(26)에 전송된다. 만일 결과가 레지스터에 저장된다면, 재배열 버퍼(32)는 명령이 디코드 되었을 때 레지스터의 값에 대해 예약된 위치에 그 결과를 저장한다. 복수의 결과 버스들(38)은 기능 유닛들(24) 및 적재/저장 유닛(26)으로부터의 결과들을 전송하기 위해 포함된다. 결과 버스들(38)은 실행되는 명령을 식별하는 재배열 버퍼 태그 뿐 아니라, 발생된 결과를 전달한다.
적재/저장 유닛(26)은 기능 유닛들(24)과 데이터 캐시(28) 간의 인터페이스를 제공한다. 일 실시예에서, 적재/저장 유닛(26)은 2개의 적재/저장 버퍼들로 구성된다. 제 1 적재/저장 버퍼는 데이터 캐시(28)를 아직 액세스하지 않은 미결 적재들 또는 저장들에 대응하는 데이터 및 어드레스 정보에 대한 저장 위치들을 포함한다. 제 2 적재/저장 버퍼는 데이터 캐시(28)를 액세스한 적재들 또는 저장들에 대응하는 데이터 및 어드레스 정보에 대한 저장 위치들을 포함한다. 예를 들어, 제 1 버퍼는 12개의 위치들을 포함할 수 있고, 제 2 버퍼는 32개의 위치들을 포함할 수 있다. 디코드 유닛(20)은 적재/저장 유닛(26)에 대한 액세스를 중재한다. 제 1 버퍼가 가득차면, 디코드 유닛(20)은 적재/저장 유닛(26)이 미결 적재 또는 요구 정보를 위한 공간을 가질 때 까지 기다려야 한다. 적재/저장 유닛(26)은 또한 데이터 코히런시(data coherency)가 유지될 수 있도록, 미결 저장 메모리 연산들에 대한 적재 메모리 연산들의 의존성 검사를 수행한다. 메모리 연산은 프로세서(10)와 메인 메모리 서브시스템 간의 데이터의 전송이다. 메모리 연산은 메모리에 저장된 오퍼랜드를 이용하는 명령의 결과이거나, 또는 데이터 전송은 야기시키지만 다른 어떠한 연산도 야기시키지 않는 적재/저장 명령의 결과일 수 있다. 또한, 적재/저장 유닛(26)은 x86 프로세서 아키텍쳐에 의해 정의되는 어드레스 변환 메커니즘에 관련된 세그먼트 레지스터들 및 다른 레지스터들과 같은 특수 레지스터들을 위한 특수 레지스터 저장 장치(storage)를 포함할 수 있다.
데이터 캐시(28)는 적재/저장 유닛(26)과 메인 메모리 서브시스템 간에 전송되는 데이터를 임시 저장하도록 제공되는 고속의 캐시 메모리이다. 일 실시예에서, 데이터 캐시(28)는 2 방향의 세트 어소시에이티브 구조로 최대 64 Kbyte를 저장할 수 있는 용량을 갖는다. 이해될 사항으로서, 데이터 캐시(28)는 세트 어소시에이티브 구성, 완전 어소시에이티브 구성, 직접 매핑 구성 및 어떠한 적합한 크기의 다른 구성을 포함하는 다양한 특정 메모리 구성들로 구현될 수 있다.
x86 프로세서 아키텍쳐를 이용하는 프로세서(10)의 일 특정 실시예에서, 명령 캐시(16) 및 데이터 캐시(28)는 선형으로 어드레스되고 물리적으로 태그된다. 선형 어드레스는 x86 어드레스 변환 메커니즘의 세그먼트 부분에 의해 특정되는 베이스 어드레스 및 명령에 의해 특정되는 오프셋으로부터 형성된다. 선형 어드레들은 선택적으로 메인 메모리를 액세스하기 위한 물리적인 어드레스로 변환될 수 있다. 선형 어드레스에서 물리적인 어드레스로의 변환은 x86 어드레스 변환 메커니즘의 페이징 부분(paging portion)에 의해 특정된다. 물리적 어드레스는 히트/미스(hit/miss) 상태를 결정하기 위해 물리적 태그들과 비교된다.
버스 인터페이스 유닛(37)은 버스를 경유하여 컴퓨터 시스템 내의 다른 구성요소들과 프로세서(10) 간에 통신하도록 구성된다. 예를 들어, 버스는 디지털 장비 회사(Digital Equipment Corporation)에 의해 개발된 EV-6버스와 호환될 수 있다.대안적으로, 패킷 베이스, 한 방향 또는 양 방향 링크 등을 포함하는 어떠한 적절한 상호 연결 구조가 이용될 수 있다. 또한, 선택적인 L2 캐시 인터페이스가 제 2 레벨 캐시로의 인터페이스를 위해 이용될 수 있다.
본 명세서의 나머지 부분에 대해서는, x86 마이크로프로세서 아키텍쳐가 예로서 이용될 것이다. 그러나, 본원에서 설명되는 분기 예측 기술은 어떠한 마이크로프로세서 아키텍쳐 내에서도 이용될 수 있으며, 이러한 실시예들이 고려된다. 주목할 사항으로서, x86 마이크로프로세서 아키텍쳐에서는, 단일 바이트의 연산코드(opcode)로 구성되는 서브루틴 리턴 명령(예를 들어, RET 명령)이 정의된다. 서브루틴 리턴 명령은 ESP 레지스터에 의해 나타낸 스택의 정점(top)으로부터 그의 분기 타겟 어드레스가 얻어졌음을 특정한다. 이러한 단일 바이트 RET 명령을 처리하게 되면, 어떠한 상황들에서 특별한 발행을 제시할 수 있다. 이하, 이러한 경우를 처리하기 위한 메커니즘에 대해 보다 상세히 설명한다.
분기 예측 개요
도 2는 분기 예측 유닛(14)의 일 실시예의 일부를 도시한다. 도 2에 나타낸 부분 이외의 분기 예측 유닛(14)의 다른 실시예들이 가능하며 고려된다. 도 2에 나타낸 바와 같이, 분기 예측 유닛(14)은 글로벌 예측기 저장 장치(205), 로컬 예측기 저장 장치(206), 분기 타겟 저장 장치(208), 갱신 논리(200, 202), 글로벌 히스토리 시프트 레지스터(204), 라인 버퍼(210), 리턴 어드레스 스택(230), 순차 어드레스 발생기(232), 예측 논리(220), 희생 캐시(victim cache)(260), 분기 어드레스 계산기(270), 명령 캐시(16), L2 캐시(1828) 및 디코더 회로(400)를 포함한다. 희생 캐시(260)는 로컬 예측기 저장 장치(206)로부터 퇴출(evict)된 분기 예측 정보를 저장하도록 구성된 제 2 레벨 L2 캐시이다. 일 실시예에서, 희생 캐시(260)는, 로컬 예측기 저장 장치(206) 내에 이전에 유지되었지만 다른 데이터를 위한 공간을 만들기 위해 퇴출되었던 데이터 만을 캐시하도록 구성된다. 유익하게는, 로컬 예측기 저장 장치(206) 및 희생 캐시(260)는 복제 데이터를 저장하지 않기 때문에, 보다 많은 분기 예측 정보가 유지될 수 있다.
글로벌 예측기 저장 장치(205), 로컬 예측기 저장 장치(206), 분기 타겟 저장 장치(208), 명령 캐시(16), 예측 논리(220), 분기 어드레스 계산기(270) 및 라인 버퍼(210)는 페치 어드레스 멀티플렉서(222)로부터 페치 어드레스 버스(236)에 결합된다. 글로벌 히스토리 시프트 레지스터(204)는 버스(234)를 통해 글로벌 예측기 저장 장치(205) 및 라인 버퍼(210)에 결합된다. 갱신 논리(200)은 글로벌 예측기 저장 장치(205), 로컬 예측기 저장 장치(206) 및 분기 타겟 저장 장치(208)에 결합된다. 라인 버퍼(210)는 버스(248)를 통해 갱신 논리(200 및 202)에 결합된다. 또한, 갱신 논리(200)는 버스(246)를 통해 글로벌 히스토리 시프트 레지스터(204)에 결합된다. 재배열 버퍼(32)는 선택 제어 및 재지시 어드레스(redirect address)를 멀티플렉서(222)에 제공한다. 재배열 버퍼(32)는 또한 분기 예측 행동(branch prediction behavior) 및 실제 행동 정보를 갱신 논리(200) 및 갱신 논리(202)에 제공한다. 글로벌 예측기 저장 장치(205) 및 로컬 예측기 저장 장치(206)는 각각 버스들(238 및 242)을 통해 예측 논리(220)에 결합된다. 예측 논리(220)는 버스(250)를 통해 분기 어드레스 계산기(270)에 결합되고, 선택 신호(240)를 통해멀티플렉서(212)에 결합된다. 명령 캐시(16)는 버스(241)를 통해 분기 어드레스 계산기(270)에 결합된다. 멀티플렉서(212)의 출력은 버스(243)를 통해 분기 어드레스 계산기(270) 및 멀티플렉서(221)에 결합된다. 그리고, 분기 어드레스 계산기(270)는 버스(245)를 통해 멀티플렉서(221)에 결합되고, 선택 신호(223)를 통해 멀티플렉서(221)에 결합된다. 마지막으로, 멀티플렉서(221)로부터의 출력은 멀티플렉서(222)에 결합된다.
일반적으로 도 2에 도시된 분기 예측 유닛(14)의 일부의 기본 동작은 다음과 같다. 페치 어드레스(236)가 라인 버퍼(210), 로컬 예측기 저장 장치(206), 타겟 어레이 저장 장치(208) 및 분기 어드레스 계산기(270)에 전달된다. 또한, 페치 어드레스(236)의 일부는 글로벌 히스토리(234)와 결합되어, 글로벌 예측기 저장 장치(205) 내로의 인덱스(index)를 형성한다. 또한, 페치 어드레스(236)의 일부(225)는 예측 논리(220)로 전달된다. 글로벌 예측기 저장 장치(205)는 글로벌 예측(238)을 전달하고, 로컬 예측기 저장 장치(206)는 예측 논리(242)를 전달하며, 그리고 타겟 어레이(208)는 수신된 페치 어드레스에 대응하는 타겟 어드레스를 전달한다. 로컬 예측 저장 장치(206)에 의해 전달된 로컬 예측(242)은 분기 예측을 형성할 때에 이용하기 위해 예측 논리(220)에 정보를 제공한다. 마찬가지로, 글로벌 예측기 저장 장치(205)는 분기 예측을 형성할 때에 이용하기 위해 예측 논리(220)에 글로벌 예측(238)을 전달한다. 일 실시예에서, 글로벌 예측(238)은 동적 행위를 나타내는 분기들에 대해 로컬 예측기 저장 장치(206)에 의해 제공되는 로컬 예측(242)을 버릴 수 있다. 동적 행위를 동적 행위를 나타낼 때의 분기들의분류에 대해서는 이하에 설명한다. 마지막으로, 예측 논리(220)는 신호를 멀티플렉서(212)에 전달하고, 멀티플렉서(212)는 새로운 명령을 페치하는 데에 이용하기 위한 다음 페치 어드레스(243)를 선택한다. 어떠한 경우, 멀티플렉서(212)에 의해 전달된 페치 어드레스(243)는 단지 현재 분기 예측을 위해 전달된 페치 어드레스일 뿐이다. 그러나, 다른 경우들에 있어서, 분기 어드레스 계산기(270)는 멀티플렉서(212)에 의해 전달된 페치 어드레스(243)가 부정확했다는 결정에 응답하여 현재의 분기 예측에 대응하는 제 2 페치 어드레스(245)를 전달할 수 있다. 이러한 경우, 분기 어드레스 계산기(270)는 멀티플렉서(221)로부터의 출력에 대해 페치 어드레스(245)를 선택하기 위한 신호(223)를 전달할 수 있다. 이러한 방식으로, 오예측이 초기 스테이지에서 결정되어 수정될 수 있다.
동적 행위 및 글로벌 분류
상기 설명한 바와 같이, 일 실시예에서는, 글로벌 예측 메커니즘이 분기 예측 유닛(14)에 포함될 수 있다. 글로벌 예측기 메커니즘에 대해서는 본원의 참조로서 인용된, 쥬라스키 주니어(Zuraski, Jr.) 등에 의해 1999년 11월 16일에 출원되어 동시 계류중인 공동 양수된 특허 출원 제 09/441,630호 "글로벌 히스토리 분기 예측 내의 조건적 분기들의 동적 분류"에 상세히 설명되어 있다. 상기 설명한 바와 같이, 프리페치 유닛(12)은 분기 명령을 검출하고 분기 명령에 대응하는 분기 정보를 분기 예측 유닛(14)에 전달하도록 구성될 수 있다. 조건 분기가 검출될 때, 갱신 논리(200)는 로컬 예측기 저장 장치(206) 내에 대응하는 분기 예측 엔트리를 생성하고, 새롭게 생성된 분기 예측 엔트리를 낫테이큰(not taken)으로 초기화할 수있다. 일 실시예에서, 로컬 예측기 저장 장치(206)는 분기 예측을 형성하고, 분기 타겟 저장 장치(208)에 저장된 다수의 분기 타겟 어드레스들, 순차 어드레스(232) 또는 리턴 스택 어드레스(230)로부터 선택하는 데에 이용하기 위한, 분기 마커(branch marker)들을 포함하는 분기 예측 정보를 저장할 수 있다. 분기를 위해 로컬 예측기 저장 장치(206) 내에 엔트리를 생성할 때, 분기의 예측 방향은 낫테이큰으로 초기화되고, 대응하는 분기 마커는 순차 어드레스(232)를 나타내도록 초기화된다. 또한, 조건 분기에 대응하는 엔트리가 라인 버퍼(210) 내에 생성된다. 라인 버퍼 엔트리는 글로벌 히스토리, 페치 어드레스, 글로벌 예측 및 글로벌 비트를 포함할 수 있다.
분기가 로컬 예측기 저장 장치(206) 내에서 낫테이큰 예측을 가질 때, 순차 어드레스(232)가 멀티플렉서(212)로부터 전달된다. 마지막 예측(25)은 글로벌 히스토리 시프트 레지스터(204) 내에 동적(dynamic)으로서 분류되는 분기들의 예측된 방향을 시프트하는 갱신 논리(202)으로 전달된다. 로컬 분기 예측 엔트리가 분기가 낫테이큰임을 예측할 때, 마지막 예측(250)은 분기가 낫테이큰임을 나타내고, 신호(240)는 다음 페치 어드레스로서 멀티플렉서(212)로부터 순차 어드레스(232)를 선택한다. 분기 예측 엔트리가 분기 예측 유닛(14)로 부터 삭제되기 전에, 이후의 분기를 실행할 때, 분기에 대한 예측 방향은 낫테이큰이며, 순차 어드레스(232)가 다음 페치 어드레스로서 전달된다. 퇴거시, 라인 버퍼(210) 내의 대응하는 엔트리는 갱신 논리(200, 202)로 전달되고, 라인 버퍼(210)로부터 삭제된다. 라인 버퍼 엔트리가 분기가 비동적(non-dynamic)으로서 분류됨을 나타내고 재배열 버퍼(32)가분기가 정확하게 예측되었음을 나타낼 때, 갱신 논리(200 또는 202)에 의한 어떠한 갱신도 수행되지 않는다. 그러나, 만일 분기가 비동적으로서 분류되고 오예측되었다면, 오예측된 분기에 대응하는 분기 예측은 갱신되고 글로벌 히스토리 시프트 레지스터(204)는 하기 설명되는 바와 같이 갱신된다.
비동적-테이큰 분기
퇴거 또는 오예측시, 재배열 버퍼(32)는 분기의 행동에 관한 정보를 갱신 논리(200)에 전달한다. 또한, 라인 버퍼(210)는 라인 버퍼 엔트리를 갱신 논리(200, 202)에 전달한다. 라인 버퍼 분기 엔트리가 분기가 비동적인 것으로서 분류되고 낫테이큰으로 예측됨을 나타내고, 재배열 버퍼(32)가 대응하는 분기가 오예측되었음을 나타낼 때, 갱신 논리(200)는 오예측된 분기에 대응하는 분기 예측 엔트리를 갱신한다. 갱신 논리(200)는 로컬 예측기 저장 장치(206) 내의 분기 예측을 낫테이큰에서 테이큰으로 갱신하고, 분기 타겟 저장 장치(208)에 분기 타겟 어드레스를 입력한다. 저장된 분기 타겟 어드레스와 관련된 "동적"(또는 "글로벌") 비트는 분기가 정적(static) 또는 비동적으로서 분류됨(이는 이진 0에 의해 표현될 수 있다)을 나타내도록 초기화된다. 이후의 분기를 실행할 때, 그리고 분기 예측 엔트리가 분기 예측 유닛(14)으로부터 삭제되기 전에, 분기 예측 엔트리는 테이큰 예측 및 비동적 분류를 나타낸다. 분기가 테이큰으로 예측되고 비동적으로서 분류될 때, 예측 논리(220)은 멀티플렉서(212)로부터 타겟을 선택한다. 이전과 같이, 분기가 정확하게 예측되면, 갱신 논리(200 또는 202)에 의한 어떠한 분기 예측 갱신도 요구되지 않는다. 한편, 만일 비동적으로 예측된 테이큰 분기가 낫테이큰이면, 분기 예측 엔트리 및 글로벌 히스토리 시프트 레지스터(204)는 갱신된다.
동적 분기들
비동적으로 분류되고 테이큰으로 예측된 분기가 오예측되면, 갱신 논리(200)는 로컬 예측기 저장 장치(206) 내의 오예측된 분기에 대응하는 동적 비트(dynamic bit)를 갱신하여, 그 분기가 동적 또는 글로벌로 분류됨을 나타낸다. 또한, 갱신 논리(200)는 오예측된 분기에 대응하는 글로벌 예측기 저장 장치(205) 내의 글로벌 예측 엔트리를 갱신하여, 그 분기가 낫테이큰으로 예측됨을 나타낸다. 또한, 갱신 논리(200)는 글로벌 히스토리 시프트 레지스터(204)를 갱신하여 그 분기가 낫테이큰이었음을 나타낸다. 일 실시예에서, 글로벌 히스토리 시프트 레지스터(204)는 마지막 8개의 동적 분기들의 행동을 추적한다.
동적 분기가 페치될 때, 페치 어드레스(236)는 로컬 예측기 저장 장치(206), 타겟 어레이(208) 및 라인 버퍼(210)에 전달된다. 또한, 페치 어드레스는 글로벌 히스토리 시프트 레지스터(204)의 내용과 결합되어, 글로벌 예측기 저장 장치(205)로 전달되는 인덱스(203)를 형성한다. 글로벌 히스토리 시프트 레지스터(204)의 내용은 또한 버스(234)를 통해 라인 버퍼(210)에 전달된다. 일 실시예에서, 인덱스(203)는 글로벌 히스토리 시프트 레지스터(204)의 내용들과 페치 어드레스(236)의 비트들 9 내지 4를 결부(concatenate)시킴으로써 형성된다. 논리합 또는 배타적 논리합과 같은, 인덱스를 형성하는 다른 방법들이 또한 고려된다. 인덱스는 라인 버퍼(210), 갱신 논리(200) 및 멀티플렉서(220)로 전달되는 글로벌 예측기 저장 장치(205) 내의 엔트리를 선택한다. 글로벌 예측기 저장 장치(205)에의해 전달되는 분기의 예측된 방향은 갱신 논리(200)에 의해 글로벌 히스토리 시프트 레지스터(204)로 시프트된다. 예를 들어, 이진 1은 테이큰 분기를 나타내고, 이진 0은 낫테이큰 분기를 나타낸다. 만일 대응하는 동적 비트가 분기가 글로벌로 분류됨을 나타내고, 글로벌 예측기 분기가 테이큰임을 나타낸다면, 멀티플렉서(222)로부터 전달되는 타겟 어드레스가 다음 페치 어드레스로서 선택된다. 만일 글로벌 예측이 분기가 낫테이큰임을 나타낸다면, 순차 어드레스(232)가 다음 페치 어드레스로서 멀티플렉서(222)로부터 선택된다.
퇴거시, 재배열 버퍼(32)는 분기 정보를 갱신 논리들(200, 202)에 전달한다. 또한, 라인 버퍼(210)는 대응하는 분기 정보를 갱신 논리(200)로 전달한다. 재배열 버퍼(32)가 동적 분기가 정확하게 예측됨을 나타낼 때, 갱신 논리(200)는 분기의 행위를 나타내기 위해 글로벌 예측 엔트리(205)를 수정한다. 일 실시예에서, 글로벌 분기 예측 엔트리들은 포화 카운터(saturating counter)를 포함한다. 이러한 카운터는 2개의 비트들이 될 수 있는바, 이들은 테이큰 분기들에 대해서는 증분되고, 낫테이큰 분기들에 대해서는 감분된다. 이러한 표시자(indicator)는 분기가 강력하게(strongly) 테이큰, 약하게(weekly) 테이큰, 강력하게 낫테이큰, 또는 약하게 낫테이큰임을 나타내는 데에 이용될 수 있다. 만일 동적 분기가 오예측된다면, 갱신 논리(200)는 분기 행위를 나타내기 위해 글로벌 예측 엔트리(205)를 갱신한다. 또한, 오예측시, 갱신 논리(200)는 글로벌 히스토리 시프트 레지스터(204)를 복구하여, 동적 분기의 예측된 행위가 아닌 실제 행위를 나타낸다.
희생 분기 예측 캐시
상기 분기 예측 유닛(14) 동작에 대한 개요는 대응하는 페치 어드레스에 대한 분기 예측이 로컬 예측기 저장 장치(206)에 존재한다고 가정한다. 그러나, 수신된 페치 어드레스에 대응하는 분기는 로컬 예측기 저장 장치(206)에 존재하지 않을 수도 있다. 이러한 개요(scenario)를 다루는 방법이 이하 설명된다.
도 3은 기존의 분기 예측 엔트리를 퇴출시키고 제 2 레벨 (L2) 저장 장치에 상기 퇴출된 분기 예측 정보의 서브세트를 저장하는 것을 포함하는, 제 1 레벨 (L1) 분기 예측 저장 장치(206) 내에 분기 예측 엔트리를 생성하는 방법의 일 실시예의 흐름도이다. 제 2 레벨의 분기 예측 저장 장치(260)를 이용하게 되면, 유익하게는 L1 분기 예측 저장 장치(206)로부터 퇴출된 분기 예측 정보를 보유할 수 있게 한다. 당업자라면, 특정한 분기에 대해 정확하게 예측하는 것은, 많은 분기 실행을 통해 분기 실행 히스토리를 생성할 필요가 있다는 것을 알 수 있을 것이다. 결과적으로, 캐시 내의 퇴출된 분기 예측에 대응하는 분기 예측 정보를 유지하게 되면, 분기 예측들의 정확도를 개선할 수 있다. L1 분기 예측 저장 장치(206) 내로 재적재(reload)가 필요함을 검출하게 되면(결정 블록 301), 분기 예측을 위해 L1 분기 예측 저장 장치(206)의 대응하는 엔트리에 공간이 있는 지를 결정한다(결정블록 303). 재적재 데이터에 대응하는 L1 분기 예측 저장 장치(206) 내의 엔트리가 이미 점유되어 있는 경우, 기존 엔트리는 퇴출될 수 있고(블록 305), 퇴출된 분기 예측 정보의 서브세트 만이 L2 분기 예측 저장 장치(260)에 저장된다(블록 307). 만일 재적재 데이터가 L2 분기 예측 저장 장치(260)로부터 페치된다면(블록 309), L2 분기 예측 저장 장치(260)로부터 페치된 데이터는 대응하는 전체 분기 예측 엔트리를재구성하는 데에 이용될 수 있는 분기 예측 엔트리의 서브세트를 포함한다(블록 311). 재구성된 엔트리는 이후 L1 분기 예측 저장 장치(206) 내에 저장된다(블록 315). 대안적으로, 만일 재적재된 데이터가 L2 분기 예측 저장 장치(260)로부터 페치되지 않는 다면(블록 309), 새로운 분기 예측 엔트리가 초기화되어(블록 313) L1 분기 예측 저장 장치(206)에 저장된다(블록 315).
도 4는 대응하는 분기 예측이 L1 분기 예측 저장 장치(206) 내에 존재하지 않는 방법의 대안적인 실시예를 예시한다. 먼저, 페치 어드레스가 L1 분기 예측 저장 장치(206)에 제공된다(블록 400). 페치 어드레스를 제공하게 되면, 제공된 페치 어드레스에 대응하는 분기 예측이 L1 분기 예측 저장 장치(206) 내에 존재하는 지를 결정한다(블록 402). 대응하는 분기 예측이 L1 분기 예측 저장 장치(206) 내에 존재한다면, 그 예측이 전달된다(블록 418). 그러나, L1 분기 예측 저장 장치(206) 내에 대응하는 어떠한 분기 예측도 없는 경우에는, 그 페치 어드레스에 대응하는 L1 분기 예측 저장 장치(206) 내의 엔트리가 다른 페치 어드레스에 대응하는 분기 예측 엔트리에 의해 점유되는지를 결정한다(블록404). 만일 상기 다른 엔트리가 L1 분기 예측 저장 장치(206) 내에 존재하면, 기존의 엔트리는 L1 분기 예측 저장 장치(206)로부터 퇴출된다(블록406). 만일 대응하는 L1 예측기 저장 장치 엔트리가 유효한 엔트리에 의해 점유되어 있지 않으면, L2 분기 예측 저장 장치(260)는 페치 어드레스에 대응하는 분기 예측 엔트리에 질문된다(블록408). 일 실시예에서, L1 분기 예측 저장 장치(206) 및 L2 분기 예측 저장 장치(260)는 동시에 질문된다. 만일 L2 분기 예측 저장 장치(260) 내에 대응하는 어떠한 엔트리도 존재하지 않으면(블록410), 상기 제공된 페치 어드레스 대해 새로운 분기 예측 엔트리가 L1 분기 예측 저장 장치(206) 내에 생성될 수 있다(블록412). 한편, 만일 페치 어드레스에 대응하는 엔트리가 L2 분기 예측 저장 장치(260) 내에 존재한다면, L2 엔트리로부터의 데이터는 페치 어드레스에 대응하는 전체 분기 예측을 재구성하는 데에 이용된다(블록414). 이후, 재구성된 분기 예측은 L1 분기 예측 저장 장치(206)에 저장되고, 분기 예측을 하는 데에 이용하도록 전달된다(블록 418). 유익하게는, 분기 명령에 대응하는 분기 예측 정보는, 분기 실행의 히스토리를 통해 이를 재구성하는 것이 아니라, L2 분기 예측 저장 장치(260)로부터 복구될 수 있다. 또한, 분기 예측에 대응하는 정보의 서브세트 만이 L2 분기 예측 저장 장치(260) 내에 저장될 필요가 있다. 이러한 방식으로, L2 분기 예측 저장 장치(260)의 크기가 보다 작게 만들어질 수 있다.
로컬 분기 예측기 저장 장치
일 실시예에서, 로컬 예측기 저장 장치(206)는 명령 캐시(16)와 동일한 방식으로 구성될 수 있다. 로컬 예측기 저장 장치(206)에 저장된 데이터는 여러 방식(ways)으로 구성된 저장 라인들로 이루어질 수 있다. 일 실시예에서, 로컬 예측기 저장 장치(206)는 명령 캐시(16) 내의 모든 엔트리를 커버하기에 충분한 크기를 갖는다. 대안적인 실시예에서, 로컬 예측기 저장 장치(206)는 명령 캐시(16) 보다 작을 수 있다. 예를 들어, 로컬 예측기 저장 장치(206)는 명령 캐시(16)의 1/4 크기가 될 수 있다. 이러한 실시예에서는, 로컬 예측기 저장 장치(206) 내의 동일한 저장 위치에 대해 인덱스하는 다수의 페치 어드레스들에 대한 엔트리를 구별하기 위해, 로컬 예측기 저장 장치(206) 내의 로컬 예측과 함께 부가적인 비트들(additional bits)이 저장될 수 있다. 일 실시예에서, 글로벌 예측기 저장 장치(205)는 단일 저장 위치가 1개 이상의 페치 어드레스에 대한 예측을 제공하도록 구성될 수 있다. 당업자라면 로컬 예측기 저장 장치(206) 및 글로벌 예측기 저장 장치(205)에 대해 많은 구성들이 가능하다는 것을 쉽게 알 수 있을 것이다.
다음으로, 도 5는 연속적인 예측 바이트들(50)의 예시적인 그룹 및 로컬 예측기 저장 장치(206) 내의 대응하는 엔트리를 도시한다. 도 5에서 명령 내의 각 바이트는 짧은 수직선(예를 들어, 참조 부호 54)으로 도시된다. 또한, 그룹(50) 내의 명령들을 분리하는 수직선들은 바이트들(예를 들어, 참조 부호 56)의 경계를 정한다. 도 5에 나타낸 명령들은 길이가 가변적이기 때문에, 도 5에 도시된 명령들을 포함하는 명령 세트는 가변 바이트 명령 세트이다. 즉, 가변 바이트 길이 명령 세트 내의 제 1 명령은 그 명령 세트 내의 제 2 명령에 의해 점유되는 제 2 수의 바이트들과 다른 제 1 수의 바이트들을 점유할 수 있다. 다른 명령 세트들은 고정 길이가 될 수 있는바, 이에 따라 명령 세트 내의 각 명령은 각각의 다른 명령과 동일한 수의 바이트들을 점유한다.
도 5에 도시된 바와 같이, 그룹(50)은 비분기 명령들(INO-IN4)을 포함한다. 명령들(IN0, IN3, IN4)은 2바이트 명령들이다. 명령(IN1)은 1바이트 명령이고, 명령(IN2)은 3바이트 명령이다. 3개의 테이큰 예측된 분기 명령들(PBO,PB1,PB3)이 또한 도시되는바, 이들은 각각 2바이트를 점유하는 것으로 도시되어 있다. 주목할 사항으로서, 비분기 및 분기 명령들은 다양한 수의 바이트들을 점유할 수 있다.
본원에서 이용되는 어드레스의 오프셋은 어드레스의 다수의 최하위 비트들을 포함한다. 그 수는 오프셋이 관련되는 바이트들의 그룹 내의 각 바이트에 대한 비트들의 서로 다른 엔코딩을 제공하기에 충분하다. 예를 들어, 그룹(50)은 16 바이트, 즉 바이트 0 내지 15이다. 따라서, 그룹 내의 어드레스의 4개의 최하위 비트들은 어드레스의 오프셋을 형성한다. 어드레스의 나머지 비트들은 메인 메모리 내의 연속적인 명령 바이트들의 다른 그룹들로부터 상기 그룹(50)을 식별한다. 또한, 나머지 비트들의 다수의 최하위 비트들은 명령 캐시(16)에 의해 이용되는 인덱스를 형성하여, 상기 그룹(50)을 저장하는 데에 적합한 저장 위치들의 로우(row)를 선택한다.
세트(52)는 그룹(50)에 대응하는 9개의 분기 마커 비트들 0-8의 예시적인 세트이다. 세트(52) 내의 9개 분기 명령들 각각은 그룹(50)의 특정 바이트들에 대응하며, 테이큰 예측된 분기 명령이 대응하는 바이트들 내에서 끝나는 지를 나타낸다. 도시된 실시예에서, 분기 마커 비트 0은 명령 바이트 0에 대응하며, 분기 마커 비트 1은 명령 바이트들 1-2에 대응하며, 분기 마커 비트 2는 명령 바이트들 3-4에 대응하며, 분기 마커 비트 3은 명령 바이트들 5-6에 대응하며, 분기 마커 비트 4는 명령 바이트들 7-8에 대응하며, 분기 마커 비트 5는 명령 바이트들 9-10에 대응하며, 분기 마커 비트 6은 명령 바이트들 11-12에 대응하며, 분기 마커 비트 7은 명령 바이트들 13-14에 대응하며, 그리고 분기 마커 비트 8은 명령 바이트 15에 대응한다. 분기 마커 비트들(52) 이외에, 분기 마커 비트들(52)에 대응하는 분기 예측 정보(450)가 또한 포함된다. 분기 예측 정보(450)는 테이큰 예측된 분기들에 대응하는 정보를 포함하며, 하기에서 설명되는 분기 예측을 수행하는 데에 이용될 수 있다.
도 5에 나타낸 실시예에서, 분기 마커 비트는 "1"로 세트되어, 테이큰 예측된 분기 명령이 대응하는 바이트 범위 내에서 끝남을 나타낸다. 만일 테이큰 예측된 명령이 분기 마커 비트에 대응하는 바이트 범위 내에서 끝난다면, 분기 마커 비트는 "0"으로 세트된다. 결과적으로, 분기 마커 비트 2는 테이큰으로 예측된 분기(PB0)가 명령 바이트 범위들 3-4 내에서 끝남을 나타내도록 세트된다. 분기 마커 비트 6은 테이큰으로 예측된 분기(PB1)가 명령 바이트 범위들 11-12 내에서 끝남을 나타내도록 세트된다. 마지막으로, 분기 마커 비트 7은 테이큰으로 예측된 분기(PB2)가 명령 바이트 범위들 13-14 내에서 끝남을 나타내도록 세트된다. 일 실시예에서, 최대 3개의 테이큰으로 예측된 분기들을 분기 마커 비트들(52)에 의해 나타낼 수 있다. 이러한 실시예에서, 분기 예측 정보(450)는 3개의 개별적인 분기 명령들에 관련된 정보를 포함할 수 있다. 이러한 정보(450)는 분기 명령의 타입을 포함하고, 대응하는 분기의 과거 행위에 대한 정보를 나타낸다. 분기 예측 정보(450)는 하기에서 도 15를 참조하여 설명될 것이다.
로컬 예측 저장 장치(206)에 페치 어드레스를 제공하게 되면, 한 그룹의 분기 마커 비트들(52) 및 분기 예측 정보(450)가 분기 예측을 하는 데에 이용하기 위해 예측 논리(220)에 전달된다. 일 실시예에서, 페치 어드레스의 오프셋은 분기 분기 마커 비트들(52)중 어느 것이 분기 예측을 할 때에 고려될 것인 지를 식별하는 데에 이용될 수 있다. 도 6은 분기 마커 비트들(52)과 페치 어드레스 오프셋들 간의 관계의 일 실시예를 도시한다. 도 6에서, 컬럼들(602-618)을 갖는 테이블은 오프셋 어드레스 및 대응하는 분기 마커 비트를 포함한다. 일반적으로, 분기 마커 비트가 예측을 하는 데에 고려되는 지의 여부는 대응하는 오프셋이 테이블에 표시된 조건들을 만족하는 지의 여부에 달려있다. 예를 들어, 컬럼(602)은, 어드레스의 오프셋이 0이하 또는 0일 경우, 모든 분기 마커 비트들이 분기 예측을 하는 데에 고려될 것임을 나타낸다. 이러한 방식으로, 테이블은 소정의 오프셋에 대해 고려될 최하위 순번의 분기 마커 비트를 나타낸다. 결과적으로, 만일 오프셋이 7이라면, 분기 마커 비트들 4-8이 고려될 것이다. 만일 오프셋이 15라면, 단지 분기 마커 비트 8만이 고려될 것이다.
다음으로, 도 7은 명령 바이트들과 분기 마커 비트 간의 상기 설명한 관계들을 나타낸 다이어그램이다. 도 7은 명령 바이트들(50) 및 대응하는 분기 마커 비트들을 나타낸다. 또한, 명령 바이트(#702), 분기 마커 비트(#704), 각 분기 마커 비트가 대응하는 명령 바이트들(706) 및 각 분기 마커 비트에 대응하는 페치 어드레스 오프셋 708이 도시되어 있다. 분기 정보(450)는 도시되어 있지 않다. 도 5를 참조하여 설명된 바와 같이, 3개의 테이큰 예측된 분기 명령들(PBO-PN2)은 세트된 대응하는 분기 마커 비트들 2, 6 및 7을 갖는 것으로 도시된다. 예로서, 3의 오프셋을 갖는 페치 어드레스가 로컬 예측 저장 장치(206)에 제공되는 것으로 가정한다. 이러한 개요에서, 분기 마커 비트들 2-8은 모두 각 비트 조건들(즉, 분기 마커 비트 2에 대해서는 오프셋<=3, 분기 마커 비트 3에 대해서는 프셋<=5 등)을 만족시킨다. 결과적으로, 현재 페치되는 명령에 대한 시퀀스 이전의 명령에 대응할 때 분기예측을 할 때, 분기 마커 비트들 2-8은 이용되고 분기 마커 비트들 0-1는 실제로 무시된다. 이러한 방식으로, 예측을 수행할 때 어떤 분기 마커 비트들을 고려할 것인 지에 대한 결정이 쉽게 이루어질 수 있다.
도 8은 분기 마커 비트(52)가 예측을 하는 데에 어떻게 이용될 수 있는 지의 일 실시예를 도시한다. 도 8에는, 수신된 페치 어드레스 오프셋(도면에서 "a"로 나타냄)과 도 7에 도시된 오프셋 값들(708)에 대응하는 값들(0,1,3,5,7,9,11,13 및 15)을 비교하는 회로(802)가 포함된다. 수신된 오프셋이 비교되고 있는 값 보다 작거나 같은 각각의 경우, 이 사실을 나타낸는 신호(808)가 AND 게이트(804)에 전달된다. 또한, 분기 마커 비트들(52) 각각이 AND 게이트(804)에 전달된다. 논리 AND 게이트들(808)은 논리 OR 게이트(806)에 결합되는바, 이의 출력은 분기 예측기 이루어지고 있는 지를 나타낸다. 도 8의 예를 참조하여, 이전과 같이 페치 어드레스가 값 3과 동일한 오프셋과 함께 수신되는 것으로 가정하자. 도 7에 나타낸 바와 같이, 오프셋 3을 갖는 명령은 테이큰으로 예측된 분기(PB0)에 대응한다. 이후, 대응하는 분기 마커 비트(52)가 로컬 예측기 저장 장치(206)로부터 도 8에 도시된 논리로 전달된다. 회로(802)는 3의 값을 갖는 오프셋을 수신하고, 게이트들(804C-804I)에 의해 수신된 신호들(808C-808I)을 각각 표명(assertion)한다. 또한, 분기 마커 비트들(2, 6 ,7)은 이진 "1"의 값을 게이트들(804C,804G,804H)에 각각 전달한다. 나머지 분기 마커 비트들은 이진 "0"의 값을 전달한다. 결과적으로, 게이트들(804C,804G,804H) 각각은 게이트(806)에 이진 "1"의 값을 전달하고, 게이트(806)는 분기 예측이 이루어지고 있음을 나타내는 이진 "1"의 값을 전달한다.
도 9는 동적 논리를 이용하는 도 8에 도시된 회로의 일 실시예(900)를 도시한다. 당업자라면 동적 논리의 동작을 쉽게 이해할 수 있을 것이다. 도 9는, 각각 논리 AND 게이트들(804A-804I)에 대응하는 것으로 보여지는 결합된 트랜지스터들(902A-902I)을 포함한다. 또한, 동적 논리에 대해 미리 충전된 값을 공급하는 트랜지스터(904) 및 인버터(906)가 포함된다. 먼저, 인버터(906)의 출력(908)은 회로의 평가 단계 동안, 어떠한 분기 예측도 이루어지고 있지 않음을 나타내는 이진 상태 "0"을 전달한다. 그러나, 1개 이상의 게이트들(902)이 모두 표명된 입력을 갖는 경우, 인버터(906)의 출력(908)은 분기 예측이 이루어지고 있음을 나타내는 이진 "1"의 값으로 변환된다. 당업자라면 동일한 작업을 달성하기 위해 도 9 및 10의 논리가 구현될 수 있는 많은 방법들이 있다는 것을 쉽게 알 수 있을 것이다.
분기 마커 비트 갱신
분기 명령들은 일반적으로 적어도 (마이크로프로세서(10)에 의해 이용되는 명령 세트 내의 분기 명령을 식별하는) 연산코드와 분기 타겟 어드레스를 형성하기 위해 분기 명령의 어드레스 (또는 분기 명령 바로 다음에 오는 명령의 어드레스)에 부가될 변위를 포함한다. 따라서, 분기 명령은 전형적으로 최소 2 바이트들을 점유한다. 이러한 사실의 장점을 취함으로써, 분기 마커 비트는 매 명령 바이트마다 저장될 필요가 없으며, 연속적인 명령 바이트들의 그룹에 대해 저장된 분기 마커 비트들의 수가 감소될 수 있다. 그러나, 분기 마커가 테이큰으로 예측된 분기를 나타내도록 세트되는 단일 바이트 RET 명령을 포함하는 특정한 경우가 존재하지만, 분기 예측은 미스될 수 있다. 이러한 특정 경우를 처리하는 실시예들이 이하 설명될 것이다.
도 11-15는 분기 마커 비트의 갱신 예를 제공한다. 도 10은 한 그룹의 연속적인 명령 바이트들(50), 분기 마커 비트들(52) 및 분기 정보(450)를 나타낸다. 도 10의 예에서는, 어떠한 테이큰 분기들도 예측되지 않으며, 어떠한 분기 마커 비트들(52)도 세트되지 않는다. 이제, 도 11을 참조하면, 명령 바이트들(50), 마커 비트(52) 및 분기 정보(450)가 테이큰으로 예측된 분기 및 분기 예측 유닛(14)의 대응하는 갱신에 이어짐을 나타낸다. 도 11은 테이큰으로 예측된 분기(PB0 1201)가 명령 바이트들(50) 내의 명령 바이트들(#8, #9)에서 검출됨을 나타낸다. 테이큰으로 예측된 분기는 명령 바이트(#9)에서 끝나기 때문에, 분기 마커 비트들(52)은 분기 마커 비트(#5 1203)를 이진 "1"의 값으로 설정함으로써 갱신된다. 또한, 일 실시예에서, 각각의 분기 정보 엔트리들(500A-500C)은 명령 바이트들(50) 내에서 나타나는 제 1, 제 2 및 제 3의 테이큰으로 예측된 분기에 각각 대응한다. 이러한 실시예에서, 테이큰으로 예측된 분기(PB0 1201)는 명령 바이트들(50)의 그룹 내에서 나타나는 제 1의 테이큰으로 예측된 분기로서 검출될 수 있다. 결과적으로, 분기 명령(PB0 1201)에 대응하는 정보가 분기 정보 엔트리(500A)에 저장될 수 있다.
도 12는 제 2의 테이큰으로 예측된 분기의 검출에 응답한 분기 마커 비트들(52)의 갱신을 예시한다. 분기(PB1 1301)에 응답하여, 그리고 분기(PB1 1301)가 명령 바이트(#3) 내에서 끝나기 때문에, 분기 마커 비트(#2 1303)는 이진 "1"의 값으로 세트된다. 또한, 도시된 실시예에서, 새롭게 검출된 분기(PB1 1301)는 그룹(50) 내의 제 1의 테이큰으로 예측된 분기인 것으로 결정된다. 결과적으로, 분기(PB1 1301)에 대응하는 분기 정보는 분기 정보 엔트리(500A)에 대응한다. 그러나, 분기 정보 엔트리(500A)는 현재 도 11의 설명에서 개시되는 바와 같이 분기(PB0 1201)에 대응하는 분기 정보를 포함한다. 결과적으로, 엔트리(500A) 내의 데이터는 엔트리(500B)로 시프트되며, 분기(PB1 1301)에 대응하는 새로운 분기 정보는 엔트리(500A) 내에 저장된다.
도 13은 테이큰으로 예측된 분기 엔트리의 갱신을 예시한다. 도 13의 예에서는, 이후 분기(PB1 1301)에 대한 낫테이큰 예측이 결정된다. 분기(PB1 1301)에 대한 테이큰 예측을 갱신하기 위해, 대응하는 동적 비트(500A)는 이진 "1"의 값으로 세트된다. 따라서, 분기들(PB0,PB1)에 대응하는 분기 예측들이 존재한다. 그러나, 분기(PB1)는 동적(500A)으로 분류되고 분기(PB0)는 여전히 로컬(500B)로 분류된다.
상기 설명에서, 각각의 분기 정보 엔트리(500A-500C)는 그룹(50) 내의 테이큰으로 예측된 특정한 분기에 대응하는 것으로 설명된다. 예를 들어, 엔트리(500A)는 그룹(50) 내에 나타나는 제 1의 테이큰으로 예측된 분기에 대응하며, 엔트리(500B)는 제 2의 테이큰으로 예측된 분기에 대응하며, 그리고 엔트리(500C)는 제 3의 테이큰으로 예측된 분기에 대응한다. 결과적으로, 갱신 이후의 이러한 대응을 유지하기 위해, 엔트리들(500A-500C) 내의 데이터는 시프트될 수 있다. 일반적으로, 새로운 엔트리가 생성되면, 그 엔트리 및 그의 우측까지의 모든 엔트리들에 대응하는 데이터 엔트엔트리들이 새로운 엔트리를 위한 공간을 만들기 위해 우측으로 시프트된다. 예를 들어, 엔트리(500A)에 대응하는 새롭게 테이큰으로 예측된 분기가 검출되고 이 엔트리(500A)가 이미 유효한 엔트리를 저장하고 있으면, 엔트리(500A)의 내용들은 엔트리(500B)로 시프트되고, 엔트리(500B)의 내용은 엔트리(500C)로 시프트되며, 그리고 엔트리(500C)의 내용은 분기 정보(450)로부터 시프트되어 상실된다. 일 실시예에서는, 그룹(50) 내의 테이큰 예측된 분기들, 엔트리들(500) 내의 분기 정보 및 타겟 어레이(208) 내의 타겟들 간에 대응을 유지하기 위해, 타겟 어레이(208) 내의 타겟 어드레스들이 유사하게 시프트될 수 있다. 상기 실시예들은 엔트리들 간에 데이터를 시프트함으로써 대응 관계를 유지하는 것에 대해 설명하지만, 다른 실시예들이 가능하며 고려된다. 예를 들어, 엔트리들 간의 데이터 이동하는 것이 아니라, 엔트리(500) 내에 저장된 비트들 및 타겟 어레이(208) 내의 엔트리가 엔트리들을 특정 분기에 관련시킬 수 있다.
상술한 바와 같이, 단일 바이트 분기 명령에 대한 특별한 경우가 존재한다. 도 14는 단일 바이트 분기 명령에 대한 이러한 예측이 미스될 수 있는 예를 도시한다. 도 14는 바이트 위치 8 내의 단일 바이트 RET 명령(1501)을 포함하는 연속적인 명령 바이트들의 그룹을 도시한다. 분기 마커 비트(#4 1503)는 테이큰으로 예측된 분기를 나타내도록 세트되고, RET 명령(1501)은 명령 바이트 범위 7-8내에서 끝난다. 테이큰으로 예측된 다른 어떠한 분기들도 표시되지 않는다. 이제, RET 명령(1501)을 나타내는 8의 오프셋을 갖는 페치 어드레스가 수신되는 예를 가정하자. 분기 마커 비트(#4)는 이 명령에 대해 분기 예측을 하고자 함을 나타낸다. 그러나, 분기 마커 비트들이 예측 수행 목적을 위해 전달될 때, 분기 대응하는 마커 비트(#4)는 마커 비트 위치 고려 요건들(즉, 8의 값을 갖는 오프셋이 <= 7이다)을충족하지 않고, 분기 마커 비트(#4)는 실제로 무시될 것이다. 도 8의 논리에 의해 도시된 바와 같이, 분기 마커 비트(#4, b45)가 세트되어 게이트(804E)로 전달될 것이다. 그러나 게이트(808E)에 또한 결합되는 신호(808E)는, 그의 조건, 즉 오프셋<=7의 조건이 참인 것으로 평가되지 않기 때문에, 세트되지 않을 것이다. 결과적으로, 도 8의 논레 의해 어떠한 분기 예측도 표시되지 않을 것이다. 일반적으로, 이러한 미스된 예측 개요는 단일 바이트 RET 명령이 어떠한 명령 바이트 위치들 2, 4, 6, 8, 10, 12 또는 14에서 나타낼 때 마다 발생할 수 있다. 이러한 특별한 경우를 다루는 다양한 실시예들 및 메커니즘들에 관해 설명한다.
분기 명령 정보
도 15는 분기 예측 정보(450)의 일 실시예를 도시한다. 위에서 설명한 바와 같이, 각 그룹의 연속하는 명령 바이트들(50)은 로컬 예측기 저장 장치(206) 내에 저장되는 대응하는 세트의 분기 마커 비트(52) 및 분기 예측 정보(450)를 갖는다. 도시된 실시예에서, 분기 예측 정보(450)는 3개의 분기 명령들(500A-500C)에 대한 정보를 포함한다. 각각의 명령들(500A-500C) 내에는 테이큰으로 예측된 분기에 대응하는 정보를 제공하는 6개의 비트들이 포함된다. 도 15에 나타낸 바와 같이, 분기 예측 정보는 동적 비트(502), 종료 조정 비트(504), 및 분기 명령의 타입 및 크기를 분류하는 4개의 비트들(506)을 포함한다. 동적 비트(502)는 로컬 예측기(206)로부터의 로컬 분기 예측이 아닌, 글로벌 예측기(205)로부터의 글로벌 분기 예측이 이용될 것임을 나타내는 데에 이용될 수 있다. 종료 조정 비트(504)는 대응하는 분기 명령이 짝수 바이트에서 끝나는지 홀수 바이트에서 끝나는 지를 나타내는 데에 이용될 수 있다. 마지막으로, 분기 정보(506)는 분기 명령의 타입 및 크기를 분류하는 데에 이용될 수 있다.
또한, 도 15에는 분기 정보(506)의 4개의 예시적인 엔코딩이 도시되어 있다. 나타낸 바와 같이, 각 분기 명령은 종료 비트(504)(본 예에서, 비트 위치 4)를 포함한다. 제 1 엔코딩(508)은 제3 및 제 2 비트들을 각각 "0" 및 "0"으로 세트시킴으로서 조건 또는 비조건 분기 명령을 나타내는 데에 이용된다. 제 2 엔코딩(510)은 제3 및 제 2 비트들을 각각 "0" 및 "1"로 세트시킴으로써 호출 명령을 나타내는 데에 이용된다. 제3 엔코딩(512)은 비트들 3 내지 0을 "1000"으로 세트시킴으로써 리턴 타입 명령을 나타내는 데에 이용된다. 마지막으로, 제4 엔코딩(514)은 비트 3을 "1"로 세트시키고 비트들 2 내지 0을 "000" 이외의 값으로 세트시킴으로써 짝수 바이트에서 끝나는 1 바이트의 리턴 연산코드를 나타내는 데에 이용될 수 있다. 첫 번째 2개의 엔코딩들(508-510) 각각은 또한 명령에 대한 즉시 또는 변위 데이터의 크기를 나타내는 필드(비트들 1 및 0)를 포함한다. 일 실시예에서, 데이터의 1, 2 또는 4 바이트는 각각 비트들 1 및 0을 각각 "00", "01" 및 "10"으로 엔코딩함으로써 나타낼 수 있다. 마지막으로, 도 15에 도시된 제 4 엔코딩(514)은 단일 바이트 리턴 명령이 나타나는 그룹(50) 내의 비제로의 짝수 명령 바이트를 나타내기 위한 필드(비트들 2 내지 0)를 포함한다. 상술한 실시예에서, 제 4 엔코딩(514) 내의 위치 필드는 7개의 값들 "001"-"111"중 하나일 수 있는바, 이들은 각각 바이트 위치들 2, 4, 6, 10, 12 및 14에 대응한다. 이하, 상술한 분기 정보의 이용에 대해 설명한다.
예측 논리
도 16은 예측 논리(220)의 일 실시예를 도시한다. 도 16에는 비교 회로(802), 로컬 예측 회로(900), 타겟 선택 회로(1100) 및 제어 회로(1102)가 포함된다. 비교 회로(802)는 페치 어드레스 오프셋을 수신하도록 결합되며, 로컬 예측 회로(900) 및 타겟 선택 회로(1100)에 신호들(1704)을 전달하도록 결합된다. 타겟 선택 회로(1100)와 로컬 예측 회로(900)는 로컬 예측기 저장 장치(206)로부터 분기 예측 엔트리 정보를 수신하도록 결합된다. 제어 회로(1102)는 로컬 예측 회로(900), 타겟 선택 회로(1100), 로컬 예측기 저장 장치(206) 및 글로벌 예측기(205)에 결합된다. 일반적으로, 비교 회로(802)는 상술한 바와 같이 페치 어드레스를 수신하고, 신호들(1704)을 회로들(900, 1100)에 전달한다. 로컬 예측 회로(900)는 분기 예측이 로컬 예측기 저장 장치(206)로부터 수신된 분기 마커 비트들과 비교 회로(802)로부터의 신호들에 기초하여 이루어지는 지를 결정하도록 구성되며, 결과적인 예측(1710)을 제어 회로(1102)에 전달한다. 타겟 선택 회로(1100)는 또한 로컬 예측기 저장 장치(206)로부터 수신된 분기 마커 비트들을 이용하며, 테이큰으로 예측되는 경우 어떤 분기 타겟이 이용될 것인지에 대해 제어 회로(1102)에 명령(1706)을 전달한다. 제어 회로는 또한 분기 타겟 정보(1714)를 수신하고, 페치 어드레스를 선택하는 멀티플렉서(202)로 신호(240)를 전달한다. 또한, 일 실시예에서, 회로(1102)는 또한 분기 예측(250)을 분기 어드레스 계산기(270)로 전달한다. 또한, 개시된 실시예는 특정 분기에 대한 대안적인 예측을 제공할 수 있는 글로벌 예측기 메커니즘을 포함하지만, 이 메커니즘은 글로벌 예측기 메커니즘없이 이용될 수 있다.
도 16에 도시된 타겟 선택 회로(1100)는 일반적으로 분기 명령에서 이용하기 위한 수많은 타겟들 중에서 하나의 타겟을 선택하도록 구성될 수 있다. 일 실시예에서, 타겟 선택 회로(1100)는 수신된 페치 어드레스의 오프셋 이전의 오프셋들에 대응하는 명령 바이트들에 대해 세트된 수많은 분기 마커 비트들을 결정할 수 있다. 이러한 정보에 기초하여, 제 1, 제 2 또는 제3 분기 타겟이 선택될 수 있다(3개의 분기 타겟을 포함하는 실시예의 경우). 예를 들어, 3개의 가능한 분기 타겟이 이용가능하며, 6의 오프셋이 수신된다. 타겟 선택 회로(1100)는 분기 마커 비트 6(즉, 분기 마커 비트 0-5) 이전에 발생하는 분기 마커 비트들의 범위 중에서 세트되는 분기 마커 비트들의 수를 결정할 수 있다. 만일 분기 마커 비트들이 그 범위 내에 세트되어 있지 않으면, 분기는 제 1의 테이큰으로 예측된 분기로서 식별되고 제 1 타겟이 선택된다. 만일 단지 하나의 분기 마커 비트가 그 범위 내에 세트되면, 그 분기는 제 2의 테이큰으로 예측된 분기로서 식별되고 제 2 타겟이 선택된다. 만일 2개의 분기 마커 비트들이 세트되면, 제 3 타겟이 선택된다.
타겟 선택 회로(1100)를 실행하는 수많은 가능한 방법들이 있지만, 도 17은 동적 논리를 이용하는 한 예시적인 실시예(1800)를 예시한다. 도 17의 실시예에서, 트랜지스터들의 로우(1202-1216) 및 컬럼(1220-1234)은 수신된 분기 마커 비트들과 오프셋 어드레스에 기초하여 타겟이 선택되는 방식으로 구성된다. 회로(1800)에서는, 3개의 타겟 선택들, 즉 T1(1212), T2(1214) 및 T3(1218)이 가능하다. 일반적으로, 회로(1800)는 수신된 분기 마커 비트들 및 비교 회로(802)로부터 수신된 신호들을 이용하여, 이들이 검출될 때의 고려사항으로부터 특정 타겟들을 제거한다. 예를 들어, 만일 단일 분기 마커가 페치 어드레스 오프셋 이전에 발생하는 것으로 검출되면, 고려사항에서 제 1 타겟이 제거되고, 제 2 타겟이 선택된다. 만일 2개 세트의 분기 마커 비트들이 페치 어드레스 오프셋 이전에 발생되는 것으로 검출되면, 제 3 타겟이 선택된다. 당업자라면 회로(1800)의 동작을 쉽게 알 수 있겠지만, 이하 간단히 설명한다.
도 17에 도시된 제 1 로우(1202)는 트랜지스터 쌍들(1220-1234)로 구성되는바, 이들은 수신된 오프셋 이전에 발생한 어떠한 분기 마커 비트들의 세트가 있는 지를 결정한다. 디폴트에 의해, 타겟 T1(1212)은 참 또는 이진 "1"로 평가한다. T1(1212)의 값은 또한 T2(1214)에 대한 값을 제공하는 논리 AND 게이트에 반전 입력의 역할을 한다. 결과적으로, T1(1212)가 이진 "1"일 때, T2는 이진 "0"으로 평가된다. 로우(1202) 내의 각 쌍의 트랜지스터들은 분기 마커 비트와 페치 어드레스 오프셋에 대응하는 비교 회로(802)로부터 신호를 수신한다. 예를 들어, 컬럼(1220) 및 로우(1202)에서의 트랜지스터 쌍은 분기 마커 비트 0(b0)에 대응하는 제 1 입력과 수신된 오프셋 어드레스가 0 이상(즉, 수신된 오프셋 어드레스가 a로 표시될 때, a>0)인지를 나타내는 제 2 입력을 수신한다. 2개의 입력들이 이진 "1"로 평가되는 경우, 타겟 T1(1212)은 수신된 페치 어드레스 이전에 테이큰으로 예측된 분기가 있음을 나타내는 이진 "0"으로 평가될 것이며, 타겟 T1(1212)은 예측된 타겟으로서 고려사항으로부터 제거된다. 나머지 로우들(1204-1216)은 고려사항으로부터 타겟 T2(1214)을 제외하는 현재의 오프셋 이전에 2개의 분기 마커 비트들의 세트가 있는 지를 결정하도록 구성된다. 로우(1204)는 분기 마커 비트(b0)와 각각의 분기 마커 비트(b1-b7)를 비교한다. 로우(1206)는 분기 마커 비트(b1)를 분기 마커 비트(b2-b7)와 비교하고, 이하 같은 방식으로 비교한다. 2개의 분기 마커 비트들이 현재의 오프셋 이전에 발생되는 것으로 검출되면, 타겟 T3(1218)은 "1"로 평가되고, 타겟 T2(1214)는 "0"으로 평가된다. 그러나, 만일 이전의 2개의 분기 마커 비트들이 로우들(1204-1216)에 의해 세트되는 것으로 검출되지 않으면, 타겟 T2(1214)는 이진 "1"로 평가된다. 이미 언급한 바와 같이, 회로(1800)는 예시적인 것이다. 대응하는 타겟을 선택하는 많은 방법들이 가능하며 고려된다.
다음으로, 도 18은 제어 회로(1102)의 일 실시예를 도시한다. 도 18에는 엔코더 회로(1820) 및 멀티플렉서들(1832, 1830)이 포함된다. 멀티플렉서(1832)는 예측기 회로(900)로부터 로컬 예측(1710)을 수신하고, 글로벌 예측기(205)로부터 글로벌 예측(1712)을 수신하도록 결합된다. 멀티플렉서(1830)는 로컬 예측기(206)로부터 3개의 분기 명령들에 대응하는 분기 정보(1714)를 수신하도록 결합된다. 또한, 멀티플렉서(1830)는 타겟 선택 회로(1100)로부터 타겟 선택 신호(1706)를 수신하도록 결합된다. 선택 신호(1706)는 멀티플렉서(1830)로부터 엔코더 회로(1820)에 전달하기 위한 분기 정보(1840)를 선택한다. 또한, 도시된 실시예에서, 분기 정보(1840) 내에 포함된 동적 비트(1808)는 멀티플렉서(1832)로부터 엔코더회로(1820)로 전달하기 위한 로컬(1710) 또는 글로벌(1712)을 선택하는 데에 이용된다. 분기 정보(1840) 및 예측(1806)을 이용하여, 엔코딩 회로(1820)는 분기가 테이큰으로 예측되는지 낫테이큰으로 예측되는 지를 결정할 수 있다. 어떠한 분기도 테이큰으로 예측되지 않는 경우, 엔코딩 회로(1820)는 멀티플렉서(212)로부터의 순차 어드레스(232)를 전달하기 위해 선택 신호(240)를 엔코드하도록 구성될 수 있다. 대안적으로, 엔코더 회로(1820)는 리턴 어드레스(232) 또는 타겟 어레이(208)로부터 수신된 분기 타겟 어드레스를 선택하도록 신호(240)를 엔코드할 수 있다. 도시된 실시예에서, 동적 비트(1808)는 로컬 예측(1710) 또는 글로벌 예측(1712)을 선택하는 데에 이용될 수 있다. 일 실시예에서, 분기가 상대적으로 예측불가능한 행위를 나타낼 때, 글로벌 분기 예측 히스토리는 그 분기에 대한 예측의 정확도를 개선하는 데에 이용될 수 있다. 이러한 경우, 동적 비트는 로컬 분기 예측이 아닌 글로벌 분기 예측이 이용될 것임을 나타내도록 세트될 수 있다.
분기 어드레스 계산
전술한 바와 같이, 일 실시예에서, 멀티플렉서(212)에 의해 전달될 신호(240)에 의해 선택되는 페치 어드레스(243)는 분기 예측 유니트(16)에 의해 소정의 페치 어드레스에 대해 전달되는 마지막 분기 예측을 제공할 수 있다. 그러나, 다른 대안적인 실시예에서, 분기 예측 유닛(14)은 초기 단계에서 오예측을 검출하기 위해 분기 어드레스 계산을 수행하도록 구성된다. 도 19는 분기 어드레스 계산기(270)의 블록도이다. 도시된 실시예에서, 분기 어드레스 계산기(270)는 멀티플렉서(222)로부터 어드레스(236)를, 로컬 예측기(206)로부터 예측 정보(242)를, 명령캐시(16)로부터 명령 바이트들(241)의 그룹을, 그리고 멀티플렉서(212)로부터 타겟 어드레스(243)를 수신하도록 구성된다. 분기 어드레스 계산기(270)는 또한 페치 어드레스(245)를 전달하도록 구성된다.
일반적으로, 분기 어드레스 계산기(270)는 수신된 페치 어드레스(236)와 분기 명령 중간 데이터(241)에 기초하여 상대적인 분기 타겟 어드레스를 계산하도록 구성된다. 이후, 새롭게 계산된 타겟 어드레스는 예측된 타겟 어드레스(243)와 비교된다. 만일 새롭게 계산된 타겟 어드레스가 예측된 타겟 어드레스(243)와 동일하지 않으면, 오예측이 검출되고 새롭게 계산된 타겟은 이후 페치 어드레스(245)로서 전달된다. 유익하게는, 분기 오예측이 초기에 검출되고 새로운 페치 어드레스가 초기에 계산될 수 있다.
도 19에 나타낸 실시예에서, 예측된 분기 명령에 대응하는 정보는 버스(1850)를 통해 로컬 예측기(206)로부터 전달된다. 일 실시예에서, 분기 정보(1850)는 한 그룹의 명령 바이트들 내에 대응하는 분기 명령의 오프셋 어드레스를 포함한다. 또한, 한 그룹의 명령 바이트들(241)이 명령 캐시(16)로부터 멀티플렉서(1406)로 전달된다. 수신된 오프셋 및 종료 비트(504)를 이용하면, 분기 정보(1850) 내에 포함된 정보, 즉 선택 신호(1420)가 멀티플렉서(1406)로 전달될 수 있고 대응하는 분기 명령은 멀티플렉서(1406)로부터 멀티플렉서(1408)로 전달될 수 있다. 또한, 수신된 정보(1850) 내에 포함된 수신된 분기 정보(506)를 이용하면, 신호(1422)는 예측된 분기 명령에 대응하는 중간 데이터(1424)를 선택하여 전달하는 멀티플렉서(1408)로 전달될 수 있다. 페치 어드레스(236)는 멀티플렉서(1414)와페치 어드레스(236)로부터 베이스 어드레스를 감산하도록 구성되는 회로(1402)로 전달된다. 일 실시예에서, 베이스 어드레스 베이스는 x86 어드레스 전이 메커니즘의 대응하는 세그먼트부에 의해 지정되는 어드레스에 대응한다. 그 베이스의 감산에 이어서, 회로(1402)는 그 결과 어드레스를 회로(1404)에 전달하는바, 이는 상기 결과 어드레스를 멀티플렉서(1408)로부터 수신되는 중간 데이터(1424)에 부가하고 그 결과(1413)를 회로(1410)에 전달하도록 구성된다.
상술한 것 이외에, 예측된 타겟(243)은 멀티플렉스(1414) 및 회로(1412)에 전달되는바, 상기 회로(1412)는 베이스 어드레스를 감산함으로써 예측된 페치 어드레스를 조정하고 그 결과 어드레스(1415)를 회로(1410)로 전달하도록 구성된다. 계산된 어드레스(1413)와 조정된 페치 어드레스(1415)를 수신시, 회로(1410)는 그 둘을 비교하도록 구성된다. 그 둘이 동일하지 않을 경우, 회로(1410)는 멀티플렉서(1414)로부터 전달하기 위한 페치 어드레스(236)를 선택하도록 구성된다. 회로(1430)는 오비교의 경우 페치 어드레스(236)를 전달하도록 구성될 수 있다. 계산되고 조정된 페치 어드레스가 동일한 것으로 비교되면, 회로(1430)는 새로운 페치 어드레스를 전달하지 않도록 구성될 수 있다. 또한, 회로(1430)는 예측 신호(250)가 낫테이큰 예측을 나타냄을 검출함에 응답하여, 새로운 페치 어드레스를 전달하지 않도록 구성될 수 있다.
일 실시예에서, 2개의 페치 어드레스들이 페치 어드레스(236)의 수신에 응답하여 분기 예측 유닛(14)에 의해 결정되어 전달될 수 있다. 멀티플렉서(212)로부터 전달되는 제 1 페치 어드레스는 명령 캐시(16)로부터 명령 페치시에 이용하기 위한새로운 페치 어드레스로서 즉시 이용될 수 있다. 동시에, 멀티플렉서(212)로부터 전달되는 페치 어드레스는 분기 어드레스 계산기(270)로 전달되어 상기 비교를 수행한다. 멀티플렉서(212)를 통해 전달되는 페치 어드레스가 상술한 바와 같이 분기 어드레스 계산기(270)에 의해 계산된 페치 어드레스와 동일하지 않을 경우, 분기 어드레스 계산기(270)는 명령 캐시(16)로부터 명령을 페치할 때 이용될 제 2 페치 어드레스를 전달한다.
분기 예측 희생 캐시
상술한 바와 같이, 희생 캐시(260)를 이용하여 로컬 예측기 저장 장치(206)로부터 퇴출된 분기 예측 정보를 저장할 수 있다. 도 20은 로컬 예측기 저장 장치(206)와 희생 캐시(260) 간의 상호작용의 일 실시예를 예시하는 블록도이다. 로컬 예측기 저장 장치(206)와 희생 캐시(260) 이외에, 도 20은 명령 캐시(16), L2 캐시(1828) 및 디코더(400)를 나타낸다. 도시된 실시예에서, 희생 캐시(260)는 로컬 예측기 저장 장치(206)로부터 퇴출된 분기 예측 정보를 저장하도록 구성되고 L2 캐시(1828)는 프로그램 명령들을 포함하는 데이터를 저장하도록 구성된다.
엔트리가 로컬 예측기 저장 장치(206)로부터 퇴출될 때, 퇴출된 엔트리에 대응하는 동적 비트들과 분기 마커 비트들은 희생 캐시(260) 내에 저장하기 위해 버스(2108)를 통해 희생 캐시(260)에 전달된다. 종료 조정 비트들(504)과 분기 정보(506)와 같은 퇴출된 엔트리에 대응하는 다른 분기 명령 정보는 버려진다. 유사하게, 도시된 실시예에서, 명령 캐시(16)로부터 퇴출된 데이터는 L2 캐시(1828) 내에 저장하기 위해 버스(2106)를 통해 전달될 수 있다. 이후, 로컬 예측기 저장장치(206)와 명령 캐시(16)에 페치 어드레스(236)를 제공하면, 예측된 페치 어드레스에 대응하는 분기 예측 엔트리가 로컬 예측기 저장 장치(206) 내에 존재하는 지에 대해 결정한다. 대응하는 엔트리가 로컬 예측기 저장 장치(206) 내에 존재하면, 희생 캐시(260)는 대응하는 엔트리에 대해 질문될 수 있다. 희생 캐시(260) 내에서 유효한 대응하는 엔트리가 검출되면, 분기 마커 비트들과 동적 비트들은 디코더(400) 및 로컬 예측기 저장 장치(206)로 버스(2102)를 통해 전달된다. 로컬 예측기 저장 장치(206)는 대응하는 엔트리 내의 동적 비트들과 수신된 분기 마커 비트들을 저장하도록 구성된다. 또한, 페치 어드레스(236)에 대응하는 한 그룹의 명령들은 버스(2104)를 통해 디코더(400)와 명령 캐시(16)로 전달된다.
수신된 명령들과 분기 마커 비트들을 이용하면, 디코터(400)는 로컬 예측기 저장 장치(206)에 대한 분기 예측 엔트리의 나머지 부분을 재구성할 수 있다. 디코더는 버스(2104)를 통해 수신되는 명령들의 그룹 내의 테이큰으로 예측된 분기들의 위치를 결정하기 위해 버스(2102)를 통해 수신된 분기 마커 비트들을 이용할 수 있다. 또한, 디코더(400)는 그들의 타입(예를 들어, 비조건적, 조건적), 분기가 짝수 바이트에서 끝나는지 홀수 바이트에서 끝나는지, 그리고 분기 명령에 대응하는 즉시 데이터의 크기를 결정하기 위해, 테이큰으로 예측된 것으로 식별된 분기들을 디코드할 수 있다. 이러한 결정에 기초하여, 디코더(400)는 로컬 예측기 저장 장치(206)에 대한 대응하는 분기 예측 엔트리의 나머지 부분을 재생시킬 수 있다. 도시된 실시예에서, 분기 예측 엔트리의 나머지 부분은 분기 정보(506) 및 종료 조정 비트(504)에 대응한다. 유익하게는, 로컬 예측기 저장 장치(206) 내의 전체 분기 예측 엔트리는 명령들의 대응하는 그룹을 재실행시킬 필요없이 재생된다. 또한, 희생 캐시(260) 내에는 분기 예측 엔트리의 일부 만이 저장된다. 결과적으로, 희생 캐시(260)는 더 작아질 수 있다.
도 21은 또한 로컬 예측기 저장 장치(206) 내의 분기 예측 엔트리의 재생성을 예시한다. 도 21은 로컬 예측기 저장 장치(206) 내에 희생 캐시(260), 디코더(400) 및 엔트리(2100)를 포함한다. 예시된 바와 같이, 분기 마커 비트(2120) 및 동적 비트들(2122)은 버스(2108)를 통해 희생 캐시로 퇴출되고 희생 캐시(260)로부터 버스(2102)를 통해 검색되는 데이터를 포함한다. 분기 정보(2130)는 분기 정보(506)와 종료 조정 비트들(504)에 대응하는 데이터를 포함한다. 분기 정보(2130)는 로컬 예측기 저장 장치(206)로부터 엔트리(2100)의 퇴출시에 버려진다. 상술한 바와 같이, 디코더(400)는 분기 정보(2130)를 재생성하고 재생성된 데이터를 엔트리(2110)를 통해 전달하도록 구성된다.
상술한 바와 같이, 페치 어드레스(236)는 로컬 예측기 저장 장치(206)와 명령 캐시(16) 모두에 제공된다. 그러나, 다른 대안적인 실시예들에서, 페치 어드레스(236)는 또한 로컬 예측기 저장 장치(206)와 명령 캐시(16)에 제공됨과 동시에, 희생 캐시(260) 및/또는 L2 캐시(1828)에 제공될 수 있다. 또한, 대안적인 실시예에서, L2 캐시(1828)는 상술한 바와 같이, 로컬 예측기 저장 장치(206)로부터 퇴출된 데이터를 저장하도록 구성될 수 있다. 도 22는 L2 캐시(1828)이 프로그램 명령들과 대응하는 분기 예측 정보를 저장하도록 구성되는 실시예를 예시한다. 도시된 실시예에서, 로컬 예측기 저장 장치(206)는 퇴출된 분기 예측 정보를 버스(220)를통해 L2 캐시(1828)로 전달하도록 구성된다. 명령 캐시(16)는 퇴출된 프로그램 명령들을 버스(220)를 통해 L2 캐시(1828)로 전달하도록 구성될 수 있다. 프리페치 유닛(12)은 L2 캐시(1828)로부터 분기 예측 정보와 프로그램 명령들을 모두 페치하도록 구성된다. 프리페치는 또한 L2 캐시(1828)로부터 페치된 프로그램 명령들과 분기 정보에 기초하여 전체 분기 예측 엔트리를 검색하도록 구성된다. 이후, 전체 분기 예측 엔트리는 버스(2202)를 통해 로컬 예측기 저장 장치(206)로 전달되고, 대응하는 페치된 프로그램 명령들은 버스(2204)를 통해 명령 캐시(16)로 전달될 수 있다.
미스된 예측들의 검출
상기 설명한 바와 같이, 단일 바이트 RET 명령을 필요로 하는 특수한 경우가 있다. 도 14에 예시된 바와 같이, 테이큰으로 예측되는 특정 위치들에서 일어나는 단일 바이트 RET 명령은 예측 논리(220)에 의해 조사된 다음, 낫테이큰으로 예측된다. 하기의 설명은 이러한 미스된 예측들을 검출하도록 구성되는 분기 예측 유닛(14)의 일 실시예가 설명된다. 도 23은 분기 예측 유닛(14)의 일 실시예를 나타내는 블록도이다. 도 23의 실시예는 도 2의 것과 유사하다. 그러나, 도 23의 실시예에서, 리턴 어드레스 스택(230)은 멀티플렉서(221A)에 결합되고, 분기 예측 계산기(270A)는 분기 어드레스 계산기(270)와 비교될 때에 수정되며, 신호(223A)는 멀티플렉서(221A)의 3개의 입력들중 하나로부터 선택되도록 구성된다. 일반적으로, 도 23에 도시된 실시예는 전술한 바와 같이 동작한다. 그러나, 분기 어드레스 계산기(270A)는 단일 바이트 RET 명령들에 대응하는 미스된 명령들을 검출하고, 응답으로 리턴 스택(230)으로부터 페치 어드레스를 선택하도록 구성된다.
도 24는 분기 어드레스 계산기(270A)의 일 실시예를 나타낸다. 분기 어드레스 계산기(270A)는 분기 어드레스 계산기(270)의 것과 유사하게 구성되며, 상술한 바와 같이 버스(245)를 통해 전달하기 위한 제 2 페치 어드레스를 계산할 수 있다. 그러나, 분기 어드레스 계산기(270)에서와 같이 회로(1430)로부터 제어 신호(223)와 어드레스(245)를 전달하는 것이 아니라, 회로(1430)는 잠재적 제 2 페치 어드레스(2410)를 제어 회로(2400)로 대응하는 선택 신호(2412)를 멀티플렉서(2402)로 전달하도록 구성된다. 또한, 분기 어드레스 계산기(270A)는 단일 바이트 RET 명령들에 대응하는 미스된 예측들을 검출하도록 구성되는 미스된 예측 회로(missed prediction circuit)(2450)를 포함한다. 미스된 예측 회로(2450)는 로컬 예측기 저장 장치(206)로부터 분기 타겟 정보(450)를, 예측 논리(220)으로부터 예측(250)을, 그리고 페치 어드레스(236)을 수신하도록 결합된다. 또한 회로(2450)는 선택 신호(2420, 2422)를 멀티플렉서(2402)로 전달하도록 결합된다. 신호(2422)는 또한 제어 회로(2400)에 결합된다.
미스된 예측의 검출에 응답하여, 미스된 예측 회로(2450)는 멀티플렉서(221A)로부터 리턴 어드레스를 선택하도록 구성되는 선택 신호(2420)를 전달하고, 미스된 예측의 검출을 나타내며, 멀티플렉서(2402)로부터의 출력을 위해 신호(2420)를 선택하도록 구성되는 선택 신호(2422)를 전달한다. 일 실시예에서, 미스된 예측 회로(2450)는 예측(250)이 테이큰임을 나타내는 경우 멀티플렉서(2402)로부터의 전달을 위해 항상 신호(2412)를 선택하도록 구성될 수있다. 이러한 방식으로, 미스된 예측 회로(2450)는 단지, 예측 논리(220)이 낫테이큰 예측을 전달할 때, 미스된 예측의 검출을 수행할 수 있다. 멀티플렉서(2402)는 멀티플렉서(221A)로부터 제 2 페치 어드레스(245)를 선택하도록 구성되거나, 또는 멀티플렉서(221A)로부터 리턴 어드레스를 선택하도록 구성될 수 있는 신호(2460)를 전달하도록 구성된다.
제어 회로(2400)는 제 2 페치 어드레스가 오예측 또는 RET 명령의 미스된 예측에 의해 필요한지를 결정하고, 버스(245)와 신호(223A)를 통해 대응하는 정보를 전달하도록 구성된다. 일 실시예에서, 신호(2410)는 회로(1410)에 의한 오비교의 지시와 페치 어드레스를 포함한다. 도시된 실시예에서, 제어 회로(2400)는 제 2 페치 어드레스가 2 조건들 중 하나의 검출에 응답하여 요구되는지를 결정할 수 있다. 제 2 페치 어드레스를 요구하는 제 1 조건은 테이큰 예측(250)의 검출에 대응하며 신호(2410)에 의해 나타낸 바와 같은 회로(1410)에 의한 오비교의 검출에 대응한다. 제 1 조건의 검출에 응답하여, 제어 회로는 버스(245)와 대응하는 선택 신호(223A)를 통해 수신된 어드레스(2410)를 전달하도록 구성된다. 이 경우, 선택 신호(223A)는 회로(1430)로부터 전달되는 신호(221A)에 대응하며 멀티플렉서(221A)로부터 전달하기 위한 신호(245)를 선택하도록 구성된다. 제 2 페치 어드레스를 요구하는 제 2 조건은 낫테이큰 예측(250)의 검출과 신호(2422)에 의해 나타낸 바와 같은 미스된 예측의 검출에 대응한다. 이러한 제 2 조건의 검출에 응답하여, 제어 회로(2400)는 미스된 예측 회로(2450)에 의해 전달되는 신호(2420)에 대응하는 선택 신호(223A)를 전달한다. 이러한 경우, 전달된 선택 신호(223A)는멀티플렉서(221A)로부터 전달하기 위한 리턴 어드레스(230)를 선택하도록 구성된다. 만일 제 1 조건 또는 제 2 조건이 모두 제어 회로(2400)에 의해 검출되지 않는 다면, 제 2 페치 어드레스는 전달되지 않는다.
도 25는 미스된 예측 회로(2450)의 일 실시예를 예시하는 블록도이다. 미스된 예측 회로(2450)는 후보 회로(candidate circuit)(2502), 짝수 바이트 회로(2504), 매칭 회로(2506) 및 제어 회로(2508)을 포함한다. 후보 회로(2502)는 분기 정보(450)를 수신하도록 결합되며, 짝수 바이트 회로(2504)는 페치 어드레스(236)를 수신하도록 결합되고, 제어 회로(2508)는 예측(250)을 수신하도록 결합된다. 또한, 매칭 회로(2506)는 후보 회로(2502)와 짝수 바이트 회로(2504)로부터 신호들(2520, 2522)을 각각 수신하도록 결합된다. 제어 회로(2508)는 매칭 회로(2506)로부터 신호(2530)를 수신하도록 결합된다.
도 25에 도시된 실시예에서, 후보 회로(2502)는 분기 정보(450)가 짝수 바이트 위치에서 RET 명령에 대응하는 유효 엔트리를 포함하는지를 결정하도록 구성된다. 상술한 바와 같이, 분기 정보(450)는 3개의 분기 명령들(500A-500C)에 대응하는 분기 정보를 포함할 수 있다. 도 15에 나타낸 엔코딩을 이용하면, RET 명령은 분기 정보 비트 #3이 이진 "1"과 동일한 것으로 식별될 수 있다. 또한, 종료 조정 비트를 이용하여 짝수 바이트에서 종료하는 명령을 검출할 수 있다. 이후, 짝수 바이트 상의 RET 명령에 대응하도록 결정되는 분기 명령들(500A-500C)은 미스된 예측 후보로서 고려될 수 있고, 후보 검출의 긍정적인 표시(positive indication)와 함께 매칭 회로(2506)에 전달될 수 있다. 짝수 바이트 회로(2504)는 짝수 어드레스에대응하는 페치 어드레스를 결정하도록 구성된다. 일 실시예에서, 짝수 바이트 회로(2504)는 이러한 결정을 수행하기 위해 수신된 페치 어드레스(236)의 최하위 비트를 비교한다. 만일 페치 어드레스(236)의 최하위 비트가 이진 "0"과 동일한 것으로 검출되면, 짝수 페치 어드레스가 결정될 수 있고 대응하는 긍정적 표시(2522)가 매칭 회로(2506)로 전달될 수 있다.
회로(2502, 2504)로부터 긍정적 표시의 수신에 응답하여, 매칭 회로(2506)는 페치 어드레스(236)에 대응하는 미스된 예측 후보를 검출하도록 구성된다. 일 실시예에서, 페치 어드레스(236)의 오프셋의 3-1 위치의 비트들은 후보의 분기 정보의 2-0위치의 비트들과 비교된다. 전술한 바와 같이, RET 명령의 분기 정보(506)의 2-0위치의 비트들은 RET 명령의 짝수 바이트 위치를 나타낸다. 하기 테이블은 짝수 페치 어드레스 오프셋과 바이트 위치 분기 정보 간의 상호 관계를 예시한다.
짝수 페치 어드레스 오프셋(비트들 3-0) 분기 정보 바이트 위치(비트들 2-0)
0000 000
0010 001
0100 010
0110 011
1000 100
1010 101
1100 110
1110 111
표 1로부터 알 수 있는 바와 같이, 짝수 페치 어드레스 오프셋의 비트들 3-1과 분기 정보(506)의 비트들 2-0 간에 직접적인 매치가 이루어질 수 있다. 결과적으로, 매칭 회로(2506)는 RET 명령에 대응하는 후보 분기 정보를 페치 어드레스 오프셋과 매치시킬 수 있다. 이러한 매치의 검출에 응답하여, 매칭 회로(2506)는 이러한 검출을 나타내는 신호(2530)를 제어 회로(2508)에 전달하도록 구성된다. 도시된 예시적인 실시예에서, 제어 회로(2508)는 낫테이큰 예측(250)의 검출과 매치의 표시(2530)에 응답하여, 멀티플렉서(221A)로부터 리턴 어드레스를 선택하도록 구성되는 신호들을 전달하도록 구성된다. 멀티플렉서(221A)로부터 리턴 어드레스(230)의 선택을 실행하기 위해, 제어 회로(2508)는 신호들(2422, 2420)을 전달한다. 신호(2420)는 멀티플렉서(221A)로부터 리턴 어드레스(230)를 선택하도록 엔코딩으로 구성된다. 선택 신호(2422)는 신호(2412) 또는 신호(2420)중 하나를 멀티플렉서(2422)로부터 출력하기 위해 선택하도록 구성된다. 낫테이큰 예측(250)의 검출 및 매치의 표시(2530)에 응답하여, 신호(2422)는 멀티플렉서(2402)로부터의 출력을 위해 신호(2420)를 선택한다. 그렇지 않으면, 신호(2422)는 멀티플렉서(2402)로부터 출력을 위해 신호(2412)를 선택한다.
다음으로, 도 26은 버스 브리지(2602)를 통해 다양한 시스템 구성요소들에 결합되는 프로세서(10)를 포함하는 컴퓨터 시스템(2600)의 일 실시예의 블록도를 도시한다. 다른 실시예들이 가능하며 고려된다. 도시된 시스템에서, 메인 메모리(2604)는 메모리 버스(2606)을 통해 버스 브리지(2602)에 결합되고, 그래픽 콘트롤러(2608)는 AGP 버스(2610)를 통해 버스 브리지(2602)에 결합된다. 마지막으로, 복수의 PCI 디바이스들(2612A-2612B)은 PCI 버스(2614)를 통해 버스 브리지(2602)에 결합된다. 또한, 제 2 버스 브리지(2602)가 EISA/ISA 버스(2620)를 통해 1개 이상의 EISA 또는 ISA 디바이스들(1618)에 전기적인 인터페이스를 제공하기 위해 제공될 수 있다. 프로세서(10)는 CPU 버스(2624)를 통해 버스브리지(2602) 및 선택적인 L2 캐시(1828)에 결합된다.
버스 브리지(2602)는 프로세서(10), 메인 메모리(2604), 그래픽 콘트롤러(2608) 및 PCI 버스(2614)에 부착된 디바이스들 간에 인터페이스를 제공한다. 버스 브리지(2602)에 접속된 디바이스들중 하나로부터 동작이 수신되면, 버스 브리지(2602)는 동작의 타겟(예를 들어, 특정 디바이스 또는 PCI 버스(2614)의 경우에 타겟은 PCI 버스(2614) 상에 있음)을 식별한다. 버스 브리지(2602)는 타겟 디바이스로 그 동작을 라우팅한다. 버스 브리지(2602)는 일반적으로, 소스 디바이스 또는 버스에 의해 이용되는 프로토콜로부터 타겟 디바이스 또는 버스에 의해 이용되는 프로토콜로 변환한다.
PCI 버스(2614)에 대한 ISA/EISA 버스에 인터페이스를 제공하는 것 이외에, 제 2 버스 브리지(2616)는 필요할 때 부가적 기능성을 포함시킬 수 있다. 제 2 버스 브리지(2616)의 외부에 있거나 그 내에 통합되어 있는 입/출력 콘트롤러(미도시)가 또한 필요시 키보드 또는 마우스(2622) 및 다양한 직렬 및 병렬 포트들에 대한 동작 지원을 제공하도록 컴퓨터 시스템(2600) 내에 포함될 수 있다. 외부 캐시 유닛(미도시)은 다른 실시예에서, 프로세서(10)와 버스 브리지(2602) 간의 CPU 버스(2624)에도 결합될 수 있다. 대안적으로, 외부 캐시는 버스 브리지(2602)에 결합될 수 있고, 외부 캐시에 대한 캐시 제어 논리는 버스 브리지(2602) 내에 통합될 수 있다. L2 캐시(1828)는 또한 프로세서(10)에 대한 배후 구성(backside configuration)으로 도시된다. 주목할 사항으로서, L2 캐시(1828)는 프로세서(10)로부터 분리될 수 있고, 프로세서(10)와 카트리지(예를 들어, 슬롯 1 또는 슬롯 A)내에 통합되거나, 또는 심지어 프로세서(10)와 함께 반도체 기판 상에 집적될 수 있다.
메인 메모리(2604)는 응용 프로그램들이 저장되는 메모리로서, 프로세서(10)는 이 메모리로부터 우선적으로 실행된다. 적합한 메인 메모리(2604)로는 DRAM(다이내믹 랜덤 액세스 메모리) 등이 있다. 예를 들어, 복수의 SDRAM(동기 DRAM) 또는 램버스 DRAM(RDRAM)의 뱅크들이 적합할 수 있다.
PCI 디바이스들(2612A-2612B)은 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이버 또는 드라이버 콘트롤러, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드와 같은 다양한 주변 장치들을 나타낸다. 유사하게, ISA 디바이스(2618)는 모뎀과 같은 여러 타입의 주변 장치, 사운드 카드 및 GPIB 또는 필드 버스 인터페이스 카드들과 같은 다양한 데이터 획득 카드를 나타낸다.
그래픽 콘트롤러(2608)는 표시부(2626) 상에서의 텍스트 및 이미지의 렌더링을 제어하기 위해 제공된다. 그래픽 콘트롤러(2608)는 메인 메모리(2604) 내로 시프트되거나 이로부터 시프트될 수 있는 3차원 데이터 구조를 제작하기 위해 당업계에 알려져있는 그래픽 가속기를 구현할 수 있다. 따라서, 그래픽 콘트롤러(2608)는 이것이 메인 메모리(2604)에 대한 액세스를 얻기 위해 버스 브리지(2602) 내에서 타겟 인터페이스에 대한 액세스를 요구 및 수신할 수 있다는 점에서, AGP 버스(2610)의 마스터가 될 수 있다. 전용 그래픽 버스는 메인 메모리(2604)로부터 데이터의 신속한 검색(retrieval)을 가능하게 한다. 어떠한 동작들에 있어서, 그래픽 콘트롤러(2608)는 AGP 버스(2610) 상의 PCI 프로토콜 변환을 발생시키도록 구성될 수 있다. 따라서, 버스 브리지(2602)의 AGP 인터페이스는 또한 AGP 프로토콜 변환 뿐 아니라 PCI 타겟 및 개시 트랜잭션들을 모두 지원하는 기능을 포함할 수 있다. 표시부(2626)는 이미지 또는 텍스트가 제시될 수 있는 전자 표시장치이다. 적절한 표시부(2626)로는 음극선관(CRT), 액정 표시 장치(LCD) 등이 있다.
주목할 사항으로서, 상기 설명에서는 AGP, PCI 및 ISA 또는 EISA 버스들이 예로서 이용되었지만, 필요한 경우 다른 어떠한 버스 구조로 대체될 수 있다. 또한, 주목할 사항으로서, 컴퓨터 시스템(2600)은 부가적인 프로세서들(예를 들어, 컴퓨터 시스템(2600)의 선택적인 구성요소로서 도시된 프로세서(10))을 포함하는 멀티프로세싱 컴퓨터 시스템일 수 있다. 프로세서(10a)는 프로세서(10)와 유사할 수 있다. 보다 구체적으로, 프로세서(10a)는 프로세서(10)의 동일 카피일 수 있다. 프로세서(10a)는 (도 4에 도시된) 독립 버스를 통해 버스 브리지(2602)에 연결되거나, 프로세서(10)와 CPU 버스(2624)를 공유할 수 있다. 또한, 프로세서(10a)는 L2 캐시(1828)와 유사한 임의의 L2 캐시(1828a)에 결합될 수 있다.
주목할 사항으로서, 본 설명은 다양한 신호들의 표명에 대해 언급한다. 본원에서는, 신호가 특정한 조건을 나타내는 값을 전달하는 경우, 이 신호가 "표명된다"라고 한다. 반대로, 신호가 특정한 조건의 결여를 나타내는 경우, 이 신호는 "비표명(deassertion)된다"라고 한다. 신호가 논리 0 값을 전달하거나, 반대로 논리 1값을 전달할 때에 표명되는 것으로 정의된다. 또한, 상기 설명에서는 다양한 값들이 버려지는 것으로서 설명되었다. 값은 많은 방법들로 버려질 수 있지만, 일반적으로 그 값을 수신하는 논리 회로에 의해 무시되는 방식으로 그 값을 변경하는 것을 포함한다. 예를 들어, 만일 그 값이 일 비트를 포함한다면, 그 값의 논리 상태는 그 값을 버리도록 반전될 수 있다. 만일 그 값이 n-비트 값이라면, n-비트 엔코딩들중 하나가 그 값이 무효임을 나타낼 수 있다. 그 값을 무효한 엔코딩으로 세트시키게 되면, 그 값이 버려지게 된다. 또한, n-비트 값은, 세트시 그 n-비트 값이 유효함을 나타내는 유효 비트를 포함할 수 있다. 유효 비트를 리셋하는 것은 그 값을 버리는 것을 포함한다. 값을 버리는 다른 방법들이 또한 이용될 수 있다.
상기 설명을 충분히 이해하게 되면, 다양한 변형들 및 수정들이 당업자들에게 명백해질 것이다. 하기의 청구항들은 이러한 모든 변형들 및 수정들을 포함하는 것으로 해석된다.
본 발명은 일반적으로 마이크로프로세서 내의 분기 예측 메커니즘들에 적용될 수 있다.

Claims (10)

  1. 제 1 레벨 캐시(206)가 제 1 어드레스에 대응하는 분기 예측 정보(450, 52)를 포함하고 있지 않는 지를 검출하는 단계와;
    제 2 레벨 캐시(260, 1828)가 상기 제 1 어드레스에 대응하는 분기 예측 정보를 포함하고 있는 지를 결정하는 단계와;
    상기 제 2 레벨 캐시(260)가 상기 정보를 포함한다는 결정에 응답하여 상기 정보를 이용하여 제 1 분기 예측을 재구성하는 단계와, 여기서 상기 정보는 상기 제 1 분기 예측의 서브세트를 포함하며; 그리고
    상기 제 1 레벨 캐시(206)의 제 1 엔트리(2100) 내에 상기 제 1 분기 예측을 저장하는 단계를 포함하며, 상기 제 1 엔트리는 상기 제 1 어드레스에 대응하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 레벨 캐시(206)의 상기 제 1 엔트리(2100)가 이용가능한지를 결정하는 단계와;
    상기 제 1 엔트리(2100)가 이용가능하지 않다는 결정에 응답하여 상기 제 1 엔트리(2100)의 내용들을 퇴출하는 단계와; 그리고
    상기 퇴출에 응답하여 상기 제 2 레벨 캐시(260, 2828) 내에 상기 내용들의 서브세트(2120, 2122)를 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 분기 예측은 제 1 분기 명령에 대응하고, 상기 분기 예측은 상기 분기 명령의 타입을 나타내는 정보를 더 포함하는 것을 특징으로 하는 방법.
  4. 분기 예측 정보(450, 52)를 저장하도록 구성된 제 1 레벨 캐시(206)와;
    상기 분기 예측 정보(450, 52)를 저장하도록 구성된 제 2 레벨 캐시(260, 1828)와; 그리고
    상기 제 1 레벨 캐시(206) 및 제 2 레벨 캐시(260, 1828)에 결합된 회로(400)를 포함하며,
    상기 회로는, 상기 제 1 레벨 캐시가 제 1 어드레스에 대응하는 분기 예측 정보를 포함하지 않는 지를 검출하고, 상기 제 2 레벨 캐시가 상기 제 1 어드레스에 대응하는 분기 예측 정보를 포함하는 지를 결정하며, 상기 제 2 레벨 캐시가 상기 정보를 포함한다는 결정에 응답하여 상기 정보(상기 정보는 상기 제 1 분기 예측의 서브세트를 포함한다)를 이용하여 제 1 분기 예측을 재구성하고, 그리고 상기 제 1 레벨 캐시의 제 1 엔트리(상기 제 1 엔트리는 상기 제 1 어드레스에 대응한다) 내에 상기 제 1 분기 예측을 저장하도록 구성되는 것을 특징으로 하는 분기 예측 메커니즘.
  5. 제 4 항에 있어서, 상기 회로(400)는 또한,
    상기 제 1 레벨 캐시의 상기 제 1 엔트리가 이용가능한지를 결정하고;
    상기 제 1 엔트리가 이용가능하지 않다는 검출에 응답하여 상기 제 1 엔트리의 내용을 퇴출하고; 그리고
    상기 퇴출에 응답하여 상기 제 2 레벨 캐시 내에 상기 내용들의 서브세트를 저장하도록 구성되는 것을 특징으로 하는 분기 예측 메커니즘.
  6. 제 4 항에 있어서,
    상기 분기 예측은 제 1 분기 명령에 대응하고, 상기 분기 예측은 상기 분기 명령의 타입을 나타내는 정보를 더 포함하는 것을 특징으로 하는 분기 예측 메커니즘.
  7. 제 6 항에 있어서,
    상기 분기 예측을 재구성하는 것은 상기 분기 명령을 디코딩하는 것을 포함하는 것을 특징으로 하는 분기 예측 메커니즘.
  8. 제 7 항에 있어서,
    상기 분기 명령은 상기 제 2 레벨 캐시(260, 1828)로부터 페치되는 것을 특징으로 하는 분기 예측 메커니즘.
  9. 상호 연결부(2624)와;
    상기 상호 연결부에 결합된 메모리(2604)와;
    분기 예측 정보를 저장하도록 구성된 제 2 레벨 캐시(260, 1828)와; 그리고
    제 1 레벨 캐시(206)를 포함하는 프로세서(10)를 포함하며,
    상기 프로세서는,
    상기 제 1 레벨 캐시(206)가 제 1 어드레스에 대응하는 분기 예측 정보(450, 52)를 포함하고 있지 않는 지를 검출하고;
    상기 제 2 레벨 캐시(260, 1828)가 상기 제 1 어드레스에 대응하는 분기 예측 정보를 포함하고 있는 지를 결정하고;
    상기 제 2 레벨 캐시(260)가 상기 정보를 포함한다는 결정에 응답하여 상기 정보를 이용하여 제 1 분기 예측을 재구성하고, 여기서 상기 정보는 상기 제 1 분기 예측의 서브세트를 포함하며; 그리고
    상기 제 1 레벨 캐시(206)의 제 1 엔트리(2100) 내에 상기 제 1 분기 예측을 저장하도록 구성되며, 상기 제 1 엔트리는 상기 제 1 어드레스에 대응하는 것을 특징으로 하는 컴퓨터 시스템.
  10. 제 9 항에 있어서,
    상기 프로세서(10)는 또한 상기 제 1 레벨 캐시(206)의 상기 제 1 엔트리(2100)가 이용가능한지를 결정하고; 상기 제 1 엔트리가 이용가능하지 않다는 결정에 응답하여 상기 제 1 엔트리(2100)의 내용들을 퇴출하고; 그리고 상기 퇴출에 응답하여 상기 제 2 레벨 캐시(260, 1828) 내에 상기 내용들의 서브세트를 저장하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
KR1020047001076A 2001-07-24 2002-06-27 2개 레벨의 분기 예측 캐시를 갖는 분기 예측 KR100880686B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/912,011 2001-07-24
US09/912,011 US7024545B1 (en) 2001-07-24 2001-07-24 Hybrid branch prediction device with two levels of branch prediction cache
PCT/US2002/020481 WO2003017091A1 (en) 2001-07-24 2002-06-27 Branch prediction device with two levels of branch prediction cache

Publications (2)

Publication Number Publication Date
KR20040014673A true KR20040014673A (ko) 2004-02-14
KR100880686B1 KR100880686B1 (ko) 2009-01-30

Family

ID=25431252

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047001076A KR100880686B1 (ko) 2001-07-24 2002-06-27 2개 레벨의 분기 예측 캐시를 갖는 분기 예측

Country Status (7)

Country Link
US (2) US7024545B1 (ko)
EP (1) EP1410177A1 (ko)
JP (1) JP3798404B2 (ko)
KR (1) KR100880686B1 (ko)
CN (1) CN1310134C (ko)
TW (1) TW591530B (ko)
WO (1) WO2003017091A1 (ko)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
US7707397B2 (en) * 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
US6895498B2 (en) * 2001-05-04 2005-05-17 Ip-First, Llc Apparatus and method for target address replacement in speculative branch target address cache
JP3851235B2 (ja) * 2002-06-28 2006-11-29 富士通株式会社 分岐予測装置および分岐予測方法
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
US7237098B2 (en) * 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US7337271B2 (en) * 2003-12-01 2008-02-26 International Business Machines Corporation Context look ahead storage structures
US7415597B2 (en) * 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US7836288B2 (en) * 2004-09-14 2010-11-16 Arm Limited Branch prediction mechanism including a branch prediction memory and a branch prediction cache
US7428632B2 (en) * 2004-09-14 2008-09-23 Arm Limited Branch prediction mechanism using a branch cache memory and an extended pattern cache
US8001363B2 (en) * 2005-04-04 2011-08-16 Globalfoundries Inc. System for speculative branch prediction optimization and method thereof
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
CN100419715C (zh) * 2005-11-25 2008-09-17 华为技术有限公司 嵌入式处理器系统及其数据操作方法
US7577793B2 (en) * 2006-01-19 2009-08-18 International Business Machines Corporation Patrol snooping for higher level cache eviction candidate identification
CN100395731C (zh) * 2006-02-23 2008-06-18 华为技术有限公司 处理器及其数据操作方法
EP2011018B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7574586B2 (en) * 2006-05-16 2009-08-11 Texas Instruments Incorporated Efficient transfer of branch information
US7487340B2 (en) * 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US7533252B2 (en) * 2006-08-31 2009-05-12 Intel Corporation Overriding a static prediction with a level-two predictor
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7840786B2 (en) * 2007-04-16 2010-11-23 Advanced Micro Devices, Inc. Techniques for storing instructions and related information in a memory hierarchy
US8782384B2 (en) * 2007-12-20 2014-07-15 Advanced Micro Devices, Inc. Branch history with polymorphic indirect branch information
US8181005B2 (en) * 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
US20110093658A1 (en) * 2009-10-19 2011-04-21 Zuraski Jr Gerald D Classifying and segregating branch targets
WO2011076120A1 (en) * 2009-12-25 2011-06-30 Shanghai Xin Hao Micro Electronics Co. Ltd. High-performance cache system and method
US8464030B2 (en) * 2010-04-09 2013-06-11 International Business Machines Corporation Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits
WO2012037491A2 (en) 2010-09-17 2012-03-22 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
WO2012051262A2 (en) 2010-10-12 2012-04-19 Soft Machines, Inc. An instruction sequence buffer to enhance branch prediction efficiency
US8667257B2 (en) 2010-11-10 2014-03-04 Advanced Micro Devices, Inc. Detecting branch direction and target address pattern and supplying fetch address by replay unit instead of branch prediction unit
CN108376097B (zh) 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI533129B (zh) 2011-03-25 2016-05-11 軟體機器公司 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
EP2710480B1 (en) 2011-05-20 2018-06-20 Intel Corporation An interconnect structure to support the execution of instruction sequences by a plurality of engines
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
IN2014CN03678A (ko) 2011-11-22 2015-09-25 Soft Machines Inc
CN104040491B (zh) 2011-11-22 2018-06-12 英特尔公司 微处理器加速的代码优化器
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9280351B2 (en) 2012-06-15 2016-03-08 International Business Machines Corporation Second-level branch target buffer bulk transfer filtering
US9430241B2 (en) 2012-06-15 2016-08-30 International Business Machines Corporation Semi-exclusive second-level branch target buffer
US9298465B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Asynchronous lookahead hierarchical branch prediction
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
KR101463536B1 (ko) 2012-11-30 2014-11-19 성균관대학교산학협력단 메모리 관리 장치, 방법 및 시스템
US20140244932A1 (en) * 2013-02-27 2014-08-28 Advanced Micro Devices, Inc. Method and apparatus for caching and indexing victim pre-decode information
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9195606B2 (en) 2013-03-15 2015-11-24 Intel Corporation Dead block predictors for cooperative execution in the last level cache
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014151018A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing multithreaded instructions grouped onto blocks
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9563430B2 (en) 2014-03-19 2017-02-07 International Business Machines Corporation Dynamic thread sharing in branch prediction structures
US20150268961A1 (en) * 2014-03-21 2015-09-24 Samsung Electronics Co., Ltd. Decoupling l2 btb from l2 cache to accelerate search for miss after miss
US9823932B2 (en) * 2015-04-20 2017-11-21 Arm Limited Branch prediction
CN105867884B (zh) * 2016-03-24 2018-06-15 清华大学 一种改进型PAp分支预测方法
DE102017201648A1 (de) 2016-03-31 2017-10-05 Dr. Ing. H.C. F. Porsche Ag Verfahren zum Bearbeiten einer Oberfläche eines metallischen Bauteils und metallisches Bauteil
US20190004806A1 (en) * 2017-06-30 2019-01-03 Qualcomm Incorporated Branch prediction for fixed direction branch instructions
US11163573B2 (en) * 2019-02-13 2021-11-02 International Business Machines Corporation Hierarchical metadata predictor with periodic updates
US10990405B2 (en) 2019-02-19 2021-04-27 International Business Machines Corporation Call/return stack branch target predictor to multiple next sequential instruction addresses
US11714725B2 (en) * 2019-06-03 2023-08-01 University Of Central Florida Research Foundation, Inc. System and method for ultra-low overhead and recovery time for secure non-volatile memories

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
US5276882A (en) * 1990-07-27 1994-01-04 International Business Machines Corp. Subroutine return through branch history table
US5423011A (en) * 1992-06-11 1995-06-06 International Business Machines Corporation Apparatus for initializing branch prediction information
US5809271A (en) 1994-03-01 1998-09-15 Intel Corporation Method and apparatus for changing flow of control in a processor
US5608885A (en) 1994-03-01 1997-03-04 Intel Corporation Method for handling instructions from a branch prior to instruction decoding in a computer which executes variable-length instructions
DE69715280T2 (de) 1996-03-25 2003-08-07 Sun Microsystems Inc Verfahren zur Sprungvorhersage in einem mehrstufigen Cachespeichersystem
US5995749A (en) 1996-11-19 1999-11-30 Advanced Micro Devices, Inc. Branch prediction mechanism employing branch selectors to select a branch prediction
US5978906A (en) 1996-11-19 1999-11-02 Advanced Micro Devices, Inc. Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions
US5933629A (en) * 1997-06-12 1999-08-03 Advanced Micro Devices, Inc. Apparatus and method for detecting microbranches early
US6553488B2 (en) * 1998-09-08 2003-04-22 Intel Corporation Method and apparatus for branch prediction using first and second level branch prediction tables
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions

Also Published As

Publication number Publication date
US6854050B1 (en) 2005-02-08
JP2005500616A (ja) 2005-01-06
US7024545B1 (en) 2006-04-04
CN1310134C (zh) 2007-04-11
TW591530B (en) 2004-06-11
JP3798404B2 (ja) 2006-07-19
CN1535415A (zh) 2004-10-06
WO2003017091A1 (en) 2003-02-27
KR100880686B1 (ko) 2009-01-30
EP1410177A1 (en) 2004-04-21

Similar Documents

Publication Publication Date Title
KR100880686B1 (ko) 2개 레벨의 분기 예측 캐시를 갖는 분기 예측
US6502188B1 (en) Dynamic classification of conditional branches in global history branch prediction
US6185675B1 (en) Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks
US6339822B1 (en) Using padded instructions in a block-oriented cache
US6279106B1 (en) Method for reducing branch target storage by calculating direct branch targets on the fly
US6253316B1 (en) Three state branch history using one bit in a branch prediction mechanism
US6081884A (en) Embedding two different instruction sets within a single long instruction word using predecode bits
US6510508B1 (en) Translation lookaside buffer flush filter
US6256727B1 (en) Method and system for fetching noncontiguous instructions in a single clock cycle
KR100734529B1 (ko) 밀접하게 결합된 다중 프로세서를 위한 고속의 다중 스레딩
US5761712A (en) Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US6427192B1 (en) Method and apparatus for caching victimized branch predictions
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
US6092182A (en) Using ECC/parity bits to store predecode information
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US20070033385A1 (en) Call return stack way prediction repair
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US6453387B1 (en) Fully associative translation lookaside buffer (TLB) including a least recently used (LRU) stack and implementing an LRU replacement strategy
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US6460132B1 (en) Massively parallel instruction predecoding
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6446189B1 (en) Computer system including a novel address translation mechanism
KR100603067B1 (ko) 분기 예측의 타입을 분류하기 위해 복귀 선택 비트들을 이용하는 분기 예측
US5951671A (en) Sharing instruction predecode information in a multiprocessor system
US6625726B1 (en) Method and apparatus for fault handling in computer systems

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee