KR100981168B1 - 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러 - Google Patents

데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러 Download PDF

Info

Publication number
KR100981168B1
KR100981168B1 KR1020057003349A KR20057003349A KR100981168B1 KR 100981168 B1 KR100981168 B1 KR 100981168B1 KR 1020057003349 A KR1020057003349 A KR 1020057003349A KR 20057003349 A KR20057003349 A KR 20057003349A KR 100981168 B1 KR100981168 B1 KR 100981168B1
Authority
KR
South Korea
Prior art keywords
result
inference
value
scheduler
operand
Prior art date
Application number
KR1020057003349A
Other languages
English (en)
Other versions
KR20050037596A (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 KR20050037596A publication Critical patent/KR20050037596A/ko
Application granted granted Critical
Publication of KR100981168B1 publication Critical patent/KR100981168B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Abstract

마이크로프로세서(100)는 몇개의 실행 유닛(124), 및 동작을 발행하기 위해 실행 유닛(124) 중 적어도 하나에 연결된 스케쥴러(118)를 포함할 수 있다. 스케쥴러(118)는 수개의 엔트리(320)를 포함할 수 있다. 제 1 엔트리는 제 1 동작에 할당될 수 있다. 제 1 엔트리는 제 1 동작의 오퍼랜드 각각을 위한 소스 상태 표시(330A,330B)를 포함한다. 각 소스 상태 표시(330A,330B)는 제 1 동작의 오퍼랜드의 각각의 값이 추론인지를 표시한다. 스케쥴러(118)는, 제 2 동작의 결과값이 비-추론인지를 표시하는 수신에 응답하여 제 1 동작의 오퍼랜드 각각의 값이 비-추론인지를 표시하기 위하여, 제 1 엔트리의 소스 상태 표시들(330A,330B) 중 하나를 갱신하도록 구성된다.
마이크로프로세서, 오퍼랜드, 스케쥴러, 실행 유닛, 제어 유닛.

Description

데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을 위한 스케쥴러{SCHEDULER FOR USE IN A MICROPROCESSOR THAT SUPPORTS DATA-SPECULATIVE-EXECUTION}
본 발명은 마이크로프로세서 분야에 관한 것으로서, 특히, 마이크로프로세서에서 실행을 위한 동작들을 스케쥴링하는 것에 관한 것이다.
수퍼스칼라(superscalar) 마이크로프로세서는 동시에 다중 명령을 실행하고, 그 구조와 일관되는 최단의, 가능한 클록 사이클을 사용함으로써 고성능을 달성하게 된다. 하지만, 명령어들 사이의 데이터 및 제어 흐름 의존성은 소정의 시간에 발행(issue)되는 명령어의 수를 제한할 수 있다. 결과적으로, 일부 마이크로프로세서는 부가적인 성능 이득을 달성하기 위하여 추론 실행을 지원한다.
추론의 한가지 타입은 제어 흐름 추론이다. 제어 흐름 추론은 프로그램 제어가 진행될 방향을 예측한다. 예컨대, 브랜치 예측(branch prediction)은 하나의 브랜치가 채택될지를 예측하는데 사용될 수 있다. 많은 종류의 브랜치 예측이 이용가능한데, 그 범위로는 매번 단순히 동일한 예측을 하는 방법부터 히스토리-기반의 예측을 하기 위하여 프로그램의 과거의 브랜치의 정교한 히스토리를 유지하는 방법에 이르는 범위가 있다. 브랜치 예측은 하드웨어 최적화, 컴파일러 최적화 또는 이들 모두를 통해 용이하게 된다. 브랜치 예측 메커니즘에 의해 제공된 예측에 기초하여, 명령들은 추론으로 페칭(fetching)되고 실행된다. 브랜치 명령이 마지막으로 평가될 때에, 브랜치 예측이 검증될 수 있다. 만일 예측이 부정확하다면, 부정확한 예측에 기초하여 추론으로 실행된 모든 명령은 파기될(quashed) 수 있다.
추론의 또 다른 타입은 데이터값을 예측하는 데이터 추론이다. 일부 데이터 추론은 로드 명령에 응답하여 제공될 값을 예측하는 것을 포함한다. 이는, 저장 명령에 응답하여 저장된 값을 추적함으로써, 그리고 만일 계속적인 로드가 주소를 이전의 사용된 저장소들 중 하나로서 특정하기 위하여 동일한 레지스터 그리고/또는 변위를 사용한다면, 추론으로 초기에 저장된 값을 사용함으로써 수행될 수 있다. 다른 종류의 데이터 추론(값 예측)은 데이터 아이템의 값을 예측한다. 값 예측은 데이터의 패턴을 관찰하는 것과 이들 패턴에 기초하여 예측을 행하는 것을 포함한다. 예를 들어, 인덱스 카운터 변수값은 이 변수의 이전값이 어떻게 증가되거나 감소되는가를 관찰함으로써 예측될 수 있다.
데이터 추론의 또 다른 타입은 데이터의 위치를 예측하는 것을 포함하는 주소 예측이다. 또 다른 종류의 데이터 추론은 메모리 시스템 최적화로 불려진다. 다중-프로세서 시스템에서, 메모리 시스템 최적화는, 코히어런시 체크가 완료되기 이전에 프로세서가 프로세서의 로컬 캐쉬로부터의 데이터를 사용하여 명령을 추론적으로 실행할 때에 일어난다. 유사하게는, 다른 종류의 데이터 추론은 로드로 하여금 로드가 실행할 때에 연산 되지않은 주소를 갖는 저장소 이전에 추론적으로 실행하도록 허용할 수 있으며, 이는 비록 상기 저장소가 데이터를 로드가 액세스하는 주소와 동일 주소에 저장할 수 있는 경우에도 그러하다. 이런 종류의 모든 데이터 추론에서, 기초되는 조건은 추론이 검증되거나 되돌려지도록 허용함으로써 결국 평가된다. 만일 추론이 부정확하게 종료된다면, 추론 데이터를 사용하여 실행된 명령들은 (예를 들어, 갱신된 그리고/또는 비-추론 데이터로) 재-실행될 수 있다.
추론이 실행으로 하여금 종속성 체크의 완료를 기다림 없이 진행하도록 허용하기 때문에, 만일 정확한 추론으로부터 획득한 성능이 부정확한 추론으로 실패된 성능을 초과한다면, 상당한 성능 이득이 달성될 수 있다. 추론이 부정확한 것으로 판명될 때에, 추론으로 실행된 명령들은 되돌려지며, 실행은 비-추론으로 재시작된다. 추론 실행을 되돌리기 위하여, 각 추론은 기록되며, 이에 따라 추론으로 실행된 명령은 추론이 잘못 예측된 것으로 판명되는 경우에 식별될 수 있게 된다.
추론 실행의 일 결과는 스케쥴러(본원에서 스케쥴러 및 예약 스테이션은 총괄적으로 "스케쥴러"로서 언급됨)가 실행 이후에 추론 동작을 해제(deallocate)할 수 없다는 것이며, 이는 만일 이들 동작이 기초되는 추론이 부정확한 경우에 재-발행될 필요가 있기 때문이다. 기초되는 추론이 정확한지의 결정은 몇번의 사이클 동안에 이루어질 수 없으며, 결정이 이루어지는데에 얼마나 많은 사이클이 걸리는지를 결정하는 것이 가능하지 않을 것이다. 이런 불확실성은 동작이 스케쥴러로부터 해제될 수 있는 때를 확인하는 것을 어렵게 한다. 결과적으로, 스케쥴러 엔트리는 필요한 것보다 긴 추론 동작에 할당되어 유지될 수 있으며, 이는 스케쥴러에 쓸모없는 공간을 가져오게 된다.
마이크로프로세서에서 동작을 스케쥴링하기 위한 방법 및 시스템의 다양한 실시예가 개시된다. 일 실시예에서, 마이크로프로세서는 몇개의 실행 유닛, 및 동작을 발행하기 위해 실행 유닛 중 적어도 하나에 연결된 스케쥴러를 포함할 수 있다. 스케쥴러는 스케쥴러 제어 유닛 및 몇 개의 엔트리를 갖는 동작 저장소를 포함할 수 있다. 동작 저장소의 제 1 엔트리는 제 1 동작에 할당될 수 있다. 제 1 엔트리는 제 1 동작 오퍼랜드 각각에 대해 소스 상태 표시를 포함한다. 각 소스 상태 표시는 제 1 동작의 오퍼랜드 각각의 값이 추론인지를 표시한다. 스케쥴러 제어 유닛은, 제 2 동작의 결과값이 비-추론인지를 표시하는 수신에 응답하여 제 1 동작의 오퍼랜드 각각의 값이 비-추론인지를 표시하기 위하여, 제 1 엔트리의 소스 상태 표시들 중 하나를 갱신하도록 구성된다.
방법의 일 실시예는, 제 1 소스 상태 표시가 제 1 동작을 위한 제 1 오퍼랜드 값이 추론임을 표시하는 단계와; 여기서 제 1 오퍼랜드는 제 2 동작의 결과이며, 제 2 동작의 결과값이 추론이 아님을 표시하는 제 1 결과 상태 표시의 수신에 응답하여, 제 1 오퍼랜드 값이 추론이 아님을 표시하기 위해 제 1 소스 상태 표시를 갱신하는 단계와; 그리고 제 1 소스 상태 표시의 갱신에 응답하여, 제 2 결과 상태 표시가 제 1 동작 결과값이 추론이 아님을 표시하는 단계를 포함한다.
방법의 다른 실시예는, 제 1 브랜치 동작의 제 1 오퍼랜드에 대응하는 제 1 소스 상태 표시가 제 1 오퍼랜드 값이 추론임을 표시하는 단계와; 제 2 동작의 결과값이 비-추론이라는 표시를 수신하는 단계와, 여기서 제 2 동작의 결과는 제 1 오퍼랜드이며; 표시의 수신에 응답하여, 제 1 오퍼랜드의 값이 비-추론임을 표시하기 위해 제 1 소스 상태 표시를 갱신하는 단계와; 그리고 제 1 소스 상태 표시가 제 1 오퍼랜드가 비-추론임을 표시하기 위해 갱신될 때까지 제 1 브랜치 동작의 결과값에 응답하여 명령 프리페치(prefetch) 메커니즘의 리디렉션(redirection) 및 프로세싱 파이프라인의 플러슁(flushing)을 지연하는 단계를 포함한다.
컴퓨터 시스템의 일 실시예는 시스템 메모리 및 시스템 메모리에 연결된 마이크로프로세서를 포함할 수 있다. 마이크로프로세서는 몇개의 실행 유닛, 및 동작을 발행하기 위해 실행 유닛 중 적어도 하나에 연결된 스케쥴러를 포함한다. 스케쥴러는 몇개의 엔트리를 포함한다. 제 1 엔트리는 제 1 동작에 할당된다. 제 1 엔트리는 제 1 동작의 오퍼랜드 각각을 위한 소스 상태 표시를 포함할 수 있으며, 각 소스 상태 표시는 제 1 동작의 오퍼랜드 각각의 값이 추론인지를 표시할 수 있다. 스케쥴러는 제 2 동작의 결과값이 비-추론인지를 표시하는 수신에 응답하여 제 1 동작의 오퍼랜드 각각의 값이 비-추론인지를 표시하기 위하여, 제 1 엔트리의 소스 상태 표시들 중 하나를 갱신하도록 구성된다.
도 1은 마이크로프로세서의 일 실시예를 도시한다.
도 2는 스케쥴러의 일 실시예의 블록도이다.
도 3은 마이크로프로세서를 동작하는 방법의 일 실시예를 도시하는 플로우챠트이다.
도 4는 컴퓨터 시스템의 예시적 실시예를 도시한다.
도 5는 컴퓨터 시스템의 다른 실시예를 도시한다.
하기의 상세한 설명이 첨부되는 도면과 연관되어 고려될 때에, 본 발명은 잘 이해될 수 있다.
본 발명의 다양한 변형 및 대안 형태가 있지만, 특정 실시예는 도면의 예에 의하여 도시되었으며, 이는 본원에서 상세히 설명될 것이다. 하지만, 상세한 설명 및 도면은 본 발명을 개시된 특정 형태에 제한되지 않도록 의도되며, 이와 반대로, 본 발명은 첨부된 청구항에 의해 정의된 본 발명의 사상 및 범주 내의 모든 변형물, 등가물, 및 대안을 커버하도록 의도됨을 이해해야 한다. 상기 사항들은 단지 유기적 구조의 목적을 위한 것이며, 상세한 설명 및 청구범위를 제한하거나 설명하는 것으로 사용되도록 의도되지 않음을 주목해야 한다. 더욱이, 단어 "일 것인(may)"는 본 출원 전체에서 허용적인 의미(즉, 가능성이 있는, 할 수 있는)로 사용되며, 의무적인 의미(즉, 해야 한다(must))가 아니다. 단어 "포함하다" 및 이의 파생어는 "포함하는(그러나 이에만 국한되지 않음)"을 의미한다. 단어 "연결된"은 "직접 또는 간접으로 연결됨"을 의미하며, 단어 "결합된"은 "직접 또는 간접으로 결합됨"을 의미한다.
도 1 - 마이크로프로세서
도 1은 마이크로프로세서(100)의 일 실시예의 블록도이다. 마이크로프로세서(100)는 시스템 메모리(200)에 저장된 명령을 실행하도록 구성된다. 많은 이 명령들은 시스템 메모리(200)에 저장된 데이터 상에서 동작한다. 시스템 메모리(200)가 컴퓨터 시스템 전체에 대해 물리적으로 분포될 수 있으며, 하나 이상의 마이크로프로세서(100)에 의해 액세스될 수 있음에 유의해야 한다. 마이크로프로세서(100)는 비-추론이 되는 추론 동작 및 오퍼랜드에 응답하여 스케쥴러로(118)부터 엔트리를 해제하는 메커니즘을 포함한다. 본원에서 사용된 바와같이, 스케쥴러는 실행을 위한 동작을 스케쥴링하고, 동작을 동작의 실행을 위한 하나 이상의 실행 코어 또는 다른 수단에 발행하는 디바이스이다. 예컨대, 예약 스테이션이 스케쥴러의 예이다.
마이크로프로세서(100)는 명령 캐쉬(106) 및 데이터 캐쉬(128)를 포함할 수 있다. 마이크로프로세서(100)는 명령 캐쉬(106)에 연결된 프리페치 유닛(prefetch unit)(108)을 포함한다. 디스패치 유닛(dispatch unit)(104)은 명령 캐쉬(106)로부터 명령을 수신하고, 명령을 스케쥴러(118)에 디스패칭(dispatching)하도록 구성될 수 있다. 하나 이상의 스케쥴러(118)는 디스패치 유닛(104)으로부터 디스패칭된 동작을 수신하고, 동작을 하나 이상의 실행 코어(124)에 발행하도록 연결될 수 있다. 실행 코어(124)는 데이터 캐쉬(128)에 액세스를 수행하도록 된 로드/저장 유닛(126)을 포함할 수 있다. 실행 코어(124)에 의해 발생된 결과는 결과 버스(130)에 출력될 수 있다. 이 결과는 계속적으로 발행될 명령을 위한 오퍼랜드 값으로서 사용될 수 있으며, 그리고/또는 레지스터 파일(116)에 저장될 수 있다. 리타이어 큐(retire queue)(102)는 스케쥴러(118) 및 디스패치 유닛(104)에 연결될 수 있다. 리타이어 큐는 각 발행된 명령이 리타이어 될 수 있을 때를 결정하도록 될 수 있다. 일 실시예에서, 마이크로프로세서(100)는 x86 아키텍처와 호환가능하도록 설계될 수 있다. 마이크로프로세서(100)가 또한 많은 다른 구성요소를 포함할 수 있음을 주목해야 한다.
명령 캐쉬(106)는 디스패치 유닛(104)의 수신 이전에 임시적으로 명령을 저 장할 수 있다. 명령 코드는 프리페치 유닛(108)을 통해 시스템 메모리(200)로부터 코드를 프리페칭함으로써 명령 캐쉬(106)에 제공될 수 있다. 명령 캐쉬(106)는 다양한 구성(예를 들어, 세트-조합된, 완전-조합된, 또는 직접 맵핑된)으로 구현될 수 있다.
프리페치 유닛(108)은 명령 캐쉬(106)에 저장을 위해 시스템 메모리(200)로부터 명령 코드를 프리페치할 수 있다. 일 실시예에서, 프리페치 유닛(108)은 시스템 메모리(200)로부터 명령 캐쉬(106)로 코드를 버스트하도록 될 수 있다. 프리페치 유닛(108)은 다양한 특정 코드 프리페칭 기술 및 알고리즘을 이용할 수 있다.
디스패치 유닛(104)은 오퍼랜드 주소 정보, 즉시 데이터(immidiate data) 그리고/또는 변위 데이터(displacement data)뿐만 아니라 실행 코어(124)에 의해 실행가능한 비트-엔코딩된 동작(bit-encoded operations)을 포함하는 신호를 출력할 수 있다. 일부 실시예에서, 디스패치 유닛(104)은 특정 명령을 실행 코어(들)(124) 내에서 실행가능한 동작으로 디코딩(decoding)하기 위한 디코딩 회로(미도시)를 포함할 수 있다. 단순 명령들이 단일 동작에 대응할 수 있다. 일부 실시예에서, 더욱 복잡한 명령이 다중 동작에 대응할 수 있다. 레지스터의 갱신을 포함하는 동작을 디코딩하면, 레지스터 파일(116)내의 레지스터 위치는 추론 레지스터 상태를 저장하기 위해 유보될 수 있다(대안적인 실시예에서, 재정렬 버퍼(reorder buffer)가 각 레지스터에 대해 하나 이상의 추론 레지스터 상태를 저장하는데 사용될 수 있다). 레지스터 맵(134)은 레지스터 개명(renaming)을 용이하게 하기 위해 소스 및 목적 오퍼랜드의 논리 레지스터 명칭을 물리적 레지스터 명칭으로 변환할 수 있다. 레지스터 맵(134)은 레지스터 파일(116) 내의 어느 레지스터가 현재 할당되었고 할당되지않았는 지를 추적할 수 있다.
도 1의 마이크로프로세서(100)는 비순차적(out of order) 실행을 지원한다. 리타이어 큐(102)는 레지스터 판독 및 기록 동작을 위한 원(original) 프로그램 시퀀스를 추적하고, 추론 명령 실행 및 브랜치 예측오류 복구(branch misprediction recovery)를 허용하며, 그리고 정밀한 예외를 용이하게 할 수 있다. 일부 실시예에서, 리타이어 큐(102)는 또한 추론 레지스터 상태를 위한 데이터 값 저장소를 제공함으로써 레지스터 개명을 지원할 수 있다. 많은 실시예에서, 리타이어 큐(102)는 재정렬 버퍼와 유사한 기능을 할 수 있다. 하지만, 전형적인 재정렬 버퍼와는 달리, 리타이어 큐(102)는 어떠한 데이터 값 저장소도 제공하지 않을 수 있다. 일부 실시예에서, 리타이어 큐(102)는 퍼스트-인-퍼스트-아웃 구성으로 구현될 수 있는데, 이는 동작이 유효할 때에 버퍼의 "하부"로 이동하고, 이에 따라 큐의 "상부"에 새로운 엔트리를 위한 공간을 만들게 되는 구성이다. 동작이 리타이어 되었기 때문에, 리타이어 큐(102)는 추론 레지스터 상태를 저장하고, 신호를 레지스터가 현재 프리(free)인지를 표시하는 레지스터 맵(134)에 제공하는데 더 이상 필요하지 않는 레지스터 파일(116)의 레지스터를 해제할 수 있다. 이들 상태를 발생시킨 동작이 유효될 때까지 레지스터 파일(116) 내의(또는, 대안적으로, 재정렬 버퍼 내의) 추론 레지스터 상태를 유지함으로써, 잘못예측된 경로를 따른 추론-실행된 동작의 결과는 만일 브랜치 예측이 부정확하다면 레지스터 파일(116)에서 무효될 수 있다.
특정 동작을 디코딩할 때, 만일 요구된 오퍼랜드가 레지스터 위치라면, 레지스터 주소 정보는 레지스터 맵(134)(또는 재정렬 버퍼)에 라우팅될 수 있다. 예를 들어, x86 아키텍처에서, 여덟 개의 32비트 논리 레지스터(예를 들어, EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP)가 있다. 물리적 논리 파일(116)(또한 재정렬 버퍼)은 이들 논리 레지스터의 내용을 변경하는 결과를 위한 저장소를 포함하며, 비순차적 실행을 허용한다. 레지스터 파일(116)의 물리적 레지스터는 디코딩 되자마자 논리 레지스터 중 하나의 내용을 수정하도록 결정된 각 동작의 결과를 저장하도록 할당될 수 있다. 따라서, 특정 프로그램을 실행하는 동안에 다양한 지점에서, 레지스터 파일(116)(또는 대안적인 실시예에서, 재정렬 버퍼)이 소정의 논리 레지스터의 추정으로 실행된 내용을 포함하는 하나 이상의 레지스터를 가질 수 있다.
레지스터 맵(134)은 물리적 레지스터 동작을 위한 목적 오퍼랜드로서 특정된 특정의 논리 레지스터로서 지정할 수 있다. 디스패치 유닛(104)은 레지스터 파일(116)이 소정의 동작에서 소스 오퍼랜드로서 특정된 논리 레지스터로 지정된 하나 이상의 과거에 할당된 물리적 레지스터를 갖고 있는지를 결정할 수 있다. 레지스터 맵(134)은 이 논리 레지스터에 가장 최근에 할당된 물리적 레지스터를 위한 태그를 제공할 수 있다. 이 태그는 레지스터 파일(116)에서 오퍼랜드의 데이터 값을 액세스하거나 결과 버스(130)상의 결과 포워딩을 통해 데이터 값을 수신하는데 사용될 수 있다. 만일 오퍼랜드가 메모리 위치에 대응한다면, 오퍼랜드 값이 로드/저장 유닛(222)을 통하여 (레지스터 파일(118)에 결과 포워딩 그리고/또는 저장소를 위한) 결과 버스 상에 제공될 수 있다. 오퍼랜드 데이터 값은 오퍼랜드가 스케쥴러(118)들 중 하나에 의해 발행될 때에 실행 코어(124)에 제공될 수 있다. 대안적인 실시예에서, 오퍼랜드 값은 동작이 디스패칭될 때에 (동작이 발행될 때에 대응하는 실행 코어(124)에 제공되는 대신에) 대응하는 스케쥴러(118)에 제공될 수 있다.
디스패치 유닛(104)의 출력에 제공된 비트-엔코딩된 동작 및 즉시 데이터는 하나 이상의 스케쥴러(118)에 라우팅될 수 있다. 본원에서 사용된 바와 같이, 스케쥴러는 동작이 실행준비될 때인지를 검출하고, 하나 이상의 실행 유닛에 준비완료 동작(ready operations)을 발행하는 디바이스이다. 예를 들어, 예약 스테이션은 스케쥴러이다. 각 스케쥴러(118)는 실행 코어(124)에 발행을 기다리는 몇개의 계류중인 동작을 위한 동작 정보(예를 들어, 오퍼랜드 값, 오퍼랜드 태그, 그리고/또는 즉시 데이터 뿐만 아니라 비트 엔코딩된 실행 비트)을 유지할 수 있다. 일부 실시예에서, 각 스케쥴러(118)는 오퍼랜드 값 저장소를 제공하지 않을 수 있다. 대신에, 각 스케쥴러는 오퍼랜드 값이 (레지스터 파일(116) 또는 결과 버스(130)로부터) 실행 코어(124)에 의해 판독되도록 이용가능할 때를 결정하기 위하여 발행된 동작 및 레지스터 파일(116)에 이용가능한 결과를 모니터할 수 있다. 일부 실시예에서, 각 스케쥴러(118)는 전용 실행 코어(124)와 관련될 수 있다. 다른 실시예에서, 단일 스케쥴러(118)는 동작을 하나보다 많은 실행 코어(들)(124)에 발행할 수 있다.
스케쥴러(118)(실행을 위한 동작을 스케쥴링하기 위한 다른 수단)는 실행 코어(124)에 의해 실행되는 동작 정보를 임시로 저장하는데 제공될 수 있다. 상술된 바와같이, 각 스케쥴러(118)는 계류중인 동작을 위한 동작 정보를 저장할 수 있다. 부가적으로, 각 스케쥴러는 이미 실행되었지만 여전히 재발행될 수 있는 동작을 위한 동작 정보를 저장할 수 있다. 동작은 실행을 위한 적시에 이용가능하게 만들어진 요구된 오퍼랜드의 값에 응답하여 실행을 위한 실행 코어(124)에 발행된다. 따라서, 동작이 실행되는 순서는 원 프로그램 명령 시퀀스의 순서와 동일하지 않을 수 있다. 데이터 추론을 포함하는 동작은 이들이 비-추론이 될 때까지 스케쥴러(118)에 남을 수 있으며, 이에 따라 만일 데이터 추론이 부정확하다면 이들은 재발행될 수 있다.
일 실시예에서, 실행 코어(124) 각각은 시프트, 회전, 논리 연산, 및 브랜치 동작 뿐만 아니라 가산 및 감산의 정수 산술(integer arithmetic) 동작을 수행하도록 구성된 구성요소를 포함할 수 있다. 부동 소수점 유닛은 또한 부동 소수점 연산을 용이하게 하도록 포함될 수 있다. 실행 코어(124) 중 하나 이상은 로드 및 저장 메모리 동작이 로드/저장 유닛(126)에 의해 수행되도록 주소 생성을 수행하도록 구성될 수 있다.
실행 코어(124)는 또한 브랜치 예측 유닛(132)으로의 조건부 브랜치 명령의 실행에 관한 정보를 제공할 수 있다. 만일 실행 코어(124)로부터의 정보가 브랜치 예측이 부정확한 것으로 표시한다면, 브랜치 예측 유닛(132)은 명령 프로세싱 파이프라인에 입력된 잘못 예측된 브랜치에 계속된 명령을 플러시(flush)할 수 있고, 프리페치 유닛(108)을 리디렉트(redirect)시킬 수 있다. 리디렉트된 프리페치 유닛(108)은 이후에 명령 캐쉬(106) 또는 시스템 메모리(200)로부터 정확한 명령 세트의 페칭을 시작할 수 있다. 이런 상황에서, 잘못 예측된 브랜치 명령 이후에 발생된 원 프로그램 시퀀스의 명령 결과는 버려질 수 있으며, 이는 로드/저장 유닛(126) 그리고/또는 레지스터 파일(116)에 추론으로 실행되고 임시로 저장되었던 것들을 포함한다.
만일 임의의 브랜치 명령의 오퍼랜드가 추론적이라면(예를 들어, 데이터 추론이 브랜치의 명령의 오퍼랜드 중 하나를 발생시키는 동작상에서 수행되었기 때문에), 브랜치 명령의 결과는 추론일 것이다, 일부 실시예에서, 브랜치 명령의 추론 결과는 브랜치 동작이 잘못 예측되었는지를 결정하도록 사용될 수 있다. 만일 추론 결과가 브랜치 명령이 잘못 예측된 것으로 표시한다면, 브랜치 예측 유닛(132)은 프리페치 유닛(108)을 리디렉트하고, 명령 프로세싱 파이프라인을 플러시 할 것이다. 하지만, 다른 실시예에서, 브랜치 예측 유닛(132)은 브랜치 동작 결과가 프리페치 유닛(108)을 리디렉트하고 명령 프로세싱 파이프라인을 플러시하기 이전에 비-추론이 될 때까지 대기하도록 될 것이다. 이것은 만일 브랜치 동작의 추론 결과가 부정확한 것으로 판명된다면 리디렉션 및 파이프라인 플러시의 횟수를 적게 할 수 있다.
실행 코어(124)내의 구성요소에 의해 생성된 결과는 만일 레지스터 값이 갱신되는 경우에 결과 버스(130)상에서 레지스터 파일(116)로 출력될 수 있다. 만일 메모리 위치의 내용이 변경되는 경우에, 실행 코어(124) 내에 생성된 결과는 로드/저장 유닛(126)에 제공될 수 있다.
로드/저장 유닛(126)은 실행 코어(124)와 데이터 캐쉬(128) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드/저장 유닛(126)은 계류중인 로드 또는 저장을 위한 데이터 및 주소 정보를 위한 몇개의 저장 위치를 갖는 로드/저장 버퍼로 될 수 있다. 로드/저장 유닛(126)은 또한 데이터 코히어런시가 유지됨을 보장하기 위해 계류중인 저장 명령에 대한 로드 명령을 위한 종속성 체크를 수행할 수 있다.
데이터 캐쉬(128)는 로드/저장 유닛(126) 및 시스템 메모리(200) 사이에서 전달되는 데이터를 임시적으로 저장하도록 제공된 캐쉬 메모리이다. 상술된 명령 캐쉬(106)와 같이, 데이터 캐쉬(128)는 세트-조합된 구성을 포함하는 다양한 특정 메모리 구성으로 구현될 수 있다. 부가적으로, 데이터 캐쉬(128) 및 명령 캐쉬(106)는 일부 실시예에서 집적된 캐쉬로 구현될 수 있다.
도 1의 마이크로프로세서(100)에서 생성된 데이터 값은 추론 상태 표시를 포함할 수 있다. 각 추론 상태 표시는 관련 데이터 값이 추론인지를 표시할 수 있다. 예를 들어, 레지스터 파일(116)에 저장된 데이터 값 각각은 관련 추론 상태 표시를 가질 수 있으며, 이는 또한 레지스터 파일(116)에, 및 레지스터 맵(134)에 저장될 수 있다. 유사하게는, 실행 코어(124)에 의해 발생된 데이터 값 각각은 관련 상태 정보를 가질 수 있으며, 이는 데이터 값을 식별하는 태그를 따라 태그 버스 상으로의 관련 데이터 값 그리고/또는 출력을 따른 실행 코어(124)로부터 출력될 수 있다. 일 실시예에서, 추론 상태 표시는 레지스터 맵(134)에서 식별된 각 물리적 레지스터에 저장될 수 있다. 추론 상태 표시는 추론 상태 표시가 관련된 물리적 레지스터를 식별하는 태그를 갖는 태그 버스상에 전달될 수 있다. 추론 상태 표시는 대안적으로 추론 상태 표시가 관련된 데이터 값과 함께 결과 버스 상으로 전달될 수 있다.
상술된 바와같이, 데이터 값은 만일 데이터 값이 재연산될 가능성이 있으면 추론일 수 있다. 데이터 값은, 만일 데이터 값이 어떤 데이터 추론이 수행된 동작의 결과이거나(예를 들어, 동작의 결과가 디스패치 유닛(104)에 의해 예측되거나) 데이터 값이 재연산될 수 있는 다른 데이터 값에 종속된다면(예를 들어, 만일 데이터 값이 하나 이상의 추론 오퍼랜드를 사용하여 실행된 동작의 결과이라면), 재연산될 수 있다, 추론 상태 표시는 오퍼랜드 또는 동작이 추론임을 표시하는 수단의 일 예이다.
일 실시예에서, 추론 상태 표시는 단일 상태 비트일 수 있으며, 만일 관련 데이터 값이 추론적인 값이면 세팅(set)되고, 그렇지 않다면 클리어(clear)된다. 실행 코어(124)는 만일 데이터값을 발생하도록 사용된 임의의 오퍼랜드가 추론이라면 데이터값을 위한 추론 상태 표시를 세팅하도록 될 수 있다. 로드/저장 유닛(126)은 데이터값이 추론인지 여부(예를 들어, 만일 로드 동작이 연산되지않은 주소를 갖는 저장 동작을 전달하도록 허용된다면, 결과 데이터값이 추론일 것임)를 표시하기 위해 데이터값과 관련된 추론 상태 표시를 세팅하도록 될 수 있다. 유사하게는, 저장 위치(예를 들어, 레지스터 파일(116) 내의)가 동작 결과를 저장하도록 할당될 때에, 저장 위치 내의 추론 상태 표시는 만일 임의의 동작의 오퍼랜드가 추론이거나 만일 동작 자체가 추론이라면 세팅될 수 있다. 예를 들어, 만일 저장 위치가 로드 동작을 위한 결과를 위해 할당된다면, 로드 동작의 결과를 위한 추론 상태 표시가 세팅될 것이며, 이는 로드가 데이터 캐쉬(128)에서 미싱(missing)되거나 연산되지않은 주소를 갖는 저장 동작을 전달할 수 있기 때문이다. 만일 레지스터 맵(134)이 추론 레지스터 상태를 추적하도록 사용된다면, 동일한 논리 레지스터에 맵핑되는 레지스터 파일(116)의 물리적 레지스터는 다른 추론 상태 표시를 가질 수 있다.
동작은, 만일 데이터 그리고/또는 값 예측이 스케쥴러(118)에 디스패칭되기 이전에 동작에서 수행된다면, 추론이 될 수 있다. 예를 들어, 일부 동작은 동일한 결과를 발생하는 경향이 있다. 이 결과는 검색 테이블에 저장될 수 있다. 이들 동작 중 하나가 디스패치 유닛(104)에서 처리될 때에, 그 결과는 검색 테이블로부터 추론으로 발생되고, 동작의 결과를 저장하도록 할당된 레지스터 파일(116) 내의 레 지스터(또는 재정렬 버퍼 내의 저장 위치)에 저장될 수 있다. 결과가 추론이기 때문에, 결과를 위한 추론 상태 표시는 또한 결과가 추론임을 표시하도록 세팅될 수 있다. 동작이 실행될 때에, 동작의 실제 결과는 추론이 정확하였는지를 결정하기 위해 추론 결과에 비교될 수 있다. 만일 추론이 부정확하다면, 추론 결과는 실제 결과로 (예를 들어, 결과 버스 상에 실제 결과를 방송함으로써) 대체될 수 있으며, 이미 실행되었으며 그 결과가 추론 결과로부터 연산된 임의의 동작은 실제 결과를 사용하여 재발행될 수 있다. 만일 추론이 정확하다면, 그 결과가 더 이상 추론이 아니라는 표시가 스케쥴러(118) 및 레지스터 파일(116)에 제공될 수 있다. 각 스케쥴러(118)는, 하기에서 설명될 바와같이 어느 동작이 재발행되는지를 추적하고, 동작이 스케쥴러로부터 제거되는 때를 결정하기 위하여, 각 동작에 대한 하나 이상의 추론 상태 표시를 유지할 수 있다. 각 스케쥴러(118)는, 동작 그리고/또는 오퍼랜드가 동작 또는 오퍼랜드 상에서 수행된 추론이 정확하게 해결되었는지의 표시에 응답하여 더 이상 추론이 아님을 표시하도록, 추론 상태 표시를 갱신할 수 있다.
도 2 - 스케쥴러
도 2는 동작을 재발행하도록 된 스케쥴러(118)의 일 실시예를 도시한다. 스케쥴러(118)는 스케쥴러 제어 유닛(304)과 동작 저장소(302)를 포함한다. 스케쥴러 제어 유닛(304)은 동작을 위한 엔트리를 할당하고 해제하기 위하여 동작 저장소(302)를 제어할 수 있다. 스케쥴러 제어 유닛(304)은 동작이 디스패치 유닛(104)에 의해 스케쥴러에 디스패칭될 때에 동작을 위해 동작 저장소(302)에 엔트리(320)를 할당할 수 있다. 엔트리(320)는 동작상에서 수행된 임의의 추론 또는 임의의 동작 오퍼랜드가 해결되고, 추론 결과(예를 들어, 추론의 성공 또는 실패)가 임의의 종속하는 동작(예를 들어, 오퍼랜드 값이 동작의 결과로서 발생되는 동작)으로 포워딩될 때까지 동작에 할당되어 남을 수 있다.
일부 실시예에서, 스케쥴러(118)는 프로세서(100)의 몇개의 스케쥴러(118) 중 하나일 수 있다. 이 실시예에서, 각 스케쥴러(118)는 동작을 발행하기 위해 다른 실행 코어(124)에 연결될 수 있다. 스케쥴러(118) 각각은 발행된 동작의 결과(예를 들어, 하기에서 더 상세히 논의될 결과 포워딩 그리고/또는 성공 포워딩)를 식별하는, 그 위의 태그가 스케쥴러 사이에서 전달될 수 있는 하나 이상의 태그 버스의 세트에 연결될 수 있다.
동작 저장소(302)의 각 엔트리는 몇개의 필드를 포함할 수 있다. 도 2에 도시된 예시적인 엔트리(320)는 복호화된 동작을 저장하는 동작 필드(322), 동작 자체가 추론인지를 표시하는 동작 추론 상태 필드(324), 및 동작의 오퍼랜드 각각을 위한 몇개의 필드 그룹(326 내지 330)을 포함한다. 본 예에서, 두개의 오퍼랜드(오퍼랜드1 및 오퍼랜드2) 각각에 대한 오퍼랜드 필드의 세트가 있다. 오퍼랜드1의 필드는 326A 및 330A이며, 오퍼랜드2의 필드는 326B 및 330B이다. 각 오퍼랜드를 위한 필드는 오퍼랜드의 태그를 저장하는 태그 필드(326) 및 오퍼랜드의 값이 추론인(또는 일 것인)지를 표시하는 소스 추론 필드(330)를 포함한다. 소스 추론 상태 필드(330) 각각은, 만일 대응하는 오퍼랜드 값이 추론이면 세팅되고 그렇지 않으면 클리어되는 추론 상태 비트와 같은 소스 추론 상태 표시를 저장한다. 많은 실시예들에서 몇 개의 부가적인 오퍼랜드 각각에 대해 오퍼랜드 필드 세트가 포함될 수 있으며 유의해야 한다. 예를 들어, 일 실시예에서, 각 엔트리(320)는 5개의 오퍼랜드(예를 들어, 3개의 레지스터 소스 및 2개의 플래그 소스)에 대한 오퍼랜드 필드용 저장소를 포함할 수 있다. 각 스케쥴러 엔트리(320)는 각 오퍼랜드를 위한 소스 추론 상태 표시를 포함할 수 있다.
일부 실시예에서, 스케쥴러 엔트리(320)는 만일 오퍼랜드 값이 스케쥴러(118)로부터 실행 코어(124)로 제공된다면 각 오퍼랜드에 대한 오퍼랜드 값을 저장하는 값 필드를 포함할 수 있다. 이 실시예에서, 오퍼랜드 값은, 만일 오퍼랜드 값이 이미 이용가능하다면(예를 들어, 레지스터 파일(116) 또는 재정렬 버퍼) 동작이 디스패칭될 때에 또는 오퍼랜드 값이 이용가능할 때에(예를 들어, 결과 버스(130) 상에서), 동작의 엔트리(320)로 저장될 수 있다. 다른 실시예들이 각 스케쥴러 엔트리(320)에 이 값 필드를 포함하지 않을 수 있음을 유의해야 한다.
동작의 오퍼랜드를 식별하는 태그는 디스패치 시간에 동작의 엔트리(320)에 저장될 수 있다. 만일 오퍼랜드 값이 아직 이용가능하지 않다면, 각 오퍼랜드의 태그는 계류중인 동작의 결과로서 발생될 때에 오퍼랜드 값을 식별하는데 사용될 수 있다. 예를 들어, 오퍼랜드 값을 발생하는 동작이 실행 코어(124)로 발행될 때에, 그것을 발행하는 스케쥴러(118)는 태그 버스(340) 상에 오퍼랜드의 태그를 출력할 수 있다. 스케쥴러 제어 유닛(304)은 태그 버스(340) 상의 태그를 동작 저장소(302) 내에 할당된 엔트리의 오퍼랜드 태그에 비교할 수 있다. 만일 태그 버스(340)상의 태그가 오퍼랜드 태그에 부합한다면, 스케쥴러 제어 유닛(304)은 이 태그에 의해 식별된 오퍼랜드 값이 일정 횟수의 사이클 이후에 결과 버스(130) 상에서 이용가능한지를 결정할 수 있다.
만일 소스 추론 상태 표시(330)는 동작이 스케쥴러(118)로 디스패칭될 때에 동작 저장소(302)의 동작 엔트리(320)에 저장될 수 있다. 만일 추론 상태 표시가 레지스터 또는 오퍼랜드 값을 유지하도록 할당된 다른 저장 위치에 세팅된다면(또는 레지스터 맵에서 식별된 특정 레지스터와 관련된 추론 표시가 세팅된다면), 이 오퍼랜드를 위한 소스 추론 상태 표시는 동작의 엔트리(320)에서 세팅된다. 유사하게는, 만일 임의의 데이터 또는 값 추론이 동작 자체 상에서 수행되었다면, 동작 추론 상태 표시(324)는 세팅될 수 있다(예를 들어, 디스패치 유닛(104)는 관련 동작이 디스패칭될 때에 동작 상태 표시를 스케쥴러(118)에 제공할 수 있다).
동작이 스케쥴러(118)에 디스패칭될 때에, 디스패치 유닛(104)은 동작 결과를 저장하기 위해 레지스터 또는 저장 위치를 할당할 수 있다. 만일 임의의 동작의 소스 상태 표시(330)가 세팅되어야 한다면, 또는 동작 상태 표시(324)가 세팅되어야 한다면, 레지스터 또는 동작 결과를 위해 할당된 저장 위치와 관련된 추론 상태 표시가 또한 세팅될 수 있다. 다양한 결과 저장 위치와 관련된 추론 상태 표시는 재정렬 버퍼, 레지스터 파일, 그리고/또는 레지스터 맵에 저장될 수 있다. 추론 상태 표시는 종속하는 체인의 전체에 각 오퍼랜드의 추론 상태를 전파하는데 사용될 수 있다.
스케쥴러 제어 유닛(304)은 실행을 위해 실행 코어(124)에 발행할 동작 저장소(302)의 엔트리에 저장된 동작을 선택할 수 있다. 스케쥴러 제어 유닛(304)은 태그 버스(340) 상의 태그에 의해 표시된 바와같이 오퍼랜드 값이 (예를 들어, 레지스터 파일(116)에서) 이용가능하거나 오퍼랜드 값이 일정 횟수의 사이클 내에서 결과 버스(130) 상에서 이용가능하게 될 수 있는 동작을 선택할 수 있다. 동작은 동작의 이용가능성, (가령 있다면) 상대적인 나이(예를 들어, 우선순위가 장기간 발행되도록 기다린 동작 그리고/또는 프로그램 순서에서 초기에 발생한 동작에 제공될 수 있음)에 기초하여 선택될 수 있다. 각 엔트리는 엔트리가 발행될 준비가 되었는지를 표시하는 관련된 준비 표시를 가질 수 있다. 많은 실시예에서, 자체로 추론이 아니며, 어떤 추론 오퍼랜드 값을 갖지 않는 동작이 추론 동작 및 추론 오퍼랜드 값을 갖는 동작에 대하여 우선될 수 있다.
스케쥴러 제어 유닛(304)은 동작 추론 상태 표시 및 소스 추론 상태 표시가 클리어된 실행된 동작에 할당된 엔트리를 해제할 수 있다. 그러나, 추론 동작 그리고/또는 오퍼랜드가 추론값을 갖는 동작에 할당된 엔트리는 동작이 실행될 때에 해제되지 않는다. 엔트리를 동작 저장소(302)에 할당된 채로 유지하는 것은 만일 추론이 부정확한 것으로 판명된 경우에 스케쥴러 제어 유닛(304)으로 하여금 동작을 재발행하도록 허용한다. 추론 동작에 종속하는 동작이 소스 추론 상태 표시(330)를 세팅함으로써 스케쥴러 내에서 명백히 식별되기 때문에, 종속하는 동작에 할당된 엔트리는 또한 동작 저장소(302)내에 유지될 수 있다. 이는 종속 체인 내에 있는 동작이 검출되는 부정확한 추론에 응답하여 재연되도록 허용한다.
스케쥴러 제어 유닛(304)은 추론이 해결될 때에 동작 저장소(302)의 각 엔트리(320)의 동작 추론 상태 표시(324) 및 소스 추론 상태 표시(330)를 갱신한다(예를 들어, 추론이 정확하게 해결할 때마다 적절한 소스 상태 표시(330) 그리고/또는 동작 상태 표시(324)를 클리어함으로써). 이런 방식으로, 엔트리(320)는 소스 상태 표시(330) 및 동작 상태 표시(324)가 엔트리의 동작이 재발행하지 않을 것을 표시할 때에(예를 들어, 소스 상태 표시 및 동작 상태 표시가 클리어될 때에) 해제된다. 동작에 대한 추론이 해결될 때에, 스케쥴러 제어 유닛(304)은 이 동작에 대한 동작 상태 표시를 클리어할 수 있다. 스케쥴러 제어 유닛(304)은 추론 상태 표시를 갱신하기 위한 수단의 예이다.
만약 동작을 위한 동작 추론 상태 표시(324) 및 소스 추론 상태 표시(330)가 클리어된다면, 스케쥴러 제어 유닛(304)은 발행된 동작을 재선택할 수 있는데, 왜냐하면, 이는 그 동작 및 그 오퍼랜드에 대한 임의의 데이터 및 값 추론이 정확하게 해결되었음을 나타내기 때문이다. 일단 동작을 위한 추론이 정확하게 해결된다면, 동작의 결과는 이제 더 이상 추론이 아니다. 스케쥴러 제어 유닛(304)은, 이 동작 결과의 성공을 종속 동작으로 포워딩하기 위해, 상기 발행된 동작을 재선택하는데, 이는 동일 스케쥴러(18) 내의 동작 저장소(302)에 저장될 수 있거나 또는 마이크로프로세서 내의 다른 스케쥴러에 저장될 수 있다. 동작의 추론 결과가 성공(즉, 추론이 아님)이라는 표시를 수신하는 것에 응답하여, 스케쥴러 제어 유닛(304)은 결과 오퍼랜드가 이제 더 이상 추론이 아님을 표시하기 위해 이 동작에 의해 발생된 결과 오퍼랜드에 대한 동작 저장소(302)의 소스 추론 상태 표시를 갱신할 수 있다.
동작의 결과의 성공은 일부 실시예에서 결과 포워딩을 위해 사용된 태그 버스(tag bus)들을 사용하여 포워딩될 수 있다. 예를 들어, 스케쥴러 제어 유닛(304)이 추론 및/또는 오퍼랜드 값 추론이 해결된 발행된 동작을 선택할 때에, 이 동작의 결과에 대응하는 태그는, 태그가 이 동작에 의해 생성된 오퍼랜드에 대한 소스 추론 상태 표시(330)를 클리어하기 위해 출력되는 지의 표시와 함께 태그 버스(340) 상에 출력될 수 있다. 결과 포워딩 동안에 어떤 동작의 오퍼랜드 값이 생성되고 있는지를 결정하는 (예를 들어, 스케쥴러 제어 유닛(304) 내에서의) 동일 태그 비교기는 일부 실시예에서 성공 포워딩 동안 사용될 수 있다. 그 성공이 포워딩되는 동작은 성공 포워딩의 결과로서 재실행될 수 없으며, 따라서 성공적인 결과를 포위딩하는 대기시간(latency)은 결과 포워딩시에 발생하는 대기시간(동작의 실행 대기시간에 의존함)보다 더 작을 수 있다. 성공 포워딩은 또한 동작의 결과를 저장하도록 할당된 저장 위치 혹은 레지스터와 관련된 (예를 들어, 레지스터 파일, 재정렬 버퍼, 또는 레지스터 맵에 저장된) 추론 상태 표시를 클리어할 수 있어, 후속적으로 디스패칭된 동작은 동작의 결과가 추론이 아님을 인식하게 된다.
대안적인 실시예에서, 태그 버스 및 태그 비교기의 개별 세트는 (결과 포워딩을 위해 사용된 동일한 태그 버스를 사용하는 대신에) 성공 포워딩을 위해 사용될 수 있다. 태그 버스 및 태그 비교기의 개별 세트가 성공 포워딩을 위해 사용된 실시예에서, 스케쥴러(18)는 다른 동작이 성공 포워딩을 위해 선택된 동일한 선택 사이클 동안에 실행을 위한 동작을 선택할 수 있다.
동일 태그 버스(340)가 결과 포워딩 및 성공 포워딩을 위해 사용된 실시예에서, 스케쥴러 제어 유닛(304)은 동작 저장소(302)로부터 동작을 선택할 때에 발행되지 않은 동작에 우선순위를 부여할 수 있다. 예를 들어, 스케쥴러 제어 유닛(304)은 발행되지않은 선택되도록 준비된 동작이 없을 때에 성공 포워딩을 위해 이미-발행된 동작을 선택할 수 있다. 동작이 성공 포워딩을 위해 선택될 때에, 그 엔트리는 해제될 수 있다(즉, 동작은 스케쥴러로부터 제거될 수 있다). 다른 실시예에서, 동작은 그 성공이 포워딩된 이후의 시간에 스케쥴러로부터 제거될 수 있다. 이러한 실시예에서, 각 엔트리는 엔트리가 이미 자신의 성공이 포워딩되도록 선택되었고, 이에 따라 동일한 동작이 한번 이상으로 성공 포워딩을 위해 선택되지 않게 됨을 표시하는 관련 성공-포워딩된 표시를 가질 수 있다.
스케쥴러 제어 유닛(304)은 또한 로드 동작을 만족하기 위해 로드/저장 유닛 (126)에 의한 데이터 값 출력과 관련된 추론 상태 표시를 검출하도록 될 수 있다. 스케쥴러 제어 유닛(304)은 로드 동작에 종속하는 동작을 위한 소스 추론 상태 표시(330)를 갱신하기 위해 이 추론 상태 표시를 사용할 수 있다. 만일 로드 동작을 위한 임의의 추론이 정확하게 해결되지 않는다면, 종속하는 동작은 정확한 데이터 값으로 재발행될 수 있다. (예를 들어, 재정렬 버퍼, 레지스터 파일, 또는 레지스터 맵에 저장된) 데이터 값을 저장하기 위해 할당된 레지스터 그리고/또는 저장 위치와 관련된 추론 상태 표시는 또한 로드/저장 유닛(126)에 의한 데이터 출력과 관련된 추론 상태 표시에 응답하여 갱신될 수 있다.
추론이거나 추론 오퍼랜드 값을 갖는 브랜치 명령에 대한 추론이 해결될 때에, 성공 포워딩은 성공 표시를 브랜치 예측 유닛(132)에 제공하는 스케쥴러(118)를 포함할 수 있다. 일부 실시예에서, 브랜치 명령의 추론 결과는 브랜치 예측 유닛에 포워딩될 수 있다. 브랜치 예측 유닛(132)은 일부 실시예에서 브랜치 명령의 추론 결과에 기초하여 프리페치 유닛(108)을 리디렉트하고 프로세싱 파이프라인을 플러시할 수 있다. 다른 실시예에서, 브랜치 예측 유닛(132)은 브랜치 명령 결과가 비-추론이 될 때까지 프리페치 유닛(108)을 리디렉트하는 것과 프로세싱 파이프라인을 플러시하는 것을 지연시킬 수 있다. 따라서, 브랜치 예측 유닛(132)은 만일 필요하다면 프리페치 유닛(108)의 리디렉팅 및 프로세싱 파이프라인의 플러싱 이전에 브랜치 명령을 포함하는 추론이 성공할 때까지 기다릴 수 있다. 브랜치 명령에 대한 추론 성공은 스케쥴러 제어 유닛(304)이 일부 실시예에서 성공 포워딩을 위한 브랜치 명령을 선택할 때에 포워딩 될 수 있다. 다른 실시예에서, 브랜치 예측 유닛(132)은, 브랜치 명령이 성공 포워딩을 위해 스케쥴러 제어 유닛(304)에 의해 선택되는 것을 기다리지 않고도 브랜치에 대한 소스 추론 상태 표시 그리고/또는 동작 추론 상태 표시가 클리어되자마자, 브랜치 명령의 결과를 사용하도록 될 수 있다. 따라서, 일부 실시예에서, 브랜치 리디렉션은 브랜치 명령이 성공적으로 해결되자마자 발생할 수 있다.
만일 동작 그리고/또는 동작의 오퍼랜드 값에 대한 추론이 동작이 발행되기 이전에 정확하게 해결된다면, 이 동작에 대한 동작 추론 상태 표시(324) 및 소스 추론 상태 표시(330)는 동작이 스케쥴러 제어 유닛(304)에 의해 선택되고 기능 유닛(212)에 발행될 때에 클리어될 수 있다. 따라서, 기능 유닛(212)에 의해 발생된 데이터는 동작 결과가 추론이 아닌 관련 표시(예를 들어, 태그 버스 상의 출력 또는 데이터 자체에 포함된 것)를 가질 수 있다. 이 표시는 스케쥴러 제어 유닛(304)에 의해 수신되며 종속 동작에 할당된 엔트리의 소스 추론 상태 표시를 갱신하기 위해 사용될 수 있다. 기능 유닛(212)에 의한 데이터 출력과 관련된 표시는 또한 (예를 들어, 레지스터 파일, 재정렬 버퍼, 또는 레지스터 맵에 저장된) 동작 결과를 저장하기 위해 할당된 레지스터 또는 저장 위치와 관련된 추론 상태 표시를 갱신하기 위해 사용될 수 있다.
일부 실시예에서, 추론 동작 및 오퍼랜드의 추적 및 데이터 값의 추론 상태를 종속 동작으로의 전파는 동작으로 하여금 이들이 스케쥴러에서 최고의 리타이어링 되지않은 동작이 되기 이전에 스케쥴러로부터 제거되도록 허용할 수 있다. 이는 스케쥴러(118)의 엔트리들로 하여금 이들이 이와 달리 할당되게하기 보다는 차라리 새로운 동작으로 할당되도록 허용할 수 있다.
도 3은 데이터 및 값 추론을 지원하는 마이크로프로세서를 동작시키는 방법의 일 실시예를 도시한다. 350에서, 스케쥴러의 엔트리가 임의 동작에 할당된다. 만일 동작 자체가 추론이면, 동작 추론 상태 표시는 352에 표시된 바와 같이 세팅된다. 마찬가지로, 엔트리의 소스 추론 상태 표시는 352에 표시된 바와 같이 추론 값을 갖는 임의의 오퍼랜드들에 대해 세팅될 수 있다. 만일 동작 또는 오퍼랜드 값에 대한 추론이 정확하게 해결되었다는 표시를 수신한다면, 적절한 동작 추론 상태 표시 또는 소스 추론 상태 표시가 354 내지 356에 도시된 바와 같이 클리어될 수 있다. 이 표시는 포워딩되는 이전 동작의 성공의 결과로서 수신될 수 있다. 만일 모든 소스 추론 상태 표시 및 동작 추론 상태 표시가 모든 추론이 정확하게 해결되었음을 표시하기 위해 클리어된다면, 동작의 결과가 추론이 아니라는 표시가 358 내지 360에 표시된 바와 같이 포워딩될 수 있다. 이 표시는 스케쥴러가 종속 동작에 대한 소스 추론 상태 표시를 갱신하도록 할 수 있으며, 이에 따라 종속 체인(dependency chain)을 통해 추론의 성공을 전파한다. 또한, 스케쥴러 내에서의 동작의 엔트리는, 362에 표시된 바와 같이 엔트리가 새로운 동작으로 재할당(reallocate)될 수 있도록 해제(deallocate)될 수 있다.
도 4 - 컴퓨터 시스템
도 4는 버스 브릿지(402)를 통해 다양한 시스템 구성요소에 연결된 프로세서(100)를 포함하는 컴퓨터 시스템(400)의 일 실시예의 블록도를 도시한다. 프로세서(100)는 상술된 바와같이 스케쥴러(118)의 실시예를 포함한다. 컴퓨터 시스템의 다른 실시예가 가능하며 고려된다. 도시된 시스템에서, 메인 메모리(200)는 메모리 버스(406)를 통해 버스 브릿지(402)에 연결되며, 그래픽 제어기(408)가 AGP 버스(410)를 통해 버스 브릿지(402)에 연결된다. 몇개의 PCI 디바이스(412A 내지 412B)가 PCI 버스(414)를 통해 버스 브릿지(402)에 연결된다. 또한, 2차 버스 브릿지(secondary bus bridge)(416)가 EISA/ISA 버스(420)를 통해 하나 이상의 EISA 또는 ISA 디바이스(418)로의 전기 인터페이스를 용이하게 하도록 제공될 수 있다. 본 예에서, 프로세서(100)는 CPU 버스(424)를 통해 버스 브릿지(402)에, 그리고 선택적인 L2 캐쉬(428)에 연결된다. 일부 실시예에서, 프로세서(100)는 집적된 L2 캐쉬(미도시)를 포함할 수 있다.
버스 브릿지(402)는 프로세서(100), 메인 메모리(200), 그래픽 제어기(408), 및 PCI 버스(414)에 부착된 디바이스들 사이에 인터페이스를 제공한다. 동작이 버스 브릿지(402)에 연결된 디바이스들 중 하나로부터 수신될 때에, 버스 브릿지(402)는 동작의 타겟(예를 들어, 특정 디바이스, PCI 버스(414)의 경우에 타겟은 PCI 버스(414) 상에 있음)을 식별한다. 버스 브릿지(402)는 동작을 타겟 디바이스에 라우팅한다. 버스 브릿지(402)는 일반적으로 동작을 소스 디바이스 또는 버스에 의해 사용된 프로토콜로부터 타겟 디바이스 또는 버스에 의해 사용된 프로토콜로 변환한다.
PCI 버스(414)에 대한 ISA/EISA 버스로의 인터페이스를 제공하는 것에 부가하여, 2차 버스 브릿지(416)는 추가적인 기능을 포함할 수 있다. 2차 버스 브릿지(416)로부터 외부에 있거나 또는 2차 버스 브릿지(416)와 통합된 입력/출력 제어기(미도시)는 또한 키보드 및 마우스(422), 그리고 다양한 직렬 및 병렬 포트에 동작 지원을 제공하기 위해 컴퓨터 시스템(400) 내에 포함될 수 있다. 외부 캐쉬 유닛(미도시)은 또한 다른 실시예에서 프로세서(100)와 버스 브릿지(402) 사이의 CPU 버스(424)에 연결될 수 있다. 대안적으로, 외부 캐쉬는 버스 브릿지(402)에 연결될 수 있으며, 외부 캐쉬를 위한 캐쉬 제어 논리는 버스 브릿지(402)에 통합될 수 있다. L2 캐쉬(428)는 프로세서(100)로의 후방 구성에서 도시된다. L2 캐쉬(428)는 프로세서(100)와 별개이며, 프로세서(100)와 함께 카트리지(예를 들어, 슬롯 1 또는 슬롯 A)에 통합되며, 또는 심지어 프로세서(100)와 함께 반도체 기판 상에 통합될 수 있다.
메인 메모리(200)는 응용 프로그램이 저장되고, 프로세서(100)가 주로 이로부터 실행되는 메모리이다. 적합한 메인 메모리(200)는 DRAM(다이내믹 랜덤 액세스 메모리)를 포함할 수 있다. 예를 들어, 복수의 뱅크의 SDRAM(동기화된 DRAM), 또는 램버스 DRAM(RDRAM)이 적합할 수 있다.
PCI 디바이스들(412A,412B)은 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드와 같은 다양한 주변 장치의 예시 이다. 유사하게는, ISA 디바이스(418)는 모뎀, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드와 같은 다양한 데이터 획득 카드와 같은 다양한 종류의 주변 디바이스의 예시이다.
그래픽 제어기(408)가 디스플레이(426)상에서 텍스트 및 이미지의 렌더링(rendering)을 제어하기 위해 제공된다. 그래픽 제어기(408)는 메인 메모리(404)내로 그리고 이로부터 효율적으로 이동될 수 있는 3차원 데이터 구조를 렌더링하기 위해 종래 기술에 일반적으로 알려진 전형적인 그래픽 가속기를 구체화할 수 있다. 따라서, 그래픽 제어기(408)는, 버스 브릿지(402)내의 타겟 인터페이스로의 액세스를 요구하고 수신할 수 있으며 이에 따라 메인 메모리(404)로의 액세스를 획득하게 된다는 점에서, AGP 버스(410)의 마스터가 될 수 있다. 전용 그래픽 버스는 메인 메모리(404)로부터의 고속 데이터 검색을 용이하게 한다. 특정 동작에 대해, 그래픽 제어기(408)는 추가적으로 AGP 버스(410) 상에서 PCI 프로토콜 트랜잭션을 발생하도록 될 수 있다. 버스 브릿지(402)의 AGP 인터페이스는 이에 따라 PCI 프로토콜 타겟 및 개시자 트랜잭션 뿐만 아니라 AGP 프로토콜 트랜잭션들 모두를 지원하는 기능을 포함할 수 있다. 디스플레이(426)는 이미지 또는 텍스트가 제시될 수 있는 임의의 전자 디스플레이가 될 수 있다. 적합한 디스플레이(426)는 음극선관("CRT"), 액정 디스플레이("LCD") 등을 포함한다.
AGP, PCI, 및 ISA 또는 EISA 버스가 상기 상세한 설명에서 예로서 사용되었지만, 임의의 버스 아키텍처가 바람직한 것으로서 대체될 수 있음에 유의해야 한다. 컴퓨터 시스템(400)은 부가적인 프로세서(예를 들어, 컴퓨터 시스템(400)의 선택적인 구성요소로서 도시된 프로세서(100a))를 포함하는 멀티프로세싱 컴퓨터 시스템이 될 수 있음을 더 유의해야 한다. 프로세서(100a)는 프로세서(100)에 유사할 수 있다. 특히, 프로세서(100a)는 프로세서(100)의 동일한 복제물일 수 있다. 프로세서(100a)는 (도 5에 도시된 바와같은)개별 버스를 통해 버스 브릿지(402)에 연결되거나 프로세서(100)와 CPU 버스(224)를 공유할 수 있다. 더욱이, 프로세서(100a)는 L2 캐쉬(428)에 유사한 선택 L2 캐쉬(428a)에 연결될 수 있다.
도 5 - 다중-노드 프로세싱 시스템
도 5를 참조하면, 상술된 바와같이 재발행가능한 스케쥴러를 갖는 프로세서(100)을 포함하는 컴퓨터 시스템(400)의 다른 실시예가 도시된다. 다른 실시예가 가능하며 예상된다. 도 5의 다른 실시예에서, 컴퓨터 시스템(400)은 몇개의 프로세싱 노드(512A,512B,512C,및 512D)를 포함한다. 각 프로세싱 노드는 각 프로세싱 노드(512A 내지 512D) 내에 포함된 메모리 제어기(516A 내지 516D)를 통해 각 메모리(514A 내지 514D)에 연결된다. 부가적으로, 프로세싱 노드(512A 내지 512D)는 프로세싱 노드들(512A 내지 512D) 사이에서 통신하도록 사용된 인터페이스 논리를 포함한다. 예를 들어, 프로세싱 노드(512A)는 프로세싱 노드(512B)와 통신하기 위한 인터페이스 논리(518A), 프로세싱 노드(512C)와 통신하기 위한 인터페이스 논리(518B), 또 다른 프로세싱 노드(미도시)와 통신하기 위한 제 3 인터페이스 논리(518C)를 포함한다. 유사하게는, 프로세싱 노드(512B)는 인터페이스 논리(518D, 518E 및 518F)를 포함하며, 프로세싱 노드(512C)는 인터페이스 논리(518G, 518H 및 518I)를 포함하며, 그리고 프로세싱 노드(512D)는 인터페이스 논리(518J, 518K 및 518L)를 포함한다. 프로세싱 노드(512D)는 인터페이스 논리(518L)을 통해 복수의 입/출력 디바이스들(예를 들어, 데이지 체인 구성에서의 디바이스들(520A 및 520B)와 통신하도록 연결된다. 다른 프로세싱 노드는 유사한 방식으로 다른 I/O 디바이스와 통신할 수 있다.
프로세싱 노드(512A 내지 512D)는 프로세싱 노드 간의 통신을 위한 패킷-기반 링크를 구현한다. 본 실시예에서, 링크는 단방향성 라인 세트로서 구현된다 (예를 들어, 라인(524A)은 프로세싱 노드(512A)로부터 프로세싱 노드(512B)로 패킷을 전송하도록 사용되며, 라인(524B)은 프로세싱 노드(512B)로부터 프로세싱 노드(512A)로 패킷을 전송하도록 사용된다). 다른 세트의 라인(524C 내지 524H)은 도 5에 도시된 바와같이 다른 프로세싱 노드들 사이에서 패킷을 전송하도록 사용된다. 일반적으로, 각 세트의 라인(524)은 하나 이상의 데이터 라인, 데이터 라인에 대응하는 하나 이상의 클록 라인, 그리고 전달되는 패킷의 종류를 표시하는 하나 이상의 제어 라인을 포함할 수 있다. 링크는 프로세싱 노드들 사이에서 통신을 위해 캐쉬 코히어런트 방식 또는 프로세싱 노드와 I/O 디바이스(또는 PCI 버스 또는 ISA 버스와 같은 종래 구성의 I/O 버스로의 버스 브릿지) 사이에서 통신을 위해 비-코히어런트 방식으로 동작될 수 있다. 더욱이, 링크는 도시된 바와같이 I/O 디바이스들 간의 데이지-체인 구조를 사용한 비-코히어런트 방식으로 동작할 수 있다. 하나의 프로세싱 노드로부터 또 다른 하나의 프로세싱 노드로 전송될 패킷은 하나 이상의 중개 노드를 통해 전달할 수 있음을 주목해야 한다. 예를 들어, 프로세싱 노드(512A)에 의해 프로세싱 노드(512D)로 전송된 패킷은 도 5에 도시된 바와같이 프로세싱 노드(512B) 또는 프로세싱 노드(512C)를 통해 전달될 수 있다. 임의의 적합한 라우팅 알고리즘이 사용될 수 있다. 컴퓨터 시스템(400)의 다른 실시예는 도 5에 도시된 실시예보다 많거나 적은 프로세싱 노드를 포함할 수 있다.
일반적으로, 패킷은 노드들 사이의 라인(524)상에서 한번 이상의 비트 타임으로 전송될 수 있다. 임의의 비트 타임은 대응하는 클록 라인상의 클록 신호의 상승 또는 하강 에지일 수 있다. 패킷은 트랜잭션의 초기화를 위한 명령 패킷, 캐쉬 코히어런시를 위한 프로브 패킷, 및 프로브 및 명령에 응답하기 위한 응답 패킷을 포함할 수 있다.
메모리 제어기 및 인터페이스 논리에 부가하여 프로세싱 노드들(512A 내지 512D)은 하나 이상의 프로세서를 포함할 수 있다. 넓은 의미에서, 프로세싱 노드는 적어도 하나의 프로세서를 포함하고, 선택적으로 필요에 따라 메모리 및 다른 논리와의 통신을 위한 메모리 제어기를 포함할 수 있다. 특히, 각 프로세싱 노드(512A 내지 512D)는 하나 이상의 프로세서(100)의 복제물을 포함할 수 있다. 외부 인터페이스 유닛(18)은 메모리 제어기(516) 뿐만 아니라 노드 내에 인터페이스 논리(518)를 포함할 수 있다.
메모리(514A 내지 514D)는 임의의 적합한 메모리 디바이스를 포함할 수 있다. 예를 들어, 메모리(514A 내지 514D)는 하나 이상의 RAMBUS DRAM(RDRAM), 동기된 DRAM(SDRAM), 스태틱 RAM 등을 포함할 수 있다. 컴퓨터 시스템(400)의 주소 공간은 메모리(514A 내지 514D) 사이에서 분할된다. 각 프로세싱 노드(512A 내지 512D)는 어느 주소가 어느 메모리(514A 내지 514D)에 맵핑되는지, 및 이에 따라 특정 주소에 대한 메모리 요구가 어느 프로세싱 노드(512A 내지 512D)에 라우팅되는지를 결정하는데 사용되는 메모리 맵을 포함할 수 있다. 일 실시예에서, 컴퓨터 시스템(400) 내의 주소에 대한 코히어런시 포인트는 주소에 대응하는 바이트를 저장하는 메모리에 연결된 메모리 제어기(516A 내지 516D)이다. 바꾸어 말하면, 메모리 제어기(516A 내지 516D)는 대응하는 메모리(514A 내지 514D)로의 각 메모리 액세스가 캐쉬 코히어런트 방식으로 발생함을 보장할 책임이 있다. 메모리 제어기(516A 내지 516D)는 메모리(514A 내지 514D)로의 인터페이싱을 위한 제어 회로를 포함할 수 있다. 부가적으로, 메모리 제어기(516A 내지 516D)는 메모리 요구의 큐잉을 위한 요구 큐(request queues)를 포함할 수 있다.
인터페이스 논리(518A 내지 518L)는 링크로부터 패킷을 수신하고, 버퍼링 패킷을 링크 상으로 전송하기 위한 다양한 버퍼를 포함할 수 있다. 컴퓨터 시스템(400)은 패킷을 전송하기 위한 임의의 적합한 흐름 제어를 이용할 수 있다. 예를 들어, 일 실시예에서, 각 인터페이스 논리(518)는 인터페이스 논리가 연결된 링크의 다른 단에서 수신기 내에 각 종류의 버퍼의 수의 카운트를 저장한다. 인터페이스 논리는 만일 수신 인터페이스 논리가 패킷을 저장하기 위한 프리 버퍼를 갖지 않는다면 패킷을 전송하지 않는다. 수신 버퍼가 패킷을 전방으로 라우팅함으로써 프리가 된 때에, 수신 인터페이스 논리는 버퍼가 프리되었음을 표시하기 위해 메시지를 송신 인터페이스 논리로 전송한다. 이 메커니즘은 "쿠폰-기반의" 시스템으로서 언급될 수 있다.
I/O 디바이스들(520A 및 520B)은 모든 적합한 I/O 디바이스가 될 수 있다. 예를 들어, I/O 디바이스들(520A 및 520B)은 디바이스들이 연결될 수 있는 다른 컴퓨터 시스템과 통신하기 위한 디바이스(예를 들어, 네트워크 인터페이스 카드 또는 모뎀)를 포함할 수 있다. 더욱이, I/O 디바이스들(520A 및 520B)은 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드를 포함할 수 있다. 용어 "I/O 디바이스" 및 용어 "주변 디바이스"는 본원에서 동의어로서 의도된다.
본원에서 사용된 바와같이, 용어 "클록 사이클"은 명령 프로세싱 파이프라인의 다양한 스테이지가 태스크를 완료하는 시간 간격을 의미한다. 명령 및 연산된 값은 클록 사이클을 정의하는 클록 신호에 따라 메모리 소자에 의해 포착된다. 예를 들어, 메모리 소자는 클록 신호의 상승 또는 하강 에지에 따라 값을 포착할 수 있다.
상기 논의는 신호가 "어서트(assert)"된 것으로서 설명한다. 신호는, 신호가 특정 정보를 나타내는 값을 전달할 때에, 어서트된 것으로서 정의된다. 특정 신호는 신호가 2진수 값(1)을 전달할 때에, 대안적으로 신호가 2진수 값(0)을 전달할 때에 어서트된 것으로 정의될 수 있다.
수많은 변화 및 변형은 일단 상기 개시가 완전히 이해된다면 기술분야의 당업자에게 자명할 것이다. 하기의 청구항은 이런 모든 변화 및 변형을 포함하여 해석되도록 의도된다.
본 발명은 일반적으로 마이크로프로세서 분야에 응용가능하다.

Claims (10)

  1. 마이크로프로세서(100)에 있어서,
    복수의 실행 유닛들(124)과; 그리고
    동작(operation)들을 발행하기 위해 상기 복수의 실행 유닛들 중 적어도 하나에 연결되는 스케쥴러(118)를 포함하여 구성되며,
    상기 스케쥴러는,
    복수의 엔트리들(320)을 포함하는 동작 저장소(operation storage)(302)와, 여기서 제 1 엔트리가 제 1 동작에 할당되며, 상기 제 1 동작은 하나 또는 그 이상의 오퍼랜드들 상에서 동작하며, 상기 제 1 엔트리는 하나 또는 그 이상의 소스 상태 표시들(330A, 330B)을 포함하며, 각각의 상기 소스 상태 표시는 상기 하나 또는 그 이상의 오퍼랜드들 각각의 값이 추론적(speculative)인지 여부를 표시하며; 그리고
    상기 동작 저장소(302)에 연결된 스케쥴러 제어 유닛(304)을 포함하여 구성되며,
    상기 스케쥴러 제어 유닛(304)은 제 2 동작의 결과의 값이 비-추론적(non-speculative)인지 결정하고, 여기서 상기 제 1 동작은 상기 제 2 동작에 종속되며,
    상기 제 2 동작의 결과의 값이 비-추론적이라는 결정에 응답하여, 상기 스케쥴러 제어 유닛(304)은 상기 제 2 동작에 종속하는 동작들의 체인을 통해 추론 성공의 표시를 전파하고,
    상기 추론 성공의 표시를 전파하기 위해, 상기 스케쥴러 제어 유닛(304)은 상기 하나 또는 그 이상의 오퍼랜드들 각각의 값이 비-추론적임을 표시하도록 상기 제 1 엔트리에 포함된 상기 하나 또는 그 이상의 소스 상태 표시들(330A, 330B) 중 하나를 갱신하는 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서,
    상기 복수의 실행 유닛들 중 제 1 실행 유닛은 상기 제 1 동작의 결과를 발생하기 위하여 상기 제 1 동작을 실행하도록 구성되며, 여기서 상기 제 1 동작의 결과는 결과 표시를 포함하고, 상기 결과 표시는 만일 상기 제 1 엔트리에 포함된 상기 하나 또는 그 이상의 소스 상태 표시들 중 어느 하나가 상기 하나 또는 그 이상의 오퍼랜드들 각각이 추론적임을 표시한다면 상기 제 1 동작의 결과의 값이 추론적임을 표시하는 것을 특징으로 하는 마이크로프로세서.
  3. 제1항에 있어서,
    상기 제 2 동작의 결과에 대응하는 태그는 상기 하나 또는 그 이상의 오퍼랜드들 중 하나에 대응하는 태그와 동일하며, 상기 스케쥴러 제어 유닛은 태그 버스 상의 상기 제 2 동작의 결과에 대응하는 태그를 수신하는 것에 응답하여 상기 제 1 엔트리에 포함된 상기 하나 또는 그 이상의 소스 상태 표시들 중 하나를 갱신하도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  4. 제3항에 있어서,
    상기 스케쥴러 제어 유닛은, 추론 상태 표시들을 갱신하기 위해 상기 제 1 오퍼랜드에 대응하는 태그가 상기 태그 버스 상에 제공된다는 표시를 수신하는 것에 응답하여 상기 하나 또는 그 이상의 소스 상태 표시들 중 하나를 갱신하도록 구성되며, 상기 태그 버스는 또한 결과 포워딩을 위해 사용되는 것을 특징으로 하는 마이크로프로세서.
  5. 제1항에 있어서,
    상기 스케쥴러 제어 유닛은, 만일 상기 제 1 엔트리에 포함된 상기 하나 또는 그 이상의 소스 상태 표시들 각각이 상기 하나 또는 그 이상의 오퍼랜드들 각각의 값이 비-추론적임을 표시한다면, 상기 제 1 동작을 재발행하는 것에 응답하여 상기 제 1 엔트리를 해제하도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  6. 제1항에 있어서,
    상기 스케쥴러에 연결되는 브랜치 예측 유닛과, 그리고 상기 브랜치 예측 유닛에 연결되는 프리페치 유닛을 더 포함하며, 여기서 만일 상기 제 1 동작이 브랜치 동작인 경우에, 상기 브랜치 예측 유닛은, 상기 제 1 엔트리에서의 상기 하나 또는 그 이상의 소스 상태 표시들 각각이 상기 하나 또는 그 이상의 오퍼랜드들 각각의 값이 비-추론적임을 표시할 때까지, 상기 제 1 동작의 결과에 응답하여 상기 프리페치 유닛의 리디렉팅 및 프로세싱 파이프라인의 플러싱 모두를 지연시키도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  7. 제1항에 있어서,
    상기 스케쥴러 제어 유닛은 상기 동작 저장소에서의 상기 복수의 엔트리들 중 하나에 저장된 동작을 선택하여 상기 선택된 동작을 실행을 위해 기능 유닛에 제공하도록 구성되며, 상기 스케쥴러 제어 유닛은 상기 동작 저장소에서의 각각의 엔트리에 포함된 소스 상태 표시들에 의해 표시되는 비-추론적 오퍼랜드들을 갖는 동작들을 우선적으로 선택하도록 구성되는 것을 특징으로 하는 마이크로프로세서.
  8. 제 1 소스 상태 표시(330A)가 제 1 동작에 대한 제 1 오퍼랜드의 값이 추론적임을 표시하는 단계와, 여기서 상기 제 1 오퍼랜드는 제 2 동작의 결과이며;
    상기 제 2 동작의 결과의 값이 추론적이지 않음을 표시하는 제 2 결과 상태 표시를 수신하는 것에 응답하여, 상기 제 2 동작에 종속하는 동작들의 체인을 통해 추론 성공의 표시를 전파하는 단계와, 여기서 상기 추론 성공의 표시를 전파하는 단계는 상기 제 1 오퍼랜드의 값이 추론적이지 않음을 표시하도록 상기 제 1 소스 상태 표시를 갱신하는 것을 포함하고; 그리고
    상기 갱신에 응답하여, 제 1 결과 상태 표시가 상기 제 1 동작의 결과의 값이 추론적이지 않음을 표시하는 단계를 포함하여 구성되는 것을 특징으로 하는 방법.
  9. 제8항에 있어서,
    상기 제 1 동작을 스케쥴러에 디스패칭하는 단계를 더 포함하며, 여기서 상기 디스패칭하는 단계는 상기 스케쥴러에서의 제 1 엔트리를 상기 제 1 동작에 할당하는 것을 포함하며, 상기 제 1 엔트리는 상기 제 1 소스 상태 표시를 포함하는 것을 특징으로 하는 방법.
  10. 제 1 브랜치 명령의 제 1 오퍼랜드에 대응하는 제 1 소스 상태 표시가 상기 제 1 오퍼랜드의 값이 추론적임을 표시하는 단계와;
    제 2 동작의 결과의 값이 비-추론적이라는 표시를 수신하는 단계와, 여기서 상기 제 2 동작의 결과는 상기 제 1 오퍼랜드이며;
    상기 제 2 동작의 결과의 값이 추론적이지 않음을 표시하는 제 2 결과 상태 표시를 수신하는 것에 응답하여, 상기 제 2 동작에 종속하는 동작들의 체인을 통해 추론 성공의 표시를 전파하는 단계와, 여기서 상기 추론 성공의 표시를 전파하는 단계는 상기 제 1 오퍼랜드의 값이 추론적이지 않음을 표시하도록 상기 제 1 소스 상태 표시를 갱신하는 것을 포함하고; 그리고
    상기 갱신이 행해질 때까지 상기 제 1 브랜치 명령의 결과의 값에 응답하여 명령 프리페치 메커니즘의 리디렉션 및 프로세싱 파이프라인의 플러싱을 지연시키는 단계를 포함하여 구성되는 것을 특징으로 하는 방법.
KR1020057003349A 2002-08-28 2003-07-16 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러 KR100981168B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/229,563 US6950925B1 (en) 2002-08-28 2002-08-28 Scheduler for use in a microprocessor that supports data-speculative execution
US10/229,563 2002-08-28

Publications (2)

Publication Number Publication Date
KR20050037596A KR20050037596A (ko) 2005-04-22
KR100981168B1 true KR100981168B1 (ko) 2010-09-10

Family

ID=31976256

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057003349A KR100981168B1 (ko) 2002-08-28 2003-07-16 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러

Country Status (8)

Country Link
US (1) US6950925B1 (ko)
EP (1) EP1532521B1 (ko)
JP (1) JP4170292B2 (ko)
KR (1) KR100981168B1 (ko)
CN (1) CN1320452C (ko)
AU (1) AU2003252081A1 (ko)
TW (1) TWI315488B (ko)
WO (1) WO2004021174A2 (ko)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7415597B2 (en) * 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US7421567B2 (en) 2004-12-17 2008-09-02 International Business Machines Corporation Using a modified value GPR to enhance lookahead prefetch
US7444498B2 (en) * 2004-12-17 2008-10-28 International Business Machines Corporation Load lookahead prefetch for microprocessors
US7552318B2 (en) * 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US8046558B2 (en) * 2005-09-16 2011-10-25 The Research Foundation Of State University Of New York File system having predictable real-time performance
GB0519981D0 (en) * 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
WO2008114443A1 (ja) * 2007-03-20 2008-09-25 Fujitsu Limited マルチプロセッサシステム及びその制御方法
US7730289B2 (en) * 2007-09-27 2010-06-01 Faraday Technology Corp. Method for preloading data in a CPU pipeline
TWI469055B (zh) * 2008-06-27 2015-01-11 Realtek Semiconductor Corp 網路工作卸載裝置與方法
US20100070730A1 (en) * 2008-09-17 2010-03-18 Sebastian Pop Minimizing memory access conflicts of process communication channels
CN101789952A (zh) * 2009-01-23 2010-07-28 瑞昱半导体股份有限公司 网络工作卸载装置与方法
GB2469822B (en) * 2009-04-28 2011-04-20 Imagination Tech Ltd Method and apparatus for scheduling the issue of instructions in a multithreaded microprocessor
US8977837B2 (en) * 2009-05-27 2015-03-10 Arm Limited Apparatus and method for early issue and recovery for a conditional load instruction having multiple outcomes
EP3156896B1 (en) 2010-09-17 2020-04-08 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9052890B2 (en) * 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN103635875B (zh) 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US20150039859A1 (en) 2011-11-22 2015-02-05 Soft Machines, Inc. Microprocessor accelerated code optimizer
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
TWI610224B (zh) * 2011-11-23 2018-01-01 英特爾股份有限公司 微處理器加速編碼最佳化器
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
US9875105B2 (en) * 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9645929B2 (en) 2012-09-14 2017-05-09 Nvidia Corporation Speculative permission acquisition for shared memory
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US9569214B2 (en) 2012-12-27 2017-02-14 Nvidia Corporation Execution pipeline data forwarding
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
US9823931B2 (en) 2012-12-28 2017-11-21 Nvidia Corporation Queued instruction re-dispatch after runahead
US10108424B2 (en) 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9547602B2 (en) 2013-03-14 2017-01-17 Nvidia Corporation Translation lookaside buffer entry systems and methods
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
KR101708591B1 (ko) 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9582280B2 (en) 2013-07-18 2017-02-28 Nvidia Corporation Branching to alternate code based on runahead determination
US10387158B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10387156B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10942744B2 (en) 2014-12-24 2021-03-09 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9785442B2 (en) 2014-12-24 2017-10-10 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10061583B2 (en) 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10061589B2 (en) 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
CN108279928B (zh) * 2018-01-30 2021-03-19 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置
CN108415730B (zh) * 2018-01-30 2021-06-01 上海兆芯集成电路有限公司 微指令调度方法及使用此方法的装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452426A (en) * 1994-01-04 1995-09-19 Intel Corporation Coordinating speculative and committed state register source data and immediate source data in a processor
US5511172A (en) 1991-11-15 1996-04-23 Matsushita Electric Co. Ind, Ltd. Speculative execution processor
US20010010073A1 (en) * 1998-09-30 2001-07-26 Intel Corporation. Non-stalling circular counterflow pipeline processor with reorder buffer
JP2003259295A (ja) * 2002-03-04 2003-09-12 Canon Inc 撮像装置

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09500989A (ja) * 1993-05-14 1997-01-28 インテル・コーポレーション 分岐ターゲット・バッファにおける推論履歴
US6185668B1 (en) 1995-12-21 2001-02-06 Intergraph Corporation Method and apparatus for speculative execution of instructions
US6212626B1 (en) 1996-11-13 2001-04-03 Intel Corporation Computer processor having a checker
US5966544A (en) 1996-11-13 1999-10-12 Intel Corporation Data speculatable processor having reply architecture
US6205542B1 (en) 1997-12-24 2001-03-20 Intel Corporation Processor pipeline including replay
US6094717A (en) 1998-07-31 2000-07-25 Intel Corp. Computer processor with a replay system having a plurality of checkers
US6367004B1 (en) * 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US6845442B1 (en) 2002-04-30 2005-01-18 Advanced Micro Devices, Inc. System and method of using speculative operand sources in order to speculatively bypass load-store operations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5511172A (en) 1991-11-15 1996-04-23 Matsushita Electric Co. Ind, Ltd. Speculative execution processor
US5452426A (en) * 1994-01-04 1995-09-19 Intel Corporation Coordinating speculative and committed state register source data and immediate source data in a processor
US20010010073A1 (en) * 1998-09-30 2001-07-26 Intel Corporation. Non-stalling circular counterflow pipeline processor with reorder buffer
JP2003259295A (ja) * 2002-03-04 2003-09-12 Canon Inc 撮像装置

Also Published As

Publication number Publication date
CN1678986A (zh) 2005-10-05
JP4170292B2 (ja) 2008-10-22
CN1320452C (zh) 2007-06-06
EP1532521B1 (en) 2014-03-12
KR20050037596A (ko) 2005-04-22
AU2003252081A1 (en) 2004-03-19
WO2004021174A2 (en) 2004-03-11
EP1532521A2 (en) 2005-05-25
WO2004021174A3 (en) 2004-06-17
US6950925B1 (en) 2005-09-27
JP2005537567A (ja) 2005-12-08
TW200405201A (en) 2004-04-01
TWI315488B (en) 2009-10-01

Similar Documents

Publication Publication Date Title
KR100981168B1 (ko) 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러
JP4105684B2 (ja) ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
US7133969B2 (en) System and method for handling exceptional instructions in a trace cache based processor
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
JP2007504575A (ja) 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機
US7165167B2 (en) Load store unit with replay mechanism
US7363470B2 (en) System and method to prevent in-flight instances of operations from disrupting operation replay within a data-speculative microprocessor
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7266673B2 (en) Speculation pointers to identify data-speculative operations in microprocessor
US7222226B1 (en) System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7937569B1 (en) System and method for scheduling operations using speculative data operands
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction

Legal Events

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

Payment date: 20130820

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150730

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160727

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170804

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180730

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20190729

Year of fee payment: 10