KR20070068351A - 로드가 더 오래된 스토어에 의존적인지를 예측하는 의존성매커니즘을 구비한 프로세서 - Google Patents
로드가 더 오래된 스토어에 의존적인지를 예측하는 의존성매커니즘을 구비한 프로세서 Download PDFInfo
- Publication number
- KR20070068351A KR20070068351A KR1020077007256A KR20077007256A KR20070068351A KR 20070068351 A KR20070068351 A KR 20070068351A KR 1020077007256 A KR1020077007256 A KR 1020077007256A KR 20077007256 A KR20077007256 A KR 20077007256A KR 20070068351 A KR20070068351 A KR 20070068351A
- Authority
- KR
- South Korea
- Prior art keywords
- load operation
- load
- store
- predetermined
- global
- Prior art date
Links
- 230000001419 dependent effect Effects 0.000 title claims description 59
- 230000007246 mechanism Effects 0.000 title description 6
- 230000015654 memory Effects 0.000 claims abstract description 118
- 230000004044 response Effects 0.000 claims abstract description 29
- 238000000034 method Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 abstract 1
- 238000012545 processing Methods 0.000 description 37
- 238000012795 verification Methods 0.000 description 24
- 230000006399 behavior Effects 0.000 description 19
- 239000000872 buffer Substances 0.000 description 16
- 238000006073 displacement reaction Methods 0.000 description 6
- 238000010200 validation analysis Methods 0.000 description 6
- 230000001427 coherent effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 239000000523 sample Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000009125 cardiac resynchronization therapy Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000019771 cognition Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
- Investigating Or Analysing Biological Materials (AREA)
Abstract
프로세서(100)는 연산들을 발행하도록 구성된 스케줄러(118)와 상기 스케줄러에 의해 발행된 연산들을 실행하도록 구성된 로드 스토어 유닛(126C)을 포함할 수도 있다. 로드 스토어 유닛(126C)은 상기 로드 스토어 유닛(126C)으로 발행된 메모리 연산들을 식별하는 정보를 저장하도록 구성될 수도 있다. 발행된 메모리 연산들 중 하나에 대한 부정확한 데이터 추론을 검출함에 응답하여, 상기 로드 스토어 유닛(126C)은, 스케줄러(118)에게 표시를 제공함으로써 발행된 메모리 연산들 중 적어도 하나를 재연(replay)하도록 구성된다. 스케줄러(118)는 상기 로드 스토어 유닛(126C)에 의해 식별된 메모리 연산들을 응답적으로 재발행하도록 구성된다.
마이크로프로세서, 추론, 로드, 스토어, 연산, 예측기
Description
본 발명은 프로세서 분야에 관련된 것으로, 보다 상세하게는 프로세서에서 데이터 추론을 수행하는 것에 관한 것이다.
수퍼 스칼라(superscalar) 마이크로프로세서는 동시에 다중 명령들(instructions)을 실행하고, 그 구조와 일관되는 최단의 가능한 클록 싸이클을 사용함으로서, 고성능을 달성한다. 하지만, 명령들 사이의 데이터 및 제어 흐름 의존성은 소정 시간에 발행(issue)될 수도 있는 명령들의 수를 제한할 수도 있다. 결과적으로, 일부 마이크로프로세서는 부가적인 성능 이득을 달성하기 위하여 추론적인(speculative) 실행을 지원한다.
추론의 한가지 타입은 제어 흐름 추론이다. 제어 흐름 추론은 프로그램 제어가 진행될 방향을 예측한다. 예컨대, 브랜치(branch) 예측은 하나의 브랜치가 채택될지를 예측하는데 이용될 수 있다. 많은 종류의 브랜치 예측이 이용가능한데, 그 범위로는 매번 단순히 동일한 예측을 하는 방법부터 히스토리-기반의 예측을 하기 위하여 프로그램의 과거의 브랜치들의 정교한 히스토리들을 유지하는 방법에 이르 는 범위가 있다. 브랜치 예측은 하드웨어 최적화(hardware optimization), 컴파일러 최적화(compiler optimization) 또는 그 둘 모두를 통해, 용이하게 될 수도 있다. 브랜치 예측 매커니즘에 의해 제공된 예측에 기초하여, 명령들은 추론적으로 페치(fetch)되고 실행된다. 브랜치 명령이 마지막으로 평가될 때, 브랜치 예측이 검증될 수 있다. 만일, 예측이 부정확하다면, 부정확한 예측에 기초하여 추론적으로 실행된 모든 명령들은 파기(quash)될 수 있다.
또 다른 타입의 추론은 데이터 값을 예측하는 데이터 추론이다. 데이터 추론의 제안된 타입들은, 메모리 연산을 위해 주소들을 추론적으로 생성하는 것 및 계산 연산에서 사용되는 데이터 값들을 추론적으로 생성하는 것을 포함한다. 제어 추론에 대해, 값을 추론적으로 생성하기 위해 사용되는 기본적인(underlying) 조건들은, 추론이 검증되게 하거나 또는 추론을 무효화(undo)시킴으로써 결국에는 평가된다.
추론에 의하면, 추론적인 조건이 알려지기를 기다리지 않고서도 실행(execution)이 진행되기 때문에, 만일 정확한 추론으로부터 획득한 성능이 부정확한 추론으로부터 손실된 성능을 초과한다면, 상당한 성능 이득을 얻을 수도 있다. 따라서, 잘못된 추론으로 인한 성능 페널티들을 감소시키는 것이 바람직하다.
데이터 추론 프로세서에서 더 오래된(older)(프로그램 순서상에서 : in program order) 스토어(store) 연산들에 대한 로드 연산들의 의존성을 예측하는 시스템들 및 방법들에 대한 다양한 실시예들이 설명된다. 일 실시예에서, 프로세서는, 연산들을 발행하도록 구성된 스케줄러와, 상기 스케줄러에 의해 발행된 메모리 연산들을 수신하도록 접속되며 상기 메모리 연산들을 수행하도록 구성된 로드 스토어 유닛을 포함할 수도 있다. 로드 스토어 유닛은 또한, 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하고, 소정의 로드 연산이 더 오래된 스토어 연산에 대해 독립적이라는 예측에 응답하여 더 오래된 스토어 연산의 주소가 계산되기 전에 소정의 로드 연산을 수행하고, 소정의 로드 연산이 더 오래된 스토어 연산에 대해 독립적이라는 예측 이후에 소정의 로드 연산이 잘못 예측되었는지를 검출하고, 및 소정의 로드 연산이 잘못 예측되었다는 검출에 응답하여 로드 연산이 재 발행되어야만 한다는 재연(replay) 표시를 스케줄러에게 제공하도록 구성될 수도 있다.
특정한 일실시예에서, 로드 스토어 유닛은 복수개의 국부 예측기 엔트리들(local predictor entries)을 포함하여 이루어진 국부 예측기(local predictor)를 포함할 수도 있다. 복수개의 국부 예측기 엔트리들 각각은 의존 예측값을 포함할 수도 있으며, 상기 로드 스토어 유닛은 또한, 소정의 로드 연산에 대응하는 소정의 국부 예측기 엔트리에 액세스하고, 상기 소정의 국부 예측기 엔트리에 포함된 소정의 의존 예측값을 평가함으로서, 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하도록 구성될 수도 있다.
다른 특정한 실시예에서, 로드 스토어 유닛은 전역 히스토리 레지스터(global history register)와 복수개의 전역 예측기 엔트리들(global predictor entries)을 포함하여 이루어진 전역 예측기를 포함할 수도 있다. 상기 전역 히스토리 레지스터는, 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성될 수도 있다. 복수개의 전역 예측기 엔트리들 각각은 의존 예측값을 포함할 수도 있다. 상기 로드 스토어 유닛은 또한, 상기 전역 히스토리 레지스터에 대응하는 소정의 전역 예측기 엔트리에 액세스하고, 상기 소정의 전역 예측기 엔트리에 포함된 소정의 의존 예측값을 평가함으로서, 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하도록 구성될 수도 있다.
또 다른 특정한 실시예에서는, 로드 스토어 유닛은, 복수개의 국부 예측기 엔트리들을 포함하여 이루어진 국부 예측기를 포함할 수도 있으며(여기서, 상기 복수개의 국부 예측 엔트리들 각각은 의존 예측값을 포함할 수도 있다), 전역 히스토리 레지스터 및 복수개의 전역 예측기 엔트리들을 포함하여 이루어진 전역 예측기를 포함할 수도 있다.(여기서, 상기 전역 히스토리 레지스터는 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성될 수도 있으며, 복수개의 전역 예측 엔트리들 각각은 의존 예측값을 포함할 수도 있다) 로드 스토어 유닛은, 소정의 로드 연산이 동적인(dynamic) 로드 연산인지를 판별함으로써 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하도록 구성될 수도 있다. 소정의 로드 연산이 동적인 로드 연산이 아니라는 판별에 대응하여, 상기 로드 스토어 유닛은, 소정의 로드 연산에 대응하는 소정의 국부 예측기 엔트리에 액세스 하고 소정의 국부 예측기 엔트리에 포함된 국부 의존 예측값을 평가할 수도 있다. 소정의 로드 연산이 동적인 로드 연산이라는 판별에 대응하여, 상기 로드 스토어 유닛은, 소정의 전역 히스토리 레지스터에 대응하는 소정의 전역 예측기 엔트리에 액세스 하고 소정의 전역 예측기 엔트리에 포함된 전역 의존 예측값을 평가할 수도 있다.
후술될 발명의 상세한 설명이 다음의 도면들과 관련되어 고려될 때, 본 발명은 더욱 잘 이해될 수 있을 것이다.
도1은 본 발명의 일 실시예에 따른 프로세서를 도시한 도면이다.
도2는 본 발명의 일 실시예에 따른 로드 스토어 유닛을 도시한 도면이다.
도3A는 국부 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일실시예를 도시한 도면이다.
도3B는 전역 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일실시예를 도시한 도면이다.
도3C는 하이브리드 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일실시예를 도시한 도면이다.
도4A는 디스패치 유닛의 일실시예를 도시한 도면이다.
도4B는 본 발명의 일 실시예에 따라, 예시적인 어드레싱 패턴을 도시한 도면이다.
도5는 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하는 방법에 대한 일례를 도시한 신호 흐름도이다.
도6은 본 발명의 일실시예에 따른 예시적인 컴퓨터 시스템을 도시한 도면이다.
도7은 본 발명의 다른 실시예에 따른 예시적인 컴퓨터 시스템을 도시한 도면이다.
본 발명의 다양한 변형 및 대안 형태가 있지만, 특정 실시예는 도면의 예에 의하여 도시되었으며, 이는 본 명세서에서 상세히 설명될 것이다. 하지만, 상세한 설명 및 도면은 본 발명을 개시된 특정형태에 제한되지 않도록 의도되며, 이와 반대로, 본 발명은 첨부된 청구항에 의해 정의된 본 발명의 사상 및 범주내의 모든 변형물, 등가물, 및 대안을 커버하도록 이해되어야 한다. 상기 사항들은 단지 유기적 구조의 목적을 위한 것이며, 상세한 설명 및 청구범위를 제한하거나 설명하는 것으로 사용되도록 의도되지 않음을 주목해야 한다. 더욱이, 단어 "일 수도 있는(may)"는 본 명세서 전체에서 허용적인 의미(즉, "가능성이 있는", "할 수 있는")로 사용되며, 의무적인 의미(즉, "해야한다")가 아니다. 또한, 단어 "포함한다" 및 이의 파생어는 "포함하지만 이에 국한되지는 않음" 을 의미한다. 단어 "연결된"은 "직접적으로 또는 간접적으로 연결된" 을 의미하며, 단어 "결합된"는 "직접적으로 또는 간접적으로 결합된" 을 의미한다.
도1은 프로세서(100)에 대한 일례를 도시한 도면이다. 프로세서(100)는 시스템 메모리(200)에 저장된 명령들을 실행하도록 구성된다. 이러한 많은 명령들은 시스템 메모리(200)에 저장된 데이터에 작용한다. 시스템 메모리(200)는 컴퓨터 시스템의 도처에 물리적으로 분산되어 있을 수도 있으며, 하나 이상의 프로세서(100)에 의해 액세스될 수도 있음을 유의해야 한다.
프로세서(100)는 명령 캐시(instruction cache)(106) 및 데이터 캐시(128)를 포함할 수도 있다. 프로세서(100)는 명령 캐시(106)에 접속된 프리패치(prefetch) 유닛(108)을 포함할 수도 있다. 디스패치(dispatch) 유닛(104)은 명령 캐시(106)로부터의 명령들을 수신하도록 구성될 수도 있으며 스케줄러들(118)로 연산들을 디스패치하도록 구성될 수도 있다. 하나 이상의 스케줄러(118)가 디스패치 유닛(104)으로부터 디스패치된 연산들을 수신하도록 접속될 수도 있으며, 하나 이상의 실행 코어들(124)로 연산들을 발행하도록 접속될 수도 있다. 실행 코어(124)(들)은 각각 데이터 캐시(128)로의 액세스를 수행하도록 구성된 로드/스토어 유닛을 포함할 수도 있다. 실행 코어(124)에 의해 생성된 결과들은 결과 버스(130)로 출력될 수도 있다. 이러한 결과들은 후속으로 발행되는 명령들을 위한 오퍼랜드 값(operand value)으로 사용될 수도 있으며 및/또는 레지스터 파일(116)에 저장될 수도 있다. 리타이어 큐(retire que)(102)는 스케줄러(118) 및 디스패치 유닛(104)에 접속될 수도 있다. 리타이어 큐(102)는, 발행된 각각의 오퍼랜드가 리타이어될 수도 있는 때를 결정하도록 구성될 수도 있다. 일 실시예에서 프로세서(100)는 x86 아키텍쳐와 호환가능하도록 디자인 될 수도 있다. 상기 프로세서(100)는 다른 많은 구성요소들을 또한 포함할 수도 있다는 점을 유의해야 한다. 예를 들어, 프로세서(100)는 브랜치 예측 유닛(미도시)을 포함할 수도 있다.
명령 캐시(106)는 디스패치 유닛(104)에 의해 수신되기 이전에 명령들을 임시로 저장할 수도 있다. 프리패치 유닛(108)를 통해 시스템 메모리(200)로부터의 코드를 프리패치함으로써, 명령 코드가 명령 캐시(106)로 제공될 수도 있다. 명령 캐시(106)는 다양한 구성(예를 들어, 세트-조합된, 완전-조합된, 직접 매핑된)으로 구현될 수도 있다. 몇몇 실시예에서, 명령 및/또는 데이터 캐시(106, 128)의 다중 레벨들이 있을 수도 있다. 일부 레벨들은 도시된 바와같이 프로세서(100)에 통합될 수도 있으며, 반면에 캐시의 다른 레벨들은 프로세서에 대해 외부적(external)일 수도 있다.
프리패치 유닛(108)은 명령 캐쉬(106)에 저장하기 위해 시스템 메모리(200)로부터 명령 코드를 프리페치할 수도 있다. 일 실시예에서, 프리페치 유닛(108)은 시스템 메모리(200)로부터 명령 캐쉬(106)로 코드를 버스트하도록 구성될 수도 있다. 프리페치 유닛(108)은 다양한 특정 코드 프리페칭 기술 및 알고리즘을 이용할 수도 있다.
디스패치 유닛(104)은 오퍼랜드 주소 정보, 즉시(immidiate) 데이터 및/또는 변위(displacement) 데이터 뿐만 아니라 실행 코어(124)에 의해 실행가능한 비트-코딩된 연산들을 포함하는 신호를 출력할 수도 있다. 일부 실시예에서, 디스패치 유닛(104)은 특정 명령을 실행 코어 내에서 실행가능한 연산으로 디코딩하기 위한 디코딩 회로(미도시)를 포함할 수도 있다. 단순 명령들은 단일 연산에 대응할 수도 있다. 일부 실시예에서, 더욱 복잡한 명령들이 다중 연산들에 대응할 수도 있다. 만일, 연산이 레지스터의 갱신에 관계된 것이라면, 레지스터 파일(116)내의 레지스터 위치는 추론적인 레지스터 상태들을 저장하기 위해 유보될 수도 있다(예를 들면, 상기 연산을 디코딩하고 곧). 대안적인 실시예에서는, 재정렬 버퍼(reorder buffer)가, 각각의 레지스터에 대한 하나 이상의 추론적인 레지스터 상태들을 저장 하는데 사용될 수 있다. 몇몇 실시예에서, 디스패치 유닛(104)은 레지스터 맵(134)을 구현할 수도 있는바, 상기 레지스터 맵(134)은 레지스터 개명(renaming)을 용이하게 하기 위해, 소스의 논리 레지스터 명칭 및 목적 오퍼랜드를 물리적 레지스터 명칭으로 변환할 수 있다. 레지스터 맵(134)은 레지스터 파일(116) 내의 어느 레지스터가 현재 할당되었는지를 추적할 수 있다.
도 1의 마이크로프로세서(100)는 비순차적(out of order) 실행을 지원한다. 리타이어 큐(102)는 레지스터 판독 연산 및 기록 연산을 위해 본래의(original) 프로그램 시퀀스를 추적할 수도 있으며, 추론적인 명령 실행 및 브랜치 예측오류(misprediction) 회복을 허용할 수도 있으며, 그리고 정밀한 예외들을 용이하게 할 수도 있다. 리타이어 큐(102)는 선입선출(first-in-first-out) 구조로 구현될 수도 있는바, 이는 연산들이 확인(validate)됨에 따라 연산들이 버퍼의 "하부"로 이동하게 되고, 이에 따라 큐의 "상부"에 새로운 엔트리들을 위한 공간이 만들어 지는 구성이다. 리타이어 큐(102)는, 상기 연산을 완료하는 실행 및 임의의 연산들에 수행된 임의의 데이터 추론 또는 제어 추론에 응답하여, 프로그램 순서상의 그 연산이 검증될 때 까지 연산을 퇴거시킬 수도 있다. 리타이어 큐(102)는, 물리적인 레지스터에서 값을 생성한 그 연산이 리타이어될 때, 그 물리적 레지스터의 추론적인 상태를 프로세서의 구성적인(architectural) 상태에 맡길(commit)수도 있다. 일부 실시예에서 리타이어 큐(102)는 재정렬 버퍼(reorder buffer)의 일부로서 구현될 수도 있다. 이러한 재정렬 버퍼는 또한 레지스터 개명을 지원하기 위해서 추론적인 레지스터 상태들에 대한 데이터 값 저장소를 제공할 수도 있다. 다른 실시예 들에서는, 리타이어 큐(102)가 임의의 데이터 값 저장소를 제공하지 않을 수도 있음을 유의해야 한다. 대신에, 연산들이 리타이어 되기 때문에, 레지스터 큐(102)는 레지스터 파일(116) 내에서 레지스터들을 할당-해제(deallocate)할 수도 있는바, 이들 레지스터들은 추론적인 레지스터 상태들을 더 이상 저장할 필요가 없는 레지스터들이며, 어떤 레지스터들이 현재 프리(free)인지를 나타내는 신호들을 레지스터 맵(134)에 제공할 수도 있다. 이러한 상태들을 발생시킨 연산들이 확인(validate)될 때까지, 레지스터 파일(116) 내에(또는, 대안적인 실시예에서는 재정렬 버퍼 내에) 추론적인 레지스터 상태들을 유지하고 있기 때문에, 만일 브랜치 예측이 부정확하다면, 잘못 예측된 경로를 따라 추론적으로-실행된 연산들의 결과는 레지스터 파일(116)에서 무효될 수도 있다.
만일, 특정한 연산의 요구되는 오퍼랜드가 레지스터 위치(location)라면, 레지스터 주소 정보는 레지스터 맵(134)(또는 재정렬 버퍼)에 라우팅될 수도 있다. 예를 들어 x86 아키텍처에는, 8개의 32 비트 논리적 레지스터(예를 들어, EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP)가 있다. 물리적 레지스터 파일(116)(또는, 재정렬 버퍼)은 이들 논리적 레지스터들의 내용을 변경하는 결과들을 위한 저장소를 포함하며, 비순차적 실행을 허용한다. 레지스터 파일(116)내의 물리적 레지스터는, 논리적 레지스터들 중 하나의 내용을 수정하도록 결정된 각각의 연산 결과를 저장하기 위해 할당될 수도 있다. 따라서, 특정 프로그램을 실행하는 동안의 다양한 지점에서, 레지스터 파일(116)(또는, 대안적인 실시예에서는 재정렬 버퍼)은, 소정 논리적 레지스터의 추론적으로 실행된 내용들을 포함하는 하나 이상의 레지스 터들을 가질 수도 있다.
레지스터 맵(134)은 물리적 레지스터를, 연산을 위한 목적 오퍼랜드로서 특정된 소정의 논리적 레지스터로 지정할 수도 있다. 디스패치 유닛(104)은, 레지스터 파일(116)이, 하나 이상인 과거에 할당된 물리적 레지스터들을 논리적 레지스터로 지정했는지를 결정할 수도 있는바, 상기 논리적 레지스터는 소정의 연산에서 소스 오퍼랜드로서 특정된 것이다. 레지스터 맵(134)은, 상기 논리적 레지스터에 가장 최근에 할당된 물리적 레지스터를 위해서, 태그를 제공할 수도 있다. 이러한 태그는 레지스터 파일(116)에서 오퍼랜드의 데이터 값을 액세스하기 위해 사용될 수도 있으며 결과 버스(130)상의 결과 포워딩을 통해 데이터 값을 수신하는데 사용될 수도 있다. 만일, 오퍼랜드가 메모리 위치에 대응한다면, 오퍼랜드 값은 로드/스토어 유닛(126C)을 통하여 (레지스터 파일(118)에 결과 포워딩 및/또는 저장을 위한) 결과 버스 상에 제공될 수도 있다. 오퍼랜드 데이터 값들은, 상기 연산이 스케쥴러(118)들 중 하나에 의해 발행될 때에, 실행 코어(124)에 제공될 수도 있다. 대안적인 실시예들에서는, 연산이 디스패치된 때에(연산이 발행된 때에 대응하는 실행 코어(124)에 제공되는 대신에), 오퍼랜드 값들이 대응하는 스케쥴러(118)에 제공될 수도 있음을 유의해야 한다.
디스패치 유닛(104)의 출력에 제공된 비트-코딩된 동작 및 즉시 데이터는 하나 이상의 스케쥴러(118)에 라우팅될 수도 있다. 본 발명에서 사용된 바와같이, 스케쥴러는 언제 연산이 실행준비되는지를 검출하고, 하나 이상의 기능(functional) 유닛들에 준비 연산을 발행하는 디바이스이다. 예를 들어, 예약 스테이션은 스케쥴 러이다. 스케줄러 또는 스케줄러들의 그룹의 연산들은, 명령 또는 연산 윈도우 또는 스케줄링 윈도우 내의 연산들이라고도 언급될 수도 있다. 각각의 스케쥴러(118)는, 실행 코어(124)에 발행을 기다리는 몇개의 계류중인 연산들을 위한 연산 정보(예를 들어, 오퍼랜드 값, 오퍼랜드 태그, 및/또는 즉시 데이터 뿐만 아니라 비트 코딩된 실행 비트)를 유지할 수도 있다. 일부 실시예에서, 각각의 스케쥴러(118)는 오퍼랜드 값 저장소를 제공하지 않을 수도 있다. 대신에, 각각의 스케쥴러는 발행된 연산들 및 레지스터 파일(116)내에서 이용가능한 결과를 모니터할 수도 있는바, 이는 오퍼랜드 값들이 기능적인 유닛들(126)에 의해 언제 판독가능해지는지를 결정하기 위해서 이다(레지스터 파일(116) 또는 결과 버스(130)로부터). 일부 실시예에서, 각각의 스케쥴러(118)는 전용적인 기능 유닛(126)에 관련될 수 있다. 다른 실시예에서, 단일 스케쥴러(118)는, 하나 이상의 기능 유닛들(126)에 연산들을 발행할 수도 있다.
스케쥴러(118)는, 실행 코어(124)에 의해 실행되는 연산 정보를 임시로 저장하도록 제공될 수도 있다. 상술된 바와같이, 각각의 스케쥴러(118)는 계류중인 연산들을 위한 연산 정보를 저장할 수도 있다. 또한, 각각의 스케쥴러는 이미 실행되었지만 여전히 재발행될 수도 있는 연산들을 위한 연산 정보를 저장할 수도 있다. 연산들은, 실행을 위해 적시에 이용가능해진 임의의 요구된 오퍼랜드의 값들에 응답하여, 실행을 위한 실행 코어(124)에 발행된다. 따라서, 연산이 실행되는 순서는 본래의 프로그램 명령 시퀀스의 순서와 동일하지 않을 수도 있다. 데이터 추론을 포함하는 연산들은 이들이 비-추론적으로 될 때까지 스케쥴러(118)에 잔존할 수도 있으며, 이에 따라 만일 데이터 추론이 부정확하다면 이들은 재발행될 수도 있다. 도1에 도시된 바와같이, 로드 스토어 유닛(126C)은, 재발행될 하나 이상의 연산들을 식별하는 재연 표시(replay indication)를 스케줄러(118)에게 제공할 수도 있다. 예를 들어 일 실시예에서는, 이러한 재연 표시는, 재연되어야 하는 각 연산의 태그를 포함할 수도 있다. 다른 실시예에서는, 이러한 재연 표시는 스케줄러(118)내의 각각의 로드/스토어 연산에 대응하는 비트를 포함할 수도 있는바, 특정 비트의 단정(assertion)은 재연되어야하는 대응 연산을 식별할 수도 있다. 스케줄러(118)는, 재연 표시에 의해 식별되는 연산들을 응답적으로 재발행할 수도 있다.
일 실시예에서, 각각의 실행 코어(124)는 복수개의 기능 유닛들(126)(예를 들면, 도1에 도시된 126A - 126C 의 기능 유닛들)을 포함할 수도 있다. 소정의 기능적 유닛들(예를 들면, 126A)은, 시프트, 회전, 논리 연산, 및 브랜치 연산들 뿐만 아니라 가산 및 감산의 정수 산술(integer arithmetic) 연산을 수행하도록 구성될 수도 있다. 다른 기능 유닛들(예를 들면, 126B)은 부동 소수점 연산들을 처리하도록 구성될 수도 있다. 하나 이상의 기능적 유닛들은, 기능적 유닛(예를 들면 126C)에 의해 수행될 로드 및 스토어 메모리 연산들에 대한 주소 생성을 수행하도록 구성될 수도 있는바, 상기 기능적 유닛은 데이터 캐시(128) 및/또는 시스템 메모리에 저장된 데이터에 액세스하기 위해 로드 및 저장 명령을 수행한다. 일 실시예에서 이러한 기능적인 유닛(126C)은, 계류(pending)중인 로드들(loads) 및/또는 스토어들의 데이터 및 어드레스 정보를 위한 복수개의 저장 위치들을 갖는 로드 스토어 버퍼를 구비하도록 구성될 수도 있다.
또한, 하나 이상의 기능적인 유닛들(126)은 조건부 브랜치 명령들의 실행에 관한 정보를 브랜치 예측 유닛에 제공할 수도 있는바, 만일 브랜치가 잘못 예측되었다면, 상기 브랜치 예측 유닛은 명령 프로세싱 파이프라인에 진입했던 잘못 예측된 브랜치에 뒤이어서 명령들을 쏟아낼 수도 있으며, 프리패치 유닛(108)을 리다이렉트(redirect)할 수도 있다. 상기 리다이렉트된 프리패치 유닛(108)은 이후에, 명령 캐시(106)또는 시스템 메모리(200)로부터 올바른 명령들의 세트를 패치하기 시작할 수도 있다. 이런 상황에서, 잘못 예측된 브랜치 명령 이후에 발생된 본래의 프로그램 시퀀스내의 명령들의 결과들은 버려질 수도 있으며, 이는 추론적으로 실행되고 레지스터 파일(116)에 임시로 저장되었던 것들을 포함한다.
만일, 레지스터 값이 갱신되는 중이라면, 실행 코어(124)내의 기능 유닛들(126)에 의해 생성된 결과들은, 결과 버스를 통해 레지스터 파일(116)로 출력될 수도 있다. 만일, 메모리 위치의 내용들이 변경되고 있는 중이라면, 실행 코어(124)에서 생성된 상기 결과들은 로드/스토어 유닛(126C)으로 제공될 수도 있다.
데이터 캐쉬(128)는 로드/저장 유닛(126) 및 시스템 메모리(200) 사이에서 전달되는 데이터를 임시적으로 저장하도록 제공된 캐쉬 메모리이다. 전술한 명령 캐쉬(106)와 유사하게, 상기 데이터 캐쉬(128)는 세트-조합된 구성을 포함하는 다양한 특정 메모리 구성으로 구현될 수도 있다. 또한, 일부 실시예에서는, 데이터 캐쉬(128) 및 명령 캐쉬(106)는 단일화된(unified) 캐쉬로 구현될 수도 있다.
몇몇 실시예에서, 프로세서(100)는, 프로세서(100)와 시스템 메모리(200)간의 직접적인 인터페이스를 가능케 해주는 통합된 메모리 제어기(160)를 포함할 수 도 있다. 다른 실시예에서는, 메모리 제어기(160)는 프로세서(100)를 시스템 메모리(200)에 간접적으로 접속하는 버스 브리지에 포함될 수도 있다.
의존성 예측(Dependency Prediction)
본 명세서에 설명된 바와같이, 만일, 데이터 값이 정확하지 않고 결과적으로 재계산(recompute)될 가능성이 존재한다면 데이터 값은 추론적이다. 추론적인 데이터 값은, 정확하다 또는 부정확하다고 확실성을 갖고 식별될 수는 없다. 만일 데이터 값이 소정의 데이터 추론이 수행되었던 연산의 결과라면, 그 데이터 값은 재계산될 수도 있다. 또는 만일, 데이터 값이 또 다른 추론적인 데이터 값에 의존한다면(예를 들면, 만일 상기 데이터 값이 하나 이상의 추론적인 오퍼랜드들을 갖는 연산의 결과로서 생성된 것이라면), 그 데이터 값은 재계산될 수도 있다. 비 추론적인(non-speculative) 값이라는 것은, 그 어떤 데이터 추론에도 의존하지 않는 값이다(하지만, 이러한 값이라도 여전히 제어 추론(control speculation)에 종속될 수도 있다).
프로세서(100)내에서 다양한 매커니즘이 데이터 추론을 수행할 수도 있다. 예를 들어 일실시예에서는, 로드/스토어 유닛(126C)은, 스토어 주소가 계산되기 이전에, 소정의 로드가 더 오래된 스토어 연산에 대해 의존적인지 아닌지를 예측할 수도 있다. 더 오래된 스토어들에 대해 독립적이라고 예측된 로드들은 스토어 연산에 관하여 자유롭게 스케줄될 수도 있으며, 추론적으로 실행하도록 허용될 수도 있다. 이러한 타입의 데이터 추론은 본 명세서에서 의존성 예측이라 언급된다. 또 다 른 예시적인 데이터 추론에서는, 디스패치 유닛(104)이, 하나의 연산의 결과가 또 다른 연산을 위한 추론적인 오퍼랜드로서 사용될 수도 있는지를 검출할 수도 있다. 예를 들어 디스패치 유닛(104)은, 이전의 스토어 연산에 의해 데이터 캐시(128)에 저장된 데이터를, 로드 연산이 액세스 할 것인지를 예측할 수도 있다. 상기 디스패치 유닛(104)은, 스토어 연산의 소스로서 사용된 레지스터내에 저장된 데이터 값을 상기 로드 연산의 추론적인 결과로서 식별할 수도 있다. 이와같은 의존성 예측은, 상기 스토어 연산의 상기 소스를 연산들에 대한 추론적인 오퍼랜드 소스로서 링크하고, 상기 로드 연산의 결과를 오퍼랜드로서 특정함으로써, 디스패치 유닛(104)내에서 확장될 수도 있다.
소정의 추론적인 결과들을 생성하기 위해서, 다양한 서로 다른 타입들의 데이터 추론이 수행될 수도 있다. 예를 들면, 예측된 데이터 값을 이용하여 정수 연산의 추론적인 결과가 생성될 수도 있다. 이러한 추론적인 결과는 이후에 스토어 연산에 의해 저장될 수도 있다. 로드 연산은 의존성 예측을 통해 이러한 스토어 연산에 의존적이라고 예측될 수도 있으며 따라서, 로드 연산의 추론적인 결과는 정수 연산의 추론적인 결과이다.
데이터 추론이 행해졌던 연산들의 결과에 의존하는 연산들은 또한, 추론적인 결과들을 생성할 수도 있다. 예를 들어, 만일 주소 예측이 사용되어 로드 연산의 추론적인 결과가 생성된다면, 상기 로드 연산의 추론적인 결과를 오퍼랜드로서 사용하여 실행되는 임의의 의존적인 연산들은, 추론적인 결과들을 생성할 수도 있는바, 이들 추론적인 결과들은 이번에는 또 다른 의존적인 연산들에 의해 오퍼랜드들 로서 이용될 수도 있다. 따라서, 로드(load) 연산에 있어서의 기초가 되는 추론이 부정확하다고 판단된다면, 상기 의존적인 연산의 결과들 역시 부정확할 수도 있으며 따라서, 올바른 결과를 만들어 내기 위해서는 상기 로드에 의존적인 연산들의 전체 의존성 사슬은 재실행되어야만 할 수도 있다. 다른 한편으로는, 만일 상기 기초가 되는 추론이 정확하다면, 상기 의존적인 연산들의 결과들도 정확할 것이다.(이러한 결과들은 다른 어떤 추론적인 값들에도 근거하지 않는다고 가정하면)
데이터 추론이 행해진 많은 연산들은, 이러한 연산들이 기능 유닛에 의해 수행될 때, 검증될 수도 있다. 예를 들면, 하나의 연산의 결과를 추론적으로 만드는 데이터 예측은, 상기 연산의 실제 결과와 추론적인 결과를 비교해 봄으로써, 그 연산을 수행하는 기능 유닛(126)에 의해 검증될 수도 있다. 만일, 상기 데이터 추론이 부정확하다고 해도, 이러한 연산들은 재 실행되어야할 필요가 없을 수도 있다. 왜나하면, 정확한 결과가 이미 이용가능하기 때문이다. 다른 연산들은 완벽하게 수행되지 않고서도 검증될 수도 있다. 예를 들면, 계산되지 않은 주소를 갖는 로드 연산이 더 이전의 스토어 연산으로부터 자신의 결과를 포워드한다면(의존성 예측 또는 주소 예측 때문에), 상기 로드 연산의 주소가 계산될 때 상기 로드 연산의 추론적인 결과가 검증될 수도 있다. 만일, 데이터 추론이 부정확하다면, 정확한 결과를 생성하기 위해서는, 이러한 연산이 재 실행(re-execute)(적어도 부분적으로는)되어야 할 수도 있다.
데이터 추론이 행해진 연산들 및 이들의 의존적인 연산들은, 재연되어야 할 수도 있기 때문에, 리타이어 큐(102)는 모든 기초되는 데이터 추론이 해결된 연산 들만을 리타이어 하도록 구성될 수도 있다.
의존성 예측하의 로드 스토어 유닛
데이터 추론적인 실행을 지원하는 프로세서에서, 로드 스토어 유닛(126C)은 로드 연산이 더 오래된 스토어 연산에 대해 의존적인지 아닌지를 예측하도록 구성될 수도 있으며, 독립적이라고 예측된 로드 연산들이 스토어 연산들에 비해 자유롭게 스케줄되는 것을 허용할 수도 있는바, 이는 전술한 바와 같다. 또한, 로드 스토어 유닛(126C)은, 부정확한 의존성 예측들을 검출하며 그리고 부정확하게 예측된 연산들이 재연(replay)되어야 함을 스케줄러에게 알려주어 상기 스케줄러가 차후에 이러한 연산들을 로드 스토어 유닛(126C)으로 재발행하도록 하는 검증 매커니즘을 포함할 수도 있다. 로드 연산들 또는 스토어 연산들이 다른 연산들보다 더 오래되었다(older) 또는 더 젊다(younger) 라는 기준들은, 비교되는 연산들의 프로그램 순서에 관련된다는 점을 주목해야 한다. 즉, 프로그램 순서상에서 제 2 연산보다 더 일찍 출현한 제 1 연산은, 제 2 연산보다 더 오래되었다라고 간주될 수 있으며, 그리고 제 2 연산은 제 1 연산보다 더 젊다라고 간주될 수 있다.
도2는 로드 연산에 대해 의존성 예측을 수행하도록 구성된 로드 스토어 유닛(126C)에 대한 일 실시예를 도시한 도면이다. 도시된 실시예에서, 로드 스토어 유닛(126C)은 의존성 예측 로직(303) 및 의존성 검증 로직(305)을 포함하고 있으며, 이들 각각은 연산 저장소(307)에 연결되어 있으며 또한 서로 연결되어 있다.
의존성 예측 로직(303)은 로드 스토어 유닛(126C)으로 발행된 로드 연산에 대한 의존성 예측을 수행하도록 구성될 수도 있다. 도3A 내지 도3C를 참조하여 더욱 상세하게 설명되는 바와 같이, 의존성 예측 로직(303)은, 로드 연산들에 대응하는 의존성 예측 값들을 저장하도록 구성된 국부(local) 및/또는 전역(global) 예측기 데이터 구조(structure)들을 포함할 수도 있다. 의존성 예측 로직(303)은, 연산 저장소(307)에 저장된 소정의 로드 연산에 대응하는 의존성 예측 값에 액세스하도록 구성될 수도 있다. 만일, 대응하는 의존성 예측 값이, 소정의 로드 연산이 더 오래된 스토어 연산들에 대해 독립적이라고 예측되었음을 나타내고 있다면, 로드 스토어 유닛(126C)은, 하나 이상의 더 오래된 스토어 연산들의 주소들이 계산되기 이전에 상기 소정의 로드 연산이 실행되는 것을 허용할 수도 있다.
의존성 검증 로직(305)는 의존성 예측 로직(303)에 의해 수행된 데이터 추론을 검증하도록 구성될 수도 있는바, 이에 대해서는 아래에서 상세히 설명한다. 의존성 검증 로직(305)은 또한, 프로세서(100)의 다른 부분들에 의해 수행된 데이터 추론을 검증하도록 구성될 수도 있다. 예를 들면, 만일 디스패치 유닛(104)이 의존성 예측(예를 들면, 로드 결과를 과거 스토어의 소스에 추론적으로 링크함으로서)을 수행하도록 구성되었다면, 의존성 검증 로직(305)은 그 의존성 예측을 검증하도록 구성될 수도 있다.
연산 저장소(307)는 로드 스토어 유닛(126C)으로 발행되었지만(예를 들면, 스케줄러 118에 의해) 아직 실행이 완수되지 않은 연산들을 저장하도록 구성될 수도 있다. 데이터 추론이 수행되었으며 로드 스토어 유닛으로 발행된 연산은, 상기 연산이 의존성 검증 로직(305)에 의해 검증될 때 까지, 퇴거(retire)되지 않을 수 도 있다. 연산 저장소(307)는, 로드 스토어 유닛(126C) 내의 모든 미해결(outstanding) 연산들을 추적할 수도 있다. 연산 저장소(307)는 각각의 미해결(outstanding) 로드 및 스토어에 대한 엔트리(310)를 포함할 수도 있다.
엔트리(310)는 또한, 상기 엔트리가 로드 또는 스토어에 할당되었는지를 표시하는 ld/st 정보(313)를 포함할 수도 있다.(또는 몇몇 실시예에서는, 만일 엔트리가 메모리 주소로부터 로드된 값을 연산하는 동작과 그 결과를 메모리 어드레스로 저장하는 동작에 대응한다면, 상기 엔트리는 로드 및 스토어 양쪽을 모두 포함한다고 표시할 수도 있다.) 또한, 엔트리(310)는 태그(315)(예를 들면, 프로세서 100 내에서 연산과 그 결과를 식별하는), 주소(317), 및/또는 데이터(319)를 포함할 수도 있다. 일부 실시예들에서는 태그(315)는, 메모리 연산(예를 들어, x86 아키텍쳐를 구현하는 실시예에서는 EIP 값)에 대응하는 프로그램 카운터 값을 포함할 수도 있다. 일부 실시예들에서 각각 엔트리의 데이터 필드(319)는 추론적인 데이터 및 비추론적인 데이터 모두를 위한 저장소를 포함할 수도 있다. 이와 유사하게, 일부 실시예들에서 어드레스 필드(317)는, 연산 주소의 하나 이상의 값들(예를 들면, 주소 예측에 의해 생성된 추론적인 주소 및 연산을 실행함으로써 생성된 새로운 주소 값)을 위한 저장소를 포함할 수도 있다. 몇몇 실시예들에서, 엔트리들은 데이터 추론으로서 연산들 및/또는 오퍼랜드들을 식별하기 위한 추가적인 필드들을 포함할 수도 있다. 예를 들면, 플래그(321)는 특정한 로드 연산이 더 오래된 스토어 연산들에 대해 독립적이라고 예측되었다는 것을 표시할 수도 있다. 또한, 플래그(321)는 특정한 연산이 동적으로 예측가능한지 아닌지를 표시할 수도 있는 바, 이에 대 해서는 상세히 후술한다. 엔트리(310)는, 로드 스토어 유닛(126C)으로 연산을 발행하는 스케줄러(118)에 반응하여 할당될 수도 있으며, 연산의 실행을 완료하는 로드 스토어 유닛(126C)에 반응하여 할당 해제될 수도 있다.
의존성 검증 로직(305)은, 연산의 추론적인 결과를 연산의 실제 결과와 비교함으로써, 의존성 예측의 몇몇 사례(some instances)를 검증할 수도 있다. 예를 들면, 로드 연산의 추론적인 결과는 연산 저장소(307)내의 그 로드의 엔트리(310)에 저장될 수도 있다. 상기 연산의 실제 결과가 데이터 캐시(128)로부터 수신되었을 때, 의존성 검증 로직은 연산 저장소(307)에 저장된 추론적인 결과와 실제 결과를 비교할 수도 있다 .
의존성 검증 로직(305)은, 상기 연산의 주소를 하나 이상인 과거(earlier) 연산들의 주소와 비교함으로써, 의존성 예측의 다른 사례들을 검증할 수도 있다. 예를 들면, 의존성 검증 로직(305)은 전용 의존성 검증 비교기들(미도시)을 포함할 수도 있으며, 또는 로드 스토어 유닛(126C)에 대한 몇몇 실시예들에서 구현된 스토어-to-로드 포워딩 비교기들을 사용할 수도 있다. 일 실시예에서는, 하나 이상의 더 오래된 스토어 연산들의 주소들이 계산되기 전에, 로드 연산이 더 오래된 스토어 연산들에 대해 독립적이라고 의존성 예측 로직(303)에 의해 예측될 수도 있다. 상기 하나 이상의 더 오래된 스토어들의 주소들이 이용가능해 질때, 독립적이라고 예측된 로드 연산의 주소와 더 오래된 스토어 주소들을 비교하도록, 상기 비교기들이 구성될 수도 있다. 만일, 임의의 더 오래된 스토어 연산의 주소가, 독립적이라고 예측된 로드 연산의 주소와 일치한다면, 의존성 검증 로직(305)은 상기 로드 연 산이 잘못 예측되었다고 표시할 수도 있다. 몇몇 실시예에서 의존성 검증 로직(305)은, 독립적이라고 예측된 로드 연산들만을 모니터하고 검증하도록 구성될 수도 있다.(예를 들어, 이러한 로드 연산들은 독립적임을 표시하는 플래그 값들 321과 함께 연산 저장소 307에 저장된다.) 다른 실시예에서, 의존성 검증 로직(305)은 또한, 의존적이라고 예측된 로드들이 실제로는(in fact) 더 오래된 스토어들에 대해 독립적인지를 검출하도록 구성될 수도 있다.
로드 연산의 잘못 예측된 의존성을 검출하는 것에 응답하여, 의존성 검증 로직(305)은, 잘못 예측된 로드 연산들이(및, 다른 실시예에서는 잘못 예측된 연산에 의존적인 모든 연산들 또는 잘못 예측된 연산보다 더 젊은 모든 연산들) 재연(replay)되도록 할 수도 있으며, 의존성 예측 로직(303)이 갱신되도록 할 수도 있는바, 이에 대해서는 상세히 후술한다. 재연되야할 연산을 식별하는 재연 신호를 스케줄러(118)로 제공함으로써, 연산이 재연될 수도 있다. 이러한 신호에 응답하여, 상기 스케줄러(118)는 재연을 위해 상기 연산에 표시를 할 수도 있다(예를 들면, 그 연산과 관련된 상태 정보를 수정하여 상기 연산은 재연되어야함을 나타냄으로써). 다른 일 실시예에서, 의존성 검증 로직(305)는, 소정 연산이 재연되어야함을 나타내는 플래그와 함께 그 연산의 태그를 스케줄러(118)에 제공함으로써, 상기 연산이 재연되도록 할 수도 있다. 의존적이라고 예측된 로드 연산들이 잘못 예측(misprediction)되었음을 검출하는 몇몇 실시예들에서는, 의존성 검증 로직(305)은 잘못 예측된 로드를 재연함이 없이 오직, 의존성 예측 로직(303)만을 갱신할 수도 있는데, 이는 잘못 예측된 로드 연산들의 의존성이, 부정확한 계산보다는 성능 저하만을 가져오기 때문이다. 또한, 아래에서 후술될 예측 이력(prediction hysteresis)을 제공하도록 구성된 카운터를 의존성 예측 로직(303)이 포함하는 몇몇 실시예들에서는, 오 예측 뿐만 아니라 정확한 예측의 경우에도 의존성 검증 로직(305)이 의존성 예측 로직(303)을 갱신하도록 구성될 수도 있다.
일부 실시예들에서는, 잘못 예측된 의존성을 갖는 로드 연산의 정확한 결과가 이미 이용가능할 수도 있다. 예를 들면, 독립적이라고 예측된 로드 연산은 실제로는 스토어 연산에 의존적일 수도 있으며, 예를 들면 가령, 스토어 연산에 대응하는 엔트리(310)의 데이터(319)와 같이, 상기 스토어 데이터는 이용가능할 수도 있다. 만일, 부정확하게 추론된 로드 연산의 정확한 결과가 이미 이용가능하다면, 몇몇 구현예에서 의존성 검증 로직(305)은, 로드 스토어 유닛(126C)으로 하여금 부정확하게 추론된 로드 연산의 정확한 결과를 프로세서내의 다른 구성요소들로 뿌리도록(broadcast) 할 수도 있는바, 이에 따라 프로세서의 다른 부분들내의 모든 의존적인 연산들이 상기 정확한 값을 이용하여 재-실행(re-execute)될 수도 있다. 이러한 실시예들에서 데이터 추론 검증 로직(305)은, 이와같이 부정확하게 추론된 로드 연산이 재연되지 않도록 할 수도 있다. 심지어, 로드 스토어 유닛(126C)이 이러한 연산을 재연하도록 하는 경우에도, 상기 로드 스토어 유닛(126C)은 미해결된 연산의 실행을 완료할 수도 있음을 유의해야 한다.
의존성 예측 로직(303)은, 소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지 아닌지를 예측하도록 구성된 다양한 데이터 스트럭쳐들을 구현할 수도 있다. 많은 실시예들에서, 국부 예측기들, 전역 예측기들, 및 혼성(hybrid) 예측기들 이, 의존성 예측을 위해 채용될 수 있다.
도3A는 국부 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일 실시예를 도시한 도면이다. 도시된 실시예에서, 의존성 예측 로직(303)은, 복수개의 국부 예측기 엔트리들(355)을 포함하는 국부 예측기(330)를 포함한다. 각각의 국부 예측기 엔트리(355)는, 인덱스 태그(336) 및 의존성 예측 값(337)을 포함한다. 도시된 실시예에 따르면, 각각의 국부 예측기(335)는 또한 카운터(338)를 포함할 수도 있으며, 몇몇 실시예에서는 상기 카운터가 생략될 수도 있는데 이에 대해서는 후술한다. 카운터(338)는 최대값들 및 최소값들에서 포화(saturate)하도록 구성된 다중비트 카운터일 수도 있다.
각각의 국부 예측기 엔트리(335)는 소정의 로드 연산에 상응하는 의존성 예측 정보를 저장하도록 구성될 수도 있다. 소정의 국부 예측기 엔트리(335)는 인덱스 태그(336)에 의해 인덱스 될 수도 있는바, 일실시예에서 인덱스 태그(336)는 대응하는 로드 연산의 프로그램 카운터 값을 포함할 수도 있다. 다른 실시예들에서는, 인덱스 태그(336)가 대응하는 로드 연산을 식별할 수 있는 어떤 값(예를 들면, 목적지 태그 값 또는 로드연산의 주소 값)을 포함할 수도 있는데, 이 값은 프로그램 카운터 값과는 다른 값이다. 인덱스 태그(336)는, 대응하는 국부 예측기 엔트리(335)가 유효하다는 표시를 포함할 수도 있다.(즉, 소정의 로드 연산에 할당되었다고)
가령, 프로그램 카운터 값과 같이 로드 연산에 대응하는 식별 정보는, 로드 연산이 로드 스토어 유닛(126C)으로 발행될 때, 의존성 예측 로직(303)에 제공될 수도 있다. 제시된 실시예에서, 국부 예측기(330)는, 로드 연산에 대응하는 유효한 예측기 엔트리가 존재하는지를 판별하기 위해, 로드의 식별 정보를 각 국부 예측기 엔트리(335)의 인덱스 태그(336)와 대비하여 비교할 수도 있는바, 이는 내용 주소화 기억장치(content addressable memory : CAM)의 동작과 유사한 조합적인 방법이다. 만일, 유효한 예측기 엔트리가 존재한다면, 이것의 상응하는 의존성 예측 값(337)(만일 존재한다면, 카운터 338의 값 뿐만 아니라)은, 판독될 수도 있으며 그리고 연산 저장소(307)의 상기 로드 연산에 대응하는 엔트리(310) 내에 저장될 수도 있다. 만일, 유효한 예측기 엔트리가 존재하지 않고 이용가능한 자유(free) 국부 예측기 엔트리(335)가 존재한다면, 상기 자유 엔트리는 로드 연산에 할당될 수도 있으며, 상기 로드의 식별정보는 자유 엔트리의 인덱스 태그(336)에 저장될 수도 있다. 더 나아가, 디폴트 예측 값은, 자유 엔트리의 의존성 예측 값(337)에 저장될 수도 있다. 예를 들어, 로드 연산들은 오래된 스토어들에 대해 독립적이라고 디폴트로 예측될 수도 있는바, 따라서 이 경우에는 독립적이라고 예측되었음을 나타내는 예측 값이 저장될 수도 있다.
로드 스토어 유닛(126C)은 국부 예측기(330)로부터 판독된 의존성 예측 값 정보를 평가할 수도 있는바, 이는 더 오래된 스토어 연산의 주소들이 계산되기 이전에, 독립적이라고 예측된 로드 연산이 실행되도록 하기 위해서이다. 전술한 바와같이, 의존성 검증 로직(305)은 소정의 로드 연산에 대한 의존성 예측이 부정확하다는 것을 검출할 수도 있다. 이러한 경우에, 의존성 검증 로직(305)은, 잘못 예측된 로드 연산에 대응하는 국부 예측기 엔트리(305)가 갱신되도록 할 수도 있다. 예 를 들면, 의존성 검증 로직(305)은, 앞서 설명된 방법과 유사한 방법으로 로드 연산 식별 정보를 제공함으로써, 국부 예측기(330) 내의 대응하는 국부 예측기 엔트리(335)가 액세스되도록 할 수도 있다. 일단, 적절한 국부 예측기 엔트리(335)가 선택되면, 의존성 검증 로직(305)은, 오예측을 반영하기 위해 상기 상응하는 의존성 예측 값(337)이 갱신되도록 할 수도 있다.
카운터(338)가 구현되지 않는 실시예들에서는, 의존성 검증 로직(305)에 의해 결정된 바와 같은 정확한 의존성 정보를 저장하기 위해, 의존성 예측 값(337)이 갱신될 수도 있다. 카운터(338)를 포함하는 실시예들에서는, 상기 카운터 값은 오 예측의 경우에 감소할 수 있고 정확한 예측의 경우에 증가할 수 있다. 그리고 의존성 예측 값(337)은, 대응하는 카운터(338) 값이 최소 값일 때에만, 오 예측시에 갱신될 수 있다. 이러한 실시예들에서, 카운터(338)는 의존성 예측에 대한 이력(hysteresis)을 제공할 수도 있는바, 이에 의하면 하나의 정확한 또는 부정확한 예측에 반응하여 의존성 예측값이 갑자기 변하는 것을 방지할 수 있다. 이러한 실시예들에서, 카운터(338)는 의존성 예측 값의 강도를 나타낼 수도 있다.(예를 들면, 카운터 숫자가 더 클 수록 더 강한 예측을 나타낼 수도 있으며, 카운터 숫자가 작을 수록 더 약한 예측을 나타낼 수도 있다.)
방금 기술된 바와같이, 일 실시예에서는 국부 예측기(330)는 의존적이라고 또는 독립적이라고 예측된 로드 연산들에 대응하는 엔트리들을 포함할 수도 있다. 하지만 다른 실시예에서, 국부 예측기(330)는, 의존적이라고 예측된 로드 연산들에게만 엔트리들을 할당하도록 구성될 수도 있다. 이러한 실시예에서, 상기 소정의 로드 연산이 로드 스토어 유닛(126C)에 발행되었을 때, 만일 소정의 로드 연산에 대한 식별 정보가 국부 예측기 내의 그 어떤 엔트리하고도 매치되지 않는다면, 상기 로드 연산은 디폴트로 독립적이라고 예측될 수도 있다. 그후에, 만일 의존성 검증 로직(305)이 이러한 디폴트 예측이 부정확하다고 검출한다면, 정확한 예측과 함께 엔트리가 국부 예측기(330)내에 할당될 수도 있다. 또한 몇몇 실시예에서는, 만일 의존성 검증 로직(305)이, 의존적이라고 예측된 로드 연산이 실제로는 더 오래된 스토어 연산에 대해 독립적임을 검출한다면, 국부 예측기는 오 예측된 로드 연산에 대응하는 국부 예측기 엔트리(355)를 할당 해제하도록 구성될 수도 있다. 의존적이라고 예측된 로드 연산들에만 엔트리들을 할당하도록 국부 예측기가 구성되는 몇몇 실시예들에서는, 의존성 예측 값(337)이 각각의 국부 예측기 엔트리(335)로부터 생략될 수도 있다.
특정한 로드 연산을 예측할 때에, 국부 예측기(330)는, 상기 특정한 로드 연산의 과거 행동(behavior)만을 신뢰할 뿐, 다른 로드 연산들의 과거 행동은 신뢰하지 않을 수도 있다. 따라서, 국부 예측기(330)는 그 행동이 상대적으로 정적인 로드 연산들의 의존성을 예측하는 경우에만 효과적일 수도 있다. 하지만 다른 몇몇 경우들에 있어서는, 소정 로드 연산의 의존성 행동은, 다른 로드들의 행동에 좌우되어 변할 수도 있다(즉, 상기 소정의 로드 연산의 의존성 행동이 동적일 수도 있음). 예를 들면, 개별적인 로드 연산의 행동에 의해 결정되는 것처럼, 소정의 로드 연산은 상기 소정의 로드 연산이 발행되는 다른 모든 시간에만(only every other time), 더 오래된 스토어 연산에 의존적일 수도 있다. 이러한 경우들에서, 소정 연 산의 행동을 예측할 때 여러개의 로드 연산들의 행동을 고려하는 전역 예측기가, 좀더 정확한 예측들을 제공할 수도 있다.
도3B는, 전역 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일 실시예를 도시한 도면이다. 도시된 실시예에서, 의존성 예측 로직(303)은 전역 예측기(340)를 포함하는바, 전역 예측기는, 조합 로직(combination logic)(346)을 통해 복수개의 전역 예측기 엔트리들(345)에 접속된 전역 히스토리 레지스터(342)를 포함한다. 각각의 전역 예측기 엔트리(345)는 전역 의존성 예측 값(347) 및 전역 카운터(348)를 포함하는바, 전역 카운터(348)는 최대값 및 최소값에서 포화하도록 구성된 다중비트 카운터일 수도 있다.
전역 히스토리 레지스터(342)는 복수개의 비트들을 저장하도록 구성된 쉬프트 레지스터일 수도 있으며, 여기서 각각의 비트들은 실행된 각각의 로드 연산의 의존성 행동에 대응한다. 일 실시예에서 상기 의존성 행동은, 실행된 각각의 로드 연산의 실제 의존성 행동에 대응할 수도 있는바, 즉 실행된 로드 연산 각각이 더 오래된 스토어 연산에 대해 사실은 의존적인지 또는 독립적인지에 관계없다. 다른 실시예에서, 상기 의존성 행동은 각각의 실행된 로드 연산의 예측된 의존성 행동에 상응할 수도 있으며, 상기 예측된 의존성 행동은 실제 의존성 행동보다 더 빨리 이용가능해 질 수도 있다. 전역 히스토리 레지스터(342)에 저장된 비트들의 갯수, 따라서 이에 의해 표시되는 실행된 로드 연산들의 갯수는, 다양한 실시예들에 따라 가변적일 수도 있다. 일 실시예에서, 전역 히스토리 레지스터(342)는 프로그램 가능한 폭을 갖는 쉬프트 레지스터로 구현될 수도 있다.
일 실시예에서, 전역 히스토리 레지스터(342)는 하나의 로드 연산이 실행될 때 마다 갱신될 수도 있다. 갱신하자마자, 새롭게 실행된 로드 연산의 의존성 행동은 전역 히스토리 레지스터(342)의 최하위 비트(LSB) 위치로 쉬프트될 수도 있으며, 전역 히스토리 레지스터(342)의 최상위 비트(MSB)가 폐기되도록 전역 히스토리 레지스터의 모든 잔존 비트 위치들은 왼쪽으로 1 비트 위치씩 쉬프트할 수도 있다. 또 다른 실시예에서는, 전역 히스토리 레지스터(342)는 오른편 쉬프트(right-shift) 레지스터로서 구현될 수도 있는바, 여기서는, 새롭게 실행된 로드 연산의 의존성 행동이 최상위 비트 위치로 쉬프트되며 최하위 비트는 폐기된다. 일부 실시예에서, 동시에 실행되는 다중 로드 연산들을 조정하는 때에는, 전역 히스토리 레지스터(342)는 1 비트 위치 이상을 쉬프트 할 수도 있다.
소정의 전역 예측기 엔트리(345)의 전역 의존성 예측 값(347)은, 가령 의존적이라는 예측 또는 독립적이라는 예측처럼, 대응하는 로드 연산의 의존성 예측을 나타낼 수도 있다. 전역 예측기 카운터(348)는, 소정의 로드 연산에 대한 대응하는 전역 의존성 예측 값(347)의 강도를 나타내는 값을 저장하도록 구성될 수도 있는바, 이는 앞서 설명된 국부 예측기 엔트리(335)의 카운터(338)와 유사하다. 몇몇 실시예들에서, 전역 예측기 카운터(348)는, 부정확한 또는 정확한 예측이 검출되는 경우에, 의존성 검증 로직(305)에 의해 갱신될 수도 있는바, 이는 국부 예측기(330)에 대해서 앞서 설명된 바와 유사하다.
소정의 로드 연산이 로드 스토어 유닛(126C)으로 발행되었을 때, 조합 로직(346)은, 인덱스 값(index value)을 만들어 내기 위하여 전역 히스토리 레지스 터(342)내로 유도된 값과 소정의 로드 연산에 대한 식별 정보를 조합한다. 결과적인 인덱스 값은 이후에 특정한 전역 예측기 엔트리(345)에 액세스하기 위해 사용될 수도 있으며, 상응하는 전역 의존성 예측 값(347)은 판독되어 연산 저장소(307)내의 로드 연산에 대응하는 엔트리(310)내에 저장될 수도 있는바, 이는 국부 예측기(330)에 대하여 먼저 설명된 바와 유사한 방법을 통해 로드 연산의 스케줄링을 수정하는데 이용될 수도 있다. 일부 실시예들에서는, 전역 예측기 엔트리(345)는 유효성 데이터를 포함할 수도 있음이 고려되었는바, 따라서 전역 예측기(340)내의 할당되지 않은 엔트리들에 액세스하는 로드 연산은 디폴트 예측을 수신할 수도 있다.
조합 로직(346)은, 전역 히스토리 레지스터로 유도된 값(복수개의 최근에 수행된 로드 연산들의 의존성 히스토리를 나타낼 수도 있다)과 예측이 요구되는 소정의 로드 연산에 대한 특정한 식별 정보를 조합하도록 구성될 수도 있다. 예를 들면, 소정의 로드 연산에 대응하는 프로그램 카운터 값이 일 실시예에서 사용될 수도 있으며, 다른 실시예에서는, 가령, 목적 태그 값 또는 로드 어드레스와 같은 식별 정보가 사용될 수도 있다. 조합 로직(346)에 의해 수행되는 정확한 조합 기능은 다양한 실시예에 따라 가변적일 수도 있다. 일 실시예에서 조합 로직(346)은, 배타적 논리합(exclusive OR : XOR)을 이용하여 전역 히스토리 레지스터(342)의 값을 주어진 로드 명령의 프로그램 카운터 값에서 선택된 비트들(가령, 최하위 비트)과 조합하도록 구성될 수도 있는바, 이에 의해 특정한 전역 예측기 엔트리(345)를 선택하는데 이용될 수도 있는 인덱스 값을 만들 수 있다. 또 다른 실시예에서는, 전 역 히스토리 레지스터(342)의 모든 값 또는 일부 값을, 소정 로드 명령의 프로그램 카운터 값의 선택된 비트들과 연결(concatenating)함으로써, 인덱스 값이 유도(derive)될 수도 있다.
하나 이상의 로드 연산에 대한 의존성 히스토리를 포함하고 있기 때문에, 전역 예측기(340)는 동적인 의존성 행동을 갖는 로드 연산들의 귀추(outcome)를 좀더 잘 예측할 수 있다. 하지만, 몇몇 실시예들에서는, 국부 예측기 및 전역 예측기 이들 각각은 상이한 환경하에서는 다른 하나 보다 더 우수한 예측 정확도를 나타낼 수도 있다. 결론적으로, 일부 실시예들에서는 국부 타입 및 전역 타입의 예측기 둘다를 사용하는 하이브리드 예측기가 채용될 수도 있다.
도3은 하이브리드 예측기 데이터 구조를 포함하는 의존성 예측 로직에 대한 일 실시예를 도시한 도면이다. 도시된 실시예에 따르면, 의존성 예측 로직(303)은, 그 각각이 선택기(355)에 연결된 국부 예측기(330) 및 전역 예측기(340)를 포함하여 이루어진 하이브리드 예측기(350)를 포함하고 있다. 국부 예측기(330) 및 전역 예측기(340)의 구성 및 동작은 도3A 및 도3B를 각각 참조하여 앞서 설명된 것과 동일할 수도 있다.
일실시예에서, 국부 예측기(330)는, 소정의 로드 연산이 동적인 로드 연산이라고 결정되지 않는 한, 그 예측이 선택될 수도 있는 디폴트 예측기로서 구성될 수도 있다. 예를 들어 만일, 국부 예측기(330)가 상기 로드를 소정 횟수 잘못 예측한다면, 일부 실시예들에서 로드는, 의존성 검증 로직(305)에 의해 동적인 로드 연산이라고 식별될 수도 있다. 다른 실시예들에서, 다른 기능적 유닛들이 동적인 로드 상태를 표시할 수도 있다. 예를 들어 일부 실시예에서는, 로드의 오퍼랜드 또는 어드레싱 패턴에 근거하여 연산 디코드 스테이지(operation decode stage)에서, 로드가 동적이라고 식별될 수도 있다.
일 실시예에서, 로드 스토어 유닛(126C)의 연산 저장소(307)에 저장된 로드 연산들은, 예를 들면, 소정 엔트리(310)의 플래그 필드(321)내에 저장되는 것과 같이, 상기 로드가 동적인 로드 연산인지 아닌지를 나타내는 표시를 포함할 수도 있다. 이러한 실시예에서, 만일 상기 로드가 정적이라고 또는 동적이라고 각각 표시된다면, 상기 동적인 로드 표시는, 국부 예측기(330) 또는 전역 예측기(340)의 출력을 선택하게끔 선택기(355)를 설정할 수도 있다. 더 나아가, 이러한 실시예에서, 사용되지 않은 예측기는 조용한(quiescent) 상태에 있으며 반면에 선택된 에측기는 액세스 되므로, 따라서 하이브리드 예측기(350)의 파워 소모를 감소시킬 수 있다.
또 다른 실시예에서, 동적인 로드 상태에 대한 표시는, 동적인 로드 연산에 대응하는 국부 예측기 엔트리(335)에 저장될 수도 있다. 예를 들면, 각각의 국부 예측기 엔트리(335)는 동적인 로드 상태를 나타내는 추가적인 필드(미도시)를 포함하도록 구성될 수도 있다. 이와같은 실시예의 한가지 버젼에서는, 국부 예측기(330) 및 전역 예측기(340) 양자 모두 소정의 로드 연산에 대해 동시에 액세스될 수도 있으며, 대응하는 국부 예측기 엔트리(335)에 저장된 상기 동적인 로드 상태 표시는, 적절한 예측기의 출력을 선택하도록 선택기(355)를 설정할 수도 있다. 이와같은 실시예의 또 다른 버젼에서는, 대응하는 국부 예측기 엔트리(335)에 저장된 동적인 로드 상태를 표시하는 값에 근거하여 전역 예측기(340)가 액세스 될 수도 있는바, 따라서 파워 소모가 잠재적으로 감소될 수 있다.
메모리 파일 및 의존성 예측
프로세서(100)에 대한 일부 실시예들에서, 로드 및 스토어 명령들 사이에서 의존성을 식별하는 것을 용의하게 하기 위해, 메모리 파일(memory file)이 구현될 수도 있다. 이러한 실시예들에서, 메모리 파일 연산의 결과들은 또한 로드 연산들의 의존성 예측을 수행하기 위해 사용될 수도 있는데, 이에 대해서는 후술한다.
도4는 디스패치 유닛(104)에 대한 일 실시예를 도시한 도면이다. 이러한 실시예에서, 디스패치 유닛(104)은 레지스터 맵(134) 및 메모리 파일(132)을 포함한다. 도1의 설명부분과 관련되어 언급한 바와같이, 레지스터 맵(134)은 레지스터 개명(renaming)을 제공하도록 구성될 수도 있다. 레지스터 맵(134)은 각각의 소스 및 목적지 오퍼랜드에 대한 논리적인 레지스터 이름들을 수신할 수도 있으며, 상기 논리적인 레지스터들로 가장 최근에 할당된 물리적 레지스터들의 물리적인 레지스터 이름들을 출력할 수도 있다. 메모리 파일(132)은 메모리 파일 제어기(202) 및 메모리 파일 저장소(204)를 포함할 수도 있다.
메모리 파일 저장소(204)는 하나 이상의 엔트리들(220)을 포함할 수도 있다. 각각의 엔트리(220)는, 어드레싱 패턴(206) 및 상기 엔트리의 어드레싱 패턴에 관련되는 태그(208)를 포함할 수도 있다. 각각의 태그는, 어디에 상기 데이터 값이 저장될 것이며(예를 들면, 재정렬 버퍼내 또는 레지스터 파일 116 내에), 언제 생성될 것인지를 표시함으로써, 데이터 값을 식별할 수도 있다. 예를 들면, 예시된 실시예에서 도시된 바와같이, 각각의 태그는, 레지스터 맵(134)에 의해 표시된 것 처럼, 상기 데이터 값을 저장하기 위해 할당된 물리적인 레지스터를 식별할 수도 있다. 각각의 어드레싱 패턴은, 연산 내의 주소를 특정하기 위해 사용되는 정보의 전부 또는 일부를 포함할 수도 있다. 예를 들어, 도4B를 간단히 참조하면, 예시적인 어드레싱 패턴(206)이 도시되어 있다. 이러한 실시예에서, 상기 어드레싱 패턴(206)은 기본 논리적 레지스터 이름(base logical register name)(210), 인덱스 논리적 레지스터 이름(212), 및 변위(displacement)(214)를 포함한다. 몇몇 어드레싱 패턴(206)은 메모리 내의 특정한 세그먼트를 식별하는 세그먼트(segment) 논리적 레지스터 이름을 포함할 수도 있다. 일부 실시예에서, 메모리 파일 저장소(204)는 여러개의 레지스터들, 래치들, 플립-플롭들, 또는 다른 클록된 저장소자로부터 구현될 수도 있다. 대안적인 실시예에서, 메모리 파일 저장소(204)는 하나 이상의 RAM 셀들을 포함할 수도 있다.
일부 실시예들에서, 메모리 파일 저장소(204)에 저장된 어드레싱 패턴(206)은, 연산에 대해 특정된 모든 어드레싱 정보 보다 더 적은 정보를 포함할 수도 있다는 점을 유의해야 한다. 예를 들면, 메모리 파일 저장소(204)내의 엔트리들은, 변위 필드(214)내에서 변위를 특정하기 위해 사용되는 모드 비트들 보다 더 적은 비트들을 저장할 수도 있다. 다른 실시예들에서, 메모리 파일 제어기(202)는, 메모리 파일내의 엔트리가 특정한 연산에 대한 모든 어드레싱 정보를 저장할 수 있는지 없는지에 의존하여, 메모리 파일 저장소(204)내에 엔트리를 할당할 것인지를 선택할 수도 있다. 예를 들어 만일, 메모리 파일 저장소(204)내의 각 엔트리가 16비트 까지의 변위 정보를 저장하고 소정 연산에 대한 어드레싱 정보가 24비트의 변위 정보를 포함한다면, 상기 메모리 파일 제어기(202)는 상기 연산의 어드레싱 정보를 위한 메모리 파일 엔트리를 할당하지 않을 수도 있다.
메모리 파일 제어기(202)는, 디스패치되지 않은(undispatched) 연산들에 특정된 어드레싱 패턴들을, 메모리 파일 저장소(204)의 엔트리들 내에 저장된 어드레싱 패턴들과 비교할 수도 있다. 만일, 연산의 어드레싱 패턴이 메모리 파일 저장소(204)의 엔트리들 내에 현재 저장된 어드레싱 패턴들중 어느 것과도 매칭되지 않는다면(즉, 상기 연산의 어드레싱 패턴이 메모리 파일 저장소내에 누락되었다면), 메모리 파일 제어기(202)는, 상기 연산의 어드레싱 패턴의 전부 또는 일부를 저장하기 위해 새로운 엔트리를 메모리 파일 저장소(204)에 할당할 수도 있다. 만일, 메모리 파일 저장소(204)내에 할당할 자유 엔트리들이 존재하지 않는다면, 메모리 파일 제어기(202)는 가령, LRU(Least Recently Used), FIFO(First in First out), 랜덤 재배치(random replacement) 등등과 같은 재배치 스킴을 사용하여, 겹처쓸(overwrite) 엔트리를 선택할 수도 있다.
할당된 엔트리내에 연산의 어드레싱 패턴을 저장하는 것 말고도, 메모리 파일 제어기(202)는 또한 물리적인 레지스터 이름(208)을 저장할 수도 있는바, 이는 상기 연산의 어드레싱 패턴에 의해 식별되는 메모리 위치로부터 로드되는 값 또는 상기 메모리 위치로 저장되는 값을 식별할 수 있는 태그(예를 들면, 물리적인 레지스터 이름)를 포함할 수도 있다. 예를 들어 만일, 메모리로부터 데이터를 로드하는 로드 연산이 처리되고 있다면, 상기 로드 연산에 응답하여 할당된 엔트리는, 상기 로드 연산의 결과를 저장하기 위해 할당된 물리적인 레지스터의 이름을 저장할 수도 있다. 예를 들어 만일, 메모리 위치로 데이터를 쓰는 스토어 연산이 처리되고 있다면, 메모리 파일 제어기(202)는, 메모리 파일 저장소(204)내에 상기 스토어 연산의 소스 값이 저장되어 있는 레지스터의 물리적인 레지스터 이름을 저장할 수도 있다.
만일, 연산의 어드레싱 패턴(또는 상기 패턴의 일부)이 메모리 파일(204)의 엔트리내에 이미 저장되어 있다면(즉, 상기 연산의 어드레싱 패턴이 메모리 파일 저장소내에서 적중된다면), 메모리 파일 제어기(202)는 매칭된 어드레싱 패턴을 포함하고 있는 엔트리를 사용하거나 또는 수정할 수도 있다. 만일, 로드 연산(특정 어드레스로부터 레지스터로 값을 로드하는 동작)이 처리되고 있다면, 메모리 파일 제어기(202)는, 상기 매칭 엔트리에 저장된 물리적인 레지스터 이름(208)을 출력할 수도 있다. 만일 스토어 연산(레지스터로부터 특정한 어드레스로 값을 저장하는 동작)이 처리되고 있다면, 메모리 파일 제어기(202)는, 데이터가 저장되어 있다는 태그와 함께 매칭 엔트리에 저장된 태그(예를 들면, 물리적 레지스터 이름 208)를 겹쳐쓸 수도 있다.
만일, 로드 연산이 처리되고 있고 그리고 상기 로드 연산이 메모리 파일 저장소(204)내에서 적중한다면, 메모리 파일 제어기(202)에 의해 출력되는 태그는, 태그에 의해 식별되는 상기 저장된 값을 로드 연산의 추론적인 결과에 링크시키도록 사용될 수도 있다. 예를 들어 일부 실시예에서는, 로드 연산이 스케줄러(118)로 디스패치되었을 때, 메모리 파일(132)에 의해 출력된 태그는 상기 스케줄러(118)에 게도 제공될 수 있다(예를 들면, 추론적인 소스 오퍼랜드 태그로서). 스케줄러9118)는, 상기 태그에 의해 식별된 값의 이용가능성(예를 들어, 레지스터 파일(116)내에서 라든지 또는 결과 버스(130)상에서)에 응답하여 로드 연산을 발행할 수도 있다. 실행 코어(124)는 상기 로드 연산을 실행할 수도 있는바, 따라서, 상기 링크된 값이 마치 결과 버스(130)상의 로드 연산의 추론적인 결과처럼 브로드 캐스트된다(상기 로드 연산의 결과로서 생산된 데이터 값은 그 스스로 플래그되지 않을 수도 있으며, 또는 몇몇 실시예들에서는 추론적인 값으로 식별될 수도 있다는 점을 유의해야 한다). 다른 실시예들에서는, 상기 데이터 값은 추론적인 맵내에 태그를 저장함으로써, 로드 연산의 추론적인 결과에 링크될 수도 있다
상기 링크의 결과로서, 태그에 의해 식별되는 데이터 값은, 일단 상기 데이터 값이 이용가능해지면(예를 들면, 레지스터 파일(116)내에서 또는 결과 버스(130) 상에서), 로드 연산의 추론적인 결과로서 포워드될 수도 있는바, 이는 의존적인 연산들이 추론적인 결과를 사용하여 실행하는 것을 허용하기 위해서이다. 많은 경우에 있어서, 만일, 상기 로드 연산의 비 추론적인 결과가 이용가능해질 때까지 의존적인 연산들의 실행이 연기된다면, 상기 로드 연산의 추론적인 결과를 사용하여 의존적인 연산들을 이보다 더 빨리 실행하는 것이 허용될 수도 있다.
추가적으로, 로드 연산이 전술한 데이터 값에 링크된 때에, 메모리 파일(132)은, 상기 로드 연산의 오퍼랜드 태그 정보와 함께 상기 링크에 대한 표시를 스케줄러(118)에게 전달하도록 구성될 수도 있다(예를 들어, 메모리 파일(132)은 상기 링크를 나타내는 추가적인 상태 비트를 보낼 수도 있다). 로드 연산이 링크되 었음을 알리는 표시와 함께 상기 로드 연산이 로드 스토어 유닛(126C)으로 발행되었을 때, 상기 로드 연산에 할당된 엔트리(310)의 플래그(321)는, 상기 로드 연산이 의존적이라고 예측되었음을 표시하도록 구성될 수도 있다. 일 실시예에서, 의존성 예측 로직(303)은 링크 상태를 검출할 수도 있으며, 그에 따라 의존성 예측을 표시할 수도 있다. 하지만, 또 다른 실시예에서는, 의존성 예측 로직(303) 및 의존성 검증 로직(305)은, 로드 스토어 유닛(126C)으로부터 생략될 수도 있다. 이러한 실시예에서, 메모리 파일(132)은, 로드 연산들에 대한 의존성 예측의 표시만을 제공할 수도 있다.
도5는 소정의 로드 연산이 더 오래된 스토어 연산에 대해 의존적인지를 예측하는 방법에 관한 일 실시예를 도시한 도면이다. 도1 내지 도4B를 종합적으로 참조하면, 로드 연산이 로드 스토어 유닛(126C)으로 발행되어 연산이 시작된다(블록 500). 로드 연산이 발행되는 것에 반응하여, 의존성 예측 로직(303)은, 상기 로드 연산이 더 오래된 스토어 연산에 의존적인지 아닌지를 예측하도록 구성될 수도 있다(블록 502). 예를 들면, 일 실시예에서 의존성 예측 로직(303)은 로드 연산의 의존성을 예측하기 위해 국부 예측기(330)에 액세스 하도록 구성될 수도 있으며, 반면에 다른 실시예에서는 전역 예측기(340) 또는 하이브리드 예측기(350)가 사용될 수도 있다. 또는, 의존성 예측 정보는 가령 메모리 파일(132)과 같은 또 다른 유닛들로부터 수신될 수도 있다.
상기 예측에 반응하여, 로드 스토어 유닛(126C)은 상기 예측의 타입을 결정하도록 구성될 수도 있다(블록 504). 만일, 로드 연산이 의존적이라고 예측된다면, 로드 스토어 유닛(126C)은, 상기 로드 연산보다 더 오래된 스토어 연산들의 주소들이 계산될 때 까지, 로드 스토어 유닛(126C)이 실행하는 것을 금지하도록 구성될 수도 있다(블록 506). 만일, 로드 연산이 독립적이라고 예측된다면, 로드 스토어 유닛(126C)은, 하나 이상의 더 오래된 스토어 연산들의 주소들이 계산되기 이전에, 로드 스토어 유닛(126C)이 실행하는 것을 허용하도록 구성될 수도 있다(블록 508).
상기 로드 연산이 독립적이라고 예측된 이후에, 로드 스토어 유닛(126C)은 상기 로드 연산이 오예측되었는지 아닌지를 검출하도록 구성될 수도 있다(블록 510). 예를 들면, 일 실시예에서, 로드 스토어 유닛(126C)은, 독립적이라고 예측된 로드 연산의 주소가 더 오래된 스토어 연산의 주소와 매칭되는지를 검출하도록 구성된, 스토어-to-로드 포워딩 비교기들을 포함할 수도 있다. 만일, 오예측이 없었다면, 로드 연산은 일단 완료된 다음에는 퇴거할 수도 있다(블록 512). 만일 오예측이 있었다면, 이에 반응하여 로드 스토어 유닛(126C)은, 재연 표시(replay indication)를 스케줄러(118)에게 제공하도록 구성될 수도 있는바, 재연 표시는, 독립적이라고 예측된 로드 연산이 훗날에 재 발행되어야 함을 표시한다(블록 514).
비록, 국부 예측기 및 전역 예측기의 다양한 조합들을 포함하는 의존성 예측 로직(303)의 다양한 실시예들이, 로드 스토어 유닛(126C)의 특징으로서 서술되었지만, 몇몇 실시예들에서는 의존성 예측 로직(303)의 이러한 변형물들이 마이크로프로세서(100)의 다른 유닛들(가령, 디스패치 유닛(104))내에 위치할 수도 있음을 유의해야 한다. 도3A 내지 도4에 개시된 실시예들의 다양한 조합들 역시 가능함을 유의해야 한다. 예를 들면, 메모리 파일(134)로부터 유도된 의존성 예측은, 국부 예 측기 또는 전역 예측기와 함께 구현될 수도 있으며 또는 국부 예측기 또는 전역 예측기가 없이도 구현될 수 있다.
예시적인 컴퓨터 시스템
도6은 버스 브리지(bus bridge)를 통해 다양한 시스템 콤포넌트들에 접속된 프로세서(100)를 포함하고 있는 컴퓨터 시스템(900)에 대한 일 실시예를 도시한 도면이다. 프로세서(100)는 전술한 바와같은 로드 스토어 유닛에 대한 일례를 포함할 수도 있다. 컴퓨터 시스템에 대한 다른 실시예들도 가능하며 고려될 수 있다. 도시된 시스템에서, 메인 메모리(200)는 메모리 버스(906)를 통해 버스 브리지(902)에 접속되며, 그래픽 제어기(908)는 AGP 버스(910)를 통해 버스 브리지(902)에 접속된다. 복수개의 PCI 디바이스들(912A 내지 912B)는 PCI 버스(914)를 통해 버스 브리지(902)에 접속된다. EISA/ISA 버스(920)를 통해 하나 이상의 EISA 디바이스 또는 ISA 디바이스(918)에 전기적인 인터페이스를 공급하기 위해, 제 2 버스 브리지(916)가 제공될 수도 있다. 이러한 실시예에서, 프로세서(100)는 CPU 버스(924)를 통해 버스 브리지(902)에 접속되어 있으며, 옵션적인 L2 캐시(928)에 접속되어 있다. 몇몇 실시예들에서, 프로세서(100)는 통합된 L1 캐시(미도시)를 포함할 수도 있다.
버스 브리지(902)는 프로세서(100), 메인 메모리(200), 그래픽 제어기(908) 및 PCI 버스(914)에 부착된 제어기들 사이의 인터페이스를 제공한다. 버스 브리지(902)에 연결된 디바이스들중 하나로부터 연산이 수신될 때, 버스 브리지(902)는 상기 연산의 타겟을 식별한다(예를 들면, 특정한 디바이스, PCI 버스의 경우, 타겟은 PCI 버스 상에 있다). 버스 브리지(902)는 상기 연산을 목적된 디바이스로 라우트 한다. 일반적으로, 버스 브리지(902)는, 소스 디바이스 또는 버스에 의해 사용되는 프로토콜로부터 타겟 디바이스 또는 버스에 의해 사용되는 프로토콜로, 연산을 번역한다.
제 2 버스 브리지(916)는, PCI 버스(914)에 대해 ISA/EISA 버스로의 인터페이스를 제공하는 것 이외에도, 추가적인 기능을 병합할 수도 있다. 제 2 버스 브리지에 대해 외부적인(external) 입력/출력 제어기(미도시) 또는 제 2 버스 브리지와 함께 통합된 입력/출력 제어기(미도시)는, 컴퓨터 시스템(900) 내에 포함될 수도 있는 바, 이는 키보드 및 마우스(922) 및 다양한 직렬 및 병렬 포트들을 위한 지원을 제공하기 위함이다. 다른 실시예들에서는, 프로세서(100) 및 버스 브리지(902) 사이의 CPU 버스(924)에 외부 캐시 유닛(미도시)이 또한 접속될 수도 있다. 또한, 외부 캐시가 버스 브리지(902)에 접속될 수도 있으며, 외부 캐시에 대한 캐시 제어 로직(미도시)이 버스 브리지(902)로 통합될 수 도 있다. L2 캐시(928)는 프로세서(100)에 대해 이면 구조(backside configuration)로 도시되어 있다. L2 캐시(928)는, 프로세서(100)로부터 분리될 수도 있으며, 프로세서(100)와 함께 카트리지(예를 들면, 슬롯1 또는 슬롯 A)로 통합될 수도 있으며, 심지어 프로세서(100)와 함께 반도체 기판상에 집적될 수도 있다.
메인 메모리(200)는 어플리케이션 프로그램들이 저장되어 있으며, 프로세서(100)가 기본적으로 실행되는 메모리이다. 적절한 메인 메모리(200)는 DRAM(Dynamic Random Access Memory)을 포함할 수도 있다. 예를 들면, SDRAM(Synchronous DRAM)의 복수개의 뱅크들 또는 램버스 DRAM(RDRAM)이 적당할 수도 있다.
PCI 디바이스들(912A 내지 912B)는, 가령, 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 디스크 드라이브, 플로피 디스크 드라이브, 드라이브 제어기, SCSI(Small Computer Systems Interface) 어댑터들, 및 전화 카드(telephony card)와 같은 다양한 주변회로 디바이스들에 대한 일례이다. 이와 유사하게, ISA 디바이스(918)는, 가령, 모뎀, 사운드 카드 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드 등과 같은 다양한 타입의 주변회로 디바이스에 대한 일례이다.
그래픽 제어기(908)는, 디스플레이(926) 상에서 텍스트와 이미지가 디스플레이되는 것을 제어하기 위해 제공된다. 그래픽 제어기(908)는 당 업계에서 널리 알려진 전형적인 그래픽 가속기(graphic accelerator)를 통합하여 구성될 수도 있는바, 3차원 데이터 구조들이 메인 메모리(200)로부터 또는 메인 메모리로 효율적으로 입출력되는 것을 용이하게 한다. 따라서, 메인 메모리(200)로의 액세스를 얻기 위해, 그래픽 제어기가 버스 브리지(902)내의 타겟 인터페이스에 대한 액세스를 요청할 수 있고 수신할 수 있다는 점에서, 그래픽 제어기(908)는 AGP 버스(910)의 마스터(master)가 될 수도 있다. 전용 그래픽 버스는 메인 메모리(200)로부터 빠른 데이터 검색(retrieval)을 지원한다. 특정한 연산들에 대해서, 그래픽 제어기(908)는 AGP 버스(910) 상에 PCI 프로토콜 트랜잭션(transaction)을 생성하도록 더 구성 될 수도 있다. 따라서, 버스 브리지(902)의 AGP 인터페이스는, PCI 프로토콜 타겟 및 이니시에이터 트랜잭션(initiator transaction)뿐만 아니라 AGP 프로토콜 트랜잭션을 지원하는 기능을 포함할 수도 있다. 디스플레이(926)는 이미지 또는 텍스트가 표시될 수 있는 임의의 전기적인 표시장치이다. 적절한 디스플레이(926)는 브라운관(CRT), 액정 표시장치(LCD) 등등을 포함한다.
앞선 설명에서는, AGP, PCI, ISA 또는 EISA 버스들이 일례로서 사용되었지만, 임의의 버스 구조들이 사용될 수도 있음을 유의해야 한다. 또한, 컴퓨터 시스템(900)은, 추가적인 프로세서(예를 들면, 컴퓨터 시스템의 옵션 구성요소로 프로세서 100a가 도시되어 있다)를 포함하는 다중처리(multiprocessing) 컴퓨터 시스템일 수도 있음을 유의해야 한다. 프로세서(100a)는 프로세서(100)와 유사할 수도 있다. 더욱 상세하게는, 프로세서(100a)는 프로세서(100)의 동일한 복제품일 수도 있다. 프로세서(100a)는 독립적인 버스를 통해 버스 브리지(902)에 연결될 수도 있으며(도6에 도시된 바와같이), 또는 프로세서(100)와 함께 CPU 버스(924)를 공유할 수도 있다. 더 나아가, 프로세서(100a)는, L2 캐시(928)와 유사한 옵션 L2 캐시(928a)에 접속될 수도 있다.
이제 도7을 참조하면, 컴퓨터 시스템(900)의 다른 실시예는, 앞서 설명된 바와같은 로드 스토어 유닛에 대한 일실시예를 구비한 프로세서(100)를 포함할 수도 있다. 다른 실시예들도 가능하며, 또한 고려된다. 도7에 도시된 실시예서, 컴퓨터 시스템은 복수개의 프로세싱 노드들(1012A, 1012B, 1012C, 1012D)을 포함한다. 각각의 프로세싱 노드는, 각각의 프로세싱 노드들(1012A - 1012D)내에 포함된 메모리 제어기(1016A - 1016D)를 통해 각각의 메모리(200A - 200D)에 접속되어 있다. 또한, 프로세싱 노드들(1012A - 1012D)은, 프로세싱 노드들(1012A - 1012D) 사이에서 통신하기 위해 사용되는 인터페이스 로직을 포함한다. 예를 들어, 프로세싱 노드(1012A)는, 프로세싱 노드(1012B)와 통신하기 위한 인터페이스 로직(1018A), 프로세싱 노드(1012C)와 통신하기 위한 인터페이스 로직(1018B), 또 다른 프로세싱 노드(미도시)와 통신하기 위한 3번째 인터페이스 로직(1018C)을 포함한다. 이와 유사하게, 프로세싱 노드(1012B)는 인터페이스 로직(1018D, 1018E, 1018F)을 포함한다. 프로세싱 노드(1012C)는 인터페이스 로직(1018G, 1018H, 1018I)을 포함한다. 프로세싱 노드(1012D)는 인터페이스 로직(1018J, 1018K, 1018L)을 포함한다. 프로세싱 노드(1012D)는, 인터페이스 로직(1018L)을 통해 복수개의 입출력 디바이스들(예를 들면, 데이지 체인 구조의 디바이스들 1020A - 1020B)과 통신하도록 접속되어 있다. 다른 프로세싱 노드들은 이와 유사한 방식으로 다른 입출력 디바이스들과 통신할 수도 있다.
프로세싱 노드들(1012A-1012D)은, 프로세싱 노드 사이의 통신(inter-processing node communication)을 위해 패킷 기반의 링크를 구현한다. 이러한 실시예에서, 상기 링크는 단방향(unidirectional) 라인들의 세트들로서 구현된다[예를 들면, 라인들(1024A)은 프로세싱 노드(1012A)로부터 프로세싱 노드(1012B)로 패킷들을 전송하기 위해 사용되며, 라인들(1024B)은 프로세싱 노드(1012B)로부터 프로세싱 노드(1012A)로 패킷들을 전송하기 위해 사용된다]. 다른 라인들의 세트인 1024C 내지 1024H 는 도7에 도시된 다른 프로세싱 노드들 사이에서 패킷들을 전송 하기 위해 사용된다. 일반적으로, 라인들의 세트 각각은, 하나 이상의 데이터 라인들, 상기 데이터 라인들에 대응하는 하나 이상의 클록 라인들, 및 전송되는 패킷의 타입을 나타내는 하나 이상의 제어 라인들을 포함할 수도 있다. 상기 링크는, 프로세싱 노드들 사이의 통신을 위해 캐시 가간섭성 방식(cache coherent fashion)에서 동작할 수도 있으며, 또는 프로세싱 노드 및 IO 디바이스 사이의 통신을 위해 캐시 비-가간섭성 방식(cache non-coherent fashion)에서 동작할 수도 있다(또는 버스 브리지에서 PCI 버스 또는 ISA 버스와 같은 통상적인 구조의 I/O 버스로). 더 나아가, 상기 링크는, 도시된 바와 같은 I/O 디바이스들 사이의 데이지 체인(daisy-chain) 구조를 사용하여, 비-가간섭성 방식(cache non-coherent fashion)에서 동작할 수도 있다. 하나의 프로세싱 노드에서 다른 하나의 프로세싱 노드로 전송되는 패킷은, 하나 이상의 중간 노드들을 통과할 수도 있음을 유의해야 한다. 예를 들어, 프로세싱 노드(1012A)에 의해 프로세싱 노드(1012D)로 전송되는 패킷은, 도7에 도시된 바와같이 프로세싱 노드(1012B) 또는 프로세싱 노드(1012C)를 통과할 수도 있다. 모든 적절한 라우팅 알고리즘이 사용될 수도 있다. 컴퓨터 시스템(900)에 대한 다른 실시예들은 도7에 도시된 실시예보다 더 많거나 또는 더 적은 프로세싱 노드들을 포함할 수도 있다.
일반적으로, 패킷들은 노드들 사이의 라인들(1024) 상에서 하나 이상의 비트 타임들로써 전송될 수도 있다. 비트 타임은 대응하는 클럭 라인들 상의 클럭 신호의 상승 엣지 또는 하강 엣지일 수도 있다. 상기 패킷들은, 트랜잭션들을 개시하는 명령(command) 패킷들, 캐시 가간섭성을 유지하기 위한 프로브(probe) 패킷들, 프 로브들 및 명령들에 대한 응답으로부터의 응답 패킷들을 포함할 수도 있다.
프로세싱 노드들(1012A-1012D), 덧붙여서 메모리 제어기(memory controller) 및 인터페이스 로직은 하나 이상의 프로세서를 포함할 수도 있다. 즉, 달리 말하면, 프로세싱 노드는 적어도 하나의 프로세서를 포함하여 이루어지며, 메모리 및 다른 로직과의 통신을 위한 메모리 제어기를 옵션적으로 포함할 수도 있다. 좀더 상세하게는, 각각의 프로세싱 노드(1012A - 1012D)는 프로세서(100)의 복제물들(copies)을 하나 이상 포함할 수도 있다. 외부 인터페이스 유닛은, 메모리 제어기(1016) 뿐만 아니라 노드 내의 인터페이스 로직(1018)을 포함할 수도 있다.
메모리들(200A-200D)은 임의의 적절한 메모리 디바이스들을 포함하여 이루어질 수도 있다. 예를 들면, 메모리(200A-200D)는 하나 이상의 램버스 디램(RAMBUS Dram), 동기식 디램(Synchronous DRAM), SRAM(Static RAM), 등등을 포함하여 이루어질 수도 있다. 컴퓨터 시스템(900)의 어드레스 공간(address space)은 메모리들(200A-200D) 사이에서 분할된다. 각각의 프로세싱 노드(1012A-1012D)는, 어떤 어드레스들이 어떤 메모리들(200A-200D)에 매핑되었는지를 결정하는 메모리 맵을 포함할 수도 있는바, 따라서 특정 주소에 대한 메모리 요구가 어떤 프로세싱 노드로 라우트되어야 하는 지를 결정할 수 있다. 일 실시예에서는, 컴퓨터 시스템내의 하나의 어드레스에 대한 코히어런시 포인트(coherency point)는, 상기 어드레스에 대응하는 바이트들을 저장하고 있는 메모리에 접속된 메모리 제어기(1016A-1016D)이다. 즉, 메모리 제어기는, 대응하는 메모리(200A-200D)에 대한 각각의 메모리 액세스가 캐시 가간섭성 방식(cache coherent fashion)으로 수행되는 것을 보증하는 역 할을 한다. 메모리 제어기(1016A-1016D)는 메모리들(200A-200D)에 인터페이싱하기 위한 제어 회로들을 포함할 수도 있다. 또한, 메모리 제어기는 메모리 요청(memory requests)들을 큐잉(queuing)하기 위한 요청 큐(request queue)를 포함할 수도 있다.
인터페이스 로직(1018A-1018L)은, 링크로부터 패킷들을 수신하고, 링크로 전송될 패킷들을 버퍼링하는 다양한 버퍼들을 포함할 수도 있다. 컴퓨터 시스템(900)은 패킷들의 전송을 위해서 임의의 적절한 흐름 제어 매커니즘(flow control machanism)을 채택할 수도 있다. 예를 들어, 일실시예에서는, 각각의 인터페이스 로직(1018)은, 그 인터페이스 로직이 연결되어 있는 링크의 반대편 종단에서 수신기내의 버퍼의 각각의 타입의 갯수를 계수한 값을 저장한다. 수신하는 인터페이스 로직이 패킷을 저장할 빈 버퍼를 가지기 전에는, 인터페이스 로직은 패킷을 전송하지 않는다.
패킷을 전방으로 라우팅하여 수신하는 버퍼가 비어있게 되면, 수신측 인터페이스 로직은, 버퍼가 방금 비었다는 것을 나타내는 메시지를 송신측 인터페이스 로직으로 전송한다. 이러한 매커니즘은 "쿠폰-기반(coupon-based)" 시스템이라고도 언급될 수도 있다.
I/O 디바이스들(1020A-1020B)은 임의의 적절한 I/O 디바이스들일 수도 있다. 예를 들면, I/O 디바이스들(1020A-1020B)은, 상기 I/O 디바이스들이 접속될 수도 있는 또 다른 컴퓨터 시스템과의 통신을 위한 디바이스들을 포함할 수도 있다(예를 들어, 네트워크 인터페이스 카드 또는 모뎀). 더 나아가, I/O 디바이스들(1020A- 1020B)은, 비디오 가속기, 오디오 카드, 하드 디스크 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(Small Computer System Interface) 어댑터, 전화카드, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드를 포함할 수도 있다. "I/O 디바이스" 라는 용어와 "주변 디바이스(peripheral device)"라는 용어는 본 명세서에서 동일한 의미로 의도됨을 유의해야 한다.
본 명세서에서 사용된 "클럭 싸이클"이라는 용어는, 명령 프로세싱 파이프라인들의 다양한 스테이지들이 작업(tasks)들을 완료하는데 걸리는 시간 간격을 의미한다. 명령들 및 계산된 값들은, 클럭 싸이클을 정의하는 클럭 신호에 따라, 메모리 구성요소들(레지스터 또는 어레이들)에 의해 검색포착(capture)된다. 예를 들면, 메모리 구성 요소는 클럭 신호의 상승 엣지 또는 하강 엣지에 따라 값을 검색포착할 수도 있다.
상술한 논의에서 신호들은 "단언(aasert)" 되었다고 기술된다. 신호는, 정보의 특정한 단편를 표시하는 값을 운반중일 때, 단언된 상태라고 정의될 수도 있다. 특정 신호는, 신호가 이진 1 값을 운반할 때에 또는 대안적으로 이진 0 값을 운반할 때에, 단언되었다 라고 정의될 수도 있다.
일단, 본 명세서에서 개시된 내용들이 완전히 이해된다면, 해당 기술분야의 당업자에게는 다양한 변형예들 및 수정예들이 자명할 것이다. 다음의 청구항들은, 이러한 변형예들 및 수정예들을 포용하도록 해석되어야만 할 것이다.
일반적으로, 본 발명은 프로세서 분야에 적용될 수 있다.
Claims (10)
- 연산들을 발행하도록 구성된 스케줄러(118)와; 그리고상기 스케줄러(118)에 의해 발행된 메모리 연산들을 수신하도록 접속되고 상기 메모리 연산들을 실행하도록 구성된 로드 스토어 유닛(126C)을 포함하여 이루어지며,상기 로드 스토어 유닛(126C)은,소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하고;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측에 응답하여 상기 더 오래된 스토어 연산의 어드레스가 계산되기 이전에, 상기 소정의 로드 연산을 실행하고;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측이후에, 상기 소정의 로드 연산이 잘못 예측되었는지를 검출하고; 그리고상기 소정의 로드 연산이 잘못 예측되었다는 검출에 응답하여 상기 소정의 로드 연산이 재발행되어야함을 표시하는 재연(replay) 표시를 상기 스케줄러(118)에게 제공하도록 더 구성된 것을 특징으로 하는 마이크로프로세서.
- 제 1 항에 있어서,상기 로드 스토어 유닛(126C)은 복수개의 국부 예측기 엔트리들(335)을 포함하여 이루어진 국부 예측기(330)를 포함하고,상기 복수개의 국부 예측기 엔트리들(335)은 의존성 예측 값(337)을 포함하며, 그리고상기 로드 스토어 유닛(126C)은, 상기 소정의 로드 연산에 대응하는 소정의 국부 예측기 엔트리(335)에 액세스하고 상기 소정의 국부 예측기 엔트리(335)에 포함된 소정의 의존성 예측 값(337)을 평가함으로써, 상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 의존적인지를 예측하도록 더 구성되는 것을 특징으로 하는 마이크로프로세서.
- 제 1 항에 있어서,상기 로드 스토어 유닛(126C)은, 전역 히스토리 레지스터(342)와 복수개의 전역 예측기 엔트리(345)들을 포함하여 이루어진 전역 예측기(340)를 포함하며,상기 전역 히스토리 레지스터(342)는, 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성되며,상기 복수개의 전역 예측기 엔트리(345)들 각각은 의존 예측값(347)을 포함하며,상기 로드 스토어 유닛(126C)은, 상기 전역 히스토리 레지스터(342)에 대응하는 소정의 전역 예측기 엔트리(345)에 액세스하고 상기 소정의 전역 예측기 엔트리(345)에 포함된 소정의 의존 예측값(347)을 평가함으로서, 상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 의존적인지를 예측하도록 더 구성되는 것을 특징으로 하는 마이크로프로세서.
- 제 1 항에 있어서, 상기 로드 스토어 유닛(126C)은,복수개의 국부 예측기 엔트리들(335)을 포함하여 이루어진 국부 예측기(330) -여기서, 상기 복수개의 국부 예측 엔트리들(335) 각각은 의존 예측값(337)을 포함하며 -와; 그리고전역 히스토리 레지스터()342 및 복수개의 전역 예측기 엔트리들(345)을 포함하여 이루어진 전역 예측기(340) -여기서, 상기 전역 히스토리 레지스터(342)는 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성되며, 상기 복수개의 전역 예측 엔트리들(345) 각각은 의존 예측값(347)을 포함한다 -를 포함하여 이루어지며,그리고, 상기 로드 로드 스토어 유닛(126C)은,상기 소정의 로드 연산이 동적인(dynamic) 로드 연산인지를 판별하는 단계와;상기 소정의 로드 연산이 동적인 로드 연산이 아니라는 판별에 응답하여, 상기 소정의 로드 연산에 대응하는 소정의 국부 예측기 엔트리(335)에 액세스하고 상기 소정의 국부 예측기 엔트리(335)에 포함된 국부 의존 예측값(337)을 평가하는 단계와; 그리고상기 소정의 로드 연산이 동적인 로드 연산이라는 판별에 응답하여, 상기 전역 히스토리 레지스터(342)에 대응하는 소정의 전역 예측기 엔트리(345)에 액세스 하고 상기 소정의 전역 예측기 엔트리(345)에 포함된 전역 의존 예측값(347)을 평가하는 단계에 의하여, 상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 의존적인지를 예측하도록 더 구성되는 것을 특징으로 하는 마이크로프로세서.
- 제 1 항에 있어서,상기 로드 스토어 유닛(126C)에 접속된 메모리 파일(132)을 더 포함하여 이루어지고 제 1 어드레싱 패턴(206) 및 제 1 태그(208)를 저장하도록 구성된 엔트리(220)를 포함하며,상기 메모리 파일(132)은, 상기 엔트리(200)에 포함된 상기 제 1 어드레싱 패턴(206)을 소정의 로드 연산에 대응하는 제 2 어드레싱 패턴과 비교하도록 구성되며,만일, 상기 제 2 어드레싱 패턴이 상기 엔트리(200)에 저장된 상기 제 1 어드레싱 패턴(206)과 매치된다면, 상기 메모리 파일(132)은 상기 제 1 태그에 의해 식별된 데이터 값을 소정 로드 연산의 추론적인 결과에 링크하도록 구성되며, 그리고상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 의존적인지를 예측하는 것은, 상기 소정의 로드 연산에 대응하는 링크가 존재하는지를 검출하는 것을 포함하여 이루어진 것을 특징으로 하는 마이크로프로세서.
- 로드 연산을 수신하는 단계와;상기 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하는 단계와;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측에 응답하여 상기 더 오래된 스토어 연산의 어드레스가 계산되기 이전에, 상기 소정의 로드 연산을 실행하는 단계와;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측 이후에, 상기 소정의 로드 연산이 잘못 예측되었는지를 검출하는 단계와; 그리고상기 소정의 로드 연산이 잘못 예측되었다는 검출에 응답하여 상기 소정의 로드 연산이 재발행되어야함을 표시하는 재연(replay) 표시를 상기 스케줄러(118)에게 제공하는 단계를 포함하여 이루어진 방법.
- 제 6 항에 있어서, 상기 로드 연산이 상기 더 오래된 스토어 연산에 의존적인지를 예측하는 단계는,상기 로드 연산에 대응하는 국부 예측기 엔트리(335)에 액세스하는 단계와; 그리고상기 국부 예측기 엔트리(335)에 포함된 의존성 예측 값(337)을 평가하는 단계를 포함하여 이루어진 것을 특징으로 하는 방법.
- 제 6 항에 있어서, 상기 로드 연산이 상기 더 오래된 스토어 연산에 의존적 인지를 예측하는 단계는,전역 히스토리 레지스터(342)에 대응하는 전역 예측기 엔트리(345)에 액세스하는 단계와; 그리고상기 전역 예측기 엔트리(345)에 포함된 소정의 의존 예측값(347)을 평가하는 단계를 포함하여 이루어지며,상기 전역 히스토리 레지스터(342)는, 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성되는 것을 특징으로 하는 방법.
- 제 6 항에 있어서, 상기 로드 연산이 상기 더 오래된 스토어 연산에 의존적인지를 예측하는 단계는,상기 로드 연산이 동적인(dynamic) 로드 연산인지를 판별하는 단계와;상기 로드 연산이 동적인 로드 연산이 아니라는 판별에 응답하여, 상기 로드 연산에 대응하는 국부 예측기 엔트리(335)에 액세스하고 상기 국부 예측기 엔트리(335)에 포함된 국부 의존 예측값(337)을 평가하는 단계와; 그리고상기 로드 연산이 동적인 로드 연산이라는 판별에 응답하여, 전역 히스토리 레지스터(342)에 대응하는 전역 예측기 엔트리(345)에 액세스 하고 상기 전역 예측기 엔트리(345)에 포함된 전역 의존 예측값(347)을 평가하는 단계를 포함하여 이루어지며,상기 전역 히스토리 레지스터(342)는 복수개의 실행된 로드 연산들에 대응하는 복수개의 각각의 의존 값들을 저장하도록 구성된 것을 특징으로 하는 방법.
- 메모리(200)와; 그리고상기 메모리에 접속된 프로세서(100)를 포함하여 이루어지며,상기 프로세서(100)는,연산들을 발행하도록 구성된 스케줄러(118)와; 그리고상기 스케줄러(118)에 의해 발행된 메모리 연산들을 수신하도록 접속되고 상기 메모리 연산들을 실행하도록 구성된 로드 스토어 유닛(126C)을 포함하여 이루어지며,상기 로드 스토어 유닛(126C)은,소정의 로드 연산이 더 오래된 스토어 연산에 의존적인지를 예측하고;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측에 응답하여 상기 더 오래된 스토어 연산의 어드레스가 계산되기 이전에, 상기 소정의 로드 연산을 실행하고;상기 소정의 로드 연산이 상기 더 오래된 스토어 연산에 대해 독립적이라는 예측이후에, 상기 소정의 로드 연산이 잘못 예측되었는지를 검출하고; 그리고상기 소정의 로드 연산이 잘못 예측되었다는 검출에 응답하여 상기 소정의 로드 연산이 재발행되어야함을 표시하는 재연(replay) 표시를 상기 스케줄러(118)에게 제공하도록 더 구성된 것을 특징으로 하는 컴퓨터 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/936,296 | 2004-09-08 | ||
US10/936,296 US7415597B2 (en) | 2004-09-08 | 2004-09-08 | Processor with dependence mechanism to predict whether a load is dependent on older store |
PCT/US2005/022426 WO2006028555A2 (en) | 2004-09-08 | 2005-06-23 | Processor with dependence mechanism to predict whether a load is dependent on older store |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20070068351A true KR20070068351A (ko) | 2007-06-29 |
KR101192814B1 KR101192814B1 (ko) | 2012-10-18 |
Family
ID=35159735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077007256A KR101192814B1 (ko) | 2004-09-08 | 2005-06-23 | 로드가 선행하는 스토어에 의존적인지를 예측하는 의존성 매커니즘을 구비한 프로세서 |
Country Status (8)
Country | Link |
---|---|
US (1) | US7415597B2 (ko) |
JP (1) | JP5294632B2 (ko) |
KR (1) | KR101192814B1 (ko) |
CN (1) | CN100524206C (ko) |
DE (1) | DE112005002173B4 (ko) |
GB (1) | GB2432693B (ko) |
TW (1) | TWI383320B (ko) |
WO (1) | WO2006028555A2 (ko) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2881246B1 (fr) * | 2005-01-21 | 2007-03-23 | Meiosys Soc Par Actions Simpli | Procede perdictif de gestion, de journalisation ou de rejeu d'operations non deterministes au sein du deroulement d'un processus applicatif |
US7590825B2 (en) * | 2006-03-07 | 2009-09-15 | Intel Corporation | Counter-based memory disambiguation techniques for selectively predicting load/store conflicts |
JP5145809B2 (ja) * | 2007-07-31 | 2013-02-20 | 日本電気株式会社 | 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム |
US20090138890A1 (en) * | 2007-11-21 | 2009-05-28 | Arm Limited | Contention management for a hardware transactional memory |
US8285947B2 (en) * | 2009-02-06 | 2012-10-09 | Apple Inc. | Store hit load predictor |
US20100306509A1 (en) * | 2009-05-29 | 2010-12-02 | Via Technologies, Inc. | Out-of-order execution microprocessor with reduced store collision load replay reduction |
US20100325395A1 (en) * | 2009-06-19 | 2010-12-23 | Doug Burger | Dependence prediction in a memory system |
CN101907984B (zh) * | 2009-08-07 | 2014-10-29 | 威盛电子股份有限公司 | 指令处理方法以及其所适用的超纯量管线微处理器 |
CN101944012B (zh) * | 2009-08-07 | 2014-04-23 | 威盛电子股份有限公司 | 指令处理方法以及其所适用的超纯量管线微处理器 |
US8601240B2 (en) * | 2010-05-04 | 2013-12-03 | Oracle International Corporation | Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution |
US8918625B1 (en) | 2010-11-24 | 2014-12-23 | Marvell International Ltd. | Speculative scheduling of memory instructions in out-of-order processor based on addressing mode comparison |
US9442735B1 (en) * | 2012-04-13 | 2016-09-13 | Marvell International Ltd. | Method and apparatus for processing speculative, out-of-order memory access instructions |
US9128725B2 (en) * | 2012-05-04 | 2015-09-08 | Apple Inc. | Load-store dependency predictor content management |
US9600289B2 (en) | 2012-05-30 | 2017-03-21 | Apple Inc. | Load-store dependency predictor PC hashing |
US9384002B2 (en) * | 2012-11-16 | 2016-07-05 | International Business Machines Corporation | Speculative finish of instruction execution in a processor core |
US9158691B2 (en) | 2012-12-14 | 2015-10-13 | Apple Inc. | Cross dependency checking logic |
US9141803B2 (en) | 2013-02-26 | 2015-09-22 | Microsoft Technology Licensing, Llc | Self-healing of operating system components |
US9619750B2 (en) * | 2013-06-29 | 2017-04-11 | Intel Corporation | Method and apparatus for store dependence prediction |
US9524164B2 (en) | 2013-08-30 | 2016-12-20 | Advanced Micro Devices, Inc. | Specialized memory disambiguation mechanisms for different memory read access types |
US9286073B2 (en) * | 2014-01-07 | 2016-03-15 | Samsung Electronics Co., Ltd. | Read-after-write hazard predictor employing confidence and sampling |
US9710268B2 (en) | 2014-04-29 | 2017-07-18 | Apple Inc. | Reducing latency for pointer chasing loads |
US10514925B1 (en) | 2016-01-28 | 2019-12-24 | Apple Inc. | Load speculation recovery |
US10437595B1 (en) | 2016-03-15 | 2019-10-08 | Apple Inc. | Load/store dependency predictor optimization for replayed loads |
US20170329607A1 (en) * | 2016-05-16 | 2017-11-16 | International Business Machines Corporation | Hazard avoidance in a multi-slice processor |
US10528353B2 (en) | 2016-05-24 | 2020-01-07 | International Business Machines Corporation | Generating a mask vector for determining a processor instruction address using an instruction tag in a multi-slice processor |
US10467008B2 (en) | 2016-05-31 | 2019-11-05 | International Business Machines Corporation | Identifying an effective address (EA) using an interrupt instruction tag (ITAG) in a multi-slice processor |
US10740107B2 (en) * | 2016-06-01 | 2020-08-11 | International Business Machines Corporation | Operation of a multi-slice processor implementing load-hit-store handling |
US10684859B2 (en) * | 2016-09-19 | 2020-06-16 | Qualcomm Incorporated | Providing memory dependence prediction in block-atomic dataflow architectures |
CN108920191B (zh) * | 2018-06-05 | 2020-11-20 | 上海兆芯集成电路有限公司 | 处理器电路及其操作方法 |
US10929142B2 (en) * | 2019-03-20 | 2021-02-23 | International Business Machines Corporation | Making precise operand-store-compare predictions to avoid false dependencies |
US11243774B2 (en) | 2019-03-20 | 2022-02-08 | International Business Machines Corporation | Dynamic selection of OSC hazard avoidance mechanism |
US10606603B1 (en) * | 2019-04-08 | 2020-03-31 | Ye Tao | Methods and apparatus for facilitating a memory mis-speculation recovery |
CN112540794A (zh) * | 2019-09-20 | 2021-03-23 | 阿里巴巴集团控股有限公司 | 处理器核、处理器、装置和指令处理方法 |
US20220121447A1 (en) * | 2021-12-23 | 2022-04-21 | Intel Corporation | Hardening cpu predictors with cryptographic computing context information |
US20240354109A1 (en) * | 2023-04-21 | 2024-10-24 | Apple Inc. | Re-use of Speculative Load Instruction Results from Wrong Path |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5666506A (en) * | 1994-10-24 | 1997-09-09 | International Business Machines Corporation | Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle |
US5781752A (en) | 1996-12-26 | 1998-07-14 | Wisconsin Alumni Research Foundation | Table based data speculation circuit for parallel processing computer |
JPH11212788A (ja) * | 1998-01-28 | 1999-08-06 | Toshiba Corp | プロセッサのデータ供給装置 |
US6658554B1 (en) * | 1999-03-09 | 2003-12-02 | Wisconsin Alumni Res Found | Electronic processor providing direct data transfer between linked data consuming instructions |
US6502188B1 (en) * | 1999-11-16 | 2002-12-31 | Advanced Micro Devices, Inc. | Dynamic classification of conditional branches in global history branch prediction |
US6484254B1 (en) * | 1999-12-30 | 2002-11-19 | Intel Corporation | Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses |
US6542984B1 (en) * | 2000-01-03 | 2003-04-01 | Advanced Micro Devices, Inc. | Scheduler capable of issuing and reissuing dependency chains |
JP3729087B2 (ja) * | 2001-05-23 | 2005-12-21 | 日本電気株式会社 | マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 |
US7024545B1 (en) * | 2001-07-24 | 2006-04-04 | Advanced Micro Devices, Inc. | Hybrid branch prediction device with two levels of branch prediction cache |
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 |
US7058795B2 (en) * | 2002-06-25 | 2006-06-06 | Intel Corporation | Method and apparatus of branch prediction |
US6944744B2 (en) | 2002-08-27 | 2005-09-13 | Advanced Micro Devices, Inc. | Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor |
US6950925B1 (en) * | 2002-08-28 | 2005-09-27 | Advanced Micro Devices, Inc. | Scheduler for use in a microprocessor that supports data-speculative execution |
US7024537B2 (en) * | 2003-01-21 | 2006-04-04 | Advanced Micro Devices, Inc. | Data speculation based on addressing patterns identifying dual-purpose register |
US7165167B2 (en) * | 2003-06-10 | 2007-01-16 | Advanced Micro Devices, Inc. | Load store unit with replay mechanism |
-
2004
- 2004-09-08 US US10/936,296 patent/US7415597B2/en active Active
-
2005
- 2005-06-23 CN CNB2005800301525A patent/CN100524206C/zh active Active
- 2005-06-23 KR KR1020077007256A patent/KR101192814B1/ko active IP Right Grant
- 2005-06-23 WO PCT/US2005/022426 patent/WO2006028555A2/en active Application Filing
- 2005-06-23 DE DE112005002173T patent/DE112005002173B4/de active Active
- 2005-06-23 JP JP2007531161A patent/JP5294632B2/ja active Active
- 2005-06-23 GB GB0704887A patent/GB2432693B/en active Active
- 2005-08-08 TW TW094126693A patent/TWI383320B/zh active
Also Published As
Publication number | Publication date |
---|---|
US7415597B2 (en) | 2008-08-19 |
GB2432693B (en) | 2008-03-12 |
US20060095734A1 (en) | 2006-05-04 |
TW200620118A (en) | 2006-06-16 |
JP2008512769A (ja) | 2008-04-24 |
JP5294632B2 (ja) | 2013-09-18 |
GB2432693A (en) | 2007-05-30 |
GB0704887D0 (en) | 2007-04-18 |
TWI383320B (zh) | 2013-01-21 |
DE112005002173T5 (de) | 2007-09-27 |
DE112005002173B4 (de) | 2009-04-16 |
CN101014934A (zh) | 2007-08-08 |
WO2006028555A2 (en) | 2006-03-16 |
KR101192814B1 (ko) | 2012-10-18 |
CN100524206C (zh) | 2009-08-05 |
WO2006028555A3 (en) | 2006-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101192814B1 (ko) | 로드가 선행하는 스토어에 의존적인지를 예측하는 의존성 매커니즘을 구비한 프로세서 | |
US7028166B2 (en) | System and method for linking speculative results of load operations to register values | |
US7263600B2 (en) | System and method for validating a memory file that links speculative results of load operations to register values | |
KR100953207B1 (ko) | 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법 | |
JP4538462B2 (ja) | 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 | |
KR101093784B1 (ko) | 리플레이 메커니즘을 구비한 로드 저장 유닛 | |
KR101056820B1 (ko) | 연산들의 인-플라이트 인스턴스들이 데이터-추론마이크로프로세서 내에서 연산 재실행을 중단하는 것을방지하기 위한 시스템 및 방법 | |
US7266673B2 (en) | Speculation pointers to identify data-speculative operations in microprocessor | |
US7937569B1 (en) | System and method for scheduling operations using speculative data operands | |
US7222226B1 (en) | System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20151013 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170110 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20170919 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20180918 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20190917 Year of fee payment: 8 |