KR100953207B1 - 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법 - Google Patents

로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법 Download PDF

Info

Publication number
KR100953207B1
KR100953207B1 KR1020047017544A KR20047017544A KR100953207B1 KR 100953207 B1 KR100953207 B1 KR 100953207B1 KR 1020047017544 A KR1020047017544 A KR 1020047017544A KR 20047017544 A KR20047017544 A KR 20047017544A KR 100953207 B1 KR100953207 B1 KR 100953207B1
Authority
KR
South Korea
Prior art keywords
speculative
operand
tag
inferential
response
Prior art date
Application number
KR1020047017544A
Other languages
English (en)
Other versions
KR20040111566A (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 KR20040111566A publication Critical patent/KR20040111566A/ko
Application granted granted Critical
Publication of KR100953207B1 publication Critical patent/KR100953207B1/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 or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

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)
  • Debugging And Monitoring (AREA)

Abstract

시스템은 스케줄러(118) 및 실행 코어(124)를 포함할 수 있다. 상기 스케줄러는 오퍼레이션을 할당하는 엔트리(522)를 포함한다. 상기 엔트리는 비추론적 태그(512) 및 추론적 태그(524)를 포함하고, 비추론적 태그와 추론적 태그 모두는 상기 오퍼레이션의 제 1 오퍼랜드에 연관된다. 상기 스케줄러는 유효한 추론적 태그에 의하여 식별된 데이터 값에 응답하여 상기 오퍼레이션을 발행하도록 구성된다. 상기 실행 코어는 상기 추론적 태그에 의하여 식별된 데이터 값을 사용하여 오퍼레이션을 실행하도록 구성된다. 상기 스케줄러는 상기 비추론적 태그가 결과 버스(130) 상에 표시되는 경우 상기 오퍼레이션을 재발행하도록 구성된다.

Description

