KR100958705B1 - 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법 - Google Patents

로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법 Download PDF

Info

Publication number
KR100958705B1
KR100958705B1 KR1020047017543A KR20047017543A KR100958705B1 KR 100958705 B1 KR100958705 B1 KR 100958705B1 KR 1020047017543 A KR1020047017543 A KR 1020047017543A KR 20047017543 A KR20047017543 A KR 20047017543A KR 100958705 B1 KR100958705 B1 KR 100958705B1
Authority
KR
South Korea
Prior art keywords
address pattern
address
tag
speculative
result
Prior art date
Application number
KR1020047017543A
Other languages
English (en)
Other versions
KR20050013544A (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 KR20050013544A publication Critical patent/KR20050013544A/ko
Application granted granted Critical
Publication of KR100958705B1 publication Critical patent/KR100958705B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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

시스템은 메모리 파일(132)과, 상기 메모리 파일은 제 1 어드레스 패턴(206) 및 제 1 태그(208)을 저장하도록 구성되고, 그리고 상기 메모리 파일에 연결된 실행 코어(124)을 포함할 수 있다. 상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 로드 동작의 제 2 어드레스 패턴과 비교하도록 구성된다. 상기 제 2 어드레스 패턴이 상기 엔트리에 저장된 상기 제 1 어드레스 패턴에 매치하는 경우, 상기 메모리 파일은 상기 제 1 태그에 의하여 식별되는 데이터 값을 상기 로드 동작의 추론적 결과에 링크시키도록 구성된다. 상기 실행 코어는 상기 로드 동작에 종속적인 제 2 동작을 실행하는 경우, 상기 추론적 결과에 액세스하도록 구성된다.

Description

로드 동작들의 추론적 결과들을 레지스터 값들에 링크시키는 시스템 및 방법{SYSTEM AND METHOD FOR LINKING SPECULATIVE RESULTS OF LOAD OPERATIONS TO REGISTER VALUES}
본 발명은 마이크로프로세서 분야에 관한 것으로, 보다 구체적으로는 마이크로프로세서에서 데이터 추론적 실행의 수행에 관한 것이다.
수퍼스칼라 마이크로프로세서는 다수의 명령들을 동시에 실행함으로써, 그리고 그 설계에 일치하는 가장 짧은 가능한 클록 사이클을 사용함으로써 고성능을 달성하였다. 그러나, 명령들 사이의 데이터 및 제어 흐름 종속성에 의하여 임의의 소정의 시간에 얼마나 많은 명령들이 발행될 수 있는지가 제한된다. 결과적으로, 임의의 마이크로프로세서는 추가적인 성능 이득을 획득하기 위하여 추론적 실행(speculative execution)을 지원한다.
추론(speculation)의 한 유형은 제어 흐름 추론이다. 제어 흐름 추론은 프로그램 제어가 진행될 방향을 예측한다. 예를 들어, 브랜치 예측(branch prediction)이 브랜치가 선택될 것인지 여부를 예측하는데 사용될 수 있다. 단순하게 매 시간마다 같은 예측을 하는 방법에서부터 이력-기반 예측을 하기 위하여 프로그램에서 선행 브랜치들의 이력들을 정교하게 유지하는 방법에 이르기까지, 많은 유형의 브랜치 예측들이 이용가능하다. 브랜치 예측은 하드웨어 최적화, 컴파일러 최적화, 또는 이 모두를 통해 용이해진다. 상기 브랜치 예측 메카니즘에 의하여 제공된 예측에 근거하여, 명령들이 추론적으로 페치(fetch)되거나 실행된다. 상기 브랜치 명령이 최종 평가되는 경우, 상기 브랜치 예측이 검증될 수 있다. 상기 예측이 부정확한 경우, 상기 부정확한 예측에 근거하여 추론적으로 실행된 임의의 명령들은 무효화(quash)된다.
제안된 추론의 다른 유형은 데이터 추론이다. 예를 들어, 데이터 아이템들의 값을 예측하는, 값 예측은 데이터 내의 패턴들을 관찰하고, 그러한 패턴들에 근거하여 상기 예측을 수행하는 것을 포함한다(예를 들어, 인덱스 카운터 변수의 값은 상기 변수의 이전 값들이 어떻게 증분(increment)되는지 또는 감소(decrement)되는지를 관찰함으로써 예측될 수 있다). 어드레스 예측이 데이터의 위치를 예측하는 것을 포함한다. 데이터 추론의 또 다른 유형은 메모리 시스템 최적화로 불린다. 멀티프로세서 시스템에서, 일관성 체크가 완료되기 전에, 프로세서가 그 프로세서의 로컬 캐시로부터 데이터를 이용하여 명령을 추론적으로 실행하는 경우, 메모리 시스템 최적화가 발생한다. 유사하게, 데이터 추론의 다른 유형에 따르면, 로드가 실행되는 시간에 계산되지 않은 어드레스를 가지는 저장소(store) 앞에서, 상기 로드가 추론적으로 실행되도록 한다. 물론 상기 저장소가 상기 로드가 액세스하는 같은 어드레스에 데이터를 저장할 수도 있다. 모든 유형의 데이터 추론에서, 기초적인 조건들이 결과적으로 평가되어서, 상기 추론이 검증되거나 수행되지 않도록 한다. 상기 추론이 부정확하게 끝나는 경우, 상기 추론된 데이터를 이용하여 실행된 명령들이 (예를 들어, 갱신되거나 및/또는 비추론된 데이터를 가지고) 재실행될 수 있다.
추론은 종속성 체크가 완료되기를 기다리지 않고 실행이 진행되도록 하기 때문에, 정확한 추론으로부터의 성능 이득이 부정확한 추론에 의한 성능 손실을 능가하는 경우, 실질적인 성능 이득이 달성된다. 따라서 마이크로프로세서에서 데이터 추론을 수행하고, 오추론(misspeculations)에 대한 효율적인 복구 메커니즘을 제공할 수 있는 것은 바람직하다.
로드 동작들의 추론적 결과들을 레지스터 값에 링크시키는 방법 및 시스템의 다양한 실시예들이 구현될 수 있다. 일 실시예에서, 시스템은 메모리 파일과, 상기 메모리 파일은 제 1 어드레스 패턴 및 제 1 태그를 저장하도록 구성된 엔트리를 포함하며; 그리고 상기 메모리 파일에 연결된 실행 코어를 포함할 수 있다. 상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 로드 동작의 제 2 어드레스 패턴과 비교하도록 구성될 수 있다. 상기 제 2 어드레스 패턴이 상기 엔트리에 저장된 상기 제 1 어드레스 패턴에 매치(match)하는 경우, 상기 메모리 파일은 상기 제 1 태그에 의하여 식별되는 데이터 값을 상기 로드 동작의 추론적 결과에 링크시키도록 구성된다. 상기 실행 코어는 상기 로드 동작에 종속적인 제 2 동작을 실행하는 경우, 상기 추론적 결과에 액세스하도록 구성된다.
방법의 일 실시예는 제 1 동작의 제 1 어드레스 패턴을 제 2 동작의 제 2 어드레스 패턴과 비교하는 단계를 포함한다. 상기 제 2 동작은 프로그램 순서에서 상기 제 1 동작보다 먼저 일어난다. 상기 제 1 어드레스 패턴이 상기 제 2 어드레스 패턴에 매치되는 경우, 상기 제 2 동작에 대한 오퍼랜드의 태그에 의하여 식별되는 데이터 값은 상기 제 1 동작의 추론적 결과에 링크될 수 있다. 상기 제 1 동작의 결과에 종속적인 오퍼랜드 소스를 가지는 제 3 동작은 상기 태그에 의하여 식별되 는 데이터 값을 이용하여 실행될 수 있다.
하기의 도면을 참조하여 하기의 상세한 설명을 고려함으로써 본 발명을 보다 잘 이해할 수 있게 된다.
도 1은 마이크로프로세서의 일 실시예를 도시한다.
도 2A는 디스패치 유닛의 일 실시예의 블럭도이다.
도 2B는 일 실시예에서 사용될 수 있는 예시적인 메모리 파일 저장소 엔트리를 도시한다.
도 3은 로드 동작의 추론적인 결과를 임의의 태그에 의하여 식별되는 데이터 값에 링크시키는 방법의 일 실시예를 나타내는 흐름도이다.
도 4는 스케줄러의 일 실시예의 블럭도이다.
도 5는 동작들을 발행하는, 그리고 데이터 추론이 부정확했다는 표시에 응답하여 동작들을 재발행하는, 방법의 일 실시예를 나타내는 흐름도이다.
도 6은 디스패치 유닛의 다른 실시예의 블럭도이다.
도 7은 디스패치 유닛의 또다른 실시예의 블럭도이다.
도 8은 추론적 데이터 값들로 동작들을 발행하는, 그리고 오예측들로부터 회복시키는 다른 방법을 나타내는 흐름도이다.
도 9는 컴퓨터 시스템의 일 실시예를 도시한다.
도 10은 컴퓨터 시스템의 다른 실시예를 도시한다.
본 발명은 비록 다양한 수정과 대안적인 형태들이 가능하지만, 본 명세서에 서는 발명의 특정한 실시예를 예로써 도면에 도시하였으며, 이에 대해 자세히 설명될 것이다. 그러나 도면 및 이에 대한 상세한 설명은 본 발명을 개시된 특정 예로만 제한하도록 의도된 것은 아니며, 오히려 첨부된 청구항에 의해 정의되는 것처럼 본 발명의 정신 및 범위 내에 드는 모든 변형, 균등물 및 대안들을 포괄하도록 의도된 것이다. 주목할 사항으로써, 표제들(headings)은 단지 조직화하기 위한 것이고, 실시예 또는 청구항을 제한하거나 해석하는데 사용되도록 의도된 것이 아니다.
도 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)은 레지스터 재명명을 용이하게 하기 위하여 소스(source) 및 목적지(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 station)가 스케줄러이다. 각 스케줄러(118)는 실행 코어(124)에 발행되기를 대기하는 다수의 미정 동작들에 대한 동작 정보(예들 들어, 비트 엔코드된 실행 비트뿐만 아니라 오퍼랜드 값, 오퍼랜드 태그들, 및/또는 즉시 테이터)를 유지할 수 있다. 임의의 실시예에서, 각 스케줄러(118)는 오퍼랜드 값 저장소를 제공하지 않는다. 대신, 각 스케줄러는, 오퍼랜드 값들이 언제 실행 코어(들)(124)에 의해 판독되는데 유효해지는지를 결정하기 위하여, 발행된 동작들 및 레지스트 파일(116)에 유효한 결과들을 모니터할 수 있다. 임의의 실시예에서, 각 스케줄러(118)는 전용 실행 코어(124)에 관련될 수 있다. 다른 실시예에서, 단일 스케줄러(118)가 하나보다 많은 실행 코어(들)(124)에 동작들을 발행할 수 있다.
스케줄러(118)는 상기 실행 코어(들)(124)에 의하여 실행될 동작 정보를 임시로 저장하도록 제공될 수 있다. 상술한 바와 같이, 각 스케줄러(118)는 미정 동작들에 대한 동작 정보를 저장할 수 있다. 또한, 각 스케줄러는 이미 실행되었으나 여전히 재발행될 수 있는 동작들에 대한 동작 정보를 저장할 수 있다. 실행을 위한 시간에 유효해지는 임의의 요구되는 오퍼랜드(들)의 값에 응답하여, 실행을 위해 동작들이 실행 코어(들)(124)에 발행된다. 따라서, 동작들이 실행되는 순서는 원래의 프로그램 명령 시퀀스의 순서와 같지 않다. 데이터 추론을 포함하는 동작들은 상기 데이터 추론이 부정확한 경우 재발행되기 위하여 비추론될 때까지 스케줄러(들)(118)에 남을 수 있다.
다른 실시예에서, 실행 코어(들)(124) 각각은 덧셈 또는 뺄샘의 정수 산술 동작들 뿐만 아니라, 쉬프트, 회전, 논리 동작, 및 브랜치 동작들을 수행하도록 구성된 성분들을 포함할 수 있다. 플로팅 포인트 유닛(floating point unit)이 또한 포함되어서 플로팅 포인트 동작들을 수용한다. 하나 이상의 실행 코어(들)(124)은 로드 및 저장 메모리 동작이 로드/저장 장치 유닛(126)에 의하여 수행되기 위하여 어드레스 발생을 수행하도록 구성된다.
상기 실행 코어(들)(124)은 또한 조건적인 브랜치 명령들의 실행에 관한 정보를 브랜치 예측 유닛에 제공하여, 브랜치가 오예측된 경우, 상기 브랜치 예측 유닛은 명령 처리 파이프라인 및 재지시 프리페치 유닛(108)에 입력된 상기 오예측된 브랜치에 후속하는 명령들을 플러시(flush)할 수 있다. 그 후, 상기 재지시 프리페치 유닛(108)은 정확한 세트의 명령들을 명령 캐시(106) 또는 시스템 메모리(200)로 부터 페치하기 시작한다. 그러한 상황에서, 추론적으로 실행되고 그리고 레지스터 파일(116) 내에 임시로 저장된 것을 포함하는, 상기 오예측된 브랜치 명령들 후에 발생하는 본래의 프로그램 시퀀스 내의 명령들의 결과들은 폐기된다. 실행 코어(들)(124) 내에서 성분들에 의하여 생산된 결과들은, 레지스터 값이 갱신된 경우, 상기 결과 버스(130) 상에서 상기 레지스터 파일(116)로 출력된다. 메모리 위치의 컨탠츠가 변경되는 경우, 실행 코어(들)(124) 내에서 생산된 결과들이 상기 로드/저장 유닛(126)에 제공된다.
로드/저장 유닛(126)은 실행 코어(들)(124)과 데이터 캐시(128) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드/저장 유닛(126)은 미정 로드들 또는 저장들에 대한 데이터 및 어드레스 정보에 대해 수개의 저장 위치들을 구비한 로드/저장 버퍼를 갖도록 구성될 수 있다. 상기 로드/저장 유닛(126)은 또한 미정의 저장 명령들에 대응하는 로드 명령에 대한 종속성 체크를 수행하여 데이터 일관성이 유지되는 것을 보장한다.
데이터 캐시(128)는 로드/저장 유닛(126)과 상기 시스템 메모리(200) 사이에 전달되는 데이터를 일시적으로 저장하도록 제공되는 캐시 메모리이다. 상술한 명령 캐시(106)과 유사하게, 상기 데이터 캐시(128)는 세트 연관 구성을 포함하는 다양한 특정 메모리 구성에서 구현된다. 또한, 임의의 실시예에서, 데이터 캐시(106) 및 명령 캐시(128)는 단일화된 캐시에서 구현된다.
도 2A는 디스패치 유닛(104)의 일 실시예를 도시한다. 상기 실시예에서, 디스패치 유닛(104)은 레지스터 맵(134) 및 메모리 파일(132)을 포함한다. 상술한 바와 같이, 레지스터 맵(134)은 레지스터 재명명을 제공하도록 구성된다. 레지스터 맵(134)은 각각의 소스 및 목적지 오퍼랜드에 대한 논리 레지스터 네임을 수신할 수 있고, 그리고 가장 최근에 할당된 물리적 레지스터의 물리적 레지스터 네임을 상기 논리 레지스터에 출력한다. 메모리 파일(132)은 메모리 파일 제어기(202) 및 메모리 파일 저장소(204)를 포함한다.
메모리 파일 저장소(204)는 하나 이상의 엔트리들(220)을 포함한다. 각 엔트리(220)는 어드레스 패턴(206) 및, 상기 엔트리의 어드레스 패턴에 연관된 태그(208)를 포함한다. 각 태그는 상기 데이터가 어디에(예를 들어, 재배열 버퍼내에 또는 레지스터 파일(116) 내에) 저장될 것이며 언제 발생될 것인지를 표시함으로써 데이터 값을 식별할 수 있다. 예를 들어, 예시적인 실시예에 도시된 바와 같이, 각 태그는, 레지스터 맵(134)에 의하여 표시된 것과 같은, 상기 데이터 값을 저장하도록 할당된 물리적 레지스터를 식별한다. 각각의 어드레스 패턴은 동작에서 어드레스를 특정하는데 사용되는 정보의 모두 또는 일부를 포함할 수 있다. 예를 들어, 도 2B를 참조하면, 예시적인 어드레스 패턴(206)이 도시된다. 이러한 실시예에서, 상기 어드레스 패턴(206)은 베이스 논리적 레지스터 네임(base logical register name)(210), 인덱스 논리적 레지스터 네임(index logical register name)(212) 및 변위(displacement)(214)를 포함한다. 일부 어드레스 패턴(206)은 메모리 내의 특정 세그먼트를 식별하는 레지스터의 세그먼트 논리적 레지스터 네임(segment logical register name)을 포함한다. 주목할 사항으로, 많은 실시예에서, 메모리 파일 저장소(204)에 저장된 어드레스 패턴(206)은 동작에 대해 특정된 모든 어드레스 정보보다 적은 어드레스 정보를 포함할 수 있다. 예를 들어, 메모리 파일 저장소(204) 내의 엔트리는 변위 필드(214) 내에 변위를 특정하는데 사용되는 모든 비트들보다 적은 비트를 저장할 수 있다. 다른 실시예에서, 상기 메모리 파일 제어기(202)는 상기 메모리 파일 내의 엔트리가 임의의 동작에 대한 모든 어드레스 정보를 저장할 수 있는지 여부에 따라서 메모리 파일 저장소(204) 내에 엔트리를 할당할 것인지를 선택적으로 선택할 수 있다. 예를 들어, 만약 메모리 파일 저장소(204) 내의 각각의 엔트리가 최대 16비트의 변위 정보에 저장하고, 그리고 특정 동작에 대한 어드레스 정보가 24비트의 변위 정보를 포함하는 경우, 상기 메모리 파일 제어기(202)는 상기 동작의 어드레스 정보에 대한 메모리 파일 엔트리를 할당하지 않을 수 있다. 임의의 실시예에서, 메모리 파일 저장소(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) 상에 상기 로드 동작의 정확한 결과를 방송하도록 야기한다. 상기 로드를 재발행하는 것은, 상기 로드의 추론적인 결과를 사용하여 실행되는 임의의 종속 동작들 모두가, 갱신된 비추론적인 값을 사용하여 재발행되거나 실행되도록 야기한다. 대안적으로, 상기 링크가 부정확한 경우, 상기 프로세서(100)는 상기 오추론 후에 발생되는 동작들을 플러시하고, 상기 로드 동작의 정확한 결과를 사용하여 상기 동작들의 실행을 재시작한다.
보여진 것과 같이, 메모리 파일(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)의 출력의 에러를 야기하지 않는다). 그러나, 로드 동작의 추론적인 결과들을 물리적 레지스터에 저장된 값들로 정확하게 링크함으로써 제공되는 이점들을 증가시키기 위하여 및/또는 오예측된 추론적 링크들에 대하여 발생하는 임의의 성능 저하(performance penalties)를 감소시키기 위하여, 메모리 파일(132)의 정확성을 향상시키는 것이 바람직하다. 임의의 실시예에서, 메모리 파일(132)의 정확성은, 어드레스를 명시하는데 사용되는 레지스터들로의 갱신이 검출되는 경우, 메모리 파일 저장소(204)에서 엔트리를 무효화시킴으로써 상승된다. 예를 들어, 각 어드레스 패턴은 어드레스 계산에 대한 베이스 및 인덱스를 식별하는데 사용되는 하나 이상의 논리적 레지스터 식별자들을 포함한다. 후속적인 동작이 엔트리의 어드레스 패턴(206)의 부분으로서 명시된 논리적 레지스터들 중 하나를 수정하는 경우, 상기 엔트리는 무효화될 수 있다. 따라서, 도 2A에 도시된 바와 같이, 엔트리 무효화를 수행하기 위하여, 각 동작의 목적지 레지스터의 논리 레지스터 네임들이 메모리 파일(132)에 입력될 수 있다.
또한, 임의의 실시예에서, 메모리 파일 저장소(204) 내의 엔트리들이 임의의 어드레스에서 데이터에 기입 액세스를 얻은 또다른 디바이스를 스누프(snooping)하는 것에 응답하여 무효화될 수 있다. 유사하게, 오예측의 검출에 응답하여 엔트리가 무효화될 수 있다. 일반적으로, 상기 메모리 파일 저장소(204)내의 엔트리들의 정확성에 작용하는 것과 같은 많은 조건들이 모니터될 수 있고, 언제 엔트리가 무효화되는 지를 결정하는데 이용될 수 있다. 그러나, 메모리 파일(132)이 추론적 구조이기 때문에, 임의의 모니터 방법들을 구현하는 추가적인 하드웨어 비용이 메모리 파일 정확성에서의 가능한 향상성을 초과하는 경우, 임의의 실시예들은 이러한 모니터 방법들 중 일부를 구현할 수 없다.
메모리 파일(132)은 레지스터 값들을 추론적 로드 결과에 링크시키는데 사용되는 동작 스트림에서 서로간에 상대적으로 제거되는 동작들 사이에 종속성을 허용한다. 따라서, 메모리 파일은 다수의 간섭 동작들에 의하여 분리될 수 있는 동작들 사이에 종속성 이력을 제공할 수 있다.
도 3은 로드 동작의 추론적 결과를 레지스터 값에 링크시키는 방법의 일 실시예에 대한 흐름도를 도시한다. 단계 301에서, 태그가 어드레스 패턴에 관련되고, 둘 모두가 같은 데이터 값을 저장하기 쉽다는 것을 표시한다. 상기 태그와 어드레스 패턴 모두는 제 1 로드에 대하여 명시되거나 또는 동작을 저장한다. 예를 들어, 상기 제 1 동작이 로드 동작인 경우, 상기 태그는 상기 로드의 결과를 저장하도록 할당된 물리적 레지스터를 식별할 수 있고, 상기 어드레스 패턴은 상기 로드의 어드레스를 계산하는데 사용될 수 있다. 상기 제 1 동작이 저장 동작인 경우, 상기 어드레스 패턴은 상기 저장의 목적지의 어드레스를 표시할 수 있고, 상기 태그는 상기 저장 동작에 의하여 저장되는 데이터를 식별할 수 있다. 임의의 실시예에서, 상기 태그 및 상기 어드레스 패턴은 둘 모두를 메모리 파일 내의 엔트리에 저장함으로써 관련될 수 있다.
로드 동작의 어드레스 패턴이 상기 제 1 동작의 어드레스 패턴에 매치되는 경우, 상기 로드의 추론적 결과는 상기 제 1 동작에 대하여 명시된 상기 태그에 의하여 식별된 데이터 값에 링크될 수 있다. 상기 로드 동작의 어드레스 패턴이 상기 제 1 동작의 어드레스 패턴에 매치되지 않는 경우, (예를 들어, 메모리 파일 내의 엔트리에 둘 모두를 저장함으로써) 상기 로드의 어드레스 패턴 및 상기 로드의 목적지에 대한 태그가 연관될 수 있다(단계 303 내지 단계 311). 또한, 상기 데이터 캐시에 액세스함으로써 상기 로드는 정상적으로 수행될 수 있다(단계 313.) 일 실시예에서, 상기 로드의 동작의 어드레스 패턴은 하나보다 많은 앞선 동작의 어드레스 패턴에 비교될 수 있다. 예를 들어, 상기 로드의 어드레스 패턴은 메모리 파일에 현재 저장된 각 어드레스 패턴에 비교될 수 있다.
상기 로드의 추론적 결과가 상기 태그에 의하여 식별되는 데이터 값에 링크되는 경우, 상기 데이터 값은 상기 로드 동작의 추론적 결과로서 하나 이상의 종속 동작들로 전송될 수 있다(단계 307). 하기에서 보다 상세히 설명되는 바와 같이, 상기 데이터 값은 전송되는 결과를 통하여 전송되거나 또는 종속 동작이 상기 데이터 값을 추론적 오퍼랜드 소스로서 사용할 수 있다는 것의 표시를 전송함으로써 전송될 수 있다. 일 실시예에서, 상기 데이터 값이 결과 전송을 통해 전송되는 경우, 상기 데이터 값을 발생하는 동작이 실행을 완료한 후 한 사이클의 상기 전송된 데이터 값을 이용하여 종속 동작들이 실행될 수 있다. 상기 데이터 값이 종속 동작들이 상기 물리적 레지스터를 추론적 오퍼랜드 소스로서 사용할 수 있다는 것의 표시를 통하여 전송되는 경우, 상기 데이터 값을 발생하는 상기 동작이 실행이 완료된 후에 즉시 종속 동작들이 발행될 수 있다. 단계(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) 및/또는 결과 태그 버스들(52)을 이용하는)이 구현될 수 있다.
도 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)가 상기 레지스터-투-레지스터 이동에 현재 할당되어 있는 스케줄러 엔트리를 제거하여 상기 동작이 재발행될 수 없게 할 수 있다) 많은 실시예에서, 상기 스케줄러는 상기 결과 버스 상에 다시나타나는 상기 로드 결과 태그에 응답하여 상기 추론적 로드 결과를 사용하여 실행되는 임의의 종속 동작들을 재발행하도록 구성될 수 있다.
도 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 system 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)은 내부 처리 노드 통신에 대한 패킷 기반 링크를 구현한다. 본 실시예에서, 상기 링크는 단방향 라인들의 세트로서 구현된다(예를 들어, 라인(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)의 하나 이상의 카피들을 포함할 수 있다. 외부 인터페이스 유닛은 상기 메모리 제어기(616)뿐만 아니라, 상기 노드 내에 상기 인터페이스 로직(618)을 포함할 수 있다.
메모리들(614A-614D)는 임의의 적절한 메모리 디바이스들을 포함할 수 있다. 예를 들어, 메모리(614A-614D)는 하나 이상의 RDRAM들, SDRAM들 정적 RAM 등을 포함할 수 있다. 컴퓨터 시스템(400)의 상기 어드레스 스페이스가 메모리들(614A-614D) 사이에 분할된다. 각 처리 노드(612A-612D)는, 어떤 어드레스들이 어떤 메모리들(614A-614D)에 맵핑되는지, 따라서 임의의 어드레스에 대한 메모리 요청이 어느 처리 노드(612A-612D)에 라우팅 되어야하는지를 결정하는데 사용하는, 메모리 맵을 포함한다. 일 실시예에서, 컴퓨터 시스템(400) 내에 어드레스에 대한 일관성 포인트는, 상기 어드레스에 대응하는 바이트들을 저장하는 메모리에 연결된 메모리 제어기(616A-616D)이다. 달리 말하면, 상기 메모리 제어기(616A-616D)는 상기 대응하는 메모리(164A-614D)에 대한 각 메모리 액세스가 캐시 일관 방식으로 발생한다는 것을 확실히 할 책임이 있다. 메모리 제어기(616A-616D)는 메모리들(614A-614D)에 인터페이스하기 위한 제어 회로를 포함할 수 있다. 또한, 메모리 제어기들(616A-616D)은 메모리 요청들을 큐하기 위한 요청 큐들을 포함할 수 있다.
인터페이스 로직(618A-618L)은 링크로부터 패킷을 수신하고, 상기 링크 상에서 전송될 패킷들을 버퍼링하기 위한 다양한 버퍼들을 포함할 수 있다. 컴퓨터 시스템(400)은 패킷 전송에 대한 임의의 적당한 흐름 제어 메카니즘을 사용할 수 있다. 예를 들어, 일 실시예에서, 각 인터페이스 로직(618)은 상기 인터페이스 로직이 접속된 링크의 한 단부에서 수신기 내의 버퍼의 각 유형의 수에 대한 카운트를 저장한다. 수신하는 인터페이스 로직이 패킷을 저장할 비어있는 버퍼를 구비하지 않는 경우, 상기 인터페이스 로직은 패킷을 전송하지 않는다. 수신하는 버퍼가 패킷을 앞으로 라우팅함으로써 비어지기 때문에, 상기 수신하는 인터페이스 로직은 상기 버퍼가 비었다는 것을 표시하기 위하여 전송하는 인터페이스 로직에 메세지를 전송한다. 그러한 메카니즘은 "쿠폰-기반" 시스템으로 언급될 수 있다.
I/O 디바이스들(620A-620B)은 임의의 적당한 I/O 디바이스일 수 있다. 예를 들어, I/O 디바이스들(620A-620B)은 상기 디바이스들이 연결될 수 있는 또다른 컴퓨터 시스템과 통신하기 위한 디바이스들(예를 들어, 네트워크 인터페이스 카드 또는 모뎀)을 포함한다. 또한, I/O 디바이스들(620A-620B)은 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI 어뎁터들 및 전화 카드, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드들을 포함할 수 있다. 상기 용어 "I/O 디바이스" 및 상기 용어 "주변 디바이스"는 본 장에서는 같은 것으로 의도된다는 점이 주목된다.
본 장에서 사용된 바와 같이, 용어들 "클록 사이클" 또는 "사이클"은 명령 처리 파이프라인의 다양한 단계들이 그들의 임무를 완료하는 시간의 간격을 지칭한다. 명령들 및 계산된 값들은 상기 클록 사이클을 정의하는 클록 신호에 따라서. (레지스터 또는 어레이들과 같은) 메모리 소자들에 의하여 캡쳐(capture)된다. 예를 들어, 메모리 소자는 상기 클록 신호의 상승단 또는 하강단에 따라서 값을 캡쳐할 수 있다.
일단 상기 명세서가 전체적으로 이해된다면, 당업자에게는 다양한 변화 및 수정들이 명백해질 것이다. 하기의 청구항들을 그러한 모든 변화들 및 수정들을 모두 포함하는 것으로 해석되는 것으로 의도된다.
본 발명은 일반적으로 마이크로프로세서 분야에 응용가능할 것이다.

Claims (51)

  1. 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템으로서,
    메모리 파일과; 그리고
    상기 메모리 파일에 연결된 실행 코어를 포함하여 구성되며,
    여기서, 상기 메모리 파일은 제 1 어드레스 패턴 및 제 1 태그를 저장하도록 구성된 엔트리를 포함하고, 상기 제 1 어드레스 패턴 및 제 1 태그는 제 1 로드 동작에 대응하며, 상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 제 2 로드 동작의 제 2 어드레스 패턴과 비교하도록 구성되고, 상기 제 1 및 제 2 어드레스 패턴들 각각은 각각의 데이터 값 어드레스를 생성하는데 사용되는 하나 이상의 어드레스 오퍼랜드들을 특정하며, 그리고 상기 제 2 어드레스 패턴이 상기 엔트리에 저장된 상기 제 1 어드레스 패턴과 매치하는 경우, 상기 메모리 파일은 상기 제 1 태그에 의하여 식별된 데이터 값을 상기 제 2 로드 동작의 추론적 결과에 링크시키도록 구성되고, 그리고
    상기 실행 코어는 상기 제 2 로드 동작에 종속하는 제 3 동작을 실행하는 경우, 상기 추론적 결과에 액세스하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  2. 제1항에 있어서,
    상기 제 1 태그를 상기 제 3 동작에 대한 추론적 오퍼랜드 소스 태그로서 전송하는 수단을 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  3. 제2항에 있어서,
    스케쥴러를 더 포함하고, 상기 스케쥴러는 상기 스케쥴러에 제공되는 상기 추론적 오퍼랜드 소스 태그에 응답하여, 상기 로드 동작을 발행하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  4. 제1항에 있어서,
    결과 버스 상에 상기 데이터 값을 전송하고 아울러 상기 데이터 값이 상기 제 2 로드 동작의 결과라는 것을 표시하는 수단을 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  5. 제1항에 있어서,
    상기 메모리 파일은 상기 제 1 태그를 상기 제 2 로드 동작에 대한 추론적 소스 오퍼랜드 태그로서 출력함으로써, 상기 제 1 태그에 의하여 식별된 데이터 값을 상기 제 2 로드 동작의 결과에 추론적으로 링크시키도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  6. 제1항에 있어서,
    상기 제 1 어드레스 패턴은 저장 동작의 어드레스 패턴의 일부이고, 상기 저장 동작은 프로그램 순서에서 상기 제 2 로드 동작보다 먼저 발생하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  7. 제6항에 있어서,
    상기 제 1 어드레스 패턴은 제 1 논리적 레지스터 식별자를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  8. 제7항에 있어서,
    상기 제 1 어드레스 패턴은 제 2 논리적 레지스터 식별자를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  9. 제7항에 있어서,
    상기 제 1 어드레스 패턴은 세그먼트 논리적 레지스터 식별자를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  10. 제7항에 있어서,
    상기 제 1 어드레스 패턴은 상기 저장 동작의 어드레스 패턴에 포함된 모든 다수의 변위 비트들보다 적은 비트들을 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  11. 제1항에 있어서,
    상기 제 2 로드 동작의 추론적 결과가 상기 제 1 태그에 의하여 식별된 데이터 값에 정확하게 링크되었는지의 표시를 출력하도록 구성되는 로드/저장 유닛을 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  12. 제11항에 있어서,
    상기 로드/저장 유닛은 상기 제 2 로드 동작의 결과 태그를 결과 버스 상에 출력함으로써, 상기 제 2 로드 동작의 추론적 결과가 상기 데이터 값에 부정확하게 링크되었음의 표시를 출력하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  13. 제11항에 있어서,
    상기 제 2 로드 동작의 추론적 결과가 상기 데이터 값에 부정확하게 링크되는 경우, 상기 로드/저장 유닛은 상기 제 2 로드 동작의 정확한 결과를 검색하기 위하여 데이터 캐시에 액세스하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  14. 제13항에 있어서,
    상기 로드/저장 유닛이 상기 제 2 로드 동작의 정확한 결과를 검색하는 것에 응답하여, 상기 제 3 동작을 재발행하도록 구성되는 스케쥴러를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  15. 제11항에 있어서,
    상기 시스템은, 상기 제 2 로드 동작의 추론적 결과가 상기 데이터 값에 부정확하게 링크되었다는 것을 표시하는 상기 로드/저장 유닛에 의하여 출력된 표시에 응답하여 다수의 동작들을 플러시하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  16. 제1항에 있어서,
    상기 제 2 어드레스 패턴이 상기 엔트리에 포함된 상기 제 1 어드레스 패턴에 매치되지 않는 경우, 상기 메모리 파일은 상기 제 2 로드 동작의 결과를 식별하는 제 2 태그 및 상기 제 2 어드레스 패턴의 적어도 일부를 저장하기 위하여 제 2 엔트리를 할당하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  17. 제1항에 있어서,
    상기 제 2 어드레스 패턴이 상기 엔트리에 포함된 상기 제 1 어드레스 패턴에 매치되지 않고, 그리고 상기 제 2 어드레스 패턴이 변위 비트들의 제1의 개수보다 더 많은 비트를 포함하는 경우, 상기 메모리 파일은 상기 제 2 어드레스 패턴을 저장하기 위한 제 2 엔트리의 할당을 금지하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  18. 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템으로서,
    메모리 파일과; 그리고
    상기 메모리 파일에 연결된 실행 코어를 포함하여 구성되며,
    여기서, 상기 메모리 파일은 제 1 어드레스 패턴 및 제 1 태그를 저장하도록 구성된 엔트리를 포함하고, 상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 로드 동작의 제 2 어드레스 패턴과 비교하도록 구성되며, 상기 제 2 어드레스 패턴이 상기 엔트리에 저장된 상기 제 1 어드레스 패턴과 매치하는 경우, 상기 메모리 파일은 상기 제 1 태그에 의하여 식별된 데이터 값을 상기 로드 동작의 추론적 결과에 링크시키도록 구성되고, 그리고
    상기 실행 코어는 상기 로드 동작에 종속하는 제 2 동작을 실행하는 경우, 상기 추론적 결과에 액세스하도록 구성되고,
    상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 저장 동작의 제 3 어드레스 패턴과 비교하도록 구성되고, 만약 상기 제 3 어드레스 패턴이 상기 제 1 어드레스 패턴과 매치한다면, 상기 메모리 파일은 상기 저장 동작의 소스 오퍼랜드를 식별하는데 사용되는 제 2 태그로 상기 제 1 태그를 대체하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  19. 제18항에 있어서,
    상기 제 3 어드레스 패턴이 상기 제 1 어드레스 패턴에 매치되지 않는 경우, 상기 메모리 파일은 상기 제 3 어드레스 패턴 및 상기 제 2 태그를 저장하기 위해 제 2 엔트리를 할당하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  20. 제19항에 있어서,
    상기 메모리 파일은 겹쳐기입될 다수의 할당된 엔트리들 중 최근에 최소 사용된 것을 선택함으로써 상기 제 2 엔트리를 할당하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  21. 제1항에 있어서,
    상기 메모리 파일은 다수의 엔트리들을 포함하고, 상기 다수의 엔트리들 각각은 어드레스 패턴 및 태그를 저장하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  22. 제21항에 있어서,
    상기 메모리 파일은 상기 제 2 어드레스 패턴을 상기 다수의 엔트리들에 포함된 각각의 어드레스 패턴과 비교하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  23. 제1항에 있어서,
    상기 메모리 파일은, 상기 제 1 태그에 의하여 식별된 데이터 값과 상기 제 1 어드레스 패턴으로부터 계산된 어드레스에 저장된 데이터 값이 동일하지 않다는 표시에 응답하여, 상기 엔트리를 무효화하도록 구성되는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  24. 제23항에 있어서,
    상기 표시는 제 2 동작이 상기 제 1 어드레스 패턴에서 식별되는 논리적 레지스터의 값을 수정할 것이라는 표시인 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  25. 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법으로서,
    제 1 동작의 제 1 어드레스 패턴과 제 2 동작의 제 2 어드레스 패턴을 비교하는 단계와, 여기서 상기 제 2 동작은 프로그램 순서에서 상기 제 1 동작보다 먼저 발생하는 로드 동작을 포함하고, 그리고 상기 제 1 및 제 2 어드레스 패턴들 각각은 각각의 데이터 값 어드레스를 생성하는데 사용되는 하나 이상의 어드레스 오퍼랜드들을 특정하며;
    상기 제 1 어드레스 패턴이 상기 제 2 어드레스 패턴에 매치하는 경우, 상기 제 2 동작에 대한 오퍼랜드의 태그에 의하여 식별되는 데이터 값을 상기 제 1 동작의 추론적 결과에 링크시키는 단계와; 그리고
    상기 제 1 동작의 결과에 종속하는 오퍼랜드 소스를 가지는 제 3 동작을 실행하는 단계를 포함하여 구성되며,
    여기서, 상기 실행하는 단계는 상기 태그에 의하여 식별되는 데이터 값에 액세스하는 것을 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  26. 제25항에 있어서,
    상기 제 1 어드레스 패턴이 상기 제 2 동작의 제 2 어드레스 패턴에 매치되지 않는 경우, 메모리 파일 내에 상기 제 1 동작의 결과를 식별하는데 사용되는 상기 제 1 어드레스 패턴 및 제 1 태그를 저장하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  27. 제25항에 있어서,
    상기 제 1 어드레스 패턴이 상기 제 2 동작의 제 2 어드레스 패턴에 매치하지 않고, 그리고 상기 제 1 어드레스 패턴이 변위 비트들의 제1의 개수보다 더 많은 비트들을 포함하는 경우, 메모리 파일에 상기 제 1 어드레스 패턴의 저장을 금지하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  28. 제25항에 있어서,
    상기 제 1 어드레스 패턴을 다수의 어드레스 패턴들에 비교하는 단계를 더 포함하고, 여기서 상기 다수의 어드레스 패턴들은 상기 제 2 어드레스 패턴을 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  29. 제25항에 있어서,
    상기 제 3 동작에 대한 추론적 오퍼랜드 소스 태그로서 상기 태그를 전송하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  30. 제25항에 있어서,
    상기 데이터 값이 상기 제 1 동작의 결과라는 것을 표기하기 위하여 결과 버스 상에 상기 데이터 값을 전송하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  31. 제25항에 있어서,
    상기 링크시키는 단계는 상기 제 1 동작에 대한 추론적 소스 오퍼랜드 태그로서 상기 태그를 제공하는 것을 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  32. 제25항에 있어서,
    상기 제 2 어드레스 패턴은 저장 동작의 어드레스 패턴의 일부이고, 상기 제 1 동작은 로드 동작인 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  33. 제32항에 있어서,
    상기 제 1 어드레스 패턴은 제 1 논리적 레지스터 식별자를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  34. 제33항에 있어서,
    상기 제 1 어드레스 패턴은 제 2 논리적 레지스터 식별자를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  35. 제33항에 있어서,
    상기 제 1 어드레스 패턴은 상기 저장 동작의 어드레스 패턴에 포함된 모든 다수의 변위 비트들보다 적은 비트들을 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  36. 제33항에 있어서,
    상기 제 1 어드레스 패턴은 세그먼트 논리적 레지스터 식별자를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  37. 제36항에 있어서,
    상기 제 1 동작의 추론적 결과가 상기 태그에 의하여 식별되는 데이터 값에 정확하게 링크되었는지를 검증하는 단계를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  38. 제37항에 있어서,
    상기 제 1 동작의 추론적 결과가 상기 태그에 의하여 식별되는 데이터 값에 부정확하게 링크되었다면, 다수의 동작들을 플러시하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  39. 제37항에 있어서,
    상기 로드 동작의 결과 태그를 결과 버스 상에 출력함으로써, 상기 제 1 동작의 추론적 결과가 상기 데이터 값에 부정확하게 링크되었음을 표시하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  40. 제37항에 있어서,
    상기 제 1 동작의 추론적 결과가 상기 데이터 값에 부정확하게 링크되는 경우, 상기 제 1 동작의 정확한 결과를 검색하기 위하여 데이터 캐시에 액세스하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  41. 제37항에 있어서,
    상기 액세스하는 것에 응답하여 상기 제 3 동작을 재발행하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  42. 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법으로서,
    제 1 동작의 제 1 어드레스 패턴과 제 2 동작의 제 2 어드레스 패턴을 비교하는 단계와, 여기서 상기 제 2 동작은 프로그램 순서에서 상기 제 1 동작보다 먼저 발생하고;
    상기 제 1 어드레스 패턴이 상기 제 2 어드레스 패턴에 매치하는 경우, 상기 제 2 동작에 대한 오퍼랜드의 태그에 의하여 식별되는 데이터 값을 상기 제 1 동작의 추론적 결과에 링크시키는 단계와;
    상기 제 1 동작의 결과에 종속하는 오퍼랜드 소스를 가지는 제 3 동작을 실행하는 단계와, 여기서 상기 실행하는 단계는 상기 태그에 의하여 식별되는 데이터 값에 액세스하는 것을 포함하고; 그리고
    상기 제 2 어드레스 패턴을 저장 동작의 제 3 어드레스 패턴과 비교하여, 상기 제 3 어드레스 패턴이 상기 제 2 어드레스 패턴과 일치하면, 상기 태그를 상기 저장 동작의 소스 오퍼랜드를 식별하는데 사용되는 제 2 태그로 대체하는 단계를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  43. 제42항에 있어서,
    상기 제 2 어드레스 패턴 및 상기 태그가 제 1 메모리 파일 엔트리에 저장되고, 상기 방법은, 상기 태그에 의하여 식별되는 데이터 값과 상기 제 2 어드레스 패턴으로부터 계산되는 어드레스에 저장된 데이터 값이 동일하지 않다는 표시에 응답하여, 상기 제 1 메모리 파일 엔트리를 무효화하는 단계를 더 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  44. 제43항에 있어서,
    상기 표시는 제 4 동작이 상기 제 2 어드레스 패턴에서 식별되는 논리적 레지스터의 값을 수정할 것이라는 표시인 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  45. 컴퓨터 시스템으로서,
    시스템 메모리와; 그리고
    상기 시스템 메모리에 연결된 마이크로 프로세서를 포함하여 구성되고,
    여기서, 상기 마이크로프로세서는,
    메모리 파일과, 그리고
    상기 메모리 파일에 연결된 실행 코어를 포함하고,
    여기서, 상기 메모리 파일은 제 1 어드레스 패턴 및 제 1 태그를 저장하도록 구성된 엔트리를 포함하며, 상기 제 1 어드레스 패턴 및 제 1 태그는 제 1 로드 동작에 대응하고, 상기 메모리 파일은 상기 엔트리에 포함된 상기 제 1 어드레스 패턴을 제 2 로드 동작의 제 2 어드레스 패턴과 비교하도록 구성되며, 상기 제 1 및 제 2 어드레스 패턴들 각각은 각각의 데이터 값 어드레스를 생성하는데 사용되는 하나 이상의 어드레스 오퍼랜드들을 특정하고, 그리고 상기 제 2 어드레스 패턴이 상기 엔트리에 저장된 상기 제 1 어드레스 패턴과 매치하는 경우, 상기 메모리 파일은 상기 제 1 태그에 의하여 식별된 데이터 값을 상기 제 2 로드 동작의 추론적 결과에 링크시키도록 구성되며; 그리고
    상기 실행 코어는 상기 제 2 로드 동작에 종속하는 제 3 동작을 실행하는 경우, 상기 추론적 결과에 액세스하도록 구성된 것을 특징으로 하는 컴퓨터 시스템.
  46. 제1항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 베이스 값(address base value)의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  47. 제1항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 인덱스 값(address index value)의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  48. 제1항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 변위 값의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 시스템.
  49. 제25항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 베이스 값의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  50. 제25항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 인덱스 값의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
  51. 제25항에 있어서,
    상기 하나 이상의 어드레스 오퍼랜드들은 어드레스 변위 값의 표시를 포함하는 것을 특징으로 하는 로드 동작의 추론적 결과를 데이터 값에 링크시키는 방법.
KR1020047017543A 2002-04-30 2002-12-20 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법 KR100958705B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/135,496 2002-04-30
US10/135,496 US7028166B2 (en) 2002-04-30 2002-04-30 System and method for linking speculative results of load operations to register values
PCT/US2002/041313 WO2003093982A1 (en) 2002-04-30 2002-12-20 System and method for linking speculative results of load operations to register values

Publications (2)

Publication Number Publication Date
KR20050013544A KR20050013544A (ko) 2005-02-04
KR100958705B1 true KR100958705B1 (ko) 2010-05-18

Family

ID=29399219

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047017543A KR100958705B1 (ko) 2002-04-30 2002-12-20 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법

Country Status (8)

Country Link
US (1) US7028166B2 (ko)
EP (1) EP1504340A1 (ko)
JP (2) JP4105684B2 (ko)
KR (1) KR100958705B1 (ko)
CN (1) CN1307538C (ko)
AU (1) AU2002367915A1 (ko)
TW (1) TWI260541B (ko)
WO (1) WO2003093982A1 (ko)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7222226B1 (en) 2002-04-30 2007-05-22 Advanced Micro Devices, Inc. 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
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US20040123081A1 (en) * 2002-12-20 2004-06-24 Allan Knies Mechanism to increase performance of control speculation
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7343477B1 (en) * 2003-12-29 2008-03-11 Sun Microsystems, Inc. Efficient read after write bypass
US7555634B1 (en) 2004-04-22 2009-06-30 Sun Microsystems, Inc. Multiple data hazards detection and resolution unit
US7937569B1 (en) * 2004-05-05 2011-05-03 Advanced Micro Devices, Inc. System and method for scheduling operations using speculative data operands
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
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
US7571304B2 (en) * 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US7634641B2 (en) 2005-03-18 2009-12-15 Sun Microsystems, Inc. Method and apparatus for using multiple threads to spectulatively execute instructions
US7624253B2 (en) * 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
US20100070730A1 (en) * 2008-09-17 2010-03-18 Sebastian Pop Minimizing memory access conflicts of process communication channels
US8521992B2 (en) 2009-12-22 2013-08-27 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
JP5419761B2 (ja) * 2010-03-12 2014-02-19 アズビル株式会社 デバイス制御装置およびcpu
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8825933B2 (en) * 2011-11-30 2014-09-02 Andes Technology Corporation Bus apparatus with default speculative transactions and non-speculative extension
US9996348B2 (en) * 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US9679342B2 (en) * 2013-07-12 2017-06-13 Arm Limited Result data stream coding for repeating workloads
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
EP3047380B1 (en) * 2014-12-13 2019-04-24 VIA Alliance Semiconductor Co., Ltd. Pattern detector for detecting hangs
CN105934743B (zh) 2014-12-13 2019-06-04 上海兆芯集成电路有限公司 一种微处理器及在其中检测arb的模式的方法
EP3066559B1 (en) * 2014-12-13 2019-05-29 VIA Alliance Semiconductor Co., Ltd. Logic analyzer for detecting hangs
US10324842B2 (en) * 2014-12-13 2019-06-18 Via Alliance Semiconductor Co., Ltd Distributed hang recovery logic
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
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
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
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
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
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
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
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
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
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
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
US10620961B2 (en) * 2018-03-30 2020-04-14 Intel Corporation Apparatus and method for speculative conditional move operation
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060065103A1 (en) * 2004-09-16 2006-03-30 Yamaha Corporation Musical instrument, music data producer incorporated therein and method for exactly discriminating hammer motion

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61294550A (ja) * 1985-06-21 1986-12-25 Nec Corp 電子計算機におけるデ−タ読取書込制御方式
JPH03154947A (ja) * 1989-11-13 1991-07-02 Nec Corp 情報処理装置
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
US5892936A (en) 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
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
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US5845103A (en) * 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6044430A (en) * 1997-12-17 2000-03-28 Advanced Micro Devices Inc. Real time interrupt handling for superscalar processors
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
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6202204B1 (en) * 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
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
US6349382B1 (en) * 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
US6658554B1 (en) * 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6438673B1 (en) * 1999-12-30 2002-08-20 Intel Corporation Correlated address prediction
JP2001209535A (ja) 2000-01-27 2001-08-03 Toshiba Corp プロセッサの命令スケジューリング装置
DE10121792C2 (de) 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US7028166B2 (en) 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060065103A1 (en) * 2004-09-16 2006-03-30 Yamaha Corporation Musical instrument, music data producer incorporated therein and method for exactly discriminating hammer motion

Also Published As

Publication number Publication date
JP4105684B2 (ja) 2008-06-25
TWI260541B (en) 2006-08-21
TW200305821A (en) 2003-11-01
JP2005532613A (ja) 2005-10-27
CN1307538C (zh) 2007-03-28
EP1504340A1 (en) 2005-02-09
CN1625733A (zh) 2005-06-08
AU2002367915A8 (en) 2003-11-17
KR20050013544A (ko) 2005-02-04
WO2003093982A8 (en) 2004-05-13
AU2002367915A1 (en) 2003-11-17
US20040177236A1 (en) 2004-09-09
US7028166B2 (en) 2006-04-11
JP2008033955A (ja) 2008-02-14
WO2003093982A1 (en) 2003-11-13

Similar Documents

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