[go: up one dir, main page]

KR100225244B1 - 프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템 - Google Patents

프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템

Info

Publication number
KR100225244B1
KR100225244B1 KR1019960021713A KR19960021713A KR100225244B1 KR 100225244 B1 KR100225244 B1 KR 100225244B1 KR 1019960021713 A KR1019960021713 A KR 1019960021713A KR 19960021713 A KR19960021713 A KR 19960021713A KR 100225244 B1 KR100225244 B1 KR 100225244B1
Authority
KR
South Korea
Prior art keywords
instruction
counter
instructions
execution
processor
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
KR1019960021713A
Other languages
English (en)
Inventor
찬 킨
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Application granted granted Critical
Publication of KR100225244B1 publication Critical patent/KR100225244B1/ko
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • 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
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/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

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

인스트럭션의 추측 실행을 지원하는 다수의 실행 유닛을 갖는 프로세서내에서 자원 할당을 추적하는 방법 및 시스템이 개시된다. 프로세서는 제1카운터(first counter) 및 제2카운터(second counter)를 구비하는 자원 카운터(resource counter) 및 다수의 자원(a plurality of resources)을 구비하여, 하나 이상의 자원이 실행을 위해 실행 유닛으로 디스패치된 다수의 인스트럭션의 각각에 할당된다. 실행을 위해 실행 유닛중 한 실행 유닛으로 다수의 인스트럭션중 한 인스트럭션을 디스패치하는 것에 응답하여, 제1카운터는 인스트럭션에 할당된 자원의 각각에 대해 1회 증분(increment)되고 이 인스트럭션이 추측 실행 경로내의 제1인스트럭션인 경우, 제1카운터를 증분시키기 전에 제1카운터의 값을 갖는 제2카운터가 로딩된다. 다수의 실행 유닛중 한 실행 유닛으로 디스패치된 다수의 인스트럭션중 특정 인스트럭션의 종료에 응답하여, 제1 및 제2카운터는 특정 인스트럭션에 할당된 각 자원에 대해 1회 감분된다. 추측 실행 경로의 반증(refutation)에 응답하여, 제2카운터의 값은 제1카운터에 전달되어, 자원 카운터가 다수의 인스트럭션에 할당된 다수의 자원을 추적하도록 한다.

Description

