KR20070019750A - 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법 - Google Patents

로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법 Download PDF

Info

Publication number
KR20070019750A
KR20070019750A KR1020067025174A KR20067025174A KR20070019750A KR 20070019750 A KR20070019750 A KR 20070019750A KR 1020067025174 A KR1020067025174 A KR 1020067025174A KR 20067025174 A KR20067025174 A KR 20067025174A KR 20070019750 A KR20070019750 A KR 20070019750A
Authority
KR
South Korea
Prior art keywords
load
speculative
register
tag
entry
Prior art date
Application number
KR1020067025174A
Other languages
English (en)
Inventor
밴자민 티. 산더
크리스남 브이. 라마니
람세이 더불유. 하다드
미첼 알숲
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority to KR1020067025174A priority Critical patent/KR20070019750A/ko
Publication of KR20070019750A publication Critical patent/KR20070019750A/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
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

로드 동작들의 투기적인 결과들을 레지스터 값들과 연결하는 시스템과 그 방법에 대한 것이다. 시스템(100)은 제1 주소 패턴(206)과 제1 태그(208)를 저장하기 위해서 구성된 엔트리(220)를 포함하는 메모리 파일(132)를 포함한다. 상기 메모리 파일(132)은 상기 제1 주소 패턴(206)과 로드 동작의 제2 주소 패턴(206)을 비교하고, 만약 매치한다면, 상기 제1 태그(208)에 의해 식별된 값과 상기 로드 동작의 투기적 결과를 연결하도록 구성된다. 상기 시스템(100)은 상기 메모리 파일(132)에 커플된 실행 코어(124)를 더 포함하며, 상기 로드 동작에 종속하는 제2 동작을 실행할 때 상기 투기적 결과에 접근하도록 구성되며, 기능성 유닛(126)은 상기 메모리 파일(132)에 커플되고, 상기 데이터 값과 하나 또는 그 이상의 주소들 사이를 비교함으로써 상기 로드 동작의 상기 투기적 결과 사이의 연결을 검증하도록 구성된다.
레지스터 맵, 메모리 파일, 메모리 파일 스토리지

Description

