KR980010787A - 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법 - Google Patents

인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법 Download PDF

Info

Publication number
KR980010787A
KR980010787A KR1019970016696A KR19970016696A KR980010787A KR 980010787 A KR980010787 A KR 980010787A KR 1019970016696 A KR1019970016696 A KR 1019970016696A KR 19970016696 A KR19970016696 A KR 19970016696A KR 980010787 A KR980010787 A KR 980010787A
Authority
KR
South Korea
Prior art keywords
instruction
iterations
executed
instruction loop
execution
Prior art date
Application number
KR1019970016696A
Other languages
English (en)
Other versions
KR100244842B1 (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 KR980010787A publication Critical patent/KR980010787A/ko
Application granted granted Critical
Publication of KR100244842B1 publication Critical patent/KR100244842B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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

Abstract

인스트럭션 루프(instruction loop)를 사변적으로(speculatively) 실행하는 프로세서 및 방법이 개시된다.
본 방법에 따르면, 프로세서는 인스트럭션 루프를 개시하고 인스트럭션 루프의 각각의 실행된 반복(executed iteration)을 카운트한다. 이수, 인스트럭션 루프가 실행되어야 하는 반복의 실제 횟수가 판정된다. 그 판정에 응답하여, 인스트럭션 루프가 실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차가 판정된다. 차가 0보다 크다는 판정에 응답하여, 인스트럭션 루프의 오류예측된 반복내의 실행되지 않은 인출 인스트럭션은 그 차가 0보다 작다는 판정에 응답하여 제거된다. 또한, 실행된 인스트럭션 루프의 오류예측된 반복의 데이터 결과는 폐기된다. 다른 실시예에 따르면, 카운트 게지스터(count register)를 0으로 세트하고 실행된 인스트럭션 루프의 각 반복에 대해 카운트 레지스터를 1회 감분시킴으로써 인스트럭션 루프의 실행된 반복이 카운트된다. 실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차는 반복의 실제 횟수와 카운트 레지스터의 값을 가산한으로써 판정된다.

Description

인스트럭션 루프를 사변적으로 실행하는 프로세서 및 그 방법
본 발명은 일반적으로 데이터 처리를 위한 방법 및 시스템에 관한 것으로, 특리 분기 인스트럭션을 실행하는 프로세서 및 방법에 관한 것이다.
보다 상세하게는, 본 발명의 기숙적인 분야는 인스트럭션 루프(instruction loop)를 사변적으로(speculativ-ely) 실행하는 프로세서 및 방법에 관한 것이다.
현재 기술 수준의 수퍼스칼라 프로세서는, 예를 들어 인스트럭션을 저장하는 인스트럭션 캐쉬, 실행을 위해 인스트럭션 캐쉬로부터 인출된 인스트럭션을 임시적으로 저장하는 인스트럭션 버퍼(an instruction buffer), 순차적인 인스트럭션을 실행하는 하나 이상의 실행 유닛(execution unit), 분기 인스트럭션을 실행하는 분기 처리 유닛(a branch processing unit; BPU), 인스트럭션 버퍼로부터 특정 실행 유닛으로 순차적인 인스트럭션을 디스패치하는 디스패치 유닛(dispatch unit), 시행은 종료(finished)되었으나, 완료(completed)되지는 않은 순차적인 인스트럭션을 임시적으로 저장하는 완료 버퍼(a completion buffer)를 포함할 수 있다.
수퍼스칼라(superscalar) 프로세서의 분기 처리 유닛(BPU)에 의해 실행되는 분기 인스트럭션은 조건부 분기 인스트럭션 또는 무조건부 분기 인스트럭션으로서 분류될 수 있다.
무조건부 분기 인스트럭션은 다른 인스트럭션을 실행함으로써 공급되느 조건에 관계없이 순차적인 경로로부터 지정된 목적 실행 경로로 프로그램 실행 흐름을 바꾸는 분기 인스트럭션이다.
따라서, 무조건부 분기 인스트럭션에 의해 지정된 분기는 항상 취해진다(taken). 이와 달리, 조건부 분기 인스트럭션은 프로세서내의 조건, 예를 들면 지정된 레지스터 비트의 상태 또는 카운터의 값에 따라 프로그램 흐름중에 지정된 분기가 취해질 수도 있고 취해지지 않을 수도 있는 분기 인스트럭션이다.
조건부 분기 인스트럭션은, 조건부 분기 인스트럭션이 분기 처리 유닛(BPU)에 의해 평가(evaluate)될때에 분기가 의존하느 조건이 이용가능한지에 따라, 결정형(resolved) 또는 미결정형(unresolved)으로 또한 분류될 수 있다. 결정형 주건부 분기 인스트럭션이 의존하는 조건은 실행 이전에 알려지르로, 결정형 조건부 분기 인스트럭션은 전형적으로 실행될 수 있고, 목적 실행 경로내의 인스트럭션은 순차적인 인스트럭션의 실행시 거의 또는 전혀 지연되지 않고 인출될 수 있다. 한편, 미결정형 조건부 분기는 분기가 의존하는 조건이 이요가능해지고 분기가 결정될 때까지도 순차적인 인스트럭션의 인츨이 지연되는 경우 현저한 성능상의 저해를 가져올 수 있다.
따라서 성능을 향상시키기 위해 몇몇 프로세서는 지정된 분기가 취해질지의 여부를 예측함으로써 미결정형 분기 인스트럭션을 사변적으로(speculatively) 실행한다. 예측 결과를 이용하여, 인출기(fether)는 분기의 결정 이전에 사변적인 실행 경로내의 인스트럭션을 인출할 수 있으므로, 분기가 올바르게 예측된 것으로 이후 결정(resolved)되는 경우 실행 파이프라인에서의 정지(stall)를 방지할 수 있다.
대부분의 유형의 조건부 분기는, 예를 들면 정적 또는 동적 분기 예측(static or dynamic branch prediction)을 이용하여 BPU에 의해 기계적으로(routinly) 예측되지만, 인스트럭션 루프의 인덱스로서 기능하는 레지스터내에 포함된 값에 기초하여 분기하는 "카운트 의존형 조건부 분기(branch conditional on count)" 인스트럭션은 통상적인 프로세서에 의해서는 예측되지 않는다. 카운트 의존형 조거누 분기 인스트럭션이 통상적인 프로세서의 BPU에 의해 디코드되는 경우, 인스트럭션은 (특구 목적 레지스터에 전형적으로 저장되는) 분기 인덱스 값이 이용가능해질 때까지 정지한다. 이러한 방식으로 프로세서를 정지하는 것은 현저한 성능 저하를 야기하며, 많은 수의 루프를 가지는 프로그램을 실행하는 경우 특히 그러하다. 다라서 명백해지는 바와 같이, 프로세서가 카운트 의존형 조건부 분기 인스트럭션을 사변적으로 실행하도록 하고, 분기 인덱스 값이 판정(determined)되는 경우에 후속적으로 카운트 의존형 조건 분기 인스트럭션을 결정(resolve)하도록 하는 분기예측 방법이 요구된다.
따라서 본 발명의 목적은 데이타 처리에 대한 방법 및 시스템을 제공하는 것이다.
본 발의 다른 목적은 분기 인스트럭션을 실행하는 프로세서 및 방법을 제공한는 것이다.
본 발명의 또다른 목적은 인스트럭션 루프를 사변적으로 실행하는 프로세서 및 방법을 제공하는 것이다. 전술한 목적들은 이제 기술되는 바와 같이 성취된다.
인스트럭션 루프(instruction loop)를 사변적으로(speculatively) 실행하는 프로세서 및 방법이 개시된다.
본 방법에 따르면, 프로세서는 인스트럭션 루프의 실행을 개시하는 인스트럭션 루프의 실행된 각각의 반복(exexuted iteration)을 카운트한다. 이후, 인스트럭션 루프가 실행되어야 하는 반복의 실제의 횟수가 판정된다. 그 판정에 응답하여, 인스트럭션 루프가 실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차가 판정된다. 차가 0보다 크다는 판정에 응답하여, 그 차에 해당하는 부가적인 횟수만큼 반복이 실행된다. 일 실시예에 따르면, 인스트럭션 루프의 오류예측된 반복내의 실행되지 않은 인출 인스트럭션은 그 차가 0보다 작다는 판정에 응답하여 제거된다.
또한, 실행된 인스츠럭션 루프의 오류예측된 반복의 데이터 결과는 폐기된다. 다른 실시예에 따르면, 카운트 레지스터(count register)를 0으로 세트하고 실행된 인스트럭션 루프의 각 반복에 대해 카운트 레지스터를 1회 감분시키으로써 인스트럭션 루프의 실행된 반복이 카운트된다.
실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차는 반복의 실제 횟수와 카운트 레지스터의 값을 가산함으로써 판정된다.
상술한 내용 및 부가적인 목적, 특성, 및 장점은 다음의 상세한 설명으로부터 명백해질 것이다.
본 발명의 특성으로 간주된 신규한 특성은 첨부되는 청구 범위에 개시된다. 그러나, 본 발명 및 본 발명의 바람직한 사용 모드, 다른 목적 및 장점은 예시적인 실시예의 다음의 상세한 설명을 참조하여 첨부되는 도면과 함께 읽혀지는 경우 가장 잘 이해될 것이다.
도1은 카운트 의존형 조건부 분기 인스트럭션을 사변적으로 실행하는 장치를 포함하는 프로세서의 예시적인 실시예.
도2는 도 1에 도시된 프로세서내의 분기 처리 유닛의 보다 상세한 블럭도.
도3은 카운트 의존형 조건부 분기 인스트럭션의 예시적인 실시예.
도4는 도 5에 예시된 본 방법에 따라 사변적으로 실행될 수 있는 카운트 의존형 조건부 분기 인스트럭션을 포함하는 예시적인 인스트럭션 시퀀스.
도5는 카운트 의존형 조건부 분기 인스트럭션을 포함하는 인스트럭션 루프를 사변적으로 실행하는 방법의 예시적인 실시예의 흐름도.
도6은 분기 인덱스의 판정에 응답하여 도 2에 도시된 카운트 레지스터(CTR)내의 값을 갱신하는 방법의 흐름도.
* 도면의 주요 부분에 대한 부호의 설명
10 : 프로세서 11 : 시스템 버스
12 : BIU 14 : 인스트럭션 캐쉬 및 MMU
16 : 데이터 캐쉬 및 MMU 17 : 순차 인출기
18 : 분기 처리 유닛 19 : 인스트럭션 큐
20 : 디스패치 유닛 22 : FXU
28 : LSU 30 : FPU
32 : GPR 33 : GPR 재명명 버퍼
36 : FPR 37 : FPR 재명명 버퍼
40 : 완료 유닛
도 1을 참조하면, 첨부된 청구 범위에서 기술되는 본 발명에 따라 정보를 처리하는 통상 (10)으로 표시된 프로세서의 예시적인 실시예의 블록도가 도시되어 있다. 도시된 예시적인 실시예에서, 프로세서(10)는 단일 집적 회로 수퍼스칼라 마이크로프로세서로 이루어진다. 따라서, 이하 더 기술되는 바와 같이, 프로세서(10)는 모두 집적 회로로 형성되는 각종 실행 유닛, 레지스터, 버퍼, 메모리, 및 다른 기능 유닛을 포함한다. 프로세서(10)는 바람직하게 IBM 마이크로일렉트로닉스(Microelectroics)사로부터 입수가능한 Power PC™ 계열의 마이크로프로세서중 하나로 이루어지며, RIS(reduced instruction set computing) 기법에 따라 동작한다. 그러나, 당 분야에서 통상의 지식을 가진 자라면 다른 적절한 프로세서가 이용될 수 있음을 이해할 것이다. 조 1에 예시된 바와 같이, 프로세서(10)는 프로세서(10)내의 버스 인터페이스 유닛(BIU)(12)을 통해 시스템 버스(11)에 접속된다. BIU(12)는 프로세서(10)와, 메인 메모리(도시되지 않음)와 같은 시스템 버스(11)에 접속된 다른 장치 사이의 정보 전송을 제어한다. 프로세서(10), 시스템 버스(11) 및 시스템 버스(11)에 접속된 다른 장치가 함께 데이터 처리 시스템을 형성한다.
BIU(12)는 프로세서(10)내의 인스트럭션 캐쉬(14) 및 데이터 캐쉬(16)에 접속된다.
인스트럭션 캐쉬(14) 및 데이터 캐쉬(16)와 같은 고속 캐쉬는 프로세서(10)가 메인 메모리로부터 캐쉬(14 및 16)로 이전에 전송된 데이터 또는 인스트럭션의 서브세트에 대해 비교적 빠른 액세스 시간을 성취하도록 하여, 데이터 처리 시스템의 동작 속도를 향상시키다. 인스트럭션 캐쉬(14)는 또한 순차 인출기(17)에 접속되며, 순차 인출기(17)는 각 사이클 동안 인스트럭션 캐쉬(14)로부터 실행을 위해 하나 이상의 인스트럭션을 인출한다. 순차 인출기(17)는 인스트럭션 캐쉬(14)로부터 인출된 인스트럭션을 분기 처리 유닛(BPU)(18) 및 인스트럭션 큐(19)로 전송하며, 분기 처리 유닛(BPU)(18) 및 인스트럭션 큐(19)는 인스트럭션 캐쉬(14)로부터 인스트럭션을 디코드하여 인스트럭션이 분기 인스트럭션인지 또는 순차적인 인스트럭션인지의 여부를 판정한다. 분기 인스트럭션은 실행을 위해 BPU(18)에 의해 보유되고 인스트럭션 큐(19)로부터 삭제(cancel)된다. 한편, 순차적인 인스트럭션은 BPU(18)에 의해 보유되고 인스트럭션은 BPU(18)로부터 삭제되고 프로세서(10)내의 다른 실행회로에 의한 후속 실행을 위해 인스트럭션 큐(19)내에 저장된다.
전술한 바와 같이, BPU(18)에 의해 실행되는 분기 인스트럭션은 조건부 또는 무조건부로서 분류된다. 조건부 분기 인스트럭션은 결정형 또는 미결정형으로서 분류될 수 있다. 조건부 분기 인스트럭션은 조건 레지스터(CR)내의 특정 비트에 의존할 수 있으며, 조건 레지스터(CR)는 데이터 처리 시스템내의 다양한 조건에 응답하여, 혹은 카운트 레지스터(CTR)내에 저장된 값에 응답하여 세트되거나 또는 클리어된다.
도시된 예시적인 실시예에서, 프로세서(10)의 실행 회로는 BPU(18)외에도 고정 소수점 유닛(FXU)(22), 로드-저장 유닛(LSU)(28) 및 부동 소수점 유닛(FPU)(30)을 포함하는 순차적인 인스트럭션을 위한 다수의 실행 유닛을 포함한다.
당 분야에서 통상의 지식을 가진 자에게 잘 알려져 있는 바와 같이, 실행 유닛(22, 28 및 30)의 각각은 전형적으로 각 프로세서 사이클 동안 특정 유형의 순차적인 인스트럭션중 하나 이상의 인스트럭션을 실행한다.
예를 들면, FXU(22)는 지정된 범용 레지스터(GPR)(32) 또는 GPR 재명명 버퍼(rename buffer)(33)로부터 수신된 소스 오퍼랜드(source operands)를 이용하여, 가산, 감산, AND연사, OR연산, XOR연산과 같은 고정 소수점 수학적 연산 및 논리적 연산을 수행한다.
고정 소수점 인스트럭션의 실행에 이어, FXU(22)는 인스트럭션의 데이터 결과를 GPR 재명명 버퍼(33)에 출력하며, GPR 재명명 버퍼(33)는 GPR 재명명 버퍼(33)로부터 하나 이사의 GPR(32)로 결과 데이터를 전송함으로써 인스트럭션이 완료될 때까지 결과 데이터를 임시적으로 저장한다. 반대로, FPU(30)는 전형적으로 부동 소수점 레지스터(FPR)(36) 또는 FPR 재명명 버퍼(37)로부터 수신된 소스 오퍼랜드에 대해 부동 소수점 승산, 제산과 같은 단일배정도(single-precision) 및 이배정도(double-precision)의 부동 소수점 산술 연산 및 논리 연산을 수행한다. FPR(30)는 부동 소수점 인스트럭션을 실행하여 얻어지는 데이터를 선택된 FPR 재명명 버퍼(37)에 추력하며, FPR 재명명 버퍼(37)는 FPR 재명명 버퍼(37)로부터 선택된 FPR(36), 또는 FPR 재명명 버퍼(37)중 선택된 하나로부터의 데이타를 메모리에 저장하는 부동 소수점 및 고정 소수점 인스트럭션을 실행한다.
프로세서(10)는 수퍼스칼라 아키텍처의 성능을 더 향상시키기 위해 인스트럭션의 파이프라이닝(pipelin-ing) 및 순서외의 (out-of-order) 실행을 채용한다. 따라서, 인스트럭션은 데이터 종속성(data dependency)이 준수되는 한 임의의 순서로 FXU(22), LSU(28), 및 FPU(30)에 의해 기회주의적으로(opportunistically) 실행될 수 있다. 또한, 인스트럭션은 f\일련의 파이프라인 단계에서 FXU(22), LSU(28), 및 FPU(30)에 위해 가각 처리된다. 많은 고성능 프로세서에 있어서 전형적인 바이지만, 각 인스트럭션은 개별적인 파이프라인 단계, 즉, 인출, 디코드/디스패치, 실행, 종료, 및 완료의 5개의 단계로 처리된다.
인출 단계 동안, 순차 인출기(17)는 인스트럭션 캐쉬(14)로부터 하나 이상의 메모리 어드레스와 연관된 하나 이상의 인스트럭션을 검색(retrieve)한다. 전술한 바와 같이, 인스트럭션 캐쉬(14)로부터 인출된 순차적인 인스트럭션은 순차 인출기(17)에 의해 인스트럭션 큐(19)내에 저장되는 반면, 분기 인스트럭션은 순차적인 인스트럭션 스트림으로부터 제거된다(폴드 아웃(fold out)된다). 도 2 내지 도 6을 참조하여 기술되는 바와 같이, 분기 인스트럭션은 BPU(18)에 의해 실행되며, BPU(18)는 카운트 인스트럭션에 대한 미결정형 조건부 분기를 bpu(18)가 사변적으로 실행하도록 하는 장치를 포함한다.
디코드/디스패치 단계 동안, 디스패치 유닛(20)은 인스트럭션 큐(19)로부터 실행 유닛(22, 28 및 30)으로 하나 이상의 인스트럭션을 디코드라고 디스패치한다. 디코드/디스패치 단계 동안, 디스패치 유닛(20)은 또한 디스패치된 인스트럭션의 각각의 결과 데이타에 대해서 GPR 재명명 버퍼(33) 또는 FPR 재명명 버퍼(37)내의 재명명 버퍼를 할당한다. 도시된 예시적인 실시예에 따르면, 디스패치 유닛(20)에 위해 디스패치된 인스트럭션은 또한 완료 유닛(40)내의 완료 버퍼로 전달된다. 프로세서(10)는 고유한 인스트럭션 식별자를 이용하여 순서외의 실행 동안 디스패치된 인스트럭션의 프로그램 순서를 추적한다.
실행 단계 동안, 실행 유닛(22, 28 및 30)은 지정된 연사에 대한 오퍼랜드 및 실행 자원이 이용가능하게 됨에 따라 디스패치 유닛(20)으로부터 수신된 순차적인 인스트럭션을 기회주의적으로 실행한다, 실행 유닛(22, 28 및 30)의 각각은 바람직하게 오퍼랜드 또는 실행 자원이 이용가능해질 때까지 해당 실행 유닛에 디스패치된 인스트럭션을 저장하는 예비 스테이션을 구비한다. 인스트럭션의 실행이 종결된 후, 실행 유닛(22, 28 및 30)은 인스트럭션의 유형에 따라, GPR 재명명 버퍼(33), 또는 FPR 재명명 버퍼(37)내에 인스트럭션의 데이터 결과를 저장한다. 그리고나서, 실행 유닛(22, 28 및 30)은 완료 유닛(40)의 완료 버퍼내에 저장된 어떤 인스트럭션이 실행을 종료하였는지를 완료 유닛(40)에 통지한다. 마지막으로, 인스트럭션은 GPR 재명명 버퍼(33) 및 FPR 재명명 버퍼(37)로부터 인스트럭션의 데이터 결과를 GPR(32) 및 FPR(36)에 각각 전송함으로써 프로그램 순서로 완료 유닛(40)에 의해 완료된다.
이제 도2를 참조하면, 프로세서(10)내의 BPU(18)의 보다 상세한 블록 다이어그램이 도시되어 있다. 예시된 바와 같이, BPU(18)는 디코드 로직(50)을 포함하며, 디코드 로직(50)은 BPU(18)에 의해 순차 인출기(17)로부터 수신된 각 인스트럭션을 디코드하여 해당 인스트럭션이 분기 인스트럭션인지의 여부와, 분기 인스트럭션인 경우 어떤 유형의 분기 인스트럭션인지를 판정한다. 또한, BPU(18)는 제어 로직(52)을 포함하며, 제어 로직(52)은 해당 분기가 취해지는 경우 목적 실행 경로의 유효 어드레스(EA)를 계산함으로써 디코드 로직(50)에 의해 식별된 각 분기 인스트럭션을 실행한다. 도시된 바와 같이, 조건 레지스터(CR)(56), 카운트 레지스터(CTR)(60), 분기 히스토리 케이블 (BHT)(54)에 접속된다. CR(56)은 32비트 레지스터를 포함하며, 이 레지스터는 데이터 처리 시스템내의 각종 조건에 응답하여 세트되거나 또는 클리어되는 몇몇 비트 필드를 포함한다. 따라서, 제어 로직(52)은 CR(56)을 참조하여, CR(56)내의 비트 필드를 세트하거나 또는 클리어하는 이벤트(event)에 의존하는 각각의 분기 조건 인스트럭션을 결정한다. CTR(60)은 분기 인덱스 값을 저장하는 32비트 레지스터를 포함하며, 분기 인덱스 값은 카운트 의존형조건부 분기 인스트럭션을 결정하기 위해 제어 로직(52)에 의해 참조된다. BHT(54)는 분기 인스트럭션에 의해 지정된 분기가 취해지는 것으로서 예측되어야 할지 또는 취해지지 않는 것으로서 예측되어야 할지의 여부의 예측과 연관하여 최근에 실행된 분기 인스트럭션의 어드레스를 저장한다. 제어 모직(52)은 BHT(54)를 참조하여 CR(56)내의 비트 필드의 상태에 따라 미결정형 조건부 분기 인스트럭션을 사변적으로 실행한다.
도2를 더 참조하면, BPU(18)는 가산기(62) 및 멀티플레서(64)를 더 포함하며, 이들은 카은트 의존형 조건부 분기 인스트럭션을 실행하는데 이용된다. 예시된 바와 같이, 멀티플렉서(64)는 -1(FFFFFFFFh)과 연결된 제 1 입력과, "특수 목적 레지스터로 이동"(mtspr) 인스트럭션의 실행에 응답하여 CTR(60)에 로드된 32 비트 분기 인덱스 값을 지정하는 제 2 입력을 갖는다. 제어 로직(52)으로부터 제어 신호를 수신함에 따라, 멀티플렉서(64)의 선택된 입력에 제공된 값 및 CTR(60)의 값은 가산기(62)에 이해 합산되고 CTR(60)내에 저장된다. 따라서, CTR(60)을 클리어하고 멀티플렉서(64)의 분기 인덱스 입력을 선택함으로써, 제어 로직(52)은 32비트 분기 인덱스 값을 CTR(60)에 로드할 수 있다.
대안적으로, 멀티플렉서(64)의 -1 입력을 선택함으로써, 제어 로직(52)은 CTR(6)에 정장된 분기 인덱스 값을 감분시킬 수 있다.
이제 도3을 참조하면, 프로세서(10)의 인스트럭션 세트내의 카운트 의존형 조건부 분기 인스트럭션의 예시적인 실시예가 참조 부호(70)로 도시되어 있다. 도시된 바와 같이, 카운트 의존형 조건부 분기 인스트럭션(70)은 오피코드 필드(72), 분기 옵션(BO) 필드(74), 분기 조건(BC) 필드(76), 어드레스 계산 필드(78), 링크 필드(80)를 구비하는 다수의 필드를 갖는 32비트 인스트럭션을 포함한다. 오피코드 필드(72)는 카운트 의존형 조건부 분기 인스트럭션(70)의 인스트럭션 유형을 고유하게 식별한다. BO 필드(76)내에 지정된 CR(56)의 비트 필드에 의존하는지의 여부를 표시한다. 중요한 점은 표시된 분기가 CTR(60)내의 분기 인덱스 값에 의존한다는 것을 지정하는 BO 인코딩을 갖는 임의의 분기 인스트럭션은, 표시된 분기가 CR(56)내의 선택된 비트 필드의 상태에 또한 의존하는지의 여부에 관계없이, 카운트 의존형 조건부 분기 인스트럭션을 포함한다는 점이다. 카운트 의존형 조건부 분기 인스트럭션(70)을 다시 참조하면, 어드레스 계산 필드(58)는 카운트 의존형 조건부 분기 인스트럭션(70)에 의해 표시된 분기가 취해지는 경우 실행이 진행될 목적 어드레스를 지정한다. 마지막으로, 링크 필드(60)는 카운트 의존형 조건부 분기 인스트럭션(70)의 결정에 응답하여 (다음의 순차적인) 어드레스를 통해 폴(FALL)이 링크 레지스터에 로드될지의 여부를 표시한다.
이제 도4를 참조하면, 프로그램에서 카운트 의존형 조건부 분기 인스트럭션의 전형적인 사용을 예시하는 예시적인 인스트럭션 시퀀스가 도시되어 있다. 프로그램 순서에 따라, 인스트럭션 시퀀스(100)는 로드 인스트럭션(102) 및 mtspr 인스트럭션(104)으로 시작되며, 이들은 GPR(32)내의 레지스터(26)로부터 분기 인덱스 값을 특수 목적 레지스터(SPR)(9), 즉 CTR(60)로 로드한다.
다음에, 인스트럭션 시퀀스(100)는 가산 인스트럭션(106 및 108) 및 카운트 의존형 조건부 분기 인스트럭션(110)을 포함하는 인스트럭션 루프를 포함한다. 표시된 바와 같이, 카운트 의존형 조건부 분기 인스트럭션(110)은 가산 인스트럭션(106)의 어드레스를, 분기가 취해지는 것으로 결정될 경우 실행이 계속될 목적 어드레스로서 지정함으로써 인스트럭션 루프를 종료한다. 마지막으로, 인스트럭션 시퀀스(110)는 저장 인스트럭션(112)을 포함하며, 저장 인스트럭션(112)은 카운트 의존형 조건부 분기 인스트럭션(110)이 취해지지 않는 것으로서 결정될 경우 실행될 순차적인 인스트럭션이다.
다수의 상이한 실행 상황 하에 카운트 의존형 조건부 분기 인스트럭션(110)이 의존하는 분기 인덱스 값은 베어 로직(52)이 카운트 의존형 조건부 분기 인스트럭션(110)을 실행할 준비가 된 때에 CTR(60)내에 저장되지 않을 수도 있다. 예를 들면, mtspr 인스트럭션(104)은 로드 인스트럭션(102)에 의해 요구된 분기 인덱스 값이 데이터 캐쉬(16)의 캐쉬 실패(miss)에 응답하여 메인 메모리로부터 반환될 때까지 정지할 수도 있다. 대안적으로, 로드 인스트럭션(102)의 실행은 단순히 LSU(28)내에서 이용할 수 있는 실행 자원이 부족할 경우 지연될 수도 있다. 이러한 경우, 카운트 의존형 조건부 분기 인스트럭션(11)에 위해 지정된 분기는 분기 인덱스 값이 CTR(60)내에서 이용가능할 때까지 결정될 수 없다. 이하 도 5를 참조하여 상세히 기술되는 바와 같이, 카운트 의존형 조건부 분기 인스트럭션이 결정될 때까지 정지하는 종래의 프로세서와는 달리, 프로세서(10)는 미결정형 카운트 의존형 조건부 분기 인스트럭션(및 연관된 인스트럭션 루프)를 사변적으로 실행하여 프로세서 성능을 향상시킨다.
이제 도5를 참조하면, BPU(18)내에서 카운트 의존형 조건부 분기 인스트럭션을 사변적으로 실행하는 방법의 예시적인 실시예의 논리적인 흐름도가 도시되어 있다. 도 5에 예시된 논리적인 흐름도는 다수의 순차적인 단계를 도시하지만, 당 분야에서 통상의 지식을 가진 자라면 예시된 단계의 일부가 병렬로 수행될 수 있다는 것을 다음의 설명으로부터 이해할 것이다. 카운트 의존형 조건부 분기 인스트럭션을 사변적으로 실행하는 예시된 방법은 예시된 단계를 더 명확히 하기 위해 도 4에 예시된 예시적인 인스트럭션 시퀀스를 참조하여 기술될 것이다.
예시된 바와 같이, 처리는 블록(200)에서 시작되어 이후 블록(202 및 204)으로 진행한다. 블록(202 및 204)은 순차 인출기(17)를 도시하며, 순차 인출기(17)는 다음 세트의 순차적인 인스트럭션, 예를 들면 로드 인스트럭션(102) 및 mtspr 인스트러션(104)을 인스트럭션 캐쉬(14)로부터 검색하고, 인출된 인스트럭션을 BPU(18) 및 인스트럭션 큐(19)에 전송한다. 도 2에서 예시된 바와 같이, BPU(18)내의 디코드 로직(50)은 각 사이클 동안 순차 인출기(17)로부터 하나 이상의 인스트럭션을 수신한다. 인스트럭션의 수신에 응답하여, 디코드 로직(50)은 도 5의 블록(206)에서 예시된 바와 같이 인스트럭션을 디코드한다. 처리는 블록(206)으로부터 블록(208)으로 진행하여 인스트럭션이 분기 인스트럭션을 포함하는지의 여부에 대해 판정된다. 블록(208)에서 디코드 로직(50)에 의해 디코드된 인스트럭션이 비분기 인스트럭션이라는 판정에 응답하여, 인스트럭션은 단순히 디코드 로직(50)에 의해 폐기된다. 그러나, 블록(210)에서 해당 인스트럭션이 선택된 값을 CTR(60)에 로드하는 mtspr 인스트럭션인지의 여부에 대한 판정이 디스패치 유닛(20)에 의해 행해진다. mtspr 인스트럭션이 아닌 경우, 처리는 페이지 접속부 A를 통해 블록(21)으로 진행하며, 여기에서 처리 유닛(22, 28 및 30)에 의해 해당 인스트럭션의 정상 실행이 이루어진다. 따라서, 예를 들어 도 4를 참조하면, 로드 인스트럭션(102)은 BPU(18)에 의해 폐기되나, 실행을 위해 디스패치 유닛(20)에 의해 LSU(28)에 디스패치된다. 마찬가지로, 가산 인스트럭션(106 및 108)은 BPU(18)에 의해 폐기되나, 실행을 위해 FXU(28)에 디스패치된다. 이후, 처리는 페이지 접속부 B를 통해 블록(202)으로 복귀한다.
블록(21)으로 돌아가서, 인스트럭션이 CTR(60)에 선택된 값을 로드하는 mtspr 인스트럭션인 것으로 판정되는 경우, 블록(214)에서 디스패치 유닛(20)에 의해 CTR(60)을 목적으로 하는 다른 mtspr 인스트럭션이 디스패치되었으되 완료되지 않았는지의 여부에 대한 판정이 또한 행해진다. 블록(214)에서 예시된 판정은, 예를 들면 mtspr 인스트럭션에 대해 완료 유닛(40)내의 완료 버퍼를 탐색함으로써 행해질 수 있다. 완료되지 않은 mtspr 인스트럭션이 CTR(60)을 목적으로 한다는 판정에 응답하여 처리는 블록(216)으로 진행하며, 여기에서 디스패치 유닛(20)은 이전에 디스패치된 mtspr 인스트럭션이 완료할 때까지 인스트럭션 큐(19)에 디코드된 mtspr 인스럭션을 유지하여 CTR(60)내의 분기 인덱스 값이 중복기록되지 않도록 한다. 처리는 그다음에 페이지 접속부 B를 통해 블록(202)으로 복귀한다.
그러나, 블록(214)에서 CTR(60)을 타겟으로 하는 다른 어떠한 mtspr 인스트럭션도 미결정 상태(outstan-ding)가 아니라는 판정에 응답하여, 처리는 블록(218)으로 진행하며, 여기에서 디스패치 유닛(20)은 CTR(218)을 제어 로직(52)에 CTR(218)을 클리어하는 것은 2가지 선택적인 목적을 충족시키도록 기능한다. mtspr 인스트러션 및 카운트 의존형 조건부 분기 인스트럭션이 프로그램 순서로 실행되는 경우(즉, 분기가 비사변적으로(nonspeculatively) 실행되는 경우), CTR(60)을 클리어시킴으로T 카운트 의존형 조건부 분기 인스트럭션이 의존하는 분기 인덱스 값이 가산기(62)를 통해 CTR(60)에 로드되도록 하며, 가산기(62)는 CTR(60)의 현재 값 및 분기 인덱스 값을 합산한다. 대안적으로, 미결정형 카운트 의존형 조건부 분기 인스트럭션이 BPU(18)에 의해 디코드되는 경우에. BPU(18)의 예시된 실시예는 해당 카운트 의존형 조건부 분기 인스트럭션을 항상 취해지느 것으로서 예측함으로써, 연관된 인스트럭션 루프가 사변적으로 실행하도록 한다. 따라서, CTR(60)의 값이 카운트 의존형 조건부 분기 인스트럭션에 의해 지정된 분기 옵션을 충족하는지의 여부를 판정하기 전에 제어 로직(52)이 CTR(60을 감분시키므로, mtspr 인스트럭션의 검출에 응답하여 CTR(60)을 클리어함으로써, CTR(60)내의 값을 사변적으로 실행될 수 있는 인스트럭션 루프의 반복 횟수에 대한 2의 보수 표현을 나타낸다. 다시 블록(218)을 참조하면, 처리는 블록(218)으로부터 패이지 접속부 A를 통해 블록(212)으로 진행하며, 여기에서는 실행 자원 및 오퍼랜드가 이용가능해짐에 따라 mtspr 인스트럭션을 실행한다.
이제 도6을 참조하면, mtspr 인스트럭션의 실행에 응답하여 CTR(60)을 갱신하는 방법의 흐름도가 도시 되어 있다. 도시된 바와 같이 처리는 BPU(18)이 분기 인덱스를 수신하는 것에 응답하여 블록(250)에서 개시한다. 이후, 처리는 블록(252)으로 진행하며, 여기에서 제어 로직(52)은 분기 인덱스 값을 DTR(60)내에 저장된 2의 보수 값에 가산한다. 블록(254)에서 CTR(60)의 값이 0 이상인지의 여부에 대해 판정이 행해진다. 이 값이 0 이상인 경우, 이는 카운트 의존형 조건부 분기 인스트럭션이 실행되지 않았거나 카운트 의존형 조건부 분기 인스트럭션이 분기 인덱스 값에 의해 지정된 횟수보다 적게 사변적으로 실행되었다는 것을 나타내며, 이후 처리는 블록(260)으로 진행하여 종료한다. 어느 경우든, CTR(60)의 값이 0보다 크면, 지정된 분기 옵션이 충족될 때가지 인스트럭션 루프의 비사변적인 실행이 도5에 도시된 방법에 따라 계속된다.
블록(256)으로 돌아가서, CTR(60)에 저장된 값이 0보다 작은 것으로 제어 로직(52)이 판정함으로써 카운트 의존형 조건부 분기 인스트럭션의 적어도 하나의 반복이 오류예측되었음을 나타내는 경우, 처리는 블록(256)으로 진행한다. 블록(256)에서, BPU(18)는 인스트럭션 큐(19), 실행 유닛(22, 28 및 30), 및 완료 유닛(40)내의 완료 버퍼로부터 인스트럭션 루프의 오류예측된 반복내의 인스트럭션을 삭제한다. 또한, 인스트럭션 루프의 오류예측된 반복내의 사변적으로 실행된 인스트럭션의 데이터 결과는 GPR 재명명 버퍼(33) 및 FPR 재명명 버퍼(37)로부트 폐기된다. 처리는 블록(258)으로 진행하여, 제어 로직(52)이 CTR(60)을 클리어시키고, 이후 블록(260)에서 종료한다.
다시 도5의 블록(208)을 참조하면, 디코드 로직(50)에 의해 디코드된 인스트럭션이 분기 인스트럭션인 것으로 판정되는 경우, 블록(230)에서 도시된 바와 같이, 해당 분기 인스트럭션이 카운트 의존형 조건부 분기 인스트럭션인지에 대해 판정된다.
카운트 의존형 조건부 분기 인스트럭션이 아닌 경우, 처리는 블록(220)으로부터 블록(212)으로 진행하며, 여기에서 분기 인스트럭션이 정상적으로 실행된다.
따라서, 예를 들면, 디코드 로직(50)으로부터의 무조건부 분기 인스트럭션의 수신에 응답하여, 제어 로직(52은 분기 인스트럭션에 의해 표시된는 목적 인스트럭션 경로의 유효 어드레스(EA)를 계산하고 인스트럭션 캐쉬(14)에 EA를 전송한다. 그러나, 조건 레지스터(CR)(56)내의 지정된 비트 필드를 검사함으로써 분기를 결정하려 한다. 조건부 분기 인스트럭션이 의존하는 CR 비트 필드가 이용가능하지 않은 경우, 제어 로직(52)은 BHT(64)를 이용하여 지정된 분기를 예측한다. 이후, 제어 로직(52)은 목적 사변적 실행 경로의 EA를 계산하고 인스트럭션 캐쉬(14)에 EA를 전송한다.
블록(230)으로 돌아가서, 인출된 인스트럭션이 카운트 의존형 조건부 분기 인스트럭션, 예를 들면 카운트 의존형 조건부 분기 인스트럭션(11)인 것으로 디코드 로직(50)이 판정하는 경우, 처리는 블록(232)으로 진행하며, 여기에서 베어 로직(52)은 CTR(60)에 저장된 값을 감분시킨다. 다음에, 블록(234)에서 CTR(60)내에 저장된 rkat이 카운트 의존형 조건부 분기 인스트럭션의 BO 필드(74)에 인코드된 분기 옵션을 충족하는지의 여부(예를 들면, 분기 인덱스 값이 0인지의 여부)가 판정된다. 카운트 의존형 조건부 분기 인스트럭션의 분기 옵션이 충족되지 않는 경우, 처리는 블록(236)으로 진행하며, 인스트럭션 루프의 다른 반복이 실행된다. 이어서 처리는 이미 기술된 바와 같이 페이지 접속부 B를 통해 블록(202)으로 복귀한다. 그러나, 블록(234)으로 진행하여 해당 카운트 의존형 조건부 분기 인스트럭션을 포함하는 인스트럭션 루프의 실행이 종료한다. 카운트 의존형 조건부 분기 인스트럭션에 의해 종료되는 인스트럭션 루프를 사변적으로 실행하는 프로세서 및 방법이 기술되었다. 본 발명의 프로세서 및 방법은 미결정형 카운트 의존형 조건부 분기 인스트럭션에 응답하여 정지하는 종래의 프로세서에 비해 개선된 성능을 제공한다. 더욱이, 본 발명의 프로세서 및 방법은 인스트럭션 루프의 오류예측된 반복의 실행으로부터 복구하는 효율적인 메카니즘을 제공한다. d본 발명의 프로세서 및 방법은 카운트 의존형 조건부 분기 인스트럭션에 의해 종료된 인스트럭션 루프의 실행을 참조하여 기술되었으나, 당 분야에서 통상의 지식을 가진 자라면 개시된 예시적인 실시예를 참조하여 기술된 개념이 루프 반복을 제어하는 특별한 인스트럭션을 포함하지 않는 아키텍처에 확장될 수도 있음을 이해할 것이다.
예시적인 실시예가 특히 도시되고 기술되었으나, 당 분야에서 통상의 지식을 가진 자에 의해 예시적인 실시예가 정신 및 범위로부터 벗어나지 않고 형태 및 세부사항에 있어 다양한 변경이 이루어질 수 있음은 물론이다.
상기한 바와 같은 본 발명에 따르면, 인스트럭션 루프를 사변적으로 실행하는 프로세서 및 방법이 개시된다. 본 방법에 따르면, 프로세서는 인스트럭션 루프를 개시하고 인스트럭션 루프의 각각의 실행된 반복을 카운트한다. 이후, 인스트럭션 루프가 실행되어야 하는 반복의 실제 횟수가 판정된다. 그 판정에 응답하여, 인스트럭션 루프가 실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차가 판정된다.
차가 0보다 크다는 판정에 응답하여, 인스트럭션 루프에서는 그 차에 해당하는 부가적인 횟수만큼 바목이 실행된다. 일 실시예에 따르면, 인스트럭션 루프의 오류예측된 반복내의 실행되지 않은 인출 인스트럭션은 그 차가 0보다 작다는 판정에 응답하여 제거된다. 또한, 실행된 인스트럭션 루프의 오류예측된 반복의 데이터 결과는 폐기된다. 다른 시시예에 따르면, 카운트 레지스터를 0을로 세트하고 실행된 인스트럭션 루프의 각 반복에 대해 카운트 레지스터를 1회 감분시키으로써 인스트럭션 루프의 실행된 반복이 카운트된다. 실행되어야 하는 반복의 실제 횟수 및 실행된 반복의 횟수간의 차는 반복의 실제 횟수와 카운트 레지스터의 값을 가산함으로써 판정된다.

Claims (25)

  1. 인스트럭션 루프(무 instruction loop)를 사변적으로 실행하는 방법에 있어서, ① 상기 인스트럭션 루프의 실행을 개시하고 상기 인스트럭션 루프의 각각의 실행된 반복(executed iteration)을 카운트(count)하는 단계와, ② 이후, 상기 인스트럭션 루프가 실행되어야 하는 실제 반복의 횟수(an actual number of iterations)를 판정하는 단계와, ③ 상기 판정에 응답하여, 상기 실제 반복의 횟수와 상기 인스트럭션 루프의 실행된 반복의 횟수(a number of executed iterations)의 차를 판정하는 단계와, ④ 상기 차가 0보다 크다는 판정에 응답하여, 상기 차에 해당하는 부가적인 횟수(an additional number of iterations)만큼 상기 인스트럭션 루프를 실행하는 단계를 포함하는 인스트럭션의 사변적 실행 방법.
  2. 제1항에 있어서, 상기 인스트럭션 루프는 조건부 분기 인스트럭션(a conditional branch instruction)을 포함하고, 상기 조건부 분기 인스트럭션은 상기 실제 반복의 횟수의 판정에 응답하여 결정되는 인스트럭션의 사변적 실행 방법.
  3. 제1항에 있어서, 상기 프로세서는 카운트 레지스터(a count register)를 포함하고, 상기 방법은 상기 인스트럭션 루프가 실행될 반복의 횟수를 예측하고 상기 카운트 레지스터내에 상기 예측한 것을 저장하는 단계를 더 포함하는 인스트럭션의 사변적 실행 방법.
  4. 제1항에 있어서, 상기 프로세서는 카운트 레지스터를 포함하고, 상기 인스트럭션 루프의 각각의 실행된 반복을 카운트하는 단계는 상기 카운트 레지스터내에 상기 실행된 반복의 횟수를 유지하는 단계를 포함하는 인스트럭션의 사변적 실행 방법.
  5. 제4항에 있어서 상기 카운트 레지스터내에 상기 실행된 반복의 횟수를 유지하는 단계는 상기 카운트 레지스터를 0으로 세트하고 상기 인스트럭션 루프가 각각의 반복에 대해 상기 카운트 레지스터를 1회 감분시키는 단계를 포함하는 인스트럭션의 사변적 실행 방법.
  6. 제5항에 있어서, 상기 차를 판정하는 단계는 상기 실제 반복의 값을 상기 카운트 레지스터내의 값에 가산한는 단계를 포함하는 인스트럭션의 사변적 실행 방법.
  7. 제1항에 있어서, 상기 인스트럭션 루프가 실행되어야 하는 실제 반복의 횟수를 판정하는 단계는 상기 실제 반복의 횟수를 제공하는 인스트럭션을 실행하는 단계를 포함하는 인스트럭션의 사변적 실행 방법.
  8. 제1항에 있어서, 상기 방법은 상기 차가 0보다 작다는 판정에 응답하여, 상기 인스트럭션 루프의 오류예측된 반복내에서 실행되지 않은 인스트럭션을 삭제하는 단계를 더 포함하는 인스트럭션의 사변적 실행 방법.
  9. 제8항에 있어서, 상기 인스트럭션 루프의 오류예측된 반복의 데이터 결과를 폐기하는 단계를 더 포함하는 인스트럭션의 사변적 실행 방법.
  10. 인스트럭션을 사변적으로 실행하는 프로세서(a processor)에 있어서, ① 인스트럭션을 실행하는 하나 이상의 실행 유닛(one or more execution units) - 실행될 인스트럭션 루프의 실제 반복의 횟수가 알려지지 않는 동안 상기 하나 이사의 실행 유닛이 상기 인스트럭션 루프의 실행을 개시함 - 과, ② 상기 인스트럭션 루프의 실행된 반복의 횟수를 카운트하는 수단과, ③ 상기 실제 반복의 횟수의 판정에 응답하여, 상기 실제 반복의 횟수와 상기 실행된 반복의 횟수간의 차를 판정하는 수단을 포함하되, 상기 실행 유닛은 상기 차가 0이상인지에 대한 판정에 응답하여 상기 차에 해당하는 부가적인 반복의 횟수만큼 상기 인스트럭션 루프를 실행한는 인스트럭션을 사변적으로 실행하는 프로세서.
  11. 제10항에 있어서, 상기 실행된 반복의 횟수를 카운트하는 수단은 카운트 레지스터를 포함하는 인스트럭션을 사변적으로 실행하는 프로세서.
  12. 제11항에 있어서, 상기 프로세서는 상기 인스트럭션 루프가 실행될 반복의 횟수를 예측하는 수단을 더 포함하고, 상기 예측하는 수단은 상기 카운트 레지스터내에 상기 예측을 저장하는 인스트럭션을 사변적으로 실행하는 프로세서.
  13. 제11항에 있어서, 상기 실행된 인스트럭션 루프의 각 반복에 대해 샹기 카운트 레지스터를 1회 감분시키는 수단을 더포함하는 인스트럭션을 사변적으로 실행하는 프로세서.
  14. 제13항에 있어서, 상기 차를 판정하는 수단은 상기 실제 반복의 횟수를 상기 카운트 레지스터내의 값에 가산하는 수단을 포함하는 인스트럭션을 사변적으로 실행하는 프로세서.
  15. 제10항에 있어서, 상기 실제 반복의 횟수에 대한 판정은 상기 하나 이상의 실행 유닛에 의한 인스트럭션의 실행에 응답하여 행해지는 인스트럭션을 사변적으로 실행하는 프로세서.
  16. 제10항에 있어서, 상기 프로세서는, 실행을 위해 인스트럭션을 인출하기 인출기(a fetcher)와, 인출된 인스트럭션을 실행 전에 임시적으로 저장하는 큐(a queue)를 더 포함하며, 상기 인스트럭션 루프의 오류예측된 반복(mispredicted iterations)내의 인스트럭션은 상기 차가 0보다 작다는 판정에 응답하여 상기 큐로부터 삭제되는 인스트럭션을 사변적으로 실행하는 프로세서.
  17. 제16항에 있어서, 인스트럭션의 데이터 결과를 임시적으로 저장하는 하나 이사의 레지스터(one or more registers)를 더 포함하며, 상기 인스트럭션 루프의 오류예측된 반복내의 인스트럭션의 데이터 결과는 상기 하나 이상의 레지스터로부터 폐기되는 인스트럭션을 사변적으로 실행하는 프로세서.
  18. 데이터 처리 시스템(data processing system)에 있어서, ① 인스트럭션을 저장하는 메모리(amemory)와, ② 실행을 위해 상기 메모리로부터 인스트럭션 루프의 인스트럭션을 인출하는 인출기와,③ 인스트럭션을 실행하는 하나 이상의 실행 유닛 - 실행될 상기 인스트럭션 루프의 실제 반복의 횟수가 알려지지 않는 동안 상기 하나 이상의 실행 유닛이 인스트럭션 루프의 실행을 개시함 - 과, ④ 상기 인스트럭션 루프의 실행된 반복의 횟수를 카운트하는 수단과, ⑤ 상기 실제 반복의 횟수의 판정에 응답하여, 상기 실제 반복의 횟수와 상기 실행된 반복의 횟수간의 차를 판정하는 수단을 포함하되, 상기 실행 유닛은 상기 차가 0 이상이라는 판정에 응답하여 상기 차에 해당하는 부가적인 반복의 횟수만큼 상기 인스트럭션 루프를 실행하는 데이터 처리 시스템.
  19. 제18항에 있어서, 상기 실행된 반복이 횟수를 카운트하는 수단은 카운트 레지스터를 포함하는 데이터 처리 시스템.
  20. 제19항에 있어서, 상기 프로세서는 상기 인스트럭션 루프가 실행될 반복의 횟수를 예측하는 수단을 더 포함하며, 상기 예측하는 수단은 상기 카운트 에지스터내에 상기 예측을 저장하는 데이터 처리 시스템.
  21. 제19항에 있어서, 상기 실행된 인스트럭션 루프의 각 반복에 대해 상기 카운트 레지스터를 1회 감분시키는 수단을 더포 함하는 데이터 처리 시스템.
  22. 제21항에 있어서, 상기 차를 판정하는 수단은 상기 실제 반복의 횟수를 상기 카운트 레지스터내의 값에 가산하는 수단을 포함하는 데이터 처리 시스템.
  23. 제18항에 있어서, 상기 실제 반복의 횟수에 대한 판정은 상기 하나 이상의 실행 유닛에 의한 인스트럭션의 실행에 응답하여 행해지는 데이터 처리 시스템.
  24. 제18항에 있어서, 상기 데이터 처리 시스템은, 인출된 인스트럭션을 실행 전에 임시적으로 저장하는 큐를 더 포함하며, 상기 인스트럭션 루프의 오류예측된 반복내의 인스트럭션은 상기 큐로부터 삭제되는 데이터 처리 시스템.
  25. 제24항에 있어서, 인스트럭션의 데이터 결과를 임시적으로 저장하는 하나 이사의 레지스터를 더 포함하며, 상기 인스트럭션 루프의 오류예측된 반복내의 인스트럭션의 데이터 결과는 상기 하나 이상의 레지스터로부터 폐기되는 데이타 처리 시스템.
    ※ 참고사항 : 최초출원 내용에 의하여 공개하는 것임.
KR1019970016696A 1996-07-22 1997-04-30 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법 KR100244842B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/685,060 US5740419A (en) 1996-07-22 1996-07-22 Processor and method for speculatively executing an instruction loop
US08/685,060 1996-07-22
US8/685,060 1996-07-22

Publications (2)

Publication Number Publication Date
KR980010787A true KR980010787A (ko) 1998-04-30
KR100244842B1 KR100244842B1 (ko) 2000-02-15

Family

ID=24750624

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970016696A KR100244842B1 (ko) 1996-07-22 1997-04-30 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법

Country Status (5)

Country Link
US (1) US5740419A (ko)
EP (1) EP0821305A3 (ko)
JP (1) JP3093684B2 (ko)
KR (1) KR100244842B1 (ko)
TW (1) TW386214B (ko)

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6003128A (en) * 1997-05-01 1999-12-14 Advanced Micro Devices, Inc. Number of pipeline stages and loop length related counter differential based end-loop prediction
US5898865A (en) * 1997-06-12 1999-04-27 Advanced Micro Devices, Inc. Apparatus and method for predicting an end of loop for string instructions
US5838988A (en) * 1997-06-25 1998-11-17 Sun Microsystems, Inc. Computer product for precise architectural update in an out-of-order processor
US5958047A (en) * 1997-06-25 1999-09-28 Sun Microsystems, Inc. Method for precise architectural update in an out-of-order processor
US6085305A (en) 1997-06-25 2000-07-04 Sun Microsystems, Inc. Apparatus for precise architectural update in an out-of-order processor
US6032252A (en) * 1997-10-28 2000-02-29 Advanced Micro Devices, Inc. Apparatus and method for efficient loop control in a superscalar microprocessor
US6691220B1 (en) * 2000-06-06 2004-02-10 International Business Machines Corporation Multiprocessor speculation mechanism via a barrier speculation flag
US6748518B1 (en) 2000-06-06 2004-06-08 International Business Machines Corporation Multi-level multiprocessor speculation mechanism
US6725340B1 (en) 2000-06-06 2004-04-20 International Business Machines Corporation Mechanism for folding storage barrier operations in a multiprocessor system
US6728873B1 (en) 2000-06-06 2004-04-27 International Business Machines Corporation System and method for providing multiprocessor speculation within a speculative branch path
US6963967B1 (en) 2000-06-06 2005-11-08 International Business Machines Corporation System and method for enabling weak consistent storage advantage to a firmly consistent storage architecture
US6675372B1 (en) * 2000-10-31 2004-01-06 Sun Microsystems, Inc. Counting speculative and non-speculative events
US6985986B2 (en) * 2001-06-01 2006-01-10 Microchip Technology Incorporated Variable cycle interrupt disabling
US20030005268A1 (en) * 2001-06-01 2003-01-02 Catherwood Michael I. Find first bit value instruction
US7020788B2 (en) * 2001-06-01 2006-03-28 Microchip Technology Incorporated Reduced power option
US20030005269A1 (en) * 2001-06-01 2003-01-02 Conner Joshua M. Multi-precision barrel shifting
US7007172B2 (en) * 2001-06-01 2006-02-28 Microchip Technology Incorporated Modified Harvard architecture processor having data memory space mapped to program memory space with erroneous execution protection
US20030023836A1 (en) * 2001-06-01 2003-01-30 Michael Catherwood Shadow register array control instructions
US6937084B2 (en) * 2001-06-01 2005-08-30 Microchip Technology Incorporated Processor with dual-deadtime pulse width modulation generator
US6934728B2 (en) * 2001-06-01 2005-08-23 Microchip Technology Incorporated Euclidean distance instructions
US6728856B2 (en) 2001-06-01 2004-04-27 Microchip Technology Incorporated Modified Harvard architecture processor having program memory space mapped to data memory space
US7467178B2 (en) * 2001-06-01 2008-12-16 Microchip Technology Incorporated Dual mode arithmetic saturation processing
US6976158B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Repeat instruction with interrupt
US6604169B2 (en) 2001-06-01 2003-08-05 Microchip Technology Incorporated Modulo addressing based on absolute offset
US20030028696A1 (en) * 2001-06-01 2003-02-06 Michael Catherwood Low overhead interrupt
US6552625B2 (en) 2001-06-01 2003-04-22 Microchip Technology Inc. Processor with pulse width modulation generator with fault input prioritization
US7003543B2 (en) * 2001-06-01 2006-02-21 Microchip Technology Incorporated Sticky z bit
US6601160B2 (en) 2001-06-01 2003-07-29 Microchip Technology Incorporated Dynamically reconfigurable data space
US6975679B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Configuration fuses for setting PWM options
US20020184566A1 (en) * 2001-06-01 2002-12-05 Michael Catherwood Register pointer trap
US6952711B2 (en) * 2001-06-01 2005-10-04 Microchip Technology Incorporated Maximally negative signed fractional number multiplication
US6552567B1 (en) 2001-09-28 2003-04-22 Microchip Technology Incorporated Functional pathway configuration at a system/IC interface
US20040021483A1 (en) * 2001-09-28 2004-02-05 Brian Boles Functional pathway configuration at a system/IC interface
US6996802B2 (en) 2002-03-18 2006-02-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using initialization order and calling order constraints
US7181737B2 (en) 2002-03-18 2007-02-20 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using static procedure return addresses
US6912633B2 (en) 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
US7010783B2 (en) 2002-03-18 2006-03-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation
US20040123075A1 (en) * 2002-12-19 2004-06-24 Yoav Almog Extended loop prediction techniques
US7281237B2 (en) 2003-01-16 2007-10-09 Sun Microsystems, Inc. Run-time verification of annotated software code
US7010676B2 (en) * 2003-05-12 2006-03-07 International Business Machines Corporation Last iteration loop branch prediction upon counter threshold and resolution upon counter one
US8220058B2 (en) 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7353499B2 (en) 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US7415618B2 (en) 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US7424620B2 (en) 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7363620B2 (en) 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
KR100867269B1 (ko) * 2007-02-22 2008-11-06 삼성전자주식회사 프로세서의 추론적 로드 명령 실행 방법 및 상기 방법을채용한 프로세서
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
US10990404B2 (en) * 2018-08-10 2021-04-27 Arm Limited Apparatus and method for performing branch prediction using loop minimum iteration prediction
US11693666B2 (en) * 2021-10-20 2023-07-04 Arm Limited Responding to branch misprediction for predicated-loop-terminating branch instruction
US11972264B2 (en) * 2022-06-13 2024-04-30 Arm Limited Micro-operation supply rate variation
US11803390B1 (en) * 2022-07-01 2023-10-31 Arm Limited Prediction class determination

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4825360A (en) * 1986-07-30 1989-04-25 Symbolics, Inc. System and method for parallel processing with mostly functional languages
US5101484A (en) * 1989-02-14 1992-03-31 Intel Corporation Method and apparatus for implementing an iterative program loop by comparing the loop decrement with the loop value
US5056604A (en) * 1990-05-02 1991-10-15 Xerox Corporation Sheet feeder devices
JPH04102926A (ja) * 1990-08-22 1992-04-03 Nec Corp 繰り返しループの展開最適化方式
US5303355A (en) * 1991-03-27 1994-04-12 Motorola, Inc. Pipelined data processor which conditionally executes a predetermined looping instruction in hardware
US5421020A (en) * 1993-01-08 1995-05-30 International Business Machines Corporation Counter register implementation for speculative execution of branch on count instructions
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
DE69425311T2 (de) * 1993-10-18 2001-03-15 Nat Semiconductor Corp Mikroprozessor mit spekulativer Befehlsausführung
US5404473A (en) * 1994-03-01 1995-04-04 Intel Corporation Apparatus and method for handling string operations in a pipelined processor
US5608886A (en) * 1994-08-31 1997-03-04 Exponential Technology, Inc. Block-based branch prediction using a target finder array storing target sub-addresses
US5664135A (en) * 1994-09-28 1997-09-02 Hewlett-Packard Company Apparatus and method for reducing delays due to branches

Also Published As

Publication number Publication date
EP0821305A2 (en) 1998-01-28
JPH1069385A (ja) 1998-03-10
KR100244842B1 (ko) 2000-02-15
US5740419A (en) 1998-04-14
EP0821305A3 (en) 1999-05-19
JP3093684B2 (ja) 2000-10-03
TW386214B (en) 2000-04-01

Similar Documents

Publication Publication Date Title
KR100244842B1 (ko) 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법
KR100270003B1 (ko) 향상된 분기 예측 기법을 사용하는 프로세서 및그 실행 방법
US5634103A (en) Method and system for minimizing branch misprediction penalties within a processor
US7594096B2 (en) Load lookahead prefetch for microprocessors
US5611063A (en) Method for executing speculative load instructions in high-performance processors
US5404473A (en) Apparatus and method for handling string operations in a pipelined processor
US6279105B1 (en) Pipelined two-cycle branch target address cache
JP5255367B2 (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
US5901307A (en) Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources
KR100404257B1 (ko) 파이프라인 프로세서 아키텍처, 모든 인라인 및 분기인스트럭션을 정확한 구조적인 시퀀스로 프로세서파이프라인에 제공하는 시스템, 및 분기 처리 유닛
US6192466B1 (en) Pipeline control for high-frequency pipelined designs
US20080250230A1 (en) Using a Modified Value GPR to Enhance Lookahead Prefetch
US5898864A (en) Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors
US6338133B1 (en) Measured, allocation of speculative branch instructions to processor execution units
US6971000B1 (en) Use of software hint for branch prediction in the absence of hint bit in the branch instruction
US5875325A (en) Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history
US8082423B2 (en) Generating a flush vector from a first execution unit directly to every other execution unit of a plurality of execution units in order to block all register updates
US5764970A (en) Method and apparatus for supporting speculative branch and link/branch on count instructions
US7779234B2 (en) System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US6237085B1 (en) Processor and method for generating less than (LT), Greater than (GT), and equal to (EQ) condition code bits concurrent with a logical or complex operation
KR100307980B1 (ko) 산술 또는 논리 연산의 수행과 동시에 조건 코드 비트를 발생하는 방법 및 시스템
US5764940A (en) Processor and method for executing a branch instruction and an associated target instruction utilizing a single instruction fetch
US8285765B2 (en) System and method for implementing simplified arithmetic logic unit processing of value-based control dependence sequences
EP1058186A2 (en) Issuing dependent instructions in a data processing system based on speculative secondary cache hit

Legal Events

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