프러세서내에서 자원 할당을 추적하는 방법 및 장치, 수퍼스칼라 프로세서 및 데이타 프로세싱 시스템
제1도는 본 발명의 방법 및 시스템을 이용하는 데이타 프로세싱 시스템의 바람직한 실시예를 도시한 도면.
제2도는 제1도에 도시된 데이타 프로세싱 시스템의 시스템 유닛의 블럭도.
제3도는 본 발명의 방법 및 시스템을 채용한 프로세서의 바람직한 실시예의 블럭도.
제4도는 제3도의 도시된 인스트럭션 시퀀싱 표(IST)의 보다 상세한 블럭도.
제5도는 제4도에 도시된 인스트럭션 시퀀싱 표의 다수의 할당된 엔트리를 표시하는 카운터의 바람직한 실시예를 도시한 도면.
제6도는 다수의 할당된 부동 소수점 재명명 버퍼를 표시하는 카운터의 바람직한 실시예를 도시한 도면.
제7도는 다수의 할당된 범용 재명명 버퍼를 표시하는 카운터의 바람직한 실시예를 도시한 도면.
제8도는 디스패치 사이클 동안 인스트럭션 시퀀싱 표의 동작 흐름도를 도시한 도면.
제9도는 종료 사이클 동안 인스트럭션 시퀀싱 표의 동작 흐름도를 도시한 도면.
제10도는 완료 사이클 동안 인스트럭션 시퀀싱 표의 동작 흐름도를 도시한 도면.
* 도면의 주요부분에 대한 부호의 설명
30 : CPU 52 : 인스트럭션 인출 어드레스 레지스터
54 : 인스트럭션 캐쉬 56 : 인스트럭션 버퍼
56 : 디스패치 유닛 60, 62 : 부동 소수점 유닛
64 : 로드 저장 유닛 66 : 고정 소수점 유닛
68 : 논리 조건 레지스터 유닛 80 : 인스트럭션 시퀀싱 표
82 : 디스패치 포인터 84 : 백업 포인터
86 : 완료 포인터 88 : 완료 유닛
90 : GPR 재명명 버퍼 92 : FPR 재명명 버퍼
94 : 범용 레지스터 화일 96 : 부동 소수점 레지스터 화일
98 : 카운터 100 : IST 제어
102 : 인터럽트 처리 유닛 104 : 프로그램 카운터
본 발명은 일반적으로 데이타 프로세싱에 대한 개선된 방법 및 시스템에 관한 것으로, 특히 인스트럭션의 추측 실행(speculative execution of instructions)을 지원하는 프로세서내에서 자원 할당(allocation of resources)을 추적하는 개선된 방법 및 시스템에 관한 것이다. 특히, 본 발명은 프로세서가 잘못예측된 브랜치(mispredicted branch)다음의 자원 할당의 상태를 복구하도록 하는 추측 실행 프로세서내에서 자원 할당을 추적하는 방법 및 시스템에 관한 것이다.
최신식 프로세서(state-of-the-art processors)의 설계자들은 이러한 프로세서의 성능을 향상시키도록 계속해서 시도중이다. 최근에, 프로세서 설계자들은 종래의 아키텍처를 이용하는 프로세서에 비해 프로세서 성능을 현저하게 향상시킨 다수의 아키텍처 개선책(a number of architectural enhancements)을 개발하였다. 예를 들면, RISC(Reduced Instruction Set Computer) 프로세서는 낮은 인스트럭션 당 사이클(cycle -per-instruction; CPI) 비율을 성취하도록 하는 축소된 인스트럭션 세트를 이용한다. 프로세서는 처리량(throughput)을 더 증가시키기 위해 다수의 인스트럭션이 다수의 실행 유닛(a number of execution units)에 의해 동시에 송출되고 실행되도록 하는 수퍼스칼라 아키텍처(superscalar architecture)를 또한 채용한다. 또한, 수퍼스칼라 아키텍처내의 실행 유닛은 각 실행 유닛이 매 실행 단계에서 하나 이상의 인스트럭션(one or more instructions) 을 갖는 다수의 인스트럭션을 동시에 프로세스하는 파이프라인(pipelined)방식으로 실행하도록 설계될 수 있다. 마지막으로, 최신식 프로세서는 순차적으로 프로그램된 순서대신에 실행 유닛의 이용도(availability)에 의해 결정된 순서로 인스트럭션을 실행하도록 설치된다. 이러한 소위 순서와 상관없는(out of order) 실행은 각 사이클 동안 프로세서가 이용가능한 실행 유닛 자원의 이용을 최대화하도록 한다.
순서와 상관없는 프로세싱을 지원하는 전형적인 파이프라인 수퍼스칼라 프로세서에서, 하나 이상의 인스트럭션은 매 사이클마다 다수의 실행 유닛으로 디스패치 (dispatch)된다. 인스트럭션은 실행 유닛이 인스트럭션간의 데이타 의존성(data dependency)을 고수해야 한다는 전제가 허락하는 범위내에서 실행 유닛 자원이 이용가능하게 되는대로 적절하게 실행된다. 즉, 첫번째 인스트럭션의 실행이 두번째 인스트럭션의 실행으로 얻어지는 데이타에 의존하는 경우, 첫번째 인스트럭션은 두번째 인스트럭션 이전에 실행되어야 한다. 실행 유닛이 인스트럭션의 프로세싱을 완료한 후, 인스트럭션은 수퍼스칼라 프로세서에 있는 다수의 완료 버퍼(completion buffer)중 한 완료 버퍼로 전송된다. 완료(재명명(rename)) 버퍼는 인스트럭션에 연관된 데이타를 프로세서내에서 임시 레지스터(temporary register)로부터 아키텍트(architected) 레지스터로 전달함으로써 인스트럭션이 완료되기까지인 스트럭션을 유지하는 임시 버퍼 ( temporary buffer)이다. 데이타 의존성이 준수(observe)되는 범위내에서 임의의 순서로 인스트럭션이 실행될 수 있지만, 대부분의 프로세서에서는 인스트럭션이 프로그램 순서로 완료되어야 한다(즉, 데이타가 아키텍트 레지스터로 이양(commit)되어야 한다). 순서에 따른 (in-order)완료를 요구하는 한가지 이유는 프로세서가 정확한 인터럽트 및 예외를 지원할 수 있도록 하기 위해서이다. 예를 들면, 0으로 나눔(divide-by-zero) 산술 에러와 같은 예외가 발생하는 경우, 예외 처리기 소프트웨어 루틴 (exception handler software routine)은 인터럽트 또는 예외를 관리하기 위해 호출(invoke)될 것이다. 그러나 , 예외 처리기가 호출되기 전에, 예외를 생성한 인스트럭션에 선행하는 인스트럭션들은, 이들이 프로그램 순서로 실행되었을 경우 존재할 환경을 에뮬레이트(emulate)하는 환경에서 예외 처리기가 실행될 수 있도록 프로그램 순서로 완료되어야 한다. 순서에 따른 완료를 요구하는 다른 이유는 브랜치가 잘못추측된 경우 이전 문맥(context)으로 적절히 복구하도록 하기 위해서이다. 당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, 수퍼칼라 프로세서는 일반적으로 브랜치 인스트럭션의 결과를 예측하는 브랜치 실행 유닛을 포함한다. 브랜치 인스트럭션의 결과가 추측되고 브랜치 인스트럭션 재진입 지점(reentry point) 다음의 인스트럭션이 추측 실행되므로, 프로세서는 나중에 브랜치가 잘못추측된 것으로 판정되는 경우 이전 프로세서 문맥을 복구하는 메타니즘을 가져야 한다. 따라서, 추측 실행된 인스트럭션은 추측으로 실행된 인스트럭션에 선행하는 브랜치 인스트럭션이 프로그램 순서로 완료될 때까지 완료될 수 없다.
순서와 상관없이 실행된 인스트럭션을 프로그램 순서로 완료하기 위해, 프로세서는 순서와 상관없는 실행 동안 인스트럭션의 프로그램 순서를 추적하는 장치가 설치되어야 한다. 순서와 상관없는 실행을 지원하는 종래의 수퍼스칼라 프로세서에서, 인스트럭션의 프로그램 순서는 각각의 실행 유닛에 의해 추적된다. 그러나, 실행 유닛의 수 및 순서와 상관없이 실행될 수 있는 인스트럭션의 수가 증가함에 따라, 인스트럭션의 프로그램 순서의 추적은 실행 유닛의 성능에 부담을 준다. 따라서, 인스트럭션이 순서에 따라 디스패치되고, 순서에 상관없이 실행되며, 순서에 따라 완료되도록 인에이블하고, 실행 유닛이 인스트럭션의 프로그램 순서를 추적할 필요가 없도록 수퍼스칼라 프로세서내에서 인스트럭션 흐름을 관리하는 개선된 방법 및 시스템을 제공하는 것이 바람직하다.
인스트럭션의 추측 실행을 지원하는 프로세서내에서 성능 문제점을 야기하는 두번째 원인은 잘못예측된 브랜치 이후에 프로세서 자원의 상태를 복구하는 것이다. 전형적으로, 인스트럭션의 추측 실행을 지원하는 프로세서는 이전 브랜치 결과에 기초하여 프로세서가 브랜치 인스트럭션의 결과를 예측하도록 하는 브랜치 히스토리 표(branch history table: BHT)를 포함한다. 따라서, 프로세서는 BHT 내의 데이타를 이용하여 브랜치 인스트럭션 재진입 지점 다음의 하나 이상의 순차적 추측 실행 유닛의 실행을 개시할 것이다. 추측 실행을 지원하는 종래의 프로세서에서 일단 브랜치가 잘못추측된 것으로 판정되면, 프로세서는 잘못추측된 브랜치(misguessed branch)에 선행하는 모든 순차적 인스트럭션이 완료될 때까지 실행 파이프라인을 정지(stall)시킬 것이다. 일단 모든 유효 데이타가 재명명 버퍼로부터 아키텍트 레지스터로 이양되면, 모든 재명명 버퍼가 분출(flush)되고 리세트된다. 이후, 프로세서는 대안적인 실행 경로 다음에 순차적 인스트럭션을 개시함으로써 재명명 버퍼의 실행 및 할당을 계속한다. 이러한 복구 메카니즘은 잘못예측된 브랜치 다음의 모든 프로세서 자원의 이용가능성을 보장하지만, 종래의 복구 메카니즘은 프로세서 성능을 저하시키는데 그 이유는 프로세서가 잘못추측된 브랜치에 선행하는 모든 인스트럭션이 완료될 때까지 부가적인 인스트럭션을 디스패치하고 재명명 버퍼 자원을 할당하는 것을 지연시켜야 하기 때문이다.
따라서, 일단 추측 실행 경로가 잘못예측된 것으로 판정되면 프로세서가 프로세서 자원의 정확한 상태를 복구하도록 하는 프로세서 내에서 개선된 방법 및 장치를 제공하는 것이 바람직할 것이다.
따라서 본 발명의 목적은 데이타 프로세싱을 위한 개선된 방법 및 시스템을 제공하는 것이다.
본 발명의 다른 목적은 인스트럭션의 추측 실행을 지원하는 프로세서 내에서 자원 할당을 추적하는 개선된 방법 및 시스템을 제공하는 것이다.
본 발명의 또 다른 목적은 프로세서가 잘못예측된 브랜치 이후의 자원 할당의 상태를 복구하도록 하는 추측 실행 프로세서(speculative executing processor)내에서 자원 할당을 추적하는 개선된 방법 및 시스템을 제공하는 것이다.
전술한 목적들은 이하 기술되는 바와 같이 성취된다. 인스트럭션의 추측 실행을 지원하는 다수의 실행 유닛을 갖는 프로세서내에서 자원 할당을 추적하는 방법 및 시스템이 개시된다. 프로세서는 제1카운터(first counter) 및 제2카운터(second counter) 를 구비하는 자원 카운터(resource counter) 및 다수의 자원(a plurality of resources)을 구비하며, 하나 이상의 자원이 실행을 위해 실행 유닛으로 디스패치된 다수의 인스트럭션의 각각에 할당된다. 다수의 인스트럭션중 한 인스트럭션의 실행을 위해 실행 유닛중 한 실행 유닛으로 디스패치하는 것에 응답하여, 제1카운터는 인스트럭션에 할당된 각각의 자원에 대해 1회 증분(increment)되고 이 인스트럭션이 추측 실행 경로내의 제1인스트럭션인 경우, 제1카운터를 증분시키기 이전의 제1카운터의 값을 갖는 제2카운터가 로딩된다. 다수의 실행 유닛중 한 실행 유닛으로 디스패치된 다수의 인스트럭션중 특정 인스트럭션의 종료에 응답하여, 제1 및 제2카운터는 특정 인스트럭션에 할당된 각 자원 에 대해 1회 감분된다. 추측 실행 경로의 반증(refutation)에 응답하여, 제2카운터의 값은 제1카운터에 전달되고, 자원 카운터는 다수의 인스트럭션에 할당된 다수의 자원을 추적한다.
전술한 내용 및 본 발명의 부가적인 목적, 특성, 및 장점은 다음의 상세한 설명으로 명확해질 것이다.
본 발명의 특징인 신규한 특성은 첨부되는 청구 범위에 개시된다. 그러나, 본 발명 자체 및 본 발명의 바람직한 사용 방식, 다른 목적 및 장점은 첨부되는 도면과 함께 다음의 바람직한 실시예의 상세한 설명을 참조하여 가장 잘 이해될 것이다.
제1도를 참조하면, 본 발명의 방법 및 시스템을 채용하는 데이타 프로세싱 시스템의 블럭도가 예시되어 있다. 예시된 바와 같이, 데이타 프로세싱 시스템(10)은 시스템 유닛(12)을 포함하여, 퍼스널 컴퓨터(16), 디스플레이(18), 키보드(20), 및 마우스(22)를 구비하는 하나 이상의 국부적 노드(one or more local nodes)(14)를 포함한다. 당 분야에서 통상의 지식을 가진자에게 잘 알려진 바와 같이, 사용자는 키보드(20), 마우스(22), 또는 다른 적절한 입력 장치를 이용하여 퍼스널 컴퓨터(16)에 데이타를 입력한다. 사용자는 퍼스널 컴퓨터(16)를 이용하여 데이타를 국부적으로 프로세스하거나, 또는 잘 알려진 네트워킹 기법을 이용하여 퍼스널 컴퓨터(16)로부터 시스템 유닛(12) 또는 다른 노드((14)로 데이타를 전송할 수 있다. 사용자는 실행을 위해 태스크(task)를 시스템 유닛(12)에 전송하는 것이 유리한데 그 이유는 시스템 유닛(12)은 노드(14)에 비해 비교적 짧은 시간 주기에 태스크(task)를 실행할 수 있기 때문이다. 시스템 유닛(12) 및 퍼스널 컴퓨터(16)는 디스플레이 장치(18)를 통해 사용자에게 데이타를 출력한다.
제2도를 참조하면, 본 발명의 바람직한 실시예에서 IBM RISC 시스템/6000과 같은 대칭형 멀티프로세서 컴퓨터(symmetric multiprocessor computer)를 포함하는 시스템 유닛(12)의 블럭도가 도시되어 있다. 시스템 유닛(12)은 각각 온-보드(on-board) 레벨 1(L1)캐쉬(32)를 포함하는 하나 이상의 CPU(30)를 포함한다. 각 CPU(30)는 레벨2(L2) 캐쉬(34)와도 또한 연관된다. 당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, L1 캐쉬(32) 및 L2 캐쉬(34) 각각은 데이타 및 인스트럭션중 자주 액세스되는 세그먼트를 저장하는 작은 용량의 고속 메모리를 포함한다. CPU(30)가 요구하는 데이타가 CPU(30)에 연관된 L1 캐쉬(32) 또는 L2 캐쉬(34)내에 상주하지 않는 경우, 요구된 데이타는 시스템 버스(38)를 통해 메인 메모리(34)로부터 검색된다.
시스템 유닛(12)은 SCSI 제어기(49) 및 버스 인터페이스(46)를 또한 포함한다. SCSI 제어기(40)는 주변 버스(peripheral bus)(44)를 통해 사용자가 부가적인 SCSI 장치(42)를 시스템 유닛(12)에 접속하도록 한다. 버스 인터페이스(46)는 다수의 국부적 노드(44)가 시스템 유닛(12)내에서 이용가능한 시스템 자원을 액세스하도록 하는 설비를 제공한다. 당 분야에서 통상의 지식을 가진자에게 알려진 바와 같이, 시스템 유닛(12)은 본 발명의 이해에 필수적이지 않으며 따라서 단순히 하기 위해 생략된 시스템 버스(46)에 접속된 부가적인 하드웨어를 포함한다.
제3도를 참조하면, 본 발명의 방법 및 시스템에 따른 CPU(30)의 바람직한 실시예가 도시되어 있다. 제3도에 도시된 바람직한 실시예에서, CPU(30)는 사이클마다 다수의 인스트럭션을 다수의 실행 파이프라인으로 송출하는 수퍼스칼라 프로세서를 구비하여, 다수의 인스트럭션이 동시에 실행되도록 한다. CPU(30)는 고정 소수점 유닛(60 및 62), 로드-저장 유닛(64), 부동 소수점 유닛(66), 및 논리 조건 레지스터 유닛(88)을 포함하는 5개의 실행 유닛(60-88)을 갖는다.
본 발명에 따르면, CPU(30)는 실행 유닛(60-68)에 의한 인스트럭션의 실행을 추적하고 프로그램 순서로 인스트럭션을 완료하도록 하는 인스트럭션 시퀀싱 표(instruction sequencing table)(IST)(80)를 또한 포함한다. 제4도를 참조하면, IST(80)의 바람직한 실시예의 블럭도가 도시되어 있다. 도시된 바와 같이, IST(80)는 종료 비트(112), 예의 코드 필드(114), 범용 레지스터(GPR) 필드(116), 부동점 (FPR) 레지스터 필드(118), 및 브랜치 비트(120)를 각각 구비하는 다수의 엔트리 (110)를 포함한다. 엔트리(110)는 계류(outstanding) 인스트럭션, 즉 디스패치되었으나 완료되지 않은 인스트럭션에 각각 연관되는 16개의 인스트럭션 ID 중 한 ID에 의해 어드레스된다.
제8도를 참조하면, 디스패치 사이클 동안 IST(80)의 동작 흐름도가 예시되어 있다. 블럭(200)에서 프로세스가 개시되면, 인스트럭션 인출 어드레스 레지스터 (IFAR)(52)는 프로그램 카운터(104)로부터 수신된 인스트럭션에 기초하여 인스트럭션 캐쉬(54)로부터 인출될 다음 인스트럭션의 어드레스를 계산한다. IFAR (52)에 의해 생성된 어드레스에 의해 지정된 인스트럭션 그룹은 인스트럭션 캐쉬(54)로부터 인스트럭션 버퍼(56) 및 디스패치 유닛(58)에 병렬로 로딩된다. 그다음에 프로세스는 블럭(202)으로 진행하여 IST(80)내에 이용 가능한 수의 엔트리(110)을 결정한다. 본 발명의 바람직한 실시예에서, IST(80)내에서 이용가능한 엔트리(110)의 다수는 할당된 IST 엔트리 (110)의 수를 계수하는 자원 카운터(98)내의 IST 엔트리 카운터 (130)(제5도에 예시되어 있음)로부터 용이하게 결정된다. 제4도에 도시된 바람직한 실시예에서, 충분한 엔트리(110)가 IST(80)내에서 이용가능한 경우 각 사이클 동안 3개의 인스트럭션 한도까지 디스패치될 수 있다.
다음에 블럭(204)에서, 인스트럭션 버퍼(56)는 IST 엔트리(110)가 이용가능한 인스트럭션 세트를 프로그램 순서로 판독한다. 완료 유닛(88) 및 자원 카운터(98)로부터 수신된 자원 이용도 정보를 이용하여, 디스패치 유닛(58)은 실행유닛(60-68)중 선택된 한 실행 유닛이 재명명 버퍼(90 및 92)와 같은 자원을 이용할 수 있는 인스트럭션의 실행을 개시하도록 한다. 인스트럭션 버퍼(56)로부터 디스패치된 각 인스트럭션은 디스패치 포인터(82)에 의해 지정된 인스트럭션 ID 중 한 ID에 할당된다. 인스트럭션은 프로그램 순서로 디스패치되므로, IST(80)내의 엔트리는 프로그램 순서로 할당된다. 따라서, 제4도에 도시된 IST(80)의 상태에 대해, 디스패치 사이클 동안 단일 인스트럭션 만이 디스패치되는 경우, 그 인스트럭션에는 인스트럭션 ID 1101에 연관된 엔트리(110)가 할당되고 디스패치 포인터(82)에 의해 디스패치 인스트럭션 ID로써 지정될 수 있다.
그리고 나서 프로세스는 블럭(206)으로 진행하여, 디스패치된 각 인스트럭션에 대해 완료 정보를 IST(80)에 기록한다. 디스패치 버퍼(56)로부터 송출된 각 인스트럭션은 인스트럭션 디코드 유닛(IDU)(70)에 의해 프로세스된다. IDU(70)는 각 인스트럭션을 디코드하여 해당 인스트럭션을 완료하는데 필요한 레지스터 자원을 결정한다. 따라서, 각 인스트럭션의 유형을 결정함으로써, IDU(70)는 인스트럭션에 연관된 데이타를 저장하는데 필요한 요구된 범용 레지스터(GPRs) 및 부동 소수점 레지스터 (FPRs)의 수를 결정할 수 있다. 일단 IDU(70)가 인스트럭션을 실행하는데 필요한 레지스터 자원을 결정하면, IDU(70)는 IST(80)내의 적절한 엔트리(110)에 정보를 기록한다. 다음에 프로세스는 블럭(208)으로 진행하여, 디스패치된 인스트럭션 중 추측 인스트럭션이 존재하는지의 여부와 어느 인스트럭션이 추측적인지를 판정한다. 디스패치된 인스트럭션이 추측 실행 경로내의 첫번째 인스트럭션인 경우, 프로세스는 블럭(210)으로 진행하여, 백업 포인터(84)로서 추측 실행에 할당된 엔트리를 지정하는 디스패치 포인터(82)(즉, 인스트럭션 ID)를 저장한다. 각 추측 실행 경로내의 첫번째 인스트럭션의 인스트럭션 ID를 저장하여 나중에 브랜치가 잘못추측된 것으로 판정되는 경우 CPU(30)가 정확한 실행 문맥을 복구하도록 한다.
프로세서는 블럭(208) 또는 블럭(210)으로부터 블럭(212)으로 진행하여, IST 엔트리 카운터(130) 및 디스패치 포인터(82)를 갱신한다. IST 엔트리 카운터 (130)는 디스패치되고 완료된 인스트럭션을 고려한 다음 사이클 동안 할당된 엔트리(110)의 전체 수에 의해 IST 엔트리 카운터(130)를 증분시키거나 감분시키는 IST 제어부(100)에 의해 갱신된다. 디스패치 포인터(82)는, 이 사이클 동안 디스패치된 인스트럭션의 수만큼 디스패치 포인터(82)가 지정하는 인스트럭션 ID를 증분시킴으로써 갱신된다. 쉬프팅 큐(shifting queue) 대신 회전 포인터(rotating pointer)를 이용하면 IST(80)의 성능을 향상시킬 수 있는데 그 이유는 모든 엔트리(110)가 갱신되지 않고 디스패치 포인터(82)만이 대신에 사이클마다 갱신되기 때문이다. 그후, 프로세스는, 블럭(214)으로 진행하여 프로세스가 종료한다.
제9도를 참조하면, 종료 사이클 동안 IST(80)의 동작을 나타내는 흐름도가 예시되어 있다. 당 분야에서 잘 알려진 바와 같이, 각각의 실행 유닛(60-68)은 각 단계에서 하나 이상의 인스트럭션을 수용할 수 있도록 인출, 디코드, 실행, 및 종료와 같은 다수의 단계를 갖는 실행 파이프라인이다. 실행 유닛(60-68)이 독립적으로 동작하고 인스트럭션의 실행에 필요한 사이클의 수가 데이타 의존성, 브랜치 결정(branch resolution), 및 다른 인자들로 인해 가변적이므로, 실행 유닛(60-68)은 프로그램 순서와 상관없이 인스트럭션을 실행한다. 예시된 바와 같이, 프로세스는 블럭(230)에서 개시한 후 블럭(232)으로 진행하여, IST(80)는 실행 유닛(60-68)으로부터 이 사이클 동안 종료된 각 인스트럭션에 대해 인스트럭션 ID 및 종료 보고(finish report)를 수신한다. 예외가 발생한 경우 종료 보고는 인스트럭션의 실행에 의해 생성된 예외를 식별하는 예외 코드를 포함한다. 그 다음에 프로세스는 블럭(234)로 진행하여, IST(80)는 종료된 인스트럭션의 ID에 의해 식별된 엔트리(10)의 예외 코드 필드(114)에 블럭 (232)에서 수신된 예외 코드를 기록한다. 또한, 블럭(234)에서, 엔트리(110)내의 종료비트(112)는 인스트럭션이 실행을 종료했음을 표시하기 위해 세트된다.
본 발명의 바람직한 실시예에서는, 종료 사이클 동안 최대 6개의 종료 보고까지 IST(80)에 기록될 수 있다. 블럭(234)다음에, 프로세스는 블럭(236)에서 종료된다.
제10도를 참조하면, 완료 사이클 동안 IST(80)의 동작 흐름도가 도시되어 있다. 예시된 바와 같이, 프로세스는 블럭(240)에서 개시되고 블럭(242)으로 진행하여, 완료 유닛(86)은 IST(80)으로부터 완료 포인터(86)에 대해 표시되는 인스트럭션을 판독한다. 제4도에 도시된 바와 같이, 본 발명의 바람직한 실시예에는 주어진 프로세서 사이클내에서 잠재적으로 완료될 수 있는 인스트럭션을 지정하는 3개의 완료 포인터(86)를 유지한다. 그 다음에 프로세스는 블럭(242)로부터, 블럭(244)으로 진행하여, 완료 유닛(88)은 블럭(242)에서 판독된 인스트럭션중 어느 것이 아직 처리되지 않은 예외를 생성했는지를 판정한다.
완료 유닛(88)은 각 인스트럭션에 연관된 예외 코드 필드(114)를 검사하여 인스트럭션이 예외를 생성했는지의 여부를 판정한다. 제1인스트럭션(즉, 연관된 엔트리(110)가 완료 포인터들(86)중 한 완료 포인터에 의해 완료 인스트럭션 ID 1로서 지정되는 인스트럭션)이 예외를 생성한 경우, 프로세스는 블럭(244)으로부터 블럭 (246)을 거쳐 블럭(248)으로 진행하여, 여기에서 제1인스트럭션은 인터럽트 처리 유닛(102)로 전송된다. 당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, 인터럽트 처리 유닛(102)은 예외 코드 필드(114)내에 기록된 예외 코드에 의해 지정된 예외 유형(exception type)에 연관된 예외 처리 백터를 호출한다. 이후, 프로세스는 블럭(248)으로부터 블럭(254)으로 진행한다.
블럭(244)으로 돌아가서, IST(80)로부터 판독된 제1인스트럭션이 예외를 생성하지 않는 경우, 프로세스는 블럭(244)으로부터 블럭(246)을 거쳐 블럭(244)으로 진행하여, 여기에서는 블럭(242)에서 판독 또한 인스트럭션중 어느 것이 현재 사이클 동안 완료될 수 있는가를 판정한다. 정확한 인터럽트를 지원하기 위해, 인스트럭션의 종료시에 몇몇 제한이 가해진다. 첫번째로, 종료 비트(112)에 의해 IST(80)내에서 종료되는 바와 같이 표시되는 인스트럭션만이 종료될 수 있다. 두번째로, 아직 처리되지 않은 예외를 생성했던 인스트럭션은 현재의 완료 사이클에서 완료될 수 없다. 세번째로, 프로그램 순서로 이 인스트럭션에 선행하는 모든 인스트럭션들이 이미 완료되었거나 또는 현재의 완료 사이클 동안 완료된 경우에만 인스트럭션들은 완료될 수 있다. 마지막으로, 인스트럭션이 완료되기 위해 필요한 수의 범용 레지스터 및 부동 소수점 레지스터가 범용 레지스터 화일(94) 및 부동 소수점 레지스터 화일(96)내에서 이용할 수 있어야 한다. 블럭(249)다음에 프로세스는 블럭(250)으로 진행하여, 완료 유닛(88)은 인스트럭션에 연관된 데이타를 GPR 및 FPR 재명명 버퍼(90 및 92)로부터 GPR 및 FPR 화일(94 및 96)에 기록함으로써 전술한 조건을 충족시키는 인스트럭션을 완료한다.
이후, 프로세스는 블럭(250)으로부터 블럭(250)으로 진행하여, IST 제어부 (100)는 블럭(250)에서 완료된 인스트럭션에 연관되는 IST 엔트리(110)를 해방한다. IST 제어부(100)는 완료된 각 인스트럭션에 대해 각각의 완료 포인터(86)를 1회 증분시킴으로써 IST 엔트리(110)를 해방한다. 이후, 프로세스는 블럭(254)으로 진행하여, 프로세스가 종료한다.
제5-7도를 참조하면, 모두 자원 카운터(98)를 구성하는 IST 엔트리 카운터(130), FPR 재명명 버퍼 카운터(150), 및 GPR 재명명 버퍼 카운터(170)의 블럭도가 도시되어 있다. 먼저 제5도를 참조하면, IST 엔트리 카운터(130)는 멀티플렉서(132-137) 및 카운터(138-142)를 포함한다. 본 발명의 바람직한 실시예에 따르면, 카운터(138)는 16개의 IST 엔트리(110)중 몇개가 현재 계류 인스트럭션에 할당되었는지를 디코딩된 포맷이라 불리우는 17-비트 쉬프트 카운터를 포함한다. 카운터(138)는 디코딩된 포맷이라 불리는데 그 이유는 카운터내의 세트 비트(이진값 1)의 위치가 할당된 엔트리(110)의 수를 표시하기 때문이다. 예를 들면, IST(80)가 비어있는 경우, 최소 유효비트(가장 좌측)만이 세트되어, 0 엔트리(110)가 할당됨을 표시한다.
IST(80)가 차있는 경우, 최대 유효 비트만이 세트된다. 가산기에 의해 증분되고 감분되는 레지스터를 이용하는 대신에 디코딩된 포맷으로 카운터를 저장함으로써, 본 발명은 카운터(148)를 갱신하는데 이용되는 사이클 시간을 최소화할 뿐만 아니라, CPU(30)의 복잡성 및 사용된 칩기판 영역을 또한 최소화한다.
각 사이클 동안 IST 제어부(100)는 그 사이클 동안 디스패치되고 완료된 인스트럭션의 수로부터 할당된 엔트리(110)의 수에 있어서 총 변화를 계산한다. 본 발명의 바람직한 실시예에서, 할당된 엔트리(100)의 수에 있어서 총 변화는 3 인스트럭션이 디스패치되고 0 인스트럭션이 완료되는 사이클 동안의 +3으로부터 3 인스트럭션이 완료되고 0 인스트럭션이 디스패치되는 사이클 동안의 -3까지 변화한다. IST 제어부 (100)는 멀티플렉서(132)에 대한 적절한 갱신 입력을 선택함으로써 카운터(138)를 갱신하여 할당된 엔트리(110)의 현재 수를 반영하여, 멀티플렉서(132)는 카운터 (138)내의 세트 비트를 비트 위치에 해당하는 수만큼 쉬프트시킨다. 디스패치된 각 인스트럭션에 대해 엔트리(110)가 필요하므로, 카운터(138)는 디스패치 유닛(58)이 IST(80)내의 엔트리(110)가 수용할 수 있는 이상의 인스트럭션을 디스패치하지 못하게 하는 인터로크(interlock)를 제공한다.
IST 엔트리 카운터(130)는 카운터(136)와 유사하게 쉬프트 카운터로 이루어지는 백업 버퍼 카운터 A(140) 및 백업 버퍼 카운터 B(142)를 또한 포함한다. 백업 버퍼 카운터 A(140)는 제1추측 실행 경로내의 인스트럭션을 배제하는 다수의 할당된 IST 엔트리(110)를 표시한다. 마찬가지로, 백업 버퍼 카운터 B(142)는 제2추측 실행 경로내의 인스트럭션을 배제하는 다수의 할당된 IST 엔트리(110)를 표시한다. 당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, 2개를 초과하는 추측 실행 경로를 지원하는 본 발명의 실시예는 허용된 각각의 부가적인 추측 실행 경로에 대해 하나의 부가적인 백업 버퍼 카운터를 포함한다.
추측 실행 경로내의 제1 인스트럭션이 디스패치되는 경우, IST 제어부(100)는 먹스(mux)(133)에 대한 선택 입력이 카운터(138)의 값을 백업 버퍼 카운터 A(140)으로 로딩하도록 하는데, 이 카운터(138)의 값은 현재 사이클 동안 인스트럭션을 디스패치하기 전에 할당된 IST 엔트리(110)의 수를 표시한다. 또한 IST 제어부(100)는 먹스(134)에 대한 적절한 갱신 입력을 선택하여 백업 버퍼 카운터 A(140)를 갱신한다. 예를 들면, 디스패치된 제2 및 제3 인스트럭션이 추측된 것이라고 현재 사이클 동안 3개의 미결정 인스트럭션이 완료된 경우, IST 제어(100)는 -2 갱신 입력을 선택한다. 예시된 바와 같이, 카운터(140)는 최대 2개의 엔트리만큼 증분될 수 있는데 그 이유는 추측 인스트럭션이 현재 사이클 동안 디스패치될 수 있는 3개의 인스트럭션중 적어도 하나를 차지하기 때문이다. 추측 실행 경로 A가 미결정으로 남아 있는 사이클동안, 미결정 비추측(nonspeculative) 인스트럭션의 완료로 인해 할당된 엔트리(110)내에서의 감소를 반영하도록 백업 버퍼 카운터 A(140)를 갱신하기 위해 IST 제어 로직(100)은 먹스(134)에 대한 적절한 경로 A를 선택한다. 추측 실행 경로 A가 바르게 추측된 것으로 결정되는 경우, 백업 버퍼 카운터 A(140)의 내용은 단순히 무시된다. 그러나, 추측 실행 경로 A가 잘못추측된 것으로 결정되는 경우, IST 제어부(100)는 먹스(137)에 대한 선택 입력을 인에이블시켜 백업 버퍼 카운터 A(140)의 값을 카운터(138)에 로딩하도록 한다. 또한, IST 제어부(100)는 먹스(137)에 대한 적절한 경로 A 입력을 선택하여 현재 사이클 동안 완료된 인스트럭션을 반영한다. 따라서, IST 엔트리 카운터(138)는 브랜치가 잘못추측된 경우라도 할당된 엔트리(110)의 정확한 계수를 유지한다.
당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, 먹스(136) 및 백업 버퍼 카운터 B(142)는 먹스(134) 및 백업 버퍼 카운터 A(140)와 유사하게 동작하여 추측 경로 A의 결정이전에 취해진 제2추측 실행 경로로부터 복구하도록 한다. 추측 경로 A가 바르게 예측된 것으로 결정되고 추측 경로 B(제2추측 실행 경로)가 잘못예측된 것으로 결정되는 경우, IST 제어(100)는 먹스(137)에 대한 적절한 입력을 선택하여 백업 버퍼 카운터 B(142)의 값을 카운터(138)에 로딩하도록 한다. 또한, IST 제어부(100)는 먹스(132)에 대한 적절한 경로 B 입력을 선택하여 현재 사이클 동안 완료된 인스트럭션을 반영하도록 카운터(138)를 갱신한다.
제6도를 참조하면, 할당된 FPR 재명명 버퍼(92)의 수를 표시하는 FPR 재명명 버퍼 카운터(150)의 블럭도가 도시되어 있다. 제6도에 의해 명백해지는 바와 같이, FPR 재명명 버퍼 카운터(150)는 IST 엔트리 카운터(130)와 유사하게 기능한다. 백업 버퍼 카운터 A(160) 및 백업 버퍼 카운터 B(162)는 할당된 FPR 재명명 버퍼(92) 수의 올바른 계수를 유지하여, 2개의 브랜치 인스트럭션중 어느 것이 잘못예측된 경우 FPR 재명명 버퍼 카운터(150)가 단일 사이클에서 카운터(158)에 대해 바른 FPR 버퍼 계수를 복구하도록 한다. 예시된 실시예에서, 3개까지의 FPR 재명명 버퍼(92)가 인스트럭션에 할당될 수 있고 각 사이클 동안 3개까지의 FPR 재명명 버퍼(92)가 FPR 화일(96)에 기록될 수 있다. 제7도를 참조하면, 미결정 인스트럭션에 할당된 GPR 재명명 버퍼(90)의 수를 계수하는 GPR 재명명 버퍼 카운터(170)의 바람직한 실시예가 도시되어 있다. 당 분야에서 통상의 지식을 가진자에 의해 이해되는 바와 같이, GPR 재명명 버퍼 카운터(170)는 한 사이클내에서 할당되고 퇴거(retire)될 수 있는 GPR 재명명 버퍼(90)의 수에 있어서의 상이점을 제외하고, FPR 재명명 버퍼 카운터(150)와 유사하게 동작한다. 예시된 실시예에서, GPR 재명명 버퍼(90)의 2개 한도까지 디스패치시에 각 인스트럭션에 할당될 수 있는데 그 이유는 2개의 GPR 재명명 버퍼(90)는 로딩 및 갱신 인스트럭션을 실행해야 하기 때문이다. 그러나, GPR 재명명 버퍼(90)중 단지 2개만이 주어진 완료 사이클 동안 GPR 화일(94)에 기록될 수 있다.
FPR 및 GPR 재명명 버퍼 카운터(150 및 170)의 설계는 종래 기술의 시스템에 비해 본 발명의 성능을 향상시키는데 그 이유는 잘못예측된 브랜치에 할당된 자원이 보다 신속하게 재할당될 수 있기 때문이다. 인스트럭션의 추측 실행을 지원하는 종래 기술의 프로세서는 프로세서가 잘못추측된 브랜치 다음의 프로세서 자원의 정확한 상태를 복구하도록 하기 위해 백업 버퍼 카운터 A 및 B와 같은 설비를 포함하지 않는다. 추측 실행을 지원하는 종래의 프로세서에서, 일단 브랜치가 잘못된 것으로 판정되는 경우, 프로세서는 잘못추측된 브랜치에 선행하는 모든 순차적 인스트럭션이 완료될 때까지 실행 파이프라인을 정지시킨다. 일단 모든 유효 데이타가 재명명 버퍼로부터 아키텍트 레지스터까지 실행되면, 모든 재명명 버퍼가 분출되고 리세트된다.
이후, 프로세서는 대안적인 실행 경로 다음에 순차적 인스트럭션으로 시작하는 재명명 버퍼의 실행 및 할당을 계속한다. 이 메카니즘은 잘못추측된 브랜치로부터 복구하고자 하는 회로의 관점에서 비교적 효율적이다 하더라도, 복구 메카니즘은 프로세서 성능을 저하시키는데 그 이유는 프로세서는 잘못추측된 브랜치에 선행하는 모든 인스트럭션이 완료될 때까지 부가적인 인스트럭션을 디스패치하고 재명명 버퍼 자원을 할당하는 것을 지연시켜야 하기 때문이다.
기술된 바와 같이, 본 발명은 순서와 상관없는 실행을 지원하는 수퍼스칼라 프로세서를 통해 인스트럭션의 흐름을 관리하는 개선된 방법 및 시스템을 제공한다. 인스트럭션 시퀀싱 표내에서 각각의 미결정 인스트럭션에 대응하는 엔트리를 유지함으로써, 본 발명은 다수의 실행 유닛에 의해 프로그램 순서와 상관없이 실행된 인스트럭션이 순서에 따라 완료되도록 하여, 정확한 인터럽트를 지원하도록 한다. 더우기, 본 발명은 잘못추측된 브랜치이전에 프로세서의 프로그램 상태 및 자원 상태의 복수를 가능하게 하기 위해 잘못추측된 브랜치로부터 복구하는 효율적인 메카니즘을 제공한다. 본 발명을 채용하는 프로세서가 주어진 프로세서 사이클 동안 디스패치되고, 종료되며, 완료될 수 있는 다수의 인스트럭션에 대해 각종 제한을 참조하여 기술되었으나, 당 분야에서 통상의 지식을 가진자라면 이들 제한은 단지 설계상 선택의 문제일 뿐 본 발명에 대해 제한을 두는 것이 아님을 이해할 것이다.
본 발명이 바람직한 실시예에 대해 특히 도시되고 기술되었으나, 당 분야에서 통상의 지식을 가진자라면 본 발명의 정신 및 범위로부터 벗어나지 않고 형식 및 세부사항에 있어서 다양한 변화가 이루어질 수 있음을 이해할 것이다.

Claims (22)

  1. 인스트럭션의 추측 실행(speculative execution)을 지원하는 프로세서(a processor)내에서 자원 할당(allocation of resources)을 추적(track)하는 방법으로서, 상기 프로세서는 다수의 실행 유닛(a plurality of execution units), 제1카운터(a first counter) 및 제2카운터(a second counter)를 구비하는 자원 카운터(a resource counter), 및 다수의 자원(a plurality of resources)을 갖고, 상기 다수의 자원 중 하나 이상(one or more of said plurality of resources)은 실행을 위해 상기 다수의 실행 유닛으로 디스패치(dispatch)된 다수의 인스트럭션(a plurality of instructions)의 각각에 할당되는 상기 방법에 있어서, 상기 다수의 인스트럭션중 한 인스트럭션을, 실행을 위해 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패칭하는 것에 응답하여; 상기 인스트럭션에 할당된 상기 다수의 자원의 각각에 대해 상기 제1카운터를 1회 증분 (incrementing)시키고; 상기 인스트럭션이 추측 실행 경로(a speculative execution path)내의, 제1인스트럭션(a first instruction)인 경우, 상기 제1카운터를 증분시키기 전에 상기 제1카운터의 값을 상기 제2카운터에 로딩(loading)하는 단계와; 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패치된 상기 다수의 인스트럭션 중 특정 인스트럭션(a particular instruction)의 완료에 응답하여, 상기 특정 인스트럭션에 할당된 각 자원에 대해 상기 제1 및 제2카운터를 1회 감분(decrementing)시키는 단계와; 상기 추측 실행 경로의 반증(a refutation)에 응답하여, 상기 제2카운터의 값을 상기 제1카운터에 전달(transferring)하는 단계로서, 상기 자원 카운터는 상기 다수의 인스트럭션에 할당된 상기 다수의 자원중 다수(a number of said plurality of resources)를 추적하는 상기 단계를 포함하는 프로세서내에서 자원 할당을 추적하는 방법.
  2. 제1항에 있어서, 상기 프로세서는 각 사이클 동안 다수의 인스트럭션을 디스패치하고 완료할 수 있는 수퍼스칼라 프로세서(a superscalar processor)를 포함하고, 상기 제1카운터의 값을 상기 제2카운터에 로딩하는 상기 단계는, 추측 실행 경로내에서 제1 인스트럭션인 인스트럭션과 동시에 디스패치되는 상기 다수의 인스트럭션중 비추측 인스트럭션(nonspeculative instructions)에 할당된 상기 다수의 자원에 대해 상기 제2카운터를 1회 증분시키는 단계를 더 포함하는 프로세서내에서 자원 할당을 추적하는 방법.
  3. 제1항에 있어서, 상기 프로세서는 제2추측 실행 경로(a second speculative execution path)를 지원하고, 상기 제2자원 카운터는 제3카운터(a third counter)를 더 포함하되, 상기 다수의 인스트럭션중 선택된 인스트럭션(a selected instruction)을 실행을 위해 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패칭하는 것에 응답하여, 상기 선택된 인스트럭션이 제2추측 실행 경로내의 제1 인스트럭션이고, 상기 제1카운터를 증분시키기 전에 상기 제1카운터의 값을 상기 제3카운터에 로딩하는 단계와; 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패치된 상기 다수의 인스트럭션중 특정 인스트럭션의 완료에 응답하여, 상기 특정 인스트럭션에 할당된 각 자원에 대해 상기 제3카운터를 1회 감분시키는 단계와; 제1추측 실행 경로가 바르게 추측될 것이라는 결정 및 상기 제2추측 실행 경로의 반증에 응답하여, 상기 제3카운터의 값을 상기 제1카운터에 전달하는 단계로서, 상기 자원 카운터는 상기 다수의 인스트럭션에 할당된 상기 다수의 자원중 다수를 추적하는 상기 단계를 더 포함하는 프로세서내에서 자원 할당을 추적하는 방법.
  4. 제1항에 있어서, 상기 제1 및 제2카운터는, 제각기 제1 및 제2 쉬프트 레지스터 (first and second shift register)를 구비하고, 상기 제1 및 제2 쉬프트 레지스터의 각각은 상기 제1 및 제2 쉬프트 레지스터내의 세트 비트(a set bit)의 비트 위치(a bit position)에 의해 상기 다수의 자원중 다수의 할당된 자원을 표시하며, 상기 제1카운터를 증분시키는 상기 단계는 상기 인스트럭션에 할당된 상기 다수의 자원의 각각에 대해 상기 제1 쉬프트 레지스터내에서 제1방향(a first direction)으로 1비트 위치만큼 상기 세트 비트를 쉬프트하는 단계를 구비하고, 상기 제1 및 제2카운터를 감분시키는 상기 단계는 상기 특정 인스트럭션에 할당된 각 자원에 대해 상기 제1 및 제2 쉬프트 레지스터내에서 상기 제2방향(a second direction)으로 1비트 위치만큼 상기 세트 비트를 쉬프트하는 단계를 구비하는 프로세서내에서 자원 할당을 추적하는 방법.
  5. 인스트럭션의 추측 실행을 지원하는 프로세서내에서 자원 할당을 추적하는 장치로서, 상기 프로세서는 다수의 실행 유닛 및 다수의 자원을 구비하고, 상기 다수의 자원중 하나 이상은 실행을 위해 상기 다수의 실행 유닛으로 디스패치된 다수의 인스트럭션의 각각에 할당되는 상기 장치에 있어서, 제1카운터 및 제2카운터를 갖는 자원 카운터와; 상기 다수의 인스트럭션중 한 인스트럭션을 실행을 위해 상기 다수의 실행 유닛중한 실행 유닛으로 디스패칭하는 것에 응답하여 상기 인스트럭션에 할당된 상기 다수의 자원의 각각에 대해 상기 제1카운터를 1회 증분시키는 수단과; 상기 다수의 인스트럭션중 특정 인스트럭션을 실행을 위해 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패치하는 것에 응답하여 상기 제1카운터를 증분시키기 전에 상기 제1카운터의 값을 상기 제2카운터에 로딩하는 수단으로서, 상기 특정 인스트럭션이 추측 실행 경로내의 제1 인스트럭션인 상기 수단과; 상기 인스트럭션의 완료에 응답하여 상기 다수의 실행 유닛으로 디스패치된 상기 다수의 인스트럭션중 한 인스트럭션에 할당된 각 자원에 대해 상기 제1 및 제2카운터를 1회 감분시키는 수단과; 상기 추측 실행 경로의 반증에 응답하여 상기 제2카운터의 값을 상기 제1카운터에 전달하는 수단으로서, 상기 자원 카운터는 상기 다수의 인스트럭션에 할당된 상기 다수의 자원중 다수를 추적하는 상기 수단을 포함하는 프로세서내에서 자원 할당을 추적하는 장치.
  6. 제5항에 있어서, 상기 프로세서는 각 사이클 동안 다수의 인스트럭션을 디스패치하고 완료할 수 있는 수퍼스칼라 프로세서를 포함하고, 상기 제1카운터의 값을 상기 제2카운터에 로딩하는 상기 수단은 추측 실행 경로내에서 제1 인스트럭션인 인스트럭션과 동시에 디스패치되는 상기 다수의 인스트럭션중 비추측 인스트럭션에 할당된 상기 다수의 자원의 각각에 대해 상기 제2카운터를 1회 증분시키는 수단을 더 포함하는 프로세서내에서 자원 할당을 추적하는 장치.
  7. 제5항에 있어서, 상기 프로세서는 제2추측 실행 경로를 지원하고, 상기 제2자원 카운터는 제3카운터를 더 포함하되, 상기 다수의 인스트럭션 중 선택된 인스트럭션을 실행을 위해 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패칭하는 것에 응답하여, 상기 제1카운터를 증분시키기 전에 상기 제1카운터의 값을 상기 제3카운터에 로딩하는 수단으로서, 상기 선택될 인스트럭션은 제2추측 실행 경로내의 제1 인스트럭션인 상기 수단과; 상기 다수의 실행 유닛중 한 실행 유닛으로 디스패치된 상기 다수의 인스트럭션중 특정 인스트럭션의 완료에 응답하여, 상기 특정 인스트럭션에 할당된 각 자원에 대해 상기 제3카운터를 1회 감분시키는 수단과; 제1추측 실행 경로가 바르게 추측된 것이라는 결정 및 상기 제2추측 실행 경로의 반증에 응답하여, 상기 제3카운터의 값을 상기 제1카운터에 전달하는 수단으로서, 상기 자원 카운터는 상기 다수의 인스트럭션에 할당된 상기 다수의 자원중 다수를 추적하는 상기 수단을 더 포함하는 프로세서내에서 자원 할당을 추적하는 장치.
  8. 제5항에 있어서, 상기 제1 및 제2카운터는, 제각기 제1 및 제2 쉬프트 레지스터를 구비하고, 상기 제1 및 제2 쉬프트 레지스터의 각각은 상기 제1 및 제2 쉬프트 레지스터내의 세트 비트의 비트 위치에 의해 상기 다수의 자원중 다수의 할당된 자원을 표시하며, 상기 제1카운터를 증분시키는 상기 단계는 상기 인스트럭션에 할당된 상기 다수의 자원이 각각에 대해 상기 제1 쉬프트 레지스터내에서 제1방향으로 1비트 위치만큼 상기 세트 비트를 쉬프트하는 수단을 구비하고, 상기 제1 및 제2카운터를 감분시키는 단계는 상기 특정 인스트럭션에 할당된 상기 각각의 자원에 대해 상기 제1 및 제2 쉬프트 레지스터내에서 상기 제2방향으로 1비트 위치만큼 상기 세트 비트를 쉬프트하는 수단을 구비하는 프로세서내에서 자원 할당을 추적하는 장치.
  9. 제5항에 있어서, 상기 다수의 자원은, 완료 이전에 상기 다수의 인스트럭션에 연관된 데이타를 저장하도록 이용된 다수의 재명명 데이타 버퍼(a plurality of rename data buffers)를 포함하는 프로세서내에서 자원 할당을 추적하는 장치.
  10. 제5항에 있어서, 상기 프로세서는 상기 다수의 인스트럭션의 순서와 상관없는 (out-of-order) 실행을 지원하고 다수의 엔트리(a plurality of entries)를 갖는 인스트럭션 시퀀싱 표(an instruction sequencing table)를 구비하며, 상기 다수의 인스트럭션의 각각에는 상기 다수의 인스트럭션의 프로그램 순서(a program order)에 따라 순차적으로 상기 다수의 엔트리중 한 엔트리가 할당되어, 상기 다수의 인스트럭션이 상기 프로그램 순서에 따라 완료될 수 있도록 하고, 상기 다수의 자원은 상기 인스트럭션 시퀀싱 표내에 상기 다수의 엔트리를 구비하는 프로세서내에서 자원 할당을 추적하는 장치.
  11. 다수의 실행 유닛으로 디스패치된 인스트럭션이, 프로그램 순서와 상관없이 실행될 수 있는 상기 다수의 실행 유닛과; 다수의 사용자-액세스가능한 데이타 레지스터 (a plurality of user-accessible data registers)와; 다수의 재명명 버퍼와; 상기 다수의 실행 유닛으로 인스트럭션을 디스패치하는 수단과; 실행을 위해 상기 다수의 실행 유닛으로 디스패치된 다수의 인스트럭션의 각각에 인스트럭션 식별자(an instruction identifier)를 할당하는 수단으로서, 인스트럭션 식별자는 상기 다수의 인스트럭션의 프로그램 순서에 따라 상기 다수의 인스트럭션의 각각에 순차적으로 할당되는 상기 할당 수단과; 다수의 엔트리를 구비하는 표(a table)로서, 상기 다수의 엔트리중 각 엔트리는 인스트럭션 식별자에 연관되고, 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당된 인스트럭션의 실행이 종료되었는지의 여부를 표시하는 종료 표시자(a finish indicator)를 포함하는 상기 표와; 상기 특정 엔트리에 연관된 인스트럭션 식별자가 할당된 인스트럭션의 실행 종료(termination of execution)에 응답하여 상기 표내의 상기 다수의 엔트리중 특정 엔트리내에서 종료 표시자를 세팅(setting)하는 수단과; 특정 프로세서 사이클(a particular processor cycle) 동안 완료되는 것이 가능한 상기 다수의 인스트럭션의 서브세트(a subset)에 할당된 인스트럭션 식별자에 연관된 상기 표내의 엔트리를 지정(point to)하는 하나 이상의 포인터(one or more pointers)로서, 상기 서브세트중 선택된 인스트럭션은 상기 선택된 인스트럭션에 연관된 데이타를 상기 다수의 재명명 버퍼중 연관된 재명명 버퍼로부터 상기 다수의 데이타 레지스터중 선택된 데이타 레지스터로 전송하는 상기 하나 이상의 포인터와; 상기 다수의 인스트럭션의 상기 서브세트내의 선택된 인스트럭션을 완료하는 수단으로서, 상기 선택된 인스트럭션에 의해 생성된 예외(exceptions)가 처리되고, 상기 선택된 인스트럭션에 선행하는 인스트럭션 식별자가 할당되는 상기 다수의 인스트럭션중의 인스트럭션은 이전 프로세서 사이클(a previous processor cycle) 동안 완료되었거나 동일한 프로세서 사이클 동안 완료되며, 상기 선택된 인스트럭션에 할당된 인스트럭션 식별자는 세트 종료 표시자(set finish indicators)를 갖는 엔트리에 연관되어, 상기 다수의 인스트럭션은 상기 프로그램 순서에 따라 완료되도록 하는 상기 완료 수단을 포함하는 수퍼스칼라 프로세서.
  12. 제11항에 있어서, 상기 표내의 각 엔트리는, 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당되는 인스트럭션을 완료하는데 필요한 상기 다수의 데이타 레지스터중 다수를 지정(specify)하는 필드(a field)와; 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당되는 인스트럭션의 예외 동안 발생하는 예외 조건(exception conditions)을 표시하는 필드를 더 포함하는 수퍼스칼라 프로세서.
  13. 제11항에 있어서, 상기 표는 M개의 엔트리를 갖고, 상기 수퍼스칼라 프로세서는 엔트리 카운터(an entry counter)를 더 구비하되, 상기 엔트리 카운터는 M+1개의 비트를 구비하며, 자신내의 세트 비트의 위치에 의해 상기 표내의 상기 다수의 엔트리중 할당된 엔트리의 제1숫자(a first number)를 표시하는 주 쉬프트 레지스터(a primary shift register)와; M+1개의 비트를 구비하며, 추측 실행 경로에 연관되고, 상기 추측 실행 경로내에 있지 않은 인스트럭션에 할당되는 상기 다수의 엔트리중 엔트리의 제2숫자(a second number)을 표시하는 백업 쉬프트 레지스터(a backup shift register)와; 상기 추측 실행 경로와 잘못예측된 것이라는 판정에 응답하여 상기 제2숫자를 상기 백업 쉬프트 레지스터로부터 상기 주 쉬프트 레지스터에 전송하는 수단을 더 구비하는 상기 엔트리 카운터를 더 포함하는 수퍼스칼라 프로세서.
  14. 제13항에 있어서, 상기 수퍼스칼라 프로세서는 N개의 추측 실행 경로를 지원하고, 상기 엔트리 카운터는 N개의 백업 쉬프트 레지스터를 더 포함하는 수퍼스칼라 프로세서.
  15. 제11항에 있어서, 상기 수퍼스칼라 프로세서는 M개의 재명명 버퍼를 갖고, 재명명 버퍼 카운터를 더 구비하되, 상기 재명명 버퍼 카운터는 M+1개의 비트를 구비하며, 자신내의 세트 비트의 위치에 의해 디스패치되고 완료되지 않은 인스트럭션에 할당된 상기 다수의 재명명 버퍼의 제1숫자를 표시하는 주 쉬프트 레지스터와; M+1개의 비트를 구비하며, 추측 실행 경로에 연관되고, 디스패치되고 완료되지 않았으며 상기 추측 실행 경로내에 있지 않은 인스트럭션에 할당된 상기 다수의 재명명 버퍼의 제2숫자를 표시하며 상기 제2숫자는 자신내의 세트 비트의 위치에 의해 표시되는 백업 쉬프트 레지스터와; 상기 추측 실행 경로가 잘못예측된 것이라는 판정에 응답하여 상기 제2숫자를 상기 백업 쉬프트 레지스터로부터 상기 주 쉬프트 레지스터에 전송하는 수단을 구비하는 상기 재명명 엔트리 카운터를 더 포함하는 수퍼스칼라 프로세서.
  16. 제15항에 있어서, 상기 수퍼스칼라 프로세서는 N개의 추측 실행 경로를 지원하고, 상기 데이타 버퍼 카운터는 N개의 백업 쉬프트 레지스터를 더 포함하는 수퍼스칼라 프로세서.
  17. 인스트럭션의 순서와 상관없는 실행(out-of-order execution)을 지원하는 데이타 프로세싱 시스템에 있어서, 상기 다수의 인스트럭션을 저장하는 메모리(a memory)와; 다수의 실행 유닛을 갖는 수퍼스칼라 프러세서로서, 상기 다수의 실행 유닛으로 디스패치된 다수의 인스트럭션이 프로그램 순서와 상관없이 실행될 수 있는 상기 수퍼스칼라 프로세서와; 상기 다수의 인스트럭션을 상기 메모리로부터 상기 다수의 실행 유닛으로 디스패칭하는 수단과; 다수의 사용자 -엑세스가능한 데이타 레지스터와; 다수의 재명명 버퍼와; 실행을 위해 상기 다수의 실행 유닛으로 디스패치된 다수의 인스트럭션의 각각에 인스트럭션 식별자를 할당하는 수단으로서, 인스트럭션 식별자는 상기 다수의 인스트럭션의 프로그램 순서에 따라 상기 다수의 인스트럭션의 각각에 순차적으로 할당되는 상기 할당 수단과; 다수의 엔트리를 구비하는 표로서, 상기 다수의 엔트리중 각 엔트리가 인스트럭션 식별자에 연관되고, 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당된 인스트럭션의 실행이 종료되었는지의 여부를 표시하는 종료 표시자를 포함하는 상기 표와; 상기 특정 엔트리에 연관된 인스트럭션 식별자에 할당된 인스트럭션의 실행 종료에 응답하여 상기 표내의 상기 다수의 엔트리중 특정 엔트리내에서 종료 표시자를 세팅하는 수단과; 특정 프로세서 사이클 동안 완료되는 것이 가능한 상기 다수의 인스트럭션의 서브세트에 할당된 인스트럭션 식별자에 연관된 상기 표내의 엔트리를 지정하는 하나 이상의 완료 포인터(one or more completionpointers)로서, 상기 서브세트중 선택된 인스트럭션은 상기 선택된 인스트럭션에 연관된 데이타를 상기 다수의 재명명 버퍼중 연관된 재명명 버퍼로부터 상기 다수의 데이타 레지스터중 선택된 데이터 레지스터에 전송하는 상기 하나 이상의 완료 포인터와; 상기 다수의 인스트럭션의 상기 서브세트내의 선택된 인스트럭션을 완료하는 수단으로서, 상기 선택된 인스트럭션에 의해 생성된 예외가 처리되고, 상기 선택된 인스트럭션에 선행하는 인스트럭션 식별자에 할당되는 상기 다수의 인스트럭션중의 인스트럭션은 이전의 프로세서 사이클 동안 완료되었거나 동일한 프로세서 사이클 동안 완료되며, 상기 선택된 인스트럭션에 할당된 인스트럭션 식별자는 세트 종료표시자를 갖는 엔트리에 연관되어, 상기 다수의 인스트럭션이 상기 프로그램 순서에 따라 완료되도록 하는 상기 완료 수단을 포함하는 데이타 프로세싱 시스템.
  18. 제17항에 있어서, 상기 표내의 각 엔트리는, 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당되는 인스트럭션을 완료하는데 필요한 상기 다수의 데이타 레지스터중 다수를 지정하는 필드와; 상기 각 엔트리에 연관된 인스트럭션 식별자가 할당되는 인스트럭션의 예외 동안 발생한 예외조건을 표시하는 필드를 더 포함하는 데이타 프로세싱 시스템.
  19. 제17항에 있어서, 상기 표는 M개의 엔트리를 가지며, 상기 프로세싱 시스템은 엔트리 카운터를 더 구비하되, 상기 엔트리 카운터는 M+1개의 비트를 구비하며, 자신내의 세트 비트의 위치에 의해 상기 표내의 상기 다수의 엔트리중 할당된 엔트리의 제1숫자를 표시하는 주 쉬프트 레지스터와; M+1개의 비트를 구비하며, 추측 실행 경로에 연관되고, 상기 추측 실행 경로내에 있지 않은 인스트럭션에 할당되는 상기 다수의 엔트리중의 엔트리의 제2숫자를 표시하는 백업 쉬프트 레지스터와; 상기 추측 실행 경로가 잘못예측된 것이라는 판정에 응답하여 상기 제2숫자를 상기 백업 쉬프트 레지스터로부터 상기 주 쉬프트 레지스터에 전송하는 수단을 더 구비하는 상기 엔트리 카운터를 더 포함하는 데이타 프로세싱 시스템.
  20. 제19항에 있어서, 상기 수퍼스칼라 프로세서는 N개의 추측 실행 경로를 지원하고, 상기 엔트리 카운터는 N개의 백업 쉬프트 레지스터를 더 포함하는 데이타 프로세싱 시스템.
  21. 제17항에 있어서, 상기 수퍼스칼라 프로세서는 M개의 재명명 버퍼를 갖고, 재명명 버퍼 카운터를 더 구비하되, M+1개의 비트를 구비하며, 자신내의 세트 비트의 위치에 의해 디스패치되고 완료되지 않은 인스트럭션에 할당된 상기 다수의 재명명 버퍼의 제1숫자를 표시하는 주 쉬프트 레지스터와; M+1개의 비트를 구비하며, 추측 실행 경로에 연관되고, 디스패치되고 완료되지 않았으며 상기 추측 실행 경로 내에 있지 않은 인스트럭션에 할당된 상기 다수의 재명명 버퍼중 제2숫자를 표시하며 상기 제2숫자는 자신내의 세트 비트의 위치에 의해 표시되는 백업 쉬프트 레지스터와; 상기 추측 실행 경로가 잘못예측된 것이라는 판정에 응답하여 상기 제2숫자를 상기 백업 쉬프트 레지스터로부터 상기 주 쉬프트 레지스터에 전송하는 수단을 구비하는 상기 재명명 버퍼 카운터를 더 포함하는 데이타 프로세싱 시스템.
  22. 제21항에 있어서, 상기 수퍼스칼라 프로세서는 N개의 추측 실행 경로를 지원하고, 상기 데이타 버퍼 카운터는 N개의 백업 쉬프트 레지스터를 더 포함하는 데이타 프로세싱 시스템.
KR1019960021713A 1995-06-29 1996-06-15 프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템 Expired - Fee Related KR100225244B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US8/496,833 1995-06-29
US08/496,833 US5809268A (en) 1995-06-29 1995-06-29 Method and system for tracking resource allocation within a processor

Publications (1)

Publication Number Publication Date
KR100225244B1 true KR100225244B1 (ko) 1999-10-15

Family

ID=23974348

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960021713A Expired - Fee Related KR100225244B1 (ko) 1995-06-29 1996-06-15 프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템

Country Status (5)

Country Link
US (1) US5809268A (ko)
EP (1) EP0751458B1 (ko)
JP (1) JP3093639B2 (ko)
KR (1) KR100225244B1 (ko)
DE (1) DE69615616D1 (ko)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5860018A (en) * 1997-06-25 1999-01-12 Sun Microsystems, Inc. Method for tracking pipeline resources in a superscalar processor
US6324640B1 (en) * 1998-06-30 2001-11-27 International Business Machines Corporation System and method for dispatching groups of instructions using pipelined register renaming
US6338133B1 (en) 1999-03-12 2002-01-08 International Business Machines Corporation Measured, allocation of speculative branch instructions to processor execution units
US6810422B1 (en) 2000-01-14 2004-10-26 Lockheed Martin Tactical Defense Systems System and method for probabilistic quality of communication service determination
US6622236B1 (en) * 2000-02-17 2003-09-16 International Business Machines Corporation Microprocessor instruction fetch unit for processing instruction groups having multiple branch instructions
US7188232B1 (en) * 2000-05-03 2007-03-06 Choquette Jack H Pipelined processing with commit speculation staging buffer and load/store centric exception handling
US6675372B1 (en) * 2000-10-31 2004-01-06 Sun Microsystems, Inc. Counting speculative and non-speculative events
US20040186982A9 (en) * 2002-02-06 2004-09-23 Matthew Becker Stalling Instructions in a pipelined microprocessor
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
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
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
US7281237B2 (en) 2003-01-16 2007-10-09 Sun Microsystems, Inc. Run-time verification of annotated software code
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US7363620B2 (en) 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions 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
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
US8190863B2 (en) * 2004-07-02 2012-05-29 Intel Corporation Apparatus and method for heterogeneous chip multiprocessors via resource allocation and restriction
US20060026388A1 (en) * 2004-07-30 2006-02-02 Karp Alan H Computer executing instructions having embedded synchronization points
JP4276201B2 (ja) * 2005-03-31 2009-06-10 富士通株式会社 Smtプロセッサ用課金処理装置,課金処理方法,および課金処理プログラム
US8161493B2 (en) 2008-07-15 2012-04-17 International Business Machines Corporation Weighted-region cycle accounting for multi-threaded processor cores
US9690625B2 (en) * 2009-06-16 2017-06-27 Oracle America, Inc. System and method for out-of-order resource allocation and deallocation in a threaded machine
US8776061B2 (en) * 2010-12-16 2014-07-08 International Business Machines Corporation Real-time distributed monitoring of local and global processor resource allocations and deallocations
US9229791B1 (en) * 2012-08-24 2016-01-05 Qlogic, Corporation System and method for high speed multiple buffer allocation
US9448799B2 (en) * 2013-03-14 2016-09-20 Samsung Electronics Co., Ltd. Reorder-buffer-based dynamic checkpointing for rename table rebuilding
US11263047B2 (en) * 2018-02-15 2022-03-01 Sap Se Metadata management for multi-core resource manager
US10929139B2 (en) 2018-09-27 2021-02-23 Qualcomm Incorporated Providing predictive instruction dispatch throttling to prevent resource overflows in out-of-order processor (OOP)-based devices
US11086630B1 (en) 2020-02-27 2021-08-10 International Business Machines Corporation Finish exception handling of an instruction completion table
US12360768B2 (en) * 2021-12-16 2025-07-15 Intel Corporation Throttling code fetch for speculative code paths
US11829762B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Time-resource matrix for a microprocessor with time counter for statically dispatching instructions
US11954491B2 (en) 2022-01-30 2024-04-09 Simplex Micro, Inc. Multi-threading microprocessor with a time counter for statically dispatching instructions
US12001848B2 (en) 2022-01-30 2024-06-04 Simplex Micro, Inc. Microprocessor with time counter for statically dispatching instructions with phantom registers
US11829187B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Microprocessor with time counter for statically dispatching instructions
US11829767B2 (en) 2022-01-30 2023-11-28 Simplex Micro, Inc. Register scoreboard for a microprocessor with a time counter for statically dispatching instructions
US12190116B2 (en) * 2022-04-05 2025-01-07 Simplex Micro, Inc. Microprocessor with time count based instruction execution and replay
US12141580B2 (en) 2022-04-20 2024-11-12 Simplex Micro, Inc. Microprocessor with non-cacheable memory load prediction
US12169716B2 (en) 2022-04-20 2024-12-17 Simplex Micro, Inc. Microprocessor with a time counter for statically dispatching extended instructions
US12288065B2 (en) 2022-04-29 2025-04-29 Simplex Micro, Inc. Microprocessor with odd and even register sets
US12106114B2 (en) 2022-04-29 2024-10-01 Simplex Micro, Inc. Microprocessor with shared read and write buses and instruction issuance to multiple register sets in accordance with a time counter
US12112172B2 (en) 2022-06-01 2024-10-08 Simplex Micro, Inc. Vector coprocessor with time counter for statically dispatching instructions
US12282772B2 (en) 2022-07-13 2025-04-22 Simplex Micro, Inc. Vector processor with vector data buffer
US12124849B2 (en) 2022-07-13 2024-10-22 Simplex Micro, Inc. Vector processor with extended vector registers
US12147812B2 (en) 2022-07-13 2024-11-19 Simplex Micro, Inc. Out-of-order execution of loop instructions in a microprocessor

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1304188A (ko) * 1969-12-09 1973-01-24
US4145742A (en) * 1974-09-30 1979-03-20 Hewlett-Packard Company Programmable calculator including user-definable keys
US4056711A (en) * 1975-10-24 1977-11-01 William Paul Lamar Method and apparatus for programming microprocessors
US4241416A (en) * 1977-07-01 1980-12-23 Systron-Donner Corporation Monitoring apparatus for processor controlled equipment
US4270184A (en) * 1978-03-16 1981-05-26 Tokyo Shibaura Denki Kabushiki Kaisha Microprocessor-based programmable logic controller
US4371931A (en) * 1979-06-27 1983-02-01 Burroughs Corporation Linear micro-sequencer for micro-processor system utilizing specialized instruction format
US4575816A (en) * 1980-12-19 1986-03-11 International Business Machines Corporation Interactive transactions processor using sequence table pointers to access function table statements controlling execution of specific interactive functions
DE3239199C2 (de) * 1982-10-22 1986-03-20 Georg Neumann Gmbh, 1000 Berlin Verfahren zum Schneiden einer mit Seiten- und Tiefenschrift modulierten, spiralförmigen Rille in einen ebenen, scheibenförmigen Aufzeichnungsträger, sowie Schaltungsanordnung zur Durchführung dieses Verfahrens
US4722049A (en) * 1985-10-11 1988-01-26 Unisys Corporation Apparatus for out-of-order program execution
CA1286421C (en) * 1987-10-14 1991-07-16 Martin Claude Lefebvre Message fifo buffer controller
US5307464A (en) * 1989-12-07 1994-04-26 Hitachi, Ltd. Microprocessor and method for setting up its peripheral functions
US5289585A (en) * 1990-03-26 1994-02-22 Siemens Nixdorf Informationssysteme Ag Multiprocessor system having a system bus for the coupling of several processing units with appertaining private cache memories and a common main memory
US5581719A (en) * 1992-11-12 1996-12-03 Digital Equipment Corporation Multiple block line prediction
US5584037A (en) * 1994-03-01 1996-12-10 Intel Corporation Entry allocation in a circular buffer
US5586278A (en) * 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
JPH07281893A (ja) * 1994-04-15 1995-10-27 Internatl Business Mach Corp <Ibm> 処理システム及び演算方法
US5590352A (en) * 1994-04-26 1996-12-31 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands

Also Published As

Publication number Publication date
US5809268A (en) 1998-09-15
DE69615616D1 (de) 2001-11-08
JPH09120359A (ja) 1997-05-06
EP0751458B1 (en) 2001-10-04
EP0751458A1 (en) 1997-01-02
JP3093639B2 (ja) 2000-10-03

Similar Documents

Publication Publication Date Title
KR100225244B1 (ko) 프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템
KR100270003B1 (ko) 향상된 분기 예측 기법을 사용하는 프로세서 및그 실행 방법
US5584037A (en) Entry allocation in a circular buffer
US5611063A (en) Method for executing speculative load instructions in high-performance processors
US6079014A (en) Processor that redirects an instruction fetch pipeline immediately upon detection of a mispredicted branch while committing prior instructions to an architectural state
US5889982A (en) Method and apparatus for generating event handler vectors based on both operating mode and event type
US5809271A (en) Method and apparatus for changing flow of control in a processor
US5687338A (en) Method and apparatus for maintaining a macro instruction for refetching in a pipelined processor
US6065115A (en) Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
EP1145110B1 (en) Circuit and method for tagging and invalidating speculatively executed instructions
US5901307A (en) Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources
EP0605872A1 (en) Method and system for supporting speculative execution of instructions
US5987600A (en) Exception handling in a processor that performs speculative out-of-order instruction execution
KR100242403B1 (ko) 데이타 처리 시스템의 조건 레지스터 데이타 임시 저장 방법 및 시스템
US5644779A (en) Processing system and method of operation for concurrent processing of branch instructions with cancelling of processing of a branch instruction
US20090132854A1 (en) Method and apparatus to launch write queue read data in a microprocessor recovery unit
US6973563B1 (en) Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
KR980010787A (ko) 인스트럭션 루프를 사변적으로 실행하는 프로세서및 그 방법
US5898864A (en) Method and system for executing a context-altering instruction without performing a context-synchronization operation within high-performance processors
US5872949A (en) Apparatus and method for managing data flow dependencies arising from out-of-order execution, by an execution unit, of an instruction series input from an instruction source
JP3142813B2 (ja) レジスタの名前変更を管理するための情報処理システムおよび方法
US5524224A (en) System for speculatively executing instructions wherein mispredicted instruction is executed prior to completion of branch processing
US5875325A (en) Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history
JP3207124B2 (ja) カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置
US6134645A (en) Instruction completion logic distributed among execution units for improving completion efficiency

Legal Events

Date Code Title Description
A201 Request for examination
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 19960615

PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 19960615

Comment text: Request for Examination of Application

PG1501 Laying open of application
E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 19990525

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 19990716

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 19990719

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
FPAY Annual fee payment

Payment date: 20020509

Year of fee payment: 4

PR1001 Payment of annual fee

Payment date: 20020509

Start annual number: 4

End annual number: 4

LAPS Lapse due to unpaid annual fee
PC1903 Unpaid annual fee

Termination category: Default of registration fee

Termination date: 20040410