로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는 메모리 파일을 유효화하기 위한 시스템 및 그 방법{SYSTEM AND METHOD FOR VALIDATING A MEMORY FILE THAT LINKS SPECULATIVE RESULTS OF LOAD OPERATIONS TO REGISTER VALUES}
본 발명은 프로세스들의 영역과 관련되며, 특히 프로세스에서 데이터의 투기적인 실행을 수행하는 것과 관련된다.
슈퍼스칼라 프로세서들은 그들의 디자인과 일치하는 가장 짧게 가능한 클락 주기를 사용함으로써 다중 명령들을 동시에 실행하여 고성능을 달성한다. 그러나 명령들 사이에서 데이터와 제어 흐름 종속성들은 어떤 주어진 시간에 발행될 수 있는 명령들의 수를 제한할 수 있다. 결과적으로 어떤 프로세서들은 추가적 실행 이득을 달성하기 위해서 투기적인 실행을 지원한다.
투기의 하나의 형태는 제어 흐름 투기이다. 제어 흐름 투기은 프로그램 제어가 진행할 방향을 예언한다. 예를 들어, 분기 예측은 분기를 택할 것인지를 예언하기 위해서 사용될 수 있다. 분기 예측의 많은 형태들은 매 시간에 같은 예측을 단순히 만드는 방법에서부터 이력에 기초한 예측을 하기 위해서 프로그램에서 선행 분기들의 복잡한 이력들을 유지하는 방법에 이르는 범위까지 이용가능하다. 분기 예측은 하드웨어의 최적화, 컴파일러의 최적화, 또는 이들 모두의 최적화를 통해서 용이해진다. 분기 예측 메카니즘에 의해 제공된 예측에 기초하여, 명령들은 투기적으로 인출(fetch)되거나 실행된다. 분기 명령이 최종적으로 검토될 때, 분기 예측이 검증될 수 있다. 만약 예측이 부정확하다면, 부정확한 예측에 기초하여 투기적으로 실행된 임의의 명령들은 폐기될 수 있다.
제안된 투기의 다른 형태는 데이터 투기이다. 예를 들면, 데이터 아이템의 값을 예측하는 '값 예측'은 데이터의 패턴을 관찰하고 이러한 패턴 상에 예측을 기초화하는 것을 포함한다(예를 들면, 인덱스(index) 카운터 변수의 값은 상기 변수의 이전 값이 어떻게 증가하고 감소하는지를 관찰함으로써 예측될 수 있다.). 주소 예측은 데이터의 위치를 예측하는 것을 포함한다. 데이터 투기의 다른 형태는 컴퓨터 시스템 옵티미즘(optimism)으로 불린다. 멀티 프로세서 시스템들에서, 메모리 시스템 옵티미즘은 프로세서가 일치 여부를 체크하는 것이 완결되기 전에 상기 프로세서의 국부 캐쉬로부터 데이터를 사용하여 명령을 투기적으로 실행할 때 발생한다. 유사하게, 데이터 투기의 다른 형태는, 로드가 실행되는 시간에 계산되지 않은 주소를 가진 저장 앞에서 로드가 투기적으로 실행되도록 할 수 있으며, 물론 상기 저장이 상기 로드가 접근하는 같은 주소에 데이터를 저장할 수도 있다. 데이터 투기의 이러한 모든 형태들에 있어서, 기초적인 조건들이 결과적으로 평가되어서, 상기 투기을 검증하거나 수행되지 않도록 한다. 만약 상기 투기이 부정확하다고 결론지어지면, 상기 투기적인 데이터를 사용하여 실행되는 명령들이 재실행될 수 있다(예를 들며, 업데이트 및/또는 비투기적인 데이터로)
투기은 종속성 체크가 완료되기를 기다리지 않고 실행이 진행하도록 하기 때 문에, 실질적인 성능 이득들은, 만약 정확한 투기들로부터 얻은 성능 이득이 부정확한 투기들에 의한 성능 손실을 초과한다면 달성될 수 있다. 따라서 프로세서 내에서 데이터 투기을 수행할 수 있고, 예측 오류들에 대하여 효과적인 회복 메카니즘을 제공할 수 있을 것이 요구된다.
로드 동작들의 투기적인 결과와 레지스터 값들을 연결하는 시스템들과 방법들에 대한 여러 가지 실시예들이 개시되었다. 일 실시예에서는, 시스템은 제1 주소 패턴과 제1 태그를 저장하도록 구성된 엔트리를 포함하는 메모리 파일을 포함하며, 여기서 메모리 파일은 상기 엔트리 내에 포함된 제1 주소 패턴과 로드 동작의 제2 주소 패턴을 비교하도록 구성되며, 그리고 만약 제2 주소 패턴이 상기 엔트리에 저장된 제1 주소 패턴과 매치한다면, 상기 메모리 파일은 제1 태그에 의해 식별된 데이터 값과 상기 로드 동작의 투기적인 결과를 연결시키도록 구성된다. 상기 시스템은 상기 메모리 파일에 커플된 로드 저장 유닛뿐만 아니라 상기 메모리 파일과 커플된 실행 코어를 더 포함할 수 있으며, 여기서 상기 실행 코어는 상기 로드 동작에 종속하는 제2 동작을 실행할 때 투기적인 결과에 접근하도록 구성되며, 그리고 제1 태그에 의해 식별된 데이터 값과, 하나 또는 그 이상의 주소들 사이에서 비교를 수행함으로써 상기 로드 동작의 투기적 결과 사이의 연결을 검증하도록 구성된다.
다른 실시예에서는, 시스템은 제1 주소 패턴과 제1 태그를 저장하도록 구성된 엔트리를 포함하는 메모리 파일을 포함할 수 있으며, 여기서 상기 메모리 파일은 상기 엔트리에 포함된 제1 주소 패턴과 로드 동작의 제2 주소 패턴을 비교하도록 구성되며. 그리고 만약 제2 주소 패턴이 상기 엔트리 내에 저장된 제1 주소 패턴과 매치되면, 상기 메모리 파일은 상기 제1 태그에 의해서 식별된 데이터 값과 상기 로드 동작의 투기적인 결과를 연결하도록 구성된다. 상기 시스템은 메모리 파일에 커플된 기능성 유닛뿐만 아니라 상기 메모리 파일에 커플되는 실행 코어를 더 포함할 수 있으며, 여기서 상기 실행 코어는 상기 로드 동작에 종속하는 제2 동작을 실행할 때 투기적인 결과에 접근하도록 구성되며, 그리고 제1 태그에 의해서 식별된 데이터 값과, 투기적 결과와 로드 동작의 실제 결과의 비교를 수행함으로써 로드 동작의 투기적인 결과 사이에 연결을 검증하도록 구성된다.
아래 세부적인 설명이 아래의 도면과 관련하여 고려될 때 본 발명이 더 쉽게 이해될 것이다.
도1은 프로세서의 일 실시예를 보여준다.
도2A는 디스패치 유닛의 일 실시예의 블럭 다이어그램이다.
도2B는 일 실시예에서 사용되는 예시적인 메모리 파일 스토리지 앤트리(entry)를 보여준다.
도3은 특정한 태그에 의해 식별되는 데이터 값에 로드 동작의 투기적인(speculative) 결과를 연결하는 방법에 대한 일 실시예를 보여주는 흐름도이다.
도4A는 일 실시예에 따른 로드 저장 유닛의 블럭 다이어르램이다.
도4B는 다른 실시예에 따른 로드 저장 유닛의 블럭 다이러그램이다.
도5A는 일 실시예에 따라, 특정 태그에 의해 식별되는 데이터 값에 로드 동작의 투기적인 값 사이의 연결을 검증하는 방법에 대한 흐름도이다.
도5B는 일 실시예에 따라, 메모리 동작이 검증되는 것을 포함한 연결에 기초한 메모리 동작을 퇴거시키는 방법에 대한 흐름도이다.
도6A는 일 실시예에 따라, 특정 태그에 의해 식별되는 데이터 값에 로드 동작의 투기적인 결과 사이의 연결을 검증하기 위해 구성된 로드 저장 유닛의 블럭 다이어그램이다.
도6B는 일 실시예에 따라, 특정 태그에 의해 식별되는 데이터 값에 로드 동작의 투기적인 결과 사이의 연결을 검증하기 위해 구성된 실행 코어(core)의 블럭 다이어그램이다.
도7은 일 실시예에 따라, 값의 비교를 통해서, 특정 태그에 의해 식별된 값과 로드 동작의 투기적인 결과 사이의 연결을 검증하는 방법에 대한 흐름도이다.
도8은 스케줄에 대한 일 실시예의 블럭 다이어그램이다.
도9는 데이터 추측이 잘못된 것에 대한 지시에 응답하여 동작을 발행하거나, 동작을 재발행하는 방법에 대한 일 실시예에 대한 흐름도이다.
도10은 일 실시예에 따라, 투기적인 원래 피연산자 또는 투기적이지 않은 원래 피연산자에 종속하여 발행하는 동작 준비를 선택적으로 결정하기 위해서 구성된 스케줄의 블럭 다이어그램이다.
도11은 디스페치 유닛의 다른 실시예에 대한 블럭 다이어그램이다.
도12는 디스페치 유닛의 또 다른 실시예에 대한 블럭 다이어그램이다.
도13은 일 실시예에 따라, 특정한 피연산자에 대하여 태그와 관련된 컬러 표시를 유지하기 위하여 구성된 투기적인 레지스터 지도를 보여준다.
도14는 컴퓨터 시스템의 일 실시예를 보여준다.
도15는 컴퓨터 시스템의 다른 실시예를 보여준다.
본 발명은 여러 가지 수정들과 대체적인 형태들에 영향을 받기 쉽지만, 특정 실시예들은 도면들로 예를 드는 방법으로서 보여질 것이며, 세부적으로 설명될 것이다. 그러나 도면들과 세부적인 설명은 특정하게 개시된 형태의 발명으로 제한되지 않으며, 오히려 반대로 본 발명은 모든 수정들과, 동등물과 첨부한 청구항의 의해 정의되는 본 발명의 영역 내에서 대체적인 것들을 포함될 것임을 이해하여야 한다. 서두는 구조상 목적에 대한 것이며, 설명 또는 청구항을 제한하거나 이해하는데 사용됨을 의미하지 않음에 유의하야야 한다. 게다가, "~수 있는"라는 단어는 본 출원 전체에 걸쳐서 "허가되는 의미"로 사용되었으며(즉 잠재성을 가지는, 할 수 있는), "필수적인 의미"(즉 해야만 하는)로 사용되지 않았다. "포함하다"와 도출(derivation)은 "포함하는, 그러나 제한되지 않는"의 의미이다. "결합된"은 "직접 또는 간접적으로 결합된"의 의미이고, "연결된"는 "직접 또는 간접적으로 연결된"의 의미이다.
도1은 프로세서(100)의 일 실시예에 따른 블럭 다이어그램이다. 프로세서(11)는 시스템 메모리(200) 내에 저장된 명령들을 실행하기 위해서 구성된다. 많은 이런 명령들은 시스템 메모리(200) 내에 저장된 데이터 상에서 동작된다. 시스 템 메모리(200)은 컴퓨터 시스템을 통하여 물리적으로 배급될 수 있으며 하나 또는 그 이상의 프로세서(100)에 의해서 접근될 수 있다.
프로세서(100)은 명령 캐쉬(cache)(106)과 데이터 캐쉬(128)을 포함할 수 있다. 프로세서(100)는 명령 캐쉬(106)과 연결된 프리페치 유닛(108)을 포함할 수 있다. 디스페치 유닛(104)는 명령 캐쉬(106)으로부터 명령들을 수신하고, 스케줄러(들)(118)에 동작들을 디스페치(dispatch)하기 위해서 구성될 수 있다. 하나 또는 그 이상의 스케줄러들(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-assocoative), 또는 직접 맵핑(direct-mapped))
프리페치 유닛(108)은 명령 캐쉬(106) 내에 저장을 위해서 시스템 메모리(200)으로부터 명령 코드를 프리페치할 수 있다. 일 실시예에서, 프리페치 유닛(108)은 시스템 메모리(200)으로부터의 코드를 명령 캐쉬(106)에 밀려들도록(burst) 구성될 수 있다. 프리페치 유닛(108)은 다양한 특정 코드를 프리페치하는기술들 및 알고리즘들을 사용할 수 있다.
디스페치 유닛(104)는 피연산자 주소 정보, 즉시 데이터 및/또는 위치 데이터 뿐만 아니라, 실행 코어(들)(124)에 의해서 실행가능한 비트-코드 동작들을 포함한 신호들을 출력한다. 어떤 실시예에서는, 디스페치 유닛(104)는 실행 코어(들)(124) 내에서 실행가능한 동작들로 특정 동작들을 디코딩하기 위해서 디코딩 회로(도시 않됨)를 포함할 수 있다. 단순 명령들은 단일 동작에 대응한다. 어떤 실시예에서는, 더 복잡한 명령들이 다중 명령들에 대응할 수 있다. 레지스터의 업데이트를 포함하는 동작의 디코드 시, 레지스터 파일(116) 내에 레지스터 위치는 투기적인 레지스터 상태들을 저장하기 위해서 확보된다.(대체적인 실시예에서는, 레코더 버퍼는 각 레지스터에 대하여 하나 또는 그 이상의 레지스터 상태들을 저장하기 위해서 사용될 수 있다.) 레지스터 맵(134)는 레지스터를 재명명(renaming)을 용이하게 하기 위해서 소스의 논리 레지스터 이름들과 목적지 피연산자들을 물리적 레지스터 이름들로 번역할 수 있다. 레지스터 맵(134)는 레지스터 파일(116)이 현 재 할당되거나 또는 할당되지 않는지를 추적할 수 있다.
도1의 프로세서(100)은 순서를 벗어난 실행을 지원한다. 퇴거 큐(102)는 레지스터가 읽고 쓴 동작들에 대한 본래의 프로그램 시퀀스(sequence)을 추적하고, 투기적인 명령 실행과 분기 예측 오류 회복(branch misprediction recovery)을 허용하며, 그리고 정확한 예외들을 용이하게 한다. 어떤 실시예에서는, 또한 퇴거 큐(102) 투기적인 레지스터 상태들에 대하여 데이터 값 스토리지를 제공함으로써 레지스터를 재명명하는 것을 지원한다. 많은 예들에서 퇴거 큐는 레코더 버퍼와 유사하게 기능한다. 그러나 전형적 재배열 버퍼와 달리, 퇴거 큐(102)는 임의의 데이터 값 스토리지를 제공하지 않는다. 어떤 예에서는, 퇴거 큐(102)는 선입선출 구조(first-in-first-out)로 실행되고, 여기서 동작들이 유효화됨으로써 버퍼(buffer)의 바닥으로 이동하고, 따라서 큐의 최상위(top)에 새로운 엔트리들에 대한 공간을 만든다. 동작들이 퇴거되면, 퇴거 큐(102)는 레지스터 파일(116) 내에 레지스터들을 할당을 해제시켜 더 이상 투기적인 레지스터 상태들을 저장할 필요가 없으며, 레지스터가 현재 자유롭다는 표시를 레지스터 맵(134)에 신호로 제공한다. 레지스터 상태를 발생시키는 동작들을 검증할 때까지 레지스터 파일(116)(또는 대체적인 실시예에서는 재배열 버퍼(reorder buffer) 내에) 내에 투기적인 레지스터 상태들을 유지함으로써, 예측 오류 경로를 따라 투기적으로 실행된 동작들의 결과는 만약 분기 예측이 부정확하다면 레지스터 파일(116)을 무효화시킨다.
특정한 동작 디코더 상에서, 만약 요구된 피연산자가 레지스터 위치에 있으면, 레지스터 주소 정보는 레지스터 맵(134)에 라우팅된다(또는 재배열 버 퍼(reorder buffer)). 예를 들어 x86 구조에서는, 8개의 32-비트 논리 레지스터들이 있다(예들 들어, EAX,EBX,ECX,EDX,EBP,ESI,EDI 그리고 ESP). 물리적 레지스터 파일(116)(또는 재배열 버퍼)는 순서를 벗어난 실행을 허용하면서, 이들 논리 레지스터들의 내용들을 변화시키는 결과들에 대한 스토리지를 포함한다. 레지스터 파일(116) 내의 물리적 레지스터는 디코더 시, 논리 레지스터들의 하나의 내용을 수정하도록 결정하는 각 동작의 결과를 저장하기 위해서 할당될 수 있다. 그러므로, 특정한 프로그램의 실행 동안에 여러가지 지점들에서 레지스터 파일(116)(또는 대체적인 실시예에서는 재배열 버퍼)은 주어진 논리 레지스터의 투기적으로 실행된 내용을 포함하는 하나 또는 그 이상의 레지스터들을 가질 수 있다.
레지스터 맵(134)는 물리적 레지스터로 하여금 동작에 대한 목적지 피연산자(destination operand)로서 명시된 특정 논리 레지스터를 지정한다. 레지스터 파일(116)을 결정하는 디스페치 유닛(104)는 레지스터 파일(116)이 주어진 동작에서 소스 피연산자로서 명시된 논리 레지스터로 지정된 하나 또는 그 이상의 선행하여 할당된 물리적 레지스터들을 가지는지를 결정할 수 있다. 레지스터 맵(134)는 가장 최근에 지정된 물리적 레지스터의 태그(tag)를 논리 레지스터에 제공한다. 이러한 태그는 레지스터 파일(116) 내에 피연산자의 데이터 값에 접근하고, 결과 버스(130) 상에 전송되는 결과를 통하여 데이터 값을 수신하기 위해서 사용될 수 있다. 만약 피연산자가 메모리 위치에 대응하면, 피연산자 값은 로드/저장(load/store) 유닛(126)을 통하여 결과 버스(전송 결과 및/또는 레지스터 파일(118) 내에 스토리지에 대하여) 상에 제공된다. 피연산자 데이터 값은 피연산자 가 스케줄러(들)(118)의 하나에 의하여 발행될 때 실행 코어(들)(124)에 제공된다. 대체적인 실시예에서는, 피연산자 값들은 피연산자가 디스페치(상기 동작이 발행되는 경우, 대응하는 실행 코어(124)에 제공되는 대신에)될 때에 대응하는 스케줄러(118)에 제공된다.
디스페치 유닛(104)의 출력에 제공된 비트-엔코드된 동작들 및 즉시 데이터는 하나 또는 그 이상의 스케줄러(118)에 라우팅(routed)된다. 본원에서 사용되는 바와 같이, 스케줄러는 언제 동작들이 실행 준비가 되고, 준비된 동작들을 하나 또는 그 이상의 실행 유닛들에 발생하는 지를 감지하는 장치이다. 예를 들어 예약 스테이션(station)이 스케줄러이다. 각 스케줄러(118)은 실행 코어(124)로 발행을 기다리는 여러 가지 계류중인 동작들에 대한 동작 정보를 보유할 수 있다(예를 들면, 피연산자 값들, 피연산자 태그들 및/또는 즉시 데이터 뿐만 아니라 비트 엔코디드 실행 비트들(bit encoded execution bits)). 어떤 실시예에서는, 각 스케줄러(118)은 피연산자 값의 스토리지를 제공하지 않는다. 대신에 각 스케줄러는 피연산자 값들이 실행 코어(들)(124)(레지스터 파일(116) 또는 결과 버스(130)로부터)에 의해서 준비되어 이용될 수 있을 때를 결정하기 위해서 발행된 동작들과 레지스터 파일(116)에서 이용할 수 있는 결과들을 모니터한다. 어떤 실시예에서는, 각 스케줄러(118)은 전용의 실행 코어(124)와 연관된다. 다른 실시예에서는, 하나의 스케줄러(118)은 실행 코어(들)(124)의 하나 이상에 동작을 발행한다.
스케줄러(118)은 실행 코어(들)(124)에 의해서 실행된 저장 동작 정보를 일시적으로 저장하도록 제공될 수 있다. 상술한 바와 같이, 각 스케줄러(118)은 계류 중인 동작들에 대해서 동작 정보를 저장한다. 추가적으로, 각 스케줄러는 이미 실행되었으나, 여전히 재발행될 수 있는 동작 정보를 저장할 수 있다. 동작들은 실행을 위해서 제 시간에 이용할 수 있도록 요구된 어떤 피연산자(들)의 값들에 응답하여 실행 코어(들)에 발행된다. 따라서 동작들이 실행되는 순서는 원래 프로그램 명령 시퀀스와는 다를 수 있다. 데이터 투기을 포함하는 동작들은 그들이 만약 부정확하다면 다시 발행되기 위해서 비투기적이 될 때까지 스케줄러(들)(118)에 남아 있게 된다.
일 실시예에서는, 각 실행 코어(들)(124)는 이동들(shifts), 회전들, 논리 동작들, 분기 동작들 뿐만 아니라, 덧셈과 뺄셈의 정수 연산 동작들을 수행하기 위해서 구성된 요소들을 포함할 수 있다. 또한 플로팅 포인트(floating point) 유닛이 플로팅 포인트 동작들에 적합하도록 포함될 수 있다. 하나 또는 그 이상의 실행 코어(들)(124)는 로드 및 저장 메모리 동작들이 로드/저장 유닛(126)에 의해서 수행되도록 주소 발생을 실행하기 위해서 구성될 수 있다.
또한 실행 코어(들)(124)는 조건 분기 명령들의 실행에 관하여 정보를 분기 예측 유닛에 제공하며, 그 결과 만약 분기 예측에 오류가 있으면, 명령 프로세싱 파이프라인으로 입력되고 프리페치 유닛(106)으로 재지향되는 오예측된 분기 후에 후속하는 명령들을 플러쉬(flush)할 수 있다. 재지향된 프리페치 유닛(106)은 명령 캐쉬(106) 또는 시스템 메모리(200)로부터 올바른 명령들의 세트를 페칭(fetching)하기 시작한다. 그런 상황에서는, 오예측된 분기 명령 후에 발생하는 본래의 프로그램 스퀀스에서 명령들의 결과들은 레지스터 파일(116) 내에서 투기적으로 실행되 거나, 임시적으로 저장된 결과들을 포함하여 폐기된다. 실행 코어(들)(124) 내에 구성요소에 의해서 생산된 결과들은 만약 레지스터 값이 업데이트되면 레지스터 파일(116)로 결과 버스(130) 상에서 출력될 수 있다. 만약 메모리 위치 내용들이 변화한다면, 실행 코어(들)(124) 내에서 생성된 결과들은 로드/저장 유닛(126)에 제공될 수 있다.
로드/저장 유닛(126)은 실행 코어(들)(126)과 데이터 메모리(128) 사이에서 인터페이스을 제공한다. 일 실시예에서는, 로드/저장 유닛(126)은 계류중인 로드들과 저장들을 위해서 데이터와 주소 정보에 대한 여러가지 스토리지 위치를 가진 로드/저장 버퍼로 구성될 수 있다. 또한 로드/저장 유닛(126)은 데이터 일관성이 유지되는지를 보증하기 위해서 계류중인 저장 명령들에 대응하여 로드 명령들에 대한 종속성 체킹(checking)을 수행한다.
데이터 캐쉬(128)은 로드/저장 유닛(126)과 시스템 메모리(200) 사이를 통과한 데이터를 임시적으로 저장하기 위해서 제공되는 캐쉬 메모리이다. 상술한 명령 캐쉬(106)와 같이, 데이터 캐쉬(128)은 세트 연관구조를 비롯하여, 다양한 특정 메모리 구조들로 실행될 수 있다. 추가적으로 다른 실시예에서는 데이터 캐쉬(106) 및 명령 캐쉬(128)는 통합된 캐쉬로 실행될 수 있다.
메모리 파일
도2A는 디스페치 유닛(104)의 일 실시예를 보여준다. 이런 실시예에서는, 디스페치 유닛(104)는 레지스터 맵(134)와 메모리 파일(132)를 포함한다. 상술한 바와 같이, 레지스터 맵(134)는 레지스터 리네이밍(renaming)을 제공하기 위해서 구 성된다. 레지스터 맵(134)는 각 소스와 목적지 피연산자에 대한 논리 레지스터 이름들을 수신하며, 논리 레지스터들에 할당된 가장 최근의 물리적 레지스터들의 물리적 레지스터 이름들을 출력한다. 메모리 파일(132)는 메모리 파일 컨트롤러(202)와 메모리 파일 스토리지(204)를 포함한다.
메모리 파일 스토리지(204)는 하나 또는 그 이상의 엔트리9220)을 포함한다. 각 엔트리(220)은 엔트리들의 주소 패턴과 관련된 주소 패턴(206)과 태그(208)을 포함한다. 각 태그는 데이터가 발생될 때 데이터 값이 저장될 장소(예를 들어, 재배열 버퍼 또는 레지스터 파일(116)내에)를 표시함으로써 데이터 값을 식별할 수 있다. 예를 들어, 예시된 실시예에서 보듯이, 각 태그는 레지스터 맵(134)에 의해서 표시된 것과 같은 데이터 값을 저장하기 위해서 할당된 물리적 레지스터를 식별한다. 각 주소 패턴은 동작에서 주소를 명시하는데 사용하는 모든 또는 다소의 정보들을 포함한다. 예를 들어, 도2B에서 명백히 설명하듯이, 예시적인 주소 패턴(206)이 도시된다. 이런 실시예에서, 주소 패턴(206)은 베이스(base) 논리 레지스터 네임(name)(210)과 인덱스(index) 논리 레지스터 네임(212) 및 변위(displacement)(214)를 포함한다. 어떤 주소 패턴들(206)은 메모리 내에서 특정한 세그먼트(segment)를 식별하는 레지스터의 세그먼트 논리 레지스터의 이름을 포함한다. 어떤 실시예들어서는,메모리 파일 스토리지(204)는 여러 가지 레지스터들, 레치들(latches), 플립 플롭들(flip-flops), 다른 클락된 스토리지(clocked storage)로부터 실행될 수 있다. 대체적인 실시예에서는, 메모리 파일 스토리지(204)는 하나 또는 그 이상의 램(RAM; 랜덤 억세스 메모리) 셀들(cells)을 포함 한다.
어떤 실시예들에서, 메모리 파일 저장(204)에 저장된 주소 패턴(206)은 동작에 대하여 명시된 모든 주소 보다 적은 정보를 포함할 수 있다는 점이 주목된다. 예를 들면, 메모리 파일 스토리지(204) 내의 엔트리들은 변위 필드(214) 내에 변위를 명시하는데 사용되는 모든 비트들보다 적게 저장할 수 있다. 다른 실시예에서는, 메모리 파일 컨트롤러(202)는 메모리 파일 내의 엔트리가 특정한 동작에 대한 모든 주소 정보를 저장할 수 있을 것인지에 따라 메모리 파일 스토리지(204) 내에서 엔트리를 할당할 것인지에 대하여 선택적으로 선택할 수 있다. 예를 들면, 만약 메모리 파일 내의 각 엔트리가 16비트의 변위 정보로 저장되고, 특정 동작에 대한 주소 정보가 24비트의 변위 정보를 포함하면, 메모리 파일 컨트롤러(202)는 동작의 주소 정보에 대한 메모리 파일 엔트리를 할당하지 않을 수 있다.
메모리 파일 컨트롤러(202)는 디스페치되지 않은 동작들에서 명시된 주소 패턴들을 메모리 파일 스토리지(204) 내의 저장된 그것들과 비교한다. 만약 동작의 주소 패턴이 메모리 파일 스토리지(204)(즉, 동작의 주소 패턴이 메모리 파일 저장에서 놓쳐진 경우) 내에 현재 저장된 임의의 주소 패턴과 매치(match)하지 않으면, 메모리 파일 컨트롤러(202)는 모든 또는 다소의 동작의 주소 패턴을 저장하기 위해서 메모리 파일 스토리지(204) 내에 새로운 엔트리를 할당한다. 만약 메모리 파일 스토리지(204) 내에 할당될 수 있는 자유로운 엔트리가 없다면, 메모리 파일 컨트롤러(202)는 LRU(최근 최소 사용), FIFO(선입선출), 랜덤 교체 등과 같이 교체 구성을 사용하여 덮어쓰기할 엔트리를 선택할 수 있다.
할당된 엔트리 내에 동작의 주소 패턴을 저장하는 것에 더하여, 메모리 파일 컨트롤러(202)는 또한 동작의 주소 패턴에 의해서 식별된 메모리 위치로부터 로드되거나, 메모리 위치에 저장된 값을 검증하는 태그(예를 들면 물리적 레지스터의 이름)를 포함한 물리적 레지스터 이름(208)을 저장할 수 있다. 예를 들어, 만약 메모리로부터 데이터를 로드하는 로드 동작이 다루어진다면, 로드 동작이 로드 동작의 결과를 저장하기 위해 할당된 물리적 레지스터의 이름을 저장하는 것에 응답하여 엔트리가 할당된다. 만약 메모리 위치에 데이터를 쓰는 저장 동작이 다루어진다면, 메모리 파일 컨트롤러(204)는 메모리 파일 스토리지(204) 내에 저장 소스 값이 저장되는 레지스터의 물리적 레지스터 이름을 저장한다.
만약 동작의 주소 패턴(또는 그 패턴의 일부)이 이미 메모리 파일 스토리지(204) 내의 엔트리에 저장되었다면(즉, 동작의 주소 패턴이 메모리 파일 저장 내에 가해졌다.), 메모리 파일 컨트롤러(202)는 매칭하는 주소 패턴을 보유한 엔트리를 사용하거나 수정할 수 있다. 만약 로드 동작(특정 주소로부터의 값을 레지스터로 로드하는 동작)이 다루어진다면, 메모리 파일 컨트롤러(202)는 매칭한 엔트리에 저장된 물리적 레지스터 이름(208)을 출력할 것이다. 만약 저장 동작(레지스터로부터의 값을 특정 주소에 저장하는 동작)이 다루어진다며, 메모리 파일 컨트롤러(202)는 저장된 데이터의 태그를 가지는 매칭한 엔트리에 저장된 태그(예를 들면, 물리적 레지스터 이름(208))를 덮어쓰기 할 것이다.
만약 로드 동작이 다루어지고, 로드 동작이 메모리 파일 스토리지(204) 내에 히트(hit)한다면, 메모리 파일 컨트롤러(202)에 의한 태그 출력은 태그에 의해서 식별된 저장된 값을 로드 동작의 투기적인 결과에 연결하는데 사용된다. 예를 들어, 어떤 실시예에서는, 로드 동작이 스케줄러(들)(118)에 디스페치될 때, 메모리 파일(132)에 의한 태그 출력 또한 스케줄러(들)(예를 들면 투기적인 소스 피연산자 태그로서)에 제공된다. 스케줄러(118)은 태그에 의해 식별된 값의 이용가능성(예를 들면 레지스터(116) 내에서 또는 결과 버스(130) 상에서)에 응답하여 로드 동작을 발행할 수 있다. 실행 코어(124)는 로드 동작을 실행시키며, 그 결과 연결된 값은 결과 버스(130)(어떤 실시예에서는,로드의 결과로 생성된 데이터 값은 그 자체로는 플래그되지 않고 반면에 투기적인 값으로 식별됨에 유의하라.) 상에서 로드 동작의 투기적 결과로서 방송된다. 다른 실시예에서는 데이터 값은 아래에서 설명하는 것과 같이 투기적 맵 내의 저장 태그에 의한 로드 동작의 투기적인 결과에 연결될 수 있다.
연결의 결과로서, 종속 동작들이 투기적인 결과를 이용하도록 실행하기 위해서 일단 데이터 값이 이용가능해지면, 로드의 투기적인 결과로서 전송(forward)된다(예를 들면, 레지스터 파일(116) 내에서 또는 결과 버스(130) 상에서). 많은 경우에 있어서, 이것은 만약 종속 동작의 실행이 로드 동작의 비투기적인 결과가 이용가능할 때까지 지연되는 것보다도 빠르게, 종속 동작들이 로드 동작의 투기적인 결과를 이용하여 실행되도록 허락한다. 다른 실시예에서는 데이터 값은 로드 동작을 실행함으로써 전송되며, 그 결과 데이터 값은 로드 동작의 투기적인 결과로서 결과 버스(130) 상에서 출력된다. 예를 들어, 일 실시예에서는, 비투기적으로 로드를 수행하기 위해 3주기를 거치는 대신에, 상기 로드는 데이터 값을 출력함과 아울 러 로드 결과로서 데이터 값을 식별하는 태그를 출력함으로써 하나의 주기에서 실행될 수 있다. 다른 실시예에서는, 데이터 값은 디스페치에서 투기적 피연산자 소스로서 종속 동작들(로드 동작에 의해 생산된 피연산자를 가지는 동작들)에 메모리 파일 컨트롤러(202)에 의한 태그 출력을 직접적으로 제공함으로써 더 간접적인 방법으로 전송된다. 데이터를 전송하는 수단들은 하나 또는 그 이상이 포함될 수 있다. 즉, 투기적인 레지스터 대 레지스터 이동 동작(register-to-register move operation)으로서 실행되는 로드 동작을 수정하기 위해서 또는 투기적인 피연산자 소스 태그로서 종속성 동작에 태그를 제공하기 위해서 구성된 디스페치 유닛이거나, 연결된 데이터 값의 이용가능성에 의존하여 수정된 로드 및/또는 종속 동작을 발행하기 위해 구성된 스케줄러, 및 로드의 결과로서 연결된 데이터를 출력하거나 연결된 데이터 값을 사용하는 종속성 동작을 실행시키기 위해 구성된 실행 코드 중 하나 또는 그 이상이 포함될 수 있다.
보여진 것처럼, 메모리 파일(132)은 데이터 캐쉬(128)(또는 시스템 메모리(200)) 내의 데이터에 접근하는 동작들에 주소 패턴들을 추적한다. 결과적으로, 물리적 레지스터들에 저장된 레지스터 값들은 메모리에 특정한 주소에 저장된 값들과 연결된다. 메모리 파일(132)는 동작 흐름에서 상호간에 상대적으로 제거된 동작들 사이에 종속성이 투기적인 로드 결과들에 레지스터 값들을 연결시키기 위해서 사용되도록 한다. 그러므로, 메모리 파일은 여러 간섭하는 동작들에 의해서 분리될 수 있는 동작들 사이에서 종속 이력을 제공할 수 있다.
도3은 로드 동작의 투기적인 결과와 레지스터 값을 연결하는 방법의 일 실시 예에 대한 흐름도를 보여준다. (301)에서, 레지스터 태그는 레지스터와 주소가 같은 데이터를 저장하기 쉬움을 표시하는 주소 패턴과 관련된다. 상기 태그와 주소 패턴은 제1 로드 또는 저장 동작에 대해서 명시된다. 예를 들어, 만약 제1동작이 로드 동작이라면, 태그는 로드 결과를 저장하기 위해서 할당된 물리적 레지스터를 식별하며, 상기 주소 패턴은 상기 로드를 위해서 주소를 계산하기 위해서 사용될 수 있다. 대신에 만약 제1동작이 저장 동작이라면, 상기 주소 패턴은 저장의 목적지 주소를 표시하고, 상기 태그는 저장 동작에 의해서 저장된 데이터를 식별한다. 어떤 실시예들에서는, 상기 태그 및 주소 패턴은 둘 모두를 메모리 파일 내의 엔트리 내에 저장함으로써 관련될 수 있다.
만약 로드 동작의 주소 패턴이 제1동작의 주소 패턴과 매치한다면, 로드의 투기적인 결과는 (303-305)에서 표시된 것처럼, 제1동작에 대하여 명시된 태그에 의해여 식별된 데이터 값과 연결될 수 있다. 만약 로드 동작의 주소 패턴이 제1동작의 주소 패턴 매치하지 않는다면, 상기 로드의 목적지에 대한 로드의 주소 패턴과 태그는 (303-311)에서 표시된 것처럼 연관(메모리 파일 내의 엔트리 내에 저장됨으로써)된다. 더욱이, 로드는 (313)에서 보는 것처럼, 데이터 캐쉬에 접근함으로써 정상적으로 실행될 수 있다. 일 실시예에서는, 로드 동작의 주소 패턴은 이전 동작의 주소 패턴의 하나 이상과 비교된다. 예를 들면, 상기 로드의 주소 패턴은 메모리 파일 내에 현재 저장된 각 주소 패턴과 비교된다.
만약 로드의 투기적인 결과가 태그에 의해서 식별된 데이터 값들과 연결된다면, 그 데이터 값은 (307)에서 표시된 것처럼, 로드 동작의 투기적인 결과로서 하 나 또는 그 이상의 종속 동작들에 전송된다. 데이터 값은 전송 결과를 통하거나 또는 종속성 동작들이 투기적인 피연산자 소스로서 사용될 수 있다는 표시를 전송함으로써 전송되며, 이는 아래에서 더 상세하게 설명할 것이다. 일 실시예에서는, 만약 데이터 값이 전송 결과를 통하여 전송되면, 종속 동작들은 데이터 값을 발생하는 동작이 실행을 완결 후에 한 주기의 전송된 데이터 값을 사용하여 실행될 수 있다. 만약 데이터 값이, 종속 동작들이 투기적인 피연산자 소스로서 물리적 레지스터를 사용하는 표시를 통하여 전송되면, 종속 동작들은 데이터 값을 발생한 동작이 실행을 완결하자마자 발행될 수 있다. 투기적인 결과는 (309)에서 표시한 것처럼, 투기적인 결가가 검증되기 전에 전송된다. 투기적인 결과는 데이터 캐쉬에 접근하지 않고 전송된다(즉, 투기적인 결과는 비투기적인 결과 보다 빨리 전송되며, 이것은 데이터 캐쉬에 접근함으로써 생성된다.)
만약 투기적인 결과가 (309)에서 정확하다고 검증되는 경우에는, 로드 동작은 데이터 캐쉬 접근을 수행하지 않고 완성된다. 그러나 만약 투기적인 결과가 (309)에서 부정확하다고 결정되면, 데이터 캐쉬 접근이 정확한 결과(도시 않됨)를 얻도록 수행된다. 만일 그렇게 되면, 로드의 투기적 결과를 사용하여 실행되는 임의의 종속성 동작들은 로드의 정확한 결과를 사용하여 다시 실행된다. 어떤 상황에서는, (309에서) 검증이 연결된 데이터 값이 로드(307에서) 투기적인 결과로서 전송되기 전에 수행된다. 이런 상황에서는, 상기 로드는 정상적으로 수행되며, 또는 만약 연결이 정확하다고 결정되면, 데이터 값은 로드 동작의 비투기적인 결과로서 전송된다.
메모리 파일(132)의 동작을 더 설명하기 위해서, 아래의 동작들을 포함하는 디스페치 유닛(104)에 의해서 다루어지는 동작들의 시퀀스를 가정하자.
MOV EBX,[EDX+EAX-displacement A] (LOAD 1)
...
MOV ECX,[EDX+EAX-displacement A] (LOAD 2)
...
MOV[EDX+EAX-displacement A], EAX (STORE 1)
이런 동작들의 각각은 프로그램 순서에 있어서 하나 또는 그 이상의 간섭 동작들에 의해서 분리될 수 있다. 이미 보듯이, 이러한 세 개의 동작의 각각은 같은 주소,즉 패턴 EDX+EAX- 변위 A을 포함할 수 있다.
LOAD 1의 주소 패턴이 메모리 파일 (132)에 제공될 때, 메모리 파일 컨트롤러(202)는 LOAD 1의 주소 패턴과 매치하는 주소 패턴에 대하여 메모리 파일 스토리지(204)를 체크할 수 있다. 주소 패턴이 메모리 파일 스토리지(204)에서 손실되는 경우라고 가정하면, 메모리 파일 컨트롤러(202)는 로드 동작의 주소 패턴 및 레지스터 맵(134)으로서 제공되는 로드 동작의 목적지 물리적 레지스터의 물리적 레지스터 이름의 모두 또는 일부를 저장하기 위해서 엔트리(할당되지 않은 엔트리를 이용하거나, 이미 할당된 엔트리에 덮어쓰기를 함으로써)를 할당한다. 로드 동작이 메모리 파일 스토리지에서 손실된 경우라면, 메모리 파일 컨트롤러(202)는 상기 로그 동작에 대한 태그를 출력하지 않는다.
LOAD 2가 메모리 파일(132)에 의해서 후속적으로 취급되는 때에, 그것의 주 소 패턴은 LOAD 1(LOAD 1의 엔트리가 간섭 동작에 응답하여 아직 덮어써지지 않았다고 가정하자)에 응답하여 할당된 엔트리 내에서 주소 패턴과 매치한다. LOAD 2의 주소 패턴이 메모리 파일 스토리지(204)에 히트하는 것에 응답하여, 메모리 파일 컨트롤러(202)는 LOAD 1의 결과를 저장하기 위해서 할당된 물리적 레지스터의 물리적 레지스터 이름을 출력한다. 이러한 물리적 레지스터 이름은 LOAD 1에 의해 로드된 데이터 값을 LOAD 2의 투기적인 결과에 연결하는데 사용될 수 있다.
STORE1이 메모리 파일(132)에 의해서 다루어질 때는, 그것의 주소 패턴이 LOAD 1에 응답하는 할당된 엔트리에 히트하면(다시 어떤 간섭 동작들도 이 엔트리로 하여금 덮어써지게 하지 않았다고 가정하자). LOAD 1의 결과를 저장하기 위해서 할당된 물리적 레지스터의 물리적 레지스터 이름을 출력하는 대신에(LOAD 2에서 했던 것처럼), 그러나 메모리 파일 컨트롤러(202)는 STORE 1에 의해 저장된 데이터를 보유한 레지스터의 물리적 레지스터 이름을 가진 엔트리에 저장된 물리적 레지스터 이름(208)을 덮어씌운다. 그래서 후속적 로드 동작이 엔트리에 히트될 때, 메모리 파일 컨트롤러(202)는 LOAD 1의 목적지 레지스터의 물리적 레지스터 이름을 출력하는 대신에 STORE 1의 소스 물리적 레스스터의 물리적 레지스터 이름을 출력한다.
메모리 파일(132)이 투기적인 구조로서 사용되기 때문에, 메모리 파일 스토리지(204)에 저장된 정보의 정확성은 프로세서(100)의 정확한 동작에 중요하지 않다(예를 들어, 메모리 파일(132)에서의 예측 오류는 프로세서(100)의 출력에 에러들(errors)을 발생시키지 않는다.). 그러나, 로드 동작들의 투기적인 값들을 물리적 레지스터들 내에 저장된 값들과 정확하게 연결시킴으로써 제공되는 이점들을 증 가시키고 및/또는 오예측된 투기적인 연결들에 대하여 일어난 임의의 성능 패널티들을 감소시키기 위해서 메모리 파일(132)의 정확성을 증가시키는 것이 바람직하다다. 어떤 실시예에서는, 메모리 파일(132)의 정확성은 주소들을 명시하기 위해서 사용되는 레지스터들에 대한 업데이트가 감지될 때, 메모리 파일 스토리지(204) 내에서 엔트리들을 무효화시킴으로써 증가될 수 있다. 예를 들어, 각 주소 패턴은 주소 계산을 위해서 베이스(base) 또는 인덱스(index)를 식별하는데 사용되는 하나 또는 그 이상의 논리 레지스터 식별기(identifiers)들을 포함할 수 있다. 만약 후속하는 동작이 엔트리의 주소 패턴(206)의 일부로서 명시된 논리 레지스터의 하나를 수정한다면, 그 엔트리는 무효화 될 것이다. 그래서, 각 동작의 목적지 레지스터의 논리 레지스터 이름들은 도2A에서 보듯이, 엔트리 무효화들을 수행하기 위해서 메모리 파일(132)에 입력될 수 있다.
추가적으로, 어떤 실시예에서는 메모리 파일 스토리지(204) 내의 엔트리들은 특정한 주소에서 데이터에 쓰기 접근(write access)을 얻은 다른 장치들은 스눕핑(snooping)하는 것에 응답하여 무효화될 수 있다. 유사하게, 엔트리는 예측오류의 감지에 응답하여 무효화될 수 있다. 일반적으로 이와 같은 메모리 파일 스토리지(204) 내의 엔트리들의 정확성에 영향을 미치는 많은 조건들은 모니터되며(monitored), 엔트리들을 무효화시키는 순간을 결정하기 위해서 사용된다. 그러나 메모리 파일(132)은 투기적인 구조이기 때문에, 어떤 실시예들에서는 특정 모니터링 방법들을 실행하는데 추가적인 하드웨어 비용이 메모리 파일 정확성의 잠재적 개선에 부담이 된다면 이러한 모니터링 방법들을 실행하지 않을 수 있다.
메모리 파일 유효화
로드 저장 유닛(126)(도는 프로세서(100) 내의 연결을 검증하기 위한 다른 수단들)은 로드 동작의 투기적인 결과로 메모리 파일(132)에 의해 식별된 물리적 레지스터 내에 저장된 값의 연결을 검증할 수 있다. 만약 상기 연결이 부정확하다면, 상기 로드 저장 유닛(126)은 상기 로드가 재발행하도록하며, 및/또는 결과 버스(130) 상에 로드 동작의 정확한 결과를 방송하도록 한다. 로드를 재발행하는 것은 로드의 투기적인 결과를 사용하여 실행되는 임의의 종속성 동작들로 하여금 재발행하고 업테이트되고 비투기적인 값들을 사용하여 실행되도록 할 수 있다. 대체적으로, 만약 상기 연결이 부정확하면, 프로세서(100)은 예측오류(misspeculation)후에 발생하는 동작들을 플러시(flush)하고, 상기 로드 동작의 정확한 결과를 사용하는 동작들의 실행을 재시작할 수 있다.
어떤 실시예에서는, 연결 검증은 동작 주소들을 비교함으로써 로드 저장 유닛(126) 내에서 수행될 수 있다. 로드 저장 유닛(126)은 동작들이 연결되었는가를 감지하기 위해서 여러 가지 메모리 동작들의 주소들을 비교할 수 있다. 일 실시예에서는, 로드 저장 유닛(126)은 저장-투-로드(store-to-load) 전송 비교기(comparators)들을 사용하여 투기적인 연결을 검증할 수 있다. 저장-투-로드(store-to-load) 전송 비교기(comparators)는 연결 검증에 사용되는 것과 더불어, 더 이른 저장으로부터 더 최근의 로드 결과를 전송하는데 사용될 수 있다. 예를 들어, 로드 저장 유닛은 저장-투-로드 전송을 수행하기 위해서 사용되는 비교기를 포함할 수 있다. 이런 비교기들은 각 계류중인 로드의 주소를 더 이른 저장들의 세트와 비교할 수 있다. 더 최근의 로드 주소와 매치하는 주소를 가지는 더 이른 저장들 세트 중 가장 최근의 것이 선택될 수 있다. 더 이른 저장들의 세트 중 선택된 하나에 의하여 저장된 데이터는 로드의 결과로서 전송될 수 있다.
도4A는 동작 주소들을 비교함으로써 연결 검증을 수행하는 저장-투-로드 전송(STLF) 비교기(280)을 사용하기 위해서 구성된 로드 저장 유닛(126)의 일 실시예를 보여준다. 이미 보았던 것처럼, 로드 저장 유닛(126)은 중요한 로드들과 저장들을 위해서 스토리지를 포함할 수 있다. 설명된 실시예에서, 별개의 스토리지가 로드들(로드 스토리지(250) 내에)과 저장들(저장 스토리지(260)) 내에)을 위해서 제공된다.;그러나 다른 실시예에서는, 로드들과 저장들은 같은 동작 스토리지 내에서 저장될 수 있다(예를 들어 추가적인 영역은 각 동작이 로드 또는 저장이거나 아니면 이들 모두가 될 수 있는지를 표시할 수 있다.). 다른 실시예에서는, 이런 동작 스토리지는 스케줄러(118)의 일부일 수 있다.
각 로드 동작을 식별하는 정보는 로드 스토리지(250) 내의 엔트리(252)에 저장될 수 있다. 이 정보는 로드 동작을 식별하는 태그(254)와 로드의 투기적인 결과와 연결되는 값을 가지는 메모리 동작(다른 로드 또는 저장)을 식별하는 전송 태그(256)과 그리고 로드에 의해서 타겟된(targeted) 주소를 표시하는 주소(258)를 포함한다. 또한 다른 영역(도시 않됨)들이 포함될 수 있다.
전송 태그(256)은 로드 동작에 대한 메모리 파일(132) 내의 히트(hit)에 응답하여 메모리 파일(132)에 의해서 생산될 수 있다(이러한 로드 동작은 링크 로드(linking load)로서 언급되며, 로드 동작은 그것의 투기적인 결과를 메모리 파일 에 의해서 제공되는 태그에 의해서 식별된 데이터 값과 연결한다.). 각 메모리 파일 엔트리(220)에 태그(208)과 주소 패턴(206)을 저장하는 것과 더불어, 메모리 파일(132)는 상기 엔트리(220)로 하여금 본래적으로 할당되도록 하는 메모리 동작(예를 들면, 로드 또는 저장)을 식별하는 태그를 저장할 수 있다. 이 태그는 더 늦은 메모리 동작의 피연산자가 더 최근의 메모리 동작의 투기적인 결과와 연결되었는지를 식별하는 전송 태그(256)로서 출력될 수 있다.
각 저장 동작을 식별하는 상기 정보는 저장 스토리지(260) 내의 엔트리(262)에 저장될 수 있다. 상기 정보는 저장 동작을 식별하는 태그(264)와 저장 동작에 의하여 타겟된 주소를 표시하는 주소(268)를 포함할 수 있다.
STLF 비교기들(280)은 로드가 어느 저장으로부터의 데이터를 전송하도록 결정하도록 구성될 수 있다. 추가적으로, STLF 비교기들(280)은 로드 동작들의 투기적인 결과들과 값들 사이의 연결을 검증할 수 있다. 이들 연결들은 전술할 바와 같이 메모리 파일(132)에 의해서 발생될 수 있다. STLF 비교기(280)는 로드의 주소(258)와 하나 또는 그 이상의 저장 동작들의 주소들(268)를 비교함으로써, 가령 로드 동작이 데이터를 전송하였을 저장을 검색함으로써 로드 작동의 투기적인 결과와 저장 검색에 의한 저장 피연산자 사이의 연결을 검증하도록 구성될 수 있다. 만약 매칭 저장이 발견되지 않으나(링크 로드로서 같은 주소를 가지는 저장), 상기 로드에 대한 전송 태그(256)가, 로드의 투기적인 결과와 데이터 값이 연결되었는지를 표시하면, STLF 비교기들(280)은 연결이 부정확하다는 표시를 출력할 수 있다(후술할 것처럼, 상기 로드가 데이터를 전송시키는 것으로부터 다른 로드는 식별되 지 않은 것으로 가정하자). 만약 매칭 저장이 발견되나, 매칭 저장의 태그(264)가 로드 동작의 전송 태그(256)과 매칭하지 않으면, STLF 비교기들(280)은 연결이 부정확하다는 표시를 유사하게 출력할 수 있다. 만약 매칭 저장이 발견되고, 매칭 저장의 태그(264)가 전송 로드와 매칭하면, STLF 비교기들(280)은 연결을 검증하는 표시를 출력할 수 있다(또는 연결이 부정확하다는 표시를 출력하지 않는다.). 어떤 실시예에서는, 연결 검증 과정의 적어도 일부는 저장-투-로드 전송이 상기 로드에 대해 실행되는 과정으로서 실질적으로 동시에 일어날 수 있다.
만약 특정 로드의 투기적인 결과가 다른 메모리 동작의 피연산자와 연결되어 있지 않으면, 상기 로드에 대한 전송 태그(256)는 무효의 값 또는 상기 로드에서 실행되는 연결 검증이 필요하지 않다는 표시의 값으로 세트(set)될 수 있다. 그러한 로드에 대해서, STLF 비교기들(280)은 연결 검증 없이 저장-투-로드 전송을 실행할 수 있다.
로드들의 투기적인 결과들과 저장 피연산자 사이에 연결들을 검증하는 것에 더불어, 또한 STLF 비교기들(280)은 로드들의 투기적인 결과들과 다른 로드 피연산자들 사이의 연결들을 검증하기 위해서 구성될 수 있다. 예를 들어, 상기 메모리 파일(132)는 더 최근(younger) 로드의 투기적인 결과를 더 이른(order) 로드의 피연산자와 연결할 수 있다. 그러므로 더 최근 로드에 대한 전송 태그(256)는 더 이른 로드를 식별할 수 있다. STLF 비교기(280)는 연결된 로드들 사이에서 프로그램 순서 상 생성되는 어떠한 저장들도 더 최근의 로드 주소와 매칭하는 저장 주소들을 가지지 않음을 검증함으로써 그런 로드 대 로드 연결을 검증할 수 있다. 유사하게, 더 최근 로드와 더 이른 저장 사이에 연결들을 검증하기 위해서, 만약 STLF 비교기(280)이 연결이 부정확하다고 결정하면(예를 들어 간섭 저장의 주소가 더 최근의 로드의 주소와 매칭하기 때문에), STLF 비교기들(280)은 연결이 부정확하다는 표시를 출력할 수 있다.
일 실시예에서는, STLF 비교기는 더 이른 동작의 피연산자에 연결되는 로드 동작의 투기적 결과 주소에 매칭하는 주소를 가지는 링크 로드보다 더 이른 로드들 및 저장들의 세트 중에서 가장 최근의 동작을 찾음으로써 한 쌍의 로드 동작들 사이에서 연결을 검증할 수 있다. 만약 가장 최근의 매칭 동작이 링크 로드 동작에 저장된 전송 태그(256)에 의해서 식별된 동작이라면, STLF 비교기들은 상기 연결이 정확하다고 결정할 수 있다. 만약 매칭 동작이 발견되지 않거나, 매칭 동작이 전송 태그(256)에 의해서 식별된 동작이 아니라면, STLF 비교기들(280)은 연결이 부정확하다는 표시를 출력할 수 있다.
다른 실시예에서는, STLF 비교기들(280)은 가장 최근에 매칭 로드(링크 로드보다 더 이른 로드 세트 중에서 그리고 링크 로드의 주소와 매칭하는 주소를 가지는)와 가장 최근의 매칭 저장(링크 로드보다 더 이른 저장들 세트 중에서 그리고 링크 로드의 주소와 매칭하는 주소를 가지는)을 찾을 수 있다. 만약 가장 최근에 매칭 로드가 가장 최근의 매칭 저장보다 더 최근 것이고(프로그램 순서상), 가장 최근에 매칭하는 로드가 링크 로드의 전송 태그(256)에 의해서 검증되는 동작이라면, STLF 비교기들(280)은 연결이 정확하다고 결정할 수 있다. 만약 가장 최근에 매칭 로드가 가장 최근에 매칭 저장보다 더 이른것이라면, STLF 비교기들(280)은 연결이 부정확하다고 결정할 것이다.(예를 들어, 링크 로드는 가장 최근의 매칭 저장과 연결되야 한다.)
한 쌍의 로드들 사이에서의 연결을 고려할 때, STLF 비교기들(280)은 링크 로드가 상기 링크 로드보다 더 이른 가장 최근의 매칭 저장보다 프로그램 순서에서 더 최근인 임의의 매칭 로드와 적절하게 연결되어 있기 때문에 다중 매칭 로드들을 비교할 수 있다(단지 더 이른 매칭 로드들의 가장 최근의 것에 적절하게 연결되는 것과는 대조적으로). 그래서 가장 최근의 매칭 로드를 식별하는 것과 아울러, STLF 비교기들은 매칭 로드들의 세트를 식별할 수 있고, 그리고 그 세트들 중에 어느 것이 링크 로드의 전송 태그(256)로 식별된 로드에 연결된 것인지를 결정할 수 있다.
어떤 상황에서는, 메모리에 연결된 동작은 연결이 검증되기 전에 프로세서(100)으로부터 퇴거되거나, 제거될 수 있다. 그러므로, 더 이른 동작의 제거로 인하여, STLF 비교기들(280)은 연결이 정확하다고 하더라도, 로드에 대한 매칭 메모리 동작의 투기적인 결과가 제거된 동작의 피연산자와 연결된다는 것을 검증할 수 없다. 연결이 검증되지 않는 상황에서는, STLF 비교기들(280)은 연결이 부정확하다는 표시를 출력할 수 있다.
연결이 부정확하다는 표시에 응답하여, 메모리 파일(132)의 모두 또는 일부는 무효화될 수 있다. 예를 들어, 일 실시예에서는 로드의 투기적인 결과를 제공하는데 사용되는 특정 메모리 파일 엔트리는 무효화될 수 있다. 다른 실시예에서는, 전체의 메모리 파일(132)은 STLF 비교기들(280)에 의한 부정확한 연결의 감지에 응답하여 무효화될 수 있다. 추가적으로 로드의 결과에 종속하는 종속 동작들은 메모 리 파일(132)로부터 얻은 투기적인 결과를 사용하는 대신에 로드의 비투기적인 결과를 사용하여 실행될 수 있다(또는 만약 이러한 동작들이 이미 실행되었다면, 재실행된다.).
상기 설명된 실시예들은 STLF 비교기들을 사용하여 연결 검증을 실행하는 반면에, 다른 실시예에서는 메모리 동작 주소 및/또는 주소 패턴들을 비교하여 연결 검증을 수행하기 위해서 저장-투-로드 전송에 사용되지 않는 전용 비교기를 이용함에 유의하여야 한다.
어떤 실시예에서는, 각 시간에 메모리 파일(132)은 로그의 투기적인 결과가 데이터 값과 연결되었는지를 식별하는 태그를 출력하며, 또한 메모리 파일(132)는 상기 로드와 연결되어 있는 메모리 동작과 관련된 플래그로 하여금 세트(set)되게 할 수 있다. 예를 들어, 만약 로드의 투기적인 결과가 메모리 파일 엔트리에 히트된 로드의 주소 패턴에 응답하여 더 이른 저장 동작의 저장 피연산자와 연결되어 있다면, 메모리 파일(132)는 투기적인 결과에 연결하기 위해서 데이터 값의 태그를 출력할 수 있고, 더 이른 저장이 더 최근 로드와 연결되었다는 표시를 출력할 수 있다. 표시에 응답하여, 로드 저장 유닛(126)은 도4B에서 보듯이, 더 이른 저장과 관련된 퇴거 플래그(269)를 세트할 수 있다. 상기 로드 저장 유닛(126)은 저장 피연산자에 연결된 더 최신의 모든 로드 동작들의 투기적인 결과들이 검증될 때까지 퇴거 플래그를 세트된 상태로 유지할 수 있다. 어떤 실시예에서는, 또한 더 이른 로드 동작과 관련된 퇴거 플래그(도시 않됨)는 더 최근 로드의 투기적 결과가 상기 더 이른 로드의 목적지 피연산자와 연결될 때 세트될 수 있음에 주목하여야 한다.
로드 저장 유닛(126) 및/또는 퇴거 큐(102)는 저장 동작에 할당된 엔트리(262)를 해제하고 상기 저장 동작을 퇴거시킬 때를 결정하는 때에 각 저장 피연산자와 관련된 퇴거 플래그(269)(retire flag)를 사용할 수 있다. 만약 저장 피연산자의 퇴거 플래그가 세트되면, 로드 저장 유닛(126)은 저장 피연산자와 더 최근 저장의 투기적인 결과 사이의 연결을 검증하기 위해서 상기 저장 피연산자에 할당된 엔트리(262)를 계속 유지할 수 있다. 마찬가지로, 퇴거 큐(102)는 그것의 퇴거 플래그(269)가 세트되는 동안에 동작을 퇴거시키지 않을 수 있다. 로드 동작과 연관된 퇴거 플래그를 포함한 실시예에서, 저장 동작들에 대한 설명한 것과 유사한 방법으로, 상기 로드 저장 유닛(126) 및/또는 상기 퇴거 큐(102)는 로드 동작에 할당된 엔트리(252)를 해제하고 로드 동작을 퇴거시킬 때를 결정하는 때에 각 로드 동작과 관련된 퇴거 큐를 사용할 수 있다.
도5A는 일 실시예에 따라, 로드 동작의 투기적인 결과와 특정 태그에 의해서 식별된 데이터 연결을 검증하는 방법에 대한 흐름도이다. 만약 로드의 투기적인 결과가 더 이른(프로그램 순서 있어서) 메모리 동작의 피연산자와 연결된다면, (321과 323)에서 보듯이, 더 이른 동작과 연결된 태그는 링크 (더 최근)로드를 절약할 수 있다. 예를 들어, 도2A에서 설명된 것처럼 메로리 파일은 링크 로드의 투기적인 결과를 더 이른 저장에 의해서 저장된 데이터 값 또는 더 이른 로드에 의해서 로드된 데이터 값과 연결시키기 위해서 사용될 수 있다. 더 이른 로드 또는 저장의 태그는 상기 로드가 연결되는 동작을 식별하기 위해서 링크 로드에 저장된다.(예를 들어, 스케줄러 및/또는 로드 저장 유닛 내에서)
어떤 관점에서, (325)에서 보듯이, 로드 저장 유닛은 더 이른 동작에 연결과 링크 로드 사이에서 연결을 검증할 수 있다. 어떤 실시예에서는, 로드 저장 유닛은 이러한 검증을 수행하기 위해서 STLF 비교기를 사용할 수 있다. 연결 검증을 수행하는 것과 더불어, 또한 STLF 비교기들은 저장-투-로드 전송을 수행하기 위해서 사용될 수 있다. 대체적으로, 로드 저장 유닛은 단지 연결 검증을 수행하기 위해서 전용 논리를 가질 수 있다.
만약 로드 저장 유닛이 (325)에서 결정된 것처럼 연결이 정확하다고 결정하면, 상기 로드 저장 유닛은 상기 로드 동작의 투기적인 결과가 (327)에서 표시된 것처럼 비투기적이라고 결정할 수 있다(적어도 메모리 파일에 의해서 수행되는 투기의 관점에서). 어떤 실시예에서는, 상기 로드 저장 유닛은 연결이 검증되는 프로세서에서 다른 구성요소들(예를 들면, 스케줄러)에 신호를 보낼 수 있다.
만약 상기 로드 저장 유닛이 (325 및 329)에서 표시한 것처럼 연결이 부정확하다고 결정하면, 상기 로드 저장 유닛은 연결이 부정확하다는 표시를 출력할 수 있다(예를 들어, 스케줄러 및/또는 디스페치 유닛에). 이런한 표시에 응답하여, 링크 로드의 새로운 결과가 발생된다. 예를 들어, 만약 STLF 비교기가 연결을 검증하기 위해서 사용된다면, 검증 과정 동안에 STLF 비교기는 링크 로드가 데이터를 전송해야하는 저장을 식별할 수 있다. 식별된 저장에 의해 저장된 데이터는 로드 동작의 비투기적인 결과로서 전송될 수 있다. 추가적으로 메로리 파일(적어도 메로리 파일 내의 하나의 엔트리)은 부정확한 연결의 감지에 응답하여 무효화될 수 있다.
도5B는 일 실시예에 따라, 메모리 동작이 검증된 연결인지에 기초하여 메로 리 동작을 퇴거시키는 방법에 대한 흐름도이다. 만약 더 최근 로드의 투기적인 결과가 더 이른 메모리 동작에 의해서 동작된 데이터(예를 들면, 로드되거나 저장된)와 연결된다면, 더 이른 동작(동작과 연결된 것)과 연관된 플래그는 (331-333)에서 보는 것처럼 세트될 수 있다. 어떤 실시예에서는, 이러한 플래그는 스케줄러 또는 로드 저장 유닛 내에서 포함될 수 있다.
만약 동작의 플래그가 세트되면, (335-337)에서 표시된 것처럼 동작의 퇴거는 더 최근 로드의 결과와 더 이른 동작에 의해 동작된 데이터 사이에서의 연결이 검증될 때까지 연기될 수 있다. 그렇지 않으면, 더 이른 동작은 (339)에서 표시된 것처럼 정상적으로 퇴거될 수 있다.
상기 예들은 주소 비교기들(예를 들면, 메모리 동작들에 의해서 접근되는 주소를 비교함으로써)를 사용하여 연결 검증을 수행하는 반면에, 다른 실시예들에서는 값 비교기를(예를 들면, 메모리 동작 접근들로부터의 데이터 값들을 비교함으로써)을 사용하여 연결 검증을 수행할 수 있다. 예를 들면, 투기적인 연결 검증을 위해서 레지스터 값을 사용함으로써 주소 계산 위해 사용하는 특정한 레지스터를 사용하지 않는 로드 동작에 대해서 연결이 검증될 수 있다. 주소 계산에 사용되지 않는 상기 레지스터는 로드 동작의 결과에 투기적으로 연결되는 값을 저장하기 위해서 사용될 수 있다. 상기 로드 동작의 실제적인 결과가 얻어질 때, 상기 로드 저장 유닛(또는 실행 코어)은 다른 사용되지 않은 레지스터 내의 값을 실제 결과 값과 비교할 수 있다. 만약 상기 두 가지가 같다면, 연결은 정확한 것이다. 그렇지 않다면, 연결은 부정확하고, 로드 동작의 정확하고 비투기적인 결과는 프로세서를 통해 서 보정을 전달하기 위해서 방송(broadcast)될 수 있다. 추가적으로 상기 모든 또는 일부의 메모리 파일은 부정확한 연결의 감지에 응답하여 무효화될 수 있다.
발명의 일실시예에서는, 투기적으로 연결된 결과 값을 저장하기 위해서 사용하는 상기 레지스터는 인덱스(index)레지스터가 될 수 있다. 메모리 파일 컨트롤러는 주소 계산을 위해서 인덱스 레지스터를 사용하지 않는 메모리 동작들에 오직 대하여 메모리 파일 스토리지로 엔트리들을 할당하기 위해서 구성될 수 있다.
일 실시예에서는, 연결 검증에 기초한 값은 도6A에서 보여지는 것처럼, 로드 저장 유닛(126)에서 수행될 수 있다. 여기서, 상기 로드 저장 유닛(126)는 로드 동작의 투기적인 결과(257)를 가진 로드 동작(저장-투-로드 전송을 통하거나 또는 데이터 캐쉬 및/또는 메모리에 접근함으로써)에 의해서 로드된 실제 값(255)과 비교하기 위해서 구성된 전용 값 비교기(dedicated value comparators)(282)를 포함한다. 만약 두 값이 같다면, 로드 저장 유닛(126)은 연결이 정확하다고 결정할 수 있다. 그렇지 않다면, 상기 로드 저장 유닛(126)은 로드된 값인(255) 로드 동작의 정확한 결과를 방송할 수 있고, 그 결과 임의의 종속 동작들이 정확한 값을 이용하여 실행될 수 있다(또는 재실행된다.). 또한 로드 저장 유닛(126)은 메모리 파일(132) 내에 하나 또는 그 이상의 엔트리가 부정확한 연결의 감지에 응답하여 무효화되어야 하는 것을 표시하는 디스페치 유닛(104)에 신호를 제공할 수 있다.
대체적으로, 연결 검증에 기초한 값은 도6B에서 보는 것 처럼, 실행 코어(들)(124) 내에서 수행될 수 있다. 이러한 실시예에서는, 메모리 파일(132)에 의해서 식별된 데이터 값과 연결된 로드의 투기적인 결과는 디스페치 유닛(104)에 의해 서 조합(combination) 로드 동작과 비교 동작으로 전환될 수 있다. 이러한 동작들은 각각 로드 저장 유닛(126)과 기능성 유닛(126)에 발행될 수 있다. 상기 로드 저장 유닛(126)은 로드를 정상적으로 수행한다. 로드의 비투기적인 결과가 이용가능할 때, 비교 동작은 사용하지 않는 주소 계산 레지스터를 통하여 투기적인 결과에 접근하거나, 투기적인 결과를 로드 저장 유닛(126)에 의해서 발생한 비투기적인 값과 비교함으로써 실행될 수 있다. 만약 두 값이 같다면, 연결은 정확한 것이고; 그렇지 않으며 연결은 부정확한 것이다.
도7은 일 실시예에 따라, 로드 동작의 투기적인 결과와 값 비교기들을 사용함으로써 특정한 태그에 의해서 식별된 데이터 값 사이에 대한 연결을 검증하는 방법에 대한 흐름도이다. 만약 로드의 투기적인 결과가 더 이른 메모리 동작(예를 들면, 메모리 파일에 의해서)의 피연산자와 연결된다면, 로드 주소 계산을 위해 불필요한 피연산자는 (341-343)에서 표시된 것처럼, 로드의 투기적인 결과를 저장하기 위해서 사용될 수 있다. 예를 들면, 만약 상기 로드가 주소 계산을 위해서 인덱스 레지스터를 사용하지 않는다면, 인덱스 레지스터는 로드의 투기적인 결과를 저장하기 위해서 사용될 수 있다.
만약 상기 로드의 실제 결과가 상기 로드의 투기적인 결과와 매칭한다면(예를 들어, 기능성 유닛 내의 값 비교기를 수행함으로써 결정된 것과 같이), (345 및 347)에서 보듯이, 연결은 정확하며, 투기적인 결과는 비투기적이 될 수 있다. 그렇지 않으면, 연결은 부정확하고, 로드의 실제 값은 (349)에서 보듯이, 정확한 결과를 임의의 종속 동작들에 전달하기 위해서 결과 버스 상에서 방송될 수 있다.
소스 피연산자로서 로드의 투기적인 결과를 전송하기
여러 가지 실시예들에서는 많은 다른 방법으로 로드 동작의 투기적인 결과를 레지스터 데이터에 연결할 수 있다. 어떤 실시예에서는, 값들은 피연산자에 대한 두 개의 소스들을 식별함으로써 연결될 수 있다. 즉 투기적인 소스와 비투기적인 소스 값을 말한다. 투기적이 소스는 연결된 데이터 값이 될 수 있다. 투기적인 소스는 상기 로드의 투기적인 결과에 연결된 데이터 값을 표시하기 위해서 로드 동작들에 제공될 수 있다. 어떤 실시예에서는, 또한 투기적인 소스들은 그러한 로드 동작에 종속하는 동작들에게 제공될 수 있다. 따라서 어떤 피연산자들은 두 개의 태그를 가질 수 있다. 즉 투기적 소스를 식별하는 하나와 비투기적 소스를 식별하는 하나. 그런 실시예에서는, 각 스케줄러(118)은 도8에서 보듯이, 투기적인 피연산자와 비투기적인 피연산자에 대하여 태그 스토리지를 제공할 수 있다.
도8은 프로세서 내에 포함될 수 있는 스케줄러(118)의 일 실시예를 보여준다. 이미 설명된 실시예에서, 스케줄러(118)은 스케줄러 컨트롤러(502)와 동작 스토리지(504)를 포함한다. 동작을 디스페치하는 디스페치 유닛(104)에 응답하여, 스케줄러(502)는 동작에 대응하는 정보를 저장하기 위해서 동작 스토리지(504) 내에 엔트리를 할당할 수 있다. 예를 들면, 동작 스토리지 내의 엔트리(522)는 동작 코드(opcode) 영역(510)과 하나 또는 그 이상의 피연산자 영역, 그리고 결과 영역(516)을 포함할 수 있다. 결과 영역(516)은 엔트리 동작의 결과를 저장해야 하는 물리적 레지스터를 식별하는 태그를 저장할 수 있다. 동작이 발행되면, 이러한 태그는 하나 또는 그 이상의 태그 버스들 (520) 중 하나 상에서 각 스케줄러(118)에 전송될 수 있다. 각 스케줄러는 계류 중인 동작들의 피연산자들이 이용가능할 때를 결정하기 위해서 태그 버스들(520) 상에 전송된 태그들과 계류 중인 동작들에 대한 피연산자 태그들(아래에서 설명하는 것처럼, 투기적 및 비투기적인)을 비교할 수 있다. 따라서, 동작은 태그 버스(520) 상에 나타난 그것의 소스 피연산자들 태그에 응답하여 발행될 수 있다(또는 발행을 준비하도록 마크된다.)
각 피연산자 영역(들)은 투기적인 피연산자 소스를 식별하는 투기적인 태그와 비투기적인 피연산자 소스를 식별하는 비투기적인 태그에 대한 스토리지를 포함할 수 있다. 이미 설명한 엔트리(522)에서, 피연산자의 최초 두개의 소스들은 비투기적인 태그(512)와 투기적인 태그(514)에 의해서 식별된다. 스케줄러(118)은 동작의 피연산자들이 이용가능하다는 것에 대한 하나 또는 그 이상의 표시에 응답하여, 동작을 발행하도록 구성될 수 있다. 만약 그것이 투기적인 소스 또는 비투기적인 소스로부터 이용가능하다면, 피연산자는 이용가능하다. 만약 피연산자가 투기적인 소스와 비투기적인 소스들 로부터 이용가능하다면, 상기 동작은 비투기적인 소스로부터 이용가능한 값을 이용하여 실행될 수 있다. 어떤 실시예에서는, 스케줄러(118)은 단지 투기적인 피연산자 소스들만 이용가능한 동작들보다도 비투기적인 피연산자 소스가 이용될 수 있는 동작을 발행하는 것을 우선시킬 수 있다.
동작은 투기적인 소스들을 가지는 어떤 피연산자들과 투기적인 소스들을 가지지 않는 다른 피연산자를 포함할 수 있음에 주목하여야 한다. 또한 같은 소스는 하나의 동작에 대해서는 투기적인 소스이고 다른 하나의 동작에 대해서는 비투기적인 소스일 수 있음에 주목하여야 한다. 어떤 실시에들에서는, 동작이 실행될 때, 단지 하나의 데이터 값이 각 피연산자들에 대해서 읽혀질 수 있다(예를 들어, 실행 코어(124)는 투기적인 피연산자 소스 또는 비투기적인 피연산자 소스를 읽으며, 둘다 읽지는 않는다.). 이것은 추가적이 포트들(ports)을 레지스터 파일(116)에 추가할 필요가 없도록 한다. 어떤 실시예에서는, 투기적인 소스들과 물리적인 소스들은 같은 스토리지 위치들(예를 들어, 레지스터 파일(116) 내에) 내에 저장될 수 있고, 투기적인 소스들은 플래그되지 않으며, 또는 그렇지 않으면, 투기적인 값들로서 식별된다.
많은 실시예들에서, 스케줄러(118)은 동작들이 실행코어(들)(124)에 발행된 후에 동작들에 할당된 엔트리를 유지하도록 구성될 수 있다. 동작이 하나 또는 그 이상의 투기적인 피연산자의 이용가능성에 응답하여 스케줄러(118)에 의해서 발행될 때, 상기 스케줄러는 만약 투기적인 연결이 부정확하면 동작을 재발행하기 위해서 상기 동작에 할당된 엔트리(522)를 유지한다. 어떤 실시예에서는, 로드/저장 유닛은 투기적인 로드 결과가 물리적 레지스터 내에서 저장된 데이터 값과 연결될 때를 나타내는 투기적인 연결들을 검증하기 위해서 구성될 수 있다. 만약 연결이 정확하다면, 상기 로드 저장 유닛은 정확한 결과가 이미 연결을 통해서 이용가능하기 때문에 로드의 비투기적인 결과를 방송하지 않도록 구성될 수 있다. 만약 그렇게 되면, 스케줄러(들)(118)은 만약 상기 동작에 대한 비투기적인 피연산자 소스를 검증하는 태그가 결과 버스(130) 상에서 방송되면 동작을 재발행하도록 구성될 수 있다.
대체적으로, 상기 로드/저장 유닛은 투기적인 연결이 정확하다는 것과 로드 가 재발행되지 않아야 한다는 방송 또는 표시를 마스크하는 임시 상태 비트에 따라 저장의 결과를 방송할 수 있다. 그러나 만약 투기적인 결과가 부정확하다면, 상기 로드/저장 유닛은 로드의 정확한 값을 얻고 로드의 결과를 방송하기 위해서 데이터 캐쉬 및/또는 메모리 접근을 수행할 수 있다. 결과들이 항상 방송되는 실시예에 있어서, 추가적인 상태 비트는 투기적인 연결이 부정확함을 표시할 수 있다. 그러므로, 많은 실시예들에서는, 프로세서에서 이미 사용가능한 같은 태그와 결과 버스들은 투기적인 연결이 부정확하다는 것을 표시하기 위해서 사용될 수 있다. 다른 실시예에서는, 대체적인 표시 메카니즘들(예를 들어, 예측 오류를 표시하기 위해서 별개의 결과 버스들(103) 및/또는 결과 태그 버스들(520)을 사용하는)이 실행될 수 있다.
도9는 투기적 및 비투기적인 피연산자 소스들을 가지는 동작들을 발행하고 재발행하는 방법에 대한 일 실시예의 흐름도를 보여준다. 만약 동작의 투기적인 피연산자 소스가 이용가능하다면, 동작은 (801-803)에서 보듯이 발행될 수 있다. 동작의 투기적이 피연산자 소스는 데이터 값이 레지스터 파일 내에 특정 레지스터에 존재하거나 데이터 값이 결과 버스 상에서 출력될 때 이용가능하게 된다. 어떤 상황에서는, 같은 피연산자에 대한 동작의 비투기적인 피연산자 소스는 투기적인 피연자 소스 전에 이용가능함에 주목하여야 한다. 이러한 상황에서는, 상기 동작은 투기적인 피연산자 소스가 이용가능하기 전에 발행될 수 있다. 투기적인 소스의 후속적인 이용가능성은 어떤 실시예에서는 동작의 재발행을 야기시키지 않을 수 있다.
상기 발행된 동작은 (805)에서 보듯이, 투기적인 피연산자 소스에 의해 제공되는 데이터 값을 사용하여 실행될 수 있으며, 피연산자의 결과는 (807)에서 보듯이, 방송될 수 있다. 동작의 결과를 방송하는 것은 종속 동작들이 실행도록 한다.
만약 좀 늦게 투기적인 소스가 부정확하다고 결정되면(예를 들어, 투기적인 소스 및 비투기적인 소스에 의해 제공되는 데이터 값과 다르거나 또는 투기적인 소스 태그를 발생하는데 사용되는 투기적인 연결이 부정확하다면), 비투기적인 소스의 태그는 투기적인 소스의 값이 부정확하다는 표시로서 방송될 수 있다. 비투기적인 소스의 태그를 방송하는 것은 스케줄러(들)이 동작에 재발행함으로써 응답하는 방식으로 태그를 방송하는 것을 포함한다. 예를 들어, 어떤 실시예에서는, 스케줄러는 만약 태그가 방송되거나, 그리고 상기 태그와 연관된 상태 플래그가 특정 값으로 세트되면 응답하며, 반면에 어떤 실시예에서는 관련된 상태 플래그가 없으면, 스케줄러는 임의의 시간에 비투기적 태그가 방송되는 동작을 재발행하도록 구성될 수 있다.
투기적 또는 비투기적 소스에 기초하여 발행에 대한 준비성을 결정하기
도10에서 설명된 것과 같은 어떤 실시예에서는, 스케줄러(118)은 피연산자의 투기적인 소스 또는 피연산자의 비투기적인 소스의 이용가능성에 의해서 표시되는 것과 같이 주어진 피연산자의 준비를 결정하도록 구성될 수 있으나, 동시에 피연산자의 투기적인 소스와 피연산자의 비투기적인 소스의 이용가능성이 표시되지는 않는다. 이것은 또한 결과 태그 버스(520) 상에 잠재적으로 유해한 로딩 효과을 줄일 수 있다.
도10에서는, 비교기(532)를 사용하여 결과 태그 버스(들)(520) 상에 현재 태그들을 멀티플렉서(534)에 의해 선택하는 것과 같이, 상기 스케줄러는 피연산자의 투기적인 소스의 태그(514) 또는 피연산자의 비투기적인 소스의 태그(512)를 비교함으로써 동작 피연산자의 준비을 결정한다. 그러므로 스케줄러는 동작이 결과 태그 버스(520) 상에서 투기적인 소스의 이용가능성 또는 비투기적인 소스의이용가능성 중 어느 하나(둘다의 이용가능성은 아니다)를 지켜봄으러써 발행할 준비가 되어 있는지에 대하여 결정한다. 그러므로, 결과 태그 버스 상에서 각 결과 태그 방송과 피연산자의 투기적 그리고 비투기적인 소스 태그를 비교하는 것 대신에, 상기 스케줄러는 단지 방송 결과 태그를 하나 또는 다른 피연산자 소스 태그들과 비교한다. 만약 모든 동작의 피연산자들이 이용가능하다면(투기적 또는 비투기적 소스들 중 어느 하나로부터), 상기 동작에 대하여 준비된 플래그(508)는 세트될 수 있으며, 동작이 발생할 준비가 되어 있다고 표시한다.
부정확한 투기 감지 논리(530)는 스케줄러가 동작의 투기적 소스 또는 비투기적인 소스들 중 어느 것에 기초하여 발행되는 동작의 준비를 결정하는지를 제어한다. 어떤 실시예에서는 부정확한 투기 감지 논리(530)은 스케줄러 내의 각 계류중인 동작에 대하여 복제되고, 그 결과 각 동작은 결과버스(520) 상에서 투기적 또는 비투기적인 소스들을 독립적으로 관찰할 수 있다. 다른 실시에에서는, 모든 계류중인 동작들은 모든 동작들이 투기적인 소스들(만약 이용가능하다면) 또는 비투기적인 소스들에 대하여 관찰하는 것과 같은 방법으로 제어될 수 있다.
부정확한 투기 감지 논리(530)은 스케줄러가 부정확한 투기이 감지되지 않는 한 투기적인 소스들의 이용가능성에 기초하여 발행되는 동작들의 준비를 결정하는스케줄러(118)의 행동을 제어하기 위해서 구성될 수 있다. 부정확한 투기이 감지되면, 추정확한 투기 감지 논리(530)은 비투기적인 소스들의 준비를 관찰하도록 플립(flip)된다. 예를 들어, 만약 로드 저장 유닛(126)이 주소 또는 값의 비교들을 통하여 부정확한 연결을 감지하면, 부정확한 투기 논리(530)은 동작 준비가 발행되도록 결정하기 위해서 비투기적인 소스들을 사용하로록 플립된다. 또한 부정확한 연결의 감지는 메모리 파일(132)의 전부나 일부 또는 투기의 다른 소스로 하여금 무효화되도록 할 수 있다. 부정확한 투기 감지 논리(530)은 투기의 소스가 리셋되거나 그렇지 않으면 부정확한 투기에 대하여 정확하게 될 때까지 투기적인 소스들을 대신하여 비투기적인 소스들을 관찰하는 것을 계속한다.
부정확한 투기 감지 논리(530)가 투기적인 소스들의 이용가능성에 대한 관찰로부터 비투기적인 소스들의 이용가능성에 대한 관찰까지 플립될 때, 상기 스케줄러(118)은 비투기적 소스들의 이용가능성에 대하여 정보가 부족하게 된다. 어떤 실시예들에서는, 스케줄러(118)은 비투기적인 소스들의 전부가 이용가능한지와 동작이 발행될 준비가 되어 있는지를 추측한다. 만약 이러한 추측이 부정확하다면, 동작은 비투기적인 소스들이 실제로 이용가능한 때 잠시 후에 재발행된다(예를 들어, 비투기적 소스들의 태그들이 결과 버스(520) 상에서 방송될 때를 감지함으로써)
투기적인 레지스터 맵
도11은 프로세서(100) 내에 포함될 수 있는 디스페치 유닛(104)의 다른 실시예를 보여준다. 이러한 실시예에서, 디스페치 유닛(104)는 레지스터 맵(134)와 메 로리 파일(132), 그리고 투기적인 레지스터 맵(800)을 포함한다. 레지스터 맵(134)처럼, 투기적인 레지스터 맵(800)은 논리적 레지스터 이름들을 물리적 레지스터 이름들로 번역한다. 그러나, 투기적인 레지스터 맵(800)은 물리적 레지스터 이름으로 논리적 레지스터 이름을 맵(map)한다(예를 들어, 물리적인 레지스터에 저장된 값을 로드 동작의 투기적인 결과와 연결시키는 메모리 파일(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)는 만약 Z라면 조건부 이동 명령 CMOV EAX, EBX를 감지할 수 있고, 이에 반응하여 EAX에 대한 투기적 레지스터 맵 엔트리가 현재 EBX로 맵된 물리적 레지스터를 식별해야 한다는 표시를 한다. 일반적으로, 투기적인 레지스터 맵 엔트리들은 논리 레지스터가 특정 물리적 레지스터로 맵되어야함을 표 시하는 임의의 예측 메카니즘에 반응하여 생성된다.
어떤 실시예에서는, 동작들은 그것들이 레지스터 맵(134)에 제공되는 같은 주기 동안에 투기적 레지스터 맵(800)에 제공될 수 있다. 레지스터 맵(134)이 동작에 대햐여 비투기적 레지스터 재명명을 수행할 때, 투기적 레지스터 맵(800)은 동작의 투기적 소스 피연산자들의 하나를 저장하여 명시된 임의의 논리 레지스터가 특정 물리적 레지스터와 연결이 되는지를 표시할 수 있다. 만약 유효한 엔트리가 동작 논리 레지스터 소스들의 하나에 대한 투기적 레지스터 맵 스토리지(804) 내에 존재하면, 투기적 레지스터 맵 컨트롤러(802)는 상기 논리 레지스터의 엔트리 내에 저장된 물리적 레지스터 이름을 출력할 수 있다. 디스페치 유닛(104)는 상기 동작이 스케줄러(118)에 디스페치될 때, 투기적인 소스로서 투기적인 물리적 레지스터 이름을 출력한다. 그러므로, 만약 ADD 동작이 투기적 레지스터 맵(800)에 제공되거나, ADD 소스들 중 하나가 투기적인 레지스터 맵 스토리지(804) 내에서 유효한 엔트리를 가지면, 상기 엔트리 내에서 식별된 물리적 레지스터에 대한 태그는 스케줄러(118)에 투기적인 소스 피연산자 태그들로서 제공된다. 상기 스케줄러는 전술한 것처럼, 투기적 및 비투기적인 피연산자 태그들을 저장하기 위해서 구성될 수 있으며, 어떤 실시예에서는 비투기적 태그가 결과 버스 상에서 방송되는 것에 응답하여 동작들을 재발행(만약 이미 발행되었다면)하기 위해서 구성될 수 있다.
투기적 맵 내에 엔트리들은 특정 논리 레지스터에 대한 데이터 값이 수정되는 표시에 응답하여 무효화될 수 있다. 예를 들어, 만약 동작 ADD EAX, ECX가 디스페치 유닛(104)에 의해서 다루어진다면, 투기적 레지스터 맵 컨트롤러(802)는 ADD 동작이 레지스터 값을 수정할 것이기 때문에 현재 EAX에 할당된 투기적인 맵 엔트리를 무효화시킬 수 있다.
일반적으로, 투기적인 피연산자 태그들은 하나의 동작의 투기적인 결과가 레지스터 데이터 값과 연결될 때마다 스케줄러(118)에 제공될 수 있다. 어떤 실시예에서는, 여러 주기(예를 들어, 아래에서 설명할 것처럼 투기적인 레지스터 맵)에서 종속성들을 추적하는 메모리 파일(132)과 다른 구조는 투기적인 결과들을 레지스터 값들과 연결시키기 위해서 사용될 수 있다. 예를 들면, 디스페치 유닛(104)는 연결을 검증하는 메모리 파일(132)에 응답하여 동작에 대한 투기적 태그들을 발생시킬수 있다. 어떤 실시예들에서는, 투기적인 태그들은 이러한 투기적인 맵을 사용하지 않고 발생될 수 있다. 예를 들면, 명령들의 연속은 다음과 같은 것들을 포함할 수 있다:
ADD EBX, EBX (ADD1)
MOV[addressing pattern A], EBX (STORE 1)
ADD[addressing pattern A], ECX (ADD2).
이러한 명령들은 인접한 명령들이다(예를 들면, 그것들은 프로그램 순서상 각각 직접적으로 이어진다.). 이러한 명령들은 실행 코어(들)(124) 내의 실행을 위해서 아래 구성요소 동작들을 분리시킬 수 있다.
ADD PR2, PR2, PR1 (ADD 1)
MOV[addressing pattern A], PR2 (STORE 1)
MOV PR3,[addressing pattern A] (ADD 2에 대한 로드)
ADD PR4, PR3, PR5 (ADD 2에 대한 에드)
MOV[addressing pattern A], PR4 (ADD 2에 대한 저장).
ADD 2의 구성요소 로드, 에드(add)와 저장 동작들이 디스페치되기 전에, 디스페치 유닛(104)는 투기적인 결과들을 연결시키는 시퀀스 내의 임의의 구성요소 동작들의 사이에 어떤 종속성들이 있는지를 감지한다. 추가적으로, STORE 1에 의해 저장된 데이터는 로드의 투기적인 결과(예를 들어, 메모리 파일에 의해서)와 연결될 수 있다. 간섭 동작들이 없기 때문에, 디스페치 유닛은 같은 디스페치 주기 내에 로드 동작과 에드 동작(두 동작 모두는 같은 명령으로부터 유도된다.) 사이에 종속성을 감지할 필요가 있는 모든 정보를 가질 수 있다. 이들 두 종속성에 기초하여, 디스페치 유닛(104)는 STORE 1, PR2에 의해서 저장된 데이터 태그를 ADD 2의 일부로서 수행된 로드 동작의 투기적인 결과와 연결할 수 있다. 이러한 투기적인 연결은 또한 디스페치 유닛이 ADD 2의 일부로서 수행된 추가 동작의 소스를 PR2 내에 저장된 값과 연결하도록 한다. 따라서, 디스페치 유닛(104)는 PR2는 추가를 위해서 피연산자들 중 하나의 소스로서 투기적으로 사용되나, PR3는 상기 피연산자에 대하여 비투기적인 소스라는 표시를 출력할 수 있다. 그러므로, 일 실시예에서는, 디스페치 유닛에 의한 동작들과 피연산자 식별기들은 아래와 같이 명시될 수 있다:
ADD PR2, PR2, PR1 (ADD 1)
MOV[addressing pattern A], PR2 (STORE 1)
MOV PR3,[addressing pattern A] (ADD 2에 대한 로드)
ADD PR4, PR2*, PR3, PR5 (ADD 2에 대한 에드, 여기서 ECX 및 PR3에 대한 투기적인 소스인 PR2*는 ECX에 대한 비투기적인 소스이다.)
MOV[addressing pattern A], PR4 (ADD 2에 대한 저장).
다른 실시예에서, 디스페치 유닛(104)는 로드 동작에 종속하는 동작들에 대한 투기적 소스 피연산자를 식별하기 위해서 구성되지 않을 수 있다. 대신에 도12에서 보듯이, 디스페치 유닛(104)는 로드 동작들을 하나 또는 그 이상의 동작들로 변환시키기 위해서 구성된 동작 변환기(180)을 포함할 수 있으며, 상기 하나 또는 그 이상의 동작들은 종속 동작들에 투기적인 로드 결과들을 제공하기 위해서 레지스터 대 레지스터 이동 동작을 포함할 수 있다. 로드 동작의 상기 변환은 상기 로드 동작의 투기적인 결과와 특정 물리적 레지스터 이름에 의해서 식별된 데이터 값 사이에 연결이 존재한다는 표시에 응답하여 수행될 수 있다. 이러한 표시는 연결 감지기(182)에 의해 제공되며, 연결 감지기는 어떤 실시예에서 메모리 파일(132)를 포함할 수 있다. 다른 실시예에서는 연결 감지기(182)는 상술한 것처럼 조건부 이동 동작과 같이 동작들에 응답하여 데이터 값들을 연결시키기 위해서 구성된 논리를 포함할 수 있다.
일 실시예에서는, 상기 동작 변환기는 동작에 대해서 레지스터 값과 동작의 투기적인 결과 사이의 연결이 감지되는지에 대한 표시뿐만 아니라 상기 동작에 대한 입력 동작 코드를 수신할 수 있다. 만약 동작이 로드이고, 투기적인 연결이 감지되면, 상기 동작 변환기는 레지스터 대 레지스터 이동 동작에 대한 동작 코드를 출력할 수 있다. 디스페치 유닛(104)는 레지스터 대 레지스터 이동을 위해서 소스 피연산자 태그로서 연결 감지 유닛에 의한 태그 출력을 사용하여, 레지스터 대 레 지스터 이동 동작을 디스페치시킬 수 있다.
어떤 실시예에서는, 상기 동작 변환기는 레지스터 대 레지스터 이동 결과를 디스페치시키기 위해서 구성될 수 있으며, 그 결과 스케줄러는 레지스터 대 레지스터 이동 동작에 할당된 엔트리 내에서 레지스터 대 레지스터 이동과 본래의(original) 로드 동작을 위해 필요한 피연산자 태그들을 저장한다. 이것은 상기 동작이 만약 레지스터 대 레지스터 이동 동작의 투기적인 결과가 부정확하다고 감지된다면 본래적 로드 동작으로서 재발행되로록 할 수 있다. 이것을 수행하기 위해서, 추가적인 소스 피연산자는 로드 동작을 수정한 결과인 각 레지스터 대 레지스터 이동 동작에 추가될 수 있다(또는 대체적인 실시예에서는 이미 존재하는 소스 피연산자는 이것을 실행하기 위해서 수정될 수 있다.). 어떤 실시예에서는, 상기 레지스터 대 레지스터 이동 동작의 투기적인 결과는 본래적인 로드에 대한 주소 계산의 수행 및/또는 연결된 데이터 값과 실제적인 로드 결과 데이터 값을 비교함으로써 검증될 수 있다. 만약 투기적인 결과가 부정확하다면, 데이터 캐쉬가 정확한 로드 값을 얻기 위해서 접근될 수 있다. 정확한 로드 결과의 재방송은 스케줄러로 하여금 부정확한 값을 사용하여 실행된 임의의 종속 동작들을 재발행할 수 있게 한다.
어떤 실시예에서는, 상기 동작 변화기(180)은 로드 동작을 이중 특성 동작으로 변화시키도록 구성될 수 있다. 로드 동작처럼, 이러한 이중 특성 동작은 주소 계산과 데이터 이동을 포함할 수 있다. 로드와 달리, 이중 특성 동작에 의해서 시작된 데이터 이동은 레지스터 대 레지스터 이동이다. 더욱이, 이중 특성 동작에 의 해 시작된 데이터 이동은 주소 계산이 완결되기 전에 일어날 수 있다. 주소 계산은 투기적인 연결이 정확한지를 검증하기 위해서 사용될 수 있다. 만약 투기적인 연결이 부정확하다면, 이중 특성 동작은 정상 로드 동작으로 재발행되고, 그리고 그것의 결과는 데이터 캐쉬 접근이 완결될 때에 종속 동작들에게 재방송될 수 있다.
아래 예들은 서로 다른 실시예들이 어떻게 이러한 동작들의 예시적 시퀀스를 변화시키는지를 보여준다:
ADD PR2, PR1, PR1 (ADD 1)
...
STORE[addressing pattern A], PR2 (STORE 1)
...
LOAD PR3,[addressing pattern 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가 이용가능해지자마자 발행될 수 있다. 이중 특성 동작의 일부의 이동 결과가 방송되자마자, ADD 2는 피연산자로서 이동 동작의 투기적 결과를 사용하여 발행된다. 주소 계산이 수행될 때, 투기적인 연결이 검증될 수 있다. 만약 투기적 연결이 부정확하면, 로드/저장 유닛은 스케줄러로 하여금 로드 동작으로서 상기 이중 특성 이동 동작을 재발행하도록 스케줄러에 표시를 제공할 수 있다. 상기 로드 동작의 결과는 방송될 수 있으며, 이동의 투기적 결과를 사용하여 실행되는 ADD 2와 같은 종속 동작들이 재발행되도록 한다. 이러한 이중 특성 동작은 단일 스케줄러 엔트리를 사용하여 스케줄될 수 있으며, 스케줄러(118)은 두번 의 발행을 위해서 이중 특성 동작을 선택할 수 있음에 주목하여야 한다: 하나는 로드의 주소 계산을 위한 것이고, 다른 하나는 레지스터 대 레지스터 이동을 위한 것이다.
대체적인 실시예에서는, 동작 변환기(180)은 투기적인 연결의 감지에 응답하여 LOAD 1을 두개의 연결된 동작들로 변환한다. 즉 LOAD PR3,[addressing pattern A]과 MOV PR3, PR2. 이중 특성 동작을 포함하는 앞선 예와는 달리, 이러한 연결된 동작들은 단일 스케줄러 엔트리를 공유하는 대신에 스케줄러(118) 내에 엔트리를 각각 차지할 수 있다. 레지스터 대 레지스터 이동 동작이 발행될 때, ADD 2와 같은 종속성 동작들은 피연산자 값으로서 PR3의 투기적 값을 사용하여 발행될 수 있다. 상기 LOAD 동작은 로드 동작의 특정한 형태로 태그되며, 그 결과 만약 투기적인 연 결이 정확하다고 결정되면, 상기 로드의 결과 태그는 방송되지 않는다(또는 동작의 결과가 정확하고 그리고 종속성 동작들이 재발행되지 않는다는 표시를 방송한다.). 또한 만약 상기 로드와 상기 이동 동작 모두가 같은 주기 상에서 그들의 결과를 방송하면, 상기 이동 결과 대신에 종속 동작들에 사용되는 로드 결과를 위해서 표시가 제공된다. 어떤 실시예에서는, 이것은 스케줄러가 어느 태그에 응답해야 하는 지를 표시하는 프로세서(100) 내의 각 태그 버스에 잉여의 비트를 추가함으로써 일어날 수 있다. 만약 투기적 연결이 부정확하다면(예를 들어, 상기 로드 결과 태그의 방송에 의해 표시됨으로써), 상기 이동 동작은 취소될 수 있다(예를 들어, 이동 동작을 스케줄하는 스케줄러(118)는 동작이 재발행할 수 없도록 하기 위해서 레지스터 대 레지스터 이동에 현재 할당된 스케줄러 엔트리를 해제할 수 있다.). 많은 실시예들에서, 상기 스케줄러는 결과 버스 상에 다시 나타나는 로드 결과에 응답한 투기적 로드 결과를 사용하여 실행되는 임의의어떤 종속성 동작들을 재발행시키기 위해서 구성될 수 있다.
일 실시예에서, 만약 특정 태그에 의해 식별된 레지스터 데이터 값과 로드 동작의 투기적인 결과 사이의 연결이 감지되면(예를 들면, 메모리 파일에 의해서), 상기 로드 동작은 투기적인 결과에 연결된 데이터 값의 태그와 동등한 소스 피연산자 태그를 가지는 레지스터 대 레지스터 이동 동작을 포함하기 위해서 수정될 수 있다. 레지스터 대 레지스터 이동 동작의 실행은 로드 결과 태그를 따라서 결과 버스 상에서 상기 태그에 의해 식별된 데이터 값을 출력하는 것을 포함할 수 있다.
상기 투기적인 결과는 검증될 수 있다(예를 들면 본래적인 로드에 대한 주소 계산을 수행함으로써). 만약 투기적인 결과가 정확하다면, 상기 로드의 결과는 결과 버스 상에서 재방송되지 않을 수 있다(또는 대체적으로, 로드의 결과가 종속 동작들이 재방송(rebroadcast) 결과에 응답하여 재발행되지 않아야 한다는 표시에 따라서 재방송될 수 있다.). 만약 투기적인 결과가 부정확하다면, 데이터 캐쉬는 정확한 로드 결과를 복구하기 위해서 접근될 수 있으며, 정확한 로드 결과가 결과 버스 상에서 방송될 수 있다. 이것은 또한 투기적 결과 값을 사용하여 발행된 임의의 종속 동작들이 재발행되도록 할 수 있다. 어떤 상황들에서는, 상기 투기적인 결과는 상기 레지스터 대 레지스터 이동 동작의 수행 전에 검증될 수 있다. 만약 투기적인 결과가 부정확하다면, 상기 레지스터 대 레지스터 이동 동작은 수행되지 않을 수 있다.
만약 로드 동작의 투기적 결과와 레지스터 데이터 값 사이에서의 연결이 감지되지 않으면(예를 들면, 상기 로드의 주소 패턴이 메로리 파일에서 손실된 경우), 상기 로드는 수정되지 않을 수 있다. 상기 로드는 데이터 캐쉬에 접근하고, 결과 버스 상에서 그것의 결과를 방송하면서 정상적으로 실행될 수 있다.
태그 컬러링
어떤 상황에서는, 메모리 파일(132)은 로드 동작의 투기적인 결과를 특정 논리적 레지스터 내의 값과 연결시킬 수 있다. 어떤 상황에서는, 상기 논리적 레지시터는 레지스터 맵에 의해서 논리 레지스터에 지정된 물리적 레지스터로 하여금 프리리스트(freelist)로 복귀하도록 하여 덮어씌여질 수 있다(즉 이용가능한 자유로운 물리적 레지스터가 지정된다.). 물리적 레지스터는 다른 값을 저장하기 위해서 재지정될 수 있다. 프리리스트로 물리적 레지스터의 복귀 및/또는 물리적 레지스터의 재지정은 물리적 레지스터를 명시하는 메로리 파일 엔트리에는 영향을 미치지 않을 수 있다. 그러므로 메모리 파일(132)에 의해서 제공되는 후속적인 연결들은 물리적 레지스터 재지정을 고려하지 않을 수 있다. 예를 들어, 아래의 시퀀스를 고려해보자.
MOV[EBP+50],EAX
XOR EAX, EAX
MOV EBX, [EBP+50].
이러한 시퀀스에 응답하여, 상기 메모리 파일(132)은 주소 패턴 EBP+50 및 제1 저장 동작에 응답하여 EAX에 지정된 물리적 레지스터에 엔트리를 할당할 수 있다. EAX가 XOR 동작에 의해서 덮어씌어질 때, EXA의 현재 값은 메모리 파일(132) 내의 주소 패턴과 연결된 값에 더 이상 대응하지 않을 수 있다. 그러나, 상기 메모리 파일(132)는 후속 로드 동작의 투기적인 결과를 로드의 주소패턴과 더 이른 주소패턴 사이의 매칭에 기초한 더 이른 값과 연결시킬 수 있다.
어떤 실시예에서는, 레지스터 파일(116) 내의 각 물리적 레지스터는 컬러를 지정받을 수 있다. 이 컬러는 각 레지스터의 태그와 연관될 수 있으며, 레지스터 태그를 따라 프로세서를 통해서 전파될 수 있다. 여기서 사용되는 것 처럼, 컬러는 레지스터가 재지정되었는지를 표시하는 정보의 하나 또는 그 이상의 비트들이다. 일 실시예에서는, 컬러는 레지스터가 프리리스트로 복귀하거나 또는 프로리스트로부터 풀(pull)되는 때마다 토글(toggle)되는 단일 비트일 수 있다. 만약 특정 레지 스터의 태그를 특성화하는 엔트리가 메모리 파일에 할당된다면, 상기 메모리 파일은 또한 할당된 엔트리 내의 상기 레지스터와 관련된 컬러를 저장할 수 있다. 유사하게, 투기적 레지스터 맵은 도13에서 보듯이, 각 태그에 대한 컬러(814)를 저장할 수 있다. 또한 상기 컬러는 레지스터 맵(134)과 스케줄러(118) 내의 태그와 함께 저장될 수 있다. 레지스터 태그가 결과 버스(들)(520) 상에서 출력될 때, 또한 상기 태그와 관련된 컬러는 결과 버스(들)(520) 상에서 출력될 수 있다.
예로서, 최로로 컬러 '0'을 가지는 물리적 레지스터를 고려해 보자. 컬러 0을 가지는 물리적 레지스터는 레지스터 맵(134)에 의해서 특정 논리 레지스터에 지정될 수 있다. 추가적으로, 컬러 0을 가지는 상기 물리적 레지스터는 투기적 레지스터 맵(800) 내에 특정 논리적 레지스터에 지정될 수 있다. 투기적인 레지스터 맵(800) 엔트리의 후속하는 할당의 몇 관점에서, 상기 물리적 레지스터는 프리리스트로 복귀될 수 있으며, 그리고 재지정을 위해서 선택될 수 있다. 물리적 레지스터가 프리리스트로부터 확보될 때, 그것의 컬러는 '1'로 업데이트될 수 있다. 레지스터의 컬러가 업데이트된 후의 몇 관점에서는, 상기 투기적인 레지스터 맵(800)은 상기 레지스터가 재지정되기 전에 할당된 엔트리에 기초한 상기 레지스터 태그와 상기 컬러 0에 의한 동작의 투기적 소스를 식별할 수 있다. 상기 투기적 소스를 검증한 이러한 정보는 스케줄러(118)에 저장될 수 있다. 동작이 발행되기 전에, 다른 동작은 상기 레지스터의 새로운 값을 생산할 수 있으며, 그리고 상기 태그와 현재 컬러 1이 결과 버스(520) 상에서 방송될 수 있다. 상기 레지스터의 태그와 관련된 현재 컬러 1과 상기 투기적 레지스터 맵 엔트리 내의 레지스터의 태그와 관련된 컬 러 0을 비교함으로써, 상기 스케줄러(118)는 상기 태그가 더 이상 같은 값을 검증하지 않도록 할 수 있다. 어떤 실시예에서는, 스케줄러(118)는 부정확한 투기으로 이것을 취급할 수 있으며, 도10에서 전술할 것과 같이, 상기 피연산자에 대한 비투기적인 소스의 관찰을 위해서 플립할 수 있다. 상기 플립은 컬러 오매치(mismatch)가 감지되는 특정 동작으로 제한될 수 있다(스케줄러 내의 계류중인 동작들의 모두로 하여금 플립되도록 하는 것과는 대조적으로).
전형적으로 물리적 레지스터 재지정의 관리에 어려움들 없이 종속 그래프로부터 레지스터 대 레지스터 이동 동작들을 제거하는 것은 어렵다. 예를 들어, 만약 레지스터 대 레지스터 이동들이 두개의 논리 레지스터 번호가 같은 물리적 레지스터 번호로 참조되기 위해서 상기 레지스터 맵(134)을 업데이트 함으로써 수행된다면, 상기 물리적 레지스터 번호에 의해 식별된 상기 물리적 레지스터가 프리리스트로 복귀되는 때를 결정하는데 어려움이 따를 수 있다. 레지스터 컬러링은 이러한 시스템에서 대체적으로 사용될 수 있다.
어떤 실시예에서, 레지스터 컬러링은 상기 투기적인 레지스터 맵(800)을 사용함으로써 레지스터 대 레지스터 이동들의 수행을 최적화하는 때에 사용될 수 있다. 예를 들면, 상기 투기적인 레지스터 맵(800)은 종속 그래프로부터 레지스터 대 레지스터 이동 동작들을 제거하는데 사용될 수 있다(즉 레지스터 대 레지스터 이동 동작의 결과에 종속하는 동작들은 만약 동작의 소스가 이미 이용가능하다면, 상기 이동 동작이 실행되기를 더 이상 기다리지 말아야한다.). 레지스터 대 레지스터 이동 동작이 감지될 때 마다, 상기 투기적인 레지스터 맵(800)은 상기 이동 동작에서 명시된 소스와 목적지 레지스터를 연결한 엔트리를 할당할 수 있다. 각 물리적 레지스터의 컬러는 투기적인 레지스터 맵(800) 엔트리 결과에 저장될 수 있다. 이러한 시스템에서, 물리적 레지스터들은 다중 논리 레지스터가 같은 물리적 레지스터와 관련되기 위해서 레지스터 맵(134)이 업데이트되는 시스템에서 어려움없이 정상적으로 재지정될 수 있다. 물리적 레지스터가 컬러링을 사용하여 시스템에서 재지정될 때, 상기 물리적 레지스터가 현재 할당한 특정한 값은 상기 물리적 레지스터가 상기 물리적 레지스터를 식별하는 각 태그와 관련된 컬러에 의해 재지정되기 전에 같은 물리적 레지스터에 할당되었던 다른 값들과는 다를 수 있다.
상기 투기적 레지스터 맵(800)은 투기적 레지스터가 종속 그래프로부터 플로팅 포인트 레지스터 대 레지스터 이동 동작들을 제거하는 정수 및 플로팅 포인트 레지스터들을 다루도록 구성될 수 있다. 이것은 또한 상당한 지연시간을 가지는 FXCH(스택(stack)의 현재 탑(top)과 스택 요소를 교환한다)처럼 동작들을 종속 그래프로부터 제거되도록 한다. 투기적인 레지스터 맵(800)의 사용이 종속 그래프로부터 레지스터 대 레지스터 이동들을 제거하더라도, 상기 레지스터 대 레지스터 이동은 여전히 실행될 수 있음에 주목하여야 한다.
예시적인 컴퓨터 시스템
도14는 버스 브리지(402)를 통하여 여러가지 구성요소들에 커플된 프로세서(100)을 포함하는 컴퓨터 시스템(400)의 일 실시예에 대한 블럭 다이러그램을 도시한다. 프로세서(100)는 전술한 바와 같이,디스페치 유닛(104), 메모리 파일(132), 스케줄러(118), 및/또는 투기적 레지스터 맵(800)의 실시예를 포함할 수 있다. 컴퓨터 시스템의 다른 실시예들이 가능하며 고려될 수 있다. 도시된 시스템에서, 메인(main) 메모리(200)는 메모리 버스(406)를 통해서 버스 브리지(402)에 커플되고, 그리고 그래픽 컨트롤러(408)은 AGP 버스(410)를 통해서 버스 브리지(402)에 커플된다. 여러가지 PCI 장치들은(412A-412B)는 PCI 버스(414)를 통해서 버스 브리지(402)에 커플된다. 또한 제2 버스 브리지(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)는 일반적으로 소스 장치 또는 버스에 의해서 사용되는 프로토콜(protocol)에서 목적 장치 또는 버스에 의해서 사용되는 프로토콜에 이르는 동작을 번역한다.
PCI 버스(414)에 대한 ISA/EISA 버스에 인터페이스를 제공하는 것과 더불어, 제2 버스 브리지(416)은 추가적인 기능성을 합체할 수 있다. 제2 버스 브리지(416) 외부에 또는 제2 버스 브리지(416)에 통합되어 있는 입력/출력 컨트롤러(도시않됨) 가, 키보드 또는 마우스(422)와 여러가지 직렬 또는 병렬 포트들(port)을 위해서 동작 지원을 제공하는 컴퓨터 시스템(400) 내에 포함될 수 있다. 또한 외부 캐쉬 유닛(도시 않됨)은 다른 실시예에서는 프로세서(100)과 버스 브리지(402) 사이에서 CPU 버스(424)에 커플될 수 있다. 대체적으로 외부 캐쉬는 버스 브리지(402)에 커플될 수 있고, 그리고 외부 캐쉬에 대한 캐쉬 제어 논리는 버스 브리지(402)에 통합된다. L2 캐쉬(428)은 프로세서(100)의 뒷 부분 구성에서 도시된다. L2 캐쉬(428)은 프로세서(100)으로부터 분리될 수도 있으며, 프로세서(100)에서 카트리지로 통합될 수도 있으며, 프로세서(100)에서 반도체 기판 위에서 통합될 수도 있다.
메인 메모리(200)은 응용 프로그램드이 저장되거나, 프로세서(100)이 우선적으로 실행되는 메모리이다. 적합한 메인 메모리(200)은 DRAM(동적 랜덤 엑세스 메모리)을 포함한다. 예를 들며, 복수의 SDRAM 뱅크들(banks) 또는 램버스(Rambus) DRAM(RDRAM)이 적합할 수 있다.
PCI 장치들(412A-412B)는 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들, 또한 드리이브 컨트롤러들, SCSI(small computer systems interface) 아답터들 그리고 텔레포니 카드들과 같은 여러가지 주변 장치들의 예시이다. 유사하게, ISA 장치(418)은 모뎀, 사운드 카드와 같은 여러가지 주변 장치들과 GPIB 또는 필드 버스 인터페이스 카드들과 같은 여러가지 데이터 수집 카드들의 예시이다.
그래픽 컨트롤러(408)은 디스플레이(426) 상에서 텍스트와 이미지들의 표시 를 제어하기 위해서 제공된다. 그래픽 컨트롤러(408)은 메인 메모리(200)로 또는 메인 메로리로부터 효과적으로 이동할 수 있는 3차원 데이터 구조를 나타내기 위해서 당해 기술분야에서 일반적으로 알려진 전형적인 그래픽 가속기를 포함할 수 있다. 그러므로, 그래픽 컨트롤러(408)은 메인 메모리 (200)에 접근하기 위한 버스 브리지(402) 내에서 타겟 인터페이스에 접근을 요청하고 수신하는 AGP 버스(410)의 마스터(master)가 될 수 있다. 전용 그래픽 버스는 메인 메모리(404)로부터 빠른 데이터 회복에 적응한다. 어떤 동작들에 대하여, 그래픽 컨트롤러(408)은 AGP 버스(410) 상에서 PCI 프로토콜 트랜잭션(transaction)을 발생시키기 위해서 더 구성될 수 있다. 그래서 버스 브리지(402)의 AGP 인터페이스는 PCI 프로토콜 타겟뿐만 아니라, AGP 프로토콜 트랜잭션과 개시 트랜잭션을 지원하는 기능성을 포함할 수 있다. 디스플레이(426)은 이미지 또는 텍스트가 나타날 수 있는 전자적 디스플레이이다. 적합한 디스플레이(426)은 음극선관("CRT"), 액정 표시기("LCD") 등을 포함한다.
AGP,PCI, 및 ISA 또는 EISA 버스들이 전술한 예들에서 사용되는 반면에, 임의의 버스 구조들은 요구되는대로 교체될 수 있음에 주목하여야 한다. 컴퓨터 시스템(400)은 추가적인 프로세스들을 포함하는 멀티프로세싱 컴퓨터 시스템일 수 있다(예를 들어, 프로세서(100a)는 컴퓨터 시스템(400)의 선택적 구성요소로서 도시된다.). 프로세서(100a)는 프로세서(100)과 유사할 수 있다. 더욱 특정하게는, 프로세서(100a)는 프로세서(100)와 동일한 복사본일 수 있다. 프로세서(100a)는 독립 버스(도14에서 도시된 것처럼)를 통하여 버스 브리지(402)에 연결될 수 있으며, 프 로세서(100)와 함께 CPU 버스(224)를 공유할 수 있다. 더욱이 프로세서(100a)는 L2 캐쉬(428)과 유사한 선택적 L2 캐쉬(428a)에 커플될 수 있다.
도15는 전술한 바와 같이, 디스페치 유닛(104), 메모리 파일(132), 스케줄러(118) 및/또는 투기적인 레지스터 맵(800)을 포함할 수 있는 컴퓨터 시스템(400)의 다른 실시예이다. 다른 실시예들도 가능하며, 고려될 수 있다. 도15의 실시예에서, 컴퓨터 시스템(400)은 여러가시 프로세싱 노드들(612A,612B,612C, 및 612D)을 포함한다. 각 프로세싱 노드는 각 프로세싱 노드(612A-612D) 내에 포함되는 메모리 컨트롤러(616A-616D)를 통하여 각각의 메모리(614A-614D)에 커플된다. 추가적으로, 프로세싱 노드들(612A-612D)는 프로세싱 노드들(612A-612D) 사이에서 통신하기 위해 사용되는 인터페이스 논리를 포함한다. 예를 들면, 프로세싱 노드(612A)는 프로세싱 노드(612B)와의 통신을 위한 인터페이스 논리(618A)와 프로세싱 노드(612C)와 통신을 위한 인터페이스 논리(618B)와 그리고 다른 프로세싱 노드와의 통신을 위한 인터페이스 논리(618C)를 포함한다(도시 않됨). 유사하게, 프로세싱 노드(612B)는 인터페이스 논리(618D,618E, 및 618F)를 포함한다; 프로세싱 노드(612C)는 인터페이스 논리(618G,618H 및 618I)를 포함한다; 그리고 프로세싱 노드(612D)는 인터페이스 논리(618J, 618K 그리고 618L)를 포함한다. 프로세싱 노드(612D)는 인터페이스 논리(618L)을 통하여 복수의 입력/출력 장치들(예를 들면, 데이지 체인(daisy chain) 구조에서 장치들(620A-620B))과 통신하기 위해서 커플된다. 다른 프로세싱 노드들은 유사한 방식으로 I/O 장치들과 통신할 수 있다.
프로세싱 노드들(612A-612D)는 인터프로세싱(inter-processing) 노드 통신에 대하여 패킷에 기반한 연결(packet-based link)을 실행한다. 본 실시예에서, 상기 연결은 단일방향의 라인 세트로 실행된다(예를 들면, 라인들(624A)는 프로세싱 노드(612A)에서 프로세싱 노드(612B)까지의 패킷들을 전송하는데 사용되고, 라인들(624B)은 프로세싱 노드(612B)에서 프로세싱 노드(612A)까지의 패킷들을 전송하는데 사용된다.). 라인들(624C-624H)의 다른 세트는 도15에서 설명한 것과 같이, 다른 프로세싱 노드들 사이의 패킷들을 전송하는데 사용된다. 일반적으로, 라인들(624)의 각 세트는 하나 또는 그 이상의 데이터 라인들, 데이터 라인들에 대응하는 하나 또는 그 이상의 클락(clock) 라인들, 그리고 전달된 패킷의 형태를 표시하는 하나 또는 그 이상의 제어 라인들을 포함할 수 있다. 상기 연결은 프로세싱 노드들 사이에서 통신을 위하여 캐쉬 코히어런트(coherent) 방식 또는 프로세싱 노드와 I/O장치(또는 PCI 버스 또는 ISA 버스와 같이 통상적인 구조의 I/O 버스에 버스 브리지) 사이에서 통신을 위해서 캐쉬 넌코히어런트(non-coherent) 방식으로 동작될 수 있다. 더욱이, 상기 연결은 도시된 것과 같이 I/O 장치들 사이에서 데이지 체인을 사용하는 캐쉬 넌코히어런트 방식으로 동작될 수 있다. 하나의 프로세싱 노드로부터 다른 노드로 전송된 패킷은 하나 또는 그 이상의 중간 노드를 통과할 수 있음에 유의하여야 한다. 예를 들어, 프로세싱 노드(612A)에 의해서 프로세상 노드(612D)로 전송된 패킷은 도15에서 도시된 것과 같이 프로세싱 노드(612B) 또는 프로세싱 노드(612C)를 통과할 수 있다. 임의의 적합한 루팅(routing) 알고리즘이 사용될 수 있다. 컴퓨터 시스템(400)의 다른 실시예에서는 도15에서 보는 실시예들보다도 더 많거나 적은 프로세싱 노드들을 포함할 수 있다.
일반적으로, 상기 패킷들은 노드들 사이에서 라인들(624) 상에 하나 또는 그 이상의 비트 타임으로 전송될 수 있다. 비트 타임은 대응하는 클락 라인들 상에서 클락 신호의 상승 또는 하강 에지(edge)일 수 있다. 상기 패킷은 개시 트랜잭션에 대한 명령 패킷, 캐쉬 코히어런시을 유지하는 탐침(probe) 패킷, 그리고 탐침과 명령에 응답으로부터 반응 패킷을 포함할 수 있다.
프로세싱 노드들(612A-612D)은 메모리 컨트롤러와 인터페이스 논리에 더불어, 하나 또는 그 이상의 프로세서들을 포함할 수 있다. 넓게 말해서, 프로세싱 노드는 적어도 하나의 프로세서를 포함하며, 그리고 요구된 메모리와 통신하기 위한 메모리 컨트롤러 및 다른 논리를 선택적으로 포함할 수 있다. 더욱 특정하게는, 각 프로세싱 노드(612A-612D)는 프로세서(100)의 하나 또는 그 이상의 복사본을 포함할 수 있다. 외부 인터페이스 유닛(18)은 상기 메모리 컨트롤러(616) 뿐만아니라, 상기 노드에 인터페이스 논리(618)을 포함할 수 있다.
메모리들(614A-614D)는 임의의 적당한 메모리 장치를 포함할 수 있다. 예를 들면, 메모리(614A-614D)는 하나 또는 그 이상의 RAMBUS DRAMs(RDRAMs), 동기식 DRAMs, 정적 RAM 등을 포함할 수 있다. 컴퓨터 시스템(400)의 주소 공간은 메모리들(614A-614D) 사이에서 나누어진다. 각 프로세싱 노드(612A-612D)는 어느 메모리(614A-614D)와 그리고 특정 주소에 대한 메모리 요구를 라우트(rout)하는 어느 프로세싱 노드(612A-612D)에 어느 주소들이 맵되는지를 결정하기 위해서 사용되는 메모리 맵을 포함할 수 있다. 일 실시예에서는, 컴퓨터 시스템(400)내의 주소에 대한 코히어런시 지점은 주소에 대응하는 바이트들을 저장하는 메모리에 커플된 메모 리 컨트롤러(616A-616D)에 있다. 즉, 상기 메모리 컨트롤러(616A-616D)는 대응하는 메모리(614A-614D)에 각 메모리 접근이 캐쉬 코히어런트 방식으로 일어나는지를 보증하는데 책임이 있다. 메모리 컨트롤러(616A-616D)는 메모리들(614A-614D)에 인터페이스를 위해서 제어 회로를 포함할 수 있다. 추가적으로, 메모리 컨트롤러들(616A-616D)은 메모리 요구들을 퀴잉(queuing)하기 위해서 요구 큐들(queues)을 포함할 수 있다.
인터페이스 논리(618A-618L)은 연결로부터 패킷들을 수신하기 위해서, 그리고 상기 연결에 전송되는 패킷들을 버퍼링하기 위해서 여러가지 버퍼들로 구성될 수 있다. 컴퓨터 시스템(400)은 패킷들 전송을 위해서 임의의 적합한 흐름 제어 메카니즘을 실행할 수 있다. 예를 들어, 일 실시예에서는, 각 인터페이스 논리(618)는 상기 인터페이스가 연결되는 상기 연결의 다른 단부의 수신기 내에서 각 버퍼 형태의 수의 카운트를 저장한다. 인터페이스 논리는, 만약 수신 인터페이스 논리가 상기 패킷을 저장하기 위한 자유로운 버퍼를 가지지 않는다면, 패킷을 전송하지 않는다. 수신 버퍼가 전방으로 패킷을 라우팅하여 자유롭게 될 때, 수신 버퍼 논리는 버퍼가 자유롭다는 표시를 하기 위해서 송신 인터페이스 논리에 메세지를 전송한다. 그러한 메카니즘은 쿠폰 베이스(coupon-based) 시스템으로 언급될 수 있다.
I/O 장치들(620A-620B) 임의의 적합한 I/O 장치들일 수 있다. 예를 들어, I/O 장치들(620A-620B)은 상기 장치들이 커플될 수 있는 다른 컴퓨터 시스템과 통신하기 위해서 장치들을 포함할 수 있다(예를 들며, 네트워크 인터페이스 카드 또는 모뎀들). 더욱이, I/O 장치들(620A-620B)은 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 컨트롤러들, SCSI(작은 컴퓨터 시스템 인터페이스) 아답터들, 그리고 텔레포니 카드들, 사운드 카드들, 그리고 GPIB 또는 필드 버스 인터페이스 카드와 같은 여러 데이터 수집 카드들을 포함할 수 있다. 'I/O 장치'라는 용어와 '주변 장치'라는 용어는 여기서 동의어로 사용되었음에 유의하여야 한다.
여기서 사용되는 것과 같이, '클락 주기' 또는 '주기'라는 용어는 명령 프로세싱 배관의 여러 단계들이 그들의 임무를 완결하는 간격 시간을 언급한다. 명령들 또는 계산된 값들은 상기 클락 주기를 정의하는 클락 신호에 따라서 메모리 요소들(레지스터들 또는 어래이들과 같은)에 의해서 포착된다. 예를 들어, 상기 메모리 요소는 클락 신호의 상승 또는 하강 에지에 따라서 값을 포착할 수 있다.
상기 개시된 것을 완전히 이해한다면, 당해 기술이 속하는 기술분야에서 숙련된 자는 여러가지 변경들과 수정들을 가할 수 있을 것이다. 아래 청구항들은 이러한 모든 변경들과 수정들을 포함하여 이해될 것을 의도한다.
본 발명은 일반적으로 프로세서들의 영역에서 이용될 수 있다.

Claims (10)

  1. 메모리 파일(132)은 제1 주소 패턴(206)과 제1 태그(208)을 저장하도록 구성된 엔트리(220)를 포함하며, 여기서 상기 메모리 파일(132)는 상기 엔트리(220) 내에 포함된 상기 제1주소 패턴(206)과 로드 동작의 제2 주소 패턴(206)을 비교하도록 구성되며, 여기서 만약 상기 제2 주소 패턴(206)이 상기 엔트리(220) 내에 저장된 제1 주소 패턴과 매치된다면, 상기 메모리 파일(132)는 상기 제1 태그에 의해 식별되는 데이터 값을 상기 로드 동작의 투기적인 결과와 연결되도록 구성되며;
    실행 코어(124)는 상기 메모리 파일(132)에 커플되고, 여기서 상기 실행 코어(124)는 상기 로드 동작에 종속하는 제2 동작이 실행될 때 상기 투기적인 결과에 접근하도록 구성되며; 그리고
    기능성 유닛(126)은 상기 메모리 파일(132)에 커플되고, 그리고 상기 제1 태그(208)에 의해 식별된 데이터 값과 하나 또는 그 이상의 주소들의 비교를 수행함으로써 상기 로드 동작의 상기 투기적이 결과 사이에서의 연결을 검증하기 위해서 구성된 것을 특징으로 하는 시스템(100).
  2. 제1항에 있어서, 여기서 상기 기능성 유닛(126)은 상기 비교를 수행하고 비투기적 저장-투-로드(store-to-load) 전송(forwarding)을 수행하기 위해서 구성된 저장-투-로드 전송 비교기들(280)을 포함하는 것을 특징으로 하는 시스템(100).
  3. 제1항에 있어서, 여기서 상기 엔트리(220)은 상기 엔트리가 할당되는 것에 응답하여 로드 또는 저장 동작을 식별하는 전송 태그(256)을 저장하도록 더 구성되며, 만약 상기 제2 주소 패턴(206)이 상기 엔트리(220) 내에 저장된 상기 제1 주소 패턴과 매치한다면 상기 전송 태그(256)을 출력하도록 더 구성된 것을 특징으로하는 시스템(100).
  4. 제3항에 있어서, 여기서 상기 기능성 유닛(126)이 상기 전송 태그(256)을 수신하기 위해서 커플되며, 그리고
    상기 로드 동작보다 이전의 동작이며 상기 로드 동작의 주소와 매칭하는 주소를 가지는 가장 최근의 동작을 선택함과 아울러, 그리고 상기 전송 태그(256)와 상기 선택된 가장 최근 동작의 식별 태그를 비교함으로써 상기 비교를 수행하도록 더 구성되며, 여기서 상기 선택된 가장 최근의 동작은 로드 또는 저장 동작인 것을 특징으로 하는 시스템(100).
  5. 제3항에 있어서, 여기서 상기 기능성 유닛(126)이 상기 전송 태그(256)을 수신하기 위해서 커플되며, 그리고
    상기 로드 동작 보다 이른 동작이며, 상기 로드 동작의 주소와 매칭되는 주소를 가지는 가장 최근의 로드 동작을 선택함과 아울러,
    상기 선택된 가장 최근의 로드 동작이 상기 선택된 가장 최근의 저장 동작보다 프로그래 순서상 더 이른지를 결정하도록 함과 아룰러,
    상기 전송 태그(256)와 상기 선택된 가장 최근의 로드 동작의 식별 태그를 비교함으로써 상기 비교를 수행하도록 더 구성된 것을 특징으로 하는 시스템(100).
  6. 제1 주소 패턴(206)과 제1 태그(208)을 포함하는 엔트리(220)을 저장하는 단계와;
    상기 엔트리(220)에 포함된 상기 제1 주소 패턴(206)과 상기 엔트리(220)를 저장하는 것에 후속하여 로드 동작의 제2 주소 패턴(206)을 비교하는 단계와;
    만약 상기 제2 주소 패턴(206)이 상기 엔트리(220)에 저장된 상기 제1 주소 패턴(206)과 매치한다면, 상기 비교에 응답하여 상기 제1 태그(208)에 의해 식별된 데이터 값을 상기 로드 동작의 투기적 결과와 연결하는 단계와;
    상기 연결에 후속하여 상기 로드 동작에 종속하는 제2 동작이 실행될 때 상기 투기적 결과에 접근하는 단계와; 그리고
    상기 제1 태그(208)에 의해 식별된 데이터 값과 상기 연결에 후속하여 하나 또는 그 이상의 주소들 사이에서 비교를 수행함으로써 상기 로드 동작의 상기 투기적 결과 사이의 연결을 검증하는 단계로 구성된 것을 특징으로 하는 방법.
  7. 제6항에 있어서, 여기서 상기 엔트리(220)은 상기 로드 동작보다 프로그램 순서상 더 일찍 발생되는 저장 동작에 응답하여 할당되며, 그리고 상기 태그에 의해 식별된 상기 데이터 값과 상기 로드 동작의 상기 투기적 결과를 연결하는 것에 응답하여 상기 저장 동작과 관련된 플래그(269)를 셋팅하도록 더 구성된 것을 특징 으로 하는 방법.
  8. 제7항에 있어서, 상기 연결이 상기 비교를 수행함으로써 검증될 때까지 상기 저장 동작과 관련된 정보를 유지하는 것을 더 포함하며, 여기서 상기 유지는 상기 플래그(269)를 셋팅하는 것에 응답하여 발생하는 것을 특징으로 하는 방법.
  9. 제8항에 있어서, 상기 플래그(269) 셋팅에 응답하여 상기 연결이 검증될 때까지 상기 저장 동작을 퇴거시키지 않도록 더 구성된 것을 특징으로 하는 방법.
  10. 제1주소 패턴(206)과 제1 태그(208)을 포함하는 엔트리(220)을 저장하는 단계와;
    상기 엔트리(220)에 포함된 상기 제1 주소 패턴과 상기 엔트리(220)를 저장하는 것에 후속하여 로드 동작의 제2 주소 패턴(206)을 비교하는 단계와;
    만약 상기 제2 주소 패턴(206)이 상기 엔트리(220) 내에 저장된 상기 제1 주소 패턴(206)과 매치한다면, 상기 제1 태그(208)에 의해 식별된 데이터 값과 상기 비교에 응답하여 상기 로드 동작의 투기적 결과를 연결하는 단계와;
    상기 연결에 후속하여 상기 로드 동작에 종속하는 제2 동작이 실행될 때 상기 투기적 결과에 접근하는 단계와; 그리고
    상기 제1 태그(208)에 의해 식별된 데이터 값과 상기 연결에 후속하여 상기 투기적인 결과와 상기 로드 동작의 실제 결과 사이의 비교를 수행함으로써 상기 로 드 동작의 상기 투기적 결과 사이의 연결을 검증하는 단계로 구성된 것을 특징으로하는 방법.
KR1020067025174A 2004-05-05 2004-12-17 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법 KR20070019750A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020067025174A KR20070019750A (ko) 2004-05-05 2004-12-17 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/839,474 2004-05-05
KR1020067025174A KR20070019750A (ko) 2004-05-05 2004-12-17 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Publications (1)

Publication Number Publication Date
KR20070019750A true KR20070019750A (ko) 2007-02-15

Family

ID=43652673

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067025174A KR20070019750A (ko) 2004-05-05 2004-12-17 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Country Status (1)

Country Link
KR (1) KR20070019750A (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101497807B1 (ko) * 2012-06-14 2015-03-02 애플 인크. 제로 사이클 로드
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101497807B1 (ko) * 2012-06-14 2015-03-02 애플 인크. 제로 사이클 로드
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group

Similar Documents

Publication Publication Date Title
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
KR100958705B1 (ko) 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
US7024537B2 (en) Data speculation based on addressing patterns identifying dual-purpose register
KR100993018B1 (ko) 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
US7089400B1 (en) Data speculation based on stack-relative addressing patterns
KR101093784B1 (ko) 리플레이 메커니즘을 구비한 로드 저장 유닛
US7363470B2 (en) System and method to prevent in-flight instances of operations from disrupting operation replay within a data-speculative microprocessor
US7222226B1 (en) System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
US7937569B1 (en) System and method for scheduling operations using speculative data operands
US7266673B2 (en) Speculation pointers to identify data-speculative operations in microprocessor
KR20070019750A (ko) 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E601 Decision to refuse application