로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법{SYSTEM AND METHOD FOR USING SPECULATIVE SOURCE OPERANDS IN ORDER TO BYPASS LOAD/STORE OPERATIONS}
본 발명은 마이크로프로세서 분야에 관한 것으로, 보다 구체적으로는 마이크로프로세서에서 데이터 추론적 실행을 수행에 관한 것이다.
수퍼스칼라 마이크로프로세서는 다수의 명령들을 동시에 실행함으로써, 그리고 그 설계에 일치하는 가장 짧은 가능한 클록 사이클을 사용함으로써 고성능을 달성하였다. 그러나, 명령들 사이의 데이터 및 제어 흐름 종속성에 의하여 임의의 소정의 시간에 얼마나 많은 명령들이 발행될 수 있는지가 제한된다. 결과적으로, 임의의 마이크로프로세서는 추가적인 성능 이득을 획득하기 위하여 추론적 실행(speculative execution)을 지원한다.
추론(speculation)의 한 유형은 제어 흐름 추론이다. 제어 흐름 추론은 프로그램 제어가 진행될 방향을 예측한다. 예를 들어, 브랜치 예측이 브랜치가 선택(taken)될 것인지 여부를 예측하는데 사용될 수 있다. 단순하게 매 시간마다 같은 예측을 하는 방법에서부터 이력-기반 예측을 하기 위하여 프로그램에서 선행 브랜치들의 이력들을 정교하게 유지하는 방법에 이르기까지, 많은 유형의 브랜치 예측들이 이용가능하다. 브랜치 예측은 하드웨어 최적화, 컴파일러 최적화, 또는 이 모두를 통해 용이해진다. 상기 브랜치 예측 메카니즘에 의하여 제공된 예측에 근거하여, 명령들이 추론적으로 페치(fetch)되거나 실행된다. 상기 브랜치 명령이 최종 평가되는 경우, 상기 브랜치 예측이 검증될 수 있다. 상기 예측이 부정확한 경우, 상기 부정확한 예측에 근거하여 추론적으로 실행된 모든 명령들은 무효화된다.
제안된 추론의 다른 유형은 데이터 추론이다. 예를 들어, 데이터 아이템들의 값을 예측하는, 값 예측은 데이터 내의 패턴들을 관찰하고, 그러한 패턴들에 근거하여 상기 예측을 수행하는 것을 포함한다.(예를 들어, 인덱스 카운터 변수의 값은 상기 변수의 이전 값들이 어떻게 증가 또는 감소되는지를 관찰함으로써 예측될 수 있다) 어드레스 예측이 데이터의 위치를 예측하는 것을 포함한다. 데이터 추론의 또 다른 유형은 메모리 시스템 최적화로 불린다. 멀티프로세서 시스템에서, 일관성 체크(coherency check)가 완료되기 전에, 프로세서가 그 프로세서의 로컬 캐시로부터 데이터를 이용하여 추론적으로 명령을 실행하는 경우, 메모리 시스템 최적화가 발생한다. 유사하게, 데이터 추론의 다른 유형에 따르면, 로드가 실행되는 시간에 계산되지 않은 어드레스를 가지는 저장소(store)에 앞에서, 상기 로드가 추론적으로 실행되도록 한다. 물론 상기 저장소가 상기 로드가 액세스하는 같은 어드레스에 데이터를 저장할 수도 있다. 모든 유형의 데이터 추론에서, 기초적인 조건들이 결과적으로 평가되어서, 상기 추론이 검증되거나 수행되지 않도록 한다. 상기 추론이 부정확하게 끝나는 경우, 상기 추론된 데이터를 이용하여 실행된 명령들이 (예를 들어, 갱신되거나 및/또는 비추론된 데이터를 가지고) 재실행될 수 있다.
추론은 종속성(dependency) 체크가 완료되기를 기다리지 않고 실행이 진행되도록 하기 때문에, 정확한 추론으로부터의 성능 이득이 부정확한 추론에 의한 성능 손실을 능가하는 경우, 실질적인 성능 이득이 달성된다. 따라서, 마이크로프로세서에서 데이터 추론을 행하고 오추론(misspeculation)에 대한 효율적인 복구 메커니즘을 제공할 수있도록 하는 것이 바람직하다.
추론적 오퍼랜드 소스들을 사용하는 시스템 및 방법의 다양한 실시예들이 구현될 수 있다. 일 실시예에서, 시스템은 스케줄러 및 실행 코어를 포함할 수 있다. 상기 스케줄러는 오퍼레이션에 할당된 엔트리를 포함한다. 상기 엔트리는 비추론적 태그 및 추론적 태그를 포함하며, 상기 비추론적 태그와 상기 추론적 태그 모두는 상기 오퍼레이션의 제1 오퍼랜드에 연관된다. 상기 스케줄러는 유효한 상기 추론적 태그에 의해 식별된 데이터 값에 응답하여, 상기 오퍼레이션을 발행하도록 되어있다. 상기 실행 코어는 상기 추론적 태그에 의해 식별된 데이터 값을 사용하여 상기 오퍼레이션을 실행하도록 되어 있다. 상기 스케줄러는 상기 비추론적 태그가 결과 버스상에 표시되는 경우 상기 오퍼레이션을 재발행하도록 되어있다.
또 다른 실시예에서, 마이크로프로세서는 비추론적 레지스터 맵, 추론적 레지스터 맵, 그리고 스케줄러를 포함할 수 있다. 상기 비추론적 레지스터 맵은 오퍼레이션의 제1 소스 오퍼랜드에 대해 비추론적 오퍼랜드 태그를 제공하도록 되어있다. 상기 추론적 레지스터 맵은 상기 오퍼레이션의 제 1 소스 오퍼랜드에 대해 추론적 오퍼랜드 태그를 제공하도록 되어있다. 상기 스케줄러는 상기 오퍼레이션에 할당된 엔트리를 포함한다. 상기 엔트리는 상기 오퍼랜드에 대한 상기 추론적 오퍼랜드 태드 및 상기 비추론적 오퍼랜드 태그를 포함하며, 상기 스케줄러는 상기 비추론적 오퍼랜드 태그를 사용하여 실행하기 위한 상기 오퍼레이션을 발행하도록 되어있다.
방법의 일 실시예는 오퍼레이션의 제 1 소스 오퍼랜드를 비추론적 오퍼랜드 태그에 맵핑하는 단계와, 상기 오퍼레이션의 제 1 소스 오퍼랜드를 추론적 오퍼랜드 태그에 추론적으로 맵핑하는 단계와, 상기 비추론적 오퍼랜드 태그 및 상기 추론적 오퍼랜드 태그를 상기 오퍼레이션에 할당된 스케줄러 엔트리에 저장하는 단계와, 상기 추론적 오퍼랜드 태그에 의하여 식별되는 제 2 데이터 값을 사용하는 대신에, 상기 추론적 오퍼랜드 태그에 의하여 식별되는 제 1 데이터 값을 사용하여 상기 오퍼레이션을 실행하는 단계를 포함할 수 있다.
또 다른 실시예에서, 방법은 추론적 오퍼랜드 태그에 의해 식별된 제 1 데이터 값의 유효성에 응답하여, 오퍼레이션을 발행하는 단계와, 비추론적 오퍼랜드 태그에 의해 실별된 제 2 데이터 값을 사용하여 상기 오퍼레이션을 실행하는 단계와, 그리고 상기 비추론적 오퍼랜드 태그를 결과 버스상에 방송하는 단계를 포함한다. 상기 비추론적 태그가 상기 결과 버스상에 방송됨에 응답하여, 상기 오퍼레이션은 재발행될 수 있으며 상기 비추론적 오퍼랜드 태그에 의해 식별된 제 2 데이터 값을 사용하여 실행될 수 있다.
삭제
첨부의 도면을 참조하여 하기의 상세한 설명을 고려함으로써 본 발명을 보다 잘 이해할 수 있게된다.
도 1은 마이크로프로세서의 일 실시예를 도시한다.
도 2A는 디스패치 유닛의 일 실시예의 블럭도이다.
도 2B는 일 실시예에서 사용될 수 있는 예시적인 메모리 파일 저장소 엔트리를 도시한다.
도 3은 로드 오퍼레이션의 추론적인 결과를 임의의 태그에 의하여 식별되는 데이터 값에 링크시키는 방법의 일 실시예를 나타내는 흐름도이다.
도 4는 스케줄러의 일 실시예의 블럭도이다.
도 5는 오퍼레이션들을 발행하는 그리고 데이터 추론화가 부정확했다는 표시에 응답하여 오퍼레이션들을 재발행하는 방법의 일 실시예를 나타내는 흐름도이다.
도 6은 디스패치 유닛의 다른 실시예의 블럭도이다.
도 7은 디스패치 유닛의 또다른 실시예의 블럭도이다.
도 8은 추론적 데이터 값들로 오퍼레이션들을 발행하는, 그리고 오예측들로부터 회복시키는 다른 방법을 나타내는 흐름도이다.
도 9는 컴퓨터 시스템의 일 실시예를 도시한다.
도 10은 컴퓨터 시스템의 다른 실시예를 도시한다.
본 발명은 비록 다양한 수정과 대안적인 형태들이 가능하지만, 본 명세서에서는 발명의 특정한 실시예를 예로써 도면에 도시하였으며, 이에 대해 자세히 설명될 것이다. 그러나 도면 및 이에 대한 상세한 설명은 본 발명을 개시된 특정 예로만 제한하도록 의도된 것은 아니며, 오히려 첨부된 청구항에 의해 정의되는 것처럼 본 발명의 정신 및 범위 내에 드는 모든 변형, 균등물 및 대안들을 포괄하도록 의도된 것이다. 주목할 사항으로써, 제목들은 단지 조직화하기 위한 것이고, 실시예 또는 청구항을 제한하거나 해석하는데 사용되도록 의도된 것이 아니다. 또한, 본 명세서에서 전반에 걸쳐 사용되는 표현 "~수 있다"는 허가적인 의미(즉, 잠재성을 지닌, 할 수 있는)로 사용되었으며, 강제적인 의미(즉, 반드시 ~ 해야 한다)로 사용된 것이 아님에 주의하여야 한다. 표현 "포함한다" 및 그것에서 파생된 표현들은 "포함하지만, 그것에 한정되지는 않는다"의 의미이다. 용어 "연결"은 "직접 또는 간접적인 연결"을 의미하며, 용어 "접속"은 "직접 또는 간접적인 접속"을 의미한다.
도 1은 마이크로프로세서(100)의 일 실시예의 블럭도이다. 마이크로프로세서 (100)는 시스템 메모리(200)에 저장된 명령들을 실행하도록 구성된다. 이러한 많은 명령들은 시스템 메모리(200)에 저장된 데이터로 동작한다. 시스템 메모리(200)는 컴퓨터 시스템을 통하여 물리적으로 분산되어 있고, 하나 이상의 마이크로프로세서(100)에 의하여 액세스된다는 점이 주목된다.
마이크로프로세서(100)는 명령 캐시(106) 및 데이터 캐시(128)를 포함한다. 마이크로프로세서(100)는 상기 명령 캐시(106)에 연결된 프리페치 유닛(108)을 포함한다. 디스패치 유닛(104)이 명령 캐시(106)로부터 명령들을 수신하고, 오퍼레이션들을 스케줄러(들)(118)에 디스패치하도록 구성된다. 하나 이상의 스케줄러들(118)이 연결되어서, 상기 디스패치 유닛(104)로부터 디스패치된 오퍼레이션들을 수신하고, 하나 이상의 실행 코어들(124)에 오퍼레이션들을 발행한다. 실행 코어(들)(124)은 데이터 캐시(128)에 액세스를 수행하도록 구성된 로드/저장 유닛(126)을 포함한다. 실행 코어(들)(124)에 의하여 발생된 결과들이 결과 버스(130)에 출력된다. 이러한 결과들은 후속하여 발행된 명령들에 대한 및/또는 레지스터 파일(116)에 저장된 오퍼랜드 값들로서 사용된다. 퇴거 큐(retire queue)(102)가 스케줄러(들)(118) 및 디스패치 유닛(104)에 연결된다. 상기 퇴거 큐는 각기 발행된 오퍼레이션이 언제 퇴거될지를 결정하도록 구성된다. 일 실시예에서, 상기 마이크로프로세서(100)는 x86 아키텍처에 호환가능하도록 설계된다. 마이크로프로세서(100)는 또한 많은 다른 성분들을 포함한다는 점이 주목된다. 예를 들어, 마이크로프로세서(100)는 브랜치 예측 유닛(도시되지 않음)을 포함한다.
명령 캐시(106)는 디스패치 유닛(104)에 의하여 명령들이 수신되기에 앞서, 일시적으로 명령들을 저장한다. 명령 코드는 프리페치 유닛(108)을 통하여 상기 시스템 메모리(200)로부터 코드를 프리페치함으로써 명령 캐시(106)에 제공된다. 명령 캐시(106)은 다양한 구성들(예를 들어 세트연관(set-associative), 전체연관(fully-associative) 또는 직접 맵핑)로 구현된다.
프리페치 유닛(108)은 명령 코드를 명령 캐시(106) 내에 저장하기 위하여 상기 시스템 메모리(200)로부터 상기 명령 코드를 프리페치한다. 일 실시예에서, 프리페치 유닛(108)은 상기 시스템 메모리(200)로부터 명령 캐시(106)에 코드를 버스트(burst)하도록 구성된다. 프리페치 유닛(108)은 다양한 특정한 코드 프리페치 기술 및 알고리즘들을 사용한다.
디스패치 유닛(104)은 오퍼랜드 어드레스 정보, 즉시 데이터 및/또는 변위 데이터 뿐만 아니라 상기 실행 코어(들)(124)에 의하여 실행가능한 비트 엔코드된 오퍼레이션들을 포함하는 신호들을 출력한다. 임의의 실시예에서, 디스패치 유닛(104)은 임의의 명령들을 실행 코어(들)(124) 내에서 실행가능한 오퍼레이션들로 디코드하기 위한 디코딩 회로(미도시)를 포함한다. 단순 명령들은 단일 오퍼레이션에 대응한다. 임의의 실시예에서, 보다 복잡한 명령들이 다중 오퍼레이션들에 대응한다. 레지스터의 갱신을 포함하는 오퍼레이션의 디코드 시, 레지스터 파일(116) 내의 레지스터 위치가 지정되어 추론적 레지스터 상태들을 저장한다.(대안적인 실시예에서, 재배열 버퍼가 각 레지스터에 대한 하나 이상의 추론적 레지스터 상태들을 저장하는데 사용된다) 레지스터 맵(register map)(134)은 레지스터 재명명(renaming)을 용이하게 하기 위하여 소스 및 목적지(destination) 오퍼랜드들의 논리적 레지스터 네임들을 물리적 레지스터 네임들로 변환한다. 레지스터 맵(134)은 레지스터 파일(116) 내의 어떤 레지스터들이 현재 할당되고 비할당되는지를 추적한다.
도 1의 마이크로프로세서(100)는 순서에서 벗어난(out of order) 실행을 지원한다. 퇴거 큐(102)는 레지스터 기입 및 판독 오퍼레이션들에 대한 본래의 프로그램 시퀀스를 계속하여 추적하고, 추론적 명령 실행 및 브랜치 오예측 복구를 허용하고, 그리고 정확한 예외(exception) 처리를 용이하게 한다. 임의의 실시예에서, 퇴거 큐(102)는 또한 추론적 레지스터 상태들에 대한 데이터 값 저장소를 제공함으로써 레지스터 재명명을 지원한다. 많은 실시예에서, 퇴거 큐(102)가 재배열 버퍼와 유사하게 기능한다. 그러나 전형적인 재배열 버퍼와 다르게, 퇴거 큐(102)는 임의의 데이터 값 저장소도 제공하지 않는다. 임의의 실시예에서, 퇴거 큐(102)는 선입선출 구성으로 구현되고, 여기서 오퍼레이션들은 유효화된 경우 버퍼의 "하부"로 이동하고, 따라서 상기 큐의 "상부"에 새로운 엔트리를 위한 공간을 만든다. 오퍼레이션들이 퇴거되는 경우, 퇴거 큐(102)는 더이상 추론적 레지스터 상태를 저장하는데 불필요한 레지스터들을 레지스터 파일(116)에서 제거(deallocate)하고 어떤 레지스터들이 현재 비어있는지를 표시하는 신호들을 레지스터 맵(134)에 제공할 수 있다. 추론적 레지스터 상태들을 발생한 오퍼레이션들이 검증될 때까지, 추론적 레지스터 상태들을 레지스터 파일(116)에(또는 대안적인 실시예에서 재배열 버퍼에) 유지함으로써, 오예측된 경로를 따라서 추론적으로 실행된 오퍼레이션들의 결과들은 브랜치 예측이 부정확한 경우 상기 레지스터 파일(116)에서 무효화된다.
특정 오퍼레이션의 디코드 시, 요구된 오퍼랜드가 레지스터 위치인 경우, 레지스터 어드레스 정보가 레지스터 맵(134)(또는 재배열 버퍼)으로 라우팅된다. 예를 들어, x86 아키텍처에, 8개의 32-비트 논리적 레지스터들(예를 들어 EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP)이 존재한다. 물리적 레지스터 파일(116)(또는 재배열 버퍼)은, 순서에서 벗어난 실행을 허용하는, 이러한 논리 레지스터들의 컨텐츠들을 변경하는 결과들에 대한 저장소를 포함한다. 그러므로, 임의의 프로그램의 실행동안 다양한 포인트에서, 레지스터 파일(116)(또는, 대안적인 실시예에서, 재배열 버퍼)은 소정의 논리적 레지스터의 추론적으로 실행된 컨탠츠를 포함하는 하나 이상의 레지스터들을 가질 수 있다.
레지스터 맵(134)은 물리적 레지스터를 오퍼레이션에 대한 목적지 오퍼랜드로서 명시된 임의의 논리 레지스터에 할당할 수 있다. 디스패치 유닛(104)은 레지스터 파일(116)이 소정 오퍼레이션에서 소스 오퍼랜드로서 명시된 논리 레지스터에 할당된 하나 이상의 선행하여 할당된 물리적 레지스터들을 가지는지를 결정할 수 있다. 상기 레지스터 맵(134)은 상기 논리 레지스터에 가장 최근에 할당된 논리 레지스터에 대한 태그를 제공할 수 있다. 이러한 태그는 상기 레지스터 파일(116)에 상기 오퍼랜드의 데이터 값을 액세스하는데 또는 상기 결과 버스(130) 상에서 전송되는 결과를 통하여 상기 데이터 값을 수신하는데 사용될 수 있다. 상기 오퍼랜드가 메모리 위치에 대응하는 경우, 상기 오퍼랜드 값은 로드/저장 유닛(222)을 통하여 (전송 결과 및/또는 레지스터 파일(118)에 저장소에 대하여) 상기 결과 버스 상에 제공된다. 오퍼랜드 데이터 값은 상기 오퍼레이션이 상기 스케줄러(들)(118) 중 하나에 의해 발행되는 경우 실행 코어(들)(124)에 제공된다. 대안적인 실시예에서, 오퍼레이션이 디스패치되는 경우, 오퍼랜드 값들이 (상기 오퍼레이션이 발행되는 경우 대응하는 실행 코어(124)에 제공되는 대신에) 대응하는 스케줄러(118)에 제공되는 점이 주목된다.
디스페치 유닛(104)의 출력부에 제공된 상기 비트-엔코드된 오퍼레이션들 및 즉시 데이터는 하나 이상의 스케줄러(118)에 라우팅된다. 본장에서 사용되는 바와 같이, 스케줄러는 언제 오퍼레이션들이 실행할 준비가 되고 준비된 오퍼레이션들을 하나 이상의 실행 유닛에 발행하는 지를 검출하는 디바이스이다. 예를 들어, 예약 저장소(reservation storage)가 스케줄러이다. 각 스케줄러(118)는 실행 코어(124)에 발행되기를 대기하는 다수의 대기 오퍼레이션들에 대한 오퍼레이션 정보(예들 들어, 비트 엔코드된 실행 비트뿐만 아니라 오퍼랜드 값, 오퍼랜드 태그들, 및/또는 즉시 테이터)를 유지할 수 있다. 임의의 실시예에서, 각 스케줄러(118)는 오퍼랜드 값 저장소를 제공하지 않는다. 대신, 각 스케줄러는, 오퍼랜드 값들이 언제 실행 코어(들)(124)에 의해 판독(레지스터 파일(116) 또는 결과 버스(130)로부터)되는데 유효해지는지를 결정하기 위하여, 발행된 오퍼레이션들 및 레지스트 파일(116)내의 유효한 결과들을 모니터할 수 있다. 임의의 실시예에서, 각 스케줄러(118)는 전용 실행 코어(124)에 관련될 수 있다. 다른 실시예에서, 단일 스케줄러(118)가 하나보다 많은 실행 코어(들)(124)에 오퍼레이션들을 발행할 수 있다.
스케줄러(118)는 상기 실행 코어(들)(124)에 의하여 실행될 오퍼레이션 정보를 임시로 저장하도록 제공될 수 있다. 상술한 바와 같이, 각 스케줄러(118)는 대기(pending) 오퍼레이션들에 대한 오퍼레이션 정보를 저장할 수 있다. 또한, 각 스케줄러는 이미 실행되었으나 여전히 재발행될 수 있는 오퍼레이션들에 대한 오퍼레이션 정보를 저장할 수 있다. 실행을 위한 시간에 유효해지는 임의의 요구되는 오퍼랜드(들)의 값에 응답하여, 오퍼레이션들이 실행하기 위하여 실행 코어(들)(124)에 발행된다. 따라서, 오퍼레이션들이 실행되는 순서는 원래의 프로그램 명령 시퀀스의 순서와 같지 않다. 데이터 추론을 포함하는 오퍼레이션들은 상기 데이터 추론이 부정확한 경우 재발행되기 위하여 비추론될 때까지 스케줄러(들)(118)에 남을 수 있다.
다른 실시예에서, 실행 코어(들)(124) 각각은 덧셈 또는 뺄샘의 정수 산술 오퍼레이션들 뿐만 아니라, 쉬프트, 회전, 논리 오퍼레이션, 및 브랜치 오퍼레이션들을 수행하도록 되어있는 구성요소들을 포함할 수 있다. 플로팅 포인트 유닛이 또한 포함되어서 플로팅 포인트 오퍼레이션들을 수용한다. 하나 이상의 실행 코어(들)(124)은 로드 및 저장 메모리 오퍼레이션이 로드/저장 장치 유닛(126)에 의하여 수행되기 위하여 어드레스 발생을 수행하도록 구성된다.
상기 실행 코어(들)(124)은 또한 조건적인 브랜치 명령들의 실행에 관한 정보를 브랜치 예측 유닛에 제공하여, 브랜치가 오예측된 경우, 상기 브랜치 예측 유닛은 명령 처리 파이프라인에 입력되고 프리페치 유닛(106)에 재지시되는 상기 오예측된 브랜치에 후속하는 명령들을 플러시(flush)할 수 있다. 그 후, 상기 재지시된 프리페치 유닛(106)은 정확한 세트의 명령들을 명령 캐시(106) 또는 시스템 메모리(200)로 부터 페치하기 시작한다. 그러한 상황에서, 추론적으로 실행되고 그리고 레지스터 파일(116) 내에 임시로 저장된 것을 포함하는, 상기 오예측된 브랜치 명령들 후에 발생하는 본래의 프로그램 시퀀스 내의 명령들의 결과들은 폐기된다. 실행 코어(들)(124) 내에서 성분들에 의하여 생산된 결과들은, 레지스터 값이 갱신된 경우, 상기 결과 버스(130) 상에서 상기 레지스터 파일(116)로 출력된다. 메모리 위치의 컨텐츠가 변경되는 경우, 실행 코어(들)(124) 내에서 생산된 결과들이 상기 로드/저장 유닛(126)에 제공된다.
로드/저장 유닛(126)은 실행 코어(들)(124)과 데이터 캐시(128) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드/저장 유닛(126)은 대기중인 로드들 또는 저장들에 대한 어드레스 정보 및 데이터에 대한 복수의 저장 위치들을 구비한 로드/저장 버퍼로 구성될 수 있다. 상기 로드/저장 유닛(126)은 또한 대기중인 저장 명령들에 대응하는 로드 명령에 대한 종속성 체크를 수행하여 데이터 일관성이 유지되는 것을 보장한다.
데이터 캐시(128)는 로드/저장 유닛(126)과 상기 시스템 메모리(200) 사이에 전달되는 데이터를 일시적으로 저장하도록 제공되는 캐시 메모리이다. 상술한 명령 캐시(106)과 유사하게, 상기 데이터 캐시(128)는 세트 연관 구성을 포함하는 다양한 특정 메모리 구성에서 구현된다. 또한, 임의의 실시예에서, 데이터 캐시(128) 및 명령 캐시(106)는 단일화된 캐시에서 구현된다.
도 2A는 디스패치 유닛(104)의 일 실시예를 도시한다. 상기 실시예에서, 디스패치 유닛(104)은 레지스터 맵(134) 및 메모리 파일(132)을 포함한다. 상술한 바와 같이, 레지스터 맵(134)은 레지스터 재명명을 제공하도록 구성된다. 레지스터 맵(134)은 각 소스 및 목적지 오퍼랜드에 대한 논리 레지스터 네임을 수신하고, 가장 최근에 할당된 물리적 레지스터의 물리적 레지스터 네임을 상기 논리 레지스터에 출력한다. 메모리 파일(132)은 메모리 파일 제어기(202) 및 메모리 파일 저장소(204)를 포함한다.
메모리 파일 저장소(204)는 하나 이상의 엔트리들(220)을 포함한다. 각 엔트리(220)는 어드레스 패턴(206) 및, 상기 엔트리의 어드레스 패턴에 연관된 태그(208)를 포함한다. 각 태그는 상기 데이터가 어디에(예를 들어, 재배열 버퍼내에 또는 레지스터 파일(116) 내에) 저장될 것이며 언제 발생될 것인지를 표시함으로써 데이터 값을 식별할 수 있다. 예를 들어, 예시적인 실시예에 도시된 바와 같이, 각 태그는, 레지스터 맵(134)에 의하여 표시된 것과 같은, 상기 데이터 값을 저장하도록 할당된 물리적 레지스터를 식별한다. 각 어드레스 패턴은 오퍼레이션에서 어드레스를 명시하는데 사용되는 정보의 모두 또는 일부를 포함한다. 예를 들어, 도 2B에 예시적인 어드레스 패턴(206)이 도시된다. 이러한 실시예에서, 상기 어드레스 패턴(206)은 베이스 논리적 레지스터 네임(210), 인덱스 논리적 레지스터 네임(212) 및 변위(214)를 포함한다. 임의의 어드레스 패턴(206)은 메모리 내의 임의의 세그먼트를 식별하는 레지스터의 세그먼트 논리 레지스터 네임을 포함한다. 많은 실시예에서, 메모리 파일 저장소(204)에 저장된 어드레스 패턴(206)은 오퍼레이션에 대해 명시된 모든 어드레스 정보보다 적게 포함할 수 있다는 점이 주목된다. 예를 들어, 메모리 파일 저장소(204) 내의 엔트리는 변위 필드(214) 내에서 변위를 명시하는데 사용되는 모든 비트들보다 적게 저장할 수 있다. 임의의 실시예에서, 메모리 파일 저장소(204)는 복수의 레지스터들, 래치들, 파일-플롭들 또는 다른 클록된 저장소로부터 구현된다. 대안적인 실시예에서, 메모리 파일 저장소(204)는 하나 이상의 RAM(랜덤 액세스 메모리) 셀들을 포함한다.
메모리 파일 제어기(202)는 디스패치되지 않은 오퍼레이션에서 명시된 어드레스 패턴들을 메모리 파일 저장소(204) 내의 엔트리내에 저장된 것들과 비교할 수 있다. 오퍼레이션의 어드레스 패턴이 메모리 파일 저장소(204) 내의 엔트리 내에 현재 저장된 어드레스 패턴 중 어떤 것과도 일치하지 않는 경우(즉, 상기 오퍼레이션의 어드레스 패턴이 상기 메모리 파일 저장소에서 손실된 경우), 메모리 파일 제어기(202)는 메모리 파일 저장소(204)에 새로운 엔트리를 할당하여 상기 오퍼레이션의 어드레스 패턴의 전부 또는 일부를 저장한다. 메모리 파일 저장소(204) 내에 할당할 수 있는 빈 엔트리가 없는 경우, 메모리 파일 제어기(202)는 LRU(least recently used : 최근 최소사용), FIFO(first-in first-out method : 선입선출법), 랜덤 교체 등과 같은 교체 방식을 사용하여 겹쳐기입(overwrite)될 엔트리를 선택할 수 있다. 상기 어드레스 패턴을 상기 할당된 엔트리에 저장함에 추가하여, 상기 메모리 파일 제어기(202)는 또한 상기 오퍼레이션의 어드레스 패턴에 의하여 식별된 메모리 위치로부터 로드되거나 상기 메모리 위치 안에 저장된 값을 식별하는 태그(예를 들어, 상기 물리적 레지스터의 네임)를 또한 저장할 수 있다. 예를 들어, 메모리로부터 데이터를 로드하는 오퍼레이션이 다루어지는 경우, 상기 오퍼레이션에 응답하여 할당된 엔트리가 할당된 물리적 레지스터의 네임을 저장하여 상기 로드 오퍼레이션의 결과를 저장할 수 있다. 데이터를 메모리 위치에 저장하는 오퍼레이션이 다루어지는 경우, 메모리 파일 제어기(202)는 상기 저장 오퍼레이션에 의하여 메모리 파일 저장소(204)에 저장되는 값을 저장하는 레지스터의 물리적 레지스터 네임을 저장할 수 있다.
오퍼레이션의 어드레스 패턴(또는 상기 패턴의 일부)이 메모리 파일(204)에 이미 저장된 엔트리인 경우(즉, 상기 오퍼레이션의 어드레스 패턴이 상기 메모리 파일 저장소에서 히트된다면), 상기 메모리 파일 제어기(202)는 상기 매치하는 어드레스 패턴을 포함하는 엔트리를 사용 또는 수정할 수 있다. 로드 오퍼레이션(임의의 어드레스로부터 값을 레지스터에 로드하는 오퍼레이션)이 다루어지는 경우, 상기 메모리 파일 제어기(202)는 상기 매치하는 엔트리에 저장된 물리적 레지스터 네임(208)을 출력한다. 저장 오퍼레이션(레지스터로부터의 값을 임의의 어드레스에 저장하는 오퍼레이션)이 다루어지는 경우, 상기 메모리 파일 제어기(202)는 상기 매치하는 엔트리에 저장된 태그(예를 들어, 물리적 레지스터 네임(208))을 저장된 데이터의 태그로 겹쳐기입한다.
로드 오퍼레이션이 다루어지고, 상기 로드 오퍼레이션이 상기 메모리 파일 저장소(204)에서 히트하는 경우, 상기 메모리 파일 제어기(202)로부터 출력된 상기 태그는 상기 태그에 의하여 식별된 상기 저장된 값을 상기 로드 오퍼레이션의 추론적 결과와 링크시키는데 사용된다. 예를 들어, 임의의 실시예에서, 상기 로드 오퍼레이션이 스케줄러(들)(118)로 디스패치되는 경우, 메모리 파일(132)에 의하여 출력된 상기 태그가 또한 상기 스케줄러(들)에 (예를 들어 추론적 소스 오퍼랜드 태그로서) 제공된다. 스케줄러(118)는 상기 태그에 의하여 식별된 값의 (예를 들어, 레지스터 파일(116)에서 또는 결과 버스(130) 상에서) 유용성에 응답하여 상기 오퍼레이션을 발행한다. 상기 링크된 값이 결과 버스(130) 상에 상기 로드 오퍼레이션의 추론적 결과로서 방송되도록, 실행 코어(124)는 상기 로드 오퍼레이션을 실행한다.(임의의 실시예에서, 상기 로드의 결과로서 생산된 상기 데이터 값은 그 자체로 플레그되지 않고, 반면에 추론적 값으로서 식별된다는 점이 주목된다) 다른 실시예에서, 상기 데이터 값은 하기에 설명되는 바와 같이, 추론적 맵에 상기 태그를 저장함으로써, 상기 로드 오퍼레이션의 추론적 결과에 링크될 수 있다.
상기 링크의 결과로서, 종속 오퍼레이션들이 추론적 결과를 사용하여 실행되도록 하기 위하여, 일단 데이터 값이 (예를 들어, 레지스터 파일(116)에서 또는 결과 버스(130) 상에서)유효해지면, 상기 태그에 의하여 식별된 데이터 값은 상기 로드의 추론적인 결과로서 전송된다. 많은 경우에서, 이것은, 상기 로드 오퍼레이션의 비추론적 결과가 유효해질 때까지 종속 오퍼레이션들의 실행이 지연되는 경우에 가능했던 것보다 빠르게, 종속 오퍼레이션들이 상기 로드 오퍼레이션의 추론적 결과를 이용하여 실행되게 해준다. 임의의 실시예에서, 상기 데이터 값이 상기 로드 오퍼레이션의 추론적 결과로서 상기 결과 버스(130) 상으로 출력되도록 상기 로드 오퍼레이션을 실행함으로써, 상기 데이터 값이 전송될 수 있다. 예를 들어, 일 실시예에서, 비추론적 로드를 수행하는데 3 사이클이 필요하지만(상기 로드가 상기 데이터 캐시(128)에서 히트한다고 가정한다), 상기 로드는 상기 로드 결과로서 상기 데이터 값 및 상기 데이터 값을 식별하는 태그를 출력함으로써 단일 사이클에서 실행될 수 있다. 다른 실시예에서, 메모리 파일 제어기(202)에 의하여 출력된 태그를 직접적으로 종속 오퍼레이션(상기 로드 오퍼레이션에 의하여 생성되는 오퍼랜드를 가지는 오퍼레이션)들에 제공함으로써, 상기 데이터 값은 디스패치에서 추론적 오퍼랜드 소스로서 보다 간접적인 방식으로 전송된다. 상기 데이터 값을 전송하는 수단은, 상기 로드 오퍼레이션을 추론적인 레지스터-투-레지스터 이동 오퍼레이션으로 수정하도록 구성되거나 또는 상기 태그를 추론적 오퍼랜드 소스 태그로서 종속 오퍼레이션에 제공하도록 구성된 디스패치 유닛, 상기 링크된 데이터 값의 사용가능성에 따라 상기 수정된 로드 및/또는 종속 오퍼레이션을 발행하도록 구성된 스케줄러, 그리고 상기 링크된 데이터 값을 상기 로드의 결과로서 출력하도록 또는 상기 링크된 데이터 값을 사용하여 상기 종속 오퍼레이션을 실행하도록 구성된 실행 코어 중 하나 이상을 포함한다.
상기 로드 저장 유닛(126)(또는 마이크로프로세서(100) 내에 상기 추론적 링크를 검증하는 다른 수단)은 상기 로드 오퍼레이션의 결과로 메모리 파일(132)에 의하여 식별된 물리적 레지스터에 저장된 값의 추론적 링크를 검증한다. 상기 추론적 링크가 부정확한 경우, 상기 로드 저장 유닛(126)은 상기 로드가 재발행되거나 및/또는 결과 버스(130) 상에 상기 로드 오퍼레이션의 정확한 결과를 방송하도록 야기한다. 상기 로드를 재발행하는 것은, 상기 로드의 추론적인 결과를 사용하여 실행되는 임의의 종속 오퍼레이션들 모두가, 갱신된 비추론적인 값을 사용하여 재발행되거나 실행되도록 야기한다.
보여진 것과 같이, 메모리 파일(132)은 데이터 캐시(128)(또는 시스템 메모리(200))에서 데이터에 액세스하는 오퍼레이션들에서 어드레스 패턴들을 추적한다. 결과적으로, 물리적 레지스터에 저장된 레지스터 값들은 메모리의 임의의 어드레스에 저장된 값들에 링크될 수 있다.
메모리 파일(132)의 오퍼레이션을 좀더 설명하기 위하여, 디스패치 유닛(104)에 의하여 다루어지는 오퍼레이션들의 시퀀스가 다음의 오퍼레이션들을 포함한다고 가정한다.
MOV EBX, [EDX+EAX-변위 A] (LOAD 1)
MOV ECX, [EDX+EAX-변위 A] (LOAD 2)
MOV[EDX+EAX-변위 A], EAX (STORE 1)
이러한 오퍼레이션들 각각은 프로그램 순서에서 하나 이상의 간섭 오퍼레이션(intervening operation)들에 의하여 분리될 수 있다. 보여지는 바와 같이, 이러한 세 개의 오퍼레이션들 각각은 같은 어드레스 패턴, EDX+EAX-변위 A를 포함한다.
LOAD 1의 어드레스 패턴이 메모리 파일(132)에 제공되는 경우, 메모리 파일 제어기(202)는 LOAD 1의 어드레스 패턴에 매치하는 어드레스 패턴에 대한 메모리 파일 저장소(204)를 체크할 수 있다. 상기 어드레스 패턴이 상기 메모리 파일 저장소(204)에서 손실되는 경우, 상기 메모리 파일 제어기(202)는 (할당되지 않은 엔트리를 사용하거나, 또는 이미 할당된 엔트리를 겹쳐기입함으로써)엔트리를 할당하여, 상기 로드 오퍼레이션이 어드레스 패턴 및 상기 로드 오퍼레이션의 목적지 물리적 레지스터의 물리적 레지스터 네임의 모두 또는 일부를 레지스터 맵(134)에 의하여 제공된 것으로서 저장한다. 상기 로드 오퍼레이션이 상기 메모리 파일 저장소에서 손실되기 때문에, 상기 메모리 파일 제어기(202)는 상기 로드 오퍼레이션에 대한 태그를 출력할 수 없다.
후속적으로 메모리 파일(132)에 의하여 LOAD 2가 다루어지는 경우, 그의 어드레스 패턴은 LOAD1에 응답하여 할당된 엔트리 내의 어드레스 패턴에 매치될 수 있다.(LOAD 1의 엔트리가 간섭 오퍼레이션에 응답하여 아직 겹쳐기입되지 않았다고 가정한다) 메모리 파일 저장소(204)에서 히트하는 LOAD 2의 어드레스 패턴에 응답하여, 메모리 파일 제어기(202)는 LOAD 1의 결과를 저장하도록 할당된 물리적 레지스터의 물리적 레지스터 네임을 출력할 수 있다. 이러한 물리적 레지스터 네임은 LOAD 1에 의하여 로드된 데이터 값을 LOAD 2의 추론된 결과에 링크하는데 사용될 수 있다.
메모리 파일(132)에 의하여 STORE 1이 다루어지는 경우, 그 어드레스 패턴은 LOAD 1에 응답하여 할당된 엔트리에서 히트된다.(또한 어떤 간섭 오퍼레이션도 이러한 엔트리가 오버라이트되도록 야기하지 않는다고 가정한다) (LOAD 2에 대해서 수행된 바와 같이)LOAD 1의 결과를 저장하도록 할당된 물리적 레지스터의 물리적 레지스터 네임을 출력하는 대신에, 메모리 파일 제어기(202)는 상기 엔트리에 저장된 물리적 레지스터 네임(208)을 STORE 1에 의하여 저장되는 데이터를 포함하는 레지스터의 물리적 레지스터 네임으로 겹쳐기입할 수 있다. 따라서, 후속적인 로드 오퍼레이션들이 이러한 엔트리에서 히트하는 경우, 상기 메모리 파일 제어기(202)는 LOAD 1의 목적지 레지스터의 물리적 레지스터 네임을 출력하는 대신에 STORE 1의 소스 물리적 레지스터의 물리적 레지스터 네임을 출력할 것이다.
메모리 파일(132)이 추론적 구조로서 사용되기 때문에, 메모리 파일 저장소(204)에 저장된 정보의 정확성은 마이크로프로세서(100)의 정확한 오퍼레이션에 대해서 중요하지 않다.(예를 들어, 메모리 파일(132)에서 오예측은 마이크로프로세서(100)의 출력의 에러를 야기하지 않는다) 그러나, 로드 오퍼레이션의 추론적인 결과들을 물리적 레지스터에 저장된 값들로 정확하게 링크함으로써 제공되는 이점들을 증가시키기 위하여 및/또는 오예측된 추론적 링크들에 대하여 발생하는 임의의 성능 패널티를 감소시키기 위하여, 메모리 파일(132)의 정확성을 향상시키는 것이 바람직하다. 임의의 실시예에서, 메모리 파일(132)의 정확성은, 어드레스를 명시하는데 사용되는 레지스터들로의 갱신이 검출되는 경우, 메모리 파일 저장소(204)에서 엔트리를 무효화(invalidating)함으로써 상승된다. 예를 들어, 각 어드레스 패턴은 어드레스 계산에 대한 베이스 및 인덱스를 식별하는데 사용되는 하나 이상의 논리적 레지스터 식별자들을 포함한다. 후속적인 오퍼레이션이 엔트리의 어드레스 패턴(206)의 일부분으로서 명시된 논리적 레지스터들 중 하나를 수정하는 경우, 상기 엔트리는 무효화될 수 있다. 따라서, 도 2A에 도시된 바와 같이, 엔트리 무효화를 수행하기 위하여, 각 오퍼레이션의 목적지 레지스터의 논리 레지스터 네임들이 메모리 파일(132)에 입력될 수 있다.
또한, 임의의 실시예에서, 메모리 파일 저장소(204) 내의 엔트리들이 임의의 어드레스에서 데이터에 기입 액세스를 얻은 또다른 디바이스를 스누프(snooping)하는 것에 응답하여 무효화될 수 있다. 유사하게, 오예측의 검출에 응답하여 엔트리가 무효화될 수 있다. 일반적으로, 상기 메모리 파일 저장소(204)내의 엔트리들의 정확성에 작용하는 것과 같은 많은 조건들이 모니터될 수 있고, 언제 엔트리가 무효화되는 지를 결정하는데 이용될 수 있다. 그러나, 메모리 파일(132)이 추론적 구조이기 때문에, 임의의 모니터 방법들을 구현하는 추가적인 하드웨어 비용이 메모리 파일 정확성에서의 가능한 향상성을 초과하는 경우, 임의의 실시예들은 이러한 모니터 방법들 중 일부를 구현할 수 없다.
메모리 파일(132)은 레지스터 값들을 추론적 로드 결과에 링크시키는데 사용되는 오퍼레이션 스트림에서 서로간에 상대적으로 제거되는 오퍼레이션들 사이에 종속성을 허용한다. 따라서, 메모리 파일은 다수의 간섭 오퍼레이션들에 의하여 분리될 수 있는 오퍼레이션들 사이에 종속성 이력을 제공할 수 있다.
도 3은 로드 오퍼레이션의 추론적 결과를 레지스터 값에 링크시키는 방법의 일 실시예에 대한 흐름도를 도시한다. (301)에서, 태그가 어드레스 패턴에 관련되고, 둘 모두가 동일한 데이터 값을 저장할 가능성이 높다는 것을 표시한다. 상기 태그와 어드레스 패턴 모두는 제 1 로드 또는 저장 오퍼레이션에 대하여 명시된다. 예를 들어, 상기 제 1 오퍼레이션이 로드 오퍼레이션인 경우, 상기 태그는 상기 로드의 결과를 저장하도록 할당된 물리적 레지스터를 식별할 수 있고, 상기 어드레스 패턴은 상기 로드의 어드레스를 계산하는데 사용될 수 있다. 상기 제 1 오퍼레이션이 저장 오퍼레이션인 경우, 상기 어드레스 패턴은 상기 저장의 목적지의 어드레스를 표시할 수 있고, 상기 태그는 상기 저장 오퍼레이션에 의하여 저장되는 데이터를 식별할 수 있다. 임의의 실시예에서, 상기 태그 및 상기 어드레스 패턴은 둘 모두를 메모리 파일 내의 엔트리에 저장함으로써 관련될 수 있다.
로드 오퍼레이션의 어드레스 패턴이 상기 제 1 오퍼레이션의 어드레스 패턴에 매치되는 경우, 상기 로드의 추론적 결과는, 단계(303) 내지 단계(305)에 나타낸 바와 같이, 상기 제 1 오퍼레이션에 대하여 명시된 상기 태그에 의하여 식별된 데이터 값에 링크될 수 있다. 상기 로드 오퍼레이션의 어드레스 패턴이 상기 제 1 오퍼레이션의 어드레스 패턴에 매치되지 않는 경우, (예를 들어, 메모리 파일 내의 엔트리에 둘 모두를 저장함으로써) 상기 로드의 어드레스 패턴 및 상기 로드의 목적지에 대한 태그가 연관될 수 있다.(단계 303 내지 단계 311) 또한, 상기 데이터 캐시에 액세스함으로써 상기 로드는 정상적으로 수행될 수 있다.(단계 313) 일 실시예에서, 상기 로드의 오퍼레이션의 어드레스 패턴은 하나 이상의 앞선 오퍼레이션의 어드레스 패턴에 비교될 수 있다. 예를 들어, 상기 로드의 어드레스 패턴은 메모리 파일에 현재 저장된 각 어드레스 패턴에 비교될 수 있다.
상기 로드의 추론적 결과가 상기 태그에 의하여 식별되는 데이터 값에 링크되는 경우, 상기 데이터 값은, 단계(307)에 나타낸 바와 같이, 상기 로드 오퍼레이션의 추론적 결과로서 하나 이상의 종속 오퍼레이션들로 전송될 수 있다. 하기에서 보다 상세히 설명되는 바와 같이, 상기 데이터 값은 결과 전송(result forwarding)를 통하여 전송되거나 또는 종속 오퍼레이션이 상기 데이터 값을 추론적 오퍼랜드 소스로서 사용할 수 있다는 표시(indication)를 전송함으로써 전송될 수 있다. 일 실시예에서, 상기 데이터 값이 결과 전송을 통하여 전송되는 경우, 상기 데이터 값을 발생하는 오퍼레이션이 실행을 완료한 한 사이클 후에 상기 전송된 데이터 값을 이용하여 종속 오퍼레이션들이 실행될 수 있다. 상기 데이터 값이 종속 오퍼레이션들이 상기 물리적 레지스터를 추론적 오퍼랜드 소스로서 사용할 수 있다는 것의 표시를 통하여 전송되는 경우, 상기 데이터 값을 발생하는 상기 오퍼레이션이 실행이 완료된 후에 즉시 종속 오퍼레이션들이 발행될 수 있다. 단계(309)에서 보여지는 바와 같이, 상기 추론적 결과는 상기 추론적 결과가 검증되기 전에 전송될 수 있다. 상기 추론적 결과는 상기 데이터 캐시에 액세스하지 않고 전송될 수 있다.(즉, 상기 추론적 결과는 비추론적 결과보다 빠르게 전송될 수 있는데, 이는 상기 데이터 캐시에 액세스함으로써 발생된다)
상기 추론적 결과가 정확하다고 검증된 경우(단계 309), 상기 로드 오퍼레이션은 데이터 캐시 액세스를 수행하지 않고 완료될 수 있다. 그러나, 상기 추론적 결과가 부정확하다고 결정된 경우(단계 309), 정확한 결과를 획득하기 위하여 상기 데이터 캐시 액세스가 수행될 수 있다.(도시되지 않음) 그렇다면, 상기 로드의 추론적 결과를 사용하여 실행된 임의의 종속 오퍼레이션들습 상기 로드의 정확한 결과를 사용하여 재실행될 수 있다. 임의의 상황에서, 상기 검증(단계 309)은 상기 링크된 데이터 값이 상기 로드의 추론적 결과로서 전송되기에 앞서서 수행될 수 있다.(단계 307) 그러한 상황에서, 상기 로드는 정상적으로 수행될 수 있고, 또는 상기 링크가 정확하다고 결정된 경우, 상기 데이터 값은 상기 로드 오퍼레이션의 비추론적 결과로서 전송될 수 있다.
다양한 실시예에서 많은 다른 방법에 의하여 로드 오퍼레이션의 추론적 결과를 레지스터 데이터 값에 링크시킬 수 있다. 임의의 실시예에서, 오퍼랜드에 대한 두 개의 소스들, 추론적 소스 및 비추론적 소스를 식별함으로써 값들이 링크될 수 있다. 상기 추론적 소스가 상기 링크된 데이터 값일 수 있다. 추론적 소스는 로드 오퍼레이션에 제공되어 상기 로드의 추론적 결과에 링크된 데이터 값을 표시한다. 임의의 실시예에서, 추론적 소스들이 또한 그러한 로드 오퍼레이션에 종속하는 오퍼레이션들에 제공될 수 있다. 따라서, 임의의 오퍼랜드는 두 개의 태그들을 가질 수 있는 바, 하나는 상기 추론적 소스를 식별하고, 하나는 상기 비추론적 소스를 식별한다. 그러한 실시예에서, 도 4에 도시된 바와 같이 각 스케줄러(118)는 상기 추론적 오퍼랜드와 상기 비추론적 오퍼랜드 모두에 대한 태그 저장소를 제공할 수 있다.
도 4는 마이크로프로세서에 포함될 수 있는 스케줄러(118)의 일 실시예를 도시한다. 상기 예시적인 실시예에서, 상기 스케줄러(118)는 스케줄러 제어기(502) 및 오퍼레이션 저장소(504)를 포함한다. 오퍼레이션을 디스패치하는 디스패치 유닛에 응답하여, 스케줄러 제어기(502)는 오퍼레이션 저장소(504) 내에 엔트리를 할당하여 상기 오퍼레이션에 대응하는 정보를 저장할 수 있다. 예를 들어, 오퍼레이션 저장소(504) 내의 엔트리(522)는 Op코드 필드(510), 하나 이상의 오퍼랜드 필드, 그리고 결과 필드(516)를 포함한다. 상기 결과 필드(516)는 상기 엔트리의 오퍼레이션의 결과가 저장되어야하는 상기 물리적 레지스터를 식별하는 태그를 저장할 수 있다. 상기 오퍼레이션이 발행되는 경우, 이러한 태그는 하나 이상의 태그 버스들(520) 상에서 각 스케줄러(118)에 전송될 수 있다. 대기 오퍼레이션들의 오퍼랜드가 언제 유효해질 것인지를 결정하기 위하여, 각 스케줄러는 태그(하기에 설명되는 바와 같이, 추론적 및 비추론적 모두) 버스들(520) 상에서 전송된 상기 태그들을 상기 대기 오퍼레이션들에 대한 상기 오퍼랜드 태그들과 비교한다. 따라서, 태그 버스(520) 상에 나타나는 그 소스 오퍼랜드 태그들에 응답하여, 오퍼레이션이 발행(또는 발행될 준비가 된 것으로 마크)될 수 있다.
각 오퍼랜드 필드(들)은 추론적 오퍼랜드 소스를 식별하는 추론적 태그 및 비추론적 오퍼랜드 소스를 식별하는 비추론적 태그에 대한 저장소를 포함할 수 있다. 예시적인 엔트리(522)에서, 오퍼랜드 1의 두 개의 소스들은 비추론적 태그(512) 및 추론적 태그(514)에 의해 식별된다. 상기 스케줄러(118)는 오퍼레이션의 오퍼랜드들이 유효하다는 하나 이상의 표시들에 응답하여 오퍼레이션을 발행하도록 구성될 수 있다. 오퍼랜드가 추론적 소스 또는 비추론적 소스로부터 유효한 경우 상기 오퍼랜드가 유효하다. 오퍼랜드가 추론적 소스와 비추론적 소스 모두로부터 유효한 경우, 상기 오퍼레이션은 상기 비추론적 소스로부터 유효한 값을 사용하여 실행될 수 있다. 임의의 실시예에서, 상기 스케줄러(118)는 단지 추론적 오퍼랜드 소스들만이 유효한 오퍼레이션들에 비추론적 오퍼랜드 소스들이 유효한 오퍼레이션들을 발행하는 것을 우선으로한다.
오퍼레이션이 추론적 소스들을 가지는 임의의 오퍼랜드들과 추론적 소스들을 가지지 않는 다른 오퍼랜드들을 포함한다는 점이 주목된다. 같은 소스가 한 오퍼레이션에 대하여 추론적 소스가 될 수 있고, 다른 오퍼레이션에 대하여 비추론적 소스가 될 수 있다는 점이 주목된다. 임의의 실시예에서, 오퍼레이션이 실행될 때, 각 오퍼랜드에 대하여 단지 하나의 데이터 값만이 판독될 수 있다(예를 들어, 상기 실행 코어(124)는 상기 추론적 오퍼랜드 소스 또는 상기 비추론적 오퍼랜드 소스를 판독하고, 둘 모두를 판독하지 않는다). 이에 의하여 상기 레지스터 파일(116) 안에 추가적인 포트들을 추가할 필요가 없다. 임의의 실시예에서, 추론적 소스 및 물리적 소스들은 같은 저장 위치(예를 들어, 레지스터 파일(116) 내에)에 저장될 수 있고, 추론적 소스들은 플래그되지 않거나 그렇지 않으면 추론적 소스로서 식별될 수 있다.
많은 실시예에서, 스케줄러(118)는 실행 코어(들)(124)로 이미 발행된 오퍼레이션들 후에 오퍼레이션에 할당된 엔트리들을 유지하도록 구성될 수 있다. 하나 이상의 추론적 오퍼랜드들의 유효성에 응답하여, 오퍼레이션이 스케줄러(118)에 의하여 발행되는 경우, 상기 스케줄러는 상기 추론적 링크가 부정확한 경우 상기 오퍼레이션이 재발행될 수 있도록 상기 오퍼레이션에 할당된 엔트리(522)를 유지할 수 있다. 임의의 실시예에서, 상기 로드/저장 유닛은 추론적 로드 결과가 물리적 레지스터에 저장된 데이터 값에 링크되는 경우 발행하는 추론적 링크들을 식별하도록 구성될 수 있다. 상기 링크가 부정확한 경우, 상기 로드 저장 유닛은 상기 로드의 비추론적 결과를 방송하지 않도록 구성되는데, 이는 정확한 결과가 이미 상기 링크를 통하여 유효하기 때문이다. 그렇다면, 상기 스케줄러(들)(118)는 상기 오퍼레이션에 대한 비추론적 오퍼랜드 소스를 식별하는 태그가 버스(130) 상에 방송되는 경우, 오퍼레이션을 재발행하도록 구성될 수 있다.
대안적으로, 상기 로드/저장 유닛은 상기 방송을 차단하거나 상기 추론적 링크가 부정확했고 상기 로드가 재발행될 필요가 없다는 것을 나타내는 추가적인 상태 비트와 함께 상기 저장의 결과를 방송할 수 있다. 그러나, 상기 추론적 링크가 부정확한 경우, 상기 로드에 대한 정확한 결과를 얻고 상기 로드의 상기 결과를 방송하기 위하여, 상기 로드/저장 유닛은 데이터 캐시 및/또는 메모리 액세스를 수행할 수 있다. 결과들이 항상 방송되는 실시예에서, 상기 추가적인 상태 비트는 상기 추론적 링크가 부정확했다는 것을 표시할 수 있다. 따라서, 많은 실시예에서, 마이크로프로세서에서 이미 유효한 같은 태그 및 결과 버스들은 추론적 링크가 부정확하다는 점을 표시하는데 사용할 수 있다. 다른 실시예에서, 대안적인 표시 메카니즘들(예를 들어 오예측을 표시하기 위하여 분리된 결과 버스들(130) 및/또는 결과 태그 버스들(520)을 이용하는)이 구현될 수 있다.
도 5는 추론적 및 비추론적 오퍼랜드 소스들 모두를 구비한 오퍼레이션들을 발행하고 재발행하는 방법의 일 실시예의 흐름도를 도시한다. 오퍼레이션의 추론적 오퍼랜드 소스가 유효한 경우, 상기 오퍼레이션이 발행될 수 있다.(단계 801 내지 803) 데이터 값이 임의의 레지스터 파일이내의 임의의 레지스터에 존재하는 경우, 또는 상기 데이터 값이 상기 결과 버스 상에 출력되는 경우, 오퍼레이션의 추론적 오퍼랜드 소스가 유효해진다. 임의의 상황에서, 같은 오퍼랜드에 대한 상기 오퍼레이션의 비추론적 오퍼랜드 소스는 상기 추론적 오퍼랜드 소스 전에 유효해질 수 있다. 그러한 상황에서, 상기 추론적 오퍼랜드 소스가 유효해지기 전에 상기 오퍼레이션이 발행될 수 있다. 상기 추론적 소스의 후속하는 유효성이 상기 오퍼레이션의 재발행을 트리거하지 않을 수 있다.
상기 발행된 오퍼레이션이 상기 추론적 오퍼랜드 소스에 의하여 제공된 데이터 값을 사용하여 실행될 수 있고(단계 805), 상기 오퍼레이션의 결과는 방송될 수 있다(단계 807). 상기 오퍼레이션의 결과를 방송하는 것은 종속 오퍼레이션들이 실행될 수 있도록 한다.
임의의 나중의 시간에서, 상기 추론적 소스가 부정확하게 결정되는 경우(예를 들어, 상기 추론적 소스 및 상기 비추론적 소스에 의하여 제공된 데이터 값이 같지 않거나, 또는 상기 추론적 소스의 태그를 발생하는데 사용되는 추론적 링크가 정확하지 않은 경우), 상기 비추론적 소스의 태그는 상기 추론적 소스의 값이 부정확하다는 것의 표시로서 방송될 수 있다. 상기 비추론적 소스의 태그를 방송하는 것은 상기 오퍼레이션을 재발행함으로써 상기 스케줄러(들)이 응답하는 방식으로 상기 태그를 방송하는 것을 포함한다. 예를 들어, 임의의 실시예에서, 상기 태그가 방송되는 경우 그리고 상기 태그에 관련된 상태 플러그가 임의의 값으로 설정되는 경우, 스케줄러가 응답할 수 있고, 다른 실시예에서, 관련된 상태 플래그가 존재하지 않을 수 있고, 그리고 스케줄러는 상기 비추론적 태그가 방송되는 임의의 시간에 오퍼레이션을 재발행하도록 구성될 수 있다.
도 6은 마이크로프로세서(100)에 포함될 수 있는 디스패치 유닛(104)의 다른 실시예를 도시한다. 이러한 실시예에서, 디스패치 유닛(104)은 레지스터 맵(134), 메모리 파일(132), 및 추론적 레지스터 맵(800)을 포함한다. 레지스터 맵(134)과 같이, 추론적 레지스터 맵(800)은 논리적 레지스터 네임을 물리적 네지스터 네임으로 변환할 수 있다. 그러나, 추론적 레지스터 맵(800)은 논리적 레지스터 네임을 물리적 레지스터 네임으로 추론적으로 (예를 들어, 물리적 레지스터에 저장된 값을 로드 오퍼레이션의 추론적 결과에 링크시키는 메모리 파일(132)에 응답하여) 맵핑할 수 있다. 상기 추론적 레지스터 맵(800)은 어드레스 패턴들을 포함하지 않는 오퍼레이션들에 대한 추론적 오퍼랜드 값들이 레지스터 데이터 값에 링크될 수 있도록 한다. 예를 들어, 논리적 레지스터(EAX)에 대한 유효한 추론적 맵이 존재하는 경우, 소스 오퍼랜드로서 EAX를 가지는 오퍼레이션은 두 개의 소스 태그들, 레지스터 맵(134)에 의해 제공되는 비추론적 태그 및 추론적 레지스터 맵(800)에 의하여 제공되는 추론적 태그를 가질 수 있다. 상기 오퍼레이션이 그의 추론적 소스가 유효하자마자 발행될 수 있기 때문에, 추론적 레지스터 맵(800)은 간섭 로드 및 저장들을 바이패스함으로써, 데이터 소비기를 추론적 오퍼랜드 태그를 통하여 직접적으로 데이터 생산기에 링크시킨다. 임의의 실시예에서(예를 들어, 추론적 레지스터 상태에 대한 저장소를 포함하는 재배열 버퍼를 구비하는 실시예에서), 상기 추론적 맵이 물리적 레지스터 네임 이외의 태그들을 저장한다는 점이 주목된다.
추론적 레지스터 맵(800)은 추론적 레지스터 맵 제어기(802) 및 추론적 레지 스터 맵 저장소(804)을 포함한다. 추론적 레지스터 맵 저장소는 하나 이상의 엔드리들(820)을 포함한다. 각 엔트리(820)는 임의의 논리적 레지스터에 연관되고, 그 논리적 레지스터가 현재 추론적으로 맵핑되는 물리적 레지스터의 물리적 레지스터 식별자(812)를 표시한다. 각 추론적 레지스터 맵 엔트리(820)는 상기 엔트리가 현재 유효한지 아닌지에 대한 표시(미도시)를 또한 포함할 수 있다. 일 실시예에서, 추론적 레지스터 맵 저장소(804)는 각 논리적 레지스터에 대한 엔트리를 포함할 수 있다. 다른 실시예에서, 추론적 레지스터 맵 저장소(804)는 논리적 레지스터에 존재하는 것보다 적은 엔트리들을 포함할 수 있다. 그러한 실시예에서, 각 엔트리(820)는 그 엔트리가 현재 대응하는 논리적 레지스터의 표시를 포함할 수 있다.
추론적 레지스터 맵 제어기(802)는 로드 오퍼레이션의 추론적 결과가 임의의 물리적 레지스터 네임에 의하여 식별되는 데이터 값으로 링크되었다는 것의 표시에 응답하여, 엔트리(820)를 갱신하도록 구성된다. 예시적인 실시예에서, 이러한 표시는 상기 메모리 파일(132)에 의하여 제공된다. 갱신되는 상기 엔트리(820)는 상기 로드 오퍼레이션의 목적지로서 명시되는 논리적 레지스터에 대한 엔트리이다. 상기 엔트리는 상기 로드 오퍼레이션에 대하여 상기 메모리 파일(132)에 의하여 출력되는 물리적 레지스터 식별자를 포함하도록 갱신될 수 있다. 다른 실시예에서, 추론적 레지스터 맵 엔트리들은 메모리 파일(132)에 의해 제공되는 것 외에 다른 표시에 응답하여 생성될 수 있다.(이러한 실시예들의 일부에서, 디스패치 유닛(104)은 메모리 파일을 포함하지 않을 수 있다) 예를 들어, 디스패치 유닛(104)은 조건적인 이동 명령(CMOV EAX, EBX if Z)을 검출할 수 있고, 이에 응답하여 EAX에 대한 추론적 레지스터 맵 엔트리가 현재 EBX에 맵핑된 물리적 레지스터를 식별해야 함을 표시한다. 일반적으로, 추론적 레지스터 맵 엔트리들은 논리적 레지스터가 임의의 물리적 레지스터에 추론적으로 맵핑되어야 함을 표시하는 임의의 예측 메가니즘에 응답하여 생성될 수 있다.
임의의 실시예에서, 오퍼레이션들은 그것들이 레지스터 맵(134)에 제공되는 것과 같은 사이클 동안 추론적 레지스터 맵(800)에 제공될 수 있다. 레지스터 맵(134)이 오퍼레이션에 대하여 비추론적 레지스터 재명명을 수행하는 경우, 추론적 레지스터 맵(800)은 상기 오퍼레이션의 추론적 소스 오퍼랜드들 중 하나를 저장하는 것으로서 명시된 논리적 레지스터들 중 어는 것이 특정 물리적 레지스터에 링크되는 지를 표시할 수 있다. 유효한 엔트리가 상기 오퍼레이션의 논리적 레지스터 소스들 중 하나에 대한 추론적 레지스터 맵 저장소(804)에 존재하는 경우, 추론적 레지스터 맵 제어기(802)는 상기 논리적 레지스터의 엔트리에 저장된 상기 물리적 레지스터 네임을 출력할 수 있다. 상기 오퍼레이션이 스케줄러(118)에 디스패치되는 경우, 디스패치 유닛(104)은 이러한 추론적 물리적 레지스터 네임을 추론적 소스로서 출력할 수 있다. 따라서, ADD 오퍼레이션이 추론적 레지스터 맵(800)에 제공되고 상기 ADD들 중 하나가 추론적 레지스터 맵 저장소(804)에서 유효한 엔트리를 가지는 경우, 상기 엔트리에서 식별되는 물리적 레지스터에 대한 태그가 스케줄러(118)에 추론적 소스 오퍼랜드 태그로서 제공될 수 있다. 상기 스케줄러는 상술한 바와 같이, 추론적 그리고 비추론적 오퍼랜드 태그들 모두를 저장하도록 구성될 수 있고, 임의의 실시예에서 결과 버스 상에 방송되는 비추론적 태그에 응답하여 (이미 발행된 경우) 오퍼레이션들을 재발행하도록 구성될 수 있다.
상기 추론적 맵내의 엔트리들은, 임의의 논리적 레지스터에 대한 데이터 값이 수정되지 않을 것이라는 표시에 응답하여, 무효화될 수 있다. 예를 들어, 오퍼레이션(ADD, EAX, ECX)이 상기 디스패치 유닛(104)에 의하여 다루어지는 경우, 상기 추론적 레지스터 맵 제어기(802)는 상기 ADD 오퍼레이션이 상기 레지스터 값을 수정할 것이기 때문에, 현재 EAX에 할당된 추론적 맵 엔트리를 무효화할 수 있다.
일반적으로, 하나의 오퍼레이션의 추론적 결과가 레지스터 데이터 값에 링크되는 경우마다, 추론적 오퍼랜드 태그들이 스케줄러(118)에 제공될 수 있다. 임의의 실시예에서, 메모리 파일(132) 및 복수의 사이클에 걸쳐서 종속성을 추적하는 다른 구조(예를 들어, 하기에서 설명하는 것과 같은 추론적 레지스터 맵)가 추론적 결과들을 레지스터 값들에 링크시키는데 사용될 수 있다. 예를 들어, 디스패치 유닛(104)은, 링크를 식별하는 메모리 파일(132)에 응답하여, 오퍼레이션에 대한 추론적 태그들을 발생할 수 있다. 임의의 실시예에서, 추론적 태그들은 그러한 추론적 맵을 사용하지 않고 발생될 수 있다. 예를 들어, 명령들의 시퀀스는 다음과 같다.
ADD EBX,EBX (ADD 1)
MOV[어드래스 패턴 A], EBX (STORE 1)
ADD[어드래스 패턴 A], ECX (ADD 2)
이러한 명령들은 인접하는 명령들일 수 있다(예를 들어, 프로그램 순서에서 서로간에 직접적으로 이어질 수 있다). 이러한 명령들은 실행 코어(들)(124) 내에서 실행하는, (물리적 어드레스들로 변환된 논리적 어드레스로 보여지는) 하기의 성분 오퍼레이션들로 분리될 수 있다.
ADD PR2,PR2,PR1 (ADD 1)
MOV[어드래스 패턴 A], PR2 (STORE 1)
MOV PR3,[어드래스 패턴 A] (ADD 2에 대한 로드)
ADD PR4,PR3,PR5 (ADD 2에 대한 추가)
MOV[어드래스 패턴 A], PR4 (ADD 2에 대한 저장)
상기 성분 ADD 2의 로드, 추가 및 저장 오퍼레이션들이 디스패치되기 전에, 디스패치 유닛(104)은 추론적 결과들에 링크를 허용하는 시퀀스에서 상기 요소 오퍼레이션들 중 일부 사이에 임의의 종속성이 존재하는지 여부를 검출할 수 있다. 또한, STORE 1에 의하여 저장되는 데이터는 (예를 들어, 메모리 파일에 의하여)상기 로드의 추론적 결과에 링크될 수 있다. 어떤 간섭 오퍼레이션들도 존재하지 않기 때문에, 디스패치 유닛은 상기 로드 오퍼레이션과 상기 추가 오퍼레이션(두 오퍼레이션들 모두 같은 명령으로부터 유도된다) 사이의 종속성을 같은 디스패치 사이클에서 검출할 필요가 있는 모든 정보를 가질 수 있다. 이러한 두 개의 종속성에 근거하여, 상기 디스패치 유닛(104)은 STORE 1, PR2에 의하여 저장되는 데이터의 태그를, ADD 2의 일부로서 수행되는 로드 오퍼레이션의 추론적 결과에 링크시킬 수 있다. 이러한 추론적 링크는 차례로 상기 디스패치 유닛이 ADD 2의 일부로서 수행되는 추가 오퍼레이션의 소스를 PR2에 저장되는 값에 링크시킬 수 있게 한다. 따라서, 디스패치 유닛은, PR2가 상기 추가에 대한 오퍼랜드들 중 하나의 소스로서 추론적으로 사용될 수 있으나, PR3는 상기 오퍼랜드에 대한 비추론적 소스라는 것에 대한, 표시를 출력할 수 있다. 따라서, 일 실시예에서, 디스패치 유닛에 의하여 출력되는 오퍼레이션들 및 오퍼랜드 식별자들이 다음과 같이 명시될 수 있다.
ADD PR2,PR2,PR1 (ADD 1)
MOV[어드래스 패턴 A], PR2 (STORE 1)
MOV PR3,[어드래스 패턴 A] (ADD 2에 대한 로드)
ADD PR4,PR2*,PR3,PR5 (ADD 2에 대한 추가, 여기서 PR2*은 ECX에 대한 추론적 소스이고 PR3는 ECX에 대한 비추론적 소스이다)
MOV[어드래스 패턴 A], PR4 (ADD 2에 대한 저장)
다른 실시예에서, 디스패치 유닛(104)은 로드 오퍼레이션에 종속하는 오퍼레이션들에 대한 추론적 소스 오퍼랜드를 식별하도록 구성되지 않는다. 대신에, 디스패치 유닛(104)은 추론적인 로드 결과들을 종속 오퍼레이션들에 제공하기 위하여, 로드 오퍼레이션들을 레지스터-투-레지스터 이동 오퍼레이션을 포함하는 하나 이상의 오퍼랜드들로 변환하도록 구성되는 오퍼레이션 변환기(180)를 포함한다. 링크가 상기 로드 오퍼레이션의 추론적 결과와 임의의 물리적 레지스터 네임에 의하여 식별되는 데이터 값과의 사이에 존재한다는 표시에 응답하여, 로드 오퍼레이션의 변환이 수행될 수 있다. 이러한 표시는 링크 검출기(182)에 의하여 제공되고, 임의의 실시예에서 링크 검출기(182)는 메모리 파일(132)을 포함할 수 있다. 다른 실시예에서, 상기 링크 검출기(182)는 상술한 바와 같이, 조건적인 이동 오퍼레이션들과 같은 오퍼레이션들에 응답하여 데이터 값들을 링크시키도록 구성되는 로직을 포함할 수 있다.
일 실시예에서, 상기 오퍼레이션 변환기는 레지스터 값과 오퍼레이션의 추론적 결과와의 사이에 링크가 상기 오퍼레이션에 대하여 검출되는지에 관한 표시뿐만 아니라 상기 오퍼레이션에 대한 입력된 Op코드를 수신할 수 있다. 상기 오퍼레이션이 로드이고, 추론적 링크가 검출된 경우, 상기 오퍼레이션 변환기는 레지스터-투-레지스터 이동 오퍼레이션에 대한 Op코드를 출력할 수 있다. 상기 디스패치 유닛(104)은 상기 링크 검출 유닛에 의하여 레지스터-투-레지스터 이동 오퍼레이션에 대한 소스 오퍼랜드 태그로서 출력된 태그를 이용하여, 상기 레지스터-투-레지스터 이동 오퍼레이션을 디스패치할 수 있다.
임의의 실시예에서, 상기 오퍼레이션 변환기는 스케줄러가 레지스터-투-레지스터 이동 오퍼레이션에 할당된 엔트리에 상기 레지스터-투-레지스터 이동 및 본래의 로드 오퍼레이션 모두에 대하여 필요한 오퍼랜드 태그들을 저장하도록, 결과적인 레지스터-투-레지스터 이동을 디스패치하도록 구성될 수 있다. 이에 의하여, 상기 레지스터-투-레지스터 이동 오퍼레이션의 추론적 결과가 부정확하다고 검출되는 경우, 상기 오퍼레이션이 상기 본래의 로드 오퍼레이션으로서 재발행될 수 있도록 허용한다. 이러한 것을 구현하기 위하여, 추가적인 소스 오퍼랜드가 로드 오퍼레이션을 수정함으로써 얻어지는 각 레지스터-투-레지스터 이동 오퍼레이션에 추가될 수 있다.(또는 대안적인 실시예에서, 이미 존재하는 레지스터-투-레지스터 이동 오퍼레이션의 소스 오퍼랜드는 이를 구현하도록 수정될 수 있다) 임의의 실시예에서, 상기 레지스터-투-레지스터 이동 오퍼레이션의 추론적인 결과는, 상기 본래의 로드에 대한 어드레스 계산을 수행함으로써 및/또는 상기 링크된 데이터 값을 실제 로드 결과 데이터 값에 비교함으로써, 검증될 수 있다. 상기 추론적 결과가 부정확한 경우, 정확한 로드 결과를 얻기 위하여 상기 데이터 캐시가 액세스될 수 있다. 정확한 로드 결과의 재방송은 상기 스케줄러가 상기 부정확한 값을 이용하여 실행되는 임의의 종속 오퍼레이션들을 재발행하도록 야기할 수 있다.
임의의 실시예에서, 상기 오퍼레이션 변환기(180)는 로드 오퍼레이션을 이중성(dual-nature) 오퍼레이션으로 변환하도록 구성될 수 있다. 로드 오퍼레이션과 같이, 이러한 이중성 오퍼레이션은 어드레스 계산 및 데이터 이동 모두를 포함할 수 있다. 로드와 다르게, 상기 이중성 오퍼레이션에 의하여 개시된 데이터 이동은 레지스터-투-레지스터 이동이다. 또한 상기 이중성 오퍼레이션에 의하여 개시된 데이터 이동은 상기 어드레스 계산이 완료되기 전에 발생할 수 있다. 상기 어드레스 계산은 상기 추론적 링크가 정확했는지 여부를 검증하는데 사용될 수 있다. 상기 추론적 링크가 부정확한 경우, 이중 목적(dual-purpose) 오퍼레이션은 정규의 로드 오퍼레이션으로서 재발행될 수 있고, 그 결과는 데이터 캐시 액세스의 완료시에 종속 오퍼레이션들에 재방송될 수 있다.
하기의 예는 어떻게 다른 실시예들이 오퍼레이션의 이러한 예시적인 시퀀스를 변환할 수 있는지를 보여준다.
ADD PR2,PR1,PR1 (ADD 1)
STORE[어드래스 패턴 A], PR2 (STORE 1)
LOAD PR3[어드래스 패턴 A] (LOAD 1)
ADD PR4,PR3,PR3 (ADD 2)
이러한 시퀀스에서, 상기 명시된 오퍼레이션들이 하나 이상의 간섭 오퍼레이션들에 의하여 분리될 수 있다는 점이 가능하다. 그러나, 어떤 간섭 오퍼레이션들도, 어드레스 패턴 A에서 사용되는 값들을 수정하지 않거나, 어드레스 패턴 A로부터 계산되는 어드레스와 PR2에 저장되는 데이터 값들을 수정하지 않는 것이라면, PR2에 그리고 어드레스 패턴 A로부터 계산된 상기 어드레스에 저장된 데이터 값들 사이에 추론적 링크가 검출될 수 있다.
일 실시예에서, 추론적 링크 검출기(182)에 의하여 상기 추론적 링크의 검출에 응답하여, 오퍼레이션 변환기(180)는 LOAD 1을 이중 목적 이동 오퍼레이션, MOV PR3, PR2로 변환할 수 있다. 상기 레지스터 소스 및 목적지를 명시하는 것과 함께, 이러한 이중 목적 이동 오퍼레이션은, LOAD 1에 대한 어드레스 계산이 수행되도록, 어드레스 패턴 A를 또한 명시할 수 있다. 그러나 상기 이중 목적 이동 오퍼레이션의 이동 부분은 ECX가 유효해지자마자 발행될 수 있다. 상기 이동 오퍼레이션의 추론적 결과를 오퍼랜드로서 이용하여, 상기 이중 목적 오퍼레이션의 이동 부분의 결과가 방송되자 마자, ADD2가 발행될 수 있다. 상기 어드레스 계산이 수행되는 경우, 상기 추론적 링크가 검증될 수 있다. 상기 추론적 링크가 부정확한 경우, 상기 로드/저장 유닛이, 상기 스케줄러가 상기 이중 목적 이동 오퍼레이션을 로드 오퍼레이션으로서 재발행하도록 야기하는 상기 스케줄러에 표시를 제공할 수 있다. 상기 로드 오퍼레이션의 결과는 방송될 수 있고, 이는 ADD 2와 같은 임의의 종속 오퍼레이션들을 야기하며, 상기 종속 오퍼레이션들은 재발행되는 상기 이동의 추론적 결과를 이용하여 실행될 것이다. 이러한 이중 목적 오퍼레이션이 단일 스케줄러 엔트리를 사용하여 스케줄될 수 있고, 스케줄러(118)는 두 번의 발행을 위한 상기 이중 목적 오퍼레이션, 한번은 상기 로드의 어드레스 계산을 위한 것과 한번은 레지스터-투-레지스터 이동을 위한 것을 선택할 수 있다.
대안적인 실시예에서, 오퍼레이션 변환기(180)는 상기 추론적인 링크의 검출에 응답하여, LOAD 1을 두 개의 링크된 오퍼레이션들, LOAD PR3,[어드레스 패턴 A] 및 MOV PR3, PR2로 변환할 수 있다. 앞선 예와는 다르게, 이중 목적 오퍼레이션이 포함되는, 이러한 링크된 오퍼레이션들은 단일 스케줄러 엔트리를 공유하는 대신에 스케줄러(118) 내에 엔트리를 각기 차지한다. 상기 레지스터-투-레지스터 이동 오퍼레이션이 발행되는 경우, PR3의 추론적 값을 오퍼랜드 값으로서 이용하여 ADD 2와 같은 종속 오퍼레이션들이 발행될 수 있다. 상기 추론적 링크가 정확하다고 결정되는 경우, 상기 로드의 결과 태그가 방송이 아니도록(또는 상기 이동의 결과가 정확하다는 그리고 상기 종속 오퍼레이션이 재발행되지 말아야한다는 표시를 가지는 방송이도록), 상기 LOAD 오퍼레이션은 특정한 유형의 로드 오퍼레이션으로서 태그될 수 있다. 또한, 상기 로드 및 상기 이동 오퍼레이션 모두가 그들의 결과를 같은 사이클에서 방송하는 경우, 상기 로드 결과가 상기 이동 결과 대신에 종속 오퍼레이션들에 이용될 수 있도록 제공될 수 있다. 임의의 실시예에서, 이는 스케줄러가 어떤 태그에 응답할 것인지를 표시하는 상기 마이크로프로세서(100) 내의 각 태그 버스에 추가적인 비트를 추가함으로써 발생될 수 있다. 상기 추론적인 링크가 부정확한 경우(예를 들어, 상기 로드의 결과 태그의 방송에 의하여 표시되는 것과 같이), 상기 이동 오퍼레이션은 취소될 수 있다(예를 들어, 상기 이동 오퍼레이션을 스케줄하는 상기 스케줄러(118)가 상기 레지스터-투-레지스터 이동에 현재 할당되어 있는 스케줄러 엔트리의 할당을 제거(deallocation)하여 상기 오퍼레이션이 재발행될 수 없게할 수 있다) 많은 실시예에서, 상기 스케줄러는 상기 결과 버스 상에 다시 나타나는 상기 로드 결과 태그에 응답하여 상기 추론적 로드 결과를 사용하여 실행되는 임의의 종속 오퍼레이션들을 재발행하도록 구성될 수 있다.
도 8은 로드 오퍼레이션들을 추론적인 레지스터-투-레지스터 이동 오퍼레이션을 포함하도록 변환하는 방법의 일 실시예를 도시한다. 도시된 바와 같이, 단계(1401)에서, 임의의 태그에 의하여 식별되는 레지스터 데이터 값과 로드 오퍼레이션의 추론적 결과와의 사이에 링크가 (예를 들어, 메모리 파일에 의하여) 검출되는 경우, 상기 추론적 로드 결과에 링크된 데이터 값의 태그와 같은 소스 오퍼랜드 태그를 가지는 레지스터-투-레지스터 이동 오퍼레이션을 포함하도록 상기 로드 오퍼레이션이 수정될 수 있다.(단계 1403) 상기 레지스터-투-레지스터 이동 오퍼레이션의 실행은 상기 로드의 결과의 태그와 함께 상기 결과 버스 상에 상기 태그에 의하여 식별되는 데이터 값을 출력하는 것을 포함한다.(단계 1405)
단계(1409)에서, (예를 들어, 본래의 로드에 대한 어드레스 계산을 수행함으로써) 상기 추론적 결과가 검증될 수 있다. 상기 추론적 결과가 정확한 경우, 상기 로드의 결과는 상기 결과 버스 상에 재방송될 수 없다(또는 대안적으로는, 상기 재방송 결과에 응답하여 종속 오퍼레이션들이 재발행될 수 없다는 표시와 함께 상기 로드의 결과가 재방송될 수 있다). 상기 추론적 결과가 부정확한 경우, 상기 데이터 캐시에 액세스되어 상기 정확한 로드 결과를 검색할 수 있고, 상기 정확한 로드 결과는 상기 결과 버스 상으로 방송될 수 있다. 다음으로, 이는 상기 추론적인 결과 값을 이용하여 발행된 임의의 종속 오퍼레이션들이 재발행될 수 있도록 야기한다. 임의의 경우에서, 상기 추론적인 결과는 상기 레지스터-투-레지스터 이동 오퍼레이션의 수행 전에 검증될 수 있다. 상기 추론적인 결과가 부정확한 경우, 상기 레지스터-투-레지스터 이동 오퍼레이션은 수행될 수 없다.
상기 로드 오퍼레이션의 추론적 결과와 레지스터 데이터 값 사이에 어떠한 링크도 검출되지 않는 경우(예를 들어, 상기 로드의 어드레스 패턴이 메모리 파일에서 손실된 경우), 상기 로드는 수정될 수 없다. 상기 로드는 정상적으로 실행되고, 상기 데이터 캐시에 액세스하고, 그 결과를 상기 결과 버스 상에 방송한다.(단계 1417 및 단계 1419)
도 9는 버스 브리지(402)를 통하여 다양한 시스템 구성요소들에 연결된 프로세서(100)를 포함하는 컴퓨터 시스템(400)의 일 실시예의 블럭도를 도시한다. 프로세서(100)는 상술한 바와 같이, 디스패치 유닛(104), 메모리 파일(132), 스케줄러(118) 및/또는 추론적 레지스터 맵(800)의 실시예들을 포함한다. 컴퓨터 시스템의 다른 실시예들이 가능하고 고려된다. 도시된 시스템에서, 메인 메모리(200)는 메모리 버스(406)을 통하여 버스 브리지(402)에 연결되고, 그리고 그래픽 제어기(408)는 AGP 버스(410)를 통하여 버스 브리지(402)에 연결된다. 복수의 PCI 디바이스들(412A 내지 412B)이 PCI 버스(414)를 통하여 버스 브리지(402)에 연결된다. 부가적인 버스 브리지(416)가 또한 제공되어 EISA/ISA 버스(420)를 통하여 하나 이상의 EISA 또는 ISA 디바이스들(418)에 대한 전기적 인터페이스를 수용한다. 이러한 예에서, 프로세서(100)는 CPU 버스(424)를 통하여 버스 브리지(402)에 연결되고, 선택적인 L2 캐시(428)에 연결된다. 임의의 실시예에서, 상기 프로세서(100)는 통합된 L1 캐시(미도시)를 포함할 수 있다.
버스 브리지(402)는 프로세서(100), 메인 메모리(404), 그래픽 제어기(408), 및 PCI 버스(414)에 부착된 디바이스들 사이의 인터페이스를 제공한다. 버스 브리지(402)에 접속된 디바이스들 중 하나로부터 오퍼레이션이 수신되는 경우, 버스 브리지(402)는 상기 오퍼레이션의 타겟을 식별한다.(예를 들어, 임의의 디바이스, PCI 버스(414)의 경우 상기 타겟은 PCI 버스(414) 상에 존재한다) 버스 브리지(402)는 상기 오퍼레이션을 상기 타겟 디바이스에 라우팅한다. 버스 브리지(402)는 일반적으로 오퍼레이션을, 상기 소스 디바이스 또는 버스에 의하여 사용되는 프로토콜로부터 상기 타겟 디바이스 또는 버스에 의하여 사용되는 프로토콜로, 변형한다.
PCI 버스(414)를 위하여 ISA/EISA 버스에 인터페이스를 제공하는 것에 추가하여, 부가적인 버스 브리지(416)가 추가적인 기능성에 통합된다. 부가적인 버스 브리지(416)로부터 외부에 있거나 그에 통합된 입력/출력 제어기(미도시)가 또한 컴퓨터 시스템(400) 내에 포함되어서, 키보드 및 마우스(422)에 대한 그리고 다양한 직렬 및 병렬 포트들에 대한 조작가능한 지원을 제공한다. 다른 실시예에서, 외부 캐시 유닛(미도시)이 프로세서(100)와 버스 브리지(402) 사이의 CPU 버스(424)에 연결될 수 있다. 대안적으로, 상기 외부 캐시가 버스 브리지(402)에 연결될 수 있고, 상기 외부 캐시에 대한 캐시 제어 로직이 버스 브리지(402) 안으로 통합될 수 있다. L2 캐시(428)가 프로세서(100)의 후방 구조로 도시된다. L2 캐시(428)가 프로세서로부터 분리되거나, 프로세서(100)와 함께 카트리지(예를 들어, 슬롯 1 또는 슬롯 A)안으로 통합되거나, 또는 프로세서(100)와 함께 반도체 기판 안에 통합될 수도 있다는 점이 주목된다.
메인 메모리(200)는 응용 프로그램들이 저장되고, 프로세서(100)가 그로부터 주요하게 실행되는 메모리이다. 적당한 메인 메모리(200)는 DRAM(동적 랜덤 액세스 메모리 : dynamic random access memory)을 포함한다. 예를 들어, 다수의 SDRAM(동 기식 DRAM : synchronous dynamic random access memory)의 뱅크들 및 RDRAM( 램버스 DRAM : Rambus dynamic random access memory)이 적당할 수 있다.
PCI 디바이스들(412A 및 412B)이 네트워크 인터페이스 카드, 비디어 가속기, 오디오 카드, 하드 및 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(small computer systems interface : 소형 컴퓨터 시스템 인터페이스) 어뎁터, 및 전화 카드와 같은 다수의 주변 디바이스들을 예시한다. 유사하게, ISA 디바이스(418)는 모뎀, 사운드 카드, 및 GPIB 카드 또는 필드 버스 인터페이스 카드 같은 다양한 데이터 획득카드들을 예시한다.
그래픽 제어기(408)가 디스플레이(426) 상에 텍스트 및 이미지의 렌더링(rendering)을 제어한다. 그래픽 제어기(408)는 메인 메모리(200)안으로 효과적으로 쉬프트되거나 메인 메모리로부터 효과적으로 쉬프트될 수 있는 3차원 데이터 구조를 제공하는 기술에서 일반적으로 공지된 전형적인 그래픽 가속기를 구현한다. 그러므로, 그래픽 제어기(408)가 버스 브리지(402) 내에서 타겟 인터페이스에 대한 액세스를 요청 및 수신할 수 있고, 그에 의하여 메인 메모리(200)에 대한 액세스를 획득할 수 있는 점에서, 그래픽 제어기(408)는 AGP 버스(410)의 마스터일 수 있다. 전용 그래픽 버스는 메인 메모리(404)로부터의 빠른 데이터 검색을 수용한다. 임의의 오퍼레이션에 대하여, 그래픽 제어기(408)는 또한 AGP 버스(410) 상에 PCI 프로토콜 트랜잭션들을 발생하도록 구성될 수 있다. 따라서, 버스 브리지(402)의 상기 AGP 인터페이스는 PCI 프로토콜 타겟 및 개시기 트랜잭션들 뿐만 아니라 AGP 프로토콜 트랜잭션들 모두를 지원하는 기능성을 포함할 수 있다. 디스플레이(426)는 이미지 또는 텍스트가 나타날 수 있는 임의의 전기적 디스플레이이다. 적당한 디스플레이(426)는 "CRT(cathode ray tube : 음극선관)", "LCD (Liquid crystal display : 액정표시기)" 등이다.
상기 AGP, PCI 및 ISA 또는 EISA 버스가 상기 예에서 사용되었더라도, 임의의 요구되는 것과 같은 버스 아키텍처들로 대체될 수 있다는 점이 주목된다. 컴퓨터 시스템(400)은 추가적인 프로세서들(예를 들어, 컴퓨터 시스템(400)의 선택적인 성분으로 도시된 프로세서(100a)을 포함하는 다중처리 컴퓨터일 수 있다는 점이 또한 주목된다. 프로세서(100a)는 프로세서(100)와 유사하다. 보다 구체적으로, 프로세서(100a)는 프로세서(100)의 동일한 카피일 수 있다. 프로세서(100a)는 (도 9에 도시된 바와 같이) 독립적인 버스를 통하여 버스 브리지(402)에 접속될 수 있고, 또는 프로세서(100)와 CPU 버스(224)를 공유할 수 있다. 또한, 프로세서(100a)는 L2 캐시(428)에 유사한 선택적인 L2 캐시(428a)에 연결될 수 있다.
도 10에서, 상술한 바와 같이 디스패치 유닛(104), 메모리 파일(132), 스케줄러(118) 및/또는 추론적 레지스터 맵(800)을 포함하는 컴퓨터 시스템(400)의 다른 예가 도시된다. 다른 실시예들이 가능하고 또한 고려된다. 도 10의 실시예에서, 컴퓨터 시스템(400)은 복수의 처리 노드들(612A, 612B, 612C 및 612D)을 포함한다. 각 처리 노드는 각기 개별적인 처리 노드들(612A 내지 612D) 내에 포함된 메모리 제어기(616A 내지 616D)를 통하여 개별적인 메모리(614A 내지 614D)에 연결된다. 또한, 처리 노드들(612A 내지 612D)은 상기 처리 노드들(612A 내지 612D) 사이의 통신에 사용되는 인터페이스 로직을 포함한다. 예를 들어, 처리 노드(612A)는 처리 노드(612B)와의 통신을 위하여 인터페이스 로직(618A)을, 처리 노드(612C)와의 통신을 위하여 인터페이스 로직(618B)을, 그리고 또다른 처리 노드(미도시)와의 통신을 위하여 제 3의 인터페이스 로직(618C)을 포함한다. 유사하게, 처리 노드(612B)는 인터페이스 로직(618D, 618E 및 618F)을 포함하고, 처리 노드(612C)는 인터페이스 로직(618G, 618H 및 618I)을 포함하고, 그리고 처리 노드(612D)는 인터페이스 로직(618J, 618K 및 618L)을 포함한다. 처리 노드(612D)는 인터페이스 로직(618L)을 통하여 다수의 입력/출력 디바이스들(예를 들어, 데이지 체인(daisy chain) 구성에서의 디바이스들(620A-620B))과 통신하기 위하여 연결된다. 다른 처리 노드들이 유사한 방식으로 다른 I/O 디바이스들과 통신할 수 있다.
처리 노드들(612A-612D)은 내부 처리 노드 통신에 대한 패킷 기반 링크를 구현한다. 본 실시예에서, 상기 링크는 단방향(unidirectional) 라인들의 세트로서 구현된다.(예를 들어, 라인(624A)은 패킷들을 처리 노드(612A)로부터 처리 노드(612B)로 전송하는데 사용되고, 라인(624B)은 패킷들을 처리 노드(612B)로부터 처리 노드(612A)로 전송하는데 사용된다) 다른 세트들의 라인들(624C-624H)이 도 10에 도시된 바와 같이 다른 처리 노드들 사이에 패킷들을 전송하는데 사용된다. 일반적으로, 각 세트의 리인들(624)은 하나 이상의 데이터 라인들, 상기 데이터 라인들에 대응하는 하나 이상의 클록 라인들, 그리고 전달되는 패킷의 유형을 표시하는 하나 이상의 제어 라인들을 포함할 수 있다. 이러한 링크는 처리 노드들 사이에 통신을 위한 캐시 일관 방식 또는 처리 노드와 I/O 디바이스(또는 상기 PCI 버스 또는 ISA 버스와 같은 기존 구성의 I/O 버스에 대한 버스 브리지) 사이의 통신을 위한 비일관 방식으로 동작될 수 있다. 또한, 상기 링크는 도시된 바와 같이, I/O 디바이스 사이의 데이지 체인 구조를 사용하는 비일관 방식으로 동작될 수 있다. 한 처리 노드로부터 다른 처리 노드로 전송될 패킷은 하나 이상의 중간 노드들을 통과한다는 점이 주목된다. 예를 들어, 처리 노드(612A)에 의하여 처리 노드(612D)로 전송되는 패킷은 도 10에 도시된 처리 노드(612B) 또는 처리 노드(612C)를 통하여 통과할 수 있다. 임의의 적당한 라우팅 알고리즘이 사용될 수 있다. 컴퓨터 시스템(400)의 다른 실시예들은 도 10에 도시된 실시예보다 많거나 적은 처리 노드들을 포함할 수 있다.
일반적으로, 상기 패킷들은 노드들 사이의 라인들(624) 상에 하나 이상의 비트 타임들로서 전송될 수 있다. 비트 타임은 대응하는 클록 라인들 상의 상기 클록 신호의 상승단 또는 하강단일 수 있다. 상기 패킷들은 트랜잭션들을 개시하기 위한 명령 패킷들, 캐시 일관성을 유지하기 위한 프로브(probe) 패킷들, 그리고 프로브 및 명령에 응답하기 위한 응답 패킷들을 포함한다.
메모리 제어기 및 인터페이스 로직에 추가하여, 처리 노드들(612A-612D)이 하나 이상의 프로세서들을 포함할 수 있다. 대체적으로 말해서, 처리 노드는 적어도 하나의 프로세서를 포함하고, 필요에 따라 메모리 및 다른 로직과 통신하기 위한 메모리 제어기를 선택적으로 포함할 수 있다. 보다 구체적으로, 각 처리 노드(612A-612D)는 프로세서(100)의 하나 이상의 카피들을 포함할 수 있다. 외부 인터페이스 유닛(18)은 상기 메모리 제어기(616)뿐만 아니라, 상기 노드 내에 상기 인터페이스 로직(618)을 포함할 수 있다.
메모리들(614A-614D)는 임의의 적절한 메모리 디바이스들을 포함할 수 있다. 예를 들어, 메모리(614A-614D)는 하나 이상의 RDRAM들, SDRAM들, 정적 RAM 등을 포함할 수 있다. 컴퓨터 시스템(400)의 상기 어드레스 스페이스가 메모리들(614A-614D) 사이에 분할된다. 각 처리 노드(612A-612D)는, 어떤 어드레스들이 어떤 메모리들(614A-614D)에 맵핑되는지, 따라서 임의의 어드레스에 대한 메모리 요청이 어느 처리 노드(612A-612D)에 라우팅 되어야하는지를 결정하는데 사용하는, 메모리 맵을 포함한다. 일 실시예에서, 컴퓨터 시스템(400) 내의 어드레스에 대한 일관성 포인트는, 상기 어드레스에 대응하는 바이트들을 저장하는 메모리에 연결된 메모리 제어기(616A-616D)이다. 달리 말하면, 상기 메모리 제어기(616A-616D)는 상기 대응하는 메모리(614A-614D)에 대한 각 메모리 액세스가 캐시 일관 방식으로 발생한다는 것을 확실히할 책임이 있다. 메모리 제어기(616A-616D)는 메모리들(614A-614D)에 인터페이스하기 위한 제어 회로를 포함할 수 있다. 또한, 메모리 제어기들(616A-61D)은 메모리 요청들을 큐하기 위한 요청 큐들을 포함할 수 있다.
인터페이스 로직(618A-618L)은 링크로부터 패킷을 수신하고, 상기 링크 상에서 전송될 패킷들을 버퍼링하기 위한 다양한 버퍼들을 포함할 수 있다. 컴퓨터 시스템(400)은 패킷 전송에 대한 임의의 적당한 흐름 제어 메카니즘을 사용할 수 있다. 예를 들어, 일 실시예에서, 각 인터페이스 로직(618)은 상기 인터페이스 로직이 접속된 링크의 한 단부에서 수신기이내의 버퍼의 각 유형의 수에 대한 카운트를 저장한다. 수신하는 인터페이스 로직이 패킷을 저장할 비어있는 버퍼를 구비하지 않는 경우, 상기 인터페이스 로직은 패킷을 전송하지 않는다. 수신하는 버퍼가 패킷을 앞으로 라우팅함으로써 비어지기 때문에, 상기 수신하는 인터페이스 로직은 상기 버퍼가 비었다는 것을 표시하기 위하여 송신측 인터페이스 로직에 메세지를 전송한다. 그러한 메카니즘은 "쿠폰-기반" 시스템으로 언급될 수 있다.
I/O 디바이스들(620A-620B)은 임의의 적당한 I/O 디바이스일 수 있다. 예를 들어, I/O 디바이스들(620A-620B)은 상기 디바이스들이 연결될 수 있는 또다른 컴퓨터 시스템과 통신하기 위한 디바이스들(예를 들어, 네트워크 인터페이스 카드 또는 모뎀)을 포함한다. 또한, I/O 디바이스들(620A-620B)은 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI 어뎁터들 및 전화 카드, 사운드 카드, 및 GPIB 카드 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드들을 포함할 수 있다. 상기 용어 "I/O 디바이스" 및 상기 용어 "주변 디바이스"는 본 장에서는 같은 것으로 의도된다는 점이 주목된다.
본 장에서 사용된 바와 같이, 용어들 "클록 사이클" 또는 "사이클"은 명령 처리 파이프라인의 다양한 단계들이 그들의 임무를 완료하는 시간의 간격을 지칭한다. 명령들 및 계산된 값들은 상기 클록 사이클을 정의하는 클록 신호에 따라서. (레지스터 또는 어레이들과 같은) 메모리 소자들에 의하여 캡쳐(capture)된다. 예를 들어, 메모리 소자는 상기 클록 신호의 상승단 또는 하강단에 따라 값을 캡쳐할 수 있다.
일단 상기 명세서가 전체적으로 이해된다면, 당업자에게는 다양한 변화 및 수정들이 명백해질 것이다. 하기의 청구항들을 그러한 모든 변화들 및 수정들을 모두 포함하는 것으로 해석되는 것으로 의도된다.
본 발명은 일반적으로 마이크로프로세서 분야에 응용가능할 것이다.

Claims (33)

  1. 마이크로프로세서로서,
    실행 코어(execution core)에 의해 실행될 수 있는 오퍼레이션(operation)에 할당된 엔트리를 포함하는 스케줄러와, 여기서 상기 엔트리는 비추론적 태그(non-speculative tag)와 추론적 태그(speculative tag)를 포함하며, 상기 비추론적 태그와 상기 추론적 태그는 모두 상기 오퍼레이션의 제 1 오퍼랜드(operand)와 연관되고, 상기 스케줄러는 유효한 상기 추론적 태그에 의하여 식별된 데이터 값에 응답하여 상기 오퍼레이션을 발행하도록 되어있으며; 그리고
    상기 스케줄러에 연결되며, 상기 추론적 태그에 의하여 식별된 데이터 값을 사용하여 상기 오퍼레이션을 실행하도록 되어있는 실행 코어를 포함하고; 여기서 상기 스케줄러는 상기 비추론적 태그가 결과 버스 상에 표시되는 경우 상기 오퍼레이션을 재발행하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  2. 제 1항에 있어서,
    레지스터 맵 및 추론적 레지스터 맵을 포함하는 디스패치 유닛을 더 포함하고, 여기서 상기 레지스터 맵은 상기 제 1 오퍼랜드의 논리적 레지스터 식별자를 수신하는 것에 응답하여 상기 비추론적 태그를 출력하고, 그리고 상기 추론적 레지스터 맵은 상기 제 1 오퍼랜드의 논리적 레지스터 식별자를 수신하는 것에 응답하여 상기 추론적 태그를 출력하는 것을 특징으로 하는 마이크로프로세서.
  3. 제 2항에 있어서,
    상기 추론적 레지스터 맵은, 로드 오퍼레이션의 추론적 결과가 상기 추론적 태그에 의하여 식별된 데이터 값에 링크된다는 표시(indication)에 응답하여, 상기 추론적 태그를 상기 제 1 논리적 레지스터 식별자와 연관시키도록 구성되고, 상기 로드 오퍼레이션의 결과는 상기 제 1 논리적 레지스터 식별자에 의하여 식별되는 것을 특징으로 하는 마이크로프로세서.
  4. 제 3항에 있어서,
    상기 추론적 레지스터 맵은 상기 로드 오퍼레이션의 상기 추론적 결과가 상기 추론적 태그에 의하여 식별된 데이터 값에 부정확하게 링크된다(incorrectly linked)는 표시에 응답하여 상기 제 1 논리적 레지스터 식별자로부터 상기 추론적 태그를 분리하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  5. 제 2항에 있어서,
    상기 추론적 레지스터 맵은 제 2 오퍼레이션이 상기 제 1 논리적 레지스터 식별자에 의하여 식별된 데이터 값을 수정할 것이라는 표시에 응답하여 상기 제 1 논리적 레지스터 식별자로부터 상기 추론적 태그를 분리하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  6. 제 3항에 있어서,
    상기 디스패치 유닛은 상기 로드 오퍼레이션의 상기 추론적 결과가 상기 추론적 태그에 의하여 식별된 데이터 값에 링크된다는 표시를 발생시키도록 되어있는 메모리 파일을 포함하는 것을 특징으로 하는 마이크로프로세서.
  7. 제 2항에 있어서,
    상기 추론적 레지스터 맵은, 소스 오퍼랜드와 상기 제 1 논리적 레지스터 식별자에 의하여 식별되는 목적지 오퍼랜드를 가지는 조건적인 이동 오퍼레이션에 응답하여, 상기 추론적 태그를 상기 제 1 논리적 레지스터 식별자와 연관시키도록 되어있으며, 여기서 상기 소스 오퍼랜드의 현재의 값은 상기 추론적 태그에 의하여 식별되는 것을 특징으로 하는 마이크로프로세서.
  8. 제 1항에 있어서,
    제 1 명령에 포함된 오퍼레이션들 사이의 데이터 종속성(data dependency)을 검출하는 것에 응답하여 상기 추론적 태그 및 상기 비추론적 태그를 상기 스케줄러에 제공하도록 되어있는 디스패치 유닛을 더 포함하고, 여기서 상기 오퍼레이션들 중 제 1 오퍼레이션은 로드 오퍼레이션이고 상기 로드 오퍼레이션의 목적지 오퍼랜드는 상기 비추론적 태그에 의해 식별되며, 여기서 상기 디스패치 유닛은 상기 로드 오퍼레이션의 추론적 결과와 상기 추론적 태그에 의하여 식별된 데이터 값 사이의 링크를 검출하도록 되어있으며, 그리고 상기 오퍼레이션은 상기 제 1 명령에 포함된 오퍼레이션들에 포함되고 상기 로드 오퍼레이션에 종속되는 것을 특징으로 하는 마이크로프로세서.
  9. 제 1항에 있어서,
    상기 스케줄러는 다른 미발행(unissued) 오퍼레이션들이 모두 그것들의 유효한 비추론적 오퍼랜드를 갖지 않는 경우에, 유효한 추론적 태그에 의하여 식별된 데이터 값에 응답하여 상기 오퍼레이션을 발행하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  10. 마이크로프로세서로서,
    실행 코어에 의해 실행될 수 있는 오퍼레이션의 제 1 소스 오퍼랜드에 대한 비추론적 오퍼랜드 태그를 제공하도록 되어있는 비추론적 레지스터 맵과;
    상기 오퍼레이션의 상기 제 1 소스 오퍼랜드에 대한 추론적 오퍼랜드 태그를 제공하도록 되어있는 추론적 레지스터 맵과; 그리고
    상기 추론적 레지스터 맵에 연결된 스케줄러를 포함하고,
    여기서 상기 스케줄러는 상기 오퍼레이션에 할당된 엔트리를 포함하고, 상기 엔트리는 상기 오퍼랜드에 대한 상기 추론적 오퍼랜드 태그 및 상기 비추론적 오퍼랜드 태그를 포함하고, 상기 스케줄러는 상기 추론적 오퍼랜드 태그를 사용하여 실행하기 위한 상기 오퍼레이션을 발행하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  11. 제 10항에 있어서,
    상기 제 1 소스 오퍼랜드는 제 1 논리적 레지스터 식별자에 의하여 식별되고, 상기 추론적 오퍼랜드 태그는 제 1 물리적 레지스터를 식별하고, 상기 비추론적 오퍼랜드 태그는 제 2 물리적 레지스터를 식별하는 것을 특징으로 하는 마이크로프로세서.
  12. 제 10항에 있어서,
    상기 스케줄러에 연결되며, 상기 추론적 오퍼랜드 태그에 의하여 식별된 데이터 값을 사용하여 상기 오퍼레이션을 실행하도록 되어있는 실행 코어를 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  13. 제 10항에 있어서,
    상기 스케줄러는 결과 버스 상에 나타나는 비추론적 오퍼랜드 태그에 응답하여 상기 오퍼레이션을 재발행하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  14. 제 10항에 있어서,
    로드 오퍼레이션의 추론적 결과와 상기 추론적 오퍼랜드 태그에 의하여 식별된 데이터 값 사이의 링크를 검출하도록 되어있는 메모리 파일을 더 포함하고, 여기서 상기 로드 오퍼레이션의 결과는 제 1 논리적 레지스터 식별자에 의하여 식별되고, 여기서 상기 추론적 레지스터 맵은 상기 링크를 검출하는 메모리 파일에 응답하여 상기 제 1 논리적 식별자와 상기 추론적 오퍼랜드 태그를 연관시키도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  15. 제 14항에 있어서,
    상기 추론적 레지스터 맵은, 상기 로드 오퍼레이션의 상기 추론적 결과가 상기 추론적 오퍼랜드 태그에 의하여 식별된 데이터 값에 부정확하게 링크된다는 표시에 응답하여, 상기 추론적 오퍼랜드 태그를 상기 제 1 논리적 레지스터 식별자로부터 분리하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  16. 제 15항에 있어서,
    상기 실행 코어는 상기 로드 오퍼레이션에 대한 어드레스 계산의 수행에 응답하여 상기 표시를 발생하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  17. 제 10항에 있어서,
    상기 추론적 레지스터 맵은, 소스 오퍼랜드와 상기 제 1 논리적 레지스터 식별자에 의하여 식별되는 목적지 오퍼랜드를 가지는 조건적인 이동 오퍼레이션에 응답하여, 상기 추론적 오퍼랜드 태그를 상기 제 1 논리적 레지스터 식별자와 연관시키도록 되어있으며, 여기서 상기 소스 오퍼랜드의 현재의 값은 상기 추론적 오퍼랜드 태그에 의하여 식별되는 것을 특징으로 하는 마이크로프로세서.
  18. 제 10항에 있어서,
    상기 추론적 레지스터 맵은, 제 2 오퍼레이션이 상기 제 1 논리적 레지스터 식별자에 의해 식별된 데이터 값을 수정할 것이라는 표시에 응답하여, 상기 제 1 논리적 레지스터 식별자로부터 상기 추론적 오퍼랜드 태그를 분리하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
  19. 추론적으로 오퍼레이션들을 실행하기 위하여 추론적 소스 오퍼랜드들을 사용하는 방법으로서,
    실행 코어에 의해 실행될 수 있는 오퍼레이션의 제 1 소스 오퍼랜드를 비추론적 오퍼랜드 태그에 맵핑하는 단계와;
    상기 오퍼레이션의 제 1 소스 오퍼랜드를 추론적 오퍼랜드 태그에 추론적으로 맵핑하는 단계와;
    상기 비추론적 오퍼랜드 태그 및 상기 추론적 오퍼랜드 태그를 상기 오퍼레이션에 할당된 스케줄러 엔트리에 저장하는 단계와;
    상기 추론적 오퍼랜드 태그에 의하여 식별되는 제 1 데이터 값의 유효성에 응답하여 상기 오퍼레이션을 발행하는 단계와;
    상기 비추론적 오퍼랜드 태그에 의하여 식별되는 제 2 데이터 값을 사용하는 대신에 상기 추론적 오퍼랜드 태그에 의하여 식별되는 제 1 데이터 값을 사용하여 상기 오퍼레이션을 실행하는 단계를 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  20. 제 19항에 있어서,
    상기 제 1 소스 오퍼랜드는 제 1 논리적 레지스터 식별자에 의하여 식별되고, 상기 추론적 오퍼랜드 태그는 제 1 물리적 레지스터를 식별하고, 그리고 상기 비추론적 오퍼랜드 태그는 제 2 물리적 레지스터를 식별하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  21. 제 19항에 있어서,
    결과 버스 상에 나타나는 상기 비추론적 오퍼랜드 태그에 응답하여 상기 오퍼레이션을 재발행하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  22. 제 19항에 있어서,
    로드 오퍼레이션의 추론적 결과와 상기 추론적 오퍼랜드 태그에 의하여 식별되는 데이터 값과의 사이의 링크를 검출하는 단계와, 여기서 상기 제 1 소스 오퍼랜드는 상기 로드 오퍼레이션의 결과로서 발생되고; 그리고
    상기 링크의 검출에 응답하여 상기 제 1 소스 오퍼랜드와 상기 추론적 오퍼랜드 태그를 연관시키는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  23. 제 22항에 있어서,
    상기 로드 오퍼레이션의 상기 추론적 결과가 상기 추론적 오퍼랜드 태그에 의하여 식별되는 상기 데이터 값에 부정확하게 링크되었다는 표시에 응답하여, 상기 제 1 소스 오퍼랜드로부터 상기 추론적 오퍼랜드 태그를 분리시키는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  24. 제 23항에 있어서,
    상기 로드 오퍼레이션에 대한 어드레스 계산을 수행하는 것에 응답하여 상기 표시를 발생하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  25. 제 19항에 있어서,
    목적지 오퍼랜드 및 소스 오퍼랜드를 가지는 조건적인 이동 오퍼레이션에 응답하여, 상기 추론적 오퍼랜드 태그를 상기 제 1 소스 오퍼랜드와 연관시키는 단계를 더 포함하고, 상기 조건적인 이동 오퍼레이션의 소스 오퍼랜드의 현재 값은 상기 추론적 오퍼랜드 태그에 의하여 식별되고, 그리고 상기 제 1 소스 오퍼랜드는 상기 조건적인 이동 오퍼레이션의 목적지 오퍼랜드인 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  26. 제 19항에 있어서,
    제 2 오퍼레이션이 상기 제 1 소스 오퍼랜드를 수정할 것이라는 표시에 응답하여 상기 제 1 소스 오퍼랜드로부터 상기 추론적 오퍼랜드 태그를 분리하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  27. 추론적으로 오퍼레이션들을 실행하기 위하여 추론적 소스 오퍼랜드들을 사용하는 방법으로서,
    추론적 오퍼랜드 태그에 의하여 식별되는 제 1 데이터 값의 유효성에 응답하여, 실행 코어에 의해 실행될 수 있는 오퍼레이션을 발행하는 단계와;
    비추론적 오퍼랜드 태그에 의하여 식별되는 제 2 데이터 값을 사용하는 대신에 상기 제 1 데이터 값을 사용하여 상기 오퍼레이션을 실행하는 단계와;
    결과 버스 상에 상기 비추론적 오퍼랜드 태그를 방송하는 단계와;
    상기 방송에 응답하여, 상기 오퍼레이션을 재발행하는 단계와; 그리고
    상기 재발행에 응답하여, 상기 비추론적 오퍼랜드 태그에 의하여 식별되는 상기 제 2 데이터 값을 사용하여 상기 오퍼레이션을 실행하는 단계를 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  28. 제 27항에 있어서,
    로드 오퍼레이션의 추론적 결과가 상기 추론적 오퍼랜드 태그에 의하여 식별되는 데이터 값에 링크된다는 표시에 응답하여 상기 추론적 오퍼랜드 태그를 상기 오퍼레이션의 제 1 소스 오퍼랜드와 연관시키는 단계를 더 포함하며, 여기서 상기 로드 오퍼레이션의 결과는 상기 제 1 소스 오퍼랜드인 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  29. 제 28항에 있어서,
    상기 로드 오퍼레이션의 상기 추론적 결과가 상기 추론적 오퍼랜드 태그에 의하여 식별되는 데이터 값에 부정확하게 링크된다는 표시에 응답하여 상기 제 1 소스 오퍼랜드로부터 상기 추론적 오퍼랜드 태그를 분리하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  30. 제 28항에 있어서,
    제 2 오퍼레이션이 상기 제 1 소스 오퍼랜드를 수정할 것이라는 표시에 응답하여 상기 제 1 소스 오퍼랜드로부터 상기 추론적 오퍼랜드 태그를 분리하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  31. 제 27항에 있어서,
    목적지 오퍼랜드 및 소스 오퍼랜드를 가지는 조건적인 이동 오퍼레이션에 응답하여 상기 추론적 오퍼랜드 태그를 상기 제 1 소스 오퍼랜드에 연관시키는 단계를 더 포함하고, 여기서 상기 조건적인 이동의 소스 오퍼랜드의 현재의 값은 상기 추론적 오퍼랜드 태그에 의하여 식별되고, 그리고 상기 제 1 소스 오퍼랜드는 상기 조건적인 이동 오퍼레이션의 목적지 오퍼랜드인 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  32. 제 27항에 있어서,
    제 1 명령에 포함된 오퍼레이션들 사이의 데이터 종속성을 검출하는 단계와, 상기 오퍼레이션들은 상기 오퍼레이션 및 로드 오퍼레이션을 포함하고, 여기서 상기 로드 오퍼레이션의 목적지 오퍼랜드는 상기 비추론적 오퍼랜드 태그에 의하여 식별되고, 그리고 상기 오퍼레이션은 상기 로드 오퍼레이션에 종속되고; 그리고
    상기 로드 오퍼레이션의 추론적 결과와 상기 추론적 오퍼랜드 태그에 의하여 식별되는 데이터 값 사이의 링크를 검출하는 단계를 더 포함하는 것을 특징으로 하는 추론적 소스 오퍼랜드들을 사용하는 방법.
  33. 시스템 메모리 및 상기 시스템 메모리에 연결된 마이크로프로세서를 포함하고,
    여기서 상기 마이크로프로세서는, 실행 코어에 의해 실행될 수 있는 오퍼레이션에 할당된 엔트리를 포함하는 스케줄러와, 여기서 상기 엔트리는 비추론적 태그와 추론적 태그를 포함하고, 여기서 상기 비추론적 태그와 상기 추론적 태그는 모두 상기 오퍼레이션의 제 1 오퍼랜드와 연관되고, 여기서 상기 스케줄러는 유효한 상기 추론적 태그에 의하여 식별되는 데이터 값에 응답하여 상기 오퍼레이션을 발행하도록 되어있으며; 그리고
    상기 스케줄러에 연결되며, 상기 추론적 태그에 의하여 식별되는 데이터 값을 사용하여 상기 오퍼레이션을 실행하도록 되어있는 실행 코어를 포함하고,
    여기서, 상기 스케줄러는 상기 비추론적 태그가 결과 버스 상에 나타나는 경우에 상기 오퍼레이션을 재발행하도록 되어있는 것을 특징으로 하는 마이크로프로세서.
KR1020047017544A 2002-04-30 2002-12-20 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법 KR100953207B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/135,497 US6845442B1 (en) 2002-04-30 2002-04-30 System and method of using speculative operand sources in order to speculatively bypass load-store operations
US10/135,497 2002-04-30
PCT/US2002/041716 WO2003093983A1 (en) 2002-04-30 2002-12-20 System and method of using speculative source operands in order to bypass load/store operations

Publications (2)

Publication Number Publication Date
KR20040111566A KR20040111566A (ko) 2004-12-31
KR100953207B1 true KR100953207B1 (ko) 2010-04-15

Family

ID=29399220

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047017544A KR100953207B1 (ko) 2002-04-30 2002-12-20 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법

Country Status (8)

Country Link
US (1) US6845442B1 (ko)
EP (1) EP1499958A1 (ko)
JP (1) JP3866261B2 (ko)
KR (1) KR100953207B1 (ko)
CN (1) CN1310136C (ko)
AU (1) AU2002359880A1 (ko)
TW (1) TWI289786B (ko)
WO (1) WO2003093983A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040044881A1 (en) * 2002-08-28 2004-03-04 Sun Microsystems, Inc. Method and system for early speculative store-load bypass
US6950925B1 (en) * 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
JP3602840B2 (ja) * 2002-10-22 2004-12-15 株式会社東芝 命令の投機的実行制御装置およびその方法
US7937569B1 (en) 2004-05-05 2011-05-03 Advanced Micro Devices, Inc. System and method for scheduling operations using speculative data operands
US7624253B2 (en) * 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
US7822951B2 (en) * 2007-08-01 2010-10-26 Advanced Micro Devices, Inc. System and method of load-store forwarding
US8533438B2 (en) * 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
EP2738681A4 (en) * 2011-07-27 2014-07-30 Fujitsu Ltd ELECTRONIC DEVICE, METHOD FOR ACCESSING THIS DEVICE AND PROGRAM THEREFOR
US8825933B2 (en) * 2011-11-30 2014-09-02 Andes Technology Corporation Bus apparatus with default speculative transactions and non-speculative extension
US9384002B2 (en) * 2012-11-16 2016-07-05 International Business Machines Corporation Speculative finish of instruction execution in a processor core
US9785442B2 (en) 2014-12-24 2017-10-10 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
US10387158B2 (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
US10303525B2 (en) 2014-12-24 2019-05-28 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
US20160357556A1 (en) * 2014-12-24 2016-12-08 Elmoustapha Ould-Ahmed-Vall 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
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10620961B2 (en) * 2018-03-30 2020-04-14 Intel Corporation Apparatus and method for speculative conditional move operation

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US624986A (en) * 1899-05-16 Adolf sengel

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778219A (en) * 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US5428807A (en) 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5584009A (en) * 1993-10-18 1996-12-10 Cyrix Corporation System and method of retiring store data from a write buffer
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
US6237082B1 (en) * 1995-01-25 2001-05-22 Advanced Micro Devices, Inc. Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received
US6108769A (en) 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6112296A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Floating point stack manipulation using a register map and speculative top of stack values
US6175910B1 (en) 1997-12-19 2001-01-16 International Business Machines Corportion Speculative instructions exection in VLIW processors
US6108770A (en) 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets
US6463580B1 (en) 1998-11-18 2002-10-08 Intel Corporation Parallel processing utilizing highly correlated data values
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6643767B1 (en) * 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US624986A (en) * 1899-05-16 Adolf sengel

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Also Published As

Publication number Publication date
CN1625732A (zh) 2005-06-08
TWI289786B (en) 2007-11-11
KR20040111566A (ko) 2004-12-31
EP1499958A1 (en) 2005-01-26
AU2002359880A1 (en) 2003-11-17
TW200402001A (en) 2004-02-01
CN1310136C (zh) 2007-04-11
US6845442B1 (en) 2005-01-18
WO2003093983A1 (en) 2003-11-13
JP2005532614A (ja) 2005-10-27
JP3866261B2 (ja) 2007-01-10

Similar Documents

Publication Publication Date Title
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
KR100958705B1 (ko) 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법
KR101019224B1 (ko) 이중 용도 레지스터를 식별하는 어드레스 지정 패턴에기반한 데이터 추측
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
US7089400B1 (en) Data speculation based on stack-relative addressing patterns
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
US7165167B2 (en) Load store unit with replay mechanism
US7937569B1 (en) System and method for scheduling operations using speculative data operands
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
KR101057163B1 (ko) 마이크로프로세서에서 데이터-추론 연산들을 식별하는 추론포인터들
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
KR20070019750A (ko) 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

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: 20130321

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140320

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee