KR100371686B1 - 제한실행분기예측방법 - Google Patents

제한실행분기예측방법 Download PDF

Info

Publication number
KR100371686B1
KR100371686B1 KR1019950046241A KR19950046241A KR100371686B1 KR 100371686 B1 KR100371686 B1 KR 100371686B1 KR 1019950046241 A KR1019950046241 A KR 1019950046241A KR 19950046241 A KR19950046241 A KR 19950046241A KR 100371686 B1 KR100371686 B1 KR 100371686B1
Authority
KR
South Korea
Prior art keywords
branch
counter
branch instruction
length
condition
Prior art date
Application number
KR1019950046241A
Other languages
English (en)
Other versions
KR960025144A (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 KR960025144A publication Critical patent/KR960025144A/ko
Application granted granted Critical
Publication of KR100371686B1 publication Critical patent/KR100371686B1/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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Abstract

본 발명은 조건 분기 명령의 방향을 정확히 예측하는 경향을 증가시킬 수 있는 분기예측기술에 관한 것이다. 본 기술은 많은 분기들이 일정한 또는 서시히 변화하는 수행길이를 갖는다는 관찰에 근거한다. 즉, 1들로 된 여러개의 연속 수행들은 동일한 길이를 가진다. 본 발명은 두개의 소형 카운터들, 즉 업카운터와 다운카운터를 부가시킴으로써 각각의 분기에 대해 저장된 히스토리를 증대시킨다. 상기 카운터들은 매우 정확한 예측을 위해 종래 기술에 따른 상태기계분기예측기와 연관하여 동작한다.

Description

제한 실행 분기 예측방법
파이프라인형 프로세서(Pipelined processors)들의 성능은 조건분기들(conditional branches)을 실행하는데 요구되는 시간에 의해 크게 제한된다. 정상시, 프로세서는 순차방식으로 명령을 폐치 및 실행시킨다. 즉, 주소 n으로부터 페치된 명령 Ei의 바로 다음에 실행되는 명령 Ei+1(Ei의 후속자)의 주소는 Ei의 길이에 "n"을 가산시킴으로써 알 수 있다. 무조건 분기(unconditional branch)는 실행시 비순차 주소의 명령으로 제어가 이전되게 하는 명령이다. 이와 같이하여, 분기 B의 후속자는 임의의 목표 주소(target address)로부터 페치되게 된다. 소정의 컴퓨터에 있어서는 분기 명령 B의 목표 주소는 그 명령에 포함되어 있고, 다른 컴퓨터들의 경우는 명령 B내에 포함되어 있는 오프셋 값을 명령 B 자체가 페치된 주소에 가산시킴으로써 목표의 주소가 정해진다.
조건 분기 명령은 소정 데이타부분의 테스트에 근거하여 조건적으로 제어이전(transfer or control)을 유발시킨다. 이러한 명령은 목표 주소의 명세 외에 시험할 조건을 포함하고 있다. 전형적으로, 이 조건은 0 또는 0이 아닌 수, 양수 또는 양수가 아닌 수, 음수 또는 음수가 아닌 수 등등과 같은 수의 대수적인 성질들의 소집합 중 하나가 된다. 만일 조건이 부합되면 가지가 실행된다. 즉, 가지의 목표주소로부터 후속 명령이 페치된다. 만일 조건이 부합되지 않는 경우에는 후속명령은 무가지 명령(non-branch instructions)의 경우와 같이 순서적으로 다음 명령이 된다.
파이프 라인형 컴퓨터들은 여러개, 항상 5개 이상의 처리 단들로 구성되는 파이프라인을 통해 각 명령을 통과시킨다. 각 출력사이클 중에 새로운 명령은 파이프라인 내로 인입될 수 있다. 그 결과, 파이프라인형 컴퓨터는 다른 실행 단들에서 여러 개의 명령들을 동시에 가질 수 있고, 이에 따라 각 단에서의 하드웨어 자원의 이용을 최대화시킬 수 있다.
파이프 라인형 컴퓨터에서의 조건분기에 의해 초래되는 성능저하는 테스트될 데이타의 대수 조건이 결정되기에 앞서 분기가 페치될 때 발생하게 된다. 이 현상은 분기 명령 자체가 테스트될 데이타의 위치를 특정하게 되어 있는 컴퓨터의 경우 심하게 나타난다. 대수 조건은 파이프라인의 여러 단이 트레버스된 이후에만 행해지게 되어 있다. 이것은 가지명령이 페치되기 전까지는 시작될 수 없기 때문에, 테스트될 조건들은 가지 후 여러 개의 클럭 사이클이 페치될 때까지 알 수 없다. 페치될 다음 명령의 위치는 데이타의 테스트가 완료될 때까지 소정 기간동안 결정될 수 없고, 이 때문에 여러 클럭 사이클 동안 명령들이 페치될 수 없다.
가지 예측(Branch prediction)은 가지가 실행될지의 여부에 관계없이 테스트결과에 대한 결정을 기다리지 않고 조건가지의 페치시 즉시 예측하려는 시도이다. 이러한 방식에 있어서는 명령을 충분한 속도로 계속 페치시킬 수 있다. 만일 가지들이 예측되면 그 예측을 유효화시키고 부정확한 예측으로부터 회복시키는 것이 필요하게 된다. 만일 예측이 부정확한 것이었다면 부정확하게 예측된 가지(불량가지)가 페치된 후 페치된 모든 명령들은 잘못 페치된 것이고, 그러므로 그 실행결과는 되돌려져야만 한다. 예측된 가지들을 기록, 유효화, 보정하는 기술들은 본 발명과는 무관한 것이다.
불량 가지 이후에 페치된 모든 명령들은 폐기되어야만 하기 때문에, 노력이 낭비된다. 따라서, 장치의 성능은 가지예측의 정확도에 직접적으로 관계된다.
가지예측 방식은 정적(Static) 또는 동적(dynamic)일 수 있는데, 정적방식의 경우에는 가지명령자체가 예측을 포함한다. 이것은 전형적인 데이타 집합에 대해 프로그램을 실행시킨 컴파일러에 기초하여 프로그램을 만드는 컴파일러에 의해 공급된다. 상기 정적 예측(static prediction)은 단지 컴퓨터의 명령집합이 그것을 염두에 두고 설계된 경우에만 가능하다. 상업적으로 성공한 대부분의 명령집합들은 정적 가지 예측을 가능하게 하는 기능을 제공하지 않는다.
동적 가지 예측(Dynamic branch prediction)은 프로그램 실행 중에 하드웨어에 의해 모아진 가지에 관한 정보를 이용한다. 상기 하드웨어는 주어진 가지명령의 과거 실행패턴들에 대해서만 "인지"하고 있을 뿐이며, 그러므로 그의 동적예측은 이러한 정보에 근거해야만 한다. 조건 가지들은 5개의 명령마다 한 개의 빈도로 나타날 정도로 매우 자주 발생되기 때문에 메모리용량을 아주 크게 하지 않으면 각가지에 대해 저장할 수 있는 히스토리의 양을 아주 크게 할 수는 없다. 전형적으로, 가지예측 정보는 하나의 프로그램 내에서 가지들의 작으나 가변될 수 있는 부분집합에서만 유지된다.
프로그램의 실행중의 모든 시점에서 주어진 가지명령의 정확한 실행히스토리(execution history)는 이진 심볼 1 및 0의 시퀀스로 표시될 수 있다. 이러한 시퀀스는 분기명령이 실행되었는지(1) 또는 실행되지 않았는지(0)를 나타낸다. 분기 명령이 실행될 때마다 그 분기가 정확히 (꼭 예상된 대로는 아니지만) 실행되었는지의 여부에 따라 그 분기의 히스토리를 그 의 끝에 1 또는 0을 가산시켜 확장시키게 된다.
분기 명령의 실행 히스토리는 여러 개의 수행들(runs) 나누어질 수 있다. 분기수행(branch run)은 1에 바로 앞 또는 다음에 연속된 0들의 시퀀스 또는 그 역의 시퀀스를 나타낸다. 즉, 히스토리내의 각 심볼은 정확히 한번의 수행 내에 있게 되며, 각 수행은 모두 0 또는 모두 1로 구성된다. 일 수행의 길이는 그 안의 심볼들의 갯수가 된다.
종래의 동적분기예측기구들은 프로그램내의 많은 분기들의 경우 0들로 된 수행들의 전체 또는 거의 전체가 1의 길이를 갖는다는 관측을 이용한다. 이것들은 항상 루프를 종료시키는 분기들이다. 전형적으로 루프는 그 루프의 바디를 구성하는 명령들의 순서의 끝에 조건분기를 위치시킴으로써 실시된다.
조건분기는 루프 종료 조건을 테스트하며, 그 조건이 거짓일 경우 루프 바디인 시퀀스내의 처음 명령으로 분기시킨다. 그 분기가 실행되지 않는다면 루프는 종료된다. 분기가 실행되는 다음 타입은 루프의 다음 활성화에서 첫 번째 수행에 될 것이고, 이것은 상기 활성화가 한번의 순한 후 종료되지 않는 한 계속 이루어질 것이다. 이와 같이, 루프종료를 나타내는 단일 0으로 구성되는 실행이 있게 된다. 몇몇 컴파일러들은 루프 바디의 끝보다는 시작에서 조건분기를 갖는 루프를 구성하는데, 이러한 루프는 분기를 취함으로써 종료된다. 이러한 루프구조는 단일 1로 구성되는 수행들을 갖는 수행히스토리들을 발생시킨다.
종래의 분기예측기들의 경우에는 각 예측은 각 분기에 대해 저장된 2비트의 히스토리에 근거하여 이루어진다. 이 비트들은 4개의 상태를 갖는 상태기계(4-state state machine)의 상태를 나타낸다(도-1). 이 상태기계의 효과는 분기가 1 보다 큰 길이의 최종 수행과 동일한 결과를 갖는다는 것을 예측하는 것이다. 따라서, 항상 한번 이상 순환되어 수행 히스토리가 2개 또는 그 이상의 0들의 수행을 포함하지 않게 되는 루프의 경우에는 예측은 일정하게 될 것이다.
종래의 상태기계의 예측정확도는 1들의 수행길이들에 직접적으로 관련된다. 만일 평균 수행길이가 n이면, n번의 정확한 예측마다 한번의 부정확한 예측이 발생하게 된다. 그 결과, 수행횟수가 적은 경우 효율이 나빠지게 된다. 본 발명의 목적은 수행길이가 짧은 분기들(short-run-length branches)에 대한 예측 정확도를 개선시키는 것이다.
많은 분기들은 일정하거나 서서히 변화하는 수행길이(run lengths)를 갖는다. 즉, 1들로 된 여러 개의 연속 수행들은 동일한 길이를 가진다. 본 발명은 두개의 소형 카운터들, 즉 업카운터와 다운카운터를 부가시킴으로써 각각의 분기에 대해 저장된 히스토리를 증대시킨다. 상기 카운터들은 종래 기술에 따른 상태 기계 분기 예측기(state machine branch predictor)와 연관하여 동작한다.
업카운터는 현재 수행길이를 카운트한다. 만일 카운터가 오버플로우(overflow)되기 전에 실행이 종료되면, 업카운터값은 다운카운터로 복사되고, 업카운터는 0으로 재초기화된다. 다운카운터는 다음 실행 중에 카운트다운을 행한다. 사용된 예측은 다운카운터가 0에 도달할 때까지 상태기계에 의해 만들어진 것이다. 다운카운터가 0인 상태에서의 첫 번째 예측에서는 상태기계예측이 보완된다. 이것은 현재의 수행길이가 이전수행길이와 동일한 경우에 정확하게 될 것이다. 수행길이가 일정하게 유지되는 한은, 본 발명의 예측정확도는 100%이다. 만일 수행이 카운트될 수 있는 것보다 긴 경우에는 카운터들은 디스에이블상태로 되며, 예측은 상태기계에만 기초하게 된다.
임의의 조건 분기 명령 B가 출력될 때마다 그의 예측히스토리가 시험되어, 분기가 실행되는지의 여부를 결정하게 되며, 그 히스토리는 그 예측에 부분적으로 근거하여 즉시 갱신된다. 이 갱신은 또한 그것이 B의 재출력인지의 여부에 종속되게 된다. B의 재출력은 그의 임의의 실행 BE가 잘못 예측하였고 정확한 방향이 인지될 때, 그리고 BE에 선행하는 모든 분기가 잘못예측된 것으로 인지되지 않는때에만 일어난다. 이 경우, BE에 대한 분기보수가 이루어진다; BE 및 모든 후속명령들의 실행은 폐지되며, B는 재출력된다.
카운터들을 갱신시키기 위한 알고리즘은 상태기계예측기가 항상 동일방향을 예측한다는 가정에 기초하고 있다. 따라서, 수행의 종료는 카운터들에 의해서만 예측된다. 재출력은 수행길이가 정확하게 예측되지 않았음을 의미한다. 즉, 수행길이에 대한 예측이 이루어지지 않았거나 수행길이가 너무 짧게 또는 너무 길게 예측된 것이다. 만일 이전의 수행이 너무 길어 카운트할 수 없는 이유로 수행길이가 전혀 예측되지 않았다면, 업카운터는 0으로 설정되고, 새롭게 시작하는 수행이 카운트할 수 있을 정도로 짧은 경우에는 다운카운터는 -1로 설정되어, 예측기를 디스에이블시킨다. 만일 수행이 예상보다 조기에 종료되어 재출력분기가 잘못 예측된 경우에는 이 새로운 짧은 수행길이는 업카운터로부터 다운카운터로 복사되고, 업카운터는 0으로 리세트된다. 만일 예측된 수행길이가 너무 짧은 경우에는 업카운터는 정확한, 긴 수행길이를 카운트하도록 계속 증가되며, 다운카운터는 이 긴 실행의 종료를 정확히 예측할 수 없다는 것을 알 수 있기 때문에 -1로 설정된다.
분기의 출력이 재출력이 아닌 경우에 만일 업카운터가 그의 최대카운트값에 도달하면 그 카운터는 그 값에 유지되고, 다운카운터는 -1로 설정되어, 여하한 수행길이예측을 방지시킨다. 그렇지 않은 경우에는 업카운터는 다운카운터가 수행의 예측된 종료를 가리키는 0이 아닌 한 계속 증가된다. 이 경우, 업카운터는 다운카운터로 복사된 후 0으로 리세트된다. 만일 업카운터가 최대 값에 있지 않고 다운카운터가 디스에이블상태에 있지 않은 경우에는 다운카운터는 0에 도달하지 않는 한 계속 감소된다.
본 발명에 따라 각 분기에 대해 저장되어야 하는 추가상태정보는 상당하다. 다행스럽게도, 소수의 비트들에 의해 고성능이득이 얻어진다. 3-비트의 카운터들에 의해서 7미만의 모든 일정한 수행길이들이 정확히 예측된다. 정확히 예측되지 않은7의 가장 짧은 수행길이는 상태기계예측기 단독에 의해서 87%의 정확도를 갖는다. 4-비트카운터들은 최소한 93%의 정확도를 제공한다.
본 발명의 적합한 실시예는 수퍼스칼라 프로세서(supenscalar processor)에 있다. 수퍼스칼라 프로세서는 클럭사이클당 다수의 명령, 본 경우에는 4개까지의 명령을 페치하여 파이프라인으로 출력한다. 상기 프로세서의 모든 소자들이 본 발명에 관계되는 것은 아니므로 그 소자들중 일부는 본 발명의 설명에 포함시키지 않는다. 이 프로세서는 Popescu등에 의해 "프로세서 아키텍츄어(Processor Architecture)"라는 명칭으로 1990년 12월 5일자로 출원된 미국 특허출원 제 07/622,893 호에 기재되어 있다.
분기명령의 예측 및 본 발명과 관련하여, 모든 분기의 수행히스토리들은 프로세서내의 두개의 구조, 즉 분기 예측 램(RAM)(10) 및 분기 쉘프(shelf(20)에 저장된다. 분기 예측 램(10)은 가장 오래된 미해결의 예측분기(unresolved predicted branch) 직전까지의 모든 분기수행 히스토리를 저장하고, 분기 쉘프(20)는 미해결의 예측분기 또는 그 다음의 모든 분기수행의 히스토리를 저장하고 있다.
바람직한 구현예에서, 분기 예측 램(10)은 1K(1024)의 단어들로 구성된다.
분기 예측 램(10)을 리딩하기 위해 프로세서의 프로그램카운터레지스터(11)는 램(10)을 어드레스버스(13)를 거쳐 값 PC(Value pc)로 어드레싱시킨다.
PC는 프로세서 내에서 다음 번에 페치되는 명령의 메모리어드레스이다.
분기 예측 램(10)은 출력라인(14A - 14B)에 각각 접속된 4개의 데이타출력포트(Dout0 - Dout3)을 가지고 있다. 프로세서의 수퍼스칼라특성을 수용할 수 있도록이 4개의 출력포트를 통해서 4개의 어드레스 PC, PC+1, PC+2, PC+3에서의 명령들에 대한 분기예측상태들이 통과된다. 물론, 본 발명은 단순 스칼라처리에도 동등하게 적용될 수 있다는 것을 이해하여야 한다.
분기 예측 램(10)은 이중단어(double-word)로 어드레싱된다. 즉, 어드레스버스(13)상의 PC의 최하위 비트는 무시된다. 따라서, 분기 예측 램(10)으로부터의 동일 예측 히스토리에는 필수적으로 하나는 짝수PC값을 갖고 다른 하나는 다음으로 큰 홀수PC값을 갖는 두개의 연속명령들이 할당되게 된다. 두개의 연속명령들이 나타나기가 드물다고 가정하면, 이러한 방식으로 1K-깊이의 램(10)은 2K까지의 명령들에 대해서 독특한 예측히스토리들을 저장할 수 있다.
분기 예측 램(10)은 캐시(cache)가 아니다. 그의 내용은 주어진 분기명령의 예측상태를 정확히 반영하거나 반영하지 않을 수 있다. 일례로, 정확히 2K의 곱만큼 차이가 나는 PC값들을 갖는 두개의 명령들은 별명(alias)이 될 것이다. 두 명령의 히스토리들은 동일 램단어(RAM word)에 저장 될 것이며, 그 결과 아마도 서로 파괴적으로 방해하게 될 것이다. 이것은 분기예측 램(10)이 단지 예측기구이기 때문에 허용된다; 모든 분기예측들은 부정확한 경우 추후에 검증되고 보수된다. 따라서, 파괴적인 별명은 단지 예측정확도 그리고 그에 따른 성능의 저하를 초래할 가능성이 있다.; 분기 예측 램(10)의 크기는 성능저하와 상쇄된다.
분기쉘프(20)는 모든 추측분기명령들의 예측 히스토리들을 저장하는 12-딥컨텐트-주소가능 선입선출(FIFO)구조이다. 정확한 방향이 알려지지 않은 예측분기 실행이거나 그 다음의 모든 명령 실행들은 추측실행(speculative executions)들이다.분기쉘프(20)는 어드레스 버스에 접속된 검색포트, 후술하는 3개의 라인 378, 39 및 40에 연결된 입력포트 및 분기 예측 RAM(10)에 연결된 업데이트 포트를 갖는다.
분기 쉘프(20)는 모든 추측분기실행들의 분기예측히스토리들을 발생된 순서로 저장한다. 분기 쉘프(20)에 저장된 각 엔트리는 본 발명에 관련된 두개의 부분, 즉 조건 분기 명령의 예측히스토리와 그 명령의 어드레스를 갖는다. 하나의 새로운 엔트리는 그 추가 엔트리신호(40)가 참일 때, 즉 논리값 "1"을 가질 때 각 클럭사이클에서 입력포트를 통해 분기 셀프(20)에 추가된다.
분기 쉘프(20)는 쉘프들의 스택과 같이 동작한다. 각 엔트리는 "최하위(bottommost)"의 빈 위치에 기록된다. 최하위위치는 갱신포트를 거쳐 분기 예측 램(10)으로 유동될 수 있다. 상기 갱신포트는 3개의 라인, 즉 분기 쉘프(10)의 최하위위치내의 조건 분기 명령의 예측히스토리데이타를 전송하기 위한 데이타버스(19A), 최하위위치의 조건 분기 명령의 어스레스를 전송하기 위한 어드레스버스(19B), 그리고 분기 예측 램(10)에 쓰기 동작이 실행되어야 한다고 신호하기 위한 쓰기 인에이블 제어라인(Write Enable control line)(19C)을 가지고 있다. 이러한 유동이 발생하면, 분기 쉘프(20)내의 모든 엔트리들은 하나씩 시프트다운된다. 분기보수는 잘못 예측된 것으로 발견된 분기실행에 대한 엔트리를 그 위의 모든 엔트리들과 함께 삭제하는 것을 수반한다. 이러한 방식으로, 분기 쉘프(20)내의 모든 유효엔트리들이 입력된 순서로 최하위 엔트리로부터 연속적으로 저장되게 된다.
어드레스버스(13)를 통해 분기 쉘프(20)의 검색포트에 PC값이 인가되게 되면, PC, PC+1, PC+2, PC+3 어드레스들이 저장된 분기명령어드레스들의 각각과 동시에 비교되며, 추가엔트리신호(Add Entry signal)가 참이면 입력포트에서의 어드레스와 비교된다. 이 비교결과들은 분기 쉘프(20)로부터 4개의 데이타출력포트(Bout0 - Bout3)에 전송된다. 분기 쉘프(20)의 각 데이타출력포트는 두개의 부분을 가지고 있고, 두 라인세트에 접속되어 있다. 이두 라인세트중 하나는 포트(Bout0 - Bout3)들의 각각에 대한 1-비트 정합라인(22A - 22D)들이고, 다른 하나는 저장된 분기명령어드레스들의 각각에 대한 예측히스토리데이타를 위한, 포트(Bout0 - Bout3)들의 각각에 대한 데이타버스(21A -21D)들이다. 이 출력포트들에 대한 정합라인(22A -22B)은 만일 PC, PC+1, PC+2, PC+3과 정합되는 저장된 어드레스가 최소한 하나 이상 있는 경우에는 그 경우에만 논리"1"을 갖는다. 논리"1"의 정합라인(22A -22D)에 대한 포트들의 경우는 모두 그 포트에서의 대응 예측 히스토리 데이타는 어드레스가 정합되는 최상위(가장 최근에 인입된)엔트리(입력포트에서의 값이 최상위로 간주되는 경우)에 저장된 것이다.
정합라인(22A - 22D)들은 각각 2 대 1 멀티플렉서(15A - 15D)들에 접속되어 그들을 제어한다. 논리 1의 정합라인(22A - 22D)들을 갖는 각 데이타출력포트(Bout1 - Bout3)의 경우, 그에 대응하는 각 멀티플렉서(5A - 15D)들은 분기 쉘프(20)로부터 데이터 버스(21A - 21D)를 선택한다. 그 포트로부터의 예측 히스토리 데이타는 해당 멀티플렉서(15A - 15B)에 대한 출력으로서 선택된다. 만일 데이타출력포트의 정합라인(22A -22B)이 논리"0"일 경우에는 해당 멀티플렉서(15A - 15D)의 출력은 버스(14A -14D)상에서 분기 예측 램(10)의 해당 데이타출력포트(Dout1 - Dout3)로부터의 예측 히스토리 데이타를 선택한다.
이러한 구성에 따라, 상기 4개의 멀티플렉서(15A - 15B)들의 출력들은 PC, PC+1, PC+2, PC+3에서의 모든 분기들에 대한 가장 최근의 예측 히스토리가 된다. 어느 시점에서라도 PC+i (여기서, i는 0, 1, 2, 3)에서의 분기명령 B이 있는 경우에는 두 가지의 기능성이 있다. 즉, B의 추측실행이 존재하지 않거나, 하나 또는 그 이상의 추측실행이 존재하게 된다. 전자의 경우에는 분리 쉘프(20)로부터의 PC+1에 대응하는 정합라인(22A - 22D)들이 논리 "0"이고, 그 결과 멀티플렉서(15A - 15B)들의 출력은 분기 예측 램(10)으로부터 해당 출력버스(14A - 14D)를 통해 출력된 것이다. 멀티플렉서(15A -15D)로부터의 출력신호는 비추측이었던 가장 최근의 실행까지의 분기명령 B의 히스토리를 나타낸다.
만일 분기명령 B의 추측 실행이 있는 경우에는 분기 쉘프(20)의 출력포트(Bout1 - Bout3)중 하나로부터의 정합라인(22A - 22B)이 논리"1"신호를 가지게 되고, 그 포트의 예측히스토리출력은 분기명령 B의 가장 최근의 추측실행후의 전이 된다. 모든 추측실행들이 모든 비추측 실행 보다 최근에 이루어지기 때문에, 이것은 가장 최근의 실행이며, 해당 멀티플렉서(15A - 15D)에 의한 출력으로서 선택된다.
각 멀티플렉서(15A - 15B)의 출력버스는 4개의 동일한 예측모듈(16A -16D)중 하나의 입력버스이다. 제 3 도에 도시된 각 예측모듈(16A - 16D)은 각 멀티플렉서(15A - 15D)로부터의 예측 히스토리 데이타를 조사하여 분기명령의 현재의 실행에 대한 예측을 결정한다. 상기 예측 히스토리 데이타는 8 비트로 되어 있는데, 이 8 비트는 2 비트의 예측상태, 3 비트의 업카운터값, 그리고 3 비트의 다운카운터값으로 구성된다. 예측 히스토리 데이타는 각 멀티플렉서(15A - 15D)의 출력버스를 형성하는 8 개의 버스라인에 실린다.
각 예측모듈(16A - 16D)은 NOR게이트(23)와 배타적OR게이트(24)를 가지고 있다. NOR게이트(23)는 그의 입력으로서 다운카운터의 3 비트를 수신하며, NOR게이트(23)의 출력은 배타적OR게이트(24)의 하나의 입력으로 접속되어 있다. 배타적OR게이트(24)에 대한 제 2 입력은 예측상태의 더 중요한 비트, 예측상태비트의 상태 [1]이다. 제 3 도에 도시된 바와 같이, 덜 중요한 비트, 상태[0]과 업카운터의 3 비트들은 NOR게이트(23) 및 배타적OR게이트(24)에 접속됨이 없이 예측모듈(16A - 16B)을 통과하게 된다.
상태기계에 의해 주어진 예측은 최대 유효 비트, 상대 [1]과 동일하다는 것을 알 수 있다. 다운가운터값이 0 (3 비트들이 모두 논리"0"과 동일)일 경우, NOR게이트(23)는 출력논리"1"을 발생시키며, 이에 따라 배타적OR게이트(24)가 상태[1]를 보상하게 된다. 만일 다운카운터가 0이 아닌 경우에는 NOR게이트(23)는 논리"0"의 출력을 가지게 되며, 이에 따라 배타적OR게이트(24)는 상태[1]의 값을 출력하게 된다. 배타적OR게이트(24)의 출력은 예측값이다.
예측_모듈(16A - 16D)들의 출력들, PC+i (i = 0 - 3)에서의 4개 명령의 각각에 대한 현재예측 플러스 예측 히스토리 데이터는 각각 명령해독선입선출부(Instruction Decode FIFO)(FIFO)(25)의 입력포트(26A - 26B)에 접속되어 있다.
선입선출부(25)는 5개의 명령깊이를 가지고 있으며, 명령들이 명령캐시(도시안됨)로부터 페치된 시점으로부터 프로세서의 파이프라인의 실행라인에 출력될 때까지 상기 명령들을 저장한다. 4개까지의 명령들에 대한 예측 히스토리 데이타는 각 클릭사이클에서 입력포트(26A - 26B)에 부가될 수 있다. 상기 예측 히스토리 데이타의 부가는 최하위의 빈 위치로부터 어드레스의 증가순서로 이루어진다. 즉, PC에서 명령에 대한 예측히스토리를 수 실하는 입력포트(26A)를 통한 데이타가 선입선출부(25)의 최하위의 빈 엔트리에 인입되고, 입력포트(26B)를 통한 데이타는 그 바로 위의 엔트리에 인입되고, 그 순서로 다른 데이타의 인입이 이루어진다.
명령의 예측히스토리가 입력포트(26A)에 제공되는 동안, 그 명령의 어드레스 PC는 버스(13)에 의해 선입선출부(25)의 어드레스입력포트(30)를 통해 공급된다. 명령해독선입션출부(25)는 그 안에 저장된 각각의 명령과 그로부터 명령이 배치되는 어드레스를 연관시키는 논리를 포함한다.
명령출력논리(Instruction Issue Logic)(50)는 명령해독 선입선출부(25)내의 4개의 최하위명령들을 시험한다. 명령출력논리(50)의 일차적인 책임은 명령해독선입선출부(25)내의 각 명령에 대해 그 명령이 "출력"를 수 있을 때, 즉 그 명령이 프로세서 파이프라인의 후속스테이지들로 전송될 수 있을 때를 결정하는 것이다.
명령출력논리가 수행하야 하는 두 가지의 업무는 (1) 출력된 각 명령의 결과의 이용가능도 및 위치를 추적하는 것과, (2) 명령해독선입선출부(25)내의 각 명령의 이미 출력된 명령들에 대한 종속성을 결정하는 것이다. 이들 업무가 어떻게 수행되는 지에 관한 세부사항은 본 발명과 무관한 것이다.
명령출력논리는 후속파이프라인 스테이지들로 명령을 출력함에 따라 명령해독선입선출부(25)의 최하위 위치로부터 그 명령들을 제거시킨다. 적합한 실시예의 경우, 명령해독선입선출부의 어떠한 명령도 그보다 "하위"에 있는 모든 명령들에 출력되지 않는 한은 출력되지 않으며, 따라서 상기 명령해 독선입선출부는 참으로 선입, 선출인 것이다.
만일 명령해독선입선출부(25)가 분기명령을 포함하고 있다면, 명령출력논리(50)는 최하위의 이러한 명령들을 시험한다. 만일 그것이 무조건분기인 경우에는 명령출력논리는 두 가지의 특정단계, 즉 (1) 명령이 페치되는 순서를 변경하도록 프로그램카운터레지스터(11)를 분기명령에 의해 지시된 바와 같이 변경시키는 단계와, (2) 명령해독선입선출부(25)의 "최상위"로부터 실행되지 않아야 하는 분기 다음의 명령들을 제거시키는 단계를 수행한다.
만일 명령해독선입선출부(25)내의 최하위분기명령이 조건분기인 경우에는 명령출력논리(50)는 상술한 바와 같은 방식으로, (1) 상기 분기가 이미 출력된 명령 또는 명령들에 종속되는지, 그리고 (2) 그 선행명령들의 결과가 이용가능한지, 그리고 그런 경우에는 그 결과의 값이 무엇인지를 결정하게 된다. 만일 분기가 의존하는 모든 결과를 알고 있는 경우에는 명령출력논리(50)는 그들을 평가하여 분기명령이 실행되어야 하는지 또는 실행되지 않아야 하는지를 결정하게 된다. 만일 분기가 실행되어야 한다면, 명령출력논리는 상술한 두 가지의 단계, 즉 프로그램카운터레지스터(11)를 변경시키는 단계와, 명령해독선입선출부(25)로부터의 폐기된 추종명령을 제거시키는 단계를 수행한다.
명령해독선입선출부(25)내의 최하위분기명령이 조건분기이고 그것이 종속되는 결과가 이용가능하지 않은 경우에는, 명령출력논리(50)는 분기의 처분(disposition)을 결정하기 위한 예측을 이용한다. 이 예측은 예측모듈(16A - 16D)에 의해 발생된 것으로, 분기명령과 함께 입력포트(26A - 26D)를 거쳐 명령해독선입선출부에 기록된 것이다. 다시 분기가 실행되는 것으로 예측되는 경우에는, 프로그램카운터레지스터(11)의 내용들은 변경되고, 그 분기를 다음의 명령들은 상기 선입선출부(25)로부터 폐기 된다.
분기 쉘프(20)의 쓰기를 제어하는 명령출력논리(50)에 의해 발생된 3 개의 제어신호출력이 있다. 추가엔트리신호(40)는 조건 분기 명령이 출력되는 즉 선입선출부(25)의 하위위치로부터 제거되는 중에 매 클럭사이클에서 논리 "1"을 갖는다. 상기 추가엔트리신호(40)가 논리"1"를 가질 때마다 2-비트의 선택분기신호(Select Branch signal)(35)가 출력되고 있는 분기명령의 선입선출부내의 인덱스가 되고, 실행신호(41)는 분기가 실행된 경우 논리"1"을 갖고, 분기가 실행되지 않은 경우 논리"0"을 갖는다.
명령해독선입선출부(25)는 4개의 출력포트(Fout0 - Fout3)를 가지고 있는데, 이 출력포트에는 각각 데이타버스(31A - 31D)와 어드레스버스(32A - 32D)가 접속되어 있다. 이 출력포트(Fout0 - Fout3)의 각각은 두 가지의 정보를 발생시키는데, 하나는 선입선출부(25)에 저장된 것으로 각 데이타버스(31A - 31D)로 출력되는 예측히스토리이고, 다른 하나는 해당 어드레스버스(32A - 32D)상에 출력되는 관련명령어드레스이다. 이 4개의 출력포트(Fout0 - Fout3)들은 명령선입선출부(25)내의 4개의 최하위엔트리들을 출력한다.
데이타버스(31A - 31D)와 어드레스버스(32A - 32D)들은 두개의 선택제어라인(35)들을 갖는 멀티플렉서(36)의 입력단자들에 접속되어 있다. 명령출력논리(500에 의해 제어라인(35)에 출력되는 선택분기 제어신호는 명령해독선입선출부(25)의 4 개 출력 중 가장 오래된 조건분기에 대한 인덱스이다. 이 제어신호에 의해 멀티플렉서(36)는 어드레스버스(37B)와 데이타버스(37A)에 대한 각 출력으로서 출력포트(Fout0 - Fout3)중 하나로부터 가장 오래된 분기에 대한 어드레스 및 예측상태정보를 선택하게 된다. 상기 어드레스버스(37B)는 분기 쉘프(20)의 입력포트(18B)에 직접적으로 접속되어 있다.
데이타버스(37A)상의 예측상태정보는 갱신모듈(38)에 전송되게 되는데, 이 모듈(38)은 후술하는 바와 같이 예측상태를 "갱신"하여, 그 데이타를 분기 쉘프(30)의 입력포트(18A)에 접속되어 있는 라인(39)으로 전송한다. 명령출력논리(50)로부터 제어라인(40)으로 출력되는 추가엔트리신호(Add Entry signal)명령해독선입선출부(25)내의 조건 분기 명령이 출력될 때, 입력포트(18A, 18B)에서의 어드레스 및 갱신된 상태정보가 분기 쉘프(20)에 기록되게 된다.
렌덤논리 또는 롬(ROM) 메모리로 구현될 수 있는 갱신모듈(38)은 4-상태분기예측기와 업 및 다운카운터의 모두에 대한 새로운 값을 발생시킨다.
분기예측기의 새로운 값은 제 1 도의 상태다이아그램에 도시된 바와 같이 계산된다. 그 상태기계에 대한 입력은 명령출력논리(50)에 의해 발생된 실행신호(41)로서, 이 값은 분기가 실행되는 경우에는 논리"1"이고, 분기가 실행되지 않는 경우에는 논리"0"이다.
제 4 도에는 갱신모듈(38)이 업 및 다운카운터에 대한 새로운 값을 계산하기 위해 사용하는 알고리즘이 도시되어 있다. 이 알고리즘에 따르면 모듈(38)은 먼저 단계(101)에서 분기의 예측방향이 잘못된 것으로 알려져 있는지의 여부를 결정한다. 이 단계는 분기가 종속하고 있는 데이타가 알려져 있어야 하고, 예측모둘(16A - 16D)에 의해 발생되어 명령해독선입선출부(25)에 저장되어 있는 예측방향이 정확한 방향이 아니어야 한다는 것을 요건으로 한다.
만일 예측이 잘못된 것으로 알려지지 않은 경우에는 경로(202)로 진행하여 단계(102)에서 업카운터가 그의 최대값에 도달하였는지의 여부가 결정되게 된다. 도달한 경우에는 분기수행길이가 너무 길어서 이들 카운터가 추적할 수 없다. 이 경우에는 경로(203)로 진행하여 단계(103)에서 다운카운터가 최대값(본 실시예의 경우는 7)으로 설정되게 된다. 이와 같이하게 되면, 다운카운터가 감소되지 않게 되어 0에 도달할 수 없기 때문에 분기실행예측이 디스에이블(disable)되는 효과가 발생된다. 업카운터는 이미 최대값에 도달한 상태에 있기 때문에, 그것을 변경되지 않는다.
만일 업카운터가 그의 최대값에 도달하지 않았다면 경로(204)로 진행하여 단계(104, 105)에서 다운카운터가 그의 최대값 0에 있는지 또는 중간값에 있는지의 여부가 결정되게 된다. 만일 다운카운터가 중간값에 있는 것으로 결정된 경우(단계(104, 105)의 실행 후 경로(205, 206)로 진행하는 경우)는 상기 분기수행예측이 현재의 분기에 대해 디스에이블되지 않고 분기수행이 예측수행의 끝에 도달하지 않은 상태에 있다는 것을 의미한다. 따라서, 다운카운터는 단계(107)에서 감소되게 되는데, 그 이유는 이와 같이하는 것이 예측실행의 끝에 보다 근접하는 일 분기실행이 되기 때문이다.
만일 다운카운터가 단계(104)에서 그의 최대값에 있는 것으로 결정되거나 단계(104, 105)에서 그의 중간값에 있는 것으로 결정되는 경우에는 업카운터는 단계(108)에서 1 만큼 증분되게 된다. 이와 같이하여, 분기실행예측기가 디스에이블되더라도 (단계(104)의 실행 후 경로(207)로 진행하는 경우), 현재 수행길이는 항상 업카운터에서 유지되게 된다 (그 카운터가 최대값에 도달할때까지).
만일 다운카운터가 단계(105)에서 0므로 된 것으로 결정된 경우에는 경로(208)로 진행하고, 단계(109)에서 다운카운터가 업카운터의 현재값으로 다시 로딩되고, 그 뒤에 단계(110)에서 업카운터는 다시 초기화된다. 다운카운터의 값이 0으로 되었다는 것은 예측수행의 끝을 의미, 즉 첫번째 분기가 반대방향으로 진행한다는 것을 의미하는 것이다. 업타운터를 다운카운터에 복사한다는 것으로부터는 다음 수행이 방금 완료된 수행과 동일한 수행길이를 갖게 될 것이라는 것을 예측할 수 있다. 업카운터를 0으로 설정한다는 것으로부터는 상기 반대의 분기실행 뒤에 이루어지는 다음분기가 새로운 수행의 첫번째 것이 될 것이라는 것을 예측할 수 있다. 따라서, 단일 분기들에 의해 서로 반대방향으로 분리되는 일정길이(최대 카운터 값보다 작은)의 수행들을 갖는 분기는 항상 정확히 예측될 수 있을 것이다.
단계(101)로 돌아가서, 만일 분기예측이 잘못된 것으로 밝혀진 경우에는 경로(210)로 진행하여 단계(111)에서 업카운터가 그의 최대값에 있는지의 여부가 결정된다. 만일 업카운터가 그의 최대값에 도달한 경우에는 방금 완료된 현재의수행(잘못된 예측으로 표시된)이 카운터에 비해 너무 긴 것이었지만, 다음수행은 충분히 짧게 될 수 있다. 이서서 경로 211로 진행하여 다운카운터는 단계 112에서, 분기 수행 예측기를 디스에이블시키기 위해 최대값으로 설정되지만, 업 카운터는 단계 110에서 0으로 다시 초기화된다.
업카운터가 단계(111)에서 그의 최대값에 도달하지 못한 것으로 결정된 경우에는 경로(212)로 진행하여 단계(113)에서 다운카운터가 0인지의 여부가 결정된다. 만일 다운카운터가 0인 경우에는 현재의 수행은 종료된 것으로 잘못 예측된다. 즉, 예측된 수행길이가 너무 짧았다는 것이다. 이 경우에는 업카운터는 본 수행의 실제길이를 카운팅한 것이며, 그와 같이 계속 해야 한다. 다시 경로(213)로 진행하여 단계(114)에서 다운카운터가 그의 최대값으로 설정되어, 현재의 수행 중에 더 이상의 예측이 이루어지는 것을 방지하게 되며, 단계(108)에서 업카운터는 증분되게 된다.
만일 다운카운터가 단계(113)에서 0에 있지 않은 것으로 결정되는 경우에는 현재의 수행이 이직 종료되지 않은 것으로 잘못 예측된 것이다. 즉, 예측된 길이가 너무 길었다는 것이다. 이어서 경로(216)로 진행하여, 단계(109)에서 현재수행의 실제 길이를 기억하고 있는 업카운터를 다운카운터에 복사하여 다음 수행이 동일한 길이를 갖는다는 것을 예측한다. 이어서 업카운터는 단계(110)에서 0으로 재 초기화시킨다.
제 5A 도에는 3의 일정한 수행길이를 갖는 분기에 대한 분기예측기의 정상태동작(steady-state behavior)이 예시되어 있다. 제 5A 도에 있어서, 최좌측행은 분기예측기의 상태를 나타낸 것이고, "업(UP)"행은 업카운터의 값을 나타낸 것이고, "다운(DOWN)"행은 다운카운터의 값을 나타낸 것이고, "예측 "행은 분기예측기로부터의 예측비트를 나타낸 것이다. 최우측행은 분기의 실제방향을 나타낸 것으로, 여기서 "1"은 분기가 실행된 것을 의미하는 것이고, "0"은 분기가 실행되진 않은 것을 의미하는 것이다 (물론, 이 서로 반대의 값으로도 동일한 동작이 얻어질 수 있을 것이다). 이 최우측연행은 0 다음에 세 개의 1이 따라오는 반복패턴을 보여주고 있다. 이 경우, 우세(predominant)방향이 1 이므로 4-상태 예측기는 항상 1을 예측한다. 그의 예측이 상태의 가장 중요한비트(MSB)가 된다; 0들의 반대실행들은 1의 길이 이하이기 때문에 본 상태기계의 상태의 최하위 비트(LSB)만이 항상 변경된다.
제 5A 도의 제 1 행에 도시된 바와 같이, 다운카운터는 0이고, 업카운터는 수행길이와 동일하게, 즉 3으로 되어 있다. 다운카운터가 0의 값을 가지는 경우에는 분기예측상태기계에 의해 주어지는 1의 예측이 예측모듈(16A - 16D)에 의해 실시되게 된다. 이 0의 분기가 출력되어 분기 쉘프(20)에 기록되게 되면, 갱신모듈(38)은 업카운터가 최대값 미만이고 다운카운터가 0이라는 사실에 응답하여 단계(109)에서 업카운터를 다운카운터에 복사시키고 단계(110)에서 업카운터를 0으로 리세트시킨다.
해당분기가 페치된 후에는, 제 5A 도의 제 2 행에 주어진 값들이 분기 쉘프(20)와 분기 예측 램(10)의 의해 모두 리딩된다. 이 때, 예측모듈(16A - 16D)들은 0이 아닌 다운카운터값을 보게 될 것이며, 이에 따라 1의 변경되지 않은 상태기계예측을 인에이블시킨다. 상기 분기가 출력되면 갱신모듈(38)은 업카운터가 최대값미만에 있고, 다운카운터가 0과 최대값사이의 중간값에 있다는 것을 인지하게 되며, 이에 따라 단순히 단계(107)에서 다운카운터를 감분시키고, 업카운터(108)를 증분시킨다. 이러한 동작은 분기가 페치되어 출력되는 다음 두번간 동일하게 반복된다. 제 5A 도의 제 5 행에 도시되어 있는 바와 같이, 1 들의 수행이 종료되면 다운카운터는 다시 0에 도달하고, 따라서 예측은 종료되며 카운터들은 다음의 수행을 카운트하도록 다시 초기화된다.
제 5B 도에는 3의 길이의 수행 뒤에 그 보다 짧은 길이의 수행이 수반되고 2의 길이의 수행 뒤에는 그 보다 긴 4의 길이의 수행이 추종되는 동작이 예시되어 있다. 제 5B 도의 제 1 행에 예시된 상태의 경우는 제 5A 도에서와 같이 길이 3의 예측수행의 끝이 정확히 예측된 상태이다. 카운터들은 다음 수행이 또한 3의 길이를 가질 것이라는 가정 하에서 재 초기화된다. 제 3 행 및 제 4 행을 통해 업카운터는 증분되며 다운카운터는 감분된다. 제 4 행에서, 예측은 여전히 1 로 유지되는데, 그 이유는 예측실행이 완료되지 않은 상태이기 때문이며, 이 때 실제방향은 그러나 0이다.
그 뒤에, 제 4 행에서 출력된 분기의 정확한 방향이 알려지게 된다.
분기보수기구(branch repair mechanism)는 상기 분기 및 그 분기를 따르는 모든 명령들의 효과를 폐기시킨다. 그 뒤에, 상기 분기는 재페치되고 재출력된다. 재페치상태에서의 상태기계 및 카운터들의 값들(제 4' 열에 예시)은 원래의 페치상태(제 4 행에 예시)의 경우와 동일하다. 이것은 사실인데, 그 이유는 분기보수기구가 분기 쉘프(20)에 대한 모든 수정을 포함하여 원래의 출력의 모든 효과들을 제거시켰기 때문이다; 상기의 수정들은 분기가 미해결상태로 있었기 때문에 분기 예측 램(10)에 전혀 기록되지 않은 것이다.
분기가 보수후 재출력되면, 갱신모듈(38)은 예측이 잘못된 것인 지의 여부를 판단하기 위해 알고 있는 0의 정확한 방향과 다시 1인 예측을 비교한다.
단계(101)의 실행후 경로(210)로 진행한다. 업카운터는 최대값미만이고 다운카운터는 0이 아니기 때문에 경신모듈(38)은 업카운터를 다운카운터에 복사시키고, 제 5B 도의 제 5 행에 도시된 바와 같이 업카운터를 0으로 리세트시킨다.
이와 같이하여, 분기실행예측기는 다음실행이 2의 길이를 가져야 하는 것을 예측하도록 설정되게 된다.
제 6 행 및 제 7 행에서 업카운터 및 다운카운터는 예측된 2의 수행길이를 카운트아웃 하게 된다. 제 7 행에서 출력된 분기는 다운카운터가 0이기 때문에 실행의 종료로 예측된다. 그리하여, 상기 예측은 0으로 변경된다. 이것은 뒤에 잘못된 예측으로 발견되는데, 그 결과 제 7' 행에 도시된 동일한 예측기 값들을 갖는 분기가 재 출력되게 된다. 이 때, 갱신모듈(38)은 단계(101)에서 예측이 잘못되었다는 것을 판단하고, 이어 경로(210)로 다시 진행하게 된다. 단계(111)에서 업카운터가 최대값에 있지 않은 것으로 결정되면, 후속단계(1130에서 다운카운터가 0이라는 것이 결정된다. 이 경우, 실제수행길이는 여전히 알 수 없으며, 따라서 그의 끝을 예측할 수 없다. 그러므로, 다운카운터는 단계(114)에서 최대값으로 설정되어, 실행의 끝을 예측하는 여하한 시도를 방지시킨다. 업카운터는 현재의 수행길이를 카운트하도록 단계(108)에서 증분을 계속한다.
제 8 행 및 제 9 행에서의 예측들은 다운카운터가 디스에이블상태에 있기 때문에 상태기계예측기로부터 직접적으로 실행된다. 제 9행열에서 출력된 분기는 1 로 예측되고 길이 4의 수행(제 5, 6, 7, 8 행)의 종료를 나타내는 0으로 발견된다. 상기 분기가 재 출력(제 9' 행)되면, 갱신모듈(38)은 다시 단계(101)에서 상기 예측이 잘못된 것이었다는 것을 결정하게 된다. 단계(111)의 실행후 경로(212)로 진행하여 단계(113)에서 다운카운터가 0이 아닌 지의 여부가 결정되고, 그런 경우에는 단계(109)에서 업카운터가 다운카운터에 복사된 후 단계(110)에서 0으로 재 초기화된다. 따라서, 제 10 행에서 분기실행예측기는 다음의 수행이 4의 길이를 가질 것이라는 예측을 하도록 설정된다.
제 5B 도에 도시된 예에 있어서의 모든 분기들은 분기실행예측기 없이는 1로서 예측되어 있을 것이다. 따라서, 제 4 행 및 제 9 행의 분기들은 잘못 예측되었을 수 있지만 제 7 행의 분기는 정확하게 예측되었을 것이다.
즉, 7보다 짧은 길이의 수행 뒤에 그 보다 긴 길이의 수행이 뒤따르는 경우에는 언제나 정확한 분기보수가 이루어지게 된다. 7 또는 그보다 작은 길이의 수행 뒤에 제 4 행에서와 같이 그 보다 짧은 길이의 수행이 뒤따르는 경우에는 부수가 분기수행예측기를 가지고 또는 분기수행예측기 없이 이루어진다. 짧은 길이의 수행 뒤에 그와 동일한 길이의 수행이 뒤따르는 경우에는 언제나 분기수행예측기가 분기보수를 방지시킨다.
본 발명에 따르면 수행길이가 일정한 또는 서서히 변화하는 분기들에 대한 분기예측율을 상당히 개선시킬 수 있다. 신속하게 변화하는 수행길이를 갖는 분기들의 경우는 수행길이의 정확한 분배여부에 다라 성능에 악영향이 미칠 수 있다.
지금까지 본 발명의 실시예에 관해 설명하였으나 본 발명은 이에 국한되지 않고 첨부한 특허청구의 범위 내에서 다양한 변경 및 수정이 이루어질 수 있음은 물론이다.
제 1 도는 분기예측기의 상태다이아그램,
제 2 도는 본 발명의 방법이 적용되는 수퍼스칼라 프로세서를 나타내는 블록도,
제 3 도는 예측 모듈을 나타내는 도면,
제 4 도는 본 발명에 따른 실행 분기 예측방법의 흐름도,
제 5A도는 3의 일정한 수행길이를 갖는 분기에 대한 분기예측기의 지속상태특성을 나타내는 다이아그램,
제 5B 도는 3의 길이의 수행 뒤에 그 보다 짧은 길이의 수행이 추종되고 2의 길이의 수행 뒤에는 그 보다 긴 4의 길이의 실행이 뒤따르는 특성을 나타내는 다이아그램.
* 도면의 주요 부분에 대한 부호의 설명 *
101 : 분기 예측 램 11 : 프로그램카운터레지스터
13 : 어드레스버스 15A,15B,15C,15B : 멀리플렉서
16A,16B,16C,16D : 예측모듈 19A : 데이타버스,
19B : 어드레스버스, l9C : 쓰기인에이블제어라인
20 : 분기 쉘프 22A,22B,22C,22D : 정합라인
21A,21B,21C,21D : 데이타버스 23 : NOR게이트
24 : 배타적OR게이트 25 : 선입선출부
261A,26B,26C,26D : 입력포트 30 : 어드레스입력포트
35 : 선택분기신호 38 : 갱신모듈(38)
50 : 명령출력논리 400 : 엔트리신호

Claims (47)

  1. 컴퓨터시스템에서의 실행을 위해 명령 메모리로부터 무조건 및 조건제어 전송명령들을 포함하는 명령의 시퀀스를 페치하는 방법에 있어서, 상기 방법이 각 클럭사이클에서 프로그램카운터에 저장된 것으로부터 시작하는 연속된 어드레스들에서 상기 명령메모리로부터 하나 이상의 명령을 리딩하는 단계와, 상기 하나 이상의 명령으로부터의 각 제어-전송명령(control-transfer instructions)을 무조건, 조건 및 실행인지, 조건 및 비실행인지 또는 추측명령으로서 분류하는 단계와, 상기 명령 시퀀스내의 각 추측제어전송명령(speculative control transfer instrurtion)에 대한 제어조건을 예측하는 단계와, 무조건, 실행으로 인식 또는 실행으로 예측되는 경우 첫 번째 제어-전송명령에 의해 명령된 바와 같이 다음 클럭사이클의 리딩단계에 대해 프로그램 카운터를 변경하는 단계로 구성되고, 상기 명령메모리에 저장된 조건분기를 제어하는 조건이 동일하게 n회 이어서 반대로 1회가 반복되는 일정한 루프 동작(looping behavior)을 나타내는 경우 그 제어조건을 매번 정확히 예측하는 것을 특징으로 하는 명령 시퀀스페치방법.
  2. 제 1 항에 있어서,
    조건분기를 제어하는 조건이 동일한 우세 값(predominan value)으로 1회 이상 나타나고 그 반대 조건이 1회 나타나는 루핑 동작을 시현하고, 그 조건이 직전 루프와 동일한 길이를 갖는 루프내에 있는 경우 그 제어조건을 매번 정확히 예측하는 것을 특징으로 하는 페치방법.
  3. 제 2 항에 있어서,
    상기 조건이 루핑동작을 나타내고 현재의 루프길이 및 직전 루프길이가 소정의 상수보다 작은 경우 그 제어조건을 매번 정확히 예측하는 것을 특징으로 하는 페치방법.
  4. 제 3 항에 있어서,
    상기 루핑동작을 나타내고 이전의 루프길이가 상기 상수보다 크거나 그와 동일하게 되어 있고, 그 루프내의 다른 모든 조건들과 반대의 조건을 갖는 그 조건분기가 현재 루프의 끝에 있는것이 아닌 경우 그 제어조건을 매번 정확히 예측하는 것을 특징으로 하는 페치방법.
  5. 제 4 항에 있어서,
    상기 방법이 분기조건에 대한 우세값을 행 내에 두 개 이상의 페치를 가장 최근에 포함하는 것으로 인지된 또는 예측된 값으로서 확립시키는 것을 특징으로 하는 페치방법.
  6. 제 5 항에 있어서,
    상기 방법이 조건 값이 우세값에 반대되는 것으로 인지된 또는 예측된 바로전의 페치이래 분기의 페치 갯수에 대한 카운터값을 유지시키는 것을 특징으로 하는 페치방법.
  7. 제 6 항에 있어서,
    상기 방법이 조건값이 우세값에 반대되었던 바로 전의 페치에서의 카운터값을 기억하는 것을 특징으로 하는 페치방법.
  8. 제 7 항에 있어서,
    상기 방법이 기억된 카운터값을 현재의 카운터값과 비교하여 현재의 카운터값이 기억된 카운터값과 동일하지 않는 한 우세조건값(predominanl condition value)을 예측하는 것을 특징으로 하는 페치방법.
  9. 제 7 항에 있어서,
    상기 방법이 조건값이 우세값에 반대되었던 분기의 가장 최근의 페치시 그 페치에 의해 종료된 루프의 길이가 카운터의 용량을 초과했기 때문에 카운터가 오버플로우 되었는지의 여부를 검출하고 기억하는 것을 특징으로 하는 페치방법.
  10. 제 9 항에 있어서,
    상기 방법이 카운터의 기억된 값(오버플로우 포함)을 카운터의 현재값과 비교하여, 기억된 카운터값이 오버플로우가 아니었고 현재값과 동일하게 되지 않는한 우세조건값을 예측하는 것을 특징으로 하는 페치방법.
  11. 제 10 항에 있어서,
    상기 방법이 상기 조건분기에 대해 제 1 이진카운터(first binary counter)를 유지시키고, 재페치가 아니고 반대값을 갖는 것으로 인지 또는 예측되거나 재페치로서 반대값을 갖지 않는 것으로 원래 예측되었던 분기의 페치시 상기 카운터를 0으로 초기화시키고, 상기 카운터가 카운터의 변화가 없는 그의 최대카운터값에 도달하지 않는 한 그 분기의 각기 다른 페치시마다 그 카운터를 1만큼 증분시키는 것을 특징으로 하는 페치방법.
  12. 제 11 항에 있어서,
    상기 방법이 상기 조건분기에 대해 상기 제 1 이진카운터와 동일한 용량의 제 2 이진카운터를 유지시키고, 그 제 2 이진카운터가 0으로 유지되는 경우에 한해서만 반대조건값을 예측하고, 상기 분기의 각 페치시 해당페치가 그의 이전페치시의 부정확한 예측에 의해 필요하게 된 재페치인지의 여부에 의존하는 방식으로 제 2 이진 카운터를 수정하여, 재페치가 아닌 경우, 제 1 이진카운터가 그의 최대값으로 유지되면 제 2 이진카운터를 그의 최대값으로 설정하고, 그렇지 않으면 제 2 이진카운터가 0으로 유지되어 제 1 이진카운터의 값은 제 2 이진카운터로 복사시키지 않는 한 1만큼 감분시키고, 재페치인 경우,이전 페치가 우세방향과 반대로 예측되어 제 2 이진카운터가 그의 최대값으로 설정되지 않는 한, 이전페치시의 제 1 이진카운터의 값을 제 2 이진카운터에 복사시키는 것을 특징으로 하는 페치방법.
  13. 제 12 항에 있어서,
    상기 방법이 분기를 재페치할 때마다 우세예측과, 재페치되고 있는 상기 분기 직전의 분기에 대해 우세한 제 1 및 제 2 이진카우터들의 값들을 회복시킬수 있는 것을 특징으로 하는 페치방법.
  14. 제 13 항에 있어서,
    상기 방법이 분기의 페치 후, 갱신된 우세예측과 그 분기에 대한 제 1 및 제 2 이진카운터들의 값들을 분기명령의 명령메모리어드레스와 함께 분기 쉘프에 저장하는 것을 특징으로 하는 페치방법.
  15. 제 14 항에 있어서,
    상기 방법이 분기 쉘프로부터 페치된 분기에 대한 우세예측과 제 1 및 제 2 이진카운터들의 값들을 상기 페치된 부기를 제어하는 조건들 및 모든 분기들의 모든 이전페치가 인지된 후 명령메모리 또는 보조램중 하나인 분기 예측 램으로 이동시키는 것을 특징으로 하는 페치방법.
  16. 제 15 항에 있어서,
    상기 방법이 분기의 페치시 그 분기의 어드레스를 저장하는 엔트리를 분기쉘프로부터 검색하고 분기 예측 램을 리딩하여, 그리고 분기 쉘프상에서 찾은 가장 최근에 부가된 부가 정합엔트리가 있으면 그를 사용하고 그렇지 않으면 분기 예측 램으로부터 리딩된 값들을 이용하여 상기 분기에 대한 우세 예측과 제 1 및 제 2 이진 카운터들의 값들을 결정하는 것을 특징으로 하는 페치방법.
  17. 제 16 항에 있어서,
    상기 방법이 하나 이상의 페치 분기 제어 조건들이 잘못 예측된 것으로 검출될 시, 상기 분기 쉘프로부터 그 페치 분기 각각에 대한 엔트리와 그 분기보다 최근에 페치된 모든 분기들에 대한 엔트리를 제거시키는 것을 특징으로 하는 페치방법.
  18. 실행을 위해 명령메모리로부터 무조건 및 조건제어-전송명령들을 포함하는 명령 시퀀스를 페치하는 컴퓨터시스템을 동작시키는 방법에 있어서, 각 클럭사이클에서 프로그램카운터의 어드레스들에서 상기 명령메모리로부터 하나 이상의 명령을 리딩하는 단계와, 상기 하나 이상의 명령으로부터의 각 분기명령을 무조건, 조건 및 실행인지, 조건 및 비실행인지 또는 추측명령으로서 분류하는 단계와, 상기 명령 시퀀스내의 각 추측 분기 명령에 대한 제어조건을 그 제어조건보다 큰 가장 최근의 수행길이와 동일한 수행길이를 갖는 것으로 예측하는 단계와, 무조건, 실행으로 인식 또는 수행예측되는 경우 하나인 첫번째 분기명령에 의해 명령된 바와 같이 다음 클럭 사이클의 리딩단계에 대한 프로그램카운터를 변경하는 단계로 구성되어,상기 명령메모리에 저장된 조건분기를 제어하는 조건이 일정한 루핑동작을 나타내는 경우 그 제어조건을 정확히 예측하는 것을 특징으로 하는 명령 시퀀스페치 컴퓨터시스템의 동작방법.
  19. 제 18 항에 있어서,
    상기 예측단계는 조건 분기 명령에 대한 제어조건이 상기 조건 분기 명령의 수행길이를 결정하도록 제 1 상태에서 제 2 상태로 변화하기 전에 상기 제 1 상태로 유지되는 횟수를 카운팅하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  20. 제 19 항에 있어서,
    상기 카운팅단계는 설정된 상수까지 카운팅하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  21. 제 20 항에 있어서,
    상기 예측단계는 상기 조건 분기 명령의 현재의 수행길이가 상기 설정된 상수와 동일하거나 그를 초과할 때 조건 분기 명령을 제어하는 조건을 상기 조건 분기 명령의 최근의 두 개 이상의 페치와 동일한 것으로 예측하는 것을 특징으로 하는 동작방법.
  22. 제 19 항에 있어서,
    상기 카운팅단계는 상기 조건 분기 명령의 최근의 두 개 이상의 연속된 페치중에 변화되지 않은 조건에 대해 보충적인 것으로 인지 또는 예측된 조건을 갖는 최종페치후의 상기 조건 분기 명령의 페치횟수를 카운팅하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  23. 제 22 항에 있어서,
    상기 예측단계는 상기 조건 분기 명령의 최근의 두 개 이상의 페치중에 변화되지 않은 조건에 대해 보충적인 것으로 인지 또는 예측된 조건을 갖는 최종페치후의 상기 조건 분기 명령의 페치횟수를 저장하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  24. 제 23 항에 있어서,
    상기 예측단계는 이전의 수행길이를 상기 조건 분기 명령의 현재의 페치 횟수와 비교하여, 상기 이전 수행길이가 상기 현재 페치횟수와 동일하지 않는 한 상기 제어조건을 상기 조건 분기 명령의 최근의 두 개 이상의 페치에 대한 것과 동일한 것으로 가정하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  25. 제 24 항에 있어서,
    상기 예측단계는 상기 이전 수행길이가 설정된 상수와 동일한지 아니면 그 상수를 초과하는지의 여부를 결정하는 단계를 포함하는 것을 특징으로 하는 특징으로 하는 동작방법.
  26. 제 25 항에 있어서,
    상기 가정단계는 상기 이전 수행길이가 상기 설정된 상수보다 작고 상기 현재 페치횟수와 동일하지 않는 한 상기 제어조건을 상기 조건 분기 명령의 최근의 두 개 이상의 페치에 대한 것과 동일한 것으로 가정하는 것을 특징으로 하는 동작방법.
  27. 제 18 항에 있어서,
    상기 예측단계는 각 조건 분기 명령에 제 1 이진카운터를 연관시키는 단계와, 해당 조건 분기 명령이 그 분기명령의 재페치가 아니고, 그 분기명령의 직전 페치에 대한 제어조건에 대해 보충적인 제어조건을 갖는 것으로 인지 또는 예측되거나, 또는 재페치로서 상기 분기명령의 직전 페치의 제어조건과 동일한 제어조건을 갖는 것으로 예측되었었다면 상기 조건 분기 명령의 페치시 연관 카운터를 초기화시키는 단계와, 상기 카운터가 설정된 최대카운터값에 도달하지 않는 한 상기 분기명령의 각 후속페치시 상기 카운터를 1 만큼 증분시키는 단계를 포함하는 것을 특징으로 하는 동작방법.
  28. 제 27 항에 있어서,
    상기 예측단계는 각 조건 분기 명령에 상기 제 1 이진카운터와 동일한 최대카운터값을 갖는 제 2 이진카운터를 연관시키는 단계와, 상기 제 2 이진카운터가 0의 카운터값을 갖는 경우에만 해당 분기명령의 제어조건을 보충된 것으로 예측하는 단계와, 상기 분기명령의 각 페치시 그 페치가 그 분기명령의 이전페치시의 부정확한 예측에 의해 필요하게된 재페치인지의 여부에 응답하여 상기 제 2 이진카운터를 수정하는 단계를 추가로 포함하는 것을 특징으로 하는 동작방법.
  29. 제 28 항에 있어서,
    상기 페치가 상기 분기명령의 재페치가 아닌 경우, 상기 제 2 이진카운터 수정단계는 상기 제 1 이진카운터가 상기 최대카운터값으로 유지되면 상기 제 2 이진카운터를 상기 최대카운터값으로 설정시키는 단계와, 그렇지 않으면 제 2 이진카운터를 그것이 0의 카운터값으로 유지되지 않는 한 감분시키는 단계와, 상기 제 2 이진카운터가 0의 카운터값으로 유지되면 제 1 이진카운터의 카운터값을 제 2 이진카운터에 복사하는 단계를 추가로 더욱 포함하는 것을 특징으로 하는 동작방법.
  30. 제 28 항에 있어서,
    상기 페치가 상기 분기명령의 재페치인 경우, 상기 제 2 이진카운터 수정 단계는 상기 조건 분기 명령에 대한 이전페치의 제어조건이 그 조건 분기 명령의 이전의 2개 이상의 페치중에 변경되지 않은 조건에 대해 보충적인 것으로 예측되어 있지 않는 한 이전페치시의 상기 제 1 이진카운터의 카운터값을 제 2 이진카운터에 복사시키는 단계와, 상기 조건 분기 명령에 대한 이전페치의 제어조건이 그 조건분기 명령의 이전의 2개 이상의 페치중에 변경되지 않은 조건에 대해 보충적인 것으로 예측되었다면 상기 제 2 이진 카운터를 상기 최대카운터값으로 설정하는 단계를 더욱 포함하는 것을 특징으로 하는 동작방법.
  31. 제 30 항에 있어서,
    상기 예측단계는 조건 분기 명령의 이전의 2개 이상의 페치에 대해 변경되지 않은 상기 분기명령의 상기 제어조건과, 재페치되는 상기 분기명령의 페치 바로 전의 상기 분기명령에 대한 상기 제 1 및 제 2 이진카운터들의 카운터값을 회복시키는 단계를 포함하는 것을 특징으로 하는 동작방법.
  32. 제 13 항에 있어서,
    상기 예측단계는 조건 분기 명령의 이전의 2개 이상의 페치중에 변경되지 않은 상기 분기명령의 상기 제어조건과, 상기 분기명령에 대한 상기 제 1 및 제 2 이진카운터들의 카운터값과, 상기 분기명령의 각 페치시 그 분기 명령의 명령메모리어드레스를 저장하는 단계를 포함하는 것을 특징으로 하는 동작방법.
  33. 컴퓨터내에서의 조건 분기 명령의 방향을 예측하는 방법에 있어서, 상기 분기명령의 첫번째 수행의 길이를 설정된 한계 값으로 결정하는 단계와,
    상기 조건 분기 명령의 다음 수행의 길이를 카운팅하는 단계와, 상기 다음번 수행의 길이가 상기 첫 번째 수행의 길이와 동일하기 전에 종료하거나 상기 첫번째수행의 길이를 초과하지 않는 한 상기 다음번 실행의 길이를 상기 첫번째 수행의 길이와 동일한 것으로 가정하는 단계로 구성되어, 정확히 예측된 조건 분기 명령들의 인입이 증대되는 것을 특징으로 하는 조건 분기명령 방향 예측방법.
  34. 제 33 항에 있어서,
    상기 다음번 수행의 길이가 상기 첫번째 수행의 길이를 초과하면 상기 다음번 수행의 길이를 계속 불확실한 것으로 가정하는 단계를 더욱 포함하는 것을 특징으로 하는 방법.
  35. 제 34 항에 있어서,
    상기 분기명령에 대한 다음번 수행의 길이가 상기 첫 번에 수행의 길이와 동일하기 전에 종료하면 상기 다음번 수행의 길이를 결정하는 단계와, 상기 다음번 수행을 추종하는 상기 조건 분기 명령의 수행길이를 카운팅하는 단계와, 상기 다음번 수행을 추종하는 수행의 길이가 상기 다음번 수행의 길이와 동일하기 전에 종료하거나 상기 다음번 수행의 길이를 초과하지 않는 한 상기 그 다음번 수행을 추종하는 수행의 길이를 상기 다음번 수행의 길이와 동일한 것으로 가정하는 단계를 더욱 포함하는 것을 특징으로 하는 방법.
  36. 컴퓨터 내에서의 분기명령을 제어하는 조건의 출력을 예측하는 방법에 있어서, 상기 제어조건이 제 1 상태로부터 제 2 상태로 변화되기에 앞서 상기 제 1 상태에 있는 횟수를 결정하는 단계와, 상기 제어조건이 상기 제 2 상태로 변화되기 전의 횟수와 동일한 횟수로 상기 제 1 상태에 유지되는 것으로 예측하는 단계를 포함하는 것을 특징으로 하는 분기명령제어조건 출력예측방법.
  37. 제 36 항에 있어서,
    상기 결정 및 예측단계들은 각 조건 분기 명령에 대해 실행되는 것을 특징으로 하는 방법.
  38. 제 36 항에 있어서,
    상기 분기명령을 상기 예측단계에 따라 실행하는 것을 특징으로 하는 방법.
  39. 제 38 항에 있어서,
    상기 수행단계는 상기 분기명령을 상기 제어조건의 제 1 상태에 따라 상기 횟수만큼 수행시키는 단계와, 그 뒤에 상기 분기명령을 상기 제어조건의 상기 제 2 상태에 따라 수행시키는 단계를 포함하는 것을 특징으로 하는 방법.
  40. 제 39 항에 있어서,
    상기 결정단계에서 상기 횟수가 제한되는 것을 특징으로 하는 방법.
  41. 제 40 항에 있어서,
    상기 결정단계는 상기 조건 분기 명령의 현재 수행길이의 제 1 카운터값을 유지시키는 단계와, 상기 제 1 카운터값과 상기 조건 분기 명령의 가장 최근에 완료된 수행길이에 응답하여 제 2 카운터값을 유지시키는 단계를 포함하는 것을 특징으로 하는 방법.
  42. 제 41 항에 있어서,
    상기 제 1 카운터값은 상기 조건 분기 명령이 정확하게 수행될 때 마다 그 제 1 카운터값을 증분시키는 것에 의해 유지되는 것을 특징으로 하는 방법.
  43. 제 41 항에 있어서,
    상기 제 2 카운터값은 상기 조건 분기 명령이 정확하게 수행될 때 마다 상기 가장 최근에 완료된 수행길이의 카운터값을 감분시키는 것에 의해 유지되는 것을 특징으로 하는 방법.
  44. 제 40 항에 있어서,
    상기 결정단계는 상기 조건 분기 명령이 정확하게 수행될 때 마다 상기 조건 분기 명령의 현재수행길이의 제 1 카운터값을 증분시키는 것에 의해 그 제 1 카운터값을 유지시키는 단계와, 상기 조건 분기 명령이 정확하게 실행될 때 마다 상기 조건 분기 명령의 가장 최근에 완료된 수행길이의 카운터값을 감분시키는 것에 의해 상기 제 2 카운터값을 상기 제 1 카운터값과 상기 가장 최근에 완료된 수행길이에 응답하여 유지시키는 단계를 포함하고, 상기 제 2 상태수행단계는 상기 제 2 카운터값이 0에 도달할 때 수행되는 것을 특징으로 하는 특징으로 하는 방법.
  45. 제 40 항에 있어서,
    상기 예측단계는 상기 제어조건이 상기 제한된 횟수를 초과하여 상기 제 1 상태에 유지되면 상기 제어조건이 상기 제 1 상태에 유지되는 것으로 예측하는 단계를 포함하는 것을 특징으로 하는 방법.
  46. 제 44 항에 있어서,
    상기 예측단계는 상기 수행된 분기명령이 잘못 예측될 때 상기 현재 수행 길이가 설정된 한계값을 초과하면 상기 제 1 카운터값을 재개시시키는 단계와, 상기 제 2 카운터값을 상기 제어분기명령의 상기 가장 최근에 완료된 수행길이에 대한 상기 이전의 제 1 카운터값으로 설정하는 단계를 포함하는 것을 특징으로 하는 방법.
  47. 제 44 항에 있어서,
    상기 현재 수행길이가 상기 가장 최근에 완료된 수행길이보다 짧으면, 상기 제 2 카운터값을 상기 제어분기명령의 상기 가장 최근에 완료된 수행길이에 대한 상기 제 1 카운터값으로부터 복사하는 단계와, 상기 제 1 카운터값을 재개시시키는 단계를 포함하는 것을 특징으로 하는 방법.
KR1019950046241A 1994-12-02 1995-12-02 제한실행분기예측방법 KR100371686B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US34851994A 1994-12-02 1994-12-02
US08/348519 1994-12-02
US08/348,519 1994-12-02

Publications (2)

Publication Number Publication Date
KR960025144A KR960025144A (ko) 1996-07-20
KR100371686B1 true KR100371686B1 (ko) 2003-03-31

Family

ID=23368385

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950046241A KR100371686B1 (ko) 1994-12-02 1995-12-02 제한실행분기예측방법

Country Status (7)

Country Link
US (1) US5926634A (ko)
JP (1) JP3725547B2 (ko)
KR (1) KR100371686B1 (ko)
CN (3) CN100507834C (ko)
GB (1) GB2309806B (ko)
TW (1) TW419630B (ko)
WO (1) WO1996017295A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438682B1 (en) * 1998-10-12 2002-08-20 Intel Corporation Method and apparatus for predicting loop exit branches
JP3683439B2 (ja) 1999-08-24 2005-08-17 富士通株式会社 分岐予測を抑止する情報処理装置および方法
WO2001016714A1 (en) * 1999-09-01 2001-03-08 Intel Corporation Fast write instruction for micro engine used in multithreaded parallel processor architecture
US6823446B1 (en) * 2000-04-13 2004-11-23 International Business Machines Corporation Apparatus and method for performing branch predictions using dual branch history tables and for updating such branch history tables
US7107438B2 (en) * 2003-02-04 2006-09-12 Via Technologies, Inc. Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions
CN100407133C (zh) * 2003-07-09 2008-07-30 Nxp股份有限公司 用于分支预测的方法和设备
US8144156B1 (en) 2003-12-31 2012-03-27 Zii Labs Inc. Ltd. Sequencer with async SIMD array
JP2007109116A (ja) * 2005-10-17 2007-04-26 Fukuoka Pref Gov Sangyo Kagaku Gijutsu Shinko Zaidan 推定装置、テーブル管理装置、選択装置、テーブル管理方法、そのテーブル管理方法をコンピュータに実現させるプログラム、及び、そのプログラムを記録する記憶媒体
US8640005B2 (en) 2010-05-21 2014-01-28 Intel Corporation Method and apparatus for using cache memory in a system that supports a low power state
US10007524B2 (en) * 2014-11-14 2018-06-26 Cavium, Inc. Managing history information for branch prediction
EP3933597A1 (en) * 2020-06-30 2022-01-05 Microsoft Technology Licensing, LLC Code flow trace compression employing branch prediction for implicit code flow data encoding in a processor

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4764861A (en) * 1984-02-08 1988-08-16 Nec Corporation Instruction fpefetching device with prediction of a branch destination for each branch count instruction
US5440704A (en) * 1986-08-26 1995-08-08 Mitsubishi Denki Kabushiki Kaisha Data processor having branch predicting function
GB8728493D0 (en) * 1987-12-05 1988-01-13 Int Computers Ltd Jump prediction
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
TW261676B (ko) * 1993-11-02 1995-11-01 Motorola Inc

Also Published As

Publication number Publication date
GB9710868D0 (en) 1997-07-23
GB2309806B (en) 2000-02-23
CN1168727A (zh) 1997-12-24
TW419630B (en) 2001-01-21
CN1881177A (zh) 2006-12-20
JP3725547B2 (ja) 2005-12-14
US5926634A (en) 1999-07-20
CN100507834C (zh) 2009-07-01
CN1619488A (zh) 2005-05-25
CN1306394C (zh) 2007-03-21
WO1996017295A1 (en) 1996-06-06
GB2309806A (en) 1997-08-06
CN1159648C (zh) 2004-07-28
KR960025144A (ko) 1996-07-20
JPH10510076A (ja) 1998-09-29

Similar Documents

Publication Publication Date Title
JP3594506B2 (ja) マイクロプロセッサの分岐命令予測方法
US8078852B2 (en) Predictors with adaptive prediction threshold
US7136992B2 (en) Method and apparatus for a stew-based loop predictor
US6170054B1 (en) Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US6081887A (en) System for passing an index value with each prediction in forward direction to enable truth predictor to associate truth value with particular branch instruction
EP0394624B1 (en) Multiple sequence processor system
KR100371686B1 (ko) 제한실행분기예측방법
EP3166015A1 (en) Fetch ahead branch target buffer
US4541047A (en) Pipelined data processing system
US4739470A (en) Data processing system
CN117008979B (zh) 一种分支预测器
CN1124546C (zh) 一种超标量处理器及在该超标量处理器中完成指令的方法
US7454602B2 (en) Pipeline having bifurcated global branch history buffer for indexing branch history table per instruction fetch group
US7765387B2 (en) Program counter control method and processor thereof for controlling simultaneous execution of a plurality of instructions including branch instructions using a branch prediction mechanism and a delay instruction for branching
US20070061554A1 (en) Branch predictor for a processor and method of predicting a conditional branch
US7849299B2 (en) Microprocessor system for simultaneously accessing multiple branch history table entries using a single port
US6898698B1 (en) Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof
US7472264B2 (en) Predicting a jump target based on a program counter and state information for a process
CN113918225A (zh) 指令预测方法、指令数据处理装置、处理器以及存储介质
US6920547B2 (en) Register adjustment based on adjustment values determined at multiple stages within a pipeline of a processor
US20010052055A1 (en) Active window management for reorder buffer
JPH07262006A (ja) 分岐ターゲットアドレスキャッシュを備えたデータプロセッサ
US7124277B2 (en) Method and apparatus for a trace cache trace-end predictor
US20060294345A1 (en) Methods and apparatus for implementing branching instructions within a processor
JP2001014162A (ja) 分岐予測方法およびデータ処理装置

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121224

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20131223

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20141218

Year of fee payment: 13

EXPY Expiration of term